gnu: ocaml-uchar: Update to 0.0.2.
[jackhill/guix/guix.git] / doc / guix.fr.texi
1 \input texinfo
2 @c ===========================================================================
3 @c
4 @c This file was generated with po4a. Translate the source file.
5 @c
6 @c ===========================================================================
7 @c -*-texinfo-*-
8
9 @c %**start of header
10 @setfilename guix.fr.info
11 @documentencoding UTF-8
12 @documentlanguage fr
13 @frenchspacing on
14 @settitle Manuel de référence de GNU Guix
15 @c %**end of header
16
17 @include version-fr.texi
18
19 @c Identifier of the OpenPGP key used to sign tarballs and such.
20 @set OPENPGP-SIGNING-KEY-ID 3CE464558A84FDC69DB40CFB090B11993D9AEBB5
21 @set KEY-SERVER pool.sks-keyservers.net
22
23 @copying
24 Copyright @copyright{} 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic
25 Courtès@* Copyright @copyright{} 2013, 2014, 2016 Andreas Enge@* Copyright
26 @copyright{} 2013 Nikita Karetnikov@* Copyright @copyright{} 2014, 2015,
27 2016 Alex Kost@* Copyright @copyright{} 2015, 2016 Mathieu Lirzin@*
28 Copyright @copyright{} 2014 Pierre-Antoine Rault@* Copyright @copyright{}
29 2015 Taylan Ulrich Bayırlı/Kammer@* Copyright @copyright{} 2015, 2016, 2017
30 Leo Famulari@* Copyright @copyright{} 2015, 2016, 2017, 2018 Ricardo
31 Wurmus@* Copyright @copyright{} 2016 Ben Woodcroft@* Copyright @copyright{}
32 2016, 2017, 2018 Chris Marusich@* Copyright @copyright{} 2016, 2017, 2018
33 Efraim Flashner@* Copyright @copyright{} 2016 John Darrington@* Copyright
34 @copyright{} 2016, 2017 Nils Gillmann@* Copyright @copyright{} 2016, 2017,
35 2018 Jan Nieuwenhuizen@* Copyright @copyright{} 2016 Julien Lepiller@*
36 Copyright @copyright{} 2016 Alex ter Weele@* Copyright @copyright{} 2017,
37 2018 Clément Lassieur@* Copyright @copyright{} 2017, 2018 Mathieu Othacehe@*
38 Copyright @copyright{} 2017 Federico Beffa@* Copyright @copyright{} 2017,
39 2018 Carlo Zancanaro@* Copyright @copyright{} 2017 Thomas Danckaert@*
40 Copyright @copyright{} 2017 humanitiesNerd@* Copyright @copyright{} 2017
41 Christopher Allan Webber@* Copyright @copyright{} 2017, 2018 Marius Bakke@*
42 Copyright @copyright{} 2017 Hartmut Goebel@* Copyright @copyright{} 2017
43 Maxim Cournoyer@* Copyright @copyright{} 2017, 2018 Tobias Geerinckx-Rice@*
44 Copyright @copyright{} 2017 George Clemmer@* Copyright @copyright{} 2017
45 Andy Wingo@* Copyright @copyright{} 2017, 2018 Arun Isaac@* Copyright
46 @copyright{} 2017 nee@* Copyright @copyright{} 2018 Rutger Helling@*
47 Copyright @copyright{} 2018 Oleg Pykhalov@* Copyright @copyright{} 2018 Mike
48 Gerwitz@* Copyright @copyright{} 2018 Pierre-Antoine Rouby@* Copyright
49 @copyright{} 2018 Gábor Boskovits@* Copyright @copyright{} 2018 Florian
50 Pelz@* Copyright @copyright{} 2018 Laura Lazzati@* Copyright @copyright{}
51 2018 Alex Vong@*
52
53 Vous avez la permission de copier, distribuer ou modifier ce document sous
54 les termes de la Licence GNU Free Documentation, version 1.3 ou toute
55 version ultérieure publiée par la Free Software Foundation ; sans section
56 invariante, texte de couverture et sans texte de quatrième de couverture.
57 Une copie de la licence est incluse dans la section intitulée « GNU Free
58 Documentation License ».
59 @end copying
60
61 @dircategory Administration système
62 @direntry
63 * Guix: (guix.fr). Gérer les logiciels installés et la
64 configuration du système.
65 * guix package : (guix.fr)Invoquer guix package. Intaller, supprimer et
66 mettre à jour des
67 paquets.
68 * guix gc : (guix.fr)Invoquer guix gc. Récupérer de l'espace disque
69 inutilisé.
70 * guix pull : (guix.fr)Invoquer guix pull. Mettre à jour la liste des
71 paquets disponibles.
72 * guix system : (guix.fr)Invoquer guix system. Gérer la configuration du
73 système d'exploitation.
74 @end direntry
75
76 @dircategory Développement logiciel
77 @direntry
78 * guix environment : (guix.fr)Invoquer guix environment. Construire des
79 environnements
80 de construction
81 avec Guix.
82 * guix build : (guix.fr)Invoquer guix build. Construire des paquets.
83 * guix pack : (guix.fr) Invoquer guix pack. Créer des lots binaires.
84 @end direntry
85
86 @titlepage
87 @title Manuel de référence de GNU Guix
88 @subtitle Utiliser le gestionnaire de paquet fonctionnel GNU Guix
89 @author Les développeurs de GNU Guix
90
91 @page
92 @vskip 0pt plus 1filll
93 Édition @value{EDITION} @* @value{UPDATED} @*
94
95 @insertcopying
96 @end titlepage
97
98 @contents
99
100 @c *********************************************************************
101 @node Top
102 @top GNU Guix
103
104 Cette documentation décrit GNU Guix version @value{VERSION}, un outil de
105 gestion de paquets fonctionnel écrit pour le système GNU@.
106
107 @c TRANSLATORS: You can replace the following paragraph with information on
108 @c how to join your own translation team and how to report issues with the
109 @c translation.
110 Ce manuel est aussi disponible en anglais (@pxref{Top,,, guix, GNU Guix
111 Reference Manual}) et en allemand (@pxref{Top,,, guix.de, Referenzhandbuch
112 zu GNU Guix}). Si vous souhaitez nous aider à traduire ce manuel en
113 français, vous pouvez nous rejoindre sur le
114 @uref{https://translationproject.org/domain/guix-manual.html, projet de
115 traduction} et sur la liste de diffusion
116 @uref{https://listes.traduc.org/mailman/listinfo/traduc/,
117 traduc@@traduc.org}.
118
119 @menu
120 * Introduction:: Qu'est-ce que Guix ?
121 * Installation:: Installer Guix.
122 * Gestion de paquets:: Installation des paquets, mises à jour, etc.
123 * Interface de programmation:: Utiliser Guix en Scheme.
124 * Utilitaires:: Commandes de gestion de paquets.
125 * Distribution GNU:: Des logiciels pour un système GNU convivial.
126 * Contribuer:: Nous avons besoin de votre aide !
127
128 * Remerciements:: Merci !
129 * La licence GNU Free Documentation:: La licence de ce manuel.
130 * Index des concepts:: Les concepts.
131 * Index de programmation:: Types de données, fonctions et variables.
132
133 @detailmenu
134 --- Liste détaillée des nœuds ---
135
136
137
138 Installation
139
140
141
142 * Installation binaire:: Commencer à utiliser Guix en un rien de temps
143 !
144 * Prérequis:: Logiciels requis pour construire et lancer
145 Guix.
146 * Lancer la suite de tests:: Tester Guix.
147 * Paramétrer le démon:: Préparer l'environnement du démon de
148 construction.
149 * Invoquer guix-daemon:: Lancer le démon de construction.
150 * Réglages applicatifs:: Réglages spécifiques pour les application.
151
152 Paramétrer le démon
153
154
155
156 * Réglages de l'environnement de construction:: Préparer l'environnement
157 de construction isolé.
158 * Réglages du délestage du démon:: Envoyer des constructions à des
159 machines distantes.
160 * Support de SELinux:: Utiliser une politique SELinux pour le démon.
161
162 Gestion de paquets
163
164
165
166 * Fonctionnalités:: Comment Guix va rendre votre vie plus heureuse.
167 * Invoquer guix package:: Installation, suppression, etc.@: de paquets.
168 * Substituts:: Télécharger des binaire déjà construits.
169 * Des paquets avec plusieurs résultats:: Un seul paquet source, plusieurs
170 résultats.
171 * Invoquer guix gc:: Lancer le ramasse-miettes.
172 * Invoquer guix pull:: Récupérer la dernière version de Guix et de
173 la distribution.
174 * Canaux:: Personnaliser la collection des paquets.
175 * Inférieurs:: Interagir avec une autre révision de Guix.
176 * Invoquer guix describe:: Affiche des informations sur la révision Guix
177 actuelle.
178 * Invoquer guix pack:: Créer des lots de logiciels.
179 * Invoquer guix archive:: Exporter et importer des fichiers du dépôt.
180
181 Substituts
182
183
184
185 * Serveur de substituts officiel:: Une source particulière de substituts.
186 * Autoriser un serveur de substituts:: Comment activer ou désactiver les
187 substituts.
188 * Authentification des substituts:: Coment Guix vérifie les substituts.
189 * Paramètres de serveur mandataire:: Comment récupérer des substituts à
190 travers un serveur mandataire.
191 * Échec de substitution:: Qu'arrive-t-il quand la substitution échoue.
192 * De la confiance en des binaires:: Comment pouvez-vous avoir confiance en
193 un paquet binaire ?
194
195 Interface de programmation
196
197
198
199 * Définition des paquets:: Définir de nouveaux paquets.
200 * Systèmes de construction:: Spécifier comment construire les paquets.
201 * Le dépôt:: Manipuler le dépôt de paquets.
202 * Dérivations:: Interface de bas-niveau avec les dérivations
203 de paquets.
204 * La monad du dépôt:: Interface purement fonctionnelle avec le
205 dépôt.
206 * G-Expressions:: Manipuler les expressions de construction.
207 * Invoquer guix repl:: S'amuser avec Guix de manière interactive.
208
209 Définition des paquets
210
211
212
213 * Référence de paquet:: Le type de donnée des paquets.
214 * Référence d'origine:: Le type de données d'origine.
215
216 Utilitaires
217
218
219
220 * Invoquer guix build:: Construire des paquets depuis la ligne de
221 commande.
222 * Invoquer guix edit:: Modifier les définitions de paquets.
223 * Invoquer guix download:: Télécharger un fichier et afficher son hash.
224 * Invoquer guix hash:: Calculer le hash cryptographique d'un fichier.
225 * Invoquer guix import:: Importer des définitions de paquets.
226 * Invoquer guix refresh:: Mettre à jour les définitions de paquets.
227 * Invoquer guix lint:: Trouver des erreurs dans les définitions de
228 paquets.
229 * Invoquer guix size:: Profiler l'utilisation du disque.
230 * Invoquer guix graph:: Visualiser le graphe des paquets.
231 * Invoquer guix environment:: Mettre en place des environnements de
232 développement.
233 * Invoquer guix publish:: Partager des substituts.
234 * Invoquer guix challenge:: Défier les serveurs de substituts.
235 * Invoquer guix copy:: Copier vers et depuis un dépôt distant.
236 * Invoquer guix container:: Isolation de processus.
237 * Invoquer guix weather:: Mesurer la disponibilité des substituts.
238 * Invoquer guix processes:: Lister les processus clients.
239
240 Invoquer @command{guix build}
241
242
243
244 * Options de construction communes:: Options de construction pour la
245 plupart des commandes.
246 * Options de transformation de paquets:: Créer des variantes de paquets.
247 * Options de construction supplémentaires:: Options spécifiques à «
248 guix build ».
249 * Débogage des échecs de construction:: La vie d'un empaqueteur.
250
251 Distribution GNU
252
253
254
255 * Installation du système:: Installer le système d'exploitation complet.
256 * Configuration système:: Configurer le système d'exploitation.
257 * Documentation:: Visualiser les manuels d'utilisateur des
258 logiciels.
259 * Installer les fichiers de débogage:: Nourrir le débogueur.
260 * Mises à jour de sécurité:: Déployer des correctifs de sécurité
261 rapidement.
262 * Modules de paquets:: Les paquets du point de vu du programmeur.
263 * Consignes d'empaquetage:: Faire grandir la distribution.
264 * Bootstrapping:: GNU/Linux depuis zéro.
265 * Porter:: Cibler une autre plateforme ou un autre noyau.
266
267 Installation du système
268
269
270
271 * Limitations:: Ce à quoi vous attendre.
272 * Considérations matérielles:: Matériel supporté.
273 * Installation depuis une clef USB ou un DVD:: Préparer le média
274 d'installation.
275 * Préparer l'installation:: Réseau, partitionnement, etc.
276 * Effectuer l'installation:: Pour de vrai.
277 * Installer GuixSD dans une VM:: Jouer avec GuixSD@.
278 * Construire l'image d'installation:: D'où vient tout cela.
279
280 Configuration système
281
282
283
284 * Utiliser le système de configuration:: Personnaliser votre système
285 GNU@.
286 * Référence de système d'exploitation:: Détail sur la déclaration de
287 système d'exploitation.
288 * Systèmes de fichiers:: Configurer les montages de systèmes de
289 fichiers.
290 * Périphériques mappés:: Gestion des périphériques de bloc.
291 * Comptes utilisateurs:: Spécifier des comptes utilisateurs.
292 * Régionalisation:: Paramétrer la langue et les conventions
293 culturelles.
294 * Services:: Spécifier les services du système.
295 * Programmes setuid:: Programmes tournant avec les privilèges root.
296 * Certificats X.509:: Authentifier les serveurs HTTPS@.
297 * Name Service Switch:: Configurer le « name service switch » de la
298 libc.
299 * Disque de RAM initial:: Démarrage de Linux-Libre.
300 * Configuration du chargeur d'amorçage:: Configurer le chargeur
301 d'amorçage.
302 * Invoquer guix system:: Instantier une configuration du système.
303 * Lancer GuixSD dans une VM:: Comment lancer GuixSD dans une machine
304 virtuelle.
305 * Définir des services:: Ajouter de nouvelles définitions de services.
306
307 Services
308
309
310
311 * Services de base:: Services systèmes essentiels.
312 * Exécution de tâches planifiées:: Le service mcron.
313 * Rotation des journaux:: Le service rottlog.
314 * Services réseau:: Paramétres réseau, démon SSH, etc.
315 * Système de fenêtrage X:: Affichage graphique.
316 * Services d'impression:: Support pour les imprimantes locales et
317 distantes.
318 * Services de bureaux:: D-Bus et les services de bureaux.
319 * Services de son:: Services ALSA et Pulseaudio.
320 * Services de bases de données:: Bases SQL, clefs-valeurs, etc.
321 * Services de courriels:: IMAP, POP3, SMTP, et tout ça.
322 * Services de messagerie:: Services de messagerie.
323 * Services de téléphonie:: Services de téléphonie.
324 * Services de surveillance:: Services de surveillance.
325 * Services Kerberos:: Services Kerberos.
326 * Services web:: Services web.
327 * Services de certificats:: Certificats TLS via Let's Encrypt.
328 * Services DNS:: Démons DNS@.
329 * Services VPN:: Démons VPN
330 * Système de fichiers en réseau:: Services liés à NFS@.
331 * Intégration continue:: Le service Cuirass.
332 * Services de gestion de l'énergie:: Augmenter la durée de vie de la
333 batterie.
334 * Services audio:: MPD@.
335 * Services de virtualisation:: Services de virtualisation.
336 * Services de contrôle de version:: Fournit des accès distants à des
337 dépôts Git.
338 * Services de jeu:: Serveurs de jeu.
339 * Services divers:: D'autres services.
340
341 Définir des services
342
343
344
345 * Composition de services:: Le modèle de composition des services.
346 * Types service et services:: Types et services.
347 * Référence de service:: Référence de l'API@.
348 * Services Shepherd:: Un type de service particulier.
349
350 Consignes d'empaquetage
351
352
353
354 * Liberté logiciel:: Ce que la distribution peut contenir.
355 * Conventions de nommage:: Qu'est-ce qu'un bon nom ?
356 * Numéros de version:: Lorsque le nom n'est pas suffisant.
357 * Synopsis et descriptions:: Aider les utilisateurs à trouver le bon
358 paquet.
359 * Modules python:: Un peu de comédie anglaise.
360 * Modules perl:: Petites perles.
361 * Paquets java:: Pause café.
362 * Polices de caractères:: À fond les fontes.
363
364 Contribuer
365
366
367
368 * Construire depuis Git:: toujours le plus récent.
369 * Lancer Guix avant qu'il ne soit installé:: Astuces pour les hackers.
370 * La configuration parfaite:: Les bons outils.
371 * Style de code:: Hygiène du contributeur.
372 * Envoyer des correctifs:: Partager votre travail.
373
374 Style de code
375
376
377
378 * Paradigme de programmation:: Comment composer vos éléments.
379 * Modules:: Où stocker votre code ?
380 * Types de données et reconnaissance de motif:: Implémenter des
381 structures de données.
382 * Formatage du code:: Conventions d'écriture.
383
384 @end detailmenu
385 @end menu
386
387 @c *********************************************************************
388 @node Introduction
389 @chapter Introduction
390
391 @cindex but
392 GNU Guix@footnote{« Guix » se prononce comme « geeks » (en prononçant le
393 « s »), ou « ɡiːks » dans l'alphabet phonétique international (API).} est un
394 outil de gestion de paquets pour le système GNU@. Guix facilite pour les
395 utilisateurs non privilégiés l'installation, la mise à jour et la
396 suppression de paquets, la restauration à un ensemble de paquets précédent,
397 la construction de paquets depuis les sources et plus généralement aide à la
398 création et à la maintenance d'environnements logiciels.
399
400 @cindex interfaces utilisateurs
401 Guix fournit une interface de gestion des paquets par la ligne de commande
402 (@pxref{Invoquer guix package}), un ensemble d'utilitaires en ligne de
403 commande (@pxref{Utilitaires}) ainsi que des interfaces de programmation
404 Scheme (@pxref{Interface de programmation}).
405 @cindex démon de construction
406 Son @dfn{démon de construction} est responsable de la construction des
407 paquets pour les utilisateurs (@pxref{Paramétrer le démon}) et du
408 téléchargement des binaires pré-construits depuis les sources autorisées
409 (@pxref{Substituts}).
410
411 @cindex extensibilité de la distribution
412 @cindex personnalisation, des paquets
413 Guix contient de nombreuses définitions de paquet GNU et non-GNU qui
414 respectent tous les @uref{https://www.gnu.org/philosophy/free-sw.fr.html,
415 libertés de l'utilisateur}. Il est @emph{extensible} : les utilisateurs
416 peuvent écrire leurs propres définitions de paquets (@pxref{Définition des paquets}) et les rendre disponibles dans des modules de paquets
417 indépendants (@pxref{Modules de paquets}). Il est aussi
418 @emph{personnalisable} : les utilisateurs peuvent @emph{dériver} des
419 définitions de paquets spécialisées à partir de définitions existantes, même
420 depuis la ligne de commande (@pxref{Options de transformation de paquets}).
421
422 @cindex Distribution Système Guix
423 @cindex GuixSD
424 Vous pouvez installer GNU@tie{}Guix sur un système GNU/Linux existant pour
425 compléter les outils disponibles sans interférence (@pxref{Installation}) ou
426 vous pouvez l'utiliser à travers la @dfn{Distribution Système Guix} ou
427 GuixSD (@pxref{Distribution GNU}) distincte. Avec GNU@tie{}GuixSD, vous
428 @emph{déclarez} tous les aspects de la configuration du système
429 d'exploitation et Guix s'occupe de créer la configuration d'une manière
430 transactionnelle, reproductible et sans état (@pxref{Configuration
431 système}).
432
433 @cindex gestion de paquet fonctionnelle
434 @cindex isolation
435 Sous le capot, Guix implémente la discipline de @dfn{gestion de paquet
436 fonctionnel} inventé par Nix (@pxref{Remerciements}). Dans Guix le
437 processus de construction et d'installation des paquets est vu comme une
438 @emph{fonction} dans le sens mathématique du terme. Cette fonction a des
439 entrées (comme des scripts de construction, un compilateur et des
440 bibliothèques) et renvoie un paquet installé. En tant que fonction pure,
441 son résultat ne dépend que de ses entrées. Par exemple, il ne peut pas
442 faire référence à des logiciels ou des scripts qui n'ont pas été
443 explicitement passés en entrée. Une fonction de construction produit
444 toujours le même résultat quand on lui donne le même ensemble d'entrée.
445 Elle ne peut pas modifier l'environnement du système en cours d'exécution
446 d'aucune manière ; par exemple elle ne peut pas créer, modifier ou supprimer
447 des fichiers en dehors de ses répertoires de construction et
448 d'installation. Ce résultat s'obtient en lançant les processus de
449 construction dans des environnements isolés (ou des @dfn{conteneurs}) où
450 seules les entrées explicites sont visibles.
451
452 @cindex dépôt
453 Le résultat des fonctions de construction de paquets est mis en @dfn{cache}
454 dans le système de fichier, dans répertoire spécial appelé le @dfn{dépôt}
455 (@pxref{Le dépôt}). Chaque paquet est installé dans son répertoire propre
456 dans le dépôt — par défaut dans @file{/gnu/store}. Le nom du répertoire
457 contient un hash de toutes les entrées utilisées pour construire le paquet ;
458 ainsi, changer une entrée donnera un nom de répertoire différent.
459
460 Cette approche est le fondement des fonctionnalités les plus importante de
461 Guix : le support des mises à jour des paquets et des retours en arrière
462 transactionnels, l'installation différenciée par utilisateur et le ramassage
463 de miettes pour les paquets (@pxref{Fonctionnalités}).
464
465
466 @c *********************************************************************
467 @node Installation
468 @chapter Installation
469
470 @cindex installer Guix
471 @cindex site officiel
472 GNU Guix est disponible au téléchargement depuis son site web sur
473 @url{http://www.gnu.org/software/guix/}. Cette section décrit les
474 pré-requis logiciels de Guix ainsi que la manière de l'installer et de se
475 préparer à l'utiliser.
476
477 Remarquez que cette section concerne l'installation du gestionnaire de
478 paquet, ce qui se fait sur un système GNU/Linux en cours d'exécution. Si
479 vous souhaitez plutôt installer le système d'exploitation GNU complet,
480 @pxref{Installation du système}.
481
482 @cindex distro extérieure
483 @cindex répertoires liés aux distro extérieures
484
485 Lorsqu'il est installé sur un système GNU/Linux existant — ci-après nommé
486 @dfn{distro extérieure} — GNU@tie{}Guix complète les outils disponibles sans
487 interférence. Ses données se trouvent exclusivement dans deux répertoires,
488 typiquement @file{/gnu/store} et @file{/var/guix} ; les autres fichiers de
489 votre système comme @file{/etc} sont laissés intacts.
490
491 Une fois installé, Guix peut être mis à jour en lançant @command{guix pull}
492 (@pxref{Invoquer guix pull}).
493
494 @menu
495 * Installation binaire:: Commencer à utiliser Guix en un rien de temps
496 !
497 * Prérequis:: Logiciels requis pour construire et lancer
498 Guix.
499 * Lancer la suite de tests:: Tester Guix.
500 * Paramétrer le démon:: Préparer l'environnement du démon de
501 construction.
502 * Invoquer guix-daemon:: Lancer le démon de construction.
503 * Réglages applicatifs:: Réglages spécifiques pour les application.
504 @end menu
505
506 @node Installation binaire
507 @section Installation binaire
508
509 @cindex installer Guix depuis les binaires
510 @cindex script d'installation
511 Cette section décrit comment intaller Guix sur un système quelconque depuis
512 un archive autonome qui fournit les binaires pour Guix et toutes ses
513 dépendances. C'est souvent plus rapide que d'installer depuis les sources,
514 ce qui est décrit dans les sections suivantes. Le seul pré-requis est
515 d'avoir GNU@tie{}tar et Xz.
516
517 Nous fournissons un script
518 @uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh,
519 script d'intallation shell} qui automatise le téléchargement, l'installation
520 et la configuration initiale de Guix. Il devrait être lancé en tant
521 qu'utilisateur root.
522
523 L'installation se comme ceci :
524
525 @enumerate
526 @item
527 @cindex téléchargement du Guix binaire
528 Téléchargez l'archive binaire depuis
529 @indicateurl{https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{système}.tar.xz},
530 où @var{système} est @code{x86_64-linux} pour une machine @code{x86_64} sur
531 laquelle tourne déjà le noyau Linux, etc.
532
533 @c The following is somewhat duplicated in ``System Installation''.
534 Assurez-vous de télécharger le fichier @file{.sig} associé et de vérifier
535 l'authenticité de l'archive avec, comme ceci :
536
537 @example
538 $ wget https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{système}.tar.xz.sig
539 $ gpg --verify guix-binary-@value{VERSION}.@var{système}.tar.xz.sig
540 @end example
541
542 Si cette commande échoue parce que vous n'avez pas la clef publique requise,
543 lancez cette commande pour l'importer :
544
545 @example
546 $ gpg --keyserver @value{KEY-SERVER} \
547 --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
548 @end example
549
550 @noindent
551 @c end authentication part
552 et relancez la commande @code{gpg --verify}.
553
554 @item
555 Maintenant, vous devez devenir l'utilisateur @code{root}. En fonction de
556 votre distribution, vous devrez lancer @code{su -} ou @code{sudo -i}. En
557 tant que @code{root}, lancez :
558
559 @example
560 # cd /tmp
561 # tar --warning=no-timestamp -xf \
562 guix-binary-@value{VERSION}.@var{système}.tar.xz
563 # mv var/guix /var/ && mv gnu /
564 @end example
565
566 Cela crée @file{/gnu/store} (@pxref{Le dépôt}) and @file{/var/guix}. Ce
567 deuxième dossier contient un profil pret à être utilisé pour @code{root}
568 (voir les étapes suivantes).
569
570 Ne décompressez @emph{pas} l'archive sur un système Guix lancé car cela
571 écraserait ses propres fichiers essentiels.
572
573 L'option @code{--warning=no-timestamp} s'assure que GNU@tie{}tar ne produise
574 pas d'avertissement disant que « l'horodatage est trop vieux pour être
575 plausible » (ces avertissements étaient produits par GNU@tie{}tar 1.26 et
576 précédents ; les versions récentes n'ont pas ce problème). Cela vient du
577 fait que les fichiers de l'archive ont pour date de modification zéro (ce
578 qui signifie le 1er janvier 1970). C'est fait exprès pour s'assurer que le
579 contenu de l'archive ne dépende pas de la date de création, ce qui la rend
580 reproductible.
581
582 @item
583 Rendez le profil disponible sous @file{~root/.config/guix/current}, qui est
584 l'emplacement où @command{guix pull} installera les mises à jour
585 (@pxref{Invoquer guix pull}) :
586
587 @example
588 # mkdir -p ~root/.config/guix
589 # ln -sf /var/guix/profiles/per-user/root/current-guix \
590 ~root/.config/guix/current
591 @end example
592
593 Sourcez @file{etc/profile} pour augmenter @code{PATH} et les autres
594 variables d'environnement nécessaires :
595
596 @example
597 # GUIX_PROFILE="`echo ~root`/.config/guix/current" ; \
598 source $GUIX_PROFILE/etc/profile
599 @end example
600
601 @item
602 Créez le groupe et les comptes utilisateurs pour les utilisateurs de
603 construction comme expliqué plus loin (@pxref{Réglages de l'environnement de construction}).
604
605 @item
606 Lancez le démon et paramétrez-le pour démarrer automatiquement au démarrage.
607
608 Si votre distribution hôte utilise le système d'initialisation systemd, cela
609 peut se faire avec ces commandes :
610
611 @c Versions of systemd that supported symlinked service files are not
612 @c yet widely deployed, so we should suggest that users copy the service
613 @c files into place.
614 @c
615 @c See this thread for more information:
616 @c http://lists.gnu.org/archive/html/guix-devel/2017-01/msg01199.html
617
618 @example
619 # cp ~root/.config/guix/current/lib/systemd/system/guix-daemon.service \
620 /etc/systemd/system/
621 # systemctl start guix-daemon && systemctl enable guix-daemon
622 @end example
623
624 Si votre distribution hôte utilise le système d'initialisation Upstart :
625
626 @example
627 # initctl reload-configuration
628 # cp ~root/.config/guix/current/lib/upstart/system/guix-daemon.conf \
629 /etc/init/
630 # start guix-daemon
631 @end example
632
633 Sinon, vous pouvez toujours démarrer le démon manuellement avec :
634
635 @example
636 # ~root/.config/guix/current/bin/guix-daemon \
637 --build-users-group=guixbuild
638 @end example
639
640 @item
641 Rendez la commande @command{guix} disponible pour les autres utilisateurs
642 sur la machine, par exemple avec :
643
644 @example
645 # mkdir -p /usr/local/bin
646 # cd /usr/local/bin
647 # ln -s /var/guix/profiles/per-user/root/current-guix/bin/guix
648 @end example
649
650 C'est aussi une bonne idée de rendre la version Info de ce manuel disponible
651 ici :
652
653 @example
654 # mkdir -p /usr/local/share/info
655 # cd /usr/local/share/info
656 # for i in /var/guix/profiles/per-user/root/current-guix/share/info/* ;
657 do ln -s $i ; done
658 @end example
659
660 Comme cela, en supposant que @file{/usr/local/share/info} est dans le chemin
661 de recherche, lancer @command{info guix} ouvrira ce manuel (@pxref{Other
662 Info Directories,,, texinfo, GNU Texinfo}, pour plus de détails sur comment
663 changer le chemin de recherche de Info).
664
665 @item
666 @cindex substituts, autorisations
667 Pour utiliser les substituts de @code{hydra.gnu.org} ou l'un de ses mirroirs
668 (@pxref{Substituts}), autorisez-les :
669
670 @example
671 # guix archive --authorize < \
672 ~root/.config/guix/current/share/guix/hydra.gnu.org.pub
673 @end example
674
675 @item
676 Chaque utilisateur peut avoir besoin d'effectuer des étapes supplémentaires
677 pour que leur environnement Guix soit prêt à être utilisé,
678 @pxref{Réglages applicatifs}.
679 @end enumerate
680
681 Voilà, l'installation est terminée !
682
683 Vous pouvez confirmer que Guix fonctionne en installant un paquet d'exemple
684 dans le profil de root :
685
686 @example
687 # guix package -i hello
688 @end example
689
690 Le paquet @code{guix} doit rester disponible dans le profil de @code{root}
691 ou il pourrait être sujet au ramassage de miettes — dans ce cas vous vous
692 retrouveriez gravement handicapé par l'absence de la commande
693 @command{guix}. En d'autres termes, ne supprimez pas @code{guix} en lançant
694 @code{guix package -r guix}.
695
696 L'archive d'installation binaire peut être (re)produite et vérifiée
697 simplement en lançaint la commande suivante dans l'arborescence des sources
698 de Guix :
699
700 @example
701 make guix-binary.@var{system}.tar.xz
702 @end example
703
704 @noindent
705 ...@: which, in turn, runs:
706
707 @example
708 guix pack -s @var{system} --localstatedir \
709 --profile-name=current-guix guix
710 @end example
711
712 @xref{Invoquer guix pack}, pour plus d'info sur cet outil pratique.
713
714 @node Prérequis
715 @section Prérequis
716
717 Cette section dresse la liste des pré-requis pour la construction de Guix
718 depuis les sources. La procédure de construction pour Guix est la même que
719 pour les autres logiciels GNU, et n'est pas expliquée ici. Regardez les
720 fichiers @file{README} et @file{INSTALL} dans l'arborescence des sources de
721 Guix pour plus de détails.
722
723 GNU Guix dépend des paquets suivants :
724
725 @itemize
726 @item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.13 ou
727 supérieure, dont 2.2.x,
728 @item @url{https://notabug.org/cwebber/guile-gcrypt, Guile-Gcrypt}, version
729 0.1.0 ou supérieure,
730 @item
731 @uref{http://gnutls.org/, GnuTLS}, en particulier ses liaisons Guile
732 (@pxref{Guile Preparations, how to install the GnuTLS bindings for Guile,,
733 gnutls-guile, GnuTLS-Guile}),
734 @item
735 @uref{https://notabug.org/guile-sqlite3/guile-sqlite3, Guile-SQLite3},
736 version 0.1.0 ou supérieure,
737 @item
738 @c FIXME: Specify a version number once a release has been made.
739 @uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, d'août 2017 ou
740 ultérieur,
741 @item @url{http://zlib.net, zlib},
742 @item @url{http://www.gnu.org/software/make/, GNU Make}.
743 @end itemize
744
745 Les dépendances suivantes sont facultatives :
746
747 @itemize
748 @item
749 Installer @url{http://savannah.nongnu.org/projects/guile-json/, Guile-JSON}
750 vous permettra d'utiliser la commande @command{guix import pypi}
751 (@pxref{Invoquer guix import}). Il est surtout utile pour les développeurs
752 et pas pour les utilisateurs occasionnels.
753
754 @item
755 @c Note: We need at least 0.10.2 for 'channel-send-eof'.
756 Le support pour la décharge de construction (@pxref{Réglages du délestage du démon})
757 et @command{guix copy} (@pxref{Invoquer guix copy}) dépend de
758 @uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH}, version
759 0.10.2 ou ulltérieure.
760
761 @item
762 Lorsque @url{http://www.bzip.org, libbz2} est disponible,
763 @command{guix-daemon} peut l'utiliser pour compresser les journaux de
764 construction.
765 @end itemize
766
767 À moins que @code{--disable-daemon} ne soit passé à @command{configure}, les
768 paquets suivants sont aussi requis :
769
770 @itemize
771 @item @url{http://gnupg.org/, GNU libgcrypt},
772 @item @url{http://sqlite.org, SQLite 3},
773 @item @url{http://gcc.gnu.org, GCC's g++}, avec le support pour le
774 standard C++11.
775 @end itemize
776
777 @cindex répertoire d'état
778 Lorsque vous configurez Guix sur un système qui a déjà une installation de
779 Guix, assurez-vous de spécifier le même répertoire d'état que l'installation
780 existante avec l'option @code{--localstatedir} du script @command{configure}
781 (@pxref{Directory Variables, @code{localstatedir},, standards, GNU Coding
782 Standards}). Le script @command{configure} vous protège des mauvaises
783 configurations involontaires de @var{localstatedir} pour éviter que vous ne
784 corrompiez votre dépôt (@pxref{Le dépôt}).
785
786 @cindex Nix, compatibilité
787 Lorsque vous avez une installation fonctionnelle du
788 @url{http://nixos.org/nix/, gestionnaire de paquets Nix}, vous pouvez
789 configurer Guix avec @code{--disable-daemon}. Dan ce cas, Nix remplace les
790 trois dépendances au dessus.
791
792 Guix est compatible avec Nix, donc il est possible de partager le même dépôt
793 entre les deux. Pour cela, vous devez passer à @command{configure} non
794 seulement la même valeur de @code{--with-store-dir} mais aussi la même
795 valeur de @code{--localstatedir}. Cette dernière est nécessaires car elle
796 spécifie l'emplacement de la base de données qui stocke les métadonnées sur
797 le dépôt, entre autres choses. Les valeurs par défaut pour Nix sont
798 @code{--with-store-dir=/nix/store} et @code{--localstatedir=/nix/var}.
799 Remarquez que @code{--disable-daemon} n'est pas requis si votre but est de
800 partager le dépôt avec Nix.
801
802 @node Lancer la suite de tests
803 @section Lancer la suite de tests
804
805 @cindex suite de tests
806 Après avoir lancé @command{configure} et @code{make} correctement, c'est une
807 bonne idée de lancer la suite de tests. Elle peut aider à trouver des
808 erreurs avec la configuration ou l'environnement, ou des bogues dans Guix
809 lui-même — et vraiment, rapporter des échecs de tests est une bonne manière
810 d'aider à améliorer le logiciel. Pour lancer la suite de tests, tapez :
811
812 @example
813 make check
814 @end example
815
816 Les cas de tests peuvent être lancés en parallèle : vous pouvez utiliser
817 l'option @code{-j} de GNU@tie{}make pour accélérer les choses. Le premier
818 lancement peut prendre plusieurs minutes sur une machine récente ; les
819 lancements suivants seront plus rapides car le dépôt créé pour les tests
820 aura déjà plusieurs choses en cache.
821
822 Il est aussi possible de lancer un sous-ensemble des tests en définissant la
823 variable makefile @code{TESTS} comme dans cet exemple :
824
825 @example
826 make check TESTS="tests/store.scm tests/cpio.scm"
827 @end example
828
829 Par défaut, les résultats des tests sont affichés au niveau du fichier.
830 Pour voir les détails de chaque cas de test individuel, il est possible de
831 définire la variable makefile @code{SCM_LOG_DRIVER_FLAGS} comme dans cet
832 exemple :
833
834 @example
835 make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no"
836 @end example
837
838 Après un échec, envoyez un courriel à @email{bug-guix@@gnu.org} et attachez
839 le fichier @file{test-suite.log}. Précisez la version de Guix utilisée
840 ainsi que les numéros de version de ses dépendances (@pxref{Prérequis})
841 dans votre message.
842
843 Guix possède aussi une suite de tests de systèmes complets qui test des
844 instances complètes du système d'exploitation GuixSD@. Elle ne peut être
845 lancée qui sur un système où Guix est déjà installé, avec :
846
847 @example
848 make check-system
849 @end example
850
851 @noindent
852 Ou, de nouveau, en définissant @code{TESTS} pour choisir un sous-ensemble
853 des tests à lancer :
854
855 @example
856 make check-system TESTS="basic mcron"
857 @end example
858
859 Ces tests systèmes sont définis dans les modules @code{(gnu tests
860 @dots{})}. Ils fonctionnent en lançant les systèmes d'exploitation sous test
861 avec une instrumentation légère dans une machine virtuelle (VM). Ils
862 peuvent être intenses en terme de calculs ou plutôt rapides en fonction de
863 la disponibilité des substituts de leurs dépendances (@pxref{Substituts}).
864 Certains requièrent beaucoup d'espace disque pour contenir les images des
865 VM@.
866
867 De nouveau, en cas d'échec, envoyez tous les détails à
868 @email{bug-guix@@gnu.org}.
869
870 @node Paramétrer le démon
871 @section Paramétrer le démon
872
873 @cindex démon
874 Les opérations comme la construction d'un paquet ou le lancement du
875 ramasse-miettes sont toutes effectuées par un processus spécialisé, le
876 @dfn{démon de construction}, pour le compte des clients. Seul le démon peut
877 accéder au dépôt et à sa base de données associée. Ainsi, toute opération
878 manipulant le dépôt passe par le démon. Par exemple, les outils en ligne de
879 commande comme @command{guix package} et @command{guix build} communiquent
880 avec le démon (@i{via} des appels de procédures distantes) pour lui dire
881 quoi faire.
882
883 Les sections suivantes expliquent comment préparer l'environnement du démon
884 de construction. Voir aussi @ref{Substituts} pour apprendre comment
885 permettre le téléchargement de binaires pré-construits.
886
887 @menu
888 * Réglages de l'environnement de construction:: Préparer l'environnement
889 de construction isolé.
890 * Réglages du délestage du démon:: Envoyer des constructions à des
891 machines distantes.
892 * Support de SELinux:: Utiliser une politique SELinux pour le démon.
893 @end menu
894
895 @node Réglages de l'environnement de construction
896 @subsection Réglages de l'environnement de construction
897
898 @cindex environnement de construction
899 Dans une installation standard multi-utilisateurs, Guix et son démon — le
900 programme @command{guix-daemon} — sont installé par l'administrateur système
901 ; @file{/gnu/store} appartient à @code{root} et @command{guix-daemon} est
902 lancé en @code{root}. Les utilisateurs non-privilégiés peuvent utiliser les
903 outils Guix pour construire des paquets ou accéder au dépôt et le démon le
904 fera pour leur compte en s'assurant que le dépôt garde un état cohérent et
905 permet le partage des paquets déjà construits entre les utilisateurs.
906
907 @cindex utilisateurs de construction
908 Alors que @command{guix-daemon} tourne en @code{root}, vous n'avez pas
909 forcément envie que les processus de construction de paquets tournent aussi
910 en @code{root}, pour des raisons de sécurité évidentes. Pour éviter cela,
911 vous devriez créer une réserve spéciale d'@dfn{utilisateurs de construction}
912 que les processus de construction démarrés par le démon utiliseront. Ces
913 utilisateurs de construction n'ont pas besoin d'un shell ou d'un répertoire
914 personnel ; ils seront seulement utilisés quand le démon délaissera ses
915 privilèges @code{root} dans les processus de construction. En ayant
916 plusieurs de ces utilisateurs, vous permettez au démon de lancer des
917 processus de construction distincts sous des UID différent, ce qui garanti
918 qu'aucune interférence n'ait lieu entre les uns et les autres — une
919 fonctionnalité essentielle puisque les constructions sont supposées être des
920 fonctions pures (@pxref{Introduction}).
921
922 Sur un système GNU/Linux, on peut créer une réserve d'utilisateurs de
923 construction comme ceci (avec la syntaxe Bash et les commandes
924 @code{shadow}) :
925
926 @c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
927 @c for why `-G' is needed.
928 @example
929 # groupadd --system guixbuild
930 # for i in `seq -w 1 10`;
931 do
932 useradd -g guixbuild -G guixbuild \
933 -d /var/empty -s `which nologin` \
934 -c "Utilisateur de construction Guix $i" --system \
935 guixbuilder$i;
936 done
937 @end example
938
939 @noindent
940 Le nombre d'utilisateurs de construction détermine le nombre de tâches de
941 constructions qui peuvent tourner en parallèle, tel que spécifié par
942 l'option @option{--max-jobs} (@pxref{Invoquer guix-daemon,
943 @option{--max-jobs}}). Pour utiliser @command{guix system vm} et les
944 commandes liées, vous devrez ajouter les utilisateurs de construction au
945 groupe @code{kvm} pour qu'ils puissent accéder à @file{/dev/kvm} avec
946 @code{-G guixbuild,kvm} plutôt que @code{-G guixbuild} (@pxref{Invoquer guix system}).
947
948 Le programme @code{guix-daemon} peut ensuite être lancé en @code{root} avec
949 la commande suivante@footnote{Si votre machine utilise le système
950 d'initialisation systemd, copiez le fichier
951 @file{@var{prefix}/lib/systemd/system/guix-daemon.service} dans
952 @file{/etc/systemd/system} pour vous assurer que @command{guix-daemon} est
953 démarré automatiquement. De même, si votre machine utilise le système
954 d'initialisation Upstart, copiez le fichier
955 @file{@var{prefix}/lib/upstart/system/guix-daemon.conf} dans
956 @file{/etc/init}.} :
957
958 @example
959 # guix-daemon --build-users-group=guixbuild
960 @end example
961
962 @cindex chroot
963 @noindent
964 De cette façon, le démon démarre les processus de construction dans un
965 chroot, sous un des utilisateurs @code{guixbuilder}. Sur GNU/Linux par
966 défaut, l'environnement chroot ne contient rien d'autre que :
967
968 @c Keep this list in sync with libstore/build.cc! -----------------------
969 @itemize
970 @item
971 un répertoire @code{/dev} minimal, créé presque indépendamment du
972 @code{/dev} de l'hôte@footnote{« presque », parce que même si l'ensemble des
973 fichiers qui apparaissent dans le @code{/dev} du chroot sont déterminés à
974 l'avance, la plupart de ces fichiers ne peut pas être créée si l'hôte ne les
975 a pas.} ;
976
977 @item
978 le répertoire @code{/proc} ; il ne montre que les processus du conteneur car
979 on utilise une espace de nom séparé pour les PID ;
980
981 @item
982 @file{/etc/passwd} avec une entrée pour l'utilisateur actuel et une entrée
983 pour l'utilisateur @file{nobody} ;
984
985 @item
986 @file{/etc/group} avec une entrée pour le groupe de l'utilisateur ;
987
988 @item
989 @file{/etc/hosts} avec une entrée qui fait correspondre @code{localhost} à
990 @code{127.0.0.1} ;
991
992 @item
993 un répertoire @file{/tmp} inscriptible.
994 @end itemize
995
996 Vous pouvez influencer le répertoire où le démon stocke les arbres de
997 construction @i{via} la variable d'environnement @code{TMPDIR}. Cependant,
998 l'arbre de construction dans le chroot sera toujours appelé
999 @file{/tmp/guix-build-@var{nom}.drv-0}, où @var{nom} est le nom de la
1000 dérivation — p.@: ex.@: @code{coreutils-8.24}. De cette façon, la valeur de
1001 @code{TMPDIR} ne fuite pas à l'intérieur des environnements de construction,
1002 ce qui évite des différences lorsque le processus de construction retient le
1003 nom de leur répertoire de construction.
1004
1005 @vindex http_proxy
1006 Le démon tient aussi compte de la variable d'environnement @code{http_proxy}
1007 pour ses téléchargements HTTP, que ce soit pour les dérivations à sortie
1008 fixes (@pxref{Dérivations}) ou pour les substituts (@pxref{Substituts}).
1009
1010 Si vous installez Guix en tant qu'utilisateur non-privilégié, il est
1011 toujours possible de lancer @command{guix-daemon} si vous passez
1012 @code{--disable-chroot}. Cependant, les processus de construction ne seront
1013 pas isolés les uns des autres ni du reste du système. Ainsi les processus
1014 de construction peuvent interférer les uns avec les autres, et peuvent
1015 accéder à des programmes, des bibliothèques et d'autres fichiers présents
1016 sur le système — ce qui rend plus difficile de les voir comme des fonctions
1017 @emph{pures}.
1018
1019
1020 @node Réglages du délestage du démon
1021 @subsection Utiliser le dispositif de déchargement
1022
1023 @cindex déchargement
1024 @cindex crochet de construction
1025 Si vous le souhaitez, le démon de construction peut @dfn{décharger} des
1026 constructions de dérivations sur d'autres machines Guix avec le @dfn{crochet
1027 de construction} @code{offload}@footnote{Cette fonctionnalité n'est
1028 disponible que si @uref{https://github.com/artyom-poptsov/guile-ssh,
1029 Guile-SSH} est présent.}. Lorsque cette fonctionnalité est activée, Guix
1030 lit une liste de machines de constructions spécifiée par l'utilisateur dans
1031 @file{/etc/guix/machines.scm} ; à chaque fois qu'une construction est
1032 demandée, par exemple par @code{guix build}, le démon essaie de la décharger
1033 sur une des machines qui satisfont les contraintes de la dérivation, en
1034 particulier le type de système, p.@: ex.@: @file{x86_64-linux}. Les
1035 prérequis manquants pour la construction sont copiés par SSH sur la machine
1036 de construction qui procède ensuite à la construction ; si elle réussi, les
1037 sorties de la construction sont copiés vers la machine de départ.
1038
1039 Le fichier @file{/etc/guix/machines.scm} ressemble typiquement à cela :
1040
1041 @example
1042 (list (build-machine
1043 (name "eightysix.example.org")
1044 (system "x86_64-linux")
1045 (host-key "ssh-ed25519 AAAAC3Nza@dots{}")
1046 (user "bob")
1047 (speed 2.)) ;très rapide !
1048
1049 (build-machine
1050 (name "meeps.example.org")
1051 (system "mips64el-linux")
1052 (host-key "ssh-rsa AAAAB3Nza@dots{}")
1053 (user "alice")
1054 (private-key
1055 (string-append (getenv "HOME")
1056 "/.ssh/identity-for-guix"))))
1057 @end example
1058
1059 @noindent
1060 Dans l'exemple ci-dessus nous spécifions une liste de deux machines de
1061 construction, une pour l'architecture @code{x86_64} et une pour
1062 l'architecture @code{mips64el}.
1063
1064 En fait, ce fichier est — et ça ne devrait pas vous surprendre ! — un
1065 fichier Scheme qui est évalué au démarrage du crochet @code{offload}. Sa
1066 valeur de retour doit être une liste d'objets @code{build-machine}. Même si
1067 cet exemple montre une liste fixée de machines de construction, on pourrait
1068 imaginer par exemple utiliser DNS-SD pour renvoyer une liste de machines de
1069 constructions potentielles découvertes sur le réseau local
1070 (@pxref{Introduction, Guile-Avahi,, guile-avahi, Using Avahi in Guile Scheme
1071 Programs}). Le type de données @code{build-machine} est détaillé plus bas.
1072
1073 @deftp {Type de données} build-machine
1074 Ce type de données représente les machines de construction sur lesquelles le
1075 démon peut décharger des constructions. Les champs importants sont :
1076
1077 @table @code
1078
1079 @item name
1080 Le nom d'hôte de la machine distante.
1081
1082 @item system
1083 Le type de système de la machine distante, p.@: ex.@: @code{"x86_64-linux"}.
1084
1085 @item user
1086 Le compte utilisateur à utiliser lors de la connexion à la machine distante
1087 par SSH@. Remarquez que la paire de clef SSH ne doit @emph{pas} être
1088 protégée par mot de passe pour permettre des connexions non-interactives.
1089
1090 @item host-key
1091 Cela doit être la @dfn{clef d'hôte SSH publique} de la machine au format
1092 OpenSSH@. Elle est utilisée pour authentifier la machine lors de la
1093 connexion. C'est une longue chaîne qui ressemble à cela :
1094
1095 @example
1096 ssh-ed25519 AAAAC3NzaC@dots{}mde+UhL hint@@example.org
1097 @end example
1098
1099 Si la machine utilise le démon OpenSSH, @command{sshd}, la clef d'hôte se
1100 trouve dans un fichier comme @file{/etc/ssh/ssh_host_ed25519_key.pub}.
1101
1102 Si la machine utilise le démon SSH de GNU@tie{}lsh, la clef d'hôte est dans
1103 @file{/etc/lsh/host-key.pub} ou un fichier similaire. Elle peut être
1104 convertie au format OpenSSH avec @command{lsh-export-key}
1105 (@pxref{Converting keys,,, lsh, LSH Manual}) :
1106
1107 @example
1108 $ lsh-export-key --openssh < /etc/lsh/host-key.pub
1109 ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV@dots{}
1110 @end example
1111
1112 @end table
1113
1114 Il y a un certain nombre de champs facultatifs que vous pouvez remplir :
1115
1116 @table @asis
1117
1118 @item @code{port} (par défaut : @code{22})
1119 Numéro de port du serveur SSH sur la machine.
1120
1121 @item @code{private-key} (par défaut : @file{~root/.ssh/id_rsa})
1122 Le fichier de clef privée SSH à utiliser lors de la connexion à la machine,
1123 au format OpenSSH@. Cette clef ne doit pas être protégée par phrase de
1124 passe.
1125
1126 Remarquez que la valeur par défaut est la clef privée @emph{du compte
1127 root}. Assurez-vous qu'elle existe si vous utilisez la valeur par défaut.
1128
1129 @item @code{compression} (par défaut : @code{"zlib@@openssh.com,zlib"})
1130 @itemx @code{compression-level} (par défaut : @code{3})
1131 Les méthodes de compression au niveau SSH et le niveau de compression
1132 demandé.
1133
1134 Remarquez que le déchargement utilise la compression SSH pour réduire la
1135 bande passante utilisée lors du transfert vers et depuis les machines de
1136 construction.
1137
1138 @item @code{daemon-socket} (par défaut : @code{"/var/guix/daemon-socket/socket"})
1139 Le nom de fichier du socket Unix-domain sur lequel @command{guix-daemon}
1140 écoute sur cette machine.
1141
1142 @item @code{parallel-builds} (par défaut : @code{1})
1143 Le nombre de constructions qui peuvent tourner simultanément sur la machine.
1144
1145 @item @code{speed} (par défaut : @code{1.0})
1146 Un « facteur de vitesse relatif ». L'ordonnanceur des constructions tendra
1147 à préférer les machines avec un plus grand facteur de vitesse.
1148
1149 @item @code{features} (par défaut : @code{'()})
1150 Une liste de chaînes qui contient les fonctionnalités spécifiques supportées
1151 par la machine. Un exemple est @code{"kvm"} pour les machines qui ont le
1152 module Linux KVM et le support matériel correspondant. Les dérivations
1153 peuvent demander des fonctionnalités par leur nom et seront orchestrées sur
1154 les machines de construction correspondantes.
1155
1156 @end table
1157 @end deftp
1158
1159 La commande @code{guile} doit être dans le chemin de recherche des machines
1160 de construction. En plus, les modules Guix doivent se trouver dans
1161 @code{$GUILE_LOAD_PATH} sur la machine de construction. Vous pouvez
1162 vérifier si c'est le cas en lançant :
1163
1164 @example
1165 ssh build-machine guile -c "'(use-modules (guix config))'"
1166 @end example
1167
1168 Il reste une dernière chose à faire maintenant que @file{machines.scm} est
1169 en place. Comme expliqué ci-dessus, lors du déchargement les fichiers sont
1170 transférés entre les dépôts des machines. Pour que cela fonctionne, vous
1171 devez d'abord générer une paire de clef sur chaque machine pour permettre au
1172 démon d'exporter des archives signées des fichiers de son dépôt
1173 (@pxref{Invoquer guix archive}) :
1174
1175 @example
1176 # guix archive --generate-key
1177 @end example
1178
1179 @noindent
1180 Chaque machine de construction doit autoriser la clef de la machine
1181 maîtresse pour qu'ils acceptent les éléments de dépôt de celle-ci :
1182
1183 @example
1184 # guix archive --authorize < master-public-key.txt
1185 @end example
1186
1187 @noindent
1188 De même, la machine maîtresse doit autoriser les clefs de chaque machine de
1189 construction.
1190
1191 Toute cette histoire de clefs permet d'exprimer la confiance mutuelle
1192 deux-à-deux entre le maître et les machines de construction. Concrètement,
1193 lorsque le maître reçoit des fichiers d'une machine de construction (et
1194 vice-versa), son démon de construction s'assure qu'ils sont authentiques,
1195 n'ont pas été modifiés par un tiers et qu'il sont signés par un clef
1196 autorisée.
1197
1198 @cindex test du déchargement
1199 Pour tester que votre paramétrage fonctionne, lancez cette commande sur le
1200 nœud maître :
1201
1202 @example
1203 # guix offload test
1204 @end example
1205
1206 Cela essaiera de se connecter à toutes les machines de construction
1207 spécifiées dans @file{/etc/guix/machines.scm}, s'assurera que Guile et les
1208 modules Guix sont disponibles sur toutes les machines et tentera d'exporter
1209 vers la machine et d'importer depuis elle, et rapportera toute erreur
1210 survenu pendant le processus.
1211
1212 Si vous souhaitez tester un fichier de machines différent, spécifiez-le sur
1213 la ligne de commande :
1214
1215 @example
1216 # guix offload test machines-qualif.scm
1217 @end example
1218
1219 Enfin, vous pouvez tester un sous-ensemble de machines dont le nom
1220 correspond à une expression rationnelle comme ceci :
1221
1222 @example
1223 # guix offload test machines.scm '\.gnu\.org$'
1224 @end example
1225
1226 @cindex statut du déchargement
1227 Pour afficher la charge actuelle de tous les hôtes de construction, lancez
1228 cette commande sur le nœud principal :
1229
1230 @example
1231 # guix offload status
1232 @end example
1233
1234
1235 @node Support de SELinux
1236 @subsection Support de SELinux
1237
1238 @cindex SELinux, politique du démon
1239 @cindex contrôle d'accès obligatoire, SELinux
1240 @cindex sécurité, guix-daemon
1241 Guix inclus un fichier de politique SELniux dans @file{etc/guix-daemon.cil}
1242 qui peut être installé sur un système où SELinux est activé pour que les
1243 fichiers Guix soient étiquetés et pour spécifier le comportement attendu du
1244 démon. Comme GuixSD ne fournit pas de politique SELniux de base, la
1245 politique du démon ne peut pas être utilisée sur GuixSD@.
1246
1247 @subsubsection Installer la politique SELinux
1248 @cindex SELinux, installation de la politique
1249 Pour installer la politique, lancez cette commande en root :
1250
1251 @example
1252 semodule -i etc/guix-daemon.cil
1253 @end example
1254
1255 Puis ré-étiquetez le système de fichier avec @code{restorecon} ou par un
1256 mécanisme différent fournit par votre système.
1257
1258 Une fois la politique installée, le système de fichier ré-étiqueté et le
1259 démon redémarré, il devrait être lancé dans le contexte
1260 @code{guix_daemon_t}. Vous pouvez le confirmer avec la commande suivante :
1261
1262 @example
1263 ps -Zax | grep guix-daemon
1264 @end example
1265
1266 Surveillez les fichiers journaux de SELinux pendant que vous lancez une
1267 commande comme @code{guix build hello} pour vous convaincre que SELniux
1268 permet toutes les opérations nécessaires.
1269
1270 @subsubsection Limitations
1271 @cindex SELinux, limites
1272
1273 La politique n'et pas parfaite. Voici une liste de limitations et de
1274 bizarreries qui vous devriez prendre en compte avant de déployer la
1275 politique SELinux fournie pour le démon Guix.
1276
1277 @enumerate
1278 @item
1279 @code{guix_daemon_socket_t} n'est pas vraiment utilisé. Aucune des
1280 opérations sur les sockets n'impliquent de contextes qui ont quoi que ce
1281 soit à voir avec @code{guix_daemon_socket_t}. Ça ne fait pas de mal d'avoir
1282 une étiquette inutilisée, mais il serait préférable de définir des règles
1283 sur les sockets uniquement pour cette étiquette.
1284
1285 @item
1286 @code{guix gc} ne peut pas accéder à n'importe quel lien vers les profils.
1287 Par conception, l'étiquette de fichier de la destination d'un lien
1288 symbolique est indépendant de l'étiquette du lien lui-même. Bien que tous
1289 les profils sous $localstatedir aient une étiquette, les liens vers ces
1290 profils héritent de l'étiquette du répertoire dans lequel ils se trouvent.
1291 Pour les liens dans le répertoire personnel cela sera @code{user_home_t}.
1292 Mais pour les liens du répertoire personnel de l'utilisateur root, ou
1293 @file{/tmp}, ou du répertoire de travail du serveur HTTP, etc, cela ne
1294 fonctionnera pas. SELinux empêcherait @code{guix gc} de lire et de suivre
1295 ces liens.
1296
1297 @item
1298 La fonctionnalité du démon d'écouter des connexions TCP pourrait ne plus
1299 fonctionner. Cela demande des règles supplémentaires car SELinux traite les
1300 sockets réseau différemment des fichiers.
1301
1302 @item
1303 Actuellement tous les fichiers qui correspondent à l'expression rationnelle
1304 @code{/gnu/store/.+-(guix-.+|profile)/bin/guix-daemon} reçoivent l'étiquette
1305 @code{guix_daemon_exec_t} ; cela signifie que @emph{tout} fichier avec ce
1306 nom dans n'importe quel profil serait autorisé à se lancer dans le domaine
1307 @code{guix_daemon_t}. Ce n'est pas idéal. Un attaquant pourrait construire
1308 un paquet qui fournit cet exécutable et convaincre un utilisateur de
1309 l'installer et de le lancer, ce qui l'élève dans le domaine
1310 @code{guix_daemon_t}. À ce moment SELinux ne pourrait pas l'empêcher
1311 d'accéder à des fichiers autorisés pour les processus de ce domaine.
1312
1313 Nous pourrions générer une politique bien plus restrictive à l'installation,
1314 pour que seuls les noms de fichiers @emph{exacts} de l'exécutable
1315 @code{guix-daemon} actuellement installé soit étiqueté avec
1316 @code{guix_daemon_exec_t}, plutôt que d'utiliser une expression rationnelle
1317 plus large. L'inconvénient c'est que root devrait installer ou mettre à
1318 jour la politique à l'installation à chaque fois que le paquet Guix qui
1319 fournit l'exécutable @code{guix-daemon} effectivement exécuté est mis à
1320 jour.
1321 @end enumerate
1322
1323 @node Invoquer guix-daemon
1324 @section Invoquer @command{guix-daemon}
1325
1326 Le programme @command{guix-daemon} implémente toutes les fonctionnalités
1327 d'accès au dépôt. Cela inclus le lancement des processus de construction,
1328 le lancement du ramasse-miettes, la demande de disponibilité des résultats
1329 de construction, etc. Il tourne normalement en @code{root} comme ceci :
1330
1331 @example
1332 # guix-daemon --build-users-group=guixbuild
1333 @end example
1334
1335 @noindent
1336 Pour des détails sur son paramétrage, @pxref{Paramétrer le démon}.
1337
1338 @cindex chroot
1339 @cindex conteneur, environnement de construction
1340 @cindex environnement de construction
1341 @cindex constructions reproductibles
1342 Par défaut, @command{guix-daemon} lance les processus de construction sous
1343 différents UID récupérés depuis le groupe de construction spécifié avec
1344 @code{--build-users-group}. En plus, chaque processus de construction est
1345 lancé dans un environnement chroot qui ne contient que le sous-ensemble du
1346 dépôt dont le processus de construction dépend, tel que spécifié par sa
1347 dérivation (@pxref{Interface de programmation, dérivation}), plus un
1348 ensemble de répertoires systèmes spécifiques. Par défaut ce dernier
1349 contient @file{/dev} et @file{/dev/pts}. De plus, sous GNU/Linux,
1350 l'environnement de construction est un @dfn{conteneur} : en plus d'avoir sa
1351 propre arborescence du système de fichier, elle a un espace de montage
1352 séparé, son propre espace de PID, son espace de réseau, etc. Cela aide à
1353 obtenir des constructions reproductibles (@pxref{Fonctionnalités}).
1354
1355 Lorsque le démon effectue une construction pour le compte de l'utilisateur,
1356 il crée un répertoire sous @file{/tmp} ou sous le répertoire spécifié par sa
1357 variable d'environnement @code{TMPDIR}. Ce répertoire est partagé avec le
1358 conteneur pendant la durée de la construction, bien que dans le conteneur,
1359 l'arborescence de construction est toujours appelée
1360 @file{/tmp/guix-build-@var{name}.drv-0}.
1361
1362 Le répertoire de construction est automatiquement supprimé à la fin, à moins
1363 que la construction n'ait échoué et que le client ait spécifié
1364 @option{--keep-failed} (@pxref{Invoquer guix build,
1365 @option{--keep-failed}}).
1366
1367 Le démon écoute les connexions et démarre un sous-processus pour chaque
1368 session démarrée par un client (l'une des sous-commandes de
1369 @command{guix}). La commande @command{guix processes} vous permet d'obtenir
1370 un aperçu de l'activité sur votre système en affichant chaque session et
1371 client actif. @xref{Invoquer guix processes} pour plus d'informations.
1372
1373 Les options en ligne de commande suivantes sont disponibles :
1374
1375 @table @code
1376 @item --build-users-group=@var{groupe}
1377 Prendre les utilisateurs de @var{group} pour lancer les processus de
1378 construction (@pxref{Paramétrer le démon, utilisateurs de construction}).
1379
1380 @item --no-substitutes
1381 @cindex substituts
1382 Ne pas utiliser de substitut pour les résultats de la construction.
1383 C'est-à-dire, toujours construire localement plutôt que de permettre le
1384 téléchargement de binaires pré-construits (@pxref{Substituts}).
1385
1386 Lorsque le démon tourne avec @code{--no-substitutes}, les clients peuvent
1387 toujours activer explicitement la substitution @i{via} l'appel de procédure
1388 distante @code{set-build-options} (@pxref{Le dépôt}).
1389
1390 @item --substitute-urls=@var{urls}
1391 @anchor{daemon-substitute-urls}
1392 Considèrer @var{urls} comme la liste séparée par des espaces des URL des
1393 sources de substituts par défaut. Lorsque cette option est omise,
1394 @indicateurl{https://mirror.hydra.gnu.org https://hydra.gnu.org} est utilisé
1395 (@code{mirror.hydra.gnu.org} est un mirroire de @code{hydra.gnu.org}).
1396
1397 Cela signifie que les substituts sont téléchargés depuis les @var{urls},
1398 tant qu'ils sont signés par une signature de confiance (@pxref{Substituts}).
1399
1400 @cindex crochet de construction
1401 @item --no-build-hook
1402 Ne pas utiliser le @dfn{crochet de construction}.
1403
1404 Le crochet de construction est un programme d'aide qui le démon peut
1405 démarrer et auquel soumettre les requêtes de construction. Ce mécanisme est
1406 utilisé pour décharger les constructions à d'autres machines (@pxref{Réglages du délestage du démon}).
1407
1408 @item --cache-failures
1409 Mettre les échecs de construction en cache. Par défaut, seules les
1410 constructions réussies sont mises en cache.
1411
1412 Lorsque cette option est utilisée, @command{guix gc --list-failures} peut
1413 être utilisé pour demander l'ensemble des éléments du dépôt marqués comme
1414 échoués ; @command{guix gc --clear-failures} vide la liste des éléments
1415 aillant échoué. @xref{Invoquer guix gc}.
1416
1417 @item --cores=@var{n}
1418 @itemx -c @var{n}
1419 Utiliser @var{n} cœurs CPU pour construire chaque dérivation ; @code{0}
1420 signifie autant que possible.
1421
1422 La valeur par défaut est @code{0}, mais elle peut être modifiée par les
1423 clients comme avec l'option @code{--cores} de @command{guix build}
1424 (@pxref{Invoquer guix build}).
1425
1426 L'effet est de définir la variable d'environnement @code{NIX_BUILD_CORES}
1427 dans le processus de construction, qui peut ensuite l'utiliser pour
1428 exploiter le parallélisme en interne — par exemple en lançant @code{make
1429 -j$NIX_BUILD_CORES}.
1430
1431 @item --max-jobs=@var{n}
1432 @itemx -M @var{n}
1433 Permettre au plus @var{n} travaux de construction en parallèle. La valeur
1434 par défaut est @code{1}. La mettre à @code{0} signifie qu'aucune
1435 construction ne sera effectuée localement ; à la place, le démon déchargera
1436 les constructions (@pxref{Réglages du délestage du démon}) ou échouera.
1437
1438 @item --max-silent-time=@var{secondes}
1439 Lorsque le processus de construction ou de substitution restent silencieux
1440 pendant plus de @var{secondes}, le terminer et rapporter une erreur de
1441 construction.
1442
1443 La valeur par défaut est @code{0}, ce qui désactive le délai.
1444
1445 La valeur spécifiée ici peut être modifiée par les clients (@pxref{Options de construction communes, @code{--max-silent-time}}).
1446
1447 @item --timeout=@var{secondes}
1448 De même, lorsque le processus de construction ou de substitution dure plus
1449 de @var{secondes}, le terminer et rapporter une erreur de construction.
1450
1451 La valeur par défaut est @code{0}, ce qui désactive le délai.
1452
1453 La valeur spécifiée ici peut être modifiée par les clients (@pxref{Options de construction communes, @code{--timeout}}).
1454
1455 @item --rounds=@var{N}
1456 Construire chaque dérivations @var{N} fois à la suite, et lever une erreur
1457 si les résultats de construction consécutifs ne sont pas identiques
1458 bit-à-bit. Remarquez que ce paramètre peut être modifié par les clients
1459 comme @command{guix build} (@pxref{Invoquer guix build}).
1460
1461 Lorsqu'utilisé avec @option{--keep-failed}, la sourtie différente est gardée
1462 dans le dépôt sous @file{/gnu/store/@dots{}-check}. Cela rend plus facile
1463 l'étude des différences entre les deux résultats.
1464
1465 @item --debug
1466 Produire une sortie de débogage.
1467
1468 Cela est utile pour déboguer des problèmes de démarrage du démon, mais
1469 ensuite elle peut être modifiée par les clients, par exemple par l'option
1470 @code{--verbosity} de @command{guix build} (@pxref{Invoquer guix build}).
1471
1472 @item --chroot-directory=@var{rép}
1473 Ajouter @var{rép} au chroot de construction
1474
1475 Cela peut changer le résultat d'un processus de construction — par exemple
1476 s'il utilise une dépendance facultative trouvée dans @var{rép} lorsqu'elle
1477 est disponible ou pas sinon. Pour cette raison, il n'est pas recommandé
1478 d'utiliser cette option. À la place, assurez-vous que chaque dérivation
1479 déclare toutes les entrées dont elle a besoin.
1480
1481 @item --disable-chroot
1482 Désactive les constructions dans un chroot.
1483
1484 Utiliser cette option n'est pas recommandé car, de nouveau, elle permet aux
1485 processus de construction d'accéder à des dépendances non déclarées. Elle
1486 est nécessaire cependant lorsque @command{guix-daemon} tourne en tant
1487 qu'utilisateur non privilégié.
1488
1489 @item --log-compression=@var{type}
1490 Compresser les journaux de construction suivant le @var{type}, parmi
1491 @code{gzip}, @code{bzip2} ou @code{none}.
1492
1493 À moins que @code{--lose-logs} ne soit utilisé, tous les journaux de
1494 construction sont gardés dans @var{localstatedir}. Pour gagner de la place,
1495 le démon les compresse automatiquement avec bzip2 par défaut.
1496
1497 @item --disable-deduplication
1498 @cindex déduplication
1499 Désactiver la « déduplication » automatique des fichiers dans le dépôt.
1500
1501 Par défaut, les fichiers ajoutés au dépôt sont automatiquement « dédupliqués
1502 » : si un nouveau fichier est identique à un autre fichier trouvé dans le
1503 dépôt, le démon en fait un lien en dur vers l'autre fichier. Cela réduit
1504 considérablement l'utilisation de l'espace disque au prix d'une charge en
1505 entrée/sortie plus grande à la fin d'un processus de construction. Cette
1506 option désactive cette optimisation.
1507
1508 @item --gc-keep-outputs[=yes|no]
1509 Dire si le ramasse-miettes (GC) doit garder les sorties des dérivations
1510 utilisées.
1511
1512 @cindex racines du GC
1513 @cindex racines du ramasse-miettes
1514 Lorsqu'elle est à « yes », le GC gardera les sorties de toutes les
1515 dérivations — les fichiers @code{.drv} — accessibles dans le dépôt. La
1516 valeur par défaut est « no », ce qui signifie que les sorties des
1517 dérivations ne sont gardées que si elles sont accessibles à partir d'une
1518 racine du GC. @xref{Invoquer guix gc} pour plus d'informations sur les
1519 racines du GC.
1520
1521 @item --gc-keep-derivations[=yes|no]
1522 Dire si le ramasse-miettes (GC) doit garder les dérivations correspondant à
1523 des sorties utilisées.
1524
1525 Lorsqu'elle est à « yes », comme c'est le cas par défaut, le GC garde les
1526 dérivations — c.-à-d.@: les fichiers @file{.drv} — tant qu'au moins une de
1527 leurs sorties est utilisée. Cela permet aux utilisateurs de garder une
1528 trace de l'origine des éléments du dépôt. Le mettre à « no » préserve un
1529 peu d'espace disque.
1530
1531 De cette manière, avec @code{--gc-keep-derivations} à « yes »,
1532 l'accessibilité des sorties s'étend des sorties aux dérivations et avec
1533 @code{--gc-keep-outputs} à « yes », elle s'étend des dérivations aux
1534 sorties. Quand les deux options sont à « yes », le GC gardera tous les
1535 prérequis de construction (les sources, le compilateur, les bibliothèques,
1536 et les autres outils de construction) des objets accessibles dans le dépôt,
1537 indépendamment du fait qu'ils soient ou non accessibles depuis une racine du
1538 GC. Cela est pratique pour les développeurs car ça leur fait gagner du
1539 temps de reconstruction et de téléchargement.
1540
1541 @item --impersonate-linux-2.6
1542 Sur les système basés sur Linux, se faire passer pour Linux 2.6. Cela
1543 signifie que l'appel système du noyau @code{uname} rapportera 2.6 comme
1544 numéro de version.
1545
1546 Cela peut être utile pour construire des programmes qui dépendent
1547 (généralement sans fondement) du numéro de version du noyau.
1548
1549 @item --lose-logs
1550 Ne pas garder les journaux de construction. Par défaut ils sont gardés dans
1551 @code{@var{localstatedir}/guix/log}.
1552
1553 @item --system=@var{système}
1554 Supposer que @var{système} est le type de système actuel. Par défaut c'est
1555 la paire architecture-noyau trouvée à la configuration, comme
1556 @code{x86_64-linux}.
1557
1558 @item --listen=@var{extrémité}
1559 Écouter les connexions sur @var{extrémité}. @var{extrémité} est interprété
1560 comme un nom de fichier d'un socket Unix-domain s'il commence par @code{/}
1561 (barre oblique). Sinon, @var{extrémité} est interprété comme un nom de
1562 domaine ou d'hôte et un port sur lequel écouter. Voici quelques exemples :
1563
1564 @table @code
1565 @item --listen=/gnu/var/daemon
1566 Écouter les connexions sur le socket Unix-domain @file{/gnu/var/daemon} en
1567 le créant si besoin.
1568
1569 @item --listen=localhost
1570 @cindex démon, accès distant
1571 @cindex accès distant au démon
1572 @cindex démon, paramètres de grappes
1573 @cindex grappes, paramètres du démon
1574 Écouter les connexions TCP sur l'interface réseau correspondant à
1575 @code{localhost} sur le port 44146.
1576
1577 @item --listen=128.0.0.42:1234
1578 Écouter les connexions TCP sur l'interface réseau correspondant à
1579 @code{128.0.0.42} sur le port 1234.
1580 @end table
1581
1582 Cette option peut être répétée plusieurs fois, auquel cas
1583 @command{guix-daemon} accepte des connexions sur toutes les extrémités
1584 spécifiées. Les utilisateurs peuvent dire aux commandes clientes à quelle
1585 extrémité se connecter en paramétrant la variable d'environnement
1586 @code{GUIX_DAEMON_SOCKET} (@pxref{Le dépôt, @code{GUIX_DAEMON_SOCKET}}).
1587
1588 @quotation Remarque
1589 Le protocole du démon est @emph{non authentifié et non chiffré}. Utiliser
1590 @code{--listen=@var{host}} est adapté sur des réseaux locaux, comme pour des
1591 grappes de serveurs, où seuls des nœuds de confiance peuvent se connecter au
1592 démon de construction. Dans les autres cas où l'accès à distance au démon
1593 est requis, nous conseillons d'utiliser un socket Unix-domain avec SSH@.
1594 @end quotation
1595
1596 Lorsque @code{--listen} est omis, @command{guix-daemon} écoute les
1597 connexions sur le socket Unix-domain situé à
1598 @file{@var{localstatedir}/guix/daemon-socket/socket}.
1599 @end table
1600
1601
1602 @node Réglages applicatifs
1603 @section Réglages applicatifs
1604
1605 @cindex distro extérieure
1606 Lorsque vous utilisez Guix par dessus une distribution GNU/Linux différente
1607 de GuixSD — ce qu'on appelle une @dfn{distro externe} — quelques étapes
1608 supplémentaires sont requises pour que tout soit en place. En voici
1609 certaines.
1610
1611 @subsection Régionalisation
1612
1613 @anchor{locales-and-locpath}
1614 @cindex régionalisation, en dehors de GuixSD
1615 @vindex LOCPATH
1616 @vindex GUIX_LOCPATH
1617 Les paquets installés @i{via} Guix n'utiliseront pas les données de
1618 régionalisation du système hôte. À la place, vous devrez d'abord installer
1619 l'un des paquets linguistiques disponibles dans Guix puis définir la
1620 variable d'environnement @code{GUIX_LOCPATH} :
1621
1622 @example
1623 $ guix package -i glibc-locales
1624 $ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
1625 @end example
1626
1627 Remarquez que le paquet @code{glibc-locales} contient les données pour tous
1628 les environnement linguistiques supportés par la GNU@tie{}libc et pèse
1629 environ 110@tie{}Mo. Autrement, les @code{glibc-utf8-locales} est plus
1630 petit mais limité à quelques environnements UTF-8.
1631
1632 La variable @code{GUIX_LOCPATH} joue un rôle similaire à @code{LOCPATH}
1633 (@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library Reference
1634 Manual}). Il y a deux différences importantes cependant :
1635
1636 @enumerate
1637 @item
1638 @code{GUIX_LOCPATH} n'est compris que par la libc dans Guix et pas par la
1639 libc fournie par les distros externes. Ainsi, utiliser @code{GUIX_LOCPATH}
1640 vous permet de vous assurer que les programmes de la distro externe ne
1641 chargeront pas de données linguistiques incompatibles.
1642
1643 @item
1644 La libc ajoute un suffixe @code{/X.Y} à chaque entrée de
1645 @code{GUIX_LOCPATH}, où @code{X.Y} est la version de la libc — p.@: ex.@:
1646 @code{2.22}. Cela signifie que, si votre profile Guix contient un mélange
1647 de programmes liés avec des versions différentes de la libc, chaque version
1648 de la libc essaiera de charger les environnements linguistiques dans le bon
1649 format.
1650 @end enumerate
1651
1652 Cela est important car le format des données linguistiques utilisés par
1653 différentes version de la libc peuvent être incompatibles.
1654
1655 @subsection Name Service Switch
1656
1657 @cindex name service switch, glibc
1658 @cindex NSS (name service switch), glibc
1659 @cindex nscd (name service caching daemon)
1660 @cindex name service caching daemon (nscd)
1661 Lorsque vous utilisez Guix sur une distro externe, nous @emph{recommandons
1662 fortement} que ce système fasse tourner le @dfn{démon de cache de service de
1663 noms} de la bibliothèque C de GNU, @command{nscd}, qui devrait écouter sur
1664 le socket @file{/var/run/nscd/socket}. Sans cela, les applications
1665 installées avec Guix peuvent échouer à résoudre des noms d'hôtes ou
1666 d'utilisateurs, ou même planter. Les paragraphes suivants expliquent
1667 pourquoi.
1668
1669 @cindex @file{nsswitch.conf}
1670 La bibliothèque C de GNU implémente un @dfn{name service switch} (NSS), qui
1671 est un mécanisme d'extension pour les « résolutions de noms » en général :
1672 résolution de nom d'hôte, de compte utilisateur et plus (@pxref{Name Service Switch,,, libc, The GNU C Library Reference Manual}).
1673
1674 @cindex Network information service (NIS)
1675 @cindex NIS (Network information service)
1676 Comme il est extensible, NSS supporte des @dfn{greffons} qui fournissent une
1677 nouvelle implémentation de résolution de nom : par exemple le greffon
1678 @code{nss-mdns} permet la résolution de noms d'hôtes en @code{.local}, le
1679 greffon @code{nis} permet la résolution de comptes utilisateurs avec le
1680 Network Information Service (NIS), etc. Ces « services de recherches »
1681 supplémentaires sont configurés au niveau du système dans
1682 @file{/etc/nsswitch.conf}, et tous les programmes qui tournent sur ce
1683 système honorent ces paramètres (@pxref{NSS Configuration File,,, libc, The
1684 GNU C Reference Manual})
1685
1686 Lorsqu'ils essayent d'effectuer une résolution de nom — par exemple en
1687 appelant la fonction @code{getaddrinfo} en C — les applications essayent
1688 d'abord de se connecter au nscd ; en cas de réussite, nscd effectue la
1689 résolution de nom pour eux. Si le nscd ne tourne pas, alors ils effectue la
1690 résolution eux-même, en changeant les service de résolution dans leur propre
1691 espace d'adressage et en le lançant. Ce services de résolution de noms —
1692 les fichiers @file{libnns_*.so} — sont @code{dlopen}és mais ils peuvent
1693 provenir de la bibliothèque C du système, plutôt que de la bibliothèque C à
1694 laquelle l'application est liée (la bibliothèque C de Guix).
1695
1696 Et c'est là que se trouve le problème : si votre application est liée à la
1697 bibliothèque C de Guix (disons, glibc-2.24) et essaye de charger les
1698 greffons NSS d'une autre bibliothèque C (disons, @code{libnss_mdns.so} pour
1699 glibc-2.22), il est très probable qu'elle plante ou que sa résolution de nom
1700 échoue de manière inattendue.
1701
1702 Lancer @command{nscd} sur le système, entre autres avantages, élimine ce
1703 problème d'incompatibilité binaire car ces fichiers @code{libnss_*.so} sont
1704 chargés par le processus @command{nscd}, pas par l'application elle-même.
1705
1706 @subsection Polices X11
1707
1708 @cindex polices
1709 La majorité des applications graphiques utilisent fontconfig pour trouver et
1710 charger les police et effectuer le rendu côté client X11. Le paquet
1711 @code{fontconfig} dans Guix cherche les polices dans
1712 @file{$HOME/.guix-profile} par défaut. Ainsi, pour permettre aux
1713 applications graphiques installées avec Guix d'afficher des polices, vous
1714 devez aussi installer des polices avec Guix. Les paquets de polices
1715 essentiels sont @code{gs-fonts}, @code{font-dejavu} et
1716 @code{font-gnu-freefont-ttf}.
1717
1718 Pour afficher des textes écrits en chinois, en japonais ou en coréen dans
1719 les applications graphiques, installez @code{font-adobe-source-han-sans} ou
1720 @code{font-wqy-zenhei}. Le premier a plusieurs sorties, une par famille de
1721 langue (@pxref{Des paquets avec plusieurs résultats}). Par exemple, la commande
1722 suivante installe les polices pour le chinois :
1723
1724 @example
1725 guix package -i font-adobe-source-han-sans:cn
1726 @end example
1727
1728 @cindex @code{xterm}
1729 Les vieux programmes comme @command{xterm} n'utilisent pas fontconfig et
1730 s'appuient sur le rendu du côté du serveur. Ces programmes ont besoin de
1731 spécifier le nom complet de la police en utlisant XLFD (X Logical Font
1732 Description), comme ceci :
1733
1734 @example
1735 -*-dejavu sans-medium-r-normal-*-*-100-*-*-*-*-*-1
1736 @end example
1737
1738 Pour pouvoir utiliser ces noms complets avec les polices TrueType installées
1739 dans votre profil Guix, vous devez étendre le chemin des polices du serveur
1740 X :
1741
1742 @c Note: 'xset' does not accept symlinks so the trick below arranges to
1743 @c get at the real directory. See <https://bugs.gnu.org/30655>.
1744 @example
1745 xset +fp $(dirname $(readlink -f ~/.guix-profile/share/fonts/truetype/fonts.dir))
1746 @end example
1747
1748 @cindex @code{xlsfonts}
1749 Ensuite, vous pouvez lancer @code{xlsfonts} (du paquet @code{xlsfonts}) pour
1750 vous assurer que vos polices TrueType y sont listées.
1751
1752 @cindex @code{fc-cache}
1753 @cindex cache de polices
1754 Après l'installation des polices vous devrez peut-être rafraîchir le cache
1755 des polices pour pouvoir les utiliser dans les applications. Ça s'applique
1756 aussi lorsque les applications installées avec Guix n'ont pas l'air de
1757 trouver les polices. Pour forcer la reconstruction du cache de polices
1758 lancez @code{fc-cache -f}. La commande @code{fc-cache} est fournie par le
1759 paquet @code{fontconfig}.
1760
1761 @subsection Certificats X.509
1762
1763 @cindex @code{nss-certs}
1764 Le paquet @code{nss-certs} fournit les certificats X.509 qui permettent aux
1765 programmes d'authentifier les serveurs web par HTTPS@.
1766
1767 Lorsque vous utilisez Guix sur une distribution externe, vous pouvez
1768 installer ce paquet et définir les variables d'environnement adéquates pour
1769 que les paquets sachent où trouver les certificats. @xref{Certificats X.509}, pour des informations détaillées.
1770
1771 @subsection Paquets emacs
1772
1773 @cindex @code{emacs}
1774 Lorsque vous installez les paquets Emacs avec Guix, les fichiers elisp
1775 peuvent être placés soit dans
1776 @file{$HOME/.guix-profile/share/emacs/site-lisp/} soit dans des
1777 sous-répertoires de
1778 @file{$HOME/.guix-profile/share/emacs/site-lisp/guix.d/}. Ce dernier existe
1779 car il existe potentiellement des milliers de paquets Emacs et stocker leurs
1780 fichiers dans un seul répertoire peut ne pas être fiable (à cause de
1781 conflits de noms). Donc on pense qu'utiliser un répertoire séparé est une
1782 bonne idée. C'est très similaire à la manière dont le système de paquet
1783 d'Emacs organise la structure de fichiers (@pxref{Package Files,,, emacs,
1784 The GNU Emacs Manual}).
1785
1786 Par défaut, Emacs (installé avec Guix) « sait » où ces paquets ce trouvent,
1787 donc vous n'avez pas besoin de le configurer. Si, pour quelque raison que
1788 ce soit, vous souhaitez éviter de charger automatiquement les paquets Emacs
1789 installés avec Guix, vous pouvez le faire en lançaint Emacs avec l'option
1790 @code{--no-site-file} (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
1791
1792 @subsection La chaîne d'outils GCC
1793
1794 @cindex GCC
1795 @cindex ld-wrapper
1796
1797 Guix offre des paquets de compilateurs individuels comme @code{gcc} mais si
1798 vous avez besoin d'une chaîne de compilation complète pour compiler et lier
1799 du code source, vous avez en fait besoin du paquet @code{gcc-toolchain}. Ce
1800 paquet fournit une chaîne d'outils GCC pour le développement C/C++, dont GCC
1801 lui-même, la bibliothèque C de GNU (les en-têtes et les binaires, plus les
1802 symboles de débogage dans la sortie @code{debug}), Binutils et une enveloppe
1803 pour l'éditeur de liens.
1804
1805 @cindex tentative d'utiliser une bibliothèque impure, message d'erreur
1806
1807 Le rôle de l'enveloppe est d'inspecter les paramètres @code{-L} et @code{-l}
1808 passés à l'éditeur de liens, d'ajouter des arguments @code{-rpath}
1809 correspondants et d'invoquer le véritable éditeur de liens avec ce nouvel
1810 ensemble d'arguments. Par défaut, l'enveloppe refuse de lier des
1811 bibliothèques en dehors du dépôt pour assure la « pureté ». Cela peut être
1812 embêtant lorsque vous utilisez la chaîne d'outils pour lier des
1813 bibliothèques locales. Pour permettre des références à des bibliothèques en
1814 dehors du dépôt, vous devrez définir la variable d'environnement
1815 @code{GUIX_LD_WRAPPER_ALLOW_IMPURITIES}.
1816
1817 @c TODO What else?
1818
1819 @c *********************************************************************
1820 @node Gestion de paquets
1821 @chapter Gestion de paquets
1822
1823 @cindex paquets
1824 Le but de GNU Guix est de permettre à ses utilisateurs d'installer, mettre à
1825 jour et supprimer facilement des paquets logiciels sans devoir connaître
1826 leur procédure de construction ou leurs dépendances. Guix va aussi plus
1827 loin que ces fonctionnalités évidentes.
1828
1829 Ce chapitre décrit les principales fonctionnalités de Guix, ainsi que des
1830 outils de gestion des paquets qu'il fournit. En plus de l'interface en
1831 ligne de commande décrite en dessous de (@pxref{Invoquer guix package,
1832 @code{guix package}}), vous pouvez aussi utiliser l'interface Emacs-Guix
1833 (@pxref{Top,,, emacs-guix, Le manuel de référence de emacs-guix}), après
1834 avoir installé le paquet @code{emacs-guix} (lancez la commande @kbd{M-x
1835 guix-help} pour le démarrer) :
1836
1837 @example
1838 guix package -i emacs-guix
1839 @end example
1840
1841 @menu
1842 * Fonctionnalités:: Comment Guix va rendre votre vie plus heureuse.
1843 * Invoquer guix package:: Installation, suppression, etc.@: de paquets.
1844 * Substituts:: Télécharger des binaire déjà construits.
1845 * Des paquets avec plusieurs résultats:: Un seul paquet source, plusieurs
1846 résultats.
1847 * Invoquer guix gc:: Lancer le ramasse-miettes.
1848 * Invoquer guix pull:: Récupérer la dernière version de Guix et de
1849 la distribution.
1850 * Canaux:: Personnaliser la collection des paquets.
1851 * Inférieurs:: Interagir avec une autre révision de Guix.
1852 * Invoquer guix describe:: Affiche des informations sur la révision Guix
1853 actuelle.
1854 * Invoquer guix pack:: Créer des lots de logiciels.
1855 * Invoquer guix archive:: Exporter et importer des fichiers du dépôt.
1856 @end menu
1857
1858 @node Fonctionnalités
1859 @section Fonctionnalités
1860
1861 Lorsque vous utilisez Guix, chaque paquet arrive dans @dfn{dépôt des
1862 paquets}, dans son propre répertoire — quelque chose comme
1863 @file{/gnu/store/xxx-paquet-1.2}, où @code{xxx} est une chaîne en base32.
1864
1865 Plutôt que de se rapporter à ces répertoires, les utilisateurs ont leur
1866 propre @dfn{profil} qui pointe vers les paquets qu'ils veulent vraiment
1867 utiliser. Ces profils sont stockés dans le répertoire personnel de chaque
1868 utilisateur dans @code{$HOME/.guix-profile}.
1869
1870 Par exemple, @code{alice} installe GCC 4.7.2. Il en résulte que
1871 @file{/home/alice/.guix-profile/bin/gcc} pointe vers
1872 @file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Maintenant, sur la même
1873 machine, @code{bob} a déjà intallé GCC 4.8.0. Le profil de @code{bob}
1874 continue simplement de pointer vers
1875 @file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc} — c.-à-d.@: les deux versions de
1876 GCC coexistent surs le même système sans aucune interférence.
1877
1878 La commande @command{guix package} est l'outil central pour gérer les
1879 paquets (@pxref{Invoquer guix package}). Il opère sur les profils
1880 utilisateurs et peut être utilisé avec les @emph{privilèges utilisateurs
1881 normaux}.
1882
1883 @cindex transactions
1884 La commande fournit les opérations évidentes d'installation, de suppression
1885 et de mise à jour. Chaque invocation est en fait une @emph{transaction} :
1886 soit l'opération demandée réussi, soit rien ne se passe. Ainsi, si le
1887 processus @command{guix package} est terminé pendant la transaction ou si
1888 une panne de courant arrive pendant la transaction, le profil de
1889 l'utilisateur reste dans son état précédent et reste utilisable.
1890
1891 En plus, il est possible @emph{d'annuler} toute transaction sur les
1892 paquets. Donc si par exemple un mise à jour installe une nouvelle version
1893 d'un paquet qui révèle un bogue sérieux, les utilisateurs peuvent revenir en
1894 arrière à l'instance précédente de leur profil qui est connu pour bien
1895 fonctionner. De manière similaire, la configuration globale du système dans
1896 GuixSD est sujette aux mises à jour transactionnelles et aux annulations
1897 (@pxref{Utiliser le système de configuration}).
1898
1899 Tous les paquets du dépôt des paquets peut être @emph{glané}. Guix peut
1900 déterminer quels paquets sont toujours référencés par les profils des
1901 utilisateurs et supprimer ceux qui ne sont plus référencés de manière
1902 prouvable (@pxref{Invoquer guix gc}). Les utilisateurs peuvent toujours
1903 explicitement supprimer les anciennes générations de leur profil pour que
1904 les paquets auxquels elles faisaient référence puissent être glanés.
1905
1906 @cindex reproductibilité
1907 @cindex constructions reproductibles
1908 Guix prend une approche @dfn{purement fonctionnelle} de la gestion de
1909 paquets, telle que décrite dans l'introduction (@pxref{Introduction}).
1910 Chaque nom de répertoire de paquet dans @file{/gnu/store} contient un hash
1911 de toutes les entrées qui ont été utilisées pendant la construction de ce
1912 paquet — le compilateur, les bibliothèques, les scripts de construction,
1913 etc. Cette correspondance directe permet aux utilisateurs de s'assurer que
1914 l'installation d'un paquet donné correspond à l'état actuel de leur
1915 distribution. Elle aide aussi à maximiser la @dfn{reproductibilité} : grâce
1916 aux environnements de construction utilisés, une construction donnée à de
1917 forte chances de donner des fichiers identiques bit-à-bit lorsqu'elle est
1918 effectuée sur des machines différents (@pxref{Invoquer guix-daemon,
1919 container}).
1920
1921 @cindex substituts
1922 Ce fondement permet à Guix de supporter le @dfn{déploiement transparent de
1923 binaire ou source}. Lorsqu'une binaire pré-construit pour une entrée de
1924 @file{/gnu/store} est disponible depuis une source externe (un
1925 @dfn{substitut}), Guix le télécharge simplement et le décompresse ; sinon,
1926 il construit le paquet depuis les sources localement (@pxref{Substituts}).
1927 Comme les résultats des constructions sont généralement reproductibles au
1928 bit près, si vous n'avez pas besoin de faire confiance aux serveurs qui
1929 fournissent les substituts : vous pouvez forcer une construction locale et
1930 @emph{défier} les fournisseurs (@pxref{Invoquer guix challenge}).
1931
1932 Le contrôle de l'environnement de construction est aussi une fonctionnalité
1933 utile pour les développeurs. La commande @command{guix environment} permet
1934 aux développeurs d'un paquet de mettre en place rapidement le bon
1935 environnement de développement pour leur paquet, sans avoir à installer
1936 manuellement les dépendances du paquet dans leur profil (@pxref{Invoquer guix environment}).
1937
1938 @cindex réplication, des environnements logiciels
1939 @cindex suivi de la provenance, des artefacts logiciels
1940 La totalité de Guix et des définitions de paquets sont placés sous contrôle
1941 de version, et @command{guix pull} vous permet de « voyager dans le temps »
1942 de l'historique de Guix lui-même (@pxref{Invoquer guix pull}). Cela est
1943 rend possible la réplication d'une instance Guix sur une machine différente
1944 ou plus tard, ce qui vous permet de @emph{répliquer des environnements
1945 logiciels complets}, tout en garantissant un @dfn{suivi de provenance}
1946 précis des logiciels.
1947
1948 @node Invoquer guix package
1949 @section Invoquer @command{guix package}
1950
1951 @cindex installer des paquets
1952 @cindex supprimer des paquets
1953 @cindex installation de paquets
1954 @cindex suppression de paquets
1955 La commande @command{guix package} est l'outil qui permet d'installer,
1956 mettre à jour et supprimer les paquets ainsi que de revenir à une
1957 configuration précédente. Elle n'opère que dans le profil de l'utilisateur
1958 et fonctionne avec les privilèges utilisateurs normaux
1959 (@pxref{Fonctionnalités}). Sa syntaxe est :
1960
1961 @example
1962 guix package @var{options}
1963 @end example
1964 @cindex transactions
1965 @var{options} spécifie d'abord les opérations à effectuer pendant la
1966 transaction. À la fin, une nouvelle génération du profil est créée mais les
1967 @dfn{générations} précédentes du profil restent disponibles si l'utilisateur
1968 souhaite y revenir.
1969
1970 Par exemple, pour supprimer @code{lua} et installer @code{guile} et
1971 @code{guile-cairo} en une seule transaction :
1972
1973 @example
1974 guix package -r lua -i guile guile-cairo
1975 @end example
1976
1977 @command{guix package} supporte aussi une @dfn{approche déclarative} où
1978 l'utilisateur spécifie l'ensemble exact des paquets qui doivent être
1979 disponibles le passe @i{via} l'option @option{--manifest}
1980 (@pxref{profile-manifest, @option{--manifest}}).
1981
1982 @cindex profil
1983 Pour chaque utilisateur, un lien symbolique vers le profil par défaut de cet
1984 utilisateur est automatiquement créé dans @file{$HOME/.guix-profile}. Ce
1985 lien symbolique pointe toujours vers la génération actuelle du profil par
1986 défaut de l'utilisateur. Ainsi, les utilisateurs peuvent ajouter
1987 @file{$HOME/.guix-profile/bin} à leur variable d'environnement @code{PATH}
1988 etc.
1989 @cindex chemins de recherche
1990 Si vous n'utilisez pas la distribution système Guix, vous devriez ajouter
1991 les lignes suivantes à votre @file{~/.bash_profile} (@pxref{Bash Startup
1992 Files,,, bash, The GNU Bash Reference Manual}) pour que les shells créés
1993 ensuite aient les bonnes définitions des variables d'environnement :
1994
1995 @example
1996 GUIX_PROFILE="$HOME/.guix-profile" ; \
1997 source "$HOME/.guix-profile/etc/profile"
1998 @end example
1999
2000 Dans un environnement multi-utilisateur, les profils utilisateurs sont
2001 stockés comme une @dfn{racine du ramasse-miettes}, vers laquelle pointe
2002 @file{$HOME/.guix-profile} (@pxref{Invoquer guix gc}). Ce répertoire est
2003 normalement
2004 @code{@var{localstatedir}/guix/profiles/per-user/@var{utilisateur}}, où
2005 @var{localstatedir} est la valeur passée à @code{configure} avec
2006 @code{--localstatedir} et @var{utilisateur} le nom d'utilisateur. Le
2007 répertoire @file{per-user} est créé lorsque @command{guix-daemon} est
2008 démarré et sous-répertoire @var{utilisateur} est créé par @command{guix
2009 package}.
2010
2011 Les @var{options} peuvent être les suivante :
2012
2013 @table @code
2014
2015 @item --install=@var{paquet} @dots{}
2016 @itemx -i @var{paquet} @dots{}
2017 Installer les @var{paquet}s spécifiés.
2018
2019 Chaque @var{paquet} peut spécifier soit un simple nom de paquet, comme
2020 @code{guile} ou un nom de paquet suivi d'un arobase et d'un numéro de
2021 version, comme @code{guile@@1.8.8} ou simplement @code{guile@@1.8} (dans ce
2022 dernier cas, la version la plus récente commençant par @code{1.8} est
2023 utilisée).
2024
2025 Si aucun numéro de version n'est spécifié, la version la plus récente
2026 disponible est choisie. En plus, @var{paquet} peut contenir un deux-points,
2027 suivi du nom d'une des sorties du paquet, comme dans @code{gcc:doc} ou
2028 @code{binutils@@2.22:lib} (@pxref{Des paquets avec plusieurs résultats}). Des
2029 paquets avec un nom correspondant et (éventuellement une version) sont
2030 recherchés dans les modules de la distribution GNU (@pxref{Modules de paquets}).
2031
2032 @cindex entrées propagées
2033 Parfois les paquets ont des @dfn{entrées propagées} : ce sont des
2034 dépendances qui sont installées automatiquement avec le paquet demandé
2035 (@pxref{package-propagated-inputs, @code{propagated-inputs} in
2036 @code{package} objects} pour plus d'informations sur les entrées propagées
2037 dans les définitions des paquets).
2038
2039 @anchor{package-cmd-propagated-inputs}
2040 Un exemple est la bibliothèque MPC de GNU : ses fichiers d'en-tête C se
2041 réfèrent à ceux de la bibliothèque MPFR de GNU, qui se réfèrent en retour à
2042 ceux de la bibliothèque GMP. Ainsi, lorsqu'on installe MPC, les
2043 bibliothèques MPFR et GMP sont aussi installées dans le profil ; supprimer
2044 MPC supprimera aussi MPFR et GMP — à moins qu'ils n'aient été aussi
2045 installés explicitement par l'utilisateur.
2046
2047 D'autre part, les paquets dépendent parfois de la définition de variables
2048 d'environnement pour leur chemin de recherche (voir les explications sur
2049 @code{--search-paths} plus bas). Toute définition de variable
2050 d'environnement manquante ou possiblement incorrecte est rapportée ici.
2051
2052 @item --install-from-expression=@var{exp}
2053 @itemx -e @var{exp}
2054 Installer le paquet évalué par @var{exp}
2055
2056 @var{exp} doit être une expression Scheme qui s'évalue en un objet
2057 @code{<package>}. Cette option est notamment utile pour distinguer les
2058 variantes d'un paquet avec le même nom, avec des expressions comme @code{(@@
2059 (gnu packages base) guile-final)}.
2060
2061 Remarquez que cette option installe la première sortie du paquet, ce qui
2062 peut être insuffisant lorsque vous avez besoin d'une sortie spécifique d'un
2063 paquet à plusieurs sorties.
2064
2065 @item --install-from-file=@var{fichier}
2066 @itemx -f @var{fichier}
2067 Installer le paquet évalué par le code dans le @var{fichier}.
2068
2069 Par exemple, @var{fichier} peut contenir une définition comme celle-ci
2070 (@pxref{Définition des paquets}) :
2071
2072 @example
2073 @verbatiminclude package-hello.scm
2074 @end example
2075
2076 Les développeurs peuvent trouver utile d'inclure un tel fichier
2077 @file{guix.scm} à la racine de l'arborescence des sources de leur projet qui
2078 pourrait être utilisé pour tester des versions de développement et créer des
2079 environnements de développement reproductibles (@pxref{Invoquer guix environment}).
2080
2081 @item --remove=@var{paquet} @dots{}
2082 @itemx -r @var{paquet} @dots{}
2083 Supprimer les @var{paquet}s spécifiés.
2084
2085 Comme pour @code{--install}, chaque @var{paquet} peut spécifier un numéro de
2086 version ou un nom de sortie en plus du nom du paquet. Par exemple, @code{-r
2087 glibc:debug} supprimerait la sortie @code{debug} de @code{glibc}.
2088
2089 @item --upgrade[=@var{regexp} @dots{}]
2090 @itemx -u [@var{regexp} @dots{}]
2091 @cindex mettre à jour des paquets
2092 Mettre à jour tous les paquets installés. Si une @var{regexp} ou plus est
2093 spécifiée, la mise à jour n'installera que les paquets dont le nom
2094 correspond à @var{regexp}. Voyez aussi l'option @code{--do-not-upgrade} en
2095 dessous.
2096
2097 Remarquez que cela met à jour vers la dernière version des paquets trouvée
2098 dans la distribution actuellement installée. Pour mettre à jour votre
2099 distribution, vous devriez lancer régulièrement @command{guix pull}
2100 (@pxref{Invoquer guix pull}).
2101
2102 @item --do-not-upgrade[=@var{regexp} @dots{}]
2103 Lorsqu'elle est utilisée avec l'option @code{--upgrade}, ne @emph{pas}
2104 mettre à jour les paquets dont le nom correspond à @var{regexp}. Par
2105 exemple, pour mettre à jour tous les paquets du profil actuel à l'exception
2106 de ceux qui contiennent la chaîne « emacs » :
2107
2108 @example
2109 $ guix package --upgrade . --do-not-upgrade emacs
2110 @end example
2111
2112 @item @anchor{profile-manifest}--manifest=@var{fichier}
2113 @itemx -m @var{fichier}
2114 @cindex déclaration de profil
2115 @cindex manifest de profil
2116 Créer une nouvelle génération du profil depuis l'objet manifeste renvoyé par
2117 le code Scheme dans @var{fichier}.
2118
2119 Cela vous permet de @emph{déclarer} le contenu du profil plutôt que de le
2120 construire avec une série de @code{--install} et de commandes similaires.
2121 L'avantage étant que le @var{fichier} peut être placé sous contrôle de
2122 version, copié vers d'autres machines pour reproduire le même profil, etc.
2123
2124 @c FIXME: Add reference to (guix profile) documentation when available.
2125 @var{fichier} doit retourner un objet @dfn{manifest} qui est en gros une
2126 liste de paquets :
2127
2128 @findex packages->manifest
2129 @example
2130 (use-package-modules guile emacs)
2131
2132 (packages->manifest
2133 (list emacs
2134 guile-2.0
2135 ;; Utiliser une sortie spécifique d'un paquet.
2136 (list guile-2.0 "debug")))
2137 @end example
2138
2139 @findex specifications->manifest
2140 Dans cet exemple on doit savoir quels modules définissent les variables
2141 @code{emacs} et @code{guile-2.0} pour fournir la bonne ligne
2142 @code{use-package-modules} ce qui peut être embêtant. On peut à la place
2143 fournir des spécifications de paquets normales et laisser
2144 @code{specifications->manifest} rechercher les objets de paquets
2145 correspondants, comme ceci :
2146
2147 @example
2148 (specifications->manifest
2149 '("emacs" "guile@@2.2" "guile@@2.2:debug"))
2150 @end example
2151
2152 @item --roll-back
2153 @cindex revenir en arrière
2154 @cindex défaire des transactions
2155 @cindex transactions, défaire
2156 Revenir à la @dfn{génération} précédente du profil c.-à-d.@: défaire la
2157 dernière transaction.
2158
2159 Lorsqu'elle est combinée avec des options comme @code{--install}, cette
2160 option revient en arrière avant toute autre action.
2161
2162 Lorsque vous revenez de la première génération qui contient des fichiers, le
2163 profil pointera vers la @dfn{zéroième génération} qui ne contient aucun
2164 fichier en dehors de ses propres métadonnées.
2165
2166 Après être revenu en arrière, l'installation, la suppression et la mise à
2167 jour de paquets réécrit les futures générations précédentes. Ainsi,
2168 l'historique des générations dans un profil est toujours linéaire.
2169
2170 @item --switch-generation=@var{motif}
2171 @itemx -S @var{motif}
2172 @cindex générations
2173 Basculer vers une génération particulière définie par le @var{motif}.
2174
2175 Le @var{motif} peut être soit un numéro de génération soit un nombre précédé
2176 de « + » ou « - ». Ce dernier signifie : se déplacer en avant ou en arrière
2177 d'un nombre donné de générations. Par exemple, si vous voulez retourner à
2178 la dernière génération après @code{--roll-back}, utilisez
2179 @code{--switch-generation=+1}.
2180
2181 La différence entre @code{--roll-back} et @code{--switch-generation=-1} est
2182 que @code{--switch-generation} ne vous amènera pas à la zéroième génération,
2183 donc si la génération demandée n'existe pas la génération actuelle ne
2184 changera pas.
2185
2186 @item --search-paths[=@var{genre}]
2187 @cindex chemins de recherche
2188 Rapporter les définitions des variables d'environnement dans la syntaxe Bash
2189 qui peuvent être requises pour utiliser l'ensemble des paquets installés.
2190 Ces variables d'environnement sont utilisées pour spécifier les @dfn{chemins
2191 de recherche} de fichiers utilisés par les paquets installés.
2192
2193 Par exemple, GCC a besoin des variables d'environnement @code{CPATH} et
2194 @code{LIBRARY_PATH} pour trouver les en-têtes et les bibliothèques dans le
2195 profil de l'utilisateur (@pxref{Environment Variables,,, gcc, Using the GNU
2196 Compiler Collection (GCC)}). Si GCC et, disons, la bibliothèque C sont
2197 installés dans le profil, alors @code{--search-paths} suggérera
2198 d'initialiser ces variables à @code{@var{profil}/include} et
2199 @code{@var{profil}/lib}, respectivement.
2200
2201 Le cas d'utilisation typique est de définir ces variables d'environnement
2202 dans le shell :
2203
2204 @example
2205 $ eval `guix package --search-paths`
2206 @end example
2207
2208 @var{genre} peut être l'une des valeurs @code{exact}, @code{prefix} ou
2209 @code{suffix}, ce qui signifie que les définitions des variables
2210 d'environnement retournées seront soit les paramètres exactes, ou placés
2211 avant ou après la valeur actuelle de ces paramètres. Lorsqu'il est omis,
2212 @var{genre} a pour valeur par défaut @code{exact}.
2213
2214 Cette option peut aussi être utilisé pour calculer les chemins de recherche
2215 @emph{combinés} de plusieurs profils. Regardez cet exemple :
2216
2217 @example
2218 $ guix package -p foo -i guile
2219 $ guix package -p bar -i guile-json
2220 $ guix package -p foo -p bar --search-paths
2221 @end example
2222
2223 La dernière commande ci-dessus montre la variable @code{GUILE_LOAD_PATH}
2224 bien que, pris individuellement, ni @file{foo} ni @file{bar} n'auraient
2225 donné cette recommendation.
2226
2227
2228 @item --profile=@var{profil}
2229 @itemx -p @var{profil}
2230 Utiliser le @var{profil} à la place du profil par défaut de l'utilisateur.
2231
2232 @cindex collisions, dans un profil
2233 @cindex faire des collisions de paquets dans des profils
2234 @cindex profil, collisions
2235 @item --allow-collisions
2236 Permettre des collisions de paquets dans le nouveau profil. À utiliser à
2237 vos risques et périls !
2238
2239 Par défaut, @command{guix package} rapporte les @dfn{collisions} dans le
2240 profil comme des erreurs. Les collisions ont lieu quand deux version ou
2241 variantes d'un paquet donné se retrouvent dans le profil.
2242
2243 @item --verbose
2244 Produire une sortie verbeuse. En particulier, fournir les journaux de
2245 construction de l'environnement sur le port d'erreur standard.
2246
2247 @item --bootstrap
2248 Utiliser le programme d'amorçage Guile pour compiler le profil. Cette
2249 option n'est utile que pour les développeurs de la distriibution.
2250
2251 @end table
2252
2253 En plus de ces actions, @command{guix package} supporte les options
2254 suivantes pour demander l'état actuel d'un profil ou la disponibilité des
2255 paquets :
2256
2257 @table @option
2258
2259 @item --search=@var{regexp}
2260 @itemx -s @var{regexp}
2261 @cindex chercher des paquets
2262 Lister les paquets disponibles dont le nom, le synopsis ou la description
2263 correspondent à la @var{regexp}, triés par pertinence. Afficher toutes les
2264 métadonnées des paquets correspondants au format @code{recutils}
2265 (@pxref{Top, GNU recutils databases,, recutils, GNU recutils manual}).
2266
2267 Cela permet à des champs spécifiques d'être extraits avec la commande
2268 @command{recsel}, par exemple :
2269
2270 @example
2271 $ guix package -s malloc | recsel -p name,version,relevance
2272 name: jemalloc
2273 version: 4.5.0
2274 relevance: 6
2275
2276 name: glibc
2277 version: 2.25
2278 relevance: 1
2279
2280 name: libgc
2281 version: 7.6.0
2282 relevance: 1
2283 @end example
2284
2285 De manière similaire, pour montrer le nom de tous les paquets disponibles
2286 sous license GNU@tie{}LGPL version 3 :
2287
2288 @example
2289 $ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
2290 name: elfutils
2291
2292 name: gmp
2293 @dots{}
2294 @end example
2295
2296 Il est aussi possible de raffiner les résultats de la recherche avec
2297 plusieurs options @code{-s}. Par exemple, la commande suivante renvoie la
2298 liste des jeux de plateau :
2299
2300 @example
2301 $ guix package -s '\<board\>' -s game | recsel -p name
2302 name: gnubg
2303 @dots{}
2304 @end example
2305
2306 Si on avait oublié @code{-s game}, on aurait aussi eu les paquets logiciels
2307 qui s'occupent de circuits imprimés (en anglais : circuit board) ; supprimer
2308 les chevrons autour de @code{board} aurait aussi ajouté les paquets qui
2309 parlent de clavier (en anglais : key@emph{board}).
2310
2311 Et maintenant un exemple plus élaboré. La commande suivante recherche les
2312 bibliothèques cryptographiques, retire les bibliothèques Haskell, Perl,
2313 Python et Ruby et affiche le nom et le synopsis des paquets correspondants :
2314
2315 @example
2316 $ guix package -s crypto -s library | \
2317 recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
2318 @end example
2319
2320 @noindent
2321 @xref{Selection Expressions,,, recutils, GNU recutils manual} pour plus
2322 d'information sur les @dfn{expressions de sélection} pour @code{recsel -e}.
2323
2324 @item --show=@var{paquet}
2325 Afficher les détails du @var{paquet} dans la liste des paquets disponibles,
2326 au format @code{recutils} (@pxref{Top, GNU recutils databases,, recutils,
2327 GNU recutils manual}).
2328
2329 @example
2330 $ guix package --show=python | recsel -p name,version
2331 name: python
2332 version: 2.7.6
2333
2334 name: python
2335 version: 3.3.5
2336 @end example
2337
2338 Vous pouvez aussi spécifier le nom complet d'un paquet pour n'avoir que les
2339 détails concernant une version spécifique :
2340 @example
2341 $ guix package --show=python@@3.4 | recsel -p name,version
2342 name: python
2343 version: 3.4.3
2344 @end example
2345
2346
2347
2348 @item --list-installed[=@var{regexp}]
2349 @itemx -I [@var{regexp}]
2350 Liste les paquets actuellement installés dans le profil spécifié, avec les
2351 paquets les plus récemment installés en dernier. Lorsque @var{regexp} est
2352 spécifié, liste uniquement les paquets installés dont le nom correspond à
2353 @var{regexp}.
2354
2355 Pour chaque paquet installé, affiche les éléments suivants, séparés par des
2356 tabulations : le nom du paquet, sa version, la partie du paquet qui est
2357 installé (par exemple, @code{out} pour la sortie par défaut, @code{include}
2358 pour ses en-têtes, etc) et le chemin du paquet dans le dépôt.
2359
2360 @item --list-available[=@var{regexp}]
2361 @itemx -A [@var{regexp}]
2362 Lister les paquets actuellement disponibles dans la distribution pour ce
2363 système (@pxref{Distribution GNU}). Lorsque @var{regexp} est spécifié,
2364 liste uniquement les paquets dont le nom correspond à @var{regexp}.
2365
2366 Pour chaque paquet, affiche les éléments suivants séparés par des
2367 tabulations : son nom, sa version, les parties du paquet (@pxref{Des paquets avec plusieurs résultats}), et l'emplacement de sa définition.
2368
2369 @item --list-generations[=@var{motif}]
2370 @itemx -l [@var{motif}]
2371 @cindex générations
2372 Renvoyer la liste des générations avec leur date de création ; pour chaque
2373 génération, montre les paquets installés avec les paquets installés les plus
2374 récemment en dernier. Remarquez que la zéroième génération n'est jamais
2375 montrée.
2376
2377 Pour chaque paquet installé, afficher les éléments suivants, séparés par des
2378 tabulations : le nom du paquet, sa version, la partie du paquet qui a été
2379 installée (@pxref{Des paquets avec plusieurs résultats}), et l'emplacement du
2380 paquet dans le dépôt.
2381
2382 Lorsque @var{motif} est utilisé, la commande ne renvoie que les générations
2383 correspondantes. Les motifs valides sont :
2384
2385 @itemize
2386 @item @emph{Des entiers et des entiers séparés par des virgules}. Les deux motifs correspondent
2387 à des numéros de version. Par exemple, @code{--list-generations=1} renvoie
2388 la première.
2389
2390 Et @code{--list-generations=1,8,2} renvoie les trois générations dans
2391 l'ordre spécifié. Aucune espace ni virgule surnuméraire n'est permise.
2392
2393 @item @emph{Des interval}. @code{--list-generations=2..9} affiche les
2394 générations demandées et tout ce qui se trouvent entre elles. Remarquez que
2395 le début d'un interval doit être plus petit que sa fin.
2396
2397 Il est aussi possible d'omettre le numéro final. Par exemple,
2398 @code{--list-generations=2..} renvoie toutes les générations à partir de la
2399 deuxième.
2400
2401 @item @emph{Des durées}. Vous pouvez aussi récupérer les derniers @emph{N}@tie{}jours, semaines,
2402 ou moins en passant un entier avec la première lettre de la durée (en
2403 anglais : d, w ou m). Par exemple @code{--list-generations=20d} liste les
2404 générations qui sont agées d'au plus 20 jours.
2405 @end itemize
2406
2407 @item --delete-generations[=@var{motif}]
2408 @itemx -d [@var{motif}]
2409 Lorsque @var{motif} est omis, supprimer toutes les générations en dehors de
2410 l'actuelle.
2411
2412 Cette commande accepte les même motifs que @option{--list-generations}.
2413 Lorsque @var{motif} est spécifié, supprimer les générations correspondante.
2414 Lorsque @var{motif} spécifie une durée, les générations @emph{plus vieilles}
2415 que la durée spécifiée correspondent. Par exemple
2416 @code{--delete-generations=1m} supprime les générations vieilles de plus
2417 d'un mois.
2418
2419 Si la génération actuelle correspond, elle n'est @emph{pas} supprimée. La
2420 zéroième génération n'est elle non plus jamais supprimée.
2421
2422 Remarquez que supprimer des générations empêche de revenir en arrière vers
2423 elles. Ainsi, cette commande doit être utilisée avec précaution.
2424
2425 @end table
2426
2427 Enfin, comme @command{guix package} peut démarrer des processus de
2428 construction, elle supporte les options de construction communes
2429 (@pxref{Options de construction communes}). Elle supporte aussi les options de
2430 transformation de paquets comme @option{--with-source} (@pxref{Options de transformation de paquets}). Cependant, remarquez que les transformations de
2431 paquets sont perdues à la mise à jour ; pour les préserver à travers les
2432 mises à jours, vous devriez définir vos propres variantes des paquets dans
2433 une module Guile et l'ajouter à @code{GUIX_PACKAGE_PATH} (@pxref{Définition des paquets}).
2434
2435 @node Substituts
2436 @section Substituts
2437
2438 @cindex substituts
2439 @cindex binaires pré-construits
2440 Guix gère le déploiement depuis des binaires ou des sources de manière
2441 transparente ce qui signifie qu'il peut aussi bien construire localement que
2442 télécharger des éléments pré-construits depuis un serveur ou les deux. Nous
2443 appelons ces éléments pré-construits des @dfn{substituts} — ils se
2444 substituent aux résultats des constructions locales. Dans la plupart des
2445 cas, télécharger un substitut est bien plus rapide que de construire les
2446 choses localement.
2447
2448 Les substituts peuvent être tout ce qui résulte d'une construction de
2449 dérivation (@pxref{Dérivations}). Bien sûr dans le cas général, il s'agit
2450 de paquets binaires pré-construits, mais les archives des sources par
2451 exemple résultent aussi de la construction d'une dérivation qui peut aussi
2452 être disponible en tant que substitut.
2453
2454 @menu
2455 * Serveur de substituts officiel:: Une source particulière de substituts.
2456 * Autoriser un serveur de substituts:: Comment activer ou désactiver les
2457 substituts.
2458 * Authentification des substituts:: Coment Guix vérifie les substituts.
2459 * Paramètres de serveur mandataire:: Comment récupérer des substituts à
2460 travers un serveur mandataire.
2461 * Échec de substitution:: Qu'arrive-t-il quand la substitution échoue.
2462 * De la confiance en des binaires:: Comment pouvez-vous avoir confiance en
2463 un paquet binaire ?
2464 @end menu
2465
2466 @node Serveur de substituts officiel
2467 @subsection Serveur de substituts officiel
2468
2469 @cindex hydra
2470 @cindex ferme de construction
2471 Le serveur @code{mirror.hydra.gnu.org} est une interface à la ferme de
2472 construction officielle qui construit des paquets pour Guix continuellement
2473 pour certaines architectures et les rend disponibles en tant que
2474 substituts. C'est la source par défaut des substituts ; elle peut être
2475 modifiée en passant l'option @option{--substitute-urls} soit à
2476 @command{guix-daemon} (@pxref{daemon-substitute-urls,, @code{guix-daemon
2477 --substitute-urls}}) soit aux outils clients comme @command{guix package}
2478 (@pxref{client-substitute-urls,, client @option{--substitute-urls} option}).
2479
2480 Les URL des substituts peuvent être soit en HTTP soit en HTTPS. Le HTTPS
2481 est recommandé parce que les communications sont chiffrées ; à l'inverse
2482 HTTP rend les communications visibles pour un espion qui peut utiliser les
2483 informations accumulées sur vous pour déterminer par exemple si votre
2484 système a des vulnérabilités de sécurités non corrigées.
2485
2486 Les substituts de la ferme de construction officielle sont activés par
2487 défaut dans la distribution système Guix (@pxref{Distribution GNU}).
2488 Cependant, ils sont désactivés par défaut lorsque vous utilisez Guix sur une
2489 distribution externe, à moins que vous ne les ayez explicitement activés via
2490 l'une des étapes d'installation recommandées (@pxref{Installation}). Les
2491 paragraphes suivants décrivent comment activer ou désactiver les substituts
2492 de la ferme de construction ; la même procédure peut être utilisée pour
2493 activer les substituts de n'importe quel autre serveur de substituts.
2494
2495 @node Autoriser un serveur de substituts
2496 @subsection Autoriser un serveur de substituts
2497
2498 @cindex sécurité
2499 @cindex substituts, autorisations
2500 @cindex liste de contrôle d'accès (ACL), pour les substituts
2501 @cindex ACL (liste de contrôle d'accès), pour les substituts
2502 Pour permettre à Guix de télécharger les substituts depuis
2503 @code{hydra.gnu.org} ou un mirroir, vous devez ajouter sa clef publique à la
2504 liste de contrôle d'accès (ACL) des imports d'archives, avec la commande
2505 @command{guix archive} (@pxref{Invoquer guix archive}). Cela implique que
2506 vous faîtes confiance à @code{hydra.gnu.org} pour ne pas être compromis et
2507 vous servir des substituts authentiques.
2508
2509 La clef publique pour @code{hydra.gnu.org} est installée avec Guix, dans
2510 @code{@var{préfixe}/share/guix/hydra.gnu.org.pub}, où @var{préfixe} est le
2511 préfixe d'installation de Guix. Si vous avez installé Guix depuis les
2512 sources, assurez-vous d'avoir vérifié la signature GPG de
2513 @file{guix-@value{VERSION}.tar.gz} qui contient ce fichier de clef
2514 publique. Ensuite vous pouvez lancer quelque chose comme ceci :
2515
2516 @example
2517 # guix archive --authorize < @var{préfixe}/share/guix/hydra.gnu.org.pub
2518 @end example
2519
2520 @quotation Remarque
2521 De même, le fichier @file{berlin.guixsd.org.pub} contient la clef publique
2522 de la nouvelle ferme de construction du projet, disponible depuis
2523 @indicateurl{https://berlin.guixsd.org}.
2524
2525 Au moment où ces lignes sont écrites, @code{berlin.guixsd.org} est mis à
2526 niveau pour mieux passer à l'échelle, mais vous pourriez vouloir le tester.
2527 Il est associé à 20 nœuds de construction x86_64/i686 et pourrait fournir
2528 des substituts plus rapidement que @code{mirror.hydra.gnu.org}
2529 @end quotation
2530
2531 Une fois que cela est en place, la sortie d'une commande comme @code{guix
2532 build} devrait changer de quelque chose comme :
2533
2534 @example
2535 $ guix build emacs --dry-run
2536 Les dérivations suivantes seraient construites :
2537 /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
2538 /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
2539 /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
2540 /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
2541 @dots{}
2542 @end example
2543
2544 @noindent
2545 à quelque chose comme :
2546
2547 @example
2548 $ guix build emacs --dry-run
2549 112.3 Mo seraient téléchargés :
2550 /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
2551 /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
2552 /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
2553 /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
2554 @dots{}
2555 @end example
2556
2557 @noindent
2558 Cela indique que les substituts de @code{hydra.gnu.org} sont utilisables et
2559 seront téléchargés, si possible, pour les futures constructions.
2560
2561 @cindex substituts, comment les désactiver
2562 Le mécanisme de substitution peut être désactivé globalement en lançant
2563 @code{guix-daemon} avec @code{--no-substitutes} (@pxref{Invoquer guix-daemon}). Il peut aussi être désactivé temporairement en passant
2564 l'option @code{--no-substitutes} à @command{guix package}, @command{guix
2565 build} et aux autres outils en ligne de commande.
2566
2567 @node Authentification des substituts
2568 @subsection Authentification des substituts
2569
2570 @cindex signatures numériques
2571 Guix détecte et lève une erreur lorsqu'il essaye d'utiliser un substituts
2572 qui a été modifié. De même, il ignore les substituts qui ne sont pas signés
2573 ou qui ne sont pas signés par l'une des clefs listés dans l'ACL.
2574
2575 Il y a une exception cependant : si un serveur non autorisé fournit des
2576 substituts qui sont @emph{identiques bit-à-bit} à ceux fournis par un
2577 serveur autorisé, alors le serveur non autorisé devient disponible pour les
2578 téléchargements. Par exemple en supposant qu'on a choisi deux serveurs de
2579 substituts avec cette option :
2580
2581 @example
2582 --substitute-urls="https://a.example.org https://b.example.org"
2583 @end example
2584
2585 @noindent
2586 @cindex constructions reproductibles
2587 Si l'ACL contient uniquement la clef de @code{b.example.org}, et si
2588 @code{a.example.org} sert @emph{exactement les mêmes} substituts, alors Guix
2589 téléchargera les substituts de @code{a.example.org} parce qu'il vient en
2590 premier dans la liste et peut être considéré comme un mirroir de
2591 @code{b.example.org}. En pratique, des machines de constructions produisent
2592 souvent les mêmes binaires grâce à des construction reproductibles au bit
2593 près (voir plus bas).
2594
2595 Lorsque vous utilisez HTTPS, le certificat X.509 du serveur n'est @emph{pas}
2596 validé (en d'autre termes, le serveur n'est pas authentifié), contrairement
2597 à ce que des clients HTTPS comme des navigateurs web font habituellement.
2598 Cela est dû au fait que Guix authentifie les informations sur les substituts
2599 eux-même, comme expliqué plus haut, ce dont on se soucie réellement (alors
2600 que les certificats X.509 authentifie la relation entre nom de domaine et
2601 clef publique).
2602
2603 @node Paramètres de serveur mandataire
2604 @subsection Paramètres de serveur mandataire
2605
2606 @vindex http_proxy
2607 Les substituts sont téléchargés par HTTP ou HTTPS. La variable
2608 d'environnement @code{http_proxy} peut être initialisée dans l'environnement
2609 de @command{guix-daemon} et est respectée pour le téléchargement des
2610 substituts. Remarquez que la valeur de @code{http_proxy} dans
2611 l'environnement où tournent @command{guix build}, @command{guix package} et
2612 les autres clients n'a @emph{absolument aucun effet}.
2613
2614 @node Échec de substitution
2615 @subsection Échec de substitution
2616
2617 Même lorsqu'un substitut pour une dérivation est disponible, la substitution
2618 échoue parfois. Cela peut arriver pour plusieurs raisons : le serveur de
2619 substitut peut être hors ligne, le substitut a récemment été supprimé du
2620 serveur, la connexion peut avoir été interrompue, etc.
2621
2622 Lorsque les substituts sont activés et qu'un substitut pour une dérivation
2623 est disponible, mais que la tentative de substitution échoue, Guix essaiera
2624 de construire la dérivation localement si @code{--fallback} a été passé en
2625 argument (@pxref{option de repli,, common build option @code{--fallback}}).
2626 Plus spécifiquement, si cet option n'a pas été passée en argument, alors
2627 aucune construction locale n'est effectuée et la dérivation est considérée
2628 comme étant en échec. Cependant, si @code{--fallback} est passé en argument,
2629 alors Guix essaiera de construire la dérivation localement et l'échec ou le
2630 succès de la dérivation dépend de l'échec ou du succès de la construction
2631 locale. Remarquez que lorsque les substituts sont désactivés ou qu'aucun
2632 substitut n'est disponible pour la dérivation en question, une construction
2633 locale sera @emph{toujours} effectuée, indépendamment du fait que l'argument
2634 @code{--fallback} ait été ou non passé.
2635
2636 Pour se donner une idée du nombre de substituts disponibles maintenant, vous
2637 pouvez essayer de lancer la commande @command{guix weather} (@pxref{Invoquer guix weather}). Cette command fournit des statistiques sur les substituts
2638 fournis par un serveur.
2639
2640 @node De la confiance en des binaires
2641 @subsection De la confiance en des binaires
2642
2643 @cindex confiance, en des binaires pré-construits
2644 De nos jours, le contrôle individuel sur son utilisation propre de
2645 l'informatique est à la merci d'institutions, de sociétés et de groupes avec
2646 assez de pouvoir et de détermination pour contourner les infrastructures
2647 informatiques et exploiter leurs faiblesses. Bien qu'utiliser les
2648 substituts de @code{hydra.gnu.org} soit pratique, nous encourageons les
2649 utilisateurs à construire aussi par eux-même, voir à faire tourner leur
2650 propre ferme de construction, pour que @code{hydra.gnu.org} devienne une
2651 cible moins intéressante. Une façon d'aider est de publier les logiciels
2652 que vous construisez avec @command{guix publish} pour que les autres aient
2653 plus de choix de serveurs où télécharger les substituts (@pxref{Invoquer guix publish}).
2654
2655 Guix possède les fondations pour maximiser la reproductibilité logicielle
2656 (@pxref{Fonctionnalités}). Dans la plupart des cas, des constructions
2657 indépendantes d'un paquet donnée ou d'une dérivation devrait donner des
2658 résultats identiques au bit près. Ainsi, à travers un ensemble de
2659 constructions de paquets indépendantes il est possible de renforcer
2660 l'intégrité du système. La commande @command{guix challenge} a pour but
2661 d'aider les utilisateurs à tester les serveurs de substituts et à aider les
2662 développeurs à trouver les constructions de paquets non-déterministes
2663 (@pxref{Invoquer guix challenge}). De même, l'option @option{--check} de
2664 @command{guix build} permet aux utilisateurs de vérifier si les substituts
2665 précédemment installés sont authentiques en les reconstruisant localement
2666 (@pxref{vérification de la construction, @command{guix build --check}}).
2667
2668 Dans le futur, nous aimerions que Guix puisse publier et recevoir des
2669 binaires d'autres utilisateurs, d'une manière pair-à-pair. Si vous voulez
2670 discuter de ce projet, rejoignez-nous sur @email{guix-devel@@gnu.org}.
2671
2672 @node Des paquets avec plusieurs résultats
2673 @section Des paquets avec plusieurs résultats
2674
2675 @cindex paquets avec plusieurs résultats
2676 @cindex sorties de paquets
2677 @cindex sorties
2678
2679 Souvent, les paquets définis dans Guix ont une seule @dfn{sortie} —
2680 c.-à-d.@: que le paquet source conduit à exactement un répertoire dans le
2681 dépôt. Lorsque vous lancez @command{guix package -i glibc}, vous installez
2682 la sortie par défaut du paquet GNU libc ; la sortie par défaut est appelée
2683 @code{out} mais son nom peut être omis comme le montre cette commande. Dans
2684 ce cas particuliers, la sortie par défaut de @code{glibc} contient tous les
2685 fichiers d'en-tête C, les bibliothèques partagées, les bibliothèques
2686 statiques, la documentation Info et les autres fichiers de support.
2687
2688 Parfois il est plus approprié de séparer les divers types de fichiers
2689 produits par un même paquet source en plusieurs sorties. Par exemple, la
2690 bibliothèque C GLib (utilisée par GTK+ et des paquets associés) installe
2691 plus de 20 Mo de documentation de référence dans des pages HTML. Pour
2692 préserver l'espace disque des utilisateurs qui n'en ont pas besoin, la
2693 documentation va dans une sortie séparée nommée @code{doc}. Pour installer
2694 la sortie principale de GLib, qui contient tout sauf la documentation, on
2695 devrait lancer :
2696
2697 @example
2698 guix package -i glib
2699 @end example
2700
2701 @cindex documentation
2702 La commande pour installer la documentation est :
2703
2704 @example
2705 guix package -i glib:doc
2706 @end example
2707
2708 Certains paquets installent des programmes avec des « empreintes dépendances
2709 » différentes. Par exemple le paquet WordNet installe à la fois les outils
2710 en ligne de commande et les interfaces graphiques (GUI). La première ne
2711 dépend que de la bibliothèque C, alors que cette dernière dépend de Tcl/Tk
2712 et des bibliothèques X sous-jacentes. Dans ce cas, nous laissons les outils
2713 en ligne de commande dans la sortie par défaut et l'interface graphique dans
2714 une sortie séparée. Cela permet aux utilisateurs qui n'ont pas besoin
2715 d'interface graphique de gagner de la place. La commande @command{guix
2716 size} peut aider à trouver ces situations (@pxref{Invoquer guix size}). @command{guix graph} peut aussi être utile (@pxref{Invoquer guix graph}).
2717
2718 Il y a plusieurs paquets à sorties multiples dans la distribution GNU.
2719 D'autres noms de sorties conventionnels sont @code{lib} pour les
2720 bibliothèques et éventuellement les fichiers d'en-tête, @code{bin} pour les
2721 programmes indépendants et @code{debug} pour les informations de débogage
2722 (@pxref{Installer les fichiers de débogage}). Les sorties d'un paquet sont listés
2723 dans la troisième colonne de la sortie de @command{guix package
2724 --list-available} (@pxref{Invoquer guix package}).
2725
2726
2727 @node Invoquer guix gc
2728 @section Invoquer @command{guix gc}
2729
2730 @cindex ramasse-miettes
2731 @cindex espace disque
2732 Les paquets qui sont installés mais pas utilisés peuvent être @dfn{glanés}.
2733 La commande @command{guix gc} permet aux utilisateurs de lancer
2734 explicitement le ramasse-miettes pour récupérer de l'espace dans le
2735 répertoire @file{/gnu/store}. C'est la @emph{seule} manière de supprimer
2736 des fichiers de @file{/gnu/store} — supprimer des fichiers ou des
2737 répertoires à la main peut le casser de manière impossible à réparer !
2738
2739 @cindex racines du GC
2740 @cindex racines du ramasse-miettes
2741 Le ramasse-miettes a un ensemble de @dfn{racines} connues : tout fichier
2742 dans @file{/gnu/store} atteignable depuis une racine est considéré comme
2743 @dfn{utilisé} et ne peut pas être supprimé ; tous les autres fichiers sont
2744 considérés comme @dfn{inutilisés} et peuvent être supprimés. L'ensemble des
2745 racines du ramasse-miettes (ou « racines du GC » pour faire court) inclue
2746 les profils par défaut des utilisateurs ; par défaut les liens symboliques
2747 sous @file{/var/guix/gcroots} représentent ces racines du GC. De nouvelles
2748 racines du GC peuvent être ajoutées avec la @command{guix build -- root} par
2749 exemple (@pxref{Invoquer guix build}).
2750
2751 Avant de lancer @code{guix gc --collect-garbage} pour faire de la place,
2752 c'est souvent utile de supprimer les anciennes génération des profils
2753 utilisateurs ; de cette façon les anciennes constructions de paquets
2754 référencées par ces générations peuvent être glanées. Cela se fait en
2755 lançaint @code{guix package --delete-generations} (@pxref{Invoquer guix package}).
2756
2757 Nous recommandons de lancer le ramasse-miettes régulièrement ou lorsque vous
2758 avez besoin d'espace disque. Par exemple pour garantir qu'au moins
2759 5@tie{}Go d'espace reste libre sur votre disque, lancez simplement :
2760
2761 @example
2762 guix gc -F 5G
2763 @end example
2764
2765 Il est parfaitement possible de le lancer comme une tâche périodique
2766 non-interactive (@pxref{Exécution de tâches planifiées} pour apprendre comment
2767 paramétrer une telle tâche sur GuixSD). Lancer @command{guix gc} sans
2768 argument ramassera autant de miettes que possible mais ça n'est pas le plus
2769 pratique : vous pourriez vous retrouver à reconstruire ou re-télécharger des
2770 logiciels « inutilisés » du point de vu du GC mais qui sont nécessaires pour
2771 construire d'autres logiciels — p.@: ex.@: la chaîne de compilation.
2772
2773 La command @command{guix gc} a trois modes d'opération : il peut être
2774 utilisé pour glaner des fichiers inutilisés (par défaut), pour supprimer des
2775 fichiers spécifiques (l'option @code{--delete}), pour afficher des
2776 informations sur le ramasse-miettes ou pour des requêtes plus avancées. Les
2777 options du ramasse-miettes sont :
2778
2779 @table @code
2780 @item --collect-garbage[=@var{min}]
2781 @itemx -C [@var{min}]
2782 Ramasse les miettes — c.-à-d.@: les fichiers inaccessibles de
2783 @file{/gnu/store} et ses sous-répertoires. C'est l'opération par défaut
2784 lorsqu'aucune option n'est spécifiée.
2785
2786 Lorsque @var{min} est donné, s'arrêter une fois que @var{min} octets ont été
2787 collectés. @var{min} pour être un nombre d'octets ou inclure un suffixe
2788 d'unité, comme @code{MiB} pour mébioctet et @code{GB} pour gigaoctet
2789 (@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
2790
2791 Lorsque @var{min} est omis, tout glaner.
2792
2793 @item --free-space=@var{libre}
2794 @itemx -F @var{libre}
2795 Glaner jusqu'à ce que @var{libre} espace soit disponible dans
2796 @file{/gnu/store} si possible ; @var{libre} est une quantité de stockage
2797 comme @code{500MiB} comme décrit ci-dessus.
2798
2799 Lorsque @var{libre} ou plus est disponible dans @file{/gnu/store} ne rien
2800 faire et s'arrêter immédiatement.
2801
2802 @item --delete
2803 @itemx -d
2804 Essayer de supprimer tous les fichiers et les répertoires du dépôt spécifiés
2805 en argument. Cela échoue si certains des fichiers ne sont pas dans le dépôt
2806 ou s'ils sont toujours utilisés.
2807
2808 @item --list-failures
2809 Lister les éléments du dépôt qui correspondent à des échecs de construction
2810
2811 Cela n'affiche rien à moins que le démon n'ait été démarré avec
2812 @option{--cache-failures} (@pxref{Invoquer guix-daemon,
2813 @option{--cache-failures}}).
2814
2815 @item --clear-failures
2816 Supprimer les éléments du dépôt spécifiés du cache des constructions
2817 échouées.
2818
2819 De nouveau, cette option ne fait de sens que lorsque le démon est démarré
2820 avec @option{--cache-failures}. Autrement elle ne fait rien.
2821
2822 @item --list-dead
2823 Montrer la liste des fichiers et des répertoires inutilisés encore présents
2824 dans le dépôt — c.-à-d.@: les fichiers et les répertoires qui ne sont plus
2825 atteignables par aucune racine.
2826
2827 @item --list-live
2828 Montrer la liste des fichiers et des répertoires du dépôt utilisés.
2829
2830 @end table
2831
2832 En plus, les références entre les fichiers existants du dépôt peuvent être
2833 demandés :
2834
2835 @table @code
2836
2837 @item --references
2838 @itemx --referrers
2839 @cindex dépendances des paquets
2840 Lister les références (respectivement les référents) des fichiers du dépôt
2841 en argument.
2842
2843 @item --requisites
2844 @itemx -R
2845 @cindex closure
2846 Lister les prérequis des fichiers du dépôt passés en argument. Les
2847 prérequis sont le fichier du dépôt lui-même, leur références et les
2848 références de ces références, récursivement. En d'autre termes, la liste
2849 retournée est la @dfn{closure transitive} des fichiers du dépôt.
2850
2851 @xref{Invoquer guix size} pour un outil pour surveiller la taille de la
2852 closure d'un élément. @xref{Invoquer guix graph} pour un outil pour
2853 visualiser le graphe des références.
2854
2855 @item --derivers
2856 @cindex dérivation
2857 Renvoie les dérivations menant aux éléments du dépôt donnés
2858 (@pxref{Dérivations}).
2859
2860 Par exemple cette commande :
2861
2862 @example
2863 guix gc --derivers `guix package -I ^emacs$ | cut -f4`
2864 @end example
2865
2866 @noindent
2867 renvoie les fichiers @file{.drv} menant au paquet @code{emacs} installé dans
2868 votre profil.
2869
2870 Remarquez qu'il peut n'y avoir aucun fichier @file{.drv} par exemple quand
2871 ces fichiers ont été glanés. Il peut aussi y avoir plus d'un fichier
2872 @file{.drv} correspondant à cause de dérivations à sortie fixées.
2873 @end table
2874
2875 Enfin, les options suivantes vous permettent de vérifier l'intégrité du
2876 dépôt et de contrôler l'utilisation du disque.
2877
2878 @table @option
2879
2880 @item --verify[=@var{options}]
2881 @cindex intégrité, du dépôt
2882 @cindex vérification d'intégrité
2883 Vérifier l'intégrité du dépôt.
2884
2885 Par défaut, s'assurer que tous les éléments du dépôt marqués comme valides
2886 dans la base de données du démon existent bien dans @file{/gnu/store}.
2887
2888 Lorsqu'elle est fournie, l'@var{option} doit être une liste séparée par des
2889 virgule de l'un ou plus parmi @code{contents} et @code{repair}.
2890
2891 Lorsque vous passez @option{--verify=contents}, le démon calcul le hash du
2892 contenu de chaque élément du dépôt et le compare au hash de sa base de
2893 données. Les différences de hash sont rapportées comme des corruptions de
2894 données. Comme elle traverse @emph{tous les fichiers du dépôt}, cette
2895 commande peut prendre très longtemps pour terminer, surtout sur un système
2896 avec un disque lent.
2897
2898 @cindex réparer le dépôt
2899 @cindex corruption, récupérer de
2900 Utiliser @option{--verify=repair} ou @option{--verify=contents,repair} fait
2901 que le démon essaie de réparer les objets du dépôt corrompus en récupérant
2902 leurs substituts (@pxref{Substituts}). Comme la réparation n'est pas
2903 atomique et donc potentiellement dangereuse, elle n'est disponible que pour
2904 l'administrateur système. Une alternative plus légère lorsque vous
2905 connaissez exactement quelle entrée est corrompue consiste à lancer
2906 @command{guix build --repair} (@pxref{Invoquer guix build}).
2907
2908 @item --optimize
2909 @cindex déduplication
2910 Optimiser le dépôt en liant en dur les fichiers identiques — c'est la
2911 @dfn{déduplication}.
2912
2913 Le démon effectue une déduplication à chaque construction réussie ou import
2914 d'archive à moins qu'il n'ait été démarré avec
2915 @code{--disable-deduplication} (@pxref{Invoquer guix-daemon,
2916 @code{--disable-deduplication}}). Ainsi, cette option est surtout utile
2917 lorsque le démon tourne avec @code{--disable-deduplication}.
2918
2919 @end table
2920
2921 @node Invoquer guix pull
2922 @section Invoquer @command{guix pull}
2923
2924 @cindex mettre à niveau Guix
2925 @cindex mettre à jour Guix
2926 @cindex @command{guix pull}
2927 @cindex pull
2928 Les paquets sont installés ou mis à jour vers la dernière version disponible
2929 dans la distribution actuellement disponible sur votre machine locale. Pour
2930 mettre à jour cette distribution, en même temps que les outils Guix, vous
2931 devez lancer @command{guix pull} ; la commande télécharge le dernier code
2932 source de Guix et des descriptions de paquets et le déploie. Le code source
2933 est téléchargé depuis un dépôt @uref{https://git-scm.com, Git}, par défaut
2934 le dépôt officiel de GNU@tie{}Guix, bien que cela puisse être personnalisé.
2935
2936 À la fin, @command{guix package} utilisera les paquets et les versions des
2937 paquets de la copie de Guix tout juste récupérée. Non seulement ça, mais
2938 toutes les commandes Guix et les modules Scheme seront aussi récupérés
2939 depuis la dernière version. Les nouvelles sous-commandes de @command{guix}
2940 ajoutés par la mise à jour sont aussi maintenant disponibles.
2941
2942 Chaque utilisateur peut mettre à jour sa copie de Guix avec @command{guix
2943 pull} et l'effet est limité à l'utilisateur qui a lancé @command{guix
2944 pull}. Par exemple, lorsque l'utilisateur @code{root} lance @command{guix
2945 pull}, cela n'a pas d'effet sur la version de Guix que vois @code{alice} et
2946 vice-versa
2947
2948 Le résultat après avoir lancé @command{guix pull} est un @dfn{profil}
2949 disponible sous @file{~/.config/guix/current} contenant la dernière version
2950 de Guix. Ainsi, assurez-vous de l'ajouter au début de votre chemin de
2951 recherche pour que vous utilisiez la dernière version. Le même conseil
2952 s'applique au manuel Info (@pxref{Documentation}) :
2953
2954 @example
2955 export PATH="$HOME/.config/guix/current/bin:$PATH"
2956 export INFOPATH="$HOME/.config/guix/current/share/info:$INFOPATH"
2957 @end example
2958
2959 L'option @code{--list-generations} ou @code{-l} liste les anciennes
2960 générations produites par @command{guix pull}, avec des détails sur leur
2961 origine :
2962
2963 @example
2964 $ guix pull -l
2965 Génération 1 10 juin 2018 00:18:18
2966 guix 65956ad
2967 URL du dépôt : https://git.savannah.gnu.org/git/guix.git
2968 branche : origin/master
2969 commit : 65956ad3526ba09e1f7a40722c96c6ef7c0936fe
2970
2971 Génération 2 11 juin 2018 11:02:49
2972 guix e0cc7f6
2973 URL du dépôt : https://git.savannah.gnu.org/git/guix.git
2974 branche : origin/master
2975 commit : e0cc7f669bec22c37481dd03a7941c7d11a64f1d
2976 2 nouveaux paquets : keepalived, libnfnetlink
2977 6 paquets mis à jour : emacs-nix-mode@@2.0.4,
2978 guile2.0-guix@@0.14.0-12.77a1aac, guix@@0.14.0-12.77a1aac,
2979 heimdal@@7.5.0, milkytracker@@1.02.00, nix@@2.0.4
2980
2981 Génération 3 13 juin 2018 23:31:07 (actuelle)
2982 guix 844cc1c
2983 URL du dépôt : https://git.savannah.gnu.org/git/guix.git
2984 branche : origin/master
2985 commit : 844cc1c8f394f03b404c5bb3aee086922373490c
2986 28 nouveaux paquets : emacs-helm-ls-git, emacs-helm-mu, @dots{}
2987 69 paquets mis à jour : borg@@1.1.6, cheese@@3.28.0, @dots{}
2988 @end example
2989
2990 @ref{Invoquer guix describe, @command{guix describe}} pour d'autres manières
2991 de décrire le statut actuel de Guix.
2992
2993 Ce profil @code{~/.config/guix/current} fonctionne comme les autres profils
2994 créés par @command{guix package} (@pxref{Invoquer guix package}).
2995 C'est-à-dire que vous pouvez lister les générations, revenir en arrière à
2996 une génération précédente — c.-à-d.@: la version de Guix précédente — etc :
2997
2998 @example
2999 $ guix package -p ~/.config/guix/current --roll-back
3000 passé de la génération 3 à 2
3001 $ guix package -p ~/.config/guix/current --delete-generations=1
3002 suppression de /var/guix/profiles/per-user/charlie/current-guix-1-link
3003 @end example
3004
3005 La commande @command{guix pull} est typiquement invoquée sans arguments mais
3006 il supporte les options suivantes :
3007
3008 @table @code
3009 @item --url=@var{url}
3010 @itemx --commit=@var{commit}
3011 @itemx --branch=@var{branche}
3012 Télécharger le code depuis l'@var{url} spécifié, au @var{commit} donné (un
3013 commit Git valide représenté par une chaîne hexadécimale) ou à la branche
3014 @var{branch}.
3015
3016 @cindex @file{channels.scm}, fichier de configuration
3017 @cindex fichier de configuration pour les canaux
3018 Ces options sont fournies pour votre confort, mais vous pouvez aussi
3019 spécifier votre configuration dans le fichier
3020 @file{~/.config/guix/channels.scm} ou en utilisant l'option
3021 @option{--channels} (voir plus bas).
3022
3023 @item --channels=@var{file}
3024 @itemx -C @var{file}
3025 Lit la liste des canaux dans @var{file} plutôt que dans
3026 @file{~/.config/guix/channels.scm}. @var{file} doit contenir un code Scheme
3027 qui s'évalue en une liste d'objets de canaux. @xref{Canaux} pour plus
3028 d'informations.
3029
3030 @item --list-generations[=@var{motif}]
3031 @itemx -l [@var{motif}]
3032 Liste toutes les générations de @file{~/.config/guix/current} ou, si
3033 @var{motif} est fournit, le sous-ensemble des générations qui correspondent
3034 à @var{motif}. La syntaxe de @var{motif} est la même qu'avec @code{guix
3035 package --list-generations} (@pxref{Invoquer guix package}).
3036
3037 @ref{Invoquer guix describe}, pour une manière d'afficher des informations
3038 sur la génération actuelle uniquement.
3039
3040 @item --profile=@var{profil}
3041 @itemx -p @var{profil}
3042 Utiliser le @var{profil} à la place de @file{~/.config/guix/current}.
3043
3044 @item --dry-run
3045 @itemx -n
3046 Montrer quels commits des canaux seraient utilisés et ce qui serait
3047 construit ou substitué mais ne pas le faire vraiment.
3048
3049 @item --verbose
3050 Produire une sortie verbeuse, en écrivant les journaux de construction sur
3051 la sortie d'erreur standard.
3052
3053 @item --bootstrap
3054 Utiliser le programme d'amorçage Guile pour construire la dernière version
3055 de Guix. Cette option n'est utile que pour les développeurs de Guix.
3056 @end table
3057
3058 Le mécanisme de @dfn{canaux} vous permet de dire à @command{guix pull} quels
3059 répertoires et branches récupérer, ainsi que les dépôts
3060 @emph{supplémentaires} contenant des modules de paquets qui devraient être
3061 déployés. @xref{Canaux} pour plus d'information.
3062
3063 En plus, @command{guix pull} supporte toutes les options de construction
3064 communes (@pxref{Options de construction communes}).
3065
3066 @node Canaux
3067 @section Canaux
3068
3069 @cindex canaux
3070 @cindex @file{channels.scm}, fichier de configuration
3071 @cindex fichier de configuration pour les canaux
3072 @cindex @command{guix pull}, fichier de configuration
3073 @cindex configuration de @command{guix pull}
3074 Guix et sa collection de paquets sont mis à jour en lançant @command{guix
3075 pull} (@pxref{Invoquer guix pull}). Par défaut @command{guix pull}
3076 télécharge et déploie Guix lui-même depuis le dépôt officiel de
3077 GNU@tie{}Guix. Cela peut être personnalisé en définissant des @dfn{canaux}
3078 dans le fichier @file{~/.config/guix/channels.scm}. Un canal spécifie l'URL
3079 et la branche d'un répertoire Git à déployer et on peut demander à
3080 @command{guix pull} de récupérer un ou plusieurs canaux. En d'autres
3081 termes, les canaux peuvent être utilisés pour personnaliser et pour
3082 @emph{étendre} Guix, comme on le verra plus bas.
3083
3084 @subsection Utiliser un canal Guix personnalisé
3085
3086 Le canal nommé @code{guix} spécifie où Guix lui-même — ses outils en ligne
3087 de commande ainsi que sa collection de paquets — sera téléchargé. Par
3088 exemple, supposons que vous voulez effectuer les mises à jour depuis votre
3089 propre copie du dépôt Guix sur @code{example.org}, et plus particulièrement
3090 depuis la branche @code{super-hacks}. Vous pouvez écrire cette
3091 spécification dans @code{~/.config/guix/channels.scm} :
3092
3093 @lisp
3094 ;; Dit à « guix pull » d'utiliser mon propre dépôt.
3095 (list (channel
3096 (name 'guix)
3097 (url "https://example.org/my-guix.git")
3098 (branch "super-hacks")))
3099 @end lisp
3100
3101 @noindent
3102 Maintenant, @command{guix pull} récupérera le code depuis la branche
3103 @code{super-hacks} du dépôt sur @code{example.org}.
3104
3105 @subsection Spécifier des canaux supplémentaires
3106
3107 @cindex étendre la collection de paquets (canaux)
3108 @cindex paquets personnels (canaux)
3109 @cindex canaux, pour des paquets personnels
3110 Vous pouvez aussi spécifier des @emph{canaux supplémentaires} à récupérer.
3111 Disons que vous avez un ensemble de paquets personnels ou de variantes
3112 personnalisées qu'il ne vaudrait pas le coup de contribuer au projet Guix,
3113 mais que vous voudriez pouvoir utiliser de manière transparente sur la ligne
3114 de commande. Vous écririez d'abord des modules contenant ces définitions de
3115 paquets (@pxref{Modules de paquets}), en les maintenant dans un dépôt Git, puis
3116 vous ou n'importe qui d'autre pourrait l'utiliser comme un canal
3117 supplémentaire où trouver ces paquets. Sympa, non ?
3118
3119 @c What follows stems from discussions at
3120 @c <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22629#134> as well as
3121 @c earlier discussions on guix-devel@gnu.org.
3122 @quotation Attention
3123 Avant que vous, cher utilisateur, ne vous exclamiez « Oh mais c'est
3124 @emph{super génial} ! » et que vous ne publiez vos canaux personnels
3125 publiquement, nous voudrions vous donner quelques avertissements :
3126
3127 @itemize
3128 @item
3129 Avant de publier un canal, envisagez de contribuer vos définitions de
3130 paquets dans Guix (@pxref{Contribuer}). Guix en tant que projet est
3131 ouvert à tous les logiciels libres de toutes sortes, et les paquets dans
3132 Guix sont déjà disponibles à tous les utilisateurs de Guix et bénéficient
3133 des processus d'assurance qualité du projet.
3134
3135 @item
3136 Lorsque vous maintenez des définitions de paquets en dehors de Guix, nous,
3137 les développeurs de Guix, considérons que @emph{la charge de la
3138 compatibilité vous incombe}. Rappelez-vous que les modules de paquets et
3139 les définitions de paquets ne sont que du code Scheme qui utilise diverses
3140 interfaces de programmation (API). Nous souhaitons rester libres de changer
3141 ces API pour continuer à améliorer Guix, éventuellement d'une manière qui
3142 casse votre canal. Nous ne changeons jamais l'API gratuitement, mais nous
3143 ne nous engageons @emph{pas} à geler les API non plus.
3144
3145 @item
3146 Corollaire : si vous utilisez un canal externe et que le canal est cassé,
3147 merci de @emph{rapporter le problème à l'auteur du canal}, pas au projet
3148 Guix.
3149 @end itemize
3150
3151 Vous avez été prévenus ! Maintenant, nous pensons que des canaux externes
3152 sont une manière pratique d'exercer votre liberté pour augmenter la
3153 collection de paquets de Guix et de partager vos améliorations, qui sont les
3154 principes de bases du @uref{https://www.gnu.org/philosophy/free-sw.html,
3155 logiciel libe}. Contactez-nous par courriel sur @email{guix-devel@@gnu.org}
3156 si vous souhaitez discuter à ce propos.
3157 @end quotation
3158
3159 Une fois que vous avez un dépôt Git contenant vos propres modules de
3160 paquets, vous pouvez écrire @code{~/.config/guix/channels.scm} pour dire à
3161 @command{guix pull} de récupérer votre canal personnel @emph{en plus} des
3162 canaux Guix par défaut :
3163
3164 @vindex %default-channels
3165 @lisp
3166 ;; Ajouter mes paquets personnels à ceux fournis par Guix.
3167 (cons (channel
3168 (name 'my-personal-packages)
3169 (url "https://example.org/personal-packages.git"))
3170 %default-channels)
3171 @end lisp
3172
3173 @noindent
3174 Note that the snippet above is (as always!)@: Scheme code; we use
3175 @code{cons} to add a channel the list of channels that the variable
3176 @code{%default-channels} is bound to (@pxref{Pairs, @code{cons} and lists,,
3177 guile, GNU Guile Reference Manual}). With this file in place, @command{guix
3178 pull} builds not only Guix but also the package modules from your own
3179 repository. The result in @file{~/.config/guix/current} is the union of
3180 Guix with your own package modules:
3181
3182 @example
3183 $ guix pull --list-generations
3184 @dots{}
3185 Génération 19 Aug 27 2018 16:20:48
3186 guix d894ab8
3187 URL du dépôt : https://git.savannah.gnu.org/git/guix.git
3188 branche : master
3189 commit : d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300
3190 my-personal-packages dd3df5e
3191 URL du dépôt : https://example.org/personal-packages.git
3192 branche : master
3193 commit : dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb
3194 11 nouveaux paquets : my-gimp, my-emacs-with-cool-features, @dots{}
3195 4 paquets mis à jour : emacs-racket-mode@@0.0.2-2.1b78827, @dots{}
3196 @end example
3197
3198 @noindent
3199 La sortie de @command{guix pull} ci-dessus montre que la génération@tie{}19
3200 contient aussi bien Guix que les paquets du canal
3201 @code{my-personal-packages}. Parmi les nouveaux paquets et les paquets mis
3202 à jour qui sont listés, certains comme @code{my-gimp} et
3203 @code{my-emacs-with-cool-features} peuvent provenir de
3204 @code{my-personal-packages}, tandis que d'autres viennent du canal par
3205 défaut de Guix.
3206
3207 @subsection Répliquer Guix
3208
3209 @cindex épinglage, canaux
3210 @cindex répliquer Guix
3211 @cindex reproductibilité, de Guix
3212 La sortie de @command{guix pull --list-generations} ci-dessus montre
3213 précisément quels commits ont été utilisés pour construire cette instance de
3214 Guix. Nous pouvons donc la répliquer, disons sur une autre machine, en
3215 fournissant une spécification de canal dans
3216 @file{~/.config/guix/channels.scm} qui est « épinglé » à ces commits :
3217
3218 @lisp
3219 ;; Déployer des commits précis de mes canaux préférés.
3220 (list (channel
3221 (name 'guix)
3222 (url "https://git.savannah.gnu.org/git/guix.git")
3223 (commit "d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300"))
3224 (channel
3225 (name 'my-personal-packages)
3226 (url "https://example.org/personal-packages.git")
3227 (branch "dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb")))
3228 @end lisp
3229
3230 La commande @command{guix describe --format=channels} peut même générer
3231 cette liste de canaux directement (@pxref{Invoquer guix describe}).
3232
3233 À ce moment les deux machines font tourner @emph{exactement le même Guix},
3234 avec l'accès @emph{exactement aux même paquets}. La sortie de @command{guix
3235 build gimp} sur une machine sera exactement la même, au bit près, que la
3236 sortie de la même commande sur l'autre machine. Cela signifie aussi que les
3237 deux machines ont accès à tous les codes sources de Guix, et transitivement,
3238 à tous les codes sources de tous les paquets qu'il définit.
3239
3240 Cela vous donne des super-pouvoirs, ce qui vous permet de suivre la
3241 provenance des artefacts binaires avec un grain très fin et de reproduire
3242 les environnements logiciels à volonté — une sorte de capacité de «
3243 méta-reproductibilité », si vous voulez. @xref{Inférieurs}, pour une autre
3244 manière d'utiliser ces super-pouvoirs.
3245
3246 @node Inférieurs
3247 @section Inférieurs
3248
3249 @c TODO: Remove this once we're more confident about API stability.
3250 @quotation Remarque
3251 La fonctionnalité décrite ici est un « démonstrateur technique » à la
3252 version @value{VERSION}. Ainsi, l'interface est sujette à changements.
3253 @end quotation
3254
3255 @cindex inférieurs
3256 @cindex composition de révisions de Guix
3257 Parfois vous pourriez avoir à mélanger des paquets de votre révision de Guix
3258 avec des paquets disponibles dans une révision différente de Guix. Les
3259 @dfn{inférieurs} de Guix vous permettent d'accomplir cette tâche en
3260 composant différentes versions de Guix de manière arbitraire.
3261
3262 @cindex paquets inférieurs
3263 Techniquement, un « inférieur » est surtout un processus Guix séparé
3264 connecté à votre processus Guix principal à travers un REPL (@pxref{Invoquer guix repl}). Le module @code{(guix inferior)} vous permet de créer des
3265 inférieurs et de communiquer avec eux. Il fournit aussi une interface de
3266 haut-niveau pour naviguer dans les paquets d'un inférieur — @dfn{des paquets
3267 inférieurs} — et les manipuler.
3268
3269 Lorsqu'on les combine avec des canaux (@pxref{Canaux}), les inférieurs
3270 fournissent une manière simple d'interagir avec un révision de Guix
3271 séparée. Par exemple, disons que vous souhaitiez installer dans votre
3272 profil le paquet guile actuel, avec le @code{guile-json} d'une ancienne
3273 révision de Guix — peut-être parce que la nouvelle version de
3274 @code{guile-json} a une API incompatible et que vous voulez lancer du code
3275 avec l'ancienne API. Pour cela, vous pourriez écrire un manifeste à
3276 utiliser avec @code{guix package --manifest} (@pxref{Invoquer guix package})
3277 ; dans ce manifeste, vous créeriez un inférieur pour l'ancienne révision de
3278 Guix qui vous intéresse et vous chercheriez le paquet @code{guile-json} dans
3279 l'inférieur :
3280
3281 @lisp
3282 (use-modules (guix inferior) (guix channels)
3283 (srfi srfi-1)) ;pour « first »
3284
3285 (define channels
3286 ;; L'ancienne révision depuis laquelle on veut
3287 ;; extraire guile-json.
3288 (list (channel
3289 (name 'guix)
3290 (url "https://git.savannah.gnu.org/git/guix.git")
3291 (commit
3292 "65956ad3526ba09e1f7a40722c96c6ef7c0936fe"))))
3293
3294 (define inferior
3295 ;; Un inférieur représentant la révision ci-dessus.
3296 (inferior-for-channels channels))
3297
3298 ;; Maintenant on crée un manifeste avec le paquet « guile » actuel
3299 ;; et l'ancien paquet « guile-json ».
3300 (packages->manifest
3301 (list (first (lookup-inferior-packages inferior "guile-json"))
3302 (specification->package "guile")))
3303 @end lisp
3304
3305 Durant la première exécution, @command{guix package --manifest} pourrait
3306 avoir besoin de construire le canal que vous avez spécifié avant de créer
3307 l'inférieur ; les exécutions suivantes seront bien plus rapides parce que la
3308 révision de Guix sera déjà en cache.
3309
3310 Le module @code{(guix inferior)} fournit les procédures suivantes pour
3311 ouvrir un inférieur :
3312
3313 @deffn {Procédure Scheme} inferior-for-channels @var{channels} @
3314 [#:cache-directory] [#:ttl]
3315 Renvoie un inférieur pour @var{channels}, une liste de canaux. Elle utilise
3316 le cache dans @var{cache-directory}, où les entrées peuvent être glanées
3317 après @var{ttl} secondes. Cette procédure ouvre une nouvelle connexion au
3318 démon de construction.
3319
3320 Elle a pour effet de bord de construire ou de substituer des binaires pour
3321 @var{channels}, ce qui peut prendre du temps.
3322 @end deffn
3323
3324 @deffn {Procédure Scheme} open-inferior @var{directory} @
3325 [#:command "bin/guix"]
3326 Ouvre le Guix inférieur dans @var{directory} et lance
3327 @code{@var{directory}/@var{command} repl} ou équivalent. Renvoie @code{#f}
3328 si l'inférieur n'a pas pu être lancé.
3329 @end deffn
3330
3331 @cindex paquets inférieurs
3332 Les procédures listées plus bas vous permettent d'obtenir et de manipuler
3333 des paquets inférieurs.
3334
3335 @deffn {Procédure Scheme} inferior-packages @var{inferior}
3336 Renvoie la liste des paquets connus de l'inférieur @var{inferior}.
3337 @end deffn
3338
3339 @deffn {Procédure Scheme} lookup-inferior-packages @var{inferior} @var{name} @
3340 [@var{version}]
3341 Renvoie la liste triée des paquets inférieurs qui correspondent à @var{name}
3342 dans @var{inferior}, avec le plus haut numéro de version en premier. Si
3343 @var{version} est vrai, renvoie seulement les paquets avec un numéro de
3344 version préfixé par @var{version}.
3345 @end deffn
3346
3347 @deffn {Procédure Scheme} inferior-package? @var{obj}
3348 Renvoie vrai si @var{obj} est un paquet inférieur.
3349 @end deffn
3350
3351 @deffn {Procédure Scheme} inferior-package-name @var{package}
3352 @deffnx {Procédure Scheme} inferior-package-version @var{package}
3353 @deffnx {Procédure Scheme} inferior-package-synopsis @var{package}
3354 @deffnx {Procédure Scheme} inferior-package-description @var{package}
3355 @deffnx {Procédure Scheme} inferior-package-home-page @var{package}
3356 @deffnx {Procédure Scheme} inferior-package-location @var{package}
3357 @deffnx {Procédure Scheme} inferior-package-inputs @var{package}
3358 @deffnx {Procédure Scheme} inferior-package-native-inputs @var{package}
3359 @deffnx {Procédure Scheme} inferior-package-propagated-inputs @var{package}
3360 @deffnx {Procédure Scheme} inferior-package-transitive-propagated-inputs @var{package}
3361 @deffnx {Procédure Scheme} inferior-package-native-search-paths @var{package}
3362 @deffnx {Procédure Scheme} inferior-package-transitive-native-search-paths @var{package}
3363 @deffnx {Procédure Scheme} inferior-package-search-paths @var{package}
3364 Ces procédures sont la contrepartie des accesseurs des enregistrements de
3365 paquets (@pxref{Référence de paquet}). La plupart fonctionne en effectuant
3366 des requêtes à l'inférieur dont provient @var{package}, donc l'inférieur
3367 doit toujours être disponible lorsque vous appelez ces procédures.
3368 @end deffn
3369
3370 Les paquets inférieurs peuvent être utilisés de manière transparente comme
3371 tout autre paquet ou objet simili-fichier dans des G-expressions
3372 (@pxref{G-Expressions}). Ils sont aussi gérés de manière transparente par
3373 la procédure @code{packages->manifest}, qui est typiquement utilisée dans
3374 des manifestes (@pxref{Invoquer guix package, l'option @option{--manifest}
3375 de @command{guix package}}). Ainsi, vous pouvez insérer un paquet inférieur
3376 à peu près n'importe où vous utiliseriez un paquet normal : dans des
3377 manifestes, dans le champ @code{packages} de votre déclaration
3378 @code{operating-system}, etc.
3379
3380 @node Invoquer guix describe
3381 @section Invoquer @command{guix describe}
3382
3383 @cindex reproductibilité
3384 @cindex répliquer Guix
3385 Souvent vous voudrez répondre à des questions comme « quelle révision de
3386 Guix j'utilise ? » ou « quels canaux est-ce que j'utilise ? ». C'est une
3387 information utile dans de nombreuses situations : si vous voulez
3388 @emph{répliquer} un environnement sur une machine différente ou un compte
3389 utilisateur, si vous voulez rapporter un bogue ou pour déterminer quel
3390 changement dans les canaux que vous utilisez l'a causé ou si vous voulez
3391 enregistrer l'état de votre système pour le reproduire. La commande
3392 @command{guix describe} répond à ces questions.
3393
3394 Lorsqu'elle est lancée depuis un @command{guix} mis à jour avec
3395 @command{guix pull}, @command{guix describe} affiche les canaux qui ont été
3396 construits, avec l'URL de leur dépôt et l'ID de leur commit
3397 (@pxref{Canaux}) :
3398
3399 @example
3400 $ guix describe
3401 Generation 10 03 sep. 2018 17:32:44 (actuelle)
3402 guix e0fa68c
3403 URL du dépôt : https://git.savannah.gnu.org/git/guix.git
3404 branche : master
3405 commit : e0fa68c7718fffd33d81af415279d6ddb518f727
3406 @end example
3407
3408 Si vous connaissez bien le système de contrôle de version Git, cela
3409 ressemble en essence à @command{git describe} ; la sortie est aussi
3410 similaire à celle de @command{guix pull --list-generations}, mais limitée à
3411 la génération actuelle (@pxref{Invoquer guix pull, l'option
3412 @option{--list-generations}}). Comme l'ID de commit de Git ci-dessus se
3413 réfère sans aucune ambiguïté à un instantané de Guix, cette information est
3414 tout ce dont vous avez besoin pour décrire la révision de Guix que vous
3415 utilisez et pour la répliquer.
3416
3417 Pour rendre plus facile la réplication de Guix, @command{guix describe} peut
3418 aussi renvoyer une liste de canaux plutôt que la description lisible par un
3419 humain au-dessus :
3420
3421 @example
3422 $ guix describe -f channels
3423 (list (channel
3424 (name 'guix)
3425 (url "https://git.savannah.gnu.org/git/guix.git")
3426 (commit
3427 "e0fa68c7718fffd33d81af415279d6ddb518f727")))
3428 @end example
3429
3430 @noindent
3431 Vous pouvez sauvegarder ceci dans un fichier et le donner à @command{guix
3432 pull -C} sur une autre machine ou plus tard, ce qui instantiera
3433 @emph{exactement la même révision de Guix} (@pxref{Invoquer guix pull,
3434 l'option @option{-C}}). À partir de là, comme vous pouvez déployer la même
3435 révision de Guix, vous pouvez aussi bien @emph{répliquer un environnement
3436 logiciel complet}. Nous pensons humblement que c'est @emph{génial}, et nous
3437 espérons que vous aimerez ça aussi !
3438
3439 Voici les détails des options supportées par @command{guix describe} :
3440
3441 @table @code
3442 @item --format=@var{format}
3443 @itemx -f @var{format}
3444 Produire la sortie dans le @var{format} donné, parmi :
3445
3446 @table @code
3447 @item human
3448 produire une sortie lisible par un humain,
3449 @item canaux
3450 produire une liste de spécifications de canaux qui peut être passée à
3451 @command{guix pull -C} ou installée dans @file{~/.config/guix/channels.scm}
3452 (@pxref{Invoquer guix pull}),
3453 @item json
3454 @cindex JSON
3455 produire une liste de spécifications de canaux dans le format JSON,
3456 @item recutils
3457 produire une liste de spécifications de canaux dans le format Recutils.
3458 @end table
3459
3460 @item --profile=@var{profil}
3461 @itemx -p @var{profil}
3462 Afficher les informations sur le @var{profil}.
3463 @end table
3464
3465 @node Invoquer guix pack
3466 @section Invoquer @command{guix pack}
3467
3468 Parfois vous voulez passer un logiciel à des gens qui n'ont pas (encore !)
3469 la chance d'utiliser Guix. Vous leur diriez bien de lancer @command{guix
3470 package -i @var{quelque chose}} mais ce n'est pas possible dans ce cas.
3471 C'est là que @command{guix pack} entre en jeu.
3472
3473 @quotation Remarque
3474 Si vous cherchez comment échanger des binaires entre des machines où Guix
3475 est déjà installé, @pxref{Invoquer guix copy}, @ref{Invoquer guix publish},
3476 et @ref{Invoquer guix archive}.
3477 @end quotation
3478
3479 @cindex pack
3480 @cindex lot
3481 @cindex lot d'applications
3482 @cindex lot de logiciels
3483 La commande @command{guix pack} crée un @dfn{pack} ou @dfn{lot de logiciels}
3484 : elle crée une archive tar ou un autre type d'archive contenunt les
3485 binaires pour le logiciel qui vous intéresse ainsi que ses dépendances.
3486 L'archive qui en résulte peut être utilisée sur toutes les machines qui
3487 n'ont pas Guix et les gens peuvent lancer exactement les mêmes binaires que
3488 ceux que vous avez avec Guix. Le pack lui-même est créé d'une manière
3489 reproductible au bit près, pour que n'importe qui puisse vérifier qu'il
3490 contient bien les résultats que vous prétendez proposer.
3491
3492 Par exemple, pour créer un lot contenant Guile, Emacs, Geiser et toutes
3493 leurs dépendances, vous pouvez lancer :
3494
3495 @example
3496 $ guix pack guile emacs geiser
3497 @dots{}
3498 /gnu/store/@dots{}-pack.tar.gz
3499 @end example
3500
3501 Le résultat ici est une archive tar contenant un répertoire
3502 @file{/gnu/store} avec tous les paquets nécessaires. L'archive qui en
3503 résulte contient un @dfn{profil} avec les trois paquets qui vous intéressent
3504 ; le profil est le même qui celui qui aurait été créé avec @command{guix
3505 package -i}. C'est ce mécanisme qui est utilisé pour créer les archives tar
3506 binaires indépendantes de Guix (@pxref{Installation binaire}).
3507
3508 Les utilisateurs de ce pack devraient lancer
3509 @file{/gnu/store/@dots{}-profile/bin/guile} pour lancer Guile, ce qui n'est
3510 pas très pratique. Pour éviter cela, vous pouvez créer, disons, un lien
3511 symbolique @file{/opt/gnu/bin} vers le profil :
3512
3513 @example
3514 guix pack -S /opt/gnu/bin=bin guile emacs geiser
3515 @end example
3516
3517 @noindent
3518 De cette façon, les utilisateurs peuvent joyeusement taper
3519 @file{/opt/gnu/bin/guile} et profiter.
3520
3521 @cindex binaires repositionnables, avec @command{guix pack}
3522 Et si le destinataire de votre pack n'a pas les privilèges root sur sa
3523 machine, et ne peut donc pas le décompresser dans le système de fichiers
3524 racine ? Dans ce cas, vous pourriez utiliser l'option @code{--relocatable}
3525 (voir plus bas). Cette option produite des @dfn{binaire repositionnables},
3526 ce qui signifie qu'ils peuvent être placés n'importe où dans l'arborescence
3527 du système de fichiers : dans l'exemple au-dessus, les utilisateurs peuvent
3528 décompresser votre archive dans leur répertoire personnel et lancer
3529 directement @file{./opt/gnu/bin/guile}.
3530
3531 @cindex Docker, construire une image avec guix pack
3532 Autrement, vous pouvez produire un pack au format d'image Docker avec la
3533 commande suivante :
3534
3535 @example
3536 guix pack -f docker guile emacs geiser
3537 @end example
3538
3539 @noindent
3540 Le résultat est une archive tar qui peut être passée à la commande
3541 @command{docker load}. Voir la
3542 @uref{https://docs.docker.com/engine/reference/commandline/load/,
3543 documentation de Docker} pour plus d'informations.
3544
3545 @cindex Singularity, construire une image avec guix pack
3546 @cindex SquashFS, construire une image avec guix pack
3547 Autrement, vous pouvez produire une image SquashFS avec la commande suivante
3548 :
3549
3550 @example
3551 guix pack -f squashfs guile emacs geiser
3552 @end example
3553
3554 @noindent
3555 Le résultat est une image de système de fichiers SquashFS qui peut soit être
3556 montée directement soit être utilisée comme image de conteneur de système de
3557 fichiers avec l'@uref{http://singularity.lbl.gov, environnement d'exécution
3558 conteneurisé Singularity}, avec des commandes comme @command{singularity
3559 shell} ou @command{singularity exec}.
3560
3561 Diverses options en ligne de commande vous permettent de personnaliser votre
3562 pack :
3563
3564 @table @code
3565 @item --format=@var{format}
3566 @itemx -f @var{format}
3567 Produire un pack dans le @var{format} donné.
3568
3569 Les formats disponibles sont :
3570
3571 @table @code
3572 @item tarball
3573 C'est le format par défaut. Il produit une archive tar contenant tous les
3574 binaires et les liens symboliques spécifiés.
3575
3576 @item docker
3577 Cela produit une archive tar qui suit la
3578 @uref{https://github.com/docker/docker/blob/master/image/spec/v1.2.md,
3579 spécification des images Docker}.
3580
3581 @item squashfs
3582 Cela produit une image SquashFS contenant tous les binaires et liens
3583 symboliques spécifiés, ainsi que des points de montages vides pour les
3584 systèmes de fichiers virtuels comme procfs.
3585 @end table
3586
3587 @item --relocatable
3588 @itemx -R
3589 Produit des @dfn{binaires repositionnables} — c.-à-d.@: des binaires que
3590 vous pouvez placer n'importe où dans l'arborescence du système de fichiers
3591 et les lancer à partir de là. Par exemple, si vous créez un pack contenant
3592 Bash avec :
3593
3594 @example
3595 guix pack -R -S /mybin=bin bash
3596 @end example
3597
3598 @noindent
3599 ...@: you can copy that pack to a machine that lacks Guix, and from your
3600 home directory as a normal user, run:
3601
3602 @example
3603 tar xf pack.tar.gz
3604 ./mybin/sh
3605 @end example
3606
3607 @noindent
3608 Dans ce shell, si vous tapez @code{ls /gnu/store}, vous remarquerez que
3609 @file{/gnu/store} apparaît et contient toutes les dépendances de
3610 @code{bash}, même si la machine n'a pas du tout de @file{/gnu/store} !
3611 C'est sans doute la manière la plus simple de déployer du logiciel construit
3612 avec Guix sur une machine sans Guix.
3613
3614 Il y a un inconvénient cependant : cette technique repose sur les
3615 @dfn{espaces de noms} du noyau Linux qui permettent à des utilisateurs
3616 non-privilégiés de monter des systèmes de fichiers ou de changer de racine.
3617 Les anciennes versions de Linux ne le supportaient pas et certaines
3618 distributions GNU/Linux les désactivent ; sur ces système, les programme du
3619 pack @emph{ne fonctionneront pas} à moins qu'ils ne soient décompressés à la
3620 racine du système de fichiers.
3621
3622 @item --expression=@var{expr}
3623 @itemx -e @var{expr}
3624 Considérer le paquet évalué par @var{expr}.
3625
3626 Cela a le même but que l'option de même nom de @command{guix build}
3627 (@pxref{Options de construction supplémentaires, @code{--expression} dans @command{guix
3628 build}}).
3629
3630 @item --manifest=@var{fichier}
3631 @itemx -m @var{fichier}
3632 Utiliser les paquets contenus dans l'objet manifeste renvoyé par le code
3633 Scheme dans @var{fichier}
3634
3635 Elle a un but similaire à l'option de même nom dans @command{guix package}
3636 (@pxref{profile-manifest, @option{--manifest}}) et utilise les mêmes
3637 fichiers manifeste. Ils vous permettent de définir une collection de
3638 paquets une fois et de l'utiliser aussi bien pour créer des profils que pour
3639 créer des archives pour des machines qui n'ont pas Guix d'installé.
3640 Remarquez que vous pouvez spécifier @emph{soit} un fichier manifeste,
3641 @emph{soit} une liste de paquet, mais pas les deux.
3642
3643 @item --system=@var{système}
3644 @itemx -s @var{système}
3645 Tenter de construire pour le @var{système} — p.@: ex.@: @code{i686-linux} —
3646 plutôt que pour le type de système de l'hôte de construction.
3647
3648 @item --target=@var{triplet}
3649 @cindex compilation croisée
3650 Effectuer une compilation croisée pour @var{triplet} qui doit être un
3651 triplet GNU valide, comme @code{"mips64el-linux-gnu"} (@pxref{Specifying
3652 target triplets, GNU configuration triplets,, autoconf, Autoconf}).
3653
3654 @item --compression=@var{outil}
3655 @itemx -C @var{outil}
3656 Compresser l'archive résultante avec @var{outil} — l'un des outils parmi
3657 @code{bzip2}, @code{xz}, @code{lzip} ou @code{none} pour aucune compression.
3658
3659 @item --symlink=@var{spec}
3660 @itemx -S @var{spec}
3661 Ajouter les liens symboliques spécifiés par @var{spec} dans le pack. Cette
3662 option peut apparaître plusieurs fois.
3663
3664 @var{spec} a la forme @code{@var{source}=@var{cible}}, où @var{source} est
3665 le lien symbolique qui sera créé et @var{cible} est la cible du lien.
3666
3667 Par exemple, @code{-S /opt/gnu/bin=bin} crée un lien symbolique
3668 @file{/opt/gnu/bin} qui pointe vers le sous-répertoire @file{bin} du profil.
3669
3670 @item --localstatedir
3671 @itemx --profile-name=@var{nom}
3672 Inclus le « répertoire d'état local », @file{/var/guix}, dans le lot qui en
3673 résulte, et notamment le profil
3674 @file{/var/guix/profiles/per-user/root/@var{nom}} — par défaut @var{nom} est
3675 @code{guix-profile}, ce qui correspond à @file{~root/.guix-profile}.
3676
3677 @file{/var/guix} contient la base de données du dépôt (@pxref{Le dépôt})
3678 ainsi que les racines du ramasse-miettes (@pxref{Invoquer guix gc}). Le
3679 fournir dans le pack signifie que le dépôt et « complet » et gérable par
3680 Guix ; ne pas le fournir dans le pack signifie que le dépôt est « mort » :
3681 aucun élément ne peut être ajouté ni enlevé après l'extraction du pack.
3682
3683 Un cas d'utilisation est l'archive binaire indépendante de Guix
3684 (@pxref{Installation binaire}).
3685
3686 @item --bootstrap
3687 Utiliser les programmes d'amorçage pour construire le pack. Cette option
3688 n'est utile que pour les développeurs de Guix.
3689 @end table
3690
3691 En plus, @command{guix pack} supporte toutes les options de construction
3692 communes (@pxref{Options de construction communes}) et toutes les options de
3693 transformation de paquets (@pxref{Options de transformation de paquets}).
3694
3695
3696 @node Invoquer guix archive
3697 @section Invoquer @command{guix archive}
3698
3699 @cindex @command{guix archive}
3700 @cindex archive
3701 La commande @command{guix archive} permet aux utilisateurs d'@dfn{exporter}
3702 des fichiers du dépôt dans une simple archive puis ensuite de les
3703 @dfn{importer} sur une machine qui fait tourner Guix. En particulier, elle
3704 permet de transférer des fichiers du dépôt d'une machine vers le dépôt d'une
3705 autre machine.
3706
3707 @quotation Remarque
3708 Si vous chercher une manière de produire des archives dans un format adapté
3709 pour des outils autres que Guix, @pxref{Invoquer guix pack}.
3710 @end quotation
3711
3712 @cindex exporter des éléments du dépôt
3713 Pour exporter des fichiers du dépôt comme une archive sur la sortie
3714 standard, lancez :
3715
3716 @example
3717 guix archive --export @var{options} @var{spécifications}...
3718 @end example
3719
3720 @var{spécifications} peut être soit des noms de fichiers soit des
3721 spécifications de paquets, comme pour @command{guix package}
3722 (@pxref{Invoquer guix package}). Par exemple, la commande suivante crée une
3723 archive contenant la sortie @code{gui} du paquet @code{git} et la sortie
3724 principale de @code{emacs} :
3725
3726 @example
3727 guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
3728 @end example
3729
3730 Si les paquets spécifiés ne sont pas déjà construits, @command{guix archive}
3731 les construit automatiquement. Le processus de construction peut être
3732 contrôlé avec les options de construction communes (@pxref{Options de construction communes}).
3733
3734 Pour transférer le paquet @code{emacs} vers une machine connectée en SSH, on
3735 pourrait lancer :
3736
3737 @example
3738 guix archive --export -r emacs | ssh la-machine guix archive --import
3739 @end example
3740
3741 @noindent
3742 De même, on peut transférer un profil utilisateur complet d'une machine à
3743 une autre comme cela :
3744
3745 @example
3746 guix archive --export -r $(readlink -f ~/.guix-profile) | \
3747 ssh la-machine guix-archive --import
3748 @end example
3749
3750 @noindent
3751 Cependant, remarquez que, dans les deux exemples, le paquet @code{emacs}, le
3752 profil ainsi que toutes leurs dépendances sont transférées (à cause de
3753 @code{-r}), indépendamment du fait qu'ils soient disponibles dans le dépôt
3754 de la machine cible. L'option @code{--missing} peut vous aider à comprendre
3755 les éléments qui manquent dans le dépôt de la machine cible. La commande
3756 @command{guix copy} simplifie et optimise ce processus, c'est donc ce que
3757 vous devriez utiliser dans ce cas (@pxref{Invoquer guix copy}).
3758
3759 @cindex nar, format d'archive
3760 @cindex archive normalisée (nar)
3761 Les archives sont stockées au format « archive normalisé » ou « nar », qui
3762 est comparable dans l'esprit à « tar » mais avec des différences qui le
3763 rendent utilisable pour ce qu'on veut faire. Tout d'abord, au lieu de
3764 stocker toutes les métadonnées Unix de chaque fichier, le format nar ne
3765 mentionne que le type de fichier (normal, répertoire ou lien symbolique) ;
3766 les permissions Unix, le groupe et l'utilisateur ne sont pas mentionnés.
3767 Ensuite, l'ordre dans lequel les entrées de répertoires sont stockés suit
3768 toujours l'ordre des noms de fichier dans l'environnement linguistique C.
3769 Cela rend la production des archives entièrement déterministe.
3770
3771 @c FIXME: Add xref to daemon doc about signatures.
3772 Lors de l'export, le démon signe numériquement le contenu de l'archive et
3773 cette signature est ajoutée à la fin du fichier. Lors de l'import, le démon
3774 vérifie la signature et rejette l'import en cas de signature invalide ou si
3775 la clef de signature n'est pas autorisée.
3776
3777 Les principales options sont :
3778
3779 @table @code
3780 @item --export
3781 Exporter les fichiers ou les paquets du dépôt (voir plus bas). Écrire
3782 l'archive résultante sur la sortie standard.
3783
3784 Les dépendances ne sont @emph{pas} incluses dans la sortie à moins que
3785 @code{--recursive} ne soit passé.
3786
3787 @item -r
3788 @itemx --recursive
3789 En combinaison avec @code{--export}, cette option demande à @command{guix
3790 archive} d'inclure les dépendances des éléments donnés dans l'archive.
3791 Ainsi, l'archive résultante est autonome : elle contient la closure des
3792 éléments du dépôt exportés.
3793
3794 @item --import
3795 Lire une archive depuis l'entrée standard et importer les fichiers inclus
3796 dans le dépôt. Annuler si l'archive a une signature invalide ou si elle est
3797 signée par une clef publique qui ne se trouve pas dans le clefs autorisées
3798 (voir @code{--authorize} plus bas.)
3799
3800 @item --missing
3801 Liste une liste de noms de fichiers du dépôt sur l'entrée standard, un par
3802 ligne, et écrit sur l'entrée standard le sous-ensemble de ces fichiers qui
3803 manquent dans le dépôt.
3804
3805 @item --generate-key[=@var{paramètres}]
3806 @cindex signature, archives
3807 Générer une nouvelle paire de clefs pour le démon. Cela est un prérequis
3808 avant que les archives ne puissent être exportées avec @code{--export}.
3809 Remarquez que cette opération prend généralement du temps parce qu'elle doit
3810 récupère suffisamment d'entropie pour générer la paire de clefs.
3811
3812 La paire de clefs générée est typiquement stockée dans @file{/etc/guix},
3813 dans @file{signing-key.pub} (clef publique) et @file{signing-key.sec} (clef
3814 privée, qui doit rester secrète). Lorsque @var{paramètres} est omis, une
3815 clef ECDSA utilisant la courbe Ed25519 est générée ou pour les version de
3816 libgcrypt avant 1.6.0, une clef RSA de 4096 bits. Autrement,
3817 @var{paramètres} peut spécifier les paramètres @code{genkey} adaptés pour
3818 libgcrypt (@pxref{General public-key related Functions,
3819 @code{gcry_pk_genkey},, gcrypt, The Libgcrypt Reference Manual}).
3820
3821 @item --authorize
3822 @cindex autorisation, archives
3823 Autoriser les imports signés par la clef publique passée sur l'entrée
3824 standard. La clef publique doit être au « format avancé s-expression » —
3825 c.-à-d.@: le même format que le fichier @file{signing-key.pub}.
3826
3827 La liste des clefs autorisées est gardée dans un fichier modifiable par des
3828 humains dans @file{/etc/guix/acl}. Le fichier contient des
3829 @url{http://people.csail.mit.edu/rivest/Sexp.txt, « s-expressions au format
3830 avancé »} et est structuré comme une liste de contrôle d'accès dans
3831 l'@url{http://theworld.com/~cme/spki.txt, infrastructure à clefs publiques
3832 simple (SPKI)}.
3833
3834 @item --extract=@var{répertoire}
3835 @itemx -x @var{répertoire}
3836 Lit une archive à un seul élément telle que servie par un serveur de
3837 substituts (@pxref{Substituts}) et l'extrait dans @var{répertoire}. C'est
3838 une opération de bas niveau requise seulement dans de rares cas d'usage ;
3839 voir plus loin.
3840
3841 Par exemple, la commande suivante extrait le substitut pour Emacs servi par
3842 @code{hydra.gnu.org} dans @file{/tmp/emacs} :
3843
3844 @example
3845 $ wget -O - \
3846 https://hydra.gnu.org/nar/@dots{}-emacs-24.5 \
3847 | bunzip2 | guix archive -x /tmp/emacs
3848 @end example
3849
3850 Les archives à un seul élément sont différentes des archives à plusieurs
3851 éléments produites par @command{guix archive --export} ; elles contiennent
3852 un seul élément du dépôt et elles n'embarquent @emph{pas} de signature.
3853 Ainsi cette opération ne vérifie @emph{pas} de signature et sa sortie
3854 devrait être considérée comme non sûre.
3855
3856 Le but principal de cette opération est de faciliter l'inspection du contenu
3857 des archives venant de serveurs auxquels on ne fait potentiellement pas
3858 confiance.
3859
3860 @end table
3861
3862 @c *********************************************************************
3863 @node Interface de programmation
3864 @chapter Interface de programmation
3865
3866 GNU Guix fournit diverses interface de programmation Scheme (API) qui pour
3867 définir, construire et faire des requêtes sur des paquets. La première
3868 interface permet aux utilisateurs d'écrire des définitions de paquets de
3869 haut-niveau. Ces définitions se réfèrent à des concepts de création de
3870 paquets familiers, comme le nom et la version du paquet, son système de
3871 construction et ses dépendances. Ces définitions peuvent ensuite être
3872 transformées en actions concrètes lors de la construction.
3873
3874 Les actions de construction sont effectuées par le démon Guix, pour le
3875 compte des utilisateurs. Dans un environnement standard, le démon possède
3876 les droits en écriture sur le dépôt — le répertoire @file{/gnu/store} — mais
3877 pas les utilisateurs. La configuration recommandée permet aussi au démon
3878 d'effectuer la construction dans des chroots, avec un utilisateur de
3879 construction spécifique pour minimiser les interférences avec le reste du
3880 système.
3881
3882 @cindex dérivation
3883 Il y a des API de plus bas niveau pour interagir avec le démon et le dépôt.
3884 Pour demander au démon d'effectuer une action de construction, les
3885 utilisateurs lui donnent en fait une @dfn{dérivation}. Une dérivation est
3886 une représentation à bas-niveau des actions de construction à entreprendre
3887 et l'environnement dans lequel elles devraient avoir lieu — les dérivations
3888 sont aux définitions de paquets ce que l'assembleur est aux programmes C.
3889 Le terme de « dérivation » vient du fait que les résultats de la
3890 construction en @emph{dérivent}.
3891
3892 Ce chapitre décrit toutes ces API tour à tour, à partir des définitions de
3893 paquets à haut-niveau.
3894
3895 @menu
3896 * Définition des paquets:: Définir de nouveaux paquets.
3897 * Systèmes de construction:: Spécifier comment construire les paquets.
3898 * Le dépôt:: Manipuler le dépôt de paquets.
3899 * Dérivations:: Interface de bas-niveau avec les dérivations
3900 de paquets.
3901 * La monad du dépôt:: Interface purement fonctionnelle avec le
3902 dépôt.
3903 * G-Expressions:: Manipuler les expressions de construction.
3904 * Invoquer guix repl:: S'amuser avec Guix de manière interactive.
3905 @end menu
3906
3907 @node Définition des paquets
3908 @section Définition des paquets
3909
3910 L'interface de haut-niveau pour les définitions de paquets est implémentée
3911 dans les modules @code{(guix packages)} et @code{(guix build-system)}. Par
3912 exemple, la définition du paquet, ou la @dfn{recette}, du paquet GNU Hello
3913 ressemble à cela :
3914
3915 @example
3916 (define-module (gnu packages hello)
3917 #:use-module (guix packages)
3918 #:use-module (guix download)
3919 #:use-module (guix build-system gnu)
3920 #:use-module (guix licenses)
3921 #:use-module (gnu packages gawk))
3922
3923 (define-public hello
3924 (package
3925 (name "hello")
3926 (version "2.10")
3927 (source (origin
3928 (method url-fetch)
3929 (uri (string-append "mirror://gnu/hello/hello-" version
3930 ".tar.gz"))
3931 (sha256
3932 (base32
3933 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
3934 (build-system gnu-build-system)
3935 (arguments '(#:configure-flags '("--enable-silent-rules")))
3936 (inputs `(("gawk" ,gawk)))
3937 (synopsis "Hello, GNU world: An example GNU package")
3938 (description "Guess what GNU Hello prints!")
3939 (home-page "http://www.gnu.org/software/hello/")
3940 (license gpl3+)))
3941 @end example
3942
3943 @noindent
3944 Sans être un expert Scheme, le lecteur peut comprendre la signification des
3945 différents champs présents. Cette expression lie la variable @code{hello} à
3946 un objet @code{<package>}, qui est essentiellement un enregistrement
3947 (@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}). On
3948 peut inspecter cet objet de paquet avec les procédures qui se trouvent dans
3949 le module @code{(guix packages)} ; par exemple, @code{(package-name hello)}
3950 renvoie — oh surprise ! — @code{"hello"}.
3951
3952 Avec un peu de chance, vous pourrez importer tout ou partie de la définition
3953 du paquet qui vous intéresse depuis un autre répertoire avec la commande
3954 @code{guix import} (@pxref{Invoquer guix import}).
3955
3956 Dans l'exemple précédent, @var{hello} est défini dans un module à part,
3957 @code{(gnu packages hello)}. Techniquement, cela n'est pas strictement
3958 nécessaire, mais c'est pratique : tous les paquets définis dans des modules
3959 sous @code{(gnu packages @dots{})} sont automatiquement connus des outils en
3960 ligne de commande (@pxref{Modules de paquets}).
3961
3962 Il y a quelques points à remarquer dans la définition de paquet précédente :
3963
3964 @itemize
3965 @item
3966 Le champ @code{source} du paquet est un objet @code{<origin>} (@pxref{Référence d'origine}, pour la référence complète). Ici, on utilise la méthode
3967 @code{url-fetch} de @code{(guix download)}, ce qui signifie que la source
3968 est un fichier à télécharger par FTP ou HTTP.
3969
3970 Le préfixe @code{mirror://gnu} demande à @code{url-fetch} d'utiliser l'un
3971 des miroirs GNU définis dans @code{(guix download)}.
3972
3973 Le champ @code{sha256} spécifie le hash SHA256 attendu pour le fichier
3974 téléchargé. Il est requis et permet à Guix de vérifier l'intégrité du
3975 fichier. La forme @code{(base32 @dots{})} introduit a représentation en
3976 base32 du hash. Vous pouvez obtenir cette information avec @code{guix
3977 download} (@pxref{Invoquer guix download}) et @code{guix hash}
3978 (@pxref{Invoquer guix hash}).
3979
3980 @cindex correctifs
3981 Lorsque cela est requis, la forme @code{origin} peut aussi avec un champ
3982 @code{patches} qui liste les correctifs à appliquer et un champ
3983 @code{snippet} qui donne une expression Scheme pour modifier le code source.
3984
3985 @item
3986 @cindex Système de construction GNU
3987 Le champ @code{build-system} spécifie la procédure pour construire le paquet
3988 (@pxref{Systèmes de construction}). Ici, @var{gnu-build-system} représente le système
3989 de construction GNU familier, où les paquets peuvent être configurés,
3990 construits et installés avec la séquence @code{./configure && make && make
3991 check && make install} habituelle.
3992
3993 @item
3994 Le champ @code{arguments} spécifie des options pour le système de
3995 construction (@pxref{Systèmes de construction}). Ici il est interprété par
3996 @var{gnu-build-system} comme une demande de lancer @file{configure} avec le
3997 drapeau @code{--enable-silent-rules}.
3998
3999 @cindex quote
4000 @cindex quoting
4001 @findex '
4002 @findex quote
4003 Que sont ces apostrophes (@code{'}) ? C'est de la syntaxe Scheme pour
4004 introduire une liste ; @code{'} est synonyme de la fonction @code{quote}.
4005 @xref{Expression Syntax, quoting,, guile, GNU Guile Reference Manual}, pour
4006 des détails. Ice la valeur du champ @code{arguments} est une liste
4007 d'arguments passés au système de construction plus tard, comme avec
4008 @code{apply} (@pxref{Fly Evaluation, @code{apply},, guile, GNU Guile
4009 Reference Manual}).
4010
4011 La séquence dièse-deux-points (@code{#:}) définie un @dfn{mot-clef} Scheme
4012 (@pxref{Keywords,,, guile, GNU Guile Reference Manual}), et
4013 @code{#:configure-flags} est un mot-clef utilisé pour passer un argument au
4014 système de construction (@pxref{Coding With Keywords,,, guile, GNU Guile
4015 Reference Manual}).
4016
4017 @item
4018 Le champ @code{inputs} spécifie les entrées du processus de construction —
4019 c.-à-d.@: les dépendances à la construction ou à l'exécution du paquet. Ici
4020 on définie une entrée nommée @code{"gawk"} dont la valeur est la variable
4021 @var{gawk} ; @var{gawk} est elle-même liée à un objet @code{<package>}.
4022
4023 @cindex accent grave (quasiquote)
4024 @findex `
4025 @findex quasiquote
4026 @cindex virgule (unquote)
4027 @findex ,
4028 @findex unquote
4029 @findex ,@@
4030 @findex unquote-splicing
4031 De nouveau, @code{`} (un accent grave, synonyme de la fonction
4032 @code{quasiquote}) nous permet d'introduire une liste litérale dans le champ
4033 @code{inputs}, tandis que @code{,} (une virgule, synonyme de la fonction
4034 @code{unquote}) nous permet d'insérer une valeur dans cette liste
4035 (@pxref{Expression Syntax, unquote,, guile, GNU Guile Reference Manual}).
4036
4037 Remarquez que GCC, Coreutils, Bash et les autres outils essentiels n'ont pas
4038 besoin d'être spécifiés en tant qu'entrées ici. À la place, le
4039 @var{gnu-build-system} est en charge de s'assurer qu'ils sont présents
4040 (@pxref{Systèmes de construction}).
4041
4042 Cependant, toutes les autres dépendances doivent être spécifiées dans le
4043 champ @code{inputs}. Toute dépendance qui ne serait pas spécifiée ici sera
4044 simplement indisponible pour le processus de construction, ce qui peut mener
4045 à un échec de la construction.
4046 @end itemize
4047
4048 @xref{Référence de paquet}, pour une description complète des champs
4049 possibles.
4050
4051 Lorsqu'une définition de paquet est en place, le paquet peut enfin être
4052 construit avec l'outil en ligne de commande @code{guix build}
4053 (@pxref{Invoquer guix build}), pour résoudre les échecs de construction que
4054 vous pourriez rencontrer (@pxref{Débogage des échecs de construction}). Vous pouvez
4055 aisément revenir à la définition du paquet avec la commande @command{guix
4056 edit} (@pxref{Invoquer guix edit}). @xref{Consignes d'empaquetage}, pour plus
4057 d'inforamtions sur la manière de tester des définitions de paquets et
4058 @ref{Invoquer guix lint}, pour des informations sur la manière de vérifier
4059 que la définition réspecte les conventions de style.
4060 @vindex GUIX_PACKAGE_PATH
4061 Enfin, @pxref{Canaux} pour des informations sur la manière d'étendre la
4062 distribution en ajoutant vos propres définitions de paquets dans un « canal
4063 ».
4064
4065 Finalement, la mise à jour de la définition du paquet à une nouvelle version
4066 amont peut en partie s'automatiser avec la commande @command{guix refresh}
4067 (@pxref{Invoquer guix refresh}).
4068
4069 Sous le capot, une dérivation qui correspond à un objet @code{<package>} est
4070 d'abord calculé par la procédure @code{package-derivation}. Cette
4071 dérivation est stockée dans un fichier @code{.drv} dans @file{/gnu/store}.
4072 Les actions de construction qu'il prescrit peuvent ensuite être réalisées
4073 par la procédure @code{build-derivation} (@pxref{Le dépôt}).
4074
4075 @deffn {Procédure Scheme} package-derivation @var{store} @var{package} [@var{system}]
4076 Renvoie l'objet @code{<derivation>} du @var{paquet} pour le @var{système}
4077 (@pxref{Dérivations}).
4078
4079 @var{paquet} doit être un objet @code{<package>} valide et @var{système} une
4080 chaîne indiquant le type de système cible — p.ex.@: @code{"x86_64-linux"}
4081 pour un système GNU x86_64 basé sur Linux. @var{dépôt} doit être une
4082 connexion au démon, qui opère sur les dépôt (@pxref{Le dépôt}).
4083 @end deffn
4084
4085 @noindent
4086 @cindex compilation croisée
4087 De manière identique, il est possible de calculer une dérivation qui
4088 effectue une compilation croisée d'un paquet pour un autre système :
4089
4090 @deffn {Procédure Scheme} package-cross-derivation @var{store} @
4091 @var{paquet} @var{cible} [@var{système}] renvoie l'objet @code{<derivation>}
4092 duof @var{paquet} construit depuis @var{système} pour @var{cible}.
4093
4094 @var{cible} doit être un triplet GNU valide indiquant le matériel cible et
4095 le système d'exploitation, comme @code{"mips64el-linux-gnu"}
4096 (@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
4097 Configure and Build System}).
4098 @end deffn
4099
4100 @cindex transformations de paquets
4101 @cindex réécriture d'entrées
4102 @cindex réécriture de l'arbre des dépendances
4103 On peut manipuler les paquets de manière arbitraire. Une transformation
4104 utile est par exemple la @dfn{réécriture d'entrées} où l'arbre des
4105 dépendances d'un paquet est réécrit en replaçant des entrées spécifiques par
4106 d'autres :
4107
4108 @deffn {Procédure Scheme} package-input-rewriting @var{replacements} @
4109 [@var{nom-réécrit}] Renvoie une procédure qui, lorsqu'on lui donne un
4110 paquet, remplace des dépendances directes et indirectes (mais pas ses
4111 entrées implicites) en fonction de @var{remplacements}. @var{remplacements}
4112 est une liste de paires de paquets ; le premier élément de chaque pair est
4113 le paquet à remplacer, le second son remplaçant.
4114
4115 De manière facultative, @var{nom-réécrit} est une procédure à un argument
4116 qui prend le nom d'un paquet et renvoie son nouveau nom après l'avoir
4117 réécrit.
4118 @end deffn
4119
4120 @noindent
4121 Regardez cet exemple :
4122
4123 @example
4124 (define libressl-instead-of-openssl
4125 ;; Cette procédure remplace OPENSSL par LIBRESSL,
4126 ;; récursivement.
4127 (package-input-rewriting `((,openssl . ,libressl))))
4128
4129 (define git-with-libressl
4130 (libressl-instead-of-openssl git))
4131 @end example
4132
4133 @noindent
4134 Ici nous définissons d'abord une procédure de réécriture qui remplace
4135 @var{openssl} par @var{libressl}. Ensuite nous l'utilisons pour définir une
4136 @dfn{variante} du paquet @var{git} qui utilise @var{libressl} plutôt que
4137 @var{openssl}. cela est exactement ce que l'option en ligne de commande
4138 @option{--with-input} fait (@pxref{Options de transformation de paquets,
4139 @option{--with-input}}).
4140
4141 Une procédure plus générique pour réécrire un graphe de dépendance d'un
4142 paquet est @code{package-mapping} : elle supporte n'importe quel changement
4143 dans les nœuds du graphe.
4144
4145 @deffn {Procédure Scheme} package-mapping @var{proc} [@var{cut?}]
4146 Renvoie une procédure qui, avec un paquet, applique @var{proc} sur tous les
4147 paquets dont il dépend et renvoie le paquet qui en résulte. La procédure
4148 arrête la récursion là où @var{cut?} renvoie vrai pour un paquet donné.
4149 @end deffn
4150
4151 @menu
4152 * Référence de paquet:: Le type de donnée des paquets.
4153 * Référence d'origine:: Le type de données d'origine.
4154 @end menu
4155
4156
4157 @node Référence de paquet
4158 @subsection Référence de @code{package}
4159
4160 Cette section résume toutes les options disponibles dans les déclarations
4161 @code{package} (@pxref{Définition des paquets}).
4162
4163 @deftp {Type de données} package
4164 C'est le type de donnée représentant une recette de paquets
4165
4166 @table @asis
4167 @item @code{name}
4168 Le nom du paquet, comme une chaîne de caractères.
4169
4170 @item @code{version}
4171 La version du paquet, comme une chaîne de caractères.
4172
4173 @item @code{source}
4174 Un objet qui indique comment le code source du paquet devrait être
4175 récupéré. La plupart du temps, c'est un objet @code{origin} qui indique un
4176 fichier récupéré depuis internet (@pxref{Référence d'origine}). Il peut aussi
4177 s'agir de tout autre objet ``simili-fichier'' comme un @code{local-file} qui
4178 indique un fichier du système de fichier local (@pxref{G-Expressions,
4179 @code{local-file}}).
4180
4181 @item @code{build-system}
4182 Le système de construction qui devrait être utilisé pour construire le
4183 paquet (@pxref{Systèmes de construction}).
4184
4185 @item @code{arguments} (par défaut : @code{'()})
4186 Les arguments à passer au système de construction. C'est une liste qui
4187 contient typiquement une séquence de paires de clefs-valeurs.
4188
4189 @item @code{inputs} (par défaut : @code{'()})
4190 @itemx @code{native-inputs} (par défaut : @code{'()})
4191 @itemx @code{propagated-inputs} (par défaut : @code{'()})
4192 @cindex entrées, des paquets
4193 Ces champs listent les dépendances du paquet. Chacune est une liste de
4194 tuples, où chaque tuple a une étiquette pour une entrée (une chaîne de
4195 caractères) comme premier élément, un paquet, une origine ou une dérivation
4196 comme deuxième élément et éventuellement le nom d'une sortie à utiliser qui
4197 est @code{"out"} par défaut (@pxref{Des paquets avec plusieurs résultats}, pour
4198 plus d'informations sur les sorties des paquets). Par exemple, la liste
4199 suivante spécifie trois entrées :
4200
4201 @example
4202 `(("libffi" ,libffi)
4203 ("libunistring" ,libunistring)
4204 ("glib:bin" ,glib "bin")) ;la sortie "bin" de Glib
4205 @end example
4206
4207 @cindex compilation croisée, dépendances des paquets
4208 La distinction entre @code{native-inputs} et @code{inputs} est nécessaire
4209 lorsqu'on considère la compilation croisée. Lors d'une compilation croisée,
4210 les dépendances listées dans @code{inputs} sont construites pour
4211 l'architecture @emph{cible} ; inversement, les dépendances listées dans
4212 @code{native-inputs} sont construites pour l'architecture de la machine de
4213 @emph{construction}.
4214
4215 @code{native-inputs} est typiquement utilisé pour lister les outils requis à
4216 la construction mais pas à l'exécution, comme Autoconf, Automake,
4217 pkg-config, Gettext ou Bison. @command{guix lint} peut rapporter des
4218 erreurs de ce type (@pxref{Invoquer guix lint}).
4219
4220 @anchor{package-propagated-inputs}
4221 Enfin, @code{propagated-inputs} est similaire à @code{inputs}, mais les
4222 paquets spécifiés seront automatiquement installés avec le paquet auquel ils
4223 appartiennent (@pxref{package-cmd-propagated-inputs, @command{guix
4224 package}}, pour des informations sur la manière dont @command{guix package}
4225 traite les entrées propagées).
4226
4227 Par exemple cela est nécessaire lorsque des bibliothèques C/C++ ont besoin
4228 d'en-têtes d'une autre bibliothèque pour être compilé ou lorsqu'un fichier
4229 pkg-config se rapporte à un autre @i{via} son champ @code{Requires}.
4230
4231 Un autre exemple où @code{propagated-inputs} est utile est pour les langages
4232 auxquels il manque un moyen de retenir le chemin de recherche comme c'est le
4233 cas du @code{RUNPATH} des fichiers ELF ; cela comprend Guile, Python, Perl
4234 et plus. Pour s'assurer que les bibliothèques écrites dans ces langages
4235 peuvent trouver le code des bibliothèques dont elles dépendent à
4236 l'exécution, les dépendances à l'exécution doivent être listées dans
4237 @code{propagated-inputs} plutôt que @code{inputs}.
4238
4239 @item @code{self-native-input?} (par défaut : @code{#f})
4240 C'est un champ booléen qui indique si le paquet devrait s'utiliser lui-même
4241 comme entrée native lors de la compilation croisée.
4242
4243 @item @code{outputs} (par défaut : @code{'("out")})
4244 La liste des noms de sorties du paquet. @xref{Des paquets avec plusieurs résultats}, pour des exemples typiques d'utilisation de sorties
4245 supplémentaires.
4246
4247 @item @code{native-search-paths} (par défaut : @code{'()})
4248 @itemx @code{search-paths} (par défaut : @code{'()})
4249 Une liste d'objets @code{search-path-specification} décrivant les variables
4250 d'environnement de recherche de chemins que ce paquet utilise.
4251
4252 @item @code{replacement} (par défaut : @code{#f})
4253 Ce champ doit être soit @code{#f} soit un objet de paquet qui sera utilisé
4254 comme @dfn{remplaçant} de ce paquet. @xref{Mises à jour de sécurité, grafts}, pour
4255 plus de détails.
4256
4257 @item @code{synopsis}
4258 Une description sur une ligne du paquet.
4259
4260 @item @code{description}
4261 Une description plus détaillée du paquet.
4262
4263 @item @code{license}
4264 @cindex licence, des paquets
4265 La licence du paquet ; une valeur tirée de @code{(guix licenses)} ou une
4266 liste de ces valeurs.
4267
4268 @item @code{home-page}
4269 L'URL de la page d'accueil du paquet, en tant que chaîne de caractères.
4270
4271 @item @code{supported-systems} (par défaut : @var{%supported-systems})
4272 La liste des systèmes supportés par le paquet, comme des chaînes de
4273 caractères de la forme @code{architecture-noyau}, par exemple
4274 @code{"x86_64-linux"}.
4275
4276 @item @code{maintainers} (par défaut : @code{'()})
4277 La liste des mainteneurs du paquet, comme des objets @code{maintainer}.
4278
4279 @item @code{location} (par défaut : emplacement de la source de la forme @code{package})
4280 L'emplacement de la source du paquet. C'est utile de le remplacer lorsqu'on
4281 hérite d'un autre paquet, auquel cas ce champ n'est pas automatiquement
4282 corrigé.
4283 @end table
4284 @end deftp
4285
4286
4287 @node Référence d'origine
4288 @subsection Référence de @code{origin}
4289
4290 Cette section résume toutes les options disponibles dans le déclarations
4291 @code{origin} (@pxref{Définition des paquets}).
4292
4293 @deftp {Type de données} origin
4294 C'est le type de donnée qui représente l'origine d'un code source.
4295
4296 @table @asis
4297 @item @code{uri}
4298 Un objet contenant l'URI de la source. Le type d'objet dépend de la
4299 @code{method} (voir plus bas). Par exemple, avec la méthode @var{url-fetch}
4300 de @code{(guix download)}, les valeurs valide d'@code{uri} sont : une URL
4301 représentée par une chaîne de caractères, ou une liste de chaînes de
4302 caractères.
4303
4304 @item @code{method}
4305 Un procédure qui gère l'URI.
4306
4307 Quelques exemples :
4308
4309 @table @asis
4310 @item @var{url-fetch} de @code{(guix download)}
4311 télécharge un fichier depuis l'URL HTTP, HTTPS ou FTP spécifiée dans le
4312 champ @code{uri} ;
4313
4314 @vindex git-fetch
4315 @item @var{git-fetch} de @code{(guix git-download)}
4316 clone le dépôt sous contrôle de version Git et récupère la révision
4317 spécifiée dans le champ @code{uri} en tant qu'objet @code{git-reference} ;
4318 un objet @code{git-reference} ressemble à cela :
4319
4320 @example
4321 (git-reference
4322 (url "git://git.debian.org/git/pkg-shadow/shadow")
4323 (commit "v4.1.5.1"))
4324 @end example
4325 @end table
4326
4327 @item @code{sha256}
4328 Un bytevector contenant le hash SHA-256 de la source. Typiquement la forme
4329 @code{base32} est utilisée ici pour générer le bytevector depuis une chaîne
4330 de caractères en base-32.
4331
4332 Vous pouvez obtenir cette information avec @code{guix download}
4333 (@pxref{Invoquer guix download}) ou @code{guix hash} (@pxref{Invoquer guix hash}).
4334
4335 @item @code{file-name} (par défaut : @code{#f})
4336 Le nom de fichier à utiliser pour sauvegarder le fichier. Lorsqu'elle est à
4337 @code{#f}, une valeur par défaut raisonnable est utilisée dans la plupart
4338 des cas. Dans le cas où la source est récupérée depuis une URL, le nom de
4339 fichier est celui de l'URL. Pour les sources récupérées depuis un outil de
4340 contrôle de version, il est recommandé de fournir un nom de fichier
4341 explicitement parce que le nom par défaut n'est pas très descriptif.
4342
4343 @item @code{patches} (par défaut : @code{'()})
4344 Une liste de noms de fichiers, d'origines ou d'objets simili-fichiers
4345 (@pxref{G-Expressions, file-like objects}) qui pointent vers des correctifs
4346 à appliquer sur la source.
4347
4348 Cette liste de correctifs doit être inconditionnelle. En particulier, elle
4349 ne peut pas dépendre des valeurs de @code{%current-system} ou
4350 @code{%current-target-system}.
4351
4352 @item @code{snippet} (par défaut : @code{#f})
4353 Une G-expression (@pxref{G-Expressions}) ou une S-expression qui sera lancée
4354 dans le répertoire des sources. C'est une manière pratique de modifier la
4355 source, parfois plus qu'un correctif.
4356
4357 @item @code{patch-flags} (par défaut : @code{'("-p1")})
4358 Une liste de drapeaux à passer à la commande @code{patch}.
4359
4360 @item @code{patch-inputs} (par défaut : @code{#f})
4361 Paquets d'entrées ou dérivations pour le processus de correction.
4362 Lorsqu'elle est à @code{#f}, l'ensemble d'entrées habituellement nécessaire
4363 pour appliquer des correctifs est fournit, comme GNU@tie{}Patch.
4364
4365 @item @code{modules} (par défaut : @code{'()})
4366 Une liste de modules Guile qui devraient être chargés pendant le processus
4367 de correction et pendant que le lancement du code du champ @code{snippet}.
4368
4369 @item @code{patch-guile} (par défaut : @code{#f})
4370 Le paquet Guile à utiliser dans le processus de correction. Lorsqu'elle est
4371 à @code{#f}, une valeur par défaut raisonnable est utilisée.
4372 @end table
4373 @end deftp
4374
4375
4376 @node Systèmes de construction
4377 @section Systèmes de construction
4378
4379 @cindex système de construction
4380 Chaque définition de paquet définie un @dfn{système de construction} et des
4381 arguments pour ce système de construction (@pxref{Définition des paquets}). Ce
4382 champ @code{build-system} représente la procédure de construction du paquet,
4383 ainsi que des dépendances implicites pour cette procédure de construction.
4384
4385 Les systèmes de construction sont des objets
4386 @code{<build-system>}. L'interface pour les créer et les manipuler est
4387 fournie par le module @code{(guix build-system)} et les systèmes de
4388 construction eux-mêmes sont exportés par des modules spécifiques.
4389
4390 @cindex sac (représentation à bas-niveau des paquets)
4391 Sous le capot, les systèmes de construction compilent d'abord des objets
4392 paquets en @dfn{sacs}. Un @dfn{sac} est comme un paquet, mais avec moins de
4393 décoration — en d'autres mots, un sac est une représentation à bas-niveau
4394 d'un paquet, qui inclus toutes les entrées de ce paquet, dont certaines ont
4395 été implicitement ajoutées par le système de construction. Cette
4396 représentation intermédiaire est ensuite compilée en une dérivation
4397 (@pxref{Dérivations}).
4398
4399 Les systèmes de construction acceptent une liste d'@dfn{arguments}
4400 facultatifs. Dans les définitions de paquets, ils sont passés @i{via} le
4401 champ @code{arguments} (@pxref{Définition des paquets}). Ce sont typiquement des
4402 arguments par mot-clef (@pxref{Optional Arguments, keyword arguments in
4403 Guile,, guile, GNU Guile Reference Manual}). La valeur de ces arguments est
4404 habituellement évaluée dans la @dfn{strate de construction} — c.-à-d.@: par
4405 un processus Guile lancé par le démon (@pxref{Dérivations}).
4406
4407 Le système de construction principal est le @var{gnu-build-system} qui
4408 implémente les procédures de construction standard pour les paquets GNU et
4409 de nombreux autres. Il est fournit par le module @code{(guix build-system
4410 gnu)}.
4411
4412 @defvr {Variable Scheme} gnu-build-system
4413 @var{gnu-build-system} représente le système de construction GNU et ses
4414 variantes (@pxref{Configuration, configuration and makefile conventions,,
4415 standards, GNU Coding Standards}).
4416
4417 @cindex phases de construction
4418 En résumé, les paquets qui l'utilisent sont configurés, construits et
4419 installés avec la séquence @code{./configure && make && make check && make
4420 install} habituelle. En pratique, des étapes supplémentaires sont souvent
4421 requises. Toutes ces étapes sont séparées dans des @dfn{phases}
4422 différentes, notamment@footnote{Regardez les modules @code{(guix build
4423 gnu-build-system)} pour plus de détails sur les phases de construction.}:
4424
4425 @table @code
4426 @item unpack
4427 Décompresse l'archive des sources et se déplace dans l'arborescence des
4428 sources fraîchement extraites. Si la source est en fait un répertoire, le
4429 copie dans l'arborescence de construction et entre dans ce répertoire.
4430
4431 @item patch-source-shebangs
4432 Corrige les shebangs (@code{#!}) rencontrés dans les fichiers pour qu'ils se
4433 réfèrent aux bons noms de fichiers. Par exemple, elle change
4434 @code{#!/bin/sh} en @code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
4435
4436 @item configure
4437 Lance le script @code{configure} avec un certain nombre d'options par
4438 défaut, comme @code{--prefix=/gnu/store/@dots{}}, ainsi que les options
4439 spécifiées par l'argument @code{#:configure-flags}.
4440
4441 @item build
4442 Lance @code{make} avec la liste des drapeaux spécifiés avec
4443 @code{#:make-flags}. Si l'argument @code{#:parallel-build?} est vrai (par
4444 défaut), construit avec @code{make -j}.
4445
4446 @item check
4447 Lance @code{make check}, ou une autre cible spécifiée par
4448 @code{#:test-target}, à moins que @code{#:tests? #f} ne soit passé. Si
4449 l'argument @code{#:parallel-tests?} est vrai (par défaut), lance @code{make
4450 check -j}.
4451
4452 @item install
4453 Lance @code{make install} avec les drapeaux listés dans @code{#:make-flags}.
4454
4455 @item patch-shebangs
4456 Corrige les shebangs des fichiers exécutables installés.
4457
4458 @item strip
4459 Nettoie les symboles de débogage dans les fichiers ELF (à moins que
4460 @code{#:strip-binaries?} ne soit faux), les copie dans la sortie
4461 @code{debug} lorsqu'elle est disponible (@pxref{Installer les fichiers de débogage}).
4462 @end table
4463
4464 @vindex %standard-phases
4465 Le module du côté du constructeur @code{(guix build gnu-build-system)}
4466 définie @var{%standard-phases} comme la liste par défaut des phases de
4467 construction. @var{%standard-phases} est une liste de paires de symboles
4468 et de procédures, où la procédure implémente la phase en question.
4469
4470 La liste des phases utilisées par un paquet particulier peut être modifiée
4471 avec le paramètre @code{#:phases}. Par exemple, en passant :
4472
4473 @example
4474 #:phases (modify-phases %standard-phases (delete 'configure))
4475 @end example
4476
4477 signifie que toutes les procédures décrites plus haut seront utilisées, sauf
4478 la phase @code{configure}.
4479
4480 En plus, ce système de construction s'assure que l'environnement « standard
4481 » pour les paquets GNU est disponible. Cela inclus des outils comme GCC,
4482 libc, Coreutils, Bash, Make, Diffutils, grep et sed (voir le module
4483 @code{(guix build-system gnu)} pour une liste complète). Nous les appelons
4484 les @dfn{entrées implicites} d'un paquet parce que la définition du paquet
4485 ne les mentionne pas.
4486 @end defvr
4487
4488 D'autres objets @code{<build-system>} sont définis pour supporter d'autres
4489 conventions et outils utilisés par les paquets de logiciels libres. Ils
4490 héritent de la plupart de @var{gnu-build-system} et diffèrent surtout dans
4491 l'ensemble des entrées implicites ajoutées au processus de construction et
4492 dans la liste des phases exécutées. Certains de ces systèmes de
4493 construction sont listés ci-dessous.
4494
4495 @defvr {Variable Scheme} ant-build-system
4496 Cette variable est exportée par @code{(guix build-system ant)}. Elle
4497 implémente la procédure de construction pour les paquets Java qui peuvent
4498 être construits avec @url{http://ant.apache.org/, l'outil de construction
4499 Ant}.
4500
4501 Elle ajoute à la fois @code{ant} et the @dfn{kit de développement Java}
4502 (JDK) fournit par le paquet @code{icedtea} à l'ensemble des entrées. Des
4503 paquets différents peuvent être spécifiés avec les paramètres @code{#:ant}
4504 et @code{#:jdk} respectivement.
4505
4506 Lorsque le paquet d'origine ne fournit pas de fichier de construction Ant
4507 acceptable, le paramètre @code{#:jar-name} peut être utilisé pour générer un
4508 fichier de construction Ant @file{build.xml} minimal, avec des tâches pour
4509 construire l'archive jar spécifiée. Dans ce cas, le paramètre
4510 @code{#:source-dir} peut être utilisé pour spécifier le sous-répertoire des
4511 sources, par défaut « src ».
4512
4513 Le paramètre @code{#:main-class} peut être utilisé avec le fichier de
4514 construction minimal pour spécifier la classe principale du jar. Cela rend
4515 le fichier jar exécutable. Le paramètre @code{#:test-include} peut être
4516 utilisé pour spécifier la liste des tests junit à lancer. Il vaut par
4517 défaut @code{(list "**/*Test.java")}. Le paramètre @code{#:test-exclude}
4518 peut être utilisé pour désactiver certains tests. Sa valeur par défaut est
4519 @code{(list "**/Abstract*.java")}, parce que les classes abstraites ne
4520 peuvent pas être utilisées comme des tests.
4521
4522 Le paramètre @code{#:build-target} peut être utilisé pour spécifier la tâche
4523 Ant qui devrait être lancée pendant la phase @code{build}. Par défaut la
4524 tâche « jar » sera lancée.
4525
4526 @end defvr
4527
4528 @defvr {Variable Scheme} android-ndk-build-system
4529 @cindex Distribution android
4530 @cindex système de construction Android NDK
4531 Cette variable est exportée par @code{(guix build-system android-ndk)}.
4532 Elle implémente une procédure de construction pour les paquets du NDK
4533 Android (@i{native development kit}) avec des processus de construction
4534 spécifiques à Guix.
4535
4536 Le système de construction suppose que les paquets installent leur interface
4537 publique (les en-têtes) dans un sous-répertoire de « include » de la sortie
4538 « out » et leurs bibliothèques dans le sous-répertoire « lib » de la sortie
4539 « out ».
4540
4541 Il est aussi supposé que l'union de toutes les dépendances d'un paquet n'a
4542 pas de fichiers en conflit.
4543
4544 Pour l'instant, la compilation croisée n'est pas supportées — donc pour
4545 l'instant les bibliothèques et les fichiers d'en-têtes sont supposés être
4546 des outils de l'hôte.
4547
4548 @end defvr
4549
4550 @defvr {Variable Scheme} asdf-build-system/source
4551 @defvrx {Variable Scheme} asdf-build-system/sbcl
4552 @defvrx {Variable Scheme} asdf-build-system/ecl
4553
4554 Ces variables, exportées par @code{(guix build-system asdf)}, implémentent
4555 les procédures de constructions pour les paquets en Common Lisp qui
4556 utilisent @url{https://common-lisp.net/project/asdf/, ``ASDF''}. ASDF est
4557 un dispositif de définition de systèmes pour les programmes et les
4558 bibliothèques en Common Lisp.
4559
4560 Le système @code{asdf-build-system/source} installe les paquets au format
4561 source qui peuvent être chargés avec n'importe quelle implémentation de
4562 common lisp, via ASDF. Les autres, comme @code{asdf-build-system/sbcl},
4563 installent des binaires au format qu'un implémentation particulière
4564 comprend. Ces systèmes de constructions peuvent aussi être utilisés pour
4565 produire des programmes exécutables ou des images lisp qui contiennent un
4566 ensemble de paquets pré-chargés.
4567
4568 Le système de construction utilise des conventions de nommage. Pour les
4569 paquets binaires, le nom du paquet devrait être préfixé par l'implémentation
4570 lisp, comme @code{sbcl-} pour @code{asdf-build-system/sbcl}.
4571
4572 En plus, le paquet source correspondant devrait étiquetté avec la même
4573 convention que les paquets python (voir @ref{Modules python}), avec le
4574 préfixe @code{cl-}.
4575
4576 Pour les paquets binaires, chaque système devrait être défini comme un
4577 paquet Guix. Si un paquet @code{origine} contient plusieurs systèmes, on
4578 peut créer des variantes du paquet pour construire tous les systèmes. Les
4579 paquets sources, qui utilisent @code{asdf-build-system/source}, peuvent
4580 contenir plusieurs systèmes.
4581
4582 Pour créer des programmes exécutables et des images, les procédures côté
4583 construction @code{build-program} et @code{build-image} peuvent être
4584 utilisées. Elles devraient être appelées dans une phase de construction
4585 après la phase @code{create-symlinks} pour que le système qui vient d'être
4586 construit puisse être utilisé dans l'image créée. @code{build-program}
4587 requiert une liste d'expressions Common Lisp dans l'argument
4588 @code{#:entry-program}.
4589
4590 Si le système n'est pas défini dans son propre fichier @code{.asd} du même
4591 nom, alors le paramètre @code{#:asd-file} devrait être utilisé pour
4592 spécifier dans quel fichier le système est défini. De plus, si le paquet
4593 défini un système pour ses tests dans un fichier séparé, il sera chargé
4594 avant que les tests ne soient lancés s'il est spécifié par le paramètre
4595 @code{#:test-asd-file}. S'il n'est pas spécifié, les fichiers
4596 @code{<system>-tests.asd}, @code{<system>-test.asd}, @code{tests.asd} et
4597 @code{test.asd} seront testés.
4598
4599 Si pour quelque raison que ce soit le paquet doit être nommé d'une manière
4600 différente de ce que la convention de nommage suggère, le paramètre
4601 @code{#:asd-system-name} peut être utilisé pour spécifier le nom du système.
4602
4603 @end defvr
4604
4605 @defvr {Variable Scheme} cargo-build-system
4606 @cindex Langage de programmation Rust
4607 @cindex Cargo (système de construction Rust)
4608 Cette variable est exportée par @code{(guix build-system cargo)}. Elle
4609 supporte les construction de paquets avec Cargo, le système de construction
4610 du @uref{https://www.rust-lang.org, langage de programmation Rust}.
4611
4612 Dans sa phase @code{configure}, ce système de construction remplace les
4613 dépendances spécifiées dans le fichier @file{Cargo.toml} par des paquets
4614 Guix. La phase @code{install} installe les binaires et installe aussi le
4615 code source et le fichier @file{Cargo.toml}.
4616 @end defvr
4617
4618 @cindex Clojure (langage de programmation)
4619 @cindex système de construction Clojure simple
4620 @defvr {Variable Scheme} clojure-build-system
4621 Cette variable est exportée par @code{(guix build-system clojure)}. Elle
4622 implémente une procédure de construction des paquets simple qui utilise le
4623 bon vieux @code{compile} de Clojure. La compilation croisée n'est pas
4624 encore supportée.
4625
4626 Elle ajoute @code{clojure}, @code{icedtea} et @code{zip} à l'ensemble des
4627 entrées. Des paquets différents peuvent être spécifiés avec les paramètres
4628 @code{#:clojure}, @code{#:jdk} et @code{#:zip}.
4629
4630 Une liste de répertoires sources, de répertoires de tests et de noms de jar
4631 peuvent être spécifiés avec les paramètres @code{#:source-dirs},
4632 @code{#:test-dirs} et @code{#:jar-names}. Le répertoire de construction est
4633 la classe principale peuvent être spécifiés avec les paramètres
4634 @code{#:compile-dir} et @code{#:main-class}. Les autres paramètres sont
4635 documentés plus bas.
4636
4637 Ce système de construction est une extension de @var{ant-build-system}, mais
4638 avec les phases suivantes modifiées :
4639
4640 @table @code
4641
4642 @item build
4643 Cette phase appelle @code{compile} en Clojure pour compiler les fichiers
4644 sources et lance @command{jar} pour créer les fichiers jar à partir des
4645 fichiers sources et des fichiers compilés en suivant la liste d'inclusion et
4646 d'exclusion spécifiées dans @code{#:aot-include} et @code{#:aot-exclude}.
4647 La liste d'exclusion a la priorité sur la liste d'inclusion. Ces listes
4648 consistent en des symboles représentant des bibliothèque Clojure ou le mot
4649 clef spécial @code{#:all}, représentant toutes les bibliothèques Clojure
4650 trouvées dans les répertoires des sources. Le paramètre
4651 @code{#:omit-source?} décide si les sources devraient être incluses dans les
4652 fichiers jar.
4653
4654 @item check
4655 Cette phase lance les tests en suivant les liste d'inclusion et d'exclusion
4656 spécifiées dans @code{#:test-include} et @code{#:test-exclude}. Leur
4657 signification est analogue à celle de @code{#:aot-include} et
4658 @code{#:aot-exclude}, sauf que le mot-clef spécial @code{#:all} signifie
4659 maintenant toutes les bibliothèques Clojure trouvées dans les répertoires de
4660 tests. Le paramètre @code{#:tests?} décide si les tests devraient être
4661 lancés.
4662
4663 @item install
4664 Cette phase installe tous les fichiers jar précédemment construits.
4665 @end table
4666
4667 En dehors de cela, le système de construction contient aussi la phase
4668 suivante :
4669
4670 @table @code
4671
4672 @item install-doc
4673 Cette phase installe tous les fichiers dans le répertoire de plus haut
4674 niveau dont le nom correspond à @var{%doc-regex}. On peut spécifier une
4675 regex différente avec le paramètre @code{#:doc-regex}. Tous les fichiers
4676 (récursivement) dans les répertoires de documentations spécifiés dans
4677 @code{#:doc-dirs} sont aussi installés.
4678 @end table
4679 @end defvr
4680
4681 @defvr {Variable Scheme} cmake-build-system
4682 Cette variable est exportée par @code{(guix build-system cmake)}. Elle
4683 implémente la procédure de construction des paquets qui utilisent
4684 l'@url{http://www.cmake.org, outil de construction CMake}.
4685
4686 Elle ajoute automatiquement le paquet @code{cmake} à l'ensemble des
4687 entrées. Le paquet utilisé peut être spécifié par le paramètre
4688 @code{#:cmake}.
4689
4690 Le paramètre @code{#:configure-flags} est pris comme une liste de drapeaux à
4691 passer à la commande @command{cmake}. Le paramètre @code{#:build-type}
4692 spécifie en termes abstrait les drapeaux passés au compilateur ; sa valeur
4693 par défaut est @code{"RelWithDebInfo"} (ce qui veut dire « mode public avec
4694 les informations de débogage » en plus court), ce qui signifie en gros que
4695 le code sera compilé avec @code{-O2 -g} comme pour les paquets autoconf par
4696 défaut.
4697 @end defvr
4698
4699 @defvr {Variable Scheme} go-build-system
4700 Cette variable est exportée par @code{(guix build-system go)}. Elle
4701 implémente la procédure pour les paquets Go utilisant les
4702 @url{https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies,
4703 mécanismes de construction Go} standard.
4704
4705 L'utilisateur doit fournir une valeur à la clef @code{#:import-path} et,
4706 dans certains cas, @code{#:unpack-path}. Le
4707 @url{https://golang.org/doc/code.html#ImportPaths, chemin d'import}
4708 correspond au chemin dans le système de fichiers attendu par le script de
4709 construction du paquet et les paquets qui s'y réfèrent et fournit une
4710 manière unique de se référer à un paquet Go. Il est typiquement basé sur
4711 une combinaison de l'URI du code source du paquet et d'une structure
4712 hiérarchique du système de fichier. Dans certains cas, vous devrez extraire
4713 le code source du paquet dans une structure de répertoires différente que
4714 celle indiquée par le chemin d'import et @code{#:unpack-path} devrait être
4715 utilisé dans ces cas-là.
4716
4717 Les paquets qui fournissent des bibliothèques Go devraient être installées
4718 avec leur code source. La clef @code{#:install-soruce?}, qui vaut @code{#t}
4719 par défaut, contrôle l'installation du code source. Elle peut être mise à
4720 @code{#f} pour les paquets qui ne fournissent que des fichiers exécutables.
4721 @end defvr
4722
4723 @defvr {Variable Scheme} glib-or-gtk-build-system
4724 Cette variable est exportée par @code{(guix build-system glib-or-gtk)}.
4725 Elle est conçue pour être utilisée par des paquets qui utilisent GLib ou
4726 GTK+.
4727
4728 Ce système de construction ajoute les deux phases suivantes à celles
4729 définies par @var{gnu-build-system} :
4730
4731 @table @code
4732 @item glib-or-gtk-wrap
4733 La phase @code{glib-or-gtk-wrap} s'assure que les programmes dans
4734 @file{bin/} sont capable de trouver les « schemas » GLib et les
4735 @uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, modules
4736 GTK+}. Ceci est fait en enveloppant les programmes dans des scripts de
4737 lancement qui initialisent correctement les variables d'environnement
4738 @code{XDG_DATA_DIRS} et @code{GTK_PATH}.
4739
4740 Il est possible d'exclure des sorties spécifiques de ce processus
4741 d'enveloppage en listant leur nom dans le paramètre
4742 @code{#:glib-or-gtk-wrap-excluded-outputs}. C'est utile lorsqu'une sortie
4743 est connue pour ne pas contenir de binaires GLib ou GTK+, et où l'enveloppe
4744 ajouterait une dépendance inutile vers GLib et GTK+.
4745
4746 @item glib-or-gtk-compile-schemas
4747 La phase @code{glib-or-gtk-compile-schemas} s'assure que tous les
4748 @uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
4749 schémas GSettings} de GLib sont compilés. La compilation est effectuée par
4750 le programme @command{glib-compile-schemas}. Il est fournit par le paquet
4751 @code{glib:bin} qui est automatiquement importé par le système de
4752 construction. Le paquet @code{glib} qui fournit
4753 @command{glib-compile-schemas} peut être spécifié avec le paramètre
4754 @code{#:glib}.
4755 @end table
4756
4757 Ces deux phases sont exécutées après la phase @code{install}.
4758 @end defvr
4759
4760 @defvr {Variable Scheme} guile-build-system
4761 Ce système de construction sert aux paquets Guile qui consistent
4762 exclusivement en code Scheme et qui sont si simple qu'ils n'ont même pas un
4763 makefile, sans parler d'un script @file{configure}. Il compile le code
4764 Scheme en utilisant @command{guild compile} (@pxref{Compilation,,, guile,
4765 GNU Guile Reference Manual}) et installe les fichiers @file{.scm} et
4766 @file{.go} aux bons emplacements. Il installe aussi la documentation.
4767
4768 Ce système de construction supporte la compilation croisée en utilisant
4769 l'option @code{--target} de @command{guild compile}.
4770
4771 Les paquets construits avec @code{guile-build-system} doivent fournir un
4772 paquet Guile dans leur champ @code{native-inputs}.
4773 @end defvr
4774
4775 @defvr {Variable Scheme} minify-build-system
4776 Cette variable est exportée par @code{(guix build-system minify)}. Elle
4777 implémente une procédure de minification pour des paquets JavaScript
4778 simples.
4779
4780 Elle ajoute @code{uglify-js} à l'ensemble des entrées et l'utilise pour
4781 compresser tous les fichiers JavaScript du répertoire @file{src}. Un
4782 minifieur différent peut être spécifié avec le paramètre @code{#:uglify-js}
4783 mais il est attendu que ce paquet écrive le code minifié sur la sortie
4784 standard.
4785
4786 Lorsque les fichiers JavaScript d'entrée ne sont pas situés dans le
4787 répertoire @file{src}, le paramètre @code{#:javascript-files} peut être
4788 utilisé pour spécifier une liste de noms de fichiers à donner au minifieur.
4789 @end defvr
4790
4791 @defvr {Variable Scheme} ocaml-build-system
4792 Cette variable est exportée par @code{(guix build-system ocaml)}. Elle
4793 implémente une procédure de construction pour les paquets
4794 @uref{https://ocaml.org, OCaml} qui consiste à choisir le bon ensemble de
4795 commande à lancer pour chaque paquet. Les paquets OCaml peuvent demander
4796 des commandes diverses pour être construit. Ce système de construction en
4797 essaye certaines.
4798
4799 Lorsqu'un fichier @file{setup.ml} est présent dans le répertoire de plus
4800 haut niveau, elle lancera @code{ocaml setup.ml -configure}, @code{ocaml
4801 setup.ml -build} et @code{ocaml setup.ml -install}. Le système de
4802 construction supposera que ces fichiers ont été générés par
4803 @uref{http://oasis.forge.ocamlcore.org/, OASIS} et prendra soin
4804 d'initialiser le préfixe et d'activer les tests s'ils ne sont pas
4805 désactivés. Vous pouvez passer des drapeaux de configuration et de
4806 consturction avec @code{#:configure-flags} et @code{#:build-flags}. La clef
4807 @code{#:test-flags} peut être passée pour changer l'ensemble des drapeaux
4808 utilisés pour activer les tests. La clef @code{#:use-make?} peut être
4809 utilisée pour outrepasser ce système dans les phases de construction et
4810 d'installation.
4811
4812 Lorsque le paquet a un fichier @file{configure}, il est supposé qu'il s'agit
4813 d'un script configure écrit à la main qui demande un format différent de
4814 celui de @code{gnu-build-system}. Vous pouvez ajouter plus de drapeaux avec
4815 la clef @code{#:configure-flags}.
4816
4817 Lorsque le paquet a un fichier @file{Makefile} (ou @code{#:use-make?} vaut
4818 @code{#t}), il sera utilisé et plus de drapeaux peuvent être passés à la
4819 construction et l'installation avec la clef @code{#:make-flags}.
4820
4821 Enfin, certains paquets n'ont pas ces fichiers mais utilisent un emplacement
4822 plus ou moins standard pour leur système de construction. Dans ce cas, le
4823 système de construction lancera @code{ocaml pkg/pkg.ml} ou
4824 @code{pkg/build.ml} et prendra soin de fournir le chemin du module findlib
4825 requis. Des drapeaux supplémentaires peuvent être passés via la clef
4826 @code{#:bulid-flags}. L'installation se fait avec
4827 @command{opam-installer}. Dans ce cas, le paquet @code{opam} doit être
4828 ajouté au champ @code{native-inputs} de la définition du paquet.
4829
4830 Remarquez que la plupart des paquets OCaml supposent qu'ils seront installés
4831 dans le même répertoire qu'OCaml, ce qui n'est pas ce que nous voulons faire
4832 dans Guix. En particulier, ils installeront leurs fichiers @file{.so} dans
4833 leur propre répertoire de module, ce qui est normalement correct puisqu'il
4834 s'agit du répertoire du compilateur OCaml. Dans Guix en revanche, le
4835 bibliothèques ne peuvent pas y être trouvées et on utilise
4836 @code{CAML_LD_LIBRARY_PATH} à la place. Cette variable pointe vers
4837 @file{lib/ocaml/site-lib/stubslibs} et c'est là où les bibliothèques
4838 @file{.so} devraient être installées.
4839 @end defvr
4840
4841 @defvr {Variable Scheme} python-build-system
4842 Cette variable est exportée par @code{(guix build-system python)}. Elle
4843 implémente la procédure de construction plus ou moins standarde utilisée
4844 pour les paquets Python, qui consiste à lancer @code{python setup.py build}
4845 puis @code{python setup.py install --prefix=/gnu/store/@dots{}}.
4846
4847 Pour les paquets qui installent des programmes autonomes dans @code{bin/},
4848 elle prend soin d'envelopper ces binaires pour que leur variable
4849 d'environnement @code{PYTHONPATH} pointe vers toutes les bibliothèques
4850 Python dont ils dépendent.
4851
4852 Le paquet Python utilisé pour effectuer la construction peut être spécifié
4853 avec le paramètre @code{#:python}. C'est une manière utile de forcer un
4854 paquet à être construit avec une version particulière de l'interpréteur
4855 python, ce qui peut être nécessaire si le paquet n'est compatible qu'avec
4856 une version de l'interpréteur.
4857
4858 Par défaut Guix appelle @code{setup.py} sous le contrôle de
4859 @code{setuptools}, comme le fait @command{pip}. Certains paquets ne sont
4860 pas compatibles avec setuptools (et pip), ainsi vous pouvez désactiver cela
4861 en mettant le paramètre @code{#:use-setuptools} à @code{#f}.
4862 @end defvr
4863
4864 @defvr {Variable Scheme} perl-build-system
4865 Cette variable est exportée par @code{(guix build-system perl)}. Elle
4866 implémente la procédure de construction standarde des paquets Perl, qui
4867 consiste soit à lancer @code{perl Build.PL --prefix=/gnu/store/@dots{}},
4868 suivi de @code{Build} et @code{Build install} ; ou à lancer @code{perl
4869 Makefile.PL PREFIX=/gnu/store/@dots{}}, suivi de @code{make} et @code{make
4870 install}, en fonction de la présence de @code{Build.PL} ou
4871 @code{Makefile.PL} dans la distribution du paquet. Le premier a la
4872 préférence si @code{Build.PL} et @code{Makefile.PL} existent tous deux dans
4873 la distribution du paquet. Cette préférence peut être inversée en
4874 spécifiant @code{#t} pour le paramètre @code{#:make-maker?}.
4875
4876 L'invocation initiale de @code{perl Makefile.PL} ou @code{perl Build.PL}
4877 passe les drapeaux spécifiés par le paramètre @code{#:make-maker-flags} ou
4878 @code{#:module-build-flags}, respectivement.
4879
4880 Le paquet Perl utilisé peut être spécifié avec @code{#:perl}.
4881 @end defvr
4882
4883 @defvr {Variable Scheme} r-build-system
4884 Cette variable est exportée par @code{(guix build-system r)}. Elle
4885 implémente la procédure de construction utilisée par les paquets
4886 @uref{http://r-project.org, R} qui consiste à lancer à peine plus que
4887 @code{R CMD INSTALL --library=/gnu/store/@dots{}} dans un environnement où
4888 @code{R_LIBS_SITE} contient les chemins de toutes les entrées R. Les tests
4889 sont lancés après l'installation avec la fonction R
4890 @code{tools::testInstalledPackage}.
4891 @end defvr
4892
4893 @defvr {Variable Scheme} texlive-build-system
4894 Cette variable est exportée par @code{(guix build-system texlive)}. Elle
4895 est utilisée pour construire des paquets TeX en mode batch avec le moteur
4896 spécifié. Le système de construction initialise la variable
4897 @code{TEXINPUTS} pour trouver tous les fichiers source TeX dans ses entrées.
4898
4899 Par défaut, elle lance @code{luatex} sur tous les fichiers qui se terminent
4900 par @code{ins}. Un moteur et un format différent peuvent être spécifiés
4901 avec l'argument @code{#:tex-format}. Plusieurs cibles de constructions
4902 peuvent être indiquées avec l'argument @code{#:build-targets} qui attend une
4903 liste de noms de fichiers. Le système de construction ajoute uniquement
4904 @code{texlive-bin} et @code{texlive-latex-base} (de @code{(gnu packages
4905 tex)} à la liste des entrées. Les deux peuvent être remplacés avec les
4906 arguments @code{#:texlive-bin} et @code{#:texlive-latex-base},
4907 respectivement.
4908
4909 Le paramètre @code{#:tex-directory} dit au système de construction où
4910 installer les fichiers construit dans l'arbre texmf.
4911 @end defvr
4912
4913 @defvr {Variable Scheme} ruby-build-system
4914 Cette variable est exportée par @code{(guix build-system ruby)}. Elle
4915 implémenter la procédure de construction RubyGems utilisée par les paquets
4916 Ruby qui consiste à lancer @code{gem build} suivi de @code{gem install}.
4917
4918 Le champ @code{source} d'un paquet qui utilise ce système de construction
4919 référence le plus souvent une archive gem, puisque c'est le format utilisé
4920 par les développeurs Ruby quand ils publient leur logiciel. Le système de
4921 construction décompresse l'archive gem, éventuellement en corrigeant les
4922 sources, lance la suite de tests, recompresse la gemme et l'installe. En
4923 plus, des répertoires et des archives peuvent être référencés pour permettre
4924 de construire des gemmes qui n'ont pas été publiées depuis Git ou une
4925 archive de sources traditionnelle.
4926
4927 Le paquet Ruby utilisé peut être spécifié avec le paramètre @code{#:ruby}.
4928 Une liste de drapeaux supplémentaires à passer à la commande @command{gem}
4929 peut être spécifiée avec le paramètre @code{#:gem-flags}.
4930 @end defvr
4931
4932 @defvr {Variable Scheme} waf-build-system
4933 Cette variable est exportée par @code{(guix build-system waf)}. Elle
4934 implémente une procédure de construction autour du script @code{waf}. Les
4935 phases usuelles — @code{configure}, @code{build} et @code{install} — sont
4936 implémentée en passant leur nom en argument au script @code{waf}.
4937
4938 Le script @code{waf} est exécuté par l'interpréteur Python. Le paquet
4939 Python utilisé pour lancer le script peut être spécifié avec le paramètre
4940 @code{#:python}.
4941 @end defvr
4942
4943 @defvr {Variable Scheme} scons-build-system
4944 Cette variable est exportée par @code{(guix build-system scons)}. Elle
4945 implémente la procédure de construction utilisée par l'outil de construction
4946 SCons. Ce système de construction lance @code{scons} pour construire le
4947 paquet, @code{scons test} pour lancer les tests puis @code{scons install}
4948 pour installer le paquet.
4949
4950 On peut passer des drapeaux supplémentaires à @code{scons} en les spécifiant
4951 avec le paramètre @code{#:scons-flags}. La version de python utilisée pour
4952 lancer SCons peut être spécifiée en sélectionnant le paquet SCons approprié
4953 avec le paramètre @code{#:scons}.
4954 @end defvr
4955
4956 @defvr {Variable Scheme} haskell-build-system
4957 Cette variable est exportée par @code{(guix build-system haskell)}. Elle
4958 implémente la procédure de construction Cabal utilisée par les paquets
4959 Haskell, qui consiste à lancer @code{runhaskell Setup.hs configure
4960 --prefix=/gnu/store/@dots{}} et @code{runhaskell Setup.hs build}. Plutôt
4961 que d'installer le paquets en lançant @code{runhaskell Setup.hs install},
4962 pour éviter d'essayer d'enregistrer les bibliothèques dans le répertoire du
4963 dépôt en lecture-seule du compilateur, le système de construction utilise
4964 @code{runhaskell Setup.hs copy}, suivi de @code{runhaskell Setup.hs
4965 register}. En plus, le système de construction génère la documentation du
4966 paquet en lançant @code{runhaskell Setup.hs haddock}, à moins que
4967 @code{#:haddock? #f} ne soit passé. Des paramètres facultatifs pour Haddock
4968 peuvent être passés à l'aide du paramètre @code{#:haddock-flags}. Si le
4969 fichier @code{Setup.hs} n'est pas trouvé, le système de construction
4970 cherchera @code{Setup.lhs} à la place.
4971
4972 Le compilateur Haskell utilisé peut être spécifié avec le paramètre
4973 @code{#:haskell} qui a pour valeur par défaut @code{ghc}.
4974 @end defvr
4975
4976 @defvr {Variable Scheme} dub-build-system
4977 Cette variable est exportée par @code{(guix build-system dub)}. Elle
4978 implémente la procédure de construction Dub utilisée par les paquets D qui
4979 consiste à lancer @code{dub build} et @code{dub run}. L'installation est
4980 effectuée en copiant les fichiers manuellement.
4981
4982 Le compilateur D utilisé peut être spécifié avec le paramètre @code{#:ldc}
4983 qui vaut par défaut @code{ldc}.
4984 @end defvr
4985
4986 @defvr {Variable Scheme} emacs-build-system
4987 Cette variable est exportée par @code{(guix build-system emacs)}. Elle
4988 implémente une procédure d'installation similaire au système de gestion de
4989 paquet d'Emacs lui-même (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
4990
4991 Elle crée d'abord le fichier @code{@var{package}-autoloads.el}, puis compile
4992 tous les fichiers Emacs Lisp en bytecode. Contrairement au système de
4993 gestion de paquets d'Emacs, les fichiers de documentation info sont déplacés
4994 dans le répertoire standard et le fichier @file{dir} est supprimé. Chaque
4995 paquet est installé dans son propre répertoire dans
4996 @file{share/emacs/site-lisp/guix.d}.
4997 @end defvr
4998
4999 @defvr {Variable Scheme} font-build-system
5000 This variable is exported by @code{(guix build-system font)}. It implements
5001 an installation procedure for font packages where upstream provides
5002 pre-compiled TrueType, OpenType, etc.@: font files that merely need to be
5003 copied into place. It copies font files to standard locations in the output
5004 directory.
5005 @end defvr
5006
5007 @defvr {Variable Scheme} meson-build-system
5008 Cette variable est exportée par @code{(guix build-system meson)}. Elle
5009 implémente la procédure de construction des paquets qui utilisent
5010 @url{http://mesonbuild.com, Meson} comme système de construction.
5011
5012 Elle ajoute à la fois Meson et @uref{https://ninja-build.org/, Ninja} à
5013 l'ensemble des entrées, et ils peuvent être modifiés avec les paramètres
5014 @code{#:meson} et @code{#:ninja} si requis. Le Meson par défaut est
5015 @code{meson-for-build}, qui est spécial parce qu'il ne nettoie pas le
5016 @code{RUNPATH} des binaires et les bibliothèques qu'il installe.
5017
5018 Ce système de construction est une extension de @var{gnu-build-system}, mais
5019 avec les phases suivantes modifiées pour Meson :
5020
5021 @table @code
5022
5023 @item configure
5024 La phase lance @code{meson} avec les drapeaux spécifiés dans
5025 @code{#:configure-flags}. Le drapeau @code{--build-type} est toujours
5026 initialisé à @code{plain} à moins que quelque chose d'autre ne soit spécifié
5027 dans @code{#:build-type}.
5028
5029 @item build
5030 La phase lance @code{ninja} pour construire le paquet en parallèle par
5031 défaut, mais cela peut être changé avec @code{#:parallel-build?}.
5032
5033 @item check
5034 La phase lance @code{ninja} avec la cible spécifiée dans
5035 @code{#:test-target}, qui est @code{"test"} par défaut.
5036
5037 @item install
5038 La phase lance @code{ninja install} et ne peut pas être changée.
5039 @end table
5040
5041 En dehors de cela, le système de construction ajoute aussi la phase suivante
5042 :
5043
5044 @table @code
5045
5046 @item fix-runpath
5047 Cette phase s'assure que tous les binaire peuvent trouver les bibliothèques
5048 dont ils ont besoin. Elle cherche les bibliothèques requises dans les
5049 sous-répertoires du paquet en construction et les ajoute au @code{RUNPATH}
5050 là où c'est nécessaire. Elle supprime aussi les références aux
5051 bibliothèques laissées là par la phase de construction par
5052 @code{meson-for-build} comme les dépendances des tests, qui ne sont pas
5053 vraiment requises pour le programme.
5054
5055 @item glib-or-gtk-wrap
5056 Cette phase est la phase fournie par @code{glib-or-gtk-build-system} et
5057 n'est pas activée par défaut. Elle peut l'être avec @code{#:glib-or-gtk?}.
5058
5059 @item glib-or-gtk-compile-schemas
5060 Cette phase est la phase fournie par @code{glib-or-gtk-build-system} et
5061 n'est pas activée par défaut. Elle peut l'être avec @code{#:glib-or-gtk?}.
5062 @end table
5063 @end defvr
5064
5065 Enfin, pour les paquets qui n'ont pas besoin de choses sophistiquées, un
5066 système de construction « trivial » est disponible. Il est trivial dans le
5067 sens où il ne fournit en gros aucun support : il n'apporte pas de dépendance
5068 implicite, et n'a pas de notion de phase de construction.
5069
5070 @defvr {Variable Scheme} trivial-build-system
5071 Cette variable est exportée par @code{(guix build-system trivial)}.
5072
5073 Ce système de construction requiert un argument @code{#:builder}. Cet
5074 argument doit être une expression Scheme qui construit la sortie du paquet —
5075 comme avec @code{build-expression->derivation} (@pxref{Dérivations,
5076 @code{build-expression->derivation}}).
5077 @end defvr
5078
5079 @node Le dépôt
5080 @section Le dépôt
5081
5082 @cindex dépôt
5083 @cindex éléments du dépôt
5084 @cindex chemins dans le dépôt
5085
5086 Conceptuellement, le @dfn{dépôt} est l'endroit où les dérivations qui ont
5087 bien été construites sont stockées — par défaut, @file{/gnu/store}. Les
5088 sous-répertoires dans le dépôt s'appellent des @dfn{éléments du dépôt} ou
5089 parfois des @dfn{chemins du dépôt}. Le dépôt a une base de données associée
5090 qui contient des informations comme les chemins du dépôt auxquels se
5091 réfèrent chaque chemin du dépôt et la liste des éléments du dépôt
5092 @emph{valides} — les résultats d'une construction réussie. Cette base de
5093 données se trouve dans @file{@var{localstatedir}/guix/db} où
5094 @var{localstatedir} est le répertoire d'états spécifié @i{via} @option
5095 {--localstatedir} à la configuration, typiquement @file{/var}.
5096
5097 C'est @emph{toujours} le démon qui accède au dépôt pour le compte de ses
5098 clients (@pxref{Invoquer guix-daemon}). Pour manipuler le dépôt, les
5099 clients se connectent au démon par un socket Unix-domain, envoient une
5100 requête dessus et lisent le résultat — ce sont des appels de procédures
5101 distantes, ou RPC.
5102
5103 @quotation Remarque
5104 Les utilisateurs ne doivent @emph{jamais} modifier les fichiers dans
5105 @file{/gnu/store} directement. Cela entraînerait des incohérences et
5106 casserait l'hypothèse d'immutabilité du modèle fonctionnel de Guix
5107 (@pxref{Introduction}).
5108
5109 @xref{Invoquer guix gc, @command{guix gc --verify}}, pour des informations
5110 sur la manière de vérifier l'intégrité du dépôt et d'essayer de réparer des
5111 modifications accidentelles.
5112 @end quotation
5113
5114 Le module @code{(guix store)} fournit des procédures pour se connecter au
5115 démon et pour effectuer des RPC. Elles sont décrites plus bas. Par défaut,
5116 @code{open-connection}, et donc toutes les commandes @command{guix} se
5117 connectent au démon local ou à l'URI spécifiée par la variable
5118 d'environnement @code{GUIX_DAEMON_SOCKET}.
5119
5120 @defvr {Variable d'environnement} GUIX_DAEMON_SOCKET
5121 Lorsqu'elle est initialisée, la valeur de cette variable devrait être un nom
5122 de fichier ou une URI qui désigne l'extrémité du démon. Lorsque c'est un
5123 nom de fichier, il dénote un socket Unix-domain où se connecter. En plus
5124 des noms de fichiers, les schémas d'URI supportés sont :
5125
5126 @table @code
5127 @item file
5128 @itemx unix
5129 Pour les sockets Unix-domain. @code{file:///var/guix/daemon-socket/socket}
5130 est équivalent à @file{/var/guix/daemon-socket/socket}.
5131
5132 @item guix
5133 @cindex démon, accès distant
5134 @cindex accès distant au démon
5135 @cindex démon, paramètres de grappes
5136 @cindex grappes, paramètres du démon
5137 Ces URI dénotent des connexions par TCP/IP, sans chiffrement ni
5138 authentification de l'hôte distant. L'URI doit spécifier le nom d'hôte et
5139 éventuellement un numéro de port (par défaut 44146) :
5140
5141 @example
5142 guix://master.guix.example.org:1234
5143 @end example
5144
5145 Ce paramétrage est adapté aux réseaux locaux, comme dans le cas de grappes
5146 de serveurs, où seuls des noms de confiance peuvent se connecter au démon de
5147 construction sur @code{master.guix.example.org}.
5148
5149 L'option @code{--listen} de @command{guix-daemon} peut être utilisé pour lui
5150 dire d'écouter des connexions TCP (@pxref{Invoquer guix-daemon,
5151 @code{--listen}}).
5152
5153 @item ssh
5154 @cindex accès SSH au démon de construction
5155 Ces URI vous permettent de vous connecter au démon à distance à travers
5156 SSH@footnote{Cette fonctionnalité requiert Guile-SSH
5157 (@pxref{Prérequis}).}.
5158
5159 @example
5160 ssh://charlie@@guix.example.org:22
5161 @end example
5162
5163 Comme pour @command{guix copy}, les fichiers de configuration du client
5164 OpenSSH sont respectés (@pxref{Invoquer guix copy}).
5165 @end table
5166
5167 Des schémas d'URI supplémentaires pourraient être supportés dans le futur.
5168
5169 @c XXX: Remove this note when the protocol incurs fewer round trips
5170 @c and when (guix derivations) no longer relies on file system access.
5171 @quotation Remarque
5172 La capacité de se connecter à un démon de construction distant est considéré
5173 comme expérimental à la version @value{VERSION}. Contactez-nous pour
5174 partager vos problèmes ou des suggestions que vous pourriez avoir
5175 (@pxref{Contribuer}).
5176 @end quotation
5177 @end defvr
5178
5179 @deffn {Procédure Scheme} open-connection [@var{uri}] [#:reserve-space? #t]
5180 Se connecte au démon à travers le socket Unix-domain à @var{uri} (une chaîne
5181 de caractères). Lorsque @var{reserve-space?} est vrai, cela demande de
5182 réserver un peu de place supplémentaire sur le système de fichiers pour que
5183 le ramasse-miette puisse opérer au cas où le disque serait plein. Renvoie
5184 un objet serveur.
5185
5186 @var{file} a pour valeur par défaut @var{%default-socket-path}, qui est
5187 l'emplacement normal en fonction des options données à @command{configure}.
5188 @end deffn
5189
5190 @deffn {Procédure Scheme} close-connection @var{server}
5191 Ferme la connexion au @var{serveur}.
5192 @end deffn
5193
5194 @defvr {Variable Scheme} current-build-output-port
5195 Cette variable est liée à un paramètre SRFI-39, qui se réfère au port où les
5196 journaux de construction et d'erreur envoyés par le démon devraient être
5197 écrits.
5198 @end defvr
5199
5200 Les procédures qui font des RPC prennent toutes un objet serveur comme
5201 premier argument.
5202
5203 @deffn {Procédure Scheme} valid-path? @var{server} @var{path}
5204 @cindex éléments du dépôt invalides
5205 Renvoie @code{#t} lorsque @var{path} désigne un élément du dépôt valide et
5206 @code{#f} sinon (un élément invalide peut exister sur le disque mais rester
5207 invalide, par exemple parce que c'est le résultat d'une construction annulée
5208 ou échouée).
5209
5210 Une condition @code{&nix-protocol-error} est levée si @var{path} n'est pas
5211 préfixée par le répertoire du dépôt (@file{/gnu/store}).
5212 @end deffn
5213
5214 @deffn {Procédure Scheme} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
5215 Ajoute @var{text} dans le fichier @var{name} dans le dépôt et renvoie son
5216 chemin. @var{references} est la liste des chemins du dépôt référencés par
5217 le chemin du dépôt qui en résulte.
5218 @end deffn
5219
5220 @deffn {Procédure Scheme} build-derivations @var{server} @var{derivations}
5221 Construit @var{derivaton} (ne liste d'objets @code{<derivation>} ou de
5222 chemins de dérivations) et retourne quand le travailleur a fini de les
5223 construire. Renvoie @code{#t} en cas de réussite.
5224 @end deffn
5225
5226 Remarque que le module @code{(guix monads)} fournit une monad ainsi que des
5227 version monadiques des procédures précédentes, avec le but de rendre plus
5228 facile de travailler avec le code qui accède au dépôt (@pxref{La monad du dépôt}).
5229
5230 @c FIXME
5231 @i{Cette section est actuellement incomplète.}
5232
5233 @node Dérivations
5234 @section Dérivations
5235
5236 @cindex dérivations
5237 Les actions de construction à bas-niveau et l'environnement dans lequel
5238 elles sont effectuées sont représentés par des @dfn{dérivations}. Une
5239 dérivation contient cet ensemble d'informations :
5240
5241 @itemize
5242 @item
5243 Les sorties de la dérivation — les dérivations produisent au moins un
5244 fichier ou répertoire dans le dépôt, mais peuvent en produire plus.
5245
5246 @item
5247 Les entrées de la dérivation, qui peuvent être d'autres dérivations ou des
5248 fichiers dans le dépôt (correctifs, scripts de construction, etc).
5249
5250 @item
5251 Le type de système ciblé par la dérivation — p.ex.@: @code{x86_64-linux}.
5252
5253 @item
5254 Le nom de fichier d'un script de construction dans le dépôt avec les
5255 arguments à lui passer.
5256
5257 @item
5258 Une liste de variables d'environnement à définir.
5259
5260 @end itemize
5261
5262 @cindex chemin de dérivation
5263 Les dérivations permettent aux client du démon de communiquer des actions de
5264 construction dans le dépôt. Elles existent sous deux formes : en tant que
5265 représentation en mémoire, à la fois côté client et démon, et en tant que
5266 fichiers dans le dépôt dont le nom fini par @code{.drv} — on dit que ce sont
5267 des @dfn{chemins de dérivations}. Les chemins de dérivations peuvent être
5268 passés à la procédure @code{build-derivations} pour effectuer les actions de
5269 construction qu'ils prescrivent (@pxref{Le dépôt}).
5270
5271 @cindex dérivations à sortie fixe
5272 Des opérations comme le téléchargement de fichiers et la récupération de
5273 sources gérés par un logiciel de contrôle de version pour lesquels le hash
5274 du contenu est connu à l'avance sont modélisés par des @dfn{dérivations à
5275 sortie fixe}. Contrairement aux dérivation habituelles, les sorties d'une
5276 dérivation à sortie fixe sont indépendantes de ses entrées — p.ex.@: un code
5277 source téléchargé produit le même résultat quelque soit la méthode de
5278 téléchargement utilisée.
5279
5280 Le module @code{(guix derivations)} fournit une représentation des
5281 dérivations comme des objets Scheme, avec des procédures pour créer et
5282 manipuler des dérivations. La primitive de plus bas-niveau pour créer une
5283 dérivation est la procédure @code{derivation} :
5284
5285 @deffn {Procédure Scheme} derivation @var{store} @var{name} @var{builder} @
5286 @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
5287 [#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
5288 [#:system (%current-system)] [#:references-graphs #f] @
5289 [#:allowed-references #f] [#:disallowed-references #f] @
5290 [#:leaked-env-vars #f] [#:local-build? #f] @
5291 [#:substitutable? #t] [#:properties '()]
5292 Construit une dérivation avec les arguments donnés et renvoie l'objet
5293 @code{<derivation>} obtenu.
5294
5295 Lorsque @var{hash} et @var{hash-algo} sont donnés, une @dfn{dérivation à
5296 sortie fixe} est créée — c.-à-d.@: une dérivation dont le résultat est connu
5297 à l'avance, comme dans le cas du téléchargement d'un fichier. Si, en plus,
5298 @var{recursive?} est vrai, alors la sortie fixe peut être un fichier
5299 exécutable ou un répertoire et @var{hash} doit être le hash d'une archive
5300 contenant la sortie.
5301
5302 Lorsque @var{references-graphs} est vrai, il doit s'agir d'une liste de
5303 paires de noms de fichiers et de chemins du dépôt. Dans ce cas, le graphe
5304 des références de chaque chemin du dépôt est exporté dans l'environnement de
5305 construction dans le fichier correspondant, dans un simple format texte.
5306
5307 Lorsque @var{allowed-references} est vrai, il doit s'agir d'une liste
5308 d'éléments du dépôt ou de sorties auxquelles la sortie de la dérivations
5309 peut faire référence. De même, @var{disallowed-references}, si vrai, doit
5310 être une liste de choses que la sortie ne doit @emph{pas} référencer.
5311
5312 Lorsque @var{leaked-env-vars} est vrai, il doit s'agir d'une liste de
5313 chaînes de caractères qui désignent les variables d'environnements qui
5314 peuvent « fuiter » de l'environnement du démon dans l'environnement de
5315 construction. Ce n'est possible que pour les dérivations à sortie fixe —
5316 c.-à-d.@: lorsque @var{hash} est vrai. L'utilisation principale est de
5317 permettre à des variables comme @code{http_proxy} d'être passées aux
5318 dérivations qui téléchargent des fichiers.
5319
5320 Lorsque @var{local-build?} est vrai, déclare que la dérivation n'est pas un
5321 bon candidat pour le déchargement et devrait plutôt être construit
5322 localement (@pxref{Réglages du délestage du démon}). C'est le cas des petites
5323 dérivations où le coût du transfert de données est plus important que les
5324 bénéfices.
5325
5326 Lorsque que @var{substitutable?} est faux, déclare que les substituts de la
5327 sortie de la dérivation ne devraient pas être utilisés
5328 (@pxref{Substituts}). Cela est utile par exemple pour construire des paquets
5329 qui utilisent des détails du jeu d'instruction du CPU hôte.
5330
5331 @var{properties} doit être une liste d'association décrivant les «
5332 propriétés » de la dérivation. Elle est gardée telle-quelle, sans être
5333 interprétée, dans la dérivation.
5334 @end deffn
5335
5336 @noindent
5337 Voici un exemple avec un script shell comme constructeur, en supposant que
5338 @var{store} est une connexion ouverte au démon et @var{bash} pointe vers un
5339 exécutable Bash dans le dépôt :
5340
5341 @lisp
5342 (use-modules (guix utils)
5343 (guix store)
5344 (guix derivations))
5345
5346 (let ((builder ; ajoute le script Bash au dépôt
5347 (add-text-to-store store "my-builder.sh"
5348 "echo hello world > $out\n" '())))
5349 (derivation store "foo"
5350 bash `("-e" ,builder)
5351 #:inputs `((,bash) (,builder))
5352 #:env-vars '(("HOME" . "/homeless"))))
5353 @result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
5354 @end lisp
5355
5356 Comme on pourrait s'en douter, cette primitive est difficile à utiliser
5357 directement. Une meilleure approche est d'écrire les scripts de
5358 construction en Scheme, bien sur ! Le mieux à faire pour cela est d'écrire
5359 le code de construction comme une « G-expression » et de la passer à
5360 @code{gexp->derivation}. Pour plus d'informations, @pxref{G-Expressions}.
5361
5362 Il fut un temps où @code{gexp->derivation} n'existait pas et où construire
5363 une dérivation donc le code de construction était écrit en Scheme se faisait
5364 avec @code{build-expression->derivation}, documenté plus bas. Cette
5365 procédure est maintenant obsolète, remplacée par @code{gexp->derivation} qui
5366 est meilleure.
5367
5368 @deffn {Procédure Scheme} build-expression->derivation @var{store} @
5369 @var{name} @var{exp} @
5370 [#:system (%current-system)] [#:inputs '()] @
5371 [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
5372 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
5373 [#:references-graphs #f] [#:allowed-references #f] @
5374 [#:disallowed-references #f] @
5375 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
5376 Renvoie une dérivation qui exécute l'expression Scheme @var{exp} comme un
5377 constructeur pour la dérivation @var{name}. @var{inputs} doit être une
5378 liste de tuples @code{(name drv-path sub-drv)} ; lorsque @var{sub-drv} est
5379 omis, @code{"out"} est utilisé. @var{modules} est une liste de noms de
5380 modules Guile du chemin de recherche actuel qui seront copiés dans le dépôt,
5381 compilés et rendus disponibles dans le chemin de chargement pendant
5382 l'exécution de @var{exp} — p.@: ex.@: @code{((guix build utils) (guix build
5383 gnu-build-system))}.
5384
5385 @var{exp} est évaluée dans une environnement où @code{%outputs} est lié à
5386 une liste de paires de sortie/chemin, et où @code{%build-inputs} est lié à
5387 une liste de paires de chaînes de caractères et de chemin de sortie
5388 construite à partir de @var{inputs}. Éventuellement, @var{env-vars} est une
5389 liste de paires de chaînes de caractères spécifiant le nom et la valeur de
5390 variables d'environnement visibles pour le constructeur. Le constructeur
5391 termine en passant le résultat de @var{exp} à @code{exit} ; ainsi, lorsque
5392 @var{exp} renvoie @code{#f}, la construction est considérée en échec.
5393
5394 @var{exp} est construite avec @var{guile-for-build} (une dérivation).
5395 Lorsque @var{guile-for-build} est omis où est @code{#f}, la valeur du fluide
5396 @code{%guile-for-build} est utilisée à la place.
5397
5398 Voir la procédure @code{derivation} pour la signification de
5399 @var{references-graph}, @var{allowed-references},
5400 @var{disallowed-references}, @var{local-build?} et @var{substitutable?}.
5401 @end deffn
5402
5403 @noindent
5404 Voici un exemple de dérivation à sortie unique qui crée un répertoire avec
5405 un fichier :
5406
5407 @lisp
5408 (let ((builder '(let ((out (assoc-ref %outputs "out")))
5409 (mkdir out) ; create /gnu/store/@dots{}-goo
5410 (call-with-output-file (string-append out "/test")
5411 (lambda (p)
5412 (display '(hello guix) p))))))
5413 (build-expression->derivation store "goo" builder))
5414
5415 @result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
5416 @end lisp
5417
5418
5419 @node La monad du dépôt
5420 @section La monad du dépôt
5421
5422 @cindex monad
5423
5424 Les procédures qui travaillent sur le dépôt décrites dans les sections
5425 précédentes prennent toutes une connexion ouverte au démon de construction
5426 comme premier argument. Bien que le modèle sous-jacent soit fonctionnel,
5427 elles ont soit des effets de bord, soit dépendent de l'état actuel du dépôt.
5428
5429 Le premier point est embêtant : on doit se balader avec la connexion au
5430 démon dans toutes ces fonctions, ce qui rend impossible le fait de composer
5431 des fonctions qui ne prennent pas ce paramètre avec des fonctions qui le
5432 prennent. Le deuxième point est problématique : comme les opérations sur le
5433 dépôt ont des effets de bord ou dépendent d'états externes, elles doivent
5434 être enchaînés correctement.
5435
5436 @cindex valeurs monadiques
5437 @cindex fonctions monadiques
5438 C'est là que le module @code{(guix monads)} arrive à la rescousse. Ce
5439 module fournit un cadre pour travailler avec des @dfn{monads}, en
5440 particulier une monad très utile pour notre usage, la @dfn{monad du dépôt}.
5441 Les monads sont des constructions qui permettent deux choses : associer un «
5442 contexte » avec une valeur (dans notre cas, le contexte est le dépôt) et
5443 construire une séquence de calculs (ici les calculs comprennent des accès au
5444 dépôt). Les valeurs dans une monad — les valeurs qui contiennent ce
5445 contexte supplémentaire — sont appelées des @dfn{valeurs monadiques} ; les
5446 procédures qui renvoient ce genre de valeur sont appelées des
5447 @dfn{procédures monadiques}.
5448
5449 Considérez cette procédure « normale » :
5450
5451 @example
5452 (define (sh-symlink store)
5453 ;; Renvoie une dérivation qui crée un lien symbolique vers l'exécutable « bash ».
5454 (let* ((drv (package-derivation store bash))
5455 (out (derivation->output-path drv))
5456 (sh (string-append out "/bin/bash")))
5457 (build-expression->derivation store "sh"
5458 `(symlink ,sh %output))))
5459 @end example
5460
5461 En utilisant @code{(guix monads)} et @code{(guix gexp)}, on peut la réécrire
5462 en une fonction monadique :
5463
5464 @example
5465 (define (sh-symlink)
5466 ;; Pareil, mais renvoie une valeur monadique.
5467 (mlet %store-monad ((drv (package->derivation bash)))
5468 (gexp->derivation "sh"
5469 #~(symlink (string-append #$drv "/bin/bash")
5470 #$output))))
5471 @end example
5472
5473 Il y a plusieurs choses à remarquer avec cette deuxième version : le
5474 paramètre @code{store} est maintenant implicitement « enfilé » dans les
5475 appels aux procédures monadiques @code{package->derivation} et
5476 @code{gexp->derivation}, et la valeur monadique renvoyée par
5477 @code{package->derivation} est @dfn{liée} avec @code{mlet} plutôt qu'avec un
5478 simple @code{let}.
5479
5480 Il se trouve que l'appel à @code{package->derivation} peut même être omis
5481 puisqu'il aura lieu implicitement, comme nous le verrons plus tard
5482 (@pxref{G-Expressions}) :
5483
5484 @example
5485 (define (sh-symlink)
5486 (gexp->derivation "sh"
5487 #~(symlink (string-append #$bash "/bin/bash")
5488 #$output)))
5489 @end example
5490
5491 @c See
5492 @c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
5493 @c for the funny quote.
5494 L'appel à la procédure monadique @code{sh-symlink} n'a aucun effet. En
5495 anglais on pourrait dire « you exit a monad like you exit a building on
5496 fire: by running »@footnote{NdT : « on sort d'une monad comme d'un immeuble
5497 en flamme, en courant ». Le jeu de mot est perdu à la traduction : courrir
5498 et lancer utilisent le même verbe @i{run} en anglais.}. Donc, pour sortir de
5499 la monad et obtenir l'effet escompté, on doit utiliser
5500 @code{run-with-store}.
5501
5502 @example
5503 (run-with-store (open-connection) (sh-symlink))
5504 @result{} /gnu/store/...-sh-symlink
5505 @end example
5506
5507 Remarquez que le module @code{(guix monad-repl)} étend la console Guile avec
5508 de nouvelles « méta-commandes » pour rendre plus facile la manipulation de
5509 procédures monadiques : @code{run-in-store} et @code{enter-store-monad}. La
5510 première est utilisée pour « lancer » une seule valeur monadique à travers
5511 le dépôt :
5512
5513 @example
5514 scheme@@(guile-user)> ,run-in-store (package->derivation hello)
5515 $1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
5516 @end example
5517
5518 La deuxième entre dans une console récursive, où toutes les valeurs de
5519 retour sont automatiquement lancées à travers le dépôt :
5520
5521 @example
5522 scheme@@(guile-user)> ,enter-store-monad
5523 store-monad@@(guile-user) [1]> (package->derivation hello)
5524 $2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
5525 store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
5526 $3 = "/gnu/store/@dots{}-foo"
5527 store-monad@@(guile-user) [1]> ,q
5528 scheme@@(guile-user)>
5529 @end example
5530
5531 @noindent
5532 Remarquez qu'on ne peut pas renvoyer de valeur non monadique dans la console
5533 @code{store-monad}.
5534
5535 Les formes syntaxiques principales pour utiliser des monads en général sont
5536 disponibles dans le module @code{(guix monads)} et sont décrites ci-dessous.
5537
5538 @deffn {Syntaxe Scheme} with-monad @var{monad} @var{body} ...
5539 Évalue n'importe quelle forme @code{>>=} ou @code{return} dans @var{body}
5540 comme une @var{monad}.
5541 @end deffn
5542
5543 @deffn {Syntaxe Scheme} return @var{val}
5544 Renvoie une valeur monadique qui encapsule @var{val}.
5545 @end deffn
5546
5547 @deffn {Syntaxe Scheme} >>= @var{mval} @var{mproc} ...
5548 @dfn{Lie} une valeur monadique @var{mval}, en passant son « contenu » aux
5549 procédures monadiques @var{mproc}@dots{}@footnote{Cette opération est
5550 souvent appelée « bind », mais ce nom dénote une procédure qui n'a rien à
5551 voir en Guile. Ainsi, nous empruntons ce symbole quelque peu cryptique au
5552 langage Haskell}. Il peut y avoir une ou plusieurs @code{mproc}, comme dans
5553 cet exemple :
5554
5555 @example
5556 (run-with-state
5557 (with-monad %state-monad
5558 (>>= (return 1)
5559 (lambda (x) (return (+ 1 x)))
5560 (lambda (x) (return (* 2 x)))))
5561 'some-state)
5562
5563 @result{} 4
5564 @result{} some-state
5565 @end example
5566 @end deffn
5567
5568 @deffn {Syntaxe Scheme} mlet @var{monad} ((@var{var} @var{mval}) ...) @
5569 @var{body} ...
5570 @deffnx {Syntaxe Scheme} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
5571 @var{body} ...
5572 Lie les variables @var{var} aux valeurs monadiques @var{mval} dans
5573 @var{body}, une séquence d'expressions. Comme avec l'opérateur de liaison,
5574 on peut réfléchir comme si on « ouvrait » la valeur non-monadique « contenue
5575 » dans @var{mval} et comme si on faisait en sorte que @var{var} se réfère à
5576 cette valeur pure, non-monadique, dans la portée de @var{body}. La forme
5577 (@var{var} -> @var{val}) lie @var{var} à la valeur « normale » @var{val},
5578 comme @code{let}. L'opération de liaison a lieu en séquence de la gauche
5579 vers la droite. La dernière expression de @var{body} doit être une
5580 expression monadique et son résultat deviendra le résultat de @code{mlet} ou
5581 @code{mlet*} lorsque lancé dans la @var{monad}.
5582
5583 @code{mlet*} est à @code{mlet} ce que @code{let*} est à @code{let}
5584 (@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
5585 @end deffn
5586
5587 @deffn {Système Scheme} mbegin @var{monad} @var{mexp} ...
5588 Lie @var{mexp} et les expressions monadiques suivantes en séquence, et
5589 renvoie le résultat de la dernière expression. Chaque expression dans la
5590 séquence doit être une expression monadique.
5591
5592 Cette procédure est similaire à @code{mlet}, sauf que les valeurs de retour
5593 des expressions monadiques sont ignorées. Dans ce sens, elle est analogue à
5594 @code{begin}, mais appliqué à des expressions monadiques.
5595 @end deffn
5596
5597 @deffn {Système Scheme} mwhen @var{condition} @var{mexp0} @var{mexp*} ...
5598 Lorsque la @var{condition} est vraie, évalue la séquence des expressions
5599 monadiques @var{mexp0}..@var{mexp*} comme dans un @code{mbegin}. Lorsque la
5600 @var{condition} est fausse, renvoie @code{*unspecified*} dans la monad
5601 actuelle. Cahque expression dans la séquence doit être une expression
5602 monadique.
5603 @end deffn
5604
5605 @deffn {Système Scheme} munless @var{condition} @var{mexp0} @var{mexp*} ...
5606 Lorsque la @var{condition} est fausse, évalue la séquence des expressions
5607 monadiques @var{mexp0}..@var{mexp*} comme dans un @code{mbegin}. Lorsque la
5608 @var{condition} est vraie, renvoie @code{*unspecified*} dans la monad
5609 actuelle. Cahque expression dans la séquence doit être une expression
5610 monadique.
5611 @end deffn
5612
5613 @cindex monad d'état
5614 Le module @code{(guix monads)} fournit la @dfn{monad d'état} qui permet à
5615 une valeur supplémentaire — l'état — d'être enfilée à travers les appels de
5616 procédures.
5617
5618 @defvr {Variable Scheme} %state-monad
5619 La monad d'état. les procédure dans la monad d'état peuvent accéder et
5620 modifier l'état qui est enfilé.
5621
5622 Considérez l'exemple ci-dessous. La procédure @code{square} renvoie une
5623 valeur dans la monad d'état. Elle renvoie le carré de son argument, mais
5624 incrémente aussi la valeur actuelle de l'état :
5625
5626 @example
5627 (define (square x)
5628 (mlet %state-monad ((count (current-state)))
5629 (mbegin %state-monad
5630 (set-current-state (+ 1 count))
5631 (return (* x x)))))
5632
5633 (run-with-state (sequence %state-monad (map square (iota 3))) 0)
5634 @result{} (0 1 4)
5635 @result{} 3
5636 @end example
5637
5638 Lorsqu'on la lance à travers @var{%state-monad}, on obtient cet valeur
5639 d'état supplémentaire, qui est le nombre d'appels à @code{square}.
5640 @end defvr
5641
5642 @deffn {Procédure monadique} current-state
5643 Renvoie l'état actuel dans une valeur monadique.
5644 @end deffn
5645
5646 @deffn {Procédure monadique} set-current-state @var{value}
5647 Initialise l'état actuel à @var{value} et renvoie l'état précédent dans une
5648 valeur monadique.
5649 @end deffn
5650
5651 @deffn {Procédure monadique} state-push @var{value}
5652 Pousse @var{value} sur l'état actuel, qui est supposé être une liste, et
5653 renvoie l'état précédent dans une valeur monadique.
5654 @end deffn
5655
5656 @deffn {Procédure monadique} state-pop
5657 Récupère (pop) une valeur dans l'état actuel et la renvoie comme une valeur
5658 monadique. L'état est supposé être une liste.
5659 @end deffn
5660
5661 @deffn {Procédure Scheme} run-with-state @var{mval} [@var{state}]
5662 Lance la valeur monadique @var{mval} avec @var{state} comme valeur
5663 initiale. Renvoie deux valeurs : la valeur du résultat et l'état du
5664 résultat.
5665 @end deffn
5666
5667 L'interface principale avec la monad du dépôt, fournit par le module
5668 @code{(guix store)}, est la suivante.
5669
5670 @defvr {Variable Scheme} %store-monad
5671 La monad du dépôt — un alias pour @var{%state-monad}.
5672
5673 Les valeurs dans la monad du dépôt encapsulent des accès au dépôt. Lorsque
5674 son effet est requis, une valeur de la monad du dépôt doit être « évaluée »
5675 en la passant à la procédure @code{run-with-store} (voir plus bas).
5676 @end defvr
5677
5678 @deffn {Procédure Scheme} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
5679 Lance @var{mval}, une valeur monadique dans la monad du dépôt, dans
5680 @var{store}, une connexion ouvert au dépôt.
5681 @end deffn
5682
5683 @deffn {Procédure monadique} text-file @var{name} @var{text} [@var{references}]
5684 Renvoie une valeur monadique correspondant au nom de fichier dans le dépôt
5685 du fichier contenant @var{text}, une chaîne de caractères. @var{references}
5686 est une liste d'éléments du dépôt auxquels le fichier texte en résultat se
5687 réfère ; c'est la liste vide par défaut.
5688 @end deffn
5689
5690 @deffn {Procédure monadique} binary-file @var{name} @var{data} [@var{references}]
5691 Renvoie une valeur monadique correspondant au nom de fichier absolu dans le
5692 dépôt du fichier contenant @var{data}, un vecteur d'octets.
5693 @var{references} est une liste d'éléments du dépôt auxquels le fichier
5694 binaire en résultat se réfère ; c'est la liste vide par défaut.
5695 @end deffn
5696
5697 @deffn {Procédure monadique} interned-file @var{file} [@var{name}] @
5698 [#:recursive? #t] [#:select? (const #t)]
5699 Renvoie le nom de @var{file} une fois ajouté au dépôt. Utilise @var{name}
5700 comme nom dans le dépôt ou le nom de fichier de @var{file} si @var{name} est
5701 omis.
5702
5703 Lorsque @var{recursive?} est vraie, le contenu de @var{file} est ajouté
5704 récursivement ; si @var{file} désigne un fichier simple et que
5705 @var{recursive?} est vrai, son contenu est ajouté et ses bits de permissions
5706 sont préservés.
5707
5708 Lorsque @var{recursive?} est vraie, appelle @code{(@var{select?} @var{file}
5709 @var{stat})} pour chaque répertoire où @var{file} est le nom de fichier
5710 absolu de l'entrée et @var{stat} est le résultat de @code{lstat} ; à
5711 l'exception des entrées pour lesquelles @var{select?} ne renvoie pas vrai.
5712
5713 L'exemple ci-dessous ajoute un fichier au dépôt, sous deux noms différents :
5714
5715 @example
5716 (run-with-store (open-connection)
5717 (mlet %store-monad ((a (interned-file "README"))
5718 (b (interned-file "README" "LEGU-MIN")))
5719 (return (list a b))))
5720
5721 @result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
5722 @end example
5723
5724 @end deffn
5725
5726 Le module @code{(guix packages)} exporte les procédures monadiques liées aux
5727 paquets suivantes :
5728
5729 @deffn {Procédure monadique} package-file @var{package} [@var{file}] @
5730 [#:system (%current-system)] [#:target #f] @
5731 [#:output "out"]
5732 Renvoie une valeur monadique qui contient le nom de fichier absolu de
5733 @var{file} dans le répertoire @var{output} de @var{package}. Lorsque
5734 @var{file} est omis, renvoie le nom du répertoire @var{output} de
5735 @var{package}. Lorsque @var{target} est vrai, l'utilise comme un triplet de
5736 cible pour la compilation croisée.
5737 @end deffn
5738
5739 @deffn {Procédure monadique} package->derivation @var{package} [@var{system}]
5740 @deffnx {Procédure monadique} package->cross-derivation @var{package} @
5741 @var{target} [@var{system}]
5742 Version monadique de @code{package-derivation} et
5743 @code{package-cross-derivation} (@pxref{Définition des paquets}).
5744 @end deffn
5745
5746
5747 @node G-Expressions
5748 @section G-Expressions
5749
5750 @cindex G-expression
5751 @cindex quoting du code de construction
5752 On a donc des « dérivations » qui représentent une séquence d'actions de
5753 construction à effectuer pour produire un élément du dépôt
5754 (@pxref{Dérivations}). Ces actions de construction sont effectuées
5755 lorsqu'on demande au démon de construire effectivement les dérivations ;
5756 elles sont lancées par le démon dans un conteneur (@pxref{Invoquer guix-daemon}).
5757
5758 @cindex strate de code
5759 Ça ne devrait pas vous surprendre, mais nous aimons écrire ces actions de
5760 construction en Scheme. Lorsqu'on fait ça, on fini avec deux @dfn{strates}
5761 de code Scheme@footnote{Le terme @dfn{strate} dans ce contexte a été inventé
5762 par Manuel Serrano et ses collaborateurs dans le contexte de leur travaux
5763 sur Hop. Oleg Kiselyov, qui a écrit des
5764 @url{http://okmij.org/ftp/meta-programming/#meta-scheme, essais perspicaces
5765 et du code sur le sujet}, utilise le terme de « mise en scène » pour ce
5766 genre de génération de code.} : le « code hôte » — le code qui défini les
5767 paquets, parle au démon, etc — et le « code côté construction » — le code
5768 qui effectue effectivement les actions de construction, comme créer des
5769 répertoires, invoquer @code{make}, etc.
5770
5771 Pour décrire une dérivation et ses actions de construction, on a typiquement
5772 besoin d'intégrer le code de construction dans le code hôte. Ça revient à
5773 manipuler le code de construction comme de la donnée, et l'homoiconicité de
5774 Scheme — le code a une représentation directe en tant que donnée — est très
5775 utile pour cela. Mais on a besoin de plus que le mécanisme de
5776 @code{quasiquote} en Scheme pour construire des expressions de construction.
5777
5778 Le module @code{(guix gexp)} implémente les @dfn{G-expressions}, une forme
5779 de S-expression adaptée aux expressions de construction. Les G-expression,
5780 ou @dfn{gexps}, consistent en gros en trois formes syntaxiques :
5781 @code{gexp}, @code{ungexp} et @code{ungexp-splicing} (ou plus simplement :
5782 @code{#~}, @code{#$} et @code{#$@@}), qui sont comparable à
5783 @code{quasiquote}, @code{unquote} ett @code{unquote-splicing} respectivement
5784 (@pxref{Expression Syntax, @code{quasiquote},, guile, GNU Guile Reference
5785 Manual}). Cependant il y a des différences majeures :
5786
5787 @itemize
5788 @item
5789 Les Gexps sont conçues pour être écrites dans un fichier et être lancées ou
5790 manipulées par d'autres processus.
5791
5792 @item
5793 Lorsqu'un objet de haut-niveau comme un paquet ou une dérivation est
5794 unquotée dans une gexp, le résultat est comme si le nom de fichier de son
5795 résultat avait été introduit.
5796
5797 @item
5798 Les gexps transportent des informatinos sur les paquets ou les dérivations
5799 auxquels elles se réfèrent, et ces dépendances sont automatiquement ajoutées
5800 comme des entrées du processus de construction qui les utilise.
5801 @end itemize
5802
5803 @cindex abaissement, des objets haut-niveau dans les gepxs
5804 Ce mécanisme n'est pas limité aux paquets et aux dérivations : on peut
5805 définir des @dfn{compilateurs} capable « d'abaisser » d'autres objets de
5806 haut-niveau ou des fichiers dans le dépôt, pour que ces objets puissent
5807 aussi être insérés dans des gexps. Par exemple, des objets haut-niveau
5808 utiles qui pourraient être insérées dans une gexp sont les « objets
5809 simili-fichiers », qui rendent facile l'ajout de fichiers dans le dépôt et
5810 les références vers eux dans les dérivations et autres (voir
5811 @code{local-file} et @code{plain-file} ci-dessous).
5812
5813 Pour illustrer cette idée, voici un exemple de gexp :
5814
5815 @example
5816 (define build-exp
5817 #~(begin
5818 (mkdir #$output)
5819 (chdir #$output)
5820 (symlink (string-append #$coreutils "/bin/ls")
5821 "list-files")))
5822 @end example
5823
5824 Cette gexp peut être passée à @code{gexp->derivation} ; on obtient une
5825 dérivation qui construit une répertoire contenant exactement un lien
5826 symbolique à @file{/gnu/store/@dots{}-coreutils-8.22/bin/ls} :
5827
5828 @example
5829 (gexp->derivation "the-thing" build-exp)
5830 @end example
5831
5832 Comme on pourrait s'y attendre, la chaîne
5833 @code{"/gnu/store/@dots{}-coreutils-8.22"} est substituée à la place de la
5834 référence au paquet @var{coreutils} dans le code de construction final, et
5835 @var{coreutils} est automatiquement devenu une entrée de la dérivation. De
5836 même, @code{#$output} (équivalent à @code{(ungexp output)}) est remplacé par
5837 une chaîne de caractères contenant le nom du répertoire de la sortie de la
5838 dérivation.
5839
5840 @cindex compilation croisée
5841 Dans le contexte d'une compilation croisée, il est utile de distinguer entre
5842 des références à la construction @emph{native} d'un paquet — qui peut être
5843 lancé par l'hôte — et des références à la construction croisée d'un paquet.
5844 Pour cela, @code{#+} joue le même rôle que @code{#$}, mais référence une
5845 construction native d'un paquet :
5846
5847 @example
5848 (gexp->derivation "vi"
5849 #~(begin
5850 (mkdir #$output)
5851 (system* (string-append #+coreutils "/bin/ln")
5852 "-s"
5853 (string-append #$emacs "/bin/emacs")
5854 (string-append #$output "/bin/vi")))
5855 #:target "mips64el-linux-gnu")
5856 @end example
5857
5858 @noindent
5859 Dans l'exemple ci-dessus, la construction native de @var{coreutils} est
5860 utilisée, pour que @command{ln} puisse effectivement être lancé sur l'hôte ;
5861 mais ensuite la construction croisée d'@var{emacs} est utilisée.
5862
5863 @cindex modules importés, pour les gexps
5864 @findex with-imported-modules
5865 Une autre fonctionnalité, ce sont les @dfn{modules importés} : parfois vous
5866 voudriez pouvoir utiliser certains modules Guile de « l'environnement hôte »
5867 dans la gexp, donc ces modules devraient être importés dans «
5868 l'environnement de construction ». La forme @code{with-imported-modules}
5869 vous permet d'exprimer ça :
5870
5871 @example
5872 (let ((build (with-imported-modules '((guix build utils))
5873 #~(begin
5874 (use-modules (guix build utils))
5875 (mkdir-p (string-append #$output "/bin"))))))
5876 (gexp->derivation "empty-dir"
5877 #~(begin
5878 #$build
5879 (display "success!\n")
5880 #t)))
5881 @end example
5882
5883 @noindent
5884 Dans cet exemple, le module @code{(guix build utils)} est automatiquement
5885 récupéré dans l'environnement de construction isolé de notre gexp, pour que
5886 @code{(use-modules (guix build utils))} fonctionne comme on s'y attendrait.
5887
5888 @cindex closure de module
5889 @findex source-module-closure
5890 Typiquement, vous voudriez que la @emph{closure} complète du mondule soit
5891 importé — c.-à-d.@: le module lui-même et tous les modules dont il dépend —
5892 plutôt que seulement le module ; sinon, une tentative de chargement du
5893 module échouera à cause des modules dépendants manquants. La procédure
5894 @code{source-module-closure} calcule la closure d'un module en cherchant
5895 dans ses en-têtes sources, ce qui est pratique dans ce cas :
5896
5897 @example
5898 (use-modules (guix modules)) ;pour 'source-module-closure'
5899
5900 (with-imported-modules (source-module-closure
5901 '((guix build utils)
5902 (gnu build vm)))
5903 (gexp->derivation "something-with-vms"
5904 #~(begin
5905 (use-modules (guix build utils)
5906 (gnu build vm))
5907 @dots{})))
5908 @end example
5909
5910 @cindex extensions, des gexps
5911 @findex with-extensions
5912 Dans la même idée, parfois vous pouvez souhaiter importer non seulement des
5913 modules en Scheme pur, mais aussi des « extensions » comme des liaisons
5914 Guile de bibliothèques C ou d'autres paquet « complets ». Disons que vous
5915 voulez utiliser le paquet @code{guile-json} du côté de la construction,
5916 voici comme procéder :
5917
5918 @example
5919 (use-modules (gnu packages guile)) ;pour 'guile-json'
5920
5921 (with-extensions (list guile-json)
5922 (gexp->derivation "something-with-json"
5923 #~(begin
5924 (use-modules (json))
5925 @dots{})))
5926 @end example
5927
5928 La forme syntaxique pour construire des gexps est résumée ci-dessous.
5929
5930 @deffn {Syntaxe Scheme} #~@var{exp}
5931 @deffnx {Syntaxe Scheme} (gexp @var{exp})
5932 Renvoie une G-expression contenant @var{exp}. @var{exp} peut contenir une
5933 ou plusieurs de ces formes :
5934
5935 @table @code
5936 @item #$@var{obj}
5937 @itemx (ungexp @var{obj})
5938 Introduit une référence à @var{obj}. @var{obj} peut être d'un des types
5939 supportés, par exemple un paquet ou une dérivation, auquel cas la forme
5940 @code{ungexp} est remplacée par le nom de fichier de sa sortie — p.@: ex.@:
5941 @code{"/gnu/store/@dots{}-coreutils-8.22}.
5942
5943 Si @var{boj} est une liste, elle est traversée et les références aux objets
5944 supportés sont substitués de manière similaire.
5945
5946 Si @var{obj} est une autre gexp, son contenu est inséré et ses dépendances
5947 sont ajoutées à celle de la gexp qui l'entoure.
5948
5949 Si @var{obj} est un autre type d'objet, il est inséré tel quel.
5950
5951 @item #$@var{obj}:@var{output}
5952 @itemx (ungexp @var{obj} @var{output})
5953 Cette forme est similaire à la précédente, mais se réfère explicitement à la
5954 sortie @var{output} de l'objet @var{obj} — c'est utile lorsque @var{obj}
5955 produit plusieurs sorties (@pxref{Des paquets avec plusieurs résultats}).
5956
5957 @item #+@var{obj}
5958 @itemx #+@var{obj}:output
5959 @itemx (ungexp-native @var{obj})
5960 @itemx (ungexp-native @var{obj} @var{output})
5961 Comme @code{ungexp}, mais produit une référence à la construction
5962 @emph{native} de @var{obj} lorsqu'elle est utilisée dans une compilation
5963 croisée.
5964
5965 @item #$output[:@var{output}]
5966 @itemx (ungexp output [@var{output}])
5967 Insère une référence à la sortie @var{output} de la dérivation, ou à la
5968 sortie principale lorsque @var{output} est omis.
5969
5970 Cela ne fait du sens que pour les gexps passées à @code{gexp->derivation}.
5971
5972 @item #$@@@var{lst}
5973 @itemx (ungexp-splicing @var{lst})
5974 Comme au dessus, mais recolle (@i{splice}) le contenu de @var{lst} dans la
5975 liste qui la contient.
5976
5977 @item #+@@@var{lst}
5978 @itemx (ungexp-native-splicing @var{lst})
5979 Comme au dessus, mais se réfère à la construction native des objets listés
5980 dans @var{lst}.
5981
5982 @end table
5983
5984 Les G-expressions crées par @code{gexp} ou @code{#~} sont des objets à
5985 l'exécution du type @code{gexp?} (voir plus bas).
5986 @end deffn
5987
5988 @deffn {Syntaxe Scheme} with-imported-modules @var{modules} @var{body}@dots{}
5989 Marque les gexps définies dans @var{body}@dots{} comme requérant
5990 @var{modules} dans leur environnement d'exécution.
5991
5992 Chaque élément dans @var{module} peut être le nom d'un module, comme
5993 @code{(guix build utils)} ou le nom d'un module suivi d'une flêche, suivie
5994 d'un objet simili-fichier :
5995
5996 @example
5997 `((guix build utils)
5998 (guix gcrypt)
5999 ((guix config) => ,(scheme-file "config.scm"
6000 #~(define-module @dots{}))))
6001 @end example
6002
6003 @noindent
6004 Dans l'exemple au dessus, les deux premiers modules sont récupérés dans le
6005 chemin de recherche, et le dernier est créé à partir d'un objet
6006 simili-fichier.
6007
6008 Cette forme a une portée @emph{lexicale} : elle a un effet sur les gexp
6009 directement définies dans @var{body}@dots{}, mais pas sur celles définies
6010 dans des procédures appelées par @var{body}@dots{}.
6011 @end deffn
6012
6013 @deffn {Syntaxe Scheme} with-extensions @var{extensions} @var{body}@dots{}
6014 Marque les gexps définies dans @var{body}@dots{} comme requérant
6015 @var{extensions} dans leur environnement de construction et d'exécution.
6016 @var{extensions} est typiquement une liste d'objets paquets comme définis
6017 dans le module @code{(gnu packages guile)}.
6018
6019 Concrètement, les paquets listés dans @var{extensions} sont ajoutés au
6020 chemin de chargement lors de la compilation des modules importés dans
6021 @var{body}@dots{} ; ils sont aussi ajoutés au chemin de chargement de la
6022 gexp renvoyée par @var{body}@dots{}.
6023 @end deffn
6024
6025 @deffn {Procédure Scheme} gexp? @var{obj}
6026 Renvoie @code{#t} si @var{obj} est une G-expression.
6027 @end deffn
6028
6029 Les G-expressions sont conçues pour être écrites sur le disque, soit en tant
6030 que code pour construire une dérivation, soit en tant que fichier normal
6031 dans le dépôt. Les procédure monadiques suivantes vous permettent de faire
6032 cela (@pxref{La monad du dépôt}, pour plus d'information sur les monads).
6033
6034 @deffn {Procédure monadique} gexp->derivation @var{name} @var{exp} @
6035 [#:system (%current-system)] [#:target #f] [#:graft? #t] @
6036 [#:hash #f] [#:hash-algo #f] @
6037 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
6038 [#:module-path @var{%load-path}] @
6039 [#:effective-version "2.2"] @
6040 [#:references-graphs #f] [#:allowed-references #f] @
6041 [#:disallowed-references #f] @ [#:leaked-env-vars #f] @
6042 [#:script-name (string-append @var{name} "-builder")] @
6043 [#:deprecation-warnings #f] @
6044 [#:local-build? #f] [#:substitutable? #t] @
6045 [#:properties '()] [#:guile-for-build #f]
6046 Renvoie une dérivation @var{name} qui lance @var{exp} (une gexp) avec
6047 @var{guile-for-build} (une dérivation) sur @var{system} ; @var{exp} est
6048 stocké dans un fichier appelé @var{script-name}. Lorsque @var{target} est
6049 vraie, elle est utilisée comme triplet de cible de compilation croisée pour
6050 les paquets référencés par @var{exp}.
6051
6052 @var{modules} est devenu obsolète en faveur de
6053 @code{with-imported-modules}. Sa signification est de rendre @var{modules}
6054 disponibles dans le contexte d'évaluation de @var{exp} ; @var{modules} est
6055 une liste de noms de modules Guile qui sont cherchés dans @var{module-path}
6056 pour les copier dans le dépôt, les compiler et les rendre disponibles dans
6057 le chemin de chargement pendant l'exécution de @var{exp} — p.@: ex.@:
6058 @code{((guix build utils) (guix build gnu-build-system))}.
6059
6060 @var{effective-version} détermine la chaîne à utiliser lors d'ajout
6061 d'extensions de @var{exp} (voir @code{with-extensions}) au chemin de
6062 recherche — p.@: ex.@: @code{"2.2"}.
6063
6064 @var{graft?} détermine si les paquets référencés par @var{exp} devraient
6065 être greffés si possible.
6066
6067 Lorsque @var{references-graphs} est vrai, il doit s'agir d'une liste de
6068 tuples de la forme suivante :
6069
6070 @example
6071 (@var{file-name} @var{package})
6072 (@var{file-name} @var{package} @var{output})
6073 (@var{file-name} @var{derivation})
6074 (@var{file-name} @var{derivation} @var{output})
6075 (@var{file-name} @var{store-item})
6076 @end example
6077
6078 La partie droite des éléments de @var{references-graphs} est automatiquement
6079 transformée en une entrée du processus de construction @var{exp}. Dans
6080 l'environnement de construction, chaque @var{file-name} contient le graphe
6081 des références de l'élément correspondant, dans un format texte simple.
6082
6083 @var{allowed-references} doit soit être @code{#f}, soit une liste de noms de
6084 sorties ou de paquets. Dans ce dernier cas, la liste dénote les éléments du
6085 dépôt auxquels le résultat a le droit de faire référence. Toute référence à
6086 un autre élément du dépôt conduira à une erreur à la construction. Comme
6087 pour @var{disallowed-references}, qui peut lister des éléments qui ne
6088 doivent pas être référencés par les sorties.
6089
6090 @var{deprecation-warnings} détermine s'il faut afficher les avertissement
6091 d'obsolescence à la compilation de modules. Il peut valoir @code{#f},
6092 @code{t} ou @code{'detailed}.
6093
6094 Les autres arguments sont les mêmes que pour @code{derivation}
6095 (@pxref{Dérivations}).
6096 @end deffn
6097
6098 @cindex objets simili-fichiers
6099 Les procédures @code{local-file}, @code{plain-file}, @code{computed-file},
6100 @code{program-file} et @code{scheme-file} ci-dessous renvoient des
6101 @dfn{objets simili-fichiers}. C'est-à-dire, lorsqu'ils sont unquotés dans
6102 une G-expression, ces objets donnent un fichier dans le dépôt. Considérez
6103 cette G-expression :
6104
6105 @example
6106 #~(system* #$(file-append glibc "/sbin/nscd") "-f"
6107 #$(local-file "/tmp/my-nscd.conf"))
6108 @end example
6109
6110 Ici, l'effet est « d'internaliser » @file{/tmp/my-nscd.conf} en le copiant
6111 dans le dépôt. Une fois étendu, par exemple via @code{gexp->derivation}, la
6112 G-expression se réfère à cette copie dans @file{/gnu/store} ; ainsi,
6113 modifier ou supprimer le fichier dans @file{/tmp} n'a aucun effet sur ce que
6114 fait la G-expression. @code{plain-file} peut être utilisé de la même
6115 manière ; elle est seulement différente par le fait que le contenu du
6116 fichier est passé directement par une chaîne de caractères.
6117
6118 @deffn {Procédure Scheme} local-file @var{file} [@var{name}] @
6119 [#:recursive? #f] [#:select? (const #t)]
6120 Renvoie un objet représentant un fichier local @var{file} à ajouter au dépôt
6121 ; cet objet peut être utilisé dans une gexp. Si @var{file} est un nom de
6122 fichier relatif, il est récupéré à partir de la position du fichier source
6123 dans lequel il apparaît. @var{file} sera ajouté au dépôt sous le nom
6124 @var{name} — par défaut le nom de base de @var{file}.
6125
6126 Lorsque @var{recursive?} est vraie, le contenu de @var{file} est ajouté
6127 récursivement ; si @var{file} désigne un fichier simple et que
6128 @var{recursive?} est vrai, son contenu est ajouté et ses bits de permissions
6129 sont préservés.
6130
6131 Lorsque @var{recursive?} est vraie, appelle @code{(@var{select?} @var{file}
6132 @var{stat})} pour chaque répertoire où @var{file} est le nom de fichier
6133 absolu de l'entrée et @var{stat} est le résultat de @code{lstat} ; à
6134 l'exception des entrées pour lesquelles @var{select?} ne renvoie pas vrai.
6135
6136 C'est la version déclarative de la procédure monadique @code{interned-file}
6137 (@pxref{La monad du dépôt, @code{interned-file}}).
6138 @end deffn
6139
6140 @deffn {Procédure Scheme} plain-file @var{name} @var{content}
6141 Renvoie un objet représentant un fichier texte nommé @var{name} avec pour
6142 contenu @var{content} (une chaîne de caractères ou un vecteur d'octets) à
6143 ajouter un dépôt.
6144
6145 C'est la version déclarative de @code{text-file}.
6146 @end deffn
6147
6148 @deffn {Procédure Scheme} computed-file @var{name} @var{gexp} @
6149 [#:options '(#:local-build? #t)]
6150 Renvoie un objet représentant un élément du dépôt @var{name}, un fichier ou
6151 un répertoire calculé par @var{gexp}. @var{options} est une liste
6152 d'arguments supplémentaires à passer à @code{gexp->derivation}.
6153
6154 C'est la version déclarative de @code{gexp->derivation}.
6155 @end deffn
6156
6157 @deffn {Procédure monadique} gexp->script @var{name} @var{exp} @
6158 [#:guile (default-guile)] [#:module-path %load-path]
6159 Renvoie un script exécutable @var{name} qui lance @var{exp} avec
6160 @var{guile}, avec les modules importés de @var{exp} dans son chemin de
6161 recherche. Cherche les modules de @var{exp} dans @var{module-path}.
6162
6163 L'exemple ci-dessous construit un script qui invoque simplement la commande
6164 @command{ls} :
6165
6166 @example
6167 (use-modules (guix gexp) (gnu packages base))
6168
6169 (gexp->script "list-files"
6170 #~(execl #$(file-append coreutils "/bin/ls")
6171 "ls"))
6172 @end example
6173
6174 Lorsqu'elle est « lancée » à travers le dépôt (@pxref{La monad du dépôt,
6175 @code{run-with-store}}), on obtient une dérivation qui produit une fichier
6176 exécutable @file{/gnu/store/@dots{}-list-files} qui ressemble à :
6177
6178 @example
6179 #!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
6180 !#
6181 (execl "/gnu/store/@dots{}-coreutils-8.22"/bin/ls" "ls")
6182 @end example
6183 @end deffn
6184
6185 @deffn {Procédure Scheme} program-file @var{name} @var{exp} @
6186 [#:guile #f] [#:module-path %load-path]
6187 Renvoie un objet représentant un élément du dépôt @var{name} qui lance
6188 @var{gexp}. @var{guile} est le paquet Guile à utiliser pour exécuter le
6189 script. Les modules importés par @var{gexp} sont recherchés dans
6190 @var{module-path}.
6191
6192 C'est la version déclarative de @code{gexp->script}.
6193 @end deffn
6194
6195 @deffn {Procédure monadique} gexp->file @var{name} @var{exp} @
6196 [#:set-load-path? #t] [#:module-path %load-path] @
6197 [#:splice? #f] @
6198 [#:guile (default-guile)]
6199 Renvoie une dérivation qui construit un fichier @var{name} contenant
6200 @var{exp}. Lorsque @var{splice?} est vrai, @var{exp} est considéré comme
6201 une liste d'expressions qui seront splicée dans le fichier qui en résulte.
6202
6203 Lorsque @var{set-load-path?} est vrai, émet du code dans le fichier de
6204 résultat pour initialiser @code{%load-path} et @code{%load-compiled-path}
6205 pour honorer les modules importés de @var{exp}. Les modules de @var{exp}
6206 sont trouvés dans @var{module-path}.
6207
6208 Le fichier qui en résulte retient les références à toutes les dépendances de
6209 @var{exp} ou un sous-ensemble.
6210 @end deffn
6211
6212 @deffn {Procédure Scheme} scheme-file @var{name} @var{exp} [#:splice? #f]
6213 Renvoie un objet représentant le fichier Scheme @var{name} qui contient
6214 @var{exp}.
6215
6216 C'est la version déclarative de @code{gexp->file}.
6217 @end deffn
6218
6219 @deffn {Procédure monadique} text-file* @var{name} @var{text} @dots{}
6220 Renvoie une valeur monadique qui construit un ficher texte contenant
6221 @var{text}. @var{text} peut lister, en plus de chaînes de caractères, des
6222 objet de n'importe quel type qui peut être utilisé dans une gexp : des
6223 paquets, des dérivations, des fichiers objet locaux, etc. Le fichier du
6224 dépôt qui en résulte en retient toutes les références.
6225
6226 Cette variante devrait être préférée à @code{text-file} lorsque vous
6227 souhaitez créer des fichiers qui référencent le dépôt. Cela est le cas
6228 typiquement lorsque vous construisez un fichier de configuration qui
6229 contient des noms de fichiers du dépôt, comme ceci :
6230
6231 @example
6232 (define (profile.sh)
6233 ;; Renvoie le nom d'un script shell dans le dépôt qui initialise
6234 ;; la variable d'environnement « PATH ».
6235 (text-file* "profile.sh"
6236 "export PATH=" coreutils "/bin:"
6237 grep "/bin:" sed "/bin\n"))
6238 @end example
6239
6240 Dans cet exemple, le fichier @file{/gnu/store/@dots{}-profile.sh} qui en
6241 résulte référence @var{coreutils}, @var{grep} et @var{sed}, ce qui les
6242 empêche d'être glanés tant que le script est accessible.
6243 @end deffn
6244
6245 @deffn {Procédure Scheme} mixed-text-file @var{name} @var{text} @dots{}
6246 Renvoie un objet représentant le fichier du dépôt @var{name} contenant
6247 @var{text}. @var{text} est une séquence de chaînes de caractères et de
6248 fichiers simili-objets, comme dans :
6249
6250 @example
6251 (mixed-text-file "profile"
6252 "export PATH=" coreutils "/bin:" grep "/bin")
6253 @end example
6254
6255 C'est la version déclarative de @code{text-file*}.
6256 @end deffn
6257
6258 @deffn {Procédure Scheme} file-union @var{name} @var{files}
6259 Renvoie un @code{<computed-file>} qui construit un répertoire qui contient
6260 tous les fichiers de @var{files}. Chaque élément de @var{files} doit être
6261 une paire où le premier élément est le nom de fichier à utiliser dans le
6262 nouveau répertoire et le second élément est une gexp dénotant le fichier
6263 cible. Voici un exemple :
6264
6265 @example
6266 (file-union "etc"
6267 `(("hosts" ,(plain-file "hosts"
6268 "127.0.0.1 localhost"))
6269 ("bashrc" ,(plain-file "bashrc"
6270 "alias ls='ls --color=auto'"))))
6271 @end example
6272
6273 Cela crée un répertoire @code{etc} contenant ces deux fichiers.
6274 @end deffn
6275
6276 @deffn {Procédure Scheme} directory-union @var{name} @var{things}
6277 Renvoie un répertoire qui est l'union de @var{things}, où @var{things} est
6278 une liste d'objets simili-fichiers qui dénotent des répertoires. Par exemple
6279 :
6280
6281 @example
6282 (directory-union "guile+emacs" (list guile emacs))
6283 @end example
6284
6285 crée un répertoire qui est l'union des paquets @code{guile} et @code{emacs}.
6286 @end deffn
6287
6288 @deffn {Procédure Scheme} file-append @var{obj} @var{suffix} @dots{}
6289 Renvoie un objet simili-fichier qui correspond à la concaténation de
6290 @var{obj} et @var{suffix} où @var{obj} est un objet abaissable et chaque
6291 @var{suffix} est une chaîne de caractères.
6292
6293 Par exemple, considérez cette gexp :
6294
6295 @example
6296 (gexp->script "run-uname"
6297 #~(system* #$(file-append coreutils
6298 "/bin/uname")))
6299 @end example
6300
6301 On peut obtenir le même effet avec :
6302
6303 @example
6304 (gexp->script "run-uname"
6305 #~(system* (string-append #$coreutils
6306 "/bin/uname")))
6307 @end example
6308
6309 Il y a une différence cependant : dans le cas @code{file-append}, le script
6310 qui en résulte contient le nom de fichier absolu comme une chaîne de
6311 caractère alors que dans le deuxième cas, le script contient une expression
6312 @code{(string-append @dots{})} pour construire le nom de fichier @emph{à
6313 l'exécution}.
6314 @end deffn
6315
6316
6317 Bien sûr, en plus de gexps inclues dans le code « hôte », certains modules
6318 contiennent des outils de construction. Pour savoir facilement qu'ils sont
6319 à utiliser dans la strate de construction, ces modules sont gardés dans
6320 l'espace de nom @code{(guix build @dots{})}.
6321
6322 @cindex abaissement, des objets haut-niveau dans les gepxs
6323 En interne, les objets de haut-niveau sont @dfn{abaissés}, avec leur
6324 compilateur, soit en des dérivations, soit en des objets du dépôt. Par
6325 exemple, abaisser un paquet crée une dérivation, et abaisser un
6326 @code{plain-file} crée un élément du dépôt. Cela est effectué par la
6327 procédure monadique @code{lower-object}.
6328
6329 @deffn {Procédure monadique} lower-object @var{obj} [@var{system}] @
6330 [#:target #f]
6331 Renvoie la dérivation ou l'élément du dépôt comme une valeur de
6332 @var{%store-monad} qui correspond à @var{obj} pour @var{system}, en
6333 compilant de manière croisée pour @var{target} si @var{target} est vrai.
6334 @var{obj} doit être un objet qui a un compilateur de gexp associé, comme un
6335 @code{<package>}.
6336 @end deffn
6337
6338 @node Invoquer guix repl
6339 @section Invoquer @command{guix repl}
6340
6341 @cindex REPL, read-eval-print loop
6342 La commande @command{guix repl} démarre un @dfn{boucle
6343 lecture-évaluation-affichage} Guile pour la programmation interactive
6344 (@pxref{Using Guile Interactively,,, guile, GNU Guile Reference Manual}).
6345 Comparé au lancement de la commande @command{guile}, @command{guix repl}
6346 garanti que tous les modules Guix et toutes ses dépendances sont disponibles
6347 dans le chemin de recherche. Vous pouvez l'utiliser de cette manière :
6348
6349 @example
6350 $ guix repl
6351 scheme@@(guile-user)> ,use (gnu packages base)
6352 scheme@@(guile-user)> coreutils
6353 $1 = #<package coreutils@@8.29 gnu/packages/base.scm:327 3e28300>
6354 @end example
6355
6356 @cindex inférieurs
6357 En plus, @command{guix repl} implémente un protocole REPL simple lisible par
6358 une machine à utiliser avec @code{(guix inferior)}, un dispositif pour
6359 interagir avec des @dfn{inférieurs}, des processus séparés qui font tourner
6360 une version potentiellement différente de Guix.
6361
6362 Les options disponibles sont les suivante :
6363
6364 @table @code
6365 @item --type=@var{type}
6366 @itemx -t @var{type}
6367 Démarrer un REPL du @var{type} donné, qui peut être l'un de ces types :
6368
6369 @table @code
6370 @item guile
6371 C'est la valeur par défaut. Elle démarre un REPL Guile standard
6372 fonctionnel.
6373 @item machine
6374 Démarre un REPL qui utilise le protocole lisible par machine. C'est le
6375 protocole que parle le module @code{(guix inferior)}.
6376 @end table
6377
6378 @item --listen=@var{extrémité}
6379 Par défaut, @command{guix repl} lit depuis l'entrée standard et écrit sur la
6380 sortie standard. Lorsque cette option est passée, il écoutera plutôt les
6381 connexions sur @var{endpoint}. Voici un exemple d'options valides :
6382
6383 @table @code
6384 @item --listen=tcp:37146
6385 Accepte les connexions sur localhost, sur le port 31.
6386
6387 @item --listen=unix:/tmp/socket
6388 Accepte les connexions sur le socket Unix-domain @file{/tmp/socket}.
6389 @end table
6390 @end table
6391
6392 @c *********************************************************************
6393 @node Utilitaires
6394 @chapter Utilitaires
6395
6396 cette section décrit les utilitaires en ligne de commande de Guix. certains
6397 sont surtout faits pour les développeurs qui écrivent de nouvelles
6398 définitions de paquets tandis que d'autres sont plus utiles pour une
6399 utilisation générale. Ils complètent l'interface de programmation Scheme de
6400 Guix d'une manière pratique.
6401
6402 @menu
6403 * Invoquer guix build:: Construire des paquets depuis la ligne de
6404 commande.
6405 * Invoquer guix edit:: Modifier les définitions de paquets.
6406 * Invoquer guix download:: Télécharger un fichier et afficher son hash.
6407 * Invoquer guix hash:: Calculer le hash cryptographique d'un fichier.
6408 * Invoquer guix import:: Importer des définitions de paquets.
6409 * Invoquer guix refresh:: Mettre à jour les définitions de paquets.
6410 * Invoquer guix lint:: Trouver des erreurs dans les définitions de
6411 paquets.
6412 * Invoquer guix size:: Profiler l'utilisation du disque.
6413 * Invoquer guix graph:: Visualiser le graphe des paquets.
6414 * Invoquer guix environment:: Mettre en place des environnements de
6415 développement.
6416 * Invoquer guix publish:: Partager des substituts.
6417 * Invoquer guix challenge:: Défier les serveurs de substituts.
6418 * Invoquer guix copy:: Copier vers et depuis un dépôt distant.
6419 * Invoquer guix container:: Isolation de processus.
6420 * Invoquer guix weather:: Mesurer la disponibilité des substituts.
6421 * Invoquer guix processes:: Lister les processus clients.
6422 @end menu
6423
6424 @node Invoquer guix build
6425 @section Invoquer @command{guix build}
6426
6427 @cindex construction de paquets
6428 @cindex @command{guix build}
6429 La commande @command{guix build} construit des paquets ou des dérivations et
6430 leurs dépendances et affiche les chemins du dépôt qui en résulte. Remarquez
6431 qu'elle ne modifie pas le profil de l'utilisateur — c'est le travail de la
6432 commande @command{guix package} (@pxref{Invoquer guix package}). Ainsi,
6433 elle est surtout utile pour les développeurs de la distribution.
6434
6435 La syntaxe générale est :
6436
6437 @example
6438 guix build @var{options} @var{package-or-derivation}@dots{}
6439 @end example
6440
6441 Par exemple, la commande suivante construit la dernière version d'Emacs et
6442 de Guile, affiche leur journaux de construction et enfin affiche les
6443 répertoires des résultats :
6444
6445 @example
6446 guix build emacs guile
6447 @end example
6448
6449 De même, la commande suivante construit tous les paquets disponibles :
6450
6451 @example
6452 guix build --quiet --keep-going \
6453 `guix package -A | cut -f1,2 --output-delimiter=@@`
6454 @end example
6455
6456 @var{package-or-derivation} peut être soit le nom d'un paquet trouvé dans la
6457 distribution logicielle comme @code{coreutils}, soit @code{coreutils@@8.20},
6458 soit une dérivation comme @file{/gnu/store/@dots{}-coreutils-8.19.drv}.
6459 Dans le premier cas, la commande cherchera un paquet avec le nom
6460 correspondant (et éventuellement la version) dans les modules de la
6461 distribution GNU (@pxref{Modules de paquets}).
6462
6463 Autrement, l'option @code{--expression} peut être utilisée pour spécifier
6464 une expression Scheme qui s'évalue en un paquet ; c'est utile pour
6465 différencier des paquets avec le même nom ou des variantes de paquets.
6466
6467 Il peut y avoir aucune, une ou plusieurs @var{options}. Les options
6468 disponibles sont décrites dans les sous-sections ci-dessous.
6469
6470 @menu
6471 * Options de construction communes:: Options de construction pour la
6472 plupart des commandes.
6473 * Options de transformation de paquets:: Créer des variantes de paquets.
6474 * Options de construction supplémentaires:: Options spécifiques à «
6475 guix build ».
6476 * Débogage des échecs de construction:: La vie d'un empaqueteur.
6477 @end menu
6478
6479 @node Options de construction communes
6480 @subsection Options de construction communes
6481
6482 Un certain nombre d'options qui contrôlent le processus de construction sont
6483 communes avec @command{guix build} et les autres commandes qui peuvent
6484 générer des constructions, comme @command{guix package} ou @command{guix
6485 archive}. Voici ces options :
6486
6487 @table @code
6488
6489 @item --load-path=@var{répertoire}
6490 @itemx -L @var{répertoire}
6491 Ajoute @var{répertoire} au début du chemin de recherche de module de paquets
6492 (@pxref{Modules de paquets}).
6493
6494 Cela permet à des utilisateurs de définir leur propres paquets et les rendre
6495 disponibles aux outils en ligne de commande.
6496
6497 @item --keep-failed
6498 @itemx -K
6499 Garde l'arborescence de construction des constructions en échec. Ainsi, si
6500 une construction échoue, son arborescence de construction est préservée dans
6501 @file{/tmp}, dans un répertoire dont le nom est affiché à la fin du journal
6502 de construction. Cela est utile pour déboguer des échecs de construction.
6503 @xref{Débogage des échecs de construction}, pour des astuces sur la manière de déboguer
6504 des problèmes de construction.
6505
6506 Cette option n'a pas d'effet lors de la connexion à un démon distant avec
6507 l'URI @code{guix://} (@pxref{Le dépôt, la variable
6508 @code{GUIX_DAEMON_SOCKET}}).
6509
6510 @item --keep-going
6511 @itemx -k
6512 Continue lorsque certaines dérivations échouent ; ne s'arrête que lorsque
6513 toutes les constructions ont soit réussies, soit échouées.
6514
6515 Le comportement par défaut est de s'arrêter dès qu'une des dérivations
6516 spécifiées échoue.
6517
6518 @item --dry-run
6519 @itemx -n
6520 Ne pas construire les dérivations.
6521
6522 @anchor{option de repli}
6523 @item --fallback
6524 Lorsque la substitution d'un binaire pré-compilé échoue, construit les
6525 paquets localement à la place (@pxref{Échec de substitution}).
6526
6527 @item --substitute-urls=@var{urls}
6528 @anchor{client-substitute-urls}
6529 Considère @var{urls} comme une liste d'URL de sources de substituts séparés
6530 par des espaces, et remplace la liste par défaut d'URL de
6531 @command{guix-daemon} (@pxref{daemon-substitute-urls,, @command{guix-daemon}
6532 URLs}).
6533
6534 Cela signifie que les substituts peuvent être téléchargés depuis @var{urls},
6535 tant qu'ils sont signés par une clef autorisée par l'administrateur système
6536 (@pxref{Substituts}).
6537
6538 Lorsque @var{urls} est la chaîne vide, cela a pour effet de désactiver la
6539 substitution.
6540
6541 @item --no-substitutes
6542 Ne pas utiliser de substitut pour les résultats de la construction.
6543 C'est-à-dire, toujours construire localement plutôt que de permettre le
6544 téléchargement de binaires pré-construits (@pxref{Substituts}).
6545
6546 @item --no-grafts
6547 Ne par « greffer » les paquets. En pratique, cela signifie que les mises à
6548 jour des paquets disponibles comme des greffes ne sont pas appliquées.
6549 @xref{Mises à jour de sécurité}, pour plus d'information sur les greffes.
6550
6551 @item --rounds=@var{n}
6552 Construit chaque dérivation @var{n} fois d'affilé, et renvoie une erreur si
6553 les constructions consécutives ne sont pas identiques bit-à-bit.
6554
6555 Cela est une manière utile pour détecter des processus de construction non
6556 déterministes. Les processus de construction non déterministes sont
6557 problématiques car ils rendent pratiquement impossible la
6558 @emph{vérification} par les utilisateurs de l'authenticité de binaires
6559 tiers. @xref{Invoquer guix challenge}, pour plus d'informations.
6560
6561 Remarquez que, les résultats qui diffèrent ne sont pas gardés, donc vous
6562 devrez inspecter manuellement chaque erreur — p.@: ex.@: en gardant l'un des
6563 résultats avec @code{guix archive --export} (@pxref{Invoquer guix archive}),
6564 puis en reconstruisant, et enfin en comparant les deux résultats.
6565
6566 @item --no-build-hook
6567 N'essaye pas de décharger les constructions via le « crochet de construction
6568 » du démon (@pxref{Réglages du délestage du démon}). C'est-à-dire que tout sera
6569 construit localement plutôt que de décharger les constructions à une machine
6570 distante.
6571
6572 @item --max-silent-time=@var{secondes}
6573 Lorsque le processus de construction ou de substitution restent silencieux
6574 pendant plus de @var{secondes}, le terminer et rapporter une erreur de
6575 construction.
6576
6577 Par défaut, les paramètres du démon sont pris en compte (@pxref{Invoquer guix-daemon, @code{--max-silent-time}}).
6578
6579 @item --timeout=@var{secondes}
6580 De même, lorsque le processus de construction ou de substitution dure plus
6581 de @var{secondes}, le terminer et rapporter une erreur de construction.
6582
6583 Par défaut, les paramètres du démon sont pris en compte (@pxref{Invoquer guix-daemon, @code{--timeout}}).
6584
6585 @item --verbosity=@var{level}
6586 Utilise le niveau de verbosité donné. @var{level} doit être un entier entre
6587 0 et 5 ; les entiers les plus hauts signifient une sortie plus verbeuse. Le
6588 mettre à 4 ou plus peut être utile pour déboguer des problèmes de
6589 configuration du démon de construction.
6590
6591 @item --cores=@var{n}
6592 @itemx -c @var{n}
6593 Permet d'utiliser jusqu'à @var{n} cœurs du CPU pour la construction. La
6594 valeur spéciale @code{0} signifie autant de cœurs que possible.
6595
6596 @item --max-jobs=@var{n}
6597 @itemx -M @var{n}
6598 Permet au plus @var{n} travaux de construction en parallèle. @xref{Invoquer guix-daemon, @code{--max-jobs}}, pour plus de détails sur cette option et
6599 l'option équivalente pour @command{guix-daemon}.
6600
6601 @end table
6602
6603 Sous le capot, @command{guix build} est surtout un interface à la procédure
6604 @code{package-derivation} du module @code{(guix packages)}, et à la
6605 procédure @code{build-derivations} du module @code{(guix derivations)}.
6606
6607 En plus des options passées explicitement par la ligne de commande,
6608 @command{guix build} et les autres commande @command{guix} qui peuvent
6609 effectuer des construction honorent la variable d'environnement
6610 @code{GUIX_BUILD_OPTIONS}.
6611
6612 @defvr {Variable d'environnement} GUIX_BUILD_OPTIONS
6613 Les utilisateurs peuvent définir cette variable à une liste d'options de la
6614 ligne de commande qui seront automatiquement utilisées par @command{guix
6615 build} et les autres commandes @command{guix} qui peuvent effectuer des
6616 constructions, comme dans l'exemple suivant :
6617
6618 @example
6619 $ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
6620 @end example
6621
6622 Ces options sont analysées indépendamment, et le résultat est ajouté aux
6623 options de la ligne de commande analysées.
6624 @end defvr
6625
6626
6627 @node Options de transformation de paquets
6628 @subsection Options de transformation de paquets
6629
6630 @cindex variantes de paquets
6631 Un autre ensemble d'options de la ligne de commande supportés par
6632 @command{guix build} et aussi @command{guix package} sont les @dfn{options
6633 de transformation de paquets}. Ce sont des options qui rendent possible la
6634 définition de @dfn{variantes de paquets} — par exemple, des paquets
6635 construit à partir de sources différentes. C'est une manière simple de
6636 créer des paquets personnalisés à la volée sans avoir à taper les
6637 définitions de variantes de paquets (@pxref{Définition des paquets}).
6638
6639 @table @code
6640
6641 @item --with-source=@var{source}
6642 @itemx --with-source=@var{paquet}=@var{source}
6643 @itemx --with-source=@var{paquet}@@@var{version}=@var{source}
6644 Utiles @var{source} comme la source de @var{paquet}, et @var{version} comme
6645 son numéro de version. @var{source} doit être un nom de fichier ou une URL,
6646 comme pour @command{guix download} (@pxref{Invoquer guix download}).
6647
6648 Lorsque @var{paquet} est omis, la commande utilisera le nom de paquet
6649 spécifié par la base de @var{source} — p.@: ex.@: si @var{source} est
6650 @code{/src/guix-2.0.10.tar.gz}, le paquet correspondant est @code{guile}.
6651
6652 De même, lorsque @var{version} est omis, la chaîne de version est inférée à
6653 partir de @var{source} ; dans l'exemple précédent, il s'agit de
6654 @code{2.0.10}.
6655
6656 Cette option permet aux utilisateurs d'essayer des version des paquets
6657 différentes de celles fournies par la distribution. L'exemple ci-dessous
6658 télécharge @file{ed-1.7.tar.g} depuis un mirroir GNU et l'utilise comme
6659 source pour le paquet @code{ed} :
6660
6661 @example
6662 guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
6663 @end example
6664
6665 En tant que développeur, @code{--with-source} permet de tester facilement
6666 des version bêta :
6667
6668 @example
6669 guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
6670 @end example
6671
6672 @dots{} ou pour construire un dépôt de gestion de version dans un
6673 environnement vierge :
6674
6675 @example
6676 $ git clone git://git.sv.gnu.org/guix.git
6677 $ guix build guix --with-source=guix@@1.0=./guix
6678 @end example
6679
6680 @item --with-input=@var{paquet}=@var{remplaçant}
6681 Remplace la dépendance sur @var{paquet} par une dépendance à
6682 @var{remplaçant}. @var{paquet} doit être un nom de paquet et
6683 @var{remplaçant} doit être une spécification de paquet comme @code{guile} ou
6684 @code{guile@@1.8}.
6685
6686 Par exemple, la commande suivante construit Guix, mais remplace sa
6687 dépendance à la version stable actuelle de Guile par une dépendance à une
6688 ancienne version de Guile, @code{guile@@2.0} :
6689
6690 @example
6691 guix build --with-input=guile=guile@@2.0 guix
6692 @end example
6693
6694 C'est un remplacement récursif profond. Donc dans cet exemple, à la fois
6695 @code{guix} et ses dépendances @code{guile-json} (qui dépend aussi de
6696 @code{guile}) sont reconstruits avec @code{guile@@2.0}.
6697
6698 Cette option est implémentée avec la procédure Scheme
6699 @code{package-input-rewriting} (@pxref{Définition des paquets,
6700 @code{package-input-rewriting}}).
6701
6702 @item --with-graft=@var{paquet}=@var{remplaçant}
6703 Cette option est similaire à @code{--with-input} mais avec une différence
6704 importante : plutôt que de reconstruire la chaîne de dépendance complète,
6705 @var{remplaçant} est construit puis @dfn{greffé} sur les binaires qui
6706 référençaient initialement @var{paquet}. @xref{Mises à jour de sécurité}, pour plus
6707 d'information sur les greffes.
6708
6709 Par exemple, la commande ci-dessous greffe la version 3.5.4 de GnuTLS sur
6710 Wget et toutes ses dépendances, en remplaçant les références à la version
6711 actuelle de GnuTLS à laquelle ils se réfèrent actuellement :
6712
6713 @example
6714 guix build --with-graft=gnutls=gnutls@@3.5.4 wget
6715 @end example
6716
6717 Cela a l'avantage d'être bien plus rapide que de tout reconstruire. Mais il
6718 y a un piège : cela ne fonctionne que si @var{paquet} et @var{remplaçant}
6719 sont strictement compatibles — par exemple, s'ils fournissent une
6720 bibliothèque, l'interface binaire applicative (ABI) de ces bibliothèques
6721 doivent être compatibles. Si @var{remplaçant} est incompatible avec
6722 @var{paquet}, alors le paquet qui en résulte peut devenir inutilisable. À
6723 utilisez avec précaution !
6724
6725 @item --with-branch=@var{package}=@var{branch}
6726 @cindex Git, using the latest commit
6727 @cindex latest commit, building
6728 Build @var{package} from the latest commit of @var{branch}. The
6729 @code{source} field of @var{package} must be an origin with the
6730 @code{git-fetch} method (@pxref{Référence d'origine}) or a @code{git-checkout}
6731 object; the repository URL is taken from that @code{source}.
6732
6733 For instance, the following command builds @code{guile-sqlite3} from the
6734 latest commit of its @code{master} branch, and then builds @code{guix}
6735 (which depends on it) and @code{cuirass} (which depends on @code{guix})
6736 against this specific @code{guile-sqlite3} build:
6737
6738 @example
6739 guix build --with-branch=guile-sqlite3=master cuirass
6740 @end example
6741
6742 @cindex intégration continue
6743 Obviously, since it uses the latest commit of the given branch, the result
6744 of such a command varies over time. Nevertheless it is a convenient way to
6745 rebuild entire software stacks against the latest commit of one or more
6746 packages. This is particularly useful in the context of continuous
6747 integration (CI).
6748
6749 Checkouts are kept in a cache under @file{~/.cache/guix/checkouts} to speed
6750 up consecutive accesses to the same repository. You may want to clean it up
6751 once in a while to save disk space.
6752
6753 @item --with-commit=@var{package}=@var{commit}
6754 This is similar to @code{--with-branch}, except that it builds from
6755 @var{commit} rather than the tip of a branch. @var{commit} must be a valid
6756 Git commit SHA1 identifier.
6757 @end table
6758
6759 @node Options de construction supplémentaires
6760 @subsection Options de construction supplémentaires
6761
6762 Les options de la ligne de commande ci-dessous sont spécifiques à
6763 @command{guix build}.
6764
6765 @table @code
6766
6767 @item --quiet
6768 @itemx -q
6769 Construire en silence, sans afficher les journaux de construction. À la
6770 fin, le journal de construction est gardé dans @file{/var} (ou similaire) et
6771 on peut toujours l'y trouver avec l'option @option{--log-file}.
6772
6773 @item --file=@var{fichier}
6774 @itemx -f @var{fichier}
6775 Construit le paquet, la dérivation ou l'objet simili-fichier en lequel le
6776 code dans @var{file} s'évalue (@pxref{G-Expressions, file-like objects}).
6777
6778 Par exemple, @var{file} peut contenir une définition de paquet comme ceci
6779 (@pxref{Définition des paquets}) :
6780
6781 @example
6782 @verbatiminclude package-hello.scm
6783 @end example
6784
6785 @item --expression=@var{expr}
6786 @itemx -e @var{expr}
6787 Construit le paquet ou la dérivation en lequel @var{expr} s'évalue.
6788
6789 Par exemple, @var{expr} peut être @code{(@@ (gnu packages guile)
6790 guile-1.8)}, qui désigne sans ambiguïté cette variante spécifique de la
6791 version 1.8 de Guile.
6792
6793 Autrement, @var{exp} peut être une G-expression, auquel cas elle est
6794 utilisée comme un programme de construction passé à @code{gexp->derivation}
6795 (@pxref{G-Expressions}).
6796
6797 Enfin, @var{expr} peut se référer à une procédure monadique à au moins un
6798 argument (@pxref{La monad du dépôt}). La procédure doit renvoyer une
6799 dérivation comme une valeur monadique, qui est ensuite lancée à travers
6800 @code{run-with-store}.
6801
6802 @item --source
6803 @itemx -S
6804 Construit les dérivation source des paquets, plutôt que des paquets
6805 eux-même.
6806
6807 Par exemple, @code{guix build -S gcc} renvoie quelque chose comme
6808 @file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, qui est l'archive des sources
6809 de GCC.
6810
6811 L'archive des sources renvoyée est le résultat de l'application des
6812 correctifs et des extraits de code éventuels spécifiés dans le champ
6813 @code{origin} du paquet (@pxref{Définition des paquets}).
6814
6815 @item --sources
6816 Récupère et renvoie la source de @var{package-or-derivation} et toute ses
6817 dépendances, récursivement. C'est pratique pour obtenir une copie locale de
6818 tous les codes sources requis pour construire @var{packages}, ce qui vous
6819 permet de les construire plus tard même sans accès réseau. C'est une
6820 extension de l'option @code{--source} et peut accepter l'un des arguments
6821 facultatifs suivants :
6822
6823 @table @code
6824 @item package
6825 Cette valeur fait que l'option @code{--sources} se comporte comme l'option
6826 @code{--source}.
6827
6828 @item all
6829 Construit les dérivations des sources de tous les paquets, dont les sources
6830 qui pourraient être listées dans @code{inputs}. C'est la valeur par défaut.
6831
6832 @example
6833 $ guix build --sources tzdata
6834 The following derivations will be built:
6835 /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
6836 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
6837 @end example
6838
6839 @item transitive
6840 Build the source derivations of all packages, as well of all transitive
6841 inputs to the packages. This can be used e.g.@: to prefetch package source
6842 for later offline building.
6843
6844 @example
6845 $ guix build --sources=transitive tzdata
6846 The following derivations will be built:
6847 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
6848 /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
6849 /gnu/store/@dots{}-grep-2.21.tar.xz.drv
6850 /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
6851 /gnu/store/@dots{}-make-4.1.tar.xz.drv
6852 /gnu/store/@dots{}-bash-4.3.tar.xz.drv
6853 @dots{}
6854 @end example
6855
6856 @end table
6857
6858 @item --system=@var{système}
6859 @itemx -s @var{système}
6860 Tenter de construire pour le @var{système} — p.@: ex.@: @code{i686-linux} —
6861 plutôt que pour le type de système de l'hôte de construction.
6862
6863 @quotation Remarque
6864 Le drapeau @code{--system} est utilisé pour une compilation @emph{native} et
6865 ne doit pas être confondu avec une compilation croisée. Voir
6866 @code{--target} ci-dessous pour des informations sur la compilation croisée.
6867 @end quotation
6868
6869 Par exemple, passer @code{--system=i686-linux} sur un système
6870 @code{x86_64-linux} ou @code{--system=armhf-linux} sur un système
6871 @code{aarch64-linux} vous permet de construire des paquets dans un
6872 environnement entièrement 32-bits. C'est une exemple d'utilisation de cette
6873 option sur les systèmes Linux, qui peuvent émuler plusieurs personnalités.
6874
6875 @quotation Remarque
6876 La possibilité de construire pour un système @code{armhf-linux} est activé
6877 sans condition sur les machines @code{aarch64-linux}, bien que certaines
6878 puces aarch64 n'en soient pas capables, comme les ThunderX.
6879 @end quotation
6880
6881 De même, lorsque l'émulation transparente avec QEMU et @code{binfnmt_misc}
6882 est activée (@pxref{Services de virtualisation,
6883 @code{qemu-binfmt-service-type}}), vous pouvez construire pour n'importe
6884 quel système pour lequel un gestionnaire QEMU @code{binfmt_misc} est
6885 installé.
6886
6887 Les constructions pour un autre système que celui de la machine que vous
6888 utilisez peuvent aussi être déchargées à une machine distante de la bonne
6889 architecture. @xref{Réglages du délestage du démon}, pour plus d'information sur le
6890 déchargement.
6891
6892 @item --target=@var{triplet}
6893 @cindex compilation croisée
6894 Effectuer une compilation croisée pour @var{triplet} qui doit être un
6895 triplet GNU valide, comme @code{"mips64el-linux-gnu"} (@pxref{Specifying
6896 target triplets, GNU configuration triplets,, autoconf, Autoconf}).
6897
6898 @anchor{vérification de la construction}
6899 @item --check
6900 @cindex déterminisme, vérification
6901 @cindex reproductibilité, vérification
6902 Reconstruit les @var{package-or-derivation}, qui sont déjà disponibles dans
6903 le dépôt et lève une erreur si les résultats des constructions ne sont pas
6904 identiques bit-à-bit.
6905
6906 Ce mécanisme vous permet de vérifier si les substituts précédemment
6907 installés sont authentiques (@pxref{Substituts}) ou si le résultat de la
6908 construction d'un paquet est déterministe. @xref{Invoquer guix challenge}
6909 pour plus d'informations et pour les outils.
6910
6911 Lorsqu'utilisé avec @option{--keep-failed}, la sourtie différente est gardée
6912 dans le dépôt sous @file{/gnu/store/@dots{}-check}. Cela rend plus facile
6913 l'étude des différences entre les deux résultats.
6914
6915 @item --repair
6916 @cindex réparer les éléments du dépôt
6917 @cindex corruption, récupérer de
6918 Essaye de réparer les éléments du dépôt spécifiés, s'ils sont corrompus, en
6919 les téléchargeant ou en les construisant à nouveau.
6920
6921 Cette opération n'est pas atomique et donc restreinte à l'utilisateur
6922 @code{root}
6923
6924 @item --derivations
6925 @itemx -d
6926 Renvoie les chemins de dérivation, et non les chemins de sortie, des paquets
6927 donnés.
6928
6929 @item --root=@var{fichier}
6930 @itemx -r @var{fichier}
6931 @cindex racines du GC, ajout
6932 @cindex ajout de racines au ramasse-miettes
6933 Fait de @var{fichier} un lien symbolique vers le résultat, et l'enregistre
6934 en tant que racine du ramasse-miettes.
6935
6936 En conséquence, les résultats de cette invocation de @command{guix build}
6937 sont protégés du ramasse-miettes jusqu'à ce que @var{fichier} soit
6938 supprimé. Lorsque cette option est omise, les constructions sont
6939 susceptibles d'être glanées.
6940
6941 @item --log-file
6942 @cindex journaux de construction, accès
6943 Renvoie les noms des journaux de construction ou les URL des
6944 @var{package-or-derivation} donnés ou lève une erreur si les journaux de
6945 construction sont absents.
6946
6947 Cela fonctionne indépendamment de la manière dont les paquets ou les
6948 dérivations sont spécifiées. Par exemple, les invocations suivantes sont
6949 équivalentes :
6950
6951 @example
6952 guix build --log-file `guix build -d guile`
6953 guix build --log-file `guix build guile`
6954 guix build --log-file guile
6955 guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
6956 @end example
6957
6958 Si un journal n'est pas disponible localement, à moins que
6959 @code{--no-substitutes} ne soit passé, la commande cherche un journal
6960 correspondant sur l'un des serveurs de substituts (tels que spécifiés avec
6961 @code{--substitute-urls}.)
6962
6963 Donc par exemple, imaginons que vous souhaitiez voir le journal de
6964 construction de GDB sur MIPS, mais que vous n'avez qu'une machine
6965 @code{x86_64} :
6966
6967 @example
6968 $ guix build --log-file gdb -s mips64el-linux
6969 https://hydra.gnu.org/log/@dots{}-gdb-7.10
6970 @end example
6971
6972 Vous pouvez accéder librement à un vaste bibliothèque de journaux de
6973 construction !
6974 @end table
6975
6976 @node Débogage des échecs de construction
6977 @subsection Débogage des échecs de construction
6978
6979 @cindex échecs de construction, débogage
6980 Lors de la définition d'un nouveau paquet (@pxref{Définition des paquets}), vous
6981 passerez probablement du temps à déboguer et modifier la construction
6982 jusqu'à ce que ça marche. Pour cela, vous devez effectuer les commandes de
6983 construction vous-même dans un environnement le plus proche possible de
6984 celui qu'utilise le démon de construction.
6985
6986 Pour cela, la première chose à faire est d'utiliser l'option
6987 @option{--keep-failed} ou @option{-K} de @command{guix build}, qui gardera
6988 l'arborescence de construction dans @file{/tmp} ou le répertoire spécifié
6989 par @code{TMPDIR} (@pxref{Invoquer guix build, @code{--keep-failed}}).
6990
6991 À partir de là, vous pouvez vous déplacer dans l'arborescence de
6992 construction et sourcer le fichier @file{environment-variables}, qui
6993 contient toutes les variables d'environnement qui étaient définies lorsque
6994 la construction a échoué. Disons que vous déboguez un échec de construction
6995 dans le paquet @code{foo} ; une session typique ressemblerait à cela :
6996
6997 @example
6998 $ guix build foo -K
6999 @dots{} @i{build fails}
7000 $ cd /tmp/guix-build-foo.drv-0
7001 $ source ./environment-variables
7002 $ cd foo-1.2
7003 @end example
7004
7005 Maintenant, vous pouvez invoquer les commandes comme si vous étiez le démon
7006 (presque) et corriger le processus de construction.
7007
7008 Parfois il arrive que, par exemple, les tests d'un paquet réussissent
7009 lorsque vous les lancez manuellement mais échouent quand ils sont lancés par
7010 le démon. Cela peut arriver parce que le démon tourne dans un conteneur où,
7011 contrairement à notre environnement au-dessus, l'accès réseau est
7012 indisponible, @file{/bin/sh} n'existe pas, etc (@pxref{Réglages de l'environnement de construction}).
7013
7014 Dans ce cas, vous pourriez avoir besoin de lancer le processus de
7015 construction dans un conteneur similaire à celui que le démon crée :
7016
7017 @example
7018 $ guix build -K foo
7019 @dots{}
7020 $ cd /tmp/guix-build-foo.drv-0
7021 $ guix environment --no-grafts -C foo --ad-hoc strace gdb
7022 [env]# source ./environment-variables
7023 [env]# cd foo-1.2
7024 @end example
7025
7026 Ici, @command{guix environment -C} crée un conteneur et démarre un nouveau
7027 shell dedans (@pxref{Invoquer guix environment}). La partie
7028 @command{--ad-hoc strace gdb} ajoute les commandes @command{strace} et
7029 @command{gdb} dans le conteneur, ce qui pourrait s'avérer utile pour le
7030 débogage. L'option @option{--no-grafts} s'assure qu'on obtient le même
7031 environnement, avec des paquets non greffés (@pxref{Mises à jour de sécurité}, pour
7032 plus d'informations sur les greffes).
7033
7034 Pour obtenir un conteneur plus proche de ce qui serait utilisé par le démon
7035 de construction, on peut enlever @file{/bin/sh} :
7036
7037 @example
7038 [env]# rm /bin/sh
7039 @end example
7040
7041 Ne vous inquiétez pas, c'est sans danger : tout cela se passe dans un
7042 conteneur jetable créé par @command{guix environment}.
7043
7044 La commande @command{strace} n'est probablement pas dans le chemin de
7045 recherche, mais on peut lancer :
7046
7047 @example
7048 [env]# $GUIX_ENVIRONMENT/bin/strace -f -o log make check
7049 @end example
7050
7051 De cette manière, non seulement vous aurez reproduit les variables
7052 d'environnement utilisées par le démon, mais vous lancerez aussi le
7053 processus de construction dans un conteneur similaire à celui utilisé par le
7054 démon.
7055
7056
7057 @node Invoquer guix edit
7058 @section Invoquer @command{guix edit}
7059
7060 @cindex @command{guix edit}
7061 @cindex définition de paquets, modification
7062 Tant de paquets, tant de fichiers source ! La commande @command{guix edit}
7063 facilite la vie des utilisateurs et des packagers en plaçant leur éditeur
7064 sur le fichier source qui contient la définition des paquets spécifiés. Par
7065 exemple :
7066
7067 @example
7068 guix edit gcc@@4.9 vim
7069 @end example
7070
7071 @noindent
7072 lance le programme spécifié dans la variable d'environnement @code{VISUAL}
7073 ou @code{EDITOR} pour visionner la recette de GCC@tie{}4.9.3 et cele de Vim.
7074
7075 Si vous utilisez une copie du dépôt Git de Guix (@pxref{Construire depuis Git}),
7076 ou que vous avez créé vos propres paquets dans @code{GUIX_PACKAGE_PATH}
7077 (@pxref{Modules de paquets}), vous pourrez modifier les recettes des paquets.
7078 Sinon, vous pourrez examiner les recettes en lecture-seule des paquets
7079 actuellement dans le dépôt.
7080
7081
7082 @node Invoquer guix download
7083 @section Invoquer @command{guix download}
7084
7085 @cindex @command{guix download}
7086 @cindex télécharger les sources des paquets
7087 En écrivant des définitions de paquets, les développeurs ont généralement
7088 besoin de télécharger une archive des sources, calculer son hash SHA256 et
7089 écrire ce hash dans la définition du paquet (@pxref{Définition des paquets}).
7090 L'outil @command{guix download} aide à cette tâche : il télécharge un
7091 fichier à l'URL donné, l'ajoute au dépôt et affiche à la fois son nom dans
7092 le dépôt et son hash SHA56.
7093
7094 Le fait que le fichier téléchargé soit ajouté au dépôt préserve la bande
7095 passante : losque les développeurs finissent par construire le paquet
7096 nouvellement défini avec @command{guix build}, l'archive des sources n'aura
7097 pas besoin d'être téléchargée de nouveau puisqu'elle se trouvera déjà dans
7098 le dépôt. C'est aussi une manière pratique de garder des fichiers
7099 temporairement, qui pourront ensuite être supprimés (@pxref{Invoquer guix gc}).
7100
7101 La commande @command{guix download} supporte les mêmes URI que celles
7102 utilisées dans les définitions de paquets. En particulier, elle supporte
7103 les URI @code {mirror://}. Les URI @code{http} (HTTP sur TLS) sont
7104 supportées @emph{si} les liaisons Guile de GnuTLS sont disponibles dans
7105 l'environnement de l'utilisateur ; si elle ne sont pas disponibles, une
7106 erreur est renvoyée. @xref{Guile Preparations, how to install the GnuTLS
7107 bindings for Guile,, gnutls-guile, GnuTLS-Guile}, pour plus d'informations.
7108
7109 @command{guix download} vérifie les certificats du serveur HTTPS en
7110 chargeant les autorités de certification X.509 depuis le répertoire vers
7111 lequel pointe la variable d'environnement @code{SSL_CERT_DIR} (@pxref{Certificats X.509}), à moins que @option{--no-check-certificate} ne soit utilisé.
7112
7113 Les options suivantes sont disponibles :
7114
7115 @table @code
7116 @item --format=@var{fmt}
7117 @itemx -f @var{fmt}
7118 Écrit le hash dans le format spécifié par @var{fmt}. Pour plus
7119 d'informations sur les valeurs valides pour @var{fmt}, @pxref{Invoquer guix hash}.
7120
7121 @item --no-check-certificate
7122 Ne pas valider les certificats HTTPS des serveurs.
7123
7124 Lorsque vous utilisez cette option, vous n'avez @emph{absolument aucune
7125 garanti} que vous communiquez avec le serveur authentique responsable de
7126 l'URL donnée, ce qui vous rend vulnérable à des attaques de « l'homme du
7127 milieu ».
7128
7129 @item --output=@var{fichier}
7130 @itemx -o @var{fichier}
7131 Enregistre le fichier téléchargé dans @var{fichier} plutôt que de l'ajouter
7132 au dépôt.
7133 @end table
7134
7135 @node Invoquer guix hash
7136 @section Invoquer @command{guix hash}
7137
7138 @cindex @command{guix hash}
7139 La commande @command{guix hash} calcul le hash SHA256 d'un fichier. C'est
7140 surtout un outil pour simplifier la vie des contributeurs de la distribution
7141 : il calcul le hash cryptographique d'un fichier, qui peut être utilisé dans
7142 la définition d'un paquet (@pxref{Définition des paquets}).
7143
7144 La syntaxe générale est :
7145
7146 @example
7147 guix hash @var{option} @var{fichier}
7148 @end example
7149
7150 Lorsque @var{fichier} est @code{-} (un tiret), @command{guix hash} calcul le
7151 hash des données lues depuis l'entrée standard. @command{guix hash} a les
7152 options suivantes :
7153
7154 @table @code
7155
7156 @item --format=@var{fmt}
7157 @itemx -f @var{fmt}
7158 Écrit le hash dans le format spécifié par @var{fmt}.
7159
7160 Les formats supportés sont : @code{nix-base32}, @code{base32}, @code{base16}
7161 (@code{hex} et @code{hexadecimal} peuvent aussi être utilisés).
7162
7163 Si l'option @option {--format} n'est pas spécifiée, @command{guix hash}
7164 affichera le hash en @code{nix-base32}. Cette représentation est utilisée
7165 dans les définitions des paquets.
7166
7167 @item --recursive
7168 @itemx -r
7169 Calcule le hash sur @var{fichier} récursivement.
7170
7171 @c FIXME: Replace xref above with xref to an ``Archive'' section when
7172 @c it exists.
7173 Dans ce cas, le hash est calculé sur une archive contenant @var{fichier},
7174 dont ses enfants si c'est un répertoire. Certaines métadonnées de
7175 @var{fichier} fait partie de l'archive ; par exemple lorsque @var{fichier}
7176 est un fichier normal, le hash est différent que le @var{fichier} soit
7177 exécutable ou non. Les métadonnées comme un horodatage n'ont aucun impact
7178 sur le hash (@pxref{Invoquer guix archive}).
7179
7180 @item --exclude-vcs
7181 @itemx -x
7182 Lorsqu'elle est combinée à @option{--recursive}, exclut les répertoires de
7183 système de contrôle de version (@file{.bzr}, @file{.git}, @file{.hg}, etc).
7184
7185 @vindex git-fetch
7186 Par exemple, voici comment calculer le hash d'un dépôt Git, ce qui est utile
7187 avec la méthode @code{git-fetch} (@pxref{Référence d'origine}) :
7188
7189 @example
7190 $ git clone http://example.org/foo.git
7191 $ cd foo
7192 $ guix hash -rx .
7193 @end example
7194 @end table
7195
7196 @node Invoquer guix import
7197 @section Invoquer @command{guix import}
7198
7199 @cindex importer des paquets
7200 @cindex paquets importés
7201 @cindex conversion de paquets
7202 @cindex Invoquer @command{guix import}
7203 La commande @command{guix import} est utile pour les gens qui voudraient
7204 ajouter un paquet à la distribution avec aussi peu de travail que possible —
7205 une demande légitime. La commande connaît quelques dépôts logiciels d'où
7206 elle peut « importer » des métadonnées de paquets. Le résultat est une
7207 définition de paquet, ou un modèle de définition, dans le format reconnu par
7208 Guix (@pxref{Définition des paquets}).
7209
7210 La syntaxe générale est :
7211
7212 @example
7213 guix import @var{importer} @var{options}@dots{}
7214 @end example
7215
7216 @var{importer} spécifie la source depuis laquelle importer des métadonnées
7217 de paquets, et @var{options} spécifie un identifiant de paquet et d'autres
7218 options spécifiques à @var{importer}. Actuellement les « importateurs »
7219 disponibles sont :
7220
7221 @table @code
7222 @item gnu
7223 Importe des métadonnées d'un paquet GNU donné. Cela fournit un modèle pour
7224 la dernière version de ce paquet GNU, avec le hash de son archive, le
7225 synopsis et la description canonique.
7226
7227 Les informations supplémentaires comme les dépendances du paquet et sa
7228 licence doivent être renseignées manuellement.
7229
7230 Par exemple, la commande suivante renvoie une définition de paquets pour
7231 GNU@tie{}Hello :
7232
7233 @example
7234 guix import gnu hello
7235 @end example
7236
7237 Les options spécifiques sont :
7238
7239 @table @code
7240 @item --key-download=@var{politique}
7241 Comme pour @code{guix refresh}, spécifie la politique de gestion des clefs
7242 OpenPGP manquantes lors de la vérification de la signature d'un paquet.
7243 @xref{Invoquer guix refresh, @code{--key-download}}.
7244 @end table
7245
7246 @item pypi
7247 @cindex pypi
7248 Importe des métadonnées depuis @uref{https://pypi.python.org/, l'index des
7249 paquets Python}@footnote{Cette fonctionnalité requiert l'installation de
7250 Guile-JSON. @xref{Prérequis}.}. Les informations sont récupérées à
7251 partir de la description en JSON disponible sur @code{pypi.python.org} et
7252 inclus généralement toutes les informations utiles, dont les dépendances des
7253 paquets. Pour une efficacité maximale, il est recommandé d'installer
7254 l'utilitaire @command{unzip}, pour que l'importateur puisse dézipper les
7255 wheels Python et récupérer les informations contenues à l'intérieur.
7256
7257 La commande ci-dessous importe les métadonnées du paquet Python
7258 @code{itsdangerous} :
7259
7260 @example
7261 guix import pypi itsdangerous
7262 @end example
7263
7264 @table @code
7265 @item --recursive
7266 @itemx -r
7267 Traverse le graphe des dépendances du paquet amont donné et génère les
7268 expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
7269 @end table
7270
7271 @item gem
7272 @cindex gem
7273 Importe des métadonnées de @uref{https://rubygems.org/,
7274 RubyGems}@footnote{Cette fonctionnalité requiert l'installation de
7275 Guile-JSON. @xref{Prérequis}.}. Les informations sont récupérées au
7276 format JSON disponible sur @code{rubygems.org} et inclut les informations
7277 les plus utiles, comme les dépendances à l'exécution. Il y a des pièges
7278 cependant. Les métadonnées ne distinguent pas synopsis et description, donc
7279 la même chaîne est utilisée pour les deux champs. En plus, les détails des
7280 dépendances non Ruby requises pour construire des extensions natives sont
7281 indisponibles et laissé en exercice au packager.
7282
7283 La commande ci-dessous importe les métadonnées pour le paquet Ruby
7284 @code{rails} :
7285
7286 @example
7287 guix import gem rails
7288 @end example
7289
7290 @table @code
7291 @item --recursive
7292 @itemx -r
7293 Traverse le graphe des dépendances du paquet amont donné et génère les
7294 expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
7295 @end table
7296
7297 @item cpan
7298 @cindex CPAN
7299 Importe des métadonnées de @uref{https://www.metacpan.org/,
7300 MetaCPAN}@footnote{Cette fonctionnalité requiert l'installation de
7301 Guile-JSON. @xref{Prérequis}.}. Les informations sont récupérées au
7302 format JSON disponible à travers @uref{https://fastapi.metacpan.org/, l'API
7303 de MetaCPAN} et inclus les informations les plus utiles, comme les
7304 dépendances des modules. L'information sur les licences doit être vérifiée
7305 avec attention. Si Perl est disponible dans le dépôt, alors l'utilitaire
7306 @code{corelist} sera utiliser pour exclure les modules du cœur de la
7307 distribution Perl de la liste des dépendances.
7308
7309 La commande ci-dessous importe les métadonnées du module Perl
7310 @code{Acme::Boolean} :
7311
7312 @example
7313 guix import cpan Acme::Boolean
7314 @end example
7315
7316 @item cran
7317 @cindex CRAN
7318 @cindex Bioconductor
7319 Importe des métadonnées de @uref{https://cran.r-project.org/, CRAN}, le
7320 dépôt central de @uref{http://r-project.org, l'environnement statistique et
7321 graphique GUN@tie{}R}.
7322
7323 Les informations sont extraites du fichier @file{DESCRIPTION} du paquet.
7324
7325 La commande ci-dessous importe les métadonnées du paquet R @code{Cairo} :
7326
7327 @example
7328 guix import cran Cairo
7329 @end example
7330
7331 Lorsque l'option @code{--recursive} est utilisée, l'importateur traversera
7332 le graphe des dépendances du paquet amont récursivement et générera des
7333 expressions de paquets pour tous ceux qui ne sont pas déjà dans Guix.
7334
7335 Lorsque l'option @code{--archive=bioconductor} est utilisée, les métadonnées
7336 sont importées de @uref{https://www.bioconductor.org/, Bioconductor}, un
7337 répertoire de paquets R pour l'analyse et la compréhension de données
7338 génomiques volumineuses en bioinformatique.
7339
7340 Les informations sont extraites du fichier @file{DESCRIPTION} d'un paquet
7341 publié sur l'interface web du dépôt SVN de Bioconductor.
7342
7343 La commande ci-dessous importe les métadonnées du paquet R
7344 @code{GenomicRanges} :
7345
7346 @example
7347 guix import cran --archive=bioconductor GenomicRanges
7348 @end example
7349
7350 @item texlive
7351 @cindex TeX Live
7352 @cindex CTAN
7353 Importe les métadonnées de @uref{http://www.ctan.org/, CTAN}, l'archive TeX
7354 réseau complète pour les paquets TeX qui font partie de la
7355 @uref{https://www.tug.org/texlive/, distribution TeX Live}.
7356
7357 Les informations sur les paquets sont obtenues à travers l'API XML fournie
7358 par CTAN, tandis que le code source est téléchargé depuis le dépôt SVN du
7359 projet Tex Live. Cette méthode est utilisée parce que CTAN ne garde pas
7360 d'archives versionnées.
7361
7362 La commande ci-dessous importe les métadonnées du paquet TeX @code{fontspec}
7363 :
7364
7365 @example
7366 guix import texlive fontspec
7367 @end example
7368
7369 Lorsque l'option @code{--archive=DIRECTORY} est utilisée, le code source
7370 n'est pas téléchargé depuis le sous-répertoire @file{latex} du
7371 l'arborescence @file{texmf-dist/source} dans le dépôt SVN de TeX Live, mais
7372 depuis le répertoire voisin spécifié sous la même racine.
7373
7374 La commande ci-dessous importe les métadonnées du paquet @code{ifxetex}
7375 depuis CTAN en récupérant les sources depuis le répertoire
7376 @file{texmf/source/generic} :
7377
7378 @example
7379 guix import texlive --archive=generic ifxetex
7380 @end example
7381
7382 @item json
7383 @cindex JSON, import
7384 Importe des métadonnées d'un fichier JSON local@footnote{Cette
7385 fonctionnalité requiert l'installation de Guile-JSON.
7386 @xref{Prérequis}.}. Considérez l'exemple suivant d'une définition de
7387 paquet au format JSON :
7388
7389 @example
7390 @{
7391 "name": "hello",
7392 "version": "2.10",
7393 "source": "mirror://gnu/hello/hello-2.10.tar.gz",
7394 "build-system": "gnu",
7395 "home-page": "https://www.gnu.org/software/hello/",
7396 "synopsis": "Hello, GNU world: An example GNU package",
7397 "description": "GNU Hello prints a greeting.",
7398 "license": "GPL-3.0+",
7399 "native-inputs": ["gcc@@6"]
7400 @}
7401 @end example
7402
7403 Les noms des champs sont les mêmes que pour les enregistrements de
7404 @code{<package>} (@xref{Définition des paquets}). Les référence à d'autres
7405 paquets sont fournies comme des listes JSON de chaînes de spécifications de
7406 paquets comme @code{guile} ou @code{guile@@2.0}.
7407
7408 L'importateur supporte aussi une définition plus explicite des sources avec
7409 les champs habituels pour les enregistrements @code{<origin>} :
7410
7411 @example
7412 @{
7413 @dots{}
7414 "source": @{
7415 "method": "url-fetch",
7416 "uri": "mirror://gnu/hello/hello-2.10.tar.gz",
7417 "sha256": @{
7418 "base32": "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"
7419 @}
7420 @}
7421 @dots{}
7422 @}
7423 @end example
7424
7425 La commande ci-dessous lit les métadonnées du fichier JSON @code{hello.json}
7426 et renvoie une expression de paquet :
7427
7428 @example
7429 guix import json hello.json
7430 @end example
7431
7432 @item nix
7433 Importe les métadonnées d'une copie locale des source de
7434 @uref{http://nixos.org/nixpkgs/, la distribution Nixpkgs}@footnote{Cela
7435 repose sur la commande @command{nix-instantiate} de
7436 @uref{http://nixos.org/nix/, Nix}.}. Les définitions de paquets dans
7437 Nixpkgs sont habituellement écrites en un mélange entre le langage Nix et
7438 Bash. Cette commande n'importe que la structure de haut-niveau du paquet
7439 qui est écrite dans le langage Nix. Elle inclut normalement tous les champs
7440 de base de la définition d'un paquet.
7441
7442 Lorsque vous importez un paquet GNU, le synopsis et la description sont
7443 replacés par la version canonique en amont.
7444
7445 Normalement, vous devrez d'abord faire :
7446
7447 @example
7448 export NIX_REMOTE=daemon
7449 @end example
7450
7451 @noindent
7452 pour que @command{nix-instantiate} n'essaye pas d'ouvrir la base de données
7453 de Nix.
7454
7455 Par exemple, la commande ci-dessous importe la définition du paquet de
7456 LibreOffice (plus précisément, elle importe la définition du paquet lié à
7457 l'attribut de plus haut-niveau @code{libreoffice}) :
7458
7459 @example
7460 guix import nix ~/path/to/nixpkgs libreoffice
7461 @end example
7462
7463 @item hackage
7464 @cindex hackage
7465 Importe les métadonnées de l'archive de paquets centrale de la communauté
7466 Haskell, @uref{https://hackage.haskell.org/, Hackage}. Les informations
7467 sont récupérées depuis les fichiers Cabal et incluent toutes les
7468 informations utiles, dont les dépendances des paquets.
7469
7470 Les options spécifiques sont :
7471
7472 @table @code
7473 @item --stdin
7474 @itemx -s
7475 Lit un fichier Cabal depuis l'entrée standard.
7476 @item --no-test-dependencies
7477 @itemx -t
7478 N'inclut pas les dépendances requises uniquement par les suites de tests.
7479 @item --cabal-environment=@var{alist}
7480 @itemx -e @var{alist}
7481 @var{alist} est une alist Scheme qui définie l'environnement dans lequel les
7482 conditions de Cabal sont évaluées. Les clefs acceptées sont : @code{os},
7483 @code{arch}, @code{impl} et une représentation sous forme de chaîne de
7484 caractères du nom d'un drapeau. La valeur associée à un drapeau doit être
7485 le symbole @code{true} ou @code{false}. La valeur associée aux autres clefs
7486 doivent se conformer avec la définition du format de fichiers Cabal. La
7487 valeur par défaut associée avec les clefs @code{os}, @code{arch} et
7488 @code{impl} sont respectivement @samp{linux}, @samp{x86_64} et @samp{ghc}.
7489 @item --recursive
7490 @itemx -r
7491 Traverse le graphe des dépendances du paquet amont donné et génère les
7492 expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
7493 @end table
7494
7495 La commande ci-dessous importe les métadonnées de la dernière version du
7496 paquet Haskell @code{HTTP} sans inclure les dépendances des tests et en
7497 spécifiant la valeur du drapeau @samp{network-uri} comme étant @code{false}
7498 :
7499
7500 @example
7501 guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
7502 @end example
7503
7504 Une version spécifique du paquet peut éventuellement être spécifiée en
7505 faisant suivre le nom du paquet par un arobase et un numéro de version comme
7506 dans l'exemple suivant :
7507
7508 @example
7509 guix import hackage mtl@@2.1.3.1
7510 @end example
7511
7512 @item stackage
7513 @cindex stackage
7514 L'importateur @code{stackage} est une enveloppe autour de l'importateur
7515 @code{hackage}. Il prend un nom de paquet, recherche la version incluse
7516 dans une version au support étendu (LTS) de @uref{https://www.stackage.org,
7517 Stackage} et utilise l'importateur @code{hackage} pour récupérer les
7518 métadonnées. Remarquez que c'est à vous de choisir une version LTS
7519 compatible avec le compilateur GHC utilisé par Guix.
7520
7521 Les options spécifiques sont :
7522
7523 @table @code
7524 @item --no-test-dependencies
7525 @itemx -t
7526 N'inclut pas les dépendances requises uniquement par les suites de tests.
7527 @item --lts-version=@var{version}
7528 @itemx -l @var{version}
7529 @var{version} est la version LTS désirée. Si elle est omise, la dernière
7530 version est utilisée.
7531 @item --recursive
7532 @itemx -r
7533 Traverse le graphe des dépendances du paquet amont donné et génère les
7534 expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
7535 @end table
7536
7537 La commande ci-dessous importe les métadonnées du paquet Haskell @code{HTTP}
7538 inclus dans la version LTS 7.18 de Stackage :
7539
7540 @example
7541 guix import stackage --lts-version=7.18 HTTP
7542 @end example
7543
7544 @item elpa
7545 @cindex elpa
7546 Importe les métadonnées du dépôt de paquets ELPA (Emacs Lisp Package
7547 Archive) (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
7548
7549 Les options spécifiques sont :
7550
7551 @table @code
7552 @item --archive=@var{repo}
7553 @itemx -a @var{repo}
7554 @var{repo} identifie le dépôt d'archive depuis lequel récupérer les
7555 informations. Actuellement les dépôts supportés et leurs identifiants sont
7556 :
7557 @itemize -
7558 @item
7559 @uref{http://elpa.gnu.org/packages, GNU}, qu'on peut choisir avec
7560 l'identifiant @code{gnu}. C'est la valeur par défaut.
7561
7562 Les paquets de @code{elpa.gnu.org} avec l'une des clefs contenues dans le
7563 porte-clef GnuPG @file{share/emacs/25.1/etc/package-keyring.gpg} (ou
7564 similaire) dans le paquet @code{emacs} (@pxref{Package Installation, ELPA
7565 package signatures,, emacs, The GNU Emacs Manual}).
7566
7567 @item
7568 @uref{http://stable.melpa.org/packages, MELPA-Stable}, qu'on peut
7569 sélectionner avec l'identifiant @code{melpa-stable}.
7570
7571 @item
7572 @uref{http://melpa.org/packages, MELPA}, qu'on peut sélectionner avec
7573 l'identifiant @code{melpa}.
7574 @end itemize
7575
7576 @item --recursive
7577 @itemx -r
7578 Traverse le graphe des dépendances du paquet amont donné et génère les
7579 expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
7580 @end table
7581
7582 @item crate
7583 @cindex crate
7584 Importe les métadonnées du répertoire des paquets Rust
7585 @uref{https://crates.io, crates.io}.
7586
7587 @item opam
7588 @cindex OPAM
7589 @cindex OCaml
7590 Importe les métadonnées du répertoire de paquets
7591 @uref{https://opam.ocaml.org/, OPAM} utilisé par la communauté OCaml
7592 @end table
7593
7594 La structure du code de @command{guix import} est modulaire. Il serait
7595 utile d'avoir plus d'importateurs pour d'autres formats de paquets et votre
7596 aide est la bienvenue sur ce sujet (@pxref{Contribuer}).
7597
7598 @node Invoquer guix refresh
7599 @section Invoquer @command{guix refresh}
7600
7601 @cindex @command{guix refresh}
7602 L'audience première de la commande @command{guix refresh} est l'ensemble des
7603 développeurs de la distribution logicielle GNU. Par défaut, elle rapporte
7604 les paquets fournis par la distribution qui sont en retard par rapport aux
7605 dernières versions disponibles en amont, comme ceci :
7606
7607 @example
7608 $ guix refresh
7609 gnu/packages/gettext.scm:29:13: gettext serait mis à jour de 0.18.1.1 à 0.18.2.1
7610 gnu/packages/glib.scm:77:12: glib serait mis à jour de 2.34.3 à 2.37.0
7611 @end example
7612
7613 Autrement, on peut spécifier les paquets à considérer, auquel cas un
7614 avertissement est émis pour les paquets qui n'ont pas de gestionnaire de
7615 mise à jour associé :
7616
7617 @example
7618 $ guix refresh coreutils guile guile-ssh
7619 gnu/packages/ssh.scm:205:2 : avertissement : aucun gestionnaire de mise à jour pour guile-ssh
7620 gnu/packages/guile.scm:136:12 : guile serait mis à jour de 2.0.12 à 2.0.13
7621 @end example
7622
7623 @command{guix refresh} navigue le dépôt amont de chaque paquet et détermine
7624 le numéro de version le plus élevé parmi les versions publiées. La commande
7625 sait comment mettre à jour certains types de paquets : les paquets GNU, les
7626 paquets ELPA, etc. — voir la documentation pour @option{--type} ci-dessous.
7627 Il y a beaucoup de paquet cependant pour lesquels il manque une méthode pour
7628 déterminer si une nouvelle version est disponible en amont. Cependant, le
7629 mécanisme est extensible, alors n'hésitez pas à nous contacter pour ajouter
7630 une nouvelle méthode !
7631
7632 Parfois les noms en amont diffèrent du nom de paquet utilisé par Guix et
7633 @command{guix refresh} a besoin d'un peu d'aide. La plupart des
7634 gestionnaires de mise à jour honorent la propriété @code{upstream-name} dans
7635 les définitions de paquets, ce qui peut être utilisé à cette fin :
7636
7637 @example
7638 (define-public network-manager
7639 (package
7640 (name "network-manager")
7641 ;; @dots{}
7642 (properties '((upstream-name . "NetworkManager")))))
7643 @end example
7644
7645 Lorsque l'option @code{--update} est utilisée, elle modifie les fichiers
7646 source de la distribution pour mettre à jour le numéro de version et le hash
7647 de l'archive source de ces recettes de paquets (@pxref{Définition des paquets}).
7648 Cela est effectué en téléchargeant la dernière version de l'archive des
7649 sources de chaque paquet et des signatures associées, en authentifiant
7650 l'archive téléchargée avec sa signature en utilisant @command{gpg} puis en
7651 calculant son hash. Lorsque la clef publique utilisée pour signer l'archive
7652 manque du porte-clefs de l'utilisateur, le gestionnaire tente de la
7653 récupérer automatiquement d'un serveur de clef public ; si cela réussi, la
7654 clef est ajoutée au porte-clefs de l'utilisateur, sinon @command{guix
7655 refresh} rapporte une erreur.
7656
7657 Les options suivantes sont supportées :
7658
7659 @table @code
7660
7661 @item --expression=@var{expr}
7662 @itemx -e @var{expr}
7663 Considérer le paquet évalué par @var{expr}.
7664
7665 C'est utile pour précisément se référer à un paquet, comme dans cet exemple
7666 :
7667
7668 @example
7669 guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
7670 @end example
7671
7672 Cette commande liste les paquets qui dépendent de la libc « finale » (en
7673 gros tous les paquets).
7674
7675 @item --update
7676 @itemx -u
7677 Met à jour les fichiers source de la distribution (les recettes de paquets)
7678 en place. Cette option est généralement utilisée depuis une copie du dépôt
7679 git de Guix (@pxref{Lancer Guix avant qu'il ne soit installé}) :
7680
7681 @example
7682 $ ./pre-inst-env guix refresh -s non-core -u
7683 @end example
7684
7685 @xref{Définition des paquets}, pour plus d'information sur les définitions des
7686 paquets.
7687
7688 @item --select=[@var{subset}]
7689 @itemx -s @var{subset}
7690 Choisi tous les paquets dans @var{subset}, entre @code{core} et
7691 @code{non-core}.
7692
7693 Le sous-ensemble @code{core} se réfère à tous les paquets du cœur de la
7694 distribution — c.-à-d.@: les paquets qui sont utilisés pour construire «
7695 tout le rest ». Cela comprend GCC, libc, Binutils, Bash, etc.
7696 Habituellement, changer l'un de ces paquets dans la distribution implique de
7697 reconstruire tous les autres. Ainsi, ces mises à jour sont une nuisance
7698 pour les utilisateurs, en terme de temps de compilation et de bande passante
7699 utilisés pour effectuer la mise à jour.
7700
7701 Le sous-ensemble @code{non-core} se réfère au reste des paquets. C'est
7702 habituellement utile dans les cas où une mise à jour des paquets du cœur
7703 serait dérangeante.
7704
7705 @item --manifest=@var{fichier}
7706 @itemx -m @var{fichier}
7707 Choisi tous les paquets du manifeste dans @var{file}. C'est utile pour
7708 vérifier qu'aucun des paquets du manifeste utilisateur ne peut être mis à
7709 jour.
7710
7711 @item --type=@var{updater}
7712 @itemx -t @var{updater}
7713 Chois uniquement les paquets pris en charge par @var{updater}
7714 (éventuellement une liste de gestionnaires de mise à jour séparés par des
7715 virgules). Actuellement, @var{updater} peut être l'une des valeurs suivantes
7716 :
7717
7718 @table @code
7719 @item gnu
7720 le gestionnaire de mise à jour pour les paquets GNU ;
7721 @item gnome
7722 le gestionnaire de mise à jour pour les paquets GNOME ;
7723 @item kde
7724 le gestionnaire de mise à jour pour les paquets KDE ;
7725 @item xorg
7726 le gestionnaire de mise à jour pour les paquets X.org ;
7727 @item kernel.org
7728 le gestionnaire de mise à jour pour les paquets hébergés sur kernel.org ;
7729 @item elpa
7730 le gestionnaire de mise à jour pour les paquets @uref{http://elpa.gnu.org/,
7731 ELPA} ;
7732 @item cran
7733 le gestionnaire de mise à jour pour les paquets
7734 @uref{https://cran.r-project.org/, CRAN} ;
7735 @item bioconductor
7736 le gestionnaire de mise à jour pour les paquets
7737 @uref{https://www.bioconductor.org/, Bioconductor} ;
7738 @item cpan
7739 le gestionnaire de mise à jour pour les paquets @uref{http://www.cpan.org/,
7740 CPAN} ;
7741 @item pypi
7742 le gestionnaire de mise à jour pour les paquets
7743 @uref{https://pypi.python.org, PyPI} ;
7744 @item gem
7745 le gestionnaire de mise à jour pour les paquets @uref{https://rubygems.org,
7746 RubyGems} ;
7747 @item github
7748 le gestionnaire de mise à jour pour les paquets @uref{https://github.com,
7749 GitHub} ;
7750 @item hackage
7751 le gestionnaire de mise à jour pour les paquets
7752 @uref{https://hackage.haskell.org, Hackage} ;
7753 @item stackage
7754 le gestionnaire de mise à jour pour les paquets
7755 @uref{https://www.stackage.org, Stackage} ;
7756 @item crate
7757 le gestionnaire de mise à jour pour les paquets @uref{https://crates.io,
7758 Crates} ;
7759 @end table
7760
7761 Par exemple, la commande suivante ne vérifie que les mises à jour des
7762 paquets Emacs hébergés sur @code{elpa.gnu.org} et les paquets CRAN :
7763
7764 @example
7765 $ guix refresh --type=elpa,cran
7766 gnu/packages/statistics.scm:819:13 : r-testthat serait mis à jour de 0.10.0 à 0.11.0
7767 gnu/packages/emacs.scm:856:13 : emacs-auctex serait mis à jour de 11.88.6 à 11.88.9
7768 @end example
7769
7770 @end table
7771
7772 En plus, on peut passer à @command{guix refresh} un ou plusieurs noms de
7773 paquets, comme dans cet exemple :
7774
7775 @example
7776 $ ./pre-inst-env guix refresh -u emacs idutils gcc@@4.8
7777 @end example
7778
7779 @noindent
7780 La commande au-dessus met à jour spécifiquement les paquets @code{emacs} et
7781 @code{idutils}. L'option @code{--select} n'aurait aucun effet dans ce cas.
7782
7783 Pour déterminer s'il faut mettre à jour un paquet, il est parfois pratique
7784 de savoir quels paquets seraient affectés par la mise à jour pour pouvoir
7785 vérifier la compatibilité. Pour cela l'option suivante peut être utilisée
7786 avec un ou plusieurs noms de paquets passés à @command{guix refresh} :
7787
7788 @table @code
7789
7790 @item --list-updaters
7791 @itemx -L
7792 Liste les gestionnaires de mise à jour et quitte (voir l'option
7793 @option{--type} plus haut).
7794
7795 Pour chaque gestionnaire, affiche le pourcentage de paquets qu'il couvre ; à
7796 la fin, affiche le pourcentage de paquets couverts par tous les
7797 gestionnaires.
7798
7799 @item --list-dependent
7800 @itemx -l
7801 Liste les paquets de plus haut-niveau qui devraient être reconstruits après
7802 la mise à jour d'un ou plusieurs paquets.
7803
7804 @xref{Invoquer guix graph, le type @code{reverse-package} de @command{guix
7805 graph}}, pour des informations sur la manière de visualiser la liste des
7806 paquets dépendant d'un autre.
7807
7808 @end table
7809
7810 Soyez conscients que l'option @code{--list-dependent} ne fait
7811 @emph{qu'approximer} les reconstructions qui seraient requises par une mise
7812 à jour. Plus de reconstructions pourraient être requises dans certaines
7813 circonstances.
7814
7815 @example
7816 $ guix refresh --list-dependent flex
7817 Building the following 120 packages would ensure 213 dependent packages are rebuilt:
7818 hop@@2.4.0 geiser@@0.4 notmuch@@0.18 mu@@0.9.9.5 cflow@@1.4 idutils@@4.6 @dots{}
7819 @end example
7820
7821 La commande ci-dessus liste un ensemble de paquets qui peuvent être
7822 construits pour vérifier la compatibilité d'une mise à jour de @code{flex}.
7823
7824 Les options suivante peuvent être utilisées pour personnaliser les
7825 opérations avec GnuPG :
7826
7827 @table @code
7828
7829 @item --gpg=@var{commande}
7830 Utilise @var{commande} comme la commande de GnuPG 2.x. @var{commande} est
7831 recherchée dans @code{PATH}.
7832
7833 @item --keyring=@var{fichier}
7834 Utilise @var{fichier} comme porte-clefs pour les clefs amont. @var{fichier}
7835 doit être dans le @dfn{format keybox}. Les fichiers Keybox ont d'habitude
7836 un nom qui fini par @file{.kbx} et GNU@tie{}Privacy Guard (GPG) peut
7837 manipuler ces fichiers (@pxref{kbxutil, @command{kbxutil},, gnupg, Using the
7838 Privacy Guard}, pour plus d'informations sur un outil pour manipuler des
7839 fichiers keybox).
7840
7841 Lorsque cette option est omise, @command{guix refresh} utilise
7842 @file{~/.config/guix/upstream/trustedkeys.kbx} comme porte-clefs pour les
7843 clefs de signature amont. Les signatures OpenPGP sont vérifiées avec ces
7844 clefs ; les clefs manquantes sont aussi téléchargées dans ce porte-clefs
7845 (voir @option{--key-download} plus bas).
7846
7847 Vous pouvez exporter les clefs de votre porte-clefs GPG par défaut dans un
7848 fichier keybox avec une commande telle que :
7849
7850 @example
7851 gpg --export rms@@gnu.org | kbxutil --import-openpgp >> mykeyring.kbx
7852 @end example
7853
7854 De même, vous pouvez récupérer des clefs dans un fichier keybox spécifique
7855 comme ceci :
7856
7857 @example
7858 gpg --no-default-keyring --keyring mykeyring.kbx \
7859 --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
7860 @end example
7861
7862 @ref{GPG Configuration Options, @option{--keyring},, gnupg, Using the GNU
7863 Privacy Guard} pour plus d'informations sur l'option @option{--keyring} de
7864 GPG.
7865
7866 @item --key-download=@var{politique}
7867 Gère les clefs OpenPGP manquantes d'après la @var{politique}, qui peut être
7868 l'une des suivantes :
7869
7870 @table @code
7871 @item always
7872 Toujours télécharger les clefs manquantes depuis un serveur de clefs et les
7873 ajouter au porte-clefs de l'utilisateur.
7874
7875 @item never
7876 Ne jamais essayer de télécharger les clefs OpenPGP manquante. Quitter à la
7877 place.
7878
7879 @item interactive
7880 Lorsqu'on rencontre un paquet signé par une clef OpenPGP inconnue, demander
7881 à l'utilisateur s'il souhaite la télécharger ou non. C'est le comportement
7882 par défaut.
7883 @end table
7884
7885 @item --key-server=@var{host}
7886 Utiliser @var{host} comme serveur de clefs OpenPGP lors de l'importe d'une
7887 clef publique.
7888
7889 @end table
7890
7891 The @code{github} updater uses the @uref{https://developer.github.com/v3/,
7892 GitHub API} to query for new releases. When used repeatedly e.g.@: when
7893 refreshing all packages, GitHub will eventually refuse to answer any further
7894 API requests. By default 60 API requests per hour are allowed, and a full
7895 refresh on all GitHub packages in Guix requires more than this.
7896 Authentication with GitHub through the use of an API token alleviates these
7897 limits. To use an API token, set the environment variable
7898 @code{GUIX_GITHUB_TOKEN} to a token procured from
7899 @uref{https://github.com/settings/tokens} or otherwise.
7900
7901
7902 @node Invoquer guix lint
7903 @section Invoquer @command{guix lint}
7904
7905 @cindex @command{guix lint}
7906 @cindex paquets, chercher des erreurs
7907 La commande @command{guix lint} est conçue pour aider les développeurs à
7908 éviter des erreurs commune et à utiliser un style cohérent lors de
7909 l'écriture de recettes de paquets. Elle lance des vérifications sur un
7910 ensemble de paquets donnés pour trouver des erreurs communes dans leur
7911 définition. Les @dfn{vérifieurs} disponibles comprennent (voir
7912 @code{--list-checkers} pour une liste complète) :
7913
7914 @table @code
7915 @item synopsis
7916 @itemx description
7917 Vérifie certaines règles typographiques et stylistiques dans les
7918 descriptions et les synopsis.
7919
7920 @item inputs-should-be-native
7921 Identifie les entrées qui devraient sans doute plutôt être des entrées
7922 natives.
7923
7924 @item source
7925 @itemx home-page
7926 @itemx mirror-url
7927 @itemx source-file-name
7928 Probe @code{home-page} and @code{source} URLs and report those that are
7929 invalid. Suggest a @code{mirror://} URL when applicable. Check that the
7930 source file name is meaningful, e.g.@: is not just a version number or
7931 ``git-checkout'', without a declared @code{file-name} (@pxref{Référence d'origine}).
7932
7933 @item cve
7934 @cindex vulnérabilités
7935 @cindex CVE, Common Vulnerabilities and Exposures
7936 Rapporte les vulnérabilités connues trouvées dans les bases de données CVE
7937 (Common Vulnerabilities and Exposures) de l'année en cours et des années
7938 précédentes @uref{https://nvd.nist.gov/download.cfm#CVE_FEED, publié par le
7939 NIST américain}.
7940
7941 Pour voir les informations sur une vulnérabilité en particulier, visitez les
7942 pages :
7943
7944 @itemize
7945 @item
7946 @indicateurl{https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-ANNÉE-ABCD}
7947 @item
7948 @indicateurl{https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-ANNÉE-ABCD}
7949 @end itemize
7950
7951 @noindent
7952 où @code{CVE-ANNÉE-ABCD} est l'identifiant CVE — p.@: ex.@:
7953 @code{CVE-2015-7554}.
7954
7955 Les développeurs de paquets peuvent spécifier dans les recettes des paquets
7956 le nom @uref{https://nvd.nist.gov/cpe.cfm,CPE (Common Platform Enumeration)}
7957 et la version du paquet s'ils diffèrent du nom et de la version que Guix
7958 utilise, comme dans cet exemple :
7959
7960 @example
7961 (package
7962 (name "grub")
7963 ;; @dots{}
7964 ;; CPE calls this package "grub2".
7965 (properties '((cpe-name . "grub2")
7966 (cpe-version . "2.3")))
7967 @end example
7968
7969 @c See <http://www.openwall.com/lists/oss-security/2017/03/15/3>.
7970 Certaines entrées dans la base de données CVE ne spécifient pas la version
7971 du paquet auquel elles s'appliquent et lui restera donc attachée pour
7972 toujours. Les développeurs qui trouvent des alertes CVE et ont vérifiés
7973 qu'elles peuvent être ignorées peuvent les déclarer comme dans cet exemple :
7974
7975 @example
7976 (package
7977 (name "t1lib")
7978 ;; @dots{}
7979 ;; Ces CVE ne s'appliquent plus et peuvent être ignorée sans problème.
7980 (properties `((lint-hidden-cve . ("CVE-2011-0433"
7981 "CVE-2011-1553"
7982 "CVE-2011-1554"
7983 "CVE-2011-5244")))))
7984 @end example
7985
7986 @item formatting
7987 Avertit le développeurs lorsqu'il y a des problèmes de formatage du code
7988 source évident : des espaces en fin de ligne, des tabulations, etc.
7989 @end table
7990
7991 La syntaxe générale est :
7992
7993 @example
7994 guix lint @var{options} @var{package}@dots{}
7995 @end example
7996
7997 Si aucun paquet n'est donné par la ligne de commande, tous les paquets
7998 seront vérifiés. Les @var{options} peuvent contenir aucune ou plus des
7999 options suivantes :
8000
8001 @table @code
8002 @item --list-checkers
8003 @itemx -l
8004 Liste et décrit tous les vérificateurs disponibles qui seront lancés sur les
8005 paquets puis quitte.
8006
8007 @item --checkers
8008 @itemx -c
8009 N'active que les vérificateurs spécifiés dans une liste de noms séparés par
8010 des virgules parmi la liste renvoyée par @code{--list-checkers}.
8011
8012 @end table
8013
8014 @node Invoquer guix size
8015 @section Invoquer @command{guix size}
8016
8017 @cindex taille
8018 @cindex paquet, taille
8019 @cindex closure
8020 @cindex @command{guix size}
8021 La commande @command{guix size} aide les développeurs à dresser un profil de
8022 l'utilisation du disque que font les paquets. C'est facile de négliger
8023 l'impact d'une dépendance supplémentaire ajoutée à un paquet, ou l'impact de
8024 l'utilisation d'une sortie unique pour un paquet qui pourrait être
8025 facilement séparé (@pxref{Des paquets avec plusieurs résultats}). Ce sont les
8026 problèmes que @command{guix size} peut typiquement mettre en valeur.
8027
8028 On peut passer un ou plusieurs spécifications de paquets à la commande,
8029 comme @code{gcc@@4.8} ou @code{guile:debug}, ou un nom de fichier dans le
8030 dépôt. Regardez cet exemple :
8031
8032 @example
8033 $ guix size coreutils
8034 store item total self
8035 /gnu/store/@dots{}-gcc-5.5.0-lib 60.4 30.1 38.1%
8036 /gnu/store/@dots{}-glibc-2.27 30.3 28.8 36.6%
8037 /gnu/store/@dots{}-coreutils-8.28 78.9 15.0 19.0%
8038 /gnu/store/@dots{}-gmp-6.1.2 63.1 2.7 3.4%
8039 /gnu/store/@dots{}-bash-static-4.4.12 1.5 1.5 1.9%
8040 /gnu/store/@dots{}-acl-2.2.52 61.1 0.4 0.5%
8041 /gnu/store/@dots{}-attr-2.4.47 60.6 0.2 0.3%
8042 /gnu/store/@dots{}-libcap-2.25 60.5 0.2 0.2%
8043 total: 78.9 MiB
8044 @end example
8045
8046 @cindex closure
8047 Les éléments du dépôt listés ici constituent la @dfn{cloture transitive} de
8048 Coreutils — c.-à-d.@: Coreutils et toutes ses dépendances, récursivement —
8049 comme ce qui serait renvoyé par :
8050
8051 @example
8052 $ guix gc -R /gnu/store/@dots{}-coreutils-8.23
8053 @end example
8054
8055 Ici, la sortie possède trois colonnes à côté de chaque élément du dépôt. La
8056 première colonne, nommée « total », montre la taille en mébioctet (Mio) de
8057 la cloture de l'élément du dépôt — c'est-à-dire sa propre taille plus la
8058 taille de ses dépendances. La colonne suivante, nommée « lui-même », montre
8059 la taille de l'élément lui-même. La dernière colonne montre le ration de la
8060 taille de l'élément lui-même par rapport à celle de tous les éléments
8061 montrés.
8062
8063 Dans cet exemple, on voit que la cloture de Coreutils pèse 79@tie{}Mio, dont
8064 la plupart est dû à la libc et aux bibliothèques à l'exécution de GCC (ce
8065 n'est pas un problème en soit que la libc et les bibliothèques de GCC
8066 représentent une grande part de la cloture parce qu'elles sont toujours
8067 disponibles sur le système de toute façon).
8068
8069 Lorsque les paquets passés à @command{guix size} sont disponibles dans le
8070 dépôt@footnote{Plus précisément, @command{guix size} cherche les variantes
8071 @emph{non greffées} des paquets donnés, tels qu'ils sont renvoyés par
8072 @code{guix build @var{paquet} --no-graft}. @xref{Mises à jour de sécurité} pour des
8073 informations sur les greffes}, @command{guix size} demande au démon de
8074 déterminer ses dépendances, et mesure sa taille dans le dépôt, comme avec
8075 @command{du -ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
8076 Coreutils}).
8077
8078 Lorsque les paquets donnés ne sont @emph{pas} dans le dépôt, @command{guix
8079 size} rapporte les informations en se basant sur les substituts disponibles
8080 (@pxref{Substituts}). Cela permet de profiler l'utilisation du disque des
8081 éléments du dépôt même s'ils ne sont pas sur le disque, mais disponibles à
8082 distance.
8083
8084 Vous pouvez aussi spécifier plusieurs noms de paquets :
8085
8086 @example
8087 $ guix size coreutils grep sed bash
8088 store item total self
8089 /gnu/store/@dots{}-coreutils-8.24 77.8 13.8 13.4%
8090 /gnu/store/@dots{}-grep-2.22 73.1 0.8 0.8%
8091 /gnu/store/@dots{}-bash-4.3.42 72.3 4.7 4.6%
8092 /gnu/store/@dots{}-readline-6.3 67.6 1.2 1.2%
8093 @dots{}
8094 total: 102.3 MiB
8095 @end example
8096
8097 @noindent
8098 Dans cet exemple on voit que la combinaison des quatre paquets prent
8099 102.3@tie{}Mio en tout, ce qui est bien moins que la somme des clotures
8100 puisqu'ils ont beaucoup de dépendances en commun.
8101
8102 Les options disponibles sont :
8103
8104 @table @option
8105
8106 @item --substitute-urls=@var{urls}
8107 Utilise les informations de substituts de @var{urls}.
8108 @xref{client-substitute-urls, the same option for @code{guix build}}.
8109
8110 @item --sort=@var{clef}
8111 Trie les lignes en fonction de la @var{clef}, l'une des optinos suivantes :
8112
8113 @table @code
8114 @item self
8115 la taille de chaque élément (par défaut) ;
8116 @item closure
8117 la taille totale de la cloture de l'élémente.
8118 @end table
8119
8120 @item --map-file=@var{fichier}
8121 Écrit un schéma de l'utilisation du disque au format PNG dans @var{fichier}.
8122
8123 Pour l'exemple au-dessus, le schéma ressemble à ceci :
8124
8125 @image{images/coreutils-size-map,5in,, schéma de l'utilisation du disque de
8126 Coreutils produit par @command{guix size}}
8127
8128 Cette option requiert l'installation de
8129 @uref{http://wingolog.org/software/guile-charting/, Guile-Charting} et qu'il
8130 soit visible dans le chemin de recherche des modules Guile. Lorsque ce
8131 n'est pas le cas, @command{guix size} plante en essayant de le charger.
8132
8133 @item --system=@var{système}
8134 @itemx -s @var{système}
8135 Considère les paquets pour @var{système} — p.@: ex.@: @code{x86_64-linux}.
8136
8137 @end table
8138
8139 @node Invoquer guix graph
8140 @section Invoque @command{guix graph}
8141
8142 @cindex DAG
8143 @cindex @command{guix graph}
8144 @cindex dépendances des paquets
8145 Les paquets et leurs dépendances forment un @dfn{graphe}, plus précisément
8146 un graphe orienté acyclique (DAG). Il peut vite devenir difficile d'avoir
8147 une représentation mentale du DAG d'un paquet, donc la commande
8148 @command{guix graph} fournit une représentation visuelle du DAG. Par
8149 défaut, @command{guix graph} émet un représentation du DAG dans le format
8150 d'entrée de @uref{http://www.graphviz.org/, Graphviz}, pour que sa sortie
8151 puisse être passée directement à la commande @command{dot} de Graphviz.
8152 Elle peut aussi émettre une page HTML avec du code Javascript pour afficher
8153 un « digramme d'accords » dans un navigateur Web, grâce à la bibliothèque
8154 @uref{https://d3js.org/, d3.js}, ou émettre des requêtes Cypher pour
8155 construire un graphe dans une base de donnée de graphes supportant le
8156 langage de requêtes @uref{http://www.opencypher.org/, openCypher}. La
8157 syntaxe générale est :
8158
8159 @example
8160 guix graph @var{options} @var{paquet}@dots{}
8161 @end example
8162
8163 Par exemple, la commande suivante génère un fichier PDF représentant le DAG
8164 du paquet pour GNU@tie{}Core Utilities, qui montre ses dépendances à la
8165 compilation :
8166
8167 @example
8168 guix graph coreutils | dot -Tpdf > dag.pdf
8169 @end example
8170
8171 La sortie ressemble à ceci :
8172
8173 @image{images/coreutils-graph,2in,,Graphe de dépendance de GNU Coreutils}
8174
8175 Joli petit graphe, non ?
8176
8177 Mais il y a plus qu'un seul graphe ! Celui au-dessus est concis : c'est le
8178 graphe des objets paquets, en omettant les entrées implicites comme GCC,
8179 libc, grep, etc. Il est souvent utile d'avoir ces graphes concis, mais
8180 parfois on veut voir plus de détails. @command{guix graph} supporte
8181 plusieurs types de graphes, qui vous permettent de choisir le niveau de
8182 détails :
8183
8184 @table @code
8185 @item package
8186 C'est le type par défaut utilisé dans l'exemple plus haut. Il montre le DAG
8187 des objets paquets, sans les dépendances implicites. C'est concis, mais
8188 omet pas mal de détails.
8189
8190 @item reverse-package
8191 Cela montre le DAG @emph{inversé} des paquets. Par exemple :
8192
8193 @example
8194 guix graph --type=reverse-package ocaml
8195 @end example
8196
8197 ...@: yields the graph of packages that depend on OCaml.
8198
8199 Remarquez que pour les paquets du cœur de la distribution, cela crée des
8200 graphes énormes. Si vous voulez seulement voir le nombre de paquets qui
8201 dépendent d'un paquet donnés, utilisez @command{guix refresh
8202 --list-dependent} (@pxref{Invoquer guix refresh,
8203 @option{--list-dependent}}).
8204
8205 @item bag-emerged
8206 C'est le DAG du paquet, @emph{avec} les entrées implicites.
8207
8208 Par exemple, la commande suivante :
8209
8210 @example
8211 guix graph --type=bag-emerged coreutils | dot -Tpdf > dag.pdf
8212 @end example
8213
8214 ...@: yields this bigger graph:
8215
8216 @image{images/coreutils-bag-graph,,5in,Graphe des dépendances détaillé de
8217 GNU Coreutils}
8218
8219 En bas du graphe, on voit toutes les entrées implicites de
8220 @var{gnu-build-system} (@pxref{Systèmes de construction, @code{gnu-build-system}}).
8221
8222 Maintenant, remarquez que les dépendances de ces entrées implicites —
8223 c'est-à-dire les @dfn{dépendances de bootstrap} (@pxref{Bootstrapping}) — ne
8224 sont pas affichées, pour rester concis.
8225
8226 @item bag
8227 Comme @code{bag-emerged} mais cette fois inclus toutes les dépendances de
8228 bootstrap.
8229
8230 @item bag-with-origins
8231 Comme @code{bag}, mais montre aussi les origines et leurs dépendances.
8232
8233 @item dérivation
8234 C'est la représentation lu plus détaillée : elle montre le DAG des
8235 dérivations (@pxref{Dérivations}) et des éléments du dépôt. Comparé à la
8236 représentation ci-dessus, beaucoup plus de nœuds sont visibles, dont les
8237 scripts de construction, les correctifs, les modules Guile, etc.
8238
8239 Pour ce type de graphe, il est aussi possible de passer un nom de fichier
8240 @file{.drv} à la place d'un nom de paquet, comme dans :
8241
8242 @example
8243 guix graph -t derivation `guix system build -d my-config.scm`
8244 @end example
8245
8246 @item module
8247 C'est le graphe des @dfn{modules de paquets} (@pxref{Modules de paquets}). Par
8248 exemple, la commande suivante montre le graphe des modules de paquets qui
8249 définissent le paquet @code{guile} :
8250
8251 @example
8252 guix graph -t module guile | dot -Tpdf > module-graph.pdf
8253 @end example
8254 @end table
8255
8256 Tous les types ci-dessus correspondent aux @emph{dépendances à la
8257 construction}. Le type de graphe suivant représente les @emph{dépendances à
8258 l'exécution} :
8259
8260 @table @code
8261 @item references
8262 C'est le graphe des @dfn{references} d'une sortie d'un paquet, telles que
8263 renvoyées par @command{guix gc --references} (@pxref{Invoquer guix gc}).
8264
8265 Si la sortie du paquet donnée n'est pas disponible dans le dépôt,
8266 @command{guix graph} essayera d'obtenir les informations sur les dépendances
8267 à travers les substituts.
8268
8269 Vous pouvez aussi passer un nom de fichier du dépôt plutôt qu'un nom de
8270 paquet. Par exemple, la commande ci-dessous produit le graphe des
8271 références de votre profile (qui peut être gros !) :
8272
8273 @example
8274 guix graph -t references `readlink -f ~/.guix-profile`
8275 @end example
8276
8277 @item referrers
8278 C'est le graphe des @dfn{référents} d'un élément du dépôt, tels que renvoyés
8279 par @command{guix gc --referrers} (@pxref{Invoquer guix gc}).
8280
8281 Cela repose exclusivement sur les informations de votre dépôt. Par exemple,
8282 supposons que Inkscape est actuellement disponible dans 10 profils sur votre
8283 machine ; @command{guix graph -t referrers inkscape} montrera le graphe dont
8284 la racine est Inkscape avec 10 profils qui y sont liés.
8285
8286 Cela peut aider à déterminer ce qui empêche un élément du dépôt d'être
8287 glané.
8288
8289 @end table
8290
8291 Les options disponibles sont les suivante :
8292
8293 @table @option
8294 @item --type=@var{type}
8295 @itemx -t @var{type}
8296 Produit un graphe en sortie de type @var{type} où @var{type} doit être l'un
8297 des types au-dessus.
8298
8299 @item --list-types
8300 Liste les types de graphes supportés.
8301
8302 @item --backend=@var{moteur}
8303 @itemx -b @var{moteur}
8304 Produit un graphe avec le @var{moteur} choisi.
8305
8306 @item --list-backends
8307 Liste les moteurs de graphes supportés.
8308
8309 Actuellement les moteurs disponibles sont Graphviz et d3.js.
8310
8311 @item --expression=@var{expr}
8312 @itemx -e @var{expr}
8313 Considérer le paquet évalué par @var{expr}.
8314
8315 C'est utile pour précisément se référer à un paquet, comme dans cet exemple
8316 :
8317
8318 @example
8319 guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
8320 @end example
8321
8322 @item --system=@var{système}
8323 @itemx -s @var{système}
8324 Affiche le graphe pour @var{système} — p.@: ex.@: @code{i686-linux}.
8325
8326 Le graphe de dépendance des paquets est la plupart du temps indépendant de
8327 l'architecture, mais il y a quelques parties qui dépendent de l'architecture
8328 que cette option vous permet de visualiser.
8329 @end table
8330
8331
8332 @node Invoquer guix environment
8333 @section Invoquer @command{guix environment}
8334
8335 @cindex environnements de construction reproductibles
8336 @cindex environnement de développement
8337 @cindex @command{guix environment}
8338 @cindex environnement de construction de paquets
8339 Le but de @command{guix environment} est d'assister les hackers dans la
8340 création d'environnements de développement reproductibles sans polluer leur
8341 profil de paquets. L'outil @command{guix environment} prend un ou plusieurs
8342 paquets, construit leurs entrées et crée un environnement shell pour pouvoir
8343 les utiliser.
8344
8345 La syntaxe générale est :
8346
8347 @example
8348 guix environment @var{options} @var{paquet}@dots{}
8349 @end example
8350
8351 L'exemple suivant crée un nouveau shell préparé pour le développement de
8352 GNU@tie{}Guile :
8353
8354 @example
8355 guix environment guile
8356 @end example
8357
8358 Si les dépendances requises ne sont pas déjà construites, @command{guix
8359 environment} les construit automatiquement. L'environnement du nouveau
8360 shell est une version améliorée de l'environnement dans lequel @command{guix
8361 environment} a été lancé. Il contient les chemins de recherche nécessaires
8362 à la construction du paquet donné en plus des variables d'environnement
8363 existantes. Pour créer un environnement « pur », dans lequel les variables
8364 d'environnement de départ ont été nettoyées, utilisez l'option
8365 @code{--pure}@footnote{Les utilisateurs ajoutent parfois à tord des valeurs
8366 supplémentaires dans les variables comme @code{PATH} dans leur
8367 @file{~/.bashrc}. En conséquence, lorsque @code{guix environment} le lance,
8368 Bash peut lire @file{~/.bashrc}, ce qui produit des « impuretés » dans ces
8369 variables d'environnement. C'est une erreur de définir ces variables
8370 d'environnement dans @file{.bashrc} ; à la place, elles devraient être
8371 définie dans @file{.bash_profile}, qui est sourcé uniquement par les shells
8372 de connexion. @xref{Bash Startup Files,,, bash, The GNU Bash Reference
8373 Manual}, pour des détails sur les fichiers de démarrage de Bash.}.
8374
8375 @vindex GUIX_ENVIRONMENT
8376 @command{guix environment} définie la variable @code{GUIX_ENVIRONMENT} dans
8377 le shell qu'il crée ; sa valeur est le nom de fichier du profil de cet
8378 environnement. Cela permet aux utilisateur, disons, de définir un prompt
8379 spécifique pour les environnement de développement dans leur @file{.bashrc}
8380 (@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}) :
8381
8382 @example
8383 if [ -n "$GUIX_ENVIRONMENT" ]
8384 then
8385 export PS1="\u@@\h \w [dev]\$ "
8386 fi
8387 @end example
8388
8389 @noindent
8390 ...@: or to browse the profile:
8391
8392 @example
8393 $ ls "$GUIX_ENVIRONMENT/bin"
8394 @end example
8395
8396 En plus, plus d'un paquet peut être spécifié, auquel cas l'union des entrées
8397 des paquets données est utilisée. Par exemple, la commande ci-dessous crée
8398 un shell où toutes les dépendances de Guile et Emacs sont disponibles :
8399
8400 @example
8401 guix environment guile emacs
8402 @end example
8403
8404 Parfois, une session shell interactive est inutile. On peut invoquer une
8405 commande arbitraire en plaçant le jeton @code{--} pour séparer la commande
8406 du reste des arguments :
8407
8408 @example
8409 guix environment guile -- make -j4
8410 @end example
8411
8412 Dans d'autres situations, il est plus pratique de spécifier la liste des
8413 paquets requis dans l'environnement. Par exemple, la commande suivante
8414 lance @command{python} dans un environnement contenant Python@tie{}2.7 et
8415 NumPy :
8416
8417 @example
8418 guix environment --ad-hoc python2-numpy python-2.7 -- python
8419 @end example
8420
8421 En plus, on peut vouloir les dépendance d'un paquet et aussi des paquets
8422 supplémentaires qui ne sont pas des dépendances à l'exécution ou à la
8423 construction, mais qui sont utiles au développement tout de même. À cause
8424 de cela, le drapeau @code{--ad-hoc} est positionnel. Les paquets qui
8425 apparaissent avant @code{--ad-hoc} sont interprétés comme les paquets dont
8426 les dépendances seront ajoutées à l'environnement. Les paquets qui
8427 apparaissent après @code{--ad-hoc} sont interprétés comme les paquets à
8428 ajouter à l'environnement directement. Par exemple, la commande suivante
8429 crée un environnement de développement pour Guix avec les paquets Git et
8430 strace en plus :
8431
8432 @example
8433 guix environment guix --ad-hoc git strace
8434 @end example
8435
8436 Parfois il est souhaitable d'isoler l'environnement le plus possible, pour
8437 une pureté et une reproductibilité maximale. En particulier, lorsque vous
8438 utilisez Guix sur une distribution hôte qui n'est pas GuixSD, il est
8439 souhaitable d'éviter l'accès à @file{/usr/bin} et d'autres ressources du
8440 système depuis les environnements de développement. Par exemple, la
8441 commande suivante crée un REPL Guile dans un « conteneur » où seuls le dépôt
8442 et le répertoire de travail actuel sont montés :
8443
8444 @example
8445 guix environment --ad-hoc --container guile -- guile
8446 @end example
8447
8448 @quotation Remarque
8449 L'option @code{--container} requiert Linux-libre 3.19 ou supérieur.
8450 @end quotation
8451
8452 Les options disponibles sont résumées ci-dessous.
8453
8454 @table @code
8455 @item --root=@var{fichier}
8456 @itemx -r @var{fichier}
8457 @cindex environnement persistent
8458 @cindex racine du ramasse-miettes, pour les environnements
8459 Fait de @var{fichier} un lien symbolique vers le profil de cet
8460 environnement, et l'enregistre comme une racine du ramasse-miettes.
8461
8462 C'est utile si vous souhaitez protéger votre environnement du
8463 ramasse-miettes, pour le rendre « persistent ».
8464
8465 Lorsque cette option est omise, l'environnement n'est protégé du
8466 ramasse-miettes que le temps de la session @command{guix environment}. Cela
8467 signifie que la prochaine fois que vous créerez le même environnement, vous
8468 pourriez avoir à reconstruire ou télécharger des paquets. @xref{Invoquer guix gc}, pour plus d'informations sur les racines du GC.
8469
8470 @item --expression=@var{expr}
8471 @itemx -e @var{expr}
8472 Crée un environnement pour le paquet ou la liste de paquets en lesquels
8473 s'évalue @var{expr}.
8474
8475 Par exemple, lancer :
8476
8477 @example
8478 guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
8479 @end example
8480
8481 démarre un shell avec l'environnement pour cette variante spécifique du
8482 paquet PETSc.
8483
8484 Lancer :
8485
8486 @example
8487 guix environment --ad-hoc -e '(@@ (gnu) %base-packages)'
8488 @end example
8489
8490 démarre un shell où tous les paquets de base de GuixSD sont disponibles.
8491
8492 Les commande au-dessus n'utilisent que les sorties par défaut des paquets
8493 donnés. Pour choisir d'autres sorties, on peut spécifier des pairs :
8494
8495 @example
8496 guix environment --ad-hoc -e '(list (@@ (gnu packages bash) bash) "include")'
8497 @end example
8498
8499 @item --load=@var{fichier}
8500 @itemx -l @var{fichier}
8501 Crée un environnement pour le paquet ou la liste de paquets en lesquels
8502 @var{fichier} s'évalue.
8503
8504 Par exemple, @var{fichier} peut contenir une définition comme celle-ci
8505 (@pxref{Définition des paquets}) :
8506
8507 @example
8508 @verbatiminclude environment-gdb.scm
8509 @end example
8510
8511 @item --manifest=@var{fichier}
8512 @itemx -m @var{fichier}
8513 Crée un environnement pour les paquets contenus dans l'objet manifeste
8514 renvoyé par le code Scheme dans @var{fichier}.
8515
8516 C'est similaire à l'option de même nom de @command{guix package}
8517 (@pxref{profile-manifest, @option{--manifest}}) et utilise les même fichiers
8518 manifestes.
8519
8520 @item --ad-hoc
8521 Inclut tous les paquets spécifiés dans l'environnement qui en résulte, comme
8522 si un paquet @i{ad hoc} était spécifié, avec ces paquets comme entrées.
8523 Cette option est utile pour créer un environnement rapidement sans avoir à
8524 écrire une expression de paquet contenant les entrées désirées.
8525
8526 Par exemple la commande :
8527
8528 @example
8529 guix environment --ad-hoc guile guile-sdl -- guile
8530 @end example
8531
8532 lance @command{guile} dans un environnement où Guile et Guile-SDDL sont
8533 disponibles.
8534
8535 Remarquez que cet exemple demande implicitement la sortie par défaut de
8536 @code{guile} et @code{guile-sdl}, mais il est possible de demander une
8537 sortie spécifique — p.@: ex.@: @code{glib:bin} demande la sortie @code{bin}
8538 de @code{glib} (@pxref{Des paquets avec plusieurs résultats}).
8539
8540 Cette option peut être composée avec le comportement par défaut de
8541 @command{guix environment}. Les paquets qui apparaissent avant
8542 @code{--ad-hoc} sont interprétés comme les paquets dont les dépendances
8543 seront ajoutées à l'environnement, le comportement par défaut. Les paquets
8544 qui apparaissent après @code{--ad-hoc} sont interprétés comme les paquets à
8545 ajouter à l'environnement directement.
8546
8547 @item --pure
8548 Nettoie les variables d'environnement existantes lors de la construction du
8549 nouvel environnement. Cela a pour effet de créer un environnement dans
8550 lequel les chemins de recherche ne contiennent que des entrées de paquets.
8551
8552 @item --search-paths
8553 Affiche les définitions des variables d'environnement qui composent
8554 l'environnement.
8555
8556 @item --system=@var{système}
8557 @itemx -s @var{système}
8558 Essaye de construire pour @var{système} — p.@: ex.@: @code{i686-linux}.
8559
8560 @item --container
8561 @itemx -C
8562 @cindex conteneur
8563 Lance @var{commande} dans un conteneur isolé. Le répertoire de travail
8564 actuel en dehors du conteneur est monté dans le conteneur. En plus, à moins
8565 de le changer avec @code{--user}, un répertoire personnel fictif est créé
8566 pour correspondre à celui de l'utilisateur actuel et @file{/etc/passwod} est
8567 configuré en conséquence. Le processus est lancé en tant que l'utilisateur
8568 actuel en dehors du conteneur, mais a les privilèges root dans le contexte
8569 du conteneur.
8570
8571 @item --network
8572 @itemx -N
8573 Pour les conteneurs, partage l'espace de nom du réseau avec le système
8574 hôte. Les conteneurs créés sans cette option n'ont accès qu'à l'interface
8575 de boucle locale.
8576
8577 @item --link-profile
8578 @itemx -P
8579 Pour les conteneurs, lie le profil de l'environnement à
8580 @file{~/.guix-profile} dans le conteneur. C'est équivalent à lance la
8581 commande @command{ln -s $GUIX_ENVIRONMENT ~/.guix-profile} dans le
8582 conteneur. La liaison échouera et annulera l'environnement si le répertoire
8583 existe déjà, ce qui sera sans doute le cas si @command{guix environment} est
8584 invoqué dans le répertoire personnel de l'utilisateur.
8585
8586 Certains paquets sont configurés pour chercher des fichiers de configuration
8587 et des données dans @code{~/.guix-profile}@footnote{Par exemple, le paquet
8588 @code{fontconfig} inspecte @file{~/.guix-profile/share/fonts} pour trouver
8589 des polices supplémentaires.} ; @code{--link-profile} permet à ces
8590 programmes de se comporter comme attendu dans l'environnement.
8591
8592 @item --user=@var{utilisateur}
8593 @itemx -u @var{utilisateur}
8594 Pour les conteneurs, utilise le nom d'utilisateur @var{utilisateur} à la
8595 place de l'utilisateur actuel. L'entrée générée dans @file{/etc/passwod}
8596 dans le conteneur contiendra le nom @var{utilisateur} ; le répertoire
8597 personnel sera @file{/home/UTILISATEUR} ; et aucune donnée GECOS ne sera
8598 copiée. @var{utilisateur} n'a pas besoin d'exister sur le système.
8599
8600 En plus, tous les chemins partagés ou exposés (voir @code{--share} et
8601 @code{--expose} respectivement) dont la cible est dans le répertoire
8602 personnel de l'utilisateur seront remontés relativement à
8603 @file{/home/UTILISATEUR} ; cela comprend le montage automatique du
8604 répertoire de travail actuel.
8605
8606 @example
8607 # exposera les chemins comme /home/foo/wd, /home/foo/test et /home/foo/target
8608 cd $HOME/wd
8609 guix environment --container --user=foo \
8610 --expose=$HOME/test \
8611 --expose=/tmp/target=$HOME/target
8612 @end example
8613
8614 Bien que cela limite la fuite de l'identité de l'utilisateur à travers le
8615 chemin du répertoire personnel et des champs de l'utilisateur, ce n'est
8616 qu'un composant utile pour une solution d'anonymisation ou de préservation
8617 de la vie privée — pas une solution en elle-même.
8618
8619 @item --expose=@var{source}[=@var{cible}]
8620 Pour les conteneurs, expose le système de fichiers @var{source} du système
8621 hôte comme un système de fichiers en lecture seule @var{cible} dans le
8622 conteneur. Si @var{cible} n'est pas spécifiée, @var{source} est utilisé
8623 comme point de montage dans le conteneur.
8624
8625 L'exemple ci-dessous crée un REPL Guile dans un conteneur dans lequel le
8626 répertoire personnel de l'utilisateur est accessible en lecture-seule via le
8627 répertoire @file{/exchange} :
8628
8629 @example
8630 guix environment --container --expose=$HOME=/exchange --ad-hoc guile -- guile
8631 @end example
8632
8633 @item --share=@var{source}[=@var{cible}]
8634 Pour les conteneurs, partage le système de fichiers @var{soruce} du système
8635 hôte comme un système de fichiers en lecture-écriture @var{cible} dans le
8636 conteneur. Si @var{cible} n'est pas spécifiée, @var{source} est utilisée
8637 comme point de montage dans le conteneur.
8638
8639 L'exemple ci-dessous crée un REPL Guile dans un conteneur dans lequel le
8640 répertoire personnel de l'utilisateur est accessible en lecture-écriture via
8641 le répertoire @file{/exchange} :
8642
8643 @example
8644 guix environment --container --share=$HOME=/exchange --ad-hoc guile -- guile
8645 @end example
8646 @end table
8647
8648 @command{guix environment} supporte aussi toutes les options de construction
8649 que @command{guix build} supporte (@pxref{Options de construction communes}).
8650
8651
8652 @node Invoquer guix publish
8653 @section Invoquer @command{guix publish}
8654
8655 @cindex @command{guix publish}
8656 Le but de @command{guix publish} est de vous permettre de partager
8657 facilement votre dépôt avec d'autres personnes qui peuvent ensuite
8658 l'utiliser comme serveur de substituts (@pxref{Substituts}).
8659
8660 Lorsque @command{guix publish} est lancé, il crée un serveur HTTP qui permet
8661 à n'importe qui avec un accès réseau d'y récupérer des substituts. Cela
8662 signifie que toutes les machines qui font tourner Guix peuvent aussi agir
8663 comme une ferme de construction, puisque l'interface HTTP est compatible
8664 avec Hydra, le logiciel derrière la ferme de construction
8665 @code{hydra.gnu.org}.
8666
8667 Pour des raisons de sécurité, chaque substitut est signé, ce qui permet aux
8668 destinataires de vérifier leur authenticité et leur intégrité
8669 (@pxref{Substituts}). Comme @command{guix publish} utilise la clef de
8670 signature du système, qui n'est lisible que par l'administrateur système, il
8671 doit être lancé en root ; l'option @code{--user} lui fait baisser ses
8672 privilèges le plus tôt possible.
8673
8674 La pair de clefs pour les signatures doit être générée avant de lancer
8675 @command{guix publish}, avec @command{guix archive --generate-key}
8676 (@pxref{Invoquer guix archive}).
8677
8678 La syntaxe générale est :
8679
8680 @example
8681 guix publish @var{options}@dots{}
8682 @end example
8683
8684 Lancer @command{guix publish} sans arguments supplémentaires lancera un
8685 serveur HTTP sur le port 8080 :
8686
8687 @example
8688 guix publish
8689 @end example
8690
8691 Une fois qu'un serveur de publication a été autorisé (@pxref{Invoquer guix archive}), le démon peut télécharger des substituts à partir de lui :
8692
8693 @example
8694 guix-daemon --substitute-urls=http://example.org:8080
8695 @end example
8696
8697 Par défaut, @command{guix publish} compresse les archives à la volée quand
8698 il les sert. Ce mode « à la volée » est pratique puisqu'il ne demande
8699 aucune configuration et est disponible immédiatement. Cependant, lorsqu'il
8700 s'agit de servir beaucoup de clients, nous recommandons d'utiliser l'option
8701 @option{--cache}, qui active le cache des archives avant de les envoyer aux
8702 clients — voir les détails plus bas. La commande @command{guix weather}
8703 fournit un manière pratique de vérifier ce qu'un serveur fournit
8704 (@pxref{Invoquer guix weather}).
8705
8706 En bonus, @command{guix publish} sert aussi un miroir adressé par le contenu
8707 des fichiers source référencées dans les enregistrements @code{origin}
8708 (@pxref{Référence d'origine}). Par exemple, en supposant que @command{guix
8709 publish} tourne sur @code{example.org}, l'URL suivante renverra le fichie
8710 brut @file{hello-2.10.tar.gz} avec le hash SHA256 donné (représenté sous le
8711 format @code{nix-base32}, @pxref{Invoquer guix hash}) :
8712
8713 @example
8714 http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1@dots{}ndq1i
8715 @end example
8716
8717 Évidemment, ces URL ne fonctionnent que pour des fichiers dans le dépôt ;
8718 dans les autres cas, elles renvoie une erreur 404 (« Introuvable »).
8719
8720 @cindex journaux de construction, publication
8721 Les journaux de construction sont disponibles à partir des URL @code{/log}
8722 comme ceci :
8723
8724 @example
8725 http://example.org/log/gwspk@dots{}-guile-2.2.3
8726 @end example
8727
8728 @noindent
8729 Lorsque @command{guix-daemon} est configuré pour sauvegarder les journaux de
8730 construction compressés, comme c'est le cas par défaut (@pxref{Invoquer guix-daemon}), les URL @code{/log} renvoient le journal compressé tel-quel,
8731 avec un en-tête @code{Content-Type} ou @code{Content-Encoding} approprié.
8732 Nous recommandons de lancer @command{guix-daemon} avec
8733 @code{--log-compression=gzip} pace que les navigateurs web les décompressent
8734 automatiquement, ce qui n'est pas le cas avec la compression bzip2.
8735
8736 Les options suivantes sont disponibles :
8737
8738 @table @code
8739 @item --port=@var{port}
8740 @itemx -p @var{port}
8741 Écoute les requêtes HTTP sur le @var{port}
8742
8743 @item --listen=@var{hôte}
8744 Écoute sur l'interface réseau de @var{hôte}. Par défaut, la commande
8745 accepte les connexions de n'importe quelle interface.
8746
8747 @item --user=@var{utilisateur}
8748 @itemx -u @var{utilisateur}
8749 Charge les privilèges de @var{utilisateur} le plus vite possible —
8750 c.-à-d. une fois que la socket du serveur est ouverte et que la clef de
8751 signature a été lue.
8752
8753 @item --compression[=@var{niveau}]
8754 @itemx -C [@var{niveau}]
8755 Compresse les données au @var{niveau} donné. Lorsque le @var{niveau} est
8756 zéro, désactive la compression. L'intervalle 1 à 9 correspond aux
8757 différents niveaux de compression gzip : 1 est le plus rapide et 9 est la
8758 meilleure (mais gourmande en CPU). Le niveau par défaut est 3.
8759
8760 À moins que @option{--cache} ne soit utilisé, la compression se fait à la
8761 volée et les flux compressés ne sont pas cachés. Ainsi, pour réduire la
8762 charge sur la machine qui fait tourner @command{guix publish}, c'est une
8763 bonne idée de choisir un niveau de compression faible, de lancer
8764 @command{guix publish} derrière un serveur de cache ou d'utiliser
8765 @option{--cache}. Utilise @option{--cache} a l'avantage qu'il permet à
8766 @command{guix publish} d'ajouter l'en-tête HTTP @code{Content-Length} à sa
8767 réponse.
8768
8769 @item --cache=@var{répertoire}
8770 @itemx -c @var{répertoire}
8771 Cache les archives et les métadonnées (les URL @code{.narinfo}) dans
8772 @var{répertoire} et ne sert que les archives dans ce cache.
8773
8774 Lorsque cette option est omise, les archives et les métadonnées sont crées à
8775 la volée. Cela réduit la bande passante disponible, surtout quand la
8776 compression est activée puisqu'elle pourrait être limitée par le CPU. Un
8777 autre inconvénient au mode par défaut est que la taille des archives n'est
8778 pas connue à l'avance, donc @command{guix publish} n'ajoute pas l'en-tête
8779 @code{Content-Length} à ses résponses, ce qui empêche les clients de savoir
8780 la quantité de données à télécharger.
8781
8782 À l'inverse, lorsque @option{--cache} est utilisée, la première requête pour
8783 un élément du dépôt (via une URL @code{.narinfo}) renvoie une erreur 404 et
8784 déclenche la création de l'archive — en calculant son @code{.narinfo} et en
8785 compressant l'archive au besoin. Une fois l'archive cachée dans
8786 @var{répertoire}, les requêtes suivantes réussissent et sont servies
8787 directement depuis le cache, ce qui garanti que les clients ont la meilleure
8788 bande passante possible.
8789
8790 Le processus de création est effectué par des threads de travail. Par
8791 défaut, un thread par cœur du CPU est créé, mais cela peut être
8792 personnalisé. Voir @option{--workers} plus bas.
8793
8794 Lorsque l'option @option{--ttl} est utilisée, les entrées cachées sont
8795 automatiquement supprimées lorsqu'elles expirent.
8796
8797 @item --workers=@var{N}
8798 Lorsque @option{--cache} est utilisée, demande l'allocation de @var{N}
8799 thread de travail pour créer les archives.
8800
8801 @item --ttl=@var{ttl}
8802 Produit des en-têtes HTTP @code{Cache-Control} qui expriment une durée de
8803 vie (TTL) de @var{ttl}. @var{ttl} peut dénoter une durée : @code{5d}
8804 signifie 5 jours, @code{1m} signifie un mois, etc.
8805
8806 Cela permet au Guix de l'utilisateur de garder les informations en cache
8807 pendant @var{ttl}. Cependant, remarquez que @code{guix publish} ne garanti
8808 pas lui-même que les éléments du dépôt qu'il fournit seront toujours
8809 disponible pendant la durée @var{ttl}.
8810
8811 En plus, lorsque @option{--cache} est utilisée, les entrées cachées qui
8812 n'ont pas été demandé depuis @var{ttl} et n'ont pas d'élément correspondant
8813 dans le dépôt peuvent être supprimées.
8814
8815 @item --nar-path=@var{chemin}
8816 Utilise @var{chemin} comme préfixe des URL de fichier « nar »
8817 (@pxref{Invoquer guix archive, normalized archives}).
8818
8819 Par défaut, les nars sont présents à l'URL comme
8820 @code{/nar/gzip/@dots{}-coreutils-8.25}. Cette option vous permet de
8821 changer la partie @code{/nar} en @var{chemin}.
8822
8823 @item --public-key=@var{fichier}
8824 @itemx --private-key=@var{fichier}
8825 Utilise les @var{fichier}s spécifiques comme pair de clefs utilisées pour
8826 signer les éléments avant de les publier.
8827
8828 Les fichiers doivent correspondre à la même pair de clefs (la clef privée
8829 est utilisée pour signer et la clef publique est seulement ajouté aux
8830 métadonnées de la signature). Ils doivent contenir les clefs dans le format
8831 s-expression canonique produit par @command{guix archive --generate-key}
8832 (@pxref{Invoquer guix archive}). Par défaut,
8833 @file{/etc/guix/signing-key.pub} et @file{/etc/guix/signing-key.sec} sont
8834 utilisés.
8835
8836 @item --repl[=@var{port}]
8837 @itemx -r [@var{port}]
8838 Crée un serveur REPL Guile (@pxref{REPL Servers,,, guile, GNU Guile
8839 Reference Manual}) sur @var{pport} (37146 par défaut). C'est surtout utile
8840 pour déboguer un serveur @command{guix publish} qui tourne.
8841 @end table
8842
8843 Activer @command{guix publish} sur un système GuixSD est vraiment une seule
8844 ligne : instantiez simplement un service @code{guix-publish-service-type}
8845 dans le champs @code{services} de votre déclaration @code{operating-system}
8846 (@pxref{guix-publish-service-type, @code{guix-publish-service-type}}).
8847
8848 Si vous avez installé Guix sur une « distro extérieure », suivez ces
8849 instructions :
8850
8851 @itemize
8852 @item
8853 Si votre distro hôte utilise le système d'init systemd :
8854
8855 @example
8856 # ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \
8857 /etc/systemd/system/
8858 # systemctl start guix-publish && systemctl enable guix-publish
8859 @end example
8860
8861 @item
8862 Si votre distribution hôte utilise le système d'initialisation Upstart :
8863
8864 @example
8865 # ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/
8866 # start guix-publish
8867 @end example
8868
8869 @item
8870 Sinon, procédez de manière similaire avec votre système d'init de votre
8871 distro.
8872 @end itemize
8873
8874 @node Invoquer guix challenge
8875 @section Invoquer @command{guix challenge}
8876
8877 @cindex constructions reproductibles
8878 @cindex constructions vérifiables
8879 @cindex @command{guix challenge}
8880 @cindex défi
8881 Est-ce que les binaires fournis par ce serveur correspondent réellement au
8882 code source qu'il dit avoir construit ? Est-ce que le processus de
8883 construction d'un paquet est déterministe ? Ce sont les question auxquelles
8884 la commande @command{guix challenge} essaye de répondre.
8885
8886 La première question est évidemment importante : avant d'utiliser un serveur
8887 de substituts (@pxref{Substituts}), il vaut mieux @emph{vérifier} qu'il
8888 fournit les bons binaires et donc le @emph{défier}. La deuxième est ce qui
8889 permet la première : si les constructions des paquets sont déterministes
8890 alors des constructions indépendantes du paquet devraient donner le même
8891 résultat, bit à bit ; si un serveur fournit un binaire différent de celui
8892 obtenu localement, il peut être soit corrompu, soit malveillant.
8893
8894 On sait que le hash qui apparaît dans @file{/gnu/store} est le hash de
8895 toutes les entrées du processus qui construit le fichier ou le répertoire —
8896 les compilateurs, les bibliothèques, les scripts de construction,
8897 etc. (@pxref{Introduction}). En supposant que les processus de construction
8898 sont déterministes, un nom de fichier dans le dépôt devrait correspondre
8899 exactement à une sortie de construction. @command{guix challenge} vérifie
8900 si il y a bien effectivement une seule correspondance en comparant les
8901 sorties de plusieurs constructions indépendantes d'un élément du dépôt
8902 donné.
8903
8904 La sortie de la commande ressemble à :
8905
8906 @smallexample
8907 $ guix challenge --substitute-urls="https://hydra.gnu.org https://guix.example.org"
8908 mise à jour de la liste des substituts depuis 'https://hydra.gnu.org'... 100.0%
8909 mise à jour de la liste des substituts depuis 'https://guix.example.org'... 100.0%
8910 le contenu de /gnu/store/@dots{}-openssl-1.0.2d diffère :
8911 empreinte locale : 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
8912 https://hydra.gnu.org/nar/@dots{}-openssl-1.0.2d : 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
8913 https://guix.example.org/nar/@dots{}-openssl-1.0.2d : 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim
8914 le contenu de /gnu/store/@dots{}-git-2.5.0 diffère :
8915 empreinte locale : 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha
8916 https://hydra.gnu.org/nar/@dots{}-git-2.5.0 : 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f
8917 https://guix.example.org/nar/@dots{}-git-2.5.0 : 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73
8918 le contenu de /gnu/store/@dots{}-pius-2.1.1 diffère :
8919 empreinte locale : 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
8920 https://hydra.gnu.org/nar/@dots{}-pius-2.1.1 : 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
8921 https://guix.example.org/nar/@dots{}-pius-2.1.1 : 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs
8922
8923 @dots{}
8924
8925 6,406 éléments du dépôt ont été analysés :
8926 - 4,749 (74.1%) étaient identiques
8927 - 525 (8.2%) étaient différents
8928 - 1,132 (17.7%) étaient impossibles à évaluer
8929 @end smallexample
8930
8931 @noindent
8932 Dans cet exemple, @command{guix challenge} scanne d'abord le dépôt pour
8933 déterminer l'ensemble des dérivations construites localement — en opposition
8934 aux éléments qui ont été téléchargées depuis un serveur de substituts — puis
8935 demande leur avis à tous les serveurs de substituts. Il rapporte ensuite
8936 les éléments du dépôt pour lesquels les serveurs ont obtenu un résultat
8937 différent de la construction locale.
8938
8939 @cindex non-déterminisme, dans les constructions des paquets
8940 Dans l'exemple, @code{guix.example.org} obtient toujours une réponse
8941 différente. Inversement, @code{hydra.gnu.org} est d'accord avec les
8942 constructions locale, sauf dans le cas de Git. Cela peut indiquer que le
8943 processus de construction de Git est non-déterministe, ce qui signifie que
8944 sa sortie diffère en fonction de divers choses que Guix ne contrôle pas
8945 parfaitement, malgré l'isolation des constructions (@pxref{Fonctionnalités}). Les
8946 sources les plus communes de non-déterminisme comprennent l'ajout
8947 d'horodatage dans les résultats des constructions, l'inclusion de nombres
8948 aléatoires et des listes de fichiers ordonnés par numéro d'inœud. Voir
8949 @uref{https://reproducible-builds.org/docs/}, pour plus d'informations.
8950
8951 Pour trouver ce qui ne va pas avec le binaire de Git, on peut faire quelque
8952 chose comme cela (@pxref{Invoquer guix archive}) :
8953
8954 @example
8955 $ wget -q -O - https://hydra.gnu.org/nar/@dots{}-git-2.5.0 \
8956 | guix archive -x /tmp/git
8957 $ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git
8958 @end example
8959
8960 Cette commande montre les différences entre les fichiers qui résultent de la
8961 construction locale et des fichiers qui résultent de la construction sur
8962 @code{hydra.gnu.org} (@pxref{Overview, Comparing and Merging Files,,
8963 diffutils, Comparing and Merging Files}). La commande @command{diff}
8964 fonctionne bien avec des fichiers texte. Lorsque des fichiers binaires
8965 diffèrent cependant, @uref{https://diffoscope.org/, Diffoscope} est une
8966 meilleure option. C'est un outil qui aide à visualiser les différences
8967 entre toute sorte de fichiers.
8968
8969 Une fois que vous avez fait ce travail, vous pourrez dire si les différences
8970 sont dues au non-déterminisme du processus de construction ou à la
8971 malhonnêteté du serveur. Nous avons fait beaucoup d'effort pour éliminer
8972 les sources de non-déterminisme dans les paquets pour rendre plus facile la
8973 vérification des substituts, mais bien sûr, c'est un processus qui
8974 n'implique pas que Guix, mais une grande partie de la communauté des
8975 logiciels libres. Pendant ce temps, @command{guix challenge} est un outil
8976 pour aider à corriger le problème.
8977
8978 Si vous écrivez un paquet pour Guix, nous vous encourageons à vérifier si
8979 @code{hydra.gnu.org} et d'autres serveurs de substituts obtiennent le même
8980 résultat que vous avec :
8981
8982 @example
8983 $ guix challenge @var{paquet}
8984 @end example
8985
8986 @noindent
8987 où @var{paquet} est une spécification de paquet comme @code{guile@@2.0} ou
8988 @code{glibc:debug}.
8989
8990 La syntaxe générale est :
8991
8992 @example
8993 guix challenge @var{options} [@var{paquets}@dots{}]
8994 @end example
8995
8996 Lorsqu'une différence est trouvée entre l'empreinte d'un élément construit
8997 localement et celle d'un substitut fournit par un serveur, ou parmi les
8998 substituts fournis par différents serveurs, la commande l'affiche comme dans
8999 l'exemple ci-dessus et sa valeur de sortie est 2 (les autres valeurs
9000 différentes de 0 indiquent d'autres sortes d'erreurs).
9001
9002 L'option qui compte est :
9003
9004 @table @code
9005
9006 @item --substitute-urls=@var{urls}
9007 Considère @var{urls} comme la liste des URL des sources de substituts
9008 séparés par des espaces avec lesquels comparer les paquets locaux.
9009
9010 @item --verbose
9011 @itemx -v
9012 Montre des détails sur les correspondances (contenu identique) en plus des
9013 informations sur différences.
9014
9015 @end table
9016
9017 @node Invoquer guix copy
9018 @section Invoquer @command{guix copy}
9019
9020 @cindex copier des éléments du dépôt par SSH
9021 @cindex SSH, copie d'éléments du dépôt
9022 @cindex partager des éléments du dépôt entre plusieurs machines
9023 @cindex transférer des éléments du dépôt entre plusieurs machines
9024 La commande @command{guix copy} copie des éléments du dépôt d'une machine
9025 vers le dépôt d'une autre machine à travers une connexion SSH@footnote{Cette
9026 commande n'est disponible que si Guile-SSH est trouvé. @xref{Prérequis},
9027 pour des détails}. Par exemple, la commande suivante copie le paquet
9028 @code{coreutils}, le profil utilisateur et toutes leurs dépendances sur
9029 @var{hôte}, en tant qu'utilisateur @var{utilisateur} :
9030
9031 @example
9032 guix copy --to=@var{utilisateur}@@@var{hôte} \
9033 coreutils `readlink -f ~/.guix-profile`
9034 @end example
9035
9036 Si certains éléments à copier sont déjà présents sur @var{hôte}, ils ne sont
9037 pas envoyés.
9038
9039 La commande ci-dessous récupère @code{libreoffice} et @code{gimp} depuis
9040 @var{hôte}, en supposant qu'ils y sont présents :
9041
9042 @example
9043 guix copy --from=@var{hôte} libreoffice gimp
9044 @end example
9045
9046 La connexion SSH est établie avec le client Guile-SSH, qui set compatible
9047 avec OpenSSH : il honore @file{~/.ssh/known_hosts} et @file{~/.ssh/config}
9048 et utilise l'agent SSH pour l'authentification.
9049
9050 La clef utilisée pour signer les éléments qui sont envoyés doit être
9051 acceptée par la machine distante. De même, la clef utilisée pour la machine
9052 distante depuis laquelle vous récupérez des éléments doit être dans
9053 @file{/etc/guix/acl} pour qu'ils soient acceptés par votre propre démon.
9054 @xref{Invoquer guix archive}, pour plus d'informations sur
9055 l'authentification des éléments du dépôt.
9056
9057 La syntaxe générale est :
9058
9059 @example
9060 guix copy [--to=@var{spec}|--from=@var{spec}] @var{items}@dots{}
9061 @end example
9062
9063 Vous devez toujours spécifier l'une des options suivantes :
9064
9065 @table @code
9066 @item --to=@var{spec}
9067 @itemx --from=@var{spec}
9068 Spécifie l'hôte où envoyer ou d'où recevoir les éléments. @var{spec} doit
9069 être une spécification SSH comme @code{example.org},
9070 @code{charlie@@example.org} ou @code{charlie@@example.org:2222}.
9071 @end table
9072
9073 L'option @var{items} peut être des noms de paquets, comme @code{gimp} ou des
9074 éléments du dépôt comme @file{/gnu/store/@dots{}-idutils-4.6}.
9075
9076 Lorsque vous spécifiez le nom d'un paquet à envoyer, il est d'abord
9077 construit au besoin, sauf si l'option @option{--dry-run} est spécifiée. Les
9078 options de construction communes sont supportées (@pxref{Options de construction communes}).
9079
9080
9081 @node Invoquer guix container
9082 @section Invoquer @command{guix container}
9083 @cindex conteneur
9084 @cindex @command{guix container}
9085 @quotation Remarque
9086 À la version @value{VERSION}, cet outil est toujours expérimental.
9087 L'interface est sujette à changement radicaux dans le futur.
9088 @end quotation
9089
9090 Le but de @command{guix container} est de manipuler des processus qui
9091 tournent dans un environnement séparé, connus sous le nom de « conteneur »,
9092 typiquement créés par les commandes @command{guix environment}
9093 (@pxref{Invoquer guix environment}) et @command{guix system container}
9094 (@pxref{Invoquer guix system}).
9095
9096 La syntaxe générale est :
9097
9098 @example
9099 guix container @var{action} @var{options}@dots{}
9100 @end example
9101
9102 @var{action} spécifie les opérations à effectuer avec un conteneur, et
9103 @var{options} spécifie les arguments spécifiques au contexte pour l'action.
9104
9105 Les actions suivantes sont disponibles :
9106
9107 @table @code
9108 @item exec
9109 Exécute une commande dans le contexte d'un conteneur lancé.
9110
9111 La syntaxe est :
9112
9113 @example
9114 guix container exec @var{pid} @var{programme} @var{arguments}@dots{}
9115 @end example
9116
9117 @var{pid} spécifie le PID du conteneur lancé. @var{programme} spécifie le
9118 nom du fichier exécutable dans le système de fichiers racine du conteneur.
9119 @var{arguments} sont les options supplémentairesà passer à @var{programme}.
9120
9121 La commande suivante lance un shell de connexion interactif dans un
9122 conteneur GuixSD, démarré par @command{guix system container} et dont le PID
9123 est 9001 :
9124
9125 @example
9126 guix container exec 9001 /run/current-system/profile/bin/bash --login
9127 @end example
9128
9129 Remarquez que @var{pid} ne peut pas être le processus parent d'un
9130 conteneur. Ce doit être le PID 1 du conteneur ou l'un de ses processus
9131 fils.
9132
9133 @end table
9134
9135 @node Invoquer guix weather
9136 @section Invoquer @command{guix weather}
9137
9138 Vous pouvez parfois grogner lorsque les substituts ne sont pas disponibles
9139 et que vous devez construire les paquets vous-même (@pxref{Substituts}). La
9140 commande @command{guix weather} rapporte la disponibilité des substituts sur
9141 les serveurs spécifiés pour que vous sachiez si vous allez raller
9142 aujourd'hui. Cela peut parfois être une information utile pour les
9143 utilisateurs, mais elle est surtout utile pour les personnes qui font
9144 tourner @command{guix publish} (@pxref{Invoquer guix publish}).
9145
9146 @cindex statistiques sur les substituts
9147 @cindex disponibilité des substituts
9148 @cindex substuts, disponibilité
9149 @cindex weather, disponibilité des substituts
9150 Voici un exemple :
9151
9152 @example
9153 $ guix weather --substitute-urls=https://guix.example.org
9154 calcul de 5,872 dérivations de paquets pour x86_64-linux…
9155 recherche de 6,128 éléments du dépôt sur https://guix.example.org…
9156 mise à jour de la liste des substituts depuis 'https://guix.example.org'... 100.0%
9157 https://guix.example.org
9158 43.4% substituts disponibles (2,658 sur 6,128)
9159 7,032.5 Mo de fichiers nar (compressés)
9160 19,824.2 Mo sur le disque (décompressés)
9161 0.030 secondes par requêtes (182.9 secondes au total)
9162 33.5 requêtes par seconde
9163
9164 9.8% (342 sur 3,470) des éléments manquants sont dans la queue
9165 867 constructions dans la queue
9166 x86_64-linux : 518 (59.7%)
9167 i686-linux : 221 (25.5%)
9168 aarch64-linux : 128 (14.8%)
9169 vitesse de construction : 23.41 constructions par heure
9170 x86_64-linux : 11.16 constructions par heure
9171 i686-linux : 6.03 constructions par heure
9172 aarch64-linux : 6.41 constructions par heure
9173 @end example
9174
9175 @cindex intégration continue, statistiques
9176 Comme vous pouvez le voir, elle rapporte le pourcentage des paquets pour
9177 lesquels des substituts sont disponibles sur le serveur — indépendamment du
9178 fait que les substituts soient activés, et indépendamment du fait que la
9179 clef de signature du serveur soit autorisée. Elle rapporte aussi la taille
9180 des archives compressées fournies par le serveur, la taille des éléments du
9181 dépôt correspondant dans le dépôt (en supposant que la déduplication soit
9182 désactivée) et la vitesse du serveur. La deuxième partie donne des
9183 statistiques sur l'intégration continue (CI), si le serveur le supporte.
9184
9185 Pour cela, @command{guix weather} récupère par HTTP(S) les métadonnées
9186 (@dfn{narinfos}@ de tous les éléments du dépôts pertinents. Comme
9187 @command{guix challenge}, il ignore les signatures de ces substituts, ce qui
9188 n'est pas dangereux puisque la commande ne fait que récupérer des
9189 statistiques et n'installe pas ces substituts.
9190
9191 Entre autres choses, il est possible de demander des types de système
9192 particuliers et des ensembles de paquets particuliers. Les options
9193 disponibles sont listées plus bas.
9194
9195 @table @code
9196 @item --substitute-urls=@var{urls}
9197 @var{urls} est la liste des URL des serveurs de substituts séparés par des
9198 espaces. Lorsque cette option n'est pas renseignée, l'ensemble des serveurs
9199 de substituts par défaut est utilisé.
9200
9201 @item --system=@var{système}
9202 @itemx -s @var{système}
9203 Effectue des requêtes pour les substituts @var{système} — p.@: ex.@:
9204 @code{aarch64-linux}. Cette option peut être répétée, auquel cas
9205 @command{guix weather} demandera les substituts de plusieurs types de
9206 systèmes.
9207
9208 @item --manifest=@var{fichier}
9209 Plutôt que de demander des substituts pour tous les paquets, demande
9210 uniquement les paquets spécifiés dans @var{fichier}. @var{fichier} doit
9211 contenir un @dfn{manifeste} comme avec l'option @code{-m} de @command{guix
9212 package} (@pxref{Invoquer guix package}).
9213 @end table
9214
9215 @node Invoquer guix processes
9216 @section Invoquer @command{guix processes}
9217
9218 La commande @command{guix processes} peut être utile pour les développeurs
9219 et les administrateurs systèmes, surtout sur des machines multi-utilisateurs
9220 et sur les fermes de construction : elle liste les sessions actuelles (les
9221 connexions au démon), ainsi que des informations sur les processus en
9222 question@footnote{Les sessions distantes, lorsque @command{guix-daemon} est
9223 démarré avec @option{--listen} en spécifiant un point d'entrée TCP, ne sont
9224 @emph{pas} listées.}. Voici un exemple des informations qu'elle renvoie :
9225
9226 @example
9227 $ sudo guix processes
9228 SessionPID: 19002
9229 ClientPID: 19090
9230 ClientCommand: guix environment --ad-hoc python
9231
9232 SessionPID: 19402
9233 ClientPID: 19367
9234 ClientCommand: guix publish -u guix-publish -p 3000 -C 9 @dots{}
9235
9236 SessionPID: 19444
9237 ClientPID: 19419
9238 ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
9239 LockHeld: /gnu/store/@dots{}-perl-ipc-cmd-0.96.lock
9240 LockHeld: /gnu/store/@dots{}-python-six-bootstrap-1.11.0.lock
9241 LockHeld: /gnu/store/@dots{}-libjpeg-turbo-2.0.0.lock
9242 ChildProcess: 20495: guix offload x86_64-linux 7200 1 28800
9243 ChildProcess: 27733: guix offload x86_64-linux 7200 1 28800
9244 ChildProcess: 27793: guix offload x86_64-linux 7200 1 28800
9245 @end example
9246
9247 Dans cet exemple, on voit que @command{guix-daemon} a trois clients directs
9248 : @command{guix environment}, @command{guix publish} et l'outil
9249 d'intégration continue Cuirass ; leur identifiant de processus (PID) est
9250 donné par le champ @code{ClientPID}. Le champ @code{SessionPID} fournit le
9251 PID du sous-processus @command{guix-daemon} de cette session particulière.
9252
9253 Les champs @code{LockHeld} montrent quels éléments du dépôt sont
9254 actuellement verrouillés par cette session, ce qui correspond aux éléments
9255 du dépôt qui sont en train d'être construits ou d'être substitués (le champ
9256 @code{LockHeld} n'est pas montré si @command{guix processes} n'est pas lancé
9257 en root). Enfin, en regardant le champ @code{ChildProcess}, on comprend que
9258 ces trois constructions sont déchargées (@pxref{Réglages du délestage du démon}).
9259
9260 La sortie est dans le format Recutils pour qu'on puisse utiliser la commande
9261 @command{recsel} pour sélectionner les sessions qui nous intéressent
9262 (@pxref{Selection Expressions,,, recutils, GNU recutils manual}). Par
9263 exemple, la commande montre la ligne de commande et le PID du client qui
9264 effectue la construction d'un paquet Perl :
9265
9266 @example
9267 $ sudo guix processes | \
9268 recsel -p ClientPID,ClientCommand -e 'LockHeld ~ "perl"'
9269 ClientPID: 19419
9270 ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
9271 @end example
9272
9273 @c *********************************************************************
9274 @node Distribution GNU
9275 @chapter Distribution GNU
9276
9277 @cindex Distribution Système Guix
9278 @cindex GuixSD
9279 Guix fournit aussi une distribution du système GNU contenant uniquement des
9280 logiciels libres@footnote{Le terme « libre » se réfère ici bien sûr à
9281 @url{http://www.gnu.org/philosophy/free-sw.fr.html,la liberté offerte à
9282 l'utilisateur de ces logiciels}.}. On peut installer la distribution
9283 elle-même (@pxref{Installation du système}), mais on peut aussi installer Guix
9284 comme gestionnaire de paquets par dessus un système GNU/Linux déjà installé
9285 (@pxref{Installation}). Pour distinguer ces deux cas, on appelle la
9286 distribution autonome « Distribution Système Guix » ou GuixSD.
9287
9288 la distribution fournit les paquets cœur de GNU comme la GNU libc, GCC et
9289 Binutils, ainsi que de nombreuses applications GNU et non-GNU. La liste
9290 complète des paquets disponibles se trouve
9291 @url{http://www.gnu.org/software/guix/packages,en ligne} ou en lançant
9292 @command{guix package} (@pxref{Invoquer guix package}) :
9293
9294 @example
9295 guix package --list-available
9296 @end example
9297
9298 Notre but est de fournir une distribution logicielle entièrement libre de
9299 GNU/Linux et d'autres variantes de GNU, en se concentrant sur la promotion
9300 et l'intégration étroite des composants GNU en insistant sur les programmes
9301 et les outils qui aident l'utilisateur à exercer ses libertés.
9302
9303 Les paquets sont actuellement disponibles pour les plateformes suivantes :
9304
9305 @table @code
9306
9307 @item x86_64-linux
9308 l'architecture Intel et AMD @code{x86_64} avec le noyau Linux-libre ;
9309
9310 @item i686-linux
9311 l'architecture Intel 32-bits (IA32) avec le noyau Linux-libre ;
9312
9313 @item armhf-linux
9314 l'architecture ARMv7-A avec gestion des flottants matérielle, Thumb-2 et
9315 NEON, avec l'interface binaire applicative (ABI) EABI hard-float et le noyau
9316 Linux-libre ;
9317
9318 @item aarch64-linux
9319 les processeurs ARMv8-A 64-bits en little-endian avec le noyau Linux-libre.
9320 Le support est actuellement expérimental et limité. @xref{Contribuer},
9321 pour savoir comment aider !
9322
9323 @item mips64el-linux
9324 les processeurs MIPS 64-bits little-endian, spécifiquement la série
9325 Loongson, ABI n32, avec le noyau Linux-libre.
9326
9327 @end table
9328
9329 GuixSD lui-même est actuellement disponible sur @code{i686} et
9330 @code{x86_64}.
9331
9332 @noindent
9333 Pour des informations sur comment porter vers d'autres architectures et
9334 d'autres noyau, @pxref{Porter}.
9335
9336 @menu
9337 * Installation du système:: Installer le système d'exploitation complet.
9338 * Configuration système:: Configurer le système d'exploitation.
9339 * Documentation:: Visualiser les manuels d'utilisateur des
9340 logiciels.
9341 * Installer les fichiers de débogage:: Nourrir le débogueur.
9342 * Mises à jour de sécurité:: Déployer des correctifs de sécurité
9343 rapidement.
9344 * Modules de paquets:: Les paquets du point de vu du programmeur.
9345 * Consignes d'empaquetage:: Faire grandir la distribution.
9346 * Bootstrapping:: GNU/Linux depuis zéro.
9347 * Porter:: Cibler une autre plateforme ou un autre noyau.
9348 @end menu
9349
9350 La construction de cette distribution est un effort collaboratif et nous
9351 vous invitons à nous rejoindre ! @xref{Contribuer}, pour des informations
9352 sur la manière de nous aider.
9353
9354 @node Installation du système
9355 @section Installation du système
9356
9357 @cindex installer GuixSD
9358 @cindex Distribution Système Guix
9359 Cette section explique comment installer la distribution système Guix
9360 (GuixSD) sur votre machine. Le gestionnaire de paquets Guix peut aussi être
9361 installé sur un système GNU/Linux déjà installé, @pxref{Installation}.
9362
9363 @ifinfo
9364 @quotation Remarque
9365 @c This paragraph is for people reading this from tty2 of the
9366 @c installation image.
9367 Vous lisez cette documentation avec un lecteur Info. Pour des détails sur
9368 son utilisation, appuyez sur la touche @key{ENTRÉE} (« Entrée » ou « à la
9369 ligne ») sur le lien suivant : @pxref{Top, Info reader,, info-stnd,
9370 Stand-alone GNU Info}. Appuyez ensuite sur @kbd{l} pour revenir ici.
9371
9372 Autrement, lancez @command{info info} dans un autre tty pour garder ce
9373 manuel ouvert.
9374 @end quotation
9375 @end ifinfo
9376
9377 @menu
9378 * Limitations:: Ce à quoi vous attendre.
9379 * Considérations matérielles:: Matériel supporté.
9380 * Installation depuis une clef USB ou un DVD:: Préparer le média
9381 d'installation.
9382 * Préparer l'installation:: Réseau, partitionnement, etc.
9383 * Effectuer l'installation:: Pour de vrai.
9384 * Installer GuixSD dans une VM:: Jouer avec GuixSD@.
9385 * Construire l'image d'installation:: D'où vient tout cela.
9386 @end menu
9387
9388 @node Limitations
9389 @subsection Limitations
9390
9391 À la version @value{VERSION}, la distribution système Guix (GuixSD) n'est
9392 pas prête pour la production. Elle peut contenir des bogues et ne pas avoir
9393 certaines fonctionnalités importantes. Ainsi, si vous cherche un système de
9394 production stable qui respecte votre liberté en tant qu'utilisateur, une
9395 bonne solution consiste à utiliser
9396 @url{http://www.gnu.org/distros/free-distros.html, une des distributions
9397 GNU/Linux mieux établie}. Nous espérons que vous pourrez bientôt passer à
9398 GuixSD sans peur, bien sûr. Pendant ce temps, vous pouvez aussi utiliser
9399 votre distribution actuelle et essayer le gestionnaire de paquet par dessus
9400 celle-ci (@pxref{Installation}).
9401
9402 Avant de procéder à l'installation, soyez conscient de ces limitations les
9403 plus importantes qui s'appliquent à la version @value{VERSION} :
9404
9405 @itemize
9406 @item
9407 Le procédé d'installation n'a pas d'interface utilisateur graphique et
9408 requiert une certaine familiarité avec GNU/Linux (voir les sous-sections
9409 suivantes pour avoir un aperçu de ce que cela signifie).
9410
9411 @item
9412 LVM (gestionnaire de volumes logiques) n'est pas supporté.
9413
9414 @item
9415 De plus en plus de services systèmes sont fournis (@pxref{Services}) mais
9416 certains manquent toujours cruellement.
9417
9418 @item
9419 Plus de 7@tie{}500 paquets sont disponibles, mais vous pourrez parfois
9420 trouver qu'un paquet utile est absent.
9421
9422 @item
9423 GNOME, Xfce, LXDE et Enlightenment sont disponibles (@pxref{Services de bureaux}), ainsi qu'un certain nombre de gestionnaires de fenêtres X11.
9424 cependant, certaines applications graphiques peuvent manquer, ainsi que KDE.
9425 @end itemize
9426
9427 Vous êtes avertis ! Mais plus qu'un avertissement, c'est une invitation à
9428 rapporter les problèmes (et vos succès !) et à nous rejoindre pour améliorer
9429 la distribution. @xref{Contribuer}, pour plus d'info.
9430
9431
9432 @node Considérations matérielles
9433 @subsection Considérations matérielles
9434
9435 @cindex support matériel sur GuixSD
9436 GNU@tie{}GuixSD se concentre sur le respect des libertés de ses
9437 utilisateurs. Il est construit autour du noyau Linux-libre, ce qui signifie
9438 que seuls les matériels pour lesquels des pilotes logiciels et des
9439 microgiciels libres sont disponibles sont supportés. De nos jours, une
9440 grande gamme de matériel qu'on peut acheter est supporté par GNU/Linux-libre
9441 — des claviers aux cartes graphiques en passant par les scanners et les
9442 contrôleurs Ethernet. Malheureusement, il reste des produit dont les
9443 fabriquants refusent de laisser le contrôle aux utilisateurs sur leur propre
9444 utilisation de l'ordinateur, et ces matériels ne sont pas supportés par
9445 GuixSD.
9446
9447 @cindex WiFi, support matériel
9448 L'un des types de matériels où les pilotes ou les microgiciels sont le moins
9449 disponibles sont les appareils WiFi. Les appareils WiFi connus pour
9450 fonctionner sont ceux qui utilisent des puces Atheros (AR9271 et AR7010) qui
9451 correspondent au pilote @code{ath9k} de Linux-libre, et ceux qui utilisent
9452 des puces Broadcom/AirForce (BCM43xx avec la révision Wireless-Core 5), qui
9453 correspondent au pilote @code{b43-open} de Linux-libre. Des microgiciels
9454 libres existent pour les deux et sont disponibles directement sur GuixSD,
9455 dans @var{%base-firmware} (@pxref{Référence de système d'exploitation,
9456 @code{firmware}}).
9457
9458 @cindex RYF, Respects Your Freedom
9459 La @uref{https://www.fsf.org/, Free Software Foundation} a un programme de
9460 certification nommé @uref{https://www.fsf.org/ryf, @dfn{Respects Your
9461 Freedom}} (RYF), pour les produits matériels qui respectent votre liberté et
9462 votre vie privée en s'assurant que vous avez le contrôle sur l'appareil.
9463 Nous vous encourageons à vérifier la liste des appareils certifiés par RYF.
9464
9465 Une autre ressource utile est le site web @uref{https://www.h-node.org/,
9466 H-Node}. Il contient un catalogue d'appareils avec des informations sur
9467 leur support dans GNU/Linux.
9468
9469
9470 @node Installation depuis une clef USB ou un DVD
9471 @subsection Installation depuis une clef USB ou un DVD
9472
9473 Une image d'installation ISO-9660 téléchargeable depuis
9474 @indicateurl{https://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{système}.iso.xz}
9475 peut être écrite sur une clef USB ou gravée sur un DVD, où @var{système} est
9476 l'une de ces valeurs :
9477
9478 @table @code
9479 @item x86_64-linux
9480 pour un système GNU/Linux sur un CPU compatible Intel/AMD 64-bits ;
9481
9482 @item i686-linux
9483 pour un système GNU/Linux sur un CPU compatible Intel 32-bits ;
9484 @end table
9485
9486 @c start duplication of authentication part from ``Binary Installation''
9487 Assurez-vous de télécharger les fichiers @file{.sig} associés et de vérifier
9488 l'authenticité de l'image avec, de cette manière :
9489
9490 @example
9491 $ wget https://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{system}.iso.xz.sig
9492 $ gpg --verify guixsd-install-@value{VERSION}.@var{system}.iso.xz.sig
9493 @end example
9494
9495 Si cette commande échoue parce que vous n'avez pas la clef publique requise,
9496 lancez cette commande pour l'importer :
9497
9498 @example
9499 $ gpg --keyserver @value{KEY-SERVER} \
9500 --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
9501 @end example
9502
9503 @noindent
9504 @c end duplication
9505 et relancez la commande @code{gpg --verify}.
9506
9507 Cette image contient les outils nécessaires à l'installation. Elle est
9508 faite pour être copiée @emph{telle quelle} sur une clef USB assez grosse ou
9509 un DVD.
9510
9511 @unnumberedsubsubsec Copie sur une clef USB
9512
9513 Pour copier l'image sur une clef USB, suivez ces étapes :
9514
9515 @enumerate
9516 @item
9517 Décompressez l'image avec la commande @command{xz} :
9518
9519 @example
9520 xz -d guixsd-install-@value{VERSION}.@var{système}.iso.xz
9521 @end example
9522
9523 @item
9524 Insérez la clef USB de 1@tie{}Gio ou plus dans votre machine et déterminez
9525 son nom d'appareil. En supposant que la clef usb est connue sous le nom de
9526 @file{/dev/sdX}, copiez l'image avec :
9527
9528 @example
9529 dd if=guixsd-install-@value{VERSION}.x86_64-linux.iso of=/dev/sdX
9530 sync
9531 @end example
9532
9533 Accéder à @file{/dev/sdX} requiert généralement les privilèges
9534 super-utilisateur.
9535 @end enumerate
9536
9537 @unnumberedsubsubsec Graver sur un DVD
9538
9539 Pour copier l'image sur un DVD, suivez ces étapes :
9540
9541 @enumerate
9542 @item
9543 Décompressez l'image avec la commande @command{xz} :
9544
9545 @example
9546 xz -d guixsd-install-@value{VERSION}.@var{système}.iso.xz
9547 @end example
9548
9549 @item
9550 Insérez un DVD vierge dans votre machine et déterminez son nom d'appareil.
9551 En supposant que le DVD soit connu sont le nom de @file{/dev/srX}, copiez
9552 l'image avec :
9553
9554 @example
9555 growisofs -dvd-compat -Z /dev/srX=guixsd-install-@value{VERSION}.x86_64.iso
9556 @end example
9557
9558 Accéder à @file{/dev/srX} requiert généralement les privilèges
9559 super-utilisateur.
9560 @end enumerate
9561
9562 @unnumberedsubsubsec Démarrage
9563
9564 Une fois que c'est fait, vous devriez pouvoir redémarrer le système et
9565 démarrer depuis la clef USB ou le DVD. Pour cela, vous devrez généralement
9566 entrer dans le menu de démarrage BIOS ou UEFI, où vous pourrez choisir de
9567 démarrer sur la clef USB.
9568
9569 @xref{Installer GuixSD dans une VM}, si, à la place, vous souhaitez installer
9570 GuixSD dans une machine virtuelle (VM).
9571
9572
9573 @node Préparer l'installation
9574 @subsection Préparer l'installation
9575
9576 Une fois que vous avez démarré votre ordinateur sur le média d'installation,
9577 vous devriez vous retrouver sur un prompt en root. Plusieurs TTY sont
9578 configurées et peuvent être utilisés pour lancer des commandes en root. Le
9579 TTY2 affiche cette documentation, dans la quelle vous pouvez naviguer avec
9580 les commandes du lecteur Info (@pxref{Top,,, info-stnd, Stand-alone GNU
9581 Info}). Le démon de souris GPM tourne sur le système d'installation, ce qui
9582 vous permet de sélectionner du texte avec le bouton gauche de la souris et
9583 de le coller en appuyant sur la molette.
9584
9585 @quotation Remarque
9586 L'installation nécessite un accès au réseau pour que les dépendances
9587 manquantes de votre configuration système puissent être téléchargées. Voyez
9588 la section « réseau » plus bas.
9589 @end quotation
9590
9591 Le système d'installation inclus plusieurs outils usuels pour requis pour
9592 cette tâche. Mais c'est aussi un système GuixSD complet, ce qui signifie
9593 que vous pouvez installer des paquets supplémentaires si vous en avez
9594 besoin, avec @command{guix package} (@pxref{Invoquer guix package}).
9595
9596 @subsubsection Disposition du clavier
9597
9598 @cindex disposition du clavier
9599 L'image d'installation utilise la disposition clavier qwerty (US). Si vous
9600 voulez la changer, vous pouvez utiliser la commande @command{loadkeys}. Par
9601 exemple, la commande suivante sélectionne la disposition Dvorak :
9602
9603 @example
9604 loadkeys dvorak
9605 @end example
9606
9607 Consultez les fichiers dans @file{/run/current-system/profile/share/keymaps}
9608 pour trouver une liste des dispositions disponibles. Lancez @command{man
9609 loadkey} pour plus d'informations.
9610
9611 @subsubsection Réseau
9612
9613 Lancez la commande suivante pour voir comment vos interfaces réseau sont
9614 appelées :
9615
9616 @example
9617 ifconfig -a
9618 @end example
9619
9620 @noindent
9621 @dots{} ou, avec la commande spécifique à GNU/Linux @command{ip} :
9622
9623 @example
9624 ip a
9625 @end example
9626
9627 @c http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
9628 Les interfaces filaires ont un nom qui commence par @samp{e} ; par exemple,
9629 l'interface qui correspond au premier contrôleur Ethernet sur la carte mère
9630 est appelé @samp{eno1}. Les interfaces sans-fil ont un nom qui commence par
9631 @samp{w}, comme @samp{w1p2s0}.
9632
9633 @table @asis
9634 @item Connexion filaire
9635 Pour configure une connexion filaire, lancez la commande suivante, en
9636 remplaçant @var{interface} par le nom de l'interface filaire que vous voulez
9637 utiliser.
9638
9639 @example
9640 ifconfig @var{interface} up
9641 @end example
9642
9643 @item Connexion sans-fil
9644 @cindex sans-fil
9645 @cindex WiFi
9646 Pour configurer le réseau sans-fil, vous pouvez créer un fichier de
9647 configuration pour l'outil de configuration @command{wpa_supplicant} (son
9648 emplacement importe peu) avec l'un des éditeurs de texte disponibles comme
9649 @command{nano} :
9650
9651 @example
9652 nano wpa_supplicant.conf
9653 @end example
9654
9655 Par exemple, la déclaration qui suit peut aller dans ce fichier et
9656 fonctionnera pour plusieurs réseaux sans-fil, si vous donnez le vrai SSID et
9657 la phrase de passe pour le réseau auquel vous vous connectez :
9658
9659 @example
9660 network=@{
9661 ssid="@var{mon-ssid}"
9662 key_mgmt=WPA-PSK
9663 psk="la phrase de passe secrète du réseau"
9664 @}
9665 @end example
9666
9667 Démarrez le service sans-file et lancez-le en tache de fond avec la commande
9668 suivante (en remplaçant @var{interface} par le nom de l'interface réseau que
9669 vous voulez utiliser) :
9670
9671 @example
9672 wpa_supplicant -c wpa_supplicant.conf -i @var{interface} -B
9673 @end example
9674
9675 Lancez @command{man wpa_supplicant} pour plus d'informations.
9676 @end table
9677
9678 @cindex DHCP
9679 À partir de ce moment, vous avez besoin d'une adresse IP. Sur les réseaux
9680 où les IP sont automatiquement attribuée par DHCP, vous pouvez lancer :
9681
9682 @example
9683 dhclient -v @var{interface}
9684 @end example
9685
9686 Essayez de pinger un serveur pour voir si le réseau fonctionne :
9687
9688 @example
9689 ping -c 3 gnu.org
9690 @end example
9691
9692 Mettre en place un accès réseau est presque toujours une nécessité parce que
9693 l'image ne contient pas tous les logiciels et les outils dont vous pourriez
9694 avoir besoin.
9695
9696 @cindex installer par SSH
9697 Si vous le souhaitez, vous pouvez continuer l'installation à distance en
9698 démarrant un serveur SSH :
9699
9700 @example
9701 herd start ssh-daemon
9702 @end example
9703
9704 Assurez-vous soit de définir un mot de passe avec @command{passwd}, soit de
9705 configurer l'authentification par clef OpenSSH avant de vous connecter.
9706
9707 @subsubsection Partitionnement
9708
9709 À moins que vous ne l'ayez déjà fait, l'étape suivante consiste à
9710 partitionner le disque puis à formater les partitions cibles.
9711
9712 L'image d'installation inclus plusieurs outils de partitionnement, dont
9713 Parted (@pxref{Overview,,, parted, GNU Parted User Manual}),
9714 @command{fdisk}, et @command{cfdisk}. Lancez-en un et paramétrez votre
9715 disque avec le partitionnement qui vous convient :
9716
9717 @example
9718 cfdisk
9719 @end example
9720
9721 Si votre disque utilise le format des tables de partitions GUID (GPT) et que
9722 vous souhaitez installer un GRUB pour système BIOS (c'est le cas par
9723 défaut), assurez-vous de créer qu'une partition de démarrage BIOS soit bien
9724 disponible (@pxref{BIOS installation,,, grub, GNU GRUB manual}).
9725
9726 @cindex EFI, installation
9727 @cindex UEFI, installation
9728 @cindex ESP, partition système EFI
9729 Si vous souhaitez à la place utilise GRUB pour système EFI, vous devrez
9730 avoir une @dfn{partition système EFI} (ESP) en FAT32. Cette partition
9731 devrait être montée dans @file{/boot/efi} et doit avoir le drapeau
9732 @code{esp}. P.@: ex.@: pour @command{parted} :
9733
9734 @example
9735 parted /dev/sda set 1 esp on
9736 @end example
9737
9738 @quotation Remarque
9739 @vindex grub-bootloader
9740 @vindex grub-efi-bootloader
9741 Vous n'êtes pas sûr de savoir si vous devez utiliser un GRUB EFI ou BIOS ?
9742 Si le répertoire @file{/sys/firmware/efi} existe sur l'image d'installation,
9743 vous devriez probablement effectuer une installation EFI, avec
9744 @code{grub-efi-bootloader}. Sinon, vous devriez utiliser le GRUB en BIOS,
9745 @code{grub-bootloader}. @xref{Configuration du chargeur d'amorçage} pour plus
9746 d'information sur le chargeur d'amorçage.
9747 @end quotation
9748
9749 Une fois que vous avez fini le partitionnement du disque dur cible, vous
9750 devez créer un système de fichier sur les partitions@footnote{Actuellement
9751 GuixSD ne supporte que les systèmes de fichiers ext4 et btrfs. En
9752 particulier, le code qui lit les UUID des systèmes de fichiers et les
9753 étiquettes ne fonctionne que pour ces types de systèmes de fichiers.}. Pour
9754 l'ESP, si vous en avez une et en supposant que ce soit @file{/dev/sda1},
9755 lancez :
9756
9757 @example
9758 mkfs.fat -F32 /dev/sda1
9759 @end example
9760
9761 Préférez assigner une étiquette au système de fichier pour que vous puissiez
9762 vous y référer de manière fiable dans la déclaration @code{file-system}
9763 (@pxref{Systèmes de fichiers}). On le fait habituellement avec l'option @code{-L}
9764 de @command{mkfs.ext4} et des commandes liées. Donc, en supposant que la
9765 partition racine soit sur @file{/dev/sda2}, on peut créer un système de
9766 fichier avec pour étiquette @code{my-root} avec :
9767
9768 @example
9769 mkfs.ext4 -L my-root /dev/sda2
9770 @end example
9771
9772 @cindex chiffrement du disque
9773 Si vous voulez plutôt chiffrer la partition racine, vous pouvez utiliser les
9774 utilitaires Cryptsetup et LUKS pour cela (voir @inlinefmtifelse{html,
9775 @uref{https://linux.die.net/man/8/cryptsetup, @code{man cryptsetup}},
9776 @code{man cryptsetup}} pour plus d'informations). En supposant que vous
9777 voulez stocker la partition racine sur @file{/dev/sda2}, la séquence de
9778 commandes suivante vous mènerait à ce résultat :
9779
9780 @example
9781 cryptsetup luksFormat /dev/sda2
9782 cryptsetup open --type luks /dev/sda2 my-partition
9783 mkfs.ext4 -L my-root /dev/mapper/my-partition
9784 @end example
9785
9786 Une fois cela effectué, montez le système de fichier cible dans @file{/mnt}
9787 avec une commande comme (de nouveau, en supposant que @code{my-root} est
9788 l'étiquette du système de fichiers racine) :
9789
9790 @example
9791 mount LABEL=my-root /mnt
9792 @end example
9793
9794 Montez aussi tous les systèmes de fichiers que vous voudriez utiliser sur le
9795 système cible relativement à ce chemin. Si vous avez un @file{/boot} sur
9796 une partition séparé par exemple, montez-le sur @file{/mnt/boot} maintenant
9797 pour qu'il puisse être trouvé par @code{guix system init} ensuite.
9798
9799 Enfin, si vous souhaitez utiliser une ou plusieurs partitions de swap
9800 (@pxref{Memory Concepts, swap space,, libc, The GNU C Library Reference
9801 Manual}), assurez-vous de les initialiser avec @command{mkswap}. En
9802 supposant que vous avez une partition de swap sur @file{/dev/sda3}, vous
9803 pouvez lancer :
9804
9805 @example
9806 mkswap /dev/sda3
9807 swapon /dev/sda3
9808 @end example
9809
9810 Autrement, vous pouvez utiliser un fichier de swap. Par exemple, en
9811 supposant que dans le nouveau système vous voulez utiliser le fichier
9812 @file{/swapfile} comme fichier de swap, vous lanceriez@footnote{Cet exemple
9813 fonctionnera sur plusieurs types de systèmes de fichiers (p.@: ex.@: ext4).
9814 Cependant, pour les systèmes de fichiers qui utilisent la copie sur écriture
9815 (COW) comme btrfs, les étapes requises peuvent varier. Pour plus de
9816 détails, regardez les pages de manuel de @command{mkswap} et
9817 @command{swapon}.} :
9818
9819 @example
9820 # Cela représente 10 Gio d'espace d'échange. Ajustez « count » pour changer la taille.
9821 dd if=/dev/zero of=/mnt/swapfile bs=1MiB count=10240
9822 # Par sécurité, laissez le fichier en lecture et en écriture uniquement pour root.
9823 chmod 600 /mnt/swapfile
9824 mkswap /mnt/swapfile
9825 swapon /mnt/swapfile
9826 @end example
9827
9828 Remarquez que si vous avez chiffré la partition racine et créé un fichier
9829 d'échange dans son système de fichier comme décrit ci-dessus, alors le
9830 chiffrement protégera aussi le fichier d'échange, comme n'importe quel
9831 fichier de ce système de fichiers.
9832
9833 @node Effectuer l'installation
9834 @subsection Effectuer l'installation
9835
9836 Lorsque la partition cible est prête et que les autres partitions sont
9837 montées, on est prêt à commencer l'installation. Commencez par :
9838
9839 @example
9840 herd start cow-store /mnt
9841 @end example
9842
9843 Cela rend @file{/gnu/store} capable de faire de la copie sur écriture, de
9844 sorte que les paquets ajoutés pendant l'installation sont écrits sur le
9845 disque cible sur @file{/mnt} plutôt que gardés en mémoire. Cela est
9846 nécessaire parce que la première phase de la commande @command{guix system
9847 init} (voir plus bas) implique de télécharger ou de construire des éléments
9848 de @file{/gnu/store} qui est initialement un système de fichiers en mémoire.
9849
9850 Ensuite, vous devrez modifier un fichier et fournir la déclaration du
9851 système à installer. Pour cela, le système d'installation propose trois
9852 éditeurs de texte. Nous recommandons GNU nano (@pxref{Top,,, nano, GNU nano
9853 Manual}), qui supporte la coloration syntaxique la correspondance de
9854 parenthèses ; les autres éditeurs sont GNU Zile (un clone d'Emacs) et nvi
9855 (un clone de l'éditeur @command{vi} original de BSD). Nous recommandons
9856 vivement de stocker ce fichier sur le système de fichier racine cible,
9857 disons en tant que @file{/mnt/etc/config.scm}. Sinon, vous perdrez votre
9858 fichier de configuration une fois que vous aurez redémarré sur votre nouveau
9859 système.
9860
9861 @xref{Utiliser le système de configuration}, pour un aperçu de comment créer votre
9862 fichier de configuration. Les exemples de configuration dont on parle dans
9863 cette section sont disponibles dans @file{/etc/configuration} sur l'image
9864 d'installation. Ainsi, pour commencer avec une configuration du système qui
9865 fournit un serveur d'affichage graphique (un système de « bureau »), vous
9866 pouvez lancer ce qui suit :
9867
9868 @example
9869 # mkdir /mnt/etc
9870 # cp /etc/configuration/desktop.scm /mnt/etc/config.scm
9871 # nano /mnt/etc/config.scm
9872 @end example
9873
9874 Vous devriez faire attention à ce que contient votre fichier de
9875 configuration, en particulier :
9876
9877 @itemize
9878 @item
9879 Assurez-vous que la forme @code{bootloader-configuration} se réfère à la
9880 cible où vous voulez installer GRUB. Elle devrait aussi mentionner
9881 @code{grub-bootloader} si vous installer GRUB en mode BIOS (ou « legacy »)
9882 ou @code{grub-efi-bootloader} pour les système UEFI plus récents. Pour les
9883 anciens systèmes, le champs @code{target} contient un périphérique comme
9884 @code{/dev/sda} ; pour les systèmes UEFI il contient un chemin vers une
9885 partition EFI montée, comme @code{/boot/efi}, et assurez-vous que ce chemin
9886 est bien monté.
9887
9888 @item
9889 Assurez-vous que les étiquettes de vos systèmes de fichiers correspondent
9890 aux valeurs de leur champs @code{device} dans votre configuration
9891 @code{file-system}, en supposant que la configuration @code{file-system}
9892 utilise la procédure @code{file-system-label} dans son champ @code{device}.
9893
9894 @item
9895 Si vous avez des partitions RAID ou chiffrées, assurez-vous d'ajouter un
9896 champ @code{mapped-device} pour les décrire (@pxref{Périphériques mappés}).
9897 @end itemize
9898
9899 Une fois que vous avez fini les préparatifs sur le fichier de configuration,
9900 le nouveau système peut être initialisé (rappelez-vous que le système de
9901 fichiers racine cible est dans @file{/mnt}) :
9902
9903 @example
9904 guix system init /mnt/etc/config.scm /mnt
9905 @end example
9906
9907 @noindent
9908 Cela copie tous les fichiers nécessaires et installe GRUB sur
9909 @file{/dev/sdX} à moins que vous ne passiez l'option
9910 @option{--no-bootloader}. Pour plus d'informations, @pxref{Invoquer guix system}. Cette commande peut engendrer des téléchargements ou des
9911 constructions pour les paquets manquants, ce qui peut prendre du temps.
9912
9913 Une fois que cette commande a terminée — et on l'espère réussi ! — vous
9914 pouvez lancer @command{reboot} et démarrer sur votre nouveau système. Le
9915 mot de passe @code{root} est d'abord vide ; les mots de passe des autres
9916 utilisateurs doivent être initialisés avec la commande @command{passwd} en
9917 tant que @code{root}, à mois que votre configuration ne spécifie autre chose
9918 (@pxref{user-account-password, mot de passe des comptes utilisateurs}).
9919
9920 @cindex mettre à jour GuixSD
9921 À partir de maintenant, vous pouvez mettre à jour GuixSD lorsque vous le
9922 souhaitez en lançant @command{guix pull} en tant que @code{root}
9923 (@pxref{Invoquer guix pull}), puis en lançant @command{guix system
9924 reconfigure} pour construire une nouvelle génération du système avec les
9925 derniers paquets et les derniers services (@pxref{Invoquer guix system}).
9926 Nous vous recommandons de le faire régulièrement pour que votre système
9927 inclus les dernières mises à jour de sécurité (@pxref{Mises à jour de sécurité}).
9928
9929 Rejoignez-nous sur @code{#guix} sur le réseau IRC Freenode ou sur
9930 @file{guix-devel@@gnu.org} pour partager votre expérience — bonne ou
9931 mauvaise.
9932
9933 @node Installer GuixSD dans une VM
9934 @subsection Installer GuixSD sur une machine virtuelle
9935
9936 @cindex machine virtuelle, installation de GuixSD
9937 @cindex serveur privé virtuel (VPS)
9938 @cindex VPS (serveur privé virtuel)
9939 Si vous souhaitez installer GuixSD sur une machine virtuelle (VM) ou un
9940 serveur privé virtuel (VPS) plutôt que sur votre machine chérie, cette
9941 section est faite pour vous.
9942
9943 Pour démarrer une VM @uref{http://qemu.org/,QEMU} pour installer GuixSD sur
9944 une image disque, suivez ces étapes :
9945
9946 @enumerate
9947 @item
9948 Tout d'abord récupérez et décompressez l'image d'installation de GuixSD
9949 comme décrit précédemment (@pxref{Installation depuis une clef USB ou un DVD}).
9950
9951 @item
9952 Créez une image disque qui contiendra le système installé. Pour créer une
9953 image qcow2, utilise la commande @command{qemu-img} :
9954
9955 @example
9956 qemu-img create -f qcow2 guixsd.img 50G
9957 @end example
9958
9959 Le fichier qui en résulte sera bien plus petit que les 50 Go (habituellement
9960 moins de 1 Mo) mais il grossira au fur et à mesure que le stockage virtuel
9961 grossira.
9962
9963 @item
9964 Démarrez l'image d'installation USB dans une VM :
9965
9966 @example
9967 qemu-system-x86_64 -m 1024 -smp 1 \
9968 -net user -net nic,model=virtio -boot menu=on \
9969 -drive file=guixsd-install-@value{VERSION}.@var{system}.iso \
9970 -drive file=guixsd.img
9971 @end example
9972
9973 L'ordre des périphérique est important
9974
9975 Dans la console de la VM, appuyez rapidement sur @kbd{F12} pour entrer dans
9976 le menu de démarrage. Ensuite appuyez sur @kbd{2} et la touche @kbd{Entrée}
9977 pour valider votre choix.
9978
9979 @item
9980 Vous êtes maintenant root dans la VM, continuez en suivant la procédure
9981 d'installation. @xref{Préparer l'installation}, et suivez les
9982 instructions.
9983 @end enumerate
9984
9985 Une fois l'installation terminée, vous pouvez démarrer le système dans votre
9986 image @file{guixsd.img}. @xref{Lancer GuixSD dans une VM}, pour une manière de
9987 faire.
9988
9989 @node Construire l'image d'installation
9990 @subsection Construire l'image d'installation
9991
9992 @cindex image d'installation
9993 L'image d'installation décrite plus haut a été construite avec la commande
9994 @command{guix system}, plus précisément :
9995
9996 @example
9997 guix system disk-image gnu/system/install.scm
9998 @end example
9999
10000 Regardez le fichier @file{gnu/system/install.scm} dans l'arborescence des
10001 sources et regardez aussi @ref{Invoquer guix system} pour plus
10002 d'informations sur l'image d'installation.
10003
10004 @subsection Construire l'image d'installation pour les cartes ARM
10005
10006 De nombreuses cartes ARM requièrent une variante spécifique du chargeur
10007 d'amorçage @uref{http://www.denx.de/wiki/U-Boot/, U-Boot}.
10008
10009 Si vous construisez une image disque et que le chargeur d'amorçage n'est pas
10010 disponible autrement (sur un autre périphérique d'amorçage etc), il est
10011 recommandé de construire une image qui inclus le chargeur d'amorçage, plus
10012 précisément :
10013
10014 @example
10015 guix system disk-image --system=armhf-linux -e '((@@ (gnu system install) os-with-u-boot) (@@ (gnu system install) installation-os) "A20-OLinuXino-Lime2")'
10016 @end example
10017
10018 @code{A20-OLinuXino-Lime2} est le nom de la carte. Si vous spécifiez une
10019 carte invalide, une liste de cartes possibles sera affichée.
10020
10021 @node Configuration système
10022 @section Configuration système
10023
10024 @cindex configuration du système
10025 La distribution système Guix utilise un mécanisme de configuration du
10026 système cohérent. On veut dire par là que tous les aspects de la
10027 configuration globale du système — comme la disponibilité des services
10028 système, des fuseaux horaires, des paramètres linguistiques, des comptes
10029 utilisateurs — sont déclarés à un seul endroit. Une telle
10030 @dfn{configuration système} peut être @dfn{instanciée}, c'est-à-dire entrer
10031 en vigueur.
10032
10033 @c Yes, we're talking of Puppet, Chef, & co. here. ↑
10034 L'un des avantages de placer toute la configuration du système sous le
10035 contrôle de Guix est de permettre les mises à jour transactionnelles du
10036 système ce qui rend possible le fait de revenir en arrière à une
10037 instanciation précédent du système, si quelque chose se passait mal avec le
10038 nouveau (@pxref{Fonctionnalités}). Un autre avantage est de rendre facile la
10039 réplication de la même configuration sur plusieurs machines différentes ou à
10040 différents moments dans le temps, sans avoir à recourir à des outils
10041 d'administrations supplémentaires au-dessus des outils du système.
10042
10043 Cette section décrit ce mécanisme. Tout d'abord nous nous concentrons sur
10044 le point de vue de l'administrateur système en expliquant comment le système
10045 est configuré et instancié. Ensuite nous montrons comment ce mécanisme peut
10046 être étendu, par exemple pour supporter de nouveaux services systèmes.
10047
10048 @menu
10049 * Utiliser le système de configuration:: Personnaliser votre système
10050 GNU@.
10051 * Référence de système d'exploitation:: Détail sur la déclaration de
10052 système d'exploitation.
10053 * Systèmes de fichiers:: Configurer les montages de systèmes de
10054 fichiers.
10055 * Périphériques mappés:: Gestion des périphériques de bloc.
10056 * Comptes utilisateurs:: Spécifier des comptes utilisateurs.
10057 * Régionalisation:: Paramétrer la langue et les conventions
10058 culturelles.
10059 * Services:: Spécifier les services du système.
10060 * Programmes setuid:: Programmes tournant avec les privilèges root.
10061 * Certificats X.509:: Authentifier les serveurs HTTPS@.
10062 * Name Service Switch:: Configurer le « name service switch » de la
10063 libc.
10064 * Disque de RAM initial:: Démarrage de Linux-Libre.
10065 * Configuration du chargeur d'amorçage:: Configurer le chargeur
10066 d'amorçage.
10067 * Invoquer guix system:: Instantier une configuration du système.
10068 * Lancer GuixSD dans une VM:: Comment lancer GuixSD dans une machine
10069 virtuelle.
10070 * Définir des services:: Ajouter de nouvelles définitions de services.
10071 @end menu
10072
10073 @node Utiliser le système de configuration
10074 @subsection Utiliser le système de configuration
10075
10076 Le système d'exploitation est configuré en fournissant une déclaration
10077 @code{operating-system} dans un fichier qui peut être passé à la command
10078 @command{guix system} (@pxref{Invoquer guix system}). Une configuration
10079 simple, avec les services systèmes par défaut, le noyau Linux-Libre par
10080 défaut, un disque de RAM initial et un chargeur d'amorçage ressemble à ceci
10081 :
10082
10083 @findex operating-system
10084 @lisp
10085 @include os-config-bare-bones.texi
10086 @end lisp
10087
10088 Cet exemple devrait se comprendre de lui-même. Certains champs définis
10089 ci-dessus, comme @code{host-name} et @code{bootloader} sont obligatoires.
10090 D'autres comme @code{packages} et @code{services} peuvent être omis auquel
10091 cas ils ont une valeur par défaut.
10092
10093 Ci-dessous nous discutons des effets de certains des champs les plus
10094 importants (@pxref{Référence de système d'exploitation}, pour des détails sur tous
10095 les champs disponibles) et comment @dfn{instancier} le système
10096 d'exploitation avec @command{guix system}.
10097
10098 @unnumberedsubsubsec Bootloader
10099
10100 @cindex ancien système de démarrage, sur les machines Intel
10101 @cindex démarrage BIOS, sur les machines Intel
10102 @cindex démarrage UEFI
10103 @cindex démarrage EFI
10104 Le champ @code{bootloader} décrit la méthode qui sera utilisée pour démarrer
10105 votre système. Les machines basées sur les processeurs Intel peuvent
10106 démarrer dans l'ancien mode BIOS, comme dans l'exemple au-dessus.
10107 Cependant, les machines plus récentes s'appuient sur l'UEFI (@dfn{Unified
10108 Extensible Firmware Interface}) pour démarrer. Dans ce cas, le champ
10109 @code{bootloader} devrait contenir quelque chose comme cela :
10110
10111 @example
10112 (bootloader-configuration
10113 (bootloader grub-efi-bootloader)
10114 (target "/boot/efi"))
10115 @end example
10116
10117 @xref{Configuration du chargeur d'amorçage}, pour plus d'informations sur les options de
10118 configuration disponibles.
10119
10120 @unnumberedsubsubsec Paquets visibles sur tout le système
10121
10122 @vindex %base-packages
10123 Le champ @code{packages} liste les paquets qui seront visibles sur tout le
10124 système, pour tous les comptes utilisateurs — c.-à-d.@: dans la variable
10125 d'environnement @code{PATH} de tous les utilisateurs — en plus des profils
10126 utilisateurs (@pxref{Invoquer guix package}). La variable
10127 @var{%base-packages} fournit tous les outils qu'on pourrait attendre pour
10128 les taches de base de l'administrateur et de l'utilisateur — dont les GNU
10129 Core Utilities, les GNU Networking Utilities, l'éditeur de texte léger GNU
10130 Zile, @command{find}, @command{grep}, etc. L'exemple au-dessus ajoute
10131 GNU@tie{}Screen à ces paquets, récupéré depuis le module @code{(gnu packages
10132 screen)} (@pxref{Modules de paquets}). Vous pouvez utiliser la syntaxe
10133 @code{(list paquet sortie)} pour ajouter une sortie spécifique d'un paquet :
10134
10135 @lisp
10136 (use-modules (gnu packages))
10137 (use-modules (gnu packages dns))
10138
10139 (operating-system
10140 ;; ...
10141 (packages (cons (list bind "utils")
10142 %base-packages)))
10143 @end lisp
10144
10145 @findex specification->package
10146 Se référer aux paquets par le nom de leur variable, comme @code{bind}
10147 ci-dessus, a l'avantage d'être sans ambiguïté ; cela permet aussi de se
10148 rendre rapidement compte de coquilles quand on a des « variables non liées
10149 ». L'inconvénient est qu'on a besoin de savoir dans quel module est défini
10150 le paquet, et de modifier la ligne @code{use-package-modules} en
10151 conséquence. Pour éviter cela, on peut utiliser la procédure
10152 @code{specification->package} du module @code{(gnu packages)}, qui renvoie
10153 le meilleur paquet pour un nom donné ou un nom et une version :
10154
10155 @lisp
10156 (use-modules (gnu packages))
10157
10158 (operating-system
10159 ;; ...
10160 (packages (append (map specification->package
10161 '("tcpdump" "htop" "gnupg@@2.0"))
10162 %base-packages)))
10163 @end lisp
10164
10165 @unnumberedsubsubsec Services systèmes
10166
10167 @cindex services
10168 @vindex %base-services
10169 Le champ @code{services} liste les @dfn{services système} à rendre
10170 disponible lorsque le système démarre (@pxref{Services}). La déclaration
10171 @code{operating-system} au-dessus spécifie que, en plus des services de
10172 base, on veut que le démon ssh @command{lshd} écoute sur le port 2222
10173 (@pxref{Services réseau, @code{lsh-service}}). Sous le capot,
10174 @code{lsh-service} s'arrange pour que @code{lshd} soit lancé avec les bonnes
10175 options de la ligne de commande, éventuellement en générant des fichiers de
10176 configuration (@pxref{Définir des services}).
10177
10178 @cindex personnalisation des services
10179 @findex modify-services
10180 Parfois, plutôt que d'utiliser les services de base tels-quels, on peut
10181 vouloir les personnaliser. Pour cela, utilisez @code{modify-services}
10182 (@pxref{Référence de service, @code{modify-services}}) pour modifier la liste.
10183
10184 Par exemple, supposons que vous souhaitiez modifier @code{guix-daemon} et
10185 Mingetty (l'écran de connexion en console) dans la liste
10186 @var{%base-services} (@pxref{Services de base, @code{%base-services}}). Pour
10187 cela, vous pouvez écrire ce qui suit dans votre déclaration de système
10188 d'exploitation :
10189
10190 @lisp
10191 (define %my-services
10192 ;; Ma propre liste de services.
10193 (modify-services %base-services
10194 (guix-service-type config =>
10195 (guix-configuration
10196 (inherit config)
10197 (use-substitutes? #f)
10198 (extra-options '("--gc-keep-derivations"))))
10199 (mingetty-service-type config =>
10200 (mingetty-configuration
10201 (inherit config)))))
10202 (operating-system
10203 ;; @dots{}
10204 (services %my-services))
10205 @end lisp
10206
10207 Cela modifie la configuration — c.-à-d.@: les paramètres du service — de
10208 l'instance de @code{guix-service-type}, et de toutes les instances de
10209 @code{mingetty-service-type} dans la liste @var{%base-services}. Remarquez
10210 comment on fait cela : d'abord, on s'arrange pour que la configuration de
10211 départ soit liée à l'identifiant @code{config} dans @var{body} puis on écrit
10212 @var{body} pour qu'il s'évalue en la configuration désirée. En particulier,
10213 remarquez comment on utilise @code{inherit} pour créer une nouvelle
10214 configuration qui a les même valeurs que l'ancienne configuration, avec
10215 seulement quelques modifications.
10216
10217 @cindex chiffrement du disque
10218 La configuration pour une utilisation de « bureau » typique, avec une
10219 partition racine chiffrée, le serveur d'affichage X11, GNOME et Xfce (les
10220 utilisateurs peuvent choisir l'environnement de bureau sur l'écran de
10221 connexion en appuyant sur @kbd{F1}), la gestion du réseau, la gestion de
10222 l'énergie, et bien plus, ressemblerait à ceci :
10223
10224 @lisp
10225 @include os-config-desktop.texi
10226 @end lisp
10227
10228 Un système graphique avec un choix de gestionnaires de fenêtres légers
10229 plutôt que des environnement de bureaux complets ressemblerait à cela :
10230
10231 @lisp
10232 @include os-config-lightweight-desktop.texi
10233 @end lisp
10234
10235 Cet exemple se réfère au système de fichier @file{/boot/efi} par son UUID,
10236 @code{1234-ABCD}. Remplacez cet UUID par le bon UUID de votre système,
10237 renvoyé par la commande @command{blkid}.
10238
10239 @xref{Services de bureaux}, pour la liste exacte des services fournis par
10240 @var{%desktop-services}. @xref{Certificats X.509}, pour des informations
10241 sur le paquet @code{nss-certs} utilisé ici.
10242
10243 Encore une fois, @var{%desktop-services} n'est qu'une liste d'objets
10244 service. Si vous voulez en supprimer des services, vous pouvez le faire
10245 avec des procédures pour les listes (@pxref{SRFI-1 Filtering and
10246 Partitioning,,, guile, GNU Guile Reference Manual}). Par exemple,
10247 l'expression suivante renvoie une liste qui contient tous les services dans
10248 @var{%desktop-services} sauf le service Avahi :
10249
10250 @example
10251 (remove (lambda (service)
10252 (eq? (service-kind service) avahi-service-type))
10253 %desktop-services)
10254 @end example
10255
10256 @unnumberedsubsubsec Instancier le système
10257
10258 En supposant que la déclaration @code{operating-system} est stockée dans le
10259 fichier @file{my-system-config.scm}, la commande @command{guix system
10260 reconfigure my-system-config.scm} instancie cette configuration et en fait
10261 l'entrée par défaut dans GRUB (@pxref{Invoquer guix system}).
10262
10263 Pour changer la configuration du système, on met normalement à jour ce
10264 fichier et on relance @command{guix system reconfigure}. On ne devrait
10265 jamais avoir à modifier de fichiers dans @file{/etc} ou à lancer des
10266 commandes qui modifient l'état du système comme @command{useradd} ou
10267 @command{grub-install}. En fait, vous devez les éviter parce que non
10268 seulement ça annulerait vos garanties, mais ça empêcherait aussi de revenir
10269 à des versions précédents du système, si vous en avez besoin.
10270
10271 @cindex revenir en arrière dans la configuration du système
10272 En parlant de revenir en arrière, à chaque fois que vous lancez
10273 @command{guix system reconfigure}, une nouvelle @dfn{génération} du système
10274 est crée — sans modifier ou supprimer les générations précédentes. Les
10275 anciennes générations du système ont une entrée dans le menu du chargeur
10276 d'amorçage, ce qui vous permet de démarrer dessus au cas où quelque chose se
10277 serait mal passé avec la dernière génération. C'est rassurant, non ? La
10278 commande @command{guix system list-generations} liste les générations du
10279 système disponibles sur le disque. Il est possible de revenir à une
10280 ancienne génération via les commandes @command{guix system roll-back} et
10281 @command{guix system switch-generation}.
10282
10283 Bien que la commande @command{guix system reconfigure} ne modifiera pas les
10284 générations précédentes, vous devez faire attention lorsque votre génération
10285 actuelle n'est pas la dernière (p.@: ex.@: après avoir invoqué @command{guix
10286 system roll-back}), puisque l'opération pourrait remplacer une génération
10287 suivante (@pxref{Invoquer guix system}).
10288
10289 @unnumberedsubsubsec L'interface de programmation
10290
10291 Au niveau Scheme, la grosse déclaration @code{operating-system} est
10292 instanciée avec la procédure monadique suivante (@pxref{La monad du dépôt}) :
10293
10294 @deffn {Procédure monadique} operating-system-derivation os
10295 Renvoie une dérivation qui construit @var{os}, un objet
10296 @code{operating-system} (@pxref{Dérivations}).
10297
10298 La sortie de la dérivation est un répertoire qui se réfère à tous les
10299 paquets et d'autres fichiers supports requis pour instancier @var{os}.
10300 @end deffn
10301
10302 Cette procédure est fournie par le module @code{(gnu system)}. Avec
10303 @code{(gnu srevices)} (@pxref{Services}), ce module contient les entrailles
10304 de GuixSD. Ouvrez-le un jour !
10305
10306
10307 @node Référence de système d'exploitation
10308 @subsection Référence de @code{operating-system}
10309
10310 Cette section résume toutes les options disponibles dans les déclarations
10311 @code{operating-system} (@pxref{Utiliser le système de configuration}).
10312
10313 @deftp {Type de données} operating-system
10314 C'est le type de données représentant une configuration d'un système
10315 d'exploitation. On veut dire par là toute la configuration globale du
10316 système, mais pas la configuration par utilisateur (@pxref{Utiliser le système de configuration}).
10317
10318 @table @asis
10319 @item @code{kernel} (par défaut : @var{linux-libre})
10320 L'objet paquet d'un noyau de système d'exploitation à
10321 utiliser@footnote{Actuellement seul le noyau Linux-libre est supporté. Dans
10322 le futur, il sera possible d'utiliser GNU@tie{}Hurd.}.
10323
10324 @item @code{kernel-arguments} (par défaut : @code{'()})
10325 Liste de chaînes ou de gexps représentant des arguments supplémentaires à
10326 passer sur la ligne de commande du noyau — p.@: ex.@:
10327 @code{("console=ttyS0")}.
10328
10329 @item @code{bootloader}
10330 L'objet de configuration du chargeur d'amorçage. @xref{Configuration du chargeur d'amorçage}.
10331
10332 @item @code{initrd-modules} (par défaut : @code{%base-initrd-modules})
10333 @cindex initrd
10334 @cindex disque de RAM initial
10335 La liste des modules du noyau linux requis dans l'image disque de RAM
10336 initiale. @xref{Disque de RAM initial}.
10337
10338 @item @code{initrd} (par défaut : @code{base-initrd})
10339 Une procédure qui renvoie un disque de RAM initial pour le noyau Linux. Ce
10340 champ est fournit pour pouvoir personnaliser son système à bas-niveau et
10341 n'est que rarement utile dans le cas général. @xref{Disque de RAM initial}.
10342
10343 @item @code{firmware} (par défaut : @var{%base-firmware})
10344 @cindex firmware
10345 Liste les paquets de microgiciels chargeables pour le noyau de système
10346 d'exploitation.
10347
10348 La valeur par défaut contient les microgiciels requis pour les périphériques
10349 WiFi Atheros et Broadcom (modules @code{ath9k} et @code{b43-open} de
10350 Linux-libre, respectivement). @xref{Considérations matérielles}, pour plus
10351 d'info sur les périphériques supportés.
10352
10353 @item @code{host-name}
10354 Le nom d'hôte.
10355
10356 @item @code{hosts-file}
10357 @cindex fichier hosts
10358 Un objet simili-fichier (@pxref{G-Expressions, file-like objects}) à
10359 utiliser comme @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C
10360 Library Reference Manual}). La valeur par défaut est un fichier avec des
10361 entrées pour @code{localhost} et @var{host-name}.
10362
10363 @item @code{mapped-devices} (par défaut : @code{'()})
10364 Une liste de périphériques mappés. @xref{Périphériques mappés}.
10365
10366 @item @code{file-systems}
10367 Une liste de systèmes de fichiers. @xref{Systèmes de fichiers}.
10368
10369 @item @code{swap-devices} (par défaut : @code{'()})
10370 @cindex espaces d'échange
10371 Une liste de chaînes identifiant les périphériques ou les fichiers utilisé
10372 pour « l'espace d'échange » (@pxref{Memory Concepts,,, libc, The GNU C
10373 Library Reference Manual}). Par exemple, @code{'("/dev/sda3")} ou
10374 @code{'("/swapfile")}. Il est possible de spécifier un fichier d'échange
10375 sur un périphérique mappé, tant que le périphérique nécessaire et le système
10376 de fichiers sont aussi spécifiés. @xref{Périphériques mappés} et @ref{Systèmes de fichiers}.
10377
10378 @item @code{users} (par défaut : @code{%base-user-accounts})
10379 @itemx @code{groups} (par défaut : @var{%base-groups})
10380 Liste les comptes utilisateurs et les groupes. @xref{Comptes utilisateurs}.
10381
10382 Si la liste @code{users} n'a pas de compte lié à l'UID@tie{}0, un compte «
10383 root » avec l'UID@tie{}0 est automatiquement ajouté.
10384
10385 @item @code{skeletons} (par défaut : @code{(default-skeletons)})
10386 Une liste de couples composés d'un nom de fichier cible et d'un objet
10387 simili-fichier (@pxref{G-Expressions, file-like objects}). Ce sont les
10388 fichiers squelettes qui seront ajoutés au répertoire personnel des comptes
10389 utilisateurs nouvellement créés.
10390
10391 Par exemple, un valeur valide ressemblerait à cela :
10392
10393 @example
10394 `((".bashrc" ,(plain-file "bashrc" "echo Hello\n"))
10395 (".guile" ,(plain-file "guile"
10396 "(use-modules (ice-9 readline))
10397 (activate-readline)")))
10398 @end example
10399
10400 @item @code{issue} (par défaut : @var{%default-issue})
10401 Une chaîne qui dénote le contenu du fichier @file{/etc/issue} qui est
10402 affiché lorsqu'un utilisateur se connecte sur la console.
10403
10404 @item @code{packages} (par défaut : @var{%base-packages})
10405 L'ensemble des paquets installés dans le profil global, qui est accessible à
10406 partir de @file{/run/current-system/profile}.
10407
10408 L'ensemble par défaut contient les utilitaires de base et c'est une bonne
10409 pratique d'installer les utilitaires non essentiels dans les profils
10410 utilisateurs (@pxref{Invoquer guix package}).
10411
10412 @item @code{timezone}
10413 Une chaîne identifiant un fuseau horaire — p.@: ex.@: @code{"Europe/Paris"}.
10414
10415 Vous pouvez lancer la commande @command{tzselect} pour trouver le fuseau
10416 horaire correspondant à votre région. Si vous choisissez un nom de fuseau
10417 horaire invalide, @command{guix system} échouera.
10418
10419 @item @code{locale} (par défaut : @code{"en_US.utf8"})
10420 Le nom du paramètre régional par défaut (@pxref{Locale Names,,, libc, The
10421 GNU C Library Reference Manual}). @xref{Régionalisation}, pour plus d'informations.
10422
10423 @item @code{locale-definitions} (par défaut : @var{%default-locale-definitions})
10424 La liste des définitions de locales à compiler et qui devraient être
10425 utilisées à l'exécution. @xref{Régionalisation}.
10426
10427 @item @code{locale-libcs} (par défaut : @code{(list @var{glibc})})
10428 La liste des paquets GNU@tie{}libc dont les données des paramètres
10429 linguistiques sont utilisées pour construire les définitions des paramètres
10430 linguistiques. @xref{Régionalisation}, pour des considérations sur la compatibilité
10431 qui justifient cette option.
10432
10433 @item @code{name-service-switch} (par défaut : @var{%default-nss})
10434 La configuration de NSS de la libc (name service switch) — un objet
10435 @code{<name-service-switch>}. @xref{Name Service Switch}, pour des détails.
10436
10437 @item @code{services} (par défaut : @var{%base-services})
10438 Une liste d'objets services qui dénotent les services du système.
10439 @xref{Services}.
10440
10441 @item @code{pam-services} (par défaut : @code{(base-pam-services)})
10442 @cindex PAM
10443 @cindex pluggable authentication modules
10444 @c FIXME: Add xref to PAM services section.
10445 Services PAM (@dfn{pluggable authentication module}) Linux.
10446
10447 @item @code{setuid-programs} (par défaut : @var{%setuid-programs})
10448 Liste de G-expressions qui s'évaluent en chaînes de caractères qui dénotent
10449 les programmes setuid. @xref{Programmes setuid}.
10450
10451 @item @code{sudoers-file} (par défaut : @var{%sudoers-specification})
10452 @cindex fichier sudoers
10453 Le contenu du fichier @file{/etc/sudoers} comme un objet simili-fichier
10454 (@pxref{G-Expressions, @code{local-file} et @code{plain-file}}).
10455
10456 Ce fichier spécifier quels utilisateurs peuvent utiliser la commande
10457 @command{sudo}, ce qu'ils ont le droit de faire, et quels privilèges ils
10458 peuvent gagner. La valeur par défaut est que seul @code{root} et les
10459 membres du groupe @code{wheel} peuvent utiliser @code{sudo}.
10460
10461 @end table
10462 @end deftp
10463
10464 @node Systèmes de fichiers
10465 @subsection Systèmes de fichiers
10466
10467 La liste des systèmes de fichiers à monter est spécifiée dans le champ
10468 @code{file-systems} de la déclaration de système d'exploitation
10469 (@pxref{Utiliser le système de configuration}). Chaque système de fichier est
10470 déclaré avec la forme @code{file-system}, comme ceci :
10471
10472 @example
10473 (file-system
10474 (mount-point "/home")
10475 (device "/dev/sda3")
10476 (type "ext4"))
10477 @end example
10478
10479 Comme d'habitude, certains de ces champs sont obligatoire — comme le montre
10480 l'exemple au-dessus — alors que d'autres peuvent être omis. Ils sont
10481 décrits plus bas.
10482
10483 @deftp {Type de données} file-system
10484 Les objets de ce type représentent des systèmes de fichiers à monter. Ils
10485 contiennent les membres suivants :
10486
10487 @table @asis
10488 @item @code{type}
10489 C'est une chaîne de caractères spécifiant le type du système de fichier —
10490 p.@: ex.@: @code{"ext4"}.
10491
10492 @item @code{mount-point}
10493 Désigne l'emplacement où le système de fichier sera monté.
10494
10495 @item @code{device}
10496 Ce champ nomme le système de fichier « source ». il peut être l'une de ces
10497 trois choses : une étiquette de système de fichiers, un UUID de système de
10498 fichier ou le nom d'un nœud dans @file{/dev}. Les étiquettes et les UUID
10499 offrent une manière de se référer à des systèmes de fichiers sans avoir à
10500 coder en dur le nom de périphérique@footnote{Remarquez que, s'il est tentant
10501 d'utiliser @file{/dev/disk/by-uuid} et autres chemins similaires pour
10502 obtenir le même résultat, ce n'est pas recommandé : ces nœuds de
10503 périphériques spéciaux sont créés par le démon udev et peuvent ne pas être
10504 disponibles au moment de monter le périphérique.}.
10505
10506 @findex file-system-label
10507 Les étiquettes de systèmes de fichiers sont crées avec la procédure
10508 @code{file-system-label}, les UUID avec @code{uuid} et les nœuds de
10509 @file{/dev} sont de simples chaînes de caractères. Voici un exemple d'un
10510 système de fichiers référencé par son étiquette, donnée par la commande
10511 @command{e2label} :
10512
10513 @example
10514 (file-system
10515 (mount-point "/home")
10516 (type "ext4")
10517 (device (file-system-label "my-home")))
10518 @end example
10519
10520 @findex uuid
10521 Les UUID sont convertis à partir de leur représentation en chaîne de
10522 caractères (montrée par la command @command{tune2fs -l}) en utilisant la
10523 forme @code{uuid}@footnote{La forme @code{uuid} s'attend à des UUID sur 16
10524 octets définis dans la @uref{https://tools.ietf.org/html/rfc4122,
10525 RFC@tie{}4122}. C'est la forme des UUID utilisées par la famille de
10526 systèmes de fichiers ext2 et d'autres, mais ce n'est pas le même type d'UUID
10527 que ceux qui se trouvent sur les systèmes de fichiers FAT par exemple},
10528 comme ceci :
10529
10530 @example
10531 (file-system
10532 (mount-point "/home")
10533 (type "ext4")
10534 (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
10535 @end example
10536
10537 Lorsque la source d'un système de fichiers est un périphérique mappé
10538 (@pxref{Périphériques mappés}), sont champ @code{device} @emph{doit} se référer au
10539 nom du périphérique mappé — p.@: ex.@: @file{"/dev/mapper/root-partition"}.
10540 Cela est requis pour que le système sache que monter ce système de fichier
10541 dépend de la présence du périphérique mappé correspondant.
10542
10543 @item @code{flags} (par défaut : @code{'()})
10544 C'est une liste de symboles qui dénotent des drapeaux de montage. Les
10545 drapeaux reconnus sont @code{read-only}, @code{bind-mount}, @code{no-dev}
10546 (interdit l'accès aux fichiers spéciaux), @code{no-suid} (ignore les bits
10547 setuid et setgid) et @code{no-exec} (interdit l'exécution de programmes).
10548
10549 @item @code{options} (par défaut : @code{#f})
10550 C'est soit @code{#f} soit une chaîne de caractères dénotant des options de
10551 montage.
10552
10553 @item @code{mount?} (par défaut : @code{#t})
10554 Cette valeur indique s'il faut monter automatiquement le système de fichier
10555 au démarrage du système. Lorsque la valeur est @code{#f}, le système de
10556 fichier reçoit une entrée dans @file{/etc/fstab} (lue par la commande
10557 @command{mount}) mais n'est pas monté automatiquement.
10558
10559 @item @code{needed-for-boot?} (par défaut : @code{#f})
10560 Cette valeur booléenne indique si le système de fichier est nécessaire au
10561 démarrage. Si c'est vrai alors le système de fichier est monté au
10562 chargement du disque de RAM initial. C'est toujours le cas par exemple du
10563 système de fichiers racine.
10564
10565 @item @code{check?} (par défaut : @code{#t})
10566 Cette valeur booléenne indique si le système de fichier doit être vérifié
10567 avant de le monter.
10568
10569 @item @code{create-mount-point?} (par défaut : @code{#f})
10570 Lorsque cette valeur est vraie, le point de montage est créé s'il n'existe
10571 pas déjà.
10572
10573 @item @code{dependencies} (par défaut : @code{'()})
10574 C'est une liste d'objets @code{<file-system>} ou @code{<mapped-device>} qui
10575 représentent les systèmes de fichiers qui doivent être montés ou les
10576 périphériques mappés qui doivent être ouverts avant (et monté ou fermés
10577 après) celui-ci.
10578
10579 Par exemple, considérons une hiérarchie de montage : @file{/sys/fs/cgroup}
10580 est une dépendance de @file{/sys/fs/cgroup/cpu} et
10581 @file{/sys/fs/cgroup/memory}.
10582
10583 Un autre exemple est un système de fichier qui dépend d'un périphérique
10584 mappé, par exemple pour une partition chiffrée (@pxref{Périphériques mappés}).
10585 @end table
10586 @end deftp
10587
10588 Le module @code{(gnu system file-systems)} exporte les variables utiles
10589 suivantes.
10590
10591 @defvr {Variable Scheme} %base-file-systems
10592 Ce sont les systèmes de fichiers essentiels qui sont requis sur les systèmes
10593 normaux, comme @var{%pseudo-terminal-file-system} et @var{%immutable-store}
10594 (voir plus bas). Les déclarations de systèmes d'exploitation devraient au
10595 moins les contenir.
10596 @end defvr
10597
10598 @defvr {Variable Scheme} %pseudo-terminal-file-system
10599 C'est le système de fichier monté sur @file{/dev/pts}. Il supporte les
10600 @dfn{pseudo-terminaux} créés via @code{openpty} et les fonctions similaires
10601 (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference Manual}). Les
10602 pseudo-terminaux sont utilisés par les émulateurs de terminaux comme
10603 @command{xterm}.
10604 @end defvr
10605
10606 @defvr {Variable Scheme} %shared-memory-file-system
10607 Ce système de fichier est monté dans @file{/dev/shm} et est utilisé pour le
10608 partage de mémoire entre processus (@pxref{Memory-mapped I/O,
10609 @code{shm_open},, libc, The GNU C Library Reference Manual}).
10610 @end defvr
10611
10612 @defvr {Variable Scheme} %immutable-store
10613 Ce système de fichiers effectue un « montage lié » en lecture-seule de
10614 @file{/gnu/store}, ce qui en fait un répertoire en lecture-seule pour tous
10615 les utilisateurs dont @code{root}. Cela évite que des logiciels qui
10616 tournent en @code{root} ou des administrateurs systèmes ne modifient
10617 accidentellement le dépôt.
10618
10619 Le démon lui-même est toujours capable d'écrire dans le dépôt : il est
10620 remonté en lecture-écriture dans son propre « espace de nom ».
10621 @end defvr
10622
10623 @defvr {Variable Scheme} %binary-format-file-system
10624 Le système de fichiers @code{binfmt_misc}, qui permet de gérer n'importe
10625 quel type de fichiers exécutables à déléguer en espace utilisateur. Cela
10626 demande que le module du noyau @code{binfmt.ko} soit chargé.
10627 @end defvr
10628
10629 @defvr {Variable Scheme} %fuse-control-file-system
10630 Le système de fichiers @code{fusectl}, qui permet à des utilisateurs non
10631 privilégiés de monter et de démonter des systèmes de fichiers FUSE en espace
10632 utilisateur. Cela requiert que le module du noyau @code{fuse.ko} soit
10633 chargé.
10634 @end defvr
10635
10636 @node Périphériques mappés
10637 @subsection Périphériques mappés
10638
10639 @cindex mappage de périphériques
10640 @cindex périphériques mappés
10641 Le noyau Linux a une notion de @dfn{mappage de périphériques} : un
10642 périphérique bloc, comme une partition sur un disque dur, peut être
10643 @dfn{mappé} sur un autre périphérique, typiquement dans @code{/dev/mapper},
10644 avec des calculs supplémentaires sur les données qui naviguent entre les
10645 deux@footnote{Remarquez que le Hurd ne fait pas de différence entre le
10646 concept de « périphérique mappé » et celle d'un système de fichiers : les
10647 deux correspondent à la @emph{traduction} des opérations d'entrée-sortie
10648 faites sur un fichier en des opérations sur ce qui le contient. Ainsi, le
10649 Hurd implémente les périphériques mappés, comme les systèmes de fichiers,
10650 avec le mécanisme des @dfn{traducteurs} générique (@pxref{Translators,,,
10651 hurd, The GNU Hurd Reference Manual}).}. Un exemple typique est le mappage
10652 de périphériques chiffrés : toutes les écritures sont sur le périphérique
10653 mappé sont chiffrées, toutes les lectures déchiffrées, de manière
10654 transparente. Guix étend cette notion en considérant que tout périphérique
10655 ou ensemble de périphériques qui sont @dfn{transformés} d'une certaine
10656 manière créent un nouveau périphérique ; par exemple, les périphériques RAID
10657 sont obtenus en @dfn{assemblant} plusieurs autres périphériques, comme des
10658 disque ou des partitions, en un nouveau périphérique en tant qu'unique
10659 partition. Un autre exemple, qui n'est pas encore disponible, sont les
10660 volumes logiques LVM.
10661
10662 Les périphériques mappés sont déclarés avec la forme @code{mapped-device},
10663 définie comme suit ; par exemple, voir ci-dessous.
10664
10665 @deftp {Type de données} mapped-device
10666 Les objets de ce type représentent des mappages de périphériques qui seront
10667 effectués au démarrage du système.
10668
10669 @table @code
10670 @item source
10671 C'est soit une chaîne qui spécifie le nom d'un périphérique bloc à mapper,
10672 comme @code{"/dev/sda3"}, soit une liste de plusieurs périphériques à
10673 assembler pour en créer un nouveau.
10674
10675 @item target
10676 Cette chaîne spécifie le nom du périphérique mappé qui en résulte. Pour les
10677 mappeurs noyaux comme les périphériques chiffrés de type
10678 @code{luks-device-mapping}, spécifier @code{"ma-partition"} crée le
10679 périphérique @code{"/dev/mapper/ma-partition"}. Pour les périphériques RAID
10680 de type @code{raid-device-mapping}, il faut donner le nom complet comme
10681 @code{"/dev/md0"}.
10682
10683 @item type
10684 Ce doit être un objets @code{mapped-device-kind}, qui spécifie comment
10685 @var{source} est mappés sur @var{target}.
10686 @end table
10687 @end deftp
10688
10689 @defvr {Variable Scheme} luks-device-mapping
10690 Cela définie les périphériques blocs chiffrés en LUKS avec
10691 @command{cryptsetup} du paquet du même nom. Elle s'appuie sur le module du
10692 noyau Linux @code{dm-crypt}.
10693 @end defvr
10694
10695 @defvr {Variable Scheme} raid-device-mapping
10696 Cela définie un périphérique RAID qui est assemblé avec la commande
10697 @code{mdadm} du paquet du même nom. Elle nécessite un module noyau Linux
10698 approprié pour le niveau RAID chargé, comme @code{raid456} pour RAID-4,
10699 RAID-5 et RAID-6 ou @code{raid10} pour RAID-10.
10700 @end defvr
10701
10702 @cindex chiffrement du disque
10703 @cindex LUKS
10704 L'exemple suivant spécifie un mappage de @file{/dev/sda3} vers
10705 @file{/dev/mapper/home} avec LUKS —
10706 @url{https://gitlab.com/cryptsetup/cryptsetup,Linux Unified Key Setup}, un
10707 mécanisme standard pour chiffrer les disques. Le périphérique
10708 @file{/dev/mapper/home} peut ensuite être utilisé comme @code{device} d'une
10709 déclaration @code{file-system} (@pxref{Systèmes de fichiers}).
10710
10711 @example
10712 (mapped-device
10713 (source "/dev/sda3")
10714 (target "home")
10715 (type luks-device-mapping))
10716 @end example
10717
10718 Autrement, pour devenir indépendant du numéro de périphérique, on peut
10719 obtenir l'UUID LUKS (@dfn{l'identifiant unique}) du périphérique source avec
10720 une commande comme :
10721
10722 @example
10723 cryptsetup luksUUID /dev/sda3
10724 @end example
10725
10726 et l'utiliser ainsi :
10727
10728 @example
10729 (mapped-device
10730 (source (uuid "cb67fc72-0d54-4c88-9d4b-b225f30b0f44"))
10731 (target "home")
10732 (type luks-device-mapping))
10733 @end example
10734
10735 @cindex chiffrement de l'espace d'échange
10736 Il est aussi désirable de chiffrer l'espace d'échange, puisque l'espace
10737 d'échange peut contenir des données sensibles. Une manière de faire cela
10738 est d'utiliser un fichier d'échange dans un système de fichiers sur un
10739 périphérique mappé avec un chiffrement LUKS. De cette manière, le fichier
10740 d'échange est chiffré parce que tout le périphérique est chiffré.
10741 @xref{Préparer l'installation,,Disk Partitioning}, pour un exemple.
10742
10743 Un périphérique RAID formé des partitions @file{/dev/sda1} et
10744 @file{/dev/sdb1} peut être déclaré ainsi :
10745
10746 @example
10747 (mapped-device
10748 (source (list "/dev/sda1" "/dev/sdb1"))
10749 (target "/dev/md0")
10750 (type raid-device-mapping))
10751 @end example
10752
10753 Le périphérique @file{/dev/md0} peut ensuite être utilisé comme
10754 @code{device} d'une déclaration @code{file-system} (@pxref{Systèmes de fichiers}).
10755 Remarquez que le niveau de RAID n'a pas besoin d'être donné ; il est choisi
10756 pendant la création initiale du périphérique RAID et est ensuite déterminé
10757 automatiquement.
10758
10759
10760 @node Comptes utilisateurs
10761 @subsection Comptes utilisateurs
10762
10763 @cindex utilisateurs
10764 @cindex comptes
10765 @cindex comptes utilisateurs
10766 Les comptes utilisateurs et les groupes sont gérés entièrement par la
10767 déclaration @code{operating-system}. Ils sont spécifiés avec les formes
10768 @code{user-account} et @code{user-group} :
10769
10770 @example
10771 (user-account
10772 (name "alice")
10773 (group "users")
10774 (supplementary-groups '("wheel" ;permet d'utiliser sudo, etc.
10775 "audio" ;carte son
10776 "video" ;périphériques réseaux comme les webcams
10777 "cdrom")) ;le bon vieux CD-ROM
10778 (comment "Bob's sister")
10779 (home-directory "/home/alice"))
10780 @end example
10781
10782 Lors du démarrage ou à la fin de @command{guix system reconfigure}, le
10783 système s'assure que seuls les comptes utilisateurs et les groupes spécifiés
10784 dans la déclaration @code{operating-system} existent, et avec les propriétés
10785 spécifiées. Ainsi, les modifications ou les créations de comptes ou de
10786 groupes effectuées directement en invoquant des commandes comme
10787 @command{useradd} sont perdue à la reconfiguration ou au redémarrage. Cela
10788 permet de s'assurer que le système reste exactement tel que déclaré.
10789
10790 @deftp {Type de données} user-account
10791 Les objets de se type représentent les comptes utilisateurs. Les membres
10792 suivants peuvent être spécifiés :
10793
10794 @table @asis
10795 @item @code{name}
10796 Le nom du compte utilisateur.
10797
10798 @item @code{group}
10799 @cindex groupes
10800 C'est le nom (une chaîne) ou un identifiant (un nombre) du groupe
10801 utilisateur auquel ce compte appartient.
10802
10803 @item @code{supplementary-groups} (par défaut : @code{'()})
10804 Éventuellement, cela peut être définie comme une liste de noms de groupes
10805 auxquels ce compte appartient.
10806
10807 @item @code{uid} (par défaut : @code{#f})
10808 C'est l'ID utilisateur de ce compte (un nombre) ou @code{#f}. Dans ce
10809 dernier cas, le nombre est choisi automatiquement par le système à la
10810 création du compte.
10811
10812 @item @code{comment} (par défaut : @code{""})
10813 Un commentaire à propos du compte, comme le nom complet de l'utilisateur.
10814
10815 @item @code{home-directory}
10816 C'est le nom du répertoire personnel du compte.
10817
10818 @item @code{create-home-directory?} (par défaut : @code{#t})
10819 Indique si le répertoire personnel du compte devrait être créé s'il n'existe
10820 pas déjà.
10821
10822 @item @code{shell} (par défaut : Bash)
10823 C'est une G-expression qui dénote un nom de fichier d'un programme utilisé
10824 comme shell (@pxref{G-Expressions}).
10825
10826 @item @code{system?} (par défaut : @code{#f})
10827 C'est une valeur booléenne qui indique si le compte est un compte « système
10828 ». Les comptes systèmes sont parfois traités à part ; par exemple, les
10829 gestionnaires de connexion graphiques ne les liste pas.
10830
10831 @anchor{user-account-password}
10832 @item @code{password} (par défaut : @code{#f})
10833 Vous laisseriez normalement ce champ à @code{#f} et initialiseriez les mots
10834 de passe utilisateurs en tant que @code{root} avec la commande
10835 @command{passwd}, puis laisseriez l'utilisateur le changer avec
10836 @command{passwd}. Les mots de passes définis avec @command{passwd} sont
10837 bien sûr préservés après redémarrage et reconfiguration.
10838
10839 Si vous voulez @emph{vraiment} définir un mot de passe pour un compte, alors
10840 ce champ doit contenir le mot de passe chiffré, comme une chaîne de
10841 caractère. @xref{crypt,,, libc, The GNU C Library Reference Manual}, pour
10842 plus d'information sur le chiffrement des mots de passe et
10843 @ref{Encryption,,, guile, GNU Guile Reference Manual}, pour des informations
10844 sur la procédure @code{crypt} de Guile.
10845
10846 @end table
10847 @end deftp
10848
10849 @cindex groupes
10850 Les déclarations de groupes sont encore plus simple :
10851
10852 @example
10853 (user-group (name "students"))
10854 @end example
10855
10856 @deftp {Type de données} user-group
10857 C'est le type pour, hé bien, les comptes utilisateurs. Il n'y a que
10858 quelques champs :
10859
10860 @table @asis
10861 @item @code{name}
10862 Le nom du groupe.
10863
10864 @item @code{id} (par défaut : @code{#f})
10865 L'identifiant du groupe (un nombre). S'il est @code{#f}, un nouveau nombre
10866 est alloué automatiquement lorsque le groupe est créé.
10867
10868 @item @code{system?} (par défaut : @code{#f})
10869 Cette valeur booléenne indique si le groupe est un groupe « système ». les
10870 groupes systèmes ont un numéro d'ID bas.
10871
10872 @item @code{password} (par défaut : @code{#f})
10873 Quoi, les groupes utilisateurs peuvent avoir des mots de passe ? On dirait
10874 bien. À moins que la valeur ne soit @code{#f}, ce champ spécifie le mot de
10875 passe du groupe.
10876
10877 @end table
10878 @end deftp
10879
10880 Par simplicité, une variable liste les groupes utilisateurs de base auxquels
10881 on pourrait s'attendre :
10882
10883 @defvr {Variable Scheme} %base-groups
10884 C'est la liste des groupes utilisateur de base que les utilisateurs et les
10885 paquets s'attendent à trouver sur le système. Cela comprend des groupes
10886 comme « root », « wheel » et « users », ainsi que des groupes utilisés pour
10887 contrôler l'accès à certains périphériques, comme « audio », « disk » et «
10888 cdrom ».
10889 @end defvr
10890
10891 @defvr {Variable Scheme} %base-user-accounts
10892 C'est la liste des compte du système de base que les programmes peuvent
10893 s'attendre à trouver sur un système GNU/Linux, comme le compte « nobody ».
10894
10895 Remarquez que le compte « root » n'est pas défini ici. C'est un cas
10896 particulier et il est automatiquement ajouté qu'il soit spécifié ou non.
10897 @end defvr
10898
10899 @node Régionalisation
10900 @subsection Régionalisation
10901
10902 @cindex paramètres linguistiques
10903 Un @dfn{paramètre linguistique} définie les conventions culturelles d'une
10904 langue et d'une région particulières (@pxref{Régionalisation,,, libc, The GNU C
10905 Library Reference Manual}). Chaque paramètre linguistique a un nom de la
10906 forme @code{@var{langue}_@var{territoire}.@var{jeudecaractères}} — p.@:
10907 ex.@: @code{fr_LU.utf8} désigne le paramètre linguistique pour le français,
10908 avec les conventions culturelles du Luxembourg, en utilisant l'encodage
10909 UTF-8.
10910
10911 @cindex définition des paramètres linguistiques
10912 Normalement, vous voudrez spécifier les paramètres linguistiques par défaut
10913 pour la machine en utilisant le champ @code{locale} de la déclaration
10914 @code{operating-system} (@pxref{Référence de système d'exploitation, @code{locale}}).
10915
10916 Les paramètres régionaux choisis sont automatiquement ajoutés aux
10917 définitions des @dfn{paramètres régionaux} connues par le système au besoin,
10918 avec le jeu de caractères inféré à partir de son nom, p.@: ex.@:
10919 @code{bo_CN.utf8} supposera qu'il faut utiliser le jeu de caractères
10920 @code{UTF-8}. Des définitions supplémentaires peuvent être spécifiées dans
10921 le champ @code{locale-definitions} de @code{operating-system} — c'est utile
10922 par exemple si le jeu de caractères n'a pas été inféré à partir du nom.
10923 L'ensemble par défaut de définitions comprend certains paramètres
10924 linguistiques parmi les plus utilisés, mais pas toutes les variantes
10925 disponibles, pour gagner de la place.
10926
10927 Par exemple, pour ajouter les paramètres pour le frison septentrional en
10928 Allemagne, la valeur de ce champ serait :
10929
10930 @example
10931 (cons (locale-definition
10932 (name "fy_DE.utf8") (source "fy_DE"))
10933 %default-locale-definitions)
10934 @end example
10935
10936 De me, pour gagner de la place, on peut vouloir lister dans
10937 @code{locale-definitions} seulement les paramètres qui sont vraiment
10938 utilisés, comme dans :
10939
10940 @example
10941 (list (locale-definition
10942 (name "ja_JP.eucjp") (source "ja_JP")
10943 (charset "EUC-JP")))
10944 @end example
10945
10946 @vindex LOCPATH
10947 Les définitions des paramètres linguistiques compilées sont disponibles dans
10948 @file{/run/current-system/locale/X.Y}, où @code{X.Y} est la version de la
10949 libc, ce qui est l'emplacement par défaut où la GNU@tie{}libc fournie par
10950 Guix cherche les données de régionalisation. Cet emplacement peut être
10951 modifié avec la variable d'environnement @code{LOCPATH}
10952 (@pxref{locales-and-locpath, @code{LOCPATH} and locale packages}).
10953
10954 La forme @code{locale-definition} est fournie par le module @code{(gnu
10955 system locale)}. Des détails sont disponibles plus bas.
10956
10957 @deftp {Type de données} locale-definition
10958 C'est le type de données d'une définition de paramètres linguistiques.
10959
10960 @table @asis
10961
10962 @item @code{name}
10963 Le nom du paramètre linguistique. @xref{Locale Names,,, libc, The GNU C
10964 Library Reference Manual}, pour en savoir plus sur les noms de paramètres
10965 linguistiques.
10966
10967 @item @code{source}
10968 Le nom de la source pour ce paramètre linguistique. C'est typiquement la
10969 partie @code{@var{langue}_@var{territoire}} du nom du paramètre.
10970
10971 @item @code{charset} (par défaut : @code{"UTF-8"})
10972 Le « jeu de caractères » d'un paramètre linguistique,
10973 @uref{http://www.iana.org/assignments/character-sets, défini par l'IANA}.
10974
10975 @end table
10976 @end deftp
10977
10978 @defvr {Variable Scheme} %default-locale-definitions
10979 Une liste des paramètres linguistiques UTF-8 couramment utilisés, utilisée
10980 comme valeur par défaut pour le champ @code{locale-definitions} des
10981 déclarations @code{operating-system}.
10982
10983 @cindex nom de paramètre linguistique
10984 @cindex jeu de caractère normalisé dans les noms de paramètres linguistiques
10985 Ces définitions de paramètres linguistiques utilisent le @dfn{jeu de
10986 caractère normalisé} pour la partie qui suit le point dans le nom
10987 (@pxref{Using gettextized software, normalized codeset,, libc, The GNU C
10988 Library Reference Manual}). Donc par exemple il y a @code{uk_UA.utf8} mais
10989 @emph{pas}, disons, @code{uk_UA.UTF-8}.
10990 @end defvr
10991
10992 @subsubsection Considérations sur la compatibilité des données linguistiques
10993
10994 @cindex incompatibilité, des données linguistiques
10995 Les déclaration @code{operating-system} fournissent un champ
10996 @code{locale-libcs} pour spécifier les paquets GNU@tie{}libc à utiliser pour
10997 compiler les déclarations de paramètres linguistiques
10998 (@pxref{Référence de système d'exploitation}). « Pourquoi je devrais m'en soucier ?
10999 », vous demandez-vous sûrement. Hé bien il se trouve que le format binaire
11000 des données linguistique est parfois incompatible d'une version de la libc à
11001 une autre.
11002
11003 @c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
11004 @c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
11005 Par exemple, un programme lié à la libc version 2.21 est incapable de lire
11006 les données linguistiques produites par la libc 2.22 ; pire, ce programme
11007 @emph{plante} plutôt que d'ignorer les données linguistiques
11008 incompatibles@footnote{Les version 2.23 et supérieures de la GNU@tie{}libc
11009 sauteront simplement les données linguistiques incompatibles, ce qui est
11010 déjà mieux.}. De même, un programme lié à la libc 2.22 peut lire la plupart
11011 mais pas toutes les données linguistiques de la libc 2.21 (spécifiquement
11012 les données @code{LC_COLLATE} sont incompatibles) ; donc les appels à
11013 @code{setlocale} peuvent échouer, mais les programmes ne plantent pas.
11014
11015 Le « problème » avec GuixSD c'est que les utilisateurs ont beaucoup de
11016 liberté : ils peuvent choisir s'ils veulent et quand ils veulent mettre à
11017 jour les logiciels de leur profil, et peuvent utiliser une version
11018 différente de la libc de celle que l'administrateur système utilise pour
11019 construire les données linguistiques du système global.
11020
11021 Heureusement, les utilisateurs non privilégiés peuvent aussi installer leur
11022 propres données linguistiques et définir @var{GUIX_LOCPATH} comme il le faut
11023 (@pxref{locales-and-locpath, @code{GUIX_LOCPATH} and locale packages}).
11024
11025 Cependant, c'est encore mieux si les données linguistiques du système dans
11026 @file{/run/current-system/locale} étaient construites avec les versions de
11027 la libc utilisées sur le système, pour que tous les programmes puissent y
11028 accéder — c'est surtout crucial sur un système multi-utilisateurs. Pour
11029 cela, l'administrateur peut spécifier plusieurs paquets de la libc dans le
11030 champ @code{locale-libcs} de @code{operating-system} :
11031
11032 @example
11033 (use-package-modules base)
11034
11035 (operating-system
11036 ;; @dots{}
11037 (locale-libcs (list glibc-2.21 (canonical-package glibc))))
11038 @end example
11039
11040 cet exemple créera un système contenant les définitions des paramètres
11041 linguistiques pour la libc 2.21 et pour la version actuelle de la libc dans
11042 @file{/run/current-system/locale}.
11043
11044
11045 @node Services
11046 @subsection Services
11047
11048 @cindex services systèmes
11049 Une part importante de la préparation d'une déclaration
11050 @code{operating-system} est la liste des @dfn{services systèmes} et de leur
11051 configuration (@pxref{Utiliser le système de configuration}). Les services
11052 systèmes sont typiquement des démons lancés au démarrage ou d'autres actions
11053 requises à ce moment-là — p.@: ex.@: configurer les accès réseaux.
11054
11055 GuixSD a une définition large de « service » (@pxref{Composition de services}),
11056 mais beaucoup de services sont gérés par le GNU@tie{}Shepherd
11057 (@pxref{Services Shepherd}). Sur un système lancé, la commande
11058 @command{herd} vous permet de lister les services disponibles, montrer leur
11059 statut, les démarrer et les arrêter, ou faire d'autres opérations
11060 spécifiques (@pxref{Jump Start,,, shepherd, The GNU Shepherd Manual}). Par
11061 exemple :
11062
11063 @example
11064 # herd status
11065 @end example
11066
11067 La commande ci-dessus, lancée en @code{root}, liste les services
11068 actuellement définis. La commande @command{herd doc} montre un synopsis du
11069 service donné et ses actions associées :
11070
11071 @example
11072 # herd doc nscd
11073 Run libc's name service cache daemon (nscd).
11074
11075 # herd doc nscd action invalidate
11076 invalidate: Invalidate the given cache--e.g., 'hosts' for host name lookups.
11077 @end example
11078
11079 Les sous-commandes @command{start}, @command{stop} et @command{restart} ont
11080 l'effet auquel on s'attend. Par exemple, les commande suivantes stoppent le
11081 service nscd et redémarrent le serveur d'affichage Xorg :
11082
11083 @example
11084 # herd stop nscd
11085 Service nscd has been stopped.
11086 # herd restart xorg-server
11087 Service xorg-server has been stopped.
11088 Service xorg-server has been started.
11089 @end example
11090
11091 Les sections suivantes documentent les services disponibles, en commençant
11092 par les services de base qui peuvent être utilisés avec une déclaration
11093 @code{operating-system}.
11094
11095 @menu
11096 * Services de base:: Services systèmes essentiels.
11097 * Exécution de tâches planifiées:: Le service mcron.
11098 * Rotation des journaux:: Le service rottlog.
11099 * Services réseau:: Paramétres réseau, démon SSH, etc.
11100 * Système de fenêtrage X:: Affichage graphique.
11101 * Services d'impression:: Support pour les imprimantes locales et
11102 distantes.
11103 * Services de bureaux:: D-Bus et les services de bureaux.
11104 * Services de son:: Services ALSA et Pulseaudio.
11105 * Services de bases de données:: Bases SQL, clefs-valeurs, etc.
11106 * Services de courriels:: IMAP, POP3, SMTP, et tout ça.
11107 * Services de messagerie:: Services de messagerie.
11108 * Services de téléphonie:: Services de téléphonie.
11109 * Services de surveillance:: Services de surveillance.
11110 * Services Kerberos:: Services Kerberos.
11111 * Services web:: Services web.
11112 * Services de certificats:: Certificats TLS via Let's Encrypt.
11113 * Services DNS:: Démons DNS@.
11114 * Services VPN:: Démons VPN
11115 * Système de fichiers en réseau:: Services liés à NFS@.
11116 * Intégration continue:: Le service Cuirass.
11117 * Services de gestion de l'énergie:: Augmenter la durée de vie de la
11118 batterie.
11119 * Services audio:: MPD@.
11120 * Services de virtualisation:: Services de virtualisation.
11121 * Services de contrôle de version:: Fournit des accès distants à des
11122 dépôts Git.
11123 * Services de jeu:: Serveurs de jeu.
11124 * Services divers:: D'autres services.
11125 @end menu
11126
11127 @node Services de base
11128 @subsubsection Services de base
11129
11130 Le module @code{(gnu services base)} fournit des définitions de services
11131 poru les services de base qu'on peut attendre du système. Les services
11132 exportés par ce module sort listés ci-dessous.
11133
11134 @defvr {Variable Scheme} %base-services
11135 Cette variable contient une liste de services de base (@pxref{Types service et services}, pour plus d'informations sur les objets service) qu'on peut
11136 attendre du système : un service de connexion (mingetty) sur chaque tty,
11137 syslogd, le démon de cache de noms de la libc (nscd), le gestionnaire de
11138 périphériques udev, et plus.
11139
11140 C'est la valeur par défaut du champ @code{services} des déclarations
11141 @code{operating-system}. Habituellement, lors de la personnalisation d'un
11142 système, vous voudrez ajouter des services à ceux de @var{%base-services},
11143 comme ceci :
11144
11145 @example
11146 (cons* (avahi-service) (lsh-service) %base-services)
11147 @end example
11148 @end defvr
11149
11150 @defvr {Variable Scheme} special-files-service-type
11151 C'est le service qui met en place des « fichiers spéciaux » comme
11152 @file{/bin/sh} ; une instance de ce service fait partie de
11153 @code{%base-services}.
11154
11155 La valeur associée avec les services @code{special-files-service-type} doit
11156 être une liste de couples dont le premier élément est le « fichier spécial »
11157 et le deuxième sa cible. Par défaut il s'agit de :
11158
11159 @cindex @file{/bin/sh}
11160 @cindex @file{sh}, dans @file{/bin}
11161 @example
11162 `(("/bin/sh" ,(file-append @var{bash} "/bin/sh")))
11163 @end example
11164
11165 @cindex @file{/usr/bin/env}
11166 @cindex @file{env}, dans @file{/usr/bin}
11167 Si vous voulez ajouter, disons, @code{/usr/bin/env} à votre système, vous
11168 pouvez changer cela en :
11169
11170 @example
11171 `(("/bin/sh" ,(file-append @var{bash} "/bin/sh"))
11172 ("/usr/bin/env" ,(file-append @var{coreutils} "/bin/env")))
11173 @end example
11174
11175 Comme il fait parti de @code{%base-services}, vous pouvez utiliser
11176 @code{modify-services} pour personnaliser l'ensemble des fichiers spéciaux
11177 (@pxref{Référence de service, @code{modify-services}}). Mais une manière plus
11178 simple d'ajouter un fichier spécial est d'utiliser la procédure
11179 @code{extra-special-file} (voir plus bas).
11180 @end defvr
11181
11182 @deffn {Procédure Scheme} extra-special-file @var{file} @var{target}
11183 Utilise @var{target} comme « fichier spécial » @var{file}.
11184
11185 Par exemple, ajouter l'une des lignes suivantes au champ @code{services} de
11186 votre déclaration de système d'exploitation crée un lien symbolique
11187 @file{/usr/bin/env} :
11188
11189 @example
11190 (extra-special-file "/usr/bin/env"
11191 (file-append coreutils "/bin/env"))
11192 @end example
11193 @end deffn
11194
11195 @deffn {Procédure Scheme} host-name-service @var{name}
11196 Renvoie un service qui paramètre le nom d'hôte à @var{name}.
11197 @end deffn
11198
11199 @deffn {Procédure Scheme} login-service @var{config}
11200 Renvoie un service pour lancer login en suivant @var{config}, un objet
11201 @code{<login-configuration>} qui spécifie le message du jour, entre autres
11202 choses.
11203 @end deffn
11204
11205 @deftp {Type de données} login-configuration
11206 Le type de données qui représente la configuration de login.
11207
11208 @table @asis
11209
11210 @item @code{motd}
11211 @cindex message du jour
11212 Un objet simili-fichier contenant le « message du jour ».
11213
11214 @item @code{allow-empty-passwords?} (par défaut : @code{#t})
11215 Permet les mots de passes vides par défaut pour que les utilisateurs
11216 puissent se connecter au compte « root » la première fois après sa création.
11217
11218 @end table
11219 @end deftp
11220
11221 @deffn {Procédure Scheme} mingetty-service @var{config}
11222 Renvoie un service qui lance mingetty en suivant @var{config}, un objet
11223 @code{<mingetty-configuration>}, qui spécifie le tty à lancer entre autres
11224 choses.
11225 @end deffn
11226
11227 @deftp {Type de données} mingetty-configuration
11228 C'est le type de données représentant la configuration de Mingetty, qui
11229 fournit l'implémentation par défaut de l'écran de connexion des consoles
11230 virtuelles.
11231
11232 @table @asis
11233
11234 @item @code{tty}
11235 Le nom de la console sur laquelle tourne ce Mingetty, p.@: ex.@:
11236 @code{"tty1"}.
11237
11238 @item @code{auto-login} (par défaut : @code{#f})
11239 Lorsque la valeur est vraie, ce champ doit être une chaîne de caractère
11240 dénotant le nom d'utilisateur pour lequel le système se connecte
11241 automatiquement. Lorsque la valeur est @code{#f}, il faut entrer un nom
11242 d'utilisateur et un mot de passe pour se connecter.
11243
11244 @item @code{login-program} (par défaut : @code{#f})
11245 Ce doit être soit @code{#f}, auquel cas le programme de connexion par défaut
11246 est utilisé (@command{login} de la suite d'outils Shadow), soit une gexp
11247 dénotant le nom d'un programme de connexion.
11248
11249 @item @code{login-pause?} (par défaut : @code{#f})
11250 Lorsque la valeur est @code{#t} en plus de @var{auto-login}, l'utilisateur
11251 devrai appuyer sur une touche avant que le shell de connexion ne soit lancé.
11252
11253 @item @code{mingetty} (par défaut : @var{mingetty})
11254 Le paquet Mingetty à utiliser.
11255
11256 @end table
11257 @end deftp
11258
11259 @deffn {Procédure Scheme} agetty-service @var{config}
11260 Renvoie un service pour lancer agetty en suivant @var{config}, un objet
11261 @code{<agetty-configuration>}, qui spécifie le tty à lancer, entre autres
11262 choses.
11263 @end deffn
11264
11265 @deftp {Type de données} agetty-configuration
11266 Ce type de données représente la configuration de agetty, qui implémente
11267 l'écran de connexion des consoles virtuelles et series. Voir la page de
11268 manuel de @code{agetty(8)} pour plus d'informations.
11269
11270 @table @asis
11271
11272 @item @code{tty}
11273 Le nom de la console sur laquelle agetty est lancé p.@: ex.@:
11274 @code{"ttyS0"}. Cet argument est facultatif, il aura par défaut une valeur
11275 raisonnable d'un port série utilisé par le noyau Linux.
11276
11277 Pour cela, s'il y a une valeur pour une option @code{agetty.tty} sur la
11278 ligne de commande du noyau, agetty extraira le nom du périphérique du port
11279 série à partir de cette option.
11280
11281 Sinon et s'il y a une valeur pour une option @code{console} avec un tty sur
11282 la ligne de commande du noyau Linux, agetty extraira le nom du périphérique
11283 du port série et l'utilisera.
11284
11285 In both cases, agetty will leave the other serial device settings (baud rate
11286 etc.)@: alone---in the hope that Linux pinned them to the correct values.
11287
11288 @item @code{baud-rate} (par défaut : @code{#f})
11289 Une chaîne qui contient une liste d'un ou plusieurs taux de baud séparés par
11290 des virgules, en ordre décroissant.
11291
11292 @item @code{term} (par défaut : @code{#f})
11293 Une chaîne contenant la valeur utilisée pour la variable d'environnement
11294 @code{TERM}.
11295
11296 @item @code{eight-bits?} (par défaut : @code{#f})
11297 Lorsque la valeur est @code{#t}, le tty est supposé être propre pour les
11298 caractères 8-bit et la détection de parité est désactivée.
11299
11300 @item @code{auto-login} (par défaut : @code{#f})
11301 Lorsqu'un nom de connexion est passé comme une chaîne de caractères,
11302 l'utilisateur spécifié sera automatiquement connecté sans demande du nom
11303 d'utilisateur ni du mot de passe.
11304
11305 @item @code{no-reset?} (par défaut : @code{#f})
11306 Lorsque la valeur est @code{#t}, ne vide pas les cflags du terminal (modes
11307 de contrôle).
11308
11309 @item @code{host} (par défaut : @code{#f})
11310 Cette option accepte une chaîne contenant le « login_host », qui sera écrit
11311 dans le fichier @file{/var/run/utmpx}.
11312
11313 @item @code{remote?} (par défaut : @code{#f})
11314 Lorsque la valeur est @code{#t} en plus de @var{host}, cette option ajoutera
11315 une option fakehost @code{-r} à la ligne de commande du programme de
11316 connexion spécifié dans @var{login-program}.
11317
11318 @item @code{flow-control?} (par défaut : @code{#f})
11319 Lorsque la valeur est @code{#t}, active le contrôle de flux matériel
11320 (RTS/CTS).
11321
11322 @item @code{no-issue?} (par défaut : @code{#f})
11323 Lorsque la valeur est @code{#t}, le contenu du fichier @file{/etc/issue} ne
11324 sera pas affiché avant de présenter l'écran de connexion.
11325
11326 @item @code{init-string} (par défaut : @code{#f})
11327 Cette option accepte une chaîne de caractères qui sera envoyée au tty ou au
11328 modem avant toute autre chose. Elle peut être utilisée pour initialiser un
11329 modem.
11330
11331 @item @code{no-clear?} (par défaut : @code{#f})
11332 Lorsque la valeur est @code{#t}, agetty ne nettoiera pas l'écran avant de
11333 montrer l'écran de connexion.
11334
11335 @item @code{login-program} (par défaut : (file-append shadow "/bin/login"))
11336 Cette option doit être soit une gexp dénotant le nom d'un programme de
11337 connexion, soit non définie, auquel cas la valeur par défaut est la commande
11338 @command{login} de la suite d'outils Shadow.
11339
11340 @item @code{local-line} (par défaut : @code{#f})
11341 Contrôle le drapeau CLOCAL. Cette option accepte l'un des trois symboles
11342 comme argument, @code{'auto}, @code{'always} ou @code{'never}. Si la valeur
11343 est @code{#f}, la valeur par défaut choisie par agetty est @code{'auto}…
11344
11345 @item @code{extract-baud?} (par défaut : @code{#f})
11346 Lorsque la valeur est @code{#t}, dit à agetty d'essayer d'extraire la taux
11347 de baud depuis les messages de statut produits par certains modems.
11348
11349 @item @code{skip-login?} (par défaut : @code{#f})
11350 Lorsque la valeur est @code{#t}, ne demande par de nom d'utilisateur. Elle
11351 peut être utilisée avec le champ @var{login-program} pour utiliser des
11352 systèmes de connexion non standards.
11353
11354 @item @code{no-newline?} (par défaut : @code{#f})
11355 Lorsque la valeur est @code{#t}, n'affiche pas de retour à la ligne avant
11356 d'afficher le fichier @file{/etc/issue}.
11357
11358 @c Is this dangerous only when used with login-program, or always?
11359 @item @code{login-options} (par défaut : @code{#f})
11360 Cette option accepte une chaîne de caractères contenant des options passées
11361 au programme login. Lorsqu'utilisé avec @var{login-program}, soyez
11362 conscient qu'un utilisateur malicieux pourrait essayer de rentrer un nom
11363 d'utilisateur contenant des options incluses qui pourraient être analysées
11364 par le programme de connexion.
11365
11366 @item @code{login-pause} (par défaut : @code{#f})
11367 Lorsque la valeur est @code{#t}, attend qu'une touche soit appuyée avant de
11368 montrer l'écran de connexion. Cela peut être utilisé avec @var{auto-login}
11369 pour sauvegarder de la mémoire en lançant les shells de manière fainéante.
11370
11371 @item @code{chroot} (par défaut : @code{#f})
11372 Change de racine dans le répertoire donné. Cette option accepte un chemin
11373 en tant que chaîne de caractères.
11374
11375 @item @code{hangup?} (par défaut : @code{#f})
11376 Utilise l'appel système Linux @code{vhangup} pour raccrocher virtuellement
11377 le terminal spécifié.
11378
11379 @item @code{keep-baud?} (par défaut : @code{#f})
11380 Lorsque la valeur est @code{#t}, essaye de garder le taux de baud existant.
11381 Les taux de baud de @var{baud-rate} sont utilisés lorsque agetty reçoit un
11382 caractères @key{BREAK}.
11383
11384 @item @code{timeout} (par défaut : @code{#f})
11385 Lorsque la valeur est un nombre entier, termine la session si aucun nom
11386 d'utilisateur n'a pu être lu après @var{timeout} secondes.
11387
11388 @item @code{detect-case?} (par défaut : @code{#f})
11389 Lorsque la valeur est @code{#t}, active le support pour la détection des
11390 terminaux en majuscule uniquement. Ce paramètre détectera qu'un nom
11391 d'utilisateur qui ne contient que des majuscules indique un terminal en
11392 majuscule et effectuera des conversion de majuscule en minuscule. Remarquez
11393 que cela ne fonctionne pas avec les caractères unicode.
11394
11395 @item @code{wait-cr?} (par défaut : @code{#f})
11396 Lorsque la valeur est @code{#t}, attend que l'utilisateur ou le modem envoie
11397 un retour chariot ou un saut de ligne avant d'afficher @file{/etc/issue} ou
11398 l'écran de connexion. Cela est typiquement utilisé avec l'option
11399 @var{init-string}.
11400
11401 @item @code{no-hints?} (par défaut : @code{#f})
11402 Lorsque la valeur est @code{#t}, n'affiche par les astuces à propos des
11403 verrouillages numériques, majuscule et défilement.
11404
11405 @item @code{no-hostname?} (par défaut : @code{#f})
11406 Par défaut, le nom d'hôte est affiché. Lorsque la valeur est @code{#t},
11407 aucun nom d'hôte ne sera affiché.
11408
11409 @item @code{long-hostname?} (par défaut : @code{#f})
11410 Par défaut, le nom d'hôte n'est affiché qu'après le premier point. Lorsque
11411 la valeur est @code{#t}, le nom d'hôte pleinement qualifié renvoyé par
11412 @code{gethostname} ou @code{getaddrinfo} sera affiché.
11413
11414 @item @code{erase-characters} (par défaut : @code{#f})
11415 Cette option accepte une chaîne de caractères de caractères supplémentaires
11416 qui devraient être interprétés comme des effacements lorsque l'utilisateur
11417 les tape dans leur nom d'utilisateur.
11418
11419 @item @code{kill-characters} (par défaut : @code{#f})
11420 Cette option accepte une chaîne de caractères qui devrait être interprété
11421 comme signifiant « ignore tous les caractères précédent » (aussi appelé un
11422 caractère « kill ») lorsque l'utilisateur tape son nom d'utilisateur.
11423
11424 @item @code{chdir} (par défaut : @code{#f})
11425 Cette option accepte, en tant que chaîne de caractères, un chemin vers un
11426 répertoire dans lequel se trouvera la commande avant la connexion.
11427
11428 @item @code{delay} (par défaut : @code{#f})
11429 Cette option accepte, en tant qu'entier, le nombre de secondes à attendre
11430 avant d'ouvrir le tty et afficher l'écran de connexion.
11431
11432 @item @code{nice} (par défaut : @code{#f})
11433 Cette option accepte, en tant qu'entier, la valeur « nice » avec laquelle le
11434 programme @command{login} tourne.
11435
11436 @item @code{extra-options} (par défaut : @code{'()})
11437 Cette option fournie un « mécanisme de secours » pour que l'utilisateur
11438 puisse ajouter des arguments de la ligne de commande arbitraires à
11439 @command{agetty} comme une liste de chaînes de caractères.
11440
11441 @end table
11442 @end deftp
11443
11444 @deffn {Procédure Scheme} kmscon-service-type @var{config}
11445 Renvoie un service qui lance
11446 @uref{https://www.freedesktop.org/wiki/Software/kmscon,kmscon} d'après
11447 @var{config}, un objet @code{<kmscon-configuration>}, qui spécifie le tty
11448 sur lequel tourner, entre autres choses.
11449 @end deffn
11450
11451 @deftp {Type de données} kmscon-configuration
11452 C'est le type de données représentant la configuration de Kscon, qui
11453 implémente l'écran de chargement de la console virtuelle.
11454
11455 @table @asis
11456
11457 @item @code{virtual-terminal}
11458 Le nom de la console sur laquelle Kmscon tourne, p.@: ex.@: @code{"tty1"}.
11459
11460 @item @code{login-program} (par défaut : @code{#~(string-append #$shadow "/bin/login")})
11461 Une gexp qui dénote le nom d'un programme de connexion. le programme de
11462 connexion par défaut est @command{login} de la suite d'outils Shadow.
11463
11464 @item @code{login-arguments} (par défaut : @code{'("-p")})
11465 Une liste d'arguments à passer à @command{login}.
11466
11467 @item @code{auto-login} (par défaut : @code{#f})
11468 Lorsqu'un nom de connexion est passé comme une chaîne de caractères,
11469 l'utilisateur spécifié sera automatiquement connecté sans demande du nom
11470 d'utilisateur ni du mot de passe.
11471
11472 @item @code{hardware-acceleration?} (par défaut : #f)
11473 S'il faut utiliser l'accélération matérielle.
11474
11475 @item @code{kmscon} (par défaut : @var{kmscon})
11476 Le paquet Kmscon à utiliser.
11477
11478 @end table
11479 @end deftp
11480
11481 @cindex name service cache daemon
11482 @cindex nscd
11483 @deffn {Procédure Scheme} nscd-service [@var{config}] [#:glibc glibc] @
11484 [#:name-services '()]
11485 Renvoie un service qui lance le démon de cache de services de noms de la
11486 libc (nscd) avec la @var{config} donnée — un objet
11487 @code{<nscd-configuration>}. @xref{Name Service Switch}, pour un exemple.
11488
11489 Parce que c'est pratique, le service du Shepherd pour nscd fournit les
11490 actions suivantes :
11491
11492 @table @code
11493 @item invalidate
11494 @cindex invalidation du cache, nscd
11495 @cindex nscd, invalidation du cache
11496 Cela invalide le cache dnné. Par exemple, en laçant :
11497
11498 @example
11499 herd invalidate nscd hosts
11500 @end example
11501
11502 @noindent
11503 on invalide le cache de noms d'hôtes de nscd.
11504
11505 @item statistiques
11506 Lancer @command{herd statistics nscd} affiche des informations sur
11507 l'utilisation de nscd et des caches.
11508 @end table
11509
11510 @end deffn
11511
11512 @defvr {Variable Scheme} %nscd-default-configuration
11513 C'est la valeur par défaut de @code{<nscd-configuration>} (voir plus bas)
11514 utilisée par @code{nscd-service}. Elle utilise les caches définis par
11515 @var{%nscd-default-caches} ; voir plus bas.
11516 @end defvr
11517
11518 @deftp {Type de données} nscd-configuration
11519 C'est le type de données qui représente la configuration du démon de cache
11520 de services de noms (nscd).
11521
11522 @table @asis
11523
11524 @item @code{name-services} (par défaut : @code{'()})
11525 Liste des paquets dénotant des @dfn{services de noms} qui doivent être
11526 visible pour nscd, p.@: ex.@: @code{(list @var{nss-mdns})}.
11527
11528 @item @code{glibc} (par défaut : @var{glibc})
11529 Objet de paquet qui dénote la Biblothèque C de GNU qui fournit la commande
11530 @command{nscd}.
11531
11532 @item @code{log-file} (par défaut : @code{"/var/log/nscd.log"})
11533 Nom du fichier journal de nscd. C'est là que les sorties de débogage sont
11534 envoyée lorsque @code{debug-level} est strictement positif.
11535
11536 @item @code{debug-level} (par défaut : @code{0})
11537 Entier qui dénote le niveau de débogage. Les entiers les plus grands
11538 signifient plus de sortie de débogage.
11539
11540 @item @code{caches} (par défaut : @var{%nscd-default-caches})
11541 Liste d'objets @code{<nscd-cache>} qui dénotent des choses à mettre en cache
11542 ; voir plus bas.
11543
11544 @end table
11545 @end deftp
11546
11547 @deftp {Type de données} nscd-cache
11548 Type de données représentant une base de données de cache de nscd et ses
11549 paramètres.
11550
11551 @table @asis
11552
11553 @item @code{database}
11554 C'est un symbole qui représente le nom de la base de donnée à mettre en
11555 cache. Les valeurs valide sont @code{passwd}, @code{group}, @code{hosts} et
11556 @code{services} qui désignent les bases de données NSS correspondantes
11557 (@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
11558
11559 @item @code{positive-time-to-live}
11560 @itemx @code{negative-time-to-live} (par défaut : @code{20})
11561 Un entier qui représente le nombre de secondes pendant lesquelles un
11562 résultat positif ou négatif reste en cache.
11563
11564 @item @code{check-files?} (par défaut : @code{#t})
11565 Indique s'il faut vérifier des mises à jours dans les fichiers correspondant
11566 à @var{database}.
11567
11568 Par exemple, lorsque @var{database} est @code{hosts}, ce drapeau indique à
11569 nscd de vérifier s'il y a des mises à jour de @file{/etc/hosts} et de les
11570 prendre en compte.
11571
11572 @item @code{persistent?} (par défaut : @code{#t})
11573 Indique si le cache devrait être stocké de manière persistante sur le
11574 disque.
11575
11576 @item @code{shared?} (par défaut : @code{#t})
11577 Indique si le cache devrait être partagé entre les utilisateurs.
11578
11579 @item @code{max-database-size} (par défaut : 32@tie{}MiB)
11580 Taille maximale en octets de la base de données en cache.
11581
11582 @c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
11583 @c settings, so leave them out.
11584
11585 @end table
11586 @end deftp
11587
11588 @defvr {Variable Scheme} %nscd-default-caches
11589 Liste d'objets @code{<nscd-cache>} utilisés par défaut par
11590 @code{nscd-configuration} (voir plus haut).
11591
11592 Elle active la mise en cache persistante et agressive des recherches de
11593 services et de noms d'hôtes. Ces derniers fournissent une recherche de noms
11594 d'hôtes plus performante, résiliente face à des serveurs de noms peu fiables
11595 et une protection de votre vie privée plus efficace — souvent le résultat
11596 des recherches de noms d'hôtes sont dans le cache local, donc les serveurs
11597 de nom externes n'ont même pas besoin d'être questionnés.
11598 @end defvr
11599
11600 @anchor{syslog-configuration-type}
11601 @cindex syslog
11602 @cindex logging
11603 @deftp {Type de données} syslog-configuration
11604 Ce type de données représente la configuration du démon syslog.
11605
11606 @table @asis
11607 @item @code{syslogd} (par défaut : @code{#~(string-append #$inetutils "/libexec/syslogd")})
11608 Le démon syslog à utiliser.
11609
11610 @item @code{config-file} (par défaut : @code{%default-syslog.conf})
11611 Le fichier de configuration de syslog à utiliser.
11612
11613 @end table
11614 @end deftp
11615
11616 @anchor{syslog-service}
11617 @cindex syslog
11618 @deffn {Procédure Scheme} syslog-service @var{config}
11619 Renvoie un service qui lance un démon syslog en suivant @var{config}.
11620
11621 @xref{syslogd invocation,,, inetutils, GNU Inetutils}, pour plus
11622 d'informations sur la syntaxe du fichier de configuration.
11623 @end deffn
11624
11625 @defvr {Variable Scheme} guix-service-type
11626 C'est le type de service qui lance le démon de construction,
11627 @command{guix-daemon} (@pxref{Invoquer guix-daemon}). Sa valeur doit être
11628 un enregistrement @code{guix-configuration} décrit plus bas.
11629 @end defvr
11630
11631 @anchor{guix-configuration-type}
11632 @deftp {Type de données} guix-configuration
11633 Ce type de données représente la configuration du démon de construction de
11634 Guix. @xref{Invoquer guix-daemon} pour plus d'informations.
11635
11636 @table @asis
11637 @item @code{guix} (par défaut : @var{guix})
11638 Le paquet Guix à utiliser.
11639
11640 @item @code{build-group} (par défaut : @code{"guixbuild"})
11641 Nom du groupe des comptes utilisateurs de construction.
11642
11643 @item @code{build-accounts} (par défaut : @code{10})
11644 Nombre de comptes utilisateurs de construction à créer.
11645
11646 @item @code{authorize-key?} (par défaut : @code{#t})
11647 @cindex substituts, autorisations
11648 Autoriser ou non les clefs de substituts listées dans @code{authorize-keys}
11649 — par défaut celle de @code{hydra.gny.org} (@pxref{Substituts}).
11650
11651 @vindex %default-authorized-guix-keys
11652 @item @code{authorized-keys} (par défaut : @var{%default-authorized-guix-keys})
11653 La liste des fichiers de clefs autorisées pour les imports d'archives, en
11654 tant que liste de gexps sous forme de chaînes (@pxref{Invoquer guix archive}). Par défaut, elle contient celle de @code{hydra.gnu.org}
11655 (@pxref{Substituts}).
11656
11657 @item @code{use-substitutes?} (par défaut : @code{#t})
11658 S'il faut utiliser les substituts.
11659
11660 @item @code{substitute-urls} (par défaut : @var{%default-substitute-urls})
11661 La liste des URL où trouver des substituts par défaut.
11662
11663 @item @code{max-silent-time} (par défaut : @code{0})
11664 @itemx @code{timeout} (par défaut : @code{0})
11665 Le nombre de secondes de silence et le nombre de secondes d'inactivité,
11666 respectivement, après lesquelles un processus de construction son délai
11667 d'attente. Une valeur de zéro désactive le délai d'attente.
11668
11669 @item @code{log-compression} (par défaut : @code{'bzip2})
11670 Le type de compression utilisé par les journaux de construction — parmi
11671 @code{gzip}, @code{bzip2} et @code{none}.
11672
11673 @item @code{extra-options} (par défaut : @code{'()})
11674 Liste d'options supplémentaires de la ligne de commande pour
11675 @command{guix-daemon}.
11676
11677 @item @code{log-file} (par défaut : @code{"/var/log/guix-daemon.log"})
11678 Le fichier où les sorties standard et d'erreur de @command{guix-daemon} sont
11679 écrites.
11680
11681 @item @code{http-proxy} (par défaut : @code{#f})
11682 Le serveur mandataire HTTP à utiliser pour télécharger les dérivations à
11683 sortie fixe et les substituts.
11684
11685 @item @code{tmpdir} (par défaut : @code{#f})
11686 Un répertoire où @command{guix-daemon} effectuera ses constructions.
11687
11688 @end table
11689 @end deftp
11690
11691 @deffn {Procédure Scheme} udev-service [#:udev @var{eudev} #:rules @code{'()}]
11692 Lance @var{udev}, qui rempli le répertoire @file{/dev} dynamiquement. Les
11693 règles udev peuvent être fournies comme une liste de fichier via la variable
11694 @var{rules}. Les procédures @var{udev-rule} et @var{file->udev-rule} de
11695 @code{(gnu services base)} simplifient la création de ces fichiers de règle.
11696
11697 @deffn {Procédure Scheme} udev-rule [@var{file-name} @var{contents}]
11698 Renvoie un fichier de règle udev nommé @var{file-name} contenant les règles
11699 définie par le litéral @var{contents}.
11700
11701 Dans l'exemple suivant, on définie une règle pour un périphérique USB qui
11702 sera stockée dans le fichier @file{90-usb-thing.rules}. La règle lance un
11703 script à la détection du périphérique USB avec l'identifiant de produit
11704 donné.
11705
11706 @example
11707 (define %example-udev-rule
11708 (udev-rule
11709 "90-usb-thing.rules"
11710 (string-append "ACTION==\"add\", SUBSYSTEM==\"usb\", "
11711 "ATTR@{product@}==\"Example\", "
11712 "RUN+=\"/path/to/script\"")))
11713 @end example
11714 @end deffn
11715
11716 Ici on montre comment le service @var{udev-service} par défaut peut être
11717 étendu avec cette règle.
11718
11719 @example
11720 (operating-system
11721 ;; @dots{}
11722 (services
11723 (modify-services %desktop-services
11724 (udev-service-type config =>
11725 (udev-configuration (inherit config)
11726 (rules (append (udev-configuration-rules config)
11727 (list %example-udev-rule))))))))
11728 @end example
11729
11730 @deffn {Procédure Scheme} file->udev-rule [@var{file-name} @var{file}]
11731 Renvoie un fichier udev nommé @var{file-name} contenant les règles définies
11732 dans @var{file}, un objet simili-fichier.
11733
11734 L'exemple suivant montre comment utiliser un fichier de règles existant.
11735
11736 @example
11737 (use-modules (guix download) ;pour url-fetch
11738 (guix packages) ;pour origin
11739 ;; @dots{})
11740
11741 (define %android-udev-rules
11742 (file->udev-rule
11743 "51-android-udev.rules"
11744 (let ((version "20170910"))
11745 (origin
11746 (method url-fetch)
11747 (uri (string-append "https://raw.githubusercontent.com/M0Rf30/"
11748 "android-udev-rules/" version "/51-android.rules"))
11749 (sha256
11750 (base32 "0lmmagpyb6xsq6zcr2w1cyx9qmjqmajkvrdbhjx32gqf1d9is003"))))))
11751 @end example
11752 @end deffn
11753
11754 En plus, les définitions des paquets de Guix peuvent être inclus dans
11755 @var{rules} pour étendre les règles avec les définitions trouvées dans leur
11756 sous-répertoire @file{lib/udev/rules.d}. Au lieu de l'exemple
11757 @var{file->udev-rule} précédent, on aurait pu utiliser le paquet
11758 @var{android-udev-rules} qui existe dans le module @code{(gnu packages
11759 android)}.
11760
11761 L'exemple suivant montre comment utiliser le paquet @var{android-udev-rules}
11762 pour que l'outil Android @command{adb} puisse détecter les appareils sans
11763 privilège root. Il détaille aussi comment créer le grope @code{adbusers},
11764 requis pour le bon fonctionnement des règles définies dans le paquet
11765 @var{android-udev-rules}. Pour créer ce groupe, on doit le définir dans les
11766 @var{supplementary-groups} de la déclaration @var{user-account} ainsi que
11767 dans le champ @var{groups} de l'enregistrement @var{operating-system}.
11768
11769 @example
11770 (use-modules (gnu packages android) ;for android-udev-rules
11771 (gnu system shadow) ;for user-group
11772 ;; @dots{})
11773
11774 (operating-system
11775 ;; @dots{}
11776 (users (cons (user-acount
11777 ;; @dots{}
11778 (supplementary-groups
11779 '("adbusers" ;for adb
11780 "wheel" "netdev" "audio" "video"))
11781 ;; @dots{})))
11782
11783 (groups (cons (user-group (system? #t) (name "adbusers"))
11784 %base-groups))
11785
11786 ;; @dots{}
11787
11788 (services
11789 (modify-services %desktop-services
11790 (udev-service-type config =>
11791 (udev-configuration (inherit config)
11792 (rules (cons* android-udev-rules
11793 (udev-configuration-rules config))))))))
11794 @end example
11795 @end deffn
11796
11797 @defvr {Variable Scheme} urandom-seed-service-type
11798 Garde de l'entropie dans @var{%random-seed-file} pour démarrer
11799 @file{/dev/urandom} au redémarrage. Ce service essaye aussi de démarrer
11800 @file{/dev/urandom} à partir de @file{/dev/hwrng} au démarrage si
11801 @file{/dev/hwrng} existe et peut être lu.
11802 @end defvr
11803
11804 @defvr {Variable Scheme} %random-seed-file
11805 C'est le nom du fichier où des octets aléatoires sont sauvegardés par
11806 @var{urandom-seed-service} pour démarrer @file{/dev/urandom} au
11807 redémarrage. Sa valeur par défaut est @file{/var/lib/random-seed}.
11808 @end defvr
11809
11810 @cindex disposition clavier
11811 @cindex clavier
11812 @deffn {Procédure Scheme} console-keymap-service @var{files} ...
11813 @cindex disposition du clavier
11814 Renvoie un service qui charge les dispositions claviers de @var{files} avec
11815 la commande @command{loadkeys}. Vraisemblablement, vous voudrez charger une
11816 disposition par défaut, ce qui se fait ainsi :
11817
11818 @example
11819 (console-keymap-service "dvorak")
11820 @end example
11821
11822 Ou par exemple pour un clavier suédois, vous pourriez avoir besoin de
11823 combiner les dispositions suivantes :
11824 @example
11825 (console-keymap-service "se-lat6" "se-fi-lat6")
11826 @end example
11827
11828 Vous pouvez aussi spécifier le nom de fichier (ou les noms de fichiers)
11829 complets de vos dispositions. Voir @code{man loadkeys} pour des détails.
11830
11831 @end deffn
11832
11833 @cindex souris
11834 @cindex gpm
11835 @defvr {Variable Scheme} gpm-service-type
11836 C'est le type du service qui lance GPM, le @dfn{démon de souris à but
11837 général}, qui fournit le support de la souris sur la console Linux. GPM
11838 permet aux utilisateurs d'utiliser la souris dans la console, entre autres
11839 pour sélectionner, copier et coller du texte.
11840
11841 La valeur pour les services de ce type doit être un @code{gpm-configuration}
11842 (voir plus bas). Ce service ne fait pas partie de @var{%base-services}.
11843 @end defvr
11844
11845 @deftp {Type de données} gpm-configuration
11846 Type de données représentant la configuration de GPM.
11847
11848 @table @asis
11849 @item @code{options} (par défaut : @code{%default-gpm-options})
11850 Les options de la ligne de commande à passer à @command{gpm}. L'ensemble
11851 des options par défaut dit à @command{gpm} d'écouter les événements de la
11852 souris dans @file{/dev/input/mice}. @xref{Command Line,,, gpm, gpm manual},
11853 pour plus d'informations.
11854
11855 @item @code{gpm} (par défaut : @code{gpm})
11856 Le paquet GPM à utiliser.
11857
11858 @end table
11859 @end deftp
11860
11861 @anchor{guix-publish-service-type}
11862 @deffn {Variable Scheme} guix-publish-service-type
11863 C'est le type de service pour @command{guix publish} (@pxref{Invoquer guix publish}). Sa valeur doit être un objet @code{guix-configuration} décrit
11864 plus bas.
11865
11866 Ce service suppose que @file{/etc/guix} contient déjà une paire de clefs
11867 créée par @command{guix archive --generate-key} (@pxref{Invoquer guix archive}). Si ce n'est pas le cas, le service ne démarrera pas.
11868 @end deffn
11869
11870 @deftp {Type de données} guix-publish-configuration
11871 Le type de données représentant la configuration du service @code{guix
11872 publish}.
11873
11874 @table @asis
11875 @item @code{guix} (par défaut : @code{guix})
11876 Le paquet Guix à utiliser.
11877
11878 @item @code{port} (par défaut : @code{80})
11879 Le port TCP sur lequel écouter les connexions.
11880
11881 @item @code{host} (par défaut : @code{"localhost"})
11882 L'hôte (et donc, l'interface réseau) sur lequel écouter. Utilisez
11883 @code{"0.0.0.0"} pour écouter sur toutes les interfaces réseaux.
11884
11885 @item @code{compression-level} (par défaut : @code{3})
11886 Le niveau de compression gzip auquel les substituts sont compressés.
11887 Utilisez @code{0} pour désactiver complètement la compression, et @code{9}
11888 pour avoir le meilleur taux de compression contre une plus grande
11889 utilisation du CPU.
11890
11891 @item @code{nar-path} (par défaut : @code{"nar"})
11892 Le chemin d'URL où les « nars » se trouvent. @xref{Invoquer guix publish,
11893 @code{--nar-path}}, pour des détails.
11894
11895 @item @code{cache} (par défaut : @code{#f})
11896 Lorsque la valeur est @code{#f}, désactive le cache et génère les archives à
11897 la demande. Sinon, cela devrait être le nom d'un répertoire — p.@: ex.@:
11898 @code{"/var/cache/guix/publish"} — où @command{guix publish} gère le cache
11899 des archives et des métadonnées prêtes à être envoyées. @xref{Invoquer guix publish, @option{--cache}}, pour plus d'informations sur les compromis
11900 impliqués.
11901
11902 @item @code{workers} (par défaut : @code{#f})
11903 Lorsque la valeur est un entier, c'est le nombre de threads de travail
11904 utilisés pour le cache ; lorsque la valeur est @code{#f}, le nombre de
11905 processeurs est utilisé. @xref{Invoquer guix publish, @option{--workers}},
11906 pour plus d'informations.
11907
11908 @item @code{ttl} (par défaut : @code{#f})
11909 Lorsque la valeur est un entier, il dénote la @dfn{durée de vie} en secondes
11910 des archives publiées. @xref{Invoquer guix publish, @option{--ttl}}, pour
11911 plus d'informations.
11912 @end table
11913 @end deftp
11914
11915 @anchor{rngd-service}
11916 @deffn {Procédure Scheme} rngd-service [#:rng-tools @var{rng-tools}] @
11917 [#:device "/dev/hwrng"]
11918 Renvoie un service qui lance le programme @command{rngd} de @var{rng-tools}
11919 pour ajouter @var{device} à la réserve d'entropie du noyau. Le service
11920 échouera si @var{device} n'existe pas.
11921 @end deffn
11922
11923 @anchor{pam-limits-service}
11924 @cindex limites de session
11925 @cindex ulimit
11926 @cindex priorités
11927 @cindex temps réel
11928 @cindex jackd
11929 @deffn {Procédure Scheme} pam-limits-service [#:limits @code{'()}]
11930
11931 Renvoie un service qui installe un fichier de configuration pour le
11932 @uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html, module
11933 @code{pam_limits}}. La procédure prend éventuellement une liste de valeurs
11934 @code{pam-limits-entry} qui peuvent être utilisées pour spécifier les
11935 limites @code{ulimit} et les priorités des sessions utilisateurs.
11936
11937 La définition de limites suivante défini deux limites matérielles et
11938 logicielles pour toutes les sessions connectées des utilisateurs du groupe
11939 @code{realtime} :
11940
11941 @example
11942 (pam-limits-service
11943 (list
11944 (pam-limits-entry "@@realtime" 'both 'rtprio 99)
11945 (pam-limits-entry "@@realtime" 'both 'memlock 'unlimited)))
11946 @end example
11947
11948 La première entrée augment la priorité en temps réel maximale des processus
11949 non privilégiés ; la deuxième entrée abandonne les restrictions sur l'espace
11950 d'adressage maximal qui peut être verrouillé en mémoire. Ces paramètres
11951 sont souvent utilisés sur les systèmes audio temps-réel.
11952 @end deffn
11953
11954 @node Exécution de tâches planifiées
11955 @subsubsection Exécution de tâches planifiées
11956
11957 @cindex cron
11958 @cindex mcron
11959 @cindex tâches planifiées
11960 Le module @code{(gnu services mcron)} fournit une interface pour
11961 GNU@tie{}mcron, un démon qui lance des tâches planifiées (@pxref{Top,,,
11962 mcron, GNU@tie{}mcron}). GNU@tie{}mcron est similaire au démon Unix
11963 traditionel @command{cron} ; la principale différence est qu'il est
11964 implémenté en Guile Scheme, qui fournit beaucoup de flexibilité lors de la
11965 spécification de la planification des tâches et de leurs actions.
11966
11967 L'exemple en dessous définit un système d'exploitation qu lance les
11968 commandes @command{updatebd} (@pxref{Invoking updatedb,,, find, Finding
11969 Files}) et @command{guix gc} (@pxref{Invoquer guix gc}) tous les jours,
11970 ainsi que la commande @command{mkid} en tant qu'utilisateur non privilégié
11971 (@pxref{mkid invocation,,, idutils, ID Database Utilities}). Il utilise des
11972 gexps pour introduire des définitions de tâches qui sont passées à mcron
11973 (@pxref{G-Expressions}).
11974
11975 @lisp
11976 (use-modules (guix) (gnu) (gnu services mcron))
11977 (use-package-modules base idutils)
11978
11979 (define updatedb-job
11980 ;; Lance « updatedb » à 3h du matin chaque jour. Ici nous spécifions
11981 ;; l'action de la tâche comme une procédure Scheme.
11982 #~(job '(next-hour '(3))
11983 (lambda ()
11984 (execl (string-append #$findutils "/bin/updatedb")
11985 "updatedb"
11986 "--prunepaths=/tmp /var/tmp /gnu/store"))))
11987
11988 (define garbage-collector-job
11989 ;; Lance le ramasse-miettes tous les jours à minuit cinq.
11990 ;; L'action de la tâche est une commande shell.
11991 #~(job "5 0 * * *" ;Vixie cron syntax
11992 "guix gc -F 1G"))
11993
11994 (define idutils-job
11995 ;; Met à jour la base de données d'index en tant que « charlie » à 12h15
11996 ;; et 19h15. La commande est lancée depuis le répertoire personnel de l'utilisateur.
11997 #~(job '(next-minute-from (next-hour '(12 19)) '(15))
11998 (string-append #$idutils "/bin/mkid src")
11999 #:user "charlie"))
12000
12001 (operating-system
12002 ;; @dots{}
12003 (services (cons (mcron-service (list garbage-collector-job
12004 updatedb-job
12005 idutils-job))
12006 %base-services)))
12007 @end lisp
12008
12009 @xref{Guile Syntax, mcron job specifications,, mcron, GNU@tie{}mcron}, pour
12010 plus d'informations sur les spécifications des tâche de mcron. Ci-dessous
12011 est la référence du service mcron.
12012
12013 Sur un système lancé, vous pouvez utiliser l'action @code{schedule} du
12014 service pour visualiser les travaux mcron qui seront exécutés ensuite :
12015
12016 @example
12017 # herd schedule mcron
12018 @end example
12019
12020 @noindent
12021 Cet exemple ci-dessus montre les cinq tâches qui seront exécutés, mais vous
12022 pouvez spécifier le nombre de tâches à afficher :
12023
12024 @example
12025 # herd schedule mcron 10
12026 @end example
12027
12028 @deffn {Procédure Scheme} mcron-service @var{jobs} [#:mcron @var{mcron}]
12029 Renvoie un service mcron qui lance @var{mcron} qui planifie les tâches
12030 @var{jobs}, une liste de gexps qui dénotent des spécifications de tâches de
12031 mcron.
12032
12033 C'est un raccourci pour :
12034 @example
12035 (service mcron-service-type
12036 (mcron-configuration (mcron mcron) (jobs jobs)))
12037 @end example
12038 @end deffn
12039
12040 @defvr {Variable Scheme} mcron-service-type
12041 C'est le type du service @code{mcron}, dont la valeur est un objet
12042 @code{mcron-configuration}
12043
12044 Ce type de service peut être la cible d'une extension de service qui lui
12045 fournit des spécifications de tâches supplémentaires (@pxref{Composition de services}). En d'autres termes, il est possible de définir des services
12046 qui fournissent des tâches mcron à lancer.
12047 @end defvr
12048
12049 @deftp {Type de données} mcron-configuration
12050 Type données qui représente la configuration de mcron.
12051
12052 @table @asis
12053 @item @code{mcron} (par défaut : @var{mcron})
12054 Le paquet mcron à utiliser.
12055
12056 @item @code{jobs}
12057 C'est la liste des gexps (@pxref{G-Expressions}), où chaque gexp correspond
12058 à une spécification de tâche de mcron (@pxref{Syntax, mcron job
12059 specifications,, mcron, GNU@tie{}mcron}).
12060 @end table
12061 @end deftp
12062
12063
12064 @node Rotation des journaux
12065 @subsubsection Rotation des journaux
12066
12067 @cindex rottlog
12068 @cindex journaux, rotation
12069 @cindex logging
12070 Les fichiers journaux comme ceux qui se trouvent dans @file{/var/log} ont
12071 tendance à grandir sans fin, donc c'est une bonne idée de le @dfn{faire
12072 tourner} de temps à autres — c.-à-d.@: archiver leur contenu dans des
12073 fichiers séparés, potentiellement compressés. Le module @code{(gnu services
12074 admin)} fournit une interface pour GNU@tie{}Rot[t]log, un outil de rotation
12075 de journaux (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}).
12076
12077 L'exemple ci-dessous définit un système d'exploitation qui fournit la
12078 rotation des journaux avec les paramètres par défaut, pour les journaux les
12079 plus courants.
12080
12081 @lisp
12082 (use-modules (guix) (gnu))
12083 (use-service-modules admin mcron)
12084 (use-package-modules base idutils)
12085
12086 (operating-system
12087 ;; @dots{}
12088 (services (cons (service rottlog-service-type)
12089 %base-services)))
12090 @end lisp
12091
12092 @defvr {Variable Scheme} rottlog-service-type
12093 C'est le type du service Rotlog, dont la valeur est un objet
12094 @code{rottlog-configuration}.
12095
12096 D'autres services peuvent étendre celui-ci avec de nouveaux objets
12097 @code{log-rotation} (voir plus bas), en augmentant ainsi l'ensemble des
12098 fichiers à faire tourner.
12099
12100 Ce type de service peut définir des taches (@pxref{Exécution de tâches planifiées})
12101 pour lancer le service rottlog.
12102 @end defvr
12103
12104 @deftp {Type de données} rottlog-configuration
12105 Type de données représentant la configuration de rottlog.
12106
12107 @table @asis
12108 @item @code{rottlog} (par défaut : @code{rottlog})
12109 Le paquet Rottlog à utiliser.
12110
12111 @item @code{rc-file} (par défaut : @code{(file-append rottlog "/etc/rc")})
12112 Le fichier de configuration Rottlog à utiliser (@pxref{Mandatory RC
12113 Variables,,, rottlog, GNU Rot[t]log Manual}).
12114
12115 @item @code{rotations} (par défaut : @code{%default-rotations})
12116 Une liste d'objets @code{log-rotation} définis plus bas.
12117
12118 @item @code{jobs}
12119 C'est une liste de gexps où chaque gexp correspond à une spécification de
12120 tache de mcron (@pxref{Exécution de tâches planifiées}).
12121 @end table
12122 @end deftp
12123
12124 @deftp {Type de données} log-rotation
12125 Type de données représentant la rotation d'un groupe de fichiers journaux.
12126
12127 En reprenant un exemple du manuel de Rottlog (@pxref{Period Related File
12128 Examples,,, rottlog, GNU Rot[t]log Manual}), on peut définir la rotation
12129 d'un journal de cette manière :
12130
12131 @example
12132 (log-rotation
12133 (frequency 'daily)
12134 (files '("/var/log/apache/*"))
12135 (options '("storedir apache-archives"
12136 "rotate 6"
12137 "notifempty"
12138 "nocompress")))
12139 @end example
12140
12141 La liste des champs est la suivante :
12142
12143 @table @asis
12144 @item @code{frequency} (par défaut : @code{'weekly})
12145 La fréquence de rotation, un symbole.
12146
12147 @item @code{files}
12148 La liste des fichiers ou des motifs de noms de fichiers à faire tourner.
12149
12150 @item @code{options} (par défaut : @code{'()})
12151 La liste des options de rottlog pour cette rotation (@pxref{Configuration
12152 parameters,,, rottlog, GNU Rot[t]lg Manual}).
12153
12154 @item @code{post-rotate} (par défaut : @code{#f})
12155 Soit @code{#f}, soit une gexp à exécuter une fois la rotation terminée.
12156 @end table
12157 @end deftp
12158
12159 @defvr {Variable Scheme} %default-rotations
12160 Spécifie la rotation hebdomadaire de @var{%rotated-files} et de quelques
12161 autres fichiers.
12162 @end defvr
12163
12164 @defvr {Variable Scheme} %rotated-files
12165 La liste des fichiers contrôlés par syslog à faire tourner. Par défaut il
12166 s'agit de : @code{'("/var/log/messages" "/var/log/secure")}
12167 @end defvr
12168
12169 @node Services réseau
12170 @subsubsection Services réseau
12171
12172 Le module @code{(gnu services networking)} fournit des services pour
12173 configurer les interfaces réseaux.
12174
12175 @cindex DHCP, service réseau
12176 @defvr {Variable Scheme} dhcp-client-service-type
12177 C'est le type de services qui lance @var{dhcp}, un client DHC (protocole de
12178 configuration d'hôte dynamique) sur toutes les interfaces réseau
12179 non-loopback. Sa valeur est le paquet du client DHCP à utiliser,
12180 @code{isc-dhcp} par défaut.
12181 @end defvr
12182
12183 @deffn {Procédure Scheme} dhcpd-service-type
12184 Ce type définie un service qui lance un démon DHCP. Pour créer un service
12185 de ce type, vous devez appliquer un objet @code{<dhcpd-configuration>}. Par
12186 exemple :
12187
12188 @example
12189 (service dhcpd-service-type
12190 (dhcpd-configuration
12191 (config-file (local-file "my-dhcpd.conf"))
12192 (interfaces '("enp0s25"))))
12193 @end example
12194 @end deffn
12195
12196 @deftp {Type de données} dhcpd-configuration
12197 @table @asis
12198 @item @code{package} (par défaut : @code{isc-dhcp})
12199 Le paquet qui fournit le démon DHCP. ce paquet doit fournir le démon
12200 @file{sbin/dhcpd} relativement à son répertoire de sortie. Le paquet par
12201 défaut est le @uref{http://www.isc.org/products/DHCP, serveur DHCP d'ISC}
12202 @item @code{config-file} (par défaut : @code{#f})
12203 Le fichier de configuration à utiliser. Il est requis. Il sera passé à
12204 @code{dhcpd} via son option @code{-cf}. La valeur peut être n'importe quel
12205 objet « simili-fichier » (@pxref{G-Expressions, file-like objects}). Voir
12206 @code{man dhcpd.conf} pour des détails sur la syntaxe du fichier de
12207 configuration.
12208 @item @code{version} (par défaut : @code{"4"})
12209 La version de DHCP à utiliser. Le serveur DHCP d'ISC supporte les valeur «
12210 4 », « 6 » et « 4o6 ». Elles correspondent aux options @code{-4}, @code{-6}
12211 et @code{-4o6} du programme @code{dhcpd}. Voir @code{man dhcpd} pour plus
12212 de détails.
12213 @item @code{run-directory} (par défaut : @code{"/run/dhcpd"})
12214 Le répertoire d'exécution à utiliser. Au moment de l'activation du service,
12215 ce répertoire sera créé s'il n'existe pas.
12216 @item @code{pid-file} (par défaut : @code{"/run/dhcpd/dhcpd.pid"})
12217 Le fichier de PID à utiliser. Cela correspond à l'option @code{-pf} de
12218 @code{dhcpd}. Voir @code{man dhcpd} pour plus de détails.
12219 @item @code{interfaces} (par défaut : @code{'()})
12220 Les noms des interfaces réseaux sur lesquelles dhcpd écoute. Si cette liste
12221 n'est pas vide, alors ses éléments (qui doivent être des chaînes de
12222 caractères) seront ajoutés à l'invocation de @code{dhcpd} lors du démarrage
12223 du démon. Il n'est pas forcément nécessaire de spécifier des interfaces ici
12224 ; voir @code{man dhcpd} pour plus de détails.
12225 @end table
12226 @end deftp
12227
12228 @defvr {Variable Scheme} static-networking-service-type
12229 @c TODO Document <static-networking> data structures.
12230 C'est le type des interfaces réseaux configurés statiquement.
12231 @end defvr
12232
12233 @deffn {Procédure Scheme} static-networking-service @var{interface} @var{ip} @
12234 [#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}] @
12235 [#:requirement @code{'(udev)}]
12236 Renvoie un service qui démarre @var{interface} avec l'adresse @var{ip}. Si
12237 @var{netmask} est vrai, il sera utilisé comme masque de sous-réseau. Si
12238 @var{gateway} est vrai, ce doit être une chaîne de caractères qui spécifie
12239 la passerelle par défaut du réseau. @var{requirement} peut être utilisé
12240 pour déclarer une dépendance sur un autre service avant de configurer
12241 l'interface.
12242
12243 On peut appeler cette procédure plusieurs fois, une fois par interface
12244 réseau qui nous intéresse. Dans les coulisses, elle étend
12245 @code{static-networking-service-type} avec les interfaces réseaux
12246 supplémentaires à gérer.
12247
12248 Par exemple :
12249
12250 @example
12251 (static-networking-service "eno1" "192.168.1.82"
12252 #:gateway "192.168.1.2"
12253 #:name-servers '("192.168.1.2"))
12254 @end example
12255 @end deffn
12256
12257 @cindex wicd
12258 @cindex sans-fil
12259 @cindex WiFi
12260 @cindex gestion du réseau
12261 @deffn {Procédure Scheme} wicd-service [#:wicd @var{wicd}]
12262 Renvoie un service qui lance @url{https://launchpad.net/wicd,Wicd}, un démon
12263 de gestion réseau qui cherche à simplifier la configuration des résaux
12264 filaires et sans fil.
12265
12266 Ce service ajoute le paquet @var{wicd} au profil global, pour fournir des
12267 commandes pour interagir avec le démon et configurer le réseau :
12268 @command{wicd-client}, une interface graphique et les interfaces
12269 utilisateurs @command{wicd-cli} et @command{wicd-curses}.
12270 @end deffn
12271
12272 @cindex ModemManager
12273
12274 @defvr {Variable Scheme} modem-manager-service-type
12275 C'est le type de service pour le service
12276 @uref{https://wiki.gnome.org/Projects/ModemManager, ModemManager}. La
12277 valeur de ce type de service est un enregistrement
12278 @code{modem-manager-configuration}.
12279
12280 Ce service fait partie de @code{%desktop-services} (@pxref{Services de bureaux}).
12281 @end defvr
12282
12283 @deftp {Type de données} modem-manager-configuration
12284 Type de donnée représentant la configuration de ModemManager.
12285
12286 @table @asis
12287 @item @code{modem-manager} (par défaut : @code{modem-manager})
12288 Le paquet ModemManager à utiliser.
12289
12290 @end table
12291 @end deftp
12292
12293 @cindex NetworkManager
12294
12295 @defvr {Variable Scheme} network-manager-service-type
12296 C'est le type de service pour le service
12297 @uref{https://wiki.gnome.org/Projects/NetworkManager, NetworkManager}. La
12298 valeur pour ce type de service est un enregistrement
12299 @code{network-manager-configuration}.
12300
12301 Ce service fait partie de @code{%desktop-services} (@pxref{Services de bureaux}).
12302 @end defvr
12303
12304 @deftp {Type de données} network-manager-configuration
12305 Type de données représentant la configuration de NetworkManager.
12306
12307 @table @asis
12308 @item @code{network-manager} (par défaut : @code{network-manager})
12309 Le paquet NetworkManager à utiliser.
12310
12311 @item @code{dns} (par défaut : @code{"default"})
12312 Mode de gestion pour le DNS, qui affecte la manière dont NetworkManager
12313 utilise le fichier de configuration @code{resolv.conf}
12314
12315 @table @samp
12316 @item default
12317 NetworkManager mettra à jour @code{resolv.conf} pour refléter les serveurs
12318 de noms fournis par les connexions actives.
12319
12320 @item dnsmasq
12321 NetworkManager lancera @code{dnsmasq} en tant que serveur de cache local, en
12322 utilisant une configuration « DNS disjointe » si vous êtes connecté par un
12323 VPN puis mettra à jour @code{resolv.conf} pour pointer vers le serveur de
12324 nom local.
12325
12326 @item none
12327 NetworkManager ne modifiera pas @code{resolv.conf}.
12328 @end table
12329
12330 @item @code{vpn-plugins} (par défaut : @code{'()})
12331 C'est la liste des greffons disponibles pour les VPN (réseaux privés
12332 virtuels). Un exemple est le paquet @code{network-manager-openvpn}, qui
12333 permet à NetworkManager de gérer des VPN via OpenVPN.
12334
12335 @end table
12336 @end deftp
12337
12338 @cindex Connman
12339 @deffn {Variable Scheme} connman-service-type
12340 C'est le type de service pour lancer @url{https://01.org/connman,Connman},
12341 un gestionnaire de connexions réseaux.
12342
12343 Sa valeur doit être un enregistrement @code{connman-configuration} comme
12344 dans cet exemple :
12345
12346 @example
12347 (service connman-service-type
12348 (connman-configuration
12349 (disable-vpn? #t)))
12350 @end example
12351
12352 Voir plus bas pour des détails sur @code{connman-configuration}.
12353 @end deffn
12354
12355 @deftp {Type de données} connman-configuration
12356 Type de données représentant la configuration de connman.
12357
12358 @table @asis
12359 @item @code{connman} (par défaut : @var{connman})
12360 Le paquet connman à utiliser.
12361
12362 @item @code{disable-vpn?} (par défaut : @code{#f})
12363 Lorsque la valeur est vraie, désactive le greffon vpn de connman.
12364 @end table
12365 @end deftp
12366
12367 @cindex WPA Supplicant
12368 @defvr {Variable Scheme} wpa-supplicant-service-type
12369 C'est le type du service qui lance@url{https://w1.fi/wpa_supplicant/,WPA
12370 supplicant}, un démon d'authentification requis pour s'authentifier sur des
12371 WiFi chiffrés ou des réseaux ethernet.
12372 @end defvr
12373
12374 @deftp {Type de données} wpa-supplicant-configuration
12375 Type données qui représente la configuration de WPA Supplicant.
12376
12377 Il prend les paramètres suivants :
12378
12379 @table @asis
12380 @item @code{wpa-supplicant} (par défaut : @code{wpa-supplicant})
12381 Le paquet WPA Supplicant à utiliser.
12382
12383 @item @code{dbus?} (par défaut : @code{#t})
12384 Indique s'il faut écouter les requêtes sur D-Bus.
12385
12386 @item @code{pid-file} (par défaut : @code{"/var/run/wpa_supplicant.pid"})
12387 Où stocker votre fichier de PID.
12388
12389 @item @code{interface} (par défaut : @code{#f})
12390 Si une valeur est indiquée, elle doit spécifier le nom d'une interface
12391 réseau que WPA supplicant contrôlera.
12392
12393 @item @code{config-file} (par défaut : @code{#f})
12394 Fichier de configuration facultatif à utiliser.
12395
12396 @item @code{extra-options} (par défaut : @code{'()})
12397 Liste d'arguments de la ligne de commande supplémentaires à passer au démon.
12398 @end table
12399 @end deftp
12400
12401 @cindex iptables
12402 @defvr {Variable Scheme} iptables-service-type
12403 This is the service type to set up an iptables configuration. iptables is a
12404 packet filtering framework supported by the Linux kernel. This service
12405 supports configuring iptables for both IPv4 and IPv6. A simple example
12406 configuration rejecting all incoming connections except those to the ssh
12407 port 22 is shown below.
12408
12409 @lisp
12410 (service iptables-service-type
12411 (iptables-configuration
12412 (ipv4-rules (plain-file "iptables.rules" "*filter
12413 :INPUT ACCEPT
12414 :FORWARD ACCEPT
12415 :OUTPUT ACCEPT
12416 -A INPUT -p tcp --dport 22 -j ACCEPT
12417 -A INPUT -j REJECT --reject-with icmp-port-unreachable
12418 COMMIT
12419 "))
12420 (ipv6-rules (plain-file "ip6tables.rules" "*filter
12421 :INPUT ACCEPT
12422 :FORWARD ACCEPT
12423 :OUTPUT ACCEPT
12424 -A INPUT -p tcp --dport 22 -j ACCEPT
12425 -A INPUT -j REJECT --reject-with icmp6-port-unreachable
12426 COMMIT
12427 "))))
12428 @end lisp
12429 @end defvr
12430
12431 @deftp {Type de données} iptables-configuration
12432 Type de données représentant la configuration d'iptables.
12433
12434 @table @asis
12435 @item @code{iptables} (par défaut : @code{iptables})
12436 Le paquet iptables qui fournit @code{iptables-restore} et
12437 @code{ip6tables-restore}.
12438 @item @code{ipv4-rules} (par défaut : @code{%iptables-accept-all-rules})
12439 Les règles iptables à utiliser. Elles seront passées à
12440 @code{iptables-restore}. Cela peut être un objet « simili-fichier »
12441 (@pxref{G-Expressions, file-like objects}).
12442 @item @code{ipv6-rules} (par défaut : @code{%iptables-accept-all-rules})
12443 Les règles iptables à utiliser. Elles seront passées à
12444 @code{ip6tables-restore}. Cela peut être un objet « simili-fichier »
12445 (@pxref{G-Expressions, file-like objects}).
12446 @end table
12447 @end deftp
12448
12449 @cindex NTP (Network Time Protocol), service
12450 @cindex horloge
12451 @defvr {Variable Scheme} ntp-service-type
12452 This is the type of the service running the @uref{http://www.ntp.org,
12453 Network Time Protocol (NTP)} daemon, @command{ntpd}. The daemon will keep
12454 the system clock synchronized with that of the specified NTP servers.
12455
12456 La valeur de ce service est un objet @code{ntpd-configuration}, décrit
12457 ci-dessous.
12458 @end defvr
12459
12460 @deftp {Type de données} ntp-configuration
12461 C'est le type de données représentant la configuration du service NTP.
12462
12463 @table @asis
12464 @item @code{servers} (par défaut : @code{%ntp-servers})
12465 C'est la liste des serveurs (noms d'hôtes) avec lesquels @command{ntpd} sera
12466 synchronisé.
12467
12468 @item @code{allow-large-adjustment?} (par défaut : @code{#f})
12469 Détermine si @code{ntpd} peut faire un ajustement initial de plus de
12470 1@tie{}000 secondes.
12471
12472 @item @code{ntp} (par défaut : @code{ntp})
12473 Le paquet NTP à utiliser.
12474 @end table
12475 @end deftp
12476
12477 @defvr {Variable Scheme} %ntp-servers
12478 Liste de noms d'hôtes à utiliser comme serveurs NTP par défaut. Ce sont les
12479 serveurs du @uref{https://www.ntppool.org/fr/, projet NTP Pool}
12480 @end defvr
12481
12482 @cindex OpenNTPD
12483 @deffn {Procédure Scheme} openntpd-service-type
12484 Lance le démon NTP @command{ntpd}, implémenté par
12485 @uref{http://www.openntpd.org, OpenNTPD}. Le démon gardera l'horloge
12486 système synchronisée avec celle des serveurs donnés.
12487
12488 @example
12489 (service
12490 openntpd-service-type
12491 (openntpd-configuration
12492 (listen-on '("127.0.0.1" "::1"))
12493 (sensor '("udcf0 correction 70000"))
12494 (constraint-from '("www.gnu.org"))
12495 (constraints-from '("https://www.google.com/"))
12496 (allow-large-adjustment? #t)))
12497
12498 @end example
12499 @end deffn
12500
12501 @deftp {Type de données} openntpd-configuration
12502 @table @asis
12503 @item @code{openntpd} (par défaut : @code{(file-append openntpd "/sbin/ntpd")})
12504 L'exécutable openntpd à utiliser.
12505 @item @code{listen-on} (par défaut : @code{'("127.0.0.1" "::1")})
12506 Une liste d'adresses IP locales ou de noms d'hôtes que devrait écouter le
12507 démon ntpd.
12508 @item @code{query-from} (par défaut : @code{'()})
12509 Une liste d'adresses IP que le démon devrait utiliser pour les requêtes
12510 sortantes.
12511 @item @code{sensor} (par défaut : @code{'()})
12512 Spécifie une liste de senseurs de différences de temps que ntpd devrait
12513 utiliser. @code{ntpd} écoutera chaque senseur qui existe et ignorera ceux
12514 qui n'existent pas. Voir @uref{https://man.openbsd.org/ntpd.conf, la
12515 documentation en amont} pour plus d'informations.
12516 @item @code{server} (par défaut : @var{%ntp-servers})
12517 Spécifie une liste d'adresses IP ou de noms d'hôtes de serveurs NTP avec
12518 lesquels se synchroniser.
12519 @item @code{servers} (par défaut : @code{'()})
12520 Spécifie une liste d'adresses IP ou de noms d'hôtes de banques de serveurs
12521 NTP avec lesquelles se synchroniser.
12522 @item @code{constraint-from} (par défaut : @code{'()})
12523 @code{ntpd} peut être configuré pour demander la « Date » à des serveurs
12524 HTTPS de confiance via TLS. Cette information de temps n'est pas utilisée
12525 pour sa précision mais agit comme une contrainte authentifiée, ce qui réduit
12526 l'impact d'une attaque par l'homme du milieu sur le protocole NTP non
12527 authentifié. Spécifie une liste d'URL, d'adresses IP ou de noms d'hôtes de
12528 serveurs HTTPS qui fournissent cette contrainte.
12529 @item @code{constraints-from} (par défaut : @code{'()})
12530 Comme pour @code{constraint-from}, spécifie une liste d'URL, d'adresses IP
12531 ou de noms d'hôtes de serveurs HTTPS qui fournissent une contrainte. Si les
12532 noms d'hôtes sont résolus en plusieurs adresses IP, @code{ntpd} calculera la
12533 contrainte médiane.
12534 @item @code{allow-large-adjustment?} (par défaut : @code{#f})
12535 Détermine si @code{ntpd} peut faire un ajustement initial de plus de 180
12536 secondes.
12537 @end table
12538 @end deftp
12539
12540 @cindex inetd
12541 @deffn {Variable Scheme} inetd-service-type
12542 Ce service lance le démon @command{inetd} (@pxref{inetd invocation,,,
12543 inetutils, GNU Inetutils}). @command{inetd} écoute des connexionssur des
12544 sockets internet et démarre le programme spécifié uniquement lorsqu'une
12545 connexion arrive sur l'un de ces sockets.
12546
12547 La valeur de ce service est un objet @code{inetd-configuration}. L'exemple
12548 suivant configure le démon @command{inetd} pour qu'il fournisse le service
12549 @command{echo}, ainsi qu'in service smtp qui transfère le trafic smtp par
12550 ssh à un serveur @code{smtp-server} derrière une passerelle @code{hostname}
12551 :
12552
12553 @example
12554 (service
12555 inetd-service-type
12556 (inetd-configuration
12557 (entries (list
12558 (inetd-entry
12559 (name "echo")
12560 (socket-type 'stream)
12561 (protocol "tcp")
12562 (wait? #f)
12563 (user "root"))
12564 (inetd-entry
12565 (node "127.0.0.1")
12566 (name "smtp")
12567 (socket-type 'stream)
12568 (protocol "tcp")
12569 (wait? #f)
12570 (user "root")
12571 (program (file-append openssh "/bin/ssh"))
12572 (arguments
12573 '("ssh" "-qT" "-i" "/path/to/ssh_key"
12574 "-W" "smtp-server:25" "user@@hostname")))))
12575 @end example
12576
12577 Voir plus bas pour plus de détails sur @code{inetd-configuration}.
12578 @end deffn
12579
12580 @deftp {Type de données} inetd-configuration
12581 Type de données représentant la configuration de @command{inetd}.
12582
12583 @table @asis
12584 @item @code{program} (par défaut : @code{(file-append inetutils "/libexec/inetd")})
12585 L'exécutable @command{inetd} à utiliser.
12586
12587 @item @code{entries} (par défaut : @code{'()})
12588 Une liste d'entrées de services @command{inetd}. Chaque entrée devrait être
12589 crée avec le constructeur @code{inetd-entry}.
12590 @end table
12591 @end deftp
12592
12593 @deftp {Type de données} inetd-entry
12594 Type de données représentant une entrée dans la configuration
12595 d'@command{inetd}. Chaque entrée correspond à un socket sur lequel
12596 @command{inetd} écoutera les requêtes.
12597
12598 @table @asis
12599 @item @code{node} (par défaut : @code{#f})
12600 Chaîne de caractères facultative, un liste d'adresses locales séparées par
12601 des virgules que @command{inetd} devrait utiliser pour écouter ce service.
12602 @xref{Configuration file,,, inetutils, GNU Inetutils} pour une description
12603 complète de toutes les options.
12604 @item @code{name}
12605 Une chaîne de caractères dont le nom doit correspondre à une entrée de
12606 @code{/etc/services}.
12607 @item @code{socket-type}
12608 Un symbole parmi @code{'stream}, @code{'dgram}, @code{'raw}, @code{'rdm} ou
12609 @code{'seqpacket}.
12610 @item @code{protocol}
12611 Une chaîne de caractères qui doit correspondre à une entrée dans
12612 @code{/etc/protocols}.
12613 @item @code{wait?} (par défaut : @code{#t})
12614 Indique si @command{inetd} devrait attendre que le serveur ait quitté avant
12615 d'écouter de nouvelles demandes de service.
12616 @item @code{user}
12617 A string containing the user (and, optionally, group) name of the user as
12618 whom the server should run. The group name can be specified in a suffix,
12619 separated by a colon or period, i.e.@: @code{"user"}, @code{"user:group"} or
12620 @code{"user.group"}.
12621 @item @code{program} (par défaut : @code{"internal"})
12622 Le programme du serveur qui servira les requêtes, ou @code{"internal"} si
12623 @command{inetd} devrait utiliser un service inclus.
12624 @item @code{arguments} (par défaut : @code{'()})
12625 A list strings or file-like objects, which are the server program's
12626 arguments, starting with the zeroth argument, i.e.@: the name of the program
12627 itself. For @command{inetd}'s internal services, this entry must be
12628 @code{'()} or @code{'("internal")}.
12629 @end table
12630
12631 @xref{Configuration file,,, inetutils, GNU Inetutils} pour trouver une
12632 discussion plus détaillée de chaque champ de configuration.
12633 @end deftp
12634
12635 @cindex Tor
12636 @defvr {Variable Scheme} tor-service-type
12637 C'est le type pour un service qui lance le démon de navigation anonyme
12638 @uref{https://torproject.org, Tor}. Le service est configuré avec un
12639 enregistrement @code{<tor-configuration>}. Par défaut, le démon Tor est
12640 lancé en tant qu'utilisateur non privilégié @code{tor}, membre du groupe
12641 @code{tor}.
12642
12643 @end defvr
12644
12645 @deffn {Procédure Scheme} tor-service [@var{config-file}] [#:tor @var{tor}]
12646 Cette procédure est obsolète et sera supprimée dans les futures versions.
12647 Renvoie un service de type @code{tor-service-type}. @var{config-file} et
12648 @var{tor} ont la même signification que dans @code{<tor-configuration>}.
12649 @end deffn
12650
12651 @deftp {Type de données} tor-configuration
12652 @table @asis
12653 @item @code{tor} (par défaut : @code{tor})
12654 Le paquet qui fournit le démon Tor. Ce paquet doit fournir le démon
12655 @file{bin/tor} relativement à son répertoire de sortie. Le paquet par
12656 défaut est le l'implémentation du @uref{https://www.torproject.org, projet
12657 Tor}.
12658
12659 @item @code{config-file} (par défaut : @code{(plain-file "empty" "")})
12660 Le fichier de configuration à utiliser. Il sera ajouté au fichier de
12661 configuration par défaut, et le fichier de configuration final sera passé à
12662 @code{tor} via son option @code{-f}. Cela peut être n'importe quel objet «
12663 simili-fichier » (@pxref{G-Expressions, file-like objects}). Voir @code{man
12664 tor} pour plus de détails sur la syntaxe du fichier de configuration.
12665
12666 @item @code{hidden-services} (par défaut : @code{'()})
12667 La liste des enregistrements @code{<hidden-service>} à utiliser. Pour
12668 n'importe quel service cache que vous ajoutez à cette liste, la
12669 configuration appropriée pour activer le service caché sera automatiquement
12670 ajouté au fichier de configuration par défaut. Vous pouvez aussi créer des
12671 enregistrements @code{<hidden-service>} avec la procédure
12672 @code{tor-hidden-service} décrite plus bas.
12673
12674 @item @code{socks-socket-type} (par défaut : @code{'tcp})
12675 Le type de socket par défaut que Tor devrait utiliser pour les socket
12676 SOCKS. Cela doit être soit @code{'tcp} soit @code{'unix}. S'il s'agit de
12677 @code{'tcp}, alors Tor écoutera pas défaut sur le port TCP 9050 sur
12678 l'interface de boucle locale (c.-à-d.@: localhost). S'il s'agit de
12679 @code{'unix}, Tor écoutera sur le socket UNIX domain
12680 @file{/var/run/tor/socks-sock}, qui sera inscriptible pour les membres du
12681 groupe @code{tor}.
12682
12683 Si vous voulez personnaliser le socket SOCKS plus avant, laissez
12684 @code{socks-socket-type} à sa valeur par défaut de @code{'tcp} et utilisez
12685 @code{config-file} pour remplacer les valeurs par défaut avec votre propre
12686 option @code{SocksPort}.
12687 @end table
12688 @end deftp
12689
12690 @cindex service caché
12691 @deffn {Procédure Scheme} tor-hidden-service @var{name} @var{mapping}
12692 Définie un @dfn{service caché} pour Tor nommé @var{name} qui implémente
12693 @var{mapping}. @var{mapping} est une liste de paires de port et d'hôte,
12694 comme dans :
12695
12696 @example
12697 '((22 "127.0.0.1:22")
12698 (80 "127.0.0.1:8080"))
12699 @end example
12700
12701 Dans cet exemple, le port 22 du service caché est relié au port local 22 et
12702 le port 80 est relié au port local 8080.
12703
12704 Cela crée un répertoire @file{/var/lib/tor/hidden-services/@var{name}} où le
12705 fichier @file{hostname} contient le nom d'hôte @code{.onion} pour le service
12706 caché.
12707
12708 Voir @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, the
12709 Tor project's documentation} pour trouver plus d'information.
12710 @end deffn
12711
12712 Le module @code{(gnu services rsync)} fournit les services suivant :
12713
12714 Vous pourriez vouloir un démon rsync si vous voulez que des fichiers soient
12715 disponibles pour que n'importe qui (ou juste vous) puisse télécharger des
12716 fichiers existants ou en téléverser des nouveaux.
12717
12718 @deffn {Variable Scheme} rsync-service-type
12719 C'est le type pour le démon @uref{https://rsync.samba.org, rsync}, qui prend
12720 un enregistrement @command{rsync-configuration} comme dans cet exemple :
12721
12722 @example
12723 (service rsync-service-type)
12724 @end example
12725
12726 Voir plus pas pour trouver des détails à propos de
12727 @code{rsync-configuration}.
12728 @end deffn
12729
12730 @deftp {Type de données} rsync-configuration
12731 Type de données représentant la configuration de @code{rsync-service}.
12732
12733 @table @asis
12734 @item @code{package} (par défaut : @var{rsync})
12735 Le paquet @code{rsync} à utiliser.
12736
12737 @item @code{port-number} (par défaut : @code{873})
12738 Le port TCP sur lequel @command{rsync} écoute les connexions entrantes. Si
12739 le port est inférieur à @code{1024}, @command{rsync} doit être démarré en
12740 tant qu'utilisateur et groupe @code{root}.
12741
12742 @item @code{pid-file} (par défaut : @code{"/var/run/rsyncd/rsyncd.pid"})
12743 Nom du fichier où @command{rsync} écrit son PID.
12744
12745 @item @code{lock-file} (par défaut : @code{"/var/run/rsyncd/rsyncd.lock"})
12746 Nom du fichier où @command{rsync} écrit son fichier de verrouillage.
12747
12748 @item @code{log-file} (par défaut : @code{"/var/log/rsyncd.log"})
12749 Nom du fichier où @command{rsync} écrit son fichier de journal.
12750
12751 @item @code{use-chroot?} (par défaut : @var{#t})
12752 S'il faut utiliser un chroot pour le répertoire partagé de @command{rsync}.
12753
12754 @item @code{share-path} (par défaut : @file{/srv/rsync})
12755 Emplacement du répertoire partagé de @command{rsync}.
12756
12757 @item @code{share-comment} (par défaut : @code{"Rsync share"})
12758 Commentaire du répertoire partagé de @command{rsync}.
12759
12760 @item @code{read-only?} (par défaut : @var{#f})
12761 Permission en écriture sur le répertoire partagé.
12762
12763 @item @code{timeout} (par défaut : @code{300})
12764 Délai d'attente d'entrée-sortie en secondes.
12765
12766 @item @code{user} (par défaut : @var{"root"})
12767 Propriétaire du processus @code{rsync}.
12768
12769 @item @code{group} (par défaut : @var{"root"})
12770 Groupe du processus @code{rsync}.
12771
12772 @item @code{uid} (par défaut : @var{"rsyncd"})
12773 Nom d'utilisateur ou ID utilisateur en tant que lequel les transferts de
12774 fichiers ont lieu si le démon a été lancé en @code{root}.
12775
12776 @item @code{gid} (par défaut : @var{"rsyncd"})
12777 Nom du groupe ou ID du groupe qui sera utilisé lors de l'accès au module.
12778
12779 @end table
12780 @end deftp
12781
12782 En plus, @code{(gnu services ssh)} fournit les services suivant.
12783 @cindex SSH
12784 @cindex serveur SSH
12785
12786 @deffn {Procédure Scheme} lsh-service [#:host-key "/etc/lsh/host-key"] @
12787 [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
12788 [#:allow-empty-passwords? #f] [#:root-login? #f] @
12789 [#:syslog-output? #t] [#:x11-forwarding? #t] @
12790 [#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
12791 [#:public-key-authentication? #t] [#:initialize? #t]
12792 Lance le programme @command{lshd} de @var{lsh} pour écouter sur le port
12793 @var{port-number}. @var{host-key} doit désigner un fichier contenant la
12794 clef d'hôte et ne doit être lisible que par root.
12795
12796 Lorsque @var{daemonic?} est vrai, @command{lshd} se détachera du terminal
12797 qui le contrôle et enregistrera ses journaux avec syslogd, à moins que
12798 @var{syslog-output?} ne soit faux. Évidemment, cela rend aussi lsh-service
12799 dépendant de l'existence d'un service syslogd. Lorsque @var{pid-file?} est
12800 vrai, @command{lshd} écrit son PID dans le fichier @var{pid-file}.
12801
12802 Lorsque @var{initialize?} est vrai, la graine et la clef d'hôte seront créés
12803 lors de l'activation du service s'ils n'existent pas encore. Cela peut
12804 prendre du temps et demande une interaction.
12805
12806 Lorsque @var{initialize?} est faux, c'est à l'utilisateur d'initialiser le
12807 générateur d'aléatoire (@pxref{lsh-make-seed,,, lsh, LSH Manual}) et de crée
12808 une paire de clefs dont la clef privée sera stockée dans le fichier
12809 @var{host-key} (@pxref{lshd basics,,, lsh, LSH Manual}).
12810
12811 Lorsque @var{interfaces} est vide, lshd écoute les connexions sur toutes les
12812 interfaces réseau ; autrement, @var{interfaces} doit être une liste de noms
12813 d'hôtes et d'adresses.
12814
12815 @var{allow-empty-passwords?} spécifie si les connexions avec des mots de
12816 passes vides sont acceptés et @var{root-login?} spécifie si la connexion en
12817 root est acceptée.
12818
12819 Les autres options devraient être évidentes.
12820 @end deffn
12821
12822 @cindex SSH
12823 @cindex serveur SSH
12824 @deffn {Variable Scheme} openssh-service-type
12825 C'est le type pour le démon ssh @uref{http://www.openssh.org, OpenSSH},
12826 @command{sshd}. Sa valeur doit être un enregistrement
12827 @code{openssh-configuration} comme dans cet exemple :
12828
12829 @example
12830 (service openssh-service-type
12831 (openssh-configuration
12832 (x11-forwarding? #t)
12833 (permit-root-login 'without-password)
12834 (authorized-keys
12835 `(("alice" ,(local-file "alice.pub"))
12836 ("bob" ,(local-file "bob.pub"))))))
12837 @end example
12838
12839 Voir plus bas pour trouver des détails sur @code{openssh-configuration}.
12840
12841 Ce service peut être étendu avec des clefs autorisées supplémentaires, comme
12842 dans cet exemple :
12843
12844 @example
12845 (service-extension openssh-service-type
12846 (const `(("charlie"
12847 ,(local-file "charlie.pub")))))
12848 @end example
12849 @end deffn
12850
12851 @deftp {Type de données} openssh-configuration
12852 C'est l'enregistrement de la configuration de la commande @command{sshd}
12853 d'OpenSSH.
12854
12855 @table @asis
12856 @item @code{pid-file} (par défaut : @code{"/var/run/sshd.pid"})
12857 Nom du fichier où @command{sshd} écrit son PID.
12858
12859 @item @code{port-number} (par défaut : @code{22})
12860 Port TCP sur lequel @command{sshd} écoute les connexions entrantes.
12861
12862 @item @code{permit-root-login} (par défaut : @code{#f})
12863 Ce champ détermine si et quand autoriser les connexions en root. Si la
12864 valeur est @code{#f}, les connexions en root sont désactivées ; si la valeur
12865 est @code{#t}, elles sont autorisées. S'il s'agit du symbole
12866 @code{'without-password}, alors les connexions root sont autorisées mais pas
12867 par une authentification par mot de passe.
12868
12869 @item @code{allow-empty-passwords?} (par défaut : @code{#f})
12870 Lorsque la valeur est vraie, les utilisateurs avec un mot de passe vide
12871 peuvent se connecter. Sinon, ils ne peuvent pas.
12872
12873 @item @code{password-authentication?} (par défaut : @code{#t})
12874 Lorsque la valeur est vraie, les utilisateurs peuvent se connecter avec leur
12875 mot de passe. Sinon, ils doivent utiliser une autre méthode
12876 d'authentification.
12877
12878 @item @code{public-key-authentication?} (par défaut : @code{#t})
12879 Lorsque la valeur est vraie, les utilisateurs peuvent se connecter avec leur
12880 clef publique. Sinon, les utilisateurs doivent utiliser une autre méthode
12881 d'authentification.
12882
12883 Les clefs publiques autorisées sont stockées dans
12884 @file{~/.ssh/authorized_keys}. Ce n'est utilisé que par le protocole
12885 version 2.
12886
12887 @item @code{x11-forwarding?} (par défaut : @code{#f})
12888 Lorsque la valeur est vraie, le transfert de connexion du client graphique
12889 X11 est activé — en d'autre termes, les options @option{-X} et @option{-Y}
12890 de @command{ssh} fonctionneront.
12891
12892 @item @code{allow-agent-forwarding?} (par défaut : @code{#t})
12893 Indique s'il faut autoriser la redirection d'agent.
12894
12895 @item @code{allow-tcp-forwarding?} (par défaut : @code{#t})
12896 Indique s'il faut autoriser la redirection TCP.
12897
12898 @item @code{gateway-ports?} (par défaut : @code{#f})
12899 Indique s'il faut autoriser les ports de passerelle.
12900
12901 @item @code{challenge-response-authentication?} (par défaut : @code{#f})
12902 Specifies whether challenge response authentication is allowed (e.g.@: via
12903 PAM).
12904
12905 @item @code{use-pam?} (par défaut : @code{#t})
12906 Active l'interface avec le module d'authentification greffable, PAM. Si la
12907 valeur est @code{#t}, cela activera l'authentification PAM avec
12908 @code{challenge-response-authentication?} et
12909 @code{password-authentication?}, en plus des modules de compte et de session
12910 de PAM pour tous les types d'authentification.
12911
12912 Comme l'authentification par défi de PAM sert généralement un rôle
12913 équivalent à l'authentification par mot de passe, vous devriez désactiver
12914 soit @code{challenge-response-authentication?}, soit
12915 @code{password-authentication?}.
12916
12917 @item @code{print-last-log?} (par défaut : @code{#t})
12918 Spécifie si @command{sshd} devrait afficher la date et l'heure de dernière
12919 connexion des utilisateurs lorsqu'un utilisateur se connecte de manière
12920 interactive.
12921
12922 @item @code{subsystems} (par défaut : @code{'(("sftp" "internal-sftp"))})
12923 Configures external subsystems (e.g.@: file transfer daemon).
12924
12925 C'est une liste de paires, composées chacune du nom du sous-système et d'une
12926 commande (avec éventuellement des arguments) à exécuter à la demande du
12927 sous-système.
12928
12929 La commande @command{internal-sftp} implémente un serveur SFTP dans le
12930 processus. Autrement, on peut spécifier la commande @command{sftp-server} :
12931 @example
12932 (service openssh-service-type
12933 (openssh-configuration
12934 (subsystems
12935 `(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))
12936 @end example
12937
12938 @item @code{accepted-environment} (par défaut : @code{'()})
12939 Liste de chaînes de caractères qui décrivent les variables d'environnement
12940 qui peuvent être exportées.
12941
12942 Chaque chaîne a sa propre ligne. Voir l'option @code{AcceptEnv} dans
12943 @code{man sshd_config}.
12944
12945 Cet exemple permet aux clients ssh d'exporter la variable @code{COLORTERM}.
12946 Elle est initialisée par les émulateurs de terminaux qui supportent les
12947 couleurs. Vous pouvez l'utiliser dans votre fichier de ressource de votre
12948 shell pour activer les couleurs sur la ligne de commande si cette variable
12949 est initialisée.
12950
12951 @example
12952 (service openssh-service-type
12953 (openssh-configuration
12954 (accepted-environment '("COLORTERM"))))
12955 @end example
12956
12957 @item @code{authorized-keys} (par défaut : @code{'()})
12958 @cindex clefs autorisées, SSH
12959 @cindex SSH, clefs autorisées
12960 C'est la liste des clefs autorisées. Chaque élément de la liste est un nom
12961 d'utilisateur suivit d'un ou plusieurs objets simili-fichiers qui
12962 représentent les clefs publiques SSH. Par exemple :
12963
12964 @example
12965 (openssh-configuration
12966 (authorized-keys
12967 `(("rekado" ,(local-file "rekado.pub"))
12968 ("chris" ,(local-file "chris.pub"))
12969 ("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))
12970 @end example
12971
12972 @noindent
12973 enregistre les clefs publiques spécifiées pour les comptes @code{rekado},
12974 @code{chris} et @code{root}.
12975
12976 Des clefs autorisées supplémentaires peuvent être spécifiées via
12977 @code{service-extension}.
12978
12979 Remarquez que cela n'interfère @emph{pas} avec l'utilisation de
12980 @file{~/.ssh/authorized_keys}.
12981
12982 @item @code{log-level} (par défaut : @code{'info})
12983 C'est le symbole qui spécifie le niveau de journalisation : @code{quiet},
12984 @code{fatal}, @code{error}, @code{info}, @code{verbose}, @code{debug}, etc.
12985 Voir la page de manuel de @file{sshd_config} pour trouver la liste complète
12986 des noms de niveaux.
12987
12988 @end table
12989 @end deftp
12990
12991 @deffn {Procédure Scheme} dropbear-service [@var{config}]
12992 Lance le @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,démon SSH
12993 Dropbear} avec la configuration @var{config} donnée, un objet
12994 @code{<dropbear-configuration>}.
12995
12996 Par exemple, pour spécifier un service Dropbear qui écoute sur le port 1234,
12997 ajoutez cet appel au champ @code{services} d evotre système d'exploitation :
12998
12999 @example
13000 (dropbear-service (dropbear-configuration
13001 (port-number 1234)))
13002 @end example
13003 @end deffn
13004
13005 @deftp {Type de données} dropbear-configuration
13006 Ce type de données représente la configuration d'un démon SSH Dropbear.
13007
13008 @table @asis
13009 @item @code{dropbear} (par défaut : @var{dropbear})
13010 Le paquet Dropbear à utiliser.
13011
13012 @item @code{port-number} (par défaut : 22)
13013 Le port TCP sur lequel le démon attend des connexions entrantes.
13014
13015 @item @code{syslog-output?} (par défaut : @code{#t})
13016 Indique s'il faut activer la sortie vers syslog.
13017
13018 @item @code{pid-file} (par défaut : @code{"/var/run/dropbear.pid"})
13019 Nom du fichier de PID du démon.
13020
13021 @item @code{root-login?} (par défaut : @code{#f})
13022 Indique s'il faut autoriser les connexions en @code{root}.
13023
13024 @item @code{allow-empty-passwords?} (par défaut : @code{#f})
13025 Indique s'il faut autoriser les mots de passes vides.
13026
13027 @item @code{password-authentication?} (par défaut : @code{#t})
13028 Indique s'il faut autoriser l'authentification par mot de passe.
13029 @end table
13030 @end deftp
13031
13032 @defvr {Variable Scheme} %facebook-host-aliases
13033 Cette variable contient une chaîne de caractères à utiliser dans
13034 @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library Reference
13035 Manual}). Chaque ligne contient une entrée qui fait correspondre les noms
13036 des serveurs connus du service en ligne Facebook — p.@: ex.@:
13037 @code{www.facebook.com} — à l'hôte local — @code{127.0.0.1} ou son
13038 équivalent en IPv6, @code{::1}.
13039
13040 Cette variable est typiquement utilisée dans le champ @code{hosts-file}
13041 d'une déclaration @code{operating-system} (@pxref{Référence de système d'exploitation, @file{/etc/hosts}}) :
13042
13043 @example
13044 (use-modules (gnu) (guix))
13045
13046 (operating-system
13047 (host-name "mamachine")
13048 ;; ...
13049 (hosts-file
13050 ;; Crée un fichier /etc/hosts avec des alias pour « localhost »
13051 ;; et « mamachine », ainsi que pour les serveurs de Facebook.
13052 (plain-file "hosts"
13053 (string-append (local-host-aliases host-name)
13054 %facebook-host-aliases))))
13055 @end example
13056
13057 Ce mécanisme peut éviter que des programmes qui tournent localement, comme
13058 des navigateurs Web, ne se connectent à Facebook.
13059 @end defvr
13060
13061 Le module @code{(gnu services avahi)} fourni la définition suivante.
13062
13063 @deffn {Procédure Scheme} avahi-service [#:avahi @var{avahi}] @
13064 [#:host-name #f] [#:publish? #t] [#:ipv4? #t] @
13065 [#:ipv6? #t] [#:wide-area? #f] @
13066 [#:domains-to-browse '()] [#:debug? #f]
13067 Renvoie un service qui lance @command{avahi-daemon}, un serveur qui répond
13068 aux requêtes mDNS/DNS-SD qui permet de découvrir des services et de chercher
13069 des noms d'hôtes « sans configuration » (voir @uref{http://avahi.org/}) et
13070 qui étend le démon de cache de services de noms (nscd) pour qu'il puisse
13071 résoudre des noms en @code{.local} avec
13072 @uref{http://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. En plus,
13073 ajoute le paquet @var{avahi} au profil du système pour que les commandes
13074 comme @command{avahi-browse} soient directement utilisables.
13075
13076 Si @var{host-name} n'est pas @code{#f}, utilise cette valeur comme nom
13077 d'hôte à publier pour la machine ; sinon, utilise le vrai nom d'hôte de la
13078 machine.
13079
13080 Lorsque la valeur de @var{publish?} est vraie, la publication des noms
13081 d'hôtes et des domaines sont autorisés ; en particulier, avahi-daemon
13082 publiera le nom d'hôte et l'adresse IP de la machine via mDNS sur le réseau
13083 local.
13084
13085 Lorsque la valeur de @var{wide-area?} est vraie, DNS-SD sur DNS unicast est
13086 activé.
13087
13088 Les valeurs booléennes @var{ipv4?} et @var{ipv6?} déterminent s'il faut
13089 utiliser un socket IPv4 ou IPv6 respectivement.
13090 @end deffn
13091
13092 @deffn {Variable Scheme} openvswitch-service-type
13093 C'est le type du service @uref{http://www.openvswitch.org, Open vSwitch},
13094 dont la valeur devrait être un objet @code{openvswitch-configuration}.
13095 @end deffn
13096
13097 @deftp {Type de données} openvswitch-configuration
13098 Type de données représentant la configuration de Open vSwitch, un
13099 commutateur virtuel multiniveaux conçu pour rendre possible l'automatisation
13100 massive des réseaux avec des extensions programmables.
13101
13102 @table @asis
13103 @item @code{package} (par défaut : @var{openvswitch})
13104 Objet de paquet de Open vSwitch.
13105
13106 @end table
13107 @end deftp
13108
13109 @node Système de fenêtrage X
13110 @subsubsection Système de fenêtrage X
13111
13112 @cindex X11
13113 @cindex Système de fenêtrage X
13114 @cindex gestionnaire de connexion
13115 Le support pour le système d'affichage graphique X Window — en particulier
13116 Xorg — est fournit par le module @code{(gnu services xorg)}. Remarquez
13117 qu'il n'y a pas de procédure @code{xorg-service}. À la place, le serveur X
13118 est démarré par le @dfn{gestionnaire de connexion}, par défaut SLiM.
13119
13120 @cindex gestionnaire de fenêtre
13121 Pour utiliser X11, vous devez installer au moins un @dfn{gestionnaire de
13122 fenêtre} — par exemple les paquets @code{windowmaker} ou @code{openbox} — de
13123 préférence en l'ajoutant au champ @code{packages} de votre définition de
13124 système d'exploitation (@pxref{Référence de système d'exploitation, system-wide
13125 packages}).
13126
13127 @defvr {Variable Scheme} slim-service-type
13128 C'est de type pour le gestionnaire de connexion graphique SLiM pour X11.
13129
13130 @cindex types de sessions (X11)
13131 @cindex X11, types de sessions
13132 SLiM cherche des @dfn{types de sessions} définies par les fichiers
13133 @file{.desktop} dans @file{/run/current-system/profile/share/xsessions} et
13134 permet aux utilisateurs de choisir une session depuis l'écran de connexion
13135 avec @kbd{F1}. Les paquets comme @code{xfce}, @code{sawfish} et
13136 @code{ratpoison} fournissent des fichiers @file{.desktop} ; les ajouter à
13137 l'ensemble des paquets du système les rendra automatiquement disponibles sur
13138 l'écran de connexion.
13139
13140 En plus, les fichiers @file{~/.xsession} sont honorées. Lorsqu'il est
13141 disponible, @file{~/.xsession} doit être un fichier exécutable qui démarre
13142 un gestionnaire de fenêtre au un autre client X.
13143 @end defvr
13144
13145 @deftp {Type de données} slim-configuration
13146 Type de données représentant la configuration de @code{slim-service-type}.
13147
13148 @table @asis
13149 @item @code{allow-empty-passwords?} (par défaut : @code{#t})
13150 S'il faut autoriser les connexions avec un mot de passe vide.
13151
13152 @item @code{auto-login?} (par défaut : @code{#f})
13153 @itemx @code{default-user} (par défaut : @code{""})
13154 Lorsque @code{auto-login?} est faux, SLiM présent un écran de connexion.
13155
13156 Lorsque @code{auto-login?} est vrai, SLiM se connecte directement en tant
13157 que @code{default-user}.
13158
13159 @item @code{theme} (par défaut : @code{%default-slim-theme})
13160 @itemx @code{theme-name} (par défaut : @code{%default-slim-theme-name})
13161 Le thème graphique à utiliser et son nom.
13162
13163 @item @code{auto-login-session} (par défaut : @code{#f})
13164 Si la valeur est vraie, elle doit être le nom d'un exécutable à démarrer
13165 comme session par défaut — p.@: ex.@: @code{(file-append windowmaker
13166 "/bin/windowmaker")}.
13167
13168 Si la valeur est fausse, une session décrite par l'un des fichiers
13169 @file{.desktop} disponibles dans @code{/run/current-system/profile} et
13170 @code{~/.guix-profile} sera utilisée.
13171
13172 @quotation Remarque
13173 Vous devez installer au moins un gestionnaire de fenêtres dans le profil du
13174 système ou dans votre profil utilisateur. Sinon, si
13175 @code{auto-login-session} est faux, vous ne serez jamais capable de vous
13176 connecter.
13177 @end quotation
13178
13179 @item @code{startx} (par défaut : @code{(xorg-start-command)})
13180 La commande utilisée pour démarrer le serveur graphique X11.
13181
13182 @item @code{xauth} (par défaut : @code{xauth})
13183 Le paquet XAuth à utiliser.
13184
13185 @item @code{shepherd} (par défaut : @code{shepherd})
13186 Le paquet Shepherd à utiliser pour invoquer @command{halt} et
13187 @command{reboot}.
13188
13189 @item @code{sessreg} (par défaut : @code{sessreg})
13190 Le paquet sessreg à utiliser pour enregistrer la session.
13191
13192 @item @code{slim} (par défaut : @code{slim})
13193 Le paquet SLiM à utiliser.
13194 @end table
13195 @end deftp
13196
13197 @defvr {Variable Scheme} %default-theme
13198 @defvrx {Variable Scheme} %default-theme-name
13199 Le thème SLiM par défaut et son nom.
13200 @end defvr
13201
13202
13203 @deftp {Type de données} sddm-configuration
13204 C'est le type de données représentant la configuration du service sddm.
13205
13206 @table @asis
13207 @item @code{display-server} (par défaut : "x11")
13208 Choisit le serveur d'affichage à utiliser pour l'écran d'accueil. Les
13209 valeurs valides sont « x11 » et « wayland ».
13210
13211 @item @code{numlock} (par défaut : "on")
13212 Les valeurs valides sont « on », « off » ou « none ».
13213
13214 @item @code{halt-command} (par défaut : @code{#~(string-apppend #$shepherd "/sbin/halt")})
13215 La commande à lancer à l'arrêt du système.
13216
13217 @item @code{reboot-command} (par défaut : @code{#~(string-append #$shepherd "/sbin/reboot")})
13218 La commande à lancer lors du redémarrage du système.
13219
13220 @item @code{theme} (par défaut : "maldives")
13221 Le thème à utiliser. Les thèmes par défaut fournis par SDDM sont « elarun »
13222 et « maldives ».
13223
13224 @item @code{themes-directory} (par défaut : "/run/current-system/profile/share/sddm/themes")
13225 Le répertoire où se trouvent les thèmes.
13226
13227 @item @code{faces-directory} (par défaut : "/run/current-system/profile/share/sddm/faces")
13228 Répertoire où se trouvent les avatars.
13229
13230 @item @code{default-path} (par défaut : "/run/current-system/profile/bin")
13231 Le PATH par défaut à utiliser.
13232
13233 @item @code{minimum-uid} (par défaut : 1000)
13234 UID minimum pour être affiché dans SDDM.
13235
13236 @item @code{maximum-uid} (par défaut : 2000)
13237 UID maximum pour être affiché dans SDDM.
13238
13239 @item @code{remember-last-user?} (par défaut : #t)
13240 S'il faut se rappeler le dernier utilisateur connecté.
13241
13242 @item @code{remember-last-session?} (par défaut : #t)
13243 S'il faut se rappeler la dernière session.
13244
13245 @item @code{hide-users} (par défaut : "")
13246 Les noms d'utilisateurs à cacher sur l'écran d'accueil de SDDM.
13247
13248 @item @code{hide-shells} (par défaut : @code{#~(string-append #$shadow "/sbin/nologin")})
13249 Les utilisateurs avec les shells listés seront cachés sur l'écran d'accueil
13250 de SDDM.
13251
13252 @item @code{session-command} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/wayland-session")})
13253 Le script à lancer avant de démarrer une session wayland.
13254
13255 @item @code{sessions-directory} (par défaut : "/run/current-system/profile/share/wayland-sessions")
13256 Le répertoire où trouver les fichiers .desktop qui démarrent des sessions
13257 wayland.
13258
13259 @item @code{xorg-server-path} (par défaut : @code{xorg-start-command})
13260 Chemin vers xorg-server.
13261
13262 @item @code{xauth-path} (par défaut : @code{#~(string-append #$xauth "/bin/xauth")})
13263 Chemin vers xauth.
13264
13265 @item @code{xephyr-path} (par défaut : @code{#~(string-append #$xorg-server "/bin/Xephyr")})
13266 Chemin vers Xephyr.
13267
13268 @item @code{xdisplay-start} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/Xsetup")})
13269 Le script à lancer après avoir démarré xorg-server.
13270
13271 @item @code{xdisplay-stop} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/Xstop")})
13272 Le script à lancer avant d'arrêter xorg-server.
13273
13274 @item @code{xsession-command} (par défaut : @code{xinitrc})
13275 Le script à lancer avant de démarrer une session X.
13276
13277 @item @code{xsessions-directory} (par défaut : "/run/current-system/profile/share/xsessions")
13278 Répertoire où trouver les fichiers .desktop pour les sessions X.
13279
13280 @item @code{minimum-vt} (par défaut : 7)
13281 VT minimal à utiliser.
13282
13283 @item @code{xserver-arguments} (par défaut : "-nolisten tcp")
13284 Arguments à passer à xorg-server.
13285
13286 @item @code{auto-login-user} (par défaut : "")
13287 Utilisateur à utiliser pour la connexion automatique.
13288
13289 @item @code{auto-login-session} (par défaut : "")
13290 Le fichier desktop à utiliser pour la connexion automatique.
13291
13292 @item @code{relogin?} (par défaut : #f)
13293 S'il faut se reconnecter après la déconnexion.
13294
13295 @end table
13296 @end deftp
13297
13298 @cindex gestionnaire de connexion
13299 @cindex connexion X11
13300 @deffn {Procédure Scheme} sddm-service config
13301 Renvoie un service qui démarre le gestionnaire de connexion graphique SDDM
13302 avec une configuration de type @code{<sddm-configuration>}.
13303
13304 @example
13305 (sddm-service (sddm-configuration
13306 (auto-login-user "Alice")
13307 (auto-login-session "xfce.desktop")))
13308 @end example
13309 @end deffn
13310
13311 @deffn {Procédure Scheme} xorg-start-command [#:guile] @
13312 [#:modules %default-xorg-modules] @
13313 [#:fonts %default-xorg-fonts] @
13314 [#:configuration-file (xorg-configuration-file @dots{})] @
13315 [#:xorg-server @var{xorg-server}]
13316 Renvoie un script @code{startx} dans lequel @var{modules}, une liste de
13317 paquets de modules X et @var{fonts}, une liste de répertoires de polices X,
13318 sont disponibles. Voir @code{xorg-wrapper} pour plus de détails sur les
13319 arguments. Le résultat devrait être utilisé à la place de @code{startx}.
13320
13321 Habituellement le serveur X est démarré par un gestionnaire de connexion.
13322 @end deffn
13323
13324 @deffn {Procédure Scheme} xorg-configuration-file @
13325 [#:modules %default-xorg-modules] @
13326 [#:fonts %default-xorg-fonts] @
13327 [#:drivers '()] [#:resolutions '()] [#:extra-config '()]
13328 Renvoie un fichier de configuration pour le serveur Xorg qui contient des
13329 chemins de recherche pour tous les pilotes communs.
13330
13331 @var{modules} doit être une liste de @dfn{paquets de modules} chargés par le
13332 serveur Xorg — p.@: ex.@: @code{xf86-video-vesa}, @code{xf86-input-keyboard}
13333 etc. @var{fonts} doit être une liste de répertoires de polices à ajouter au
13334 @dfn{chemin de polices} du serveur.
13335
13336 @var{drivers} doit être soit la liste vide, auquel cas Xorg choisis un
13337 pilote graphique automatiquement, soit une liste de noms de pilotes qui
13338 seront essayés dans cet ordre — p.@: ex.@: @code{("modesetting" "vesa")}.
13339
13340 De même, lorsque @var{resolutions} est la liste vide, Xorg choisis une
13341 résolution d'écran appropriée ; autrement, ce doit être une liste de
13342 résolutions — p.@: ex.@: @code{((1024 768) (640 480))}.
13343
13344 Enfin, @var{extra-config} est une liste de chaînes de caractères ou d'objets
13345 ajoutés au fichier de configuration. Elle est utilisée pour passer du texte
13346 supplémentaire à être ajouté directement au fichier de configuration.
13347
13348 @cindex disposition clavier
13349 @cindex disposition du clavier
13350 Cette procédure est particulièrement utile pour configurer une disposition
13351 de clavier différente de la disposition US par défaut. Par exemple, pour
13352 utiliser la disposition « bépo » par défaut sur le gestionnaire d'affichage
13353 :
13354
13355 @example
13356 (define bepo-evdev
13357 "Section \"InputClass\"
13358 Identifier \"evdev keyboard catchall\"
13359 Driver \"evdev\"
13360 MatchIsKeyboard \"on\"
13361 Option \"xkb_layout\" \"fr\"
13362 Option \"xkb_variant\" \"bepo\"
13363 EndSection")
13364
13365 (operating-system
13366 ...
13367 (services
13368 (modify-services %desktop-services
13369 (slim-service-type config =>
13370 (slim-configuration
13371 (inherit config)
13372 (startx (xorg-start-command
13373 #:configuration-file
13374 (xorg-configuration-file
13375 #:extra-config
13376 (list bepo-evdev)))))))))
13377 @end example
13378
13379 La ligne @code{MatchIsKeyboard} spécifie que nous n'appliquons la
13380 configuration qu'aux claviers. Sans cette ligne, d'autres périphériques
13381 comme les pavés tactiles ne fonctionneront pas correctement parce qu'ils
13382 seront associés au mauvais pilote. Dans cet exemple, l'utilisateur
13383 utiliserait typiquement @code{setxkbmap fr bepo} pour utiliser sa
13384 disposition de clavier préférée une fois connecté. Le premier argument
13385 correspond à la disposition, tandis que le second argument correspond à la
13386 variante. La ligne @code{xkb_variant} peut être omise pour choisir la
13387 variante par défaut.
13388 @end deffn
13389
13390 @deffn {Procédure Scheme} screen-locker-service @var{package} [@var{program}]
13391 Ajoute @var{package}, un paquet pour un verrouiller l'écran ou un
13392 économiseur d'écran dont la commande est @var{program}, à l'ensemble des
13393 programmes setuid et lui ajoute une entrée PAM. Par exemple :
13394
13395 @lisp
13396 (screen-locker-service xlockmore "xlock")
13397 @end lisp
13398
13399 rend utilisable le bon vieux XlockMore.
13400 @end deffn
13401
13402
13403 @node Services d'impression
13404 @subsubsection Services d'impression
13405
13406 @cindex support des imprimantes avec CUPS
13407 Le module @code{(gnu services cups)} fournit une définition de service Guix
13408 pour le service d'impression CUPS. Pour ajouter le support d'une imprimante
13409 à un système GuixSD, ajoutez un @code{cups-service} à la définition du
13410 système d'exploitation :
13411
13412 @deffn {Variable Scheme} cups-service-type
13413 Le type de service pour un serveur d'impression CUPS. Sa valeur devrait
13414 être une configuration CUPS valide (voir plus bas). Pour utiliser les
13415 paramètres par défaut, écrivez simplement :
13416 @example
13417 (service cups-service-type)
13418 @end example
13419 @end deffn
13420
13421 La configuration de CUPS contrôle les paramètres de base de votre
13422 installation CUPS : sur quelles interfaces il doit écouter, que faire si un
13423 travail échoue, combien de journalisation il faut faire, etc. Pour ajouter
13424 une imprimante, vous devrez visiter l'URL @url{http://localhost:631} ou
13425 utiliser un outil comme les services de configuration d'imprimante de
13426 GNOME. Par défaut, la configuration du service CUPS générera un certificat
13427 auto-signé si besoin, pour les connexions sécurisée avec le serveur
13428 d'impression.
13429
13430 Supposons que vous souhaitiez activer l'interface Web de CUPS et ajouter le
13431 support pour les imprimantes Epson via le paquet @code{escpr} et our les
13432 imprimantes HP via le paquet @code{hplip-minimal}. Vous pouvez le faire
13433 directement, comme ceci (vous devez utiliser le module @code{(gnu packages
13434 cups)}) :
13435
13436 @example
13437 (service cups-service-type
13438 (cups-configuration
13439 (web-interface? #t)
13440 (extensions
13441 (list cups-filters escpr hplip-minimal))))
13442 @end example
13443
13444 Remarque : si vous souhaitez utiliser la GUI basée sur Qt5 qui provient du
13445 paquet hplip, nous vous suggérons d'installer le paquet @code{hplip}, soit
13446 dans votre configuration d'OS, soit en tant qu'utilisateur.
13447
13448 Les paramètres de configuration disponibles sont les suivants. Chaque
13449 définition des paramètres est précédé par son type ; par exemple,
13450 @samp{string-list foo} indique que le paramètre @code{foo} devrait être
13451 spécifié comme une liste de chaînes de caractères. Il y a aussi une manière
13452 de spécifier la configuration comme une chaîne de caractères, si vous avez
13453 un vieux fichier @code{cupsd.conf} que vous voulez porter depuis un autre
13454 système ; voir la fin pour plus de détails.
13455
13456 @c The following documentation was initially generated by
13457 @c (generate-documentation) in (gnu services cups). Manually maintained
13458 @c documentation is better, so we shouldn't hesitate to edit below as
13459 @c needed. However if the change you want to make to this documentation
13460 @c can be done in an automated way, it's probably easier to change
13461 @c (generate-documentation) than to make it below and have to deal with
13462 @c the churn as CUPS updates.
13463
13464
13465 Les champs de @code{cups-configuration} disponibles sont :
13466
13467 @deftypevr {paramètre de @code{cups-configuration}} package cups
13468 Le paquet CUPS.
13469 @end deftypevr
13470
13471 @deftypevr {paramètre de @code{cups-configuration}} package-list extensions
13472 Pilotes et autres extensions du paquet CUPS.
13473 @end deftypevr
13474
13475 @deftypevr {paramètre de @code{cups-configuration}} files-configuration files-configuration
13476 Configuration de l'emplacement où écrire les journaux, quels répertoires
13477 utiliser pour les travaux d'impression et les paramètres de configuration
13478 privilégiés liés.
13479
13480 Les champs @code{files-configuration} disponibles sont :
13481
13482 @deftypevr {paramètre de @code{files-configuration}} log-location access-log
13483 Définit le fichier de journal d'accès. Spécifier un nom de fichier vide
13484 désactive la génération de journaux d'accès. La valeur @code{stderr} fait
13485 que les entrées du journal seront envoyés sur l'erreur standard lorsque
13486 l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
13487 lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
13488 entrées du journal sont envoyées au démon de journalisation du système. Le
13489 nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
13490 @code{%s}, comme dans @code{/var/log/cups/%s-access_log}.
13491
13492 La valeur par défaut est @samp{"/var/log/cups/access_log"}.
13493 @end deftypevr
13494
13495 @deftypevr {paramètre de @code{files-configuration}} file-name cache-dir
13496 L'emplacement où CUPS devrait mettre les données en cache.
13497
13498 La valeur par défaut est @samp{"/var/cache/cups"}.
13499 @end deftypevr
13500
13501 @deftypevr {paramètre de @code{files-configuration}} string config-file-perm
13502 Spécifie les permissions pour tous les fichiers de configuration que
13503 l'ordonnanceur écrit.
13504
13505 Remarquez que les permissions pour le fichier printers.conf sont
13506 actuellement masqués pour ne permettre que l'accès par l'utilisateur de
13507 l'ordonnanceur (typiquement root). La raison est que les URI des
13508 imprimantes contiennent des informations d'authentification sensibles qui ne
13509 devraient pas être connues sur le système. Il n'est pas possible de
13510 désactiver cette fonctionnalité de sécurité.
13511
13512 La valeur par défaut est @samp{"0640"}.
13513 @end deftypevr
13514
13515 @deftypevr {paramètre de @code{files-configuration}} log-location error-log
13516 Définit le fichier de journal d'erreur. Spécifier un nom de fichier vide
13517 désactive la génération de journaux d'erreur. La valeur @code{stderr} fait
13518 que les entrées du journal seront envoyés sur l'erreur standard lorsque
13519 l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
13520 lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
13521 entrées du journal sont envoyées au démon de journalisation du système. Le
13522 nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
13523 @code{%s}, comme dans @code{/var/log/cups/%s-error_log}.
13524
13525 La valeur par défaut est @samp{"/var/log/cups/error_log"}.
13526 @end deftypevr
13527
13528 @deftypevr {paramètre de @code{files-configuration}} string fatal-errors
13529 Spécifie quelles erreurs sont fatales, qui font terminer l'ordonnanceur.
13530 Les types de chaînes sont :
13531
13532 @table @code
13533 @item none
13534 Aucune erreur n'est fatale.
13535
13536 @item all
13537 Toutes les erreurs ci-dessous sont fatales.
13538
13539 @item browse
13540 Les erreurs d'initialisation de la navigation sont fatales, par exemple les
13541 connexion échouées au démon DNS-SD.
13542
13543 @item config
13544 Les erreurs de syntaxe du fichier de configuration sont fatale.
13545
13546 @item listen
13547 Les erreurs d'écoute ou de port sont fatales, sauf pour les erreurs d'IPv6
13548 sur la boucle locale ou les adresses @code{any}.
13549
13550 @item log
13551 Les erreurs de création ou d'écriture des fichiers de journal sont fatales.
13552
13553 @item permissions
13554 Les mauvaises permissions des fichiers de démarrage sont fatales, par
13555 exemple un certificat TLS et des fichiers de clefs avec des permissions
13556 permettant la lecture à tout le monde.
13557 @end table
13558
13559 La valeur par défaut est @samp{"all -browse"}.
13560 @end deftypevr
13561
13562 @deftypevr {paramètre de @code{files-configuration}} boolean file-device?
13563 Spécifie si le fichier de pseudo-périphérique peut être utilisé pour de
13564 nouvelles queues d'impression. L'URI @uref{file:///dev/null} est toujours
13565 permise.
13566
13567 La valeur par défaut est @samp{#f}.
13568 @end deftypevr
13569
13570 @deftypevr {paramètre de @code{files-configuration}} string group
13571 Spécifie le nom ou l'ID du groupe qui sera utilisé lors de l'exécution de
13572 programmes externes.
13573
13574 La valeur par défaut est @samp{"lp"}.
13575 @end deftypevr
13576
13577 @deftypevr {paramètre de @code{files-configuration}} string log-file-perm
13578 Spécifie les permissions pour tous les fichiers de journal que
13579 l'ordonnanceur écrit.
13580
13581 La valeur par défaut est @samp{"0644"}.
13582 @end deftypevr
13583
13584 @deftypevr {paramètre de @code{files-configuration}} log-location page-log
13585 Définit le fichier de journal de page. Spécifier un nom de fichier vide
13586 désactive la génération de journaux de pages. La valeur @code{stderr} fait
13587 que les entrées du journal seront envoyés sur l'erreur standard lorsque
13588 l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
13589 lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
13590 entrées du journal sont envoyées au démon de journalisation du système. Le
13591 nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
13592 @code{%s}, comme dans @code{/var/log/cups/%s-page_log}.
13593
13594 La valeur par défaut est @samp{"/var/log/cups/page_log"}.
13595 @end deftypevr
13596
13597 @deftypevr {paramètre de @code{files-configuration}} string remote-root
13598 Spécifie le nom d'utilisateur associé aux accès non authentifiés par des
13599 clients qui se disent être l'utilisateur root. La valeur par défaut est
13600 @code{remroot}.
13601
13602 La valeur par défaut est @samp{"remroot"}.
13603 @end deftypevr
13604
13605 @deftypevr {paramètre de @code{files-configuration}} file-name request-root
13606 Spécifie le répertoire qui contient les travaux d'impression et d'autres
13607 données des requêtes HTTP.
13608
13609 La valeur par défaut est @samp{"/var/spool/cups"}.
13610 @end deftypevr
13611
13612 @deftypevr {paramètre de @code{files-configuration}} sandboxing sandboxing
13613 Spécifie le niveau d'isolation de sécurité appliqué aux filtres
13614 d'impression, aux moteurs et aux autres processus fils de l'ordonnanceur ;
13615 soit @code{relaxed} soit @code{strict}. Cette directive n'est actuellement
13616 utilisée et supportée que sur macOS.
13617
13618 La valeur par défaut est @samp{strict}.
13619 @end deftypevr
13620
13621 @deftypevr {paramètre de @code{files-configuration}} file-name server-keychain
13622 Spécifie l'emplacement des certifications TLS et des clefs privées. CUPS
13623 cherchera les clefs publiques et privées dans ce répertoire : un fichier
13624 @code{.crt} pour un certificat encodé en PEM et le fichier @code{.key}
13625 correspondant pour la clef privée encodée en PEM.
13626
13627 La valeur par défaut est @samp{"/etc/cups/ssl"}.
13628 @end deftypevr
13629
13630 @deftypevr {paramètre de @code{files-configuration}} file-name server-root
13631 Spécifie le répertoire contenant les fichiers de configuration du serveur.
13632
13633 La valeur par défaut est @samp{"/etc/cups"}.
13634 @end deftypevr
13635
13636 @deftypevr {paramètre de @code{files-configuration}} boolean sync-on-close?
13637 Spécifie si l'ordonnanceur appelle fsync(2) après avoir écrit la
13638 configuration ou les fichiers d'état.
13639
13640 La valeur par défaut est @samp{#f}.
13641 @end deftypevr
13642
13643 @deftypevr {paramètre de @code{files-configuration}} space-separated-string-list system-group
13644 Spécifie le groupe ou les groupes à utiliser pour l'authentification du
13645 groupe @code{@@SYSTEM}.
13646 @end deftypevr
13647
13648 @deftypevr {paramètre de @code{files-configuration}} file-name temp-dir
13649 Spécifie le répertoire où les fichiers temporaires sont stockés.
13650
13651 La valeur par défaut est @samp{"/var/spool/cups/tmp"}.
13652 @end deftypevr
13653
13654 @deftypevr {paramètre de @code{files-configuration}} string user
13655 Spécifie le nom d'utilisateur ou l'ID utilisé pour lancer des programmes
13656 externes.
13657
13658 La valeur par défaut est @samp{"lp"}.
13659 @end deftypevr
13660 @end deftypevr
13661
13662 @deftypevr {paramètre de @code{cups-configuration}} access-log-level access-log-level
13663 Spécifie le niveau de journalisation pour le fichier AccessLog. Le niveau
13664 @code{config} enregistre les ajouts, suppressions et modifications
13665 d'imprimantes et de classes et lorsque les fichiers de configuration sont
13666 accédés ou mis à jour. Le niveau @code{actions} enregistre la soumission,
13667 la suspension, la libération, la modification et l'annulation des travaux et
13668 toutes les conditions de @code{config}. Le niveau @code{all} enregistre
13669 toutes les requêtes.
13670
13671 La valeur par défaut est @samp{actions}.
13672 @end deftypevr
13673
13674 @deftypevr {paramètre de @code{cups-configuration}} boolean auto-purge-jobs?
13675 Spécifie s'il faut vider l'historique des travaux automatiquement lorsqu'il
13676 n'est plus nécessaire pour les quotas.
13677
13678 La valeur par défaut est @samp{#f}.
13679 @end deftypevr
13680
13681 @deftypevr {paramètre de @code{cups-configuration}} browse-local-protocols browse-local-protocols
13682 Spécifie les protocoles à utiliser pour partager les imprimantes sur le
13683 réseau local.
13684
13685 La valeur par défaut est @samp{dnssd}.
13686 @end deftypevr
13687
13688 @deftypevr {paramètre de @code{cups-configuration}} boolean browse-web-if?
13689 Spécifie si l'interface web de CUPS est publiée.
13690
13691 La valeur par défaut est @samp{#f}.
13692 @end deftypevr
13693
13694 @deftypevr {paramètre de @code{cups-configuration}} boolean browsing?
13695 Spécifie si les imprimantes partagées sont publiées.
13696
13697 La valeur par défaut est @samp{#f}.
13698 @end deftypevr
13699
13700 @deftypevr {paramètre de @code{cups-configuration}} string classification
13701 Spécifie la classification de sécurité du serveur. N'importe quel nom de
13702 bannière peut être utilisé, comme « classifié », « confidentiel », « secret
13703 », « top secret » et « déclassifié » ou la bannière peut être omise pour
13704 désactiver les fonctions d'impression sécurisées.
13705
13706 La valeur par défaut est @samp{""}.
13707 @end deftypevr
13708
13709 @deftypevr {paramètre de @code{cups-configuration}} boolean classify-override?
13710 Spécifie si les utilisateurs peuvent remplacer la classification (page de
13711 couverture) des travaux d'impression individuels avec l'option
13712 @code{job-sheets}.
13713
13714 La valeur par défaut est @samp{#f}.
13715 @end deftypevr
13716
13717 @deftypevr {paramètre de @code{cups-configuration}} default-auth-type default-auth-type
13718 Spécifie le type d'authentification par défaut à utiliser.
13719
13720 La valeur par défaut est @samp{Basic}.
13721 @end deftypevr
13722
13723 @deftypevr {paramètre de @code{cups-configuration}} default-encryption default-encryption
13724 Spécifie si le chiffrement sera utilisé pour les requêtes authentifiées.
13725
13726 La valeur par défaut est @samp{Required}.
13727 @end deftypevr
13728
13729 @deftypevr {paramètre de @code{cups-configuration}} string default-language
13730 Spécifie la langue par défaut à utiliser pour le contenu textuel et web.
13731
13732 La valeur par défaut est @samp{"en"}.
13733 @end deftypevr
13734
13735 @deftypevr {paramètre de @code{cups-configuration}} string default-paper-size
13736 Spécifie la taille de papier par défaut pour les nouvelles queues
13737 d'impression. @samp{"Auto"} utilise la valeur par défaut du paramètre de
13738 régionalisation, tandis que @samp{"None"} spécifie qu'il n'y a pas de taille
13739 par défaut. Des noms de tailles spécifique sont par exemple @samp{"Letter"}
13740 et @samp{"A4"}.
13741
13742 La valeur par défaut est @samp{"Auto"}.
13743 @end deftypevr
13744
13745 @deftypevr {paramètre de @code{cups-configuration}} string default-policy
13746 Spécifie la politique d'accès par défaut à utiliser.
13747
13748 La valeur par défaut est @samp{"default"}.
13749 @end deftypevr
13750
13751 @deftypevr {paramètre de @code{cups-configuration}} boolean default-shared?
13752 Spécifie si les imprimantes locales sont partagées par défaut.
13753
13754 La valeur par défaut est @samp{#t}.
13755 @end deftypevr
13756
13757 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer dirty-clean-interval
13758 Spécifie le délai pour mettre à jour les fichiers de configuration et
13759 d'état. Une valeur de 0 fait que la mise à jour arrive aussi vite que
13760 possible, typiquement en quelques millisecondes.
13761
13762 La valeur par défaut est @samp{30}.
13763 @end deftypevr
13764
13765 @deftypevr {paramètre de @code{cups-configuration}} error-policy error-policy
13766 Spécifie ce qu'il faut faire si une erreur a lieu. Les valeurs possibles
13767 sont @code{abort-job}, qui supprimera les travaux d'impression en échec ;
13768 @code{retry-job}, qui tentera de nouveau l'impression plus tard ;
13769 @code{retry-this-job}, qui retentera l'impression immédiatement ; et
13770 @code{stop-printer} qui arrête l'imprimante.
13771
13772 La valeur par défaut est @samp{stop-printer}.
13773 @end deftypevr
13774
13775 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer filter-limit
13776 Spécifie le coût maximum des filtres qui sont lancés en même temps, pour
13777 minimiser les problèmes de ressources de disque, de mémoire et de CPU. Une
13778 limite de 0 désactive la limite de filtrage. Une impression standard vers
13779 une imprimante non-PostScript requirt une limite de filtre d'environ 200.
13780 Une imprimante PostScript requiert environ la moitié (100). Mettre en place
13781 la limite en dessous de ces valeurs limitera l'ordonnanceur à un seul
13782 travail d'impression à la fois.
13783
13784 La valeur par défaut est @samp{0}.
13785 @end deftypevr
13786
13787 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer filter-nice
13788 Spécifie la priorité des filtres de l'ordonnanceur qui sont lancés pour
13789 imprimer un travail. La valeur va de 0, la plus grande priorité, à 19, la
13790 plus basse priorité.
13791
13792 La valeur par défaut est @samp{0}.
13793 @end deftypevr
13794
13795 @deftypevr {paramètre de @code{cups-configuration}} host-name-lookups host-name-lookups
13796 Spécifie s'il faut faire des résolutions inverses sur les clients qui se
13797 connectent. Le paramètre @code{double} fait que @code{cupsd} vérifie que le
13798 nom d'hôte résolu depuis l'adresse correspond à l'une des adresses renvoyées
13799 par ce nom d'hôte. Les résolutions doubles évitent aussi que des clients
13800 avec des adresses non enregistrées ne s'adressent à votre serveur.
13801 N'initialisez cette valeur qu'à @code{#t} ou @code{double} que si c'est
13802 absolument nécessaire.
13803
13804 La valeur par défaut est @samp{#f}.
13805 @end deftypevr
13806
13807 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-kill-delay
13808 Spécifie le nombre de secondes à attendre avant de tuer les filtres et les
13809 moteurs associés avec un travail annulé ou suspendu.
13810
13811 La valeur par défaut est @samp{30}.
13812 @end deftypevr
13813
13814 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-retry-interval
13815 Spécifie l'intervalle des nouvelles tentatives en secondes. C'est
13816 typiquement utilisé pour les queues de fax mais peut aussi être utilisé avec
13817 des queues d'impressions normales dont la politique d'erreur est
13818 @code{retry-job} ou @code{retry-current-job}.
13819
13820 La valeur par défaut est @samp{30}.
13821 @end deftypevr
13822
13823 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-retry-limit
13824 Spécifie le nombre de nouvelles tentatives pour les travaux. C'est
13825 typiquement utilisé pour les queues de fax mais peut aussi être utilisé pour
13826 les queues d'impressions dont la politique d'erreur est @code{retry-job} ou
13827 @code{retry-current-job}.
13828
13829 La valeur par défaut est @samp{5}.
13830 @end deftypevr
13831
13832 @deftypevr {paramètre de @code{cups-configuration}} boolean keep-alive?
13833 Spécifie s'il faut supporter les connexion HTTP keep-alive.
13834
13835 La valeur par défaut est @samp{#t}.
13836 @end deftypevr
13837
13838 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer keep-alive-timeout
13839 Spécifie combien de temps les connexions inactives avec les clients restent
13840 ouvertes, en secondes.
13841
13842 La valeur par défaut est @samp{30}.
13843 @end deftypevr
13844
13845 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer limit-request-body
13846 Spécifie la taille maximale des fichiers à imprimer, des requêtes IPP et des
13847 données de formulaires HTML. Une limite de 0 désactive la vérification de
13848 la limite.
13849
13850 La valeur par défaut est @samp{0}.
13851 @end deftypevr
13852
13853 @deftypevr {paramètre de @code{cups-configuration}} multiline-string-list listen
13854 Écoute sur les interfaces spécifiées. Les valeurs valides sont de la forme
13855 @var{adresse}:@var{port}, où @var{adresse} est sotit une daresse IPv6 dans
13856 des crochets, soit une adresse IPv4, soit @code{*} pour indiquer toutes les
13857 adresses. Les valeurs peuvent aussi être des noms de fichiers de socket
13858 UNIX domain. La directive Listen est similaire à la directive Port mais
13859 vous permet de restreindre l'accès à des interfaces ou des réseaux
13860 spécifiques.
13861 @end deftypevr
13862
13863 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer listen-back-log
13864 Spécifie le nombre de connexions en attente qui seront permises. Ça
13865 n'affecte normalement que les serveurs très actifs qui ont atteint la limite
13866 MaxClients, mais peut aussi être déclenché par un grand nombre de connexions
13867 simultanées. Lorsque la limite est atteinte, le système d'exploitation
13868 refusera les connexions supplémentaires jusqu'à ce que l'ordonnanceur
13869 accepte les connexions en attente.
13870
13871 La valeur par défaut est @samp{128}.
13872 @end deftypevr
13873
13874 @deftypevr {paramètre de @code{cups-configuration}} location-access-control-list location-access-controls
13875 Spécifie un ensemble de contrôles d'accès supplémentaires.
13876
13877 Les champs de @code{location-access-controls} disponibles sont :
13878
13879 @deftypevr {paramètre de @code{location-access-controls}} file-name path
13880 Spécifie le chemin d'URI auquel les contrôles d'accès s'appliquent.
13881 @end deftypevr
13882
13883 @deftypevr {paramètre de @code{location-access-controls}} access-control-list access-controls
13884 Les contrôles d'accès pour tous les accès à ce chemin, dans le même format
13885 que le champ @code{access-controls} de @code{operation-access-control}.
13886
13887 La valeur par défaut est @samp{()}.
13888 @end deftypevr
13889
13890 @deftypevr {paramètre de @code{location-access-controls}} method-access-control-list method-access-controls
13891 Contrôles d'accès pour les accès spécifiques à la méthode à ce chemin.
13892
13893 La valeur par défaut est @samp{()}.
13894
13895 Les champs de @code{method-access-controls} disponibles sont :
13896
13897 @deftypevr {paramètre de @code{method-access-controls}} boolean reverse?
13898 Si la valeur est @code{#t}, applique les contrôles d'accès à toutes les
13899 méthodes sauf les méthodes listées. Sinon, applique le contrôle uniquement
13900 aux méthodes listées.
13901
13902 La valeur par défaut est @samp{#f}.
13903 @end deftypevr
13904
13905 @deftypevr {paramètre de @code{method-access-controls}} method-list methods
13906 Les méthodes auxquelles ce contrôle d'accès s'applique.
13907
13908 La valeur par défaut est @samp{()}.
13909 @end deftypevr
13910
13911 @deftypevr {paramètre de @code{method-access-controls}} access-control-list access-controls
13912 Directives de contrôle d'accès, comme une liste de chaînes de caractères.
13913 Chaque chaîne devrait être une directive, comme « Order allow, deny ».
13914
13915 La valeur par défaut est @samp{()}.
13916 @end deftypevr
13917 @end deftypevr
13918 @end deftypevr
13919
13920 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer log-debug-history
13921 Spécifie le nombre de messages de débogage qui sont retenu pour la
13922 journalisation si une erreur arrive dans un travail d'impression. Les
13923 messages de débogage sont journalisés indépendamment du paramètre LogLevel.
13924
13925 La valeur par défaut est @samp{100}.
13926 @end deftypevr
13927
13928 @deftypevr {paramètre de @code{cups-configuration}} log-level log-level
13929 Spécifie le niveau de journalisation du fichier ErrorLog. La valeur
13930 @code{none} arrête toute journalisation alors que que @code{debug2}
13931 enregistre tout.
13932
13933 La valeur par défaut est @samp{info}.
13934 @end deftypevr
13935
13936 @deftypevr {paramètre de @code{cups-configuration}} log-time-format log-time-format
13937 Spécifie le format de la date et de l'heure dans les fichiers de journaux.
13938 La valeur @code{standard} enregistre les secondes entières alors que
13939 @code{usecs} enregistre les microsecondes.
13940
13941 La valeur par défaut est @samp{standard}.
13942 @end deftypevr
13943
13944 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-clients
13945 Spécifie le nombre maximum de clients simultanés qui sont autorisés par
13946 l'ordonnanceur.
13947
13948 La valeur par défaut est @samp{100}.
13949 @end deftypevr
13950
13951 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-clients-per-host
13952 Spécifie le nombre maximum de clients simultanés permis depuis une même
13953 adresse.
13954
13955 La valeur par défaut est @samp{100}.
13956 @end deftypevr
13957
13958 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-copies
13959 Spécifie le nombre maximum de copies qu'un utilisateur peut imprimer pour
13960 chaque travail.
13961
13962 La valeur par défaut est @samp{9999}.
13963 @end deftypevr
13964
13965 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-hold-time
13966 Spécifie la durée maximum qu'un travail peut rester dans l'état de
13967 suspension @code{indefinite} avant qu'il ne soit annulé. La valeur 0
13968 désactive l'annulation des travaux suspendus.
13969
13970 La valeur par défaut est @samp{0}.
13971 @end deftypevr
13972
13973 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs
13974 Spécifie le nombre maximum de travaux simultanés autorisés. La valeur 0
13975 permet un nombre illimité de travaux.
13976
13977 La valeur par défaut est @samp{500}.
13978 @end deftypevr
13979
13980 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs-per-printer
13981 Spécifie le nombre maximum de travaux simultanés autorisés par imprimante.
13982 La valeur 0 permet au plus MaxJobs travaux par imprimante.
13983
13984 La valeur par défaut est @samp{0}.
13985 @end deftypevr
13986
13987 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs-per-user
13988 Spécifie le nombre maximum de travaux simultanés permis par utilisateur. La
13989 valeur 0 permet au plus MaxJobs travaux par utilisateur.
13990
13991 La valeur par défaut est @samp{0}.
13992 @end deftypevr
13993
13994 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-job-time
13995 Spécifie la durée maximum qu'un travail peut prendre avant qu'il ne soit
13996 annulé, en secondes. Indiquez 0 pour désactiver l'annulation des travaux «
13997 coincés ».
13998
13999 La valeur par défaut est @samp{10800}.
14000 @end deftypevr
14001
14002 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-log-size
14003 Spécifie la taille maximale des fichiers de journaux avant qu'on ne les
14004 fasse tourner, en octets. La valeur 0 désactive la rotation.
14005
14006 La valeur par défaut est @samp{1048576}.
14007 @end deftypevr
14008
14009 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer multiple-operation-timeout
14010 Spécifie la durée maximale à permettre entre les fichiers d'un travail en
14011 contenant plusieurs, en secondes.
14012
14013 La valeur par défaut est @samp{300}.
14014 @end deftypevr
14015
14016 @deftypevr {paramètre de @code{cups-configuration}} string page-log-format
14017 Spécifie le format des lignes PageLog. Les séquences qui commencent par un
14018 pourcent (@samp{%}) sont remplacées par l'information correspondante, tandis
14019 que les autres caractères sont copiés littéralement. Les séquences pourcent
14020 suivantes sont reconnues :
14021
14022 @table @samp
14023 @item %%
14024 insère un seul caractères pourcent
14025
14026 @item %@{name@}
14027 insère la valeur de l'attribut IPP spécifié
14028
14029 @item %C
14030 insère le nombre de copies pour la page actuelle
14031
14032 @item %P
14033 insère le numéro de page actuelle
14034
14035 @item %T
14036 insère la date et l'heure actuelle dans un format de journal commun
14037
14038 @item %j
14039 insère l'ID du travail
14040
14041 @item %p
14042 insère le nom de l'imprimante
14043
14044 @item %u
14045 insère le nom d'utilisateur
14046 @end table
14047
14048 Si la valeur est la chaîne vide, le PageLog est désactivée. La chaîne
14049 @code{%p %u %j %T %P %C %@{job-billing@} %@{job-originating-host-name@}
14050 %@{job-name@} %@{media@} %@{sides@}} crée un PageLog avec les entrées
14051 standards.
14052
14053 La valeur par défaut est @samp{""}.
14054 @end deftypevr
14055
14056 @deftypevr {paramètre de @code{cups-configuration}} environment-variables environment-variables
14057 Passe les variables d'environnement spécifiées aux processus fils ; une
14058 liste de chaînes de caractères.
14059
14060 La valeur par défaut est @samp{()}.
14061 @end deftypevr
14062
14063 @deftypevr {paramètre de @code{cups-configuration}} policy-configuration-list policies
14064 Spécifie des politiques de contrôle d'accès nommées.
14065
14066 Les champs de @code{policy-configuration} disponibles sont :
14067
14068 @deftypevr {paramètre de @code{policy-configuration}} string name
14069 Nom de la politique.
14070 @end deftypevr
14071
14072 @deftypevr {paramètre de @code{policy-configuration}} string job-private-access
14073 Spécifie une liste d'accès pour les valeurs privées du travail.
14074 @code{@@ACL} correspond aux valeurs requesting-user-name-allowed ou
14075 requesting-user-name-denied de l'imprimante. @code{@@OWNER} correspond au
14076 propriétaire du travail. @code{@@SYSTEM} correspond aux groupes listés dans
14077 le champ @code{system-group} de la configuration @code{files-config}, qui
14078 est réifié dans le fichier @code{cups-files.conf(5)}. Les autres éléments
14079 possibles de la liste d'accès sont des noms d'utilisateurs spécifiques et
14080 @code{@@@var{group}} pour indiquer les membres d'un groupe spécifique. La
14081 liste d'accès peut aussi être simplement @code{all} ou @code{default}.
14082
14083 La valeur par défaut est @samp{"@@OWNER @@SYSTEM"}.
14084 @end deftypevr
14085
14086 @deftypevr {paramètre de @code{policy-configuration}} string job-private-values
14087 Spécifie la liste des valeurs de travaux à rendre privée, ou @code{all},
14088 @code{default}, ou @code{none}.
14089
14090 La valeur par défaut est @samp{"job-name job-originating-host-name
14091 job-originating-user-name phone"}.
14092 @end deftypevr
14093
14094 @deftypevr {paramètre de @code{policy-configuration}} string subscription-private-access
14095 Spécifie un liste d'accès pour les valeurs privées de la souscription.
14096 @code{@@ACL} correspond aux valeurs requesting-user-name-allowed ou
14097 requesting-user-name-denied de l'imprimante. @code{@@OWNER} correspond au
14098 propriétaire du travail. @code{@@SYSTEM} correspond aux groupes listés dans
14099 le champ @code{system-group} de la configuration @code{files-config}, qui
14100 est réifié dans le fichier @code{cups-files.conf(5)}. Les autres éléments
14101 possibles de la liste d'accès sont des noms d'utilisateurs spécifiques et
14102 @code{@@@var{group}} pour indiquer les membres d'un groupe spécifique. La
14103 liste d'accès peut aussi être simplement @code{all} ou @code{default}.
14104
14105 La valeur par défaut est @samp{"@@OWNER @@SYSTEM"}.
14106 @end deftypevr
14107
14108 @deftypevr {paramètre de @code{policy-configuration}} string subscription-private-values
14109 Spécifie la liste des valeurs de travaux à rendre privée, ou @code{all},
14110 @code{default}, ou @code{none}.
14111
14112 La valeur par défaut est @samp{"notify-events notify-pull-method
14113 notify-recipient-uri notify-subscriber-user-name notify-user-data"}.
14114 @end deftypevr
14115
14116 @deftypevr {paramètre de @code{policy-configuration}} operation-access-control-list access-controls
14117 Contrôle d'accès par les actions IPP.
14118
14119 La valeur par défaut est @samp{()}.
14120 @end deftypevr
14121 @end deftypevr
14122
14123 @deftypevr {paramètre de @code{cups-configuration}} boolean-or-non-negative-integer preserve-job-files
14124 Spécifie si les fichiers de travaux (les documents) sont préservés après
14125 qu'un travail est imprimé. Si une valeur numérique est spécifiée, les
14126 fichiers de travaux sont préservés pour le nombre de secondes indiquées
14127 après l'impression. Sinon, une valeur booléenne s'applique indéfiniment.
14128
14129 La valeur par défaut est @samp{86400}.
14130 @end deftypevr
14131
14132 @deftypevr {paramètre de @code{cups-configuration}} boolean-or-non-negative-integer preserve-job-history
14133 Spécifie si l'historique des travaux est préservé après qu'un travail est
14134 imprimé. Si une valeur numérique est spécifiée, l'historique des travaux
14135 est préservé pour le nombre de secondes indiquées après l'impression. Si la
14136 valeur est @code{#t}, l'historique des travaux est préservé jusqu'à
14137 atteindre la limite MaxJobs.
14138
14139 La valeur par défaut est @samp{#t}.
14140 @end deftypevr
14141
14142 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer reload-timeout
14143 Spécifie la durée d'attente pour la fin des travaux avant de redémarrer
14144 l'ordonnanceur.
14145
14146 La valeur par défaut est @samp{30}.
14147 @end deftypevr
14148
14149 @deftypevr {paramètre de @code{cups-configuration}} string rip-cache
14150 Spécifie la quantité de mémoire maximale à utiliser pour convertir des
14151 documents en bitmaps pour l'imprimante.
14152
14153 La valeur par défaut est @samp{"128m"}.
14154 @end deftypevr
14155
14156 @deftypevr {paramètre de @code{cups-configuration}} string server-admin
14157 Spécifie l'adresse de courriel de l'administrateur système.
14158
14159 La valeur par défaut est @samp{"root@@localhost.localdomain"}.
14160 @end deftypevr
14161
14162 @deftypevr {paramètre de @code{cups-configuration}} host-name-list-or-* server-alias
14163 La directive ServerAlias est utilisée pour la validation des en-tête HTTP
14164 Host lorsque les clients se connectent à l'ordonnanceur depuis des
14165 interfaces externes. Utiliser le nom spécial @code{*} peut exposer votre
14166 système à des attaques connues de recombinaison DNS dans le navigateur, même
14167 lorsque vous accédez au site à travers un pare-feu. Si la découverte
14168 automatique des autres noms ne fonctionne pas, nous vous recommandons de
14169 lister chaque nom alternatif avec une directive SeverAlias plutôt que
14170 d'utiliser @code{*}.
14171
14172 La valeur par défaut est @samp{*}.
14173 @end deftypevr
14174
14175 @deftypevr {paramètre de @code{cups-configuration}} string server-name
14176 Spécifie le nom d'hôte pleinement qualifié du serveur.
14177
14178 La valeur par défaut est @samp{"localhost"}.
14179 @end deftypevr
14180
14181 @deftypevr {paramètre de @code{cups-configuration}} server-tokens server-tokens
14182 Spécifie les informations incluses dans les en-têtes Server des réponses
14183 HTTP. @code{None} désactive l'en-tête Server. @code{ProductOnly} rapporte
14184 @code{CUPS}. @code{Major} rapporte @code{CUPS 2}. @code{Minor} rapporte
14185 @code{CUPS 2.0}. @code{Minimal} rapporte @code{CUPS 2.0.0}. @code{OS}
14186 rapporte @code{CUPS 2.0.0 (@var{uname})} où @var{uname} est la sortie de la
14187 commande @code{uname}. @code{Full} rapporte @code{CUPS 2.0.0 (@var{uname})
14188 IPP/2.0}.
14189
14190 La valeur par défaut est @samp{Minimal}.
14191 @end deftypevr
14192
14193 @deftypevr {paramètre de @code{cups-configuration}} string set-env
14194 Indique que la variable d'environnement spécifiée doit être passée aux
14195 processus fils.
14196
14197 La valeur par défaut est @samp{"variable value"}.
14198 @end deftypevr
14199
14200 @deftypevr {paramètre de @code{cups-configuration}} multiline-string-list ssl-listen
14201 Écoute des connexions chiffrées sur les interfaces spécifiées. Les valeurs
14202 valides sont de la forme @var{adresse}:@var{port}, où @var{adresse} est soit
14203 une adresse IPv6 dans des crochets, soit une adresse IPv4, soit @code{*}
14204 pour indiquer toutes les interfaces.
14205
14206 La valeur par défaut est @samp{()}.
14207 @end deftypevr
14208
14209 @deftypevr {paramètre de @code{cups-configuration}} ssl-options ssl-options
14210 Indique les options de chiffrement. Par défaut, CUPS ne supporte que le
14211 chiffrement avec TLS 1.0 ou plus avec des suites de chiffrement connues pour
14212 être sures. L'option @code{AllowRC4} active les suites de chiffrement
14213 128-bits RC4, qui sont requises pour certains vieux clients qui
14214 n'implémentent pas les nouvelles. L'option @code{AllowSSL3} active SSL
14215 v3.0, qui est requis par certains vieux clients qui ne supportent pas TLS
14216 v1.0.
14217
14218 La valeur par défaut est @samp{()}.
14219 @end deftypevr
14220
14221 @deftypevr {paramètre de @code{cups-configuration}} boolean strict-conformance?
14222 Spécifie si l'ordonnanceur demande aux clients d'adhérer aux spécifications
14223 IPP.
14224
14225 La valeur par défaut est @samp{#f}.
14226 @end deftypevr
14227
14228 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer timeout
14229 Spécifie le délai d'attente des requêtes HTTP, en secondes.
14230
14231 La valeur par défaut est @samp{300}.
14232
14233 @end deftypevr
14234
14235 @deftypevr {paramètre de @code{cups-configuration}} boolean web-interface?
14236 Spécifie si l'interface web est activée.
14237
14238 La valeur par défaut est @samp{#f}.
14239 @end deftypevr
14240
14241 Maintenant, vous vous dîtes peut-être « oh la la, cher manuel de Guix, je
14242 t'aime bien mais arrête maintenant avec ces options de configuration
14243 »@footnote{NdT : je vous rassure, c'est aussi mon sentiment au moment de
14244 traduire ces lignes. Et pour moi, c'est encore loin d'être fini.}. En
14245 effet. cependant, encore un point supplémentaire : vous pouvez avoir un
14246 fichier @code{cupsd.conf} existant que vous pourriez vouloir utiliser. Dans
14247 ce cas, vous pouvez passer un @code{opaque-cups-configuration} en
14248 configuration d'un @code{cups-service-type}.
14249
14250 Les champs de @code{opaque-cups-configuration} disponibles sont :
14251
14252 @deftypevr {paramètre de @code{opaque-cups-configuration}} package cups
14253 Le paquet CUPS.
14254 @end deftypevr
14255
14256 @deftypevr {paramètre de @code{opaque-cups-configuration}} string cupsd.conf
14257 Le contenu de @code{cupsd.conf}, en tant que chaîne de caractères.
14258 @end deftypevr
14259
14260 @deftypevr {paramètre de @code{opaque-cups-configuration}} string cups-files.conf
14261 Le contenu du fichier @code{cups-files.conf}, en tant que chaîne de
14262 caractères.
14263 @end deftypevr
14264
14265 Par exemple, si vos fichiers @code{cupsd.conf} et @code{cups-files.conf}
14266 sont dans des chaînes du même nom, pouvez instancier un service CUPS de
14267 cette manière :
14268
14269 @example
14270 (service cups-service-type
14271 (opaque-cups-configuration
14272 (cupsd.conf cupsd.conf)
14273 (cups-files.conf cups-files.conf)))
14274 @end example
14275
14276
14277 @node Services de bureaux
14278 @subsubsection Services de bureaux
14279
14280 Le module @code{(gnu services desktop)} fournit des services qui sont
14281 habituellement utiles dans le contexte d'une installation « de bureau » —
14282 c'est-à-dire sur une machine qui fait tourner un service d'affichage
14283 graphique, éventuellement avec des interfaces utilisateurs graphiques, etc.
14284 Il définit aussi des services qui fournissent des environnements de bureau
14285 spécifiques comme GNOME, XFCE et MATE.
14286
14287 Pour simplifier les choses, le module définit une variable contenant
14288 l'ensemble des services que les utilisateurs s'attendent en général à avoir
14289 sur une machine avec un environnement graphique et le réseau :
14290
14291 @defvr {Variable Scheme} %desktop-services
14292 C'est la liste des services qui étend @var{%base-services} en ajoutant ou en
14293 ajustant des services pour une configuration « de bureau » typique.
14294
14295 En particulier, il ajoute un gestionnaire de connexion graphique (@pxref{Système de fenêtrage X, @code{slim-service}}), des verrouilleurs d'écran, un outil de
14296 gestion réseau (@pxref{Services réseau,
14297 @code{network-manager-service-type}}), des services de gestion de l'énergie
14298 et des couleurs, le gestionnaire de connexion et de session @code{elogind},
14299 le service de privilèges Polkit, le service de géolocalisation GeoClue, le
14300 démon Accounts Service qui permet aux utilisateurs autorisés de changer leur
14301 mot de passe, un client NTP (@pxref{Services réseau}), le démon Avahi,
14302 et le service name service switch est configuré pour pouvoir utiliser
14303 @code{nss-mdns} (@pxref{Name Service Switch, mDNS}).
14304 @end defvr
14305
14306 La variable @var{%desktop-services} peut être utilisée comme champ
14307 @code{services} d'une déclaration @code{operating-system}
14308 (@pxref{Référence de système d'exploitation, @code{services}}).
14309
14310 En plus, les procédures @code{gnome-desktop-service},
14311 @code{xfce-desktop-service}, @code{mate-desktop-service} et
14312 @code{enlightenment-desktop-service-type} peuvent ajouter GNOME, XFCE, MATE
14313 ou Enlightenment à un système. « Ajouter GNOME » signifie que les services
14314 du système comme les utilitaires d'ajustement de la luminosité et de gestion
14315 de l'énergie sont ajoutés au système, en étendant @code{polkit} et
14316 @code{dbus} de la bonne manière, ce qui permet à GNOME d'opérer avec des
14317 privilèges plus élevés sur un nombre limité d'interfaces systèmes
14318 spécialisées. En plus, ajouter un service construit par
14319 @code{gnome-desktop-service} ajoute le métapaquet GNOME au profil du
14320 système. de même, ajouter le service XFCE ajoute le métapaquet @code{xfce}
14321 au profil système, mais il permet aussi au gestionnaire de fichiers Thunar
14322 d'ouvrir une fenêtre de gestion des fichier « en mode root », si
14323 l'utilisateur s'authentifie avec le mot de passe administrateur via
14324 l'interface graphique polkit standard. « Ajouter MATE » signifie que
14325 @code{polkit} et @code{dbus} sont étendue de la bonne manière, ce qui permet
14326 à MATE d'opérer avec des privilèges plus élevés sur un nombre limité
14327 d'interface systèmes spécialisées. « Ajouter ENLIGHTENMENT » signifie que
14328 @code{dbus} est étendu comme il faut et que plusieurs binaires
14329 d'Enlightenment récupèrent le bit setuid, ce qui permet au verrouilleur
14330 d'écran d'Enlightenment et à d'autres fonctionnalités de fonctionner
14331 correctement.
14332
14333 Les environnement de bureau dans Guix utilisent le service d'affichage Xorg
14334 par défaut. Si vous voulez utiliser le protocol de serveur d'affichage plus
14335 récent Wayland, vous devez utiliser @code{sddm-service} à la place de
14336 @code{slim-service} comme gestionnaire de connexion graphique. Vous devriez
14337 ensuite sélectionner la session « GNOME (Wayland) » dans SDDM. Autrement,
14338 vous pouvez essayer de démarrer GNOME sur Wayland manuellement depuis un TTY
14339 avec la commande @command{XDG_SESSION_TYPE=wayland exec dbus-run-session
14340 gnome-session}. Actuellement seul GNOME support Wayland.
14341
14342 @deffn {Procédure Scheme} gnome-desktop-service
14343 Renvoie un service qui ajoute le paquet @code{gnome} au profil système et
14344 étend polkit avec des actions de @code{gnome-settings-daemon}.
14345 @end deffn
14346
14347 @deffn {Procédure Scheme} xfce-desktop-service
14348 Renvoie un service qui ajoute le paquet @code{xfce} au profil du système et
14349 étend polkit avec la capacité pour @code{thunar} de manipuler le système de
14350 fichier en tant que root depuis une session utilisateur, après que
14351 l'utilisateur s'est authentifié avec le mot de passe administrateur.
14352 @end deffn
14353
14354 @deffn {Procédure Scheme} mate-desktop-service
14355 Renvoie un service qui ajoute le paquet @code{mate} au profil du système et
14356 étend polkit avec les actions de @code{mate-settings-daemon}.
14357 @end deffn
14358
14359 @deffn {Procédure Scheme} enlightenment-desktop-service-type
14360 Renvoie un service qui ajoute le paquet @code{enlightenment} et étend dbus
14361 avec les actions de @code{efl}
14362 @end deffn
14363
14364 @deftp {Type de données} enlightenment-desktop-service-configuration
14365 @table @asis
14366 @item @code{enlightenment} (par défaut : @code{enlightenment})
14367 Le paquet enlightenment à utiliser.
14368 @end table
14369 @end deftp
14370
14371 Comme les services de bureau GNOME, XFCE et MATE récupèrent tant de paquet,
14372 la variable @code{%desktop-services} par défaut n'inclut aucun d'entre eux.
14373 Pour ajouter GNOME, XFCE ou MATE, utilisez @code{cons} pour les ajouter à
14374 @code{%desktop-services} dans le champ @code{services} de votre
14375 @code{operating-system}.
14376
14377 @example
14378 (use-modules (gnu))
14379 (use-service-modules desktop)
14380 (operating-system
14381 ...
14382 ;; cons* ajoute les élément à la liste donnée en dernier argument
14383 (services (cons* (gnome-desktop-service)
14384 (xfce-desktop-service)
14385 %desktop-services))
14386 ...)
14387 @end example
14388
14389 Ces environnements de bureau seront alors disponibles comme une option dans
14390 la fenêtre de connexion graphique.
14391
14392 Les définitions de service qui sont vraiment incluses dans
14393 @code{%desktop-services} et fournies par @code{(gnu services dbus)} et
14394 @code{(gnu services desktop)} sont décrites plus bas.
14395
14396 @deffn {Procédure Scheme} dbus-service [#:dbus @var{dbus}] [#:services '()]
14397 Renvoie un service qui lance le « bus système », @var{dbus}, avec le support
14398 de @var{services}.
14399
14400 @uref{http://dbus.freedesktop.org/, D-Bus} est un utilitaire de
14401 communication inter-processus. Son bus système est utilisé pour permettre à
14402 des services systèmes de communiquer et d'être notifiés d'événements
14403 systèmes.
14404
14405 @var{services} doit être une liste de paquets qui fournissent un répertoire
14406 @file{etc/dbus-1/system.d} contenant de la configuration D-Bus
14407 supplémentaire et des fichiers de politiques. Par exemple, pour permettre à
14408 avahi-daemon d'utiliser le bus système, @var{services} doit être égal à
14409 @code{(list avahi)}.
14410 @end deffn
14411
14412 @deffn {Procédure Scheme} elogind-service [#:config @var{config}]
14413 Renvoie un service qui lance le démon de gestion de connexion et de session
14414 @code{elogind}. @uref{https://github.com/elogind/elogind, Elogind} expose
14415 une interface D-Bus qui peut être utilisée pour connaître quels utilisateurs
14416 sont connectés, le type de session qu'ils sont ouverte, suspendre le
14417 système, désactiver la veille système, redémarrer le système et d'autre
14418 taches.
14419
14420 Elogind gère la plupart des événements liés à l'énergie du système, par
14421 exemple mettre en veille le système quand l'écran est rabattu ou en
14422 l'éteignant quand le bouton de démarrage est appuyé.
14423
14424 L'argument @var{config} spécifie la configuration d'elogind et devrait être
14425 le résultat d'une invocation de @code{(elogind-configuration
14426 (@var{parameter} @var{value})...)}. Les paramètres disponibles et leur
14427 valeur par défaut sont :
14428
14429 @table @code
14430 @item kill-user-processes?
14431 @code{#f}
14432 @item kill-only-users
14433 @code{()}
14434 @item kill-exclude-users
14435 @code{("root")}
14436 @item inhibit-delay-max-seconds
14437 @code{5}
14438 @item handle-power-key
14439 @code{poweroff}
14440 @item handle-suspend-key
14441 @code{suspend}
14442 @item handle-hibernate-key
14443 @code{hibernate}
14444 @item handle-lid-switch
14445 @code{suspend}
14446 @item handle-lid-switch-docked
14447 @code{ignore}
14448 @item power-key-ignore-inhibited?
14449 @code{#f}
14450 @item suspend-key-ignore-inhibited?
14451 @code{#f}
14452 @item hibernate-key-ignore-inhibited?
14453 @code{#f}
14454 @item lid-switch-ignore-inhibited?
14455 @code{#t}
14456 @item holdoff-timeout-seconds
14457 @code{30}
14458 @item idle-action
14459 @code{ignore}
14460 @item idle-action-seconds
14461 @code{(* 30 60)}
14462 @item runtime-directory-size-percent
14463 @code{10}
14464 @item runtime-directory-size
14465 @code{#f}
14466 @item remove-ipc?
14467 @code{#t}
14468 @item suspend-state
14469 @code{("mem" "standby" "freeze")}
14470 @item suspend-mode
14471 @code{()}
14472 @item hibernate-state
14473 @code{("disk")}
14474 @item hibernate-mode
14475 @code{("platform" "shutdown")}
14476 @item hybrid-sleep-state
14477 @code{("disk")}
14478 @item hybrid-sleep-mode
14479 @code{("suspend" "platform" "shutdown")}
14480 @end table
14481 @end deffn
14482
14483 @deffn {Procédure Scheme} accountsservice-service @
14484 [#:accountsservice @var{accountsservice}]
14485 Renvoie un service qui lance AccountsService, un service système qui peut
14486 lister les comptes disponibles, changer leur mot de passe, etc.
14487 AccountsService s'intègre à Polkit pour permettre aux utilisateurs non
14488 privilégiés de pouvoir modifier la configuration de leur système.
14489 @uref{https://www.freedesktop.org/wiki/Software/AccountsService/, le site de
14490 accountsservice} pour trouver plus d'informations.
14491
14492 L'argument @var{accountsservice} est le paquet @code{accountsservice} à
14493 exposer comme un service.
14494 @end deffn
14495
14496 @deffn {Procédure Scheme} polkit-service @
14497 [#:polkit @var{polkit}]
14498 Renvoie un service qui lance le
14499 @uref{http://www.freedesktop.org/wiki/Software/polkit/, service de gestion
14500 des privilèges Polkit}, qui permet aux administrateurs systèmes de permettre
14501 l'accès à des opération privilégiées d'une manière structurée. En demandant
14502 au service Polkit, un composant système privilégié peut savoir lorsqu'il
14503 peut donner des privilèges supplémentaires à des utilisateurs normaux. Par
14504 exemple, un utilisateur normal peut obtenir le droit de mettre le système en
14505 veille si l'utilisateur est connecté localement.
14506 @end deffn
14507
14508 @deffn {Procédure Scheme} upower-service [#:upower @var{upower}] @
14509 [#:watts-up-pro? #f] @
14510 [#:poll-batteries? #t] @
14511 [#:ignore-lid? #f] @
14512 [#:use-percentage-for-policy? #f] @
14513 [#:percentage-low 10] @
14514 [#:percentage-critical 3] @
14515 [#:percentage-action 2] @
14516 [#:time-low 1200] @
14517 [#:time-critical 300] @
14518 [#:time-action 120] @
14519 [#:critical-power-action 'hybrid-sleep]
14520 Renvoie un service qui lance @uref{http://upower.freedesktop.org/,
14521 @command{upowerd}}, un moniteur système pour la consommation électrique et
14522 le niveau de batterie, avec les paramètres de configuration données. Il
14523 implémente l'interface D-Bus @code{org.freedesktop.UPower} et est notamment
14524 utilisé par GNOME.
14525 @end deffn
14526
14527 @deffn {Procédure Scheme} udisks-service [#:udisks @var{udisks}]
14528 Renvoie un service pour @uref{http://udisks.freedesktop.org/docs/latest/,
14529 UDisks}, un démon de @dfn{gestion de disques} qui fournit des notifications
14530 et la capacité de monter et démonter des disques à des interfaces
14531 utilisateurs. Les programmes qui parlent à UDisks sont par exemple la
14532 commande @command{udisksctl}, qui fait partie de UDisks et GNOME Disks.
14533 @end deffn
14534
14535 @deffn {Procédure Scheme} colord-service [#:colord @var{colord}]
14536 Renvoie un service qui lance @command{colord}, un service système avec une
14537 interface D-Bus pour gérer les profils de couleur des périphériques
14538 d'entrées et de sorties comme les écrans et les scanners. Il est notamment
14539 utilisé par l'outil graphique GNOME Color Manager. Voir
14540 @uref{http://www.freedesktop.org/software/colord/, le site web de colord}
14541 pour plus d'informations.
14542 @end deffn
14543
14544 @deffn {Procédure Scheme} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()]
14545 Renvoie une configuration qui permet d'accéder aux données de localisation
14546 de GeoClue. @var{name} est l'ID Desktop de l'application, sans la partie en
14547 @code{.desktop}. Si @var{allowed?} est vraie, l'application aura droit
14548 d'accéder aux informations de localisation par défaut. Le booléen
14549 @var{system?} indique si une application est un composant système ou non.
14550 Enfin @var{users} est la liste des UID des utilisateurs pour lesquels cette
14551 application a le droit d'accéder aux informations de géolocalisation. Une
14552 liste d'utilisateurs vide indique que tous les utilisateurs sont autorisés.
14553 @end deffn
14554
14555 @defvr {Variable Scheme} %standard-geoclue-applications
14556 la liste standard de configuration des application GeoClue connues, qui
14557 permet à l'utilitaire date-and-time de GNOME de demander l'emplacement
14558 actuel pour initialiser le fuseau horaire et aux navigateurs web IceCat et
14559 Epiphany de demander les informations de localisation. IceCat et Epiphany
14560 demandent tous deux à l'utilisateur avant de permettre à une page web de
14561 connaître l'emplacement de l'utilisateur.
14562 @end defvr
14563
14564 @deffn {Procédure Scheme} geoclue-service [#:colord @var{colord}] @
14565 [#:whitelist '()] @
14566 [#:wifi-geolocation-url
14567 "https://location.services.mozilla.com/v1/geolocate?key=geoclue"] @
14568 [#:submit-data? #f] [#:wifi-submission-url
14569 "https://location.services.mozilla.com/v1/submit?key=geoclue"] @
14570 [#:submission-nick "geoclue"] @
14571 [#:applications %standard-geoclue-applications]
14572 Renvoie un service qui lance le service de géolocalisation GeoClue. Ce
14573 service fournit une interface D-Bus pour permettre aux applications de
14574 demande l'accès à la position de l'utilisateur et éventuellement d'ajouter
14575 des informations à des bases de données de géolocalisation en ligne. Voir
14576 @uref{https://wiki.freedesktop.org/www/Software/GeoClue/, le site web de
14577 GeoClue} pour plus d'informations.
14578 @end deffn
14579
14580 @deffn {Procédure Scheme} bluetooth-service [#:bluez @var{bluez}] @
14581 [@w{#:auto-enable? #f}]
14582 Renvoie un service qui lance le démon @command{bluetoothd} qui gère tous les
14583 appareils Bluetooth et fournit un certain nombre d'interfaces D-Bus.
14584 Lorsque @var{auto-enable?} est vraie, le contrôler bluetooth est
14585 automatiquement alimenté au démarrage, ce qui peut être utile lorsque vous
14586 utilisez un clavier ou une souris bluetooth.
14587
14588 Les utilisateurs doivent être dans le groupe @code{lp} pour accéder au
14589 service D-Bus.
14590 @end deffn
14591
14592 @node Services de son
14593 @subsubsection Services de son
14594
14595 @cindex support du son
14596 @cindex ALSA
14597 @cindex PulseAudio, support du son
14598
14599 Le module @code{(gnu services sound)} fournit un service pour configurer le
14600 système ALSA (architecture son linux avancée), qui fait de PulseAudio le
14601 pilote de sortie préféré d'ALSA.
14602
14603 @deffn {Variable Scheme} alsa-service-type
14604 C'est le type pour le système @uref{https://alsa-project.org/, Advanced
14605 Linux Sound Architecture} (ALSA), qui génère le fichier de configuration
14606 @file{/etc/asound.conf}. La valer de ce type est un enregistrement
14607 @command{alsa-configuration} comme dans cet exemple :
14608
14609 @example
14610 (service alsa-service-type)
14611 @end example
14612
14613 Voir plus bas pour des détails sur @code{alsa-configuration}.
14614 @end deffn
14615
14616 @deftp {Type de données} alsa-configuration
14617 Type de données représentant la configuration pour @code{alsa-service}.
14618
14619 @table @asis
14620 @item @code{alsa-plugins} (par défaut : @var{alsa-plugins})
14621 Le paquet @code{alsa-plugins} à utiliser.
14622
14623 @item @code{pulseaudio?} (par défaut : @var{#t})
14624 Indique si les applications ALSA devraient utiliser le serveur de son
14625 @uref{http://www.pulseaudio.org/, PulseAudio} de manière transparente pour
14626 elles.
14627
14628 Utiliser PulseAudio vous permet dans lancer plusieurs applications qui
14629 produisent du son en même temps et de les contrôler individuellement via
14630 @command{pavucontrol} entre autres choses.
14631
14632 @item @code{extra-options} (par défaut : @var{""})
14633 Chaîne à ajouter au fichier @file{/etc/asound.conf}.
14634
14635 @end table
14636 @end deftp
14637
14638 Les utilisateurs individuels qui veulent modifier la configuration système
14639 d'ALSA peuvent le faire avec le fichier @file{~/.asoundrc} :
14640
14641 @example
14642 # Dans guix, il faut spécifier le chemin absolu des greffons.
14643 pcm_type.jack @{
14644 lib "/home/alice/.guix-profile/lib/alsa-lib/libasound_module_pcm_jack.so"
14645 @}
14646
14647 # Faire passer ALSA par Jack :
14648 # <http://jackaudio.org/faq/routing_alsa.html>.
14649 pcm.rawjack @{
14650 type jack
14651 playback_ports @{
14652 0 system:playback_1
14653 1 system:playback_2
14654 @}
14655
14656 capture_ports @{
14657 0 system:capture_1
14658 1 system:capture_2
14659 @}
14660 @}
14661
14662 pcm.!default @{
14663 type plug
14664 slave @{
14665 pcm "rawjack"
14666 @}
14667 @}
14668 @end example
14669
14670 Voir @uref{https://www.alsa-project.org/main/index.php/Asoundrc} pour les
14671 détails.
14672
14673
14674 @node Services de bases de données
14675 @subsubsection Services de bases de données
14676
14677 @cindex database
14678 @cindex SQL
14679 Le module @code{(gnu services databases)} fournit les services suivants.
14680
14681 @deffn {Procédure Scheme} postgresql-service [#:postgresql postgresql] @
14682 [#:config-file] [#:data-directory ``/var/lib/postgresql/data''] @
14683 [#:port 5432] [#:locale ``en_US.utf8'']
14684 Renvoie un service qui lance @var{postgresql}, le service de bases de
14685 données PostgreSQL.
14686
14687 Le démon PostgreSQL charge sa configuration à l'exécution depuis
14688 @var{config-file}, crée une grappe de bases de données avec @var{locale}
14689 comme paramètre de régionalisation par défaut, stockée dans
14690 @var{data-directory}. Il écoute ensuite sur @var{port}.
14691 @end deffn
14692
14693 @deffn {Procédure Scheme} mysql-service [#:config (mysql-configuration)]
14694 Renvoie un service qui lance @command{mysqld}, le service de bases de
14695 données MySQL ou MariaDB.
14696
14697 L'argument @var{config} facultatif spécifie la configuration de
14698 @command{mysqld}, qui devrait être un objet @code{<mysql-configuration>}.
14699 @end deffn
14700
14701 @deftp {Type de données} mysql-configuration
14702 Type de données représentant la configuration de @var{mysql-service}.
14703
14704 @table @asis
14705 @item @code{mysql} (par défaut : @var{mariadb})
14706 Objet paquet du serveur de base de données MySQL, qui peut être soit
14707 @var{mariadb}, soit @var{mysql}.
14708
14709 Pour MySQL, un mot de passe root temporaire sera affiché à l'activation.
14710 Pour MariaDB, le mot de passe root est vide.
14711
14712 @item @code{port} (par défaut : @code{3306})
14713 Port TCP sur lequel le serveur de base de données écoute les connexions
14714 entrantes.
14715 @end table
14716 @end deftp
14717
14718 @defvr {Variable Scheme} memcached-service-type
14719 C'est le type de service pour le service @uref{https://memcached.org/,
14720 Memcached} qui fournit un cache en mémoire distribué. La valeur pour le
14721 type de service est un objet @code{memcached-configuration}.
14722 @end defvr
14723
14724 @example
14725 (service memcached-service-type)
14726 @end example
14727
14728 @deftp {Type de données} memcached-configuration
14729 Type de données représentant la configuration de memcached.
14730
14731 @table @asis
14732 @item @code{memcached} (par défaut : @code{memcached})
14733 Le paquet Memcached à utiliser.
14734
14735 @item @code{interfaces} (par défaut : @code{'("0.0.0.0")})
14736 Les interfaces réseaux sur lesquelles écouter.
14737
14738 @item @code{tcp-port} (par défaut : @code{11211})
14739 Port sur lequel accepter les connexions.
14740
14741 @item @code{udp-port} (par défaut : @code{11211})
14742 Port sur lequel accepter les connexions UDP, une valeur de 0 désactive
14743 l'écoute en UDP.
14744
14745 @item @code{additional-options} (par défaut : @code{'()})
14746 Options de la ligne de commande supplémentaires à passer à @code{memcached}.
14747 @end table
14748 @end deftp
14749
14750 @defvr {Variable Scheme} mongodb-service-type
14751 C'est le type de service pour @uref{https://www.mongodb.com/, MongoDB}. La
14752 valeur de ce service est un objet @code{mongodb-configuration}.
14753 @end defvr
14754
14755 @example
14756 (service mongodb-service-type)
14757 @end example
14758
14759 @deftp {Type de données} mongodb-configuration
14760 Type de données représentant la configuration de mongodb.
14761
14762 @table @asis
14763 @item @code{mongodb} (par défaut : @code{mongodb})
14764 Le paquet MongoDB à utiliser.
14765
14766 @item @code{config-file} (par défaut : @code{%default-mongodb-configuration-file})
14767 Le fichier de configuration pour MongoDB.
14768
14769 @item @code{data-directory} (par défaut : @code{"/var/lib/mongodb"})
14770 Cette valeur est utilisée pour créer le répertoire, pour qu'il existe et
14771 appartienne à l'utilisateur mongodb. Il devrait correspondre au
14772 data-directory que MongoDB est configuré pour utiliser dans son fichier de
14773 configuration.
14774 @end table
14775 @end deftp
14776
14777 @defvr {Variable Scheme} redis-service-type
14778 C'est le type de service pour la base clef-valeur @uref{https://redis.io/,
14779 Redis} dont la valeur est un objet @code{redis-configuration}.
14780 @end defvr
14781
14782 @deftp {Type de données} redis-configuration
14783 Type de données représentant la configuration de redis.
14784
14785 @table @asis
14786 @item @code{redis} (par défaut : @code{redis})
14787 Le paquet Redis à utiliser.
14788
14789 @item @code{bind} (par défaut : @code{"127.0.0.1"})
14790 Interface réseau sur laquelle écouter.
14791
14792 @item @code{port} (par défaut : @code{6379})
14793 Port sur lequel accepter les connexions, une valeur de 0 désactive l'écoute
14794 sur un socket TCP.
14795
14796 @item @code{working-directory} (par défaut : @code{"/var/lib/redis"})
14797 Répertoire dans lequel stocker la base de données et les fichiers liés.
14798 @end table
14799 @end deftp
14800
14801 @node Services de courriels
14802 @subsubsection Services de courriels
14803
14804 @cindex courriel
14805 @cindex email
14806 Le module @code{(gnu services mail)} fournit des définitions de services
14807 Guix pour les services de courriel : des serveurs IMAP, POP3 et LMTP ainsi
14808 que des MTA (Mail Transport Agent). Que d'acronymes ! Ces services sont
14809 détaillés dans les sous-sections ci-dessous.
14810
14811 @subsubheading Service Dovecot
14812
14813 @deffn {Procédure Scheme} dovecot-service [#:config (dovecot-configuration)]
14814 Renvoie un service qui lance le serveur de courriel IMAP/POP3/LMTP Dovecot.
14815 @end deffn
14816
14817 Par défaut, Dovecot n'a pas besoin de beaucoup de configuration ; l'objet de
14818 configuration par défaut créé par @code{(dovecot-configuration)} suffira si
14819 votre courriel est livré dans @code{~/Maildir}. Un certificat auto-signé
14820 sera généré pour les connexions TLS, bien que Dovecot écoutera aussi sur les
14821 ports non chiffrés par défaut. Il y a quelques options cependant, que les
14822 administrateurs peuvent avoir besoin de changer et comme c'est le cas avec
14823 d'autres services, Guix permet aux administrateurs systèmes de spécifier ces
14824 paramètres via une interface Scheme unifiée.
14825
14826 Par exemple, pour spécifier que les courriels se trouvent dans
14827 @code{maildir~/.mail}, on peut instancier Dovecot de cette manière :
14828
14829 @example
14830 (dovecot-service #:config
14831 (dovecot-configuration
14832 (mail-location "maildir:~/.mail")))
14833 @end example
14834
14835 Les paramètres de configuration disponibles sont les suivants. Chaque
14836 définition des paramètres est précédé par son type ; par exemple,
14837 @samp{string-list foo} indique que le paramètre @code{foo} devrait être
14838 spécifié comme une liste de chaînes de caractères. Il y a aussi une manière
14839 de spécifier la configuration comme une chaîne de caractères, si vous avez
14840 un vieux fichier @code{dovecot.conf} que vous voulez porter depuis un autre
14841 système ; voir la fin pour plus de détails.
14842
14843 @c The following documentation was initially generated by
14844 @c (generate-documentation) in (gnu services mail). Manually maintained
14845 @c documentation is better, so we shouldn't hesitate to edit below as
14846 @c needed. However if the change you want to make to this documentation
14847 @c can be done in an automated way, it's probably easier to change
14848 @c (generate-documentation) than to make it below and have to deal with
14849 @c the churn as dovecot updates.
14850
14851 Les champs de @code{dovecot-configuration} disponibles sont :
14852
14853 @deftypevr {paramètre de @code{dovecot-configuration}} package dovecot
14854 Le paquet dovecot
14855 @end deftypevr
14856
14857 @deftypevr {paramètre de @code{dovecot-configuration}} comma-separated-string-list listen
14858 Une liste d'IP ou d'hôtes à écouter pour les connexions. @samp{*} écoute
14859 sur toutes les interfaces IPv4, @samp{::} écoute sur toutes les interfaces
14860 IPv6. Si vous voulez spécifier des ports différents de la valeur par défaut
14861 ou quelque chose de plus complexe, complétez les champs d'adresse et de port
14862 de @samp{inet-listener} des services spécifiques qui vous intéressent.
14863 @end deftypevr
14864
14865 @deftypevr {paramètre de @code{dovecot-configuration}} protocol-configuration-list protocols
14866 Liste des protocoles que vous voulez servir. Les protocoles disponibles
14867 comprennent @samp{imap}, @samp{pop3} et @samp{lmtp}.
14868
14869 Les champs @code{protocol-configuration} disponibles sont :
14870
14871 @deftypevr {paramètre de @code{protocol-configuration}} string name
14872 Le nom du protocole.
14873 @end deftypevr
14874
14875 @deftypevr {paramètre de @code{protocol-configuration}} string auth-socket-path
14876 Le chemin d'un socket UNIX vers le serveur d'authentification maître pour
14877 trouver les utilisateurs. C'est utilisé par imap (pour les utilisateurs
14878 partagés) et lda. Sa valeur par défaut est
14879 @samp{"/var/run/dovecot/auth-userdb"}.
14880 @end deftypevr
14881
14882 @deftypevr {paramètre de @code{protocol-configuration}} space-separated-string-list mail-plugins
14883 Liste de greffons à charger séparés par des espaces.
14884 @end deftypevr
14885
14886 @deftypevr {paramètre de @code{protocol-configuration}} non-negative-integer mail-max-userip-connections
14887 Nombre maximum de connexions IMAP permises pour un utilisateur depuis chaque
14888 adresse IP. Remarque : la comparaison du nom d'utilisateur est sensible à
14889 la casse. Par défaut @samp{10}.
14890 @end deftypevr
14891
14892 @end deftypevr
14893
14894 @deftypevr {paramètre de @code{dovecot-configuration}} service-configuration-list services
14895 Liste des services à activer. Les services disponibles comprennent
14896 @samp{imap}, @samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}
14897 et @samp{lmtp}.
14898
14899 Les champs de @code{service-configuration} disponibles sont :
14900
14901 @deftypevr {paramètre de @code{service-configuration}} string kind
14902 Le type de service. Les valeurs valides comprennent @code{director},
14903 @code{imap-login}, @code{pop3-login}, @code{lmtp}, @code{imap}, @code{pop3},
14904 @code{auth}, @code{auth-worker}, @code{dict}, @code{tcpwrap},
14905 @code{quota-warning} ou n'importe quoi d'autre.
14906 @end deftypevr
14907
14908 @deftypevr {paramètre de @code{service-configuration}} listener-configuration-list listeners
14909 Les auditeurs du service. Un auditeur est soit un
14910 @code{unix-listener-configuration}, soit un
14911 @code{fifo-listener-configuration}, soit un
14912 @code{inet-listener-configuration}. La valeur par défaut est @samp{()}.
14913
14914 Les champs de @code{unix-listener-configuration} disponibles sont :
14915
14916 @deftypevr {paramètre de @code{unix-listener-configuration}} string path
14917 Chemin vers le fichier, relativement au champ @code{base-dir}. C'est aussi
14918 utilisé comme nom de section.
14919 @end deftypevr
14920
14921 @deftypevr {paramètre de @code{unix-listener-configuration}} string mode
14922 Le mode d'accès pour le socket. La valeur par défaut est @samp{"0600"}.
14923 @end deftypevr
14924
14925 @deftypevr {paramètre de @code{unix-listener-configuration}} string user
14926 L'utilisateur à qui appartient le socket. La valeur par défaut est
14927 @samp{""}
14928 @end deftypevr
14929
14930 @deftypevr {paramètre de @code{unix-listener-configuration}} string group
14931 Le groupe auquel appartient le socket. La valeur par défaut est @samp{""}.
14932 @end deftypevr
14933
14934
14935 Les champs de @code{fifo-listener-configuration} disponibles sont :
14936
14937 @deftypevr {paramètre de @code{fifo-listener-configuration}} string path
14938 Chemin vers le fichier, relativement au champ @code{base-dir}. C'est aussi
14939 utilisé comme nom de section.
14940 @end deftypevr
14941
14942 @deftypevr {paramètre de @code{fifo-listener-configuration}} string mode
14943 Le mode d'accès pour le socket. La valeur par défaut est @samp{"0600"}.
14944 @end deftypevr
14945
14946 @deftypevr {paramètre de @code{fifo-listener-configuration}} string user
14947 L'utilisateur à qui appartient le socket. La valeur par défaut est
14948 @samp{""}
14949 @end deftypevr
14950
14951 @deftypevr {paramètre de @code{fifo-listener-configuration}} string group
14952 Le groupe auquel appartient le socket. La valeur par défaut est @samp{""}.
14953 @end deftypevr
14954
14955
14956 Les champs de @code{inet-listener-configuration} disponibles sont :
14957
14958 @deftypevr {paramètre de @code{inet-listener-configuration}} string protocol
14959 Le protocole à écouter.
14960 @end deftypevr
14961
14962 @deftypevr {paramètre de @code{inet-listener-configuration}} string address
14963 L'adresse sur laquelle écouter, ou la chaîne vide pour toutes les adresses.
14964 La valeur par défaut est @samp{""}.
14965 @end deftypevr
14966
14967 @deftypevr {paramètre de @code{inet-listener-configuration}} non-negative-integer port
14968 Le port sur lequel écouter.
14969 @end deftypevr
14970
14971 @deftypevr {paramètre de @code{inet-listener-configuration}} boolean ssl?
14972 S'il faut utiliser SSL pour ce service ; @samp{yes}, @samp{no} ou
14973 @samp{required}. La valeur par défaut est @samp{#t}.
14974 @end deftypevr
14975
14976 @end deftypevr
14977
14978 @deftypevr {paramètre de @code{service-configuration}} non-negative-integer client-limit
14979 Connexions de clients simultanées maximum par processus. Une fois ce nombre
14980 de connections atteint, la connexion suivante fera en sorte que Dovecot
14981 démarre un autre processus. Si la valeur est 0, @code{default-client-limit}
14982 est utilisé à la place.
14983
14984 La valeur par défaut est @samp{0}.
14985
14986 @end deftypevr
14987
14988 @deftypevr {paramètre de @code{service-configuration}} non-negative-integer service-count
14989 Nombre de connexions à gérer avant de démarrer un nouveau processus.
14990 Typiquement les valeurs utiles sont 0 (sans limite) ou 1. 1 est plus sûr,
14991 mais 0 est plus rapide. <doc/wiki/LoginProcess.txt>. La valeur par défaut
14992 est @samp{1}.
14993
14994 @end deftypevr
14995
14996 @deftypevr {paramètre de @code{service-configuration}} non-negative-integer process-limit
14997 Nombre de processus maximum qui peut exister pour ce service. Si la valeur
14998 est 0, @code{default-process-limit} est utilisé à la place.
14999
15000 La valeur par défaut est @samp{0}.
15001
15002 @end deftypevr
15003
15004 @deftypevr {paramètre de @code{service-configuration}} non-negative-integer process-min-avail
15005 Nombre de processus à toujours garder en attente de connexions. La valeur
15006 par défaut est @samp{0}.
15007 @end deftypevr
15008
15009 @deftypevr {paramètre de @code{service-configuration}} non-negative-integer vsz-limit
15010 Si vous mettez @samp{service-count 0}, vous avez sans doute besoin
15011 d'augmenter ce paramètre. La valeur par défaut est @samp{256000000}.
15012 @end deftypevr
15013
15014 @end deftypevr
15015
15016 @deftypevr {paramètre de @code{dovecot-configuration}} dict-configuration dict
15017 Configuration du dictionnaire, créé par le constructeur
15018 @code{dict-configuration}.
15019
15020 Les champs de @code{dict-configuration} disponibles sont :
15021
15022 @deftypevr {paramètre de @code{dict-configuration}} free-form-fields entries
15023 Une liste de paires de clefs-valeurs que ce dictionnaire contient. La
15024 valeur par défaut est @samp{()}.
15025 @end deftypevr
15026
15027 @end deftypevr
15028
15029 @deftypevr {paramètre de @code{dovecot-configuration}} passdb-configuration-list passdbs
15030 Une liste de configurations passdb, chacune créée par le constructeur
15031 @code{passdb-configuration}.
15032
15033 Les champs de @code{passdb-configuration} disponibles sont :
15034
15035 @deftypevr {paramètre de @code{passdb-configuration}} string driver
15036 Le pilote à utiliser par passdb. Les valeur valides comprennent @samp{pam},
15037 @samp{passwd}, @samp{shadow}, @samp{bsdauth} et @samp{static}. La valeur
15038 par défaut est @samp{"pam"}.
15039 @end deftypevr
15040
15041 @deftypevr {paramètre de @code{passdb-configuration}} space-separated-string-list args
15042 Liste d'arguments pour le pilote passdb séparés par des espaces. La valeur
15043 par défaut est @samp{""}.
15044 @end deftypevr
15045
15046 @end deftypevr
15047
15048 @deftypevr {paramètre de @code{dovecot-configuration}} userdb-configuration-list userdbs
15049 Liste des configurations userdb, chacune créée par le constructeur
15050 @code{userdb-configuration}.
15051
15052 Les champs de @code{userdb-configuration} disponibles sont :
15053
15054 @deftypevr {paramètre de @code{userdb-configuration}} string driver
15055 Le pilote que userdb devrait utiliser. Les valeurs valides comprennent
15056 @samp{passwd} et @samp{static}. La valeur par défaut est @samp{"passwd"}.
15057 @end deftypevr
15058
15059 @deftypevr {paramètre de @code{userdb-configuration}} space-separated-string-list args
15060 Liste des arguments du pilote userdb séparés par des espaces. La valeur par
15061 défaut est @samp{""}.
15062 @end deftypevr
15063
15064 @deftypevr {paramètre de @code{userdb-configuration}} free-form-args override-fields
15065 Remplace des champs de passwd. La valeur par défaut est @samp{()}.
15066 @end deftypevr
15067
15068 @end deftypevr
15069
15070 @deftypevr {paramètre de @code{dovecot-configuration}} plugin-configuration plugin-configuration
15071 Configuration du greffon, créé par le constructeur
15072 @code{plugin-configuration}.
15073 @end deftypevr
15074
15075 @deftypevr {paramètre de @code{dovecot-configuration}} list-of-namespace-configuration namespaces
15076 Liste d'espaces de noms. Chaque élément de la liste est créé par le
15077 constructeur @code{namespace-configuration}.
15078
15079 Les champs de @code{namespace-configuration} disponibles sont :
15080
15081 @deftypevr {paramètre de @code{namespace-configuration}} string name
15082 Nom de cet espace de nom.
15083 @end deftypevr
15084
15085 @deftypevr {paramètre de @code{namespace-configuration}} string type
15086 Type d'espace de nom : @samp{private}, @samp{shared} ou @samp{public}. La
15087 valeur par défaut est @samp{"private"}.
15088 @end deftypevr
15089
15090 @deftypevr {paramètre de @code{namespace-configuration}} string separator
15091 Séparateur de hiérarchie à utiliser. Vous devriez utiliser le même
15092 séparateur pour tous les espaces de noms ou certains clients seront confus.
15093 @samp{/} est généralement une bonne valeur. La valeur par défaut dépend
15094 cependant du format de stockage sous-jacent. La valeur par défaut est
15095 @samp{""}.
15096 @end deftypevr
15097
15098 @deftypevr {paramètre de @code{namespace-configuration}} string prefix
15099 Préfixe requis pour accéder à cet espace de nom. Ce paramètres doit être
15100 différent pour tous les espaces de noms. Par exemple @samp{Public/}. La
15101 valeur par défaut est @samp{""}.
15102 @end deftypevr
15103
15104 @deftypevr {paramètre de @code{namespace-configuration}} string location
15105 Emplacement physique de la boîte aux lettres. C'est le même format que
15106 mail_location, qui est aussi la valeur par défaut. La valeur par défaut est
15107 @samp{""}.
15108 @end deftypevr
15109
15110 @deftypevr {paramètre de @code{namespace-configuration}} boolean inbox?
15111 Il ne peut y avoir qu'un INBOX, et ce paramètre définit l'espace de nom qui
15112 le possède. La valeur par défaut est @samp{#f}.
15113 @end deftypevr
15114
15115 @deftypevr {paramètre de @code{namespace-configuration}} boolean hidden?
15116 Si l'espace de nom est caché, il n'est pas publié auprès des clients par
15117 l'extension NAMESPACE. Vous voudrez aussi sans doute indiquer @samp{list?
15118 #f}. C'est surtout utile lors de la conversion depuis un autre serveur avec
15119 des espaces de noms différents que vous voulez rendre obsolètes sans les
15120 casser. Par exemple vous pouvez cacher les espaces de noms avec les
15121 préfixes @samp{~/mail/}, @samp{~%u/mail/} et @samp{mail/}. La valeur par
15122 défaut est @samp{#f}.
15123 @end deftypevr
15124
15125 @deftypevr {paramètre de @code{namespace-configuration}} boolean list?
15126 Montre les boîtes aux lettres sons cet espace de nom avec la commande LIST.
15127 Cela rend l'espace de nom visible pour les clients qui ne supportent pas
15128 l'extension NAMESPACE. La valeur spéciale @code{children} liste les boîtes
15129 aux lettres filles mais cache le préfixe de l'espace de nom. La valeur par
15130 défaut est @samp{#t}.
15131 @end deftypevr
15132
15133 @deftypevr {paramètre de @code{namespace-configuration}} boolean subscriptions?
15134 Les espaces de noms gèrent leur propre souscription. Si la valeur est
15135 @code{#f}, l'espace de nom parent s'en charge. Le préfixe vide devrait
15136 toujours avoir cette valeur à @code{#t}. La valeur par défaut est
15137 @samp{#t}.
15138 @end deftypevr
15139
15140 @deftypevr {paramètre de @code{namespace-configuration}} mailbox-configuration-list mailboxes
15141 Liste des boîtes aux lettres prédéfinies dans cet espace de nom. La valeur
15142 par défaut est @samp{()}.
15143
15144 Les champs de @code{mailbox-configuration} disponibles sont :
15145
15146 @deftypevr {paramètre de @code{mailbox-configuration}} string name
15147 Nom de cette boîte aux lettres.
15148 @end deftypevr
15149
15150 @deftypevr {paramètre de @code{mailbox-configuration}} string auto
15151 @samp{create} créera automatiquement cette boîte aux lettres.
15152 @samp{subscribe} créera et souscrira à la boîte aux lettres. La valeur par
15153 défaut est @samp{"no"}.
15154 @end deftypevr
15155
15156 @deftypevr {paramètre de @code{mailbox-configuration}} space-separated-string-list special-use
15157 Liste des attributs @code{SPECIAL-USE} IMAP spécifiés par la RFC 6154. Les
15158 valeurs valides sont @code{\All}, @code{\Archive}, @code{\Drafts},
15159 @code{\Flagged}, @code{\Junk}, @code{\Sent} et @code{\Trash}. La valeur par
15160 défaut est @samp{()}.
15161 @end deftypevr
15162
15163 @end deftypevr
15164
15165 @end deftypevr
15166
15167 @deftypevr {paramètre de @code{dovecot-configuration}} file-name base-dir
15168 Répertoire de base où stocker les données d'exécution. La valeur par défaut
15169 est @samp{"/var/run/dovecot/"}.
15170 @end deftypevr
15171
15172 @deftypevr {paramètre de @code{dovecot-configuration}} string login-greeting
15173 Message d'accueil pour les clients. La valeur par défaut est @samp{"Dovecot
15174 ready."}.
15175 @end deftypevr
15176
15177 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-trusted-networks
15178 Liste des groupes d'adresses de confiance. Les connexions depuis ces IP
15179 sont autorisées à modifier leurs adresses IP et leurs ports (pour la
15180 connexion et la vérification d'authentification).
15181 @samp{disable-plaintext-auth} est aussi ignoré pour ces réseaux.
15182 Typiquement vous voudrez spécifier votre mandataire IMAP ici. La valeur par
15183 défaut est @samp{()}.
15184 @end deftypevr
15185
15186 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-access-sockets
15187 List of login access check sockets (e.g.@: tcpwrap). Defaults to @samp{()}.
15188 @end deftypevr
15189
15190 @deftypevr {paramètre de @code{dovecot-configuration}} boolean verbose-proctitle?
15191 Show more verbose process titles (in ps). Currently shows user name and IP
15192 address. Useful for seeing who is actually using the IMAP processes (e.g.@:
15193 shared mailboxes or if the same uid is used for multiple accounts).
15194 Defaults to @samp{#f}.
15195 @end deftypevr
15196
15197 @deftypevr {paramètre de @code{dovecot-configuration}} boolean shutdown-clients?
15198 Should all processes be killed when Dovecot master process shuts down.
15199 Setting this to @code{#f} means that Dovecot can be upgraded without forcing
15200 existing client connections to close (although that could also be a problem
15201 if the upgrade is e.g.@: due to a security fix). Defaults to @samp{#t}.
15202 @end deftypevr
15203
15204 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer doveadm-worker-count
15205 Si la valeur n'est pas zéro, lance les commandes de courriel via ce nombre
15206 de connexions au serveur doveadm au lieu de les lancer dans le même
15207 processus. La valeur par défaut est @samp{0}.
15208 @end deftypevr
15209
15210 @deftypevr {paramètre de @code{dovecot-configuration}} string doveadm-socket-path
15211 Socket UNIX ou hôte:port utilisé pour se connecter au serveur doveadm. La
15212 valeur par défaut est @samp{"doveadm-server"}.
15213 @end deftypevr
15214
15215 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list import-environment
15216 Liste des variables d'environnement qui sont préservées au démarrage de
15217 Dovecot et passées à tous ses processus fils. Vous pouvez aussi donner des
15218 paires clef=valeur pour toujours spécifier ce paramètre.
15219 @end deftypevr
15220
15221 @deftypevr {paramètre de @code{dovecot-configuration}} boolean disable-plaintext-auth?
15222 Disable LOGIN command and all other plaintext authentications unless SSL/TLS
15223 is used (LOGINDISABLED capability). Note that if the remote IP matches the
15224 local IP (i.e.@: you're connecting from the same computer), the connection
15225 is considered secure and plaintext authentication is allowed. See also
15226 ssl=required setting. Defaults to @samp{#t}.
15227 @end deftypevr
15228
15229 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer auth-cache-size
15230 Authentication cache size (e.g.@: @samp{#e10e6}). 0 means it's disabled.
15231 Note that bsdauth, PAM and vpopmail require @samp{cache-key} to be set for
15232 caching to be used. Defaults to @samp{0}.
15233 @end deftypevr
15234
15235 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-cache-ttl
15236 Durée de vie des données en cache. Après l'expiration du TTL
15237 l'enregistrement en cache n'est plus utilisé *sauf* si la requête à la base
15238 de données principale revoie une erreur interne. Nous essayons aussi de
15239 gérer les changements de mot de passe automatiquement : si
15240 l'authentification précédente de l'utilisateur était réussie mais pas
15241 celle-ci, le cache n'est pas utilisé. Pour l'instant cela fonctionne avec
15242 l'authentification en texte clair uniquement. La valeur par défaut est
15243 @samp{"1 hour"}.
15244 @end deftypevr
15245
15246 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-cache-negative-ttl
15247 TTL pour les résultats négatifs (l'utilisateur n'est pas trouvé ou le mot de
15248 passe ne correspond pas). 0 désactive la mise en cache complètement. La
15249 valeur par défaut est @samp{"1 hour"}.
15250 @end deftypevr
15251
15252 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list auth-realms
15253 Liste des domaines pour les mécanismes d'authentification SASL qui en ont
15254 besoin. Vous pouvez laisser ce paramètre vide si vous ne voulez pas
15255 utiliser plusieurs domaines. Beaucoup de clients utilisent le premier
15256 domaine listé ici, donc gardez celui par défaut en premier. La valeur par
15257 défaut est @samp{()}
15258 @end deftypevr
15259
15260 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-default-realm
15261 Domaine par défaut à utiliser si aucun n'est spécifié. C'est utilisé pour
15262 les domaines SASL et pour ajouter @@domaine au nom d'utilisateur dans les
15263 authentification en texte clair. La valeur par défaut est @samp{""}.
15264 @end deftypevr
15265
15266 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-chars
15267 Liste des caractères autorisés dans les noms d'utilisateur. Si le nom
15268 d'utilisateur donné par l'utilisateur contient un caractère qui n'est pas
15269 listé ici, la connexion échoue automatiquement. C'est juste une
15270 vérification supplémentaire pour s'assure que l'utilisateur ne puisse pas
15271 exploiter des vulnérabilités potentielles d'échappement de guillemets avec
15272 les bases de données SQL/LDAP. Si vous voulez autoriser tous les
15273 caractères, indiquez la liste vide.
15274 @end deftypevr
15275
15276 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-translation
15277 Traduction de caractères dans les noms d'utilisateur avant qu'ils ne soient
15278 cherchés en base. La valeur contient une série de caractère de -> à. Par
15279 exemple @samp{#@@/@@} signifie que @samp{#} et @samp{/} sont traduits en
15280 @samp{@@}. La valeur par défaut est @samp{""}.
15281 @end deftypevr
15282
15283 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-format
15284 Username formatting before it's looked up from databases. You can use the
15285 standard variables here, e.g.@: %Lu would lowercase the username, %n would
15286 drop away the domain if it was given, or @samp{%n-AT-%d} would change the
15287 @samp{@@} into @samp{-AT-}. This translation is done after
15288 @samp{auth-username-translation} changes. Defaults to @samp{"%Lu"}.
15289 @end deftypevr
15290
15291 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-master-user-separator
15292 If you want to allow master users to log in by specifying the master
15293 username within the normal username string (i.e.@: not using SASL
15294 mechanism's support for it), you can specify the separator character here.
15295 The format is then <username><separator><master username>. UW-IMAP uses
15296 @samp{*} as the separator, so that could be a good choice. Defaults to
15297 @samp{""}.
15298 @end deftypevr
15299
15300 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-anonymous-username
15301 Nom d'utilisateur à utiliser pour les utilisateurs qui se connectent avec le
15302 mécanisme SASL ANONYMOUS. La valeur par défaut est @samp{"anonymous"}.
15303 @end deftypevr
15304
15305 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer auth-worker-max-count
15306 Maximum number of dovecot-auth worker processes. They're used to execute
15307 blocking passdb and userdb queries (e.g.@: MySQL and PAM). They're
15308 automatically created and destroyed as needed. Defaults to @samp{30}.
15309 @end deftypevr
15310
15311 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-gssapi-hostname
15312 Nom d'hôte à utiliser dans les noms GSSAPI principaux. La valeur par défaut
15313 est d'utiliser le nom renvoyé par gethostname(). Utilisez @samp{$ALL} (avec
15314 des guillemets) pour permettre toutes les entrées keytab. La valeur par
15315 défaut est @samp{""}.
15316 @end deftypevr
15317
15318 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-krb5-keytab
15319 Keytab Kerberos à utiliser pour le mécanisme GSSAPI. Utilisera la valeur
15320 par défaut du système (typiquement @file{/etc/krb5.keytab}) s'il n'est pas
15321 spécifié. Vous pourriez avoir besoin de faire en sorte que le service
15322 d'authentification tourne en root pour pouvoir lire ce fichier. La valeur
15323 par défaut est @samp{""}.
15324 @end deftypevr
15325
15326 @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-use-winbind?
15327 Effectue l'authentification NTLM et GSS-SPNEGO avec le démon winbind de
15328 Samba et l'utilitaire @samp{ntlm-auth}.
15329 <doc/wiki/Authentication/Mechanisms/Winbind.txt>. La valeur par défaut est
15330 @samp{#f}.
15331 @end deftypevr
15332
15333 @deftypevr {paramètre de @code{dovecot-configuration}} file-name auth-winbind-helper-path
15334 Chemin du binaire @samp{ntlm-auth} de samba. La valeur par défaut est
15335 @samp{"/usr/bin/ntlm_auth"}.
15336 @end deftypevr
15337
15338 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-failure-delay
15339 Durée d'attente avant de répondre à des authentifications échouées. La
15340 valeur par défaut est @samp{"2 secs"}.
15341 @end deftypevr
15342
15343 @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-ssl-require-client-cert?
15344 Requiert un certification client SSL valide ou l'authentification échoue.
15345 La valeur par défaut est @samp{#f}.
15346 @end deftypevr
15347
15348 @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-ssl-username-from-cert?
15349 Prend le nom d'utilisateur du certificat SSL client, avec
15350 @code{X509_NAME_get_text_by_NID()} qui renvoie le CommonName du DN du
15351 sujet. La valeur par défaut est @samp{#f}.
15352 @end deftypevr
15353
15354 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list auth-mechanisms
15355 Liste des mécanismes d'authentification souhaités. Les mécanismes supportés
15356 sont : @samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
15357 @samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
15358 @samp{otp}, @samp{skey} et @samp{gss-spnego}. Remarquez : Voir aussi le
15359 paramètre @samp{disable-plaintext-auth}.
15360 @end deftypevr
15361
15362 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list director-servers
15363 Liste des IP ou des noms d'hôtes des serveurs directeurs, dont soi-même.
15364 Les ports peuvent être spécifiés avec ip:port. Le port par défaut est le
15365 même que le @samp{inet-listener} du service directeur. La valeur par défaut
15366 est @samp{()}.
15367 @end deftypevr
15368
15369 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list director-mail-servers
15370 Liste des IP ou des noms d'hôtes de tous les serveurs de courriel de la
15371 grappe. Les intervalles sont aussi permis, comme 10.0.0.10-10.0.0.30. La
15372 valeur par défaut est @samp{()}.
15373 @end deftypevr
15374
15375 @deftypevr {paramètre de @code{dovecot-configuration}} string director-user-expire
15376 Combien de temps avant de rediriger les utilisateurs à un serveur spécifique
15377 après qu'il n'y a plus de connexion. La valeur par défaut est @samp{"15
15378 min"}.
15379 @end deftypevr
15380
15381 @deftypevr {paramètre de @code{dovecot-configuration}} string director-username-hash
15382 La manière de traduire le nom d'utilisateur avant de le hasher. Les valeurs
15383 utiles comprennent %Ln si l'utilisateur peut se connecter avec ou sans
15384 @@domain, %Ld si les boîtes aux lettres sont partagées dans le domaine. La
15385 valeur par défaut est @samp{"%Lu"}.
15386 @end deftypevr
15387
15388 @deftypevr {paramètre de @code{dovecot-configuration}} string log-path
15389 Fichier de journal à utiliser pour les messages d'erreur. @samp{syslog}
15390 journalise vers syslog, @samp{/dev/stderr} vers la sortie d'erreur. La
15391 valeur par défaut est @samp{"syslog"}.
15392 @end deftypevr
15393
15394 @deftypevr {paramètre de @code{dovecot-configuration}} string info-log-path
15395 Fichier de journal à utiliser pour les messages d'information. La valeur
15396 par défaut est @samp{log-path}. La valeur par défaut est @samp{""}.
15397 @end deftypevr
15398
15399 @deftypevr {paramètre de @code{dovecot-configuration}} string debug-log-path
15400 Fichier de journal à utiliser pour les messages de débogage. La valeur par
15401 défaut est @samp{info-log-path}. La valeur par défaut est @samp{""}.
15402 @end deftypevr
15403
15404 @deftypevr {paramètre de @code{dovecot-configuration}} string syslog-facility
15405 Dispositif syslog à utiliser si vous journalisez avec syslog. Normalement
15406 si vous ne voulez pas utiliser @samp{mail}, vous voudrez utiliser
15407 local0..local7. D'autres dispositifs standard sont supportés. La valeur
15408 par défaut est @samp{"mail"}.
15409 @end deftypevr
15410
15411 @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-verbose?
15412 Indique s'il faut enregistrer les tentatives de connexion échouées et la
15413 raison de leur échec. La valeur par défaut est @samp{#f}.
15414 @end deftypevr
15415
15416 @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-verbose-passwords?
15417 In case of password mismatches, log the attempted password. Valid values
15418 are no, plain and sha1. sha1 can be useful for detecting brute force
15419 password attempts vs. user simply trying the same password over and over
15420 again. You can also truncate the value to n chars by appending ":n" (e.g.@:
15421 sha1:6). Defaults to @samp{#f}.
15422 @end deftypevr
15423
15424 @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-debug?
15425 Journaux encore plus verbeux pour le débogage. Cela montre par exemple les
15426 requêtes SQL effectuées. La valeur par défaut est @samp{#f}.
15427 @end deftypevr
15428
15429 @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-debug-passwords?
15430 Dans le cas où le mot de passe était incorrect, indique s'il faut
15431 enregistrer les mots de passe et les schémas utilisés pour que le problème
15432 puisse être débogué. Activer cette option active aussi @samp{auth-debug}.
15433 La valeur par défaut est @samp{#f}.
15434 @end deftypevr
15435
15436 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-debug?
15437 Indique s'il faut activer le débogage du traitement des courriels. Cela
15438 peut vous aider à comprendre pourquoi Dovecot ne trouve pas vos courriels.
15439 La valeur par défaut est @samp{#f}.
15440 @end deftypevr
15441
15442 @deftypevr {paramètre de @code{dovecot-configuration}} boolean verbose-ssl?
15443 Indique s'il faut montrer les erreurs au niveau SSL. La valeur par défaut
15444 est @samp{#f}.
15445 @end deftypevr
15446
15447 @deftypevr {paramètre de @code{dovecot-configuration}} string log-timestamp
15448 Préfixe à utiliser devant chaque ligne écrite dans le fichier journal. Les
15449 codes % sont au format strftime(3). La valeur par défaut est @samp{"\"%b %d
15450 %H:%M:%S \""}.
15451 @end deftypevr
15452
15453 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-log-format-elements
15454 Liste des éléments qu'il faut enregistrer. Les éléments qui ont une
15455 variable non vide sont agrégés pour former une chaîne de mots séparés par
15456 des virgules.
15457 @end deftypevr
15458
15459 @deftypevr {paramètre de @code{dovecot-configuration}} string login-log-format
15460 Format du journal de connexion. %s contient la chaîne
15461 @samp{login-log-format-elements}, %$ contient la donnée à enregistrer. La
15462 valeur par défaut est @samp{"%$: %s"}.
15463 @end deftypevr
15464
15465 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-log-prefix
15466 Préfixe à utiliser devant chaque ligne du fichier de journal pour les
15467 processus traitant les courriels. Voir doc/wiki/Variables.txt pour trouver
15468 la liste des variables que vous pouvez utiliser. La valeur par défaut est
15469 @samp{"\"%s(%u)<%@{pid@}><%@{session@}>: \""}.
15470 @end deftypevr
15471
15472 @deftypevr {paramètre de @code{dovecot-configuration}} string deliver-log-format
15473 Format à utiliser pour enregistrer les livraisons de courriels. Vous pouvez
15474 utiliser ces variables :
15475 @table @code
15476 @item %$
15477 Delivery status message (e.g.@: @samp{saved to INBOX})
15478 @item %m
15479 Message-ID
15480 @item %s
15481 Objet
15482 @item %f
15483 Adresse « de »
15484 @item %p
15485 Taille physique
15486 @item %w
15487 Taille virtuelle.
15488 @end table
15489 La valeur par défaut est @samp{"msgid=%m: %$"}.
15490 @end deftypevr
15491
15492 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-location
15493 Emplacement des boîtes à lettre des utilisateurs. La valeur par défaut est
15494 vide, ce qui signifie que Dovecot essaiera de trouver les boîte aux lettres
15495 automatiquement. Cela ne fonctionnera pas si l'utilisateur n'a aucun
15496 courriel, donc il vaut mieux indiquer explicitement le bon emplacement à
15497 Dovecot.
15498
15499 If you're using mbox, giving a path to the INBOX file (e.g.@: /var/mail/%u)
15500 isn't enough. You'll also need to tell Dovecot where the other mailboxes
15501 are kept. This is called the "root mail directory", and it must be the
15502 first path given in the @samp{mail-location} setting.
15503
15504 Il y a quelques variables spéciales que vous pouvez utiliser :
15505
15506 @table @samp
15507 @item %u
15508 nom d'utilisateur
15509 @item %n
15510 la partie « utilisateur » dans « utilisateur@@domaine », comme %u s'il n'y a
15511 pas de domaine.
15512 @item %d
15513 la partie « domaine » dans « utilisateur@@domaine », vide s'il n'y a pas de
15514 domaine
15515 @item %h
15516 répertoire personnel
15517 @end table
15518
15519 Voir doc/wiki/Variables.txt pour la liste complète. Quelques exemple :
15520 @table @samp
15521 @item maildir:~/Maildir
15522 @item mbox:~/mail:INBOX=/var/mail/%u
15523 @item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
15524 @end table
15525 La valeur par défaut est @samp{""}.
15526 @end deftypevr
15527
15528 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-uid
15529 Utilisateur et groupe système utilisé pour accéder aux courriels. Si vous
15530 utilisez multiple, userdb peut remplacer ces valeurs en renvoyant les champs
15531 uid et gid. Vous pouvez utiliser soit des nombres, soit des noms.
15532 <doc/wiki/UserIds.txt>. La valeur par défaut est @samp{""}.
15533 @end deftypevr
15534
15535 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-gid
15536
15537 La valeur par défaut est @samp{""}.
15538 @end deftypevr
15539
15540 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-privileged-group
15541 Groupe à activer temporairement pour les opérations privilégiées.
15542 Actuellement cela est utilisé uniquement avec INBOX lors de sa création
15543 initiale et quand le verrouillage échoie. Typiquement, vous pouvez utiliser
15544 « mail » pour donner accès à /var/mail. La valeur par défaut est @samp{""}.
15545 @end deftypevr
15546
15547 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-access-groups
15548 Grant access to these supplementary groups for mail processes. Typically
15549 these are used to set up access to shared mailboxes. Note that it may be
15550 dangerous to set these if users can create symlinks (e.g.@: if "mail" group
15551 is set here, ln -s /var/mail ~/mail/var could allow a user to delete others'
15552 mailboxes, or ln -s /secret/shared/box ~/mail/mybox would allow reading
15553 it). Defaults to @samp{""}.
15554 @end deftypevr
15555
15556 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-full-filesystem-access?
15557 Allow full file system access to clients. There's no access checks other
15558 than what the operating system does for the active UID/GID. It works with
15559 both maildir and mboxes, allowing you to prefix mailboxes names with e.g.@:
15560 /path/ or ~user/. Defaults to @samp{#f}.
15561 @end deftypevr
15562
15563 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mmap-disable?
15564 Ne pas du tout utiliser mmap(). Cela est requis si vous stockez les index
15565 dans des systèmes de fichiers partagés (NFS ou clusterfs). La valeur par
15566 défaut est @samp{#f}.
15567 @end deftypevr
15568
15569 @deftypevr {paramètre de @code{dovecot-configuration}} boolean dotlock-use-excl?
15570 S'appuyer sur @samp{O_EXCL} lors de la création de fichiers de
15571 verrouillage. NFS supporte @samp{O_EXCL} depuis la version 3, donc cette
15572 option est sûre de nos jours. La valeur par défaut est @samp{#t}.
15573 @end deftypevr
15574
15575 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-fsync
15576 Quand utiliser les appels à fsync() ou fdatasync() :
15577 @table @code
15578 @item optimized
15579 Lorsque cela est nécessaire pour éviter de perdre des données importantes
15580 @item always
15581 Useful with e.g.@: NFS when write()s are delayed
15582 @item never
15583 Ne l'utilisez pas (ça a de meilleures performances, mais les crashs font
15584 perdre toutes les données).
15585 @end table
15586 La valeur par défaut est @samp{"optimized"}.
15587 @end deftypevr
15588
15589 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-nfs-storage?
15590 Le stockage des courriels se fait sur NFS. Utilisez cette option pour que
15591 Dovecot vide les caches NFS lorsque c'est nécessaire. Si vous utilisez
15592 seulement un simple serveur de courriel, ce n'est pas nécessaire. La valeur
15593 par défaut est @samp{#f}.
15594 @end deftypevr
15595
15596 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-nfs-index?
15597 Les fichiers d'index de courriels sont sur un système de fichiers NFS. Pour
15598 utiliser cette option, vous aurez besoin de @samp{mmap-disable? #t} et
15599 @samp{fsync-disable? #f}. La valeur par défaut est @samp{#f}.
15600 @end deftypevr
15601
15602 @deftypevr {paramètre de @code{dovecot-configuration}} string lock-method
15603 Méthode de verrouillage des fichiers d'index. Les alternatives sont fcntl,
15604 flock et dotlock. Le verrouillage-point (dotlocking) utilise des astuces
15605 qui peuvent créer plus d'utilisation du disque que les autres méthodes de
15606 verrouillage. Pour les utilisateurs de NFS, flock ne marche pas, et
15607 rappelez-vous de modifier @samp{mmap-disable}. La valeur par défaut est
15608 @samp{"fcntl"}.
15609 @end deftypevr
15610
15611 @deftypevr {paramètre de @code{dovecot-configuration}} file-name mail-temp-dir
15612 Le répertoire dans lequel LDA/LMTP stockent temporairement les courriels de
15613 plus de 128 Ko. La valeur par défaut est @samp{"/tmp"}.
15614 @end deftypevr
15615
15616 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer first-valid-uid
15617 L'intervalle d'UID valides pour les utilisateurs. Cette option est surtout
15618 utile pour s'assurer que les utilisateurs ne peuvent pas s'authentifier en
15619 tant que démon ou qu'un autre utilisateur système. Remarquez que la
15620 connexion en root est interdite en dur dans le binaire de dovecot et qu'on
15621 ne peut pas l'autoriser même si @samp{first-valid-uid} vaut 0. La valeur
15622 par défaut est @samp{500}.
15623 @end deftypevr
15624
15625 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer last-valid-uid
15626
15627 La valeur par défaut est @samp{0}.
15628 @end deftypevr
15629
15630 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer first-valid-gid
15631 Li'ntervalle de GID valides pour les utilisateurs. Les utilisateurs qui ont
15632 un GID non-valide comme numéro de groupe primaire ne peuvent pas se
15633 connecter. Si l'utilisateur appartient à un groupe avec un GID non valide,
15634 ce groupe n'est pas utilisable. La valeur par défaut est @samp{1}.
15635 @end deftypevr
15636
15637 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer last-valid-gid
15638
15639 La valeur par défaut est @samp{0}.
15640 @end deftypevr
15641
15642 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-max-keyword-length
15643 Longueur maximale autorisée pour les mots-clefs. Elle n'est utilisée que
15644 lors de la création de nouveaux mots-clefs. La valeur par défaut est
15645 @samp{50}.
15646 @end deftypevr
15647
15648 @deftypevr {paramètre de @code{dovecot-configuration}} colon-separated-file-name-list valid-chroot-dirs
15649 List of directories under which chrooting is allowed for mail processes
15650 (i.e.@: /var/mail will allow chrooting to /var/mail/foo/bar too). This
15651 setting doesn't affect @samp{login-chroot} @samp{mail-chroot} or auth chroot
15652 settings. If this setting is empty, "/./" in home dirs are ignored.
15653 WARNING: Never add directories here which local users can modify, that may
15654 lead to root exploit. Usually this should be done only if you don't allow
15655 shell access for users. <doc/wiki/Chrooting.txt>. Defaults to @samp{()}.
15656 @end deftypevr
15657
15658 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-chroot
15659 Default chroot directory for mail processes. This can be overridden for
15660 specific users in user database by giving /./ in user's home directory
15661 (e.g.@: /home/./user chroots into /home). Note that usually there is no
15662 real need to do chrooting, Dovecot doesn't allow users to access files
15663 outside their mail directory anyway. If your home directories are prefixed
15664 with the chroot directory, append "/."@: to @samp{mail-chroot}.
15665 <doc/wiki/Chrooting.txt>. Defaults to @samp{""}.
15666 @end deftypevr
15667
15668 @deftypevr {paramètre de @code{dovecot-configuration}} file-name auth-socket-path
15669 Chemin de socket UNIX vers le serveur d'authentification maître pour trouver
15670 les utilisateurs. C'est utilisé par imap (pour les utilisateurs partagés)
15671 et lda. La valeur par défaut est @samp{"/var/run/dovecot/auth-userdb"}.
15672 @end deftypevr
15673
15674 @deftypevr {paramètre de @code{dovecot-configuration}} file-name mail-plugin-dir
15675 Répertoire où trouver les greffons. La valeur par défaut est
15676 @samp{"/usr/lib/dovecot"}.
15677 @end deftypevr
15678
15679 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mail-plugins
15680 List of plugins to load for all services. Plugins specific to IMAP, LDA,
15681 etc.@: are added to this list in their own .conf files. Defaults to
15682 @samp{()}.
15683 @end deftypevr
15684
15685 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-cache-min-mail-count
15686 Le nombre minimal de courriels dans une boîte aux lettres avant de mettre à
15687 jour le fichier de cache. Cela permet d'optimiser le comportement de
15688 Dovecot pour qu'il fasse moins d'écriture disque contre plus de lecture
15689 disque. La valeur par défaut est @samp{0}.
15690 @end deftypevr
15691
15692 @deftypevr {paramètre de @code{dovecot-configuration}} string mailbox-idle-check-interval
15693 Lorsque la commande IDLE est lancée, la boîte aux lettres est vérifiée de
15694 temps en temps pour voir s'il y a de nouveaux messages ou d'autres
15695 changements. Ce paramètre défini le temps d'attente minimum entre deux
15696 vérifications. Dovecot peut aussi utilise dnotify, inotify et kqueue pour
15697 trouver immédiatement les changements. La valeur par défaut est @samp{"30
15698 secs"}.
15699 @end deftypevr
15700
15701 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-save-crlf?
15702 Sauvegarder les courriels avec CR+LF plutôt que seulement LF. Cela permet
15703 de consommer moins de CPU en envoyant ces courriels, surtout avec l'appel
15704 système sendfile() de Linux et FreeBSD. Mais cela crée un peu plus
15705 d'utilisation du disque, ce qui peut aussi le ralentir. Remarquez aussi que
15706 si d'autres logiciels lisent les mbox/maildirs, ils peuvent se tromper dans
15707 leur traitement de ces CR supplémentaires et causer des problèmes. La
15708 valeur par défaut est @samp{#f}.
15709 @end deftypevr
15710
15711 @deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-stat-dirs?
15712 Par défaut la commande LIST renvoie toutes les entrées du maildir qui
15713 commencent par un point. Activer cette option permet à Dovecot de renvoyer
15714 uniquement les entrées qui sont des répertoires. Cela se fait avec stat()
15715 sur chaque entrée, ce qui cause plus d'utilisation du disque. For systems
15716 setting struct @samp{dirent->d_type} this check is free and it's done always
15717 regardless of this setting). La valeur par défaut est @samp{#f}.
15718 @end deftypevr
15719
15720 @deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-copy-with-hardlinks?
15721 Lors de la copie d'un message, le faire avec des liens en dur si possible.
15722 Cela améliore un peu la performance et n'a que peu de chance d'avoir des
15723 effets secondaires.
15724 @end deftypevr
15725
15726 @deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-very-dirty-syncs?
15727 Suppose que Dovecot est le seul MUA qui accède à Maildir : scanne le
15728 répertoire cur/ seulement lorsque son mtime change de manière inattendue ou
15729 lorsqu'il ne peut pas trouver le courriel autrement. La valeur par défaut
15730 est @samp{#f}.
15731 @end deftypevr
15732
15733 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mbox-read-locks
15734 La méthode de verrouillage à utiliser pour verrouiller le boîtes aux lettres
15735 mbox. Il y en a quatre :
15736
15737 @table @code
15738 @item dotlock
15739 Crée un fichier <mailbox>.lock. C'est la solution la plus ancienne et la
15740 plus sûr pour NFS. Si vous voulez utiliser /var/mail/, les utilisateurs
15741 auront besoin de l'accès en écriture à ce répertoire.
15742 @item dotlock-try
15743 Comme pour dotlock, mais si elle échoue à cause d'un problème de permission
15744 ou parce qu'il n'y a pas assez d'espace disque, l'ignore.
15745 @item fcntl
15746 Utilisez cette méthode si possible. Elle fonctionne aussi avec NFS si vous
15747 utilisez lockd.
15748 @item flock
15749 Peut ne pas exister sur tous les systèmes. Ne fonctionne pas avec NFS.
15750 @item lockf
15751 Peut ne pas exister sur tous les systèmes. Ne fonctionne pas avec NFS.
15752 @end table
15753
15754 Vous pouvez utiliser plusieurs méthodes de verrouillage ; dans ce cas
15755 l'ordre dans lequel elles sont déclarées est important pour éviter des
15756 interblocages si d'autres MTA/MUA utilisent aussi plusieurs méthodes.
15757 Certains systèmes d'exploitation ne permettent pas d'utiliser certaines
15758 méthodes en même temps.
15759 @end deftypevr
15760
15761 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mbox-write-locks
15762
15763 @end deftypevr
15764
15765 @deftypevr {paramètre de @code{dovecot-configuration}} string mbox-lock-timeout
15766 Temps d'attente maximal pour un verrou (tous les verrous) avant
15767 d'abandonner. La valeur par défaut est @samp{"5 mins"}.
15768 @end deftypevr
15769
15770 @deftypevr {paramètre de @code{dovecot-configuration}} string mbox-dotlock-change-timeout
15771 Si le fichier dotlock existe mais que la boîte aux lettres n'est pas
15772 modifiée, remplacer le fichier de verrouillage après ce temps d'attente. La
15773 valeur par défaut est @samp{"2 mins"}.
15774 @end deftypevr
15775
15776 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-dirty-syncs?
15777 Lorsqu'un mbox change ne manière inattendue, il faut le lire en entier pour
15778 savoir ce qui a changé. Si le mbox est assez grand cela peut prendre
15779 beaucoup de temps. Comme le changement est habituellement un simple
15780 courriel supplémentaire, il serait plus rapide de lire le nouveaux
15781 courriels. Si ce paramètre est activé, Dovecot fait cela mais revient
15782 toujours à relire le fichier mbox complet si le fichier n'est pas comme
15783 attendu. Le seul réel inconvénient à ce paramètre est que certains MUA
15784 changent les drapeaux des messages, et dans ce cas Dovecot ne s'en rend pas
15785 immédiatement compte. Remarquez qu'une synchronisation complète est
15786 effectuée avec les commandes SELECT, EXAMINE, EXPUNGE et CHECK. La valeur
15787 par défaut est @samp{#t}.
15788 @end deftypevr
15789
15790 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-very-dirty-syncs?
15791 Comme @samp{mbox-dirty-syncs}, mais ne synchronise pas complètement même
15792 avec les commandes SELECT, EXAMINE, EXPUNGE ou CHECK. Si l'option n'est pas
15793 actifée, @samp{mbox-dirty-syncs} est ignorée. La valeur par défaut est
15794 @samp{#f}.
15795 @end deftypevr
15796
15797 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-lazy-writes?
15798 Attendre avant d'écrire les en-têtes mbox jusqu'à la prochaine
15799 synchronisation des écritures (les commandes EXPUNGE et CHECK et quand on
15800 ferme la boîte aux lettres). C'est surtout utile pour POP3 où les clients
15801 suppriment souvent tous les courriels. L'inconvénient c'est que vos
15802 changements ne sont pas immédiatement visibles pour les autres MUA. La
15803 valeur par défaut est @samp{#t}.
15804 @end deftypevr
15805
15806 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mbox-min-index-size
15807 If mbox size is smaller than this (e.g.@: 100k), don't write index files.
15808 If an index file already exists it's still read, just not updated. Defaults
15809 to @samp{0}.
15810 @end deftypevr
15811
15812 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mdbox-rotate-size
15813 Taille du fichier dbox maximale avant rotation. La valeur par défaut est
15814 @samp{10000000}.
15815 @end deftypevr
15816
15817 @deftypevr {paramètre de @code{dovecot-configuration}} string mdbox-rotate-interval
15818 Âge maximum du fichier dbox avant rotation. Typiquement en jours. Les
15819 jours commencent à minuit, donc 1d signifie aujourd'hui, 2d pour hier, etc.
15820 0 pour désactiver la vérification. La valeur par défaut est @samp{"1d"}.
15821 @end deftypevr
15822
15823 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mdbox-preallocate-space?
15824 Lors de la création des fichiers mdbox, préallouer immédiatement leur taille
15825 à @samp{mdbox-rotate-size}. Ce paramètre ne fonctionne actuellement que
15826 dans Linux avec certains systèmes de fichiers (ext4, xfs). La valeur par
15827 défaut est @samp{#f}.
15828 @end deftypevr
15829
15830 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-dir
15831 Les formats sdbox et mdbox supportent la sauvegarde des pièces-jointes dans
15832 des fichiers externes, ce qui permet de les stocker une seule fois. Les
15833 autres moteurs ne le supportent pas pour le moment.
15834
15835 ATTENTION : Cette fonctionnalité n'a pas été beaucoup testée. Utilisez-la à
15836 vos risques et périls.
15837
15838 Racine du répertoire où stocker les pièces-jointes. Désactivé si vide. La
15839 valeur par défaut est @samp{""}.
15840 @end deftypevr
15841
15842 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-attachment-min-size
15843 Les pièces-jointes plus petites que cela ne sont pas enregistrées à part.
15844 Il est aussi possible d'écrire un greffon pour désactiver l'enregistrement
15845 externe de certaines pièces-jointes spécifiques. La valeur par défaut est
15846 @samp{128000}.
15847 @end deftypevr
15848
15849 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-fs
15850 Moteur du système de fichier à utiliser pour sauvegarder les pièces-jointes
15851 :
15852 @table @code
15853 @item posix
15854 Pas de SiS (single instance storage) par Dovecot (mais cela peut aider la
15855 déduplication du système de fichier)
15856 @item sis posix
15857 SiS avec comparaison bit-à-bit immédiate pendant la sauvegarde
15858 @item sis-queue posix
15859 SiS avec déduplication et comparaison différées
15860 @end table
15861 La valeur par défaut est @samp{"sis posix"}.
15862 @end deftypevr
15863
15864 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-hash
15865 Hash format to use in attachment filenames. You can add any text and
15866 variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}},
15867 @code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}. Variables can be
15868 truncated, e.g.@: @code{%@{sha256:80@}} returns only first 80 bits.
15869 Defaults to @samp{"%@{sha1@}"}.
15870 @end deftypevr
15871
15872 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-process-limit
15873
15874 La valeur par défaut est @samp{100}.
15875 @end deftypevr
15876
15877 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-client-limit
15878
15879 La valeur par défaut est @samp{1000}.
15880 @end deftypevr
15881
15882 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-vsz-limit
15883 Limite VSZ (taille mémoire virtuelle) par défaut pour les processus de
15884 service. C'est surtout pour attraper et tuer les processus qui font fuiter
15885 la mémoire avant qu'ils ne l'utilisent en entier. La valeur par défaut est
15886 @samp{256000000}.
15887 @end deftypevr
15888
15889 @deftypevr {paramètre de @code{dovecot-configuration}} string default-login-user
15890 Utilisateur de connexion utilisé en interne par les processus de connexion.
15891 C'est l'utilisateur avec la confiance minimale pour Dovecot. Il ne devrait
15892 avoir accès à rien du tout. La valeur par défaut est @samp{"dovenull"}.
15893 @end deftypevr
15894
15895 @deftypevr {paramètre de @code{dovecot-configuration}} string default-internal-user
15896 Utilisateur utilisé en interne par les processus non privilégiés. Il
15897 devrait être différent de l'utilisateur de connexion, pour que les processus
15898 de connexion ne puissent pas perturber les autres processus. La valeur par
15899 défaut est @samp{"dovecot"}.
15900 @end deftypevr
15901
15902 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl?
15903 Support SSL/TLS : yes, no, required. <doc/wiki/SSL.txt>. La valeur par
15904 défaut est @samp{"required"}.
15905 @end deftypevr
15906
15907 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cert
15908 Certificat SSL/TLS X.509 encodé en PEM (clef publique). La valeur par
15909 défaut est @samp{"</etc/dovecot/default.pem"}.
15910 @end deftypevr
15911
15912 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-key
15913 Clef privée SSL/TLS encodée en PEM. La clef est ouverte avant l'abandon des
15914 privilèges root, donc laissez-la non-lisible pour les utilisateurs. La
15915 valeur par défaut est @samp{"</etc/dovecot/private/default.pem"}.
15916 @end deftypevr
15917
15918 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-key-password
15919 Si le fichier de clef est protégé par un mot de passe, donnez-le ici.
15920 Autrement, donnez-le en démarrant dovecot avec le paramètre -p. Comme ce
15921 fichier est souvent lisible pour tout le monde, vous pourriez vouloir placer
15922 ce paramètre dans un autre fichier. La valeur par défaut est @samp{""}.
15923 @end deftypevr
15924
15925 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-ca
15926 PEM encoded trusted certificate authority. Set this only if you intend to
15927 use @samp{ssl-verify-client-cert? #t}. The file should contain the CA
15928 certificate(s) followed by the matching CRL(s). (e.g.@: @samp{ssl-ca
15929 </etc/ssl/certs/ca.pem}). Defaults to @samp{""}.
15930 @end deftypevr
15931
15932 @deftypevr {paramètre de @code{dovecot-configuration}} boolean ssl-require-crl?
15933 Indique si les certificats clients doivent réussir la vérification du CRL.
15934 La valeur par défaut est @samp{#t}.
15935 @end deftypevr
15936
15937 @deftypevr {paramètre de @code{dovecot-configuration}} boolean ssl-verify-client-cert?
15938 Demande aux clients d'envoyer un certificat. Si vous voulez aussi le
15939 requérir, indiquez @samp{auth-ssl-require-client-cert? #t} dans la section
15940 auth. La valeur par défaut est @samp{#f}.
15941 @end deftypevr
15942
15943 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cert-username-field
15944 Le champ du certificat à utiliser pour le nom d'utilisateur. Les choix
15945 habituels sont commonName et X500UniqueIdentifier. Vous devrez aussi
15946 indiquer @samp{auth-ssl-username-from-cert? #t}. La valeur par défaut est
15947 @samp{"commonName"}.
15948 @end deftypevr
15949
15950 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-min-protocol
15951 Version minimale de SSL à accepter. La valeur par défaut est
15952 @samp{"TLSv1"}.
15953 @end deftypevr
15954
15955 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cipher-list
15956 Méthodes de chiffrement à utiliser. La valeur par défaut est
15957 @samp{"ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@@STRENGTH"}.
15958 @end deftypevr
15959
15960 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-crypto-device
15961 Moteur cryptographique SSL à utiliser. Pour les valeur valides, lancez «
15962 openssl engine ». La valeur par défaut est @samp{""}.
15963 @end deftypevr
15964
15965 @deftypevr {paramètre de @code{dovecot-configuration}} string postmaster-address
15966 Adresse à utiliser pour envoyer les courriels de rejet. %d correspond au
15967 domaine du destinataire. La valeur par défaut est @samp{"postmaster@@%d"}.
15968 @end deftypevr
15969
15970 @deftypevr {paramètre de @code{dovecot-configuration}} string hostname
15971 Hostname to use in various parts of sent mails (e.g.@: in Message-Id) and
15972 in LMTP replies. Default is the system's real hostname@@domain. Defaults
15973 to @samp{""}.
15974 @end deftypevr
15975
15976 @deftypevr {paramètre de @code{dovecot-configuration}} boolean quota-full-tempfail?
15977 Si l'utilisateur dépasse le quota, renvoie un échec temporaire au lieu de
15978 rejeter le courriel. La valeur par défaut est @samp{#f}.
15979 @end deftypevr
15980
15981 @deftypevr {paramètre de @code{dovecot-configuration}} file-name sendmail-path
15982 Binaire à utiliser pour envoyer des courriels. La valeur par défaut est
15983 @samp{"/usr/sbin/sendmail"}.
15984 @end deftypevr
15985
15986 @deftypevr {paramètre de @code{dovecot-configuration}} string submission-host
15987 Si la valeur est non vide, envoyer les courriels à ce serveur SMTP
15988 hôte[:port] au lieu de sendmail. La valeur par défaut est @samp{""}.
15989 @end deftypevr
15990
15991 @deftypevr {paramètre de @code{dovecot-configuration}} string rejection-subject
15992 En-tête d'objet à utiliser pour les courriels de rejet. Vous pouvez
15993 utiliser les mêmes variables que pour @samp{rejection-reason} ci-dessous.
15994 La valeur par défaut est @samp{"Rejected: %s"}.
15995 @end deftypevr
15996
15997 @deftypevr {paramètre de @code{dovecot-configuration}} string rejection-reason
15998 Message d'erreur pour les humains dans les courriels de rejet. Vous pouvez
15999 utiliser ces variables :
16000
16001 @table @code
16002 @item %n
16003 CRLF
16004 @item %r
16005 raison
16006 @item %s
16007 objet du courriel de départ
16008 @item %t
16009 destinataire
16010 @end table
16011 La valeur par défaut est @samp{"Your message to <%t> was automatically
16012 rejected:%n%r"}.
16013 @end deftypevr
16014
16015 @deftypevr {paramètre de @code{dovecot-configuration}} string recipient-delimiter
16016 Caractère de délimitation entre la partie locale et le détail des adresses
16017 de courriel. La valeur par défaut est @samp{"+"}.
16018 @end deftypevr
16019
16020 @deftypevr {paramètre de @code{dovecot-configuration}} string lda-original-recipient-header
16021 En-tête où l'adresse du destinataire d'origine (l'adresse RCPT TO de SMTP)
16022 est récupérée si elle n'est pas disponible ailleurs. Le paramètre -a de
16023 dovecot-lda le remplace. L'en-tête couramment utilisée pour cela est
16024 X-Original-To. La valeur par défaut est @samp{""}.
16025 @end deftypevr
16026
16027 @deftypevr {paramètre de @code{dovecot-configuration}} boolean lda-mailbox-autocreate?
16028 Sauvegarder un courriel dans un fichier qui n'existe pas devrait-il le créer
16029 ? La valeur par défaut est @samp{#f}.
16030 @end deftypevr
16031
16032 @deftypevr {paramètre de @code{dovecot-configuration}} boolean lda-mailbox-autosubscribe?
16033 Devrait-on aussi se souscrire aux boîtes aux lettres nouvellement créées ?
16034 La valeur par défaut est @samp{#f}.
16035 @end deftypevr
16036
16037 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer imap-max-line-length
16038 Longueur maximale de la ligne de commande IMAP. Certains clients génèrent
16039 des lignes de commandes très longues avec des boîtes aux lettres énormes,
16040 donc vous pourriez avoir besoin d'augmenter cette limite si vous obtenez les
16041 erreurs « Too long argument » ou « IMAP command line too large ». La valeur
16042 par défaut est @samp{64000}.
16043 @end deftypevr
16044
16045 @deftypevr {paramètre de @code{dovecot-configuration}} string imap-logout-format
16046 Format de la chaîne de déconnexion IMAP :
16047 @table @code
16048 @item %i
16049 nombre d'octets lus par le client
16050 @item %o
16051 nombre total d'octets envoyés au client.
16052 @end table
16053 Voir @file{doc/wiki/Variables.txt} pour une liste de toutes les variables
16054 utilisables. La valeur par défaut est @samp{"in=%i out=%o
16055 deleted=%@{deleted@} expunged=%@{expunged@} trashed=%@{trashed@}
16056 hdr_count=%@{fetch_hdr_count@} hdr_bytes=%@{fetch_hdr_bytes@}
16057 body_count=%@{fetch_body_count@} body_bytes=%@{fetch_body_bytes@}"}.
16058 @end deftypevr
16059
16060 @deftypevr {paramètre de @code{dovecot-configuration}} string imap-capability
16061 Override the IMAP CAPABILITY response. If the value begins with '+', add
16062 the given capabilities on top of the defaults (e.g.@: +XFOO XBAR). Defaults
16063 to @samp{""}.
16064 @end deftypevr
16065
16066 @deftypevr {paramètre de @code{dovecot-configuration}} string imap-idle-notify-interval
16067 Temps d'attente entre les notifications « OK Still here » lorsque le client
16068 est en IDLE. La valeur par défaut est @samp{"2 mins"}.
16069 @end deftypevr
16070
16071 @deftypevr {paramètre de @code{dovecot-configuration}} string imap-id-send
16072 Noms des champs ID et de leur valeur à envoyer aux clients. « * » signifie
16073 la valeur par défaut. Les champs suivants ont actuellement des valeurs par
16074 défaut : name, version, os, os-version, support-url, support-email. La
16075 valeur par défaut est @samp{""}.
16076 @end deftypevr
16077
16078 @deftypevr {paramètre de @code{dovecot-configuration}} string imap-id-log
16079 Champs ID envoyés par le client à enregistrer. « * » signifie tout. La
16080 valeur par défaut est @samp{""}.
16081 @end deftypevr
16082
16083 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list imap-client-workarounds
16084 Contournements pour divers bogues de certains client :
16085
16086 @table @code
16087 @item delay-newmail
16088 Envoie des notifications de nouveau message EXISTS/RECENT seulement en
16089 réponse aux commandes NOOP et CHECK. Certains clients les ignorent
16090 autrement, par exemple OSX Mail (< v2.1). Outlook Express est encore plus
16091 cassé, sans cela il peut montrer des erreurs de type « Le message n'est plus
16092 sur le serveur ». Remarquez que OE6 est toujours cassé même avec ce
16093 contournement si la synchronisation est à « En-têtes seulement ».
16094
16095 @item tb-extra-mailbox-sep
16096 Thunderbird se mélange les pinceaux avec LAYOUT=fs (mbox et dbox) et ajoute
16097 un suffixe @samp{/} supplémentaire sur les noms des boîtes aux lettres.
16098 Cette option fait que dovecot ignore le @samp{/} supplémentaire au lieu de
16099 le traiter comme un nom de boîte aux lettres invalide.
16100
16101 @item tb-lsub-flags
16102 Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g.@: mbox). This
16103 makes Thunderbird realize they aren't selectable and show them greyed out,
16104 instead of only later giving "not selectable" popup error.
16105 @end table
16106 La valeur par défaut est @samp{()}.
16107 @end deftypevr
16108
16109 @deftypevr {paramètre de @code{dovecot-configuration}} string imap-urlauth-host
16110 Hôte autorisé dans les URL URLAUTH envoyés par les clients. « * » les
16111 autorise tous. La valeur par défaut est @samp{""}.
16112 @end deftypevr
16113
16114
16115 Ouf ! Tant d'options de configuration. La bonne nouvelle, c'est que GuixSD
16116 a une interface complète avec le langage de configuration de Dovecot. Cela
16117 permet non seulement de déclarer la configuration de manière agréable, mais
16118 aussi d'offrir des capacités de réflexion : les utilisateurs peuvent écrire
16119 du code pour inspecter et transformer les configuration depuis Scheme.
16120
16121 Cependant, vous pourriez avoir un fichier @code{dovecot.conf} déjà tout
16122 prêt. Dans ce cas, vous pouvez passer un objet
16123 @code{opaque-dovecot-configuration} comme paramètre @code{#:config} à
16124 @code{dovecot-service}. Comme son nom l'indique, une configuration opaque
16125 n'a pas les capacités de réflexions.
16126
16127 Les champs de @code{opaque-dovecot-configuration} disponibles sont :
16128
16129 @deftypevr {paramètre de @code{opaque-dovecot-configuration}} package dovecot
16130 Le paquet dovecot
16131 @end deftypevr
16132
16133 @deftypevr {paramètre de @code{opaque-dovecot-configuration}} string string
16134 Le contenu de @code{dovecot.conf}, en tant que chaîne de caractères.
16135 @end deftypevr
16136
16137 Par exemple, si votre @code{dovecot.conf} est simplement la chaîne vide,
16138 vous pouvez instancier un service dovecot comme cela :
16139
16140 @example
16141 (dovecot-service #:config
16142 (opaque-dovecot-configuration
16143 (string "")))
16144 @end example
16145
16146 @subsubheading Service OpenSMTPD
16147
16148 @deffn {Variable Scheme} opensmtpd-service-type
16149 C'est le type de service de @uref{https://www.opensmtpd.org, OpenSMTPD},
16150 dont la valeur devrait être un objet @code{opensmtpd-configuration} comme
16151 dans cet exemple :
16152
16153 @example
16154 (service opensmtpd-service-type
16155 (opensmtpd-configuration
16156 (config-file (local-file "./my-smtpd.conf"))))
16157 @end example
16158 @end deffn
16159
16160 @deftp {Type de données} opensmtpd-configuration
16161 Type de données représentant la configuration de opensmtpd.
16162
16163 @table @asis
16164 @item @code{package} (par défaut : @var{opensmtpd})
16165 Objet de paquet du serveur SMTP OpenSMTPD.
16166
16167 @item @code{config-file} (par défaut : @var{%default-opensmtpd-file})
16168 Objet simili-fichier du fichier de configuration de OpenSMTPD à utiliser.
16169 Par défaut il écoute sur l'interface de boucle locale et accepte les
16170 courriels des utilisateurs et des démons de la machine locale, et autorise
16171 l'envoie de courriels à des serveurs distants. Lancez @command{man
16172 smtpd.conf} pour plus d'information.
16173
16174 @end table
16175 @end deftp
16176
16177 @subsubheading Service Exim
16178
16179 @cindex agent de transfert de courriel (MTA)
16180 @cindex MTA (agent de transfert de courriel)
16181 @cindex SMTP
16182
16183 @deffn {Variable Scheme} exim-service-type
16184 C'est le type de l'agent de transfert de courriel (MTA)
16185 @uref{https://exim.org, Exim}, dont la valeur devrait être un objet
16186 @code{exim-configuration} comme dans cet exemple :
16187
16188 @example
16189 (service exim-service-type
16190 (exim-configuration
16191 (config-file (local-file "./my-exim.conf"))))
16192 @end example
16193 @end deffn
16194
16195 Pour utilise le service @code{exim-service-type} vous devez aussi avoir un
16196 service @code{mail-aliases-service-type} dans votre @code{operating-system}
16197 (même sans alias).
16198
16199 @deftp {Type de données} exim-configuration
16200 Type de données représentant la configuration d'exim.
16201
16202 @table @asis
16203 @item @code{package} (par défaut : @var{exim})
16204 Objet de paquet du serveur Exim.
16205
16206 @item @code{config-file} (par défaut : @code{#f})
16207 Objet simili-fichier du fichier de configuration d'Exim à utiliser. Si sa
16208 valeur est @code{#f} alors le service utilisera la configuration par défaut
16209 du paquet fournit dans @code{package}. Le fichier de configuration qui en
16210 résulte est chargé après avoir mis en place les variables de configuration
16211 @code{exim_user} et @code{exim_group}.
16212
16213 @end table
16214 @end deftp
16215
16216 @subsubheading Service d'alias de courriel
16217
16218 @cindex alias de courriel
16219 @cindex alias, pour les adresses de courriel
16220
16221 @deffn {Variable Scheme} mail-aliases-service-type
16222 C'est le type de service qui fournit @code{/etc/aliases} et qui spécifie
16223 comment délivrer les courriels aux utilisateurs du système.
16224
16225 @example
16226 (service mail-aliases-service-type
16227 '(("postmaster" "bob")
16228 ("bob" "bob@@example.com" "bob@@example2.com")))
16229 @end example
16230 @end deffn
16231
16232 La configuration pour un service @code{mail-aliases-service-type} est une
16233 liste associative qui dénote comment délivrer les courriels qui arrivent au
16234 système. Chaque entrée est de la forme @code{(alias adresses ...)} avec
16235 @code{alias} qui spécifie l'alias local et @code{adresses} qui spécifie où
16236 délivrer les courriels de cet utilisateur.
16237
16238 Les alias n'ont pas besoin de correspondre à des utilisateurs locaux du
16239 système. Dans l'exemple au-dessus, il n'y a pas besoin d'une entrée
16240 @code{postmaster} dans la liste @code{user-accounts} du
16241 @code{operating-system} pour délivrer les courriels à destination de
16242 @code{postmaster} à @code{bob} (qui ensuite délivrerait le courriel à
16243 @code{bob@@example.com} et @code{bob@@example2.com}).
16244
16245 @node Services de messagerie
16246 @subsubsection Services de messagerie
16247
16248 @cindex messagerie intantanée
16249 @cindex jabber
16250 @cindex XMPP
16251 Le module @code{(gnu services messaging)} fournit des définitions de
16252 services Guix pour les services de messageries instantanées : actuellement
16253 seul Prosody est supporté.
16254
16255 @subsubheading Service Prosody
16256
16257 @deffn {Variable Scheme} prosody-service-type
16258 C'est le type pour le @uref{https://prosody.im, le serveur de communication
16259 XMPP Prosody}. Sa valeur doit être un enregistrement
16260 @code{prosody-configuration} comme dans cet exemple :
16261
16262 @example
16263 (service prosody-service-type
16264 (prosody-configuration
16265 (modules-enabled (cons "groups" "mam" %default-modules-enabled))
16266 (int-components
16267 (list
16268 (int-component-configuration
16269 (hostname "conference.example.net")
16270 (plugin "muc")
16271 (mod-muc (mod-muc-configuration)))))
16272 (virtualhosts
16273 (list
16274 (virtualhost-configuration
16275 (domain "example.net"))))))
16276 @end example
16277
16278 Voir plus bas pour des détails sur @code{prosody-configuration}.
16279
16280 @end deffn
16281
16282 Par défaut, Prosody n'a pas besoin de beaucoup de configuration. Seul un
16283 champ @code{virtualhosts} est requis : il spécifie le domaine que vous
16284 voulez voir Prosody servir.
16285
16286 Vous pouvez effectuer plusieurs vérifications de la configuration générée
16287 avec la commande @code{prosodyctl check}.
16288
16289 Prosodyctl vous aidera aussi à importer des certificats du répertoire
16290 @code{letsencrypt} pour que l'utilisateur @code{prosody} puisse y accéder.
16291 Voir @url{https://prosody.im/doc/letsencrypt}.
16292
16293 @example
16294 prosodyctl --root cert import /etc/letsencrypt/live
16295 @end example
16296
16297 Les paramètres de configuration disponibles sont les suivants. Chaque
16298 définition des paramètres est précédé par son type ; par exemple,
16299 @samp{string-list foo} indique que le paramètre @code{foo} devrait être
16300 spécifié comme une liste de chaînes de caractères. Les types précédés de
16301 @code{maybe-} signifient que le paramètre n'apparaîtra pas dans
16302 @code{prosody.cfg.lua} lorsque sa valeur est @code{'disabled}.
16303
16304 Il y a aussi une manière de spécifier la configuration en tant que chaîne de
16305 caractères si vous avez un vieux fichier @code{prosody.cfg.lua} que vous
16306 voulez porter depuis un autre système ; voir la fin pour plus de détails.
16307
16308 Le type @code{file-object} désigne soit un objet simili-fichier
16309 (@pxref{G-Expressions, file-like objects}), soit un nom de fichier.
16310
16311 @c The following documentation was initially generated by
16312 @c (generate-documentation) in (gnu services messaging). Manually maintained
16313 @c documentation is better, so we shouldn't hesitate to edit below as
16314 @c needed. However if the change you want to make to this documentation
16315 @c can be done in an automated way, it's probably easier to change
16316 @c (generate-documentation) than to make it below and have to deal with
16317 @c the churn as Prosody updates.
16318
16319 Les champs de @code{prosody-configuration} disponibles sont :
16320
16321 @deftypevr {paramètre de @code{prosody-configuration}} package prosody
16322 Le paquet Prosody.
16323 @end deftypevr
16324
16325 @deftypevr {paramètre de @code{prosody-configuration}} file-name data-path
16326 Emplacement du répertoire de stockage des données de Prosody. Voir
16327 @url{https://prosody.im/doc/configure}. La valeur par défaut est
16328 @samp{"/var/lib/prosody"}.
16329 @end deftypevr
16330
16331 @deftypevr {paramètre de @code{prosody-configuration}} file-object-list plugin-paths
16332 Répertoires de greffons supplémentaires. Ils sont analysés dans l'ordre
16333 spécifié. Voir @url{https://prosody.im/doc/plugins_directory}. La valeur
16334 par défaut est @samp{()}.
16335 @end deftypevr
16336
16337 @deftypevr {paramètre de @code{prosody-configuration}} file-name certificates
16338 Chaque hôte virtuel et composant a besoin d'un certificat pour que les
16339 clients et les serveurs puissent vérifier son identité. Prosody chargera
16340 automatiquement les clefs et les certificats dans le répertoire spécifié
16341 ici. La valeur par défaut est @samp{"/etc/prosody/certs"}.
16342 @end deftypevr
16343
16344 @deftypevr {paramètre de @code{prosody-configuration}} string-list admins
16345 C'est une liste des comptes administrateurs de ce serveur. Remarquez que
16346 vous devez créer les comptes séparément. Voir
16347 @url{https://prosody.im/doc/admins} et
16348 @url{https://prosody.im/doc/creating_accounts}. Par exemple : @code{(admins
16349 '("user1@@example.com" "user2@@example.net"))}. La valeur par défaut est
16350 @samp{()}.
16351 @end deftypevr
16352
16353 @deftypevr {paramètre de @code{prosody-configuration}} boolean use-libevent?
16354 Active l'utilisation de libevent pour de meilleures performances sous une
16355 forte charge. Voir @url{https://prosody.im/doc/libevent}. La valeur par
16356 défaut est @samp{#f}.
16357 @end deftypevr
16358
16359 @deftypevr {paramètre de @code{prosody-configuration}} module-list modules-enabled
16360 C'est la liste des modules que Prosody chargera au démarrage. Il cherchera
16361 @code{mod_modulename.lua} dans le répertoire des greffons, donc assurez-vous
16362 qu'il existe aussi. La documentation des modules se trouve sur
16363 @url{https://prosody.im/doc/modules}. La valeur par défaut est
16364 @samp{("roster" "saslauth" "tls" "dialback" "disco" "carbons" "private"
16365 "blocklist" "vcard" "version" "uptime" "time" "ping" "pep" "register"
16366 "admin_adhoc")}.
16367 @end deftypevr
16368
16369 @deftypevr {paramètre de @code{prosody-configuration}} string-list modules-disabled
16370 @samp{"offline"},@samp{"c2s"} et @samp{"s2s"} sont chargés automatiquement,
16371 mais si vous voulez les désactiver, ajoutez-les à cette liste. La valeur
16372 par défaut est @samp{()}.
16373 @end deftypevr
16374
16375 @deftypevr {paramètre de @code{prosody-configuration}} file-object groups-file
16376 Chemin vers un fichier texte où les groupes partagés sont définis. Si ce
16377 chemin est vide alors @samp{mod_groups} ne fait rien. Voir
16378 @url{https://prosody.im/doc/modules/mod_groups}. La valeur par défaut est
16379 @samp{"/var/lib/prosody/sharedgroups.txt"}.
16380 @end deftypevr
16381
16382 @deftypevr {paramètre de @code{prosody-configuration}} boolean allow-registration?
16383 Désactive la création de compte par défaut, pour la sécurité. Voir
16384 @url{https://prosody.im/doc/creating_accounts}. La valeur par défaut est
16385 @samp{#f}.
16386 @end deftypevr
16387
16388 @deftypevr {paramètre de @code{prosody-configuration}} maybe-ssl-configuration ssl
16389 Ce sont les paramètres liés à SSL/TLS. La plupart sont désactivés pour
16390 pouvoir utiliser les paramètres par défaut de Prosody. Si vous ne comprenez
16391 pas complètement ces options, ne les ajoutez pas à votre configuration, il
16392 est aisé de diminuer la sécurité de votre serveur en les modifiant. Voir
16393 @url{https://prosody.im/doc/advanced_ssl_config}.
16394
16395 Les champs de @code{ssl-configuration} disponibles sont :
16396
16397 @deftypevr {paramètre de @code{ssl-configuration}} maybe-string protocol
16398 Cela détermine la poignée de main à utiliser.
16399 @end deftypevr
16400
16401 @deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name key
16402 Chemin vers votre fichier de clef privée.
16403 @end deftypevr
16404
16405 @deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name certificate
16406 Chemin vers votre fichier de certificat.
16407 @end deftypevr
16408
16409 @deftypevr {paramètre de @code{ssl-configuration}} file-object capath
16410 Chemin vers le répertoire contenant les certificats racines que vous voulez
16411 voir Prosody utiliser lors de la vérification des certificats des serveurs
16412 distants. La valeur par défaut est @samp{"/etc/ssl/certs"}.
16413 @end deftypevr
16414
16415 @deftypevr {paramètre de @code{ssl-configuration}} maybe-file-object cafile
16416 Chemin vers un fichier contenant les certificats racines auxquels Prosody
16417 devra faire confiance. Comme @code{capath} mais avec les certificats
16418 concaténés ensemble.
16419 @end deftypevr
16420
16421 @deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list verify
16422 Une liste d'options de vérification (qui correspondent globalement aux
16423 drapeaux @code{set_verify()} d'OpenSSL).
16424 @end deftypevr
16425
16426 @deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list options
16427 Une liste d'options générales liées à SSL/TLS. Elles correspondent
16428 globalement à @code{set_options()} d'OpenSSL. Pour une liste complète des
16429 options disponibles dans LuaSec, voir les sources de LuaSec.
16430 @end deftypevr
16431
16432 @deftypevr {paramètre de @code{ssl-configuration}} maybe-non-negative-integer depth
16433 Longueur maximale d'une chaîne d'autorités de certifications avant la
16434 racine.
16435 @end deftypevr
16436
16437 @deftypevr {paramètre de @code{ssl-configuration}} maybe-string ciphers
16438 Une chaîne de méthodes de chiffrement OpenSSL. Cela choisi les méthodes de
16439 chiffrement que Prosody offrira aux clients, et dans quel ordre de
16440 préférence.
16441 @end deftypevr
16442
16443 @deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name dhparam
16444 Un chemin vers un fichier contenant les paramètres pour l'échange de clef
16445 Diffie-Hellman. Vous pouvez créer un tel fichier avec : @code{openssl
16446 dhparam -out /etc/prosody/certs/dh-2048.pem 2048}
16447 @end deftypevr
16448
16449 @deftypevr {paramètre de @code{ssl-configuration}} maybe-string curve
16450 Courbe pour Diffie-Hellman sur courbe elliptique. La valeur par défaut de
16451 Prosody est @samp{"secp384r1"}.
16452 @end deftypevr
16453
16454 @deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list verifyext
16455 Une liste d'options de vérification « supplémentaires ».
16456 @end deftypevr
16457
16458 @deftypevr {paramètre de @code{ssl-configuration}} maybe-string password
16459 Mot de passe pour les clefs privées chiffrées.
16460 @end deftypevr
16461
16462 @end deftypevr
16463
16464 @deftypevr {paramètre de @code{prosody-configuration}} boolean c2s-require-encryption?
16465 S'il faut forcer toutes les connexions client-serveur à être chiffrées ou
16466 non. Voir @url{https://prosody.im/doc/modules/mod_tls}. La valeur par
16467 défaut est @samp{#f}.
16468 @end deftypevr
16469
16470 @deftypevr {paramètre de @code{prosody-configuration}} string-list disable-sasl-mechanisms
16471 Ensemble de mécanismes qui ne seront jamais offerts. Voir
16472 @url{https://prosody.im/doc/modules/mod_saslauth}. La valeur par défaut est
16473 @samp{("DIGEST-MD5")}.
16474 @end deftypevr
16475
16476 @deftypevr {paramètre de @code{prosody-configuration}} boolean s2s-require-encryption?
16477 S'il faut forcer toutes les connexion serveur-serveur à être chiffrées ou
16478 non. Voir @url{https://prosody.im/doc/modules/mod_tls}. La valeur par
16479 défaut est @samp{#f}.
16480 @end deftypevr
16481
16482 @deftypevr {paramètre de @code{prosody-configuration}} boolean s2s-secure-auth?
16483 S'il faut requérir le chiffrement et l'authentification du certificat. Cela
16484 fournit une sécurité idéale, mais demande que les serveurs avec lesquels
16485 vous communiquez supportent le chiffrement ET présentent un certificat
16486 valide et de confiance. Voir @url{https://prosody.im/doc/s2s#security}. La
16487 valeur par défaut est @samp{#f}.
16488 @end deftypevr
16489
16490 @deftypevr {paramètre de @code{prosody-configuration}} string-list s2s-insecure-domains
16491 Beaucoup de serveurs ne supportent pas le chiffrement ou ont un certificat
16492 invalide ou auto-signé. Vous pouvez lister les domaines ici qui n'ont pas
16493 besoin de s'authentifier avec des certificats. Ils seront authentifiés par
16494 DNS. Voir @url{https://prosody.im/doc/s2s#security}. La valeur par défaut
16495 est @samp{()}.
16496 @end deftypevr
16497
16498 @deftypevr {paramètre de @code{prosody-configuration}} string-list s2s-secure-domains
16499 Même si vous laissez @code{s2s-secure-auth?} désactivé, vous pouvez toujours
16500 demander un certificat valide pour certains domaine en spécifiant la liste
16501 ici. Voir @url{https://prosody.im/doc/s2s#security}. La valeur par défaut
16502 est @samp{()}.
16503 @end deftypevr
16504
16505 @deftypevr {paramètre de @code{prosody-configuration}} string authentication
16506 Choisi le moteur d'authentification à utiliser. Le moteur par défaut stocke
16507 les mots de passes en texte clair et utilise la configuration de stockage
16508 des données de Prosody pour stocker les données authentifiées. Si vous
16509 n'avez pas confiance dans le serveur, lisez
16510 @url{https://prosody.im/doc/modules/mod_auth_internal_hashed} pour plus
16511 d'information sur l'utilisation du moteur hashed. Voir aussi
16512 @url{https://prosody.im/doc/authentication}. La valeur par défaut est
16513 @samp{"internal_plain"}.
16514 @end deftypevr
16515
16516 @deftypevr {paramètre de @code{prosody-configuration}} maybe-string log
16517 Indique les options de journalisation. La configuration avancée des
16518 journaux n'est pas encore supportée par le service Prosody dans GuixSD.
16519 Voir @url{https://prosody.im/doc/logging}. La valeur par défaut est
16520 @samp{"*syslog"}.
16521 @end deftypevr
16522
16523 @deftypevr {paramètre de @code{prosody-configuration}} file-name pidfile
16524 Fichier où écrire le PID. Voir
16525 @url{https://prosody.im/doc/modules/mod_posix}. La valeur par défaut est
16526 @samp{"/var/run/prosody/prosody.pid"}.
16527 @end deftypevr
16528
16529 @deftypevr {paramètre de @code{prosody-configuration}} maybe-non-negative-integer http-max-content-size
16530 Taille maximum autorisée pour le corps HTTP (en octets).
16531 @end deftypevr
16532
16533 @deftypevr {paramètre de @code{prosody-configuration}} maybe-string http-external-url
16534 Certains modules exposent leur propre URL de diverses manières. Cette URL
16535 est construite à partir du protocole, de l'hôte et du port utilisé. Si
16536 Prosody se trouve derrière un proxy, l'URL publique sera
16537 @code{http-external-url} à la place. Voir
16538 @url{https://prosody.im/doc/http#external_url}.
16539 @end deftypevr
16540
16541 @deftypevr {paramètre de @code{prosody-configuration}} virtualhost-configuration-list virtualhosts
16542 Un hôte dans Prosody est un domaine sur lequel les comptes utilisateurs sont
16543 créés. Par exemple si vous voulez que vos utilisateurs aient une adresse
16544 comme @samp{"john.smith@@example.com"} vous devrez ajouter un hôte
16545 @samp{"example.com"}. Toutes les options de cette liste seront appliquées
16546 uniquement à cet hôte.
16547
16548 Remarque : le nom d'hôte « virtuel » est utilisé dans la configuration pour
16549 éviter de le confondre avec le nom d'hôte physique réel de la machine qui
16550 héberge Prosody. Une seule instance de Prosody peut servir plusieurs
16551 domaines, chacun défini comme une entrée VirtualHost dans la configuration
16552 de Prosody. Ainsi, un serveur qui n'héberge qu'un seul domaine n'aura
16553 qu'une entrée VirtualHost.
16554
16555 Voir @url{https://prosody.im/doc/configure#virtual_host_settings}.
16556
16557 Les champs de @code{virtualhost-configuration} disponibles sont :
16558
16559 tous ces champs de @code{prosody-configuration} : @code{admins},
16560 @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
16561 @code{groups-file}, @code{allow-registration?}, @code{ssl},
16562 @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
16563 @code{s2s-require-encryption?}, @code{s2s-secure-auth?},
16564 @code{s2s-insecure-domains}, @code{s2s-secure-domains},
16565 @code{authentication}, @code{log}, @code{http-max-content-size},
16566 @code{http-external-url}, @code{raw-content}, plus :
16567 @deftypevr {paramètre de @code{virtualhost-configuration}} string domain
16568 Domaine que vous souhaitez que Prosody serve.
16569 @end deftypevr
16570
16571 @end deftypevr
16572
16573 @deftypevr {paramètre de @code{prosody-configuration}} int-component-configuration-list int-components
16574 Les composant sont des services supplémentaires qui sont disponibles pour
16575 les clients, habituellement sur un sous-domaine du serveur principal (comme
16576 @samp{"mycomponent.example.com"}). Des exemples de composants sont des
16577 serveurs de chatroom, des répertoires utilisateurs ou des passerelles vers
16578 d'autres protocoles.
16579
16580 Les composants internes sont implémentés dans des greffons spécifiques à
16581 Prosody. Pour ajouter un composant interne, vous n'avez qu'à remplir le
16582 champ de nom d'hôte et le greffon que vous voulez utiliser pour le
16583 composant.
16584
16585 Voir @url{https://prosody.im/doc/components}. La valeur par défaut est
16586 @samp{()}.
16587
16588 Les champs de @code{int-component-configuration} disponibles sont :
16589
16590 tous ces champs de @code{prosody-configuration} : @code{admins},
16591 @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
16592 @code{groups-file}, @code{allow-registration?}, @code{ssl},
16593 @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
16594 @code{s2s-require-encryption?}, @code{s2s-secure-auth?},
16595 @code{s2s-insecure-domains}, @code{s2s-secure-domains},
16596 @code{authentication}, @code{log}, @code{http-max-content-size},
16597 @code{http-external-url}, @code{raw-content}, plus :
16598 @deftypevr {paramètre de @code{int-component-configuration}} string hostname
16599 Nom d'hôte du composant.
16600 @end deftypevr
16601
16602 @deftypevr {paramètre de @code{int-component-configuration}} string plugin
16603 Greffon que vous voulez utiliser pour ce composant.
16604 @end deftypevr
16605
16606 @deftypevr {paramètre de @code{int-component-configuration}} maybe-mod-muc-configuration mod-muc
16607 Le chat multi-utilisateur (MUC) est le modules de Prosody qui vous permet de
16608 créer des chatrooms/conférences pour les utilisateurs XMPP.
16609
16610 Des informations générales sur la configuration des chatrooms
16611 multi-utilisateurs se trouvent dans la documentation sur les chatrooms
16612 (@url{https://prosody.im/doc/chatrooms}), que vous devriez lire si vous les
16613 découvrez.
16614
16615 Voir aussi @url{https://prosody.im/doc/modules/mod_muc}.
16616
16617 Les champs de @code{mod-muc-configuration} disponibles sont :
16618
16619 @deftypevr {paramètre de @code{mod-muc-configuration}} string name
16620 Le nom à renvoyer dans les réponses de découverte de services. La valeur
16621 par défaut est @samp{"Prosody Chatrooms"}.
16622 @end deftypevr
16623
16624 @deftypevr {paramètre de @code{mod-muc-configuration}} string-or-boolean restrict-room-creation
16625 If @samp{#t}, this will only allow admins to create new chatrooms.
16626 Otherwise anyone can create a room. The value @samp{"local"} restricts room
16627 creation to users on the service's parent domain. E.g.@:
16628 @samp{user@@example.com} can create rooms on @samp{rooms.example.com}. The
16629 value @samp{"admin"} restricts to service administrators only. Defaults to
16630 @samp{#f}.
16631 @end deftypevr
16632
16633 @deftypevr {paramètre de @code{mod-muc-configuration}} non-negative-integer max-history-messages
16634 Nombre maximum de messages d'historique qui seront envoyés aux membres qui
16635 viennent de rejoindre le salon. La valeur par défaut est @samp{20}.
16636 @end deftypevr
16637
16638 @end deftypevr
16639
16640 @end deftypevr
16641
16642 @deftypevr {paramètre de @code{prosody-configuration}} ext-component-configuration-list ext-components
16643 Les composants externes utilisent XEP-0114, que la plupart des composants
16644 supportent. Pour ajouter un composant externe, vous remplissez simplement
16645 le champ de nom d'hôte. Voir @url{https://prosody.im/doc/components}. La
16646 valeur par défaut est @samp{()}.
16647
16648 Les champs de @code{ext-component-configuration} disponibles sont :
16649
16650 tous ces champs de @code{prosody-configuration} : @code{admins},
16651 @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
16652 @code{groups-file}, @code{allow-registration?}, @code{ssl},
16653 @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
16654 @code{s2s-require-encryption?}, @code{s2s-secure-auth?},
16655 @code{s2s-insecure-domains}, @code{s2s-secure-domains},
16656 @code{authentication}, @code{log}, @code{http-max-content-size},
16657 @code{http-external-url}, @code{raw-content}, plus :
16658 @deftypevr {paramètre de @code{ext-component-configuration}} string component-secret
16659 Mot de passe que le composant utilisera pour s'authentifier.
16660 @end deftypevr
16661
16662 @deftypevr {paramètre de @code{ext-component-configuration}} string hostname
16663 Nom d'hôte du composant.
16664 @end deftypevr
16665
16666 @end deftypevr
16667
16668 @deftypevr {paramètre de @code{prosody-configuration}} non-negative-integer-list component-ports
16669 Ports sur lesquels Prosody écoutera les connexions des composants. La
16670 valeur par défaut est @samp{(5347)}.
16671 @end deftypevr
16672
16673 @deftypevr {paramètre de @code{prosody-configuration}} string component-interface
16674 Interface sur laquelle Prosody écoutera les connexions des composants. La
16675 valeur par défaut est @samp{"127.0.0.1"}.
16676 @end deftypevr
16677
16678 @deftypevr {paramètre de @code{prosody-configuration}} maybe-raw-content raw-content
16679 Contenu brut qui sera ajouté au fichier de configuration.
16680 @end deftypevr
16681
16682 Il se peut que vous ayez juste envie de lancer un fichier
16683 @code{prosody.cfg.lua} directement. Dans ce cas, vous pouvez passer un
16684 enregistrement @code{opaque-prosody-configuration} comme valeur à
16685 @code{prosody-service-type}. Comme son nom l'indique, une configuration
16686 opaque n'a pas de capacités de réflexion simples. Les champs disponibles de
16687 @code{opaque-prosody-configuration} sont :
16688
16689 @deftypevr {paramètre de @code{opaque-prosody-configuration}} package prosody
16690 Le paquet prosody.
16691 @end deftypevr
16692
16693 @deftypevr {paramètre de @code{opaque-prosody-configuration}} string prosody.cfg.lua
16694 Le contenu de @code{prosody.cfg.lua} à utiliser.
16695 @end deftypevr
16696
16697 Par exemple, si votre @code{prosody.cfg.lua} est juste la chaîne vide, vous
16698 pouvez instancier un service prosody comme ceci :
16699
16700 @example
16701 (service prosody-service-type
16702 (opaque-prosody-configuration
16703 (prosody.cfg.lua "")))
16704 @end example
16705
16706 @c end of Prosody auto-generated documentation
16707
16708 @subsubheading Service BitlBee
16709
16710 @cindex IRC (Internet Relay Chat)
16711 @cindex passerelle IRC
16712 @url{http://bitlbee.org,BitlBee} est une passerelle qui fournit une
16713 interface IRC vers une variété de protocoles de messagerie instantanée comme
16714 XMPP.
16715
16716 @defvr {Variable Scheme} bitlbee-service-type
16717 C'est le type de service pour le démon de passerelle IRC
16718 @url{http://bitlbee.org,BitlBee}. Sa valeur est un
16719 @code{bitlbee-configuration} (voir plus bas).
16720
16721 Pour que BitlBee écoute sur le pourt 6667 sur localhost, ajoutez cette ligne
16722 à vos services :
16723
16724 @example
16725 (service bitlbee-service-type)
16726 @end example
16727 @end defvr
16728
16729 @deftp {Type de données} bitlbee-configuration
16730 C'est la configuration de BitlBee, avec les champs suivants :
16731
16732 @table @asis
16733 @item @code{interface} (par défaut : @code{"127.0.0.1"})
16734 @itemx @code{port} (par défaut : @code{6667})
16735 Écoute sur l'interface réseau correspondant à l'adresse IP dans
16736 @var{interface}, sur @var{port}.
16737
16738 Lorsque @var{interface} vaut @code{127.0.0.1}, seuls les clients locaux
16739 peuvent se connecter ; lorsqu'elle vaut @code{0.0.0.0}, les connexions
16740 peuvent venir de n'importe quelle interface réseau.
16741
16742 @item @code{package} (par défaut : @code{bitlbee})
16743 Le paquet BitlBee à utiliser.
16744
16745 @item @code{plugins} (par défaut : @code{'()})
16746 Liste des paquets de greffons à utiliser — p.@: ex.@:
16747 @code{bitlbee-discord}.
16748
16749 @item @code{extra-settings} (par défaut : @code{""})
16750 Partie de configuration ajoutée telle-quelle au fichier de configuration de
16751 BitlBee.
16752 @end table
16753 @end deftp
16754
16755
16756 @node Services de téléphonie
16757 @subsubsection Services de téléphonie
16758
16759 @cindex Murmur (serveur VoIP)
16760 @cindex serveur VoIP
16761 Cette section décrit comment configurer et lancer un serveur Murmur. Murmur
16762 est le serveur de la suite de voix-sur-IP (VoIP) @uref{https://mumble.info,
16763 Mumble}.
16764
16765 @deftp {Type de données} murmur-configuration
16766 Le type de service pour le serveur Murmur. Voici un exemple de
16767 configuration :
16768
16769 @example
16770 (service murmur-service-type
16771 (murmur-configuration
16772 (welcome-text
16773 "Welcome to this Mumble server running on GuixSD!")
16774 (cert-required? #t) ;disallow text password logins
16775 (ssl-cert "/etc/letsencrypt/live/mumble.example.com/fullchain.pem")
16776 (ssl-key "/etc/letsencrypt/live/mumble.example.com/privkey.pem")))
16777 @end example
16778
16779 Après avoir reconfiguré votre système, vous pouvez manuellement indiquer le
16780 mot de passe @code{SuperUser} de murmur avac la commande qui s'affiche
16781 pendant la phase d'activation.
16782
16783 Il est recommandé d'enregistrer un compte utilisateur Mumble normal et de
16784 lui donner les droits admin ou modérateur. Vous pouvez utiliser le client
16785 @code{mumble} pour vous connecter en tant que nouvel utilisateur normal,
16786 vous enregistrer et vous déconnecter. Pour l'étape suivante, connectez-vous
16787 avec le nom @code{SuperUser} en utilisant le mot de passe @code{SuperUser}
16788 que vous avez indiqué précédemment et accordez les droits administrateur ou
16789 modérateur à vous utilisateur mumble nouvellement enregistré et créez
16790 quelques salons.
16791
16792 Les champs de @code{murmur-configuration} disponibles sont :
16793
16794 @table @asis
16795 @item @code{package} (par défaut : @code{mumble})
16796 Paquet qui contient @code{bin/murmurd}.
16797
16798 @item @code{user} (par défaut : @code{"murmur"})
16799 Utilisateur qui lancera le serveur Murmur.
16800
16801 @item @code{group} (par défaut : @code{"murmur"})
16802 Groupe de l'utilisateur qui lancera le serveur Murmur.
16803
16804 @item @code{port} (par défaut : @code{64738})
16805 Port sur lequel le serveur écoutera.
16806
16807 @item @code{welcome-text} (par défaut : @code{""})
16808 Texte de bienvenue envoyé aux clients lors de leur connexion.
16809
16810 @item @code{server-password} (par défaut : @code{""})
16811 Mot de passe que les clients devront entrer pour se connecter.
16812
16813 @item @code{max-users} (par défaut : @code{100})
16814 Nombre maximum d'utilisateurs qui peuvent se connecter à ce serveur en même
16815 temps.
16816
16817 @item @code{max-user-bandwidth} (par défaut : @code{#f})
16818 Trafic de voix maximum qu'un utilisateur peut envoyer par seconde.
16819
16820 @item @code{database-file} (par défaut : @code{"/var/lib/murmur/db.sqlite"})
16821 Nom de fichier de la base de données sqlite. L'utilisateur du service
16822 deviendra propriétaire du répertoire.
16823
16824 @item @code{log-file} (par défaut : @code{"/var/log/murmur/murmur.log"})
16825 Nom du fichier de journal. L'utilisateur du service deviendra propriétaire
16826 du répertoire.
16827
16828 @item @code{autoban-attempts} (par défaut : @code{10})
16829 Nombre maximum de connexions qu'un utilisateur peut faire pendant
16830 @code{autoban-timeframe} sans être banni automatiquement pour
16831 @code{autoban-time}.
16832
16833 @item @code{autoban-timeframe} (par défaut : @code{120})
16834 Durée du temps pendant lequel le nombre de connexions est compté.
16835
16836 @item @code{autoban-time} (par défaut : @code{300})
16837 Durée du bannissement automatique en secondes.
16838
16839 @item @code{opus-threshold} (par défaut : @code{100})
16840 Pourcentage des clients qui doivent supporter opus avant de passer sur le
16841 codec audio opus.
16842
16843 @item @code{channel-nesting-limit} (par défaut : @code{10})
16844 Profondeur maximum des canaux.
16845
16846 @item @code{channelname-regex} (par défaut : @code{#f})
16847 Une chaîne de la forme d'une expression régulière Qt que les noms de canaux
16848 doivent respecter.
16849
16850 @item @code{username-regex} (par défaut : @code{#f})
16851 Une chaîne de la forme d'une expression régulière Qt que les noms
16852 d'utilisateurs doivent respecter.
16853
16854 @item @code{text-message-length} (par défaut : @code{5000})
16855 Taille maximum en octets qu'un utilisateur peut envoyer en un seul message
16856 textuel.
16857
16858 @item @code{image-message-length} (par défaut : @code{(* 128 1024)})
16859 Taille maximum en octets qu'un utilisateur peut envoyer en une seule image.
16860
16861 @item @code{cert-required?} (par défaut : @code{#f})
16862 Si la valeur est @code{#t} les clients utilisant une authentification par
16863 mot de passe faible ne seront pas acceptés. Les utilisateurs doivent
16864 compléter l'assistant de configuration des certificats pour rejoindre le
16865 serveur.
16866
16867 @item @code{remember-channel?} (paramètre de : @code{#f})
16868 Indique si murmur devrait se rappeler du dernier canal dans lequel étaient
16869 les utilisateurs au moment de leur déconnexion et les y remettre lorsqu'ils
16870 se reconnectent.
16871
16872 @item @code{allow-html?} (par défaut : @code{#f})
16873 Indique si le html est autorisé dans les messages textuels, les commentaires
16874 utilisateurs et les descriptions des canaux.
16875
16876 @item @code{allow-ping?} (par défaut : @code{#f})
16877 Mettre à vrai expose le nombre d'utilisateurs, le nombre d'utilisateurs
16878 maximum et la bande passante maximale du serveur par client aux utilisateurs
16879 non connectés. Dans le client Mumble, cette information est affichée dans
16880 la boîte de dialogue de connexion.
16881
16882 Désactiver ce paramètre empêchera le serveur d'être publiquement listé.
16883
16884 @item @code{bonjour?} (par défaut : @code{#f})
16885 Indique si le serveur se présente sur le réseau local à travers le protocole
16886 bonjour.
16887
16888 @item @code{send-version?} (par défaut : @code{#f})
16889 Indique si la version du serveur murmur doit être exposée dans les requêtes
16890 ping.
16891
16892 @item @code{log-days} (par défaut : @code{31})
16893 Murmur stocke aussi les journaux en base de données, qui sont accessible via
16894 RPC. La valeur par défaut est 31 jours, mais vous pouvez le mettre à 0 pour
16895 les garder pour toujours ou à -1 pour désactiver la journalisation dans la
16896 base de données.
16897
16898 @item @code{obfuscate-ips?} (par défaut : @code{#t})
16899 Indique si les IP enregistrées doivent être cachées pour protéger la vie
16900 privée des utilisateurs.
16901
16902 @item @code{ssl-cert} (par défaut : @code{#f})
16903 Nom de fichier du certificat SSL/TLS utilisé pour les connexions chiffrées.
16904
16905 @example
16906 (ssl-cert "/etc/letsencrypt/live/example.com/fullchain.pem")
16907 @end example
16908 @item @code{ssl-key} (par défaut : @code{#f})
16909 Chemin de fichier vers la clef privée ssl pour les connexions chiffrées.
16910 @example
16911 (ssl-key "/etc/letsencrypt/live/example.com/privkey.pem")
16912 @end example
16913
16914 @item @code{ssl-dh-params} (par défaut : @code{#f})
16915 Nom de fichier d'un fichier encodé en PEM avec les paramètres Diffie-Hellman
16916 pour le chiffrement SSL/TLS. Autrement vous pouvez indiquer
16917 @code{"@@ffdhe2048"}, @code{"@@ffdhe3072"}, @code{"@@ffdhe4096"},
16918 @code{"@@ffdhe6144"} ou @code{"@@ffdhe8192"} pour utiliser les paramètres
16919 inclus de la RFC 7919.
16920
16921 @item @code{ssl-ciphers} (par défaut : @code{#f})
16922 L'option @code{ssl-ciphers} permet de choisir les suites de chiffrement
16923 disponibles pour SSL/TLS.
16924
16925 Cette option est spécifiée en utilisant
16926 l'@uref{https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT,
16927 OpenSSL cipher list notation}
16928
16929 Nous vous recommandons d'essayer votre chaîne de suites de chiffrements avec
16930 « openssl ciphers <chaîne> » avant de l'indiquer ici, pour avoir une idée
16931 des suites de chiffrement que vous aurez. Après avoir indiqué cette option,
16932 nous vous recommandons d'inspecter les journaux de Murmur pour vous assurer
16933 que Murmur utilise les suites de chiffrements auxquelles vous vous attendez.
16934
16935 Remarque : modifier cette option peut impacter la rétrocompatibilité de
16936 votre serveur Murmur, et peut empêcher que des clients Mumble anciens se
16937 connectent.
16938
16939 @item @code{public-registration} (par défaut : @code{#f})
16940 Doit être un enregistrement
16941 @code{<murmur-public-registration-configuration>} ou @code{#f}.
16942
16943 Vous pouvez aussi enregistrer votre serveur dans la liste des serveurs
16944 publiques que le client @code{mumble} affiche au démarrage. Vous ne pouvez
16945 pas enregistrer votre serveur si vous avez un @code{server-password} ou
16946 @code{allow-ping} à @code{#f}.
16947
16948 Cela peut prendre quelques heures avant d'arriver sur la liste publique.
16949
16950 @item @code{file} (par défaut : @code{#f})
16951 Version alternative de cette configuration : si vous indiquez quelque chose,
16952 le reste est ignoré.
16953 @end table
16954 @end deftp
16955
16956 @deftp {Type de données} murmur-public-registration-configuration
16957 Configuration pour l'enregistrement public du service murmur.
16958
16959 @table @asis
16960 @item @code{name}
16961 C'est le nom d'affichage de votre serveur. Ne pas le confondre avec le nom
16962 d'hôte.
16963
16964 @item @code{password}
16965 Un mot de passe pour identifier votre enregistrement. Les mises à jours
16966 suivantes devront utiliser le même mot de passe. Ne le perdez pas.
16967
16968 @item @code{url}
16969 Cela devrait être le lien @code{http://} ou @code{https://} vers votre site
16970 web.
16971
16972 @item @code{hostname} (par défaut : @code{#f})
16973 Par défaut votre serveur sera listé par son adresse IP. Si cette option est
16974 indiquée votre serveur sera listé par son nom d'hôte.
16975 @end table
16976 @end deftp
16977
16978
16979
16980 @node Services de surveillance
16981 @subsubsection Services de surveillance
16982
16983 @subsubheading Service Tailon
16984
16985 @uref{https://tailon.readthedocs.io/, Tailon} est une application web pour
16986 visualiser et chercher des fichiers de journaux.
16987
16988 L'exemple suivant configurera le service avec les valeurs par défaut. Par
16989 défaut, on peut accéder à Tailon sur le pour 8080
16990 (@code{http://localhost:8080}).
16991
16992 @example
16993 (service tailon-service-type)
16994 @end example
16995
16996 L'exemple suivant personnalise un peu plus la configuration de Tailon, en
16997 ajoutant @command{sed} à la liste des commandes autorisées.
16998
16999 @example
17000 (service tailon-service-type
17001 (tailon-configuration
17002 (config-file
17003 (tailon-configuration-file
17004 (allowed-commands '("tail" "grep" "awk" "sed"))))))
17005 @end example
17006
17007
17008 @deftp {Type de données} tailon-configuration
17009 Type de données représentant la configuration de Tailon. Ce type a les
17010 paramètres suivants :
17011
17012 @table @asis
17013 @item @code{config-file} (par défaut : @code{(tailon-configuration-file)})
17014 Le fichier de configuration à utiliser pour Tailon. Ce champ peut contenir
17015 un enregistrement @dfn{tailon-configuration-file} ou n'importe quelle gexp
17016 (@pxref{G-Expressions}).
17017
17018 Par exemple, pour utiliser un fichier local à la place, on peut utiliser la
17019 fonction @code{local-file} :
17020
17021 @example
17022 (service tailon-service-type
17023 (tailon-configuration
17024 (config-file (local-file "./my-tailon.conf"))))
17025 @end example
17026
17027 @item @code{package} (par défaut : @code{tailon})
17028 Le paquet tailon à utiliser.
17029
17030 @end table
17031 @end deftp
17032
17033 @deftp {Type de données} tailon-configuration-file
17034 Type de données représentant les options de configuration de Tailon. Ce
17035 type a les paramètres suivants :
17036
17037 @table @asis
17038 @item @code{files} (par défaut : @code{(list "/var/log")})
17039 Liste des fichiers à afficher. La liste peut inclure des chaînes pour des
17040 fichiers simple ou des répertoires, ou une liste, où le premier élément est
17041 le nom d'un sous-section et le reste des fichiers ou des répertoires de
17042 cette sous-section.
17043
17044 @item @code{bind} (par défaut : @code{"localhost:8080"})
17045 Adresse et port sur lesquels Tailon écoute.
17046
17047 @item @code{relative-root} (par défaut : @code{#f})
17048 Chemin de l'URL à utiliser pour Tailon, ou @code{#f} pour ne pas utiliser de
17049 chemin.
17050
17051 @item @code{allow-transfers?} (par défaut : @code{#t})
17052 Permet de télécharger les journaux dans l'interface web.
17053
17054 @item @code{follow-names?} (par défaut : @code{#t})
17055 Permet de surveiller des fichiers qui n'existent pas encore.
17056
17057 @item @code{tail-lines} (par défaut : @code{200})
17058 Nombre de lignes à lire initialement dans chaque fichier.
17059
17060 @item @code{allowed-commands} (par défaut : @code{(list "tail" "grep" "awk")})
17061 Commandes autorisées. Par défaut, @code{sed} est désactivé.
17062
17063 @item @code{debug?} (par défaut : @code{#f})
17064 Configurez @code{debug?} à @code{#t} pour montrer les messages de débogage.
17065
17066 @item @code{wrap-lines} (par défaut : @code{#t})
17067 État initial du retour à la ligne dans l'interface web. Configurez l'option
17068 à @code{#t} pour retourner à la ligne (par défaut) ou à @code{#f} pour ne
17069 pas retourner à la ligne au début.
17070
17071 @item @code{http-auth} (par défaut : @code{#f})
17072 Type d'authentification HTTP à utiliser. Indiquez @code{#f} pour désactiver
17073 l'authentification (par défaut). Les valeur supportées sont @code{"digest"}
17074 et @code{"basic"}.
17075
17076 @item @code{users} (par défaut : @code{#f})
17077 Si l'authentification HTTP est activée (voir @code{http-auth}), l'accès sera
17078 restreint aux identifiants fournis ici. Pour configurer des utilisateurs,
17079 utilisez une liste de paires, où le premier élément de la paire est le nom
17080 d'utilisateur et le second élément est le mot de passe.
17081
17082 @example
17083 (tailon-configuration-file
17084 (http-auth "basic")
17085 (users '(("user1" . "password1")
17086 ("user2" . "password2"))))
17087 @end example
17088
17089 @end table
17090 @end deftp
17091
17092
17093 @subsubheading Service Darkstat
17094 @cindex darkstat
17095 Darkstat est un « renifleur de paquets » qui capture le trafic réseau,
17096 calcul des statistiques sur l'utilisation et sert des rapport sur HTTP.
17097
17098 @defvar {Variable Scheme} darkstat-service-type
17099 C'est le type de service pour le service
17100 @uref{https://unix4lyfe.org/darkstat/, darkstat}, sa valeur doit être un
17101 enregistrement @code{darkstat-configuration} comme dans cet exemple :
17102
17103 @example
17104 (service darkstat-service-type
17105 (darkstat-configuration
17106 (interface "eno1")))
17107 @end example
17108 @end defvar
17109
17110 @deftp {Type de données} darkstat-configuration
17111 Type de données représentant la configuration de @command{darkstat}.
17112
17113 @table @asis
17114 @item @code{package} (par défaut : @code{darkstat})
17115 Le paquet darkstat à utiliser.
17116
17117 @item @code{interface}
17118 Capture le trafic sur l'interface réseau spécifiée.
17119
17120 @item @code{port} (par défaut : @code{"667"})
17121 Lie l'interface web sur le port spécifié.
17122
17123 @item @code{bind-address} (par défaut : @code{"127.0.0.1"})
17124 Lie l'interface web sur l'adresse spécifiée.
17125
17126 @item @code{base} (par défaut : @code{"/"})
17127 Spécifie le chemin de base des URL. C'est utile si on accède à
17128 @command{darkstat} à travers un proxy inverse.
17129
17130 @end table
17131 @end deftp
17132
17133 @subsubheading Service d'export de nœud de Prometheus
17134
17135 @cindex prometheus-node-exporter
17136 L'exportateur de nœuds de Prometheus rend disponible les statistiques sur le
17137 matériel et le système d'exploitation fournies par le noyau Linux pour le
17138 système de surveillance Prometheus. Ce service devrait être déployé sur
17139 tous les nœuds physiques et les machines virtuelles, où vous voulez
17140 surveiller ces statistiques.
17141
17142 @defvar {Variable Scheme} prometheus-node-exporter-service-type
17143 C'est le type de service pour le service
17144 @uref{https://github.com/prometheus/node_exporter/,
17145 prometheus-node-exporter}, sa valeur doit être un enregistrement
17146 @code{prometheus-node-exporter-configuration} comme dans cet exemple :
17147
17148 @example
17149 (service prometheus-node-exporter-service-type
17150 (prometheus-node-exporter-configuration
17151 (web-listen-address ":9100")))
17152 @end example
17153 @end defvar
17154
17155 @deftp {Type de données} prometheus-node-exporter-configuration
17156 Type de données représentant la configuration de @command{node_exporter}
17157
17158 @table @asis
17159 @item @code{package} (par défaut : @code{go-github-com-prometheus-node-exporter})
17160 Le paquet prometheus-node-exporter à utiliser.
17161
17162 @item @code{web-listen-address} (par défaut : @code{":9100"})
17163 Lie l'interface web sur l'adresse spécifiée.
17164
17165 @end table
17166 @end deftp
17167
17168 @node Services Kerberos
17169 @subsubsection Services Kerberos
17170 @cindex Kerberos
17171
17172 Le module @code{(gnu services kerberos)} fournit des services liés au
17173 protocole d'authentification @dfn{Kerberos}.
17174
17175 @subsubheading Service Krb5
17176
17177 Les programmes qui utilisent une bibliothèque cliente Kerberos s'attendent à
17178 trouver un fichier de configuration dans @file{/etc/krb5.conf}. Ce service
17179 génère un tel fichier à partir d'une définition fournie par la déclaration
17180 de système d'exploitation. Il ne démarre aucun démon.
17181
17182 Aucun fichier « keytab » n'est fourni par ce service — vous devez les créer
17183 explicitement. Ce service est connu pour fonctionner avec la bibliothèque
17184 cliente MIT, @code{mit-krb5}. Les autres implémentations n'ont pas été
17185 testées.
17186
17187 @defvr {Variable Scheme} krb5-service-type
17188 Un type de service pour les clients Kerberos 5.
17189 @end defvr
17190
17191 @noindent
17192 Voici un exemple d'utilisation :
17193 @lisp
17194 (service krb5-service-type
17195 (krb5-configuration
17196 (default-realm "EXAMPLE.COM")
17197 (allow-weak-crypto? #t)
17198 (realms (list
17199 (krb5-realm
17200 (name "EXAMPLE.COM")
17201 (admin-server "groucho.example.com")
17202 (kdc "karl.example.com"))
17203 (krb5-realm
17204 (name "ARGRX.EDU")
17205 (admin-server "kerb-admin.argrx.edu")
17206 (kdc "keys.argrx.edu"))))))
17207 @end lisp
17208
17209 @noindent
17210 Cet exemple fournit une configuration cliente Kerberos@tie{}5 qui :
17211 @itemize
17212 @item Reconnais deux domaines : « EXAMPLE.COM » et « ARGREX.EDU », tous deux
17213 aillant des serveurs d'administration et des centres de distribution de
17214 clefs distincts ;
17215 @item Utilisera le domaine « EXAMPLE.COM » pr défaut si le domaine n'est pas spécifié
17216 explicitement par les clients ;
17217 @item Acceptera les services qui ne supportent que des types de chiffrements connus pour être faibles.
17218 @end itemize
17219
17220 Les types @code{krb5-realm} et @code{krb5-configuration} ont de nombreux
17221 champs. Seuls les plus communs sont décrits ici. Pour une liste complète,
17222 et plus de détails sur chacun d'entre eux, voir la documentation de MIT
17223 @uref{http://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html,,krb5.conf}.
17224
17225
17226 @deftp {Type de données} krb5-realm
17227 @cindex domaine, kerberos
17228 @table @asis
17229 @item @code{name}
17230 Ce champ est une chaîne identifiant le nom d'un domaine. Une convention
17231 courante est d'utiliser le nom pleinement qualifié de votre organisation,
17232 converti en majuscule.
17233
17234 @item @code{admin-server}
17235 Ce champ est une chaîne identifiant l'hôte où le serveur d'administration
17236 tourne.
17237
17238 @item @code{kdc}
17239 Ce champ est une chaîne identifiant le centre de distribution de clefs pour
17240 ce domaine.
17241 @end table
17242 @end deftp
17243
17244 @deftp {Type de données} krb5-configuration
17245
17246 @table @asis
17247 @item @code{allow-weak-crypto?} (par défaut : @code{#f})
17248 Si ce drapeau est @code{#t} les services qui n'offrent que des algorithmes
17249 de chiffrement faibles seront acceptés.
17250
17251 @item @code{default-realm} (par défaut : @code{#f})
17252 Ce champ devrait être une chaîne identifiant le domaine Kerberos par défaut
17253 pour le client. Vous devriez mettre le nom de votre domaine Kerberos dans
17254 ce champ. Si cette valeur est @code{#f} alors un domaine doit être spécifié
17255 pour chaque principal Kerberos à l'invocation des programmes comme
17256 @command{kinit}.
17257
17258 @item @code{realms}
17259 Cela doit être une liste non-vide d'objets @code{krb5-realm}, auxquels les
17260 clients peuvent accéder. Normalement, l'un d'entre eux aura un champ
17261 @code{name} qui correspond au champ @code{default-realm}.
17262 @end table
17263 @end deftp
17264
17265
17266 @subsubheading Service PAM krb5
17267 @cindex pam-krb5
17268
17269 Le service @code{pam-krb5} permet la connexion et la gestion des mots de
17270 passe par Kerberos. Vous aurez besoin de ce service si vous voulez que les
17271 applications qui utilisent PAM puissent authentifier automatiquement les
17272 utilisateurs avec Kerberos.
17273
17274 @defvr {Variable Scheme} pam-krb5-service-type
17275 Un type de service pour le module PAM Kerberos 5.
17276 @end defvr
17277
17278 @deftp {Type de données} pam-krb5-configuration
17279 Type de données représentant la configuration du module PAM Kerberos 5. Ce
17280 type a les paramètres suivants :
17281 @table @asis
17282 @item @code{pam-krb5} (par défaut : @code{pam-krb5})
17283 Le paquet pam-krb5 à utiliser.
17284
17285 @item @code{minimum-uid} (par défaut : @code{1000})
17286 Le plus petite ID utilisateur pour lequel les authentifications Kerberos
17287 devraient être tentées. Les comptes locaux avec une valeur plus petite
17288 échoueront silencieusement leur authentification Kerberos.
17289 @end table
17290 @end deftp
17291
17292
17293 @node Services web
17294 @subsubsection Services web
17295
17296 @cindex web
17297 @cindex www
17298 @cindex HTTP
17299 Le module @code{(gnu services web)} fournit le serveur Apache HTTP, le
17300 serveur web nginx et aussi un démon fastcgi.
17301
17302 @subsubheading Serveur Apache HTTP
17303
17304 @deffn {Variable Scheme} httpd-service-type
17305 Type de service pour le serveur @uref{https://httpd.apache.org/,Apache HTTP}
17306 (@dfn{httpd}). La valeur de ce type de service est un enregistrement
17307 @code{httpd-configuration}.
17308
17309 Un exemple de configuration simple est donné ci-dessous.
17310
17311 @example
17312 (service httpd-service-type
17313 (httpd-configuration
17314 (config
17315 (httpd-config-file
17316 (server-name "www.example.com")
17317 (document-root "/srv/http/www.example.com")))))
17318 @end example
17319
17320 D'autres services peuvent aussi étendre @code{httpd-service-type} pour être
17321 ajouté à la configuration.
17322
17323 @example
17324 (simple-service 'my-extra-server httpd-service-type
17325 (list
17326 (httpd-virtualhost
17327 "*:80"
17328 (list (string-append
17329 "ServerName "www.example.com
17330 DocumentRoot \"/srv/http/www.example.com\"")))))
17331 @end example
17332 @end deffn
17333
17334 Les détails des types d'enregistrement @code{httpd-configuration},
17335 @code{httpd-module}, @code{httpd-config-file} et @code{httpd-virtualhost}
17336 sont donnés plus bas.
17337
17338 @deffn {Type de données} httpd-configuration
17339 Ce type de données représente la configuration du service httpd.
17340
17341 @table @asis
17342 @item @code{package} (par défaut : @code{httpd})
17343 Le paquet httpd à utiliser.
17344
17345 @item @code{pid-file} (par défaut : @code{"/var/run/httpd"})
17346 Le fichier de pid utilisé par le service shepherd.
17347
17348 @item @code{config} (par défaut : @code{(httpd-config-file)})
17349 Le fichier de configuration à utiliser avec le service httpd. La valeur par
17350 défaut est un enregistrement @code{httpd-config-file} mais cela peut aussi
17351 être un G-expression qui génère un fichier, par exemple un
17352 @code{plain-file}. Un fichier en dehors du dépôt peut aussi être spécifié
17353 avec une chaîne de caractères.
17354
17355 @end table
17356 @end deffn
17357
17358 @deffn {Type de données} httpd-module
17359 Ce type de données représente un module pour le service httpd.
17360
17361 @table @asis
17362 @item @code{name}
17363 Le nom du module.
17364
17365 @item @code{file}
17366 Le fichier pour le module. Cela peut être relatif au paquet httpd utilisé,
17367 l'emplacement absolu d'un fichier ou une G-expression pour un fichier dans
17368 le dépôt, par exemple @code{(file-append mod-wsgi "/modules/mod_wsgi.so")}.
17369
17370 @end table
17371 @end deffn
17372
17373 @defvr {Variable Scheme} %default-httpd-modules
17374 Une liste par défaut des objets @code{httpd-module}.
17375 @end defvr
17376
17377 @deffn {Type de données} httpd-config-file
17378 Ce type de données représente un fichier de configuration pour le service
17379 httpd.
17380
17381 @table @asis
17382 @item @code{modules} (par défaut : @code{%default-httpd-modules})
17383 Les modules à charger. Les modules supplémentaires peuvent être ajoutés ici
17384 ou chargés par des configuration supplémentaires.
17385
17386 Par exemple, pour gérer les requêtes pour des fichiers PHP, vous pouvez
17387 utiliser le module @code{mod_proxy_fcgi} d'Apache avec
17388 @code{php-fpm-service-type} :
17389
17390 @example
17391 (service httpd-service-type
17392 (httpd-configuration
17393 (config
17394 (httpd-config-file
17395 (modules (cons*
17396 (httpd-module
17397 (name "proxy_module")
17398 (file "modules/mod_proxy.so"))
17399 (httpd-module
17400 (name "proxy_fcgi_module")
17401 (file "modules/mod_proxy_fcgi.so"))
17402 %default-httpd-modules))
17403 (extra-config (list "\
17404 <FilesMatch \\.php$>
17405 SetHandler \"proxy:unix:/var/run/php-fpm.sock|fcgi://localhost/\"
17406 </FilesMatch>"))))))
17407 (service php-fpm-service-type
17408 (php-fpm-configuration
17409 (socket "/var/run/php-fpm.sock")
17410 (socket-group "httpd")))
17411 @end example
17412
17413 @item @code{server-root} (par défaut : @code{httpd})
17414 Le @code{ServerRoot} dans le fichier de configuration, par défaut le paquet
17415 httpd. Les directives comme @code{Include} et @code{LoadModule} sont prises
17416 relativement à la racine du serveur.
17417
17418 @item @code{server-name} (par défaut : @code{#f})
17419 Le @code{ServerName} dans le fichier de configuration, utilisé pour
17420 spécifier le schéma de requête, le nom d'hôte et le port que le serveur
17421 utilise pour s'identifier.
17422
17423 Cela n'a pas besoin d'être dans la configuration du serveur, et peut être
17424 spécifié dans les hôtes virtuels. La valeur par défaut est @code{#f} pour
17425 ne pas spécifier de @code{ServerName}.
17426
17427 @item @code{document-root} (par défaut : @code{"/srv/http"})
17428 Le @code{DocumentRoot} depuis lequel les fichiers seront servis.
17429
17430 @item @code{listen} (par défaut : @code{'("80")})
17431 La liste des valeurs pour les directives @code{Listen} dans le fichier de
17432 configuration. La valeur devrait être une liste de chaînes, où chacune
17433 spécifie le port sur lequel écouter et éventuellement une adresse IP et un
17434 protocole à utiliser.
17435
17436 @item @code{pid-file} (par défaut : @code{"/var/run/httpd"})
17437 Le @code{PidFile} à utiliser. Cela devrait correspondre à @code{pid-file}
17438 indiqué dans @code{httpd-configuration} pour que le service Shepherd soit
17439 correctement configuré.
17440
17441 @item @code{error-log} (par défaut : @code{"/var/log/httpd/error_log"})
17442 Le @code{ErrorLog} où le serveur écrit les journaux d'erreurs.
17443
17444 @item @code{user} (par défaut : @code{"httpd"})
17445 Le @code{User} en tant que lequel le serveur répondra aux requêtes.
17446
17447 @item @code{group} (par défaut : @code{"httpd"})
17448 Le @code{Group} que le serveur utilisera pour répondre aux requêtes.
17449
17450 @item @code{extra-config} (par défaut : @code{(list "TypesConfig etc/httpd/mime.types")})
17451 Une liste plate de chaînes et de G-expressions qui seront ajoutées à la fin
17452 du fichier de configuration.
17453
17454 N'importe quelle valeur avec laquelle le service est étendu sera ajouté à
17455 cette liste.
17456
17457 @end table
17458 @end deffn
17459
17460 @deffn {Type de données} httpd-virtualhost
17461 Ce type de données représente la configuration d'un hôte virtuel pour le
17462 service httpd.
17463
17464 Ils devraient être ajoutés à extra-config dans httpd-service.
17465
17466 @example
17467 (simple-service 'my-extra-server httpd-service-type
17468 (list
17469 (httpd-virtualhost
17470 "*:80"
17471 (list (string-append
17472 "ServerName "www.example.com
17473 DocumentRoot \"/srv/http/www.example.com\"")))))
17474 @end example
17475
17476 @table @asis
17477 @item @code{addresses-and-ports}
17478 L'adresse et le port pour la directive @code{VirtualHost}.
17479
17480 @item @code{contents}
17481 Le contenu de la directive @code{VirtualHost}, cela devrait être une liste
17482 de chaîne et de G-expressions.
17483
17484 @end table
17485 @end deffn
17486
17487 @subsubheading NGINX
17488
17489 @deffn {Variable Scheme} nginx-service-type
17490 Type de service pour le serveur web @uref{https://nginx.org/,NGinx}. La
17491 valeur de ce service est un enregistrement @code{<nginx-configuration>}.
17492
17493 Un exemple de configuration simple est donné ci-dessous.
17494
17495 @example
17496 (service nginx-service-type
17497 (nginx-configuration
17498 (server-blocks
17499 (list (nginx-server-configuration
17500 (server-name '("www.example.com"))
17501 (root "/srv/http/www.example.com"))))))
17502 @end example
17503
17504 En plus d'ajouter des blocs de serveurs dans la configuration du service
17505 directement, ce service peut être étendu par d'autres services pour ajouter
17506 des blocs de serveurs, comme dans cet exemple :
17507
17508 @example
17509 (simple-service 'my-extra-server nginx-service-type
17510 (list (nginx-server-configuration
17511 (root "/srv/http/extra-website")
17512 (try-files (list "$uri" "$uri/index.html")))))
17513 @end example
17514 @end deffn
17515
17516 Au démarrage, @command{nginx} n'a pas encore lu son fichier de
17517 configuration, donc il utilise les fichiers par défaut pour les messages
17518 d'erreur. S'il échoue à charger sa configuration, c'est là où les messages
17519 seront enregistrés. Après la lecture du fichier de configuration, le
17520 fichier de journal d'erreur par défaut change en fonction de celle-ci. Dans
17521 notre cas, les messages d'erreur au démarage se trouvent dans
17522 @file{/var/run/nginx/logs/error.log} et après la configuration dans
17523 @file{/var/log/nginx/error.log}. Ce second emplacement peut être modifié
17524 avec l'option de configuration @var{log-directory}.
17525
17526 @deffn {Type de données} nginx-configuration
17527 Ce type de données représente la configuration de NGinx. Certaines
17528 configurations peuvent se faire ici et d'autres fournissent des types
17529 d'enregistrement ou éventuellement, on peut fournir un fichier de
17530 configuration.
17531
17532 @table @asis
17533 @item @code{nginx} (par défaut : @code{nginx})
17534 Le paquet nginx à utiliser.
17535
17536 @item @code{log-directory} (par défaut : @code{"/var/log/nginx"})
17537 Le répertoire dans lequel NGinx écrira ses fichiers journaux.
17538
17539 @item @code{run-directory} (par défaut : @code{"/var/run/nginx"})
17540 Le répertoire dans lequel NGinx créera un fichier de pid et écrira des
17541 fichiers temporaires.
17542
17543 @item @code{server-blocks} (par défaut : @code{'()})
17544 Une liste de @dfn{blocs serveur} à créer dans le fichier de configuration
17545 généré, dont les éléments sont de type @code{<nginx-server-configuration>}.
17546
17547 L'exemple suivant paramètre NGinx pour servir @code{www.example.com} depuis
17548 le répertoire @code{/srv/http/www.example.com} sans utiliser HTTPS.
17549 @example
17550 (service nginx-service-type
17551 (nginx-configuration
17552 (server-blocks
17553 (list (nginx-server-configuration
17554 (server-name '("www.example.com"))
17555 (root "/srv/http/www.example.com"))))))
17556 @end example
17557
17558 @item @code{upstream-blocks} (par défaut : @code{'()})
17559 Une liste de @dfn{blocs amont} à créer dans le fichier de configuration
17560 généré, dont les éléments sont de type
17561 @code{<nginx-upstream-configuration>}.
17562
17563 Configurer les serveurs amont à travers les @code{upstream-blocks} peut être
17564 utile en combinaison avec @code{locations} dans les enregistrements
17565 @code{<nginx-server-configuration>}. L'exemple suivant crée une
17566 configuration de serveur avec une configuration « location » qui sera
17567 mandataire pour une configuration amont, qui gérera les requêtes avec deux
17568 serveurs.
17569
17570 @example
17571 (service
17572 nginx-service-type
17573 (nginx-configuration
17574 (server-blocks
17575 (list (nginx-server-configuration
17576 (server-name '("www.example.com"))
17577 (root "/srv/http/www.example.com")
17578 (locations
17579 (list
17580 (nginx-location-configuration
17581 (uri "/path1")
17582 (body '("proxy_pass http://server-proxy;"))))))))
17583 (upstream-blocks
17584 (list (nginx-upstream-configuration
17585 (name "server-proxy")
17586 (servers (list "server1.example.com"
17587 "server2.example.com")))))))
17588 @end example
17589
17590 @item @code{file} (par défaut : @code{#f})
17591 Si un fichier de configuration @var{file} est fourni, il sera utilisé au
17592 lieu de générer un fichier de configuration à partir des
17593 @code{log-directory}, @code{run-directory}, @code{server-blocks} et
17594 @code{upstream-blocks} fournis. Pour un bon fonctionnement, ces arguments
17595 devraient correspondre à ce qui se trouve dans @var{file} pour s'assurer que
17596 les répertoires sont créé lorsque le service est activé.
17597
17598 Cela peut être utile si vous avez déjà un fichier de configuration existant
17599 ou s'il n'est pas possible de faire ce dont vous avez besoin avec les autres
17600 parties de l'enregistrement nginx-configuration.
17601
17602 @item @code{server-names-hash-bucket-size} (par défaut : @code{#f})
17603 Taille du seau pour les tables de hashage des noms de serveurs, par dauft
17604 @code{#f} pour utilise la taille des lignes de cache du processeur.
17605
17606 @item @code{server-names-hash-bucket-max-size} (par défaut : @code{#f})
17607 Taille maximum des seaux pour les tables de hashage des serveurs de noms.
17608
17609 @item @code{extra-content} (par défaut : @code{""})
17610 Contenu supplémentaire du bloc @code{http}. Cela devrait être une chaîne ou
17611 un G-expression.
17612
17613 @end table
17614 @end deffn
17615
17616 @deftp {Type de données} nginx-server-configuration
17617 Type de données représentant la configuration d'un bloc serveur de nginx.
17618 Ce type a les paramètres suivants :
17619
17620 @table @asis
17621 @item @code{listen} (par défaut : @code{'("80" "443 ssl")})
17622 Chaque directive @code{listen} indique l'adresse et le port pour le
17623 protocole IP ou le chemin d'un socket UNIX-domain sur lequel le serveur
17624 acceptera les connexions. On peut spécifier l'adresse et le port, ou juste
17625 l'adresse ou juste le port. Une adresse peut aussi être un nom d'hôte, par
17626 exemple :
17627
17628 @example
17629 '("127.0.0.1:8000" "127.0.0.1" "8000" "*:8000" "localhost:8000")
17630 @end example
17631
17632 @item @code{server-name} (par défaut : @code{(list 'default)})
17633 Une liste de noms de serveurs que ce serveur représente. @code{'default}
17634 représente le serveur par défaut pour les connexions qui ne correspondent à
17635 aucun autre serveur.
17636
17637 @item @code{root} (par défaut : @code{"/srv/http"})
17638 Racine du site web que sert nginx.
17639
17640 @item @code{locations} (par défaut : @code{'()})
17641 Une liste d'enregistrements @dfn{nginx-location-configuration} ou
17642 @dfn{nginx-named-location-configuration} à utiliser dans ce bloc serveur.
17643
17644 @item @code{index} (par défaut : @code{(list "index.html")})
17645 Fichiers d'index à chercher lorsque les clients demandent un répertoire.
17646 S'il ne peut pas être trouvé, Nginx enverra la liste des fichiers dans le
17647 répertoire.
17648
17649 @item @code{try-files} (par défaut : @code{'()})
17650 Une liste de fichiers dont l'existence doit être vérifiée dans l'ordre
17651 spécifié. @code{nginx} utilisera le premier fichier trouvé pour satisfaire
17652 la requête.
17653
17654 @item @code{ssl-certificate} (par défaut : @code{#f})
17655 Où trouver les certificats pour les connexions sécurisées. Indiquez
17656 @code{#f} si vous n'avez pas de certificats et que vous ne voulez pas
17657 utiliser HTTPS.
17658
17659 @item @code{ssl-certificate-key} (par défaut : @code{#f})
17660 Où trouver la clef privée pour les connexions sécurisées. Indiquez
17661 @code{#f} si vous n'avez pas de clef et que vous ne voulez pas utiliser
17662 HTTPS.
17663
17664 @item @code{server-tokens?} (par défaut : @code{#f})
17665 Indique si le serveur devrait ajouter sa configuration dans les réponses.
17666
17667 @item @code{raw-content} (par défaut : @code{'()})
17668 Une liste de lignes brutes à ajouter dans le bloc serveur.
17669
17670 @end table
17671 @end deftp
17672
17673 @deftp {Type de données} nginx-upstream-configuration
17674 Type de données représentant la configuration d'un bloc @code{upstream}
17675 nginx. Ce type a les paramètres suivants :
17676
17677 @table @asis
17678 @item @code{name}
17679 Nome de ces groupe de serveurs.
17680
17681 @item @code{serveurs}
17682 Specify the addresses of the servers in the group. The address can be
17683 specified as a IP address (e.g.@: @samp{127.0.0.1}), domain name (e.g.@:
17684 @samp{backend1.example.com}) or a path to a UNIX socket using the prefix
17685 @samp{unix:}. For addresses using an IP address or domain name, the default
17686 port is 80, and a different port can be specified explicitly.
17687
17688 @end table
17689 @end deftp
17690
17691 @deftp {Type de données} nginx-location-configuration
17692 Type de données représentant la configuration d'un bloc @code{location}
17693 nginx. Ce type a les paramètres suivants :
17694
17695 @table @asis
17696 @item @code{uri}
17697 URI qui correspond à ce bloc.
17698
17699 @anchor{nginx-location-configuration body}
17700 @item @code{body}
17701 Corps du block location, spécifié comme une liste de chaînes de caractères.
17702 Cela peut contenir de nombreuses directives de configuration. PAr exemple,
17703 pour passer des requêtes à un groupe de serveurs amont définis dans un bloc
17704 @code{nginx-upstream-configuration}, la directive suivante peut être
17705 spécifiée dans le corps : @samp{(list "proxy_pass http://upstream-name;")}.
17706
17707 @end table
17708 @end deftp
17709
17710 @deftp {Type de données} nginx-named-location-configuration
17711 Type de données représentant la configuration d'un bloc location nginx
17712 nommé. Les blocs location nommés sont utilisé les redirections de requêtes
17713 et pas pour le traitement des requêtes normales. Ce type a les paramètres
17714 suivants :
17715
17716 @table @asis
17717 @item @code{name}
17718 Nom pour identifier ce bloc location.
17719
17720 @item @code{body}
17721 @xref{nginx-location-configuration body}, comme le corps d'un bloc location
17722 nommé peut être utilisé de la même manière que
17723 @code{nginx-location-configuration body}. Une restriction est que le corps
17724 d'un bloc location nommé ne peut pas contenir de bloc location.
17725
17726 @end table
17727 @end deftp
17728
17729 @subsubheading Cache Varnish
17730 @cindex Varnish
17731 Varnish est un serveur de cache rapide qui se trouve entre les applications
17732 web et les utilisateurs. Il sert de serveur mandataire pour les requêtes
17733 des clients et met les URL accédées en cache pour que plusieurs requêtes à
17734 la même ressource ne crée qu'une requête au moteur.
17735
17736 @defvr {Variable Scheme} varnish-service-type
17737 Type de service pour le démon Varnish.
17738 @end defvr
17739
17740 @deftp {Type de données} varnish-configuration
17741 Type de données représentant la configuration du service @code{varnish}. Ce
17742 type a les paramètres suivants :
17743
17744 @table @asis
17745 @item @code{package} (par défaut : @code{varnish})
17746 Le paquet Varnish à utiliser.
17747
17748 @item @code{name} (par défaut : @code{"default"})
17749 Un nom pour cet instance de Varnish. Varnish va créer un répertoire dans
17750 @file{/var/varnish/} avec ce nom et gardera des fichiers temporaires à cet
17751 endroit. Si le nom commence par une barre oblique, il est interprété comme
17752 un nom de répertoire absolu.
17753
17754 Pass the @code{-n} argument to other Varnish programs to connect to the
17755 named instance, e.g.@: @command{varnishncsa -n default}.
17756
17757 @item @code{backend} (par défaut : @code{"localhost:8080"})
17758 Le moteur à utiliser. Cette option n'a pas d'effet si @code{vcl} est vrai.
17759
17760 @item @code{vcl} (par défaut : #f)
17761 Le programme @dfn{VCL} (Varnish Configuration Language) à lancer. Si la
17762 valeur est @code{#f}, Varnsh servira de mandataire pour @code{backend} avec
17763 la configuration par défaut. Sinon, ce doit être un objet simili-fichier
17764 avec une syntaxe VCL valide.
17765
17766 @c Varnish does not support HTTPS, so keep this URL to avoid confusion.
17767 Par exemple, pour créer un miroir de @url{http://www.gnu.org,www.gnu.org}
17768 avec VCL vous pouvez faire quelque chose comme cela :
17769
17770 @example
17771 (define %gnu-mirror
17772 (plain-file
17773 "gnu.vcl"
17774 "vcl 4.1;
17775 backend gnu @{ .host = "www.gnu.org"; @}"))
17776
17777 (operating-system
17778 ...
17779 (services (cons (service varnish-service-type
17780 (varnish-configuration
17781 (listen '(":80"))
17782 (vcl %gnu-mirror)))
17783 %base-services)))
17784 @end example
17785
17786 On peut inspecter la configuration d'une instance Varnish actuellement
17787 lancée en utilisant le programme @command{varnishadm}.
17788
17789 Consultez le @url{https://varnish-cache.org/docs/,guide utilisateur de
17790 varnish} et le @url{https://book.varnish-software.com/4.0/,livre varnish}
17791 pour une documentation complète sur Varnish et son langage de configuration.
17792
17793 @item @code{listen} (par défaut : @code{'("localhost:80")})
17794 Liste des adresses sur lesquelles écoute Varnish.
17795
17796 @item @code{storage} (par défaut : @code{'("malloc,128m")})
17797 Liste de moteurs de stockage qui seront disponibles en VCL.
17798
17799 @item @code{parameters} (par défaut : @code{'()})
17800 Liste des paramètres à l'exécution de la forme @code{'(("parameter"
17801 . "value"))}.
17802
17803 @item @code{extra-options} (par défaut : @code{'()})
17804 Arguments supplémentaires à passer au processus @command{varnishd}.
17805
17806 @end table
17807 @end deftp
17808
17809 @subsubheading FastCGI
17810 @cindex fastcgi
17811 @cindex fcgiwrap
17812 FastCGI est une interface entre le frontal et le moteur d'un service web.
17813 C'est un dispositif quelque peu désué ; les nouveaux services devraient
17814 généralement juste parler HTTP entre le frontal et le moteur. Cependant il
17815 y a un certain nombre de services de moteurs comme PHP ou l'accès aux dépôts
17816 Git optimisé en HTTP qui utilisent FastCGI, donc nous le supportons dans
17817 Guix.
17818
17819 Pour utiliser FastCGI, vous configurez le serveur web frontal (p.@: ex.@:
17820 nginx) pour envoyer un sous-ensemble de ses requêtes au moteur fastcgi, qui
17821 écoute sur un socket UNIX ou TCP local. Il y a un programme @code{fcgiwrap}
17822 intermédiaire qui se trouve entre le processus du moteur et le serveur web.
17823 Le frontal indique quel moteur lancer, en passant cette information au
17824 processus @code{fcgiwrap}.
17825
17826 @defvr {Variable Scheme} fcgiwrap-service-type
17827 Un type de service pour le mandataire FastCGI @code{fcgiwrap}.
17828 @end defvr
17829
17830 @deftp {Type de données} fcgiwrap-configuration
17831 Type de données représentant la configuration d'un service @code{fcgiwrap}.
17832 Ce type a les paramètres suivants :
17833 @table @asis
17834 @item @code{package} (par défaut : @code{fcgiwrap})
17835 Le paquet fcgiwrap à utiliser.
17836
17837 @item @code{socket} (par défaut : @code{tcp:127.0.0.1:9000})
17838 Le socket sur lequel le processus @code{fcgiwrap} écoute, en tant que chaîne
17839 de caractères. Les valeurs valides de @var{socket} sont
17840 @code{unix:@var{/path/to/unix/socket}},
17841 @code{tcp:@var{dot.ted.qu.ad}:@var{port}} et
17842 @code{tcp6:[@var{ipv6_addr}]:port}.
17843
17844 @item @code{user} (par défaut : @code{fcgiwrap})
17845 @itemx @code{group} (par défaut : @code{fcgiwrap})
17846 Les noms de l'utilisateur et du groupe, en tant que chaînes de caractères,
17847 sous lesquels lancer le processus @code{fcgiwrap}. Le service
17848 @code{fastcgi} s'assurera que si l'utilisateur demande les noms
17849 d'utilisateurs et de groupes @code{fcgiwrap} l'utilisateur et le groupe
17850 correspondant seront présents sur le système.
17851
17852 Il est possible de configurer un service web soutenu par FastCGI pour passer
17853 les informations d'authentification HTTP depuis le frontal jusqu'au moteur,
17854 et de permettre à @code{fcgiwrap} dans lancer le processus de moteur avec
17855 l'utilisateur correspondant. Pour activer cette fonctionnalité sur le
17856 moteur, lancez @code{fcgiwrap} en tant qu'utilisateur et groupe
17857 @code{root}. Remarquez que cette fonctionnalité doit aussi être configurée
17858 sur le frontal.
17859 @end table
17860 @end deftp
17861
17862 @cindex php-fpm
17863 PHP-FPM (FastCGI Process Manager) est une implémentation FastCGI de PHP
17864 alternative avec quelques fonctionnalités supplémentaires utiles pour les
17865 sites de toutes tailles.
17866
17867 Ces fonctionnalités comprennent :
17868 @itemize @bullet
17869 @item La création de processus adaptative
17870 @item Des statistiques de base (comme le mod_status d'Apache)
17871 @item La gestion des processus avancée avec arrêt et démarrage sans heurts
17872 @item La possibilité de démarrer des processus de travail avec différents uid/gid/chroot/environnement
17873 et différents php.ini (à la place de safe_mode)
17874 @item L'enregistrement des journaux sur stdout et stderr
17875 @item Le redémarrage d'urgence dans le cas de la destruction accidentelle du cache des opcodes
17876 @item Le support des téléversements accélérés
17877 @item Le support de « showlog »
17878 @item Des améliorations à FastCGI, comme fastcgi_finish_request() -
17879 une fonction spéciale pour terminer la requête et nettoyer toutes les
17880 données tout en continuant à faire d'autres choses qui prennent du temps
17881 (conversion vidéo, gestion des stats, etc…).
17882 @end itemize
17883 ...@: and much more.
17884
17885 @defvr {Variable Scheme} php-fpm-service-type
17886 Un type de service pour @code{php-fpm}.
17887 @end defvr
17888
17889 @deftp {Type de données} php-fpm-configuration
17890 Type de données pour la configuration du service php-fpm.
17891 @table @asis
17892 @item @code{php} (par défaut : @code{php})
17893 Le paquet php à utiliser.
17894 @item @code{socket} (par défaut : @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.sock")})
17895 L'adresse sur laquelle accepter les requêts FastCGI. Les syntaxes valides
17896 sont :
17897 @table @asis
17898 @item @code{"ip.add.re.ss:port"}
17899 Écoute sur un socket TCP sur l'adresse spécifiée sur un port spécifié.
17900 @item @code{"port"}
17901 Écoute sur un socket TCP sur toutes les adresse sur un port spécifique.
17902 @item @code{"/path/to/unix/socket"}
17903 Écoute sur un socket unix.
17904 @end table
17905
17906 @item @code{user} (par défaut : @code{php-fpm})
17907 Utilisateur à qui appartiendra le processus de travail de php.
17908 @item @code{group} (par défaut : @code{php-fpm})
17909 Groupe du processus de travail.
17910 @item @code{socket-user} (par défaut : @code{php-fpm})
17911 Utilisateur qui peut parler au socket php-fpm.
17912 @item @code{socket-group} (par défaut : @code{php-fpm})
17913 Groupe qui peut parler au socket php-fpm.
17914 @item @code{pid-file} (par défaut : @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.pid")})
17915 Le pid de php-fpm est écrit dans ce fichier une fois que le service a
17916 démarré.
17917 @item @code{log-file} (par défaut : @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.log")})
17918 Fichier de journal pour le processus maître de php-fpm.
17919 @item @code{process-manager} (par défaut : @code{(php-fpm-dynamic-process-manager-configuration)})
17920 Configuration détaillée pour le gestionnaire de processus de php-fpm. Il
17921 doit s'agir soit de :
17922 @table @asis
17923 @item @code{<php-fpm-dynamic-process-manager-configuration>,}
17924 @item @code{<php-fpm-static-process-manager-configuration> ou}
17925 @item @code{<php-fpm-on-demand-process-manager-configuration>}
17926 @end table
17927 @item @code{display-errors} (par défaut : @code{#f})
17928 Détermine si les erreurs et les avertissements php doivent être envoyés aux
17929 clients et affichés dans leur navigateur. Cela est utile pour un
17930 développement php local, mais un risque pour la sécurité pour les sites
17931 publics, comme les messages d'erreur peuvent révéler des mots de passes et
17932 des données personnelles.
17933 @item @code{workers-logfile} (par défaut : @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.www.log")})
17934 Ce fichier enregistrera la sortie @code{stderr} des processus de travail de
17935 php. On peut indiquer @code{#f} pour désactiver la journalisation.
17936 @item @code{file} (par défaut : @code{#f})
17937 Une version alternative de la configuration complète. Vous pouvez utiliser
17938 la fonction @code{mixed-text-file} ou un chemin de fichier absolu.
17939 @end table
17940 @end deftp
17941
17942 @deftp {Type de données} php-fpm-dynamic-process-manager-configuration
17943 Type de données pour le gestionnaire de processus @code{dynamic} de
17944 php-fpm. Avec le gestionnaire de processus @code{dynamic}, des processus de
17945 travail de secours sont gardés en fonction des limites configurées.
17946 @table @asis
17947 @item @code{max-children} (par défaut : @code{5})
17948 Nombre maximum de processus de travail.
17949 @item @code{start-servers} (par défaut : @code{2})
17950 Nombre de processus de travail au démarrage.
17951 @item @code{min-spare-servers} (par défaut : @code{1})
17952 Nombre de processus de travail de secours minimum qui doivent rester à
17953 disposition.
17954 @item @code{max-spare-servers} (par défaut : @code{3})
17955 Nombre maximum de processus de travail de secours qui peuvent rester à
17956 disposition.
17957 @end table
17958 @end deftp
17959
17960 @deftp {Type de données} php-fpm-static-process-manager-configuration
17961 Type de données pour le gestionnaire de processus @code{static} de php-fpm.
17962 Avec le gestionnaire de processus @code{static}, un nombre constant de
17963 processus de travail est créé.
17964 @table @asis
17965 @item @code{max-children} (par défaut : @code{5})
17966 Nombre maximum de processus de travail.
17967 @end table
17968 @end deftp
17969
17970 @deftp {Type de données} php-fpm-on-demand-process-manager-configuration
17971 Type de données pour le gestionnaire de processus @code{on-demand} de
17972 php-fpm. Avec le gestionnaire de processus @code{on-demand}, les processus
17973 de travail ne sont créés que lorsque les requêtes arrivent.
17974 @table @asis
17975 @item @code{max-children} (par défaut : @code{5})
17976 Nombre maximum de processus de travail.
17977 @item @code{process-idle-timeout} (par défaut : @code{10})
17978 La durée en secondes après laquelle un processus sans requête sera tué.
17979 @end table
17980 @end deftp
17981
17982
17983 @deffn {Procédure Scheme} nginx-php-fpm-location @
17984 [#:nginx-package nginx] @
17985 [socket (string-append "/var/run/php" @
17986 (version-major (package-version php)) @
17987 "-fpm.sock")]
17988 Une fonction d'aide pour ajouter rapidement php à un
17989 @code{nginx-server-configuration}.
17990 @end deffn
17991
17992 Une configuration simple de services pour php ressemble à ceci :
17993 @example
17994 (services (cons* (service dhcp-client-service-type)
17995 (service php-fpm-service-type)
17996 (service nginx-service-type
17997 (nginx-server-configuration
17998 (server-name '("example.com"))
17999 (root "/srv/http/")
18000 (locations
18001 (list (nginx-php-location)))
18002 (https-port #f)
18003 (ssl-certificate #f)
18004 (ssl-certificate-key #f)))
18005 %base-services))
18006 @end example
18007
18008 @cindex cat-avatar-generator
18009 Le générateur d'avatar de chat est un simple service pour démontrer
18010 l'utilisation de php-fpm dans @code{Nginx}. Il permet de générer des
18011 avatars de chats à partir d'une graine, par exemple le hash de l'adresse de
18012 courriel d'un utilisateur.
18013
18014 @deffn {Procédure Scheme} cat-avatar-generator-serice @
18015 [#:cache-dir "/var/cache/cat-avatar-generator"] @
18016 [#:package cat-avatar-generator] @
18017 [#:configuration (nginx-server-configuration)]
18018 Renvoie un nginx-server-configuration qui hérite de @code{configuration}.
18019 Il étend la configuration nginx pour ajouter un bloc de serveur qui sert
18020 @code{package}, une version de cat-avatar-generator. Pendant l'exécution,
18021 cat-avatar-generator pourra utiliser @code{cache-dir} comme répertoire de
18022 cache.
18023 @end deffn
18024
18025 Une configuration simple de cat-avatar-generator ressemble à ceci :
18026 @example
18027 (services (cons* (cat-avatar-generator-service
18028 #:configuration
18029 (nginx-server-configuration
18030 (server-name '("example.com"))))
18031 ...
18032 %base-services))
18033 @end example
18034
18035 @subsubheading Hpcguix-web
18036
18037 @cindex hpcguix-web
18038 Le programme @uref{hpcguix-web,
18039 https://github.com/UMCUGenetics/hpcguix-web/} est une interface web
18040 personnalisable pour naviguer dans les paquets Guix, initialement conçue
18041 pour les utilisateurs des grappes de calcul de haute performance (HPC).
18042
18043 @defvr {Variable Scheme} hpcguix-web-service-type
18044 Le type de service pour @code{hpcguix-web}.
18045 @end defvr
18046
18047 @deftp {Type de données} hpcguix-web-configuration
18048 Type de données pour la configuration du service hpcguix-web.
18049
18050 @table @asis
18051 @item @code{specs}
18052 Une gexp (@pxref{G-Expressions}) spécifiant la configuration du service
18053 hpcguix-web. Les éléments principaux disponibles dans cette spec sont :
18054
18055 @table @asis
18056 @item @code{title-prefix} (par défaut : @code{"hpcguix | "})
18057 Le préfixe du titre des pages.
18058
18059 @item @code{guix-command} (par défaut : @code{"guix"})
18060 La commande @command{guix}
18061
18062 @item @code{package-filter-proc} (par défaut : @code{(const #t)})
18063 Une procédure qui spécifie comment filtrer les paquets qui seront affichés.
18064
18065 @item @code{package-page-extension-proc} (par défaut : @code{(const '())})
18066 Paquet d'extensions pour @code{hpcguix-web}.
18067
18068 @item @code{menu} (par défaut : @code{'()})
18069 Entrée supplémentaire dans la page @code{menu}.
18070
18071 @item @code{channels} (par défaut : @code{%default-channels})
18072 Liste des canaux depuis lesquels la liste des paquets est construite
18073 (@pxref{Canaux}).
18074
18075 @item @code{package-list-expiration} (par défaut : @code{(* 12 3600)})
18076 Le temps d'expiration, en secondes, après lequel la liste des paquets est
18077 reconstruite depuis les dernières instance des canaux donnés.
18078 @end table
18079
18080 Voir le dépôt hpcguix-web pour un
18081 @uref{https://github.com/UMCUGenetics/hpcguix-web/blob/master/hpcweb-configuration.scm,
18082 exemple complet}
18083
18084 @item @code{package} (par défaut : @code{hpcguix-web})
18085 Le paquet hpcguix-web à utiliser.
18086 @end table
18087 @end deftp
18088
18089 Une déclaration de service hpcguix-web typique ressemble à cela :
18090
18091 @example
18092 (service hpcguix-web-service-type
18093 (hpcguix-web-configuration
18094 (specs
18095 #~(define site-config
18096 (hpcweb-configuration
18097 (title-prefix "Guix-HPC - ")
18098 (menu '(("/about" "ABOUT"))))))))
18099 @end example
18100
18101 @quotation Remarque
18102 Le service hpcguix-web met régulièrement à jour la liste des paquets qu'il
18103 publie en récupérant les canaux depuis Git. Pour cela, il doit accéder aux
18104 certificats X.509 pour qu'il puisse authentifier les serveurs Git quand il
18105 communique en HTTPS, et il suppose que @file{/etc/ssl/certs} contient ces
18106 certificats.
18107
18108 Ainsi, assurez-vous d'ajouter @code{nss-certs} ou un autre paquet de
18109 certificats dans le champ @code{packages} de votre configuration.
18110 @ref{Certificats X.509} pour plus d'informations sur les certificats X.509.
18111 @end quotation
18112
18113 @node Services de certificats
18114 @subsubsection Services de certificats
18115
18116 @cindex Web
18117 @cindex HTTP, HTTPS
18118 @cindex Let's Encrypt
18119 @cindex certificats TLS
18120 Le module @code{(gnu services certbot)} fournit un service qui récupère
18121 automatiquement un certificat TLS valide de l'autorité de certification
18122 Let's Encrypt. Ces certificats peuvent ensuite être utilisés pour servir du
18123 contenu de manière sécurisée sur HTTPS et d'autres protocoles basés sur TLS,
18124 en sachant que le client sera capable de vérifier l'authenticité du serveur.
18125
18126 @url{https://letsencrypt.org/, Let's Encrypt} fournit l'outil @code{certbot}
18127 pour automatiser le processus de certification. Cet outil génère d'abord un
18128 clef sur le serveur de manière sécurisée. Ensuite il demande à l'autorité
18129 de certification Let's Encrypt de signer la clef. La CA vérifie que la
18130 requête provient de l'hôte en question en utilisant un protocole de
18131 défi-réponse, ce qui requiert que le serveur fournisse sa réponse par HTTP.
18132 Si ce protocole se passe sans encombre, la CA signe la clef et on obtient un
18133 certificat. Ce certificat est valide pour une durée limitée et donc, pour
18134 continuer à fournir des services en TLS, le serveur doit régulièrement
18135 demander à la CA de renouveler sa signature.
18136
18137 The certbot service automates this process: the initial key generation, the
18138 initial certification request to the Let's Encrypt service, the web server
18139 challenge/response integration, writing the certificate to disk, the
18140 automated periodic renewals, and the deployment tasks associated with the
18141 renewal (e.g.@: reloading services, copying keys with different
18142 permissions).
18143
18144 Certbot est lancé deux fois par jour, à une minute aléatoire dans l'heure.
18145 Il ne fera rien sauf si vos certificats doivent être renouvelés ou sont
18146 révoqués, mais le lancer régulièrement permettra à vos services de rester en
18147 ligne si Let's Encrypt décide de révoquer votre certificat.
18148
18149 En utilisant ce service, vous acceptez le document « ACME Subscriber
18150 Agreement », qu'on peut trouver ici :
18151 @url{https://acme-v01.api.letsencrypt.org/directory}.
18152
18153 @defvr {Variable Scheme} certbot-service-type
18154 Un type de service pour le client Let's Encrypt @code{certbot}. Sa valeur
18155 doit être un enregistrement @code{certbot-configuration} comme dans cet
18156 exemple :
18157
18158 @example
18159 (define %nginx-deploy-hook
18160 (program-file
18161 "nginx-deploy-hook"
18162 #~(let ((pid (call-with-input-file "/var/run/nginx/pid" read)))
18163 (kill pid SIGHUP))))
18164
18165 (service certbot-service-type
18166 (certbot-configuration
18167 (email "foo@@example.net")
18168 (certificates
18169 (list
18170 (certificate-configuration
18171 (domains '("example.net" "www.example.net"))
18172 (deploy-hook %nginx-deploy-hook))
18173 (certificate-configuration
18174 (domains '("bar.example.net")))))))
18175 @end example
18176
18177 Voir plus bas pour des détails sur @code{certbot-configuration}.
18178 @end defvr
18179
18180 @deftp {Type de données} certbot-configuration
18181 Type données représentant la configuration du service @code{certbot}. Ce
18182 type a les paramètres suivants :
18183
18184 @table @asis
18185 @item @code{package} (par défaut : @code{certbot})
18186 Le paquet certbot à utiliser.
18187
18188 @item @code{webroot} (par défaut : @code{/var/www})
18189 Le répertoire depuis lequel servir les fichiers du défi/réponse de Let's
18190 Encrypt.
18191
18192 @item @code{certificates} (par défaut : @code{()})
18193 Une liste de @code{certificates-configuration} pour lesquels générer des
18194 certificats et demander des signatures. Chaque certificat a un @code{name}
18195 et plusieurs @code{domains}.
18196
18197 @item @code{email}
18198 Courriel obligatoire utilisé pour la création de compte, le contact en cas
18199 de problème et des notifications importantes sur le compte.
18200
18201 @item @code{rsa-key-size} (par défaut : @code{2048})
18202 Taille de la clef RSA.
18203
18204 @item @code{default-location} (par défaut : @i{voir plus bas})
18205 Le @code{nginx-location-configuration} par défaut. Come @code{certbot} doit
18206 pouvoir servir les défis et les réponses, il doit être capable de lancer un
18207 serveur web. Cela se fait en étendant le service web @code{nginx} avec un
18208 @code{nginx-server-configuration} qui écoute sur les @var{domains} sur le
18209 port 80 et qui a un @code{nginx-location-configuration} pour le chemin
18210 @code{/.well-known/} utilisé par Let's Encrypt. @xref{Services web} pour
18211 plus d'information sur les types de données de la configuration de nginx.
18212
18213 Les requêtes vers d'autres URL correspondra à @code{default-location}, qui,
18214 s'il est présent, sera ajout é à tous les @code{nginx-server-configuration}.
18215
18216 Par défaut, le @code{default-location} sera une redirection de
18217 @code{http://@var{domain}/…} vers @code{https://@var{domain}/…}, en vous
18218 laissant définir ce que vous voulez servir sur votre site en @code{https}.
18219
18220 Passez @code{#f} pour ne pas utiliser de location par défaut.
18221 @end table
18222 @end deftp
18223
18224 @deftp {Type de données} certificate-configuration
18225 Type de données représentant la configuration d'un certificat. Ce type a
18226 les paramètres suivants :
18227
18228 @table @asis
18229 @item @code{name} (par défaut : @i{voir plus bas})
18230 Ce nom est utilisé par Certbot pour ses tâches quotidiennes et dans les
18231 chemins de fichiers ; il n'affecte pas le contenu des certificats
18232 eux-mêmes. Pour voir les noms des certificats, lancez @code{certbot
18233 certificates}.
18234
18235 Sa valeur par défaut est le premier domaine spécifié.
18236
18237 @item @code{domains} (par défaut : @code{()})
18238 Le premier domaine spécifié sera le CN du sujet du certificat, et tous les
18239 domaines seront les noms alternatifs du sujet dans le certificat.
18240
18241 @item @code{deploy-hook} (par défaut : @code{#f})
18242 Commande à lancer dans un shell une fois par certificat récupéré avec
18243 succès. Pour cette commande, la variable @code{$RENEWED_LINEAGE} pointera
18244 sur le sous-répertoire live (par exemple,
18245 @samp{"/etc/letsencrypt/live/example.com"}) contenant le nouveau certificat
18246 et la clef ; la variable @code{$RENEWED_DOMAINS} contiendra les noms de
18247 domaines séparés par des espaces (par exemple @samp{"example.com
18248 www.example.com"}).
18249
18250 @end table
18251 @end deftp
18252
18253 Pour chaque @code{certificate-configuration}, le certificat est sauvegardé
18254 dans @code{/etc/letsencrypt/live/@var{name}/fullchain.pem} et la clef est
18255 sauvegardée dans @code{/etc/letsencrypt/live/@var{name}/privkey.pem}.
18256 @node Services DNS
18257 @subsubsection Services DNS
18258 @cindex DNS (domain name system)
18259 @cindex domain name system (DNS)
18260
18261 Le module @code{(gnu services dns)} fournit des services liés au
18262 @dfn{système de noms de domaines} (DNS). Il fournit un service de serveur
18263 pour héberger un serveur DNS @emph{faisant autorité} pour plusieurs zones,
18264 en esclave ou en maître. Ce service utilise @uref{https://www.knot-dns.cz/,
18265 Knot DNS}. Il fournit aussi un service de cache et de renvoie DNS pour le
18266 LAN, qui utilise @uref{http://www.thekelleys.org.uk/dnsmasq/doc.html,
18267 dnsmasq}.
18268
18269 @subsubheading Service Knot
18270
18271 Voici un exemple de configuration pour un serveur faisant autorité sur deux
18272 zone, un maître et un esclave :
18273
18274 @lisp
18275 (define-zone-entries example.org.zone
18276 ;; Name TTL Class Type Data
18277 ("@@" "" "IN" "A" "127.0.0.1")
18278 ("@@" "" "IN" "NS" "ns")
18279 ("ns" "" "IN" "A" "127.0.0.1"))
18280
18281 (define master-zone
18282 (knot-zone-configuration
18283 (domain "example.org")
18284 (zone (zone-file
18285 (origin "example.org")
18286 (entries example.org.zone)))))
18287
18288 (define slave-zone
18289 (knot-zone-configuration
18290 (domain "plop.org")
18291 (dnssec-policy "default")
18292 (master (list "plop-master"))))
18293
18294 (define plop-master
18295 (knot-remote-configuration
18296 (id "plop-master")
18297 (address (list "208.76.58.171"))))
18298
18299 (operating-system
18300 ;; ...
18301 (services (cons* (service knot-service-type
18302 (knot-configuration
18303 (remotes (list plop-master))
18304 (zones (list master-zone slave-zone))))
18305 ;; ...
18306 %base-services)))
18307 @end lisp
18308
18309 @deffn {Variable Scheme} knot-service-type
18310 C'est le type pour le serveur DNS Knot.
18311
18312 Knot DNS est un serveur DNS faisant autorité, ce qui signifie qu'il peut
18313 servir plusieurs zones, c'est-à-dire des noms de domaines que vous achetez à
18314 un registrar. Ce serveur n'est pas un résolveur, ce qui signifie qu'il ne
18315 peut pas résoudre les noms pour lesquels il ne fait pas autorité. Ce
18316 serveur peut être configuré pour servir des zones comme un serveur maître ou
18317 comme un serveur esclave, en fonction des zones. Les zones esclaves
18318 récupèrent leurs données des maîtres, et seront servies comme faisant
18319 autorité. Du point de vue d'un résolveur, il n'y a pas de différence entre
18320 un maître et un esclave@footnote{NdT : Voir la conférence en Français de
18321 Stéphane Bortzmeyer pour en apprendre plus sur le DNS :
18322 @url{https://iletaitunefoisinternet.fr/dns-bortzmeyer/index.html}}.
18323
18324 Les types de données suivants sont utilisés pour configurer le serveur DNS
18325 Knot :
18326 @end deffn
18327
18328 @deftp {Type de données} knot-key-configuration
18329 Type de données représentant une clef. Ce type a les paramètres suivants :
18330
18331 @table @asis
18332 @item @code{id} (par défaut : @code{""})
18333 Un identifiant pour d'autres champs de configuration qui se réfèrent à cette
18334 clef. Les ID doivent être uniques et non vides.
18335
18336 @item @code{algorithm} (par défaut : @code{#f})
18337 L'algorithme à utiliser. Choisissez entre @code{#f}, @code{'hmac-md5},
18338 @code{'hmac-sha1}, @code{'hmac-sha224}, @code{'hmac-sha256},
18339 @code{'hmac-sha384} et @code{'hmac-sha512}.
18340
18341 @item @code{secret} (par défaut : @code{""})
18342 La clef secrète elle-même.
18343
18344 @end table
18345 @end deftp
18346
18347 @deftp {Type de données} knot-acl-configuration
18348 Type de données représentant une configuration de liste de contrôle d'accès
18349 (ACL). Ce type a les paramètres suivants :
18350
18351 @table @asis
18352 @item @code{id} (par défaut : @code{""})
18353 Un identifiant pour d'autres champs de configuration qui se réfèrent à cette
18354 clef. Les ID doivent être uniques et non vides.
18355
18356 @item @code{address} (par défaut : @code{'()})
18357 Une liste ordonnée d'adresses IP, de sous-réseaux ou d'intervalles de
18358 réseaux représentés par des chaînes de caractères. La requête doit
18359 correspondre à l'une d'entre elles. La valeur vide signifie que l'adresse
18360 n'a pas besoin de correspondre.
18361
18362 @item @code{key} (par défaut : @code{'()})
18363 Une liste ordonnées de références à des clefs représentés par des chaînes.
18364 La chaîne doit correspondre à un ID définie dans un
18365 @code{knot-key-configuration}. Aucune clef signifie qu'une clef n'est pas
18366 nécessaire pour correspondre à l'ACL.
18367
18368 @item @code{action} (par défaut : @code{'()})
18369 Une liste ordonnée d'actions permises ou interdites par cet ACL. Les
18370 valeurs possibles sont une liste de zéro ou plus d'éléments entre
18371 @code{'transfer}, @code{'notify} et @code{'update}.
18372
18373 @item @code{deny?} (par défaut : @code{#f})
18374 Lorsque la valeur est vraie, l'ACL définie des restrictions. Les actions
18375 listées sont interdites. Lorsque la valeur est fausse, les actions listées
18376 sont autorisées.
18377
18378 @end table
18379 @end deftp
18380
18381 @deftp {Type de données} zone-entry
18382 Type de données représentant une entrée dans un fichier de zone. Ce type a
18383 les paramètres suivants :
18384
18385 @table @asis
18386 @item @code{name} (par défaut : @code{"@@"})
18387 Le nom de l'enregistrement. @code{"@@"} se réfère à l'origine de la zone.
18388 Les noms sont relatifs à l'origine de la zone. Par exemple, dans la zone
18389 @code{example.org}, @code{"ns.example.org"} se réfère en fait à
18390 @code{ns.example.org.example.org}. Les noms qui finissent par un point sont
18391 absolus, ce qui signifie que @code{"ns.example.org."} se réfère bien à
18392 @code{ns.example.org}.
18393
18394 @item @code{ttl} (par défaut : @code{""})
18395 La durée de vie (TTL) de cet enregistrement. S'il n'est pas indiqué, le TTL
18396 par défaut est utilisé.
18397
18398 @item @code{class} (par défaut : @code{"IN"})
18399 La classe de l'enregistrement. Knot ne supporte actuellement que
18400 @code{"IN"} et partiellement @code{"CH"}.
18401
18402 @item @code{type} (par défaut : @code{"A"})
18403 Le type d'enregistrement. Les types usuels sont A (une adresse IPv4), NS
18404 (serveur de nom) et MX (serveur de courriel). Bien d'autres types sont
18405 définis.
18406
18407 @item @code{data} (par défaut : @code{""})
18408 Les données contenues dans l'enregistrement. Par exemple une adresse IP
18409 associée à un enregistrement A, ou un nom de domaine associé à un
18410 enregistrement NS. Rappelez-vous que les noms de domaines sont relatifs à
18411 l'origine à moins qu'ils ne finissent par un point.
18412
18413 @end table
18414 @end deftp
18415
18416 @deftp {Type de données} zone-file
18417 Type données représentant le contenu d'un fichier de zone. Ce type a les
18418 paramètres suivants :
18419
18420 @table @asis
18421 @item @code{entries} (par défaut : @code{'()})
18422 La liste des entrées. On s'occupe de l'enregistrement SOA, donc vous n'avez
18423 pas besoin de l'ajouter dans la liste des entrées. Cette liste devrait
18424 contenir une entrée pour votre serveur DNS primaire faisant autorité. En
18425 plus d'utiliser une liste des entrées directement, vous pouvez utiliser
18426 @code{define-zone-entries} pour définir un objet contenant la liste des
18427 entrées plus facilement, que vous pouvez ensuite passer au champ
18428 @code{entries} de @code{zone-file}.
18429
18430 @item @code{origin} (par défaut : @code{""})
18431 Le nom de votre zone. Ce paramètre ne peut pas être vide.
18432
18433 @item @code{ns} (par défaut : @code{"ns"})
18434 Le domaine de votre serveur DNS primaire faisant autorité. Le nom est
18435 relatif à l'origine, à moins qu'il finisse par un point. Il est nécessaire
18436 que ce serveur DNS primaire corresponde à un enregistrement NS dans la zone
18437 et qu'il soit associé à une adresse IP dans la liste des entrées.
18438
18439 @item @code{mail} (par défaut : @code{"hostmaster"})
18440 Une adresse de courriel pour vous contacter en tant que propriétaire de la
18441 zone. Cela se transforme en @code{<mail>@@<origin>}.
18442
18443 @item @code{serial} (par défaut : @code{1})
18444 Le numéro de série de la zone. Comme c'est utilisé pour vérifier les
18445 changements à la fois par les esclaves et par les résolveurs, il est
18446 nécessaire qu'il ne décroisse @emph{jamais}. Incrémentez-le toujours quand
18447 vous faites un changement sur votre zone.
18448
18449 @item @code{refresh} (par défaut : @code{(* 2 24 3600)})
18450 La fréquence à laquelle les esclaves demanderont un transfert de zone.
18451 Cette valeur est un nombre de secondes. On peut le calculer avec des
18452 multiplications ou avec @code{(string->duration)}.
18453
18454 @item @code{retry} (par défaut : @code{(* 15 60)})
18455 La période après laquelle un esclave essaiera de contacter son maître
18456 lorsqu'il échoue à le faire la première fois.
18457
18458 @item @code{expiry} (par défaut : @code{(* 14 24 3600)})
18459 TTL par défaut des enregistrements. Les enregistrements existants sont
18460 considérés corrects pour au moins cette durée. Après cette période, les
18461 résolveurs invalideront leur cache et vérifieront de nouveau qu'ils existent
18462 toujours.
18463
18464 @item @code{nx} (par défaut : @code{3600})
18465 TTL par défaut des enregistrement inexistants. Ce TTL est habituellement
18466 court parce que vous voulez que vous nouveaux domaines soient disponibles
18467 pour tout le monde le plus rapidement possible.
18468
18469 @end table
18470 @end deftp
18471
18472 @deftp {Type de données} knot-remote-configuration
18473 Type de données représentant une configuration de serveurs distants. Ce
18474 type a les paramètres suivants :
18475
18476 @table @asis
18477 @item @code{id} (par défaut : @code{""})
18478 Un identifiant pour que les autres champs de configuration se réfèrent à ce
18479 serveur distant. les ID doivent être uniques et non vides.
18480
18481 @item @code{address} (par défaut : @code{'()})
18482 Une liste ordonnée d'adresses IP de destination. Ces adresses sont essayées
18483 en séquence. Un port facultatif peut être donné avec le séparateur @@. Par
18484 exemple @code{(list "1.2.3.4" "2.3.4.5@@53")}. Le port par défaut est le
18485 53.
18486
18487 @item @code{via} (par défaut : @code{'()})
18488 Une liste ordonnée d'adresses IP sources. Une liste vide fera choisir une
18489 IP source appropriée à Knot. Un port facultatif peut être donné avec le
18490 séparateur @@. La valeur par défaut est de choisir aléatoirement.
18491
18492 @item @code{key} (par défaut : @code{#f})
18493 Une référence à une clef, c'est-à-dire une chaîne contenant l'identifiant
18494 d'une clef définie dans un champ @code{knot-key-configuration}.
18495
18496 @end table
18497 @end deftp
18498
18499 @deftp {Type de données} knot-keystore-configuration
18500 Type de données représentant une base de clefs pour garder les clefs
18501 dnssec. Ce type a les paramètres suivants :
18502
18503 @table @asis
18504 @item @code{id} (par défaut : @code{""})
18505 L'id de cette base de clefs. Il ne doit pas être vide.
18506
18507 @item @code{backend} (par défaut : @code{'pem})
18508 Le moteur de stockage des clefs. Cela peut être @code{'pem} ou
18509 @code{'pkcs11}.
18510
18511 @item @code{config} (par défaut : @code{"/var/lib/knot/keys/keys"})
18512 La chaîne de configuration pour le moteur. Voici un exemple pour PKCS#11 :
18513 @code{"pkcs11:token=knot;pin-value=1234
18514 /gnu/store/.../lib/pkcs11/libsofthsm2.so"}. Pour le moteur pem, la chaîne
18515 représente un chemin dans le système de fichiers.
18516
18517 @end table
18518 @end deftp
18519
18520 @deftp {Type de données} knot-policy-configuration
18521 Type de données représentant une politique dnssec. Knot DNS est capable de
18522 signer automatiquement vos zones. Il peut soit générer et gérer vos clefs
18523 automatiquement ou utiliser des clefs que vous générez.
18524
18525 Dnssec est habituellement implémenté avec deux clefs : une KSK (key signing
18526 key) qui est utilisé pour signer une seconde, la ZSK (zone signing key) qui
18527 est utilisée pour signer la zone. Pour pouvoir être de confiance, la KSK
18528 doit être présente dans la zone parente (normalement un domaine de haut
18529 niveau). Si votre registrar supporte dnssec, vous devrez leur envoyer le
18530 hash de votre KSK pour qu'il puisse ajouter un enregistrement DS dans la
18531 zone parente. Ce n'est pas automatique et vous devrez le faire à chaque
18532 fois que vous changerez votre KSK.
18533
18534 La politique définie aussi la durée de vie des clefs. Habituellement, la
18535 ZSK peut être changée facilement et utilise des fonctions cryptographiques
18536 plus faibles (avec un paramètre plus faible) pour signer les enregistrements
18537 rapidement, donc elles sont changées très régulièrement. La KSK en revanche
18538 requiert une interaction manuelle avec le registrar, donc elle change moins
18539 souvent et utilise des paramètres plus robustes puisqu'elle ne signe qu'un
18540 seul enregistrement.
18541
18542 Ce type a les paramètres suivants :
18543
18544 @table @asis
18545 @item @code{id} (par défaut : @code{""})
18546 L'id de la politique. Il ne doit pas être vide.
18547
18548 @item @code{keystore} (par défaut : @code{"default"})
18549 Une référence à une base de clefs, c'est-à-dire une chaîne contenant
18550 l'identifiant d'une base de clefs définie dans un champ
18551 @code{knot-keystore-configuration}. L'identifiant @code{"default"} signifie
18552 la base par défaut (une base de données kasp initialisée par ce service).
18553
18554 @item @code{manual?} (par défaut : @code{#f})
18555 Indique si la clef est gérée manuellement ou automatiquement.
18556
18557 @item @code{single-type-signing?} (par défaut : @code{#f})
18558 Lorsque la valeur est @code{#t}, utilise le schéma de signature Single-Type
18559
18560 @item @code{algorithm} (par défaut : @code{"ecdsap256sha256"})
18561 Un algorithme de clef de signature et de signatures.
18562
18563 @item @code{ksk-size} (par défaut : @code{256})
18564 La longueur de la KSK. Remarquez que cette valeur est correcte pour
18565 l'algorithme par défaut, mais ne serait pas sécurisée pour d'autres
18566 algorithmes.
18567
18568 @item @code{zsk-size} (par défaut : @code{256})
18569 La longueur de la ZSK. Remarquez que cette valeur est correcte pour
18570 l'algorithme par défaut, mais ne serait pas sécurisée pour d'autres
18571 algorithmes.
18572
18573 @item @code{dnskey-ttl} (par défaut : @code{'default})
18574 La valeur du TTL pour les enregistrements DNSKEY ajoutés au sommet de la
18575 zone. La valeur spéciale @code{'default} signifie la même valeur que le TTL
18576 du SOA de la zone.
18577
18578 @item @code{zsk-lifetime} (par défaut : @code{(* 30 24 3600)})
18579 La période entre la publication d'une ZSK et l'initialisation d'un nouveau
18580 changement.
18581
18582 @item @code{propagation-delay} (par défaut : @code{(* 24 3600)})
18583 Un délai supplémentaire pour chaque étape du changement. Cette valeur
18584 devrait être assez grande pour couvrir le temps de propagation des données
18585 entre le serveur primaire et tous les secondaires.
18586
18587 @item @code{rrsig-lifetime} (par défaut : @code{(* 14 24 3600)})
18588 Une période de validité des nouvelles signatures.
18589
18590 @item @code{rrsig-refresh} (par défaut : @code{(* 7 24 3600)})
18591 Une période qui indique combien de temps avant l'expiration d'une signature
18592 elle sera rafraîchie.
18593
18594 @item @code{nsec3?} (par défaut : @code{#f})
18595 Lorsque la valeur est @code{#t}, on utilisera NSEC3 au lien de NSEC.
18596
18597 @item @code{nsec3-iterations} (par défaut : @code{5})
18598 Le nombre de fois supplémentaires que le hash est effectué.
18599
18600 @item @code{nsec3-salt-length} (par défaut : @code{8})
18601 La longueur du champ de sel en octets, ajouté au nom du propriétaire avant
18602 de hasher.
18603
18604 @item @code{nsec3-salt-lifetime} (par défaut : @code{(* 30 24 3600)})
18605 La période de validité des nouveaux champs sel.
18606
18607 @end table
18608 @end deftp
18609
18610 @deftp {Type de données} knot-zone-configuration
18611 Type de données représentant la zone servie par Knot. ce type a les
18612 paramètres suivants :
18613
18614 @table @asis
18615 @item @code{domain} (par défaut : @code{""})
18616 Le domaine servi par cette configuration. Il ne doit pas être vide.
18617
18618 @item @code{file} (par défaut : @code{""})
18619 Le fichier où la zone est sauvegardée. Ce paramètre est ignoré pour les
18620 zones maîtres. La valeur vide signifie l'emplacement par défaut qui dépend
18621 du nom de domaine.
18622
18623 @item @code{zone} (par défaut : @code{(zone-file)})
18624 Le contenu du fichier de zone. Ce paramètre est ignoré par les zones
18625 esclaves. Il doit contenir un enregistrement zone-file.
18626
18627 @item @code{master} (par défaut : @code{'()})
18628 Une liste des serveurs distants maîtres. Lorsque la liste est vide, cette
18629 zone est un maître. Lorsque la valeur est indiquée, cette zone est un
18630 esclave. C'est al liste des identifiants des serveurs distants.
18631
18632 @item @code{ddns-master} (par défaut : @code{#f})
18633 Le maître principal. Lorsque la valeur est vide, la valeur par défaut est
18634 le premier maître de la liste des maîtres.
18635
18636 @item @code{notify} (par défaut : @code{'()})
18637 Une liste d'identifiants de groupe de serveurs esclaves.
18638
18639 @item @code{acl} (par défaut : @code{'()})
18640 Une liste d'identifiants d'ACL.
18641
18642 @item @code{semantic-checks?} (par défaut : @code{#f})
18643 Lorsque la valeur est indiquée, cela ajoute plus de vérifications
18644 sémantiques à la zone.
18645
18646 @item @code{disable-any?} (par défaut : @code{#f})
18647 Lorsque la valeur est vraie, cela interdit les requêtes de type ANY.
18648
18649 @item @code{zonefile-sync} (par défaut : @code{0})
18650 Le délai entre une modification en mémoire et sur le disque. 0 signifie une
18651 synchronisation immédiate.
18652
18653 @item @code{serial-policy} (par défaut : @code{'increment})
18654 Une politique entre @code{'increment} et @code{'unixtime}.
18655
18656 @end table
18657 @end deftp
18658
18659 @deftp {Type de données} knot-configuration
18660 Type de donées représentant la configuration de Knot. Ce type a les
18661 paramètres suivants :
18662
18663 @table @asis
18664 @item @code{knot} (par défaut : @code{knot})
18665 Le paquet Knot.
18666
18667 @item @code{run-directory} (par défaut : @code{"/var/run/knot"})
18668 Le répertoire de travail. Ce répertoire sera utilisé pour le fichier pid et
18669 les sockets.
18670
18671 @item @code{listen-v4} (par défaut : @code{"0.0.0.0"})
18672 Une adresse IP sur laquelle écouter.
18673
18674 @item @code{listen-v6} (par défaut : @code{"::"})
18675 Une adresse IP sur laquelle écouter.
18676
18677 @item @code{listen-port} (par défaut : @code{53})
18678 Un port sur lequel écouter.
18679
18680 @item @code{keys} (par défaut : @code{'()})
18681 La liste des knot-key-configuration utilisés par cette configuration.
18682
18683 @item @code{acls} (par défaut : @code{'()})
18684 La liste des knot-acl-configuration utilisés par cette configuration.
18685
18686 @item @code{remotes} (par défaut : @code{'()})
18687 La liste des knot-remote-configuration utilisés par cette configuration.
18688
18689 @item @code{zones} (par défaut : @code{'()})
18690 La liste des knot-zone-configuration utilisés par cette configuration.
18691
18692 @end table
18693 @end deftp
18694
18695 @subsubheading Services Dnsmasq
18696
18697 @deffn {Variable Scheme} dnsmasq-service-type
18698 C'est le type du service dnsmasq, dont la valeur devrait être un objet
18699 @code{dnsmasq-configuration} comme dans cet exemple :
18700
18701 @example
18702 (service dnsmasq-service-type
18703 (dnsmasq-configuration
18704 (no-resolv? #t)
18705 (servers '("192.168.1.1"))))
18706 @end example
18707 @end deffn
18708
18709 @deftp {Type de données} dnsmasq-configuration
18710 Type de données qui représente la configuration de dnsmasq.
18711
18712 @table @asis
18713 @item @code{package} (par défaut : @var{dnsmasq})
18714 L'objet de paquet du serveur dnsmasq.
18715
18716 @item @code{no-hosts?} (par défaut : @code{#f})
18717 Lorsque la valeur est vraie, ne pas lire les noms d'hôte dans /etc/hosts.
18718
18719 @item @code{port} (par défaut : @code{53})
18720 Le port sur lequel écouter. Le mettre à zéro désactive complètement les
18721 réponses DNS, ce qui ne laisse que les fonctions DHCP et TFTP.
18722
18723 @item @code{local-service?} (par défaut : @code{#t})
18724 Accepte les requêtes DNS seulement des hôtes dont les adresses sont sur le
18725 sous-réseau local, c.-à-d.@: sur un sous-réseau pour lequel une interface
18726 existe sur le serveur.
18727
18728 @item @code{listen-addresses} (par défaut : @code{'()})
18729 Écoute sur le adresses IP données.
18730
18731 @item @code{resolv-file} (par défaut : @code{"/etc/resolv.conf"})
18732 Le fichier où lire l'adresse IP des serveurs de noms en amont.
18733
18734 @item @code{no-resolv?} (par défaut : @code{#f})
18735 Lorsque la valeur est vraie, ne pas lire @var{resolv-file}.
18736
18737 @item @code{servers} (par défaut : @code{'()})
18738 Spécifiez l'adresse IP des serveurs en amont directement.
18739
18740 @item @code{cache-size} (par défaut : @code{150})
18741 Indique la taille du cache de dnsmasq. Indiquer 0 désactive le cache.
18742
18743 @item @code{negative-cache?} (par défaut : @code{#t})
18744 Lorsque la valeur est fausse, désactive le cache des réponses négatives.
18745
18746 @end table
18747 @end deftp
18748
18749 @subsubheading Service ddclient
18750
18751 @cindex ddclient
18752 Le srevice ddclient décrit plus bas lance le démon ddclient, qui prend en
18753 charge la mise à jour automatique des entrées DNS pour les fournisseurs de
18754 service comme @uref{https://dyn.com/dns/, Dyn}.
18755
18756 L'exemple suivant montre comment instantier le service avec sa configuration
18757 par défaut :
18758
18759 @example
18760 (service ddclient-service-type)
18761 @end example
18762
18763 Remarquez que ddclient a besoin d'accéder à des identifiants stockés dans un
18764 @dfn{fichier de secrets}, par défaut @file{/etc/ddclient/secrets} (voir
18765 @code{secret-file} plus bas). On s'attend à ce que vous créiez ce fichier
18766 manuellement, de manière externe à guix (vous @emph{pourriez} ajouter ce
18767 fichier dans une partie de votre configuration, par exemple avec
18768 @code{plain-file}, mais il serait lisible pour tout le monde via
18769 @file{/gnu/store}). Vois les exemples dans le répertoire
18770 @file{share/ddclient} du paquet @code{ddclient}.
18771
18772 @c %start of fragment
18773
18774 Les champs de @code{ddclient-configuration} disponibles sont :
18775
18776 @deftypevr {paramètre de @code{ddclient-configuration}} package ddclient
18777 Le paquet ddclient.
18778
18779 @end deftypevr
18780
18781 @deftypevr {paramètre de @code{ddclient-configuration}} integer daemon
18782 La période après laquelle ddclient réessaiera de vérifier l'IP et le nom de
18783 domaine.
18784
18785 La valeur par défaut est @samp{300}.
18786
18787 @end deftypevr
18788
18789 @deftypevr {paramètre de @code{ddclient-configuration}} boolean syslog
18790 Utiliser syslog pour la sortie.
18791
18792 La valeur par défaut est @samp{#t}.
18793
18794 @end deftypevr
18795
18796 @deftypevr {paramètre de @code{ddclient-configuration}} string mail
18797 Courriel de l'utilisateur.
18798
18799 La valeur par défaut est @samp{"root"}.
18800
18801 @end deftypevr
18802
18803 @deftypevr {paramètre de @code{ddclient-configuration}} string mail-failure
18804 Courriel de l'utilisateur pour les échecs.
18805
18806 La valeur par défaut est @samp{"root"}.
18807
18808 @end deftypevr
18809
18810 @deftypevr {paramètre de @code{ddclient-configuration}} string pid
18811 Le fichier de PID de ddclient.
18812
18813 La valeur par défaut est @samp{"/var/run/ddclient/ddclient.pid"}.
18814
18815 @end deftypevr
18816
18817 @deftypevr {paramètre de @code{ddclient-configuration}} boolean ssl
18818 Activer le support de SSL.
18819
18820 La valeur par défaut est @samp{#t}.
18821
18822 @end deftypevr
18823
18824 @deftypevr {paramètre de @code{ddclient-configuration}} string user
18825 Spécifie le nm d'utilisateur ou l'ID qui est utilisé pour lancer le
18826 programme ddclient.
18827
18828 La valeur par défaut est @samp{"ddclient"}.
18829
18830 @end deftypevr
18831
18832 @deftypevr {paramètre de @code{ddclient-configuration}} string group
18833 Groupe de l'utilisateur qui lancera le programme ddclient.
18834
18835 La valeur par défaut est @samp{"ddclient"}.
18836
18837 @end deftypevr
18838
18839 @deftypevr {paramètre de @code{ddclient-configuration}} string secret-file
18840 Fichier de secrets qui sera ajouté au fichier @file{ddclient.conf}. Ce
18841 fichier contient les paramètres d'authentification utilisés par ddclient.
18842 On s'attend à ce que vous le créiez manuellement.
18843
18844 La valeur par défaut est @samp{"/etc/ddclient/secrets.conf"}.
18845
18846 @end deftypevr
18847
18848 @deftypevr {paramètre de @code{ddclient-configuration}} list extra-options
18849 Options supplémentaires qui seront ajoutées au fichier @file{ddclient.conf}.
18850
18851 La valeur par défaut est @samp{()}.
18852
18853 @end deftypevr
18854
18855
18856 @c %end of fragment
18857
18858
18859 @node Services VPN
18860 @subsubsection Services VPN
18861 @cindex VPN (réseau privé virtuel)
18862 @cindex réseau privé virtuel (VPN)
18863
18864 Le module @code{(gnu services vpn)} fournit des services liés aux
18865 @dfn{réseaux privés virtuels} (VPN). Il fournit un srevice @emph{client}
18866 pour que votre machine se connecte à un VPN et un service @emph{serveur}
18867 pour que votre machine héberge un VPN. Les deux services utilisent
18868 @uref{https://openvpn.net/, OpenVPN}.
18869
18870 @deffn {Procédure Scheme} openvpn-client-service @
18871 [#:config (openvpn-client-configuration)]
18872
18873 Renvoie un service qui lance @command{openvpn}, un démon VPN, en tant que
18874 client.
18875 @end deffn
18876
18877 @deffn {Procédure Scheme} openvpn-server-service @
18878 [#:config (openvpn-server-configuration)]
18879
18880 Renvoie un service qui lance @command{openvpn}, un démon VPN, en tant que
18881 serveur.
18882
18883 Les deux services peuvent être lancés en même temps.
18884 @end deffn
18885
18886 @c %automatically generated documentation
18887
18888 Les champs de @code{openvpn-client-configuration} disponibles sont :
18889
18890 @deftypevr {paramètre de @code{openvpn-client-configuration}} package openvpn
18891 Le paquet OpenVPN.
18892
18893 @end deftypevr
18894
18895 @deftypevr {paramètre de @code{openvpn-client-configuration}} string pid-file
18896 Le fichier de PID d'OpenVPN.
18897
18898 La valeur par défaut est @samp{"/var/run/openvpn/openvpn.pid"}.
18899
18900 @end deftypevr
18901
18902 @deftypevr {paramètre de @code{openvpn-client-configuration}} proto proto
18903 Le protocole (UDP ou TCP) utilisé pour ouvrir un canal entre les clients et
18904 les serveurs.
18905
18906 La valeur par défaut est @samp{udp}.
18907
18908 @end deftypevr
18909
18910 @deftypevr {paramètre de @code{openvpn-client-configuration}} dev dev
18911 Le périphérique utilisé pour représenter la connexion VPN.
18912
18913 La valeur par défaut est @samp{tun}.
18914
18915 @end deftypevr
18916
18917 @deftypevr {paramètre de @code{openvpn-client-configuration}} string ca
18918 L'autorité de certification qui sert à vérifier les connexions.
18919
18920 La valeur par défaut est @samp{"/etc/openvpn/ca.crt"}.
18921
18922 @end deftypevr
18923
18924 @deftypevr {paramètre de @code{openvpn-client-configuration}} string cert
18925 Le certificat de la machine sur laquelle tourne le démon. Il devrait être
18926 signé par l'autorité indiquée dans @code{ca}.
18927
18928 La valeur par défaut est @samp{"/etc/openvpn/client.crt"}.
18929
18930 @end deftypevr
18931
18932 @deftypevr {paramètre de @code{openvpn-client-configuration}} string key
18933 La clef de la machine sur laquelle tourne le démon. Elle doit être la clef
18934 dont le certificat est donné dans @code{cert}.
18935
18936 La valeur par défaut est @samp{"/etc/openvpn/client.key"}.
18937
18938 @end deftypevr
18939
18940 @deftypevr {paramètre de @code{openvpn-client-configuration}} boolean comp-lzo?
18941 Indique s'il faut utiliser l'algorithme de compression lzo.
18942
18943 La valeur par défaut est @samp{#t}.
18944
18945 @end deftypevr
18946
18947 @deftypevr {paramètre de @code{openvpn-client-configuration}} boolean persist-key?
18948 Ne pas relire les fichiers de clefs entre les SIGUSR1 et les --ping-restart.
18949
18950 La valeur par défaut est @samp{#t}.
18951
18952 @end deftypevr
18953
18954 @deftypevr {paramètre de @code{openvpn-client-configuration}} boolean persist-tun?
18955 Ne pas fermer et rouvrir les périphériques TUN/TAP ou lancer de scripts de
18956 démarrage/d'arrêt entre les SIGUSR1 et les --ping-restart.
18957
18958 La valeur par défaut est @samp{#t}.
18959
18960 @end deftypevr
18961
18962 @deftypevr {paramètre de @code{openvpn-client-configuration}} number verbosity
18963 Niveau de verbosité.
18964
18965 La valeur par défaut est @samp{3}.
18966
18967 @end deftypevr
18968
18969 @deftypevr {paramètre de @code{openvpn-client-configuration}} tls-auth-client tls-auth
18970 Ajoute une couche d'authentification HMAC supplémentaire au dessus du canal
18971 de contrôle TLS pour se protéger contre les attaques DoS.
18972
18973 La valeur par défaut est @samp{#f}.
18974
18975 @end deftypevr
18976
18977 @deftypevr {paramètre de @code{openvpn-client-configuration}} key-usage verify-key-usage?
18978 Indique s'il faut vérifier que le certificat du serveur a l'extension
18979 d'utilisation.
18980
18981 La valeur par défaut est @samp{#t}.
18982
18983 @end deftypevr
18984
18985 @deftypevr {paramètre de @code{openvpn-client-configuration}} bind bind?
18986 Se lier à un port spécifique.
18987
18988 La valeur par défaut est @samp{#f}.
18989
18990 @end deftypevr
18991
18992 @deftypevr {paramètre de @code{openvpn-client-configuration}} resolv-retry resolv-retry?
18993 Réessayer de résoudre l'adresse du serveur.
18994
18995 La valeur par défaut est @samp{#t}.
18996
18997 @end deftypevr
18998
18999 @deftypevr {paramètre de @code{openvpn-client-configuration}} openvpn-remote-list remote
19000 Une liste de serveurs distants sur lesquels se connecter.
19001
19002 La valeur par défaut est @samp{()}.
19003
19004 Les champs de @code{openvpn-remote-configuration} disponibles sont :
19005
19006 @deftypevr {paramètre de @code{openvpn-remote-configuration}} string name
19007 Nom du serveur.
19008
19009 La valeur par défaut est @samp{"my-server"}.
19010
19011 @end deftypevr
19012
19013 @deftypevr {paramètre de @code{openvpn-remote-configuration}} number port
19014 Numéro de port sur lequel écoute le serveur.
19015
19016 La valeur par défaut est @samp{1194}.
19017
19018 @end deftypevr
19019
19020 @end deftypevr
19021 @c %end of automatic openvpn-client documentation
19022
19023 @c %automatically generated documentation
19024
19025 Les champs de @code{openvpn-server-configuration} disponibles sont :
19026
19027 @deftypevr {paramètre de @code{openvpn-server-configuration}} package openvpn
19028 Le paquet OpenVPN.
19029
19030 @end deftypevr
19031
19032 @deftypevr {paramètre de @code{openvpn-server-configuration}} string pid-file
19033 Le fichier de PID d'OpenVPN.
19034
19035 La valeur par défaut est @samp{"/var/run/openvpn/openvpn.pid"}.
19036
19037 @end deftypevr
19038
19039 @deftypevr {paramètre de @code{openvpn-server-configuration}} proto proto
19040 Le protocole (UDP ou TCP) utilisé pour ouvrir un canal entre les clients et
19041 les serveurs.
19042
19043 La valeur par défaut est @samp{udp}.
19044
19045 @end deftypevr
19046
19047 @deftypevr {paramètre de @code{openvpn-server-configuration}} dev dev
19048 Le périphérique utilisé pour représenter la connexion VPN.
19049
19050 La valeur par défaut est @samp{tun}.
19051
19052 @end deftypevr
19053
19054 @deftypevr {paramètre de @code{openvpn-server-configuration}} string ca
19055 L'autorité de certification qui sert à vérifier les connexions.
19056
19057 La valeur par défaut est @samp{"/etc/openvpn/ca.crt"}.
19058
19059 @end deftypevr
19060
19061 @deftypevr {paramètre de @code{openvpn-server-configuration}} string cert
19062 Le certificat de la machine sur laquelle tourne le démon. Il devrait être
19063 signé par l'autorité indiquée dans @code{ca}.
19064
19065 La valeur par défaut est @samp{"/etc/openvpn/client.crt"}.
19066
19067 @end deftypevr
19068
19069 @deftypevr {paramètre de @code{openvpn-server-configuration}} string key
19070 La clef de la machine sur laquelle tourne le démon. Elle doit être la clef
19071 dont le certificat est donné dans @code{cert}.
19072
19073 La valeur par défaut est @samp{"/etc/openvpn/client.key"}.
19074
19075 @end deftypevr
19076
19077 @deftypevr {paramètre de @code{openvpn-server-configuration}} boolean comp-lzo?
19078 Indique s'il faut utiliser l'algorithme de compression lzo.
19079
19080 La valeur par défaut est @samp{#t}.
19081
19082 @end deftypevr
19083
19084 @deftypevr {paramètre de @code{openvpn-server-configuration}} boolean persist-key?
19085 Ne pas relire les fichiers de clefs entre les SIGUSR1 et les --ping-restart.
19086
19087 La valeur par défaut est @samp{#t}.
19088
19089 @end deftypevr
19090
19091 @deftypevr {paramètre de @code{openvpn-server-configuration}} boolean persist-tun?
19092 Ne pas fermer et rouvrir les périphériques TUN/TAP ou lancer de scripts de
19093 démarrage/d'arrêt entre les SIGUSR1 et les --ping-restart.
19094
19095 La valeur par défaut est @samp{#t}.
19096
19097 @end deftypevr
19098
19099 @deftypevr {paramètre de @code{openvpn-server-configuration}} number verbosity
19100 Niveau de verbosité.
19101
19102 La valeur par défaut est @samp{3}.
19103
19104 @end deftypevr
19105
19106 @deftypevr {paramètre de @code{openvpn-server-configuration}} tls-auth-server tls-auth
19107 Ajoute une couche d'authentification HMAC supplémentaire au dessus du canal
19108 de contrôle TLS pour se protéger contre les attaques DoS.
19109
19110 La valeur par défaut est @samp{#f}.
19111
19112 @end deftypevr
19113
19114 @deftypevr {paramètre de @code{openvpn-server-configuration}} number port
19115 Spécifie le numéro de port sur lequel les serveurs écoutent.
19116
19117 La valeur par défaut est @samp{1194}.
19118
19119 @end deftypevr
19120
19121 @deftypevr {paramètre de @code{openvpn-server-configuration}} ip-mask server
19122 Une ip et un masque de sous-réseau spécifiant le sous-réseau dans le réseau
19123 virtuel.
19124
19125 La valeur par défaut est @samp{"10.8.0.0 255.255.255.0"}.
19126
19127 @end deftypevr
19128
19129 @deftypevr {paramètre de @code{openvpn-server-configuration}} cidr6 server-ipv6
19130 Une notation CIDR pour spécifier le sous-réseau IPv6 dans le réseau virtuel.
19131
19132 La valeur par défaut est @samp{#f}.
19133
19134 @end deftypevr
19135
19136 @deftypevr {paramètre de @code{openvpn-server-configuration}} string dh
19137 Le fichier de paramètres Diffie-Hellman.
19138
19139 La valeur par défaut est @samp{"/etc/openvpn/dh2048.pem"}.
19140
19141 @end deftypevr
19142
19143 @deftypevr {paramètre de @code{openvpn-server-configuration}} string ifconfig-pool-persist
19144 Le fichier qui enregistre les IP des clients.
19145
19146 La valeur par défaut est @samp{"/etc/openvpn/ipp.txt"}.
19147
19148 @end deftypevr
19149
19150 @deftypevr {paramètre de @code{openvpn-server-configuration}} gateway redirect-gateway?
19151 Lorsque la valeur est vraie, le serveur agira comme une passerelle pour ses
19152 clients.
19153
19154 La valeur par défaut est @samp{#f}.
19155
19156 @end deftypevr
19157
19158 @deftypevr {paramètre de @code{openvpn-server-configuration}} boolean client-to-client?
19159 Lorsque la valeur est vraie, les clients sont autorisés à se parler entre
19160 eux dans le VPN.
19161
19162 La valeur par défaut est @samp{#f}.
19163
19164 @end deftypevr
19165
19166 @deftypevr {paramètre de @code{openvpn-server-configuration}} keepalive keepalive
19167 Fait que des messages de ping sont envoyés régulièrement dans les deux sens
19168 pour que chaque côté sache quand l'autre n'est plus disponible.
19169 @code{keepalive} a besoin d'une paire. Le premier élément est la période
19170 d'envoie du ping, et le second élément est le délai d'attente avant de
19171 considéré que l'autre côté n'est plus disponible.
19172
19173 @end deftypevr
19174
19175 @deftypevr {paramètre de @code{openvpn-server-configuration}} number max-clients
19176 Le nombre maximum de clients.
19177
19178 La valeur par défaut est @samp{100}.
19179
19180 @end deftypevr
19181
19182 @deftypevr {paramètre de @code{openvpn-server-configuration}} string status
19183 Le fichier de statut. Ce fichier montre un court rapport sur les connexions
19184 actuelles. Il est tronqué et réécrit toutes les minutes.
19185
19186 La valeur par défaut est @samp{"/var/run/openvpn/status"}.
19187
19188 @end deftypevr
19189
19190 @deftypevr {paramètre de @code{openvpn-server-configuration}} openvpn-ccd-list client-config-dir
19191 La liste des configuration pour certains clients.
19192
19193 La valeur par défaut est @samp{()}.
19194
19195 Les champs de @code{openvpn-ccd-configuration} disponibles sont :
19196
19197 @deftypevr {paramètre de @code{openvpn-ccd-configuration}} string name
19198 Nom du client.
19199
19200 La valeur par défaut est @samp{"client"}.
19201
19202 @end deftypevr
19203
19204 @deftypevr {paramètre de @code{openvpn-ccd-configuration}} ip-mask iroute
19205 Le réseau du client.
19206
19207 La valeur par défaut est @samp{#f}.
19208
19209 @end deftypevr
19210
19211 @deftypevr {paramètre de @code{openvpn-ccd-configuration}} ip-mask ifconfig-push
19212 IP du client sur le VPN.
19213
19214 La valeur par défaut est @samp{#f}.
19215
19216 @end deftypevr
19217
19218 @end deftypevr
19219
19220
19221 @c %end of automatic openvpn-server documentation
19222
19223
19224 @node Système de fichiers en réseau
19225 @subsubsection Système de fichiers en réseau
19226 @cindex NFS
19227
19228 Le module @code{(gnu services nfs)} fournit les services suivants, qui sont
19229 tous utilisés pour monter et exporter des arborescences de répertoires en
19230 @dfn{network file systems} (NFS).
19231
19232 @subsubheading Service RPC Bind
19233 @cindex rpcbind
19234
19235 Le service RPC Bind fournit un dispositif pour faire correspondre les
19236 numéros de programmes à des adresses universelles. De nombreux services
19237 liés à NFS utilisent ce dispositif. Donc il est automatiquement démarré
19238 lorsqu'un service qui en dépend est démarré.
19239
19240 @defvr {Variable Scheme} rpcbind-service-type
19241 Un type de service pour le démon RPC portmapper.
19242 @end defvr
19243
19244
19245 @deftp {Type de données} rpcbind-configuration
19246 Type données représentant la configuration du service RPC Bind. Ce type a
19247 les paramètres suivants :
19248 @table @asis
19249 @item @code{rpcbind} (par défaut : @code{rpcbind})
19250 Le paquet rpcbind à utiliser.
19251
19252 @item @code{warm-start?} (par défaut : @code{#t})
19253 Si ce paramètre est @code{#t}, alors le démon lira un fichier d'état au
19254 démarrage ce qui lui fait recharger les informations d'états sauvegardés par
19255 une instance précédente.
19256 @end table
19257 @end deftp
19258
19259
19260 @subsubheading Pseudo-système de fichiers Pipefs
19261 @cindex pipefs
19262 @cindex rpc_pipefs
19263
19264 Le système de fichiers pipefs est utilisé pour transférer des données liées
19265 à NFS entre le noyau et les programmes en espace utilisateur.
19266
19267 @defvr {Variable Scheme} pipefs-service-type
19268 Un type de service pour le pseudo-système de fichiers pipefs.
19269 @end defvr
19270
19271 @deftp {Type de données} pipefs-configuration
19272 Type de données représentant la configuration du service du pseudo-système
19273 de fichiers pipefs. Ce type a les paramètres suivants :
19274 @table @asis
19275 @item @code{mount-point} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
19276 Le répertoire dans lequel le système de fichiers est attaché.
19277 @end table
19278 @end deftp
19279
19280
19281 @subsubheading Service de démon GSS
19282 @cindex GSSD
19283 @cindex GSS
19284 @cindex système de sécurité global
19285
19286 Le démon du @dfn{système de sécurité global} (GSS) fournit une sécurité
19287 forte pour les protocoles basés sur des RPC. Avant d'échanger des requêtes
19288 RPC, un client RPC doit établir un contexte sécurisé. Typiquement cela se
19289 fait avec la commande Kerberos @command{kinit} ou automatiquement à la
19290 connexion avec les services PAM (@pxref{Services Kerberos}).
19291
19292 @defvr {Variable Scheme} gss-service-type
19293 Un type de service pour le démon du système de sécurité global (GSS).
19294 @end defvr
19295
19296 @deftp {Type de données} gss-configuration
19297 Type de données représentant la configuration du service du démon GSS. Ce
19298 type a les paramètres suivants :
19299 @table @asis
19300 @item @code{nfs-utils} (par défaut : @code{nfs-utils})
19301 Le paquet dans lequel la commande @command{rpc.gssd} se trouve.
19302
19303 @item @code{pipefs-directory} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
19304 Le répertoire où le système de fichier pipefs doit être monté.
19305
19306 @end table
19307 @end deftp
19308
19309
19310 @subsubheading Service de démon IDMAP
19311 @cindex idmapd
19312 @cindex correspondance de nom
19313
19314 Le service du démon idmap fournit une correspondance entre les ID
19315 utilisateur et les noms d'utilisateurs. Typiquement, cela est requis pour
19316 accéder aux systèmes de fichiers montés via NFSv4.
19317
19318 @defvr {Variable Scheme} idmap-service-type
19319 Un type de service pour le démon de correspondance d'identité (IDMAP).
19320 @end defvr
19321
19322 @deftp {Type de données} idmap-configuration
19323 Type de données représentant la configuration du service du démon IDMAP. Ce
19324 type a les paramètres suivants :
19325 @table @asis
19326 @item @code{nfs-utils} (par défaut : @code{nfs-utils})
19327 Le paquet dans lequel se trouve la commande @command{rpc.idmapd}.
19328
19329 @item @code{pipefs-directory} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
19330 Le répertoire où le système de fichier pipefs doit être monté.
19331
19332 @item @code{domain} (par défaut : @code{#f})
19333 Le nom de domaine NFSv4 local. Il faut que ce soit une chaîne de caractères
19334 ou @code{#f}. Si la valeur est @code{#f} le démon utilisera le nom de
19335 domaine pleinement qualifié de l'hôte.
19336
19337 @end table
19338 @end deftp
19339
19340 @node Intégration continue
19341 @subsubsection Intégration continue
19342
19343 @cindex intégration continue
19344 @uref{https://git.savannah.gnu.org/cgit/guix/guix-cuirass.git, Cuirass} est
19345 un outil d'intégration continue pour Guix. On peut l'utiliser aussi bien
19346 pour le développement que pour fournir des substituts à d'autres
19347 (@pxref{Substituts}).
19348
19349 Le module @code{(gnu services cuirass)} fournit le service suivant.
19350
19351 @defvr {Procédure Scheme} cuirass-service-type
19352 Le type du service Cuirass. Sa valeur doit être un objet
19353 @code{cuirass-configuration}, décrit ci-dessous.
19354 @end defvr
19355
19356 Pour ajouter des travaux de construction, vous devez indiquer le champ
19357 @code{specifications} de la configuration. Voici un exemple de service qui
19358 récupère le dépôt Guix et construit les paquets depuis un manifeste.
19359 Certains des paquets sont définis dans l'entrée @code{"custom-packages"},
19360 qui est l'équivalent de @code{GUIX_PACKAGE_PATH}.
19361
19362 @example
19363 (define %cuirass-specs
19364 #~(list
19365 '((#:name . "my-manifest")
19366 (#:load-path-inputs . ("guix"))
19367 (#:package-path-inputs . ("custom-packages"))
19368 (#:proc-input . "guix")
19369 (#:proc-file . "build-aux/cuirass/gnu-system.scm")
19370 (#:proc . cuirass-jobs)
19371 (#:proc-args . ((subset . "manifests")
19372 (systems . ("x86_64-linux"))
19373 (manifests . (("config" . "guix/manifest.scm")))))
19374 (#:inputs . (((#:name . "guix")
19375 (#:url . "git://git.savannah.gnu.org/guix.git")
19376 (#:load-path . ".")
19377 (#:branch . "master")
19378 (#:no-compile? . #t))
19379 ((#:name . "config")
19380 (#:url . "git://git.example.org/config.git")
19381 (#:load-path . ".")
19382 (#:branch . "master")
19383 (#:no-compile? . #t))
19384 ((#:name . "custom-packages")
19385 (#:url . "git://git.example.org/custom-packages.git")
19386 (#:load-path . ".")
19387 (#:branch . "master")
19388 (#:no-compile? . #t)))))))
19389
19390 (service cuirass-service-type
19391 (cuirass-configuration
19392 (specifications %cuirass-specs)))
19393 @end example
19394
19395 Tandis que les informations liés aux travaux de construction sont
19396 directement dans les spécifications, les paramètres globaux pour le
19397 processus @command{cuirass} sont accessibles dans les autres champs de
19398 @code{cuirass-configuration}.
19399
19400 @deftp {Type de données} cuirass-configuration
19401 Type de données représentant la configuration de Cuirass.
19402
19403 @table @asis
19404 @item @code{log-file} (par défaut : @code{"/var/log/cuirass.log"})
19405 Emplacement du fichier de journal.
19406
19407 @item @code{cache-directory} (par défaut : @code{"/var/cache/cuirass"})
19408 Emplacement du cache du dépôt.
19409
19410 @item @code{user} (par défaut : @code{"cuirass"})
19411 Propriétaire du processus @code{cuirass}.
19412
19413 @item @code{group} (par défaut : @code{"cuirass"})
19414 Groupe du propriétaire du processus @code{cuirass}.
19415
19416 @item @code{interval} (par défaut : @code{60})
19417 Nombre de secondes entre les mises à jour du dépôt suivis des travaux de
19418 Cuirass.
19419
19420 @item @code{database} (par défaut : @code{"/var/lib/cuirass/cuirass.db"})
19421 Emplacement de la base de données sqlite qui contient les résultats de
19422 construction et les spécifications précédemment ajoutées.
19423
19424 @item @code{ttl} (par défaut : @code{(* 30 24 3600)})
19425 Spécifie la durée de vie (TTL) en seconde des racines du ramasse-miette qui
19426 sont enregistrés comme des résultats de construction. Cela signifie que les
19427 résultats de construction ne seront pas glanés pendant au moins @var{ttl}
19428 secondes.
19429
19430 @item @code{port} (par défaut : @code{8081})
19431 Numéro de port utilisé pour le serveur HTTP.
19432
19433 @item --listen=@var{hôte}
19434 Écoute sur l'interface réseau de @var{host}. La valeur par défaut est
19435 d'accepter les connexions depuis localhost.
19436
19437 @item @code{specifications} (par défaut : @code{#~'()})
19438 Une gexp (@pxref{G-Expressions}) qui s'évalue en une liste de
19439 spécifications, où une spécification est une liste d'association
19440 (@pxref{Associations Lists,,, guile, GNU Guile Reference Manual}) dont les
19441 clefs sont des mots-clefs (@code{#:exemple-de-mot-clef}) comme dans
19442 l'exemple plus haut.
19443
19444 @item @code{use-substitutes?} (par défaut : @code{#f})
19445 Cela permet d'utiliser des substituts pour éviter de construire toutes les
19446 dépendance d'un travail depuis les sources.
19447
19448 @item @code{one-shot?} (par défaut : @code{#f})
19449 N'évaluer les spécification et construire les dérivations qu'une seule fois.
19450
19451 @item @code{fallback?} (par défaut : @code{#f})
19452 Lorsque la substitution d'un binaire pré-construit échoue, revenir à la
19453 construction locale du paquet.
19454
19455 @item @code{cuirass} (par défaut : @code{cuirass})
19456 Le paquet Cuirass à utiliser.
19457 @end table
19458 @end deftp
19459
19460 @node Services de gestion de l'énergie
19461 @subsubsection Services de gestion de l'énergie
19462
19463 @cindex tlp
19464 @cindex gestion de l'énergie avec TLP
19465 @subsubheading démon TLP
19466
19467 Le module @code{(gnu services pm)} fournit une définition de service Guix
19468 pour l'outil de gestion d'énergie Linux TLP.
19469
19470 TLP active plusieurs modes un espace utilisateur et dans le noyau.
19471 Contrairement à @code{upower-service}, ce n'est pas un outil passif de
19472 surveillance, puisqu'il applique des paramètres personnalisés à chaque fois
19473 qu'il détecte une nouvelle source d'énergie. Vous pouvez trouver plus
19474 d'informations sur @uref{http://linrunner.de/en/tlp/tlp.html, la page
19475 d'accueil de TLP}.
19476
19477 @deffn {Variable Scheme} tlp-service-type
19478 Le type de service pour l'outil TLP. Sa valeur devrait être une
19479 configuration valide de TLP (voir plus bas). Pour utiliser les paramètres
19480 par défaut, écrivez simplement :
19481 @example
19482 (service tlp-service-type)
19483 @end example
19484 @end deffn
19485
19486 Par défaut TLP n'a pas besoin de beaucoup de configuration mais la plupart
19487 des paramètres de TLP peuvent être modifiés avec @code{tlp-configuration}.
19488
19489 Chaque définition de paramètre est précédée par son type ; par exemple,
19490 @samp{boolean foo} indique que le paramètre @code{foo} doit être spécifié
19491 comme un booléen. Les types qui commencent par @code{maybe-} dénotent des
19492 paramètres qui n'apparaîtront pas dans la configuration de TLP lorsque leur
19493 valeur est @code{'disabled}.
19494
19495 @c The following documentation was initially generated by
19496 @c (generate-tlp-documentation) in (gnu services pm). Manually maintained
19497 @c documentation is better, so we shouldn't hesitate to edit below as
19498 @c needed. However if the change you want to make to this documentation
19499 @c can be done in an automated way, it's probably easier to change
19500 @c (generate-documentation) than to make it below and have to deal with
19501 @c the churn as TLP updates.
19502
19503 Les champs de @code{tlp-configuration} disponibles sont :
19504
19505 @deftypevr {paramètre de @code{tlp-configuration}} package tlp
19506 Le paquet TLP.
19507
19508 @end deftypevr
19509
19510 @deftypevr {paramètre de @code{tlp-configuration}} boolean tlp-enable?
19511 Indiquez vrai si vous souhaitez activer TLP.
19512
19513 La valeur par défaut est @samp{#t}.
19514
19515 @end deftypevr
19516
19517 @deftypevr {paramètre de @code{tlp-configuration}} string tlp-default-mode
19518 Mode par défaut lorsqu'aucune source d'énergie ne peut être détectée. Les
19519 possibilités sont AC et BAT.
19520
19521 La valeur par défaut est @samp{"AC"}.
19522
19523 @end deftypevr
19524
19525 @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer disk-idle-secs-on-ac
19526 Nombre de secondes que le noyau Linux doit attendre après que les disques
19527 s'arrêtent pour se synchroniser quand il est sur secteur.
19528
19529 La valeur par défaut est @samp{0}.
19530
19531 @end deftypevr
19532
19533 @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer disk-idle-secs-on-bat
19534 Comme @code{disk-idle-ac} mais en mode batterie.
19535
19536 La valeur par défaut est @samp{2}.
19537
19538 @end deftypevr
19539
19540 @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer max-lost-work-secs-on-ac
19541 Périodicité du nettoyage des pages invalidées, en secondes.
19542
19543 La valeur par défaut est @samp{15}.
19544
19545 @end deftypevr
19546
19547 @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer max-lost-work-secs-on-bat
19548 Comme @code{max-lost-work-secs-on-ac} mais en mode batterie.
19549
19550 La valeur par défaut est @samp{60}.
19551
19552 @end deftypevr
19553
19554 @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list cpu-scaling-governor-on-ac
19555 Gouverneur de fréquence d'horloge sur secteur. Avec le pilote intel_pstate,
19556 les possibilités sont powersave et performance. Avec le pilote
19557 acpi-cpufreq, les possibilités sont ondemand, powersave, performance et
19558 conservative.
19559
19560 La valeur par défaut est @samp{disabled}.
19561
19562 @end deftypevr
19563
19564 @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list cpu-scaling-governor-on-bat
19565 Comme @code{cpu-scaling-governor-on-ac} mais en mode batterie.
19566
19567 La valeur par défaut est @samp{disabled}.
19568
19569 @end deftypevr
19570
19571 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-min-freq-on-ac
19572 Indique la fréquence d'horloge minimale pour le gouverneur sur secteur.
19573
19574 La valeur par défaut est @samp{disabled}.
19575
19576 @end deftypevr
19577
19578 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-max-freq-on-ac
19579 Indique la fréquence d'horloge maximale pour le gouverneur sur secteur.
19580
19581 La valeur par défaut est @samp{disabled}.
19582
19583 @end deftypevr
19584
19585 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-min-freq-on-bat
19586 Indique la fréquence d'horloge minimale pour le gouverneur sur batterie.
19587
19588 La valeur par défaut est @samp{disabled}.
19589
19590 @end deftypevr
19591
19592 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-max-freq-on-bat
19593 Indique la fréquence d'horloge maximale pour le gouverneur sur batterie.
19594
19595 La valeur par défaut est @samp{disabled}.
19596
19597 @end deftypevr
19598
19599 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-min-perf-on-ac
19600 Limite le P-état minimum pour contrôler la dissipation de puissance dans le
19601 CPU, sur secteur. Les valeurs sont indiqués comme un pourcentage des
19602 performances disponibles.
19603
19604 La valeur par défaut est @samp{disabled}.
19605
19606 @end deftypevr
19607
19608 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-max-perf-on-ac
19609 Limite le P-état maximum pour contrôler la dissipation de puissance dans le
19610 CPU, sur secteur. Les valeurs sont indiqués comme un pourcentage des
19611 performances disponibles.
19612
19613 La valeur par défaut est @samp{disabled}.
19614
19615 @end deftypevr
19616
19617 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-min-perf-on-bat
19618 Comme @code{cpu-min-perf-on-ac} mais en mode batterie.
19619
19620 La valeur par défaut est @samp{disabled}.
19621
19622 @end deftypevr
19623
19624 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-max-perf-on-bat
19625 Comme @code{cpu-max-perf-on-ac} mais en mode batterie.
19626
19627 La valeur par défaut est @samp{disabled}.
19628
19629 @end deftypevr
19630
19631 @deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean cpu-boost-on-ac?
19632 Active la fonctionnalité turbo boost du CPU sur secteur.
19633
19634 La valeur par défaut est @samp{disabled}.
19635
19636 @end deftypevr
19637
19638 @deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean cpu-boost-on-bat?
19639 Comme @code{cpu-boost-on-ac?} mais en mode batterie.
19640
19641 La valeur par défaut est @samp{disabled}.
19642
19643 @end deftypevr
19644
19645 @deftypevr {paramètre de @code{tlp-configuration}} boolean sched-powersave-on-ac?
19646 Permet au noyau Linux de minimiser le nombre de cœurs/hyper-threads CPU
19647 utilisés lorsque la charge est faible.
19648
19649 La valeur par défaut est @samp{#f}.
19650
19651 @end deftypevr
19652
19653 @deftypevr {paramètre de @code{tlp-configuration}} boolean sched-powersave-on-bat?
19654 Comme @code{sched-powersave-on-ac?} mais en mode batterie.
19655
19656 La valeur par défaut est @samp{#t}.
19657
19658 @end deftypevr
19659
19660 @deftypevr {paramètre de @code{tlp-configuration}} boolean nmi-watchdog?
19661 Active le chien de garde NMI du noyau Linux.
19662
19663 La valeur par défaut est @samp{#f}.
19664
19665 @end deftypevr
19666
19667 @deftypevr {paramètre de @code{tlp-configuration}} maybe-string phc-controls
19668 Pour les noyaux Linux avec le correctif PHC, change le voltage du CPU. Une
19669 valeur serait par exemple @samp{"F:V F:V F:V F:V"}.
19670
19671 La valeur par défaut est @samp{disabled}.
19672
19673 @end deftypevr
19674
19675 @deftypevr {paramètre de @code{tlp-configuration}} string energy-perf-policy-on-ac
19676 Indique le niveau de performance du CPU par rapport à la politique de
19677 gestion de l'énergie sur secteur. Les possibilités sont performance, normal
19678 et powersave.
19679
19680 La valeur par défaut est @samp{"performance"}.
19681
19682 @end deftypevr
19683
19684 @deftypevr {paramètre de @code{tlp-configuration}} string energy-perf-policy-on-bat
19685 Comme @code{energy-perf-policy-ac} mais en mode batterie.
19686
19687 La valeur par défaut est @samp{"powersave"}.
19688
19689 @end deftypevr
19690
19691 @deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disks-devices
19692 Périphériques de disque dur.
19693
19694 @end deftypevr
19695
19696 @deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disk-apm-level-on-ac
19697 Niveau de gestion de l'énergie avancé des disques durs.
19698
19699 @end deftypevr
19700
19701 @deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disk-apm-level-on-bat
19702 Comme @code{disk-apm-bat} mais en mode batterie.
19703
19704 @end deftypevr
19705
19706 @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-spindown-timeout-on-ac
19707 Délai d'attente pour arrêter de faire tourner les disques. Une valeur doit
19708 être spécifiée pour chaque disque dur déclaré.
19709
19710 La valeur par défaut est @samp{disabled}.
19711
19712 @end deftypevr
19713
19714 @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-spindown-timeout-on-bat
19715 Comme @code{disk-spindown-timeout-on-ac} mais en mode batterie.
19716
19717 La valeur par défaut est @samp{disabled}.
19718
19719 @end deftypevr
19720
19721 @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-iosched
19722 Sélectionne l'ordonnanceur d'entrées-sorties pour le disque. Une valeur
19723 doit être spécifiée pour chaque disque déclaré. Les possibilités sont par
19724 exemple cfq, deadline et noop.
19725
19726 La valeur par défaut est @samp{disabled}.
19727
19728 @end deftypevr
19729
19730 @deftypevr {paramètre de @code{tlp-configuration}} string sata-linkpwr-on-ac
19731 Niveau de gestion de l'énergie des lien SATA aggressive (ALPM). Les
19732 possibilités sont min_power, medium_power et max_performance.
19733
19734 La valeur par défaut est @samp{"max_performance"}.
19735
19736 @end deftypevr
19737
19738 @deftypevr {paramètre de @code{tlp-configuration}} string sata-linkpwr-on-bat
19739 Comme @code{sata-linkpwr-ac} mais en mode batterie.
19740
19741 La valeur par défaut est @samp{"min_power"}.
19742
19743 @end deftypevr
19744
19745 @deftypevr {paramètre de @code{tlp-configuration}} maybe-string sata-linkpwr-blacklist
19746 Exclu les périphériques SATA spécifiés de la gestion de l'énergie des liens.
19747
19748 La valeur par défaut est @samp{disabled}.
19749
19750 @end deftypevr
19751
19752 @deftypevr {paramètre de @code{tlp-configuration}} maybe-on-off-boolean ahci-runtime-pm-on-ac?
19753 Active la gestion de l'énergie à l'exécution pour les contrôleurs AHCI et
19754 les disques, sur secteur
19755
19756 La valeur par défaut est @samp{disabled}.
19757
19758 @end deftypevr
19759
19760 @deftypevr {paramètre de @code{tlp-configuration}} maybe-on-off-boolean ahci-runtime-pm-on-bat?
19761 Comme @code{ahci-runtime-pm-on-ac} mais en mode batterie.
19762
19763 La valeur par défaut est @samp{disabled}.
19764
19765 @end deftypevr
19766
19767 @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer ahci-runtime-pm-timeout
19768 Secondes d'inactivités avant de suspendre les disques.
19769
19770 La valeur par défaut est @samp{15}.
19771
19772 @end deftypevr
19773
19774 @deftypevr {paramètre de @code{tlp-configuration}} string pcie-aspm-on-ac
19775 Niveau de gestion de l'énergie des états actifs de PCI Express. Les
19776 possibilités sont default, performance et powersave.
19777
19778 La valeur par défaut est @samp{"performance"}.
19779
19780 @end deftypevr
19781
19782 @deftypevr {paramètre de @code{tlp-configuration}} string pcie-aspm-on-bat
19783 Comme @code{pcie-aspm-ac} mais en mode batterie.
19784
19785 La valeur par défaut est @samp{"powersave"}.
19786
19787 @end deftypevr
19788
19789 @deftypevr {paramètre de @code{tlp-configuration}} string radeon-power-profile-on-ac
19790 Niveau de vitesse de l'horloge des cartes graphiques Radeon. Les
19791 possibilités sont low, mid, high, auto et default.
19792
19793 La valeur par défaut est @samp{"high"}.
19794
19795 @end deftypevr
19796
19797 @deftypevr {paramètre de @code{tlp-configuration}} string radeon-power-profile-on-bat
19798 Comme @code{radeon-power-ac} mais en mode batterie.
19799
19800 La valeur par défaut est @samp{"low"}.
19801
19802 @end deftypevr
19803
19804 @deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-state-on-ac
19805 Méthode de gestion de l'énergie dynamique de Radeon (DPM). Les possibilités
19806 sont battery et performance.
19807
19808 La valeur par défaut est @samp{"performance"}.
19809
19810 @end deftypevr
19811
19812 @deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-state-on-bat
19813 Comme @code{radeon-dpm-state-ac} mais en mode batterie.
19814
19815 La valeur par défaut est @samp{"battery"}.
19816
19817 @end deftypevr
19818
19819 @deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-perf-level-on-ac
19820 Niveau de performance de DPM. Les possibilités sont auto, low et high.
19821
19822 La valeur par défaut est @samp{"auto"}.
19823
19824 @end deftypevr
19825
19826 @deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-perf-level-on-bat
19827 Comme @code{radeon-dpm-perf-ac} mais en mode batterie.
19828
19829 La valeur par défaut est @samp{"auto"}.
19830
19831 @end deftypevr
19832
19833 @deftypevr {paramètre de @code{tlp-configuration}} on-off-boolean wifi-pwr-on-ac?
19834 Mode de gestion de l'énergie wifi.
19835
19836 La valeur par défaut est @samp{#f}.
19837
19838 @end deftypevr
19839
19840 @deftypevr {paramètre de @code{tlp-configuration}} on-off-boolean wifi-pwr-on-bat?
19841 Comme @code{wifi-power-ac?} mais en mode batterie.
19842
19843 La valeur par défaut est @samp{#t}.
19844
19845 @end deftypevr
19846
19847 @deftypevr {paramètre de @code{tlp-configuration}} y-n-boolean wol-disable?
19848 Désactive wake on LAN.
19849
19850 La valeur par défaut est @samp{#t}.
19851
19852 @end deftypevr
19853
19854 @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer sound-power-save-on-ac
19855 Durée d'attente en secondes avant d'activer la gestion de l'énergie audio
19856 sur les périphériques Intel HDA et AC97. La valeur 0 désactive la gestion
19857 de l'énergie.
19858
19859 La valeur par défaut est @samp{0}.
19860
19861 @end deftypevr
19862
19863 @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer sound-power-save-on-bat
19864 Comme @code{sound-powersave-ac} mais en mode batterie.
19865
19866 La valeur par défaut est @samp{1}.
19867
19868 @end deftypevr
19869
19870 @deftypevr {paramètre de @code{tlp-configuration}} y-n-boolean sound-power-save-controller?
19871 Désactive le contrôleur en mode de gestion de l'énergie sur les
19872 périphériques Intel HDA.
19873
19874 La valeur par défaut est @samp{#t}.
19875
19876 @end deftypevr
19877
19878 @deftypevr {paramètre de @code{tlp-configuration}} boolean bay-poweroff-on-bat?
19879 Active le périphérique optique AltraBay/MediaBay en mode batterie. Le
19880 périphérique peut être de nouveau alimenté en lâchant (et en réinsérant) le
19881 levier d'éjection ou en appuyant sur le bouton d'éjection sur les modèles
19882 plus récents.
19883
19884 La valeur par défaut est @samp{#f}.
19885
19886 @end deftypevr
19887
19888 @deftypevr {paramètre de @code{tlp-configuration}} string bay-device
19889 Nom du périphérique optique à éteindre.
19890
19891 La valeur par défaut est @samp{"sr0"}.
19892
19893 @end deftypevr
19894
19895 @deftypevr {paramètre de @code{tlp-configuration}} string runtime-pm-on-ac
19896 Gestion de l'énergie à l'exécution sur les bus PCI(e). Les possibilités
19897 sont on et auto.
19898
19899 La valeur par défaut est @samp{"on"}.
19900
19901 @end deftypevr
19902
19903 @deftypevr {paramètre de @code{tlp-configuration}} string runtime-pm-on-bat
19904 Comme @code{runtime-pm-ac} mais en mode batterie.
19905
19906 La valeur par défaut est @samp{"auto"}.
19907
19908 @end deftypevr
19909
19910 @deftypevr {paramètre de @code{tlp-configuration}} boolean runtime-pm-all?
19911 Gestion de l'énergie à l'exécution pour tous les bus PCI(e), sauf ceux en
19912 liste noire.
19913
19914 La valeur par défaut est @samp{#t}.
19915
19916 @end deftypevr
19917
19918 @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list runtime-pm-blacklist
19919 Exclue les adresses des périphériques PCI(e) spécifiés de la gestion de
19920 l'énergie à l'exécution.
19921
19922 La valeur par défaut est @samp{disabled}.
19923
19924 @end deftypevr
19925
19926 @deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list runtime-pm-driver-blacklist
19927 Exclue les périphériques PCI(e) assignés aux pilotes spécifiés de la gestion
19928 de l'énergie à l'exécution.
19929
19930 @end deftypevr
19931
19932 @deftypevr {paramètre de @code{tlp-configuration}} boolean usb-autosuspend?
19933 Active la fonctionnalité de mise en veille automatique de l'USB.
19934
19935 La valeur par défaut est @samp{#t}.
19936
19937 @end deftypevr
19938
19939 @deftypevr {paramètre de @code{tlp-configuration}} maybe-string usb-blacklist
19940 Exclue les périphériques spécifiés de la mise en veille automatique de
19941 l'USB.
19942
19943 La valeur par défaut est @samp{disabled}.
19944
19945 @end deftypevr
19946
19947 @deftypevr {paramètre de @code{tlp-configuration}} boolean usb-blacklist-wwan?
19948 Exclue les périphériques WWAN de la mise en veille automatique de l'USB.
19949
19950 La valeur par défaut est @samp{#t}.
19951
19952 @end deftypevr
19953
19954 @deftypevr {paramètre de @code{tlp-configuration}} maybe-string usb-whitelist
19955 Inclue les périphériques spécifiés dans la mise en veille automatique de
19956 l'USB, même s'ils sont déjà exclus par le pilote ou via
19957 @code{usb-blacklist-wwan?}.
19958
19959 La valeur par défaut est @samp{disabled}.
19960
19961 @end deftypevr
19962
19963 @deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean usb-autosuspend-disable-on-shutdown?
19964 Active la mise en veille de l'USB avant l'arrêt.
19965
19966 La valeur par défaut est @samp{disabled}.
19967
19968 @end deftypevr
19969
19970 @deftypevr {paramètre de @code{tlp-configuration}} boolean restore-device-state-on-startup?
19971 Restaure l'état des périphériques radio (bluetooth, wifi, wwan) du dernier
19972 arrêt au démarrage du système.
19973
19974 La valeur par défaut est @samp{#f}.
19975
19976 @end deftypevr
19977
19978 @cindex thermald
19979 @cindex gestion de la fréquence du CPU avec thermald
19980 @subsubheading démon Thermald
19981
19982 Le module @code{(gnu services pm)} fournit une interface pour thermald, un
19983 service de gestion de l'horloge CPU qui aide à éviter la surchauffe.
19984
19985 @defvr {Variable Scheme} thermald-service-type
19986 C'est le type de service pour @uref{https://01.org/linux-thermal-daemon/,
19987 thermald}, le démon de température de Linux, responsable du contrôle de
19988 l'état thermique des processeurs et d'éviter la surchauffe.
19989 @end defvr
19990
19991 @deftp {Type de données} thermald-configuration
19992 Type de données représentant la configuration de
19993 @code{thermald-service-type}.
19994
19995 @table @asis
19996 @item @code{ignore-cpuid-check?} (par défaut : @code{#f})
19997 Ignore la vérification des modèles CPU supportés avec cpuid.
19998
19999 @item @code{thermald} (par défaut : @var{thermald})
20000 Objet du paquet de thermald.
20001
20002 @end table
20003 @end deftp
20004
20005 @node Services audio
20006 @subsubsection Services audio
20007
20008 Le module @code{(gnu services audio)} fournit un service qui lance MPD (le
20009 démon de lecture de musique).
20010
20011 @cindex mpd
20012 @subsubheading Music Player Daemon
20013
20014 Le démon de lecture de musique (MPD) est un service qui joue de la musique
20015 tout en étant contrôlé depuis la machine locale ou à travers le réseau par
20016 divers clients.
20017
20018 L'exemple suivant montre comment on peut lancer @code{mpd} en tant
20019 qu'utilisateur @code{"bob"} sur le port @code{6666}. Il utilise pulseaudio
20020 pour la sortie audio.
20021
20022 @example
20023 (service mpd-service-type
20024 (mpd-configuration
20025 (user "bob")
20026 (port "6666")))
20027 @end example
20028
20029 @defvr {Variable Scheme} mpd-service-type
20030 Le type de service pour @command{mpd}.
20031 @end defvr
20032
20033 @deftp {Type de données} mpd-configuration
20034 Type de données représentant la configuration de @command{mpd}.
20035
20036 @table @asis
20037 @item @code{user} (par défaut : @code{"mpd"})
20038 L'utilisateur qui lance mpd.
20039
20040 @item @code{music-dir} (par défaut : @code{"~/Music"})
20041 Le répertoire à scanner pour trouver les fichiers de musique.
20042
20043 @item @code{playlist-dir} (par défaut : @code{"~/.mpd/playlists"})
20044 Le répertoire où stocker les playlists.
20045
20046 @item @code{port} (par défaut : @code{"6600"})
20047 Le port sur lequel lancer mpd.
20048
20049 @item @code{address} (par défaut : @code{"any"})
20050 L'adresse sur laquelle se lie mpd. Pour utiliser un socket Unix domain, un
20051 chemin absolu peut être spécifié ici.
20052
20053 @end table
20054 @end deftp
20055
20056 @node Services de virtualisation
20057 @subsubsection services de virtualisation
20058
20059 Le module @code{(gnu services virtualization)} fournit des services pour les
20060 démons libvirt et virtlog, ainsi que d'autres services liés à la
20061 virtualisation.
20062
20063 @subsubheading démon libvirt
20064 @code{libvirtd} est le démon côté serveur du système de gestion de
20065 virtualisation libvirt. Ce démon tourne sur des serveurs hôtes et effectue
20066 les taches de gestion requises pour les clients virtualisés.
20067
20068 @deffn {Variable Scheme} libvirt-service-type
20069 C'est le type du @uref{https://libvirt.org, démon libvirt}. Sa valeur doit
20070 être un @code{libvirt-configuration}.
20071
20072 @example
20073 (service libvirt-service-type
20074 (libvirt-configuration
20075 (unix-sock-group "libvirt")
20076 (tls-port "16555")))
20077 @end example
20078 @end deffn
20079
20080 @c Auto-generated with (generate-libvirt-documentation)
20081 Les champs de @code{libvirt-configuration} disponibles sont :
20082
20083 @deftypevr {paramètre de @code{libvirt-configuration}} package libvirt
20084 Paquet libvirt.
20085
20086 @end deftypevr
20087
20088 @deftypevr {paramètre de @code{libvirt-configuration}} boolean listen-tls?
20089 Indique s'il faut écouter des connexions TLS sécurisées sur le port TCP/IP
20090 public. Vous devez remplir le champ @code{listen} pour que cela ait un
20091 effet.
20092
20093 Il est nécessaire de mettre en place une CA et de créer un certificat
20094 serveur avant d'utiliser cette fonctionnalité.
20095
20096 La valeur par défaut est @samp{#t}.
20097
20098 @end deftypevr
20099
20100 @deftypevr {paramètre de @code{libvirt-configuration}} boolean listen-tcp?
20101 Écoute des connexions non-chiffrées sur le port TCP/IP public. Vous devez
20102 remplir le champ @code{listen} pour que cela ait un effet.
20103
20104 L'utilisation des sockets TCP requiert une authentification SASL par
20105 défaut. Seuls les mécanismes SASL qui supportent le chiffrement des données
20106 sont permis. Il s'agit de DIGEST_MD5 et GSSAPI (Kerberos5).
20107
20108 La valeur par défaut est @samp{#f}.
20109
20110 @end deftypevr
20111
20112 @deftypevr {paramètre de @code{libvirt-configuration}} string tls-port
20113 Pour pour accepter les connexions TLS sécurisées. Il peut s'agir d'un
20114 numéro de port ou d'un nom de service.
20115
20116 La valeur par défaut est @samp{"16514"}.
20117
20118 @end deftypevr
20119
20120 @deftypevr {paramètre de @code{libvirt-configuration}} string tcp-port
20121 Pour sur lequel accepter les connexions TCP non sécurisées. Cela peut être
20122 un numéro de port ou un nom de service.
20123
20124 La valeur par défaut est @samp{"16509"}.
20125
20126 @end deftypevr
20127
20128 @deftypevr {paramètre de @code{libvirt-configuration}} string listen-addr
20129 Adresse IP ou nom d'hôte utilisé pour les connexions des clients.
20130
20131 La valeur par défaut est @samp{"0.0.0.0"}.
20132
20133 @end deftypevr
20134
20135 @deftypevr {paramètre de @code{libvirt-configuration}} boolean mdns-adv?
20136 Indique s'il faut publier le service libvirt en mDNS.
20137
20138 Autrement, vous pouvez désactiver cela pour tous les services en stoppant le
20139 démon Avahi.
20140
20141 La valeur par défaut est @samp{#f}.
20142
20143 @end deftypevr
20144
20145 @deftypevr {paramètre de @code{libvirt-configuration}} string mdns-name
20146 Nom publié par défaut sur mDNS. Cela doit être unique sur le réseau local.
20147
20148 La valeur par défaut est @samp{"Virtualization Host <hostname>"}.
20149
20150 @end deftypevr
20151
20152 @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-group
20153 Groupe propriétaire du socket Unix domain. Cela peut être utilisé pour
20154 permettre à un ensemble d'utilisateurs « de confiance » de gérer les
20155 fonctionnalités sans devenir root.
20156
20157 La valeur par défaut est @samp{"root"}.
20158
20159 @end deftypevr
20160
20161 @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-ro-perms
20162 Permission Unix pour le socket en lecture seule. Il est utilisé pour
20163 surveiller le statut des VM uniquement.
20164
20165 La valeur par défaut est @samp{"0777"}.
20166
20167 @end deftypevr
20168
20169 @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-rw-perms
20170 Permission Unix pour le socket en lecture-écriture. La valeur par défaut
20171 n'autorise que root. Si PolicyKit est activé sur le socket, la valeur par
20172 défaut change et permet tout le monde (c.-à-d.@: 0777).
20173
20174 La valeur par défaut est @samp{"0770"}.
20175
20176 @end deftypevr
20177
20178 @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-admin-perms
20179 permissions Unix pour le socket d'administration. La valeur par défaut ne
20180 permet que le propriétaire (root), ne la changez pas à moins que vous ne
20181 soyez sûr de savoir à qui vous exposez cet accès.
20182
20183 La valeur par défaut est @samp{"0777"}.
20184
20185 @end deftypevr
20186
20187 @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-dir
20188 Le répertoire dans lequel les sockets sont créés.
20189
20190 La valeur par défaut est @samp{"/var/run/libvirt"}.
20191
20192 @end deftypevr
20193
20194 @deftypevr {paramètre de @code{libvirt-configuration}} string auth-unix-ro
20195 Schéma d'authentification pour les socket Unix en lecture-seule. Par défaut
20196 les permissions des socket permettent à n'importe qui de se connecter.
20197
20198 La valeur par défaut est @samp{"polkit"}.
20199
20200 @end deftypevr
20201
20202 @deftypevr {paramètre de @code{libvirt-configuration}} string auth-unix-rw
20203 Schéma d'authentification pour les socket UNIX en lecture-écriture. Par
20204 défaut les permissions du socket ne permettent que root. Si le support de
20205 PolicyKit a été compilé dans libvirt, la valeur par défaut utilise
20206 l'authentification « polkit ».
20207
20208 La valeur par défaut est @samp{"polkit"}.
20209
20210 @end deftypevr
20211
20212 @deftypevr {paramètre de @code{libvirt-configuration}} string auth-tcp
20213 Schéma d'authentification pour les sockets TCP. Si vous n'avez pas activé
20214 SASL, alors tout le trafic TCP est en clair. Ne le faites pas en dehors de
20215 scénario de développement ou de test.
20216
20217 La valeur par défaut est @samp{"sasl"}.
20218
20219 @end deftypevr
20220
20221 @deftypevr {paramètre de @code{libvirt-configuration}} string auth-tls
20222 Schéma d'authentification pour les sockets TLS. Les sockets TLS sont déjà
20223 chiffrés par la couche TLS, et une authentification limitée est effectuée
20224 avec les certificats.
20225
20226 Il est possible d'utiliser de n'importe quel mécanisme d'authentification
20227 SASL en utilisant « sasl » pour cette option.
20228
20229 La valeur par défaut est @samp{"none"}.
20230
20231 @end deftypevr
20232
20233 @deftypevr {paramètre de @code{libvirt-configuration}} optional-list access-drivers
20234 Schéma de contrôle d'accès à l'API.
20235
20236 Par défaut un utilisateur authentifié peut accéder à toutes les API. Les
20237 pilotes d'accès peuvent placer des restrictions là-dessus.
20238
20239 La valeur par défaut est @samp{()}.
20240
20241 @end deftypevr
20242
20243 @deftypevr {paramètre de @code{libvirt-configuration}} string key-file
20244 Chemin de fichier de la clef du serveur. Si la valeur est une chaîne vide,
20245 aucune clef privée n'est chargée.
20246
20247 La valeur par défaut est @samp{""}.
20248
20249 @end deftypevr
20250
20251 @deftypevr {paramètre de @code{libvirt-configuration}} string cert-file
20252 Chemin de fichier de la clef du serveur. Si la chaîne est vide, aucun
20253 certificat n'est chargé.
20254
20255 La valeur par défaut est @samp{""}.
20256
20257 @end deftypevr
20258
20259 @deftypevr {paramètre de @code{libvirt-configuration}} string ca-file
20260 Chemin de fichier de la clef du serveur. Si la chaîne est vide, aucun
20261 certificat de CA n'est chargé.
20262
20263 La valeur par défaut est @samp{""}.
20264
20265 @end deftypevr
20266
20267 @deftypevr {paramètre de @code{libvirt-configuration}} string crl-file
20268 Chemin de la liste de révocation des certificats. Si la chaîne est vide,
20269 aucun CRL n'est chargé.
20270
20271 La valeur par défaut est @samp{""}.
20272
20273 @end deftypevr
20274
20275 @deftypevr {paramètre de @code{libvirt-configuration}} boolean tls-no-sanity-cert
20276 Désactive la vérification de nos propres certificats serveurs.
20277
20278 Lorsque libvirtd démarre il effectue des vérifications de routine sur ses
20279 propres certificats.
20280
20281 La valeur par défaut est @samp{#f}.
20282
20283 @end deftypevr
20284
20285 @deftypevr {paramètre de @code{libvirt-configuration}} boolean tls-no-verify-cert
20286 Désactive la vérification des certificats clients.
20287
20288 La vérification des certificats clients est le mécanisme d'authentification
20289 principal. Tout client qui ne présent pas de certificat signé par la CA
20290 sera rejeté.
20291
20292 La valeur par défaut est @samp{#f}.
20293
20294 @end deftypevr
20295
20296 @deftypevr {paramètre de @code{libvirt-configuration}} optional-list tls-allowed-dn-list
20297 Liste blanche des Distinguished Name x509 autorisés.
20298
20299 La valeur par défaut est @samp{()}.
20300
20301 @end deftypevr
20302
20303 @deftypevr {paramètre de @code{libvirt-configuration}} optional-list sasl-allowed-usernames
20304 Liste blanche des noms d'utilisateur SASL permis. Le format des noms
20305 d'utilisateurs dépend du mécanisme d'authentification SASL.
20306
20307 La valeur par défaut est @samp{()}.
20308
20309 @end deftypevr
20310
20311 @deftypevr {paramètre de @code{libvirt-configuration}} string tls-priority
20312 Modifie la chaîne de priorité TLS par défaut fixée à la compilation. La
20313 valeur par défaut est typiquement « NORMAL » à moins qu'elle n'ait été
20314 modifiée à la compilation. Ne l'indiquez que si vous voulez que libvirt
20315 agisse différemment des paramètres par défaut globaux.
20316
20317 La valeur par défaut est @samp{"NORMAL"}.
20318
20319 @end deftypevr
20320
20321 @deftypevr {paramètre de @code{libvirt-configuration}} integer max-clients
20322 Nombre maximum de connexions clientes en même temps sur tous les sockets.
20323
20324 La valeur par défaut est @samp{5000}.
20325
20326 @end deftypevr
20327
20328 @deftypevr {paramètre de @code{libvirt-configuration}} integer max-queued-clients
20329 Longueur maximum de la queue de connexions en attente d'acceptation du
20330 démon. Remarquez que certains protocoles supportant la retransmission
20331 peuvent obéir à ce paramètre pour qu'une connexion ultérieure réussisse.
20332
20333 La valeur par défaut est @samp{1000}.
20334
20335 @end deftypevr
20336
20337 @deftypevr {paramètre de @code{libvirt-configuration}} integer max-anonymous-clients
20338 Longueur maximum de la queue des clients acceptés mais pas authentifiés.
20339 Indiquez zéro pour désactiver ce paramètre.
20340
20341 La valeur par défaut est @samp{20}.
20342
20343 @end deftypevr
20344
20345 @deftypevr {paramètre de @code{libvirt-configuration}} integer min-workers
20346 Nombre de processus de travail démarrés initialement.
20347
20348 La valeur par défaut est @samp{5}.
20349
20350 @end deftypevr
20351
20352 @deftypevr {paramètre de @code{libvirt-configuration}} integer max-workers
20353 Nombre maximum de threads de travail.
20354
20355 Si le nombre de clients actifs dépasse @code{min-workers}, plus de threads
20356 seront démarrés, jusqu'à la limite de max_workers. Typiquement vous voulez
20357 que max_workers soit égal au nombre maximum de clients permis.
20358
20359 La valeur par défaut est @samp{20}.
20360
20361 @end deftypevr
20362
20363 @deftypevr {paramètre de @code{libvirt-configuration}} integer prio-workers
20364 Nombre de travailleurs prioritaires. Si tous les threads de travail du
20365 groupe ci-dessus sont bloqués, certains appels marqués comme prioritaires
20366 (notamment domainDestroy) peuvent être exécutés par ce groupe.
20367
20368 La valeur par défaut est @samp{5}.
20369
20370 @end deftypevr
20371
20372 @deftypevr {paramètre de @code{libvirt-configuration}} integer max-requests
20373 Limite globale totale sur les appels RPC concurrents.
20374
20375 La valeur par défaut est @samp{20}.
20376
20377 @end deftypevr
20378
20379 @deftypevr {paramètre de @code{libvirt-configuration}} integer max-client-requests
20380 Limit on concurrent requests from a single client connection. To avoid one
20381 client monopolizing the server this should be a small fraction of the global
20382 max_requests and max_workers parameter.
20383
20384 La valeur par défaut est @samp{5}.
20385
20386 @end deftypevr
20387
20388 @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-min-workers
20389 Same as @code{min-workers} but for the admin interface.
20390
20391 La valeur par défaut est @samp{1}.
20392
20393 @end deftypevr
20394
20395 @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-workers
20396 Same as @code{max-workers} but for the admin interface.
20397
20398 La valeur par défaut est @samp{5}.
20399
20400 @end deftypevr
20401
20402 @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-clients
20403 Same as @code{max-clients} but for the admin interface.
20404
20405 La valeur par défaut est @samp{5}.
20406
20407 @end deftypevr
20408
20409 @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-queued-clients
20410 Same as @code{max-queued-clients} but for the admin interface.
20411
20412 La valeur par défaut est @samp{5}.
20413
20414 @end deftypevr
20415
20416 @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-client-requests
20417 Same as @code{max-client-requests} but for the admin interface.
20418
20419 La valeur par défaut est @samp{5}.
20420
20421 @end deftypevr
20422
20423 @deftypevr {paramètre de @code{libvirt-configuration}} integer log-level
20424 Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
20425
20426 La valeur par défaut est @samp{3}.
20427
20428 @end deftypevr
20429
20430 @deftypevr {paramètre de @code{libvirt-configuration}} string log-filters
20431 Logging filters.
20432
20433 A filter allows to select a different logging level for a given category of
20434 logs The format for a filter is one of:
20435
20436 @itemize @bullet
20437 @item
20438 x:nom
20439
20440 @item
20441 x:+nom
20442
20443 @end itemize
20444
20445 where @code{name} is a string which is matched against the category given in
20446 the @code{VIR_LOG_INIT()} at the top of each libvirt source file, e.g.,
20447 "remote", "qemu", or "util.json" (the name in the filter can be a substring
20448 of the full category name, in order to match multiple similar categories),
20449 the optional "+" prefix tells libvirt to log stack trace for each message
20450 matching name, and @code{x} is the minimal level where matching messages
20451 should be logged:
20452
20453 @itemize @bullet
20454 @item
20455 1: DEBUG
20456
20457 @item
20458 2: INFO
20459
20460 @item
20461 3: WARNING
20462
20463 @item
20464 4: ERROR
20465
20466 @end itemize
20467
20468 Multiple filters can be defined in a single filters statement, they just
20469 need to be separated by spaces.
20470
20471 La valeur par défaut est @samp{"3:remote 4:event"}.
20472
20473 @end deftypevr
20474
20475 @deftypevr {paramètre de @code{libvirt-configuration}} string log-outputs
20476 Logging outputs.
20477
20478 An output is one of the places to save logging information The format for an
20479 output can be:
20480
20481 @table @code
20482 @item x:stderr
20483 output goes to stderr
20484
20485 @item x:syslog:name
20486 use syslog for the output and use the given name as the ident
20487
20488 @item x:file:file_path
20489 output to a file, with the given filepath
20490
20491 @item x:journald
20492 output to journald logging system
20493
20494 @end table
20495
20496 In all case the x prefix is the minimal level, acting as a filter
20497
20498 @itemize @bullet
20499 @item
20500 1: DEBUG
20501
20502 @item
20503 2: INFO
20504
20505 @item
20506 3: WARNING
20507
20508 @item
20509 4: ERROR
20510
20511 @end itemize
20512
20513 Multiple outputs can be defined, they just need to be separated by spaces.
20514
20515 La valeur par défaut est @samp{"3:stderr"}.
20516
20517 @end deftypevr
20518
20519 @deftypevr {paramètre de @code{libvirt-configuration}} integer audit-level
20520 Allows usage of the auditing subsystem to be altered
20521
20522 @itemize @bullet
20523 @item
20524 0: disable all auditing
20525
20526 @item
20527 1: enable auditing, only if enabled on host
20528
20529 @item
20530 2: enable auditing, and exit if disabled on host.
20531
20532 @end itemize
20533
20534 La valeur par défaut est @samp{1}.
20535
20536 @end deftypevr
20537
20538 @deftypevr {paramètre de @code{libvirt-configuration}} boolean audit-logging
20539 Send audit messages via libvirt logging infrastructure.
20540
20541 La valeur par défaut est @samp{#f}.
20542
20543 @end deftypevr
20544
20545 @deftypevr {paramètre de @code{libvirt-configuration}} optional-string host-uuid
20546 Host UUID. UUID must not have all digits be the same.
20547
20548 La valeur par défaut est @samp{""}.
20549
20550 @end deftypevr
20551
20552 @deftypevr {paramètre de @code{libvirt-configuration}} string host-uuid-source
20553 Source to read host UUID.
20554
20555 @itemize @bullet
20556 @item
20557 @code{smbios}: fetch the UUID from @code{dmidecode -s system-uuid}
20558
20559 @item
20560 @code{machine-id}: fetch the UUID from @code{/etc/machine-id}
20561
20562 @end itemize
20563
20564 If @code{dmidecode} does not provide a valid UUID a temporary UUID will be
20565 generated.
20566
20567 La valeur par défaut est @samp{"smbios"}.
20568
20569 @end deftypevr
20570
20571 @deftypevr {paramètre de @code{libvirt-configuration}} integer keepalive-interval
20572 A keepalive message is sent to a client after @code{keepalive_interval}
20573 seconds of inactivity to check if the client is still responding. If set to
20574 -1, libvirtd will never send keepalive requests; however clients can still
20575 send them and the daemon will send responses.
20576
20577 La valeur par défaut est @samp{5}.
20578
20579 @end deftypevr
20580
20581 @deftypevr {paramètre de @code{libvirt-configuration}} integer keepalive-count
20582 Maximum number of keepalive messages that are allowed to be sent to the
20583 client without getting any response before the connection is considered
20584 broken.
20585
20586 In other words, the connection is automatically closed approximately after
20587 @code{keepalive_interval * (keepalive_count + 1)} seconds since the last
20588 message received from the client. When @code{keepalive-count} is set to 0,
20589 connections will be automatically closed after @code{keepalive-interval}
20590 seconds of inactivity without sending any keepalive messages.
20591
20592 La valeur par défaut est @samp{5}.
20593
20594 @end deftypevr
20595
20596 @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-keepalive-interval
20597 Same as above but for admin interface.
20598
20599 La valeur par défaut est @samp{5}.
20600
20601 @end deftypevr
20602
20603 @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-keepalive-count
20604 Same as above but for admin interface.
20605
20606 La valeur par défaut est @samp{5}.
20607
20608 @end deftypevr
20609
20610 @deftypevr {paramètre de @code{libvirt-configuration}} integer ovs-timeout
20611 Timeout for Open vSwitch calls.
20612
20613 The @code{ovs-vsctl} utility is used for the configuration and its timeout
20614 option is set by default to 5 seconds to avoid potential infinite waits
20615 blocking libvirt.
20616
20617 La valeur par défaut est @samp{5}.
20618
20619 @end deftypevr
20620
20621 @c %end of autogenerated docs
20622
20623 @subsubheading démon Virrlog
20624 The virtlogd service is a server side daemon component of libvirt that is
20625 used to manage logs from virtual machine consoles.
20626
20627 This daemon is not used directly by libvirt client applications, rather it
20628 is called on their behalf by @code{libvirtd}. By maintaining the logs in a
20629 standalone daemon, the main @code{libvirtd} daemon can be restarted without
20630 risk of losing logs. The @code{virtlogd} daemon has the ability to re-exec()
20631 itself upon receiving @code{SIGUSR1}, to allow live upgrades without
20632 downtime.
20633
20634 @deffn {Variable Scheme} virtlog-service-type
20635 This is the type of the virtlog daemon. Its value must be a
20636 @code{virtlog-configuration}.
20637
20638 @example
20639 (service virtlog-service-type
20640 (virtlog-configuration
20641 (max-clients 1000)))
20642 @end example
20643 @end deffn
20644
20645 @deftypevr {paramètre de @code{virtlog-configuration}} integer log-level
20646 Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
20647
20648 La valeur par défaut est @samp{3}.
20649
20650 @end deftypevr
20651
20652 @deftypevr {paramètre de @code{virtlog-configuration}} string log-filters
20653 Logging filters.
20654
20655 A filter allows to select a different logging level for a given category of
20656 logs The format for a filter is one of:
20657
20658 @itemize @bullet
20659 @item
20660 x:nom
20661
20662 @item
20663 x:+nom
20664
20665 @end itemize
20666
20667 where @code{name} is a string which is matched against the category given in
20668 the @code{VIR_LOG_INIT()} at the top of each libvirt source file, e.g.,
20669 "remote", "qemu", or "util.json" (the name in the filter can be a substring
20670 of the full category name, in order to match multiple similar categories),
20671 the optional "+" prefix tells libvirt to log stack trace for each message
20672 matching name, and @code{x} is the minimal level where matching messages
20673 should be logged:
20674
20675 @itemize @bullet
20676 @item
20677 1: DEBUG
20678
20679 @item
20680 2: INFO
20681
20682 @item
20683 3: WARNING
20684
20685 @item
20686 4: ERROR
20687
20688 @end itemize
20689
20690 Multiple filters can be defined in a single filters statement, they just
20691 need to be separated by spaces.
20692
20693 La valeur par défaut est @samp{"3:remote 4:event"}.
20694
20695 @end deftypevr
20696
20697 @deftypevr {paramètre de @code{virtlog-configuration}} string log-outputs
20698 Logging outputs.
20699
20700 An output is one of the places to save logging information The format for an
20701 output can be:
20702
20703 @table @code
20704 @item x:stderr
20705 output goes to stderr
20706
20707 @item x:syslog:name
20708 use syslog for the output and use the given name as the ident
20709
20710 @item x:file:file_path
20711 output to a file, with the given filepath
20712
20713 @item x:journald
20714 output to journald logging system
20715
20716 @end table
20717
20718 In all case the x prefix is the minimal level, acting as a filter
20719
20720 @itemize @bullet
20721 @item
20722 1: DEBUG
20723
20724 @item
20725 2: INFO
20726
20727 @item
20728 3: WARNING
20729
20730 @item
20731 4: ERROR
20732
20733 @end itemize
20734
20735 Multiple outputs can be defined, they just need to be separated by spaces.
20736
20737 La valeur par défaut est @samp{"3:stderr"}.
20738
20739 @end deftypevr
20740
20741 @deftypevr {paramètre de @code{virtlog-configuration}} integer max-clients
20742 Nombre maximum de connexions clientes en même temps sur tous les sockets.
20743
20744 La valeur par défaut est @samp{1024}.
20745
20746 @end deftypevr
20747
20748 @deftypevr {paramètre de @code{virtlog-configuration}} integer max-size
20749 Maximum file size before rolling over.
20750
20751 La valeur par défaut est @samp{2MB}.
20752
20753 @end deftypevr
20754
20755 @deftypevr {paramètre de @code{virtlog-configuration}} integer max-backups
20756 Maximum number of backup files to keep.
20757
20758 La valeur par défaut est @samp{3}.
20759
20760 @end deftypevr
20761
20762 @subsubheading Émulation transparente avec QEMU
20763
20764 @cindex émulation
20765 @cindex @code{binfmt_misc}
20766 @code{qemu-binfmt-service-type} provides support for transparent emulation
20767 of program binaries built for different architectures---e.g., it allows you
20768 to transparently execute an ARMv7 program on an x86_64 machine. It achieves
20769 this by combining the @uref{https://www.qemu.org, QEMU} emulator and the
20770 @code{binfmt_misc} feature of the kernel Linux.
20771
20772 @defvr {Variable Scheme} qemu-binfmt-service-type
20773 This is the type of the QEMU/binfmt service for transparent emulation. Its
20774 value must be a @code{qemu-binfmt-configuration} object, which specifies the
20775 QEMU package to use as well as the architecture we want to emulated:
20776
20777 @example
20778 (service qemu-binfmt-service-type
20779 (qemu-binfmt-configuration
20780 (platforms (lookup-qemu-platforms "arm" "aarch64" "ppc"))))
20781 @end example
20782
20783 In this example, we enable transparent emulation for the ARM and aarch64
20784 platforms. Running @code{herd stop qemu-binfmt} turns it off, and running
20785 @code{herd start qemu-binfmt} turns it back on (@pxref{Invoking herd, the
20786 @command{herd} command,, shepherd, The GNU Shepherd Manual}).
20787 @end defvr
20788
20789 @deftp {Type de données} qemu-binfmt-configuration
20790 This is the configuration for the @code{qemu-binfmt} service.
20791
20792 @table @asis
20793 @item @code{platforms} (par défaut : @code{'()})
20794 The list of emulated QEMU platforms. Each item must be a @dfn{platform
20795 object} as returned by @code{lookup-qemu-platforms} (see below).
20796
20797 @item @code{guix-support?} (par défaut : @code{#f})
20798 When it is true, QEMU and all its dependencies are added to the build
20799 environment of @command{guix-daemon} (@pxref{Invoquer guix-daemon,
20800 @code{--chroot-directory} option}). This allows the @code{binfmt_misc}
20801 handlers to be used within the build environment, which in turn means that
20802 you can transparently build programs for another architecture.
20803
20804 For example, let's suppose you're on an x86_64 machine and you have this
20805 service:
20806
20807 @example
20808 (service qemu-binfmt-service-type
20809 (qemu-binfmt-configuration
20810 (platforms (lookup-qemu-platforms "arm"))
20811 (guix-support? #t)))
20812 @end example
20813
20814 Vous pouvez lancer :
20815
20816 @example
20817 guix build -s armhf-linux inkscape
20818 @end example
20819
20820 @noindent
20821 and it will build Inkscape for ARMv7 @emph{as if it were a native build},
20822 transparently using QEMU to emulate the ARMv7 CPU. Pretty handy if you'd
20823 like to test a package build for an architecture you don't have access to!
20824
20825 @item @code{qemu} (par défaut : @code{qemu})
20826 Le paquet QEMU à utiliser.
20827 @end table
20828 @end deftp
20829
20830 @deffn {Procédure Scheme} lookup-qemu-platforms @var{platforms}@dots{}
20831 Return the list of QEMU platform objects corresponding to
20832 @var{platforms}@dots{}. @var{platforms} must be a list of strings
20833 corresponding to platform names, such as @code{"arm"}, @code{"sparc"},
20834 @code{"mips64el"}, and so on.
20835 @end deffn
20836
20837 @deffn {Procédure Scheme} qemu-platform? @var{obj}
20838 Return true if @var{obj} is a platform object.
20839 @end deffn
20840
20841 @deffn {Procédure Scheme} qemu-platform-name @var{platform}
20842 Return the name of @var{platform}---a string such as @code{"arm"}.
20843 @end deffn
20844
20845 @node Services de contrôle de version
20846 @subsubsection Services de contrôle de version
20847
20848 The @code{(gnu services version-control)} module provides a service to allow
20849 remote access to local Git repositories. There are three options: the
20850 @code{git-daemon-service}, which provides access to repositories via the
20851 @code{git://} unsecured TCP-based protocol, extending the @code{nginx} web
20852 server to proxy some requests to @code{git-http-backend}, or providing a web
20853 interface with @code{cgit-service-type}.
20854
20855 @deffn {Procédure Scheme} git-daemon-service [#:config (git-daemon-configuration)]
20856
20857 Return a service that runs @command{git daemon}, a simple TCP server to
20858 expose repositories over the Git protocol for anonymous access.
20859
20860 The optional @var{config} argument should be a
20861 @code{<git-daemon-configuration>} object, by default it allows read-only
20862 access to exported@footnote{By creating the magic file
20863 "git-daemon-export-ok" in the repository directory.} repositories under
20864 @file{/srv/git}.
20865
20866 @end deffn
20867
20868 @deftp {Type de données} git-daemon-configuration
20869 Data type representing the configuration for @code{git-daemon-service}.
20870
20871 @table @asis
20872 @item @code{package} (par défaut : @var{git})
20873 Package object of the Git distributed version control system.
20874
20875 @item @code{export-all?} (par défaut : @var{#f})
20876 Whether to allow access for all Git repositories, even if they do not have
20877 the @file{git-daemon-export-ok} file.
20878
20879 @item @code{base-path} (par défaut : @file{/srv/git})
20880 Whether to remap all the path requests as relative to the given path. If
20881 you run git daemon with @var{(base-path "/srv/git")} on example.com, then if
20882 you later try to pull @code{git://example.com/hello.git}, git daemon will
20883 interpret the path as @code{/srv/git/hello.git}.
20884
20885 @item @code{user-path} (par défaut : @var{#f})
20886 Whether to allow @code{~user} notation to be used in requests. When
20887 specified with empty string, requests to @code{git://host/~alice/foo} is
20888 taken as a request to access @code{foo} repository in the home directory of
20889 user @code{alice}. If @var{(user-path "path")} is specified, the same
20890 request is taken as a request to access @code{path/foo} repository in the
20891 home directory of user @code{alice}.
20892
20893 @item @code{listen} (par défaut : @var{'()})
20894 Whether to listen on specific IP addresses or hostnames, defaults to all.
20895
20896 @item @code{port} (par défaut : @var{#f})
20897 Whether to listen on an alternative port, which defaults to 9418.
20898
20899 @item @code{whitelist} (par défaut : @var{'()})
20900 If not empty, only allow access to this list of directories.
20901
20902 @item @code{extra-options} (par défaut : @var{'()})
20903 Extra options will be passed to @code{git daemon}, please run @command{man
20904 git-daemon} for more information.
20905
20906 @end table
20907 @end deftp
20908
20909 The @code{git://} protocol lacks authentication. When you pull from a
20910 repository fetched via @code{git://}, you don't know that the data you
20911 receive was modified is really coming from the specified host, and you have
20912 your connection is subject to eavesdropping. It's better to use an
20913 authenticated and encrypted transport, such as @code{https}. Although Git
20914 allows you to serve repositories using unsophisticated file-based web
20915 servers, there is a faster protocol implemented by the
20916 @code{git-http-backend} program. This program is the back-end of a proper
20917 Git web service. It is designed to sit behind a FastCGI proxy. @xref{Services web}, for more on running the necessary @code{fcgiwrap} daemon.
20918
20919 Guix has a separate configuration data type for serving Git repositories
20920 over HTTP.
20921
20922 @deftp {Type de données} git-http-configuration
20923 Data type representing the configuration for @code{git-http-service}.
20924
20925 @table @asis
20926 @item @code{package} (par défaut : @var{git})
20927 Package object of the Git distributed version control system.
20928
20929 @item @code{git-root} (par défaut : @file{/srv/git})
20930 Directory containing the Git repositories to expose to the world.
20931
20932 @item @code{export-all?} (par défaut : @var{#f})
20933 Whether to expose access for all Git repositories in @var{git-root}, even if
20934 they do not have the @file{git-daemon-export-ok} file.
20935
20936 @item @code{uri-path} (par défaut : @file{/git/})
20937 Path prefix for Git access. With the default @code{/git/} prefix, this will
20938 map @code{http://@var{server}/git/@var{repo}.git} to
20939 @code{/srv/git/@var{repo}.git}. Requests whose URI paths do not begin with
20940 this prefix are not passed on to this Git instance.
20941
20942 @item @code{fcgiwrap-socket} (par défaut : @code{127.0.0.1:9000})
20943 The socket on which the @code{fcgiwrap} daemon is listening. @xref{Services web}.
20944 @end table
20945 @end deftp
20946
20947 There is no @code{git-http-service-type}, currently; instead you can create
20948 an @code{nginx-location-configuration} from a @code{git-http-configuration}
20949 and then add that location to a web server.
20950
20951 @deffn {Procédure Scheme} git-http-nginx-location-configuration @
20952 [config=(git-http-configuration)] Compute an
20953 @code{nginx-location-configuration} that corresponds to the given Git http
20954 configuration. An example nginx service definition to serve the default
20955 @file{/srv/git} over HTTPS might be:
20956
20957 @example
20958 (service nginx-service-type
20959 (nginx-configuration
20960 (server-blocks
20961 (list
20962 (nginx-server-configuration
20963 (listen '("443 ssl"))
20964 (server-name "git.my-host.org")
20965 (ssl-certificate
20966 "/etc/letsencrypt/live/git.my-host.org/fullchain.pem")
20967 (ssl-certificate-key
20968 "/etc/letsencrypt/live/git.my-host.org/privkey.pem")
20969 (locations
20970 (list
20971 (git-http-nginx-location-configuration
20972 (git-http-configuration (uri-path "/"))))))))))
20973 @end example
20974
20975 This example assumes that you are using Let's Encrypt to get your TLS
20976 certificate. @xref{Services de certificats}. The default @code{certbot}
20977 service will redirect all HTTP traffic on @code{git.my-host.org} to HTTPS.
20978 You will also need to add an @code{fcgiwrap} proxy to your system services.
20979 @xref{Services web}.
20980 @end deffn
20981
20982 @subsubheading Service Cgit
20983
20984 @cindex service cgit
20985 @cindex git, interface web
20986 @uref{https://git.zx2c4.com/cgit/, Cgit} est une interface web pour des
20987 dépôts Git écrite en C.
20988
20989 The following example will configure the service with default values. By
20990 default, Cgit can be accessed on port 80 (@code{http://localhost:80}).
20991
20992 @example
20993 (service cgit-service-type)
20994 @end example
20995
20996 The @code{file-object} type designates either a file-like object
20997 (@pxref{G-Expressions, file-like objects}) or a string.
20998
20999 @c %start of fragment
21000
21001 Les champs de @code{cgit-configuration} disponibles sont :
21002
21003 @deftypevr {paramètre de @code{cgit-configuration}} package package
21004 Le paquet cgit.
21005
21006 @end deftypevr
21007
21008 @deftypevr {paramètre de @code{cgit-configuration}} nginx-server-configuration-list nginx
21009 Configuration Nginx.
21010
21011 @end deftypevr
21012
21013 @deftypevr {paramètre de @code{cgit-configuration}} file-object about-filter
21014 Specifies a command which will be invoked to format the content of about
21015 pages (both top-level and for each repository).
21016
21017 La valeur par défaut est @samp{""}.
21018
21019 @end deftypevr
21020
21021 @deftypevr {paramètre de @code{cgit-configuration}} string agefile
21022 Specifies a path, relative to each repository path, which can be used to
21023 specify the date and time of the youngest commit in the repository.
21024
21025 La valeur par défaut est @samp{""}.
21026
21027 @end deftypevr
21028
21029 @deftypevr {paramètre de @code{cgit-configuration}} file-object auth-filter
21030 Specifies a command that will be invoked for authenticating repository
21031 access.
21032
21033 La valeur par défaut est @samp{""}.
21034
21035 @end deftypevr
21036
21037 @deftypevr {paramètre de @code{cgit-configuration}} string branch-sort
21038 Flag which, when set to @samp{age}, enables date ordering in the branch ref
21039 list, and when set @samp{name} enables ordering by branch name.
21040
21041 La valeur par défaut est @samp{"name"}.
21042
21043 @end deftypevr
21044
21045 @deftypevr {paramètre de @code{cgit-configuration}} string cache-root
21046 Path used to store the cgit cache entries.
21047
21048 La valeur par défaut est @samp{"/var/cache/cgit"}.
21049
21050 @end deftypevr
21051
21052 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-static-ttl
21053 Number which specifies the time-to-live, in minutes, for the cached version
21054 of repository pages accessed with a fixed SHA1.
21055
21056 La valeur par défaut est @samp{-1}.
21057
21058 @end deftypevr
21059
21060 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-dynamic-ttl
21061 Number which specifies the time-to-live, in minutes, for the cached version
21062 of repository pages accessed without a fixed SHA1.
21063
21064 La valeur par défaut est @samp{5}.
21065
21066 @end deftypevr
21067
21068 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-repo-ttl
21069 Number which specifies the time-to-live, in minutes, for the cached version
21070 of the repository summary page.
21071
21072 La valeur par défaut est @samp{5}.
21073
21074 @end deftypevr
21075
21076 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-root-ttl
21077 Number which specifies the time-to-live, in minutes, for the cached version
21078 of the repository index page.
21079
21080 La valeur par défaut est @samp{5}.
21081
21082 @end deftypevr
21083
21084 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-scanrc-ttl
21085 Number which specifies the time-to-live, in minutes, for the result of
21086 scanning a path for Git repositories.
21087
21088 La valeur par défaut est @samp{15}.
21089
21090 @end deftypevr
21091
21092 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-about-ttl
21093 Number which specifies the time-to-live, in minutes, for the cached version
21094 of the repository about page.
21095
21096 La valeur par défaut est @samp{15}.
21097
21098 @end deftypevr
21099
21100 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-snapshot-ttl
21101 Number which specifies the time-to-live, in minutes, for the cached version
21102 of snapshots.
21103
21104 La valeur par défaut est @samp{5}.
21105
21106 @end deftypevr
21107
21108 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-size
21109 The maximum number of entries in the cgit cache. When set to @samp{0},
21110 caching is disabled.
21111
21112 La valeur par défaut est @samp{0}.
21113
21114 @end deftypevr
21115
21116 @deftypevr {paramètre de @code{cgit-configuration}} boolean case-sensitive-sort?
21117 Sort items in the repo list case sensitively.
21118
21119 La valeur par défaut est @samp{#t}.
21120
21121 @end deftypevr
21122
21123 @deftypevr {paramètre de @code{cgit-configuration}} list clone-prefix
21124 List of common prefixes which, when combined with a repository URL,
21125 generates valid clone URLs for the repository.
21126
21127 La valeur par défaut est @samp{()}.
21128
21129 @end deftypevr
21130
21131 @deftypevr {paramètre de @code{cgit-configuration}} list clone-url
21132 List of @code{clone-url} templates.
21133
21134 La valeur par défaut est @samp{()}.
21135
21136 @end deftypevr
21137
21138 @deftypevr {paramètre de @code{cgit-configuration}} file-object commit-filter
21139 Command which will be invoked to format commit messages.
21140
21141 La valeur par défaut est @samp{""}.
21142
21143 @end deftypevr
21144
21145 @deftypevr {paramètre de @code{cgit-configuration}} string commit-sort
21146 Flag which, when set to @samp{date}, enables strict date ordering in the
21147 commit log, and when set to @samp{topo} enables strict topological ordering.
21148
21149 La valeur par défaut est @samp{"git log"}.
21150
21151 @end deftypevr
21152
21153 @deftypevr {paramètre de @code{cgit-configuration}} file-object css
21154 URL which specifies the css document to include in all cgit pages.
21155
21156 La valeur par défaut est @samp{"/share/cgit/cgit.css"}.
21157
21158 @end deftypevr
21159
21160 @deftypevr {paramètre de @code{cgit-configuration}} file-object email-filter
21161 Specifies a command which will be invoked to format names and email address
21162 of committers, authors, and taggers, as represented in various places
21163 throughout the cgit interface.
21164
21165 La valeur par défaut est @samp{""}.
21166
21167 @end deftypevr
21168
21169 @deftypevr {paramètre de @code{cgit-configuration}} boolean embedded?
21170 Flag which, when set to @samp{#t}, will make cgit generate a HTML fragment
21171 suitable for embedding in other HTML pages.
21172
21173 La valeur par défaut est @samp{#f}.
21174
21175 @end deftypevr
21176
21177 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-commit-graph?
21178 Flag which, when set to @samp{#t}, will make cgit print an ASCII-art commit
21179 history graph to the left of the commit messages in the repository log page.
21180
21181 La valeur par défaut est @samp{#f}.
21182
21183 @end deftypevr
21184
21185 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-filter-overrides?
21186 Flag which, when set to @samp{#t}, allows all filter settings to be
21187 overridden in repository-specific cgitrc files.
21188
21189 La valeur par défaut est @samp{#f}.
21190
21191 @end deftypevr
21192
21193 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-follow-links?
21194 Flag which, when set to @samp{#t}, allows users to follow a file in the log
21195 view.
21196
21197 La valeur par défaut est @samp{#f}.
21198
21199 @end deftypevr
21200
21201 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-http-clone?
21202 If set to @samp{#t}, cgit will act as an dumb HTTP endpoint for Git clones.
21203
21204 La valeur par défaut est @samp{#t}.
21205
21206 @end deftypevr
21207
21208 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-index-links?
21209 Flag which, when set to @samp{#t}, will make cgit generate extra links
21210 "summary", "commit", "tree" for each repo in the repository index.
21211
21212 La valeur par défaut est @samp{#f}.
21213
21214 @end deftypevr
21215
21216 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-index-owner?
21217 Flag which, when set to @samp{#t}, will make cgit display the owner of each
21218 repo in the repository index.
21219
21220 La valeur par défaut est @samp{#t}.
21221
21222 @end deftypevr
21223
21224 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-log-filecount?
21225 Flag which, when set to @samp{#t}, will make cgit print the number of
21226 modified files for each commit on the repository log page.
21227
21228 La valeur par défaut est @samp{#f}.
21229
21230 @end deftypevr
21231
21232 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-log-linecount?
21233 Flag which, when set to @samp{#t}, will make cgit print the number of added
21234 and removed lines for each commit on the repository log page.
21235
21236 La valeur par défaut est @samp{#f}.
21237
21238 @end deftypevr
21239
21240 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-remote-branches?
21241 Flag which, when set to @code{#t}, will make cgit display remote branches in
21242 the summary and refs views.
21243
21244 La valeur par défaut est @samp{#f}.
21245
21246 @end deftypevr
21247
21248 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-subject-links?
21249 Flag which, when set to @code{1}, will make cgit use the subject of the
21250 parent commit as link text when generating links to parent commits in commit
21251 view.
21252
21253 La valeur par défaut est @samp{#f}.
21254
21255 @end deftypevr
21256
21257 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-html-serving?
21258 Flag which, when set to @samp{#t}, will make cgit use the subject of the
21259 parent commit as link text when generating links to parent commits in commit
21260 view.
21261
21262 La valeur par défaut est @samp{#f}.
21263
21264 @end deftypevr
21265
21266 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-tree-linenumbers?
21267 Flag which, when set to @samp{#t}, will make cgit generate linenumber links
21268 for plaintext blobs printed in the tree view.
21269
21270 La valeur par défaut est @samp{#t}.
21271
21272 @end deftypevr
21273
21274 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-git-config?
21275 Flag which, when set to @samp{#f}, will allow cgit to use Git config to set
21276 any repo specific settings.
21277
21278 La valeur par défaut est @samp{#f}.
21279
21280 @end deftypevr
21281
21282 @deftypevr {paramètre de @code{cgit-configuration}} file-object favicon
21283 URL used as link to a shortcut icon for cgit.
21284
21285 La valeur par défaut est @samp{"/favicon.ico"}.
21286
21287 @end deftypevr
21288
21289 @deftypevr {paramètre de @code{cgit-configuration}} string footer
21290 The content of the file specified with this option will be included verbatim
21291 at the bottom of all pages (i.e.@: it replaces the standard "generated
21292 by..."@: message).
21293
21294 La valeur par défaut est @samp{""}.
21295
21296 @end deftypevr
21297
21298 @deftypevr {paramètre de @code{cgit-configuration}} string head-include
21299 The content of the file specified with this option will be included verbatim
21300 in the HTML HEAD section on all pages.
21301
21302 La valeur par défaut est @samp{""}.
21303
21304 @end deftypevr
21305
21306 @deftypevr {paramètre de @code{cgit-configuration}} string header
21307 The content of the file specified with this option will be included verbatim
21308 at the top of all pages.
21309
21310 La valeur par défaut est @samp{""}.
21311
21312 @end deftypevr
21313
21314 @deftypevr {paramètre de @code{cgit-configuration}} file-object include
21315 Name of a configfile to include before the rest of the current config- file
21316 is parsed.
21317
21318 La valeur par défaut est @samp{""}.
21319
21320 @end deftypevr
21321
21322 @deftypevr {paramètre de @code{cgit-configuration}} string index-header
21323 The content of the file specified with this option will be included verbatim
21324 above the repository index.
21325
21326 La valeur par défaut est @samp{""}.
21327
21328 @end deftypevr
21329
21330 @deftypevr {paramètre de @code{cgit-configuration}} string index-info
21331 The content of the file specified with this option will be included verbatim
21332 below the heading on the repository index page.
21333
21334 La valeur par défaut est @samp{""}.
21335
21336 @end deftypevr
21337
21338 @deftypevr {paramètre de @code{cgit-configuration}} boolean local-time?
21339 Flag which, if set to @samp{#t}, makes cgit print commit and tag times in
21340 the servers timezone.
21341
21342 La valeur par défaut est @samp{#f}.
21343
21344 @end deftypevr
21345
21346 @deftypevr {paramètre de @code{cgit-configuration}} file-object logo
21347 URL which specifies the source of an image which will be used as a logo on
21348 all cgit pages.
21349
21350 La valeur par défaut est @samp{"/share/cgit/cgit.png"}.
21351
21352 @end deftypevr
21353
21354 @deftypevr {paramètre de @code{cgit-configuration}} string logo-link
21355 URL loaded when clicking on the cgit logo image.
21356
21357 La valeur par défaut est @samp{""}.
21358
21359 @end deftypevr
21360
21361 @deftypevr {paramètre de @code{cgit-configuration}} file-object owner-filter
21362 Command which will be invoked to format the Owner column of the main page.
21363
21364 La valeur par défaut est @samp{""}.
21365
21366 @end deftypevr
21367
21368 @deftypevr {paramètre de @code{cgit-configuration}} integer max-atom-items
21369 Number of items to display in atom feeds view.
21370
21371 La valeur par défaut est @samp{10}.
21372
21373 @end deftypevr
21374
21375 @deftypevr {paramètre de @code{cgit-configuration}} integer max-commit-count
21376 Number of entries to list per page in "log" view.
21377
21378 La valeur par défaut est @samp{50}.
21379
21380 @end deftypevr
21381
21382 @deftypevr {paramètre de @code{cgit-configuration}} integer max-message-length
21383 Number of commit message characters to display in "log" view.
21384
21385 La valeur par défaut est @samp{80}.
21386
21387 @end deftypevr
21388
21389 @deftypevr {paramètre de @code{cgit-configuration}} integer max-repo-count
21390 Specifies the number of entries to list per page on the repository index
21391 page.
21392
21393 La valeur par défaut est @samp{50}.
21394
21395 @end deftypevr
21396
21397 @deftypevr {paramètre de @code{cgit-configuration}} integer max-repodesc-length
21398 Specifies the maximum number of repo description characters to display on
21399 the repository index page.
21400
21401 La valeur par défaut est @samp{80}.
21402
21403 @end deftypevr
21404
21405 @deftypevr {paramètre de @code{cgit-configuration}} integer max-blob-size
21406 Specifies the maximum size of a blob to display HTML for in KBytes.
21407
21408 La valeur par défaut est @samp{0}.
21409
21410 @end deftypevr
21411
21412 @deftypevr {paramètre de @code{cgit-configuration}} string max-stats
21413 Maximum statistics period. Valid values are @samp{week},@samp{month},
21414 @samp{quarter} and @samp{year}.
21415
21416 La valeur par défaut est @samp{""}.
21417
21418 @end deftypevr
21419
21420 @deftypevr {paramètre de @code{cgit-configuration}} mimetype-alist mimetype
21421 Mimetype for the specified filename extension.
21422
21423 La valeur par défaut est @samp{((gif "image/gif") (html "text/html") (jpg
21424 "image/jpeg") (jpeg "image/jpeg") (pdf "application/pdf") (png "image/png")
21425 (svg "image/svg+xml"))}.
21426
21427 @end deftypevr
21428
21429 @deftypevr {paramètre de @code{cgit-configuration}} file-object mimetype-file
21430 Specifies the file to use for automatic mimetype lookup.
21431
21432 La valeur par défaut est @samp{""}.
21433
21434 @end deftypevr
21435
21436 @deftypevr {paramètre de @code{cgit-configuration}} string module-link
21437 Text which will be used as the formatstring for a hyperlink when a submodule
21438 is printed in a directory listing.
21439
21440 La valeur par défaut est @samp{""}.
21441
21442 @end deftypevr
21443
21444 @deftypevr {paramètre de @code{cgit-configuration}} boolean nocache?
21445 If set to the value @samp{#t} caching will be disabled.
21446
21447 La valeur par défaut est @samp{#f}.
21448
21449 @end deftypevr
21450
21451 @deftypevr {paramètre de @code{cgit-configuration}} boolean noplainemail?
21452 If set to @samp{#t} showing full author email addresses will be disabled.
21453
21454 La valeur par défaut est @samp{#f}.
21455
21456 @end deftypevr
21457
21458 @deftypevr {paramètre de @code{cgit-configuration}} boolean noheader?
21459 Flag which, when set to @samp{#t}, will make cgit omit the standard header
21460 on all pages.
21461
21462 La valeur par défaut est @samp{#f}.
21463
21464 @end deftypevr
21465
21466 @deftypevr {paramètre de @code{cgit-configuration}} project-list project-list
21467 A list of subdirectories inside of @code{repository-directory}, relative to
21468 it, that should loaded as Git repositories. An empty list means that all
21469 subdirectories will be loaded.
21470
21471 La valeur par défaut est @samp{()}.
21472
21473 @end deftypevr
21474
21475 @deftypevr {paramètre de @code{cgit-configuration}} file-object readme
21476 Text which will be used as default value for @code{cgit-repo-readme}.
21477
21478 La valeur par défaut est @samp{""}.
21479
21480 @end deftypevr
21481
21482 @deftypevr {paramètre de @code{cgit-configuration}} boolean remove-suffix?
21483 If set to @code{#t} and @code{repository-directory} is enabled, if any
21484 repositories are found with a suffix of @code{.git}, this suffix will be
21485 removed for the URL and name.
21486
21487 La valeur par défaut est @samp{#f}.
21488
21489 @end deftypevr
21490
21491 @deftypevr {paramètre de @code{cgit-configuration}} integer renamelimit
21492 Maximum number of files to consider when detecting renames.
21493
21494 La valeur par défaut est @samp{-1}.
21495
21496 @end deftypevr
21497
21498 @deftypevr {paramètre de @code{cgit-configuration}} string repository-sort
21499 The way in which repositories in each section are sorted.
21500
21501 La valeur par défaut est @samp{""}.
21502
21503 @end deftypevr
21504
21505 @deftypevr {paramètre de @code{cgit-configuration}} robots-list robots
21506 Text used as content for the @code{robots} meta-tag.
21507
21508 La valeur par défaut est @samp{("noindex" "nofollow")}.
21509
21510 @end deftypevr
21511
21512 @deftypevr {paramètre de @code{cgit-configuration}} string root-desc
21513 Text printed below the heading on the repository index page.
21514
21515 La valeur par défaut est @samp{"a fast webinterface for the git dscm"}.
21516
21517 @end deftypevr
21518
21519 @deftypevr {paramètre de @code{cgit-configuration}} string root-readme
21520 The content of the file specified with this option will be included verbatim
21521 below thef "about" link on the repository index page.
21522
21523 La valeur par défaut est @samp{""}.
21524
21525 @end deftypevr
21526
21527 @deftypevr {paramètre de @code{cgit-configuration}} string root-title
21528 Text printed as heading on the repository index page.
21529
21530 La valeur par défaut est @samp{""}.
21531
21532 @end deftypevr
21533
21534 @deftypevr {paramètre de @code{cgit-configuration}} boolean scan-hidden-path
21535 If set to @samp{#t} and repository-directory is enabled,
21536 repository-directory will recurse into directories whose name starts with a
21537 period. Otherwise, repository-directory will stay away from such
21538 directories, considered as "hidden". Note that this does not apply to the
21539 ".git" directory in non-bare repos.
21540
21541 La valeur par défaut est @samp{#f}.
21542
21543 @end deftypevr
21544
21545 @deftypevr {paramètre de @code{cgit-configuration}} list snapshots
21546 Text which specifies the default set of snapshot formats that cgit generates
21547 links for.
21548
21549 La valeur par défaut est @samp{()}.
21550
21551 @end deftypevr
21552
21553 @deftypevr {paramètre de @code{cgit-configuration}} repository-directory repository-directory
21554 Name of the directory to scan for repositories (represents
21555 @code{scan-path}).
21556
21557 La valeur par défaut est @samp{"/srv/git"}.
21558
21559 @end deftypevr
21560
21561 @deftypevr {paramètre de @code{cgit-configuration}} string section
21562 The name of the current repository section - all repositories defined after
21563 this option will inherit the current section name.
21564
21565 La valeur par défaut est @samp{""}.
21566
21567 @end deftypevr
21568
21569 @deftypevr {paramètre de @code{cgit-configuration}} string section-sort
21570 Flag which, when set to @samp{1}, will sort the sections on the repository
21571 listing by name.
21572
21573 La valeur par défaut est @samp{""}.
21574
21575 @end deftypevr
21576
21577 @deftypevr {paramètre de @code{cgit-configuration}} integer section-from-path
21578 A number which, if defined prior to repository-directory, specifies how many
21579 path elements from each repo path to use as a default section name.
21580
21581 La valeur par défaut est @samp{0}.
21582
21583 @end deftypevr
21584
21585 @deftypevr {paramètre de @code{cgit-configuration}} boolean side-by-side-diffs?
21586 If set to @samp{#t} shows side-by-side diffs instead of unidiffs per
21587 default.
21588
21589 La valeur par défaut est @samp{#f}.
21590
21591 @end deftypevr
21592
21593 @deftypevr {paramètre de @code{cgit-configuration}} file-object source-filter
21594 Specifies a command which will be invoked to format plaintext blobs in the
21595 tree view.
21596
21597 La valeur par défaut est @samp{""}.
21598
21599 @end deftypevr
21600
21601 @deftypevr {paramètre de @code{cgit-configuration}} integer summary-branches
21602 Specifies the number of branches to display in the repository "summary"
21603 view.
21604
21605 La valeur par défaut est @samp{10}.
21606
21607 @end deftypevr
21608
21609 @deftypevr {paramètre de @code{cgit-configuration}} integer summary-log
21610 Specifies the number of log entries to display in the repository "summary"
21611 view.
21612
21613 La valeur par défaut est @samp{10}.
21614
21615 @end deftypevr
21616
21617 @deftypevr {paramètre de @code{cgit-configuration}} integer summary-tags
21618 Specifies the number of tags to display in the repository "summary" view.
21619
21620 La valeur par défaut est @samp{10}.
21621
21622 @end deftypevr
21623
21624 @deftypevr {paramètre de @code{cgit-configuration}} string strict-export
21625 Filename which, if specified, needs to be present within the repository for
21626 cgit to allow access to that repository.
21627
21628 La valeur par défaut est @samp{""}.
21629
21630 @end deftypevr
21631
21632 @deftypevr {paramètre de @code{cgit-configuration}} string virtual-root
21633 URL which, if specified, will be used as root for all cgit links.
21634
21635 La valeur par défaut est @samp{"/"}.
21636
21637 @end deftypevr
21638
21639 @deftypevr {paramètre de @code{cgit-configuration}} repository-cgit-configuration-list repositories
21640 A list of @dfn{cgit-repo} records to use with config.
21641
21642 La valeur par défaut est @samp{()}.
21643
21644 Les champs de @code{repository-cgit-configuration} disponibles sont :
21645
21646 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list snapshots
21647 A mask of snapshot formats for this repo that cgit generates links for,
21648 restricted by the global @code{snapshots} setting.
21649
21650 La valeur par défaut est @samp{()}.
21651
21652 @end deftypevr
21653
21654 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object source-filter
21655 Override the default @code{source-filter}.
21656
21657 La valeur par défaut est @samp{""}.
21658
21659 @end deftypevr
21660
21661 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string url
21662 The relative URL used to access the repository.
21663
21664 La valeur par défaut est @samp{""}.
21665
21666 @end deftypevr
21667
21668 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object about-filter
21669 Override the default @code{about-filter}.
21670
21671 La valeur par défaut est @samp{""}.
21672
21673 @end deftypevr
21674
21675 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string branch-sort
21676 Flag which, when set to @samp{age}, enables date ordering in the branch ref
21677 list, and when set to @samp{name} enables ordering by branch name.
21678
21679 La valeur par défaut est @samp{""}.
21680
21681 @end deftypevr
21682
21683 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list clone-url
21684 A list of URLs which can be used to clone repo.
21685
21686 La valeur par défaut est @samp{()}.
21687
21688 @end deftypevr
21689
21690 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object commit-filter
21691 Override the default @code{commit-filter}.
21692
21693 La valeur par défaut est @samp{""}.
21694
21695 @end deftypevr
21696
21697 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string commit-sort
21698 Flag which, when set to @samp{date}, enables strict date ordering in the
21699 commit log, and when set to @samp{topo} enables strict topological ordering.
21700
21701 La valeur par défaut est @samp{""}.
21702
21703 @end deftypevr
21704
21705 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string defbranch
21706 The name of the default branch for this repository. If no such branch
21707 exists in the repository, the first branch name (when sorted) is used as
21708 default instead. By default branch pointed to by HEAD, or "master" if there
21709 is no suitable HEAD.
21710
21711 La valeur par défaut est @samp{""}.
21712
21713 @end deftypevr
21714
21715 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string desc
21716 The value to show as repository description.
21717
21718 La valeur par défaut est @samp{""}.
21719
21720 @end deftypevr
21721
21722 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string homepage
21723 The value to show as repository homepage.
21724
21725 La valeur par défaut est @samp{""}.
21726
21727 @end deftypevr
21728
21729 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object email-filter
21730 Override the default @code{email-filter}.
21731
21732 La valeur par défaut est @samp{""}.
21733
21734 @end deftypevr
21735
21736 @deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-commit-graph?
21737 A flag which can be used to disable the global setting
21738 @code{enable-commit-graph?}.
21739
21740 La valeur par défaut est @samp{disabled}.
21741
21742 @end deftypevr
21743
21744 @deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-log-filecount?
21745 A flag which can be used to disable the global setting
21746 @code{enable-log-filecount?}.
21747
21748 La valeur par défaut est @samp{disabled}.
21749
21750 @end deftypevr
21751
21752 @deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-log-linecount?
21753 A flag which can be used to disable the global setting
21754 @code{enable-log-linecount?}.
21755
21756 La valeur par défaut est @samp{disabled}.
21757
21758 @end deftypevr
21759
21760 @deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-remote-branches?
21761 Flag which, when set to @code{#t}, will make cgit display remote branches in
21762 the summary and refs views.
21763
21764 La valeur par défaut est @samp{disabled}.
21765
21766 @end deftypevr
21767
21768 @deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-subject-links?
21769 A flag which can be used to override the global setting
21770 @code{enable-subject-links?}.
21771
21772 La valeur par défaut est @samp{disabled}.
21773
21774 @end deftypevr
21775
21776 @deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-html-serving?
21777 A flag which can be used to override the global setting
21778 @code{enable-html-serving?}.
21779
21780 La valeur par défaut est @samp{disabled}.
21781
21782 @end deftypevr
21783
21784 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-boolean hide?
21785 Flag which, when set to @code{#t}, hides the repository from the repository
21786 index.
21787
21788 La valeur par défaut est @samp{#f}.
21789
21790 @end deftypevr
21791
21792 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-boolean ignore?
21793 Flag which, when set to @samp{#t}, ignores the repository.
21794
21795 La valeur par défaut est @samp{#f}.
21796
21797 @end deftypevr
21798
21799 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object logo
21800 URL which specifies the source of an image which will be used as a logo on
21801 this repo’s pages.
21802
21803 La valeur par défaut est @samp{""}.
21804
21805 @end deftypevr
21806
21807 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string logo-link
21808 URL loaded when clicking on the cgit logo image.
21809
21810 La valeur par défaut est @samp{""}.
21811
21812 @end deftypevr
21813
21814 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object owner-filter
21815 Override the default @code{owner-filter}.
21816
21817 La valeur par défaut est @samp{""}.
21818
21819 @end deftypevr
21820
21821 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string module-link
21822 Text which will be used as the formatstring for a hyperlink when a submodule
21823 is printed in a directory listing. The arguments for the formatstring are
21824 the path and SHA1 of the submodule commit.
21825
21826 La valeur par défaut est @samp{""}.
21827
21828 @end deftypevr
21829
21830 @deftypevr {paramètre de @code{repository-cgit-configuration}} module-link-path module-link-path
21831 Text which will be used as the formatstring for a hyperlink when a submodule
21832 with the specified subdirectory path is printed in a directory listing.
21833
21834 La valeur par défaut est @samp{()}.
21835
21836 @end deftypevr
21837
21838 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string max-stats
21839 Override the default maximum statistics period.
21840
21841 La valeur par défaut est @samp{""}.
21842
21843 @end deftypevr
21844
21845 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string name
21846 The value to show as repository name.
21847
21848 La valeur par défaut est @samp{""}.
21849
21850 @end deftypevr
21851
21852 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string owner
21853 A value used to identify the owner of the repository.
21854
21855 La valeur par défaut est @samp{""}.
21856
21857 @end deftypevr
21858
21859 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string path
21860 An absolute path to the repository directory.
21861
21862 La valeur par défaut est @samp{""}.
21863
21864 @end deftypevr
21865
21866 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string readme
21867 A path (relative to repo) which specifies a file to include verbatim as the
21868 "About" page for this repo.
21869
21870 La valeur par défaut est @samp{""}.
21871
21872 @end deftypevr
21873
21874 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string section
21875 The name of the current repository section - all repositories defined after
21876 this option will inherit the current section name.
21877
21878 La valeur par défaut est @samp{""}.
21879
21880 @end deftypevr
21881
21882 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list extra-options
21883 Extra options will be appended to cgitrc file.
21884
21885 La valeur par défaut est @samp{()}.
21886
21887 @end deftypevr
21888
21889 @end deftypevr
21890
21891 @deftypevr {paramètre de @code{cgit-configuration}} list extra-options
21892 Extra options will be appended to cgitrc file.
21893
21894 La valeur par défaut est @samp{()}.
21895
21896 @end deftypevr
21897
21898
21899 @c %end of fragment
21900
21901 However, it could be that you just want to get a @code{cgitrc} up and
21902 running. In that case, you can pass an @code{opaque-cgit-configuration} as
21903 a record to @code{cgit-service-type}. As its name indicates, an opaque
21904 configuration does not have easy reflective capabilities.
21905
21906 Les champs de @code{opaque-cgit-configuration} disponibles sont :
21907
21908 @deftypevr {paramètre de @code{opaque-cgit-configuration}} package cgit
21909 The cgit package.
21910 @end deftypevr
21911
21912 @deftypevr {paramètre de @code{opaque-cgit-configuration}} string string
21913 The contents of the @code{cgitrc}, as a string.
21914 @end deftypevr
21915
21916 For example, if your @code{cgitrc} is just the empty string, you could
21917 instantiate a cgit service like this:
21918
21919 @example
21920 (service cgit-service-type
21921 (opaque-cgit-configuration
21922 (cgitrc "")))
21923 @end example
21924
21925 @subsubheading Service Gitolite
21926
21927 @cindex service Gitolite
21928 @cindex Git, hébergement
21929 @uref{http://gitolite.com/gitolite/, Gitolite} is a tool for hosting Git
21930 repositories on a central server.
21931
21932 Gitolite can handle multiple repositories and users, and supports flexible
21933 configuration of the permissions for the users on the repositories.
21934
21935 The following example will configure Gitolite using the default @code{git}
21936 user, and the provided SSH public key.
21937
21938 @example
21939 (service gitolite-service-type
21940 (gitolite-configuration
21941 (admin-pubkey (plain-file
21942 "yourname.pub"
21943 "ssh-rsa AAAA... guix@@example.com"))))
21944 @end example
21945
21946 Gitolite is configured through a special admin repository which you can
21947 clone, for example, if you setup Gitolite on @code{example.com}, you would
21948 run the following command to clone the admin repository.
21949
21950 @example
21951 git clone git@@example.com:gitolite-admin
21952 @end example
21953
21954 When the Gitolite service is activated, the provided @code{admin-pubkey}
21955 will be inserted in to the @file{keydir} directory in the gitolite-admin
21956 repository. If this results in a change in the repository, it will be
21957 committed using the message ``gitolite setup by GNU Guix''.
21958
21959 @deftp {Type de données} gitolite-configuration
21960 Type de données représentant la configuration de
21961 @code{gitolite-service-type}.
21962
21963 @table @asis
21964 @item @code{package} (par défaut : @var{gitolite})
21965 Le paquet Gitolite à utiliser.
21966
21967 @item @code{user} (par défaut : @var{git})
21968 User to use for Gitolite. This will be user that you use when accessing
21969 Gitolite over SSH.
21970
21971 @item @code{group} (par défaut : @var{git})
21972 Groupe à utiliser pour Gitolite.
21973
21974 @item @code{home-directory} (par défaut : @var{"/var/lib/gitolite"})
21975 Répertoire dans lequel stocker la configuration et les dépôts de Gitolite.
21976
21977 @item @code{rc-file} (par défaut : @var{(gitolite-rc-file)})
21978 Un objet « simili-fichier » (@pxref{G-Expressions, file-like objects})
21979 représentant la configuration de Gitolite.
21980
21981 @item @code{admin-pubkey} (par défaut : @var{#f})
21982 Un objet « simili-fichier » (@pxref{G-Expressions, file-like objects})
21983 utilisé pour paramétrer Gitolite. Il sera inséré dans le répertoire
21984 @file{keydir} dans le dépôt gitolite-admin.
21985
21986 To specify the SSH key as a string, use the @code{plain-file} function.
21987
21988 @example
21989 (plain-file "yourname.pub" "ssh-rsa AAAA... guix@@example.com")
21990 @end example
21991
21992 @end table
21993 @end deftp
21994
21995 @deftp {Type de données} gitolite-rc-file
21996 Type de données représentant le fichier RC de Gitolite.
21997
21998 @table @asis
21999 @item @code{umask} (par défaut : @code{#o0077})
22000 This controls the permissions Gitolite sets on the repositories and their
22001 contents.
22002
22003 A value like @code{#o0027} will give read access to the group used by
22004 Gitolite (by default: @code{git}). This is necessary when using Gitolite
22005 with software like cgit or gitweb.
22006
22007 @item @code{git-config-keys} (par défaut : @code{""})
22008 Gitolite allows you to set git config values using the "config"
22009 keyword. This setting allows control over the config keys to accept.
22010
22011 @item @code{roles} (par défaut : @code{'(("READERS" . 1) ("WRITERS" . ))})
22012 Set the role names allowed to be used by users running the perms command.
22013
22014 @item @code{enable} (par défaut : @code{'("help" "desc" "info" "perms" "writable" "ssh-authkeys" "git-config" "daemon" "gitweb")})
22015 This setting controls the commands and features to enable within Gitolite.
22016
22017 @end table
22018 @end deftp
22019
22020
22021 @node Services de jeu
22022 @subsubsection Services de jeu
22023
22024 @subsubheading The Battle for Wesnoth Service
22025 @cindex wesnothd
22026 @uref{https://wesnoth.org, The Battle for Wesnoth} is a fantasy, turn based
22027 tactical strategy game, with several single player campaigns, and
22028 multiplayer games (both networked and local).
22029
22030 @defvar {Variable Scheme} wesnothd-service-type
22031 Service type for the wesnothd service. Its value must be a
22032 @code{wesnothd-configuration} object. To run wesnothd in the default
22033 configuration, instantiate it as:
22034
22035 @example
22036 (service wesnothd-service-type)
22037 @end example
22038 @end defvar
22039
22040 @deftp {Type de données} wesnothd-configuration
22041 Data type representing the configuration of @command{wesnothd}.
22042
22043 @table @asis
22044 @item @code{package} (par défaut : @code{wesnoth-server})
22045 The wesnoth server package to use.
22046
22047 @item @code{port} (par défaut : @code{15000})
22048 The port to bind the server to.
22049 @end table
22050 @end deftp
22051
22052 @node Services divers
22053 @subsubsection Services divers
22054
22055 @cindex fingerprint
22056 @subsubheading Service d'empreintes digitales
22057
22058 Le module @code{(gnu services fingerprint)} fournit un service DBus pour
22059 lire et identifier les empreintes digitales via un lecteur d'empreinte.
22060
22061 @defvr {Variable Scheme} fprintd-service-type
22062 The service type for @command{fprintd}, which provides the fingerprint
22063 reading capability.
22064
22065 @example
22066 (service fprintd-service-type)
22067 @end example
22068 @end defvr
22069
22070 @cindex sysctl
22071 @subsubheading System Control Service
22072
22073 The @code{(gnu services sysctl)} provides a service to configure kernel
22074 parameters at boot.
22075
22076 @defvr {Variable Scheme} sysctl-service-type
22077 The service type for @command{sysctl}, which modifies kernel parameters
22078 under @file{/proc/sys/}. To enable IPv4 forwarding, it can be instantiated
22079 as:
22080
22081 @example
22082 (service sysctl-service-type
22083 (sysctl-configuration
22084 (settings '(("net.ipv4.ip_forward" . "1")))))
22085 @end example
22086 @end defvr
22087
22088 @deftp {Type de données} sysctl-configuration
22089 The data type representing the configuration of @command{sysctl}.
22090
22091 @table @asis
22092 @item @code{sysctl} (par défaut : @code{(file-append procps "/sbin/sysctl"})
22093 The @command{sysctl} executable to use.
22094
22095 @item @code{settings} (par défaut : @code{'()})
22096 An association list specifies kernel parameters and their values.
22097 @end table
22098 @end deftp
22099
22100 @cindex pcscd
22101 @subsubheading PC/SC Smart Card Daemon Service
22102
22103 The @code{(gnu services security-token)} module provides the following
22104 service to run @command{pcscd}, the PC/SC Smart Card Daemon.
22105 @command{pcscd} is the daemon program for pcsc-lite and the MuscleCard
22106 framework. It is a resource manager that coordinates communications with
22107 smart card readers, smart cards and cryptographic tokens that are connected
22108 to the system.
22109
22110 @defvr {Variable Scheme} pcscd-service-type
22111 Le type de service pour le service @command{pcscd}. Sa valeur doit être un
22112 objet @code{pcscd-configuration}. Pour lancer pcscd dans sa configuration
22113 par défaut, instantiez-le avec :
22114
22115 @example
22116 (service pcscd-service-type)
22117 @end example
22118 @end defvr
22119
22120 @deftp {Type de données} pcscd-configuration
22121 Type de données représentant la configuration de @command{pcscd}.
22122
22123 @table @asis
22124 @item @code{pcsc-lite} (par défaut : @code{pcsc-lite})
22125 Le paquet pcsc-lite qui fournit pcscd.
22126 @item @code{usb-drivers} (par défaut : @code{(list ccid)})
22127 List of packages that provide USB drivers to pcscd. Drivers are expected to
22128 be under @file{pcsc/drivers} in the store directory of the package.
22129 @end table
22130 @end deftp
22131
22132 @cindex lirc
22133 @subsubheading Lirc Service
22134
22135 The @code{(gnu services lirc)} module provides the following service.
22136
22137 @deffn {Procédure Scheme} lirc-service [#:lirc lirc] @
22138 [#:device #f] [#:driver #f] [#:config-file #f] @ [#:extra-options '()]
22139 Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
22140 decodes infrared signals from remote controls.
22141
22142 Optionally, @var{device}, @var{driver} and @var{config-file} (configuration
22143 file name) may be specified. See @command{lircd} manual for details.
22144
22145 Finally, @var{extra-options} is a list of additional command-line options
22146 passed to @command{lircd}.
22147 @end deffn
22148
22149 @cindex spice
22150 @subsubheading Spice Service
22151
22152 The @code{(gnu services spice)} module provides the following service.
22153
22154 @deffn {Procédure Scheme} spice-vdagent-service [#:spice-vdagent]
22155 Returns a service that runs @url{http://www.spice-space.org,VDAGENT}, a
22156 daemon that enables sharing the clipboard with a vm and setting the guest
22157 display resolution when the graphical console window resizes.
22158 @end deffn
22159
22160 @subsubsection Dictionary Services
22161 @cindex dictionary
22162 The @code{(gnu services dict)} module provides the following service:
22163
22164 @deffn {Procédure Scheme} dicod-service [#:config (dicod-configuration)]
22165 Return a service that runs the @command{dicod} daemon, an implementation of
22166 DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
22167
22168 The optional @var{config} argument specifies the configuration for
22169 @command{dicod}, which should be a @code{<dicod-configuration>} object, by
22170 default it serves the GNU Collaborative International Dictonary of English.
22171
22172 You can add @command{open localhost} to your @file{~/.dico} file to make
22173 @code{localhost} the default server for @command{dico} client
22174 (@pxref{Initialization File,,, dico, GNU Dico Manual}).
22175 @end deffn
22176
22177 @deftp {Type de données} dicod-configuration
22178 Data type representing the configuration of dicod.
22179
22180 @table @asis
22181 @item @code{dico} (par défaut : @var{dico})
22182 Package object of the GNU Dico dictionary server.
22183
22184 @item @code{interfaces} (par défaut : @var{'("localhost")})
22185 This is the list of IP addresses and ports and possibly socket file names to
22186 listen to (@pxref{Server Settings, @code{listen} directive,, dico, GNU Dico
22187 Manual}).
22188
22189 @item @code{handlers} (par défaut : @var{'()})
22190 List of @code{<dicod-handler>} objects denoting handlers (module instances).
22191
22192 @item @code{databases} (par défaut : @var{(list %dicod-database:gcide)})
22193 List of @code{<dicod-database>} objects denoting dictionaries to be served.
22194 @end table
22195 @end deftp
22196
22197 @deftp {Type de données} dicod-handler
22198 Data type representing a dictionary handler (module instance).
22199
22200 @table @asis
22201 @item @code{name}
22202 Name of the handler (module instance).
22203
22204 @item @code{module} (par défaut : @var{#f})
22205 Name of the dicod module of the handler (instance). If it is @code{#f}, the
22206 module has the same name as the handler. (@pxref{Modules,,, dico, GNU Dico
22207 Manual}).
22208
22209 @item @code{options}
22210 List of strings or gexps representing the arguments for the module handler
22211 @end table
22212 @end deftp
22213
22214 @deftp {Type de données} dicod-database
22215 Data type representing a dictionary database.
22216
22217 @table @asis
22218 @item @code{name}
22219 Name of the database, will be used in DICT commands.
22220
22221 @item @code{handler}
22222 Name of the dicod handler (module instance) used by this database
22223 (@pxref{Handlers,,, dico, GNU Dico Manual}).
22224
22225 @item @code{complex?} (par défaut : @var{#f})
22226 Whether the database configuration complex. The complex configuration will
22227 need a corresponding @code{<dicod-handler>} object, otherwise not.
22228
22229 @item @code{options}
22230 List of strings or gexps representing the arguments for the database
22231 (@pxref{Databases,,, dico, GNU Dico Manual}).
22232 @end table
22233 @end deftp
22234
22235 @defvr {Variable Scheme} %dicod-database:gcide
22236 A @code{<dicod-database>} object serving the GNU Collaborative International
22237 Dictionary of English using the @code{gcide} package.
22238 @end defvr
22239
22240 The following is an example @code{dicod-service} configuration.
22241
22242 @example
22243 (dicod-service #:config
22244 (dicod-configuration
22245 (handlers (list (dicod-handler
22246 (name "wordnet")
22247 (module "dictorg")
22248 (options
22249 (list #~(string-append "dbdir=" #$wordnet))))))
22250 (databases (list (dicod-database
22251 (name "wordnet")
22252 (complex? #t)
22253 (handler "wordnet")
22254 (options '("database=wn")))
22255 %dicod-database:gcide))))
22256 @end example
22257
22258 @node Programmes setuid
22259 @subsection Programmes setuid
22260
22261 @cindex setuid programs
22262 Some programs need to run with ``root'' privileges, even when they are
22263 launched by unprivileged users. A notorious example is the @command{passwd}
22264 program, which users can run to change their password, and which needs to
22265 access the @file{/etc/passwd} and @file{/etc/shadow} files---something
22266 normally restricted to root, for obvious security reasons. To address that,
22267 these executables are @dfn{setuid-root}, meaning that they always run with
22268 root privileges (@pxref{How Change Persona,,, libc, The GNU C Library
22269 Reference Manual}, for more info about the setuid mechanism.)
22270
22271 The store itself @emph{cannot} contain setuid programs: that would be a
22272 security issue since any user on the system can write derivations that
22273 populate the store (@pxref{Le dépôt}). Thus, a different mechanism is
22274 used: instead of changing the setuid bit directly on files that are in the
22275 store, we let the system administrator @emph{declare} which programs should
22276 be setuid root.
22277
22278 The @code{setuid-programs} field of an @code{operating-system} declaration
22279 contains a list of G-expressions denoting the names of programs to be
22280 setuid-root (@pxref{Utiliser le système de configuration}). For instance, the
22281 @command{passwd} program, which is part of the Shadow package, can be
22282 designated by this G-expression (@pxref{G-Expressions}):
22283
22284 @example
22285 #~(string-append #$shadow "/bin/passwd")
22286 @end example
22287
22288 A default set of setuid programs is defined by the @code{%setuid-programs}
22289 variable of the @code{(gnu system)} module.
22290
22291 @defvr {Variable Scheme} %setuid-programs
22292 A list of G-expressions denoting common programs that are setuid-root.
22293
22294 The list includes commands such as @command{passwd}, @command{ping},
22295 @command{su}, and @command{sudo}.
22296 @end defvr
22297
22298 Under the hood, the actual setuid programs are created in the
22299 @file{/run/setuid-programs} directory at system activation time. The files
22300 in this directory refer to the ``real'' binaries, which are in the store.
22301
22302 @node Certificats X.509
22303 @subsection Certificats X.509
22304
22305 @cindex HTTPS, certificates
22306 @cindex X.509 certificates
22307 @cindex TLS
22308 Web servers available over HTTPS (that is, HTTP over the transport-layer
22309 security mechanism, TLS) send client programs an @dfn{X.509 certificate}
22310 that the client can then use to @emph{authenticate} the server. To do that,
22311 clients verify that the server's certificate is signed by a so-called
22312 @dfn{certificate authority} (CA). But to verify the CA's signature, clients
22313 must have first acquired the CA's certificate.
22314
22315 Web browsers such as GNU@tie{}IceCat include their own set of CA
22316 certificates, such that they are able to verify CA signatures
22317 out-of-the-box.
22318
22319 However, most other programs that can talk HTTPS---@command{wget},
22320 @command{git}, @command{w3m}, etc.---need to be told where CA certificates
22321 can be found.
22322
22323 @cindex @code{nss-certs}
22324 In GuixSD, this is done by adding a package that provides certificates to
22325 the @code{packages} field of the @code{operating-system} declaration
22326 (@pxref{Référence de système d'exploitation}). GuixSD includes one such package,
22327 @code{nss-certs}, which is a set of CA certificates provided as part of
22328 Mozilla's Network Security Services.
22329
22330 Note that it is @emph{not} part of @var{%base-packages}, so you need to
22331 explicitly add it. The @file{/etc/ssl/certs} directory, which is where most
22332 applications and libraries look for certificates by default, points to the
22333 certificates installed globally.
22334
22335 Unprivileged users, including users of Guix on a foreign distro, can also
22336 install their own certificate package in their profile. A number of
22337 environment variables need to be defined so that applications and libraries
22338 know where to find them. Namely, the OpenSSL library honors the
22339 @code{SSL_CERT_DIR} and @code{SSL_CERT_FILE} variables. Some applications
22340 add their own environment variables; for instance, the Git version control
22341 system honors the certificate bundle pointed to by the @code{GIT_SSL_CAINFO}
22342 environment variable. Thus, you would typically run something like:
22343
22344 @example
22345 $ guix package -i nss-certs
22346 $ export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs"
22347 $ export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
22348 $ export GIT_SSL_CAINFO="$SSL_CERT_FILE"
22349 @end example
22350
22351 As another example, R requires the @code{CURL_CA_BUNDLE} environment
22352 variable to point to a certificate bundle, so you would have to run
22353 something like this:
22354
22355 @example
22356 $ guix package -i nss-certs
22357 $ export CURL_CA_BUNDLE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
22358 @end example
22359
22360 For other applications you may want to look up the required environment
22361 variable in the relevant documentation.
22362
22363
22364 @node Name Service Switch
22365 @subsection Name Service Switch
22366
22367 @cindex name service switch
22368 @cindex NSS
22369 The @code{(gnu system nss)} module provides bindings to the configuration
22370 file of the libc @dfn{name service switch} or @dfn{NSS} (@pxref{NSS
22371 Configuration File,,, libc, The GNU C Library Reference Manual}). In a
22372 nutshell, the NSS is a mechanism that allows libc to be extended with new
22373 ``name'' lookup methods for system databases, which includes host names,
22374 service names, user accounts, and more (@pxref{Name Service Switch, System
22375 Databases and Name Service Switch,, libc, The GNU C Library Reference
22376 Manual}).
22377
22378 The NSS configuration specifies, for each system database, which lookup
22379 method is to be used, and how the various methods are chained together---for
22380 instance, under which circumstances NSS should try the next method in the
22381 list. The NSS configuration is given in the @code{name-service-switch}
22382 field of @code{operating-system} declarations (@pxref{Référence de système d'exploitation, @code{name-service-switch}}).
22383
22384 @cindex nss-mdns
22385 @cindex .local, host name lookup
22386 As an example, the declaration below configures the NSS to use the
22387 @uref{http://0pointer.de/lennart/projects/nss-mdns/, @code{nss-mdns}
22388 back-end}, which supports host name lookups over multicast DNS (mDNS) for
22389 host names ending in @code{.local}:
22390
22391 @example
22392 (name-service-switch
22393 (hosts (list %files ;first, check /etc/hosts
22394
22395 ;; If the above did not succeed, try
22396 ;; with 'mdns_minimal'.
22397 (name-service
22398 (name "mdns_minimal")
22399
22400 ;; 'mdns_minimal' is authoritative for
22401 ;; '.local'. When it returns "not found",
22402 ;; no need to try the next methods.
22403 (reaction (lookup-specification
22404 (not-found => return))))
22405
22406 ;; Then fall back to DNS.
22407 (name-service
22408 (name "dns"))
22409
22410 ;; Finally, try with the "full" 'mdns'.
22411 (name-service
22412 (name "mdns")))))
22413 @end example
22414
22415 Do not worry: the @code{%mdns-host-lookup-nss} variable (see below)
22416 contains this configuration, so you will not have to type it if all you want
22417 is to have @code{.local} host lookup working.
22418
22419 Note that, in this case, in addition to setting the
22420 @code{name-service-switch} of the @code{operating-system} declaration, you
22421 also need to use @code{avahi-service} (@pxref{Services réseau,
22422 @code{avahi-service}}), or @var{%desktop-services}, which includes it
22423 (@pxref{Services de bureaux}). Doing this makes @code{nss-mdns} accessible to
22424 the name service cache daemon (@pxref{Services de base, @code{nscd-service}}).
22425
22426 For convenience, the following variables provide typical NSS configurations.
22427
22428 @defvr {Variable Scheme} %default-nss
22429 This is the default name service switch configuration, a
22430 @code{name-service-switch} object.
22431 @end defvr
22432
22433 @defvr {Variable Scheme} %mdns-host-lookup-nss
22434 This is the name service switch configuration with support for host name
22435 lookup over multicast DNS (mDNS) for host names ending in @code{.local}.
22436 @end defvr
22437
22438 The reference for name service switch configuration is given below. It is a
22439 direct mapping of the configuration file format of the C library , so please
22440 refer to the C library manual for more information (@pxref{NSS Configuration
22441 File,,, libc, The GNU C Library Reference Manual}). Compared to the
22442 configuration file format of libc NSS, it has the advantage not only of
22443 adding this warm parenthetic feel that we like, but also static checks: you
22444 will know about syntax errors and typos as soon as you run @command{guix
22445 system}.
22446
22447 @deftp {Type de données} name-service-switch
22448
22449 This is the data type representation the configuration of libc's name
22450 service switch (NSS). Each field below represents one of the supported
22451 system databases.
22452
22453 @table @code
22454 @item aliases
22455 @itemx ethers
22456 @itemx group
22457 @itemx gshadow
22458 @itemx hosts
22459 @itemx initgroups
22460 @itemx netgroup
22461 @itemx networks
22462 @itemx password
22463 @itemx public-key
22464 @itemx rpc
22465 @itemx services
22466 @itemx shadow
22467 The system databases handled by the NSS. Each of these fields must be a
22468 list of @code{<name-service>} objects (see below).
22469 @end table
22470 @end deftp
22471
22472 @deftp {Type de données} name-service
22473
22474 This is the data type representing an actual name service and the associated
22475 lookup action.
22476
22477 @table @code
22478 @item name
22479 A string denoting the name service (@pxref{Services in the NSS
22480 configuration,,, libc, The GNU C Library Reference Manual}).
22481
22482 Note that name services listed here must be visible to nscd. This is
22483 achieved by passing the @code{#:name-services} argument to
22484 @code{nscd-service} the list of packages providing the needed name services
22485 (@pxref{Services de base, @code{nscd-service}}).
22486
22487 @item reaction
22488 An action specified using the @code{lookup-specification} macro
22489 (@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
22490 Reference Manual}). For example:
22491
22492 @example
22493 (lookup-specification (unavailable => continue)
22494 (success => return))
22495 @end example
22496 @end table
22497 @end deftp
22498
22499 @node Disque de RAM initial
22500 @subsection Disque de RAM initial
22501
22502 @cindex initrd
22503 @cindex disque de RAM initial
22504 For bootstrapping purposes, the Linux-Libre kernel is passed an @dfn{initial
22505 RAM disk}, or @dfn{initrd}. An initrd contains a temporary root file system
22506 as well as an initialization script. The latter is responsible for mounting
22507 the real root file system, and for loading any kernel modules that may be
22508 needed to achieve that.
22509
22510 The @code{initrd-modules} field of an @code{operating-system} declaration
22511 allows you to specify Linux-libre kernel modules that must be available in
22512 the initrd. In particular, this is where you would list modules needed to
22513 actually drive the hard disk where your root partition is---although the
22514 default value of @code{initrd-modules} should cover most use cases. For
22515 example, assuming you need the @code{megaraid_sas} module in addition to the
22516 default modules to be able to access your root file system, you would write:
22517
22518 @example
22519 (operating-system
22520 ;; @dots{}
22521 (initrd-modules (cons "megaraid_sas" %base-initrd-modules)))
22522 @end example
22523
22524 @defvr {Variable Scheme} %base-initrd-modules
22525 This is the list of kernel modules included in the initrd by default.
22526 @end defvr
22527
22528 Furthermore, if you need lower-level customization, the @code{initrd} field
22529 of an @code{operating-system} declaration allows you to specify which initrd
22530 you would like to use. The @code{(gnu system linux-initrd)} module provides
22531 three ways to build an initrd: the high-level @code{base-initrd} procedure
22532 and the low-level @code{raw-initrd} and @code{expression->initrd}
22533 procedures.
22534
22535 The @code{base-initrd} procedure is intended to cover most common uses. For
22536 example, if you want to add a bunch of kernel modules to be loaded at boot
22537 time, you can define the @code{initrd} field of the operating system
22538 declaration like this:
22539
22540 @example
22541 (initrd (lambda (file-systems . rest)
22542 ;; Create a standard initrd but set up networking
22543 ;; with the parameters QEMU expects by default.
22544 (apply base-initrd file-systems
22545 #:qemu-networking? #t
22546 rest)))
22547 @end example
22548
22549 The @code{base-initrd} procedure also handles common use cases that involves
22550 using the system as a QEMU guest, or as a ``live'' system with volatile root
22551 file system.
22552
22553 The @code{base-initrd} procedure is built from @code{raw-initrd} procedure.
22554 Unlike @code{base-initrd}, @code{raw-initrd} doesn't do anything high-level,
22555 such as trying to guess which kernel modules and packages should be included
22556 to the initrd. An example use of @code{raw-initrd} is when a user has a
22557 custom Linux kernel configuration and default kernel modules included by
22558 @code{base-initrd} are not available.
22559
22560 The initial RAM disk produced by @code{base-initrd} or @code{raw-initrd}
22561 honors several options passed on the Linux kernel command line (that is,
22562 arguments passed @i{via} the @code{linux} command of GRUB, or the
22563 @code{-append} option of QEMU), notably:
22564
22565 @table @code
22566 @item --load=@var{boot}
22567 Tell the initial RAM disk to load @var{boot}, a file containing a Scheme
22568 program, once it has mounted the root file system.
22569
22570 GuixSD uses this option to yield control to a boot program that runs the
22571 service activation programs and then spawns the GNU@tie{}Shepherd, the
22572 initialization system.
22573
22574 @item --root=@var{root}
22575 Mount @var{root} as the root file system. @var{root} can be a device name
22576 like @code{/dev/sda1}, a file system label, or a file system UUID.
22577
22578 @item --system=@var{système}
22579 Have @file{/run/booted-system} and @file{/run/current-system} point to
22580 @var{system}.
22581
22582 @item modprobe.blacklist=@var{modules}@dots{}
22583 @cindex module, black-listing
22584 @cindex black list, of kernel modules
22585 Instruct the initial RAM disk as well as the @command{modprobe} command
22586 (from the kmod package) to refuse to load @var{modules}. @var{modules} must
22587 be a comma-separated list of module names---e.g., @code{usbkbd,9pnet}.
22588
22589 @item --repl
22590 Start a read-eval-print loop (REPL) from the initial RAM disk before it
22591 tries to load kernel modules and to mount the root file system. Our
22592 marketing team calls it @dfn{boot-to-Guile}. The Schemer in you will love
22593 it. @xref{Using Guile Interactively,,, guile, GNU Guile Reference Manual},
22594 for more information on Guile's REPL.
22595
22596 @end table
22597
22598 Now that you know all the features that initial RAM disks produced by
22599 @code{base-initrd} and @code{raw-initrd} provide, here is how to use it and
22600 customize it further.
22601
22602 @cindex initrd
22603 @cindex disque de RAM initial
22604 @deffn {Procédure Scheme} raw-initrd @var{file-systems} @
22605 [#:linux-modules '()] [#:mapped-devices '()] @ [#:helper-packages '()]
22606 [#:qemu-networking? #f] [#:volatile-root? #f] Return a derivation that
22607 builds a raw initrd. @var{file-systems} is a list of file systems to be
22608 mounted by the initrd, possibly in addition to the root file system
22609 specified on the kernel command line via @code{--root}. @var{linux-modules}
22610 is a list of kernel modules to be loaded at boot time. @var{mapped-devices}
22611 is a list of device mappings to realize before @var{file-systems} are
22612 mounted (@pxref{Périphériques mappés}). @var{helper-packages} is a list of
22613 packages to be copied in the initrd. It may include @code{e2fsck/static} or
22614 other packages needed by the initrd to check the root file system.
22615
22616 When @var{qemu-networking?} is true, set up networking with the standard
22617 QEMU parameters. When @var{virtio?} is true, load additional modules so
22618 that the initrd can be used as a QEMU guest with para-virtualized I/O
22619 drivers.
22620
22621 When @var{volatile-root?} is true, the root file system is writable but any
22622 changes to it are lost.
22623 @end deffn
22624
22625 @deffn {Procédure Scheme} base-initrd @var{file-systems} @
22626 [#:mapped-devices '()] [#:qemu-networking? #f] [#:volatile-root? #f]@
22627 [#:linux-modules '()] Return as a file-like object a generic initrd, with
22628 kernel modules taken from @var{linux}. @var{file-systems} is a list of
22629 file-systems to be mounted by the initrd, possibly in addition to the root
22630 file system specified on the kernel command line via @code{--root}.
22631 @var{mapped-devices} is a list of device mappings to realize before
22632 @var{file-systems} are mounted.
22633
22634 @var{qemu-networking?} and @var{volatile-root?} behaves as in
22635 @code{raw-initrd}.
22636
22637 The initrd is automatically populated with all the kernel modules necessary
22638 for @var{file-systems} and for the given options. Additional kernel modules
22639 can be listed in @var{linux-modules}. They will be added to the initrd, and
22640 loaded at boot time in the order in which they appear.
22641 @end deffn
22642
22643 Needless to say, the initrds we produce and use embed a statically-linked
22644 Guile, and the initialization program is a Guile program. That gives a lot
22645 of flexibility. The @code{expression->initrd} procedure builds such an
22646 initrd, given the program to run in that initrd.
22647
22648 @deffn {Procédure Scheme} expression->initrd @var{exp} @
22649 [#:guile %guile-static-stripped] [#:name "guile-initrd"] Return as a
22650 file-like object a Linux initrd (a gzipped cpio archive) containing
22651 @var{guile} and that evaluates @var{exp}, a G-expression, upon booting. All
22652 the derivations referenced by @var{exp} are automatically copied to the
22653 initrd.
22654 @end deffn
22655
22656 @node Configuration du chargeur d'amorçage
22657 @subsection Configuration du chargeur d'amorçage
22658
22659 @cindex bootloader
22660 @cindex boot loader
22661
22662 The operating system supports multiple bootloaders. The bootloader is
22663 configured using @code{bootloader-configuration} declaration. All the
22664 fields of this structure are bootloader agnostic except for one field,
22665 @code{bootloader} that indicates the bootloader to be configured and
22666 installed.
22667
22668 Some of the bootloaders do not honor every field of
22669 @code{bootloader-configuration}. For instance, the extlinux bootloader does
22670 not support themes and thus ignores the @code{theme} field.
22671
22672 @deftp {Type de données} bootloader-configuration
22673 The type of a bootloader configuration declaration.
22674
22675 @table @asis
22676
22677 @item @code{bootloader}
22678 @cindex EFI, bootloader
22679 @cindex UEFI, bootloader
22680 @cindex BIOS, bootloader
22681 The bootloader to use, as a @code{bootloader} object. For now
22682 @code{grub-bootloader}, @code{grub-efi-bootloader},
22683 @code{extlinux-bootloader} and @code{u-boot-bootloader} are supported.
22684
22685 @vindex grub-efi-bootloader
22686 @code{grub-efi-bootloader} allows to boot on modern systems using the
22687 @dfn{Unified Extensible Firmware Interface} (UEFI). This is what you should
22688 use if the installation image contains a @file{/sys/firmware/efi} directory
22689 when you boot it on your system.
22690
22691 @vindex grub-bootloader
22692 @code{grub-bootloader} allows you to boot in particular Intel-based machines
22693 in ``legacy'' BIOS mode.
22694
22695 @cindex ARM, chargeurs d'amorçage
22696 @cindex AArch64, chargeurs d'amorçage
22697 Available bootloaders are described in @code{(gnu bootloader @dots{})}
22698 modules. In particular, @code{(gnu bootloader u-boot)} contains definitions
22699 of bootloaders for a wide range of ARM and AArch64 systems, using the
22700 @uref{http://www.denx.de/wiki/U-Boot/, U-Boot bootloader}.
22701
22702 @item @code{target}
22703 This is a string denoting the target onto which to install the bootloader.
22704
22705 The interpretation depends on the bootloader in question. For
22706 @code{grub-bootloader}, for example, it should be a device name understood
22707 by the bootloader @command{installer} command, such as @code{/dev/sda} or
22708 @code{(hd0)} (@pxref{Invoking grub-install,,, grub, GNU GRUB Manual}). For
22709 @code{grub-efi-bootloader}, it should be the mount point of the EFI file
22710 system, usually @file{/boot/efi}.
22711
22712 @item @code{menu-entries} (par défaut : @code{()})
22713 A possibly empty list of @code{menu-entry} objects (see below), denoting
22714 entries to appear in the bootloader menu, in addition to the current system
22715 entry and the entry pointing to previous system generations.
22716
22717 @item @code{default-entry} (par défaut : @code{0})
22718 The index of the default boot menu entry. Index 0 is for the entry of the
22719 current system.
22720
22721 @item @code{timeout} (par défaut : @code{5})
22722 The number of seconds to wait for keyboard input before booting. Set to 0
22723 to boot immediately, and to -1 to wait indefinitely.
22724
22725 @item @code{theme} (par défaut : @var{#f})
22726 The bootloader theme object describing the theme to use. If no theme is
22727 provided, some bootloaders might use a default theme, that's true for GRUB.
22728
22729 @item @code{terminal-outputs} (par défaut : @code{'gfxterm})
22730 The output terminals used for the bootloader boot menu, as a list of
22731 symbols. GRUB accepts the values: @code{console}, @code{serial},
22732 @code{serial_@{0-3@}}, @code{gfxterm}, @code{vga_text}, @code{mda_text},
22733 @code{morse}, and @code{pkmodem}. This field corresponds to the GRUB
22734 variable @code{GRUB_TERMINAL_OUTPUT} (@pxref{Simple configuration,,,
22735 grub,GNU GRUB manual}).
22736
22737 @item @code{terminal-inputs} (par défaut : @code{'()})
22738 The input terminals used for the bootloader boot menu, as a list of
22739 symbols. For GRUB, the default is the native platform terminal as
22740 determined at run-time. GRUB accepts the values: @code{console},
22741 @code{serial}, @code{serial_@{0-3@}}, @code{at_keyboard}, and
22742 @code{usb_keyboard}. This field corresponds to the GRUB variable
22743 @code{GRUB_TERMINAL_INPUT} (@pxref{Simple configuration,,, grub,GNU GRUB
22744 manual}).
22745
22746 @item @code{serial-unit} (par défaut : @code{#f})
22747 The serial unit used by the bootloader, as an integer from 0 to 3. For
22748 GRUB, it is chosen at run-time; currently GRUB chooses 0, which corresponds
22749 to COM1 (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
22750
22751 @item @code{serial-speed} (par défaut : @code{#f})
22752 The speed of the serial interface, as an integer. For GRUB, the default
22753 value is chosen at run-time; currently GRUB chooses 9600@tie{}bps
22754 (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
22755 @end table
22756
22757 @end deftp
22758
22759 @cindex dual boot
22760 @cindex boot menu
22761 Should you want to list additional boot menu entries @i{via} the
22762 @code{menu-entries} field above, you will need to create them with the
22763 @code{menu-entry} form. For example, imagine you want to be able to boot
22764 another distro (hard to imagine!), you can define a menu entry along these
22765 lines:
22766
22767 @example
22768 (menu-entry
22769 (label "The Other Distro")
22770 (linux "/boot/old/vmlinux-2.6.32")
22771 (linux-arguments '("root=/dev/sda2"))
22772 (initrd "/boot/old/initrd"))
22773 @end example
22774
22775 Details below.
22776
22777 @deftp {Type de données} menu-entry
22778 The type of an entry in the bootloader menu.
22779
22780 @table @asis
22781
22782 @item @code{label}
22783 The label to show in the menu---e.g., @code{"GNU"}.
22784
22785 @item @code{linux}
22786 The Linux kernel image to boot, for example:
22787
22788 @example
22789 (file-append linux-libre "/bzImage")
22790 @end example
22791
22792 For GRUB, it is also possible to specify a device explicitly in the file
22793 path using GRUB's device naming convention (@pxref{Naming convention,,,
22794 grub, GNU GRUB manual}), for example:
22795
22796 @example
22797 "(hd0,msdos1)/boot/vmlinuz"
22798 @end example
22799
22800 If the device is specified explicitly as above, then the @code{device} field
22801 is ignored entirely.
22802
22803 @item @code{linux-arguments} (par défaut : @code{()})
22804 The list of extra Linux kernel command-line arguments---e.g.,
22805 @code{("console=ttyS0")}.
22806
22807 @item @code{initrd}
22808 A G-Expression or string denoting the file name of the initial RAM disk to
22809 use (@pxref{G-Expressions}).
22810 @item @code{device} (par défaut : @code{#f})
22811 The device where the kernel and initrd are to be found---i.e., for GRUB,
22812 @dfn{root} for this menu entry (@pxref{root,,, grub, GNU GRUB manual}).
22813
22814 This may be a file system label (a string), a file system UUID (a
22815 bytevector, @pxref{Systèmes de fichiers}), or @code{#f}, in which case the
22816 bootloader will search the device containing the file specified by the
22817 @code{linux} field (@pxref{search,,, grub, GNU GRUB manual}). It must
22818 @emph{not} be an OS device name such as @file{/dev/sda1}.
22819
22820 @end table
22821 @end deftp
22822
22823 @c FIXME: Write documentation once it's stable.
22824 Fow now only GRUB has theme support. GRUB themes are created using the
22825 @code{grub-theme} form, which is not documented yet.
22826
22827 @defvr {Variable Scheme} %default-theme
22828 This is the default GRUB theme used by the operating system if no
22829 @code{theme} field is specified in @code{bootloader-configuration} record.
22830
22831 It comes with a fancy background image displaying the GNU and Guix logos.
22832 @end defvr
22833
22834
22835 @node Invoquer guix system
22836 @subsection Invoquer @code{guix system}
22837
22838 Once you have written an operating system declaration as seen in the
22839 previous section, it can be @dfn{instantiated} using the @command{guix
22840 system} command. The synopsis is:
22841
22842 @example
22843 guix system @var{options}@dots{} @var{action} @var{file}
22844 @end example
22845
22846 @var{file} must be the name of a file containing an @code{operating-system}
22847 declaration. @var{action} specifies how the operating system is
22848 instantiated. Currently the following values are supported:
22849
22850 @table @code
22851 @item search
22852 Display available service type definitions that match the given regular
22853 expressions, sorted by relevance:
22854
22855 @example
22856 $ guix system search console font
22857 name: console-fonts
22858 location: gnu/services/base.scm:729:2
22859 extends: shepherd-root
22860 description: Install the given fonts on the specified ttys (fonts are
22861 + per virtual console on GNU/Linux). The value of this service is a list
22862 + of tty/font pairs like:
22863 +
22864 + '(("tty1" . "LatGrkCyr-8x16"))
22865 relevance: 20
22866
22867 name: mingetty
22868 location: gnu/services/base.scm:1048:2
22869 extends: shepherd-root
22870 description: Provide console login using the `mingetty' program.
22871 relevance: 2
22872
22873 name: login
22874 location: gnu/services/base.scm:775:2
22875 extends: pam
22876 description: Provide a console log-in service as specified by its
22877 + configuration value, a `login-configuration' object.
22878 relevance: 2
22879
22880 @dots{}
22881 @end example
22882
22883 As for @command{guix package --search}, the result is written in
22884 @code{recutils} format, which makes it easy to filter the output
22885 (@pxref{Top, GNU recutils databases,, recutils, GNU recutils manual}).
22886
22887 @item reconfigure
22888 Build the operating system described in @var{file}, activate it, and switch
22889 to it@footnote{This action (and the related actions @code{switch-generation}
22890 and @code{roll-back}) are usable only on systems already running GuixSD.}.
22891
22892 This effects all the configuration specified in @var{file}: user accounts,
22893 system services, global package list, setuid programs, etc. The command
22894 starts system services specified in @var{file} that are not currently
22895 running; if a service is currently running this command will arrange for it
22896 to be upgraded the next time it is stopped (e.g.@: by @code{herd stop X} or
22897 @code{herd restart X}).
22898
22899 This command creates a new generation whose number is one greater than the
22900 current generation (as reported by @command{guix system list-generations}).
22901 If that generation already exists, it will be overwritten. This behavior
22902 mirrors that of @command{guix package} (@pxref{Invoquer guix package}).
22903
22904 It also adds a bootloader menu entry for the new OS configuration, ---unless
22905 @option{--no-bootloader} is passed. For GRUB, it moves entries for older
22906 configurations to a submenu, allowing you to choose an older system
22907 generation at boot time should you need it.
22908
22909 @quotation Remarque
22910 @c The paragraph below refers to the problem discussed at
22911 @c <http://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
22912 It is highly recommended to run @command{guix pull} once before you run
22913 @command{guix system reconfigure} for the first time (@pxref{Invoquer guix pull}). Failing to do that you would see an older version of Guix once
22914 @command{reconfigure} has completed.
22915 @end quotation
22916
22917 @item switch-generation
22918 @cindex générations
22919 Switch to an existing system generation. This action atomically switches
22920 the system profile to the specified system generation. It also rearranges
22921 the system's existing bootloader menu entries. It makes the menu entry for
22922 the specified system generation the default, and it moves the entries for
22923 the other generatiors to a submenu, if supported by the bootloader being
22924 used. The next time the system boots, it will use the specified system
22925 generation.
22926
22927 The bootloader itself is not being reinstalled when using this command.
22928 Thus, the installed bootloader is used with an updated configuration file.
22929
22930 The target generation can be specified explicitly by its generation number.
22931 For example, the following invocation would switch to system generation 7:
22932
22933 @example
22934 guix system switch-generation 7
22935 @end example
22936
22937 The target generation can also be specified relative to the current
22938 generation with the form @code{+N} or @code{-N}, where @code{+3} means ``3
22939 generations ahead of the current generation,'' and @code{-1} means ``1
22940 generation prior to the current generation.'' When specifying a negative
22941 value such as @code{-1}, you must precede it with @code{--} to prevent it
22942 from being parsed as an option. For example:
22943
22944 @example
22945 guix system switch-generation -- -1
22946 @end example
22947
22948 Currently, the effect of invoking this action is @emph{only} to switch the
22949 system profile to an existing generation and rearrange the bootloader menu
22950 entries. To actually start using the target system generation, you must
22951 reboot after running this action. In the future, it will be updated to do
22952 the same things as @command{reconfigure}, like activating and deactivating
22953 services.
22954
22955 This action will fail if the specified generation does not exist.
22956
22957 @item roll-back
22958 @cindex revenir en arrière
22959 Switch to the preceding system generation. The next time the system boots,
22960 it will use the preceding system generation. This is the inverse of
22961 @command{reconfigure}, and it is exactly the same as invoking
22962 @command{switch-generation} with an argument of @code{-1}.
22963
22964 Currently, as with @command{switch-generation}, you must reboot after
22965 running this action to actually start using the preceding system generation.
22966
22967 @item build
22968 Build the derivation of the operating system, which includes all the
22969 configuration files and programs needed to boot and run the system. This
22970 action does not actually install anything.
22971
22972 @item init
22973 Populate the given directory with all the files necessary to run the
22974 operating system specified in @var{file}. This is useful for first-time
22975 installations of GuixSD. For instance:
22976
22977 @example
22978 guix system init my-os-config.scm /mnt
22979 @end example
22980
22981 copies to @file{/mnt} all the store items required by the configuration
22982 specified in @file{my-os-config.scm}. This includes configuration files,
22983 packages, and so on. It also creates other essential files needed for the
22984 system to operate correctly---e.g., the @file{/etc}, @file{/var}, and
22985 @file{/run} directories, and the @file{/bin/sh} file.
22986
22987 This command also installs bootloader on the target specified in
22988 @file{my-os-config}, unless the @option{--no-bootloader} option was passed.
22989
22990 @item vm
22991 @cindex virtual machine
22992 @cindex VM
22993 @anchor{guix system vm}
22994 Build a virtual machine that contains the operating system declared in
22995 @var{file}, and return a script to run that virtual machine (VM). Arguments
22996 given to the script are passed to QEMU as in the example below, which
22997 enables networking and requests 1@tie{}GiB of RAM for the emulated machine:
22998
22999 @example
23000 $ /gnu/store/@dots{}-run-vm.sh -m 1024 -net user
23001 @end example
23002
23003 The VM shares its store with the host system.
23004
23005 Additional file systems can be shared between the host and the VM using the
23006 @code{--share} and @code{--expose} command-line options: the former
23007 specifies a directory to be shared with write access, while the latter
23008 provides read-only access to the shared directory.
23009
23010 The example below creates a VM in which the user's home directory is
23011 accessible read-only, and where the @file{/exchange} directory is a
23012 read-write mapping of @file{$HOME/tmp} on the host:
23013
23014 @example
23015 guix system vm my-config.scm \
23016 --expose=$HOME --share=$HOME/tmp=/exchange
23017 @end example
23018
23019 On GNU/Linux, the default is to boot directly to the kernel; this has the
23020 advantage of requiring only a very tiny root disk image since the store of
23021 the host can then be mounted.
23022
23023 The @code{--full-boot} option forces a complete boot sequence, starting with
23024 the bootloader. This requires more disk space since a root image containing
23025 at least the kernel, initrd, and bootloader data files must be created. The
23026 @code{--image-size} option can be used to specify the size of the image.
23027
23028 @cindex System images, creation in various formats
23029 @cindex Creating system images in various formats
23030 @item vm-image
23031 @itemx disk-image
23032 @itemx docker-image
23033 Return a virtual machine, disk image, or Docker image of the operating
23034 system declared in @var{file} that stands alone. By default, @command{guix
23035 system} estimates the size of the image needed to store the system, but you
23036 can use the @option{--image-size} option to specify a value. Docker images
23037 are built to contain exactly what they need, so the @option{--image-size}
23038 option is ignored in the case of @code{docker-image}.
23039
23040 You can specify the root file system type by using the
23041 @option{--file-system-type} option. It defaults to @code{ext4}.
23042
23043 When using @code{vm-image}, the returned image is in qcow2 format, which the
23044 QEMU emulator can efficiently use. @xref{Lancer GuixSD dans une VM}, for more
23045 information on how to run the image in a virtual machine.
23046
23047 When using @code{disk-image}, a raw disk image is produced; it can be copied
23048 as is to a USB stick, for instance. Assuming @code{/dev/sdc} is the device
23049 corresponding to a USB stick, one can copy the image to it using the
23050 following command:
23051
23052 @example
23053 # dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
23054 @end example
23055
23056 When using @code{docker-image}, a Docker image is produced. Guix builds the
23057 image from scratch, not from a pre-existing Docker base image. As a result,
23058 it contains @emph{exactly} what you define in the operating system
23059 configuration file. You can then load the image and launch a Docker
23060 container using commands like the following:
23061
23062 @example
23063 image_id="$(docker load < guixsd-docker-image.tar.gz)"
23064 docker run -e GUIX_NEW_SYSTEM=/var/guix/profiles/system \\
23065 --entrypoint /var/guix/profiles/system/profile/bin/guile \\
23066 $image_id /var/guix/profiles/system/boot
23067 @end example
23068
23069 This command starts a new Docker container from the specified image. It
23070 will boot the GuixSD system in the usual manner, which means it will start
23071 any services you have defined in the operating system configuration.
23072 Depending on what you run in the Docker container, it may be necessary to
23073 give the container additional permissions. For example, if you intend to
23074 build software using Guix inside of the Docker container, you may need to
23075 pass the @option{--privileged} option to @code{docker run}.
23076
23077 @item conteneur
23078 Return a script to run the operating system declared in @var{file} within a
23079 container. Containers are a set of lightweight isolation mechanisms
23080 provided by the kernel Linux-libre. Containers are substantially less
23081 resource-demanding than full virtual machines since the kernel, shared
23082 objects, and other resources can be shared with the host system; this also
23083 means they provide thinner isolation.
23084
23085 Currently, the script must be run as root in order to support more than a
23086 single user and group. The container shares its store with the host system.
23087
23088 As with the @code{vm} action (@pxref{guix system vm}), additional file
23089 systems to be shared between the host and container can be specified using
23090 the @option{--share} and @option{--expose} options:
23091
23092 @example
23093 guix system container my-config.scm \
23094 --expose=$HOME --share=$HOME/tmp=/exchange
23095 @end example
23096
23097 @quotation Remarque
23098 This option requires Linux-libre 3.19 or newer.
23099 @end quotation
23100
23101 @end table
23102
23103 @var{options} can contain any of the common build options (@pxref{Options de construction communes}). In addition, @var{options} can contain one of the
23104 following:
23105
23106 @table @option
23107 @item --expression=@var{expr}
23108 @itemx -e @var{expr}
23109 Consider the operating-system @var{expr} evaluates to. This is an
23110 alternative to specifying a file which evaluates to an operating system.
23111 This is used to generate the GuixSD installer @pxref{Construire l'image d'installation}).
23112
23113 @item --system=@var{système}
23114 @itemx -s @var{système}
23115 Attempt to build for @var{system} instead of the host system type. This
23116 works as per @command{guix build} (@pxref{Invoquer guix build}).
23117
23118 @item --derivation
23119 @itemx -d
23120 Return the derivation file name of the given operating system without
23121 building anything.
23122
23123 @item --file-system-type=@var{type}
23124 @itemx -t @var{type}
23125 For the @code{disk-image} action, create a file system of the given
23126 @var{type} on the image.
23127
23128 When this option is omitted, @command{guix system} uses @code{ext4}.
23129
23130 @cindex ISO-9660 format
23131 @cindex CD image format
23132 @cindex DVD image format
23133 @code{--file-system-type=iso9660} produces an ISO-9660 image, suitable for
23134 burning on CDs and DVDs.
23135
23136 @item --image-size=@var{size}
23137 For the @code{vm-image} and @code{disk-image} actions, create an image of
23138 the given @var{size}. @var{size} may be a number of bytes, or it may
23139 include a unit as a suffix (@pxref{Block size, size specifications,,
23140 coreutils, GNU Coreutils}).
23141
23142 When this option is omitted, @command{guix system} computes an estimate of
23143 the image size as a function of the size of the system declared in
23144 @var{file}.
23145
23146 @item --root=@var{fichier}
23147 @itemx -r @var{fichier}
23148 Fait de @var{fichier} un lien symbolique vers le résultat, et l'enregistre
23149 en tant que racine du ramasse-miettes.
23150
23151 @item --skip-checks
23152 Skip pre-installation safety checks.
23153
23154 By default, @command{guix system init} and @command{guix system reconfigure}
23155 perform safety checks: they make sure the file systems that appear in the
23156 @code{operating-system} declaration actually exist (@pxref{Systèmes de fichiers}),
23157 and that any Linux kernel modules that may be needed at boot time are listed
23158 in @code{initrd-modules} (@pxref{Disque de RAM initial}). Passing this option
23159 skips these tests altogether.
23160
23161 @item --on-error=@var{strategy}
23162 Apply @var{strategy} when an error occurs when reading @var{file}.
23163 @var{strategy} may be one of the following:
23164
23165 @table @code
23166 @item nothing-special
23167 Report the error concisely and exit. This is the default strategy.
23168
23169 @item backtrace
23170 Likewise, but also display a backtrace.
23171
23172 @item debug
23173 Report the error and enter Guile's debugger. From there, you can run
23174 commands such as @code{,bt} to get a backtrace, @code{,locals} to display
23175 local variable values, and more generally inspect the state of the program.
23176 @xref{Debug Commands,,, guile, GNU Guile Reference Manual}, for a list of
23177 available debugging commands.
23178 @end table
23179 @end table
23180
23181 @quotation Remarque
23182 All the actions above, except @code{build} and @code{init}, can use KVM
23183 support in the Linux-libre kernel. Specifically, if the machine has
23184 hardware virtualization support, the corresponding KVM kernel module should
23185 be loaded, and the @file{/dev/kvm} device node must exist and be readable
23186 and writable by the user and by the build users of the daemon (@pxref{Réglages de l'environnement de construction}).
23187 @end quotation
23188
23189 Once you have built, configured, re-configured, and re-re-configured your
23190 GuixSD installation, you may find it useful to list the operating system
23191 generations available on disk---and that you can choose from the bootloader
23192 boot menu:
23193
23194 @table @code
23195
23196 @item list-generations
23197 List a summary of each generation of the operating system available on disk,
23198 in a human-readable way. This is similar to the @option{--list-generations}
23199 option of @command{guix package} (@pxref{Invoquer guix package}).
23200
23201 Optionally, one can specify a pattern, with the same syntax that is used in
23202 @command{guix package --list-generations}, to restrict the list of
23203 generations displayed. For instance, the following command displays
23204 generations that are up to 10 days old:
23205
23206 @example
23207 $ guix system list-generations 10d
23208 @end example
23209
23210 @end table
23211
23212 The @command{guix system} command has even more to offer! The following
23213 sub-commands allow you to visualize how your system services relate to each
23214 other:
23215
23216 @anchor{system-extension-graph}
23217 @table @code
23218
23219 @item extension-graph
23220 Emit in Dot/Graphviz format to standard output the @dfn{service extension
23221 graph} of the operating system defined in @var{file} (@pxref{Composition de services}, for more information on service extensions.)
23222
23223 The command:
23224
23225 @example
23226 $ guix system extension-graph @var{file} | dot -Tpdf > services.pdf
23227 @end example
23228
23229 produces a PDF file showing the extension relations among services.
23230
23231 @anchor{system-shepherd-graph}
23232 @item shepherd-graph
23233 Emit in Dot/Graphviz format to standard output the @dfn{dependency graph} of
23234 shepherd services of the operating system defined in @var{file}.
23235 @xref{Services Shepherd}, for more information and for an example graph.
23236
23237 @end table
23238
23239 @node Lancer GuixSD dans une VM
23240 @subsection Running GuixSD in a Virtual Machine
23241
23242 @cindex virtual machine
23243 To run GuixSD in a virtual machine (VM), one can either use the pre-built
23244 GuixSD VM image distributed at
23245 @indicateurl{https://alpha.gnu.org/gnu/guix/guixsd-vm-image-@value{VERSION}.@var{system}.xz}
23246 , or build their own virtual machine image using @command{guix system
23247 vm-image} (@pxref{Invoquer guix system}). The returned image is in qcow2
23248 format, which the @uref{http://qemu.org/, QEMU emulator} can efficiently
23249 use.
23250
23251 @cindex QEMU
23252 If you built your own image, you must copy it out of the store (@pxref{Le dépôt}) and give yourself permission to write to the copy before you can use
23253 it. When invoking QEMU, you must choose a system emulator that is suitable
23254 for your hardware platform. Here is a minimal QEMU invocation that will
23255 boot the result of @command{guix system vm-image} on x86_64 hardware:
23256
23257 @example
23258 $ qemu-system-x86_64 \
23259 -net user -net nic,model=virtio \
23260 -enable-kvm -m 256 /tmp/qemu-image
23261 @end example
23262
23263 Here is what each of these options means:
23264
23265 @table @code
23266 @item qemu-system-x86_64
23267 This specifies the hardware platform to emulate. This should match the
23268 host.
23269
23270 @item -net user
23271 Enable the unprivileged user-mode network stack. The guest OS can access
23272 the host but not vice versa. This is the simplest way to get the guest OS
23273 online.
23274
23275 @item -net nic,model=virtio
23276 You must create a network interface of a given model. If you do not create
23277 a NIC, the boot will fail. Assuming your hardware platform is x86_64, you
23278 can get a list of available NIC models by running
23279 @command{qemu-system-x86_64 -net nic,model=help}.
23280
23281 @item -enable-kvm
23282 If your system has hardware virtualization extensions, enabling the virtual
23283 machine support (KVM) of the Linux kernel will make things run faster.
23284
23285 @item -m 256
23286 RAM available to the guest OS, in mebibytes. Defaults to 128@tie{}MiB,
23287 which may be insufficient for some operations.
23288
23289 @item /tmp/qemu-image
23290 The file name of the qcow2 image.
23291 @end table
23292
23293 The default @command{run-vm.sh} script that is returned by an invocation of
23294 @command{guix system vm} does not add a @command{-net user} flag by
23295 default. To get network access from within the vm add the
23296 @code{(dhcp-client-service)} to your system definition and start the VM
23297 using @command{`guix system vm config.scm` -net user}. An important caveat
23298 of using @command{-net user} for networking is that @command{ping} will not
23299 work, because it uses the ICMP protocol. You'll have to use a different
23300 command to check for network connectivity, for example @command{guix
23301 download}.
23302
23303 @subsubsection Connecting Through SSH
23304
23305 @cindex SSH
23306 @cindex serveur SSH
23307 To enable SSH inside a VM you need to add a SSH server like
23308 @code{(dropbear-service)} or @code{(lsh-service)} to your VM. The
23309 @code{(lsh-service}) doesn't currently boot unsupervised. It requires you
23310 to type some characters to initialize the randomness generator. In addition
23311 you need to forward the SSH port, 22 by default, to the host. You can do
23312 this with
23313
23314 @example
23315 `guix system vm config.scm` -net user,hostfwd=tcp::10022-:22
23316 @end example
23317
23318 To connect to the VM you can run
23319
23320 @example
23321 ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022
23322 @end example
23323
23324 The @command{-p} tells @command{ssh} the port you want to connect to.
23325 @command{-o UserKnownHostsFile=/dev/null} prevents @command{ssh} from
23326 complaining every time you modify your @command{config.scm} file and the
23327 @command{-o StrictHostKeyChecking=no} prevents you from having to allow a
23328 connection to an unknown host every time you connect.
23329
23330 @subsubsection Using @command{virt-viewer} with Spice
23331
23332 As an alternative to the default @command{qemu} graphical client you can use
23333 the @command{remote-viewer} from the @command{virt-viewer} package. To
23334 connect pass the @command{-spice port=5930,disable-ticketing} flag to
23335 @command{qemu}. See previous section for further information on how to do
23336 this.
23337
23338 Spice also allows you to do some nice stuff like share your clipboard with
23339 your VM. To enable that you'll also have to pass the following flags to
23340 @command{qemu}:
23341
23342 @example
23343 -device virtio-serial-pci,id=virtio-serial0,max_ports=16,bus=pci.0,addr=0x5
23344 -chardev spicevmc,name=vdagent,id=vdagent
23345 -device virtserialport,nr=1,bus=virtio-serial0.0,chardev=vdagent,
23346 name=com.redhat.spice.0
23347 @end example
23348
23349 You'll also need to add the @pxref{Services divers, Spice service}.
23350
23351 @node Définir des services
23352 @subsection Définir des services
23353
23354 The previous sections show the available services and how one can combine
23355 them in an @code{operating-system} declaration. But how do we define them
23356 in the first place? And what is a service anyway?
23357
23358 @menu
23359 * Composition de services:: Le modèle de composition des services.
23360 * Types service et services:: Types et services.
23361 * Référence de service:: Référence de l'API@.
23362 * Services Shepherd:: Un type de service particulier.
23363 @end menu
23364
23365 @node Composition de services
23366 @subsubsection Composition de services
23367
23368 @cindex services
23369 @cindex daemons
23370 Here we define a @dfn{service} as, broadly, something that extends the
23371 functionality of the operating system. Often a service is a process---a
23372 @dfn{daemon}---started when the system boots: a secure shell server, a Web
23373 server, the Guix build daemon, etc. Sometimes a service is a daemon whose
23374 execution can be triggered by another daemon---e.g., an FTP server started
23375 by @command{inetd} or a D-Bus service activated by @command{dbus-daemon}.
23376 Occasionally, a service does not map to a daemon. For instance, the
23377 ``account'' service collects user accounts and makes sure they exist when
23378 the system runs; the ``udev'' service collects device management rules and
23379 makes them available to the eudev daemon; the @file{/etc} service populates
23380 the @file{/etc} directory of the system.
23381
23382 @cindex service extensions
23383 GuixSD services are connected by @dfn{extensions}. For instance, the secure
23384 shell service @emph{extends} the Shepherd---the GuixSD initialization
23385 system, running as PID@tie{}1---by giving it the command lines to start and
23386 stop the secure shell daemon (@pxref{Services réseau,
23387 @code{lsh-service}}); the UPower service extends the D-Bus service by
23388 passing it its @file{.service} specification, and extends the udev service
23389 by passing it device management rules (@pxref{Services de bureaux,
23390 @code{upower-service}}); the Guix daemon service extends the Shepherd by
23391 passing it the command lines to start and stop the daemon, and extends the
23392 account service by passing it a list of required build user accounts
23393 (@pxref{Services de base}).
23394
23395 All in all, services and their ``extends'' relations form a directed acyclic
23396 graph (DAG). If we represent services as boxes and extensions as arrows, a
23397 typical system might provide something like this:
23398
23399 @image{images/service-graph,,5in,Typical service extension graph.}
23400
23401 @cindex system service
23402 At the bottom, we see the @dfn{system service}, which produces the directory
23403 containing everything to run and boot the system, as returned by the
23404 @command{guix system build} command. @xref{Référence de service}, to learn
23405 about the other service types shown here. @xref{system-extension-graph, the
23406 @command{guix system extension-graph} command}, for information on how to
23407 generate this representation for a particular operating system definition.
23408
23409 @cindex service types
23410 Technically, developers can define @dfn{service types} to express these
23411 relations. There can be any number of services of a given type on the
23412 system---for instance, a system running two instances of the GNU secure
23413 shell server (lsh) has two instances of @var{lsh-service-type}, with
23414 different parameters.
23415
23416 The following section describes the programming interface for service types
23417 and services.
23418
23419 @node Types service et services
23420 @subsubsection Types service et services
23421
23422 A @dfn{service type} is a node in the DAG described above. Let us start
23423 with a simple example, the service type for the Guix build daemon
23424 (@pxref{Invoquer guix-daemon}):
23425
23426 @example
23427 (define guix-service-type
23428 (service-type
23429 (name 'guix)
23430 (extensions
23431 (list (service-extension shepherd-root-service-type guix-shepherd-service)
23432 (service-extension account-service-type guix-accounts)
23433 (service-extension activation-service-type guix-activation)))
23434 (default-value (guix-configuration))))
23435 @end example
23436
23437 @noindent
23438 It defines three things:
23439
23440 @enumerate
23441 @item
23442 A name, whose sole purpose is to make inspection and debugging easier.
23443
23444 @item
23445 A list of @dfn{service extensions}, where each extension designates the
23446 target service type and a procedure that, given the parameters of the
23447 service, returns a list of objects to extend the service of that type.
23448
23449 Every service type has at least one service extension. The only exception
23450 is the @dfn{boot service type}, which is the ultimate service.
23451
23452 @item
23453 Optionally, a default value for instances of this type.
23454 @end enumerate
23455
23456 In this example, @var{guix-service-type} extends three services:
23457
23458 @table @var
23459 @item shepherd-root-service-type
23460 The @var{guix-shepherd-service} procedure defines how the Shepherd service
23461 is extended. Namely, it returns a @code{<shepherd-service>} object that
23462 defines how @command{guix-daemon} is started and stopped (@pxref{Services Shepherd}).
23463
23464 @item account-service-type
23465 This extension for this service is computed by @var{guix-accounts}, which
23466 returns a list of @code{user-group} and @code{user-account} objects
23467 representing the build user accounts (@pxref{Invoquer guix-daemon}).
23468
23469 @item activation-service-type
23470 Here @var{guix-activation} is a procedure that returns a gexp, which is a
23471 code snippet to run at ``activation time''---e.g., when the service is
23472 booted.
23473 @end table
23474
23475 A service of this type is instantiated like this:
23476
23477 @example
23478 (service guix-service-type
23479 (guix-configuration
23480 (build-accounts 5)
23481 (use-substitutes? #f)))
23482 @end example
23483
23484 The second argument to the @code{service} form is a value representing the
23485 parameters of this specific service instance.
23486 @xref{guix-configuration-type, @code{guix-configuration}}, for information
23487 about the @code{guix-configuration} data type. When the value is omitted,
23488 the default value specified by @code{guix-service-type} is used:
23489
23490 @example
23491 (service guix-service-type)
23492 @end example
23493
23494 @var{guix-service-type} is quite simple because it extends other services
23495 but is not extensible itself.
23496
23497 @c @subsubsubsection Extensible Service Types
23498
23499 The service type for an @emph{extensible} service looks like this:
23500
23501 @example
23502 (define udev-service-type
23503 (service-type (name 'udev)
23504 (extensions
23505 (list (service-extension shepherd-root-service-type
23506 udev-shepherd-service)))
23507
23508 (compose concatenate) ;concatenate the list of rules
23509 (extend (lambda (config rules)
23510 (match config
23511 (($ <udev-configuration> udev initial-rules)
23512 (udev-configuration
23513 (udev udev) ;the udev package to use
23514 (rules (append initial-rules rules)))))))))
23515 @end example
23516
23517 This is the service type for the
23518 @uref{https://wiki.gentoo.org/wiki/Project:Eudev, eudev device management
23519 daemon}. Compared to the previous example, in addition to an extension of
23520 @var{shepherd-root-service-type}, we see two new fields:
23521
23522 @table @code
23523 @item compose
23524 This is the procedure to @dfn{compose} the list of extensions to services of
23525 this type.
23526
23527 Services can extend the udev service by passing it lists of rules; we
23528 compose those extensions simply by concatenating them.
23529
23530 @item extend
23531 This procedure defines how the value of the service is @dfn{extended} with
23532 the composition of the extensions.
23533
23534 Udev extensions are composed into a list of rules, but the udev service
23535 value is itself a @code{<udev-configuration>} record. So here, we extend
23536 that record by appending the list of rules it contains to the list of
23537 contributed rules.
23538
23539 @item description
23540 This is a string giving an overview of the service type. The string can
23541 contain Texinfo markup (@pxref{Overview,,, texinfo, GNU Texinfo}). The
23542 @command{guix system search} command searches these strings and displays
23543 them (@pxref{Invoquer guix system}).
23544 @end table
23545
23546 There can be only one instance of an extensible service type such as
23547 @var{udev-service-type}. If there were more, the @code{service-extension}
23548 specifications would be ambiguous.
23549
23550 Still here? The next section provides a reference of the programming
23551 interface for services.
23552
23553 @node Référence de service
23554 @subsubsection Référence de service
23555
23556 We have seen an overview of service types (@pxref{Types service et services}). This section provides a reference on how to manipulate services
23557 and service types. This interface is provided by the @code{(gnu services)}
23558 module.
23559
23560 @deffn {Procédure Scheme} service @var{type} [@var{value}]
23561 Return a new service of @var{type}, a @code{<service-type>} object (see
23562 below.) @var{value} can be any object; it represents the parameters of this
23563 particular service instance.
23564
23565 When @var{value} is omitted, the default value specified by @var{type} is
23566 used; if @var{type} does not specify a default value, an error is raised.
23567
23568 For instance, this:
23569
23570 @example
23571 (service openssh-service-type)
23572 @end example
23573
23574 @noindent
23575 is equivalent to this:
23576
23577 @example
23578 (service openssh-service-type
23579 (openssh-configuration))
23580 @end example
23581
23582 In both cases the result is an instance of @code{openssh-service-type} with
23583 the default configuration.
23584 @end deffn
23585
23586 @deffn {Procédure Scheme} service? @var{obj}
23587 Return true if @var{obj} is a service.
23588 @end deffn
23589
23590 @deffn {Procédure Scheme} service-kind @var{service}
23591 Return the type of @var{service}---i.e., a @code{<service-type>} object.
23592 @end deffn
23593
23594 @deffn {Procédure Scheme} service-value @var{service}
23595 Return the value associated with @var{service}. It represents its
23596 parameters.
23597 @end deffn
23598
23599 Here is an example of how a service is created and manipulated:
23600
23601 @example
23602 (define s
23603 (service nginx-service-type
23604 (nginx-configuration
23605 (nginx nginx)
23606 (log-directory log-directory)
23607 (run-directory run-directory)
23608 (file config-file))))
23609
23610 (service? s)
23611 @result{} #t
23612
23613 (eq? (service-kind s) nginx-service-type)
23614 @result{} #t
23615 @end example
23616
23617 The @code{modify-services} form provides a handy way to change the
23618 parameters of some of the services of a list such as @var{%base-services}
23619 (@pxref{Services de base, @code{%base-services}}). It evaluates to a list of
23620 services. Of course, you could always use standard list combinators such as
23621 @code{map} and @code{fold} to do that (@pxref{SRFI-1, List Library,, guile,
23622 GNU Guile Reference Manual}); @code{modify-services} simply provides a more
23623 concise form for this common pattern.
23624
23625 @deffn {Scheme Syntax} modify-services @var{services} @
23626 (@var{type} @var{variable} => @var{body}) @dots{}
23627
23628 Modify the services listed in @var{services} according to the given
23629 clauses. Each clause has the form:
23630
23631 @example
23632 (@var{type} @var{variable} => @var{body})
23633 @end example
23634
23635 where @var{type} is a service type---e.g., @code{guix-service-type}---and
23636 @var{variable} is an identifier that is bound within the @var{body} to the
23637 service parameters---e.g., a @code{guix-configuration} instance---of the
23638 original service of that @var{type}.
23639
23640 The @var{body} should evaluate to the new service parameters, which will be
23641 used to configure the new service. This new service will replace the
23642 original in the resulting list. Because a service's service parameters are
23643 created using @code{define-record-type*}, you can write a succinct
23644 @var{body} that evaluates to the new service parameters by using the
23645 @code{inherit} feature that @code{define-record-type*} provides.
23646
23647 @xref{Utiliser le système de configuration}, for example usage.
23648
23649 @end deffn
23650
23651 Next comes the programming interface for service types. This is something
23652 you want to know when writing new service definitions, but not necessarily
23653 when simply looking for ways to customize your @code{operating-system}
23654 declaration.
23655
23656 @deftp {Type de données} service-type
23657 @cindex type de service
23658 This is the representation of a @dfn{service type} (@pxref{Types service et services}).
23659
23660 @table @asis
23661 @item @code{name}
23662 This is a symbol, used only to simplify inspection and debugging.
23663
23664 @item @code{extensions}
23665 A non-empty list of @code{<service-extension>} objects (see below).
23666
23667 @item @code{compose} (par défaut : @code{#f})
23668 If this is @code{#f}, then the service type denotes services that cannot be
23669 extended---i.e., services that do not receive ``values'' from other
23670 services.
23671
23672 Otherwise, it must be a one-argument procedure. The procedure is called by
23673 @code{fold-services} and is passed a list of values collected from
23674 extensions. It may return any single value.
23675
23676 @item @code{extend} (par défaut : @code{#f})
23677 If this is @code{#f}, services of this type cannot be extended.
23678
23679 Otherwise, it must be a two-argument procedure: @code{fold-services} calls
23680 it, passing it the initial value of the service as the first argument and
23681 the result of applying @code{compose} to the extension values as the second
23682 argument. It must return a value that is a valid parameter value for the
23683 service instance.
23684 @end table
23685
23686 @xref{Types service et services}, for examples.
23687 @end deftp
23688
23689 @deffn {Procédure Scheme} service-extension @var{target-type} @
23690 @var{compute} Return a new extension for services of type
23691 @var{target-type}. @var{compute} must be a one-argument procedure:
23692 @code{fold-services} calls it, passing it the value associated with the
23693 service that provides the extension; it must return a valid value for the
23694 target service.
23695 @end deffn
23696
23697 @deffn {Procédure Scheme} service-extension? @var{obj}
23698 Return true if @var{obj} is a service extension.
23699 @end deffn
23700
23701 Occasionally, you might want to simply extend an existing service. This
23702 involves creating a new service type and specifying the extension of
23703 interest, which can be verbose; the @code{simple-service} procedure provides
23704 a shorthand for this.
23705
23706 @deffn {Procédure Scheme} simple-service @var{name} @var{target} @var{value}
23707 Return a service that extends @var{target} with @var{value}. This works by
23708 creating a singleton service type @var{name}, of which the returned service
23709 is an instance.
23710
23711 For example, this extends mcron (@pxref{Exécution de tâches planifiées}) with an
23712 additional job:
23713
23714 @example
23715 (simple-service 'my-mcron-job mcron-service-type
23716 #~(job '(next-hour (3)) "guix gc -F 2G"))
23717 @end example
23718 @end deffn
23719
23720 At the core of the service abstraction lies the @code{fold-services}
23721 procedure, which is responsible for ``compiling'' a list of services down to
23722 a single directory that contains everything needed to boot and run the
23723 system---the directory shown by the @command{guix system build} command
23724 (@pxref{Invoquer guix system}). In essence, it propagates service
23725 extensions down the service graph, updating each node parameters on the way,
23726 until it reaches the root node.
23727
23728 @deffn {Procédure Scheme} fold-services @var{services} @
23729 [#:target-type @var{system-service-type}] Fold @var{services} by propagating
23730 their extensions down to the root of type @var{target-type}; return the root
23731 service adjusted accordingly.
23732 @end deffn
23733
23734 Lastly, the @code{(gnu services)} module also defines several essential
23735 service types, some of which are listed below.
23736
23737 @defvr {Variable Scheme} system-service-type
23738 This is the root of the service graph. It produces the system directory as
23739 returned by the @command{guix system build} command.
23740 @end defvr
23741
23742 @defvr {Variable Scheme} boot-service-type
23743 The type of the ``boot service'', which produces the @dfn{boot script}. The
23744 boot script is what the initial RAM disk runs when booting.
23745 @end defvr
23746
23747 @defvr {Variable Scheme} etc-service-type
23748 The type of the @file{/etc} service. This service is used to create files
23749 under @file{/etc} and can be extended by passing it name/file tuples such
23750 as:
23751
23752 @example
23753 (list `("issue" ,(plain-file "issue" "Welcome!\n")))
23754 @end example
23755
23756 In this example, the effect would be to add an @file{/etc/issue} file
23757 pointing to the given file.
23758 @end defvr
23759
23760 @defvr {Variable Scheme} setuid-program-service-type
23761 Type for the ``setuid-program service''. This service collects lists of
23762 executable file names, passed as gexps, and adds them to the set of
23763 setuid-root programs on the system (@pxref{Programmes setuid}).
23764 @end defvr
23765
23766 @defvr {Variable Scheme} profile-service-type
23767 Type of the service that populates the @dfn{system profile}---i.e., the
23768 programs under @file{/run/current-system/profile}. Other services can
23769 extend it by passing it lists of packages to add to the system profile.
23770 @end defvr
23771
23772
23773 @node Services Shepherd
23774 @subsubsection Services Shepherd
23775
23776 @cindex services shepherd
23777 @cindex PID 1
23778 @cindex init system
23779 The @code{(gnu services shepherd)} module provides a way to define services
23780 managed by the GNU@tie{}Shepherd, which is the GuixSD initialization
23781 system---the first process that is started when the system boots, also known
23782 as PID@tie{}1 (@pxref{Introduction,,, shepherd, The GNU Shepherd Manual}).
23783
23784 Services in the Shepherd can depend on each other. For instance, the SSH
23785 daemon may need to be started after the syslog daemon has been started,
23786 which in turn can only happen once all the file systems have been mounted.
23787 The simple operating system defined earlier (@pxref{Utiliser le système de configuration}) results in a service graph like this:
23788
23789 @image{images/shepherd-graph,,5in,Typical shepherd service graph.}
23790
23791 You can actually generate such a graph for any operating system definition
23792 using the @command{guix system shepherd-graph} command
23793 (@pxref{system-shepherd-graph, @command{guix system shepherd-graph}}).
23794
23795 The @var{%shepherd-root-service} is a service object representing
23796 PID@tie{}1, of type @var{shepherd-root-service-type}; it can be extended by
23797 passing it lists of @code{<shepherd-service>} objects.
23798
23799 @deftp {Type de données} shepherd-service
23800 The data type representing a service managed by the Shepherd.
23801
23802 @table @asis
23803 @item @code{provision}
23804 This is a list of symbols denoting what the service provides.
23805
23806 These are the names that may be passed to @command{herd start},
23807 @command{herd status}, and similar commands (@pxref{Invoking herd,,,
23808 shepherd, The GNU Shepherd Manual}). @xref{Slots of services, the
23809 @code{provides} slot,, shepherd, The GNU Shepherd Manual}, for details.
23810
23811 @item @code{requirements} (par défaut : @code{'()})
23812 List of symbols denoting the Shepherd services this one depends on.
23813
23814 @item @code{respawn?} (par défaut : @code{#t})
23815 Whether to restart the service when it stops, for instance when the
23816 underlying process dies.
23817
23818 @item @code{start}
23819 @itemx @code{stop} (par défaut : @code{#~(const #f)})
23820 The @code{start} and @code{stop} fields refer to the Shepherd's facilities
23821 to start and stop processes (@pxref{Service De- and Constructors,,,
23822 shepherd, The GNU Shepherd Manual}). They are given as G-expressions that
23823 get expanded in the Shepherd configuration file (@pxref{G-Expressions}).
23824
23825 @item @code{actions} (par défaut : @code{'()})
23826 @cindex action, des services Shepherd
23827 This is a list of @code{shepherd-action} objects (see below) defining
23828 @dfn{actions} supported by the service, in addition to the standard
23829 @code{start} and @code{stop} actions. Actions listed here become available
23830 as @command{herd} sub-commands:
23831
23832 @example
23833 herd @var{action} @var{service} [@var{arguments}@dots{}]
23834 @end example
23835
23836 @item @code{documentation}
23837 A documentation string, as shown when running:
23838
23839 @example
23840 herd doc @var{service-name}
23841 @end example
23842
23843 where @var{service-name} is one of the symbols in @var{provision}
23844 (@pxref{Invoking herd,,, shepherd, The GNU Shepherd Manual}).
23845
23846 @item @code{modules} (par défaut : @var{%default-modules})
23847 This is the list of modules that must be in scope when @code{start} and
23848 @code{stop} are evaluated.
23849
23850 @end table
23851 @end deftp
23852
23853 @deftp {Type de données} shepherd-action
23854 This is the data type that defines additional actions implemented by a
23855 Shepherd service (see above).
23856
23857 @table @code
23858 @item name
23859 Symbole nommant l'action
23860
23861 @item documentation
23862 This is a documentation string for the action. It can be viewed by running:
23863
23864 @example
23865 herd doc @var{service} action @var{action}
23866 @end example
23867
23868 @item procedure
23869 This should be a gexp that evaluates to a procedure of at least one
23870 argument, which is the ``running value'' of the service (@pxref{Slots of
23871 services,,, shepherd, The GNU Shepherd Manual}).
23872 @end table
23873
23874 The following example defines an action called @code{say-hello} that kindly
23875 greets the user:
23876
23877 @example
23878 (shepherd-action
23879 (name 'say-hello)
23880 (documentation "Say hi!")
23881 (procedure #~(lambda (running . args)
23882 (format #t "Hello, friend! arguments: ~s\n"
23883 args)
23884 #t)))
23885 @end example
23886
23887 Assuming this action is added to the @code{example} service, then you can
23888 do:
23889
23890 @example
23891 # herd say-hello example
23892 Hello, friend! arguments: ()
23893 # herd say-hello example a b c
23894 Hello, friend! arguments: ("a" "b" "c")
23895 @end example
23896
23897 This, as you can see, is a fairly sophisticated way to say hello.
23898 @xref{Service Convenience,,, shepherd, The GNU Shepherd Manual}, for more
23899 info on actions.
23900 @end deftp
23901
23902 @defvr {Variable Scheme} shepherd-root-service-type
23903 The service type for the Shepherd ``root service''---i.e., PID@tie{}1.
23904
23905 This is the service type that extensions target when they want to create
23906 shepherd services (@pxref{Types service et services}, for an example).
23907 Each extension must pass a list of @code{<shepherd-service>}.
23908 @end defvr
23909
23910 @defvr {Variable Scheme} %shepherd-root-service
23911 This service represents PID@tie{}1.
23912 @end defvr
23913
23914
23915 @node Documentation
23916 @section Documentation
23917
23918 @cindex documentation, searching for
23919 @cindex searching for documentation
23920 @cindex Info, documentation format
23921 @cindex man pages
23922 @cindex manual pages
23923 In most cases packages installed with Guix come with documentation. There
23924 are two main documentation formats: ``Info'', a browseable hypertext format
23925 used for GNU software, and ``manual pages'' (or ``man pages''), the linear
23926 documentation format traditionally found on Unix. Info manuals are accessed
23927 with the @command{info} command or with Emacs, and man pages are accessed
23928 using @command{man}.
23929
23930 You can look for documentation of software installed on your system by
23931 keyword. For example, the following command searches for information about
23932 ``TLS'' in Info manuals:
23933
23934 @example
23935 $ info -k TLS
23936 "(emacs)Network Security" -- STARTTLS
23937 "(emacs)Network Security" -- TLS
23938 "(gnutls)Core TLS API" -- gnutls_certificate_set_verify_flags
23939 "(gnutls)Core TLS API" -- gnutls_certificate_set_verify_function
23940 @dots{}
23941 @end example
23942
23943 @noindent
23944 The command below searches for the same keyword in man pages:
23945
23946 @example
23947 $ man -k TLS
23948 SSL (7) - OpenSSL SSL/TLS library
23949 certtool (1) - GnuTLS certificate tool
23950 @dots {}
23951 @end example
23952
23953 These searches are purely local to your computer so you have the guarantee
23954 that documentation you find corresponds to what you have actually installed,
23955 you can access it off-line, and your privacy is respected.
23956
23957 Once you have these results, you can view the relevant documentation by
23958 running, say:
23959
23960 @example
23961 $ info "(gnutls)Core TLS API"
23962 @end example
23963
23964 @noindent
23965 or:
23966
23967 @example
23968 $ man certtool
23969 @end example
23970
23971 Info manuals contain sections and indices as well as hyperlinks like those
23972 found in Web pages. The @command{info} reader (@pxref{Top, Info reader,,
23973 info-stnd, Stand-alone GNU Info}) and its Emacs counterpart (@pxref{Misc
23974 Help,,, emacs, The GNU Emacs Manual}) provide intuitive key bindings to
23975 navigate manuals. @xref{Getting Started,,, info, Info: An Introduction},
23976 for an introduction to Info navigation.
23977
23978 @node Installer les fichiers de débogage
23979 @section Installer les fichiers de débogage
23980
23981 @cindex debugging files
23982 Program binaries, as produced by the GCC compilers for instance, are
23983 typically written in the ELF format, with a section containing
23984 @dfn{debugging information}. Debugging information is what allows the
23985 debugger, GDB, to map binary code to source code; it is required to debug a
23986 compiled program in good conditions.
23987
23988 Le problème avec les informations de débogage est qu'elles prennent pas mal
23989 de place sur le disque. Par exemple, les informations de débogage de la
23990 bibliothèque C de GNU prend plus de 60 Mo. Ainsi, en tant qu'utilisateur,
23991 garder toutes les informations de débogage de tous les programmes installés
23992 n'est souvent pas une possibilité. Cependant, l'économie d'espace ne devrait
23993 pas empêcher le débogage — en particulier, dans le système GNU, qui devrait
23994 faciliter pour ses utilisateurs l'exercice de leurs libertés
23995 (@pxref{Distribution GNU}).
23996
23997 Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a mechanism
23998 that allows users to get the best of both worlds: debugging information can
23999 be stripped from the binaries and stored in separate files. GDB is then
24000 able to load debugging information from those files, when they are available
24001 (@pxref{Separate Debug Files,,, gdb, Debugging with GDB}).
24002
24003 The GNU distribution takes advantage of this by storing debugging
24004 information in the @code{lib/debug} sub-directory of a separate package
24005 output unimaginatively called @code{debug} (@pxref{Des paquets avec plusieurs résultats}). Users can choose to install the @code{debug} output of a package
24006 when they need it. For instance, the following command installs the
24007 debugging information for the GNU C Library and for GNU Guile:
24008
24009 @example
24010 guix package -i glibc:debug guile:debug
24011 @end example
24012
24013 GDB must then be told to look for debug files in the user's profile, by
24014 setting the @code{debug-file-directory} variable (consider setting it from
24015 the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with GDB}):
24016
24017 @example
24018 (gdb) set debug-file-directory ~/.guix-profile/lib/debug
24019 @end example
24020
24021 From there on, GDB will pick up debugging information from the @code{.debug}
24022 files under @file{~/.guix-profile/lib/debug}.
24023
24024 In addition, you will most likely want GDB to be able to show the source
24025 code being debugged. To do that, you will have to unpack the source code of
24026 the package of interest (obtained with @code{guix build --source},
24027 @pxref{Invoquer guix build}), and to point GDB to that source directory
24028 using the @code{directory} command (@pxref{Source Path, @code{directory},,
24029 gdb, Debugging with GDB}).
24030
24031 @c XXX: keep me up-to-date
24032 The @code{debug} output mechanism in Guix is implemented by the
24033 @code{gnu-build-system} (@pxref{Systèmes de construction}). Currently, it is
24034 opt-in---debugging information is available only for the packages with
24035 definitions explicitly declaring a @code{debug} output. This may be changed
24036 to opt-out in the future if our build farm servers can handle the load. To
24037 check whether a package has a @code{debug} output, use @command{guix package
24038 --list-available} (@pxref{Invoquer guix package}).
24039
24040
24041 @node Mises à jour de sécurité
24042 @section Mises à jour de sécurité
24043
24044 @cindex security updates
24045 @cindex vulnérabilités
24046 Occasionally, important security vulnerabilities are discovered in software
24047 packages and must be patched. Guix developers try hard to keep track of
24048 known vulnerabilities and to apply fixes as soon as possible in the
24049 @code{master} branch of Guix (we do not yet provide a ``stable'' branch
24050 containing only security updates.) The @command{guix lint} tool helps
24051 developers find out about vulnerable versions of software packages in the
24052 distribution:
24053
24054 @smallexample
24055 $ guix lint -c cve
24056 gnu/packages/base.scm:652:2: glibc@@2.21: probably vulnerable to CVE-2015-1781, CVE-2015-7547
24057 gnu/packages/gcc.scm:334:2: gcc@@4.9.3: probably vulnerable to CVE-2015-5276
24058 gnu/packages/image.scm:312:2: openjpeg@@2.1.0: probably vulnerable to CVE-2016-1923, CVE-2016-1924
24059 @dots{}
24060 @end smallexample
24061
24062 @xref{Invoquer guix lint}, for more information.
24063
24064 @quotation Remarque
24065 As of version @value{VERSION}, the feature described below is considered
24066 ``beta''.
24067 @end quotation
24068
24069 Guix suit une discipline de gestion de paquets fonctionnelle
24070 (@pxref{Introduction}), ce qui implique que lorsqu'un paquet change,
24071 @emph{tous les paquets qui en dépendent} doivent être reconstruits. Cela
24072 peut grandement ralentir le déploiement de corrections dans les paquets du
24073 cœur comme libc ou bash comme presque toute la distribution aurait besoin
24074 d'être reconstruite. Cela aide d'utiliser des binaires pré-construits
24075 (@pxref{Substituts}), mais le déploiement peut toujours prendre plus de
24076 temps de souhaité.
24077
24078 @cindex greffes
24079 To address this, Guix implements @dfn{grafts}, a mechanism that allows for
24080 fast deployment of critical updates without the costs associated with a
24081 whole-distribution rebuild. The idea is to rebuild only the package that
24082 needs to be patched, and then to ``graft'' it onto packages explicitly
24083 installed by the user and that were previously referring to the original
24084 package. The cost of grafting is typically very low, and order of
24085 magnitudes lower than a full rebuild of the dependency chain.
24086
24087 @cindex replacements of packages, for grafts
24088 For instance, suppose a security update needs to be applied to Bash. Guix
24089 developers will provide a package definition for the ``fixed'' Bash, say
24090 @var{bash-fixed}, in the usual way (@pxref{Définition des paquets}). Then, the
24091 original package definition is augmented with a @code{replacement} field
24092 pointing to the package containing the bug fix:
24093
24094 @example
24095 (define bash
24096 (package
24097 (name "bash")
24098 ;; @dots{}
24099 (replacement bash-fixed)))
24100 @end example
24101
24102 From there on, any package depending directly or indirectly on Bash---as
24103 reported by @command{guix gc --requisites} (@pxref{Invoquer guix gc})---that
24104 is installed is automatically ``rewritten'' to refer to @var{bash-fixed}
24105 instead of @var{bash}. This grafting process takes time proportional to the
24106 size of the package, usually less than a minute for an ``average'' package
24107 on a recent machine. Grafting is recursive: when an indirect dependency
24108 requires grafting, then grafting ``propagates'' up to the package that the
24109 user is installing.
24110
24111 Currently, the length of the name and version of the graft and that of the
24112 package it replaces (@var{bash-fixed} and @var{bash} in the example above)
24113 must be equal. This restriction mostly comes from the fact that grafting
24114 works by patching files, including binary files, directly. Other
24115 restrictions may apply: for instance, when adding a graft to a package
24116 providing a shared library, the original shared library and its replacement
24117 must have the same @code{SONAME} and be binary-compatible.
24118
24119 The @option{--no-grafts} command-line option allows you to forcefully avoid
24120 grafting (@pxref{Options de construction communes, @option{--no-grafts}}). Thus, the
24121 command:
24122
24123 @example
24124 guix build bash --no-grafts
24125 @end example
24126
24127 @noindent
24128 returns the store file name of the original Bash, whereas:
24129
24130 @example
24131 guix build bash
24132 @end example
24133
24134 @noindent
24135 returns the store file name of the ``fixed'', replacement Bash. This allows
24136 you to distinguish between the two variants of Bash.
24137
24138 To verify which Bash your whole profile refers to, you can run
24139 (@pxref{Invoquer guix gc}):
24140
24141 @example
24142 guix gc -R `readlink -f ~/.guix-profile` | grep bash
24143 @end example
24144
24145 @noindent
24146 @dots{} and compare the store file names that you get with those above.
24147 Likewise for a complete GuixSD system generation:
24148
24149 @example
24150 guix gc -R `guix system build my-config.scm` | grep bash
24151 @end example
24152
24153 Lastly, to check which Bash running processes are using, you can use the
24154 @command{lsof} command:
24155
24156 @example
24157 lsof | grep /gnu/store/.*bash
24158 @end example
24159
24160
24161 @node Modules de paquets
24162 @section Modules de paquets
24163
24164 From a programming viewpoint, the package definitions of the GNU
24165 distribution are provided by Guile modules in the @code{(gnu packages
24166 @dots{})} name space@footnote{Note that packages under the @code{(gnu
24167 packages @dots{})} module name space are not necessarily ``GNU packages''.
24168 This module naming scheme follows the usual Guile module naming convention:
24169 @code{gnu} means that these modules are distributed as part of the GNU
24170 system, and @code{packages} identifies modules that define packages.}
24171 (@pxref{Modules, Guile modules,, guile, GNU Guile Reference Manual}). For
24172 instance, the @code{(gnu packages emacs)} module exports a variable named
24173 @code{emacs}, which is bound to a @code{<package>} object (@pxref{Définition des paquets}).
24174
24175 The @code{(gnu packages @dots{})} module name space is automatically scanned
24176 for packages by the command-line tools. For instance, when running
24177 @code{guix package -i emacs}, all the @code{(gnu packages @dots{})} modules
24178 are scanned until one that exports a package object whose name is
24179 @code{emacs} is found. This package search facility is implemented in the
24180 @code{(gnu packages)} module.
24181
24182 @cindex personnalisation, des paquets
24183 @cindex package module search path
24184 Users can store package definitions in modules with different names---e.g.,
24185 @code{(my-packages emacs)}@footnote{Note that the file name and module name
24186 must match. For instance, the @code{(my-packages emacs)} module must be
24187 stored in a @file{my-packages/emacs.scm} file relative to the load path
24188 specified with @option{--load-path} or @code{GUIX_PACKAGE_PATH}.
24189 @xref{Modules and the File System,,, guile, GNU Guile Reference Manual}, for
24190 details.}. There are two ways to make these package definitions visible to
24191 the user interfaces:
24192
24193 @enumerate
24194 @item
24195 By adding the directory containing your package modules to the search path
24196 with the @code{-L} flag of @command{guix package} and other commands
24197 (@pxref{Options de construction communes}), or by setting the @code{GUIX_PACKAGE_PATH}
24198 environment variable described below.
24199
24200 @item
24201 By defining a @dfn{channel} and configuring @command{guix pull} so that it
24202 pulls from it. A channel is essentially a Git repository containing package
24203 modules. @xref{Canaux}, for more information on how to define and use
24204 channels.
24205 @end enumerate
24206
24207 @code{GUIX_PACKAGE_PATH} works similarly to other search path variables:
24208
24209 @defvr {Environment Variable} GUIX_PACKAGE_PATH
24210 This is a colon-separated list of directories to search for additional
24211 package modules. Directories listed in this variable take precedence over
24212 the own modules of the distribution.
24213 @end defvr
24214
24215 The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}: each
24216 package is built based solely on other packages in the distribution. The
24217 root of this dependency graph is a small set of @dfn{bootstrap binaries},
24218 provided by the @code{(gnu packages bootstrap)} module. For more
24219 information on bootstrapping, @pxref{Bootstrapping}.
24220
24221 @node Consignes d'empaquetage
24222 @section Consignes d'empaquetage
24223
24224 @cindex packages, creating
24225 The GNU distribution is nascent and may well lack some of your favorite
24226 packages. This section describes how you can help make the distribution
24227 grow. @xref{Contribuer}, for additional information on how you can help.
24228
24229 Free software packages are usually distributed in the form of @dfn{source
24230 code tarballs}---typically @file{tar.gz} files that contain all the source
24231 files. Adding a package to the distribution means essentially two things:
24232 adding a @dfn{recipe} that describes how to build the package, including a
24233 list of other packages required to build it, and adding @dfn{package
24234 metadata} along with that recipe, such as a description and licensing
24235 information.
24236
24237 In Guix all this information is embodied in @dfn{package definitions}.
24238 Package definitions provide a high-level view of the package. They are
24239 written using the syntax of the Scheme programming language; in fact, for
24240 each package we define a variable bound to the package definition, and
24241 export that variable from a module (@pxref{Modules de paquets}). However,
24242 in-depth Scheme knowledge is @emph{not} a prerequisite for creating
24243 packages. For more information on package definitions, @pxref{Définition des paquets}.
24244
24245 Once a package definition is in place, stored in a file in the Guix source
24246 tree, it can be tested using the @command{guix build} command
24247 (@pxref{Invoquer guix build}). For example, assuming the new package is
24248 called @code{gnew}, you may run this command from the Guix build tree
24249 (@pxref{Lancer Guix avant qu'il ne soit installé}):
24250
24251 @example
24252 ./pre-inst-env guix build gnew --keep-failed
24253 @end example
24254
24255 Using @code{--keep-failed} makes it easier to debug build failures since it
24256 provides access to the failed build tree. Another useful command-line
24257 option when debugging is @code{--log-file}, to access the build log.
24258
24259 If the package is unknown to the @command{guix} command, it may be that the
24260 source file contains a syntax error, or lacks a @code{define-public} clause
24261 to export the package variable. To figure it out, you may load the module
24262 from Guile to get more information about the actual error:
24263
24264 @example
24265 ./pre-inst-env guile -c '(use-modules (gnu packages gnew))'
24266 @end example
24267
24268 Once your package builds correctly, please send us a patch
24269 (@pxref{Contribuer}). Well, if you need help, we will be happy to help
24270 you too. Once the patch is committed in the Guix repository, the new
24271 package automatically gets built on the supported platforms by
24272 @url{http://hydra.gnu.org/jobset/gnu/master, our continuous integration
24273 system}.
24274
24275 @cindex substituter
24276 On peut obtenir la nouvelle définition du paquet simplement en lançant
24277 @command{guix pull} (@pxref{Invoquer guix pull}). Lorsque
24278 @code{hydra.gnu.org} a fini de construire le paquet, l'installation du
24279 paquet y télécharge automatiquement les binaires (@pxref{Substituts}). La
24280 seule intervention humaine requise est pendant la revue et l'application du
24281 correctif.
24282
24283
24284 @menu
24285 * Liberté logiciel:: Ce que la distribution peut contenir.
24286 * Conventions de nommage:: Qu'est-ce qu'un bon nom ?
24287 * Numéros de version:: Lorsque le nom n'est pas suffisant.
24288 * Synopsis et descriptions:: Aider les utilisateurs à trouver le bon
24289 paquet.
24290 * Modules python:: Un peu de comédie anglaise.
24291 * Modules perl:: Petites perles.
24292 * Paquets java:: Pause café.
24293 * Polices de caractères:: À fond les fontes.
24294 @end menu
24295
24296 @node Liberté logiciel
24297 @subsection Liberté logiciel
24298
24299 @c Adapted from http://www.gnu.org/philosophy/philosophy.html.
24300 @cindex free software
24301 The GNU operating system has been developed so that users can have freedom
24302 in their computing. GNU is @dfn{free software}, meaning that users have the
24303 @url{http://www.gnu.org/philosophy/free-sw.html,four essential freedoms}: to
24304 run the program, to study and change the program in source code form, to
24305 redistribute exact copies, and to distribute modified versions. Packages
24306 found in the GNU distribution provide only software that conveys these four
24307 freedoms.
24308
24309 In addition, the GNU distribution follow the
24310 @url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free
24311 software distribution guidelines}. Among other things, these guidelines
24312 reject non-free firmware, recommendations of non-free software, and discuss
24313 ways to deal with trademarks and patents.
24314
24315 Some otherwise free upstream package sources contain a small and optional
24316 subset that violates the above guidelines, for instance because this subset
24317 is itself non-free code. When that happens, the offending items are removed
24318 with appropriate patches or code snippets in the @code{origin} form of the
24319 package (@pxref{Définition des paquets}). This way, @code{guix build --source}
24320 returns the ``freed'' source rather than the unmodified upstream source.
24321
24322
24323 @node Conventions de nommage
24324 @subsection Conventions de nommage
24325
24326 @cindex package name
24327 A package has actually two names associated with it: First, there is the
24328 name of the @emph{Scheme variable}, the one following @code{define-public}.
24329 By this name, the package can be made known in the Scheme code, for instance
24330 as input to another package. Second, there is the string in the @code{name}
24331 field of a package definition. This name is used by package management
24332 commands such as @command{guix package} and @command{guix build}.
24333
24334 Both are usually the same and correspond to the lowercase conversion of the
24335 project name chosen upstream, with underscores replaced with hyphens. For
24336 instance, GNUnet is available as @code{gnunet}, and SDL_net as
24337 @code{sdl-net}.
24338
24339 We do not add @code{lib} prefixes for library packages, unless these are
24340 already part of the official project name. But @pxref{Modules python} and
24341 @ref{Modules perl} for special rules concerning modules for the Python and
24342 Perl languages.
24343
24344 Font package names are handled differently, @pxref{Polices de caractères}.
24345
24346
24347 @node Numéros de version
24348 @subsection Numéros de version
24349
24350 @cindex package version
24351 We usually package only the latest version of a given free software
24352 project. But sometimes, for instance for incompatible library versions, two
24353 (or more) versions of the same package are needed. These require different
24354 Scheme variable names. We use the name as defined in @ref{Conventions de nommage}
24355 for the most recent version; previous versions use the same name, suffixed
24356 by @code{-} and the smallest prefix of the version number that may
24357 distinguish the two versions.
24358
24359 The name inside the package definition is the same for all versions of a
24360 package and does not contain any version number.
24361
24362 For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as
24363 follows:
24364
24365 @example
24366 (define-public gtk+
24367 (package
24368 (name "gtk+")
24369 (version "3.9.12")
24370 ...))
24371 (define-public gtk+-2
24372 (package
24373 (name "gtk+")
24374 (version "2.24.20")
24375 ...))
24376 @end example
24377 If we also wanted GTK+ 3.8.2, this would be packaged as
24378 @example
24379 (define-public gtk+-3.8
24380 (package
24381 (name "gtk+")
24382 (version "3.8.2")
24383 ...))
24384 @end example
24385
24386 @c See <https://lists.gnu.org/archive/html/guix-devel/2016-01/msg00425.html>,
24387 @c for a discussion of what follows.
24388 @cindex version number, for VCS snapshots
24389 Occasionally, we package snapshots of upstream's version control system
24390 (VCS) instead of formal releases. This should remain exceptional, because
24391 it is up to upstream developers to clarify what the stable release is. Yet,
24392 it is sometimes necessary. So, what should we put in the @code{version}
24393 field?
24394
24395 Clearly, we need to make the commit identifier of the VCS snapshot visible
24396 in the version string, but we also need to make sure that the version string
24397 is monotonically increasing so that @command{guix package --upgrade} can
24398 determine which version is newer. Since commit identifiers, notably with
24399 Git, are not monotonically increasing, we add a revision number that we
24400 increase each time we upgrade to a newer snapshot. The resulting version
24401 string looks like this:
24402
24403 @example
24404 2.0.11-3.cabba9e
24405 ^ ^ ^
24406 | | `-- upstream commit ID
24407 | |
24408 | `--- Guix package revision
24409 |
24410 latest upstream version
24411 @end example
24412
24413 It is a good idea to strip commit identifiers in the @code{version} field
24414 to, say, 7 digits. It avoids an aesthetic annoyance (assuming aesthetics
24415 have a role to play here) as well as problems related to OS limits such as
24416 the maximum shebang length (127 bytes for the Linux kernel.) It is best to
24417 use the full commit identifiers in @code{origin}s, though, to avoid
24418 ambiguities. A typical package definition may look like this:
24419
24420 @example
24421 (define my-package
24422 (let ((commit "c3f29bc928d5900971f65965feaae59e1272a3f7")
24423 (revision "1")) ;révision du paquet Guix
24424 (package
24425 (version (git-version "0.9" revision commit))
24426 (source (origin
24427 (method git-fetch)
24428 (uri (git-reference
24429 (url "git://example.org/my-package.git")
24430 (commit commit)))
24431 (sha256 (base32 "1mbikn@dots{}"))
24432 (file-name (git-file-name name version))))
24433 ;; @dots{}
24434 )))
24435 @end example
24436
24437 @node Synopsis et descriptions
24438 @subsection Synopsis et descriptions
24439
24440 @cindex package description
24441 @cindex package synopsis
24442 As we have seen before, each package in GNU@tie{}Guix includes a synopsis
24443 and a description (@pxref{Définition des paquets}). Synopses and descriptions
24444 are important: They are what @command{guix package --search} searches, and a
24445 crucial piece of information to help users determine whether a given package
24446 suits their needs. Consequently, packagers should pay attention to what
24447 goes into them.
24448
24449 Synopses must start with a capital letter and must not end with a period.
24450 They must not start with ``a'' or ``the'', which usually does not bring
24451 anything; for instance, prefer ``File-frobbing tool'' over ``A tool that
24452 frobs files''. The synopsis should say what the package is---e.g., ``Core
24453 GNU utilities (file, text, shell)''---or what it is used for---e.g., the
24454 synopsis for GNU@tie{}grep is ``Print lines matching a pattern''.
24455
24456 Keep in mind that the synopsis must be meaningful for a very wide audience.
24457 For example, ``Manipulate alignments in the SAM format'' might make sense
24458 for a seasoned bioinformatics researcher, but might be fairly unhelpful or
24459 even misleading to a non-specialized audience. It is a good idea to come up
24460 with a synopsis that gives an idea of the application domain of the
24461 package. In this example, this might give something like ``Manipulate
24462 nucleotide sequence alignments'', which hopefully gives the user a better
24463 idea of whether this is what they are looking for.
24464
24465 Descriptions should take between five and ten lines. Use full sentences,
24466 and avoid using acronyms without first introducing them. Please avoid
24467 marketing phrases such as ``world-leading'', ``industrial-strength'', and
24468 ``next-generation'', and avoid superlatives like ``the most
24469 advanced''---they are not helpful to users looking for a package and may
24470 even sound suspicious. Instead, try to be factual, mentioning use cases and
24471 features.
24472
24473 @cindex Texinfo markup, in package descriptions
24474 Descriptions can include Texinfo markup, which is useful to introduce
24475 ornaments such as @code{@@code} or @code{@@dfn}, bullet lists, or hyperlinks
24476 (@pxref{Overview,,, texinfo, GNU Texinfo}). However you should be careful
24477 when using some characters for example @samp{@@} and curly braces which are
24478 the basic special characters in Texinfo (@pxref{Special Characters,,,
24479 texinfo, GNU Texinfo}). User interfaces such as @command{guix package
24480 --show} take care of rendering it appropriately.
24481
24482 Synopses and descriptions are translated by volunteers
24483 @uref{http://translationproject.org/domain/guix-packages.html, at the
24484 Translation Project} so that as many users as possible can read them in
24485 their native language. User interfaces search them and display them in the
24486 language specified by the current locale.
24487
24488 To allow @command{xgettext} to extract them as translatable strings,
24489 synopses and descriptions @emph{must be literal strings}. This means that
24490 you cannot use @code{string-append} or @code{format} to construct these
24491 strings:
24492
24493 @lisp
24494 (package
24495 ;; @dots{}
24496 (synopsis "This is translatable")
24497 (description (string-append "This is " "*not*" " translatable.")))
24498 @end lisp
24499
24500 Translation is a lot of work so, as a packager, please pay even more
24501 attention to your synopses and descriptions as every change may entail
24502 additional work for translators. In order to help them, it is possible to
24503 make recommendations or instructions visible to them by inserting special
24504 comments like this (@pxref{xgettext Invocation,,, gettext, GNU Gettext}):
24505
24506 @example
24507 ;; TRANSLATORS: "X11 resize-and-rotate" should not be translated.
24508 (description "ARandR is designed to provide a simple visual front end
24509 for the X11 resize-and-rotate (RandR) extension. @dots{}")
24510 @end example
24511
24512
24513 @node Modules python
24514 @subsection Modules python
24515
24516 @cindex python
24517 We currently package Python 2 and Python 3, under the Scheme variable names
24518 @code{python-2} and @code{python} as explained in @ref{Numéros de version}. To
24519 avoid confusion and naming clashes with other programming languages, it
24520 seems desirable that the name of a package for a Python module contains the
24521 word @code{python}.
24522
24523 Some modules are compatible with only one version of Python, others with
24524 both. If the package Foo compiles only with Python 3, we name it
24525 @code{python-foo}; if it compiles only with Python 2, we name it
24526 @code{python2-foo}. If it is compatible with both versions, we create two
24527 packages with the corresponding names.
24528
24529 If a project already contains the word @code{python}, we drop this; for
24530 instance, the module python-dateutil is packaged under the names
24531 @code{python-dateutil} and @code{python2-dateutil}. If the project name
24532 starts with @code{py} (e.g.@: @code{pytz}), we keep it and prefix it as
24533 described above.
24534
24535 @subsubsection Specifying Dependencies
24536 @cindex inputs, for Python packages
24537
24538 Dependency information for Python packages is usually available in the
24539 package source tree, with varying degrees of accuracy: in the
24540 @file{setup.py} file, in @file{requirements.txt}, or in @file{tox.ini}.
24541
24542 Your mission, when writing a recipe for a Python package, is to map these
24543 dependencies to the appropriate type of ``input'' (@pxref{Référence de paquet,
24544 inputs}). Although the @code{pypi} importer normally does a good job
24545 (@pxref{Invoquer guix import}), you may want to check the following check
24546 list to determine which dependency goes where.
24547
24548 @itemize
24549
24550 @item
24551 We currently package Python 2 with @code{setuptools} and @code{pip}
24552 installed like Python 3.4 has per default. Thus you don't need to specify
24553 either of these as an input. @command{guix lint} will warn you if you do.
24554
24555 @item
24556 Python dependencies required at run time go into @code{propagated-inputs}.
24557 They are typically defined with the @code{install_requires} keyword in
24558 @file{setup.py}, or in the @file{requirements.txt} file.
24559
24560 @item
24561 Python packages required only at build time---e.g., those listed with the
24562 @code{setup_requires} keyword in @file{setup.py}---or only for
24563 testing---e.g., those in @code{tests_require}---go into
24564 @code{native-inputs}. The rationale is that (1) they do not need to be
24565 propagated because they are not needed at run time, and (2) in a
24566 cross-compilation context, it's the ``native'' input that we'd want.
24567
24568 Examples are the @code{pytest}, @code{mock}, and @code{nose} test
24569 frameworks. Of course if any of these packages is also required at
24570 run-time, it needs to go to @code{propagated-inputs}.
24571
24572 @item
24573 Anything that does not fall in the previous categories goes to
24574 @code{inputs}, for example programs or C libraries required for building
24575 Python packages containing C extensions.
24576
24577 @item
24578 If a Python package has optional dependencies (@code{extras_require}), it is
24579 up to you to decide whether to add them or not, based on their
24580 usefulness/overhead ratio (@pxref{Envoyer des correctifs, @command{guix size}}).
24581
24582 @end itemize
24583
24584
24585 @node Modules perl
24586 @subsection Modules perl
24587
24588 @cindex perl
24589 Perl programs standing for themselves are named as any other package, using
24590 the lowercase upstream name. For Perl packages containing a single class,
24591 we use the lowercase class name, replace all occurrences of @code{::} by
24592 dashes and prepend the prefix @code{perl-}. So the class @code{XML::Parser}
24593 becomes @code{perl-xml-parser}. Modules containing several classes keep
24594 their lowercase upstream name and are also prepended by @code{perl-}. Such
24595 modules tend to have the word @code{perl} somewhere in their name, which
24596 gets dropped in favor of the prefix. For instance, @code{libwww-perl}
24597 becomes @code{perl-libwww}.
24598
24599
24600 @node Paquets java
24601 @subsection Paquets java
24602
24603 @cindex java
24604 Java programs standing for themselves are named as any other package, using
24605 the lowercase upstream name.
24606
24607 To avoid confusion and naming clashes with other programming languages, it
24608 is desirable that the name of a package for a Java package is prefixed with
24609 @code{java-}. If a project already contains the word @code{java}, we drop
24610 this; for instance, the package @code{ngsjava} is packaged under the name
24611 @code{java-ngs}.
24612
24613 For Java packages containing a single class or a small class hierarchy, we
24614 use the lowercase class name, replace all occurrences of @code{.} by dashes
24615 and prepend the prefix @code{java-}. So the class @code{apache.commons.cli}
24616 becomes package @code{java-apache-commons-cli}.
24617
24618
24619 @node Polices de caractères
24620 @subsection Polices de caractères
24621
24622 @cindex polices
24623 For fonts that are in general not installed by a user for typesetting
24624 purposes, or that are distributed as part of a larger software package, we
24625 rely on the general packaging rules for software; for instance, this applies
24626 to the fonts delivered as part of the X.Org system or fonts that are part of
24627 TeX Live.
24628
24629 To make it easier for a user to search for fonts, names for other packages
24630 containing only fonts are constructed as follows, independently of the
24631 upstream package name.
24632
24633 The name of a package containing only one font family starts with
24634 @code{font-}; it is followed by the foundry name and a dash @code{-} if the
24635 foundry is known, and the font family name, in which spaces are replaced by
24636 dashes (and as usual, all upper case letters are transformed to lower
24637 case). For example, the Gentium font family by SIL is packaged under the
24638 name @code{font-sil-gentium}.
24639
24640 For a package containing several font families, the name of the collection
24641 is used in the place of the font family name. For instance, the Liberation
24642 fonts consist of three families, Liberation Sans, Liberation Serif and
24643 Liberation Mono. These could be packaged separately under the names
24644 @code{font-liberation-sans} and so on; but as they are distributed together
24645 under a common name, we prefer to package them together as
24646 @code{font-liberation}.
24647
24648 In the case where several formats of the same font family or font collection
24649 are packaged separately, a short form of the format, prepended by a dash, is
24650 added to the package name. We use @code{-ttf} for TrueType fonts,
24651 @code{-otf} for OpenType fonts and @code{-type1} for PostScript Type 1
24652 fonts.
24653
24654
24655
24656 @node Bootstrapping
24657 @section Bootstrapping
24658
24659 @c Adapted from the ELS 2013 paper.
24660
24661 @cindex bootstrapping
24662
24663 Bootstrapping in our context refers to how the distribution gets built
24664 ``from nothing''. Remember that the build environment of a derivation
24665 contains nothing but its declared inputs (@pxref{Introduction}). So there's
24666 an obvious chicken-and-egg problem: how does the first package get built?
24667 How does the first compiler get compiled? Note that this is a question of
24668 interest only to the curious hacker, not to the regular user, so you can
24669 shamelessly skip this section if you consider yourself a ``regular user''.
24670
24671 @cindex bootstrap binaries
24672 The GNU system is primarily made of C code, with libc at its core. The GNU
24673 build system itself assumes the availability of a Bourne shell and
24674 command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
24675 `grep'. Furthermore, build programs---programs that run @code{./configure},
24676 @code{make}, etc.---are written in Guile Scheme (@pxref{Dérivations}).
24677 Consequently, to be able to build anything at all, from scratch, Guix relies
24678 on pre-built binaries of Guile, GCC, Binutils, libc, and the other packages
24679 mentioned above---the @dfn{bootstrap binaries}.
24680
24681 These bootstrap binaries are ``taken for granted'', though we can also
24682 re-create them if needed (more on that later).
24683
24684 @unnumberedsubsec Preparing to Use the Bootstrap Binaries
24685
24686 @c As of Emacs 24.3, Info-mode displays the image, but since it's a
24687 @c large image, it's hard to scroll. Oh well.
24688 @image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap
24689 derivations}
24690
24691 The figure above shows the very beginning of the dependency graph of the
24692 distribution, corresponding to the package definitions of the @code{(gnu
24693 packages bootstrap)} module. A similar figure can be generated with
24694 @command{guix graph} (@pxref{Invoquer guix graph}), along the lines of:
24695
24696 @example
24697 guix graph -t derivation \
24698 -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
24699 | dot -Tps > t.ps
24700 @end example
24701
24702 At this level of detail, things are slightly complex. First, Guile itself
24703 consists of an ELF executable, along with many source and compiled Scheme
24704 files that are dynamically loaded when it runs. This gets stored in the
24705 @file{guile-2.0.7.tar.xz} tarball shown in this graph. This tarball is part
24706 of Guix's ``source'' distribution, and gets inserted into the store with
24707 @code{add-to-store} (@pxref{Le dépôt}).
24708
24709 But how do we write a derivation that unpacks this tarball and adds it to
24710 the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
24711 derivation---the first one that gets built---uses @code{bash} as its
24712 builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
24713 @code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar}, @file{xz},
24714 and @file{mkdir} are statically-linked binaries, also part of the Guix
24715 source distribution, whose sole purpose is to allow the Guile tarball to be
24716 unpacked.
24717
24718 Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning Guile
24719 that can be used to run subsequent build programs. Its first task is to
24720 download tarballs containing the other pre-built binaries---this is what the
24721 @code{.tar.xz.drv} derivations do. Guix modules such as
24722 @code{ftp-client.scm} are used for this purpose. The
24723 @code{module-import.drv} derivations import those modules in a directory in
24724 the store, using the original layout. The @code{module-import-compiled.drv}
24725 derivations compile those modules, and write them in an output directory
24726 with the right layout. This corresponds to the @code{#:modules} argument of
24727 @code{build-expression->derivation} (@pxref{Dérivations}).
24728
24729 Finally, the various tarballs are unpacked by the derivations
24730 @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv}, etc., at which
24731 point we have a working C tool chain.
24732
24733
24734 @unnumberedsubsec Building the Build Tools
24735
24736 Bootstrapping is complete when we have a full tool chain that does not
24737 depend on the pre-built bootstrap tools discussed above. This no-dependency
24738 requirement is verified by checking whether the files of the final tool
24739 chain contain references to the @file{/gnu/store} directories of the
24740 bootstrap inputs. The process that leads to this ``final'' tool chain is
24741 described by the package definitions found in the @code{(gnu packages
24742 commencement)} module.
24743
24744 The @command{guix graph} command allows us to ``zoom out'' compared to the
24745 graph above, by looking at the level of package objects instead of
24746 individual derivations---remember that a package may translate to several
24747 derivations, typically one derivation to download its source, one to build
24748 the Guile modules it needs, and one to actually build the package from
24749 source. The command:
24750
24751 @example
24752 guix graph -t bag \
24753 -e '(@@@@ (gnu packages commencement)
24754 glibc-final-with-bootstrap-bash)' | dot -Tps > t.ps
24755 @end example
24756
24757 @noindent
24758 produces the dependency graph leading to the ``final'' C
24759 library@footnote{You may notice the @code{glibc-intermediate} label,
24760 suggesting that it is not @emph{quite} final, but as a good approximation,
24761 we will consider it final.}, depicted below.
24762
24763 @image{images/bootstrap-packages,6in,,Graphe de dépendance des premiers
24764 paquets}
24765
24766 @c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
24767 The first tool that gets built with the bootstrap binaries is
24768 GNU@tie{}Make---noted @code{make-boot0} above---which is a prerequisite for
24769 all the following packages. From there Findutils and Diffutils get built.
24770
24771 Then come the first-stage Binutils and GCC, built as pseudo cross
24772 tools---i.e., with @code{--target} equal to @code{--host}. They are used to
24773 build libc. Thanks to this cross-build trick, this libc is guaranteed not
24774 to hold any reference to the initial tool chain.
24775
24776 From there the final Binutils and GCC (not shown above) are built. GCC uses
24777 @code{ld} from the final Binutils, and links programs against the just-built
24778 libc. This tool chain is used to build the other packages used by Guix and
24779 by the GNU Build System: Guile, Bash, Coreutils, etc.
24780
24781 And voilà! At this point we have the complete set of build tools that the
24782 GNU Build System expects. These are in the @code{%final-inputs} variable of
24783 the @code{(gnu packages commencement)} module, and are implicitly used by
24784 any package that uses @code{gnu-build-system} (@pxref{Systèmes de construction,
24785 @code{gnu-build-system}}).
24786
24787
24788 @unnumberedsubsec Building the Bootstrap Binaries
24789
24790 @cindex bootstrap binaries
24791 Because the final tool chain does not depend on the bootstrap binaries,
24792 those rarely need to be updated. Nevertheless, it is useful to have an
24793 automated way to produce them, should an update occur, and this is what the
24794 @code{(gnu packages make-bootstrap)} module provides.
24795
24796 The following command builds the tarballs containing the bootstrap binaries
24797 (Guile, Binutils, GCC, libc, and a tarball containing a mixture of Coreutils
24798 and other basic command-line tools):
24799
24800 @example
24801 guix build bootstrap-tarballs
24802 @end example
24803
24804 The generated tarballs are those that should be referred to in the
24805 @code{(gnu packages bootstrap)} module mentioned at the beginning of this
24806 section.
24807
24808 Still here? Then perhaps by now you've started to wonder: when do we reach a
24809 fixed point? That is an interesting question! The answer is unknown, but if
24810 you would like to investigate further (and have significant computational
24811 and storage resources to do so), then let us know.
24812
24813 @unnumberedsubsec Reducing the Set of Bootstrap Binaries
24814
24815 Our bootstrap binaries currently include GCC, Guile, etc. That's a lot of
24816 binary code! Why is that a problem? It's a problem because these big chunks
24817 of binary code are practically non-auditable, which makes it hard to
24818 establish what source code produced them. Every unauditable binary also
24819 leaves us vulnerable to compiler backdoors as described by Ken Thompson in
24820 the 1984 paper @emph{Reflections on Trusting Trust}.
24821
24822 This is mitigated by the fact that our bootstrap binaries were generated
24823 from an earlier Guix revision. Nevertheless it lacks the level of
24824 transparency that we get in the rest of the package dependency graph, where
24825 Guix always gives us a source-to-binary mapping. Thus, our goal is to
24826 reduce the set of bootstrap binaries to the bare minimum.
24827
24828 The @uref{http://bootstrappable.org, Bootstrappable.org web site} lists
24829 on-going projects to do that. One of these is about replacing the bootstrap
24830 GCC with a sequence of assemblers, interpreters, and compilers of increasing
24831 complexity, which could be built from source starting from a simple and
24832 auditable assembler. Your help is welcome!
24833
24834
24835 @node Porter
24836 @section Porter vers une nouvelle plateforme
24837
24838 As discussed above, the GNU distribution is self-contained, and
24839 self-containment is achieved by relying on pre-built ``bootstrap binaries''
24840 (@pxref{Bootstrapping}). These binaries are specific to an operating system
24841 kernel, CPU architecture, and application binary interface (ABI). Thus, to
24842 port the distribution to a platform that is not yet supported, one must
24843 build those bootstrap binaries, and update the @code{(gnu packages
24844 bootstrap)} module to use them on that platform.
24845
24846 Fortunately, Guix can @emph{cross compile} those bootstrap binaries. When
24847 everything goes well, and assuming the GNU tool chain supports the target
24848 platform, this can be as simple as running a command like this one:
24849
24850 @example
24851 guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
24852 @end example
24853
24854 For this to work, the @code{glibc-dynamic-linker} procedure in @code{(gnu
24855 packages bootstrap)} must be augmented to return the right file name for
24856 libc's dynamic linker on that platform; likewise,
24857 @code{system->linux-architecture} in @code{(gnu packages linux)} must be
24858 taught about the new platform.
24859
24860 Once these are built, the @code{(gnu packages bootstrap)} module needs to be
24861 updated to refer to these binaries on the target platform. That is, the
24862 hashes and URLs of the bootstrap tarballs for the new platform must be added
24863 alongside those of the currently supported platforms. The bootstrap Guile
24864 tarball is treated specially: it is expected to be available locally, and
24865 @file{gnu/local.mk} has rules to download it for the supported
24866 architectures; a rule for the new platform must be added as well.
24867
24868 In practice, there may be some complications. First, it may be that the
24869 extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
24870 above) is not recognized by all the GNU tools. Typically, glibc recognizes
24871 some of these, whereas GCC uses an extra @code{--with-abi} configure flag
24872 (see @code{gcc.scm} for examples of how to handle this). Second, some of
24873 the required packages could fail to build for that platform. Lastly, the
24874 generated binaries could be broken for some reason.
24875
24876 @c *********************************************************************
24877 @include contributing.fr.texi
24878
24879 @c *********************************************************************
24880 @node Remerciements
24881 @chapter Remerciements
24882
24883 Guix se base sur le @uref{http://nixos.org/nix/, gestionnaire de paquets
24884 Nix} conçu et implémenté par Eelco Dolstra, avec des constributions d'autres
24885 personnes (voir le fichier @file{nix/AUTHORS} dans Guix). Nix a inventé la
24886 gestion de paquet fonctionnelle et promu des fonctionnalités sans précédents
24887 comme les mises à jour de paquets transactionnelles et les retours en
24888 arrière, les profils par utilisateurs et les processus de constructions
24889 transparents pour les références. Sans ce travail, Guix n'existerait pas.
24890
24891 Les distributions logicielles basées sur Nix, Nixpkgs et NixOS, ont aussi
24892 été une inspiration pour Guix.
24893
24894 GNU@tie{}Guix lui-même est un travail collectif avec des contributions d'un
24895 grand nombre de personnes. Voyez le fichier @file{AUTHORS} dans Guix pour
24896 plus d'information sur ces personnes de qualité. Le fichier @file{THANKS}
24897 liste les personnes qui ont aidé en rapportant des bogues, en prenant soin
24898 de l'infrastructure, en fournissant des images et des thèmes, en faisant des
24899 suggestions et bien plus. Merci !
24900
24901
24902 @c *********************************************************************
24903 @node La licence GNU Free Documentation
24904 @appendix La licence GNU Free Documentation
24905 @cindex license, GNU Free Documentation License
24906 @include fdl-1.3.texi
24907
24908 @c *********************************************************************
24909 @node Index des concepts
24910 @unnumbered Index des concepts
24911 @printindex cp
24912
24913 @node Index de programmation
24914 @unnumbered Index de programmation
24915 @syncodeindex tp fn
24916 @syncodeindex vr fn
24917 @printindex fn
24918
24919 @bye
24920
24921 @c Local Variables:
24922 @c ispell-local-dictionary: "american";
24923 @c End: