gnu: varnish: Use absolute file name of "rm".
[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
22 @copying
23 Copyright @copyright{} 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic
24 Courtès@* Copyright @copyright{} 2013, 2014, 2016 Andreas Enge@* Copyright
25 @copyright{} 2013 Nikita Karetnikov@* Copyright @copyright{} 2014, 2015,
26 2016 Alex Kost@* Copyright @copyright{} 2015, 2016 Mathieu Lirzin@*
27 Copyright @copyright{} 2014 Pierre-Antoine Rault@* Copyright @copyright{}
28 2015 Taylan Ulrich Bayırlı/Kammer@* Copyright @copyright{} 2015, 2016, 2017
29 Leo Famulari@* Copyright @copyright{} 2015, 2016, 2017, 2018 Ricardo
30 Wurmus@* Copyright @copyright{} 2016 Ben Woodcroft@* Copyright @copyright{}
31 2016, 2017, 2018 Chris Marusich@* Copyright @copyright{} 2016, 2017, 2018
32 Efraim Flashner@* Copyright @copyright{} 2016 John Darrington@* Copyright
33 @copyright{} 2016, 2017 Nils Gillmann@* Copyright @copyright{} 2016, 2017,
34 2018 Jan Nieuwenhuizen@* Copyright @copyright{} 2016 Julien Lepiller@*
35 Copyright @copyright{} 2016 Alex ter Weele@* Copyright @copyright{} 2017,
36 2018 Clément Lassieur@* Copyright @copyright{} 2017 Mathieu Othacehe@*
37 Copyright @copyright{} 2017 Federico Beffa@* Copyright @copyright{} 2017
38 Carlo Zancanaro@* Copyright @copyright{} 2017 Thomas Danckaert@* Copyright
39 @copyright{} 2017 humanitiesNerd@* Copyright @copyright{} 2017 Christopher
40 Allan Webber@* Copyright @copyright{} 2017, 2018 Marius Bakke@* Copyright
41 @copyright{} 2017 Hartmut Goebel@* Copyright @copyright{} 2017 Maxim
42 Cournoyer@* Copyright @copyright{} 2017, 2018 Tobias Geerinckx-Rice@*
43 Copyright @copyright{} 2017 George Clemmer@* Copyright @copyright{} 2017
44 Andy Wingo@* Copyright @copyright{} 2017, 2018 Arun Isaac@* Copyright
45 @copyright{} 2017 nee@* Copyright @copyright{} 2018 Rutger Helling@*
46 Copyright @copyright{} 2018 Oleg Pykhalov@* Copyright @copyright{} 2018 Mike
47 Gerwitz@* Copyright @copyright{} 2018 Pierre-Antoine Rouby@* Copyright
48 @copyright{} 2018 Gábor Boskovits@*
49
50 Vous avez la permission de copier, distribuer ou modifier ce document sous
51 les termes de la Licence GNU Free Documentation, version 1.3 ou toute
52 version ultérieure publiée par la Free Software Foundation ; sans section
53 invariante, texte de couverture et sans texte de quatrième de couverture.
54 Une copie de la licence est incluse dans la section intitulée « GNU Free
55 Documentation License ».
56 @end copying
57
58 @dircategory Administration système
59 @direntry
60 * Guix: (guix.fr). Gérer les logiciels installés et la
61 configuration du système.
62 * guix package : (guix.fr)Invoquer guix package. Intaller, supprimer et
63 mettre à jour des
64 paquets.
65 * guix gc : (guix.fr)Invoquer guix gc. Récupérer de l'espace disque
66 inutilisé.
67 * guix pull : (guix.fr)Invoquer guix pull. Mettre à jour la liste des
68 paquets disponibles.
69 * guix system : (guix.fr)Invoquer guix system. Gérer la configuration du
70 système d'exploitation.
71 @end direntry
72
73 @dircategory Développement logiciel
74 @direntry
75 * guix environment : (guix.fr)Invoquer guix environment. Construire des
76 environnements
77 de construction
78 avec Guix.
79 * guix build : (guix.fr)Invoquer guix build. Construire des paquets.
80 * guix pack : (guix.fr) Invoquer guix pack. Créer des lots binaires.
81 @end direntry
82
83 @titlepage
84 @title Manuel de référence de GNU Guix
85 @subtitle Utiliser le gestionnaire de paquet fonctionnel GNU Guix
86 @author Les développeurs de GNU Guix
87
88 @page
89 @vskip 0pt plus 1filll
90 Édition @value{EDITION} @* @value{UPDATED} @*
91
92 @insertcopying
93 @end titlepage
94
95 @contents
96
97 @c *********************************************************************
98 @node Top
99 @top GNU Guix
100
101 Cette documentation décrit GNU Guix version @value{VERSION}, un outil de
102 gestion de paquets fonctionnel écrit pour le système GNU@.
103
104 @c TRANSLATORS: You can replace the following paragraph with information on
105 @c how to join your own translation team and how to report issues with the
106 @c translation.
107 This manual is also available in French (@pxref{Top,,, guix.fr, Manuel de
108 référence de GNU Guix}). If you would like to translate it in your native
109 language, consider joining the
110 @uref{https://translationproject.org/domain/guix-manual.html, Translation
111 Project}.
112
113 @menu
114 * Introduction:: Qu'est-ce que Guix ?
115 * Installation:: Installer Guix.
116 * Gestion de paquets:: Installation des paquets, mises à jour, etc.
117 * Interface de programmation:: Utiliser Guix en Scheme.
118 * Utilitaires:: Commandes de gestion de paquets.
119 * Distribution GNU:: Des logiciels pour un système GNU convivial.
120 * Contribuer:: Nous avons besoin de votre aide !
121
122 * Remerciements:: Merci !
123 * La licence GNU Free Documentation:: La licence de ce manuel.
124 * Index des concepts:: Les concepts.
125 * Index de programmation:: Types de données, fonctions et variables.
126
127 @detailmenu
128 --- Liste détaillée des nœuds ---
129
130
131
132 Installation
133
134
135
136 * Installation binaire:: Commencer à utiliser Guix en un rien de temps
137 !
138 * Prérequis:: Logiciels requis pour construire et lancer
139 Guix.
140 * Lancer la suite de tests:: Tester Guix.
141 * Paramétrer le démon:: Préparer l'environnement du démon de
142 construction.
143 * Invoquer guix-daemon:: Lancer le démon de construction.
144 * Réglages applicatifs:: Réglages spécifiques pour les application.
145
146 Paramétrer le démon
147
148
149
150 * Réglages de l'environnement de construction:: Préparer l'environnement
151 de construction isolé.
152 * Réglages du délestage du démon:: Envoyer des constructions à des
153 machines distantes.
154 * Support de SELinux:: Utiliser une politique SELinux pour le démon.
155
156 Gestion de paquets
157
158
159
160 * Fonctionnalités:: Comment Guix va rendre votre vie plus heureuse.
161 * Invoquer guix package:: Installation, suppression, etc.@: de paquets.
162 * Substituts:: Télécharger des binaire déjà construits.
163 * Des paquets avec plusieurs résultats:: Un seul paquet source, plusieurs
164 résultats.
165 * Invoquer guix gc:: Lancer le ramasse-miettes.
166 * Invoquer guix pull:: Récupérer la dernière version de Guix et de
167 la distribution.
168 * Invoquer guix pack:: Créer des lots de logiciels.
169 * Invoquer guix archive:: Exporter et importer des fichiers du dépôt.
170
171 Substituts
172
173
174
175 * Serveur de substituts officiel:: Une source particulière de substituts.
176 * Autoriser un serveur de substituts:: Comment activer ou désactiver les
177 substituts.
178 * Authentification des substituts:: Coment Guix vérifie les substituts.
179 * Paramètres de serveur mandataire:: Comment récupérer des substituts à
180 travers un serveur mandataire.
181 * Échec de substitution:: Qu'arrive-t-il quand la substitution échoue.
182 * De la confiance en des binaires:: Comment pouvez-vous avoir confiance en
183 un paquet binaire ?
184
185 Interface de programmation
186
187
188
189 * Définition des paquets:: Définir de nouveaux paquets.
190 * Systèmes de construction:: Spécifier comment construire les paquets.
191 * Le dépôt:: Manipuler le dépôt de paquets.
192 * Dérivations:: Interface de bas-niveau avec les dérivations
193 de paquets.
194 * La monad du dépôt:: Interface purement fonctionnelle avec le
195 dépôt.
196 * G-Expressions:: Manipuler les expressions de construction.
197 * Invoking guix repl:: Fiddling with Guix interactively.
198
199 Définition des paquets
200
201
202
203 * Référence de paquet:: Le type de donnée des paquets.
204 * Référence d'origine:: Le type de données d'origine.
205
206 Utilitaires
207
208
209
210 * Invoquer guix build:: Construire des paquets depuis la ligne de
211 commande.
212 * Invoquer guix edit:: Modifier les définitions de paquets.
213 * Invoquer guix download:: Télécharger un fichier et afficher son hash.
214 * Invoquer guix hash:: Calculer le hash cryptographique d'un fichier.
215 * Invoquer guix import:: Importer des définitions de paquets.
216 * Invoquer guix refresh:: Mettre à jour les définitions de paquets.
217 * Invoquer guix lint:: Trouver des erreurs dans les définitions de
218 paquets.
219 * Invoquer guix size:: Profiler l'utilisation du disque.
220 * Invoquer guix graph:: Visualiser le graphe des paquets.
221 * Invoquer guix environment:: Mettre en place des environnements de
222 développement.
223 * Invoquer guix publish:: Partager des substituts.
224 * Invoquer guix challenge:: Défier les serveurs de substituts.
225 * Invoquer guix copy:: Copier vers et depuis un dépôt distant.
226 * Invoquer guix container:: Isolation de processus.
227 * Invoquer guix weather:: Mesurer la disponibilité des substituts.
228
229 Invoquer @command{guix build}
230
231
232
233 * Options de construction communes:: Options de construction pour la
234 plupart des commandes.
235 * Options de transformation de paquets:: Créer des variantes de paquets.
236 * Options de construction supplémentaires:: Options spécifiques à «
237 guix build ».
238 * Débogage des échecs de construction:: La vie d'un empaqueteur.
239
240 Distribution GNU
241
242
243
244 * Installation du système:: Installer le système d'exploitation complet.
245 * Configuration système:: Configurer le système d'exploitation.
246 * Documentation:: Visualiser les manuels d'utilisateur des
247 logiciels.
248 * Installer les fichiers de débogage:: Nourrir le débogueur.
249 * Mises à jour de sécurité:: Déployer des correctifs de sécurité
250 rapidement.
251 * Modules de paquets:: Les paquets du point de vu du programmeur.
252 * Consignes d'empaquetage:: Faire grandir la distribution.
253 * Bootstrapping:: GNU/Linux depuis zéro.
254 * Porter:: Cibler une autre plateforme ou un autre noyau.
255
256 Installation du système
257
258
259
260 * Limitations:: Ce à quoi vous attendre.
261 * Considérations matérielles:: Matériel supporté.
262 * Installation depuis une clef USB ou un DVD:: Préparer le média
263 d'installation.
264 * Préparer l'installation:: Réseau, partitionnement, etc.
265 * Effectuer l'installation:: Pour de vrai.
266 * Installer GuixSD dans une VM:: Jouer avec GuixSD@.
267 * Construire l'image d'installation:: D'où vient tout cela.
268
269 Configuration système
270
271
272
273 * Utiliser le système de configuration:: Personnaliser votre système
274 GNU@.
275 * Référence de système d'exploitation:: Détail sur la déclaration de
276 système d'exploitation.
277 * Systèmes de fichiers:: Configurer les montages de systèmes de
278 fichiers.
279 * Périphériques mappés:: Gestion des périphériques de bloc.
280 * Comptes utilisateurs:: Spécifier des comptes utilisateurs.
281 * Régionalisation:: Paramétrer la langue et les conventions
282 culturelles.
283 * Services:: Spécifier les services du système.
284 * Programmes setuid:: Programmes tournant avec les privilèges root.
285 * Certificats X.509:: Authentifier les serveurs HTTPS@.
286 * Name Service Switch:: Configurer le « name service switch » de la
287 libc.
288 * Disque de RAM initial:: Démarrage de Linux-Libre.
289 * Configuration du chargeur d'amorçage:: Configurer le chargeur
290 d'amorçage.
291 * Invoquer guix system:: Instantier une configuration du système.
292 * Lancer GuixSD dans une VM:: Comment lancer GuixSD dans une machine
293 virtuelle.
294 * Définir des services:: Ajouter de nouvelles définitions de services.
295
296 Services
297
298
299
300 * Services de base:: Services systèmes essentiels.
301 * Exécution de tâches planifiées:: Le service mcron.
302 * Rotation des journaux:: Le service rottlog.
303 * Services réseau:: Paramétres réseau, démon SSH, etc.
304 * Système de fenêtrage X:: Affichage graphique.
305 * Services d'impression:: Support pour les imprimantes locales et
306 distantes.
307 * Services de bureaux:: D-Bus et les services de bureaux.
308 * Services de son:: Services ALSA et Pulseaudio.
309 * Services de bases de données:: Bases SQL, clefs-valeurs, etc.
310 * Services de courriels:: IMAP, POP3, SMTP, et tout ça.
311 * Services de messagerie:: Services de messagerie.
312 * Services de téléphonie:: Services de téléphonie.
313 * Services de surveillance:: Services de surveillance.
314 * Services Kerberos:: Services Kerberos.
315 * Services web:: Services web.
316 * Services de certificats:: Certificats TLS via Let's Encrypt.
317 * Services DNS:: Démons DNS@.
318 * Services VPN:: Démons VPN
319 * Système de fichiers en réseau:: Services liés à NFS@.
320 * Intégration continue:: Le service Cuirass.
321 * Power Management Services:: Extending battery life.
322 * Services audio:: MPD@.
323 * Services de virtualisation:: Services de virtualisation.
324 * Services de contrôle de version:: Fournit des accès distants à des
325 dépôts Git.
326 * Services de jeu:: Serveurs de jeu.
327 * Services divers:: D'autres services.
328
329 Définir des services
330
331
332
333 * Composition de services:: Le modèle de composition des services.
334 * Types service et services:: Types et services.
335 * Référence de service:: Référence de l'API@.
336 * Services Shepherd:: Un type de service particulier.
337
338 Consignes d'empaquetage
339
340
341
342 * Liberté logiciel:: Ce que la distribution peut contenir.
343 * Conventions de nommage:: Qu'est-ce qu'un bon nom ?
344 * Numéros de version:: Lorsque le nom n'est pas suffisant.
345 * Synopsis et descriptions:: Aider les utilisateurs à trouver le bon
346 paquet.
347 * Modules python:: Un peu de comédie anglaise.
348 * Modules perl:: Petites perles.
349 * Paquets java:: Pause café.
350 * Polices de caractères:: À fond les fontes.
351
352 Contribuer
353
354
355
356 * Construire depuis Git:: toujours le plus récent.
357 * Lancer Guix avant qu'il ne soit installé:: Astuces pour les hackers.
358 * La configuration parfaite:: Les bons outils.
359 * Style de code:: Hygiène du contributeur.
360 * Envoyer des correctifs:: Partager votre travail.
361
362 Style de code
363
364
365
366 * Paradigme de programmation:: Comment composer vos éléments.
367 * Modules:: Où stocker votre code ?
368 * Types de données et reconnaissance de motif:: Implémenter des
369 structures de données.
370 * Formatage du code:: Conventions d'écriture.
371
372 @end detailmenu
373 @end menu
374
375 @c *********************************************************************
376 @node Introduction
377 @chapter Introduction
378
379 @cindex but
380 GNU Guix@footnote{« Guix » se prononce comme « geeks » (en prononçant le
381 « s »), ou « ɡiːks » dans l'alphabet phonétique international (API).} est un
382 outil de gestion de paquets pour le système GNU@. Guix facilite pour les
383 utilisateurs non privilégiés l'installation, la mise à jour et la
384 suppression de paquets, la restauration à un ensemble de paquets précédent,
385 la construction de paquets depuis les sources et plus généralement aide à la
386 création et à la maintenance d'environnements logiciels.
387
388 @cindex interfaces utilisateurs
389 Guix fournit une interface de gestion des paquets par la ligne de commande
390 (@pxref{Invoquer guix package}), un ensemble d'utilitaires en ligne de
391 commande (@pxref{Utilitaires}) ainsi que des interfaces de programmation
392 Scheme (@pxref{Interface de programmation}).
393 @cindex démon de construction
394 Son @dfn{démon de construction} est responsable de la construction des
395 paquets pour les utilisateurs (@pxref{Paramétrer le démon}) et du
396 téléchargement des binaires pré-construits depuis les sources autorisées
397 (@pxref{Substituts}).
398
399 @cindex extensibilité de la distribution
400 @cindex personnalisation, des paquets
401 Guix contient de nombreuses définitions de paquet GNU et non-GNU qui
402 respectent tous les @uref{https://www.gnu.org/philosophy/free-sw.fr.html,
403 libertés de l'utilisateur}. Il est @emph{extensible} : les utilisateurs
404 peuvent écrire leurs propres définitions de paquets (@pxref{Définition des paquets}) et les rendre disponibles dans des modules de paquets
405 indépendants (@pxref{Modules de paquets}). Il est aussi
406 @emph{personnalisable} : les utilisateurs peuvent @emph{dériver} des
407 définitions de paquets spécialisées à partir de définitions existantes, même
408 depuis la ligne de commande (@pxref{Options de transformation de paquets}).
409
410 @cindex Distribution Système Guix
411 @cindex GuixSD
412 Vous pouvez installer GNU@tie{}Guix sur un système GNU/Linux existant pour
413 compléter les outils disponibles sans interférence (@pxref{Installation}) ou
414 vous pouvez l'utiliser à travers la @dfn{Distribution Système Guix} ou
415 GuixSD (@pxref{Distribution GNU}) distincte. Avec GNU@tie{}GuixSD, vous
416 @emph{déclarez} tous les aspects de la configuration du système
417 d'exploitation et Guix s'occupe de créer la configuration d'une manière
418 transactionnelle, reproductible et sans état (@pxref{Configuration
419 système}).
420
421 @cindex gestion de paquet fonctionnelle
422 Sous le capot, Guix implémente la discipline de @dfn{gestion de paquet
423 fonctionnel} inventé par Nix (@pxref{Remerciements}). Dans Guix le
424 processus de construction et d'installation des paquets est vu comme une
425 @emph{fonction} dans le sens mathématique du terme. Cette fonction a des
426 entrées (comme des scripts de construction, un compilateur et des
427 bibliothèques) et renvoie un paquet installé. En tant que fonction pure,
428 son résultat ne dépend que de ses entrées. Par exemple, il ne peut pas
429 faire référence à des logiciels ou des scripts qui n'ont pas été
430 explicitement passés en entrée. Une fonction de construction produit
431 toujours le même résultat quand on lui donne le même ensemble d'entrée.
432 Elle ne peut pas modifier l'environnement du système en cours d'exécution
433 d'aucune manière ; par exemple elle ne peut pas créer, modifier ou supprimer
434 des fichiers en dehors de ses répertoires de construction et
435 d'installation. Ce résultat s'obtient en lançant les processus de
436 construction dans des environnements isolés (ou des @dfn{conteneurs}) où
437 seules les entrées explicites sont visibles.
438
439 @cindex dépôt
440 Le résultat des fonctions de construction de paquets est mis en @dfn{cache}
441 dans le système de fichier, dans répertoire spécial appelé le @dfn{dépôt}
442 (@pxref{Le dépôt}). Chaque paquet est installé dans son répertoire propre
443 dans le dépôt — par défaut dans @file{/gnu/store}. Le nom du répertoire
444 contient un hash de toutes les entrées utilisées pour construire le paquet ;
445 ainsi, changer une entrée donnera un nom de répertoire différent.
446
447 Cette approche est le fondement des fonctionnalités les plus importante de
448 Guix : le support des mises à jour des paquets et des retours en arrière
449 transactionnels, l'installation différenciée par utilisateur et le ramassage
450 de miettes pour les paquets (@pxref{Fonctionnalités}).
451
452
453 @c *********************************************************************
454 @node Installation
455 @chapter Installation
456
457 @cindex installer Guix
458 GNU Guix est disponible au téléchargement depuis son site web sur
459 @url{http://www.gnu.org/software/guix/}. Cette section décrit les
460 pré-requis logiciels de Guix ainsi que la manière de l'installer et de se
461 préparer à l'utiliser.
462
463 Remarquez que cette section concerne l'installation du gestionnaire de
464 paquet, ce qui se fait sur un système GNU/Linux en cours d'exécution. Si
465 vous souhaitez plutôt installer le système d'exploitation GNU complet,
466 @pxref{Installation du système}.
467
468 @cindex distro extérieure
469 Lorsqu'il est installé sur an système GNU/Linux existant — ci-après nommé
470 @dfn{distro extérieure} — GNU@tie{}Guix complète les outils disponibles sans
471 interférence. Ses données se trouvent exclusivement dans deux répertoires,
472 typiquement @file{/gnu/store} et @file{/var/guix} ; les autres fichiers de
473 votre système comme @file{/etc} sont laissés intacts.
474
475 Une fois installé, Guix peut être mis à jour en lançant @command{guix pull}
476 (@pxref{Invoquer guix pull}).
477
478 @menu
479 * Installation binaire:: Commencer à utiliser Guix en un rien de temps
480 !
481 * Prérequis:: Logiciels requis pour construire et lancer
482 Guix.
483 * Lancer la suite de tests:: Tester Guix.
484 * Paramétrer le démon:: Préparer l'environnement du démon de
485 construction.
486 * Invoquer guix-daemon:: Lancer le démon de construction.
487 * Réglages applicatifs:: Réglages spécifiques pour les application.
488 @end menu
489
490 @node Installation binaire
491 @section Installation binaire
492
493 @cindex installer Guix depuis les binaires
494 Cette section décrit comment intaller Guix sur un système quelconque depuis
495 un archive autonome qui fournit les binaires pour Guix et toutes ses
496 dépendances. C'est souvent plus rapide que d'installer depuis les sources,
497 ce qui est décrit dans les sections suivantes. Le seul pré-requis est
498 d'avoir GNU@tie{}tar et Xz.
499
500 Nous fournissons un script
501 @uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh,
502 script d'intallation shell} qui automatise le téléchargement, l'installation
503 et la configuration initiale de Guix. Il devrait être lancé en tant
504 qu'utilisateur root.
505
506 L'installation se comme ceci :
507
508 @enumerate
509 @item
510 @cindex téléchargement du Guix binaire
511 Download the binary tarball from
512 @indicateurl{https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz},
513 where @var{system} is @code{x86_64-linux} for an @code{x86_64} machine
514 already running the kernel Linux, and so on.
515
516 @c The following is somewhat duplicated in ``System Installation''.
517 Assurez-vous de télécharger le fichier @file{.sig} associé et de vérifier
518 l'authenticité de l'archive avec, comme ceci :
519
520 @example
521 $ wget https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
522 $ gpg --verify guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
523 @end example
524
525 Si cette commande échoue parce que vous n'avez pas la clef publique requise,
526 lancez cette commande pour l'importer :
527
528 @example
529 $ gpg --keyserver pgp.mit.edu --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
530 @end example
531
532 @noindent
533 @c end authentication part
534 et relancez la commande @code{gpg --verify}.
535
536 @item
537 Maintenant, vous devez devenir l'utilisateur @code{root}. En fonction de
538 votre distribution, vous devrez lancer @code{su -} ou @code{sudo -i}. En
539 tant que @code{root}, lancez :
540
541 @example
542 # cd /tmp
543 # tar --warning=no-timestamp -xf \
544 guix-binary-@value{VERSION}.@var{système}.tar.xz
545 # mv var/guix /var/ && mv gnu /
546 @end example
547
548 Cela crée @file{/gnu/store} (@pxref{Le dépôt}) and @file{/var/guix}. Ce
549 deuxième dossier contient un profil pret à être utilisé pour @code{root}
550 (voir les étapes suivantes).
551
552 Ne décompressez @emph{pas} l'archive sur un système Guix lancé car cela
553 écraserait ses propres fichiers essentiels.
554
555 L'option @code{--warning=no-timestamp} s'assure que GNU@tie{}tar ne produise
556 pas d'avertissement disant que « l'horodatage est trop vieux pour être
557 plausible » (ces avertissements étaient produits par GNU@tie{}tar 1.26 et
558 précédents ; les versions récentes n'ont pas ce problème). Cela vient du
559 fait que les fichiers de l'archive ont pour date de modification zéro (ce
560 qui signifie le 1er janvier 1970). C'est fait exprès pour s'assurer que le
561 contenu de l'archive ne dépende pas de la date de création, ce qui la rend
562 reproductible.
563
564 @item
565 Rendez le profil de @code{root} disponible sous @file{~root/.guix-profile} :
566
567 @example
568 # ln -sf /var/guix/profiles/per-user/root/guix-profile \
569 ~root/.guix-profile
570 @end example
571
572 Sourcez @file{etc/profile} pour augmenter @code{PATH} et les autres
573 variables d'environnement nécessaires :
574
575 @example
576 # GUIX_PROFILE="`echo ~root`/.guix-profile" ; \
577 source $GUIX_PROFILE/etc/profile
578 @end example
579
580 @item
581 Créez le groupe et les comptes utilisateurs pour les utilisateurs de
582 construction comme expliqué plus loin (@pxref{Réglages de l'environnement de construction}).
583
584 @item
585 Lancez le démon et paramétrez-le pour démarrer automatiquement au démarrage.
586
587 Si votre distribution hôte utilise le système d'initialisation systemd, cela
588 peut se faire avec ces commandes :
589
590 @c Versions of systemd that supported symlinked service files are not
591 @c yet widely deployed, so we should suggest that users copy the service
592 @c files into place.
593 @c
594 @c See this thread for more information:
595 @c http://lists.gnu.org/archive/html/guix-devel/2017-01/msg01199.html
596
597 @example
598 # cp ~root/.guix-profile/lib/systemd/system/guix-daemon.service \
599 /etc/systemd/system/
600 # systemctl start guix-daemon && systemctl enable guix-daemon
601 @end example
602
603 Si votre distribution hôte utilise le système d'initialisation Upstart :
604
605 @example
606 # initctl reload-configuration
607 # cp ~root/.guix-profile/lib/upstart/system/guix-daemon.conf /etc/init/
608 # start guix-daemon
609 @end example
610
611 Sinon, vous pouvez toujours démarrer le démon manuellement avec :
612
613 @example
614 # ~root/.guix-profile/bin/guix-daemon --build-users-group=guixbuild
615 @end example
616
617 @item
618 Rendez la commande @command{guix} disponible pour les autres utilisateurs
619 sur la machine, par exemple avec :
620
621 @example
622 # mkdir -p /usr/local/bin
623 # cd /usr/local/bin
624 # ln -s /var/guix/profiles/per-user/root/guix-profile/bin/guix
625 @end example
626
627 C'est aussi une bonne idée de rendre la version Info de ce manuel disponible
628 ici :
629
630 @example
631 # mkdir -p /usr/local/share/info
632 # cd /usr/local/share/info
633 # for i in /var/guix/profiles/per-user/root/guix-profile/share/info/* ;
634 do ln -s $i ; done
635 @end example
636
637 Comme cela, en supposant que @file{/usr/local/share/info} est dans le chemin
638 de recherche, lancer @command{info guix} ouvrira ce manuel (@pxref{Other
639 Info Directories,,, texinfo, GNU Texinfo}, pour plus de détails sur comment
640 changer le chemin de recherche de Info).
641
642 @item
643 @cindex substituts, autorisations
644 Pour utiliser les substituts de @code{hydra.gnu.org} ou l'un de ses mirroirs
645 (@pxref{Substituts}), autorisez-les :
646
647 @example
648 # guix archive --authorize < ~root/.guix-profile/share/guix/hydra.gnu.org.pub
649 @end example
650
651 @item
652 Chaque utilisateur peut avoir besoin d'effectuer des étapes supplémentaires
653 pour que leur environnement Guix soit prêt à être utilisé,
654 @pxref{Réglages applicatifs}.
655 @end enumerate
656
657 Voilà, l'installation est terminée !
658
659 Vous pouvez confirmer que Guix fonctionne en installant un paquet d'exemple
660 dans le profil de root :
661
662 @example
663 # guix package -i hello
664 @end example
665
666 Le paquet @code{guix} doit rester disponible dans le profil de @code{root}
667 ou il pourrait être sujet au ramassage de miettes — dans ce cas vous vous
668 retrouveriez gravement handicapé par l'absence de la commande
669 @command{guix}. En d'autres termes, ne supprimez pas @code{guix} en lançant
670 @code{guix package -r guix}.
671
672 L'archive d'installation binaire peut être (re)produite et vérifiée
673 simplement en lançaint la commande suivante dans l'arborescence des sources
674 de Guix :
675
676 @example
677 make guix-binary.@var{system}.tar.xz
678 @end example
679
680 @noindent
681 … ce qui à son tour lance :
682
683 @example
684 guix pack -s @var{system} --localstatedir guix
685 @end example
686
687 @xref{Invoquer guix pack}, pour plus d'info sur cet outil pratique.
688
689 @node Prérequis
690 @section Prérequis
691
692 Cette section dresse la liste des pré-requis pour la construction de Guix
693 depuis les sources. La procédure de construction pour Guix est la même que
694 pour les autres logiciels GNU, et n'est pas expliquée ici. Regardez les
695 fichiers @file{README} et @file{INSTALL} dans l'arborescence des sources de
696 Guix pour plus de détails.
697
698 GNU Guix dépend des paquets suivants :
699
700 @itemize
701 @item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.13 ou
702 ultérieure, dont 2.2.x,
703 @item @url{http://gnupg.org/, GNU libgcrypt},
704 @item
705 @uref{http://gnutls.org/, GnuTLS}, en particulier ses liaisons Guile
706 (@pxref{Guile Preparations, how to install the GnuTLS bindings for Guile,,
707 gnutls-guile, GnuTLS-Guile}),
708 @item
709 @uref{https://notabug.org/civodul/guile-sqlite3, Guile-SQLite3}, version
710 0.1.0 or later;
711 @item
712 @c FIXME: Specify a version number once a release has been made.
713 @uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, d'août 2017 ou
714 ultérieur,
715 @item @url{http://zlib.net, zlib},
716 @item @url{http://www.gnu.org/software/make/, GNU Make}.
717 @end itemize
718
719 Les dépendances suivantes sont facultatives :
720
721 @itemize
722 @item
723 Installer @url{http://savannah.nongnu.org/projects/guile-json/, Guile-JSON}
724 vous permettra d'utiliser la commande @command{guix import pypi}
725 (@pxref{Invoquer guix import}). Il est surtout utile pour les développeurs
726 et pas pour les utilisateurs occasionnels.
727
728 @item
729 @c Note: We need at least 0.10.2 for 'channel-send-eof'.
730 Le support pour la décharge de construction (@pxref{Réglages du délestage du démon})
731 et @command{guix copy} (@pxref{Invoquer guix copy}) dépend de
732 @uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH}, version
733 0.10.2 ou ulltérieure.
734
735 @item
736 Lorsque @url{http://www.bzip.org, libbz2} est disponible,
737 @command{guix-daemon} peut l'utiliser pour compresser les journaux de
738 construction.
739 @end itemize
740
741 À moins que @code{--disable-daemon} ne soit passé à @command{configure}, les
742 paquets suivants sont aussi requis :
743
744 @itemize
745 @item @url{http://sqlite.org, SQLite 3},
746 @item @url{http://gcc.gnu.org, GCC's g++}, avec le support pour le
747 standard C++11.
748 @end itemize
749
750 @cindex répertoire d'état
751 Lorsque vous configurez Guix sur un système qui a déjà une installation de
752 Guix, assurez-vous de spécifier le même répertoire d'état que l'installation
753 existante avec l'option @code{--localstatedir} du script @command{configure}
754 (@pxref{Directory Variables, @code{localstatedir},, standards, GNU Coding
755 Standards}). Le script @command{configure} vous protège des mauvaises
756 configurations involontaires de @var{localstatedir} pour éviter que vous ne
757 corrompiez votre dépôt (@pxref{Le dépôt}).
758
759 @cindex Nix, compatibilité
760 Lorsque vous avez une installation fonctionnelle du
761 @url{http://nixos.org/nix/, gestionnaire de paquets Nix}, vous pouvez
762 configurer Guix avec @code{--disable-daemon}. Dan ce cas, Nix remplace les
763 trois dépendances au dessus.
764
765 Guix est compatible avec Nix, donc il est possible de partager le même dépôt
766 entre les deux. Pour cela, vous devez passer à @command{configure} non
767 seulement la même valeur de @code{--with-store-dir} mais aussi la même
768 valeur de @code{--localstatedir}. Cette dernière est nécessaires car elle
769 spécifie l'emplacement de la base de données qui stocke les métadonnées sur
770 le dépôt, entre autres choses. Les valeurs par défaut pour Nix sont
771 @code{--with-store-dir=/nix/store} et @code{--localstatedir=/nix/var}.
772 Remarquez que @code{--disable-daemon} n'est pas requis si votre but est de
773 partager le dépôt avec Nix.
774
775 @node Lancer la suite de tests
776 @section Lancer la suite de tests
777
778 @cindex suite de tests
779 Après avoir lancé @command{configure} et @code{make} correctement, c'est une
780 bonne idée de lancer la suite de tests. Elle peut aider à trouver des
781 erreurs avec la configuration ou l'environnement, ou des bogues dans Guix
782 lui-même — et vraiment, rapporter des échecs de tests est une bonne manière
783 d'aider à améliorer le logiciel. Pour lancer la suite de tests, tapez :
784
785 @example
786 make check
787 @end example
788
789 Les cas de tests peuvent être lancés en parallèle : vous pouvez utiliser
790 l'option @code{-j} de GNU@tie{}make pour accélérer les choses. Le premier
791 lancement peut prendre plusieurs minutes sur une machine récente ; les
792 lancements suivants seront plus rapides car le dépôt créé pour les tests
793 aura déjà plusieurs choses en cache.
794
795 Il est aussi possible de lancer un sous-ensemble des tests en définissant la
796 variable makefile @code{TESTS} comme dans cet exemple :
797
798 @example
799 make check TESTS="tests/store.scm tests/cpio.scm"
800 @end example
801
802 Par défaut, les résultats des tests sont affichés au niveau du fichier.
803 Pour voir les détails de chaque cas de test individuel, il est possible de
804 définire la variable makefile @code{SCM_LOG_DRIVER_FLAGS} comme dans cet
805 exemple :
806
807 @example
808 make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no"
809 @end example
810
811 Après un échec, envoyez un courriel à @email{bug-guix@@gnu.org} et attachez
812 le fichier @file{test-suite.log}. Précisez la version de Guix utilisée
813 ainsi que les numéros de version de ses dépendances (@pxref{Prérequis})
814 dans votre message.
815
816 Guix possède aussi une suite de tests de systèmes complets qui test des
817 instances complètes du système d'exploitation GuixSD@. Elle ne peut être
818 lancée qui sur un système où Guix est déjà installé, avec :
819
820 @example
821 make check-system
822 @end example
823
824 @noindent
825 Ou, de nouveau, en définissant @code{TESTS} pour choisir un sous-ensemble
826 des tests à lancer :
827
828 @example
829 make check-system TESTS="basic mcron"
830 @end example
831
832 Ces tests systèmes sont définis dans les modules @code{(gnu tests
833 @dots{})}. Ils fonctionnent en lançant les systèmes d'exploitation sous test
834 avec une instrumentation légère dans une machine virtuelle (VM). Ils
835 peuvent être intenses en terme de calculs ou plutôt rapides en fonction de
836 la disponibilité des substituts de leurs dépendances (@pxref{Substituts}).
837 Certains requièrent beaucoup d'espace disque pour contenir les images des
838 VM@.
839
840 De nouveau, en cas d'échec, envoyez tous les détails à
841 @email{bug-guix@@gnu.org}.
842
843 @node Paramétrer le démon
844 @section Paramétrer le démon
845
846 @cindex démon
847 Les opérations comme la construction d'un paquet ou le lancement du
848 ramasse-miettes sont toutes effectuées par un processus spécialisé, le
849 @dfn{démon de construction}, pour le compte des clients. Seul le démon peut
850 accéder au dépôt et à sa base de données associée. Ainsi, toute opération
851 manipulant le dépôt passe par le démon. Par exemple, les outils en ligne de
852 commande comme @command{guix package} et @command{guix build} communiquent
853 avec le démon (@i{via} des appels de procédures distantes) pour lui dire
854 quoi faire.
855
856 Les sections suivantes expliquent comment préparer l'environnement du démon
857 de construction. Voir aussi @ref{Substituts} pour apprendre comment
858 permettre le téléchargement de binaires pré-construits.
859
860 @menu
861 * Réglages de l'environnement de construction:: Préparer l'environnement
862 de construction isolé.
863 * Réglages du délestage du démon:: Envoyer des constructions à des
864 machines distantes.
865 * Support de SELinux:: Utiliser une politique SELinux pour le démon.
866 @end menu
867
868 @node Réglages de l'environnement de construction
869 @subsection Réglages de l'environnement de construction
870
871 @cindex environnement de construction
872 Dans une installation standard multi-utilisateurs, Guix et son démon — le
873 programme @command{guix-daemon} — sont installé par l'administrateur système
874 ; @file{/gnu/store} appartient à @code{root} et @command{guix-daemon} est
875 lancé en @code{root}. Les utilisateurs non-privilégiés peuvent utiliser les
876 outils Guix pour construire des paquets ou accéder au dépôt et le démon le
877 fera pour leur compte en s'assurant que le dépôt garde un état cohérent et
878 permet le partage des paquets déjà construits entre les utilisateurs.
879
880 @cindex utilisateurs de construction
881 Alors que @command{guix-daemon} tourne en @code{root}, vous n'avez pas
882 forcément envie que les processus de construction de paquets tournent aussi
883 en @code{root}, pour des raisons de sécurité évidentes. Pour éviter cela,
884 vous devriez créer une réserve spéciale d'@dfn{utilisateurs de construction}
885 que les processus de construction démarrés par le démon utiliseront. Ces
886 utilisateurs de construction n'ont pas besoin d'un shell ou d'un répertoire
887 personnel ; ils seront seulement utilisés quand le démon délaissera ses
888 privilèges @code{root} dans les processus de construction. En ayant
889 plusieurs de ces utilisateurs, vous permettez au démon de lancer des
890 processus de construction distincts sous des UID différent, ce qui garanti
891 qu'aucune interférence n'ait lieu entre les uns et les autres — une
892 fonctionnalité essentielle puisque les constructions sont supposées être des
893 fonctions pures (@pxref{Introduction}).
894
895 Sur un système GNU/Linux, on peut créer une réserve d'utilisateurs de
896 construction comme ceci (avec la syntaxe Bash et les commandes
897 @code{shadow}) :
898
899 @c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
900 @c for why `-G' is needed.
901 @example
902 # groupadd --system guixbuild
903 # for i in `seq -w 1 10`;
904 do
905 useradd -g guixbuild -G guixbuild \
906 -d /var/empty -s `which nologin` \
907 -c "Utilisateur de construction Guix $i" --system \
908 guixbuilder$i;
909 done
910 @end example
911
912 @noindent
913 Le nombre d'utilisateurs de construction détermine le nombre de tâches de
914 constructions qui peuvent tourner en parallèle, tel que spécifié par
915 l'option @option{--max-jobs} (@pxref{Invoquer guix-daemon,
916 @option{--max-jobs}}). Pour utiliser @command{guix system vm} et les
917 commandes liées, vous devrez ajouter les utilisateurs de construction au
918 groupe @code{kvm} pour qu'ils puissent accéder à @file{/dev/kvm} avec
919 @code{-G guixbuild,kvm} plutôt que @code{-G guixbuild} (@pxref{Invoquer guix system}).
920
921 Le programme @code{guix-daemon} peut ensuite être lancé en @code{root} avec
922 la commande suivante@footnote{Si votre machine utilise le système
923 d'initialisation systemd, copiez le fichier
924 @file{@var{prefix}/lib/systemd/system/guix-daemon.service} dans
925 @file{/etc/systemd/system} pour vous assurer que @command{guix-daemon} est
926 démarré automatiquement. De même, si votre machine utilise le système
927 d'initialisation Upstart, copiez le fichier
928 @file{@var{prefix}/lib/upstart/system/guix-daemon.conf} dans
929 @file{/etc/init}.} :
930
931 @example
932 # guix-daemon --build-users-group=guixbuild
933 @end example
934
935 @cindex chroot
936 @noindent
937 De cette façon, le démon démarre les processus de construction dans un
938 chroot, sous un des utilisateurs @code{guixbuilder}. Sur GNU/Linux par
939 défaut, l'environnement chroot ne contient rien d'autre que :
940
941 @c Keep this list in sync with libstore/build.cc! -----------------------
942 @itemize
943 @item
944 un répertoire @code{/dev} minimal, créé presque indépendamment du
945 @code{/dev} de l'hôte@footnote{« presque », parce que même si l'ensemble des
946 fichiers qui apparaissent dans le @code{/dev} du chroot sont déterminés à
947 l'avance, la plupart de ces fichiers ne peut pas être créée si l'hôte ne les
948 a pas.} ;
949
950 @item
951 le répertoire @code{/proc} ; il ne montre que les processus du conteneur car
952 on utilise une espace de nom séparé pour les PID ;
953
954 @item
955 @file{/etc/passwd} avec une entrée pour l'utilisateur actuel et une entrée
956 pour l'utilisateur @file{nobody} ;
957
958 @item
959 @file{/etc/group} avec une entrée pour le groupe de l'utilisateur ;
960
961 @item
962 @file{/etc/hosts} avec une entrée qui fait correspondre @code{localhost} à
963 @code{127.0.0.1} ;
964
965 @item
966 un répertoire @file{/tmp} inscriptible.
967 @end itemize
968
969 Vous pouvez influencer le répertoire où le démon stocke les arbres de
970 construction @i{via} la variable d'environnement @code{TMPDIR}. Cependant,
971 l'arbre de construction dans le chroot sera toujours appelé
972 @file{/tmp/guix-build-@var{nom}.drv-0}, où @var{nom} est le nom de la
973 dérivation — p.@: ex.@: @code{coreutils-8.24}. De cette façon, la valeur de
974 @code{TMPDIR} ne fuite pas à l'intérieur des environnements de construction,
975 ce qui évite des différences lorsque le processus de construction retient le
976 nom de leur répertoire de construction.
977
978 @vindex http_proxy
979 Le démon tient aussi compte de la variable d'environnement @code{http_proxy}
980 pour ses téléchargements HTTP, que ce soit pour les dérivations à sortie
981 fixes (@pxref{Dérivations}) ou pour les substituts (@pxref{Substituts}).
982
983 Si vous installez Guix en tant qu'utilisateur non-privilégié, il est
984 toujours possible de lancer @command{guix-daemon} si vous passez
985 @code{--disable-chroot}. Cependant, les processus de construction ne seront
986 pas isolés les uns des autres ni du reste du système. Ainsi les processus
987 de construction peuvent interférer les uns avec les autres, et peuvent
988 accéder à des programmes, des bibliothèques et d'autres fichiers présents
989 sur le système — ce qui rend plus difficile de les voir comme des fonctions
990 @emph{pures}.
991
992
993 @node Réglages du délestage du démon
994 @subsection Utiliser le dispositif de déchargement
995
996 @cindex déchargement
997 @cindex crochet de construction
998 Si vous le souhaitez, le démon de construction peut @dfn{décharger} des
999 constructions de dérivations sur d'autres machines Guix avec le @dfn{crochet
1000 de construction} @code{offload}@footnote{Cette fonctionnalité n'est
1001 disponible que si @uref{https://github.com/artyom-poptsov/guile-ssh,
1002 Guile-SSH} est présent.}. Lorsque cette fonctionnalité est activée, Guix
1003 lit une liste de machines de constructions spécifiée par l'utilisateur dans
1004 @file{/etc/guix/machines.scm} ; à chaque fois qu'une construction est
1005 demandée, par exemple par @code{guix build}, le démon essaie de la décharger
1006 sur une des machines qui satisfont les contraintes de la dérivation, en
1007 particulier le type de système, p.@: ex.@: @file{x86_64-linux}. Les
1008 prérequis manquants pour la construction sont copiés par SSH sur la machine
1009 de construction qui procède ensuite à la construction ; si elle réussi, les
1010 sorties de la construction sont copiés vers la machine de départ.
1011
1012 Le fichier @file{/etc/guix/machines.scm} ressemble typiquement à cela :
1013
1014 @example
1015 (list (build-machine
1016 (name "eightysix.example.org")
1017 (system "x86_64-linux")
1018 (host-key "ssh-ed25519 AAAAC3Nza@dots{}")
1019 (user "bob")
1020 (speed 2.)) ;très rapide !
1021
1022 (build-machine
1023 (name "meeps.example.org")
1024 (system "mips64el-linux")
1025 (host-key "ssh-rsa AAAAB3Nza@dots{}")
1026 (user "alice")
1027 (private-key
1028 (string-append (getenv "HOME")
1029 "/.ssh/identity-for-guix"))))
1030 @end example
1031
1032 @noindent
1033 Dans l'exemple ci-dessus nous spécifions une liste de deux machines de
1034 construction, une pour l'architecture @code{x86_64} et une pour
1035 l'architecture @code{mips64el}.
1036
1037 En fait, ce fichier est — et ça ne devrait pas vous surprendre ! — un
1038 fichier Scheme qui est évalué au démarrage du crochet @code{offload}. Sa
1039 valeur de retour doit être une liste d'objets @code{build-machine}. Même si
1040 cet exemple montre une liste fixée de machines de construction, on pourrait
1041 imaginer par exemple utiliser DNS-SD pour renvoyer une liste de machines de
1042 constructions potentielles découvertes sur le réseau local
1043 (@pxref{Introduction, Guile-Avahi,, guile-avahi, Using Avahi in Guile Scheme
1044 Programs}). Le type de données @code{build-machine} est détaillé plus bas.
1045
1046 @deftp {Type de données} build-machine
1047 Ce type de données représente les machines de construction sur lesquelles le
1048 démon peut décharger des constructions. Les champs importants sont :
1049
1050 @table @code
1051
1052 @item name
1053 Le nom d'hôte de la machine distante.
1054
1055 @item system
1056 Le type de système de la machine distante, p.@: ex.@: @code{"x86_64-linux"}.
1057
1058 @item user
1059 Le compte utilisateur à utiliser lors de la connexion à la machine distante
1060 par SSH@. Remarquez que la paire de clef SSH ne doit @emph{pas} être
1061 protégée par mot de passe pour permettre des connexions non-interactives.
1062
1063 @item host-key
1064 Cela doit être la @dfn{clef d'hôte SSH publique} de la machine au format
1065 OpenSSH@. Elle est utilisée pour authentifier la machine lors de la
1066 connexion. C'est une longue chaîne qui ressemble à cela :
1067
1068 @example
1069 ssh-ed25519 AAAAC3NzaC@dots{}mde+UhL hint@@example.org
1070 @end example
1071
1072 Si la machine utilise le démon OpenSSH, @command{sshd}, la clef d'hôte se
1073 trouve dans un fichier comme @file{/etc/ssh/ssh_host_ed25519_key.pub}.
1074
1075 Si la machine utilise le démon SSH de GNU@tie{}lsh, la clef d'hôte est dans
1076 @file{/etc/lsh/host-key.pub} ou un fichier similaire. Elle peut être
1077 convertie au format OpenSSH avec @command{lsh-export-key}
1078 (@pxref{Converting keys,,, lsh, LSH Manual}) :
1079
1080 @example
1081 $ lsh-export-key --openssh < /etc/lsh/host-key.pub
1082 ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV@dots{}
1083 @end example
1084
1085 @end table
1086
1087 Il y a un certain nombre de champs facultatifs que vous pouvez remplir :
1088
1089 @table @asis
1090
1091 @item @code{port} (par défaut : @code{22})
1092 Numéro de port du serveur SSH sur la machine.
1093
1094 @item @code{private-key} (par défaut : @file{~root/.ssh/id_rsa})
1095 The SSH private key file to use when connecting to the machine, in OpenSSH
1096 format. This key must not be protected with a passphrase.
1097
1098 Remarquez que la valeur par défaut est la clef privée @emph{du compte
1099 root}. Assurez-vous qu'elle existe si vous utilisez la valeur par défaut.
1100
1101 @item @code{compression} (par défaut : @code{"zlib@@openssh.com,zlib"})
1102 @itemx @code{compression-level} (par défaut : @code{3})
1103 Les méthodes de compression au niveau SSH et le niveau de compression
1104 demandé.
1105
1106 Remarquez que le déchargement utilise la compression SSH pour réduire la
1107 bande passante utilisée lors du transfert vers et depuis les machines de
1108 construction.
1109
1110 @item @code{daemon-socket} (par défaut : @code{"/var/guix/daemon-socket/socket"})
1111 Le nom de fichier du socket Unix-domain sur lequel @command{guix-daemon}
1112 écoute sur cette machine.
1113
1114 @item @code{parallel-builds} (par défaut : @code{1})
1115 Le nombre de constructions qui peuvent tourner simultanément sur la machine.
1116
1117 @item @code{speed} (par défaut : @code{1.0})
1118 Un « facteur de vitesse relatif ». L'ordonnanceur des constructions tendra
1119 à préférer les machines avec un plus grand facteur de vitesse.
1120
1121 @item @code{features} (par défaut : @code{'()})
1122 Une liste de chaînes qui contient les fonctionnalités spécifiques supportées
1123 par la machine. Un exemple est @code{"kvm"} pour les machines qui ont le
1124 module Linux KVM et le support matériel correspondant. Les dérivations
1125 peuvent demander des fonctionnalités par leur nom et seront orchestrées sur
1126 les machines de construction correspondantes.
1127
1128 @end table
1129 @end deftp
1130
1131 La commande @code{guile} doit être dans le chemin de recherche des machines
1132 de construction. En plus, les modules Guix doivent se trouver dans
1133 @code{$GUILE_LOAD_PATH} sur la machine de construction. Vous pouvez
1134 vérifier si c'est le cas en lançant :
1135
1136 @example
1137 ssh build-machine guile -c "'(use-modules (guix config))'"
1138 @end example
1139
1140 Il reste une dernière chose à faire maintenant que @file{machines.scm} est
1141 en place. Comme expliqué ci-dessus, lors du déchargement les fichiers sont
1142 transférés entre les dépôts des machines. Pour que cela fonctionne, vous
1143 devez d'abord générer une paire de clef sur chaque machine pour permettre au
1144 démon d'exporter des archives signées des fichiers de son dépôt
1145 (@pxref{Invoquer guix archive}) :
1146
1147 @example
1148 # guix archive --generate-key
1149 @end example
1150
1151 @noindent
1152 Chaque machine de construction doit autoriser la clef de la machine
1153 maîtresse pour qu'ils acceptent les éléments de dépôt de celle-ci :
1154
1155 @example
1156 # guix archive --authorize < master-public-key.txt
1157 @end example
1158
1159 @noindent
1160 De même, la machine maîtresse doit autoriser les clefs de chaque machine de
1161 construction.
1162
1163 Toute cette histoire de clefs permet d'exprimer la confiance mutuelle
1164 deux-à-deux entre le maître et les machines de construction. Concrètement,
1165 lorsque le maître reçoit des fichiers d'une machine de construction (et
1166 vice-versa), son démon de construction s'assure qu'ils sont authentiques,
1167 n'ont pas été modifiés par un tiers et qu'il sont signés par un clef
1168 autorisée.
1169
1170 @cindex test du déchargement
1171 Pour tester que votre paramétrage fonctionne, lancez cette commande sur le
1172 nœud maître :
1173
1174 @example
1175 # guix offload test
1176 @end example
1177
1178 Cela essaiera de se connecter à toutes les machines de construction
1179 spécifiées dans @file{/etc/guix/machines.scm}, s'assurera que Guile et les
1180 modules Guix sont disponibles sur toutes les machines et tentera d'exporter
1181 vers la machine et d'importer depuis elle, et rapportera toute erreur
1182 survenu pendant le processus.
1183
1184 Si vous souhaitez tester un fichier de machines différent, spécifiez-le sur
1185 la ligne de commande :
1186
1187 @example
1188 # guix offload test machines-qualif.scm
1189 @end example
1190
1191 Enfin, vous pouvez tester un sous-ensemble de machines dont le nom
1192 correspond à une expression rationnelle comme ceci :
1193
1194 @example
1195 # guix offload test machines.scm '\.gnu\.org$'
1196 @end example
1197
1198 @cindex statut du déchargement
1199 Pour afficher la charge actuelle de tous les hôtes de construction, lancez
1200 cette commande sur le nœud principal :
1201
1202 @example
1203 # guix offload status
1204 @end example
1205
1206
1207 @node Support de SELinux
1208 @subsection Support de SELinux
1209
1210 @cindex SELinux, politique du démon
1211 @cindex contrôle d'accès obligatoire, SELinux
1212 @cindex sécurité, guix-daemon
1213 Guix inclus un fichier de politique SELniux dans @file{etc/guix-daemon.cil}
1214 qui peut être installé sur un système où SELinux est activé pour que les
1215 fichiers Guix soient étiquetés et pour spécifier le comportement attendu du
1216 démon. Comme GuixSD ne fournit pas de politique SELniux de base, la
1217 politique du démon ne peut pas être utilisée sur GuixSD@.
1218
1219 @subsubsection Installer la politique SELinux
1220 @cindex SELinux, installation de la politique
1221 Pour installer la politique, lancez cette commande en root :
1222
1223 @example
1224 semodule -i etc/guix-daemon.cil
1225 @end example
1226
1227 Puis ré-étiquetez le système de fichier avec @code{restorecon} ou par un
1228 mécanisme différent fournit par votre système.
1229
1230 Une fois la politique installée, le système de fichier ré-étiqueté et le
1231 démon redémarré, il devrait être lancé dans le contexte
1232 @code{guix_daemon_t}. Vous pouvez le confirmer avec la commande suivante :
1233
1234 @example
1235 ps -Zax | grep guix-daemon
1236 @end example
1237
1238 Surveillez les fichiers journaux de SELinux pendant que vous lancez une
1239 commande comme @code{guix build hello} pour vous convaincre que SELniux
1240 permet toutes les opérations nécessaires.
1241
1242 @subsubsection Limitations
1243 @cindex SELinux, limites
1244
1245 La politique n'et pas parfaite. Voici une liste de limitations et de
1246 bizarreries qui vous devriez prendre en compte avant de déployer la
1247 politique SELinux fournie pour le démon Guix.
1248
1249 @enumerate
1250 @item
1251 @code{guix_daemon_socket_t} n'est pas vraiment utilisé. Aucune des
1252 opérations sur les sockets n'impliquent de contextes qui ont quoi que ce
1253 soit à voir avec @code{guix_daemon_socket_t}. Ça ne fait pas de mal d'avoir
1254 une étiquette inutilisée, mais il serait préférable de définir des règles
1255 sur les sockets uniquement pour cette étiquette.
1256
1257 @item
1258 @code{guix gc} ne peut pas accéder à n'importe quel lien vers les profils.
1259 Par conception, l'étiquette de fichier de la destination d'un lien
1260 symbolique est indépendant de l'étiquette du lien lui-même. Bien que tous
1261 les profils sous $localstatedir aient une étiquette, les liens vers ces
1262 profils héritent de l'étiquette du répertoire dans lequel ils se trouvent.
1263 Pour les liens dans le répertoire personnel cela sera @code{user_home_t}.
1264 Mais pour les liens du répertoire personnel de l'utilisateur root, ou
1265 @file{/tmp}, ou du répertoire de travail du serveur HTTP, etc, cela ne
1266 fonctionnera pas. SELinux empêcherait @code{guix gc} de lire et de suivre
1267 ces liens.
1268
1269 @item
1270 La fonctionnalité du démon d'écouter des connexions TCP pourrait ne plus
1271 fonctionner. Cela demande des règles supplémentaires car SELinux traite les
1272 sockets réseau différemment des fichiers.
1273
1274 @item
1275 Actuellement tous les fichiers qui correspondent à l'expression rationnelle
1276 @code{/gnu/store/.+-(guix-.+|profile)/bin/guix-daemon} reçoivent l'étiquette
1277 @code{guix_daemon_exec_t} ; cela signifie que @emph{tout} fichier avec ce
1278 nom dans n'importe quel profil serait autorisé à se lancer dans le domaine
1279 @code{guix_daemon_t}. Ce n'est pas idéal. Un attaquant pourrait construire
1280 un paquet qui fournit cet exécutable et convaincre un utilisateur de
1281 l'installer et de le lancer, ce qui l'élève dans le domaine
1282 @code{guix_daemon_t}. À ce moment SELinux ne pourrait pas l'empêcher
1283 d'accéder à des fichiers autorisés pour les processus de ce domaine.
1284
1285 Nous pourrions générer une politique bien plus restrictive à l'installation,
1286 pour que seuls les noms de fichiers @emph{exacts} de l'exécutable
1287 @code{guix-daemon} actuellement installé soit étiqueté avec
1288 @code{guix_daemon_exec_t}, plutôt que d'utiliser une expression rationnelle
1289 plus large. L'inconvénient c'est que root devrait installer ou mettre à
1290 jour la politique à l'installation à chaque fois que le paquet Guix qui
1291 fournit l'exécutable @code{guix-daemon} effectivement exécuté est mis à
1292 jour.
1293 @end enumerate
1294
1295 @node Invoquer guix-daemon
1296 @section Invoquer @command{guix-daemon}
1297
1298 Le programme @command{guix-daemon} implémente toutes les fonctionnalités
1299 d'accès au dépôt. Cela inclus le lancement des processus de construction,
1300 le lancement du ramasse-miettes, la demande de disponibilité des résultats
1301 de construction, etc. Il tourne normalement en @code{root} comme ceci :
1302
1303 @example
1304 # guix-daemon --build-users-group=guixbuild
1305 @end example
1306
1307 @noindent
1308 Pour des détails sur son paramétrage, @pxref{Paramétrer le démon}.
1309
1310 @cindex chroot
1311 @cindex conteneur, environnement de construction
1312 @cindex environnement de construction
1313 @cindex constructions reproductibles
1314 Par défaut, @command{guix-daemon} lance les processus de construction sous
1315 différents UID récupérés depuis le groupe de construction spécifié avec
1316 @code{--build-users-group}. En plus, chaque processus de construction est
1317 lancé dans un environnement chroot qui ne contient que le sous-ensemble du
1318 dépôt dont le processus de construction dépend, tel que spécifié par sa
1319 dérivation (@pxref{Interface de programmation, dérivation}), plus un
1320 ensemble de répertoires systèmes spécifiques. Par défaut ce dernier
1321 contient @file{/dev} et @file{/dev/pts}. De plus, sous GNU/Linux,
1322 l'environnement de construction est un @dfn{conteneur} : en plus d'avoir sa
1323 propre arborescence du système de fichier, elle a un espace de montage
1324 séparé, son propre espace de PID, son espace de réseau, etc. Cela aide à
1325 obtenir des constructions reproductibles (@pxref{Fonctionnalités}).
1326
1327 Lorsque le démon effectue une construction pour le compte de l'utilisateur,
1328 il crée un répertoire sous @file{/tmp} ou sous le répertoire spécifié par sa
1329 variable d'environnement @code{TMPDIR}. Ce répertoire est partagé avec le
1330 conteneur pendant la durée de la construction. Soyez conscient qu'utiliser
1331 un répertoire différent de @file{/tmp} peut affecter les résultats de la
1332 construction — par exemple avec un nom de répertoire plus long, un processus
1333 de construction qui utiliserait des socket Unix-domain pourrait atteindre la
1334 limite de longueur de nom de fichier pour @code{sun_path}, qu'il n'aurait
1335 sinon pas atteinte.
1336
1337 Le répertoire de construction est automatiquement supprimé à la fin, à moins
1338 que la construction n'ait échoué et que le client ait spécifié
1339 @option{--keep-failed} (@pxref{Invoquer guix build,
1340 @option{--keep-failed}}).
1341
1342 Les options en ligne de commande suivantes sont disponibles :
1343
1344 @table @code
1345 @item --build-users-group=@var{groupe}
1346 Prendre les utilisateurs de @var{group} pour lancer les processus de
1347 construction (@pxref{Paramétrer le démon, utilisateurs de construction}).
1348
1349 @item --no-substitutes
1350 @cindex substituts
1351 Ne pas utiliser de substitut pour les résultats de la construction.
1352 C'est-à-dire, toujours construire localement plutôt que de permettre le
1353 téléchargement de binaires pré-construits (@pxref{Substituts}).
1354
1355 Lorsque le démon tourne avec @code{--no-substitutes}, les clients peuvent
1356 toujours activer explicitement la substitution @i{via} l'appel de procédure
1357 distante @code{set-build-options} (@pxref{Le dépôt}).
1358
1359 @item --substitute-urls=@var{urls}
1360 @anchor{daemon-substitute-urls}
1361 Considèrer @var{urls} comme la liste séparée par des espaces des URL des
1362 sources de substituts par défaut. Lorsque cette option est omise,
1363 @indicateurl{https://mirror.hydra.gnu.org https://hydra.gnu.org} est utilisé
1364 (@code{mirror.hydra.gnu.org} est un mirroire de @code{hydra.gnu.org}).
1365
1366 Cela signifie que les substituts sont téléchargés depuis les @var{urls},
1367 tant qu'ils sont signés par une signature de confiance (@pxref{Substituts}).
1368
1369 @cindex crochet de construction
1370 @item --no-build-hook
1371 Ne pas utiliser le @dfn{crochet de construction}.
1372
1373 Le crochet de construction est un programme d'aide qui le démon peut
1374 démarrer et auquel soumettre les requêtes de construction. Ce mécanisme est
1375 utilisé pour décharger les constructions à d'autres machines (@pxref{Réglages du délestage du démon}).
1376
1377 @item --cache-failures
1378 Mettre les échecs de construction en cache. Par défaut, seules les
1379 constructions réussies sont mises en cache.
1380
1381 Lorsque cette option est utilisée, @command{guix gc --list-failures} peut
1382 être utilisé pour demander l'ensemble des éléments du dépôt marqués comme
1383 échoués ; @command{guix gc --clear-failures} vide la liste des éléments
1384 aillant échoué. @xref{Invoquer guix gc}.
1385
1386 @item --cores=@var{n}
1387 @itemx -c @var{n}
1388 Utiliser @var{n} cœurs CPU pour construire chaque dérivation ; @code{0}
1389 signifie autant que possible.
1390
1391 La valeur par défaut est @code{0}, mais elle peut être modifiée par les
1392 clients comme avec l'option @code{--cores} de @command{guix build}
1393 (@pxref{Invoquer guix build}).
1394
1395 L'effet est de définir la variable d'environnement @code{NIX_BUILD_CORES}
1396 dans le processus de construction, qui peut ensuite l'utiliser pour
1397 exploiter le parallélisme en interne — par exemple en lançant @code{make
1398 -j$NIX_BUILD_CORES}.
1399
1400 @item --max-jobs=@var{n}
1401 @itemx -M @var{n}
1402 Permettre au plus @var{n} travaux de construction en parallèle. La valeur
1403 par défaut est @code{1}. La mettre à @code{0} signifie qu'aucune
1404 construction ne sera effectuée localement ; à la place, le démon déchargera
1405 les constructions (@pxref{Réglages du délestage du démon}) ou échouera.
1406
1407 @item --max-silent-time=@var{secondes}
1408 Lorsque le processus de construction ou de substitution restent silencieux
1409 pendant plus de @var{secondes}, le terminer et rapporter une erreur de
1410 construction.
1411
1412 La valeur par défaut est @code{0}, ce qui désactive le délai.
1413
1414 La valeur spécifiée ici peut être modifiée par les clients (@pxref{Options de construction communes, @code{--max-silent-time}}).
1415
1416 @item --timeout=@var{secondes}
1417 De même, lorsque le processus de construction ou de substitution dure plus
1418 de @var{secondes}, le terminer et rapporter une erreur de construction.
1419
1420 La valeur par défaut est @code{0}, ce qui désactive le délai.
1421
1422 La valeur spécifiée ici peut être modifiée par les clients (@pxref{Options de construction communes, @code{--timeout}}).
1423
1424 @item --rounds=@var{N}
1425 Construire chaque dérivations @var{N} fois à la suite, et lever une erreur
1426 si les résultats de construction consécutifs ne sont pas identiques
1427 bit-à-bit. Remarquez que ce paramètre peut être modifié par les clients
1428 comme @command{guix build} (@pxref{Invoquer guix build}).
1429
1430 Lorsqu'utilisé avec @option{--keep-failed}, la sourtie différente est gardée
1431 dans le dépôt sous @file{/gnu/store/@dots{}-check}. Cela rend plus facile
1432 l'étude des différences entre les deux résultats.
1433
1434 @item --debug
1435 Produire une sortie de débogage.
1436
1437 Cela est utile pour déboguer des problèmes de démarrage du démon, mais
1438 ensuite elle peut être modifiée par les clients, par exemple par l'option
1439 @code{--verbosity} de @command{guix build} (@pxref{Invoquer guix build}).
1440
1441 @item --chroot-directory=@var{rép}
1442 Ajouter @var{rép} au chroot de construction
1443
1444 Cela peut changer le résultat d'un processus de construction — par exemple
1445 s'il utilise une dépendance facultative trouvée dans @var{rép} lorsqu'elle
1446 est disponible ou pas sinon. Pour cette raison, il n'est pas recommandé
1447 d'utiliser cette option. À la place, assurez-vous que chaque dérivation
1448 déclare toutes les entrées dont elle a besoin.
1449
1450 @item --disable-chroot
1451 Désactive les constructions dans un chroot.
1452
1453 Utiliser cette option n'est pas recommandé car, de nouveau, elle permet aux
1454 processus de construction d'accéder à des dépendances non déclarées. Elle
1455 est nécessaire cependant lorsque @command{guix-daemon} tourne en tant
1456 qu'utilisateur non privilégié.
1457
1458 @item --log-compression=@var{type}
1459 Compresser les journaux de construction suivant le @var{type}, parmi
1460 @code{gzip}, @code{bzip2} ou @code{none}.
1461
1462 À moins que @code{--lose-logs} ne soit utilisé, tous les journaux de
1463 construction sont gardés dans @var{localstatedir}. Pour gagner de la place,
1464 le démon les compresse automatiquement avec bzip2 par défaut.
1465
1466 @item --disable-deduplication
1467 @cindex déduplication
1468 Désactiver la « déduplication » automatique des fichiers dans le dépôt.
1469
1470 Par défaut, les fichiers ajoutés au dépôt sont automatiquement « dédupliqués
1471 » : si un nouveau fichier est identique à un autre fichier trouvé dans le
1472 dépôt, le démon en fait un lien en dur vers l'autre fichier. Cela réduit
1473 considérablement l'utilisation de l'espace disque au prix d'une charge en
1474 entrée/sortie plus grande à la fin d'un processus de construction. Cette
1475 option désactive cette optimisation.
1476
1477 @item --gc-keep-outputs[=yes|no]
1478 Dire si le ramasse-miettes (GC) doit garder les sorties des dérivations
1479 utilisées.
1480
1481 @cindex racines du GC
1482 @cindex racines du ramasse-miettes
1483 When set to ``yes'', the GC will keep the outputs of any live derivation
1484 available in the store---the @code{.drv} files. The default is ``no'',
1485 meaning that derivation outputs are kept only if they are reachable from a
1486 GC root. @xref{Invoquer guix gc}, for more on GC roots.
1487
1488 @item --gc-keep-derivations[=yes|no]
1489 Dire si le ramasse-miettes (GC) doit garder les dérivations correspondant à
1490 des sorties utilisées.
1491
1492 Lorsqu'elle est à « yes », comme c'est le cas par défaut, le GC garde les
1493 dérivations — c.-à-d.@: les fichiers @file{.drv} — tant qu'au moins une de
1494 leurs sorties est utilisée. Cela permet aux utilisateurs de garder une
1495 trace de l'origine des éléments du dépôt. Le mettre à « no » préserve un
1496 peu d'espace disque.
1497
1498 In this way, setting @code{--gc-keep-derivations} to ``yes'' causes liveness
1499 to flow from outputs to derivations, and setting @code{--gc-keep-outputs} to
1500 ``yes'' causes liveness to flow from derivations to outputs. When both are
1501 set to ``yes'', the effect is to keep all the build prerequisites (the
1502 sources, compiler, libraries, and other build-time tools) of live objects in
1503 the store, regardless of whether these prerequisites are reachable from a GC
1504 root. This is convenient for developers since it saves rebuilds or
1505 downloads.
1506
1507 @item --impersonate-linux-2.6
1508 Sur les système basés sur Linux, se faire passer pour Linux 2.6. Cela
1509 signifie que l'appel système du noyau @code{uname} rapportera 2.6 comme
1510 numéro de version.
1511
1512 Cela peut être utile pour construire des programmes qui dépendent
1513 (généralement sans fondement) du numéro de version du noyau.
1514
1515 @item --lose-logs
1516 Ne pas garder les journaux de construction. Par défaut ils sont gardés dans
1517 @code{@var{localstatedir}/guix/log}.
1518
1519 @item --system=@var{système}
1520 Supposer que @var{système} est le type de système actuel. Par défaut c'est
1521 la paire architecture-noyau trouvée à la configuration, comme
1522 @code{x86_64-linux}.
1523
1524 @item --listen=@var{extrémité}
1525 Écouter les connexions sur @var{extrémité}. @var{extrémité} est interprété
1526 comme un nom de fichier d'un socket Unix-domain s'il commence par @code{/}
1527 (barre oblique). Sinon, @var{extrémité} est interprété comme un nom de
1528 domaine ou d'hôte et un port sur lequel écouter. Voici quelques exemples :
1529
1530 @table @code
1531 @item --listen=/gnu/var/daemon
1532 Écouter les connexions sur le socket Unix-domain @file{/gnu/var/daemon} en
1533 le créant si besoin.
1534
1535 @item --listen=localhost
1536 @cindex démon, accès distant
1537 @cindex accès distant au démon
1538 @cindex démon, paramètres de grappes
1539 @cindex grappes, paramètres du démon
1540 Écouter les connexions TCP sur l'interface réseau correspondant à
1541 @code{localhost} sur le port 44146.
1542
1543 @item --listen=128.0.0.42:1234
1544 Écouter les connexions TCP sur l'interface réseau correspondant à
1545 @code{128.0.0.42} sur le port 1234.
1546 @end table
1547
1548 Cette option peut être répétée plusieurs fois, auquel cas
1549 @command{guix-daemon} accepte des connexions sur toutes les extrémités
1550 spécifiées. Les utilisateurs peuvent dire aux commandes clientes à quelle
1551 extrémité se connecter en paramétrant la variable d'environnement
1552 @code{GUIX_DAEMON_SOCKET} (@pxref{Le dépôt, @code{GUIX_DAEMON_SOCKET}}).
1553
1554 @quotation Remarque
1555 Le protocole du démon est @emph{non authentifié et non chiffré}. Utiliser
1556 @code{--listen=@var{host}} est adapté sur des réseaux locaux, comme pour des
1557 grappes de serveurs, où seuls des nœuds de confiance peuvent se connecter au
1558 démon de construction. Dans les autres cas où l'accès à distance au démon
1559 est requis, nous conseillons d'utiliser un socket Unix-domain avec SSH@.
1560 @end quotation
1561
1562 Lorsque @code{--listen} est omis, @command{guix-daemon} écoute les
1563 connexions sur le socket Unix-domain situé à
1564 @file{@var{localstatedir}/guix/daemon-socket/socket}.
1565 @end table
1566
1567
1568 @node Réglages applicatifs
1569 @section Réglages applicatifs
1570
1571 @cindex distro extérieure
1572 Lorsque vous utilisez Guix par dessus une distribution GNU/Linux différente
1573 de GuixSD — ce qu'on appelle une @dfn{distro externe} — quelques étapes
1574 supplémentaires sont requises pour que tout soit en place. En voici
1575 certaines.
1576
1577 @subsection Régionalisation
1578
1579 @anchor{locales-and-locpath}
1580 @cindex régionalisation, en dehors de GuixSD
1581 @vindex LOCPATH
1582 @vindex GUIX_LOCPATH
1583 Les paquets installés @i{via} Guix n'utiliseront pas les données de
1584 régionalisation du système hôte. À la place, vous devrez d'abord installer
1585 l'un des paquets linguistiques disponibles dans Guix puis définir la
1586 variable d'environnement @code{GUIX_LOCPATH} :
1587
1588 @example
1589 $ guix package -i glibc-locales
1590 $ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
1591 @end example
1592
1593 Remarquez que le paquet @code{glibc-locales} contient les données pour tous
1594 les environnement linguistiques supportés par la GNU@tie{}libc et pèse
1595 environ 110@tie{}Mo. Autrement, les @code{glibc-utf8-locales} est plus
1596 petit mais limité à quelques environnements UTF-8.
1597
1598 La variable @code{GUIX_LOCPATH} joue un rôle similaire à @code{LOCPATH}
1599 (@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library Reference
1600 Manual}). Il y a deux différences importantes cependant :
1601
1602 @enumerate
1603 @item
1604 @code{GUIX_LOCPATH} n'est compris que par la libc dans Guix et pas par la
1605 libc fournie par les distros externes. Ainsi, utiliser @code{GUIX_LOCPATH}
1606 vous permet de vous assurer que les programmes de la distro externe ne
1607 chargeront pas de données linguistiques incompatibles.
1608
1609 @item
1610 La libc ajoute un suffixe @code{/X.Y} à chaque entrée de
1611 @code{GUIX_LOCPATH}, où @code{X.Y} est la version de la libc — p.@: ex.@:
1612 @code{2.22}. Cela signifie que, si votre profile Guix contient un mélange
1613 de programmes liés avec des versions différentes de la libc, chaque version
1614 de la libc essaiera de charger les environnements linguistiques dans le bon
1615 format.
1616 @end enumerate
1617
1618 Cela est important car le format des données linguistiques utilisés par
1619 différentes version de la libc peuvent être incompatibles.
1620
1621 @subsection Name Service Switch
1622
1623 @cindex name service switch, glibc
1624 @cindex NSS (name service switch), glibc
1625 @cindex nscd (name service caching daemon)
1626 @cindex name service caching daemon (nscd)
1627 Lorsque vous utilisez Guix sur une distro externe, nous @emph{recommandons
1628 fortement} que ce système fasse tourner le @dfn{démon de cache de service de
1629 noms} de la bibliothèque C de GNU, @command{nscd}, qui devrait écouter sur
1630 le socket @file{/var/run/nscd/socket}. Sans cela, les applications
1631 installées avec Guix peuvent échouer à résoudre des noms d'hôtes ou
1632 d'utilisateurs, ou même planter. Les paragraphes suivants expliquent
1633 pourquoi.
1634
1635 @cindex @file{nsswitch.conf}
1636 La bibliothèque C de GNU implémente un @dfn{name service switch} (NSS), qui
1637 est un mécanisme d'extension pour les « résolutions de noms » en général :
1638 résolution de nom d'hôte, de compte utilisateur et plus (@pxref{Name Service Switch,,, libc, The GNU C Library Reference Manual}).
1639
1640 @cindex Network information service (NIS)
1641 @cindex NIS (Network information service)
1642 Comme il est extensible, NSS supporte des @dfn{greffons} qui fournissent une
1643 nouvelle implémentation de résolution de nom : par exemple le greffon
1644 @code{nss-mdns} permet la résolution de noms d'hôtes en @code{.local}, le
1645 greffon @code{nis} permet la résolution de comptes utilisateurs avec le
1646 Network Information Service (NIS), etc. Ces « services de recherches »
1647 supplémentaires sont configurés au niveau du système dans
1648 @file{/etc/nsswitch.conf}, et tous les programmes qui tournent sur ce
1649 système honorent ces paramètres (@pxref{NSS Configuration File,,, libc, The
1650 GNU C Reference Manual})
1651
1652 Lorsqu'ils essayent d'effectuer une résolution de nom — par exemple en
1653 appelant la fonction @code{getaddrinfo} en C — les applications essayent
1654 d'abord de se connecter au nscd ; en cas de réussite, nscd effectue la
1655 résolution de nom pour eux. Si le nscd ne tourne pas, alors ils effectue la
1656 résolution eux-même, en changeant les service de résolution dans leur propre
1657 espace d'adressage et en le lançant. Ce services de résolution de noms —
1658 les fichiers @file{libnns_*.so} — sont @code{dlopen}és mais ils peuvent
1659 provenir de la bibliothèque C du système, plutôt que de la bibliothèque C à
1660 laquelle l'application est liée (la bibliothèque C de Guix).
1661
1662 Et c'est là que se trouve le problème : si votre application est liée à la
1663 bibliothèque C de Guix (disons, glibc-2.24) et essaye de charger les
1664 greffons NSS d'une autre bibliothèque C (disons, @code{libnss_mdns.so} pour
1665 glibc-2.22), il est très probable qu'elle plante ou que sa résolution de nom
1666 échoue de manière inattendue.
1667
1668 Lancer @command{nscd} sur le système, entre autres avantages, élimine ce
1669 problème d'incompatibilité binaire car ces fichiers @code{libnss_*.so} sont
1670 chargés par le processus @command{nscd}, pas par l'application elle-même.
1671
1672 @subsection Polices X11
1673
1674 @cindex polices
1675 La majorité des applications graphiques utilisent fontconfig pour trouver et
1676 charger les police et effectuer le rendu côté client X11. Le paquet
1677 @code{fontconfig} dans Guix cherche les polices dans
1678 @file{$HOME/.guix-profile} par défaut. Ainsi, pour permettre aux
1679 applications graphiques installées avec Guix d'afficher des polices, vous
1680 devez aussi installer des polices avec Guix. Les paquets de polices
1681 essentiels sont @code{gs-fonts}, @code{font-dejavu} et
1682 @code{font-gnu-freefont-ttf}.
1683
1684 Pour afficher des textes écrits en chinois, en japonais ou en coréen dans
1685 les applications graphiques, installez @code{font-adobe-source-han-sans} ou
1686 @code{font-wqy-zenhei}. Le premier a plusieurs sorties, une par famille de
1687 langue (@pxref{Des paquets avec plusieurs résultats}). Par exemple, la commande
1688 suivante installe les polices pour le chinois :
1689
1690 @example
1691 guix package -i font-adobe-source-han-sans:cn
1692 @end example
1693
1694 @cindex @code{xterm}
1695 Les vieux programmes comme @command{xterm} n'utilisent pas fontconfig et
1696 s'appuient sur le rendu du côté du serveur. Ces programmes ont besoin de
1697 spécifier le nom complet de la police en utlisant XLFD (X Logical Font
1698 Description), comme ceci :
1699
1700 @example
1701 -*-dejavu sans-medium-r-normal-*-*-100-*-*-*-*-*-1
1702 @end example
1703
1704 Pour pouvoir utiliser ces noms complets avec les polices TrueType installées
1705 dans votre profil Guix, vous devez étendre le chemin des polices du serveur
1706 X :
1707
1708 @c Note: 'xset' does not accept symlinks so the trick below arranges to
1709 @c get at the real directory. See <https://bugs.gnu.org/30655>.
1710 @example
1711 xset +fp $(dirname $(readlink -f ~/.guix-profile/share/fonts/truetype/fonts.dir))
1712 @end example
1713
1714 @cindex @code{xlsfonts}
1715 Ensuite, vous pouvez lancer @code{xlsfonts} (du paquet @code{xlsfonts}) pour
1716 vous assurer que vos polices TrueType y sont listées.
1717
1718 @cindex @code{fc-cache}
1719 @cindex cache de polices
1720 Après l'installation des polices vous devrez peut-être rafraîchir le cache
1721 des polices pour pouvoir les utiliser dans les applications. Ça s'applique
1722 aussi lorsque les applications installées avec Guix n'ont pas l'air de
1723 trouver les polices. Pour forcer la reconstruction du cache de polices
1724 lancez @code{fc-cache -f}. La commande @code{fc-cache} est fournie par le
1725 paquet @code{fontconfig}.
1726
1727 @subsection Certificats X.509
1728
1729 @cindex @code{nss-certs}
1730 Le paquet @code{nss-certs} fournit les certificats X.509 qui permettent aux
1731 programmes d'authentifier les serveurs web par HTTPS@.
1732
1733 Lorsque vous utilisez Guix sur une distribution externe, vous pouvez
1734 installer ce paquet et définir les variables d'environnement adéquates pour
1735 que les paquets sachent où trouver les certificats. @xref{Certificats X.509}, pour des informations détaillées.
1736
1737 @subsection Paquets emacs
1738
1739 @cindex @code{emacs}
1740 Lorsque vous installez les paquets Emacs avec Guix, les fichiers elisp
1741 peuvent être placés soit dans
1742 @file{$HOME/.guix-profile/share/emacs/site-lisp/} soit dans des
1743 sous-répertoires de
1744 @file{$HOME/.guix-profile/share/emacs/site-lisp/guix.d/}. Ce dernier existe
1745 car il existe potentiellement des milliers de paquets Emacs et stocker leurs
1746 fichiers dans un seul répertoire peut ne pas être fiable (à cause de
1747 conflits de noms). Donc on pense qu'utiliser un répertoire séparé est une
1748 bonne idée. C'est très similaire à la manière dont le système de paquet
1749 d'Emacs organise la structure de fichiers (@pxref{Package Files,,, emacs,
1750 The GNU Emacs Manual}).
1751
1752 Par défaut, Emacs (installé avec Guix) « sait » où ces paquets ce trouvent,
1753 donc vous n'avez pas besoin de le configurer. Si, pour quelque raison que
1754 ce soit, vous souhaitez éviter de charger automatiquement les paquets Emacs
1755 installés avec Guix, vous pouvez le faire en lançaint Emacs avec l'option
1756 @code{--no-site-file} (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
1757
1758 @subsection La chaîne d'outils GCC
1759
1760 @cindex GCC
1761 @cindex ld-wrapper
1762
1763 Guix offre des paquets de compilateurs individuels comme @code{gcc} mais si
1764 vous avez besoin d'une chaîne de compilation complète pour compiler et lier
1765 du code source, vous avez en fait besoin du paquet @code{gcc-toolchain}. Ce
1766 paquet fournit une chaîne d'outils GCC pour le développement C/C++, dont GCC
1767 lui-même, la bibliothèque C de GNU (les en-têtes et les binaires, plus les
1768 symboles de débogage dans la sortie @code{debug}), Binutils et une enveloppe
1769 pour l'éditeur de liens.
1770
1771 @cindex tentative d'utiliser une bibliothèque impure, message d'erreur
1772
1773 Le rôle de l'enveloppe est d'inspecter les paramètres @code{-L} et @code{-l}
1774 passés à l'éditeur de liens, d'ajouter des arguments @code{-rpath}
1775 correspondants et d'invoquer le véritable éditeur de liens avec ce nouvel
1776 ensemble d'arguments. Par défaut, l'enveloppe refuse de lier des
1777 bibliothèques en dehors du dépôt pour assure la « pureté ». Cela peut être
1778 embêtant lorsque vous utilisez la chaîne d'outils pour lier des
1779 bibliothèques locales. Pour permettre des références à des bibliothèques en
1780 dehors du dépôt, vous devrez définir la variable d'environnement
1781 @code{GUIX_LD_WRAPPER_ALLOW_IMPURITIES}.
1782
1783 @c TODO What else?
1784
1785 @c *********************************************************************
1786 @node Gestion de paquets
1787 @chapter Gestion de paquets
1788
1789 @cindex paquets
1790 Le but de GNU Guix est de permettre à ses utilisateurs d'installer, mettre à
1791 jour et supprimer facilement des paquets logiciels sans devoir connaître
1792 leur procédure de construction ou leurs dépendances. Guix va aussi plus
1793 loin que ces fonctionnalités évidentes.
1794
1795 Ce chapitre décrit les principales fonctionnalités de Guix, ainsi que des
1796 outils de gestion des paquets qu'il fournit. En plus de l'interface en
1797 ligne de commande décrite en dessous de (@pxref{Invoquer guix package,
1798 @code{guix package}}), vous pouvez aussi utiliser l'interface Emacs-Guix
1799 (@pxref{Top,,, emacs-guix, Le manuel de référence de emacs-guix}), après
1800 avoir installé le paquet @code{emacs-guix} (lancez la commande @kbd{M-x
1801 guix-help} pour le démarrer) :
1802
1803 @example
1804 guix package -i emacs-guix
1805 @end example
1806
1807 @menu
1808 * Fonctionnalités:: Comment Guix va rendre votre vie plus heureuse.
1809 * Invoquer guix package:: Installation, suppression, etc.@: de paquets.
1810 * Substituts:: Télécharger des binaire déjà construits.
1811 * Des paquets avec plusieurs résultats:: Un seul paquet source, plusieurs
1812 résultats.
1813 * Invoquer guix gc:: Lancer le ramasse-miettes.
1814 * Invoquer guix pull:: Récupérer la dernière version de Guix et de
1815 la distribution.
1816 * Invoquer guix pack:: Créer des lots de logiciels.
1817 * Invoquer guix archive:: Exporter et importer des fichiers du dépôt.
1818 @end menu
1819
1820 @node Fonctionnalités
1821 @section Fonctionnalités
1822
1823 Lorsque vous utilisez Guix, chaque paquet arrive dans @dfn{dépôt des
1824 paquets}, dans son propre répertoire — quelque chose comme
1825 @file{/gnu/store/xxx-paquet-1.2}, où @code{xxx} est une chaîne en base32.
1826
1827 Plutôt que de se rapporter à ces répertoires, les utilisateurs ont leur
1828 propre @dfn{profil} qui pointe vers les paquets qu'ils veulent vraiment
1829 utiliser. Ces profils sont stockés dans le répertoire personnel de chaque
1830 utilisateur dans @code{$HOME/.guix-profile}.
1831
1832 Par exemple, @code{alice} installe GCC 4.7.2. Il en résulte que
1833 @file{/home/alice/.guix-profile/bin/gcc} pointe vers
1834 @file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Maintenant, sur la même
1835 machine, @code{bob} a déjà intallé GCC 4.8.0. Le profil de @code{bob}
1836 continue simplement de pointer vers
1837 @file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc} — c.-à-d.@: les deux versions de
1838 GCC coexistent surs le même système sans aucune interférence.
1839
1840 La commande @command{guix package} est l'outil central pour gérer les
1841 paquets (@pxref{Invoquer guix package}). Il opère sur les profils
1842 utilisateurs et peut être utilisé avec les @emph{privilèges utilisateurs
1843 normaux}.
1844
1845 @cindex transactions
1846 La commande fournit les opérations évidentes d'installation, de suppression
1847 et de mise à jour. Chaque invocation est en fait une @emph{transaction} :
1848 soit l'opération demandée réussi, soit rien ne se passe. Ainsi, si le
1849 processus @command{guix package} est terminé pendant la transaction ou si
1850 une panne de courant arrive pendant la transaction, le profil de
1851 l'utilisateur reste dans son état précédent et reste utilisable.
1852
1853 En plus, il est possible @emph{d'annuler} toute transaction sur les
1854 paquets. Donc si par exemple un mise à jour installe une nouvelle version
1855 d'un paquet qui révèle un bogue sérieux, les utilisateurs peuvent revenir en
1856 arrière à l'instance précédente de leur profil qui est connu pour bien
1857 fonctionner. De manière similaire, la configuration globale du système dans
1858 GuixSD est sujette aux mises à jour transactionnelles et aux annulations
1859 (@pxref{Utiliser le système de configuration}).
1860
1861 Tous les paquets du dépôt des paquets peut être @emph{glané}. Guix peut
1862 déterminer quels paquets sont toujours référencés par les profils des
1863 utilisateurs et supprimer ceux qui ne sont plus référencés de manière
1864 prouvable (@pxref{Invoquer guix gc}). Les utilisateurs peuvent toujours
1865 explicitement supprimer les anciennes générations de leur profil pour que
1866 les paquets auxquels elles faisaient référence puissent être glanés.
1867
1868 @cindex reproductibilité
1869 @cindex constructions reproductibles
1870 Finalement, Guix prend une approche @dfn{purement fonctionnelle} de la
1871 gestion de paquets, telle que décrite dans l'introduction
1872 (@pxref{Introduction}). Chaque nom de répertoire de paquet dans
1873 @file{/gnu/store} contient un hash de toutes les entrées qui ont été
1874 utilisées pendant la construction de ce paquet — le compilateur, les
1875 bibliothèques, les scripts de construction, etc. Cette correspondance
1876 directe permet aux utilisateurs de s'assurer que l'installation d'un paquet
1877 donné correspond à l'état actuel de leur distribution. Elle aide aussi à
1878 maximiser la @dfn{reproductibilité} : grâce aux environnements de
1879 construction utilisés, une construction donnée à de forte chances de donner
1880 des fichiers identiques bit-à-bit lorsqu'elle est effectuée sur des machines
1881 différents (@pxref{Invoquer guix-daemon, container}).
1882
1883 @cindex substituts
1884 Ce fondement permet à Guix de supporter le @dfn{déploiement transparent de
1885 binaire ou source}. Lorsqu'une binaire pré-construit pour une entrée de
1886 @file{/gnu/store} est disponible depuis une source externe (un
1887 @dfn{substitut}), Guix le télécharge simplement et le décompresse ; sinon,
1888 il construit le paquet depuis les sources localement (@pxref{Substituts}).
1889 Comme les résultats des constructions sont généralement reproductibles au
1890 bit près, si vous n'avez pas besoin de faire confiance aux serveurs qui
1891 fournissent les substituts : vous pouvez forcer une construction locale et
1892 @emph{défier} les fournisseurs (@pxref{Invoquer guix challenge}).
1893
1894 Le contrôle de l'environnement de construction est aussi une fonctionnalité
1895 utile pour les développeurs. La commande @command{guix environment} permet
1896 aux développeurs d'un paquet de mettre en place rapidement le bon
1897 environnement de développement pour leur paquet, sans avoir à installer
1898 manuellement les dépendances du paquet dans leur profil (@pxref{Invoquer guix environment}).
1899
1900 @node Invoquer guix package
1901 @section Invoquer @command{guix package}
1902
1903 @cindex installer des paquets
1904 @cindex supprimer des paquets
1905 @cindex installation de paquets
1906 @cindex suppression de paquets
1907 La commande @command{guix package} est l'outil qui permet d'installer,
1908 mettre à jour et supprimer les paquets ainsi que de revenir à une
1909 configuration précédente. Elle n'opère que dans le profil de l'utilisateur
1910 et fonctionne avec les privilèges utilisateurs normaux
1911 (@pxref{Fonctionnalités}). Sa syntaxe est :
1912
1913 @example
1914 guix package @var{options}
1915 @end example
1916 @cindex transactions
1917 @var{options} spécifie d'abord les opérations à effectuer pendant la
1918 transaction. À la fin, une nouvelle génération du profil est créée mais les
1919 @dfn{générations} précédentes du profil restent disponibles si l'utilisateur
1920 souhaite y revenir.
1921
1922 Par exemple, pour supprimer @code{lua} et installer @code{guile} et
1923 @code{guile-cairo} en une seule transaction :
1924
1925 @example
1926 guix package -r lua -i guile guile-cairo
1927 @end example
1928
1929 @command{guix package} supporte aussi une @dfn{approche déclarative} où
1930 l'utilisateur spécifie l'ensemble exact des paquets qui doivent être
1931 disponibles le passe @i{via} l'option @option{--manifest}
1932 (@pxref{profile-manifest, @option{--manifest}}).
1933
1934 @cindex profil
1935 Pour chaque utilisateur, un lien symbolique vers le profil par défaut de cet
1936 utilisateur est automatiquement créé dans @file{$HOME/.guix-profile}. Ce
1937 lien symbolique pointe toujours vers la génération actuelle du profil par
1938 défaut de l'utilisateur. Ainsi, les utilisateurs peuvent ajouter
1939 @file{$HOME/.guix-profile/bin} à leur variable d'environnement @code{PATH}
1940 etc.
1941 @cindex chemins de recherche
1942 Si vous n'utilisez pas la distribution système Guix, vous devriez ajouter
1943 les lignes suivantes à votre @file{~/.bash_profile} (@pxref{Bash Startup
1944 Files,,, bash, The GNU Bash Reference Manual}) pour que les shells créés
1945 ensuite aient les bonnes définitions des variables d'environnement :
1946
1947 @example
1948 GUIX_PROFILE="$HOME/.guix-profile" ; \
1949 source "$HOME/.guix-profile/etc/profile"
1950 @end example
1951
1952 Dans un environnement multi-utilisateur, les profils utilisateurs sont
1953 stockés comme une @dfn{racine du ramasse-miettes}, vers laquelle pointe
1954 @file{$HOME/.guix-profile} (@pxref{Invoquer guix gc}). Ce répertoire est
1955 normalement
1956 @code{@var{localstatedir}/guix/profiles/per-user/@var{utilisateur}}, où
1957 @var{localstatedir} est la valeur passée à @code{configure} avec
1958 @code{--localstatedir} et @var{utilisateur} le nom d'utilisateur. Le
1959 répertoire @file{per-user} est créé lorsque @command{guix-daemon} est
1960 démarré et sous-répertoire @var{utilisateur} est créé par @command{guix
1961 package}.
1962
1963 Les @var{options} peuvent être les suivante :
1964
1965 @table @code
1966
1967 @item --install=@var{paquet} @dots{}
1968 @itemx -i @var{paquet} @dots{}
1969 Installer les @var{paquet}s spécifiés.
1970
1971 Chaque @var{paquet} peut spécifier soit un simple nom de paquet, comme
1972 @code{guile} ou un nom de paquet suivi d'un arobase et d'un numéro de
1973 version, comme @code{guile@@1.8.8} ou simplement @code{guile@@1.8} (dans ce
1974 dernier cas, la version la plus récente commençant par @code{1.8} est
1975 utilisée).
1976
1977 Si aucun numéro de version n'est spécifié, la version la plus récente
1978 disponible est choisie. En plus, @var{paquet} peut contenir un deux-points,
1979 suivi du nom d'une des sorties du paquet, comme dans @code{gcc:doc} ou
1980 @code{binutils@@2.22:lib} (@pxref{Des paquets avec plusieurs résultats}). Des
1981 paquets avec un nom correspondant et (éventuellement une version) sont
1982 recherchés dans les modules de la distribution GNU (@pxref{Modules de paquets}).
1983
1984 @cindex entrées propagées
1985 Parfois les paquets ont des @dfn{entrées propagées} : ce sont des
1986 dépendances qui sont installées automatiquement avec le paquet demandé
1987 (@pxref{package-propagated-inputs, @code{propagated-inputs} in
1988 @code{package} objects} pour plus d'informations sur les entrées propagées
1989 dans les définitions des paquets).
1990
1991 @anchor{package-cmd-propagated-inputs}
1992 Un exemple est la bibliothèque MPC de GNU : ses fichiers d'en-tête C se
1993 réfèrent à ceux de la bibliothèque MPFR de GNU, qui se réfèrent en retour à
1994 ceux de la bibliothèque GMP. Ainsi, lorsqu'on installe MPC, les
1995 bibliothèques MPFR et GMP sont aussi installées dans le profil ; supprimer
1996 MPC supprimera aussi MPFR et GMP — à moins qu'ils n'aient été aussi
1997 installés explicitement par l'utilisateur.
1998
1999 D'autre part, les paquets dépendent parfois de la définition de variables
2000 d'environnement pour leur chemin de recherche (voir les explications sur
2001 @code{--search-paths} plus bas). Toute définition de variable
2002 d'environnement manquante ou possiblement incorrecte est rapportée ici.
2003
2004 @item --install-from-expression=@var{exp}
2005 @itemx -e @var{exp}
2006 Installer le paquet évalué par @var{exp}
2007
2008 @var{exp} doit être une expression Scheme qui s'évalue en un objet
2009 @code{<package>}. Cette option est notamment utile pour distinguer les
2010 variantes d'un paquet avec le même nom, avec des expressions comme @code{(@@
2011 (gnu packages base) guile-final)}.
2012
2013 Remarquez que cette option installe la première sortie du paquet, ce qui
2014 peut être insuffisant lorsque vous avez besoin d'une sortie spécifique d'un
2015 paquet à plusieurs sorties.
2016
2017 @item --install-from-file=@var{fichier}
2018 @itemx -f @var{fichier}
2019 Installer le paquet évalué par le code dans le @var{fichier}.
2020
2021 Par exemple, @var{fichier} peut contenir une définition comme celle-ci
2022 (@pxref{Définition des paquets}) :
2023
2024 @example
2025 @verbatiminclude package-hello.scm
2026 @end example
2027
2028 Les développeurs peuvent trouver utile d'inclure un tel fichier
2029 @file{guix.scm} à la racine de l'arborescence des sources de leur projet qui
2030 pourrait être utilisé pour tester des versions de développement et créer des
2031 environnements de développement reproductibles (@pxref{Invoquer guix environment}).
2032
2033 @item --remove=@var{paquet} @dots{}
2034 @itemx -r @var{paquet} @dots{}
2035 Supprimer les @var{paquet}s spécifiés.
2036
2037 Comme pour @code{--install}, chaque @var{paquet} peut spécifier un numéro de
2038 version ou un nom de sortie en plus du nom du paquet. Par exemple, @code{-r
2039 glibc:debug} supprimerait la sortie @code{debug} de @code{glibc}.
2040
2041 @item --upgrade[=@var{regexp} @dots{}]
2042 @itemx -u [@var{regexp} @dots{}]
2043 @cindex mettre à jour des paquets
2044 Mettre à jour tous les paquets installés. Si une @var{regexp} ou plus est
2045 spécifiée, la mise à jour n'installera que les paquets dont le nom
2046 correspond à @var{regexp}. Voyez aussi l'option @code{--do-not-upgrade} en
2047 dessous.
2048
2049 Remarquez que cela met à jour vers la dernière version des paquets trouvée
2050 dans la distribution actuellement installée. Pour mettre à jour votre
2051 distribution, vous devriez lancer régulièrement @command{guix pull}
2052 (@pxref{Invoquer guix pull}).
2053
2054 @item --do-not-upgrade[=@var{regexp} @dots{}]
2055 Lorsqu'elle est utilisée avec l'option @code{--upgrade}, ne @emph{pas}
2056 mettre à jour les paquets dont le nom correspond à @var{regexp}. Par
2057 exemple, pour mettre à jour tous les paquets du profil actuel à l'exception
2058 de ceux qui contiennent la chaîne « emacs » :
2059
2060 @example
2061 $ guix package --upgrade . --do-not-upgrade emacs
2062 @end example
2063
2064 @item @anchor{profile-manifest}--manifest=@var{fichier}
2065 @itemx -m @var{fichier}
2066 @cindex déclaration de profil
2067 @cindex manifest de profil
2068 Créer une nouvelle génération du profil depuis l'objet manifeste renvoyé par
2069 le code Scheme dans @var{fichier}.
2070
2071 Cela vous permet de @emph{déclarer} le contenu du profil plutôt que de le
2072 construire avec une série de @code{--install} et de commandes similaires.
2073 L'avantage étant que le @var{fichier} peut être placé sous contrôle de
2074 version, copié vers d'autres machines pour reproduire le même profil, etc.
2075
2076 @c FIXME: Add reference to (guix profile) documentation when available.
2077 @var{fichier} doit retourner un objet @dfn{manifest} qui est en gros une
2078 liste de paquets :
2079
2080 @findex packages->manifest
2081 @example
2082 (use-package-modules guile emacs)
2083
2084 (packages->manifest
2085 (list emacs
2086 guile-2.0
2087 ;; Utiliser une sortie spécifique d'un paquet.
2088 (list guile-2.0 "debug")))
2089 @end example
2090
2091 @findex specifications->manifest
2092 Dans cet exemple on doit savoir quels modules définissent les variables
2093 @code{emacs} et @code{guile-2.0} pour fournir la bonne ligne
2094 @code{use-package-modules} ce qui peut être embêtant. On peut à la place
2095 fournir des spécifications de paquets normales et laisser
2096 @code{specifications->manifest} rechercher les objets de paquets
2097 correspondants, comme ceci :
2098
2099 @example
2100 (specifications->manifest
2101 '("emacs" "guile@@2.2" "guile@@2.2:debug"))
2102 @end example
2103
2104 @item --roll-back
2105 @cindex revenir en arrière
2106 @cindex défaire des transactions
2107 @cindex transactions, défaire
2108 Revenir à la @dfn{génération} précédente du profil c.-à-d.@: défaire la
2109 dernière transaction.
2110
2111 Lorsqu'elle est combinée avec des options comme @code{--install}, cette
2112 option revient en arrière avant toute autre action.
2113
2114 Lorsque vous revenez de la première génération qui contient des fichiers, le
2115 profil pointera vers la @dfn{zéroième génération} qui ne contient aucun
2116 fichier en dehors de ses propres métadonnées.
2117
2118 Après être revenu en arrière, l'installation, la suppression et la mise à
2119 jour de paquets réécrit les futures générations précédentes. Ainsi,
2120 l'historique des générations dans un profil est toujours linéaire.
2121
2122 @item --switch-generation=@var{motif}
2123 @itemx -S @var{motif}
2124 @cindex générations
2125 Basculer vers une génération particulière définie par le @var{motif}.
2126
2127 Le @var{motif} peut être soit un numéro de génération soit un nombre précédé
2128 de « + » ou « - ». Ce dernier signifie : se déplacer en avant ou en arrière
2129 d'un nombre donné de générations. Par exemple, si vous voulez retourner à
2130 la dernière génération après @code{--roll-back}, utilisez
2131 @code{--switch-generation=+1}.
2132
2133 La différence entre @code{--roll-back} et @code{--switch-generation=-1} est
2134 que @code{--switch-generation} ne vous amènera pas à la zéroième génération,
2135 donc si la génération demandée n'existe pas la génération actuelle ne
2136 changera pas.
2137
2138 @item --search-paths[=@var{genre}]
2139 @cindex chemins de recherche
2140 Rapporter les définitions des variables d'environnement dans la syntaxe Bash
2141 qui peuvent être requises pour utiliser l'ensemble des paquets installés.
2142 Ces variables d'environnement sont utilisées pour spécifier les @dfn{chemins
2143 de recherche} de fichiers utilisés par les paquets installés.
2144
2145 Par exemple, GCC a besoin des variables d'environnement @code{CPATH} et
2146 @code{LIBRARY_PATH} pour trouver les en-têtes et les bibliothèques dans le
2147 profil de l'utilisateur (@pxref{Environment Variables,,, gcc, Using the GNU
2148 Compiler Collection (GCC)}). Si GCC et, disons, la bibliothèque C sont
2149 installés dans le profil, alors @code{--search-paths} suggérera
2150 d'initialiser ces variables à @code{@var{profil}/include} et
2151 @code{@var{profil}/lib}, respectivement.
2152
2153 Le cas d'utilisation typique est de définir ces variables d'environnement
2154 dans le shell :
2155
2156 @example
2157 $ eval `guix package --search-paths`
2158 @end example
2159
2160 @var{genre} peut être l'une des valeurs @code{exact}, @code{prefix} ou
2161 @code{suffix}, ce qui signifie que les définitions des variables
2162 d'environnement retournées seront soit les paramètres exactes, ou placés
2163 avant ou après la valeur actuelle de ces paramètres. Lorsqu'il est omis,
2164 @var{genre} a pour valeur par défaut @code{exact}.
2165
2166 Cette option peut aussi être utilisé pour calculer les chemins de recherche
2167 @emph{combinés} de plusieurs profils. Regardez cet exemple :
2168
2169 @example
2170 $ guix package -p foo -i guile
2171 $ guix package -p bar -i guile-json
2172 $ guix package -p foo -p bar --search-paths
2173 @end example
2174
2175 La dernière commande ci-dessus montre la variable @code{GUILE_LOAD_PATH}
2176 bien que, pris individuellement, ni @file{foo} ni @file{bar} n'auraient
2177 donné cette recommendation.
2178
2179
2180 @item --profile=@var{profil}
2181 @itemx -p @var{profil}
2182 Utiliser le @var{profil} à la place du profil par défaut de l'utilisateur.
2183
2184 @cindex collisions, dans un profil
2185 @cindex faire des collisions de paquets dans des profils
2186 @cindex profil, collisions
2187 @item --allow-collisions
2188 Permettre des collisions de paquets dans le nouveau profil. À utiliser à
2189 vos risques et périls !
2190
2191 Par défaut, @command{guix package} rapporte les @dfn{collisions} dans le
2192 profil comme des erreurs. Les collisions ont lieu quand deux version ou
2193 variantes d'un paquet donné se retrouvent dans le profil.
2194
2195 @item --verbose
2196 Produire une sortie verbeuse. En particulier, fournir les journaux de
2197 construction de l'environnement sur le port d'erreur standard.
2198
2199 @item --bootstrap
2200 Utiliser le programme d'amorçage Guile pour compiler le profil. Cette
2201 option n'est utile que pour les développeurs de la distriibution.
2202
2203 @end table
2204
2205 En plus de ces actions, @command{guix package} supporte les options
2206 suivantes pour demander l'état actuel d'un profil ou la disponibilité des
2207 paquets :
2208
2209 @table @option
2210
2211 @item --search=@var{regexp}
2212 @itemx -s @var{regexp}
2213 @cindex chercher des paquets
2214 Lister les paquets disponibles dont le nom, le synopsis ou la description
2215 correspondent à la @var{regexp}, triés par pertinence. Afficher toutes les
2216 métadonnées des paquets correspondants au format @code{recutils}
2217 (@pxref{Top, GNU recutils databases,, recutils, GNU recutils manual}).
2218
2219 Cela permet à des champs spécifiques d'être extraits avec la commande
2220 @command{recsel}, par exemple :
2221
2222 @example
2223 $ guix package -s malloc | recsel -p name,version,relevance
2224 name: jemalloc
2225 version: 4.5.0
2226 relevance: 6
2227
2228 name: glibc
2229 version: 2.25
2230 relevance: 1
2231
2232 name: libgc
2233 version: 7.6.0
2234 relevance: 1
2235 @end example
2236
2237 De manière similaire, pour montrer le nom de tous les paquets disponibles
2238 sous license GNU@tie{}LGPL version 3 :
2239
2240 @example
2241 $ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
2242 name: elfutils
2243
2244 name: gmp
2245 @dots{}
2246 @end example
2247
2248 Il est aussi possible de raffiner les résultats de la recherche avec
2249 plusieurs options @code{-s}. Par exemple, la commande suivante renvoie la
2250 liste des jeux de plateau :
2251
2252 @example
2253 $ guix package -s '\<board\>' -s game | recsel -p name
2254 name: gnubg
2255 @dots{}
2256 @end example
2257
2258 Si on avait oublié @code{-s game}, on aurait aussi eu les paquets logiciels
2259 qui s'occupent de circuits imprimés (en anglais : circuit board) ; supprimer
2260 les chevrons autour de @code{board} aurait aussi ajouté les paquets qui
2261 parlent de clavier (en anglais : key@emph{board}).
2262
2263 Et maintenant un exemple plus élaboré. La commande suivante recherche les
2264 bibliothèques cryptographiques, retire les bibliothèques Haskell, Perl,
2265 Python et Ruby et affiche le nom et le synopsis des paquets correspondants :
2266
2267 @example
2268 $ guix package -s crypto -s library | \
2269 recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
2270 @end example
2271
2272 @noindent
2273 @xref{Selection Expressions,,, recutils, GNU recutils manual} pour plus
2274 d'information sur les @dfn{expressions de sélection} pour @code{recsel -e}.
2275
2276 @item --show=@var{paquet}
2277 Afficher les détails du @var{paquet} dans la liste des paquets disponibles,
2278 au format @code{recutils} (@pxref{Top, GNU recutils databases,, recutils,
2279 GNU recutils manual}).
2280
2281 @example
2282 $ guix package --show=python | recsel -p name,version
2283 name: python
2284 version: 2.7.6
2285
2286 name: python
2287 version: 3.3.5
2288 @end example
2289
2290 Vous pouvez aussi spécifier le nom complet d'un paquet pour n'avoir que les
2291 détails concernant une version spécifique :
2292 @example
2293 $ guix package --show=python@@3.4 | recsel -p name,version
2294 name: python
2295 version: 3.4.3
2296 @end example
2297
2298
2299
2300 @item --list-installed[=@var{regexp}]
2301 @itemx -I [@var{regexp}]
2302 Liste les paquets actuellement installés dans le profil spécifié, avec les
2303 paquets les plus récemment installés en dernier. Lorsque @var{regexp} est
2304 spécifié, liste uniquement les paquets installés dont le nom correspond à
2305 @var{regexp}.
2306
2307 Pour chaque paquet installé, affiche les éléments suivants, séparés par des
2308 tabulations : le nom du paquet, sa version, la partie du paquet qui est
2309 installé (par exemple, @code{out} pour la sortie par défaut, @code{include}
2310 pour ses en-têtes, etc) et le chemin du paquet dans le dépôt.
2311
2312 @item --list-available[=@var{regexp}]
2313 @itemx -A [@var{regexp}]
2314 Lister les paquets actuellement disponibles dans la distribution pour ce
2315 système (@pxref{Distribution GNU}). Lorsque @var{regexp} est spécifié,
2316 liste uniquement les paquets dont le nom correspond à @var{regexp}.
2317
2318 Pour chaque paquet, affiche les éléments suivants séparés par des
2319 tabulations : son nom, sa version, les parties du paquet (@pxref{Des paquets avec plusieurs résultats}), et l'emplacement de sa définition.
2320
2321 @item --list-generations[=@var{motif}]
2322 @itemx -l [@var{motif}]
2323 @cindex générations
2324 Renvoyer la liste des générations avec leur date de création ; pour chaque
2325 génération, montre les paquets installés avec les paquets installés les plus
2326 récemment en dernier. Remarquez que la zéroième génération n'est jamais
2327 montrée.
2328
2329 Pour chaque paquet installé, afficher les éléments suivants, séparés par des
2330 tabulations : le nom du paquet, sa version, la partie du paquet qui a été
2331 installée (@pxref{Des paquets avec plusieurs résultats}), et l'emplacement du
2332 paquet dans le dépôt.
2333
2334 Lorsque @var{motif} est utilisé, la commande ne renvoie que les générations
2335 correspondantes. Les motifs valides sont :
2336
2337 @itemize
2338 @item @emph{Des entiers et des entiers séparés par des virgules}. Les deux motifs correspondent
2339 à des numéros de version. Par exemple, @code{--list-generations=1} renvoie
2340 la première.
2341
2342 Et @code{--list-generations=1,8,2} renvoie les trois générations dans
2343 l'ordre spécifié. Aucune espace ni virgule surnuméraire n'est permise.
2344
2345 @item @emph{Des interval}. @code{--list-generations=2..9} affiche les
2346 générations demandées et tout ce qui se trouvent entre elles. Remarquez que
2347 le début d'un interval doit être plus petit que sa fin.
2348
2349 Il est aussi possible d'omettre le numéro final. Par exemple,
2350 @code{--list-generations=2..} renvoie toutes les générations à partir de la
2351 deuxième.
2352
2353 @item @emph{Des durées}. Vous pouvez aussi récupérer les derniers @emph{N}@tie{}jours, semaines,
2354 ou moins en passant un entier avec la première lettre de la durée (en
2355 anglais : d, w ou m). Par exemple @code{--list-generations=20d} liste les
2356 générations qui sont agées d'au plus 20 jours.
2357 @end itemize
2358
2359 @item --delete-generations[=@var{motif}]
2360 @itemx -d [@var{motif}]
2361 Lorsque @var{motif} est omis, supprimer toutes les générations en dehors de
2362 l'actuelle.
2363
2364 Cette commande accepte les même motifs que @option{--list-generations}.
2365 Lorsque @var{motif} est spécifié, supprimer les générations correspondante.
2366 Lorsque @var{motif} spécifie une durée, les générations @emph{plus vieilles}
2367 que la durée spécifiée correspondent. Par exemple
2368 @code{--delete-generations=1m} supprime les générations vieilles de plus
2369 d'un mois.
2370
2371 Si la génération actuelle correspond, elle n'est @emph{pas} supprimée. La
2372 zéroième génération n'est elle non plus jamais supprimée.
2373
2374 Remarquez que supprimer des générations empêche de revenir en arrière vers
2375 elles. Ainsi, cette commande doit être utilisée avec précaution.
2376
2377 @end table
2378
2379 Enfin, comme @command{guix package} peut démarrer des processus de
2380 construction, elle supporte les options de construction communes
2381 (@pxref{Options de construction communes}). Elle supporte aussi les options de
2382 transformation de paquets comme @option{--with-source} (@pxref{Options de transformation de paquets}). Cependant, remarquez que les transformations de
2383 paquets sont perdues à la mise à jour ; pour les préserver à travers les
2384 mises à jours, vous devriez définir vos propres variantes des paquets dans
2385 une module Guile et l'ajouter à @code{GUIX_PACKAGE_PATH} (@pxref{Définition des paquets}).
2386
2387 @node Substituts
2388 @section Substituts
2389
2390 @cindex substituts
2391 @cindex binaires pré-construits
2392 Guix gère le déploiement depuis des binaires ou des sources de manière
2393 transparente ce qui signifie qu'il peut aussi bien construire localement que
2394 télécharger des éléments pré-construits depuis un serveur ou les deux. Nous
2395 appelons ces éléments pré-construits des @dfn{substituts} — ils se
2396 substituent aux résultats des constructions locales. Dans la plupart des
2397 cas, télécharger un substitut est bien plus rapide que de construire les
2398 choses localement.
2399
2400 Les substituts peuvent être tout ce qui résulte d'une construction de
2401 dérivation (@pxref{Dérivations}). Bien sûr dans le cas général, il s'agit
2402 de paquets binaires pré-construits, mais les archives des sources par
2403 exemple résultent aussi de la construction d'une dérivation qui peut aussi
2404 être disponible en tant que substitut.
2405
2406 @menu
2407 * Serveur de substituts officiel:: Une source particulière de substituts.
2408 * Autoriser un serveur de substituts:: Comment activer ou désactiver les
2409 substituts.
2410 * Authentification des substituts:: Coment Guix vérifie les substituts.
2411 * Paramètres de serveur mandataire:: Comment récupérer des substituts à
2412 travers un serveur mandataire.
2413 * Échec de substitution:: Qu'arrive-t-il quand la substitution échoue.
2414 * De la confiance en des binaires:: Comment pouvez-vous avoir confiance en
2415 un paquet binaire ?
2416 @end menu
2417
2418 @node Serveur de substituts officiel
2419 @subsection Serveur de substituts officiel
2420
2421 @cindex hydra
2422 @cindex ferme de construction
2423 Le serveur @code{mirror.hydra.gnu.org} est une interface à la ferme de
2424 construction officielle qui construit des paquets pour Guix continuellement
2425 pour certaines architectures et les rend disponibles en tant que
2426 substituts. C'est la source par défaut des substituts ; elle peut être
2427 modifiée en passant l'option @option{--substitute-urls} soit à
2428 @command{guix-daemon} (@pxref{daemon-substitute-urls,, @code{guix-daemon
2429 --substitute-urls}}) soit aux outils clients comme @command{guix package}
2430 (@pxref{client-substitute-urls,, client @option{--substitute-urls} option}).
2431
2432 Les URL des substituts peuvent être soit en HTTP soit en HTTPS. Le HTTPS
2433 est recommandé parce que les communications sont chiffrées ; à l'inverse
2434 HTTP rend les communications visibles pour un espion qui peut utiliser les
2435 informations accumulées sur vous pour déterminer par exemple si votre
2436 système a des vulnérabilités de sécurités non corrigées.
2437
2438 Les substituts de la ferme de construction officielle sont activés par
2439 défaut dans la distribution système Guix (@pxref{Distribution GNU}).
2440 Cependant, ils sont désactivés par défaut lorsque vous utilisez Guix sur une
2441 distribution externe, à moins que vous ne les ayez explicitement activés via
2442 l'une des étapes d'installation recommandées (@pxref{Installation}). Les
2443 paragraphes suivants décrivent comment activer ou désactiver les substituts
2444 de la ferme de construction ; la même procédure peut être utilisée pour
2445 activer les substituts de n'importe quel autre serveur de substituts.
2446
2447 @node Autoriser un serveur de substituts
2448 @subsection Autoriser un serveur de substituts
2449
2450 @cindex sécurité
2451 @cindex substituts, autorisations
2452 @cindex liste de contrôle d'accès (ACL), pour les substituts
2453 @cindex ACL (liste de contrôle d'accès), pour les substituts
2454 Pour permettre à Guix de télécharger les substituts depuis
2455 @code{hydra.gnu.org} ou un mirroir, vous devez ajouter sa clef publique à la
2456 liste de contrôle d'accès (ACL) des imports d'archives, avec la commande
2457 @command{guix archive} (@pxref{Invoquer guix archive}). Cela implique que
2458 vous faîtes confiance à @code{hydra.gnu.org} pour ne pas être compromis et
2459 vous servir des substituts authentiques.
2460
2461 La clef publique pour @code{hydra.gnu.org} est installée avec Guix, dans
2462 @code{@var{préfixe}/share/guix/hydra.gnu.org.pub}, où @var{préfixe} est le
2463 préfixe d'installation de Guix. Si vous avez installé Guix depuis les
2464 sources, assurez-vous d'avoir vérifié la signature GPG de
2465 @file{guix-@value{VERSION}.tar.gz} qui contient ce fichier de clef
2466 publique. Ensuite vous pouvez lancer quelque chose comme ceci :
2467
2468 @example
2469 # guix archive --authorize < @var{préfixe}/share/guix/hydra.gnu.org.pub
2470 @end example
2471
2472 @quotation Remarque
2473 De même, le fichier @file{berlin.guixsd.org.pub} contient la clef publique
2474 de la nouvelle ferme de construction du projet, disponible depuis
2475 @indicateurl{https://berlin.guixsd.org}.
2476
2477 Au moment où ces lignes sont écrites, @code{berlin.guixsd.org} est mis à
2478 niveau pour mieux passer à l'échelle, mais vous pourriez vouloir le tester.
2479 Il est associé à 20 nœuds de construction x86_64/i686 et pourrait fournir
2480 des substituts plus rapidement que @code{mirror.hydra.gnu.org}
2481 @end quotation
2482
2483 Une fois que cela est en place, la sortie d'une commande comme @code{guix
2484 build} devrait changer de quelque chose comme :
2485
2486 @example
2487 $ guix build emacs --dry-run
2488 Les dérivations suivantes seraient construites :
2489 /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
2490 /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
2491 /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
2492 /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
2493 @dots{}
2494 @end example
2495
2496 @noindent
2497 à quelque chose comme :
2498
2499 @example
2500 $ guix build emacs --dry-run
2501 112.3 Mo seraient téléchargés :
2502 /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
2503 /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
2504 /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
2505 /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
2506 @dots{}
2507 @end example
2508
2509 @noindent
2510 Cela indique que les substituts de @code{hydra.gnu.org} sont utilisables et
2511 seront téléchargés, si possible, pour les futures constructions.
2512
2513 @cindex substituts, comment les désactiver
2514 Le mécanisme de substitution peut être désactivé globalement en lançant
2515 @code{guix-daemon} avec @code{--no-substitutes} (@pxref{Invoquer guix-daemon}). Il peut aussi être désactivé temporairement en passant
2516 l'option @code{--no-substitutes} à @command{guix package}, @command{guix
2517 build} et aux autres outils en ligne de commande.
2518
2519 @node Authentification des substituts
2520 @subsection Authentification des substituts
2521
2522 @cindex signatures numériques
2523 Guix détecte et lève une erreur lorsqu'il essaye d'utiliser un substituts
2524 qui a été modifié. De même, il ignore les substituts qui ne sont pas signés
2525 ou qui ne sont pas signés par l'une des clefs listés dans l'ACL.
2526
2527 Il y a une exception cependant : si un serveur non autorisé fournit des
2528 substituts qui sont @emph{identiques bit-à-bit} à ceux fournis par un
2529 serveur autorisé, alors le serveur non autorisé devient disponible pour les
2530 téléchargements. Par exemple en supposant qu'on a choisi deux serveurs de
2531 substituts avec cette option :
2532
2533 @example
2534 --substitute-urls="https://a.example.org https://b.example.org"
2535 @end example
2536
2537 @noindent
2538 @cindex constructions reproductibles
2539 Si l'ACL contient uniquement la clef de @code{b.example.org}, et si
2540 @code{a.example.org} sert @emph{exactement les mêmes} substituts, alors Guix
2541 téléchargera les substituts de @code{a.example.org} parce qu'il vient en
2542 premier dans la liste et peut être considéré comme un mirroir de
2543 @code{b.example.org}. En pratique, des machines de constructions produisent
2544 souvent les mêmes binaires grâce à des construction reproductibles au bit
2545 près (voir plus bas).
2546
2547 Lorsque vous utilisez HTTPS, le certificat X.509 du serveur n'est @emph{pas}
2548 validé (en d'autre termes, le serveur n'est pas authentifié), contrairement
2549 à ce que des clients HTTPS comme des navigateurs web font habituellement.
2550 Cela est dû au fait que Guix authentifie les informations sur les substituts
2551 eux-même, comme expliqué plus haut, ce dont on se soucie réellement (alors
2552 que les certificats X.509 authentifie la relation entre nom de domaine et
2553 clef publique).
2554
2555 @node Paramètres de serveur mandataire
2556 @subsection Paramètres de serveur mandataire
2557
2558 @vindex http_proxy
2559 Les substituts sont téléchargés par HTTP ou HTTPS. La variable
2560 d'environnement @code{http_proxy} peut être initialisée dans l'environnement
2561 de @command{guix-daemon} et est respectée pour le téléchargement des
2562 substituts. Remarquez que la valeur de @code{http_proxy} dans
2563 l'environnement où tournent @command{guix build}, @command{guix package} et
2564 les autres clients n'a @emph{absolument aucun effet}.
2565
2566 @node Échec de substitution
2567 @subsection Échec de substitution
2568
2569 Même lorsqu'un substitut pour une dérivation est disponible, la substitution
2570 échoue parfois. Cela peut arriver pour plusieurs raisons : le serveur de
2571 substitut peut être hors ligne, le substitut a récemment été supprimé du
2572 serveur, la connexion peut avoir été interrompue, etc.
2573
2574 Lorsque les substituts sont activés et qu'un substitut pour une dérivation
2575 est disponible, mais que la tentative de substitution échoue, Guix essaiera
2576 de construire la dérivation localement si @code{--fallback} a été passé en
2577 argument (@pxref{option de repli,, common build option @code{--fallback}}).
2578 Plus spécifiquement, si cet option n'a pas été passée en argument, alors
2579 aucune construction locale n'est effectuée et la dérivation est considérée
2580 comme étant en échec. Cependant, si @code{--fallback} est passé en argument,
2581 alors Guix essaiera de construire la dérivation localement et l'échec ou le
2582 succès de la dérivation dépend de l'échec ou du succès de la construction
2583 locale. Remarquez que lorsque les substituts sont désactivés ou qu'aucun
2584 substitut n'est disponible pour la dérivation en question, une construction
2585 locale sera @emph{toujours} effectuée, indépendamment du fait que l'argument
2586 @code{--fallback} ait été ou non passé.
2587
2588 Pour se donner une idée du nombre de substituts disponibles maintenant, vous
2589 pouvez essayer de lancer la commande @command{guix weather} (@pxref{Invoquer guix weather}). Cette command fournit des statistiques sur les substituts
2590 fournis par un serveur.
2591
2592 @node De la confiance en des binaires
2593 @subsection De la confiance en des binaires
2594
2595 @cindex confiance, en des binaires pré-construits
2596 De nos jours, le contrôle individuel sur son utilisation propre de
2597 l'informatique est à la merci d'institutions, de sociétés et de groupes avec
2598 assez de pouvoir et de détermination pour contourner les infrastructures
2599 informatiques et exploiter leurs faiblesses. Bien qu'utiliser les
2600 substituts de @code{hydra.gnu.org} soit pratique, nous encourageons les
2601 utilisateurs à construire aussi par eux-même, voir à faire tourner leur
2602 propre ferme de construction, pour que @code{hydra.gnu.org} devienne une
2603 cible moins intéressante. Une façon d'aider est de publier les logiciels
2604 que vous construisez avec @command{guix publish} pour que les autres aient
2605 plus de choix de serveurs où télécharger les substituts (@pxref{Invoquer guix publish}).
2606
2607 Guix possède les fondations pour maximiser la reproductibilité logicielle
2608 (@pxref{Fonctionnalités}). Dans la plupart des cas, des constructions
2609 indépendantes d'un paquet donnée ou d'une dérivation devrait donner des
2610 résultats identiques au bit près. Ainsi, à travers un ensemble de
2611 constructions de paquets indépendantes il est possible de renforcer
2612 l'intégrité du système. La commande @command{guix challenge} a pour but
2613 d'aider les utilisateurs à tester les serveurs de substituts et à aider les
2614 développeurs à trouver les constructions de paquets non-déterministes
2615 (@pxref{Invoquer guix challenge}). De même, l'option @option{--check} de
2616 @command{guix build} permet aux utilisateurs de vérifier si les substituts
2617 précédemment installés sont authentiques en les reconstruisant localement
2618 (@pxref{vérification de la construction, @command{guix build --check}}).
2619
2620 Dans le futur, nous aimerions que Guix puisse publier et recevoir des
2621 binaires d'autres utilisateurs, d'une manière pair-à-pair. Si vous voulez
2622 discuter de ce projet, rejoignez-nous sur @email{guix-devel@@gnu.org}.
2623
2624 @node Des paquets avec plusieurs résultats
2625 @section Des paquets avec plusieurs résultats
2626
2627 @cindex paquets avec plusieurs résultats
2628 @cindex sorties de paquets
2629 @cindex sorties
2630
2631 Souvent, les paquets définis dans Guix ont une seule @dfn{sortie} —
2632 c.-à-d.@: que le paquet source conduit à exactement un répertoire dans le
2633 dépôt. Lorsque vous lancez @command{guix package -i glibc}, vous installez
2634 la sortie par défaut du paquet GNU libc ; la sortie par défaut est appelée
2635 @code{out} mais son nom peut être omis comme le montre cette commande. Dans
2636 ce cas particuliers, la sortie par défaut de @code{glibc} contient tous les
2637 fichiers d'en-tête C, les bibliothèques partagées, les bibliothèques
2638 statiques, la documentation Info et les autres fichiers de support.
2639
2640 Parfois il est plus approprié de séparer les divers types de fichiers
2641 produits par un même paquet source en plusieurs sorties. Par exemple, la
2642 bibliothèque C GLib (utilisée par GTK+ et des paquets associés) installe
2643 plus de 20 Mo de documentation de référence dans des pages HTML. Pour
2644 préserver l'espace disque des utilisateurs qui n'en ont pas besoin, la
2645 documentation va dans une sortie séparée nommée @code{doc}. Pour installer
2646 la sortie principale de GLib, qui contient tout sauf la documentation, on
2647 devrait lancer :
2648
2649 @example
2650 guix package -i glib
2651 @end example
2652
2653 @cindex documentation
2654 La commande pour installer la documentation est :
2655
2656 @example
2657 guix package -i glib:doc
2658 @end example
2659
2660 Certains paquets installent des programmes avec des « empreintes dépendances
2661 » différentes. Par exemple le paquet WordNet installe à la fois les outils
2662 en ligne de commande et les interfaces graphiques (GUI). La première ne
2663 dépend que de la bibliothèque C, alors que cette dernière dépend de Tcl/Tk
2664 et des bibliothèques X sous-jacentes. Dans ce cas, nous laissons les outils
2665 en ligne de commande dans la sortie par défaut et l'interface graphique dans
2666 une sortie séparée. Cela permet aux utilisateurs qui n'ont pas besoin
2667 d'interface graphique de gagner de la place. La commande @command{guix
2668 size} peut aider à trouver ces situations (@pxref{Invoquer guix size}). @command{guix graph} peut aussi être utile (@pxref{Invoquer guix graph}).
2669
2670 Il y a plusieurs paquets à sorties multiples dans la distribution GNU.
2671 D'autres noms de sorties conventionnels sont @code{lib} pour les
2672 bibliothèques et éventuellement les fichiers d'en-tête, @code{bin} pour les
2673 programmes indépendants et @code{debug} pour les informations de débogage
2674 (@pxref{Installer les fichiers de débogage}). Les sorties d'un paquet sont listés
2675 dans la troisième colonne de la sortie de @command{guix package
2676 --list-available} (@pxref{Invoquer guix package}).
2677
2678
2679 @node Invoquer guix gc
2680 @section Invoquer @command{guix gc}
2681
2682 @cindex ramasse-miettes
2683 @cindex espace disque
2684 Les paquets qui sont installés mais pas utilisés peuvent être @dfn{glanés}.
2685 La commande @command{guix gc} permet aux utilisateurs de lancer
2686 explicitement le ramasse-miettes pour récupérer de l'espace dans le
2687 répertoire @file{/gnu/store}. C'est la @emph{seule} manière de supprimer
2688 des fichiers de @file{/gnu/store} — supprimer des fichiers ou des
2689 répertoires à la main peut le casser de manière impossible à réparer !
2690
2691 @cindex racines du GC
2692 @cindex racines du ramasse-miettes
2693 Le ramasse-miettes a un ensemble de @dfn{racines} connues : tout fichier
2694 dans @file{/gnu/store} atteignable depuis une racine est considéré comme
2695 @dfn{utilisé} et ne peut pas être supprimé ; tous les autres fichiers sont
2696 considérés comme @dfn{inutilisés} et peuvent être supprimés. L'ensemble des
2697 racines du ramasse-miettes (ou « racines du GC » pour faire court) inclue
2698 les profils par défaut des utilisateurs ; par défaut les liens symboliques
2699 sous @file{/var/guix/gcroots} représentent ces racines du GC. De nouvelles
2700 racines du GC peuvent être ajoutées avec la @command{guix build -- root} par
2701 exemple (@pxref{Invoquer guix build}).
2702
2703 Avant de lancer @code{guix gc --collect-garbage} pour faire de la place,
2704 c'est souvent utile de supprimer les anciennes génération des profils
2705 utilisateurs ; de cette façon les anciennes constructions de paquets
2706 référencées par ces générations peuvent être glanées. Cela se fait en
2707 lançaint @code{guix package --delete-generations} (@pxref{Invoquer guix package}).
2708
2709 Nous recommandons de lancer le ramasse-miettes régulièrement ou lorsque vous
2710 avez besoin d'espace disque. Par exemple pour garantir qu'au moins
2711 5@tie{}Go d'espace reste libre sur votre disque, lancez simplement :
2712
2713 @example
2714 guix gc -F 5G
2715 @end example
2716
2717 Il est parfaitement possible de le lancer comme une tâche périodique
2718 non-interactive (@pxref{Exécution de tâches planifiées} pour apprendre comment
2719 paramétrer une telle tâche sur GuixSD). Lancer @command{guix gc} sans
2720 argument ramassera autant de miettes que possible mais ça n'est pas le plus
2721 pratique : vous pourriez vous retrouver à reconstruire ou re-télécharger des
2722 logiciels « inutilisés » du point de vu du GC mais qui sont nécessaires pour
2723 construire d'autres logiciels — p.@: ex.@: la chaîne de compilation.
2724
2725 La command @command{guix gc} a trois modes d'opération : il peut être
2726 utilisé pour glaner des fichiers inutilisés (par défaut), pour supprimer des
2727 fichiers spécifiques (l'option @code{--delete}), pour afficher des
2728 informations sur le ramasse-miettes ou pour des requêtes plus avancées. Les
2729 options du ramasse-miettes sont :
2730
2731 @table @code
2732 @item --collect-garbage[=@var{min}]
2733 @itemx -C [@var{min}]
2734 Ramasse les miettes — c.-à-d.@: les fichiers inaccessibles de
2735 @file{/gnu/store} et ses sous-répertoires. C'est l'opération par défaut
2736 lorsqu'aucune option n'est spécifiée.
2737
2738 Lorsque @var{min} est donné, s'arrêter une fois que @var{min} octets ont été
2739 collectés. @var{min} pour être un nombre d'octets ou inclure un suffixe
2740 d'unité, comme @code{MiB} pour mébioctet et @code{GB} pour gigaoctet
2741 (@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
2742
2743 Lorsque @var{min} est omis, tout glaner.
2744
2745 @item --free-space=@var{libre}
2746 @itemx -F @var{libre}
2747 Glaner jusqu'à ce que @var{libre} espace soit disponible dans
2748 @file{/gnu/store} si possible ; @var{libre} est une quantité de stockage
2749 comme @code{500MiB} comme décrit ci-dessus.
2750
2751 Lorsque @var{libre} ou plus est disponible dans @file{/gnu/store} ne rien
2752 faire et s'arrêter immédiatement.
2753
2754 @item --delete
2755 @itemx -d
2756 Essayer de supprimer tous les fichiers et les répertoires du dépôt spécifiés
2757 en argument. Cela échoue si certains des fichiers ne sont pas dans le dépôt
2758 ou s'ils sont toujours utilisés.
2759
2760 @item --list-failures
2761 Lister les éléments du dépôt qui correspondent à des échecs de construction
2762
2763 Cela n'affiche rien à moins que le démon n'ait été démarré avec
2764 @option{--cache-failures} (@pxref{Invoquer guix-daemon,
2765 @option{--cache-failures}}).
2766
2767 @item --clear-failures
2768 Supprimer les éléments du dépôt spécifiés du cache des constructions
2769 échouées.
2770
2771 De nouveau, cette option ne fait de sens que lorsque le démon est démarré
2772 avec @option{--cache-failures}. Autrement elle ne fait rien.
2773
2774 @item --list-dead
2775 Montrer la liste des fichiers et des répertoires inutilisés encore présents
2776 dans le dépôt — c.-à-d.@: les fichiers et les répertoires qui ne sont plus
2777 atteignables par aucune racine.
2778
2779 @item --list-live
2780 Montrer la liste des fichiers et des répertoires du dépôt utilisés.
2781
2782 @end table
2783
2784 En plus, les références entre les fichiers existants du dépôt peuvent être
2785 demandés :
2786
2787 @table @code
2788
2789 @item --references
2790 @itemx --referrers
2791 @cindex dépendances des paquets
2792 Lister les références (respectivement les référents) des fichiers du dépôt
2793 en argument.
2794
2795 @item --requisites
2796 @itemx -R
2797 @cindex closure
2798 Lister les prérequis des fichiers du dépôt passés en argument. Les
2799 prérequis sont le fichier du dépôt lui-même, leur références et les
2800 références de ces références, récursivement. En d'autre termes, la liste
2801 retournée est la @dfn{closure transitive} des fichiers du dépôt.
2802
2803 @xref{Invoquer guix size} pour un outil pour surveiller la taille de la
2804 closure d'un élément. @xref{Invoquer guix graph} pour un outil pour
2805 visualiser le graphe des références.
2806
2807 @item --derivers
2808 @cindex dérivation
2809 Renvoie les dérivations menant aux éléments du dépôt donnés
2810 (@pxref{Dérivations}).
2811
2812 Par exemple cette commande :
2813
2814 @example
2815 guix gc --derivers `guix package -I ^emacs$ | cut -f4`
2816 @end example
2817
2818 @noindent
2819 renvoie les fichiers @file{.drv} menant au paquet @code{emacs} installé dans
2820 votre profil.
2821
2822 Remarquez qu'il peut n'y avoir aucun fichier @file{.drv} par exemple quand
2823 ces fichiers ont été glanés. Il peut aussi y avoir plus d'un fichier
2824 @file{.drv} correspondant à cause de dérivations à sortie fixées.
2825 @end table
2826
2827 Enfin, les options suivantes vous permettent de vérifier l'intégrité du
2828 dépôt et de contrôler l'utilisation du disque.
2829
2830 @table @option
2831
2832 @item --verify[=@var{options}]
2833 @cindex intégrité, du dépôt
2834 @cindex vérification d'intégrité
2835 Vérifier l'intégrité du dépôt.
2836
2837 Par défaut, s'assurer que tous les éléments du dépôt marqués comme valides
2838 dans la base de données du démon existent bien dans @file{/gnu/store}.
2839
2840 Lorsqu'elle est fournie, l'@var{option} doit être une liste séparée par des
2841 virgule de l'un ou plus parmi @code{contents} et @code{repair}.
2842
2843 Lorsque vous passez @option{--verify=contents}, le démon calcul le hash du
2844 contenu de chaque élément du dépôt et le compare au hash de sa base de
2845 données. Les différences de hash sont rapportées comme des corruptions de
2846 données. Comme elle traverse @emph{tous les fichiers du dépôt}, cette
2847 commande peut prendre très longtemps pour terminer, surtout sur un système
2848 avec un disque lent.
2849
2850 @cindex réparer le dépôt
2851 @cindex corruption, récupérer de
2852 Utiliser @option{--verify=repair} ou @option{--verify=contents,repair} fait
2853 que le démon essaie de réparer les objets du dépôt corrompus en récupérant
2854 leurs substituts (@pxref{Substituts}). Comme la réparation n'est pas
2855 atomique et donc potentiellement dangereuse, elle n'est disponible que pour
2856 l'administrateur système. Une alternative plus légère lorsque vous
2857 connaissez exactement quelle entrée est corrompue consiste à lancer
2858 @command{guix build --repair} (@pxref{Invoquer guix build}).
2859
2860 @item --optimize
2861 @cindex déduplication
2862 Optimiser le dépôt en liant en dur les fichiers identiques — c'est la
2863 @dfn{déduplication}.
2864
2865 Le démon effectue une déduplication à chaque construction réussie ou import
2866 d'archive à moins qu'il n'ait été démarré avec
2867 @code{--disable-deduplication} (@pxref{Invoquer guix-daemon,
2868 @code{--disable-deduplication}}). Ainsi, cette option est surtout utile
2869 lorsque le démon tourne avec @code{--disable-deduplication}.
2870
2871 @end table
2872
2873 @node Invoquer guix pull
2874 @section Invoquer @command{guix pull}
2875
2876 @cindex mettre à niveau Guix
2877 @cindex mettre à jour Guix
2878 @cindex @command{guix pull}
2879 @cindex pull
2880 Les paquets sont installés ou mis à jour vers la dernière version disponible
2881 dans la distribution actuellement disponible sur votre machine locale. Pour
2882 mettre à jour cette distribution, en même temps que les outils Guix, vous
2883 devez lancer @command{guix pull} ; la commande télécharge le dernier code
2884 source de Guix et des descriptions de paquets et le déploie. Le code source
2885 est téléchargé depuis un dépôt @uref{https://git-scm.com, Git}.
2886
2887 À la fin, @command{guix package} utilisera les paquets et les versions des
2888 paquets de la copie de Guix tout juste récupérée. Non seulement ça, mais
2889 toutes les commandes Guix et les modules Scheme seront aussi récupérés
2890 depuis la dernière version. Les nouvelles sous-commandes de @command{guix}
2891 ajoutés par la mise à jour sont aussi maintenant disponibles.
2892
2893 Chaque utilisateur peut mettre à jour sa copie de Guix avec @command{guix
2894 pull} et l'effet est limité à l'utilisateur qui a lancé @command{guix
2895 pull}. Par exemple, lorsque l'utilisateur @code{root} lance @command{guix
2896 pull}, cela n'a pas d'effet sur la version de Guix que vois @code{alice} et
2897 vice-versa
2898
2899 Le résultat après avoir lancé @command{guix pull} est un @dfn{profil}
2900 disponible sous @file{~/.config/guix/current} contenant la dernière version
2901 de Guix. Ainsi, assurez-vous de l'ajouter au début de votre chemin de
2902 recherche pour que vous utilisiez la dernière version. Le même conseil
2903 s'applique au manuel Info (@pxref{Documentation}) :
2904
2905 @example
2906 export PATH="$HOME/.config/guix/current/bin:$PATH"
2907 export INFOPATH="$HOME/.config/guix/current/share/info:$INFOPATH"
2908 @end example
2909
2910 L'option @code{--list-generations} ou @code{-l} liste les anciennes
2911 générations produites par @command{guix pull}, avec des détails sur leur
2912 origine :
2913
2914 @example
2915 $ guix pull -l
2916 Génération 1 10 juin 2018 00:18:18
2917 guix 65956ad
2918 URL du dépôt : https://git.savannah.gnu.org/git/guix.git
2919 branche : origin/master
2920 commit : 65956ad3526ba09e1f7a40722c96c6ef7c0936fe
2921
2922 Generation 2 Jun 11 2018 11:02:49
2923 guix e0cc7f6
2924 repository URL: https://git.savannah.gnu.org/git/guix.git
2925 branch: origin/master
2926 commit: e0cc7f669bec22c37481dd03a7941c7d11a64f1d
2927 2 new packages: keepalived, libnfnetlink
2928 6 packages upgraded: emacs-nix-mode@@2.0.4,
2929 guile2.0-guix@@0.14.0-12.77a1aac, guix@@0.14.0-12.77a1aac,
2930 heimdal@@7.5.0, milkytracker@@1.02.00, nix@@2.0.4
2931
2932 Generation 3 Jun 13 2018 23:31:07 (current)
2933 guix 844cc1c
2934 repository URL: https://git.savannah.gnu.org/git/guix.git
2935 branch: origin/master
2936 commit: 844cc1c8f394f03b404c5bb3aee086922373490c
2937 28 new packages: emacs-helm-ls-git, emacs-helm-mu, @dots{}
2938 69 packages upgraded: borg@@1.1.6, cheese@@3.28.0, @dots{}
2939 @end example
2940
2941 Ce profil @code{~/.config/guix/current} fonctionne comme les autres profils
2942 créés par @command{guix package} (@pxref{Invoquer guix package}).
2943 C'est-à-dire que vous pouvez lister les générations, revenir en arrière à
2944 une génération précédente — c.-à-d.@: la version de Guix précédente — etc :
2945
2946 @example
2947 $ guix package -p ~/.config/guix/current --roll-back
2948 passé de la génération 3 à 2
2949 $ guix package -p ~/.config/guix/current --delete-generations=1
2950 suppression de /home/charlie/.config/guix/current-1-link
2951 @end example
2952
2953 La commande @command{guix pull} est typiquement invoquée sans arguments mais
2954 il supporte les options suivantes :
2955
2956 @table @code
2957 @item --verbose
2958 Produire une sortie verbeuse, en écrivant les journaux de construction sur
2959 la sortie d'erreur standard.
2960
2961 @item --url=@var{url}
2962 Télécharger Guix depuis le dépôt Git à @var{url}.
2963
2964 @vindex GUIX_PULL_URL
2965 Par défaut, la source est récupérée depuis le dépôt Git canonique sur
2966 @code{gnu.org}, pour la branche stable de Guix. Pour utiliser une autre
2967 source, paramétrez la variable d'environnement @code{GUIX_PULL_URL}.
2968
2969 @item --commit=@var{commit}
2970 Déployer de @var{commit}, un ID de commit Git valide représenté par une
2971 chaîne hexadécimale.
2972
2973 @item --branch=@var{branche}
2974 Déployer le haut de la @var{branche}, le nom d'une branche Git disponible
2975 sur le répertoire à @var{url}.
2976
2977 @item --list-generations[=@var{motif}]
2978 @itemx -l [@var{motif}]
2979 Liste toutes les générations de @file{~/.config/guix/current} ou, si
2980 @var{motif} est fournit, le sous-ensemble des générations qui correspondent
2981 à @var{motif}. La syntaxe de @var{motif} est la même qu'avec @code{guix
2982 package --list-generations} (@pxref{Invoquer guix package}).
2983
2984 @item --bootstrap
2985 Utiliser le programme d'amorçage Guile pour construire la dernière version
2986 de Guix. Cette option n'est utile que pour les développeurs de Guix.
2987 @end table
2988
2989 En plus, @command{guix pull} supporte toutes les options de construction
2990 communes (@pxref{Options de construction communes}).
2991
2992 @node Invoquer guix pack
2993 @section Invoquer @command{guix pack}
2994
2995 Parfois vous voulez passer un logiciel à des gens qui n'ont pas (encore !)
2996 la chance d'utiliser Guix. Vous leur diriez bien de lancer @command{guix
2997 package -i @var{quelque chose}} mais ce n'est pas possible dans ce cas.
2998 C'est là que @command{guix pack} entre en jeu.
2999
3000 @quotation Remarque
3001 Si vous cherchez comment échanger des binaires entre des machines où Guix
3002 est déjà installé, @pxref{Invoquer guix copy}, @ref{Invoquer guix publish},
3003 et @ref{Invoquer guix archive}.
3004 @end quotation
3005
3006 @cindex pack
3007 @cindex lot
3008 @cindex lot d'applications
3009 @cindex lot de logiciels
3010 La commande @command{guix pack} crée un @dfn{pack} ou @dfn{lot de logiciels}
3011 : elle crée une archive tar ou un autre type d'archive contenunt les
3012 binaires pour le logiciel qui vous intéresse ainsi que ses dépendances.
3013 L'archive qui en résulte peut être utilisée sur toutes les machines qui
3014 n'ont pas Guix et les gens peuvent lancer exactement les mêmes binaires que
3015 ceux que vous avez avec Guix. Le pack lui-même est créé d'une manière
3016 reproductible au bit près, pour que n'importe qui puisse vérifier qu'il
3017 contient bien les résultats que vous prétendez proposer.
3018
3019 Par exemple, pour créer un lot contenant Guile, Emacs, Geiser et toutes
3020 leurs dépendances, vous pouvez lancer :
3021
3022 @example
3023 $ guix pack guile emacs geiser
3024 @dots{}
3025 /gnu/store/@dots{}-pack.tar.gz
3026 @end example
3027
3028 Le résultat ici est une archive tar contenant un répertoire
3029 @file{/gnu/store} avec tous les paquets nécessaires. L'archive qui en
3030 résulte contient un @dfn{profil} avec les trois paquets qui vous intéressent
3031 ; le profil est le même qui celui qui aurait été créé avec @command{guix
3032 package -i}. C'est ce mécanisme qui est utilisé pour créer les archives tar
3033 binaires indépendantes de Guix (@pxref{Installation binaire}).
3034
3035 Les utilisateurs de ce pack devraient lancer
3036 @file{/gnu/store/@dots{}-profile/bin/guile} pour lancer Guile, ce qui n'est
3037 pas très pratique. Pour éviter cela, vous pouvez créer, disons, un lien
3038 symbolique @file{/opt/gnu/bin} vers le profil :
3039
3040 @example
3041 guix pack -S /opt/gnu/bin=bin guile emacs geiser
3042 @end example
3043
3044 @noindent
3045 De cette façon, les utilisateurs peuvent joyeusement taper
3046 @file{/opt/gnu/bin/guile} et profiter.
3047
3048 @cindex binaires repositionnables, avec @command{guix pack}
3049 Et si le destinataire de votre pack n'a pas les privilèges root sur sa
3050 machine, et ne peut donc pas le décompresser dans le système de fichiers
3051 racine ? Dans ce cas, vous pourriez utiliser l'option @code{--relocatable}
3052 (voir plus bas). Cette option produite des @dfn{binaire repositionnables},
3053 ce qui signifie qu'ils peuvent être placés n'importe où dans l'arborescence
3054 du système de fichiers : dans l'exemple au-dessus, les utilisateurs peuvent
3055 décompresser votre archive dans leur répertoire personnel et lancer
3056 directement @file{./opt/gnu/bin/guile}.
3057
3058 @cindex Docker, construire une image avec guix pack
3059 Autrement, vous pouvez produire un pack au format d'image Docker avec la
3060 commande suivante :
3061
3062 @example
3063 guix pack -f docker guile emacs geiser
3064 @end example
3065
3066 @noindent
3067 Le résultat est une archive tar qui peut être passée à la commande
3068 @command{docker load}. Voir la
3069 @uref{https://docs.docker.com/engine/reference/commandline/load/,
3070 documentation de Docker} pour plus d'informations.
3071
3072 @cindex Singularity, construire une image avec guix pack
3073 @cindex SquashFS, construire une image avec guix pack
3074 Autrement, vous pouvez produire une image SquashFS avec la commande suivante
3075 :
3076
3077 @example
3078 guix pack -f squashfs guile emacs geiser
3079 @end example
3080
3081 @noindent
3082 Le résultat est une image de système de fichiers SquashFS qui peut soit être
3083 montée directement soit être utilisée comme image de conteneur de système de
3084 fichiers avec l'@uref{http://singularity.lbl.gov, environnement d'exécution
3085 conteneurisé Singularity}, avec des commandes comme @command{singularity
3086 shell} ou @command{singularity exec}.
3087
3088 Diverses options en ligne de commande vous permettent de personnaliser votre
3089 pack :
3090
3091 @table @code
3092 @item --format=@var{format}
3093 @itemx -f @var{format}
3094 Produire un pack dans le @var{format} donné.
3095
3096 Les formats disponibles sont :
3097
3098 @table @code
3099 @item tarball
3100 C'est le format par défaut. Il produit une archive tar contenant tous les
3101 binaires et les liens symboliques spécifiés.
3102
3103 @item docker
3104 Cela produit une archive tar qui suit la
3105 @uref{https://github.com/docker/docker/blob/master/image/spec/v1.2.md,
3106 spécification des images Docker}.
3107
3108 @item squashfs
3109 Cela produit une image SquashFS contenant tous les binaires et liens
3110 symboliques spécifiés, ainsi que des points de montages vides pour les
3111 systèmes de fichiers virtuels comme procfs.
3112 @end table
3113
3114 @item --relocatable
3115 @itemx -R
3116 Produit des @dfn{binaires repositionnables} — c.-à-d.@: des binaires que
3117 vous pouvez placer n'importe où dans l'arborescence du système de fichiers
3118 et les lancer à partir de là. Par exemple, si vous créez un pack contenant
3119 Bash avec :
3120
3121 @example
3122 guix pack -R -S /mybin=bin bash
3123 @end example
3124
3125 @noindent
3126 … vous pouvez copier ce pack sur une machine qui n'a pas Guix et depuis
3127 votre répertoire personnel en tant qu'utilisateur non-privilégié, lancer :
3128
3129 @example
3130 tar xf pack.tar.gz
3131 ./mybin/sh
3132 @end example
3133
3134 @noindent
3135 Dans ce shell, si vous tapez @code{ls /gnu/store}, vous remarquerez que
3136 @file{/gnu/store} apparaît et contient toutes les dépendances de
3137 @code{bash}, même si la machine n'a pas du tout de @file{/gnu/store} !
3138 C'est sans doute la manière la plus simple de déployer du logiciel construit
3139 avec Guix sur une machine sans Guix.
3140
3141 Il y a un inconvénient cependant : cette technique repose sur les
3142 @dfn{espaces de noms} du noyau Linux qui permettent à des utilisateurs
3143 non-privilégiés de monter des systèmes de fichiers ou de changer de racine.
3144 Les anciennes versions de Linux ne le supportaient pas et certaines
3145 distributions GNU/Linux les désactivent ; sur ces système, les programme du
3146 pack @emph{ne fonctionneront pas} à moins qu'ils ne soient décompressés à la
3147 racine du système de fichiers.
3148
3149 @item --expression=@var{expr}
3150 @itemx -e @var{expr}
3151 Considérer le paquet évalué par @var{expr}.
3152
3153 Cela a le même but que l'option de même nom de @command{guix build}
3154 (@pxref{Options de construction supplémentaires, @code{--expression} dans @command{guix
3155 build}}).
3156
3157 @item --manifest=@var{fichier}
3158 @itemx -m @var{fichier}
3159 Utiliser les paquets contenus dans l'objet manifeste renvoyé par le code
3160 Scheme dans @var{fichier}
3161
3162 Elle a un but similaire à l'option de même nom dans @command{guix package}
3163 (@pxref{profile-manifest, @option{--manifest}}) et utilise les mêmes
3164 fichiers manifeste. Ils vous permettent de définir une collection de
3165 paquets une fois et de l'utiliser aussi bien pour créer des profils que pour
3166 créer des archives pour des machines qui n'ont pas Guix d'installé.
3167 Remarquez que vous pouvez spécifier @emph{soit} un fichier manifeste,
3168 @emph{soit} une liste de paquet, mais pas les deux.
3169
3170 @item --system=@var{système}
3171 @itemx -s @var{système}
3172 Tenter de construire pour le @var{système} — p.@: ex.@: @code{i686-linux} —
3173 plutôt que pour le type de système de l'hôte de construction.
3174
3175 @item --target=@var{triplet}
3176 @cindex compilation croisée
3177 Effectuer une compilation croisée pour @var{triplet} qui doit être un
3178 triplet GNU valide, comme @code{"mips64el-linux-gnu"} (@pxref{Specifying
3179 target triplets, GNU configuration triplets,, autoconf, Autoconf}).
3180
3181 @item --compression=@var{outil}
3182 @itemx -C @var{outil}
3183 Compresser l'archive résultante avec @var{outil} — l'un des outils parmi
3184 @code{bzip2}, @code{xz}, @code{lzip} ou @code{none} pour aucune compression.
3185
3186 @item --symlink=@var{spec}
3187 @itemx -S @var{spec}
3188 Ajouter les liens symboliques spécifiés par @var{spec} dans le pack. Cette
3189 option peut apparaître plusieurs fois.
3190
3191 @var{spec} a la forme @code{@var{source}=@var{cible}}, où @var{source} est
3192 le lien symbolique qui sera créé et @var{cible} est la cible du lien.
3193
3194 Par exemple, @code{-S /opt/gnu/bin=bin} crée un lien symbolique
3195 @file{/opt/gnu/bin} qui pointe vers le sous-répertoire @file{bin} du profil.
3196
3197 @item --localstatedir
3198 Inclure le « répertoire d'état local », @file{/var/guix} dans le paquet
3199 résultant.
3200
3201 @file{/var/guix} contient la base de données du dépôt (@pxref{Le dépôt})
3202 ainsi que les racines du ramasse-miettes (@pxref{Invoquer guix gc}). Le
3203 fournir dans le pack signifie que le dépôt et « complet » et gérable par
3204 Guix ; ne pas le fournir dans le pack signifie que le dépôt est « mort » :
3205 aucun élément ne peut être ajouté ni enlevé après l'extraction du pack.
3206
3207 Un cas d'utilisation est l'archive binaire indépendante de Guix
3208 (@pxref{Installation binaire}).
3209
3210 @item --bootstrap
3211 Utiliser les programmes d'amorçage pour construire le pack. Cette option
3212 n'est utile que pour les développeurs de Guix.
3213 @end table
3214
3215 En plus, @command{guix pack} supporte toutes les options de construction
3216 communes (@pxref{Options de construction communes}) et toutes les options de
3217 transformation de paquets (@pxref{Options de transformation de paquets}).
3218
3219
3220 @node Invoquer guix archive
3221 @section Invoquer @command{guix archive}
3222
3223 @cindex @command{guix archive}
3224 @cindex archive
3225 La commande @command{guix archive} permet aux utilisateurs d'@dfn{exporter}
3226 des fichiers du dépôt dans une simple archive puis ensuite de les
3227 @dfn{importer} sur une machine qui fait tourner Guix. En particulier, elle
3228 permet de transférer des fichiers du dépôt d'une machine vers le dépôt d'une
3229 autre machine.
3230
3231 @quotation Remarque
3232 Si vous chercher une manière de produire des archives dans un format adapté
3233 pour des outils autres que Guix, @pxref{Invoquer guix pack}.
3234 @end quotation
3235
3236 @cindex exporter des éléments du dépôt
3237 Pour exporter des fichiers du dépôt comme une archive sur la sortie
3238 standard, lancez :
3239
3240 @example
3241 guix archive --export @var{options} @var{spécifications}...
3242 @end example
3243
3244 @var{spécifications} peut être soit des noms de fichiers soit des
3245 spécifications de paquets, comme pour @command{guix package}
3246 (@pxref{Invoquer guix package}). Par exemple, la commande suivante crée une
3247 archive contenant la sortie @code{gui} du paquet @code{git} et la sortie
3248 principale de @code{emacs} :
3249
3250 @example
3251 guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
3252 @end example
3253
3254 Si les paquets spécifiés ne sont pas déjà construits, @command{guix archive}
3255 les construit automatiquement. Le processus de construction peut être
3256 contrôlé avec les options de construction communes (@pxref{Options de construction communes}).
3257
3258 Pour transférer le paquet @code{emacs} vers une machine connectée en SSH, on
3259 pourrait lancer :
3260
3261 @example
3262 guix archive --export -r emacs | ssh la-machine guix archive --import
3263 @end example
3264
3265 @noindent
3266 De même, on peut transférer un profil utilisateur complet d'une machine à
3267 une autre comme cela :
3268
3269 @example
3270 guix archive --export -r $(readlink -f ~/.guix-profile) | \
3271 ssh la-machine guix-archive --import
3272 @end example
3273
3274 @noindent
3275 Cependant, remarquez que, dans les deux exemples, le paquet @code{emacs}, le
3276 profil ainsi que toutes leurs dépendances sont transférées (à cause de
3277 @code{-r}), indépendamment du fait qu'ils soient disponibles dans le dépôt
3278 de la machine cible. L'option @code{--missing} peut vous aider à comprendre
3279 les éléments qui manquent dans le dépôt de la machine cible. La commande
3280 @command{guix copy} simplifie et optimise ce processus, c'est donc ce que
3281 vous devriez utiliser dans ce cas (@pxref{Invoquer guix copy}).
3282
3283 @cindex nar, format d'archive
3284 @cindex archive normalisée (nar)
3285 Les archives sont stockées au format « archive normalisé » ou « nar », qui
3286 est comparable dans l'esprit à « tar » mais avec des différences qui le
3287 rendent utilisable pour ce qu'on veut faire. Tout d'abord, au lieu de
3288 stocker toutes les métadonnées Unix de chaque fichier, le format nar ne
3289 mentionne que le type de fichier (normal, répertoire ou lien symbolique) ;
3290 les permissions Unix, le groupe et l'utilisateur ne sont pas mentionnés.
3291 Ensuite, l'ordre dans lequel les entrées de répertoires sont stockés suit
3292 toujours l'ordre des noms de fichier dans l'environnement linguistique C.
3293 Cela rend la production des archives entièrement déterministe.
3294
3295 @c FIXME: Add xref to daemon doc about signatures.
3296 Lors de l'export, le démon signe numériquement le contenu de l'archive et
3297 cette signature est ajoutée à la fin du fichier. Lors de l'import, le démon
3298 vérifie la signature et rejette l'import en cas de signature invalide ou si
3299 la clef de signature n'est pas autorisée.
3300
3301 Les principales options sont :
3302
3303 @table @code
3304 @item --export
3305 Exporter les fichiers ou les paquets du dépôt (voir plus bas). Écrire
3306 l'archive résultante sur la sortie standard.
3307
3308 Les dépendances ne sont @emph{pas} incluses dans la sortie à moins que
3309 @code{--recursive} ne soit passé.
3310
3311 @item -r
3312 @itemx --recursive
3313 En combinaison avec @code{--export}, cette option demande à @command{guix
3314 archive} d'inclure les dépendances des éléments donnés dans l'archive.
3315 Ainsi, l'archive résultante est autonome : elle contient la closure des
3316 éléments du dépôt exportés.
3317
3318 @item --import
3319 Lire une archive depuis l'entrée standard et importer les fichiers inclus
3320 dans le dépôt. Annuler si l'archive a une signature invalide ou si elle est
3321 signée par une clef publique qui ne se trouve pas dans le clefs autorisées
3322 (voir @code{--authorize} plus bas.)
3323
3324 @item --missing
3325 Liste une liste de noms de fichiers du dépôt sur l'entrée standard, un par
3326 ligne, et écrit sur l'entrée standard le sous-ensemble de ces fichiers qui
3327 manquent dans le dépôt.
3328
3329 @item --generate-key[=@var{paramètres}]
3330 @cindex signature, archives
3331 Générer une nouvelle paire de clefs pour le démon. Cela est un prérequis
3332 avant que les archives ne puissent être exportées avec @code{--export}.
3333 Remarquez que cette opération prend généralement du temps parce qu'elle doit
3334 récupère suffisamment d'entropie pour générer la paire de clefs.
3335
3336 La paire de clefs générée est typiquement stockée dans @file{/etc/guix},
3337 dans @file{signing-key.pub} (clef publique) et @file{signing-key.sec} (clef
3338 privée, qui doit rester secrète). Lorsque @var{paramètres} est omis, une
3339 clef ECDSA utilisant la courbe Ed25519 est générée ou pour les version de
3340 libgcrypt avant 1.6.0, une clef RSA de 4096 bits. Autrement,
3341 @var{paramètres} peut spécifier les paramètres @code{genkey} adaptés pour
3342 libgcrypt (@pxref{General public-key related Functions,
3343 @code{gcry_pk_genkey},, gcrypt, The Libgcrypt Reference Manual}).
3344
3345 @item --authorize
3346 @cindex autorisation, archives
3347 Autoriser les imports signés par la clef publique passée sur l'entrée
3348 standard. La clef publique doit être au « format avancé s-expression » —
3349 c.-à-d.@: le même format que le fichier @file{signing-key.pub}.
3350
3351 La liste des clefs autorisées est gardée dans un fichier modifiable par des
3352 humains dans @file{/etc/guix/acl}. Le fichier contient des
3353 @url{http://people.csail.mit.edu/rivest/Sexp.txt, « s-expressions au format
3354 avancé »} et est structuré comme une liste de contrôle d'accès dans
3355 l'@url{http://theworld.com/~cme/spki.txt, infrastructure à clefs publiques
3356 simple (SPKI)}.
3357
3358 @item --extract=@var{répertoire}
3359 @itemx -x @var{répertoire}
3360 Lit une archive à un seul élément telle que servie par un serveur de
3361 substituts (@pxref{Substituts}) et l'extrait dans @var{répertoire}. C'est
3362 une opération de bas niveau requise seulement dans de rares cas d'usage ;
3363 voir plus loin.
3364
3365 Par exemple, la commande suivante extrait le substitut pour Emacs servi par
3366 @code{hydra.gnu.org} dans @file{/tmp/emacs} :
3367
3368 @example
3369 $ wget -O - \
3370 https://hydra.gnu.org/nar/@dots{}-emacs-24.5 \
3371 | bunzip2 | guix archive -x /tmp/emacs
3372 @end example
3373
3374 Les archives à un seul élément sont différentes des archives à plusieurs
3375 éléments produites par @command{guix archive --export} ; elles contiennent
3376 un seul élément du dépôt et elles n'embarquent @emph{pas} de signature.
3377 Ainsi cette opération ne vérifie @emph{pas} de signature et sa sortie
3378 devrait être considérée comme non sûre.
3379
3380 Le but principal de cette opération est de faciliter l'inspection du contenu
3381 des archives venant de serveurs auxquels on ne fait potentiellement pas
3382 confiance.
3383
3384 @end table
3385
3386 @c *********************************************************************
3387 @node Interface de programmation
3388 @chapter Interface de programmation
3389
3390 GNU Guix fournit diverses interface de programmation Scheme (API) qui pour
3391 définir, construire et faire des requêtes sur des paquets. La première
3392 interface permet aux utilisateurs d'écrire des définitions de paquets de
3393 haut-niveau. Ces définitions se réfèrent à des concepts de création de
3394 paquets familiers, comme le nom et la version du paquet, son système de
3395 construction et ses dépendances. Ces définitions peuvent ensuite être
3396 transformées en actions concrètes lors de la construction.
3397
3398 Les actions de construction sont effectuées par le démon Guix, pour le
3399 compte des utilisateurs. Dans un environnement standard, le démon possède
3400 les droits en écriture sur le dépôt — le répertoire @file{/gnu/store} — mais
3401 pas les utilisateurs. La configuration recommandée permet aussi au démon
3402 d'effectuer la construction dans des chroots, avec un utilisateur de
3403 construction spécifique pour minimiser les interférences avec le reste du
3404 système.
3405
3406 @cindex dérivation
3407 Il y a des API de plus bas niveau pour interagir avec le démon et le dépôt.
3408 Pour demander au démon d'effectuer une action de construction, les
3409 utilisateurs lui donnent en fait une @dfn{dérivation}. Une dérivation est
3410 une représentation à bas-niveau des actions de construction à entreprendre
3411 et l'environnement dans lequel elles devraient avoir lieu — les dérivations
3412 sont aux définitions de paquets ce que l'assembleur est aux programmes C.
3413 Le terme de « dérivation » vient du fait que les résultats de la
3414 construction en @emph{dérivent}.
3415
3416 Ce chapitre décrit toutes ces API tour à tour, à partir des définitions de
3417 paquets à haut-niveau.
3418
3419 @menu
3420 * Définition des paquets:: Définir de nouveaux paquets.
3421 * Systèmes de construction:: Spécifier comment construire les paquets.
3422 * Le dépôt:: Manipuler le dépôt de paquets.
3423 * Dérivations:: Interface de bas-niveau avec les dérivations
3424 de paquets.
3425 * La monad du dépôt:: Interface purement fonctionnelle avec le
3426 dépôt.
3427 * G-Expressions:: Manipuler les expressions de construction.
3428 * Invoking guix repl:: Fiddling with Guix interactively.
3429 @end menu
3430
3431 @node Définition des paquets
3432 @section Définition des paquets
3433
3434 L'interface de haut-niveau pour les définitions de paquets est implémentée
3435 dans les modules @code{(guix packages)} et @code{(guix build-system)}. Par
3436 exemple, la définition du paquet, ou la @dfn{recette}, du paquet GNU Hello
3437 ressemble à cela :
3438
3439 @example
3440 (define-module (gnu packages hello)
3441 #:use-module (guix packages)
3442 #:use-module (guix download)
3443 #:use-module (guix build-system gnu)
3444 #:use-module (guix licenses)
3445 #:use-module (gnu packages gawk))
3446
3447 (define-public hello
3448 (package
3449 (name "hello")
3450 (version "2.10")
3451 (source (origin
3452 (method url-fetch)
3453 (uri (string-append "mirror://gnu/hello/hello-" version
3454 ".tar.gz"))
3455 (sha256
3456 (base32
3457 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
3458 (build-system gnu-build-system)
3459 (arguments '(#:configure-flags '("--enable-silent-rules")))
3460 (inputs `(("gawk" ,gawk)))
3461 (synopsis "Hello, GNU world: An example GNU package")
3462 (description "Guess what GNU Hello prints!")
3463 (home-page "http://www.gnu.org/software/hello/")
3464 (license gpl3+)))
3465 @end example
3466
3467 @noindent
3468 Sans être un expert Scheme, le lecteur peut comprendre la signification des
3469 différents champs présents. Cette expression lie la variable @code{hello} à
3470 un objet @code{<package>}, qui est essentiellement un enregistrement
3471 (@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}). On
3472 peut inspecter cet objet de paquet avec les procédures qui se trouvent dans
3473 le module @code{(guix packages)} ; par exemple, @code{(package-name hello)}
3474 renvoie — oh surprise ! — @code{"hello"}.
3475
3476 Avec un peu de chance, vous pourrez importer tout ou partie de la définition
3477 du paquet qui vous intéresse depuis un autre répertoire avec la commande
3478 @code{guix import} (@pxref{Invoquer guix import}).
3479
3480 Dans l'exemple précédent, @var{hello} est défini dans un module à part,
3481 @code{(gnu packages hello)}. Techniquement, cela n'est pas strictement
3482 nécessaire, mais c'est pratique : tous les paquets définis dans des modules
3483 sous @code{(gnu packages @dots{})} sont automatiquement connus des outils en
3484 ligne de commande (@pxref{Modules de paquets}).
3485
3486 Il y a quelques points à remarquer dans la définition de paquet précédente :
3487
3488 @itemize
3489 @item
3490 Le champ @code{source} du paquet est un objet @code{<origin>} (@pxref{Référence d'origine}, pour la référence complète). Ici, on utilise la méthode
3491 @code{url-fetch} de @code{(guix download)}, ce qui signifie que la source
3492 est un fichier à télécharger par FTP ou HTTP.
3493
3494 Le préfixe @code{mirror://gnu} demande à @code{url-fetch} d'utiliser l'un
3495 des miroirs GNU définis dans @code{(guix download)}.
3496
3497 Le champ @code{sha256} spécifie le hash SHA256 attendu pour le fichier
3498 téléchargé. Il est requis et permet à Guix de vérifier l'intégrité du
3499 fichier. La forme @code{(base32 @dots{})} introduit a représentation en
3500 base32 du hash. Vous pouvez obtenir cette information avec @code{guix
3501 download} (@pxref{Invoquer guix download}) et @code{guix hash}
3502 (@pxref{Invoquer guix hash}).
3503
3504 @cindex correctifs
3505 Lorsque cela est requis, la forme @code{origin} peut aussi avec un champ
3506 @code{patches} qui liste les correctifs à appliquer et un champ
3507 @code{snippet} qui donne une expression Scheme pour modifier le code source.
3508
3509 @item
3510 @cindex Système de construction GNU
3511 Le champ @code{build-system} spécifie la procédure pour construire le paquet
3512 (@pxref{Systèmes de construction}). Ici, @var{gnu-build-system} représente le système
3513 de construction GNU familier, où les paquets peuvent être configurés,
3514 construits et installés avec la séquence @code{./configure && make && make
3515 check && make install} habituelle.
3516
3517 @item
3518 Le champ @code{arguments} spécifie des options pour le système de
3519 construction (@pxref{Systèmes de construction}). Ici il est interprété par
3520 @var{gnu-build-system} comme une demande de lancer @file{configure} avec le
3521 drapeau @code{--enable-silent-rules}.
3522
3523 @cindex quote
3524 @cindex quoting
3525 @findex '
3526 @findex quote
3527 Que sont ces apostrophes (@code{'}) ? C'est de la syntaxe Scheme pour
3528 introduire une liste ; @code{'} est synonyme de la fonction @code{quote}.
3529 @xref{Expression Syntax, quoting,, guile, GNU Guile Reference Manual}, pour
3530 des détails. Ice la valeur du champ @code{arguments} est une liste
3531 d'arguments passés au système de construction plus tard, comme avec
3532 @code{apply} (@pxref{Fly Evaluation, @code{apply},, guile, GNU Guile
3533 Reference Manual}).
3534
3535 La séquence dièse-deux-points (@code{#:}) définie un @dfn{mot-clef} Scheme
3536 (@pxref{Keywords,,, guile, GNU Guile Reference Manual}), et
3537 @code{#:configure-flags} est un mot-clef utilisé pour passer un argument au
3538 système de construction (@pxref{Coding With Keywords,,, guile, GNU Guile
3539 Reference Manual}).
3540
3541 @item
3542 Le champ @code{inputs} spécifie les entrées du processus de construction —
3543 c.-à-d.@: les dépendances à la construction ou à l'exécution du paquet. Ici
3544 on définie une entrée nommée @code{"gawk"} dont la valeur est la variable
3545 @var{gawk} ; @var{gawk} est elle-même liée à un objet @code{<package>}.
3546
3547 @cindex accent grave (quasiquote)
3548 @findex `
3549 @findex quasiquote
3550 @cindex virgule (unquote)
3551 @findex ,
3552 @findex unquote
3553 @findex ,@@
3554 @findex unquote-splicing
3555 De nouveau, @code{`} (un accent grave, synonyme de la fonction
3556 @code{quasiquote}) nous permet d'introduire une liste litérale dans le champ
3557 @code{inputs}, tandis que @code{,} (une virgule, synonyme de la fonction
3558 @code{unquote}) nous permet d'insérer une valeur dans cette liste
3559 (@pxref{Expression Syntax, unquote,, guile, GNU Guile Reference Manual}).
3560
3561 Remarquez que GCC, Coreutils, Bash et les autres outils essentiels n'ont pas
3562 besoin d'être spécifiés en tant qu'entrées ici. À la place, le
3563 @var{gnu-build-system} est en charge de s'assurer qu'ils sont présents
3564 (@pxref{Systèmes de construction}).
3565
3566 Cependant, toutes les autres dépendances doivent être spécifiées dans le
3567 champ @code{inputs}. Toute dépendance qui ne serait pas spécifiée ici sera
3568 simplement indisponible pour le processus de construction, ce qui peut mener
3569 à un échec de la construction.
3570 @end itemize
3571
3572 @xref{Référence de paquet}, pour une description complète des champs
3573 possibles.
3574
3575 Lorsqu'une définition de paquet est en place, le paquet peut enfin être
3576 construit avec l'outil en ligne de commande @code{guix build}
3577 (@pxref{Invoquer guix build}), pour résoudre les échecs de construction que
3578 vous pourriez rencontrer (@pxref{Débogage des échecs de construction}). Vous pouvez
3579 aisément revenir à la définition du paquet avec la commande @command{guix
3580 edit} (@pxref{Invoquer guix edit}). @xref{Consignes d'empaquetage}, pour plus
3581 d'inforamtions sur la manière de tester des définitions de paquets et
3582 @ref{Invoquer guix lint}, pour des informations sur la manière de vérifier
3583 que la définition réspecte les conventions de style.
3584 @vindex GUIX_PACKAGE_PATH
3585 Enfin, @pxref{Modules de paquets} pour des informations sur la manière
3586 d'étendre la distribution en ajoutant vos propres définitions de paquets
3587 dans @code{GUIX_PACKAGE_PATH}.
3588
3589 Finalement, la mise à jour de la définition du paquet à une nouvelle version
3590 amont peut en partie s'automatiser avec la commande @command{guix refresh}
3591 (@pxref{Invoquer guix refresh}).
3592
3593 Sous le capot, une dérivation qui correspond à un objet @code{<package>} est
3594 d'abord calculé par la procédure @code{package-derivation}. Cette
3595 dérivation est stockée dans un fichier @code{.drv} dans @file{/gnu/store}.
3596 Les actions de construction qu'il prescrit peuvent ensuite être réalisées
3597 par la procédure @code{build-derivation} (@pxref{Le dépôt}).
3598
3599 @deffn {Procédure Scheme} package-derivation @var{store} @var{package} [@var{system}]
3600 Renvoie l'objet @code{<derivation>} du @var{paquet} pour le @var{système}
3601 (@pxref{Dérivations}).
3602
3603 @var{paquet} doit être un objet @code{<package>} valide et @var{système} une
3604 chaîne indiquant le type de système cible — p.ex.@: @code{"x86_64-linux"}
3605 pour un système GNU x86_64 basé sur Linux. @var{dépôt} doit être une
3606 connexion au démon, qui opère sur les dépôt (@pxref{Le dépôt}).
3607 @end deffn
3608
3609 @noindent
3610 @cindex compilation croisée
3611 De manière identique, il est possible de calculer une dérivation qui
3612 effectue une compilation croisée d'un paquet pour un autre système :
3613
3614 @deffn {Procédure Scheme} package-cross-derivation @var{store} @
3615 @var{paquet} @var{cible} [@var{système}] renvoie l'objet @code{<derivation>}
3616 duof @var{paquet} construit depuis @var{système} pour @var{cible}.
3617
3618 @var{cible} doit être un triplet GNU valide indiquant le matériel cible et
3619 le système d'exploitation, comme @code{"mips64el-linux-gnu"}
3620 (@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
3621 Configure and Build System}).
3622 @end deffn
3623
3624 @cindex transformations de paquets
3625 @cindex réécriture d'entrées
3626 @cindex réécriture de l'arbre des dépendances
3627 On peut manipuler les paquets de manière arbitraire. Une transformation
3628 utile est par exemple la @dfn{réécriture d'entrées} où l'arbre des
3629 dépendances d'un paquet est réécrit en replaçant des entrées spécifiques par
3630 d'autres :
3631
3632 @deffn {Procédure Scheme} package-input-rewriting @var{replacements} @
3633 [@var{nom-réécrit}] Renvoie une procédure qui, lorsqu'on lui donne un
3634 paquet, remplace des dépendances directes et indirectes (mais pas ses
3635 entrées implicites) en fonction de @var{remplacements}. @var{remplacements}
3636 est une liste de paires de paquets ; le premier élément de chaque pair est
3637 le paquet à remplacer, le second son remplaçant.
3638
3639 De manière facultative, @var{nom-réécrit} est une procédure à un argument
3640 qui prend le nom d'un paquet et renvoie son nouveau nom après l'avoir
3641 réécrit.
3642 @end deffn
3643
3644 @noindent
3645 Regardez cet exemple :
3646
3647 @example
3648 (define libressl-instead-of-openssl
3649 ;; Cette procédure remplace OPENSSL par LIBRESSL,
3650 ;; récursivement.
3651 (package-input-rewriting `((,openssl . ,libressl))))
3652
3653 (define git-with-libressl
3654 (libressl-instead-of-openssl git))
3655 @end example
3656
3657 @noindent
3658 Ici nous définissons d'abord une procédure de réécriture qui remplace
3659 @var{openssl} par @var{libressl}. Ensuite nous l'utilisons pour définir une
3660 @dfn{variante} du paquet @var{git} qui utilise @var{libressl} plutôt que
3661 @var{openssl}. cela est exactement ce que l'option en ligne de commande
3662 @option{--with-input} fait (@pxref{Options de transformation de paquets,
3663 @option{--with-input}}).
3664
3665 Une procédure plus générique pour réécrire un graphe de dépendance d'un
3666 paquet est @code{package-mapping} : elle supporte n'importe quel changement
3667 dans les nœuds du graphe.
3668
3669 @deffn {Procédure Scheme} package-mapping @var{proc} [@var{cut?}]
3670 Renvoie une procédure qui, avec un paquet, applique @var{proc} sur tous les
3671 paquets dont il dépend et renvoie le paquet qui en résulte. La procédure
3672 arrête la récursion là où @var{cut?} renvoie vrai pour un paquet donné.
3673 @end deffn
3674
3675 @menu
3676 * Référence de paquet:: Le type de donnée des paquets.
3677 * Référence d'origine:: Le type de données d'origine.
3678 @end menu
3679
3680
3681 @node Référence de paquet
3682 @subsection Référence de @code{package}
3683
3684 Cette section résume toutes les options disponibles dans les déclarations
3685 @code{package} (@pxref{Définition des paquets}).
3686
3687 @deftp {Type de données} package
3688 C'est le type de donnée représentant une recette de paquets
3689
3690 @table @asis
3691 @item @code{name}
3692 Le nom du paquet, comme une chaîne de caractères.
3693
3694 @item @code{version}
3695 La version du paquet, comme une chaîne de caractères.
3696
3697 @item @code{source}
3698 Un objet qui indique comment le code source du paquet devrait être
3699 récupéré. La plupart du temps, c'est un objet @code{origin} qui indique un
3700 fichier récupéré depuis internet (@pxref{Référence d'origine}). Il peut aussi
3701 s'agir de tout autre objet ``simili-fichier'' comme un @code{local-file} qui
3702 indique un fichier du système de fichier local (@pxref{G-Expressions,
3703 @code{local-file}}).
3704
3705 @item @code{build-system}
3706 Le système de construction qui devrait être utilisé pour construire le
3707 paquet (@pxref{Systèmes de construction}).
3708
3709 @item @code{arguments} (par défaut : @code{'()})
3710 Les arguments à passer au système de construction. C'est une liste qui
3711 contient typiquement une séquence de paires de clefs-valeurs.
3712
3713 @item @code{inputs} (par défaut : @code{'()})
3714 @itemx @code{native-inputs} (par défaut : @code{'()})
3715 @itemx @code{propagated-inputs} (par défaut : @code{'()})
3716 @cindex entrées, des paquets
3717 Ces champs listent les dépendances du paquet. Chacune est une liste de
3718 tuples, où chaque tuple a une étiquette pour une entrée (une chaîne de
3719 caractères) comme premier élément, un paquet, une origine ou une dérivation
3720 comme deuxième élément et éventuellement le nom d'une sortie à utiliser qui
3721 est @code{"out"} par défaut (@pxref{Des paquets avec plusieurs résultats}, pour
3722 plus d'informations sur les sorties des paquets). Par exemple, la liste
3723 suivante spécifie trois entrées :
3724
3725 @example
3726 `(("libffi" ,libffi)
3727 ("libunistring" ,libunistring)
3728 ("glib:bin" ,glib "bin")) ;la sortie "bin" de Glib
3729 @end example
3730
3731 @cindex compilation croisée, dépendances des paquets
3732 La distinction entre @code{native-inputs} et @code{inputs} est nécessaire
3733 lorsqu'on considère la compilation croisée. Lors d'une compilation croisée,
3734 les dépendances listées dans @code{inputs} sont construites pour
3735 l'architecture @emph{cible} ; inversement, les dépendances listées dans
3736 @code{native-inputs} sont construites pour l'architecture de la machine de
3737 @emph{construction}.
3738
3739 @code{native-inputs} est typiquement utilisé pour lister les outils requis à
3740 la construction mais pas à l'exécution, comme Autoconf, Automake,
3741 pkg-config, Gettext ou Bison. @command{guix lint} peut rapporter des
3742 erreurs de ce type (@pxref{Invoquer guix lint}).
3743
3744 @anchor{package-propagated-inputs}
3745 Enfin, @code{propagated-inputs} est similaire à @code{inputs}, mais les
3746 paquets spécifiés seront automatiquement installés avec le paquet auquel ils
3747 appartiennent (@pxref{package-cmd-propagated-inputs, @command{guix
3748 package}}, pour des informations sur la manière dont @command{guix package}
3749 traite les entrées propagées).
3750
3751 Par exemple cela est nécessaire lorsque des bibliothèques C/C++ ont besoin
3752 d'en-têtes d'une autre bibliothèque pour être compilé ou lorsqu'un fichier
3753 pkg-config se rapporte à un autre @i{via} son champ @code{Requires}.
3754
3755 Un autre exemple où @code{propagated-inputs} est utile est pour les langages
3756 auxquels il manque un moyen de retenir le chemin de recherche comme c'est le
3757 cas du @code{RUNPATH} des fichiers ELF ; cela comprend Guile, Python, Perl
3758 et plus. Pour s'assurer que les bibliothèques écrites dans ces langages
3759 peuvent trouver le code des bibliothèques dont elles dépendent à
3760 l'exécution, les dépendances à l'exécution doivent être listées dans
3761 @code{propagated-inputs} plutôt que @code{inputs}.
3762
3763 @item @code{self-native-input?} (par défaut : @code{#f})
3764 C'est un champ booléen qui indique si le paquet devrait s'utiliser lui-même
3765 comme entrée native lors de la compilation croisée.
3766
3767 @item @code{outputs} (par défaut : @code{'("out")})
3768 La liste des noms de sorties du paquet. @xref{Des paquets avec plusieurs résultats}, pour des exemples typiques d'utilisation de sorties
3769 supplémentaires.
3770
3771 @item @code{native-search-paths} (par défaut : @code{'()})
3772 @itemx @code{search-paths} (par défaut : @code{'()})
3773 Une liste d'objets @code{search-path-specification} décrivant les variables
3774 d'environnement de recherche de chemins que ce paquet utilise.
3775
3776 @item @code{replacement} (par défaut : @code{#f})
3777 Ce champ doit être soit @code{#f} soit un objet de paquet qui sera utilisé
3778 comme @dfn{remplaçant} de ce paquet. @xref{Mises à jour de sécurité, grafts}, pour
3779 plus de détails.
3780
3781 @item @code{synopsis}
3782 Une description sur une ligne du paquet.
3783
3784 @item @code{description}
3785 Une description plus détaillée du paquet.
3786
3787 @item @code{license}
3788 @cindex licence, des paquets
3789 La licence du paquet ; une valeur tirée de @code{(guix licenses)} ou une
3790 liste de ces valeurs.
3791
3792 @item @code{home-page}
3793 L'URL de la page d'accueil du paquet, en tant que chaîne de caractères.
3794
3795 @item @code{supported-systems} (par défaut : @var{%supported-systems})
3796 La liste des systèmes supportés par le paquet, comme des chaînes de
3797 caractères de la forme @code{architecture-noyau}, par exemple
3798 @code{"x86_64-linux"}.
3799
3800 @item @code{maintainers} (par défaut : @code{'()})
3801 La liste des mainteneurs du paquet, comme des objets @code{maintainer}.
3802
3803 @item @code{location} (par défaut : emplacement de la source de la forme @code{package})
3804 L'emplacement de la source du paquet. C'est utile de le remplacer lorsqu'on
3805 hérite d'un autre paquet, auquel cas ce champ n'est pas automatiquement
3806 corrigé.
3807 @end table
3808 @end deftp
3809
3810
3811 @node Référence d'origine
3812 @subsection Référence de @code{origin}
3813
3814 Cette section résume toutes les options disponibles dans le déclarations
3815 @code{origin} (@pxref{Définition des paquets}).
3816
3817 @deftp {Type de données} origin
3818 C'est le type de donnée qui représente l'origine d'un code source.
3819
3820 @table @asis
3821 @item @code{uri}
3822 Un objet contenant l'URI de la source. Le type d'objet dépend de la
3823 @code{method} (voir plus bas). Par exemple, avec la méthode @var{url-fetch}
3824 de @code{(guix download)}, les valeurs valide d'@code{uri} sont : une URL
3825 représentée par une chaîne de caractères, ou une liste de chaînes de
3826 caractères.
3827
3828 @item @code{method}
3829 Un procédure qui gère l'URI.
3830
3831 Quelques exemples :
3832
3833 @table @asis
3834 @item @var{url-fetch} de @code{(guix download)}
3835 télécharge un fichier depuis l'URL HTTP, HTTPS ou FTP spécifiée dans le
3836 champ @code{uri} ;
3837
3838 @vindex git-fetch
3839 @item @var{git-fetch} de @code{(guix git-download)}
3840 clone le dépôt sous contrôle de version Git et récupère la révision
3841 spécifiée dans le champ @code{uri} en tant qu'objet @code{git-reference} ;
3842 un objet @code{git-reference} ressemble à cela :
3843
3844 @example
3845 (git-reference
3846 (url "git://git.debian.org/git/pkg-shadow/shadow")
3847 (commit "v4.1.5.1"))
3848 @end example
3849 @end table
3850
3851 @item @code{sha256}
3852 Un bytevector contenant le hash SHA-256 de la source. Typiquement la forme
3853 @code{base32} est utilisée ici pour générer le bytevector depuis une chaîne
3854 de caractères en base-32.
3855
3856 Vous pouvez obtenir cette information avec @code{guix download}
3857 (@pxref{Invoquer guix download}) ou @code{guix hash} (@pxref{Invoquer guix hash}).
3858
3859 @item @code{file-name} (par défaut : @code{#f})
3860 Le nom de fichier à utiliser pour sauvegarder le fichier. Lorsqu'elle est à
3861 @code{#f}, une valeur par défaut raisonnable est utilisée dans la plupart
3862 des cas. Dans le cas où la source est récupérée depuis une URL, le nom de
3863 fichier est celui de l'URL. Pour les sources récupérées depuis un outil de
3864 contrôle de version, il est recommandé de fournir un nom de fichier
3865 explicitement parce que le nom par défaut n'est pas très descriptif.
3866
3867 @item @code{patches} (par défaut : @code{'()})
3868 Une liste de noms de fichiers, d'origines ou d'objets simili-fichiers
3869 (@pxref{G-Expressions, file-like objects}) qui pointent vers des correctifs
3870 à appliquer sur la source.
3871
3872 Cette liste de correctifs doit être inconditionnelle. En particulier, elle
3873 ne peut pas dépendre des valeurs de @code{%current-system} ou
3874 @code{%current-target-system}.
3875
3876 @item @code{snippet} (par défaut : @code{#f})
3877 Une G-expression (@pxref{G-Expressions}) ou une S-expression qui sera lancée
3878 dans le répertoire des sources. C'est une manière pratique de modifier la
3879 source, parfois plus qu'un correctif.
3880
3881 @item @code{patch-flags} (par défaut : @code{'("-p1")})
3882 Une liste de drapeaux à passer à la commande @code{patch}.
3883
3884 @item @code{patch-inputs} (par défaut : @code{#f})
3885 Paquets d'entrées ou dérivations pour le processus de correction.
3886 Lorsqu'elle est à @code{#f}, l'ensemble d'entrées habituellement nécessaire
3887 pour appliquer des correctifs est fournit, comme GNU@tie{}Patch.
3888
3889 @item @code{modules} (par défaut : @code{'()})
3890 Une liste de modules Guile qui devraient être chargés pendant le processus
3891 de correction et pendant que le lancement du code du champ @code{snippet}.
3892
3893 @item @code{patch-guile} (par défaut : @code{#f})
3894 Le paquet Guile à utiliser dans le processus de correction. Lorsqu'elle est
3895 à @code{#f}, une valeur par défaut raisonnable est utilisée.
3896 @end table
3897 @end deftp
3898
3899
3900 @node Systèmes de construction
3901 @section Systèmes de construction
3902
3903 @cindex système de construction
3904 Chaque définition de paquet définie un @dfn{système de construction} et des
3905 arguments pour ce système de construction (@pxref{Définition des paquets}). Ce
3906 champ @code{build-system} représente la procédure de construction du paquet,
3907 ainsi que des dépendances implicites pour cette procédure de construction.
3908
3909 Les systèmes de construction sont des objets
3910 @code{<build-system>}. L'interface pour les créer et les manipuler est
3911 fournie par le module @code{(guix build-system)} et les systèmes de
3912 construction eux-mêmes sont exportés par des modules spécifiques.
3913
3914 @cindex sac (représentation à bas-niveau des paquets)
3915 Sous le capot, les systèmes de construction compilent d'abord des objets
3916 paquets en @dfn{sacs}. Un @dfn{sac} est comme un paquet, mais avec moins de
3917 décoration — en d'autres mots, un sac est une représentation à bas-niveau
3918 d'un paquet, qui inclus toutes les entrées de ce paquet, dont certaines ont
3919 été implicitement ajoutées par le système de construction. Cette
3920 représentation intermédiaire est ensuite compilée en une dérivation
3921 (@pxref{Dérivations}).
3922
3923 Les systèmes de construction acceptent une liste d'@dfn{arguments}
3924 facultatifs. Dans les définitions de paquets, ils sont passés @i{via} le
3925 champ @code{arguments} (@pxref{Définition des paquets}). Ce sont typiquement des
3926 arguments par mot-clef (@pxref{Optional Arguments, keyword arguments in
3927 Guile,, guile, GNU Guile Reference Manual}). La valeur de ces arguments est
3928 habituellement évaluée dans la @dfn{strate de construction} — c.-à-d.@: par
3929 un processus Guile lancé par le démon (@pxref{Dérivations}).
3930
3931 Le système de construction principal est le @var{gnu-build-system} qui
3932 implémente les procédures de construction standard pour les paquets GNU et
3933 de nombreux autres. Il est fournit par le module @code{(guix build-system
3934 gnu)}.
3935
3936 @defvr {Variable Scheme} gnu-build-system
3937 @var{gnu-build-system} représente le système de construction GNU et ses
3938 variantes (@pxref{Configuration, configuration and makefile conventions,,
3939 standards, GNU Coding Standards}).
3940
3941 @cindex phases de construction
3942 En résumé, les paquets qui l'utilisent sont configurés, construits et
3943 installés avec la séquence @code{./configure && make && make check && make
3944 install} habituelle. En pratique, des étapes supplémentaires sont souvent
3945 requises. Toutes ces étapes sont séparées dans des @dfn{phases}
3946 différentes, notamment@footnote{Regardez les modules @code{(guix build
3947 gnu-build-system)} pour plus de détails sur les phases de construction.}:
3948
3949 @table @code
3950 @item unpack
3951 Décompresse l'archive des sources et se déplace dans l'arborescence des
3952 sources fraîchement extraites. Si la source est en fait un répertoire, le
3953 copie dans l'arborescence de construction et entre dans ce répertoire.
3954
3955 @item patch-source-shebangs
3956 Corrige les shebangs (@code{#!}) rencontrés dans les fichiers pour qu'ils se
3957 réfèrent aux bons noms de fichiers. Par exemple, elle change
3958 @code{#!/bin/sh} en @code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
3959
3960 @item configure
3961 Lance le script @code{configure} avec un certain nombre d'options par
3962 défaut, comme @code{--prefix=/gnu/store/@dots{}}, ainsi que les options
3963 spécifiées par l'argument @code{#:configure-flags}.
3964
3965 @item build
3966 Lance @code{make} avec la liste des drapeaux spécifiés avec
3967 @code{#:make-flags}. Si l'argument @code{#:parallel-build?} est vrai (par
3968 défaut), construit avec @code{make -j}.
3969
3970 @item check
3971 Lance @code{make check}, ou une autre cible spécifiée par
3972 @code{#:test-target}, à moins que @code{#:tests? #f} ne soit passé. Si
3973 l'argument @code{#:parallel-tests?} est vrai (par défaut), lance @code{make
3974 check -j}.
3975
3976 @item install
3977 Lance @code{make install} avec les drapeaux listés dans @code{#:make-flags}.
3978
3979 @item patch-shebangs
3980 Corrige les shebangs des fichiers exécutables installés.
3981
3982 @item strip
3983 Nettoie les symboles de débogage dans les fichiers ELF (à moins que
3984 @code{#:strip-binaries?} ne soit faux), les copie dans la sortie
3985 @code{debug} lorsqu'elle est disponible (@pxref{Installer les fichiers de débogage}).
3986 @end table
3987
3988 @vindex %standard-phases
3989 Le module du côté du constructeur @code{(guix build gnu-build-system)}
3990 définie @var{%standard-phases} comme la liste par défaut des phases de
3991 construction. @var{%standard-phases} est une liste de paires de symboles
3992 et de procédures, où la procédure implémente la phase en question.
3993
3994 La liste des phases utilisées par un paquet particulier peut être modifiée
3995 avec le paramètre @code{#:phases}. Par exemple, en passant :
3996
3997 @example
3998 #:phases (modify-phases %standard-phases (delete 'configure))
3999 @end example
4000
4001 signifie que toutes les procédures décrites plus haut seront utilisées, sauf
4002 la phase @code{configure}.
4003
4004 En plus, ce système de construction s'assure que l'environnement « standard
4005 » pour les paquets GNU est disponible. Cela inclus des outils comme GCC,
4006 libc, Coreutils, Bash, Make, Diffutils, grep et sed (voir le module
4007 @code{(guix build-system gnu)} pour une liste complète). Nous les appelons
4008 les @dfn{entrées implicites} d'un paquet parce que la définition du paquet
4009 ne les mentionne pas.
4010 @end defvr
4011
4012 D'autres objets @code{<build-system>} sont définis pour supporter d'autres
4013 conventions et outils utilisés par les paquets de logiciels libres. Ils
4014 héritent de la plupart de @var{gnu-build-system} et diffèrent surtout dans
4015 l'ensemble des entrées implicites ajoutées au processus de construction et
4016 dans la liste des phases exécutées. Certains de ces systèmes de
4017 construction sont listés ci-dessous.
4018
4019 @defvr {Variable Scheme} ant-build-system
4020 Cette variable est exportée par @code{(guix build-system ant)}. Elle
4021 implémente la procédure de construction pour les paquets Java qui peuvent
4022 être construits avec @url{http://ant.apache.org/, l'outil de construction
4023 Ant}.
4024
4025 Elle ajoute à la fois @code{ant} et the @dfn{kit de développement Java}
4026 (JDK) fournit par le paquet @code{icedtea} à l'ensemble des entrées. Des
4027 paquets différents peuvent être spécifiés avec les paramètres @code{#:ant}
4028 et @code{#:jdk} respectivement.
4029
4030 Lorsque le paquet d'origine ne fournit pas de fichier de construction Ant
4031 acceptable, le paramètre @code{#:jar-name} peut être utilisé pour générer un
4032 fichier de construction Ant @file{build.xml} minimal, avec des tâches pour
4033 construire l'archive jar spécifiée. Dans ce cas, le paramètre
4034 @code{#:source-dir} peut être utilisé pour spécifier le sous-répertoire des
4035 sources, par défaut « src ».
4036
4037 Le paramètre @code{#:main-class} peut être utilisé avec le fichier de
4038 construction minimal pour spécifier la classe principale du jar. Cela rend
4039 le fichier jar exécutable. Le paramètre @code{#:test-include} peut être
4040 utilisé pour spécifier la liste des tests junit à lancer. Il vaut par
4041 défaut @code{(list "**/*Test.java")}. Le paramètre @code{#:test-exclude}
4042 peut être utilisé pour désactiver certains tests. Sa valeur par défaut est
4043 @code{(list "**/Abstract*.java")}, parce que les classes abstraites ne
4044 peuvent pas être utilisées comme des tests.
4045
4046 Le paramètre @code{#:build-target} peut être utilisé pour spécifier la tâche
4047 Ant qui devrait être lancée pendant la phase @code{build}. Par défaut la
4048 tâche « jar » sera lancée.
4049
4050 @end defvr
4051
4052 @defvr {Variable Scheme} android-ndk-build-system
4053 @cindex Distribution android
4054 @cindex système de construction Android NDK
4055 Cette variable est exportée par @code{(guix build-system android-ndk)}.
4056 Elle implémente une procédure de construction pour les paquets du NDK
4057 Android (@i{native development kit}) avec des processus de construction
4058 spécifiques à Guix.
4059
4060 Le système de construction suppose que les paquets installent leur interface
4061 publique (les en-têtes) dans un sous-répertoire de « include » de la sortie
4062 « out » et leurs bibliothèques dans le sous-répertoire « lib » de la sortie
4063 « out ».
4064
4065 Il est aussi supposé que l'union de toutes les dépendances d'un paquet n'a
4066 pas de fichiers en conflit.
4067
4068 Pour l'instant, la compilation croisée n'est pas supportées — donc pour
4069 l'instant les bibliothèques et les fichiers d'en-têtes sont supposés être
4070 des outils de l'hôte.
4071
4072 @end defvr
4073
4074 @defvr {Variable Scheme} asdf-build-system/source
4075 @defvrx {Variable Scheme} asdf-build-system/sbcl
4076 @defvrx {Variable Scheme} asdf-build-system/ecl
4077
4078 Ces variables, exportées par @code{(guix build-system asdf)}, implémentent
4079 les procédures de constructions pour les paquets en Common Lisp qui
4080 utilisent @url{https://common-lisp.net/project/asdf/, ``ASDF''}. ASDF est
4081 un dispositif de définition de systèmes pour les programmes et les
4082 bibliothèques en Common Lisp.
4083
4084 Le système @code{asdf-build-system/source} installe les paquets au format
4085 source qui peuvent être chargés avec n'importe quelle implémentation de
4086 common lisp, via ASDF. Les autres, comme @code{asdf-build-system/sbcl},
4087 installent des binaires au format qu'un implémentation particulière
4088 comprend. Ces systèmes de constructions peuvent aussi être utilisés pour
4089 produire des programmes exécutables ou des images lisp qui contiennent un
4090 ensemble de paquets pré-chargés.
4091
4092 Le système de construction utilise des conventions de nommage. Pour les
4093 paquets binaires, le nom du paquet devrait être préfixé par l'implémentation
4094 lisp, comme @code{sbcl-} pour @code{asdf-build-system/sbcl}.
4095
4096 En plus, le paquet source correspondant devrait étiquetté avec la même
4097 convention que les paquets python (voir @ref{Modules python}), avec le
4098 préfixe @code{cl-}.
4099
4100 Pour les paquets binaires, chaque système devrait être défini comme un
4101 paquet Guix. Si un paquet @code{origine} contient plusieurs systèmes, on
4102 peut créer des variantes du paquet pour construire tous les systèmes. Les
4103 paquets sources, qui utilisent @code{asdf-build-system/source}, peuvent
4104 contenir plusieurs systèmes.
4105
4106 Pour créer des programmes exécutables et des images, les procédures côté
4107 construction @code{build-program} et @code{build-image} peuvent être
4108 utilisées. Elles devraient être appelées dans une phase de construction
4109 après la phase @code{create-symlinks} pour que le système qui vient d'être
4110 construit puisse être utilisé dans l'image créée. @code{build-program}
4111 requiert une liste d'expressions Common Lisp dans l'argument
4112 @code{#:entry-program}.
4113
4114 Si le système n'est pas défini dans son propre fichier @code{.asd} du même
4115 nom, alors le paramètre @code{#:asd-file} devrait être utilisé pour
4116 spécifier dans quel fichier le système est défini. De plus, si le paquet
4117 défini un système pour ses tests dans un fichier séparé, il sera chargé
4118 avant que les tests ne soient lancés s'il est spécifié par le paramètre
4119 @code{#:test-asd-file}. S'il n'est pas spécifié, les fichiers
4120 @code{<system>-tests.asd}, @code{<system>-test.asd}, @code{tests.asd} et
4121 @code{test.asd} seront testés.
4122
4123 Si pour quelque raison que ce soit le paquet doit être nommé d'une manière
4124 différente de ce que la convention de nommage suggère, le paramètre
4125 @code{#:asd-system-name} peut être utilisé pour spécifier le nom du système.
4126
4127 @end defvr
4128
4129 @defvr {Variable Scheme} cargo-build-system
4130 @cindex Langage de programmation Rust
4131 @cindex Cargo (système de construction Rust)
4132 Cette variable est exportée par @code{(guix build-system cargo)}. Elle
4133 supporte les construction de paquets avec Cargo, le système de construction
4134 du @uref{https://www.rust-lang.org, langage de programmation Rust}.
4135
4136 Dans sa phase @code{configure}, ce système de construction remplace les
4137 dépendances spécifiées dans le fichier @file{Cargo.toml} par des paquets
4138 Guix. La phase @code{install} installe les binaires et installe aussi le
4139 code source et le fichier @file{Cargo.toml}.
4140 @end defvr
4141
4142 @defvr {Variable Scheme} cmake-build-system
4143 Cette variable est exportée par @code{(guix build-system cmake)}. Elle
4144 implémente la procédure de construction des paquets qui utilisent
4145 l'@url{http://www.cmake.org, outils de construction CMake}.
4146
4147 Elle ajoute automatiquement le paquet @code{cmake} à l'ensemble des
4148 entrées. Le paquet utilisé peut être spécifié par le paramètre
4149 @code{#:cmake}.
4150
4151 Le paramètre @code{#:configure-flags} est pris comme une liste de drapeaux à
4152 passer à la commande @command{cmake}. Le paramètre @code{#:build-type}
4153 spécifie en termes abstrait les drapeaux passés au compilateur ; sa valeur
4154 par défaut est @code{"RelWithDebInfo"} (ce qui veut dire « mode public avec
4155 les informations de débogage » en plus court), ce qui signifie en gros que
4156 le code sera compilé avec @code{-O2 -g} comme pour les paquets autoconf par
4157 défaut.
4158 @end defvr
4159
4160 @defvr {Variable Scheme} go-build-system
4161 Cette variable est exportée par @code{(guix build-system go)}. Elle
4162 implémente la procédure pour les paquets Go utilisant les
4163 @url{https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies,
4164 mécanismes de construction Go} standard.
4165
4166 L'utilisateur doit fournir une valeur à la clef @code{#:import-path} et,
4167 dans certains cas, @code{#:unpack-path}. Le
4168 @url{https://golang.org/doc/code.html#ImportPaths, chemin d'import}
4169 correspond au chemin dans le système de fichiers attendu par le script de
4170 construction du paquet et les paquets qui s'y réfèrent et fournit une
4171 manière unique de se référer à un paquet Go. Il est typiquement basé sur
4172 une combinaison de l'URI du code source du paquet et d'une structure
4173 hiérarchique du système de fichier. Dans certains cas, vous devrez extraire
4174 le code source du paquet dans une structure de répertoires différente que
4175 celle indiquée par le chemin d'import et @code{#:unpack-path} devrait être
4176 utilisé dans ces cas-là.
4177
4178 Les paquets qui fournissent des bibliothèques Go devraient être installées
4179 avec leur code source. La clef @code{#:install-soruce?}, qui vaut @code{#t}
4180 par défaut, contrôle l'installation du code source. Elle peut être mise à
4181 @code{#f} pour les paquets qui ne fournissent que des fichiers exécutables.
4182 @end defvr
4183
4184 @defvr {Variable Scheme} glib-or-gtk-build-system
4185 Cette variable est exportée par @code{(guix build-system glib-or-gtk)}.
4186 Elle est conçue pour être utilisée par des paquets qui utilisent GLib ou
4187 GTK+.
4188
4189 Ce système de construction ajoute les deux phases suivantes à celles
4190 définies par @var{gnu-build-system} :
4191
4192 @table @code
4193 @item glib-or-gtk-wrap
4194 La phase @code{glib-or-gtk-wrap} s'assure que les programmes dans
4195 @file{bin/} sont capable de trouver les « schemas » GLib et les
4196 @uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, modules
4197 GTK+}. Ceci est fait en enveloppant les programmes dans des scripts de
4198 lancement qui initialisent correctement les variables d'environnement
4199 @code{XDG_DATA_DIRS} et @code{GTK_PATH}.
4200
4201 Il est possible d'exclure des sorties spécifiques de ce processus
4202 d'enveloppage en listant leur nom dans le paramètre
4203 @code{#:glib-or-gtk-wrap-excluded-outputs}. C'est utile lorsqu'une sortie
4204 est connue pour ne pas contenir de binaires GLib ou GTK+, et où l'enveloppe
4205 ajouterait une dépendance inutile vers GLib et GTK+.
4206
4207 @item glib-or-gtk-compile-schemas
4208 La phase @code{glib-or-gtk-compile-schemas} s'assure que tous les
4209 @uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
4210 schémas GSettings} de GLib sont compilés. La compilation est effectuée par
4211 le programme @command{glib-compile-schemas}. Il est fournit par le paquet
4212 @code{glib:bin} qui est automatiquement importé par le système de
4213 construction. Le paquet @code{glib} qui fournit
4214 @command{glib-compile-schemas} peut être spécifié avec le paramètre
4215 @code{#:glib}.
4216 @end table
4217
4218 Ces deux phases sont exécutées après la phase @code{install}.
4219 @end defvr
4220
4221 @defvr {Scheme Variable} guile-build-system
4222 This build system is for Guile packages that consist exclusively of Scheme
4223 code and that are so lean that they don't even have a makefile, let alone a
4224 @file{configure} script. It compiles Scheme code using @command{guild
4225 compile} (@pxref{Compilation,,, guile, GNU Guile Reference Manual}) and
4226 installs the @file{.scm} and @file{.go} files in the right place. It also
4227 installs documentation.
4228
4229 This build system supports cross-compilation by using the @code{--target}
4230 option of @command{guild compile}.
4231
4232 Packages built with @code{guile-build-system} must provide a Guile package
4233 in their @code{native-inputs} field.
4234 @end defvr
4235
4236 @defvr {Variable Scheme} minify-build-system
4237 Cette variable est exportée par @code{(guix build-system minify)}. Elle
4238 implémente une procédure de minification pour des paquets JavaScript
4239 simples.
4240
4241 Elle ajoute @code{uglify-js} à l'ensemble des entrées et l'utilise pour
4242 compresser tous les fichiers JavaScript du répertoire @file{src}. Un
4243 minifieur différent peut être spécifié avec le paramètre @code{#:uglify-js}
4244 mais il est attendu que ce paquet écrive le code minifié sur la sortie
4245 standard.
4246
4247 Lorsque les fichiers JavaScript d'entrée ne sont pas situés dans le
4248 répertoire @file{src}, le paramètre @code{#:javascript-files} peut être
4249 utilisé pour spécifier une liste de noms de fichiers à donner au minifieur.
4250 @end defvr
4251
4252 @defvr {Variable Scheme} ocaml-build-system
4253 Cette variable est exportée par @code{(guix build-system ocaml)}. Elle
4254 implémente une procédure de construction pour les paquets
4255 @uref{https://ocaml.org, OCaml} qui consiste à choisir le bon ensemble de
4256 commande à lancer pour chaque paquet. Les paquets OCaml peuvent demander
4257 des commandes diverses pour être construit. Ce système de construction en
4258 essaye certaines.
4259
4260 Lorsqu'un fichier @file{setup.ml} est présent dans le répertoire de plus
4261 haut niveau, elle lancera @code{ocaml setup.ml -configure}, @code{ocaml
4262 setup.ml -build} et @code{ocaml setup.ml -install}. Le système de
4263 construction supposera que ces fichiers ont été générés par
4264 @uref{http://oasis.forge.ocamlcore.org/, OASIS} et prendra soin
4265 d'initialiser le préfixe et d'activer les tests s'ils ne sont pas
4266 désactivés. Vous pouvez passer des drapeaux de configuration et de
4267 consturction avec @code{#:configure-flags} et @code{#:build-flags}. La clef
4268 @code{#:test-flags} peut être passée pour changer l'ensemble des drapeaux
4269 utilisés pour activer les tests. La clef @code{#:use-make?} peut être
4270 utilisée pour outrepasser ce système dans les phases de construction et
4271 d'installation.
4272
4273 Lorsque le paquet a un fichier @file{configure}, il est supposé qu'il s'agit
4274 d'un script configure écrit à la main qui demande un format différent de
4275 celui de @code{gnu-build-system}. Vous pouvez ajouter plus de drapeaux avec
4276 la clef @code{#:configure-flags}.
4277
4278 Lorsque le paquet a un fichier @file{Makefile} (ou @code{#:use-make?} vaut
4279 @code{#t}), il sera utilisé et plus de drapeaux peuvent être passés à la
4280 construction et l'installation avec la clef @code{#:make-flags}.
4281
4282 Enfin, certains paquets n'ont pas ces fichiers mais utilisent un emplacement
4283 plus ou moins standard pour leur système de construction. Dans ce cas, le
4284 système de construction lancera @code{ocaml pkg/pkg.ml} ou
4285 @code{pkg/build.ml} et prendra soin de fournir le chemin du module findlib
4286 requis. Des drapeaux supplémentaires peuvent être passés via la clef
4287 @code{#:bulid-flags}. L'installation se fait avec
4288 @command{opam-installer}. Dans ce cas, le paquet @code{opam} doit être
4289 ajouté au champ @code{native-inputs} de la définition du paquet.
4290
4291 Remarquez que la plupart des paquets OCaml supposent qu'ils seront installés
4292 dans le même répertoire qu'OCaml, ce qui n'est pas ce que nous voulons faire
4293 dans Guix. En particulier, ils installeront leurs fichiers @file{.so} dans
4294 leur propre répertoire de module, ce qui est normalement correct puisqu'il
4295 s'agit du répertoire du compilateur OCaml. Dans Guix en revanche, le
4296 bibliothèques ne peuvent pas y être trouvées et on utilise
4297 @code{CAML_LD_LIBRARY_PATH} à la place. Cette variable pointe vers
4298 @file{lib/ocaml/site-lib/stubslibs} et c'est là où les bibliothèques
4299 @file{.so} devraient être installées.
4300 @end defvr
4301
4302 @defvr {Variable Scheme} python-build-system
4303 Cette variable est exportée par @code{(guix build-system python)}. Elle
4304 implémente la procédure de construction plus ou moins standarde utilisée
4305 pour les paquets Python, qui consiste à lancer @code{python setup.py build}
4306 puis @code{python setup.py install --prefix=/gnu/store/@dots{}}.
4307
4308 Pour les paquets qui installent des programmes autonomes dans @code{bin/},
4309 elle prend soin d'envelopper ces binaires pour que leur variable
4310 d'environnement @code{PYTHONPATH} pointe vers toutes les bibliothèques
4311 Python dont ils dépendent.
4312
4313 Le paquet Python utilisé pour effectuer la construction peut être spécifié
4314 avec le paramètre @code{#:python}. C'est une manière utile de forcer un
4315 paquet à être construit avec une version particulière de l'interpréteur
4316 python, ce qui peut être nécessaire si le paquet n'est compatible qu'avec
4317 une version de l'interpréteur.
4318
4319 Par défaut Guix appelle @code{setup.py} sous le contrôle de
4320 @code{setuptools}, comme le fait @command{pip}. Certains paquets ne sont
4321 pas compatibles avec setuptools (et pip), ainsi vous pouvez désactiver cela
4322 en mettant le paramètre @code{#:use-setuptools} à @code{#f}.
4323 @end defvr
4324
4325 @defvr {Variable Scheme} perl-build-system
4326 Cette variable est exportée par @code{(guix build-system perl)}. Elle
4327 implémente la procédure de construction standarde des paquets Perl, qui
4328 consiste soit à lancer @code{perl Build.PL --prefix=/gnu/store/@dots{}},
4329 suivi de @code{Build} et @code{Build install} ; ou à lancer @code{perl
4330 Makefile.PL PREFIX=/gnu/store/@dots{}}, suivi de @code{make} et @code{make
4331 install}, en fonction de la présence de @code{Build.PL} ou
4332 @code{Makefile.PL} dans la distribution du paquet. Le premier a la
4333 préférence si @code{Build.PL} et @code{Makefile.PL} existent tous deux dans
4334 la distribution du paquet. Cette préférence peut être inversée en
4335 spécifiant @code{#t} pour le paramètre @code{#:make-maker?}.
4336
4337 L'invocation initiale de @code{perl Makefile.PL} ou @code{perl Build.PL}
4338 passe les drapeaux spécifiés par le paramètre @code{#:make-maker-flags} ou
4339 @code{#:module-build-flags}, respectivement.
4340
4341 Le paquet Perl utilisé peut être spécifié avec @code{#:perl}.
4342 @end defvr
4343
4344 @defvr {Variable Scheme} r-build-system
4345 Cette variable est exportée par @code{(guix build-system r)}. Elle
4346 implémente la procédure de construction utilisée par les paquets
4347 @uref{http://r-project.org, R} qui consiste à lancer à peine plus que
4348 @code{R CMD INSTALL --library=/gnu/store/@dots{}} dans un environnement où
4349 @code{R_LIBS_SITE} contient les chemins de toutes les entrées R. Les tests
4350 sont lancés après l'installation avec la fonction R
4351 @code{tools::testInstalledPackage}.
4352 @end defvr
4353
4354 @defvr {Variable Scheme} texlive-build-system
4355 Cette variable est exportée par @code{(guix build-system texlive)}. Elle
4356 est utilisée pour construire des paquets TeX en mode batch avec le moteur
4357 spécifié. Le système de construction initialise la variable
4358 @code{TEXINPUTS} pour trouver tous les fichiers source TeX dans ses entrées.
4359
4360 Par défaut, elle lance @code{luatex} sur tous les fichiers qui se terminent
4361 par @code{ins}. Un moteur et un format différent peuvent être spécifiés
4362 avec l'argument @code{#:tex-format}. Plusieurs cibles de constructions
4363 peuvent être indiquées avec l'argument @code{#:build-targets} qui attend une
4364 liste de noms de fichiers. Le système de construction ajoute uniquement
4365 @code{texlive-bin} et @code{texlive-latex-base} (de @code{(gnu packages
4366 tex)} à la liste des entrées. Les deux peuvent être remplacés avec les
4367 arguments @code{#:texlive-bin} et @code{#:texlive-latex-base},
4368 respectivement.
4369
4370 Le paramètre @code{#:tex-directory} dit au système de construction où
4371 installer les fichiers construit dans l'arbre texmf.
4372 @end defvr
4373
4374 @defvr {Variable Scheme} ruby-build-system
4375 Cette variable est exportée par @code{(guix build-system ruby)}. Elle
4376 implémenter la procédure de construction RubyGems utilisée par les paquets
4377 Ruby qui consiste à lancer @code{gem build} suivi de @code{gem install}.
4378
4379 Le champ @code{source} d'un paquet qui utilise ce système de construction
4380 référence le plus souvent une archive gem, puisque c'est le format utilisé
4381 par les développeurs Ruby quand ils publient leur logiciel. Le système de
4382 construction décompresse l'archive gem, éventuellement en corrigeant les
4383 sources, lance la suite de tests, recompresse la gemme et l'installe. En
4384 plus, des répertoires et des archives peuvent être référencés pour permettre
4385 de construire des gemmes qui n'ont pas été publiées depuis Git ou une
4386 archive de sources traditionnelle.
4387
4388 Le paquet Ruby utilisé peut être spécifié avec le paramètre @code{#:ruby}.
4389 Une liste de drapeaux supplémentaires à passer à la commande @command{gem}
4390 peut être spécifiée avec le paramètre @code{#:gem-flags}.
4391 @end defvr
4392
4393 @defvr {Variable Scheme} waf-build-system
4394 Cette variable est exportée par @code{(guix build-system waf)}. Elle
4395 implémente une procédure de construction autour du script @code{waf}. Les
4396 phases usuelles — @code{configure}, @code{build} et @code{install} — sont
4397 implémentée en passant leur nom en argument au script @code{waf}.
4398
4399 Le script @code{waf} est exécuté par l'interpréteur Python. Le paquet
4400 Python utilisé pour lancer le script peut être spécifié avec le paramètre
4401 @code{#:python}.
4402 @end defvr
4403
4404 @defvr {Variable Scheme} scons-build-system
4405 Cette variable est exportée par @code{(guix build-system scons)}. Elle
4406 implémente la procédure de construction utilisée par l'outil de construction
4407 SCons. Ce système de construction lance @code{scons} pour construire le
4408 paquet, @code{scons test} pour lancer les tests puis @code{scons install}
4409 pour installer le paquet.
4410
4411 On peut passer des drapeaux supplémentaires à @code{scons} en les spécifiant
4412 avec le paramètre @code{#:scons-flags}. La version de python utilisée pour
4413 lancer SCons peut être spécifiée en sélectionnant le paquet SCons approprié
4414 avec le paramètre @code{#:scons}.
4415 @end defvr
4416
4417 @defvr {Variable Scheme} haskell-build-system
4418 Cette variable est exportée par @code{(guix build-system haskell)}. Elle
4419 implémente la procédure de construction Cabal utilisée par les paquets
4420 Haskell, qui consiste à lancer @code{runhaskell Setup.hs configure
4421 --prefix=/gnu/store/@dots{}} et @code{runhaskell Setup.hs build}. Plutôt
4422 que d'installer le paquets en lançant @code{runhaskell Setup.hs install},
4423 pour éviter d'essayer d'enregistrer les bibliothèques dans le répertoire du
4424 dépôt en lecture-seule du compilateur, le système de construction utilise
4425 @code{runhaskell Setup.hs copy}, suivi de @code{runhaskell Setup.hs
4426 register}. En plus, le système de construction génère la documentation du
4427 paquet en lançant @code{runhaskell Setup.hs haddock}, à moins que
4428 @code{#:haddock? #f} ne soit passé. Des paramètres facultatifs pour Haddock
4429 peuvent être passés à l'aide du paramètre @code{#:haddock-flags}. Si le
4430 fichier @code{Setup.hs} n'est pas trouvé, le système de construction
4431 cherchera @code{Setup.lhs} à la place.
4432
4433 Le compilateur Haskell utilisé peut être spécifié avec le paramètre
4434 @code{#:haskell} qui a pour valeur par défaut @code{ghc}.
4435 @end defvr
4436
4437 @defvr {Variable Scheme} dub-build-system
4438 Cette variable est exportée par @code{(guix build-system dub)}. Elle
4439 implémente la procédure de construction Dub utilisée par les paquets D qui
4440 consiste à lancer @code{dub build} et @code{dub run}. L'installation est
4441 effectuée en copiant les fichiers manuellement.
4442
4443 Le compilateur D utilisé peut être spécifié avec le paramètre @code{#:ldc}
4444 qui vaut par défaut @code{ldc}.
4445 @end defvr
4446
4447 @defvr {Variable Scheme} emacs-build-system
4448 Cette variable est exportée par @code{(guix build-system emacs)}. Elle
4449 implémente une procédure d'installation similaire au système de gestion de
4450 paquet d'Emacs lui-même (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
4451
4452 Elle crée d'abord le fichier @code{@var{package}-autoloads.el}, puis compile
4453 tous les fichiers Emacs Lisp en bytecode. Contrairement au système de
4454 gestion de paquets d'Emacs, les fichiers de documentation info sont déplacés
4455 dans le répertoire standard et le fichier @file{dir} est supprimé. Chaque
4456 paquet est installé dans son propre répertoire dans
4457 @file{share/emacs/site-lisp/guix.d}.
4458 @end defvr
4459
4460 @defvr {Variable Scheme} font-build-system
4461 Cette variable est exportée par @code{(guix build-system font)}. Elle
4462 implémente une procédure d'installation pour les paquets de polices où des
4463 fichiers de polices TrueType, OpenType, etc sont fournis en amont et n'ont
4464 qu'à être copiés à leur emplacement final. Elle copie les fichiers de
4465 polices à l'emplacement standard dans le répertoire de sortie.
4466 @end defvr
4467
4468 @defvr {Variable Scheme} meson-build-system
4469 Cette variable est exportée par @code{(guix build-system meson)}. Elle
4470 implémente la procédure de construction des paquets qui utilisent
4471 @url{http://mesonbuild.com, Meson} comme système de construction.
4472
4473 Elle ajoute à la fois Meson et @uref{https://ninja-build.org/, Ninja} à
4474 l'ensemble des entrées, et ils peuvent être modifiés avec les paramètres
4475 @code{#:meson} et @code{#:ninja} si requis. Le Meson par défaut est
4476 @code{meson-for-build}, qui est spécial parce qu'il ne nettoie pas le
4477 @code{RUNPATH} des binaires et les bibliothèques qu'il installe.
4478
4479 Ce système de construction est une extension de @var{gnu-build-system}, mais
4480 avec les phases suivantes modifiées pour Meson :
4481
4482 @table @code
4483
4484 @item configure
4485 La phase lance @code{meson} avec les drapeaux spécifiés dans
4486 @code{#:configure-flags}. Le drapeau @code{--build-type} est toujours
4487 initialisé à @code{plain} à moins que quelque chose d'autre ne soit spécifié
4488 dans @code{#:build-type}.
4489
4490 @item build
4491 La phase lance @code{ninja} pour construire le paquet en parallèle par
4492 défaut, mais cela peut être changé avec @code{#:parallel-build?}.
4493
4494 @item check
4495 La phase lance @code{ninja} avec la cible spécifiée dans
4496 @code{#:test-target}, qui est @code{"test"} par défaut.
4497
4498 @item install
4499 La phase lance @code{ninja install} et ne peut pas être changée.
4500 @end table
4501
4502 En dehors de cela, le système de construction ajoute aussi la phase suivante
4503 :
4504
4505 @table @code
4506
4507 @item fix-runpath
4508 Cette phase s'assure que tous les binaire peuvent trouver les bibliothèques
4509 dont ils ont besoin. Elle cherche les bibliothèques requises dans les
4510 sous-répertoires du paquet en construction et les ajoute au @code{RUNPATH}
4511 là où c'est nécessaire. Elle supprime aussi les références aux
4512 bibliothèques laissées là par la phase de construction par
4513 @code{meson-for-build} comme les dépendances des tests, qui ne sont pas
4514 vraiment requises pour le programme.
4515
4516 @item glib-or-gtk-wrap
4517 Cette phase est la phase fournie par @code{glib-or-gtk-build-system} et
4518 n'est pas activée par défaut. Elle peut l'être avec @code{#:glib-or-gtk?}.
4519
4520 @item glib-or-gtk-compile-schemas
4521 Cette phase est la phase fournie par @code{glib-or-gtk-build-system} et
4522 n'est pas activée par défaut. Elle peut l'être avec @code{#:glib-or-gtk?}.
4523 @end table
4524 @end defvr
4525
4526 Enfin, pour les paquets qui n'ont pas besoin de choses sophistiquées, un
4527 système de construction « trivial » est disponible. Il est trivial dans le
4528 sens où il ne fournit en gros aucun support : il n'apporte pas de dépendance
4529 implicite, et n'a pas de notion de phase de construction.
4530
4531 @defvr {Variable Scheme} trivial-build-system
4532 Cette variable est exportée par @code{(guix build-system trivial)}.
4533
4534 Ce système de construction requiert un argument @code{#:builder}. Cet
4535 argument doit être une expression Scheme qui construit la sortie du paquet —
4536 comme avec @code{build-expression->derivation} (@pxref{Dérivations,
4537 @code{build-expression->derivation}}).
4538 @end defvr
4539
4540 @node Le dépôt
4541 @section Le dépôt
4542
4543 @cindex dépôt
4544 @cindex éléments du dépôt
4545 @cindex chemins dans le dépôt
4546
4547 Conceptuellement, le @dfn{dépôt} est l'endroit où les dérivations qui ont
4548 bien été construites sont stockées — par défaut, @file{/gnu/store}. Les
4549 sous-répertoires dans le dépôt s'appellent des @dfn{éléments du dépôt} ou
4550 parfois des @dfn{chemins du dépôt}. Le dépôt a une base de données associée
4551 qui contient des informations comme les chemins du dépôt auxquels se
4552 réfèrent chaque chemin du dépôt et la liste des éléments du dépôt
4553 @emph{valides} — les résultats d'une construction réussie. Cette base de
4554 données se trouve dans @file{@var{localstatedir}/guix/db} où
4555 @var{localstatedir} est le répertoire d'états spécifié @i{via} @option
4556 {--localstatedir} à la configuration, typiquement @file{/var}.
4557
4558 C'est @emph{toujours} le démon qui accède au dépôt pour le compte de ses
4559 clients (@pxref{Invoquer guix-daemon}). Pour manipuler le dépôt, les
4560 clients se connectent au démon par un socket Unix-domain, envoient une
4561 requête dessus et lisent le résultat — ce sont des appels de procédures
4562 distantes, ou RPC.
4563
4564 @quotation Remarque
4565 Les utilisateurs ne doivent @emph{jamais} modifier les fichiers dans
4566 @file{/gnu/store} directement. Cela entraînerait des incohérences et
4567 casserait l'hypothèse d'immutabilité du modèle fonctionnel de Guix
4568 (@pxref{Introduction}).
4569
4570 @xref{Invoquer guix gc, @command{guix gc --verify}}, pour des informations
4571 sur la manière de vérifier l'intégrité du dépôt et d'essayer de réparer des
4572 modifications accidentelles.
4573 @end quotation
4574
4575 Le module @code{(guix store)} fournit des procédures pour se connecter au
4576 démon et pour effectuer des RPC. Elles sont décrites plus bas. Par défaut,
4577 @code{open-connection}, et donc toutes les commandes @command{guix} se
4578 connectent au démon local ou à l'URI spécifiée par la variable
4579 d'environnement @code{GUIX_DAEMON_SOCKET}.
4580
4581 @defvr {Variable d'environnement} GUIX_DAEMON_SOCKET
4582 Lorsqu'elle est initialisée, la valeur de cette variable devrait être un nom
4583 de fichier ou une URI qui désigne l'extrémité du démon. Lorsque c'est un
4584 nom de fichier, il dénote un socket Unix-domain où se connecter. En plus
4585 des noms de fichiers, les schémas d'URI supportés sont :
4586
4587 @table @code
4588 @item file
4589 @itemx unix
4590 Pour les sockets Unix-domain. @code{file:///var/guix/daemon-socket/socket}
4591 est équivalent à @file{/var/guix/daemon-socket/socket}.
4592
4593 @item guix
4594 @cindex démon, accès distant
4595 @cindex accès distant au démon
4596 @cindex démon, paramètres de grappes
4597 @cindex grappes, paramètres du démon
4598 Ces URI dénotent des connexions par TCP/IP, sans chiffrement ni
4599 authentification de l'hôte distant. L'URI doit spécifier le nom d'hôte et
4600 éventuellement un numéro de port (par défaut 44146) :
4601
4602 @example
4603 guix://master.guix.example.org:1234
4604 @end example
4605
4606 Ce paramétrage est adapté aux réseaux locaux, comme dans le cas de grappes
4607 de serveurs, où seuls des noms de confiance peuvent se connecter au démon de
4608 construction sur @code{master.guix.example.org}.
4609
4610 L'option @code{--listen} de @command{guix-daemon} peut être utilisé pour lui
4611 dire d'écouter des connexions TCP (@pxref{Invoquer guix-daemon,
4612 @code{--listen}}).
4613
4614 @item ssh
4615 @cindex accès SSH au démon de construction
4616 Ces URI vous permettent de vous connecter au démon à distance à travers
4617 SSH@footnote{Cette fonctionnalité requiert Guile-SSH
4618 (@pxref{Prérequis}).}.
4619
4620 @example
4621 ssh://charlie@@guix.example.org:22
4622 @end example
4623
4624 Comme pour @command{guix copy}, les fichiers de configuration du client
4625 OpenSSH sont respectés (@pxref{Invoquer guix copy}).
4626 @end table
4627
4628 Des schémas d'URI supplémentaires pourraient être supportés dans le futur.
4629
4630 @c XXX: Remove this note when the protocol incurs fewer round trips
4631 @c and when (guix derivations) no longer relies on file system access.
4632 @quotation Remarque
4633 La capacité de se connecter à un démon de construction distant est considéré
4634 comme expérimental à la version @value{VERSION}. Contactez-nous pour
4635 partager vos problèmes ou des suggestions que vous pourriez avoir
4636 (@pxref{Contribuer}).
4637 @end quotation
4638 @end defvr
4639
4640 @deffn {Procédure Scheme} open-connection [@var{uri}] [#:reserve-space? #t]
4641 Se connecte au démon à travers le socket Unix-domain à @var{uri} (une chaîne
4642 de caractères). Lorsque @var{reserve-space?} est vrai, cela demande de
4643 réserver un peu de place supplémentaire sur le système de fichiers pour que
4644 le ramasse-miette puisse opérer au cas où le disque serait plein. Renvoie
4645 un objet serveur.
4646
4647 @var{file} a pour valeur par défaut @var{%default-socket-path}, qui est
4648 l'emplacement normal en fonction des options données à @command{configure}.
4649 @end deffn
4650
4651 @deffn {Procédure Scheme} close-connection @var{server}
4652 Ferme la connexion au @var{serveur}.
4653 @end deffn
4654
4655 @defvr {Variable Scheme} current-build-output-port
4656 Cette variable est liée à un paramètre SRFI-39, qui se réfère au port où les
4657 journaux de construction et d'erreur envoyés par le démon devraient être
4658 écrits.
4659 @end defvr
4660
4661 Les procédures qui font des RPC prennent toutes un objet serveur comme
4662 premier argument.
4663
4664 @deffn {Procédure Scheme} valid-path? @var{server} @var{path}
4665 @cindex éléments du dépôt invalides
4666 Renvoie @code{#t} lorsque @var{path} désigne un élément du dépôt valide et
4667 @code{#f} sinon (un élément invalide peut exister sur le disque mais rester
4668 invalide, par exemple parce que c'est le résultat d'une construction annulée
4669 ou échouée).
4670
4671 Une condition @code{&nix-protocol-error} est levée si @var{path} n'est pas
4672 préfixée par le répertoire du dépôt (@file{/gnu/store}).
4673 @end deffn
4674
4675 @deffn {Procédure Scheme} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
4676 Ajoute @var{text} dans le fichier @var{name} dans le dépôt et renvoie son
4677 chemin. @var{references} est la liste des chemins du dépôt référencés par
4678 le chemin du dépôt qui en résulte.
4679 @end deffn
4680
4681 @deffn {Procédure Scheme} build-derivations @var{server} @var{derivations}
4682 Construit @var{derivaton} (ne liste d'objets @code{<derivation>} ou de
4683 chemins de dérivations) et retourne quand le travailleur a fini de les
4684 construire. Renvoie @code{#t} en cas de réussite.
4685 @end deffn
4686
4687 Remarque que le module @code{(guix monads)} fournit une monad ainsi que des
4688 version monadiques des procédures précédentes, avec le but de rendre plus
4689 facile de travailler avec le code qui accède au dépôt (@pxref{La monad du dépôt}).
4690
4691 @c FIXME
4692 @i{Cette section est actuellement incomplète.}
4693
4694 @node Dérivations
4695 @section Dérivations
4696
4697 @cindex dérivations
4698 Les actions de construction à bas-niveau et l'environnement dans lequel
4699 elles sont effectuées sont représentés par des @dfn{dérivations}. Une
4700 dérivation contient cet ensemble d'informations :
4701
4702 @itemize
4703 @item
4704 Les sorties de la dérivation — les dérivations produisent au moins un
4705 fichier ou répertoire dans le dépôt, mais peuvent en produire plus.
4706
4707 @item
4708 Les entrées de la dérivation, qui peuvent être d'autres dérivations ou des
4709 fichiers dans le dépôt (correctifs, scripts de construction, etc).
4710
4711 @item
4712 Le type de système ciblé par la dérivation — p.ex.@: @code{x86_64-linux}.
4713
4714 @item
4715 Le nom de fichier d'un script de construction dans le dépôt avec les
4716 arguments à lui passer.
4717
4718 @item
4719 Une liste de variables d'environnement à définir.
4720
4721 @end itemize
4722
4723 @cindex chemin de dérivation
4724 Les dérivations permettent aux client du démon de communiquer des actions de
4725 construction dans le dépôt. Elles existent sous deux formes : en tant que
4726 représentation en mémoire, à la fois côté client et démon, et en tant que
4727 fichiers dans le dépôt dont le nom fini par @code{.drv} — on dit que ce sont
4728 des @dfn{chemins de dérivations}. Les chemins de dérivations peuvent être
4729 passés à la procédure @code{build-derivations} pour effectuer les actions de
4730 construction qu'ils prescrivent (@pxref{Le dépôt}).
4731
4732 @cindex dérivations à sortie fixe
4733 Des opérations comme le téléchargement de fichiers et la récupération de
4734 sources gérés par un logiciel de contrôle de version pour lesquels le hash
4735 du contenu est connu à l'avance sont modélisés par des @dfn{dérivations à
4736 sortie fixe}. Contrairement aux dérivation habituelles, les sorties d'une
4737 dérivation à sortie fixe sont indépendantes de ses entrées — p.ex.@: un code
4738 source téléchargé produit le même résultat quelque soit la méthode de
4739 téléchargement utilisée.
4740
4741 Le module @code{(guix derivations)} fournit une représentation des
4742 dérivations comme des objets Scheme, avec des procédures pour créer et
4743 manipuler des dérivations. La primitive de plus bas-niveau pour créer une
4744 dérivation est la procédure @code{derivation} :
4745
4746 @deffn {Procédure Scheme} derivation @var{store} @var{name} @var{builder} @
4747 @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
4748 [#:recursive? #f] [#:inputs '()] [#:env-vars '()] @ [#:system
4749 (%current-system)] [#:references-graphs #f] @
4750 [#:allowed-references #f] [#:disallowed-references #f] @
4751 [#:leaked-env-vars #f] [#:local-build? #f] @
4752 [#:substitutable? #t]
4753
4754 Construit une dérivation avec les arguments donnés et renvie l'objet
4755 @code{<derivation>} obtenu.
4756
4757 Lorsque @var{hash} et @var{hash-algo} sont donnés, une @dfn{dérivation à
4758 sortie fixe} est créée — c.-à-d.@: une dérivation dont le résultat est connu
4759 à l'avance, comme dans le cas du téléchargement d'un fichier. Si, en plus,
4760 @var{recursive?} est vrai, alors la sortie fixe peut être un fichier
4761 exécutable ou un répertoire et @var{hash} doit être le hash d'une archive
4762 contenant la sortie.
4763
4764 Lorsque @var{references-graphs} est vrai, il doit s'agir d'une liste de
4765 paires de noms de fichiers et de chemins du dépôt. Dans ce cas, le graphe
4766 des références de chaque chemin du dépôt est exporté dans l'environnement de
4767 construction dans le fichier correspondant, dans un simple format texte.
4768
4769 Lorsque @var{allowed-references} est vrai, il doit s'agir d'une liste
4770 d'éléments du dépôt ou de sorties auxquelles la sortie de la dérivations
4771 peut faire référence. De même, @var{disallowed-references}, si vrai, doit
4772 être une liste de choses que la sortie ne doit @emph{pas} référencer.
4773
4774 Lorsque @var{leaked-env-vars} est vrai, il doit s'agir d'une liste de
4775 chaînes de caractères qui désignent les variables d'environnements qui
4776 peuvent « fuiter » de l'environnement du démon dans l'environnement de
4777 construction. Ce n'est possible que pour les dérivations à sortie fixe —
4778 c.-à-d.@: lorsque @var{hash} est vrai. L'utilisation principale est de
4779 permettre à des variables comme @code{http_proxy} d'être passées aux
4780 dérivations qui téléchargent des fichiers.
4781
4782 Lorsque @var{local-build?} est vrai, déclare que la dérivation n'est pas un
4783 bon candidat pour le déchargement et devrait plutôt être construit
4784 localement (@pxref{Réglages du délestage du démon}). C'est le cas des petites
4785 dérivations où le coût du transfert de données est plus important que les
4786 bénéfices.
4787
4788 Lorsque que @var{substitutable?} est faux, déclare que les substituts de la
4789 sortie de la dérivation ne devraient pas être utilisés
4790 (@pxref{Substituts}). Cela est utile par exemple pour construire des paquets
4791 qui utilisent des détails du jeu d'instruction du CPU hôte.
4792 @end deffn
4793
4794 @noindent
4795 Voici un exemple avec un script shell comme constructeur, en supposant que
4796 @var{store} est une connexion ouverte au démon et @var{bash} pointe vers un
4797 exécutable Bash dans le dépôt :
4798
4799 @lisp
4800 (use-modules (guix utils)
4801 (guix store)
4802 (guix derivations))
4803
4804 (let ((builder ; ajoute le script Bash au dépôt
4805 (add-text-to-store store "my-builder.sh"
4806 "echo hello world > $out\n" '())))
4807 (derivation store "foo"
4808 bash `("-e" ,builder)
4809 #:inputs `((,bash) (,builder))
4810 #:env-vars '(("HOME" . "/homeless"))))
4811 @result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
4812 @end lisp
4813
4814 Comme on pourrait s'en douter, cette primitive est difficile à utiliser
4815 directement. Une meilleure approche est d'écrire les scripts de
4816 construction en Scheme, bien sur ! Le mieux à faire pour cela est d'écrire
4817 le code de construction comme une « G-expression » et de la passer à
4818 @code{gexp->derivation}. Pour plus d'informations, @pxref{G-Expressions}.
4819
4820 Il fut un temps où @code{gexp->derivation} n'existait pas et où construire
4821 une dérivation donc le code de construction était écrit en Scheme se faisait
4822 avec @code{build-expression->derivation}, documenté plus bas. Cette
4823 procédure est maintenant obsolète, remplacée par @code{gexp->derivation} qui
4824 est meilleure.
4825
4826 @deffn {Procédure Scheme} build-expression->derivation @var{store} @
4827 @var{name} @var{exp} @
4828 [#:system (%current-system)] [#:inputs '()] @
4829 [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
4830 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
4831 [#:references-graphs #f] [#:allowed-references #f] @
4832 [#:disallowed-references #f] @
4833 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
4834 Renvoie une dérivation qui exécute l'expression Scheme @var{exp} comme un
4835 constructeur pour la dérivation @var{name}. @var{inputs} doit être une
4836 liste de tuples @code{(name drv-path sub-drv)} ; lorsque @var{sub-drv} est
4837 omis, @code{"out"} est utilisé. @var{modules} est une liste de noms de
4838 modules Guile du chemin de recherche actuel qui seront copiés dans le dépôt,
4839 compilés et rendus disponibles dans le chemin de chargement pendant
4840 l'exécution de @var{exp} — p.@: ex.@: @code{((guix build utils) (guix build
4841 gnu-build-system))}.
4842
4843 @var{exp} est évaluée dans une environnement où @code{%outputs} est lié à
4844 une liste de paires de sortie/chemin, et où @code{%build-inputs} est lié à
4845 une liste de paires de chaînes de caractères et de chemin de sortie
4846 construite à partir de @var{inputs}. Éventuellement, @var{env-vars} est une
4847 liste de paires de chaînes de caractères spécifiant le nom et la valeur de
4848 variables d'environnement visibles pour le constructeur. Le constructeur
4849 termine en passant le résultat de @var{exp} à @code{exit} ; ainsi, lorsque
4850 @var{exp} renvoie @code{#f}, la construction est considérée en échec.
4851
4852 @var{exp} est construite avec @var{guile-for-build} (une dérivation).
4853 Lorsque @var{guile-for-build} est omis où est @code{#f}, la valeur du fluide
4854 @code{%guile-for-build} est utilisée à la place.
4855
4856 Voir la procédure @code{derivation} pour la signification de
4857 @var{references-graph}, @var{allowed-references},
4858 @var{disallowed-references}, @var{local-build?} et @var{substitutable?}.
4859 @end deffn
4860
4861 @noindent
4862 Voici un exemple de dérivation à sortie unique qui crée un répertoire avec
4863 un fichier :
4864
4865 @lisp
4866 (let ((builder '(let ((out (assoc-ref %outputs "out")))
4867 (mkdir out) ; create /gnu/store/@dots{}-goo
4868 (call-with-output-file (string-append out "/test")
4869 (lambda (p)
4870 (display '(hello guix) p))))))
4871 (build-expression->derivation store "goo" builder))
4872
4873 @result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
4874 @end lisp
4875
4876
4877 @node La monad du dépôt
4878 @section La monad du dépôt
4879
4880 @cindex monad
4881
4882 Les procédures qui travaillent sur le dépôt décrites dans les sections
4883 précédentes prennent toutes une connexion ouverte au démon de construction
4884 comme premier argument. Bien que le modèle sous-jacent soit fonctionnel,
4885 elles ont soit des effets de bord, soit dépendent de l'état actuel du dépôt.
4886
4887 Le premier point est embêtant : on doit se balader avec la connexion au
4888 démon dans toutes ces fonctions, ce qui rend impossible le fait de composer
4889 des fonctions qui ne prennent pas ce paramètre avec des fonctions qui le
4890 prennent. Le deuxième point est problématique : comme les opérations sur le
4891 dépôt ont des effets de bord ou dépendent d'états externes, elles doivent
4892 être enchaînés correctement.
4893
4894 @cindex valeurs monadiques
4895 @cindex fonctions monadiques
4896 C'est là que le module @code{(guix monads)} arrive à la rescousse. Ce
4897 module fournit un cadre pour travailler avec des @dfn{monads}, en
4898 particulier une monad très utile pour notre usage, la @dfn{monad du dépôt}.
4899 Les monads sont des constructions qui permettent deux choses : associer un «
4900 contexte » avec une valeur (dans notre cas, le contexte est le dépôt) et
4901 construire une séquence de calculs (ici les calculs comprennent des accès au
4902 dépôt). Les valeurs dans une monad — les valeurs qui contiennent ce
4903 contexte supplémentaire — sont appelées des @dfn{valeurs monadiques} ; les
4904 procédures qui renvoient ce genre de valeur sont appelées des
4905 @dfn{procédures monadiques}.
4906
4907 Considérez cette procédure « normale » :
4908
4909 @example
4910 (define (sh-symlink store)
4911 ;; Renvoie une dérivation qui crée un lien symbolique vers l'exécutable « bash ».
4912 (let* ((drv (package-derivation store bash))
4913 (out (derivation->output-path drv))
4914 (sh (string-append out "/bin/bash")))
4915 (build-expression->derivation store "sh"
4916 `(symlink ,sh %output))))
4917 @end example
4918
4919 En utilisant @code{(guix monads)} et @code{(guix gexp)}, on peut la réécrire
4920 en une fonction monadique :
4921
4922 @example
4923 (define (sh-symlink)
4924 ;; Pareil, mais renvoie une valeur monadique.
4925 (mlet %store-monad ((drv (package->derivation bash)))
4926 (gexp->derivation "sh"
4927 #~(symlink (string-append #$drv "/bin/bash")
4928 #$output))))
4929 @end example
4930
4931 Il y a plusieurs choses à remarquer avec cette deuxième version : le
4932 paramètre @code{store} est maintenant implicitement « enfilé » dans les
4933 appels aux procédures monadiques @code{package->derivation} et
4934 @code{gexp->derivation}, et la valeur monadique renvoyée par
4935 @code{package->derivation} est @dfn{liée} avec @code{mlet} plutôt qu'avec un
4936 simple @code{let}.
4937
4938 Il se trouve que l'appel à @code{package->derivation} peut même être omis
4939 puisqu'il aura lieu implicitement, comme nous le verrons plus tard
4940 (@pxref{G-Expressions}) :
4941
4942 @example
4943 (define (sh-symlink)
4944 (gexp->derivation "sh"
4945 #~(symlink (string-append #$bash "/bin/bash")
4946 #$output)))
4947 @end example
4948
4949 @c See
4950 @c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
4951 @c for the funny quote.
4952 L'appel à la procédure monadique @code{sh-symlink} n'a aucun effet. En
4953 anglais on pourrait dire « you exit a monad like you exit a building on
4954 fire: by running »@footnote{NdT : « on sort d'une monad comme d'un immeuble
4955 en flamme, en courant ». Le jeu de mot est perdu à la traduction : courrir
4956 et lancer utilisent le même verbe @i{run} en anglais.}. Donc, pour sortir de
4957 la monad et obtenir l'effet escompté, on doit utiliser
4958 @code{run-with-store}.
4959
4960 @example
4961 (run-with-store (open-connection) (sh-symlink))
4962 @result{} /gnu/store/...-sh-symlink
4963 @end example
4964
4965 Remarquez que le module @code{(guix monad-repl)} étend la console Guile avec
4966 de nouvelles « méta-commandes » pour rendre plus facile la manipulation de
4967 procédures monadiques : @code{run-in-store} et @code{enter-store-monad}. La
4968 première est utilisée pour « lancer » une seule valeur monadique à travers
4969 le dépôt :
4970
4971 @example
4972 scheme@@(guile-user)> ,run-in-store (package->derivation hello)
4973 $1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
4974 @end example
4975
4976 La deuxième entre dans une console récursive, où toutes les valeurs de
4977 retour sont automatiquement lancées à travers le dépôt :
4978
4979 @example
4980 scheme@@(guile-user)> ,enter-store-monad
4981 store-monad@@(guile-user) [1]> (package->derivation hello)
4982 $2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
4983 store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
4984 $3 = "/gnu/store/@dots{}-foo"
4985 store-monad@@(guile-user) [1]> ,q
4986 scheme@@(guile-user)>
4987 @end example
4988
4989 @noindent
4990 Remarquez qu'on ne peut pas renvoyer de valeur non monadique dans la console
4991 @code{store-monad}.
4992
4993 Les formes syntaxiques principales pour utiliser des monads en général sont
4994 disponibles dans le module @code{(guix monads)} et sont décrites ci-dessous.
4995
4996 @deffn {Syntaxe Scheme} with-monad @var{monad} @var{body} ...
4997 Évalue n'importe quelle forme @code{>>=} ou @code{return} dans @var{body}
4998 comme une @var{monad}.
4999 @end deffn
5000
5001 @deffn {Syntaxe Scheme} return @var{val}
5002 Renvoie une valeur monadique qui encapsule @var{val}.
5003 @end deffn
5004
5005 @deffn {Syntaxe Scheme} >>= @var{mval} @var{mproc} ...
5006 @dfn{Lie} une valeur monadique @var{mval}, en passant son « contenu » aux
5007 procédures monadiques @var{mproc}@dots{}@footnote{Cette opération est
5008 souvent appelée « bind », mais ce nom dénote une procédure qui n'a rien à
5009 voir en Guile. Ainsi, nous empruntons ce symbole quelque peu cryptique au
5010 langage Haskell}. Il peut y avoir une ou plusieurs @code{mproc}, comme dans
5011 cet exemple :
5012
5013 @example
5014 (run-with-state
5015 (with-monad %state-monad
5016 (>>= (return 1)
5017 (lambda (x) (return (+ 1 x)))
5018 (lambda (x) (return (* 2 x)))))
5019 'some-state)
5020
5021 @result{} 4
5022 @result{} some-state
5023 @end example
5024 @end deffn
5025
5026 @deffn {Syntaxe Scheme} mlet @var{monad} ((@var{var} @var{mval}) ...) @
5027 @var{body} ...
5028 @deffnx {Syntaxe Scheme} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
5029 @var{body} ...
5030 Lie les variables @var{var} aux valeurs monadiques @var{mval} dans
5031 @var{body}, une séquence d'expressions. Comme avec l'opérateur de liaison,
5032 on peut réfléchir comme si on « ouvrait » la valeur non-monadique « contenue
5033 » dans @var{mval} et comme si on faisait en sorte que @var{var} se réfère à
5034 cette valeur pure, non-monadique, dans la portée de @var{body}. La forme
5035 (@var{var} -> @var{val}) lie @var{var} à la valeur « normale » @var{val},
5036 comme @code{let}. L'opération de liaison a lieu en séquence de la gauche
5037 vers la droite. La dernière expression de @var{body} doit être une
5038 expression monadique et son résultat deviendra le résultat de @code{mlet} ou
5039 @code{mlet*} lorsque lancé dans la @var{monad}.
5040
5041 @code{mlet*} est à @code{mlet} ce que @code{let*} est à @code{let}
5042 (@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
5043 @end deffn
5044
5045 @deffn {Système Scheme} mbegin @var{monad} @var{mexp} ...
5046 Lie @var{mexp} et les expressions monadiques suivantes en séquence, et
5047 renvoie le résultat de la dernière expression. Chaque expression dans la
5048 séquence doit être une expression monadique.
5049
5050 Cette procédure est similaire à @code{mlet}, sauf que les valeurs de retour
5051 des expressions monadiques sont ignorées. Dans ce sens, elle est analogue à
5052 @code{begin}, mais appliqué à des expressions monadiques.
5053 @end deffn
5054
5055 @deffn {Système Scheme} mwhen @var{condition} @var{mexp0} @var{mexp*} ...
5056 Lorsque la @var{condition} est vraie, évalue la séquence des expressions
5057 monadiques @var{mexp0}..@var{mexp*} comme dans un @code{mbegin}. Lorsque la
5058 @var{condition} est fausse, renvoie @code{*unspecified*} dans la monad
5059 actuelle. Cahque expression dans la séquence doit être une expression
5060 monadique.
5061 @end deffn
5062
5063 @deffn {Système Scheme} munless @var{condition} @var{mexp0} @var{mexp*} ...
5064 Lorsque la @var{condition} est fausse, évalue la séquence des expressions
5065 monadiques @var{mexp0}..@var{mexp*} comme dans un @code{mbegin}. Lorsque la
5066 @var{condition} est vraie, renvoie @code{*unspecified*} dans la monad
5067 actuelle. Cahque expression dans la séquence doit être une expression
5068 monadique.
5069 @end deffn
5070
5071 @cindex monad d'état
5072 Le module @code{(guix monads)} fournit la @dfn{monad d'état} qui permet à
5073 une valeur supplémentaire — l'état — d'être enfilée à travers les appels de
5074 procédures.
5075
5076 @defvr {Variable Scheme} %state-monad
5077 La monad d'état. les procédure dans la monad d'état peuvent accéder et
5078 modifier l'état qui est enfilé.
5079
5080 Considérez l'exemple ci-dessous. La procédure @code{square} renvoie une
5081 valeur dans la monad d'état. Elle renvoie le carré de son argument, mais
5082 incrémente aussi la valeur actuelle de l'état :
5083
5084 @example
5085 (define (square x)
5086 (mlet %state-monad ((count (current-state)))
5087 (mbegin %state-monad
5088 (set-current-state (+ 1 count))
5089 (return (* x x)))))
5090
5091 (run-with-state (sequence %state-monad (map square (iota 3))) 0)
5092 @result{} (0 1 4)
5093 @result{} 3
5094 @end example
5095
5096 Lorsqu'on la lance à travers @var{%state-monad}, on obtient cet valeur
5097 d'état supplémentaire, qui est le nombre d'appels à @code{square}.
5098 @end defvr
5099
5100 @deffn {Procédure Monadic} current-state
5101 Renvoie l'état actuel dans une valeur monadique.
5102 @end deffn
5103
5104 @deffn {Procédure Monadic} set-current-state @var{value}
5105 Initialise l'état actuel à @var{value} et renvoie l'état précédent dans une
5106 valeur monadique.
5107 @end deffn
5108
5109 @deffn {Procédure Monadic} state-push @var{value}
5110 Pousse @var{value} sur l'état actuel, qui est supposé être une liste, et
5111 renvoie l'état précédent dans une valeur monadique.
5112 @end deffn
5113
5114 @deffn {Procédure Monadic} state-pop
5115 Récupère (pop) une valeur dans l'état actuel et la renvoie comme une valeur
5116 monadique. L'état est supposé être une liste.
5117 @end deffn
5118
5119 @deffn {Procédure Scheme} run-with-state @var{mval} [@var{state}]
5120 Lance la valeur monadique @var{mval} avec @var{state} comme valeur
5121 initiale. Renvoie deux valeurs : la valeur du résultat et l'état du
5122 résultat.
5123 @end deffn
5124
5125 L'interface principale avec la monad du dépôt, fournit par le module
5126 @code{(guix store)}, est la suivante.
5127
5128 @defvr {Variable Scheme} %store-monad
5129 La monad du dépôt — un alias pour @var{%state-monad}.
5130
5131 Les valeurs dans la monad du dépôt encapsulent des accès au dépôt. Lorsque
5132 son effet est requis, une valeur de la monad du dépôt doit être « évaluée »
5133 en la passant à la procédure @code{run-with-store} (voir plus bas).
5134 @end defvr
5135
5136 @deffn {Procédure Scheme} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
5137 Lance @var{mval}, une valeur monadique dans la monad du dépôt, dans
5138 @var{store}, une connexion ouvert au dépôt.
5139 @end deffn
5140
5141 @deffn {Procédure Monadique} text-file @var{name} @var{text} [@var{references}]
5142 Renvoie une valeur monadique correspondant au nom de fichier dans le dépôt
5143 du fichier contenant @var{text}, une chaîne de caractères. @var{references}
5144 est une liste d'éléments du dépôt auxquels le fichier texte en résultat se
5145 réfère ; c'est la liste vide par défaut.
5146 @end deffn
5147
5148 @deffn {Monadic Procedure} binary-file @var{name} @var{data} [@var{references}]
5149 Return as a monadic value the absolute file name in the store of the file
5150 containing @var{data}, a bytevector. @var{references} is a list of store
5151 items that the resulting binary file refers to; it defaults to the empty
5152 list.
5153 @end deffn
5154
5155 @deffn {Procédure Monadique} interned-file @var{file} [@var{name}] @
5156 [#:recursive? #t] [#:select? (const #t)]
5157 Renvoie le nom de @var{file} une fois ajouté au dépôt. Utilise @var{name}
5158 comme nom dans le dépôt ou le nom de fichier de @var{file} si @var{name} est
5159 omis.
5160
5161 Lorsque @var{recursive?} est vraie, le contenu de @var{file} est ajouté
5162 récursivement ; si @var{file} désigne un fichier simple et que
5163 @var{recursive?} est vrai, son contenu est ajouté et ses bits de permissions
5164 sont préservés.
5165
5166 Lorsque @var{recursive?} est vraie, appelle @code{(@var{select?} @var{file}
5167 @var{stat})} pour chaque répertoire où @var{file} est le nom de fichier
5168 absolu de l'entrée et @var{stat} est le résultat de @code{lstat} ; à
5169 l'exception des entrées pour lesquelles @var{select?} ne renvoie pas vrai.
5170
5171 L'exemple ci-dessous ajoute un fichier au dépôt, sous deux noms différents :
5172
5173 @example
5174 (run-with-store (open-connection)
5175 (mlet %store-monad ((a (interned-file "README"))
5176 (b (interned-file "README" "LEGU-MIN")))
5177 (return (list a b))))
5178
5179 @result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
5180 @end example
5181
5182 @end deffn
5183
5184 Le module @code{(guix packages)} exporte les procédures monadiques liées aux
5185 paquets suivantes :
5186
5187 @deffn {Procédure Monadique} package-file @var{package} [@var{file}] @
5188 [#:system (%current-system)] [#:target #f] @
5189 [#:output "out"]
5190 Renvoie une valeur monadique qui contient le nom de fichier absolu de
5191 @var{file} dans le répertoire @var{output} de @var{package}. Lorsque
5192 @var{file} est omis, renvoie le nom du répertoire @var{output} de
5193 @var{package}. Lorsque @var{target} est vrai, l'utilise comme un triplet de
5194 cible pour la compilation croisée.
5195 @end deffn
5196
5197 @deffn {Procédure Monadique} package->derivation @var{package} [@var{system}]
5198 @deffnx {Procédure Monadique} package->cross-derivation @var{package} @
5199 @var{target} [@var{system}]
5200 Version monadique de @code{package-derivation} et
5201 @code{package-cross-derivation} (@pxref{Définition des paquets}).
5202 @end deffn
5203
5204
5205 @node G-Expressions
5206 @section G-Expressions
5207
5208 @cindex G-expression
5209 @cindex quoting du code de construction
5210 On a donc des « dérivations » qui représentent une séquence d'actions de
5211 construction à effectuer pour produire un élément du dépôt
5212 (@pxref{Dérivations}). Ces actions de construction sont effectuées
5213 lorsqu'on demande au démon de construire effectivement les dérivations ;
5214 elles sont lancées par le démon dans un conteneur (@pxref{Invoquer guix-daemon}).
5215
5216 @cindex strate de code
5217 Ça ne devrait pas vous surprendre, mais nous aimons écrire ces actions de
5218 construction en Scheme. Lorsqu'on fait ça, on fini avec deux @dfn{strates}
5219 de code Scheme@footnote{Le terme @dfn{strate} dans ce contexte a été inventé
5220 par Manuel Serrano et ses collaborateurs dans le contexte de leur travaux
5221 sur Hop. Oleg Kiselyov, qui a écrit des
5222 @url{http://okmij.org/ftp/meta-programming/#meta-scheme, essais perspicaces
5223 et du code sur le sujet}, utilise le terme de « mise en scène » pour ce
5224 genre de génération de code.} : le « code hôte » — le code qui défini les
5225 paquets, parle au démon, etc — et le « code côté construction » — le code
5226 qui effectue effectivement les actions de construction, comme créer des
5227 répertoires, invoquer @code{make}, etc.
5228
5229 Pour décrire une dérivation et ses actions de construction, on a typiquement
5230 besoin d'intégrer le code de construction dans le code hôte. Ça revient à
5231 manipuler le code de construction comme de la donnée, et l'homoiconicité de
5232 Scheme — le code a une représentation directe en tant que donnée — est très
5233 utile pour cela. Mais on a besoin de plus que le mécanisme de
5234 @code{quasiquote} en Scheme pour construire des expressions de construction.
5235
5236 Le module @code{(guix gexp)} implémente les @dfn{G-expressions}, une forme
5237 de S-expression adaptée aux expressions de construction. Les G-expression,
5238 ou @dfn{gexps}, consistent en gros en trois formes syntaxiques :
5239 @code{gexp}, @code{ungexp} et @code{ungexp-splicing} (ou plus simplement :
5240 @code{#~}, @code{#$} et @code{#$@@}), qui sont comparable à
5241 @code{quasiquote}, @code{unquote} ett @code{unquote-splicing} respectivement
5242 (@pxref{Expression Syntax, @code{quasiquote},, guile, GNU Guile Reference
5243 Manual}). Cependant il y a des différences majeures :
5244
5245 @itemize
5246 @item
5247 Les Gexps sont conçues pour être écrites dans un fichier et être lancées ou
5248 manipulées par d'autres processus.
5249
5250 @item
5251 Lorsqu'un objet de haut-niveau comme un paquet ou une dérivation est
5252 unquotée dans une gexp, le résultat est comme si le nom de fichier de son
5253 résultat avait été introduit.
5254
5255 @item
5256 Les gexps transportent des informatinos sur les paquets ou les dérivations
5257 auxquels elles se réfèrent, et ces dépendances sont automatiquement ajoutées
5258 comme des entrées du processus de construction qui les utilise.
5259 @end itemize
5260
5261 @cindex abaissement, des objets haut-niveau dans les gepxs
5262 Ce mécanisme n'est pas limité aux paquets et aux dérivations : on peut
5263 définir des @dfn{compilateurs} capable « d'abaisser » d'autres objets de
5264 haut-niveau ou des fichiers dans le dépôt, pour que ces objets puissent
5265 aussi être insérés dans des gexps. Par exemple, des objets haut-niveau
5266 utiles qui pourraient être insérées dans une gexp sont les « objets
5267 simili-fichiers », qui rendent facile l'ajout de fichiers dans le dépôt et
5268 les références vers eux dans les dérivations et autres (voir
5269 @code{local-file} et @code{plain-file} ci-dessous).
5270
5271 Pour illustrer cette idée, voici un exemple de gexp :
5272
5273 @example
5274 (define build-exp
5275 #~(begin
5276 (mkdir #$output)
5277 (chdir #$output)
5278 (symlink (string-append #$coreutils "/bin/ls")
5279 "list-files")))
5280 @end example
5281
5282 Cette gexp peut être passée à @code{gexp->derivation} ; on obtient une
5283 dérivation qui construit une répertoire contenant exactement un lien
5284 symbolique à @file{/gnu/store/@dots{}-coreutils-8.22/bin/ls} :
5285
5286 @example
5287 (gexp->derivation "the-thing" build-exp)
5288 @end example
5289
5290 Comme on pourrait s'y attendre, la chaîne
5291 @code{"/gnu/store/@dots{}-coreutils-8.22"} est substituée à la place de la
5292 référence au paquet @var{coreutils} dans le code de construction final, et
5293 @var{coreutils} est automatiquement devenu une entrée de la dérivation. De
5294 même, @code{#$output} (équivalent à @code{(ungexp output)}) est remplacé par
5295 une chaîne de caractères contenant le nom du répertoire de la sortie de la
5296 dérivation.
5297
5298 @cindex compilation croisée
5299 Dans le contexte d'une compilation croisée, il est utile de distinguer entre
5300 des références à la construction @emph{native} d'un paquet — qui peut être
5301 lancé par l'hôte — et des références à la construction croisée d'un paquet.
5302 Pour cela, @code{#+} joue le même rôle que @code{#$}, mais référence une
5303 construction native d'un paquet :
5304
5305 @example
5306 (gexp->derivation "vi"
5307 #~(begin
5308 (mkdir #$output)
5309 (system* (string-append #+coreutils "/bin/ln")
5310 "-s"
5311 (string-append #$emacs "/bin/emacs")
5312 (string-append #$output "/bin/vi")))
5313 #:target "mips64el-linux-gnu")
5314 @end example
5315
5316 @noindent
5317 Dans l'exemple ci-dessus, la construction native de @var{coreutils} est
5318 utilisée, pour que @command{ln} puisse effectivement être lancé sur l'hôte ;
5319 mais ensuite la construction croisée d'@var{emacs} est utilisée.
5320
5321 @cindex modules importés, pour les gexps
5322 @findex with-imported-modules
5323 Une autre fonctionnalité, ce sont les @dfn{modules importés} : parfois vous
5324 voudriez pouvoir utiliser certains modules Guile de « l'environnement hôte »
5325 dans la gexp, donc ces modules devraient être importés dans «
5326 l'environnement de construction ». La forme @code{with-imported-modules}
5327 vous permet d'exprimer ça :
5328
5329 @example
5330 (let ((build (with-imported-modules '((guix build utils))
5331 #~(begin
5332 (use-modules (guix build utils))
5333 (mkdir-p (string-append #$output "/bin"))))))
5334 (gexp->derivation "empty-dir"
5335 #~(begin
5336 #$build
5337 (display "success!\n")
5338 #t)))
5339 @end example
5340
5341 @noindent
5342 Dans cet exemple, le module @code{(guix build utils)} est automatiquement
5343 récupéré dans l'environnement de construction isolé de notre gexp, pour que
5344 @code{(use-modules (guix build utils))} fonctionne comme on s'y attendrait.
5345
5346 @cindex closure de module
5347 @findex source-module-closure
5348 Typiquement, vous voudriez que la @emph{closure} complète du mondule soit
5349 importé — c.-à-d.@: le module lui-même et tous les modules dont il dépend —
5350 plutôt que seulement le module ; sinon, une tentative de chargement du
5351 module échouera à cause des modules dépendants manquants. La procédure
5352 @code{source-module-closure} calcule la closure d'un module en cherchant
5353 dans ses en-têtes sources, ce qui est pratique dans ce cas :
5354
5355 @example
5356 (use-modules (guix modules)) ;pour 'source-module-closure'
5357
5358 (with-imported-modules (source-module-closure
5359 '((guix build utils)
5360 (gnu build vm)))
5361 (gexp->derivation "something-with-vms"
5362 #~(begin
5363 (use-modules (guix build utils)
5364 (gnu build vm))
5365 @dots{})))
5366 @end example
5367
5368 @cindex extensions, des gexps
5369 @findex with-extensions
5370 Dans la même idée, parfois vous pouvez souhaiter importer non seulement des
5371 modules en Scheme pur, mais aussi des « extensions » comme des liaisons
5372 Guile de bibliothèques C ou d'autres paquet « complets ». Disons que vous
5373 voulez utiliser le paquet @code{guile-json} du côté de la construction,
5374 voici comme procéder :
5375
5376 @example
5377 (use-modules (gnu packages guile)) ;pour 'guile-json'
5378
5379 (with-extensions (list guile-json)
5380 (gexp->derivation "something-with-json"
5381 #~(begin
5382 (use-modules (json))
5383 @dots{})))
5384 @end example
5385
5386 La forme syntaxique pour construire des gexps est résumée ci-dessous.
5387
5388 @deffn {Syntaxe Scheme} #~@var{exp}
5389 @deffnx {Syntaxe Scheme} (gexp @var{exp})
5390 Renvoie une G-expression contenant @var{exp}. @var{exp} peut contenir une
5391 ou plusieurs de ces formes :
5392
5393 @table @code
5394 @item #$@var{obj}
5395 @itemx (ungexp @var{obj})
5396 Introduit une référence à @var{obj}. @var{obj} peut être d'un des types
5397 supportés, par exemple un paquet ou une dérivation, auquel cas la forme
5398 @code{ungexp} est remplacée par le nom de fichier de sa sortie — p.@: ex.@:
5399 @code{"/gnu/store/@dots{}-coreutils-8.22}.
5400
5401 Si @var{boj} est une liste, elle est traversée et les références aux objets
5402 supportés sont substitués de manière similaire.
5403
5404 Si @var{obj} est une autre gexp, son contenu est inséré et ses dépendances
5405 sont ajoutées à celle de la gexp qui l'entoure.
5406
5407 Si @var{obj} est un autre type d'objet, il est inséré tel quel.
5408
5409 @item #$@var{obj}:@var{output}
5410 @itemx (ungexp @var{obj} @var{output})
5411 Cette forme est similaire à la précédente, mais se réfère explicitement à la
5412 sortie @var{output} de l'objet @var{obj} — c'est utile lorsque @var{obj}
5413 produit plusieurs sorties (@pxref{Des paquets avec plusieurs résultats}).
5414
5415 @item #+@var{obj}
5416 @itemx #+@var{obj}:output
5417 @itemx (ungexp-native @var{obj})
5418 @itemx (ungexp-native @var{obj} @var{output})
5419 Comme @code{ungexp}, mais produit une référence à la construction
5420 @emph{native} de @var{obj} lorsqu'elle est utilisée dans une compilation
5421 croisée.
5422
5423 @item #$output[:@var{output}]
5424 @itemx (ungexp output [@var{output}])
5425 Insère une référence à la sortie @var{output} de la dérivation, ou à la
5426 sortie principale lorsque @var{output} est omis.
5427
5428 Cela ne fait du sens que pour les gexps passées à @code{gexp->derivation}.
5429
5430 @item #$@@@var{lst}
5431 @itemx (ungexp-splicing @var{lst})
5432 Comme au dessus, mais recolle (@i{splice}) le contenu de @var{lst} dans la
5433 liste qui la contient.
5434
5435 @item #+@@@var{lst}
5436 @itemx (ungexp-native-splicing @var{lst})
5437 Comme au dessus, mais se réfère à la construction native des objets listés
5438 dans @var{lst}.
5439
5440 @end table
5441
5442 Les G-expressions crées par @code{gexp} ou @code{#~} sont des objets à
5443 l'exécution du type @code{gexp?} (voir plus bas).
5444 @end deffn
5445
5446 @deffn {Syntaxe Scheme} with-imported-modules @var{modules} @var{body}@dots{}
5447 Marque les gexps définies dans @var{body}@dots{} comme requérant
5448 @var{modules} dans leur environnement d'exécution.
5449
5450 Chaque élément dans @var{module} peut être le nom d'un module, comme
5451 @code{(guix build utils)} ou le nom d'un module suivi d'une flêche, suivie
5452 d'un objet simili-fichier :
5453
5454 @example
5455 `((guix build utils)
5456 (guix gcrypt)
5457 ((guix config) => ,(scheme-file "config.scm"
5458 #~(define-module @dots{}))))
5459 @end example
5460
5461 @noindent
5462 Dans l'exemple au dessus, les deux premiers modules sont récupérés dans le
5463 chemin de recherche, et le dernier est créé à partir d'un objet
5464 simili-fichier.
5465
5466 Cette forme a une portée @emph{lexicale} : elle a un effet sur les gexp
5467 directement définies dans @var{body}@dots{}, mais pas sur celles définies
5468 dans des procédures appelées par @var{body}@dots{}.
5469 @end deffn
5470
5471 @deffn {Syntaxe Scheme} with-extensions @var{extensions} @var{body}@dots{}
5472 Marque les gexps définies dans @var{body}@dots{} comme requérant
5473 @var{extensions} dans leur environnement de construction et d'exécution.
5474 @var{extensions} est typiquement une liste d'objets paquets comme définis
5475 dans le module @code{(gnu packages guile)}.
5476
5477 Concrètement, les paquets listés dans @var{extensions} sont ajoutés au
5478 chemin de chargement lors de la compilation des modules importés dans
5479 @var{body}@dots{} ; ils sont aussi ajoutés au chemin de chargement de la
5480 gexp renvoyée par @var{body}@dots{}.
5481 @end deffn
5482
5483 @deffn {Procédure Scheme} gexp? @var{obj}
5484 Renvoie @code{#t} si @var{obj} est une G-expression.
5485 @end deffn
5486
5487 Les G-expressions sont conçues pour être écrites sur le disque, soit en tant
5488 que code pour construire une dérivation, soit en tant que fichier normal
5489 dans le dépôt. Les procédure monadiques suivantes vous permettent de faire
5490 cela (@pxref{La monad du dépôt}, pour plus d'information sur les monads).
5491
5492 @deffn {Procédure Monadique} gexp->derivation @var{name} @var{exp} @
5493 [#:system (%current-system)] [#:target #f] [#:graft? #t] @
5494 [#:hash #f] [#:hash-algo #f] @
5495 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
5496 [#:module-path @var{%load-path}] @
5497 [#:effective-version "2.2"] @
5498 [#:references-graphs #f] [#:allowed-references #f] @
5499 [#:disallowed-references #f] @
5500 [#:leaked-env-vars #f] @
5501 [#:script-name (string-append @var{name} "-builder")] @
5502 [#:deprecation-warnings #f] @
5503 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
5504 Renvoie une dérivation @var{name} qui lance @var{exp} (une gexp) avec
5505 @var{guile-for-build} (une dérivation) sur @var{system} ; @var{exp} est
5506 stocké dans un fichier appelé @var{script-name}. Lorsque @var{target} est
5507 vraie, elle est utilisée comme triplet de cible de compilation croisée pour
5508 les paquets référencés par @var{exp}.
5509
5510 @var{modules} est devenu obsolète en faveur de
5511 @code{with-imported-modules}. Sa signification est de rendre @var{modules}
5512 disponibles dans le contexte d'évaluation de @var{exp} ; @var{modules} est
5513 une liste de noms de modules Guile qui sont cherchés dans @var{module-path}
5514 pour les copier dans le dépôt, les compiler et les rendre disponibles dans
5515 le chemin de chargement pendant l'exécution de @var{exp} — p.@: ex.@:
5516 @code{((guix build utils) (guix build gnu-build-system))}.
5517
5518 @var{effective-version} détermine la chaîne à utiliser lors d'ajout
5519 d'extensions de @var{exp} (voir @code{with-extensions}) au chemin de
5520 recherche — p.@: ex.@: @code{"2.2"}.
5521
5522 @var{graft?} détermine si les paquets référencés par @var{exp} devraient
5523 être greffés si possible.
5524
5525 Lorsque @var{references-graphs} est vrai, il doit s'agir d'une liste de
5526 tuples de la forme suivante :
5527
5528 @example
5529 (@var{file-name} @var{package})
5530 (@var{file-name} @var{package} @var{output})
5531 (@var{file-name} @var{derivation})
5532 (@var{file-name} @var{derivation} @var{output})
5533 (@var{file-name} @var{store-item})
5534 @end example
5535
5536 La partie droite des éléments de @var{references-graphs} est automatiquement
5537 transformée en une entrée du processus de construction @var{exp}. Dans
5538 l'environnement de construction, chaque @var{file-name} contient le graphe
5539 des références de l'élément correspondant, dans un format texte simple.
5540
5541 @var{allowed-references} doit soit être @code{#f}, soit une liste de noms de
5542 sorties ou de paquets. Dans ce dernier cas, la liste dénote les éléments du
5543 dépôt auxquels le résultat a le droit de faire référence. Toute référence à
5544 un autre élément du dépôt conduira à une erreur à la construction. Comme
5545 pour @var{disallowed-references}, qui peut lister des éléments qui ne
5546 doivent pas être référencés par les sorties.
5547
5548 @var{deprecation-warnings} détermine s'il faut afficher les avertissement
5549 d'obsolescence à la compilation de modules. Il peut valoir @code{#f},
5550 @code{t} ou @code{'detailed}.
5551
5552 Les autres arguments sont les mêmes que pour @code{derivation}
5553 (@pxref{Dérivations}).
5554 @end deffn
5555
5556 @cindex objets simili-fichiers
5557 Les procédures @code{local-file}, @code{plain-file}, @code{computed-file},
5558 @code{program-file} et @code{scheme-file} ci-dessous renvoient des
5559 @dfn{objets simili-fichiers}. C'est-à-dire, lorsqu'ils sont unquotés dans
5560 une G-expression, ces objets donnent un fichier dans le dépôt. Considérez
5561 cette G-expression :
5562
5563 @example
5564 #~(system* #$(file-append glibc "/sbin/nscd") "-f"
5565 #$(local-file "/tmp/my-nscd.conf"))
5566 @end example
5567
5568 Ici, l'effet est « d'internaliser » @file{/tmp/my-nscd.conf} en le copiant
5569 dans le dépôt. Une fois étendu, par exemple via @code{gexp->derivation}, la
5570 G-expression se réfère à cette copie dans @file{/gnu/store} ; ainsi,
5571 modifier ou supprimer le fichier dans @file{/tmp} n'a aucun effet sur ce que
5572 fait la G-expression. @code{plain-file} peut être utilisé de la même
5573 manière ; elle est seulement différente par le fait que le contenu du
5574 fichier est passé directement par une chaîne de caractères.
5575
5576 @deffn {Procédure Scheme} local-file @var{file} [@var{name}] @
5577 [#:recursive? #f] [#:select? (const #t)]
5578 Renvoie un objet représentant un fichier local @var{file} à ajouter au dépôt
5579 ; cet objet peut être utilisé dans une gexp. Si @var{file} est un nom de
5580 fichier relatif, il est récupéré à partir de la position du fichier source
5581 dans lequel il apparaît. @var{file} sera ajouté au dépôt sous le nom
5582 @var{name} — par défaut le nom de base de @var{file}.
5583
5584 Lorsque @var{recursive?} est vraie, le contenu de @var{file} est ajouté
5585 récursivement ; si @var{file} désigne un fichier simple et que
5586 @var{recursive?} est vrai, son contenu est ajouté et ses bits de permissions
5587 sont préservés.
5588
5589 Lorsque @var{recursive?} est vraie, appelle @code{(@var{select?} @var{file}
5590 @var{stat})} pour chaque répertoire où @var{file} est le nom de fichier
5591 absolu de l'entrée et @var{stat} est le résultat de @code{lstat} ; à
5592 l'exception des entrées pour lesquelles @var{select?} ne renvoie pas vrai.
5593
5594 C'est la version déclarative de la procédure monadique @code{interned-file}
5595 (@pxref{La monad du dépôt, @code{interned-file}}).
5596 @end deffn
5597
5598 @deffn {Procédure Scheme} plain-file @var{name} @var{content}
5599 Return an object representing a text file called @var{name} with the given
5600 @var{content} (a string or a bytevector) to be added to the store.
5601
5602 C'est la version déclarative de @code{text-file}.
5603 @end deffn
5604
5605 @deffn {Procédure Scheme} computed-file @var{name} @var{gexp} @
5606 [#:options '(#:local-build? #t)]
5607 Renvoie un objet représentant un élément du dépôt @var{name}, un fichier ou
5608 un répertoire calculé par @var{gexp}. @var{options} est une liste
5609 d'arguments supplémentaires à passer à @code{gexp->derivation}.
5610
5611 C'est la version déclarative de @code{gexp->derivation}.
5612 @end deffn
5613
5614 @deffn {Procédure monadique} gexp->script @var{name} @var{exp} @
5615 [#:guile (default-guile)] [#:module-path %load-path]
5616 Renvoie un script exécutable @var{name} qui lance @var{exp} avec
5617 @var{guile}, avec les modules importés de @var{exp} dans son chemin de
5618 recherche. Cherche les modules de @var{exp} dans @var{module-path}.
5619
5620 L'exemple ci-dessous construit un script qui invoque simplement la commande
5621 @command{ls} :
5622
5623 @example
5624 (use-modules (guix gexp) (gnu packages base))
5625
5626 (gexp->script "list-files"
5627 #~(execl #$(file-append coreutils "/bin/ls")
5628 "ls"))
5629 @end example
5630
5631 Lorsqu'elle est « lancée » à travers le dépôt (@pxref{La monad du dépôt,
5632 @code{run-with-store}}), on obtient une dérivation qui produit une fichier
5633 exécutable @file{/gnu/store/@dots{}-list-files} qui ressemble à :
5634
5635 @example
5636 #!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
5637 !#
5638 (execl "/gnu/store/@dots{}-coreutils-8.22"/bin/ls" "ls")
5639 @end example
5640 @end deffn
5641
5642 @deffn {Procédure Scheme} program-file @var{name} @var{exp} @
5643 [#:guile #f] [#:module-path %load-path]
5644 Renvoie un objet représentant un élément du dépôt @var{name} qui lance
5645 @var{gexp}. @var{guile} est le paquet Guile à utiliser pour exécuter le
5646 script. Les modules importés par @var{gexp} sont recherchés dans
5647 @var{module-path}.
5648
5649 C'est la version déclarative de @code{gexp->script}.
5650 @end deffn
5651
5652 @deffn {Procédure monadique} gexp->file @var{name} @var{exp} @
5653 [#:set-load-path? #t] [#:module-path %load-path] @
5654 [#:splice? #f] @
5655 [#:guile (default-guile)]
5656 Renvoie une dérivation qui construit un fichier @var{name} contenant
5657 @var{exp}. Lorsque @var{splice?} est vrai, @var{exp} est considéré comme
5658 une liste d'expressions qui seront splicée dans le fichier qui en résulte.
5659
5660 Lorsque @var{set-load-path?} est vrai, émet du code dans le fichier de
5661 résultat pour initialiser @code{%load-path} et @code{%load-compiled-path}
5662 pour honorer les modules importés de @var{exp}. Les modules de @var{exp}
5663 sont trouvés dans @var{module-path}.
5664
5665 Le fichier qui en résulte retient les références à toutes les dépendances de
5666 @var{exp} ou un sous-ensemble.
5667 @end deffn
5668
5669 @deffn {Procédure Scheme} scheme-file @var{name} @var{exp} [#:splice? #f]
5670 Renvoie un objet représentant le fichier Scheme @var{name} qui contient
5671 @var{exp}.
5672
5673 C'est la version déclarative de @code{gexp->file}.
5674 @end deffn
5675
5676 @deffn {Procédure monadique} text-file* @var{name} @var{text} @dots{}
5677 Renvoie une valeur monadique qui construit un ficher texte contenant
5678 @var{text}. @var{text} peut lister, en plus de chaînes de caractères, des
5679 objet de n'importe quel type qui peut être utilisé dans une gexp : des
5680 paquets, des dérivations, des fichiers objet locaux, etc. Le fichier du
5681 dépôt qui en résulte en retient toutes les références.
5682
5683 Cette variante devrait être préférée à @code{text-file} lorsque vous
5684 souhaitez créer des fichiers qui référencent le dépôt. Cela est le cas
5685 typiquement lorsque vous construisez un fichier de configuration qui
5686 contient des noms de fichiers du dépôt, comme ceci :
5687
5688 @example
5689 (define (profile.sh)
5690 ;; Renvoie le nom d'un script shell dans le dépôt qui initialise
5691 ;; la variable d'environnement « PATH ».
5692 (text-file* "profile.sh"
5693 "export PATH=" coreutils "/bin:"
5694 grep "/bin:" sed "/bin\n"))
5695 @end example
5696
5697 Dans cet exemple, le fichier @file{/gnu/store/@dots{}-profile.sh} qui en
5698 résulte référence @var{coreutils}, @var{grep} et @var{sed}, ce qui les
5699 empêche d'être glanés tant que le script est accessible.
5700 @end deffn
5701
5702 @deffn {Procédure Scheme} mixed-text-file @var{name} @var{text} @dots{}
5703 Renvoie un objet représentant le fichier du dépôt @var{name} contenant
5704 @var{text}. @var{text} est une séquence de chaînes de caractères et de
5705 fichiers simili-objets, comme dans :
5706
5707 @example
5708 (mixed-text-file "profile"
5709 "export PATH=" coreutils "/bin:" grep "/bin")
5710 @end example
5711
5712 C'est la version déclarative de @code{text-file*}.
5713 @end deffn
5714
5715 @deffn {Procédure Scheme} file-union @var{name} @var{files}
5716 Renvoie un @code{<computed-file>} qui construit un répertoire qui contient
5717 tous les fichiers de @var{files}. Chaque élément de @var{files} doit être
5718 une paire où le premier élément est le nom de fichier à utiliser dans le
5719 nouveau répertoire et le second élément est une gexp dénotant le fichier
5720 cible. Voici un exemple :
5721
5722 @example
5723 (file-union "etc"
5724 `(("hosts" ,(plain-file "hosts"
5725 "127.0.0.1 localhost"))
5726 ("bashrc" ,(plain-file "bashrc"
5727 "alias ls='ls --color=auto'"))))
5728 @end example
5729
5730 Cela crée un répertoire @code{etc} contenant ces deux fichiers.
5731 @end deffn
5732
5733 @deffn {Procédure Scheme} directory-union @var{name} @var{things}
5734 Renvoie un répertoire qui est l'union de @var{things}, où @var{things} est
5735 une liste d'objets simili-fichiers qui dénotent des répertoires. Par exemple
5736 :
5737
5738 @example
5739 (directory-union "guile+emacs" (list guile emacs))
5740 @end example
5741
5742 crée un répertoire qui est l'union des paquets @code{guile} et @code{emacs}.
5743 @end deffn
5744
5745 @deffn {Procédure Scheme} file-append @var{obj} @var{suffix} @dots{}
5746 Renvoie un objet simili-fichier qui correspond à la concaténation de
5747 @var{obj} et @var{suffix} où @var{obj} est un objet abaissable et chaque
5748 @var{suffix} est une chaîne de caractères.
5749
5750 Par exemple, considérez cette gexp :
5751
5752 @example
5753 (gexp->script "run-uname"
5754 #~(system* #$(file-append coreutils
5755 "/bin/uname")))
5756 @end example
5757
5758 On peut obtenir le même effet avec :
5759
5760 @example
5761 (gexp->script "run-uname"
5762 #~(system* (string-append #$coreutils
5763 "/bin/uname")))
5764 @end example
5765
5766 Il y a une différence cependant : dans le cas @code{file-append}, le script
5767 qui en résulte contient le nom de fichier absolu comme une chaîne de
5768 caractère alors que dans le deuxième cas, le script contient une expression
5769 @code{(string-append @dots{})} pour construire le nom de fichier @emph{à
5770 l'exécution}.
5771 @end deffn
5772
5773
5774 Bien sûr, en plus de gexps inclues dans le code « hôte », certains modules
5775 contiennent des outils de construction. Pour savoir facilement qu'ils sont
5776 à utiliser dans la strate de construction, ces modules sont gardés dans
5777 l'espace de nom @code{(guix build @dots{})}.
5778
5779 @cindex abaissement, des objets haut-niveau dans les gepxs
5780 En interne, les objets de haut-niveau sont @dfn{abaissés}, avec leur
5781 compilateur, soit en des dérivations, soit en des objets du dépôt. Par
5782 exemple, abaisser un paquet crée une dérivation, et abaisser un
5783 @code{plain-file} crée un élément du dépôt. Cela est effectué par la
5784 procédure monadique @code{lower-object}.
5785
5786 @deffn {Procédure Monadique} lower-object @var{obj} [@var{system}] @
5787 [#:target #f]
5788 Renvoie la dérivation ou l'élément du dépôt comme une valeur de
5789 @var{%store-monad} qui correspond à @var{obj} pour @var{system}, en
5790 compilant de manière croisée pour @var{target} si @var{target} est vrai.
5791 @var{obj} doit être un objet qui a un compilateur de gexp associé, comme un
5792 @code{<package>}.
5793 @end deffn
5794
5795 @node Invoking guix repl
5796 @section Invoking @command{guix repl}
5797
5798 @cindex REPL, read-eval-print loop
5799 The @command{guix repl} command spawns a Guile @dfn{read-eval-print loop}
5800 (REPL) for interactive programming (@pxref{Using Guile Interactively,,,
5801 guile, GNU Guile Reference Manual}). Compared to just launching the
5802 @command{guile} command, @command{guix repl} guarantees that all the Guix
5803 modules and all its dependencies are available in the search path. You can
5804 use it this way:
5805
5806 @example
5807 $ guix repl
5808 scheme@@(guile-user)> ,use (gnu packages base)
5809 scheme@@(guile-user)> coreutils
5810 $1 = #<package coreutils@@8.29 gnu/packages/base.scm:327 3e28300>
5811 @end example
5812
5813 @cindex inferiors
5814 In addition, @command{guix repl} implements a simple machine-readable REPL
5815 protocol for use by @code{(guix inferior)}, a facility to interact with
5816 @dfn{inferiors}, separate processes running a potentially different revision
5817 of Guix.
5818
5819 The available options are as follows:
5820
5821 @table @code
5822 @item --type=@var{type}
5823 @itemx -t @var{type}
5824 Start a REPL of the given @var{TYPE}, which can be one of the following:
5825
5826 @table @code
5827 @item guile
5828 This is default, and it spawns a standard full-featured Guile REPL.
5829 @item machine
5830 Spawn a REPL that uses the machine-readable protocol. This is the protocol
5831 that the @code{(guix inferior)} module speaks.
5832 @end table
5833
5834 @item --listen=@var{extrémité}
5835 By default, @command{guix repl} reads from standard input and writes to
5836 standard output. When this option is passed, it will instead listen for
5837 connections on @var{endpoint}. Here are examples of valid options:
5838
5839 @table @code
5840 @item --listen=tcp:37146
5841 Accept connections on localhost on port 37146.
5842
5843 @item --listen=unix:/tmp/socket
5844 Accept connections on the Unix-domain socket @file{/tmp/socket}.
5845 @end table
5846 @end table
5847
5848 @c *********************************************************************
5849 @node Utilitaires
5850 @chapter Utilitaires
5851
5852 cette section décrit les utilitaires en ligne de commande de Guix. certains
5853 sont surtout faits pour les développeurs qui écrivent de nouvelles
5854 définitions de paquets tandis que d'autres sont plus utiles pour une
5855 utilisation générale. Ils complètent l'interface de programmation Scheme de
5856 Guix d'une manière pratique.
5857
5858 @menu
5859 * Invoquer guix build:: Construire des paquets depuis la ligne de
5860 commande.
5861 * Invoquer guix edit:: Modifier les définitions de paquets.
5862 * Invoquer guix download:: Télécharger un fichier et afficher son hash.
5863 * Invoquer guix hash:: Calculer le hash cryptographique d'un fichier.
5864 * Invoquer guix import:: Importer des définitions de paquets.
5865 * Invoquer guix refresh:: Mettre à jour les définitions de paquets.
5866 * Invoquer guix lint:: Trouver des erreurs dans les définitions de
5867 paquets.
5868 * Invoquer guix size:: Profiler l'utilisation du disque.
5869 * Invoquer guix graph:: Visualiser le graphe des paquets.
5870 * Invoquer guix environment:: Mettre en place des environnements de
5871 développement.
5872 * Invoquer guix publish:: Partager des substituts.
5873 * Invoquer guix challenge:: Défier les serveurs de substituts.
5874 * Invoquer guix copy:: Copier vers et depuis un dépôt distant.
5875 * Invoquer guix container:: Isolation de processus.
5876 * Invoquer guix weather:: Mesurer la disponibilité des substituts.
5877 @end menu
5878
5879 @node Invoquer guix build
5880 @section Invoquer @command{guix build}
5881
5882 @cindex construction de paquets
5883 @cindex @command{guix build}
5884 La commande @command{guix build} construit des paquets ou des dérivations et
5885 leurs dépendances et affiche les chemins du dépôt qui en résulte. Remarquez
5886 qu'elle ne modifie pas le profil de l'utilisateur — c'est le travail de la
5887 commande @command{guix package} (@pxref{Invoquer guix package}). Ainsi,
5888 elle est surtout utile pour les développeurs de la distribution.
5889
5890 La syntaxe générale est :
5891
5892 @example
5893 guix build @var{options} @var{package-or-derivation}@dots{}
5894 @end example
5895
5896 Par exemple, la commande suivante construit la dernière version d'Emacs et
5897 de Guile, affiche leur journaux de construction et enfin affiche les
5898 répertoires des résultats :
5899
5900 @example
5901 guix build emacs guile
5902 @end example
5903
5904 De même, la commande suivante construit tous les paquets disponibles :
5905
5906 @example
5907 guix build --quiet --keep-going \
5908 `guix package -A | cut -f1,2 --output-delimiter=@@`
5909 @end example
5910
5911 @var{package-or-derivation} peut être soit le nom d'un paquet trouvé dans la
5912 distribution logicielle comme @code{coreutils}, soit @code{coreutils@@8.20},
5913 soit une dérivation comme @file{/gnu/store/@dots{}-coreutils-8.19.drv}.
5914 Dans le premier cas, la commande cherchera un paquet avec le nom
5915 correspondant (et éventuellement la version) dans les modules de la
5916 distribution GNU (@pxref{Modules de paquets}).
5917
5918 Autrement, l'option @code{--expression} peut être utilisée pour spécifier
5919 une expression Scheme qui s'évalue en un paquet ; c'est utile pour
5920 différencier des paquets avec le même nom ou des variantes de paquets.
5921
5922 Il peut y avoir aucune, une ou plusieurs @var{options}. Les options
5923 disponibles sont décrites dans les sous-sections ci-dessous.
5924
5925 @menu
5926 * Options de construction communes:: Options de construction pour la
5927 plupart des commandes.
5928 * Options de transformation de paquets:: Créer des variantes de paquets.
5929 * Options de construction supplémentaires:: Options spécifiques à «
5930 guix build ».
5931 * Débogage des échecs de construction:: La vie d'un empaqueteur.
5932 @end menu
5933
5934 @node Options de construction communes
5935 @subsection Options de construction communes
5936
5937 Un certain nombre d'options qui contrôlent le processus de construction sont
5938 communes avec @command{guix build} et les autres commandes qui peuvent
5939 générer des constructions, comme @command{guix package} ou @command{guix
5940 archive}. Voici ces options :
5941
5942 @table @code
5943
5944 @item --load-path=@var{répertoire}
5945 @itemx -L @var{répertoire}
5946 Ajoute @var{répertoire} au début du chemin de recherche de module de paquets
5947 (@pxref{Modules de paquets}).
5948
5949 Cela permet à des utilisateurs de définir leur propres paquets et les rendre
5950 disponibles aux outils en ligne de commande.
5951
5952 @item --keep-failed
5953 @itemx -K
5954 Garde l'arborescence de construction des constructions en échec. Ainsi, si
5955 une construction échoue, son arborescence de construction est préservée dans
5956 @file{/tmp}, dans un répertoire dont le nom est affiché à la fin du journal
5957 de construction. Cela est utile pour déboguer des échecs de construction.
5958 @xref{Débogage des échecs de construction}, pour des astuces sur la manière de déboguer
5959 des problèmes de construction.
5960
5961 @item --keep-going
5962 @itemx -k
5963 Continue lorsque certaines dérivations échouent ; ne s'arrête que lorsque
5964 toutes les constructions ont soit réussies, soit échouées.
5965
5966 Le comportement par défaut est de s'arrêter dès qu'une des dérivations
5967 spécifiées échoue.
5968
5969 @item --dry-run
5970 @itemx -n
5971 Ne pas construire les dérivations.
5972
5973 @anchor{option de repli}
5974 @item --fallback
5975 Lorsque la substitution d'un binaire pré-compilé échoue, construit les
5976 paquets localement à la place (@pxref{Échec de substitution}).
5977
5978 @item --substitute-urls=@var{urls}
5979 @anchor{client-substitute-urls}
5980 Considère @var{urls} comme une liste d'URL de sources de substituts séparés
5981 par des espaces, et remplace la liste par défaut d'URL de
5982 @command{guix-daemon} (@pxref{daemon-substitute-urls,, @command{guix-daemon}
5983 URLs}).
5984
5985 Cela signifie que les substituts peuvent être téléchargés depuis @var{urls},
5986 tant qu'ils sont signés par une clef autorisée par l'administrateur système
5987 (@pxref{Substituts}).
5988
5989 Lorsque @var{urls} est la chaîne vide, cela a pour effet de désactiver la
5990 substitution.
5991
5992 @item --no-substitutes
5993 Ne pas utiliser de substitut pour les résultats de la construction.
5994 C'est-à-dire, toujours construire localement plutôt que de permettre le
5995 téléchargement de binaires pré-construits (@pxref{Substituts}).
5996
5997 @item --no-grafts
5998 Ne par « greffer » les paquets. En pratique, cela signifie que les mises à
5999 jour des paquets disponibles comme des greffes ne sont pas appliquées.
6000 @xref{Mises à jour de sécurité}, pour plus d'information sur les greffes.
6001
6002 @item --rounds=@var{n}
6003 Construit chaque dérivation @var{n} fois d'affilé, et renvoie une erreur si
6004 les constructions consécutives ne sont pas identiques bit-à-bit.
6005
6006 Cela est une manière utile pour détecter des processus de construction non
6007 déterministes. Les processus de construction non déterministes sont
6008 problématiques car ils rendent pratiquement impossible la
6009 @emph{vérification} par les utilisateurs de l'authenticité de binaires
6010 tiers. @xref{Invoquer guix challenge}, pour plus d'informations.
6011
6012 Remarquez que, les résultats qui diffèrent ne sont pas gardés, donc vous
6013 devrez inspecter manuellement chaque erreur — p.@: ex.@: en gardant l'un des
6014 résultats avec @code{guix archive --export} (@pxref{Invoquer guix archive}),
6015 puis en reconstruisant, et enfin en comparant les deux résultats.
6016
6017 @item --no-build-hook
6018 N'essaye pas de décharger les constructions via le « crochet de construction
6019 » du démon (@pxref{Réglages du délestage du démon}). C'est-à-dire que tout sera
6020 construit localement plutôt que de décharger les constructions à une machine
6021 distante.
6022
6023 @item --max-silent-time=@var{secondes}
6024 Lorsque le processus de construction ou de substitution restent silencieux
6025 pendant plus de @var{secondes}, le terminer et rapporter une erreur de
6026 construction.
6027
6028 Par défaut, les paramètres du démon sont pris en compte (@pxref{Invoquer guix-daemon, @code{--max-silent-time}}).
6029
6030 @item --timeout=@var{secondes}
6031 De même, lorsque le processus de construction ou de substitution dure plus
6032 de @var{secondes}, le terminer et rapporter une erreur de construction.
6033
6034 Par défaut, les paramètres du démon sont pris en compte (@pxref{Invoquer guix-daemon, @code{--timeout}}).
6035
6036 @item --verbosity=@var{level}
6037 Utilise le niveau de verbosité donné. @var{level} doit être un entier entre
6038 0 et 5 ; les entiers les plus hauts signifient une sortie plus verbeuse. Le
6039 mettre à 4 ou plus peut être utile pour déboguer des problèmes de
6040 configuration du démon de construction.
6041
6042 @item --cores=@var{n}
6043 @itemx -c @var{n}
6044 Permet d'utiliser jusqu'à @var{n} cœurs du CPU pour la construction. La
6045 valeur spéciale @code{0} signifie autant de cœurs que possible.
6046
6047 @item --max-jobs=@var{n}
6048 @itemx -M @var{n}
6049 Permet au plus @var{n} travaux de construction en parallèle. @xref{Invoquer guix-daemon, @code{--max-jobs}}, pour plus de détails sur cette option et
6050 l'option équivalente pour @command{guix-daemon}.
6051
6052 @end table
6053
6054 Sous le capot, @command{guix build} est surtout un interface à la procédure
6055 @code{package-derivation} du module @code{(guix packages)}, et à la
6056 procédure @code{build-derivations} du module @code{(guix derivations)}.
6057
6058 En plus des options passées explicitement par la ligne de commande,
6059 @command{guix build} et les autres commande @command{guix} qui peuvent
6060 effectuer des construction honorent la variable d'environnement
6061 @code{GUIX_BUILD_OPTIONS}.
6062
6063 @defvr {Variable d'environnement} GUIX_BUILD_OPTIONS
6064 Les utilisateurs peuvent définir cette variable à une liste d'options de la
6065 ligne de commande qui seront automatiquement utilisées par @command{guix
6066 build} et les autres commandes @command{guix} qui peuvent effectuer des
6067 constructions, comme dans l'exemple suivant :
6068
6069 @example
6070 $ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
6071 @end example
6072
6073 Ces options sont analysées indépendamment, et le résultat est ajouté aux
6074 options de la ligne de commande analysées.
6075 @end defvr
6076
6077
6078 @node Options de transformation de paquets
6079 @subsection Options de transformation de paquets
6080
6081 @cindex variantes de paquets
6082 Un autre ensemble d'options de la ligne de commande supportés par
6083 @command{guix build} et aussi @command{guix package} sont les @dfn{options
6084 de transformation de paquets}. Ce sont des options qui rendent possible la
6085 définition de @dfn{variantes de paquets} — par exemple, des paquets
6086 construit à partir de sources différentes. C'est une manière simple de
6087 créer des paquets personnalisés à la volée sans avoir à taper les
6088 définitions de variantes de paquets (@pxref{Définition des paquets}).
6089
6090 @table @code
6091
6092 @item --with-source=@var{source}
6093 @itemx --with-source=@var{paquet}=@var{source}
6094 @itemx --with-source=@var{paquet}@@@var{version}=@var{source}
6095 Utiles @var{source} comme la source de @var{paquet}, et @var{version} comme
6096 son numéro de version. @var{source} doit être un nom de fichier ou une URL,
6097 comme pour @command{guix download} (@pxref{Invoquer guix download}).
6098
6099 Lorsque @var{paquet} est omis, la commande utilisera le nom de paquet
6100 spécifié par la base de @var{source} — p.@: ex.@: si @var{source} est
6101 @code{/src/guix-2.0.10.tar.gz}, le paquet correspondant est @code{guile}.
6102
6103 De même, lorsque @var{version} est omis, la chaîne de version est inférée à
6104 partir de @var{source} ; dans l'exemple précédent, il s'agit de
6105 @code{2.0.10}.
6106
6107 Cette option permet aux utilisateurs d'essayer des version des paquets
6108 différentes de celles fournies par la distribution. L'exemple ci-dessous
6109 télécharge @file{ed-1.7.tar.g} depuis un mirroir GNU et l'utilise comme
6110 source pour le paquet @code{ed} :
6111
6112 @example
6113 guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
6114 @end example
6115
6116 En tant que développeur, @code{--with-source} permet de tester facilement
6117 des version bêta :
6118
6119 @example
6120 guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
6121 @end example
6122
6123 @dots{} ou pour construire un dépôt de gestion de version dans un
6124 environnement vierge :
6125
6126 @example
6127 $ git clone git://git.sv.gnu.org/guix.git
6128 $ guix build guix --with-source=guix@@1.0=./guix
6129 @end example
6130
6131 @item --with-input=@var{paquet}=@var{remplaçant}
6132 Remplace la dépendance sur @var{paquet} par une dépendance à
6133 @var{remplaçant}. @var{paquet} doit être un nom de paquet et
6134 @var{remplaçant} doit être une spécification de paquet comme @code{guile} ou
6135 @code{guile@@1.8}.
6136
6137 Par exemple, la commande suivante construit Guix, mais remplace sa
6138 dépendance à la version stable actuelle de Guile par une dépendance à une
6139 ancienne version de Guile, @code{guile@@2.0} :
6140
6141 @example
6142 guix build --with-input=guile=guile@@2.0 guix
6143 @end example
6144
6145 C'est un remplacement récursif profond. Donc dans cet exemple, à la fois
6146 @code{guix} et ses dépendances @code{guile-json} (qui dépend aussi de
6147 @code{guile}) sont reconstruits avec @code{guile@@2.0}.
6148
6149 Cette option est implémentée avec la procédure Scheme
6150 @code{package-input-rewriting} (@pxref{Définition des paquets,
6151 @code{package-input-rewriting}}).
6152
6153 @item --with-graft=@var{paquet}=@var{remplaçant}
6154 Cette option est similaire à @code{--with-input} mais avec une différence
6155 importante : plutôt que de reconstruire la chaîne de dépendance complète,
6156 @var{remplaçant} est construit puis @dfn{greffé} sur les binaires qui
6157 référençaient initialement @var{paquet}. @xref{Mises à jour de sécurité}, pour plus
6158 d'information sur les greffes.
6159
6160 Par exemple, la commande ci-dessous greffe la version 3.5.4 de GnuTLS sur
6161 Wget et toutes ses dépendances, en remplaçant les références à la version
6162 actuelle de GnuTLS à laquelle ils se réfèrent actuellement :
6163
6164 @example
6165 guix build --with-graft=gnutls=gnutls@@3.5.4 wget
6166 @end example
6167
6168 Cela a l'avantage d'être bien plus rapide que de tout reconstruire. Mais il
6169 y a un piège : cela ne fonctionne que si @var{paquet} et @var{remplaçant}
6170 sont strictement compatibles — par exemple, s'ils fournissent une
6171 bibliothèque, l'interface binaire applicative (ABI) de ces bibliothèques
6172 doivent être compatibles. Si @var{remplaçant} est incompatible avec
6173 @var{paquet}, alors le paquet qui en résulte peut devenir inutilisable. À
6174 utilisez avec précaution !
6175
6176 @end table
6177
6178 @node Options de construction supplémentaires
6179 @subsection Options de construction supplémentaires
6180
6181 Les options de la ligne de commande ci-dessous sont spécifiques à
6182 @command{guix build}.
6183
6184 @table @code
6185
6186 @item --quiet
6187 @itemx -q
6188 Construire en silence, sans afficher les journaux de construction. À la
6189 fin, le journal de construction est gardé dans @file{/var} (ou similaire) et
6190 on peut toujours l'y trouver avec l'option @option{--log-file}.
6191
6192 @item --file=@var{fichier}
6193 @itemx -f @var{fichier}
6194
6195 Construit le paquet ou la dérivation en lequel le code dans @var{file}
6196 s'évalue.
6197
6198 Par exemple, @var{file} peut contenir une définition de paquet comme ceci
6199 (@pxref{Définition des paquets}) :
6200
6201 @example
6202 @verbatiminclude package-hello.scm
6203 @end example
6204
6205 @item --expression=@var{expr}
6206 @itemx -e @var{expr}
6207 Construit le paquet ou la dérivation en lequel @var{expr} s'évalue.
6208
6209 Par exemple, @var{expr} peut être @code{(@@ (gnu packages guile)
6210 guile-1.8)}, qui désigne sans ambiguïté cette variante spécifique de la
6211 version 1.8 de Guile.
6212
6213 Autrement, @var{exp} peut être une G-expression, auquel cas elle est
6214 utilisée comme un programme de construction passé à @code{gexp->derivation}
6215 (@pxref{G-Expressions}).
6216
6217 Enfin, @var{expr} peut se référer à une procédure monadique à au moins un
6218 argument (@pxref{La monad du dépôt}). La procédure doit renvoyer une
6219 dérivation comme une valeur monadique, qui est ensuite lancée à travers
6220 @code{run-with-store}.
6221
6222 @item --source
6223 @itemx -S
6224 Construit les dérivation source des paquets, plutôt que des paquets
6225 eux-même.
6226
6227 Par exemple, @code{guix build -S gcc} renvoie quelque chose comme
6228 @file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, qui est l'archive des sources
6229 de GCC.
6230
6231 L'archive des sources renvoyée est le résultat de l'application des
6232 correctifs et des extraits de code éventuels spécifiés dans le champ
6233 @code{origin} du paquet (@pxref{Définition des paquets}).
6234
6235 @item --sources
6236 Récupère et renvoie la source de @var{package-or-derivation} et toute ses
6237 dépendances, récursivement. C'est pratique pour obtenir une copie locale de
6238 tous les codes sources requis pour construire @var{packages}, ce qui vous
6239 permet de les construire plus tard même sans accès réseau. C'est une
6240 extension de l'option @code{--source} et peut accepter l'un des arguments
6241 facultatifs suivants :
6242
6243 @table @code
6244 @item package
6245 Cette valeur fait que l'option @code{--sources} se comporte comme l'option
6246 @code{--source}.
6247
6248 @item all
6249 Construit les dérivations des sources de tous les paquets, dont les sources
6250 qui pourraient être listées dans @code{inputs}. C'est la valeur par défaut.
6251
6252 @example
6253 $ guix build --sources tzdata
6254 The following derivations will be built:
6255 /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
6256 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
6257 @end example
6258
6259 @item transitive
6260 Construit les dérivations des sources de tous les paquets, ainsi que toutes
6261 celles les entrées transitives des paquets. On peut utiliser cette option
6262 pour précharger les sources des paquets pour les construire plus tard hors
6263 ligne par exemple.
6264
6265 @example
6266 $ guix build --sources=transitive tzdata
6267 The following derivations will be built:
6268 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
6269 /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
6270 /gnu/store/@dots{}-grep-2.21.tar.xz.drv
6271 /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
6272 /gnu/store/@dots{}-make-4.1.tar.xz.drv
6273 /gnu/store/@dots{}-bash-4.3.tar.xz.drv
6274 @dots{}
6275 @end example
6276
6277 @end table
6278
6279 @item --system=@var{système}
6280 @itemx -s @var{système}
6281 Tenter de construire pour le @var{système} — p.@: ex.@: @code{i686-linux} —
6282 plutôt que pour le type de système de l'hôte de construction.
6283
6284 @quotation Remarque
6285 Le drapeau @code{--system} est utilisé pour une compilation @emph{native} et
6286 ne doit pas être confondu avec une compilation croisée. Voir
6287 @code{--target} ci-dessous pour des informations sur la compilation croisée.
6288 @end quotation
6289
6290 Par exemple, passer @code{--system=i686-linux} sur un système
6291 @code{x86_64-linux} ou @code{--system=armhf-linux} sur un système
6292 @code{aarch64-linux} vous permet de construire des paquets dans un
6293 environnement entièrement 32-bits. C'est une exemple d'utilisation de cette
6294 option sur les systèmes Linux, qui peuvent émuler plusieurs personnalités.
6295
6296 @quotation Remarque
6297 La possibilité de construire pour un système @code{armhf-linux} est activé
6298 sans condition sur les machines @code{aarch64-linux}, bien que certaines
6299 puces aarch64 n'en soient pas capables, comme les ThunderX.
6300 @end quotation
6301
6302 De même, lorsque l'émulation transparente avec QEMU et @code{binfnmt_misc}
6303 est activée (@pxref{Services de virtualisation,
6304 @code{qemu-binfmt-service-type}}), vous pouvez construire pour n'importe
6305 quel système pour lequel un gestionnaire QEMU @code{binfmt_misc} est
6306 installé.
6307
6308 Les constructions pour un autre système que celui de la machine que vous
6309 utilisez peuvent aussi être déchargées à une machine distante de la bonne
6310 architecture. @xref{Réglages du délestage du démon}, pour plus d'information sur le
6311 déchargement.
6312
6313 @item --target=@var{triplet}
6314 @cindex compilation croisée
6315 Effectuer une compilation croisée pour @var{triplet} qui doit être un
6316 triplet GNU valide, comme @code{"mips64el-linux-gnu"} (@pxref{Specifying
6317 target triplets, GNU configuration triplets,, autoconf, Autoconf}).
6318
6319 @anchor{vérification de la construction}
6320 @item --check
6321 @cindex déterminisme, vérification
6322 @cindex reproductibilité, vérification
6323 Reconstruit les @var{package-or-derivation}, qui sont déjà disponibles dans
6324 le dépôt et lève une erreur si les résultats des constructions ne sont pas
6325 identiques bit-à-bit.
6326
6327 Ce mécanisme vous permet de vérifier si les substituts précédemment
6328 installés sont authentiques (@pxref{Substituts}) ou si le résultat de la
6329 construction d'un paquet est déterministe. @xref{Invoquer guix challenge}
6330 pour plus d'informations et pour les outils.
6331
6332 Lorsqu'utilisé avec @option{--keep-failed}, la sourtie différente est gardée
6333 dans le dépôt sous @file{/gnu/store/@dots{}-check}. Cela rend plus facile
6334 l'étude des différences entre les deux résultats.
6335
6336 @item --repair
6337 @cindex réparer les éléments du dépôt
6338 @cindex corruption, récupérer de
6339 Essaye de réparer les éléments du dépôt spécifiés, s'ils sont corrompus, en
6340 les téléchargeant ou en les construisant à nouveau.
6341
6342 Cette opération n'est pas atomique et donc restreinte à l'utilisateur
6343 @code{root}
6344
6345 @item --derivations
6346 @itemx -d
6347 Renvoie les chemins de dérivation, et non les chemins de sortie, des paquets
6348 donnés.
6349
6350 @item --root=@var{fichier}
6351 @itemx -r @var{fichier}
6352 @cindex racines du GC, ajout
6353 @cindex ajout de racines au ramasse-miettes
6354 Fait de @var{fichier} un lien symbolique vers le résultat, et l'enregistre
6355 en tant que racine du ramasse-miettes.
6356
6357 En conséquence, les résultats de cette invocation de @command{guix build}
6358 sont protégés du ramasse-miettes jusqu'à ce que @var{fichier} soit
6359 supprimé. Lorsque cette option est omise, les constructions sont
6360 susceptibles d'être glanées.
6361
6362 @item --log-file
6363 @cindex journaux de construction, accès
6364 Renvoie les noms des journaux de construction ou les URL des
6365 @var{package-or-derivation} donnés ou lève une erreur si les journaux de
6366 construction sont absents.
6367
6368 Cela fonctionne indépendamment de la manière dont les paquets ou les
6369 dérivations sont spécifiées. Par exemple, les invocations suivantes sont
6370 équivalentes :
6371
6372 @example
6373 guix build --log-file `guix build -d guile`
6374 guix build --log-file `guix build guile`
6375 guix build --log-file guile
6376 guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
6377 @end example
6378
6379 Si un journal n'est pas disponible localement, à moins que
6380 @code{--no-substitutes} ne soit passé, la commande cherche un journal
6381 correspondant sur l'un des serveurs de substituts (tels que spécifiés avec
6382 @code{--substitute-urls}.)
6383
6384 Donc par exemple, imaginons que vous souhaitiez voir le journal de
6385 construction de GDB sur MIPS, mais que vous n'avez qu'une machine
6386 @code{x86_64} :
6387
6388 @example
6389 $ guix build --log-file gdb -s mips64el-linux
6390 https://hydra.gnu.org/log/@dots{}-gdb-7.10
6391 @end example
6392
6393 Vous pouvez accéder librement à un vaste bibliothèque de journaux de
6394 construction !
6395 @end table
6396
6397 @node Débogage des échecs de construction
6398 @subsection Débogage des échecs de construction
6399
6400 @cindex échecs de construction, débogage
6401 Lors de la définition d'un nouveau paquet (@pxref{Définition des paquets}), vous
6402 passerez probablement du temps à déboguer et modifier la construction
6403 jusqu'à ce que ça marche. Pour cela, vous devez effectuer les commandes de
6404 construction vous-même dans un environnement le plus proche possible de
6405 celui qu'utilise le démon de construction.
6406
6407 Pour cela, la première chose à faire est d'utiliser l'option
6408 @option{--keep-failed} ou @option{-K} de @command{guix build}, qui gardera
6409 l'arborescence de construction dans @file{/tmp} ou le répertoire spécifié
6410 par @code{TMPDIR} (@pxref{Invoquer guix build, @code{--keep-failed}}).
6411
6412 À partir de là, vous pouvez vous déplacer dans l'arborescence de
6413 construction et sourcer le fichier @file{environment-variables}, qui
6414 contient toutes les variables d'environnement qui étaient définies lorsque
6415 la construction a échoué. Disons que vous déboguez un échec de construction
6416 dans le paquet @code{foo} ; une session typique ressemblerait à cela :
6417
6418 @example
6419 $ guix build foo -K
6420 @dots{} @i{build fails}
6421 $ cd /tmp/guix-build-foo.drv-0
6422 $ source ./environment-variables
6423 $ cd foo-1.2
6424 @end example
6425
6426 Maintenant, vous pouvez invoquer les commandes comme si vous étiez le démon
6427 (presque) et corriger le processus de construction.
6428
6429 Parfois il arrive que, par exemple, les tests d'un paquet réussissent
6430 lorsque vous les lancez manuellement mais échouent quand ils sont lancés par
6431 le démon. Cela peut arriver parce que le démon tourne dans un conteneur où,
6432 contrairement à notre environnement au-dessus, l'accès réseau est
6433 indisponible, @file{/bin/sh} n'existe pas, etc (@pxref{Réglages de l'environnement de construction}).
6434
6435 Dans ce cas, vous pourriez avoir besoin de lancer le processus de
6436 construction dans un conteneur similaire à celui que le démon crée :
6437
6438 @example
6439 $ guix build -K foo
6440 @dots{}
6441 $ cd /tmp/guix-build-foo.drv-0
6442 $ guix environment --no-grafts -C foo --ad-hoc strace gdb
6443 [env]# source ./environment-variables
6444 [env]# cd foo-1.2
6445 @end example
6446
6447 Ici, @command{guix environment -C} crée un conteneur et démarre un nouveau
6448 shell dedans (@pxref{Invoquer guix environment}). La partie
6449 @command{--ad-hoc strace gdb} ajoute les commandes @command{strace} et
6450 @command{gdb} dans le conteneur, ce qui pourrait s'avérer utile pour le
6451 débogage. L'option @option{--no-grafts} s'assure qu'on obtient le même
6452 environnement, avec des paquets non greffés (@pxref{Mises à jour de sécurité}, pour
6453 plus d'informations sur les greffes).
6454
6455 Pour obtenir un conteneur plus proche de ce qui serait utilisé par le démon
6456 de construction, on peut enlever @file{/bin/sh} :
6457
6458 @example
6459 [env]# rm /bin/sh
6460 @end example
6461
6462 Ne vous inquiétez pas, c'est sans danger : tout cela se passe dans un
6463 conteneur jetable créé par @command{guix environment}.
6464
6465 La commande @command{strace} n'est probablement pas dans le chemin de
6466 recherche, mais on peut lancer :
6467
6468 @example
6469 [env]# $GUIX_ENVIRONMENT/bin/strace -f -o log make check
6470 @end example
6471
6472 De cette manière, non seulement vous aurez reproduit les variables
6473 d'environnement utilisées par le démon, mais vous lancerez aussi le
6474 processus de construction dans un conteneur similaire à celui utilisé par le
6475 démon.
6476
6477
6478 @node Invoquer guix edit
6479 @section Invoquer @command{guix edit}
6480
6481 @cindex @command{guix edit}
6482 @cindex définition de paquets, modification
6483 Tant de paquets, tant de fichiers source ! La commande @command{guix edit}
6484 facilite la vie des utilisateurs et des packagers en plaçant leur éditeur
6485 sur le fichier source qui contient la définition des paquets spécifiés. Par
6486 exemple :
6487
6488 @example
6489 guix edit gcc@@4.9 vim
6490 @end example
6491
6492 @noindent
6493 lance le programme spécifié dans la variable d'environnement @code{VISUAL}
6494 ou @code{EDITOR} pour visionner la recette de GCC@tie{}4.9.3 et cele de Vim.
6495
6496 Si vous utilisez une copie du dépôt Git de Guix (@pxref{Construire depuis Git}),
6497 ou que vous avez créé vos propres paquets dans @code{GUIX_PACKAGE_PATH}
6498 (@pxref{Définition des paquets}), vous pourrez modifier les recettes des
6499 paquets. Sinon, vous pourrez examiner les recettes en lecture-seule des
6500 paquets actuellement dans le dépôt.
6501
6502
6503 @node Invoquer guix download
6504 @section Invoquer @command{guix download}
6505
6506 @cindex @command{guix download}
6507 @cindex télécharger les sources des paquets
6508 En écrivant des définitions de paquets, les développeurs ont généralement
6509 besoin de télécharger une archive des sources, calculer son hash SHA256 et
6510 écrire ce hash dans la définition du paquet (@pxref{Définition des paquets}).
6511 L'outil @command{guix download} aide à cette tâche : il télécharge un
6512 fichier à l'URL donné, l'ajoute au dépôt et affiche à la fois son nom dans
6513 le dépôt et son hash SHA56.
6514
6515 Le fait que le fichier téléchargé soit ajouté au dépôt préserve la bande
6516 passante : losque les développeurs finissent par construire le paquet
6517 nouvellement défini avec @command{guix build}, l'archive des sources n'aura
6518 pas besoin d'être téléchargée de nouveau puisqu'elle se trouvera déjà dans
6519 le dépôt. C'est aussi une manière pratique de garder des fichiers
6520 temporairement, qui pourront ensuite être supprimés (@pxref{Invoquer guix gc}).
6521
6522 La commande @command{guix download} supporte les mêmes URI que celles
6523 utilisées dans les définitions de paquets. En particulier, elle supporte
6524 les URI @code {mirror://}. Les URI @code{http} (HTTP sur TLS) sont
6525 supportées @emph{si} les liaisons Guile de GnuTLS sont disponibles dans
6526 l'environnement de l'utilisateur ; si elle ne sont pas disponibles, une
6527 erreur est renvoyée. @xref{Guile Preparations, how to install the GnuTLS
6528 bindings for Guile,, gnutls-guile, GnuTLS-Guile}, pour plus d'informations.
6529
6530 @command{guix download} vérifie les certificats du serveur HTTPS en
6531 chargeant les autorités de certification X.509 depuis le répertoire vers
6532 lequel pointe la variable d'environnement @code{SSL_CERT_DIR} (@pxref{Certificats X.509}), à moins que @option{--no-check-certificate} ne soit utilisé.
6533
6534 Les options suivantes sont disponibles :
6535
6536 @table @code
6537 @item --format=@var{fmt}
6538 @itemx -f @var{fmt}
6539 Écrit le hash dans le format spécifié par @var{fmt}. Pour plus
6540 d'informations sur les valeurs valides pour @var{fmt}, @pxref{Invoquer guix hash}.
6541
6542 @item --no-check-certificate
6543 Ne pas valider les certificats HTTPS des serveurs.
6544
6545 Lorsque vous utilisez cette option, vous n'avez @emph{absolument aucune
6546 garanti} que vous communiquez avec le serveur authentique responsable de
6547 l'URL donnée, ce qui vous rend vulnérable à des attaques de « l'homme du
6548 milieu ».
6549
6550 @item --output=@var{fichier}
6551 @itemx -o @var{fichier}
6552 Enregistre le fichier téléchargé dans @var{fichier} plutôt que de l'ajouter
6553 au dépôt.
6554 @end table
6555
6556 @node Invoquer guix hash
6557 @section Invoquer @command{guix hash}
6558
6559 @cindex @command{guix hash}
6560 La commande @command{guix hash} calcul le hash SHA256 d'un fichier. C'est
6561 surtout un outil pour simplifier la vie des contributeurs de la distribution
6562 : il calcul le hash cryptographique d'un fichier, qui peut être utilisé dans
6563 la définition d'un paquet (@pxref{Définition des paquets}).
6564
6565 La syntaxe générale est :
6566
6567 @example
6568 guix hash @var{option} @var{fichier}
6569 @end example
6570
6571 Lorsque @var{fichier} est @code{-} (un tiret), @command{guix hash} calcul le
6572 hash des données lues depuis l'entrée standard. @command{guix hash} a les
6573 options suivantes :
6574
6575 @table @code
6576
6577 @item --format=@var{fmt}
6578 @itemx -f @var{fmt}
6579 Écrit le hash dans le format spécifié par @var{fmt}.
6580
6581 Les formats supportés sont : @code{nix-base32}, @code{base32}, @code{base16}
6582 (@code{hex} et @code{hexadecimal} peuvent aussi être utilisés).
6583
6584 Si l'option @option {--format} n'est pas spécifiée, @command{guix hash}
6585 affichera le hash en @code{nix-base32}. Cette représentation est utilisée
6586 dans les définitions des paquets.
6587
6588 @item --recursive
6589 @itemx -r
6590 Calcule le hash sur @var{fichier} récursivement.
6591
6592 @c FIXME: Replace xref above with xref to an ``Archive'' section when
6593 @c it exists.
6594 Dans ce cas, le hash est calculé sur une archive contenant @var{fichier},
6595 dont ses enfants si c'est un répertoire. Certaines métadonnées de
6596 @var{fichier} fait partie de l'archive ; par exemple lorsque @var{fichier}
6597 est un fichier normal, le hash est différent que le @var{fichier} soit
6598 exécutable ou non. Les métadonnées comme un horodatage n'ont aucun impact
6599 sur le hash (@pxref{Invoquer guix archive}).
6600
6601 @item --exclude-vcs
6602 @itemx -x
6603 Lorsqu'elle est combinée à @option{--recursive}, exclut les répertoires de
6604 système de contrôle de version (@file{.bzr}, @file{.git}, @file{.hg}, etc).
6605
6606 @vindex git-fetch
6607 Par exemple, voici comment calculer le hash d'un dépôt Git, ce qui est utile
6608 avec la méthode @code{git-fetch} (@pxref{Référence d'origine}) :
6609
6610 @example
6611 $ git clone http://example.org/foo.git
6612 $ cd foo
6613 $ guix hash -rx .
6614 @end example
6615 @end table
6616
6617 @node Invoquer guix import
6618 @section Invoquer @command{guix import}
6619
6620 @cindex importer des paquets
6621 @cindex paquets importés
6622 @cindex conversion de paquets
6623 @cindex Invoquer @command{guix import}
6624 La commande @command{guix import} est utile pour les gens qui voudraient
6625 ajouter un paquet à la distribution avec aussi peu de travail que possible —
6626 une demande légitime. La commande connaît quelques dépôts logiciels d'où
6627 elle peut « importer » des métadonnées de paquets. Le résultat est une
6628 définition de paquet, ou un modèle de définition, dans le format reconnu par
6629 Guix (@pxref{Définition des paquets}).
6630
6631 La syntaxe générale est :
6632
6633 @example
6634 guix import @var{importer} @var{options}@dots{}
6635 @end example
6636
6637 @var{importer} spécifie la source depuis laquelle importer des métadonnées
6638 de paquets, et @var{options} spécifie un identifiant de paquet et d'autres
6639 options spécifiques à @var{importer}. Actuellement les « importateurs »
6640 disponibles sont :
6641
6642 @table @code
6643 @item gnu
6644 Importe des métadonnées d'un paquet GNU donné. Cela fournit un modèle pour
6645 la dernière version de ce paquet GNU, avec le hash de son archive, le
6646 synopsis et la description canonique.
6647
6648 Les informations supplémentaires comme les dépendances du paquet et sa
6649 licence doivent être renseignées manuellement.
6650
6651 Par exemple, la commande suivante renvoie une définition de paquets pour
6652 GNU@tie{}Hello :
6653
6654 @example
6655 guix import gnu hello
6656 @end example
6657
6658 Les options spécifiques sont :
6659
6660 @table @code
6661 @item --key-download=@var{politique}
6662 Comme pour @code{guix refresh}, spécifie la politique de gestion des clefs
6663 OpenPGP manquantes lors de la vérification de la signature d'un paquet.
6664 @xref{Invoquer guix refresh, @code{--key-download}}.
6665 @end table
6666
6667 @item pypi
6668 @cindex pypi
6669 Importe des métadonnées depuis @uref{https://pypi.python.org/, l'index des
6670 paquets Python}@footnote{Cette fonctionnalité requiert l'installation de
6671 Guile-JSON. @xref{Prérequis}.}. Les informations sont récupérées à
6672 partir de la description en JSON disponible sur @code{pypi.python.org} et
6673 inclus généralement toutes les informations utiles, dont les dépendances des
6674 paquets. Pour une efficacité maximale, il est recommandé d'installer
6675 l'utilitaire @command{unzip}, pour que l'importateur puisse dézipper les
6676 wheels Python et récupérer les informations contenues à l'intérieur.
6677
6678 La commande ci-dessous importe les métadonnées du paquet Python
6679 @code{itsdangerous} :
6680
6681 @example
6682 guix import pypi itsdangerous
6683 @end example
6684
6685 @item gem
6686 @cindex gem
6687 Importe des métadonnées de @uref{https://rubygems.org/,
6688 RubyGems}@footnote{Cette fonctionnalité requiert l'installation de
6689 Guile-JSON. @xref{Prérequis}.}. Les informations sont récupérées au
6690 format JSON disponible sur @code{rubygems.org} et inclut les informations
6691 les plus utiles, comme les dépendances à l'exécution. Il y a des pièges
6692 cependant. Les métadonnées ne distinguent pas synopsis et description, donc
6693 la même chaîne est utilisée pour les deux champs. En plus, les détails des
6694 dépendances non Ruby requises pour construire des extensions natives sont
6695 indisponibles et laissé en exercice au packager.
6696
6697 La commande ci-dessous importe les métadonnées pour le paquet Ruby
6698 @code{rails} :
6699
6700 @example
6701 guix import gem rails
6702 @end example
6703
6704 @table @code
6705 @item --recursive
6706 @itemx -r
6707 Traverse le graphe des dépendances du paquet amont donné et génère les
6708 expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
6709 @end table
6710
6711 @item cpan
6712 @cindex CPAN
6713 Importe des métadonnées de @uref{https://www.metacpan.org/,
6714 MetaCPAN}@footnote{Cette fonctionnalité requiert l'installation de
6715 Guile-JSON. @xref{Prérequis}.}. Les informations sont récupérées au
6716 format JSON disponible à travers @uref{https://fastapi.metacpan.org/, l'API
6717 de MetaCPAN} et inclus les informations les plus utiles, comme les
6718 dépendances des modules. L'information sur les licences doit être vérifiée
6719 avec attention. Si Perl est disponible dans le dépôt, alors l'utilitaire
6720 @code{corelist} sera utiliser pour exclure les modules du cœur de la
6721 distribution Perl de la liste des dépendances.
6722
6723 La commande ci-dessous importe les métadonnées du module Perl
6724 @code{Acme::Boolean} :
6725
6726 @example
6727 guix import cpan Acme::Boolean
6728 @end example
6729
6730 @item cran
6731 @cindex CRAN
6732 @cindex Bioconductor
6733 Importe des métadonnées de @uref{https://cran.r-project.org/, CRAN}, le
6734 dépôt central de @uref{http://r-project.org, l'environnement statistique et
6735 graphique GUN@tie{}R}.
6736
6737 Les informations sont extraites du fichier @file{DESCRIPTION} du paquet.
6738
6739 La commande ci-dessous importe les métadonnées du paquet R @code{Cairo} :
6740
6741 @example
6742 guix import cran Cairo
6743 @end example
6744
6745 Lorsque l'option @code{--recursive} est utilisée, l'importateur traversera
6746 le graphe des dépendances du paquet amont récursivement et générera des
6747 expressions de paquets pour tous ceux qui ne sont pas déjà dans Guix.
6748
6749 Lorsque l'option @code{--archive=bioconductor} est utilisée, les métadonnées
6750 sont importées de @uref{https://www.bioconductor.org/, Bioconductor}, un
6751 répertoire de paquets R pour l'analyse et la compréhension de données
6752 génomiques volumineuses en bioinformatique.
6753
6754 Les informations sont extraites du fichier @file{DESCRIPTION} d'un paquet
6755 publié sur l'interface web du dépôt SVN de Bioconductor.
6756
6757 La commande ci-dessous importe les métadonnées du paquet R
6758 @code{GenomicRanges} :
6759
6760 @example
6761 guix import cran --archive=bioconductor GenomicRanges
6762 @end example
6763
6764 @item texlive
6765 @cindex TeX Live
6766 @cindex CTAN
6767 Importe les métadonnées de @uref{http://www.ctan.org/, CTAN}, l'archive TeX
6768 réseau complète pour les paquets TeX qui font partie de la
6769 @uref{https://www.tug.org/texlive/, distribution TeX Live}.
6770
6771 Les informations sur les paquets sont obtenues à travers l'API XML fournie
6772 par CTAN, tandis que le code source est téléchargé depuis le dépôt SVN du
6773 projet Tex Live. Cette méthode est utilisée parce que CTAN ne garde pas
6774 d'archives versionnées.
6775
6776 La commande ci-dessous importe les métadonnées du paquet TeX @code{fontspec}
6777 :
6778
6779 @example
6780 guix import texlive fontspec
6781 @end example
6782
6783 Lorsque l'option @code{--archive=DIRECTORY} est utilisée, le code source
6784 n'est pas téléchargé depuis le sous-répertoire @file{latex} du
6785 l'arborescence @file{texmf-dist/source} dans le dépôt SVN de TeX Live, mais
6786 depuis le répertoire voisin spécifié sous la même racine.
6787
6788 La commande ci-dessous importe les métadonnées du paquet @code{ifxetex}
6789 depuis CTAN en récupérant les sources depuis le répertoire
6790 @file{texmf/source/generic} :
6791
6792 @example
6793 guix import texlive --archive=generic ifxetex
6794 @end example
6795
6796 @item json
6797 @cindex JSON, import
6798 Importe des métadonnées d'un fichier JSON local@footnote{Cette
6799 fonctionnalité requiert l'installation de Guile-JSON.
6800 @xref{Prérequis}.}. Considérez l'exemple suivant d'une définition de
6801 paquet au format JSON :
6802
6803 @example
6804 @{
6805 "name": "hello",
6806 "version": "2.10",
6807 "source": "mirror://gnu/hello/hello-2.10.tar.gz",
6808 "build-system": "gnu",
6809 "home-page": "https://www.gnu.org/software/hello/",
6810 "synopsis": "Hello, GNU world: An example GNU package",
6811 "description": "GNU Hello prints a greeting.",
6812 "license": "GPL-3.0+",
6813 "native-inputs": ["gcc@@6"]
6814 @}
6815 @end example
6816
6817 Les noms des champs sont les mêmes que pour les enregistrements de
6818 @code{<package>} (@xref{Définition des paquets}). Les référence à d'autres
6819 paquets sont fournies comme des listes JSON de chaînes de spécifications de
6820 paquets comme @code{guile} ou @code{guile@@2.0}.
6821
6822 L'importateur supporte aussi une définition plus explicite des sources avec
6823 les champs habituels pour les enregistrements @code{<origin>} :
6824
6825 @example
6826 @{
6827 @dots{}
6828 "source": @{
6829 "method": "url-fetch",
6830 "uri": "mirror://gnu/hello/hello-2.10.tar.gz",
6831 "sha256": @{
6832 "base32": "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"
6833 @}
6834 @}
6835 @dots{}
6836 @}
6837 @end example
6838
6839 La commande ci-dessous lit les métadonnées du fichier JSON @code{hello.json}
6840 et renvoie une expression de paquet :
6841
6842 @example
6843 guix import json hello.json
6844 @end example
6845
6846 @item nix
6847 Importe les métadonnées d'une copie locale des source de
6848 @uref{http://nixos.org/nixpkgs/, la distribution Nixpkgs}@footnote{Cela
6849 repose sur la commande @command{nix-instantiate} de
6850 @uref{http://nixos.org/nix/, Nix}.}. Les définitions de paquets dans
6851 Nixpkgs sont habituellement écrites en un mélange entre le langage Nix et
6852 Bash. Cette commande n'importe que la structure de haut-niveau du paquet
6853 qui est écrite dans le langage Nix. Elle inclut normalement tous les champs
6854 de base de la définition d'un paquet.
6855
6856 Lorsque vous importez un paquet GNU, le synopsis et la description sont
6857 replacés par la version canonique en amont.
6858
6859 Normalement, vous devrez d'abord faire :
6860
6861 @example
6862 export NIX_REMOTE=daemon
6863 @end example
6864
6865 @noindent
6866 pour que @command{nix-instantiate} n'essaye pas d'ouvrir la base de données
6867 de Nix.
6868
6869 Par exemple, la commande ci-dessous importe la définition du paquet de
6870 LibreOffice (plus précisément, elle importe la définition du paquet lié à
6871 l'attribut de plus haut-niveau @code{libreoffice}) :
6872
6873 @example
6874 guix import nix ~/path/to/nixpkgs libreoffice
6875 @end example
6876
6877 @item hackage
6878 @cindex hackage
6879 Importe les métadonnées de l'archive de paquets centrale de la communauté
6880 Haskell, @uref{https://hackage.haskell.org/, Hackage}. Les informations
6881 sont récupérées depuis les fichiers Cabal et incluent toutes les
6882 informations utiles, dont les dépendances des paquets.
6883
6884 Les options spécifiques sont :
6885
6886 @table @code
6887 @item --stdin
6888 @itemx -s
6889 Lit un fichier Cabal depuis l'entrée standard.
6890 @item --no-test-dependencies
6891 @itemx -t
6892 N'inclut pas les dépendances requises uniquement par les suites de tests.
6893 @item --cabal-environment=@var{alist}
6894 @itemx -e @var{alist}
6895 @var{alist} est une alist Scheme qui définie l'environnement dans lequel les
6896 conditions de Cabal sont évaluées. Les clefs acceptées sont : @code{os},
6897 @code{arch}, @code{impl} et une représentation sous forme de chaîne de
6898 caractères du nom d'un drapeau. La valeur associée à un drapeau doit être
6899 le symbole @code{true} ou @code{false}. La valeur associée aux autres clefs
6900 doivent se conformer avec la définition du format de fichiers Cabal. La
6901 valeur par défaut associée avec les clefs @code{os}, @code{arch} et
6902 @code{impl} sont respectivement @samp{linux}, @samp{x86_64} et @samp{ghc}.
6903 @item --recursive
6904 @itemx -r
6905 Traverse le graphe des dépendances du paquet amont donné et génère les
6906 expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
6907 @end table
6908
6909 La commande ci-dessous importe les métadonnées de la dernière version du
6910 paquet Haskell @code{HTTP} sans inclure les dépendances des tests et en
6911 spécifiant la valeur du drapeau @samp{network-uri} comme étant @code{false}
6912 :
6913
6914 @example
6915 guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
6916 @end example
6917
6918 Une version spécifique du paquet peut éventuellement être spécifiée en
6919 faisant suivre le nom du paquet par un arobase et un numéro de version comme
6920 dans l'exemple suivant :
6921
6922 @example
6923 guix import hackage mtl@@2.1.3.1
6924 @end example
6925
6926 @item stackage
6927 @cindex stackage
6928 L'importateur @code{stackage} est une enveloppe autour de l'importateur
6929 @code{hackage}. Il prend un nom de paquet, recherche la version incluse
6930 dans une version au support étendu (LTS) de @uref{https://www.stackage.org,
6931 Stackage} et utilise l'importateur @code{hackage} pour récupérer les
6932 métadonnées. Remarquez que c'est à vous de choisir une version LTS
6933 compatible avec le compilateur GHC utilisé par Guix.
6934
6935 Les options spécifiques sont :
6936
6937 @table @code
6938 @item --no-test-dependencies
6939 @itemx -t
6940 N'inclut pas les dépendances requises uniquement par les suites de tests.
6941 @item --lts-version=@var{version}
6942 @itemx -r @var{version}
6943 @var{version} est la version LTS désirée. Si elle est omise, la dernière
6944 version est utilisée.
6945 @end table
6946
6947 La commande ci-dessous importe les métadonnées du paquet Haskell @code{HTTP}
6948 inclus dans la version LTS 7.18 de Stackage :
6949
6950 @example
6951 guix import stackage --lts-version=7.18 HTTP
6952 @end example
6953
6954 @item elpa
6955 @cindex elpa
6956 Importe les métadonnées du dépôt de paquets ELPA (Emacs Lisp Package
6957 Archive) (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
6958
6959 Les options spécifiques sont :
6960
6961 @table @code
6962 @item --archive=@var{repo}
6963 @itemx -a @var{repo}
6964 @var{repo} identifie le dépôt d'archive depuis lequel récupérer les
6965 informations. Actuellement les dépôts supportés et leurs identifiants sont
6966 :
6967 @itemize -
6968 @item
6969 @uref{http://elpa.gnu.org/packages, GNU}, qu'on peut choisir avec
6970 l'identifiant @code{gnu}. C'est la valeur par défaut.
6971
6972 Les paquets de @code{elpa.gnu.org} avec l'une des clefs contenues dans le
6973 porte-clef GnuPG @file{share/emacs/25.1/etc/package-keyring.gpg} (ou
6974 similaire) dans le paquet @code{emacs} (@pxref{Package Installation, ELPA
6975 package signatures,, emacs, The GNU Emacs Manual}).
6976
6977 @item
6978 @uref{http://stable.melpa.org/packages, MELPA-Stable}, qu'on peut
6979 sélectionner avec l'identifiant @code{melpa-stable}.
6980
6981 @item
6982 @uref{http://melpa.org/packages, MELPA}, qu'on peut sélectionner avec
6983 l'identifiant @code{melpa}.
6984 @end itemize
6985
6986 @item --recursive
6987 @itemx -r
6988 Traverse le graphe des dépendances du paquet amont donné et génère les
6989 expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
6990 @end table
6991
6992 @item crate
6993 @cindex crate
6994 Importe les métadonnées du répertoire des paquets Rust
6995 @uref{https://crates.io, crates.io}.
6996
6997 @item opam
6998 @cindex OPAM
6999 @cindex OCaml
7000 Import metadata from the @uref{https://opam.ocaml.org/, OPAM} package
7001 repository used by the OCaml community.
7002 @end table
7003
7004 La structure du code de @command{guix import} est modulaire. Il serait
7005 utile d'avoir plus d'importateurs pour d'autres formats de paquets et votre
7006 aide est la bienvenue sur ce sujet (@pxref{Contribuer}).
7007
7008 @node Invoquer guix refresh
7009 @section Invoquer @command{guix refresh}
7010
7011 @cindex @command{guix refresh}
7012 L'audience première de la commande @command{guix refresh} est l'ensemble des
7013 développeurs de la distribution logicielle GNU. Par défaut, elle rapporte
7014 les paquets fournis par la distribution qui sont en retard par rapport aux
7015 dernières versions disponibles en amont, comme ceci :
7016
7017 @example
7018 $ guix refresh
7019 gnu/packages/gettext.scm:29:13: gettext serait mis à jour de 0.18.1.1 à 0.18.2.1
7020 gnu/packages/glib.scm:77:12: glib serait mis à jour de 2.34.3 à 2.37.0
7021 @end example
7022
7023 Autrement, on peut spécifier les paquets à considérer, auquel cas un
7024 avertissement est émis pour les paquets qui n'ont pas de gestionnaire de
7025 mise à jour associé :
7026
7027 @example
7028 $ guix refresh coreutils guile guile-ssh
7029 gnu/packages/ssh.scm:205:2 : avertissement : aucun gestionnaire de mise à jour pour guile-ssh
7030 gnu/packages/guile.scm:136:12 : guile serait mis à jour de 2.0.12 à 2.0.13
7031 @end example
7032
7033 @command{guix refresh} navigue le dépôt amont de chaque paquet et détermine
7034 le numéro de version le plus élevé parmi les versions publiées. La commande
7035 sait comment mettre à jour certains types de paquets : les paquets GNU, les
7036 paquets ELPA, etc. — voir la documentation pour @option{--type} ci-dessous.
7037 Il y a beaucoup de paquet cependant pour lesquels il manque une méthode pour
7038 déterminer si une nouvelle version est disponible en amont. Cependant, le
7039 mécanisme est extensible, alors n'hésitez pas à nous contacter pour ajouter
7040 une nouvelle méthode !
7041
7042 Parfois les noms en amont diffèrent du nom de paquet utilisé par Guix et
7043 @command{guix refresh} a besoin d'un peu d'aide. La plupart des
7044 gestionnaires de mise à jour honorent la propriété @code{upstream-name} dans
7045 les définitions de paquets, ce qui peut être utilisé à cette fin :
7046
7047 @example
7048 (define-public network-manager
7049 (package
7050 (name "network-manager")
7051 ;; @dots{}
7052 (properties '((upstream-name . "NetworkManager")))))
7053 @end example
7054
7055 Lorsque l'option @code{--update} est utilisée, elle modifie les fichiers
7056 source de la distribution pour mettre à jour le numéro de version et le hash
7057 de l'archive source de ces recettes de paquets (@pxref{Définition des paquets}).
7058 Cela est effectué en téléchargeant la dernière version de l'archive des
7059 sources de chaque paquet et des signatures associées, en authentifiant
7060 l'archive téléchargée avec sa signature en utilisant @command{gpg} puis en
7061 calculant son hash. Lorsque la clef publique utilisée pour signer l'archive
7062 manque du porte-clefs de l'utilisateur, le gestionnaire tente de la
7063 récupérer automatiquement d'un serveur de clef public ; si cela réussi, la
7064 clef est ajoutée au porte-clefs de l'utilisateur, sinon @command{guix
7065 refresh} rapporte une erreur.
7066
7067 Les options suivantes sont supportées :
7068
7069 @table @code
7070
7071 @item --expression=@var{expr}
7072 @itemx -e @var{expr}
7073 Considérer le paquet évalué par @var{expr}.
7074
7075 C'est utile pour précisément se référer à un paquet, comme dans cet exemple
7076 :
7077
7078 @example
7079 guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
7080 @end example
7081
7082 Cette commande liste les paquets qui dépendent de la libc « finale » (en
7083 gros tous les paquets).
7084
7085 @item --update
7086 @itemx -u
7087 Met à jour les fichiers source de la distribution (les recettes de paquets)
7088 en place. Cette option est généralement utilisée depuis une copie du dépôt
7089 git de Guix (@pxref{Lancer Guix avant qu'il ne soit installé}) :
7090
7091 @example
7092 $ ./pre-inst-env guix refresh -s non-core -u
7093 @end example
7094
7095 @xref{Définition des paquets}, pour plus d'information sur les définitions des
7096 paquets.
7097
7098 @item --select=[@var{subset}]
7099 @itemx -s @var{subset}
7100 Choisi tous les paquets dans @var{subset}, entre @code{core} et
7101 @code{non-core}.
7102
7103 Le sous-ensemble @code{core} se réfère à tous les paquets du cœur de la
7104 distribution — c.-à-d.@: les paquets qui sont utilisés pour construire «
7105 tout le rest ». Cela comprend GCC, libc, Binutils, Bash, etc.
7106 Habituellement, changer l'un de ces paquets dans la distribution implique de
7107 reconstruire tous les autres. Ainsi, ces mises à jour sont une nuisance
7108 pour les utilisateurs, en terme de temps de compilation et de bande passante
7109 utilisés pour effectuer la mise à jour.
7110
7111 Le sous-ensemble @code{non-core} se réfère au reste des paquets. C'est
7112 habituellement utile dans les cas où une mise à jour des paquets du cœur
7113 serait dérangeante.
7114
7115 @item --manifest=@var{fichier}
7116 @itemx -m @var{fichier}
7117 Choisi tous les paquets du manifeste dans @var{file}. C'est utile pour
7118 vérifier qu'aucun des paquets du manifeste utilisateur ne peut être mis à
7119 jour.
7120
7121 @item --type=@var{updater}
7122 @itemx -t @var{updater}
7123 Chois uniquement les paquets pris en charge par @var{updater}
7124 (éventuellement une liste de gestionnaires de mise à jour séparés par des
7125 virgules). Actuellement, @var{updater} peut être l'une des valeurs suivantes
7126 :
7127
7128 @table @code
7129 @item gnu
7130 le gestionnaire de mise à jour pour les paquets GNU ;
7131 @item gnome
7132 le gestionnaire de mise à jour pour les paquets GNOME ;
7133 @item kde
7134 le gestionnaire de mise à jour pour les paquets KDE ;
7135 @item xorg
7136 le gestionnaire de mise à jour pour les paquets X.org ;
7137 @item kernel.org
7138 le gestionnaire de mise à jour pour les paquets hébergés sur kernel.org ;
7139 @item elpa
7140 le gestionnaire de mise à jour pour les paquets @uref{http://elpa.gnu.org/,
7141 ELPA} ;
7142 @item cran
7143 le gestionnaire de mise à jour pour les paquets
7144 @uref{https://cran.r-project.org/, CRAN} ;
7145 @item bioconductor
7146 le gestionnaire de mise à jour pour les paquets
7147 @uref{https://www.bioconductor.org/, Bioconductor} ;
7148 @item cpan
7149 le gestionnaire de mise à jour pour les paquets @uref{http://www.cpan.org/,
7150 CPAN} ;
7151 @item pypi
7152 le gestionnaire de mise à jour pour les paquets
7153 @uref{https://pypi.python.org, PyPI} ;
7154 @item gem
7155 le gestionnaire de mise à jour pour les paquets @uref{https://rubygems.org,
7156 RubyGems} ;
7157 @item github
7158 le gestionnaire de mise à jour pour les paquets @uref{https://github.com,
7159 GitHub} ;
7160 @item hackage
7161 le gestionnaire de mise à jour pour les paquets
7162 @uref{https://hackage.haskell.org, Hackage} ;
7163 @item stackage
7164 le gestionnaire de mise à jour pour les paquets
7165 @uref{https://www.stackage.org, Stackage} ;
7166 @item crate
7167 le gestionnaire de mise à jour pour les paquets @uref{https://crates.io,
7168 Crates} ;
7169 @end table
7170
7171 Par exemple, la commande suivante ne vérifie que les mises à jour des
7172 paquets Emacs hébergés sur @code{elpa.gnu.org} et les paquets CRAN :
7173
7174 @example
7175 $ guix refresh --type=elpa,cran
7176 gnu/packages/statistics.scm:819:13 : r-testthat serait mis à jour de 0.10.0 à 0.11.0
7177 gnu/packages/emacs.scm:856:13 : emacs-auctex serait mis à jour de 11.88.6 à 11.88.9
7178 @end example
7179
7180 @end table
7181
7182 En plus, on peut passer à @command{guix refresh} un ou plusieurs noms de
7183 paquets, comme dans cet exemple :
7184
7185 @example
7186 $ ./pre-inst-env guix refresh -u emacs idutils gcc@@4.8
7187 @end example
7188
7189 @noindent
7190 La commande au-dessus met à jour spécifiquement les paquets @code{emacs} et
7191 @code{idutils}. L'option @code{--select} n'aurait aucun effet dans ce cas.
7192
7193 Pour déterminer s'il faut mettre à jour un paquet, il est parfois pratique
7194 de savoir quels paquets seraient affectés par la mise à jour pour pouvoir
7195 vérifier la compatibilité. Pour cela l'option suivante peut être utilisée
7196 avec un ou plusieurs noms de paquets passés à @command{guix refresh} :
7197
7198 @table @code
7199
7200 @item --list-updaters
7201 @itemx -L
7202 Liste les gestionnaires de mise à jour et quitte (voir l'option
7203 @option{--type} plus haut).
7204
7205 Pour chaque gestionnaire, affiche le pourcentage de paquets qu'il couvre ; à
7206 la fin, affiche le pourcentage de paquets couverts par tous les
7207 gestionnaires.
7208
7209 @item --list-dependent
7210 @itemx -l
7211 Liste les paquets de plus haut-niveau qui devraient être reconstruits après
7212 la mise à jour d'un ou plusieurs paquets.
7213
7214 @xref{Invoquer guix graph, le type @code{reverse-package} de @command{guix
7215 graph}}, pour des informations sur la manière de visualiser la liste des
7216 paquets dépendant d'un autre.
7217
7218 @end table
7219
7220 Soyez conscients que l'option @code{--list-dependent} ne fait
7221 @emph{qu'approximer} les reconstructions qui seraient requises par une mise
7222 à jour. Plus de reconstructions pourraient être requises dans certaines
7223 circonstances.
7224
7225 @example
7226 $ guix refresh --list-dependent flex
7227 Building the following 120 packages would ensure 213 dependent packages are rebuilt:
7228 hop@@2.4.0 geiser@@0.4 notmuch@@0.18 mu@@0.9.9.5 cflow@@1.4 idutils@@4.6 @dots{}
7229 @end example
7230
7231 La commande ci-dessus liste un ensemble de paquets qui peuvent être
7232 construits pour vérifier la compatibilité d'une mise à jour de @code{flex}.
7233
7234 Les options suivante peuvent être utilisées pour personnaliser les
7235 opérations avec GnuPG :
7236
7237 @table @code
7238
7239 @item --gpg=@var{commande}
7240 Utilise @var{commande} comme la commande de GnuPG 2.x. @var{commande} est
7241 recherchée dans @code{PATH}.
7242
7243 @item --key-download=@var{politique}
7244 Gère les clefs OpenPGP manquantes d'après la @var{politique}, qui peut être
7245 l'une des suivantes :
7246
7247 @table @code
7248 @item always
7249 Toujours télécharger les clefs manquantes depuis un serveur de clefs et les
7250 ajouter au porte-clefs de l'utilisateur.
7251
7252 @item never
7253 Ne jamais essayer de télécharger les clefs OpenPGP manquante. Quitter à la
7254 place.
7255
7256 @item interactive
7257 Lorsqu'on rencontre un paquet signé par une clef OpenPGP inconnue, demander
7258 à l'utilisateur s'il souhaite la télécharger ou non. C'est le comportement
7259 par défaut.
7260 @end table
7261
7262 @item --key-server=@var{host}
7263 Utiliser @var{host} comme serveur de clefs OpenPGP lors de l'importe d'une
7264 clef publique.
7265
7266 @end table
7267
7268 Le gestionnaire de mises à jour @code{github} utilise
7269 @uref{https://developer.github.com/v3/, l'API de GitHub} pour faire des
7270 requêtes sur les nouvelles versions. Lorsqu'elle est utilisé de manière
7271 répétée, p.@: ex.@: lorsque vous vérifiez tous les paquets, GitHub finira
7272 par refuser de répondre à d'autres requêtes de l'API. Par défaut 60
7273 requêtes à l'heure sont autorisées, et une vérification complète de tous les
7274 paquets GitHub dans Guix requiert bien plus que cela. L'authentification
7275 avec GitHub à travers l'utilisation d'un jeton d'API lève ces limites. Pour
7276 utiliser un jeton de l'API, initialisez la variable d'environnement
7277 @code{GUIX_GITHUB_TOKEN} avec un jeton que vous vous serez procuré sur
7278 @uref{https://github.com/settings/tokens} ou autrement.
7279
7280
7281 @node Invoquer guix lint
7282 @section Invoquer @command{guix lint}
7283
7284 @cindex @command{guix lint}
7285 @cindex paquets, chercher des erreurs
7286 La commande @command{guix lint} est conçue pour aider les développeurs à
7287 éviter des erreurs commune et à utiliser un style cohérent lors de
7288 l'écriture de recettes de paquets. Elle lance des vérifications sur un
7289 ensemble de paquets donnés pour trouver des erreurs communes dans leur
7290 définition. Les @dfn{vérifieurs} disponibles comprennent (voir
7291 @code{--list-checkers} pour une liste complète) :
7292
7293 @table @code
7294 @item synopsis
7295 @itemx description
7296 Vérifie certaines règles typographiques et stylistiques dans les
7297 descriptions et les synopsis.
7298
7299 @item inputs-should-be-native
7300 Identifie les entrées qui devraient sans doute plutôt être des entrées
7301 natives.
7302
7303 @item source
7304 @itemx home-page
7305 @itemx mirror-url
7306 @itemx source-file-name
7307 Sonde les URL @code{home-page} et @code{source} et rapporte celles qui sont
7308 invalides. Suggère une URL en @code{mirror://} lorsque c'est possible.
7309 Vérifie que le nom du fichier source a un sens, p.@: ex.@: qu'il ne s'agisse
7310 pas juste d'un numéro de version ou « git-checkou », sans avoir déclaré un
7311 @code{file-name} (@pxref{Référence d'origine}).
7312
7313 @item cve
7314 @cindex vulnérabilités
7315 @cindex CVE, Common Vulnerabilities and Exposures
7316 Rapporte les vulnérabilités connues trouvées dans les bases de données CVE
7317 (Common Vulnerabilities and Exposures) de l'année en cours et des années
7318 précédentes @uref{https://nvd.nist.gov/download.cfm#CVE_FEED, publié par le
7319 NIST américain}.
7320
7321 Pour voir les informations sur une vulnérabilité en particulier, visitez les
7322 pages :
7323
7324 @itemize
7325 @item
7326 @indicateurl{https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-ANNÉE-ABCD}
7327 @item
7328 @indicateurl{https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-ANNÉE-ABCD}
7329 @end itemize
7330
7331 @noindent
7332 où @code{CVE-ANNÉE-ABCD} est l'identifiant CVE — p.@: ex.@:
7333 @code{CVE-2015-7554}.
7334
7335 Les développeurs de paquets peuvent spécifier dans les recettes des paquets
7336 le nom @uref{https://nvd.nist.gov/cpe.cfm,CPE (Common Platform Enumeration)}
7337 et la version du paquet s'ils diffèrent du nom et de la version que Guix
7338 utilise, comme dans cet exemple :
7339
7340 @example
7341 (package
7342 (name "grub")
7343 ;; @dots{}
7344 ;; CPE calls this package "grub2".
7345 (properties '((cpe-name . "grub2")
7346 (cpe-version . "2.3")))
7347 @end example
7348
7349 @c See <http://www.openwall.com/lists/oss-security/2017/03/15/3>.
7350 Certaines entrées dans la base de données CVE ne spécifient pas la version
7351 du paquet auquel elles s'appliquent et lui restera donc attachée pour
7352 toujours. Les développeurs qui trouvent des alertes CVE et ont vérifiés
7353 qu'elles peuvent être ignorées peuvent les déclarer comme dans cet exemple :
7354
7355 @example
7356 (package
7357 (name "t1lib")
7358 ;; @dots{}
7359 ;; Ces CVE ne s'appliquent plus et peuvent être ignorée sans problème.
7360 (properties `((lint-hidden-cve . ("CVE-2011-0433"
7361 "CVE-2011-1553"
7362 "CVE-2011-1554"
7363 "CVE-2011-5244")))))
7364 @end example
7365
7366 @item formatting
7367 Avertit le développeurs lorsqu'il y a des problèmes de formatage du code
7368 source évident : des espaces en fin de ligne, des tabulations, etc.
7369 @end table
7370
7371 La syntaxe générale est :
7372
7373 @example
7374 guix lint @var{options} @var{package}@dots{}
7375 @end example
7376
7377 Si aucun paquet n'est donné par la ligne de commande, tous les paquets
7378 seront vérifiés. Les @var{options} peuvent contenir aucune ou plus des
7379 options suivantes :
7380
7381 @table @code
7382 @item --list-checkers
7383 @itemx -l
7384 Liste et décrit tous les vérificateurs disponibles qui seront lancés sur les
7385 paquets puis quitte.
7386
7387 @item --checkers
7388 @itemx -c
7389 N'active que les vérificateurs spécifiés dans une liste de noms séparés par
7390 des virgules parmi la liste renvoyée par @code{--list-checkers}.
7391
7392 @end table
7393
7394 @node Invoquer guix size
7395 @section Invoquer @command{guix size}
7396
7397 @cindex taille
7398 @cindex paquet, taille
7399 @cindex closure
7400 @cindex @command{guix size}
7401 La commande @command{guix size} aide les développeurs à dresser un profil de
7402 l'utilisation du disque que font les paquets. C'est facile de négliger
7403 l'impact d'une dépendance supplémentaire ajoutée à un paquet, ou l'impact de
7404 l'utilisation d'une sortie unique pour un paquet qui pourrait être
7405 facilement séparé (@pxref{Des paquets avec plusieurs résultats}). Ce sont les
7406 problèmes que @command{guix size} peut typiquement mettre en valeur.
7407
7408 On peut passer un ou plusieurs spécifications de paquets à la commande,
7409 comme @code{gcc@@4.8} ou @code{guile:debug}, ou un nom de fichier dans le
7410 dépôt. Regardez cet exemple :
7411
7412 @example
7413 $ guix size coreutils
7414 store item total self
7415 /gnu/store/@dots{}-gcc-5.5.0-lib 60.4 30.1 38.1%
7416 /gnu/store/@dots{}-glibc-2.27 30.3 28.8 36.6%
7417 /gnu/store/@dots{}-coreutils-8.28 78.9 15.0 19.0%
7418 /gnu/store/@dots{}-gmp-6.1.2 63.1 2.7 3.4%
7419 /gnu/store/@dots{}-bash-static-4.4.12 1.5 1.5 1.9%
7420 /gnu/store/@dots{}-acl-2.2.52 61.1 0.4 0.5%
7421 /gnu/store/@dots{}-attr-2.4.47 60.6 0.2 0.3%
7422 /gnu/store/@dots{}-libcap-2.25 60.5 0.2 0.2%
7423 total: 78.9 MiB
7424 @end example
7425
7426 @cindex closure
7427 Les éléments du dépôt listés ici constituent la @dfn{cloture transitive} de
7428 Coreutils — c.-à-d.@: Coreutils et toutes ses dépendances, récursivement —
7429 comme ce qui serait renvoyé par :
7430
7431 @example
7432 $ guix gc -R /gnu/store/@dots{}-coreutils-8.23
7433 @end example
7434
7435 Ici, la sortie possède trois colonnes à côté de chaque élément du dépôt. La
7436 première colonne, nommée « total », montre la taille en mébioctet (Mio) de
7437 la cloture de l'élément du dépôt — c'est-à-dire sa propre taille plus la
7438 taille de ses dépendances. La colonne suivante, nommée « lui-même », montre
7439 la taille de l'élément lui-même. La dernière colonne montre le ration de la
7440 taille de l'élément lui-même par rapport à celle de tous les éléments
7441 montrés.
7442
7443 Dans cet exemple, on voit que la cloture de Coreutils pèse 79@tie{}Mio, dont
7444 la plupart est dû à la libc et aux bibliothèques à l'exécution de GCC (ce
7445 n'est pas un problème en soit que la libc et les bibliothèques de GCC
7446 représentent une grande part de la cloture parce qu'elles sont toujours
7447 disponibles sur le système de toute façon).
7448
7449 Lorsque les paquets passés à @command{guix size} sont disponibles dans le
7450 dépôt@footnote{Plus précisément, @command{guix size} cherche les variantes
7451 @emph{non greffées} des paquets donnés, tels qu'ils sont renvoyés par
7452 @code{guix build @var{paquet} --no-graft}. @xref{Mises à jour de sécurité} pour des
7453 informations sur les greffes}, @command{guix size} demande au démon de
7454 déterminer ses dépendances, et mesure sa taille dans le dépôt, comme avec
7455 @command{du -ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
7456 Coreutils}).
7457
7458 Lorsque les paquets donnés ne sont @emph{pas} dans le dépôt, @command{guix
7459 size} rapporte les informations en se basant sur les substituts disponibles
7460 (@pxref{Substituts}). Cela permet de profiler l'utilisation du disque des
7461 éléments du dépôt même s'ils ne sont pas sur le disque, mais disponibles à
7462 distance.
7463
7464 Vous pouvez aussi spécifier plusieurs noms de paquets :
7465
7466 @example
7467 $ guix size coreutils grep sed bash
7468 store item total self
7469 /gnu/store/@dots{}-coreutils-8.24 77.8 13.8 13.4%
7470 /gnu/store/@dots{}-grep-2.22 73.1 0.8 0.8%
7471 /gnu/store/@dots{}-bash-4.3.42 72.3 4.7 4.6%
7472 /gnu/store/@dots{}-readline-6.3 67.6 1.2 1.2%
7473 @dots{}
7474 total: 102.3 MiB
7475 @end example
7476
7477 @noindent
7478 Dans cet exemple on voit que la combinaison des quatre paquets prent
7479 102.3@tie{}Mio en tout, ce qui est bien moins que la somme des clotures
7480 puisqu'ils ont beaucoup de dépendances en commun.
7481
7482 Les options disponibles sont :
7483
7484 @table @option
7485
7486 @item --substitute-urls=@var{urls}
7487 Utilise les informations de substituts de @var{urls}.
7488 @xref{client-substitute-urls, the same option for @code{guix build}}.
7489
7490 @item --sort=@var{clef}
7491 Trie les lignes en fonction de la @var{clef}, l'une des optinos suivantes :
7492
7493 @table @code
7494 @item self
7495 la taille de chaque élément (par défaut) ;
7496 @item closure
7497 la taille totale de la cloture de l'élémente.
7498 @end table
7499
7500 @item --map-file=@var{fichier}
7501 Écrit un schéma de l'utilisation du disque au format PNG dans @var{fichier}.
7502
7503 Pour l'exemple au-dessus, le schéma ressemble à ceci :
7504
7505 @image{images/coreutils-size-map,5in,, schéma de l'utilisation du disque de
7506 Coreutils produit par @command{guix size}}
7507
7508 Cette option requiert l'installation de
7509 @uref{http://wingolog.org/software/guile-charting/, Guile-Charting} et qu'il
7510 soit visible dans le chemin de recherche des modules Guile. Lorsque ce
7511 n'est pas le cas, @command{guix size} plante en essayant de le charger.
7512
7513 @item --system=@var{système}
7514 @itemx -s @var{système}
7515 Considère les paquets pour @var{système} — p.@: ex.@: @code{x86_64-linux}.
7516
7517 @end table
7518
7519 @node Invoquer guix graph
7520 @section Invoque @command{guix graph}
7521
7522 @cindex DAG
7523 @cindex @command{guix graph}
7524 @cindex dépendances des paquets
7525 Les paquets et leurs dépendances forment un @dfn{graphe}, plus précisément
7526 un graphe orienté acyclique (DAG). Il peut vite devenir difficile d'avoir
7527 une représentation mentale du DAG d'un paquet, donc la commande
7528 @command{guix graph} fournit une représentation visuelle du DAG. Par
7529 défaut, @command{guix graph} émet un représentation du DAG dans le format
7530 d'entrée de @uref{http://www.graphviz.org/, Graphviz}, pour que sa sortie
7531 puisse être passée directement à la commande @command{dot} de Graphviz.
7532 Elle peut aussi émettre une page HTML avec du code Javascript pour afficher
7533 un « digramme d'accords » dans un navigateur Web, grâce à la bibliothèque
7534 @uref{https://d3js.org/, d3.js}, ou émettre des requêtes Cypher pour
7535 construire un graphe dans une base de donnée de graphes supportant le
7536 langage de requêtes @uref{http://www.opencypher.org/, openCypher}. La
7537 syntaxe générale est :
7538
7539 @example
7540 guix graph @var{options} @var{paquet}@dots{}
7541 @end example
7542
7543 Par exemple, la commande suivante génère un fichier PDF représentant le DAG
7544 du paquet pour GNU@tie{}Core Utilities, qui montre ses dépendances à la
7545 compilation :
7546
7547 @example
7548 guix graph coreutils | dot -Tpdf > dag.pdf
7549 @end example
7550
7551 La sortie ressemble à ceci :
7552
7553 @image{images/coreutils-graph,2in,,Graphe de dépendance de GNU Coreutils}
7554
7555 Joli petit graphe, non ?
7556
7557 Mais il y a plus qu'un seul graphe ! Celui au-dessus est concis : c'est le
7558 graphe des objets paquets, en omettant les entrées implicites comme GCC,
7559 libc, grep, etc. Il est souvent utile d'avoir ces graphes concis, mais
7560 parfois on veut voir plus de détails. @command{guix graph} supporte
7561 plusieurs types de graphes, qui vous permettent de choisir le niveau de
7562 détails :
7563
7564 @table @code
7565 @item package
7566 C'est le type par défaut utilisé dans l'exemple plus haut. Il montre le DAG
7567 des objets paquets, sans les dépendances implicites. C'est concis, mais
7568 omet pas mal de détails.
7569
7570 @item reverse-package
7571 Cela montre le DAG @emph{inversé} des paquets. Par exemple :
7572
7573 @example
7574 guix graph --type=reverse-package ocaml
7575 @end example
7576
7577 … montre le graphe des paquets qui dépendent de OCaml.
7578
7579 Remarquez que pour les paquets du cœur de la distribution, cela crée des
7580 graphes énormes. Si vous voulez seulement voir le nombre de paquets qui
7581 dépendent d'un paquet donnés, utilisez @command{guix refresh
7582 --list-dependent} (@pxref{Invoquer guix refresh,
7583 @option{--list-dependent}}).
7584
7585 @item bag-emerged
7586 C'est le DAG du paquet, @emph{avec} les entrées implicites.
7587
7588 Par exemple, la commande suivante :
7589
7590 @example
7591 guix graph --type=bag-emerged coreutils | dot -Tpdf > dag.pdf
7592 @end example
7593
7594 … montre ce graphe plus gros :
7595
7596 @image{images/coreutils-bag-graph,,5in,Graphe des dépendances détaillé de
7597 GNU Coreutils}
7598
7599 En bas du graphe, on voit toutes les entrées implicites de
7600 @var{gnu-build-system} (@pxref{Systèmes de construction, @code{gnu-build-system}}).
7601
7602 Maintenant, remarquez que les dépendances de ces entrées implicites —
7603 c'est-à-dire les @dfn{dépendances de bootstrap} (@pxref{Bootstrapping}) — ne
7604 sont pas affichées, pour rester concis.
7605
7606 @item bag
7607 Comme @code{bag-emerged} mais cette fois inclus toutes les dépendances de
7608 bootstrap.
7609
7610 @item bag-with-origins
7611 Comme @code{bag}, mais montre aussi les origines et leurs dépendances.
7612
7613 @item dérivation
7614 C'est la représentation lu plus détaillée : elle montre le DAG des
7615 dérivations (@pxref{Dérivations}) et des éléments du dépôt. Comparé à la
7616 représentation ci-dessus, beaucoup plus de nœuds sont visibles, dont les
7617 scripts de construction, les correctifs, les modules Guile, etc.
7618
7619 Pour ce type de graphe, il est aussi possible de passer un nom de fichier
7620 @file{.drv} à la place d'un nom de paquet, comme dans :
7621
7622 @example
7623 guix graph -t derivation `guix system build -d my-config.scm`
7624 @end example
7625
7626 @item module
7627 C'est le graphe des @dfn{modules de paquets} (@pxref{Modules de paquets}). Par
7628 exemple, la commande suivante montre le graphe des modules de paquets qui
7629 définissent le paquet @code{guile} :
7630
7631 @example
7632 guix graph -t module guile | dot -Tpdf > module-graph.pdf
7633 @end example
7634 @end table
7635
7636 Tous les types ci-dessus correspondent aux @emph{dépendances à la
7637 construction}. Le type de graphe suivant représente les @emph{dépendances à
7638 l'exécution} :
7639
7640 @table @code
7641 @item references
7642 C'est le graphe des @dfn{references} d'une sortie d'un paquet, telles que
7643 renvoyées par @command{guix gc --references} (@pxref{Invoquer guix gc}).
7644
7645 Si la sortie du paquet donnée n'est pas disponible dans le dépôt,
7646 @command{guix graph} essayera d'obtenir les informations sur les dépendances
7647 à travers les substituts.
7648
7649 Vous pouvez aussi passer un nom de fichier du dépôt plutôt qu'un nom de
7650 paquet. Par exemple, la commande ci-dessous produit le graphe des
7651 références de votre profile (qui peut être gros !) :
7652
7653 @example
7654 guix graph -t references `readlink -f ~/.guix-profile`
7655 @end example
7656
7657 @item referrers
7658 C'est le graphe des @dfn{référents} d'un élément du dépôt, tels que renvoyés
7659 par @command{guix gc --referrers} (@pxref{Invoquer guix gc}).
7660
7661 Cela repose exclusivement sur les informations de votre dépôt. Par exemple,
7662 supposons que Inkscape est actuellement disponible dans 10 profils sur votre
7663 machine ; @command{guix graph -t referrers inkscape} montrera le graphe dont
7664 la racine est Inkscape avec 10 profils qui y sont liés.
7665
7666 Cela peut aider à déterminer ce qui empêche un élément du dépôt d'être
7667 glané.
7668
7669 @end table
7670
7671 Les options disponibles sont les suivante :
7672
7673 @table @option
7674 @item --type=@var{type}
7675 @itemx -t @var{type}
7676 Produit un graphe en sortie de type @var{type} où @var{type} doit être l'un
7677 des types au-dessus.
7678
7679 @item --list-types
7680 Liste les types de graphes supportés.
7681
7682 @item --backend=@var{moteur}
7683 @itemx -b @var{moteur}
7684 Produit un graphe avec le @var{moteur} choisi.
7685
7686 @item --list-backends
7687 Liste les moteurs de graphes supportés.
7688
7689 Actuellement les moteurs disponibles sont Graphviz et d3.js.
7690
7691 @item --expression=@var{expr}
7692 @itemx -e @var{expr}
7693 Considérer le paquet évalué par @var{expr}.
7694
7695 C'est utile pour précisément se référer à un paquet, comme dans cet exemple
7696 :
7697
7698 @example
7699 guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
7700 @end example
7701 @end table
7702
7703
7704 @node Invoquer guix environment
7705 @section Invoquer @command{guix environment}
7706
7707 @cindex environnements de construction reproductibles
7708 @cindex environnement de développement
7709 @cindex @command{guix environment}
7710 @cindex environnement de construction de paquets
7711 Le but de @command{guix environment} est d'assister les hackers dans la
7712 création d'environnements de développement reproductibles sans polluer leur
7713 profil de paquets. L'outil @command{guix environment} prend un ou plusieurs
7714 paquets, construit leurs entrées et crée un environnement shell pour pouvoir
7715 les utiliser.
7716
7717 La syntaxe générale est :
7718
7719 @example
7720 guix environment @var{options} @var{paquet}@dots{}
7721 @end example
7722
7723 L'exemple suivant crée un nouveau shell préparé pour le développement de
7724 GNU@tie{}Guile :
7725
7726 @example
7727 guix environment guile
7728 @end example
7729
7730 Si les dépendances requises ne sont pas déjà construites, @command{guix
7731 environment} les construit automatiquement. L'environnement du nouveau
7732 shell est une version améliorée de l'environnement dans lequel @command{guix
7733 environment} a été lancé. Il contient les chemins de recherche nécessaires
7734 à la construction du paquet donné en plus des variables d'environnement
7735 existantes. Pour créer un environnement « pur », dans lequel les variables
7736 d'environnement de départ ont été nettoyées, utilisez l'option
7737 @code{--pure}@footnote{Les utilisateurs ajoutent parfois à tord des valeurs
7738 supplémentaires dans les variables comme @code{PATH} dans leur
7739 @file{~/.bashrc}. En conséquence, lorsque @code{guix environment} le lance,
7740 Bash peut lire @file{~/.bashrc}, ce qui produit des « impuretés » dans ces
7741 variables d'environnement. C'est une erreur de définir ces variables
7742 d'environnement dans @file{.bashrc} ; à la place, elles devraient être
7743 définie dans @file{.bash_profile}, qui est sourcé uniquement par les shells
7744 de connexion. @xref{Bash Startup Files,,, bash, The GNU Bash Reference
7745 Manual}, pour des détails sur les fichiers de démarrage de Bash.}.
7746
7747 @vindex GUIX_ENVIRONMENT
7748 @command{guix environment} définie la variable @code{GUIX_ENVIRONMENT} dans
7749 le shell qu'il crée ; sa valeur est le nom de fichier du profil de cet
7750 environnement. Cela permet aux utilisateur, disons, de définir un prompt
7751 spécifique pour les environnement de développement dans leur @file{.bashrc}
7752 (@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}) :
7753
7754 @example
7755 if [ -n "$GUIX_ENVIRONMENT" ]
7756 then
7757 export PS1="\u@@\h \w [dev]\$ "
7758 fi
7759 @end example
7760
7761 @noindent
7762 … ou de naviguer dans le profil :
7763
7764 @example
7765 $ ls "$GUIX_ENVIRONMENT/bin"
7766 @end example
7767
7768 En plus, plus d'un paquet peut être spécifié, auquel cas l'union des entrées
7769 des paquets données est utilisée. Par exemple, la commande ci-dessous crée
7770 un shell où toutes les dépendances de Guile et Emacs sont disponibles :
7771
7772 @example
7773 guix environment guile emacs
7774 @end example
7775
7776 Parfois, une session shell interactive est inutile. On peut invoquer une
7777 commande arbitraire en plaçant le jeton @code{--} pour séparer la commande
7778 du reste des arguments :
7779
7780 @example
7781 guix environment guile -- make -j4
7782 @end example
7783
7784 Dans d'autres situations, il est plus pratique de spécifier la liste des
7785 paquets requis dans l'environnement. Par exemple, la commande suivante
7786 lance @command{python} dans un environnement contenant Python@tie{}2.7 et
7787 NumPy :
7788
7789 @example
7790 guix environment --ad-hoc python2-numpy python-2.7 -- python
7791 @end example
7792
7793 En plus, on peut vouloir les dépendance d'un paquet et aussi des paquets
7794 supplémentaires qui ne sont pas des dépendances à l'exécution ou à la
7795 construction, mais qui sont utiles au développement tout de même. À cause
7796 de cela, le drapeau @code{--ad-hoc} est positionnel. Les paquets qui
7797 apparaissent avant @code{--ad-hoc} sont interprétés comme les paquets dont
7798 les dépendances seront ajoutées à l'environnement. Les paquets qui
7799 apparaissent après @code{--ad-hoc} sont interprétés comme les paquets à
7800 ajouter à l'environnement directement. Par exemple, la commande suivante
7801 crée un environnement de développement pour Guix avec les paquets Git et
7802 strace en plus :
7803
7804 @example
7805 guix environment guix --ad-hoc git strace
7806 @end example
7807
7808 Parfois il est souhaitable d'isoler l'environnement le plus possible, pour
7809 une pureté et une reproductibilité maximale. En particulier, lorsque vous
7810 utilisez Guix sur une distribution hôte qui n'est pas GuixSD, il est
7811 souhaitable d'éviter l'accès à @file{/usr/bin} et d'autres ressources du
7812 système depuis les environnements de développement. Par exemple, la
7813 commande suivante crée un REPL Guile dans un « conteneur » où seuls le dépôt
7814 et le répertoire de travail actuel sont montés :
7815
7816 @example
7817 guix environment --ad-hoc --container guile -- guile
7818 @end example
7819
7820 @quotation Remarque
7821 L'option @code{--container} requiert Linux-libre 3.19 ou supérieur.
7822 @end quotation
7823
7824 Les options disponibles sont résumées ci-dessous.
7825
7826 @table @code
7827 @item --root=@var{fichier}
7828 @itemx -r @var{fichier}
7829 @cindex environnement persistent
7830 @cindex racine du ramasse-miettes, pour les environnements
7831 Fait de @var{fichier} un lien symbolique vers le profil de cet
7832 environnement, et l'enregistre comme une racine du ramasse-miettes.
7833
7834 C'est utile si vous souhaitez protéger votre environnement du
7835 ramasse-miettes, pour le rendre « persistent ».
7836
7837 Lorsque cette option est omise, l'environnement n'est protégé du
7838 ramasse-miettes que le temps de la session @command{guix environment}. Cela
7839 signifie que la prochaine fois que vous créerez le même environnement, vous
7840 pourriez avoir à reconstruire ou télécharger des paquets. @xref{Invoquer guix gc}, pour plus d'informations sur les racines du GC.
7841
7842 @item --expression=@var{expr}
7843 @itemx -e @var{expr}
7844 Crée un environnement pour le paquet ou la liste de paquets en lesquels
7845 s'évalue @var{expr}.
7846
7847 Par exemple, lancer :
7848
7849 @example
7850 guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
7851 @end example
7852
7853 démarre un shell avec l'environnement pour cette variante spécifique du
7854 paquet PETSc.
7855
7856 Lancer :
7857
7858 @example
7859 guix environment --ad-hoc -e '(@@ (gnu) %base-packages)'
7860 @end example
7861
7862 démarre un shell où tous les paquets de base de GuixSD sont disponibles.
7863
7864 Les commande au-dessus n'utilisent que les sorties par défaut des paquets
7865 donnés. Pour choisir d'autres sorties, on peut spécifier des pairs :
7866
7867 @example
7868 guix environment --ad-hoc -e '(list (@@ (gnu packages bash) bash) "include")'
7869 @end example
7870
7871 @item --load=@var{fichier}
7872 @itemx -l @var{fichier}
7873 Crée un environnement pour le paquet ou la liste de paquets en lesquels
7874 @var{fichier} s'évalue.
7875
7876 Par exemple, @var{fichier} peut contenir une définition comme celle-ci
7877 (@pxref{Définition des paquets}) :
7878
7879 @example
7880 @verbatiminclude environment-gdb.scm
7881 @end example
7882
7883 @item --manifest=@var{fichier}
7884 @itemx -m @var{fichier}
7885 Crée un environnement pour les paquets contenus dans l'objet manifeste
7886 renvoyé par le code Scheme dans @var{fichier}.
7887
7888 C'est similaire à l'option de même nom de @command{guix package}
7889 (@pxref{profile-manifest, @option{--manifest}}) et utilise les même fichiers
7890 manifestes.
7891
7892 @item --ad-hoc
7893 Inclut tous les paquets spécifiés dans l'environnement qui en résulte, comme
7894 si un paquet @i{ad hoc} était spécifié, avec ces paquets comme entrées.
7895 Cette option est utile pour créer un environnement rapidement sans avoir à
7896 écrire une expression de paquet contenant les entrées désirées.
7897
7898 Par exemple la commande :
7899
7900 @example
7901 guix environment --ad-hoc guile guile-sdl -- guile
7902 @end example
7903
7904 lance @command{guile} dans un environnement où Guile et Guile-SDDL sont
7905 disponibles.
7906
7907 Remarquez que cet exemple demande implicitement la sortie par défaut de
7908 @code{guile} et @code{guile-sdl}, mais il est possible de demander une
7909 sortie spécifique — p.@: ex.@: @code{glib:bin} demande la sortie @code{bin}
7910 de @code{glib} (@pxref{Des paquets avec plusieurs résultats}).
7911
7912 Cette option peut être composée avec le comportement par défaut de
7913 @command{guix environment}. Les paquets qui apparaissent avant
7914 @code{--ad-hoc} sont interprétés comme les paquets dont les dépendances
7915 seront ajoutées à l'environnement, le comportement par défaut. Les paquets
7916 qui apparaissent après @code{--ad-hoc} sont interprétés comme les paquets à
7917 ajouter à l'environnement directement.
7918
7919 @item --pure
7920 Nettoie les variables d'environnement existantes lors de la construction du
7921 nouvel environnement. Cela a pour effet de créer un environnement dans
7922 lequel les chemins de recherche ne contiennent que des entrées de paquets.
7923
7924 @item --search-paths
7925 Affiche les définitions des variables d'environnement qui composent
7926 l'environnement.
7927
7928 @item --system=@var{système}
7929 @itemx -s @var{système}
7930 Essaye de construire pour @var{système} — p.@: ex.@: @code{i686-linux}.
7931
7932 @item --container
7933 @itemx -C
7934 @cindex conteneur
7935 Lance @var{commande} dans un conteneur isolé. Le répertoire de travail
7936 actuel en dehors du conteneur est monté dans le conteneur. En plus, à moins
7937 de le changer avec @code{--user}, un répertoire personnel fictif est créé
7938 pour correspondre à celui de l'utilisateur actuel et @file{/etc/passwod} est
7939 configuré en conséquence. Le processus est lancé en tant que l'utilisateur
7940 actuel en dehors du conteneur, mais a les privilèges root dans le contexte
7941 du conteneur.
7942
7943 @item --network
7944 @itemx -N
7945 Pour les conteneurs, partage l'espace de nom du réseau avec le système
7946 hôte. Les conteneurs créés sans cette option n'ont accès qu'à l'interface
7947 de boucle locale.
7948
7949 @item --link-profile
7950 @itemx -P
7951 Pour les conteneurs, lie le profil de l'environnement à
7952 @file{~/.guix-profile} dans le conteneur. C'est équivalent à lance la
7953 commande @command{ln -s $GUIX_ENVIRONMENT ~/.guix-profile} dans le
7954 conteneur. La liaison échouera et annulera l'environnement si le répertoire
7955 existe déjà, ce qui sera sans doute le cas si @command{guix environment} est
7956 invoqué dans le répertoire personnel de l'utilisateur.
7957
7958 Certains paquets sont configurés pour chercher des fichiers de configuration
7959 et des données dans @code{~/.guix-profile}@footnote{Par exemple, le paquet
7960 @code{fontconfig} inspecte @file{~/.guix-profile/share/fonts} pour trouver
7961 des polices supplémentaires.} ; @code{--link-profile} permet à ces
7962 programmes de se comporter comme attendu dans l'environnement.
7963
7964 @item --user=@var{utilisateur}
7965 @itemx -u @var{utilisateur}
7966 Pour les conteneurs, utilise le nom d'utilisateur @var{utilisateur} à la
7967 place de l'utilisateur actuel. L'entrée générée dans @file{/etc/passwod}
7968 dans le conteneur contiendra le nom @var{utilisateur} ; le répertoire
7969 personnel sera @file{/home/UTILISATEUR} ; et aucune donnée GECOS ne sera
7970 copiée. @var{utilisateur} n'a pas besoin d'exister sur le système.
7971
7972 En plus, tous les chemins partagés ou exposés (voir @code{--share} et
7973 @code{--expose} respectivement) dont la cible est dans le répertoire
7974 personnel de l'utilisateur seront remontés relativement à
7975 @file{/home/UTILISATEUR} ; cela comprend le montage automatique du
7976 répertoire de travail actuel.
7977
7978 @example
7979 # exposera les chemins comme /home/foo/wd, /home/foo/test et /home/foo/target
7980 cd $HOME/wd
7981 guix environment --container --user=foo \
7982 --expose=$HOME/test \
7983 --expose=/tmp/target=$HOME/target
7984 @end example
7985
7986 Bien que cela limite la fuite de l'identité de l'utilisateur à travers le
7987 chemin du répertoire personnel et des champs de l'utilisateur, ce n'est
7988 qu'un composant utile pour une solution d'anonymisation ou de préservation
7989 de la vie privée — pas une solution en elle-même.
7990
7991 @item --expose=@var{source}[=@var{cible}]
7992 Pour les conteneurs, expose le système de fichiers @var{source} du système
7993 hôte comme un système de fichiers en lecture seule @var{cible} dans le
7994 conteneur. Si @var{cible} n'est pas spécifiée, @var{source} est utilisé
7995 comme point de montage dans le conteneur.
7996
7997 L'exemple ci-dessous crée un REPL Guile dans un conteneur dans lequel le
7998 répertoire personnel de l'utilisateur est accessible en lecture-seule via le
7999 répertoire @file{/exchange} :
8000
8001 @example
8002 guix environment --container --expose=$HOME=/exchange --ad-hoc guile -- guile
8003 @end example
8004
8005 @item --share=@var{source}[=@var{cible}]
8006 Pour les conteneurs, partage le système de fichiers @var{soruce} du système
8007 hôte comme un système de fichiers en lecture-écriture @var{cible} dans le
8008 conteneur. Si @var{cible} n'est pas spécifiée, @var{source} est utilisée
8009 comme point de montage dans le conteneur.
8010
8011 L'exemple ci-dessous crée un REPL Guile dans un conteneur dans lequel le
8012 répertoire personnel de l'utilisateur est accessible en lecture-écriture via
8013 le répertoire @file{/exchange} :
8014
8015 @example
8016 guix environment --container --share=$HOME=/exchange --ad-hoc guile -- guile
8017 @end example
8018 @end table
8019
8020 @command{guix environment} supporte aussi toutes les options de construction
8021 que @command{guix build} supporte (@pxref{Options de construction communes}).
8022
8023
8024 @node Invoquer guix publish
8025 @section Invoquer @command{guix publish}
8026
8027 @cindex @command{guix publish}
8028 Le but de @command{guix publish} est de vous permettre de partager
8029 facilement votre dépôt avec d'autres personnes qui peuvent ensuite
8030 l'utiliser comme serveur de substituts (@pxref{Substituts}).
8031
8032 Lorsque @command{guix publish} est lancé, il crée un serveur HTTP qui permet
8033 à n'importe qui avec un accès réseau d'y récupérer des substituts. Cela
8034 signifie que toutes les machines qui font tourner Guix peuvent aussi agir
8035 comme une ferme de construction, puisque l'interface HTTP est compatible
8036 avec Hydra, le logiciel derrière la ferme de construction
8037 @code{hydra.gnu.org}.
8038
8039 Pour des raisons de sécurité, chaque substitut est signé, ce qui permet aux
8040 destinataires de vérifier leur authenticité et leur intégrité
8041 (@pxref{Substituts}). Comme @command{guix publish} utilise la clef de
8042 signature du système, qui n'est lisible que par l'administrateur système, il
8043 doit être lancé en root ; l'option @code{--user} lui fait baisser ses
8044 privilèges le plus tôt possible.
8045
8046 La pair de clefs pour les signatures doit être générée avant de lancer
8047 @command{guix publish}, avec @command{guix archive --generate-key}
8048 (@pxref{Invoquer guix archive}).
8049
8050 La syntaxe générale est :
8051
8052 @example
8053 guix publish @var{options}@dots{}
8054 @end example
8055
8056 Lancer @command{guix publish} sans arguments supplémentaires lancera un
8057 serveur HTTP sur le port 8080 :
8058
8059 @example
8060 guix publish
8061 @end example
8062
8063 Une fois qu'un serveur de publication a été autorisé (@pxref{Invoquer guix archive}), le démon peut télécharger des substituts à partir de lui :
8064
8065 @example
8066 guix-daemon --substitute-urls=http://example.org:8080
8067 @end example
8068
8069 Par défaut, @command{guix publish} compresse les archives à la volée quand
8070 il les sert. Ce mode « à la volée » est pratique puisqu'il ne demande
8071 aucune configuration et est disponible immédiatement. Cependant, lorsqu'il
8072 s'agit de servir beaucoup de clients, nous recommandons d'utiliser l'option
8073 @option{--cache}, qui active le cache des archives avant de les envoyer aux
8074 clients — voir les détails plus bas. La commande @command{guix weather}
8075 fournit un manière pratique de vérifier ce qu'un serveur fournit
8076 (@pxref{Invoquer guix weather}).
8077
8078 En bonus, @command{guix publish} sert aussi un miroir adressé par le contenu
8079 des fichiers source référencées dans les enregistrements @code{origin}
8080 (@pxref{Référence d'origine}). Par exemple, en supposant que @command{guix
8081 publish} tourne sur @code{example.org}, l'URL suivante renverra le fichie
8082 brut @file{hello-2.10.tar.gz} avec le hash SHA256 donné (représenté sous le
8083 format @code{nix-base32}, @pxref{Invoquer guix hash}) :
8084
8085 @example
8086 http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1@dots{}ndq1i
8087 @end example
8088
8089 Évidemment, ces URL ne fonctionnent que pour des fichiers dans le dépôt ;
8090 dans les autres cas, elles renvoie une erreur 404 (« Introuvable »).
8091
8092 @cindex journaux de construction, publication
8093 Les journaux de construction sont disponibles à partir des URL @code{/log}
8094 comme ceci :
8095
8096 @example
8097 http://example.org/log/gwspk@dots{}-guile-2.2.3
8098 @end example
8099
8100 @noindent
8101 Lorsque @command{guix-daemon} est configuré pour sauvegarder les journaux de
8102 construction compressés, comme c'est le cas par défaut (@pxref{Invoquer guix-daemon}), les URL @code{/log} renvoient le journal compressé tel-quel,
8103 avec un en-tête @code{Content-Type} ou @code{Content-Encoding} approprié.
8104 Nous recommandons de lancer @command{guix-daemon} avec
8105 @code{--log-compression=gzip} pace que les navigateurs web les décompressent
8106 automatiquement, ce qui n'est pas le cas avec la compression bzip2.
8107
8108 Les options suivantes sont disponibles :
8109
8110 @table @code
8111 @item --port=@var{port}
8112 @itemx -p @var{port}
8113 Écoute les requêtes HTTP sur le @var{port}
8114
8115 @item --listen=@var{hôte}
8116 Écoute sur l'interface réseau de @var{hôte}. Par défaut, la commande
8117 accepte les connexions de n'importe quelle interface.
8118
8119 @item --user=@var{utilisateur}
8120 @itemx -u @var{utilisateur}
8121 Charge les privilèges de @var{utilisateur} le plus vite possible —
8122 c.-à-d. une fois que la socket du serveur est ouverte et que la clef de
8123 signature a été lue.
8124
8125 @item --compression[=@var{niveau}]
8126 @itemx -C [@var{niveau}]
8127 Compresse les données au @var{niveau} donné. Lorsque le @var{niveau} est
8128 zéro, désactive la compression. L'intervalle 1 à 9 correspond aux
8129 différents niveaux de compression gzip : 1 est le plus rapide et 9 est la
8130 meilleure (mais gourmande en CPU). Le niveau par défaut est 3.
8131
8132 À moins que @option{--cache} ne soit utilisé, la compression se fait à la
8133 volée et les flux compressés ne sont pas cachés. Ainsi, pour réduire la
8134 charge sur la machine qui fait tourner @command{guix publish}, c'est une
8135 bonne idée de choisir un niveau de compression faible, de lancer
8136 @command{guix publish} derrière un serveur de cache ou d'utiliser
8137 @option{--cache}. Utilise @option{--cache} a l'avantage qu'il permet à
8138 @command{guix publish} d'ajouter l'en-tête HTTP @code{Content-Length} à sa
8139 réponse.
8140
8141 @item --cache=@var{répertoire}
8142 @itemx -c @var{répertoire}
8143 Cache les archives et les métadonnées (les URL @code{.narinfo}) dans
8144 @var{répertoire} et ne sert que les archives dans ce cache.
8145
8146 Lorsque cette option est omise, les archives et les métadonnées sont crées à
8147 la volée. Cela réduit la bande passante disponible, surtout quand la
8148 compression est activée puisqu'elle pourrait être limitée par le CPU. Un
8149 autre inconvénient au mode par défaut est que la taille des archives n'est
8150 pas connue à l'avance, donc @command{guix publish} n'ajoute pas l'en-tête
8151 @code{Content-Length} à ses résponses, ce qui empêche les clients de savoir
8152 la quantité de données à télécharger.
8153
8154 À l'inverse, lorsque @option{--cache} est utilisée, la première requête pour
8155 un élément du dépôt (via une URL @code{.narinfo}) renvoie une erreur 404 et
8156 déclenche la création de l'archive — en calculant son @code{.narinfo} et en
8157 compressant l'archive au besoin. Une fois l'archive cachée dans
8158 @var{répertoire}, les requêtes suivantes réussissent et sont servies
8159 directement depuis le cache, ce qui garanti que les clients ont la meilleure
8160 bande passante possible.
8161
8162 Le processus de création est effectué par des threads de travail. Par
8163 défaut, un thread par cœur du CPU est créé, mais cela peut être
8164 personnalisé. Voir @option{--workers} plus bas.
8165
8166 Lorsque l'option @option{--ttl} est utilisée, les entrées cachées sont
8167 automatiquement supprimées lorsqu'elles expirent.
8168
8169 @item --workers=@var{N}
8170 Lorsque @option{--cache} est utilisée, demande l'allocation de @var{N}
8171 thread de travail pour créer les archives.
8172
8173 @item --ttl=@var{ttl}
8174 Produit des en-têtes HTTP @code{Cache-Control} qui expriment une durée de
8175 vie (TTL) de @var{ttl}. @var{ttl} peut dénoter une durée : @code{5d}
8176 signifie 5 jours, @code{1m} signifie un mois, etc.
8177
8178 Cela permet au Guix de l'utilisateur de garder les informations en cache
8179 pendant @var{ttl}. Cependant, remarquez que @code{guix publish} ne garanti
8180 pas lui-même que les éléments du dépôt qu'il fournit seront toujours
8181 disponible pendant la durée @var{ttl}.
8182
8183 En plus, lorsque @option{--cache} est utilisée, les entrées cachées qui
8184 n'ont pas été demandé depuis @var{ttl} et n'ont pas d'élément correspondant
8185 dans le dépôt peuvent être supprimées.
8186
8187 @item --nar-path=@var{chemin}
8188 Utilise @var{chemin} comme préfixe des URL de fichier « nar »
8189 (@pxref{Invoquer guix archive, normalized archives}).
8190
8191 Par défaut, les nars sont présents à l'URL comme
8192 @code{/nar/gzip/@dots{}-coreutils-8.25}. Cette option vous permet de
8193 changer la partie @code{/nar} en @var{chemin}.
8194
8195 @item --public-key=@var{fichier}
8196 @itemx --private-key=@var{fichier}
8197 Utilise les @var{fichier}s spécifiques comme pair de clefs utilisées pour
8198 signer les éléments avant de les publier.
8199
8200 Les fichiers doivent correspondre à la même pair de clefs (la clef privée
8201 est utilisée pour signer et la clef publique est seulement ajouté aux
8202 métadonnées de la signature). Ils doivent contenir les clefs dans le format
8203 s-expression canonique produit par @command{guix archive --generate-key}
8204 (@pxref{Invoquer guix archive}). Par défaut,
8205 @file{/etc/guix/signing-key.pub} et @file{/etc/guix/signing-key.sec} sont
8206 utilisés.
8207
8208 @item --repl[=@var{port}]
8209 @itemx -r [@var{port}]
8210 Crée un serveur REPL Guile (@pxref{REPL Servers,,, guile, GNU Guile
8211 Reference Manual}) sur @var{pport} (37146 par défaut). C'est surtout utile
8212 pour déboguer un serveur @command{guix publish} qui tourne.
8213 @end table
8214
8215 Activer @command{guix publish} sur un système GuixSD est vraiment une seule
8216 ligne : instantiez simplement un service @code{guix-publish-service-type}
8217 dans le champs @code{services} de votre déclaration @code{operating-system}
8218 (@pxref{guix-publish-service-type, @code{guix-publish-service-type}}).
8219
8220 Si vous avez installé Guix sur une « distro extérieure », suivez ces
8221 instructions :
8222
8223 @itemize
8224 @item
8225 Si votre distro hôte utilise le système d'init systemd :
8226
8227 @example
8228 # ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \
8229 /etc/systemd/system/
8230 # systemctl start guix-publish && systemctl enable guix-publish
8231 @end example
8232
8233 @item
8234 Si votre distribution hôte utilise le système d'initialisation Upstart :
8235
8236 @example
8237 # ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/
8238 # start guix-publish
8239 @end example
8240
8241 @item
8242 Sinon, procédez de manière similaire avec votre système d'init de votre
8243 distro.
8244 @end itemize
8245
8246 @node Invoquer guix challenge
8247 @section Invoquer @command{guix challenge}
8248
8249 @cindex constructions reproductibles
8250 @cindex constructions vérifiables
8251 @cindex @command{guix challenge}
8252 @cindex défi
8253 Est-ce que les binaires fournis par ce serveur correspondent réellement au
8254 code source qu'il dit avoir construit ? Est-ce que le processus de
8255 construction d'un paquet est déterministe ? Ce sont les question auxquelles
8256 la commande @command{guix challenge} essaye de répondre.
8257
8258 La première question est évidemment importante : avant d'utiliser un serveur
8259 de substituts (@pxref{Substituts}), il vaut mieux @emph{vérifier} qu'il
8260 fournit les bons binaires et donc le @emph{défier}. La deuxième est ce qui
8261 permet la première : si les constructions des paquets sont déterministes
8262 alors des constructions indépendantes du paquet devraient donner le même
8263 résultat, bit à bit ; si un serveur fournit un binaire différent de celui
8264 obtenu localement, il peut être soit corrompu, soit malveillant.
8265
8266 On sait que le hash qui apparaît dans @file{/gnu/store} est le hash de
8267 toutes les entrées du processus qui construit le fichier ou le répertoire —
8268 les compilateurs, les bibliothèques, les scripts de construction,
8269 etc. (@pxref{Introduction}). En supposant que les processus de construction
8270 sont déterministes, un nom de fichier dans le dépôt devrait correspondre
8271 exactement à une sortie de construction. @command{guix challenge} vérifie
8272 si il y a bien effectivement une seule correspondance en comparant les
8273 sorties de plusieurs constructions indépendantes d'un élément du dépôt
8274 donné.
8275
8276 La sortie de la commande ressemble à :
8277
8278 @smallexample
8279 $ guix challenge --substitute-urls="https://hydra.gnu.org https://guix.example.org"
8280 mise à jour de la liste des substituts depuis 'https://hydra.gnu.org'... 100.0%
8281 mise à jour de la liste des substituts depuis 'https://guix.example.org'... 100.0%
8282 le contenu de /gnu/store/@dots{}-openssl-1.0.2d diffère :
8283 empreinte locale : 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
8284 https://hydra.gnu.org/nar/@dots{}-openssl-1.0.2d : 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
8285 https://guix.example.org/nar/@dots{}-openssl-1.0.2d : 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim
8286 le contenu de /gnu/store/@dots{}-git-2.5.0 diffère :
8287 empreinte locale : 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha
8288 https://hydra.gnu.org/nar/@dots{}-git-2.5.0 : 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f
8289 https://guix.example.org/nar/@dots{}-git-2.5.0 : 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73
8290 le contenu de /gnu/store/@dots{}-pius-2.1.1 diffère :
8291 empreinte locale : 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
8292 https://hydra.gnu.org/nar/@dots{}-pius-2.1.1 : 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
8293 https://guix.example.org/nar/@dots{}-pius-2.1.1 : 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs
8294
8295 @dots{}
8296
8297 6,406 éléments du dépôt ont été analysés :
8298 - 4,749 (74.1%) étaient identiques
8299 - 525 (8.2%) étaient différents
8300 - 1,132 (17.7%) étaient impossibles à évaluer
8301 @end smallexample
8302
8303 @noindent
8304 Dans cet exemple, @command{guix challenge} scanne d'abord le dépôt pour
8305 déterminer l'ensemble des dérivations construites localement — en opposition
8306 aux éléments qui ont été téléchargées depuis un serveur de substituts — puis
8307 demande leur avis à tous les serveurs de substituts. Il rapporte ensuite
8308 les éléments du dépôt pour lesquels les serveurs ont obtenu un résultat
8309 différent de la construction locale.
8310
8311 @cindex non-déterminisme, dans les constructions des paquets
8312 Dans l'exemple, @code{guix.example.org} obtient toujours une réponse
8313 différente. Inversement, @code{hydra.gnu.org} est d'accord avec les
8314 constructions locale, sauf dans le cas de Git. Cela peut indiquer que le
8315 processus de construction de Git est non-déterministe, ce qui signifie que
8316 sa sortie diffère en fonction de divers choses que Guix ne contrôle pas
8317 parfaitement, malgré l'isolation des constructions (@pxref{Fonctionnalités}). Les
8318 sources les plus communes de non-déterminisme comprennent l'ajout
8319 d'horodatage dans les résultats des constructions, l'inclusion de nombres
8320 aléatoires et des listes de fichiers ordonnés par numéro d'inœud. Voir
8321 @uref{https://reproducible-builds.org/docs/}, pour plus d'informations.
8322
8323 Pour trouver ce qui ne va pas avec le binaire de Git, on peut faire quelque
8324 chose comme cela (@pxref{Invoquer guix archive}) :
8325
8326 @example
8327 $ wget -q -O - https://hydra.gnu.org/nar/@dots{}-git-2.5.0 \
8328 | guix archive -x /tmp/git
8329 $ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git
8330 @end example
8331
8332 Cette commande montre les différences entre les fichiers qui résultent de la
8333 construction locale et des fichiers qui résultent de la construction sur
8334 @code{hydra.gnu.org} (@pxref{Overview, Comparing and Merging Files,,
8335 diffutils, Comparing and Merging Files}). La commande @command{diff}
8336 fonctionne bien avec des fichiers texte. Lorsque des fichiers binaires
8337 diffèrent cependant, @uref{https://diffoscope.org/, Diffoscope} est une
8338 meilleure option. C'est un outil qui aide à visualiser les différences
8339 entre toute sorte de fichiers.
8340
8341 Une fois que vous avez fait ce travail, vous pourrez dire si les différences
8342 sont dues au non-déterminisme du processus de construction ou à la
8343 malhonnêteté du serveur. Nous avons fait beaucoup d'effort pour éliminer
8344 les sources de non-déterminisme dans les paquets pour rendre plus facile la
8345 vérification des substituts, mais bien sûr, c'est un processus qui
8346 n'implique pas que Guix, mais une grande partie de la communauté des
8347 logiciels libres. Pendant ce temps, @command{guix challenge} est un outil
8348 pour aider à corriger le problème.
8349
8350 Si vous écrivez un paquet pour Guix, nous vous encourageons à vérifier si
8351 @code{hydra.gnu.org} et d'autres serveurs de substituts obtiennent le même
8352 résultat que vous avec :
8353
8354 @example
8355 $ guix challenge @var{paquet}
8356 @end example
8357
8358 @noindent
8359 où @var{paquet} est une spécification de paquet comme @code{guile@@2.0} ou
8360 @code{glibc:debug}.
8361
8362 La syntaxe générale est :
8363
8364 @example
8365 guix challenge @var{options} [@var{paquets}@dots{}]
8366 @end example
8367
8368 Lorsqu'une différence est trouvée entre l'empreinte d'un élément construit
8369 localement et celle d'un substitut fournit par un serveur, ou parmi les
8370 substituts fournis par différents serveurs, la commande l'affiche comme dans
8371 l'exemple ci-dessus et sa valeur de sortie est 2 (les autres valeurs
8372 différentes de 0 indiquent d'autres sortes d'erreurs).
8373
8374 L'option qui compte est :
8375
8376 @table @code
8377
8378 @item --substitute-urls=@var{urls}
8379 Considère @var{urls} comme la liste des URL des sources de substituts
8380 séparés par des espaces avec lesquels comparer les paquets locaux.
8381
8382 @item --verbose
8383 @itemx -v
8384 Montre des détails sur les correspondances (contenu identique) en plus des
8385 informations sur différences.
8386
8387 @end table
8388
8389 @node Invoquer guix copy
8390 @section Invoquer @command{guix copy}
8391
8392 @cindex copier des éléments du dépôt par SSH
8393 @cindex SSH, copie d'éléments du dépôt
8394 @cindex partager des éléments du dépôt entre plusieurs machines
8395 @cindex transférer des éléments du dépôt entre plusieurs machines
8396 La commande @command{guix copy} copie des éléments du dépôt d'une machine
8397 vers le dépôt d'une autre machine à travers une connexion SSH@footnote{Cette
8398 commande n'est disponible que si Guile-SSH est trouvé. @xref{Prérequis},
8399 pour des détails}. Par exemple, la commande suivante copie le paquet
8400 @code{coreutils}, le profil utilisateur et toutes leurs dépendances sur
8401 @var{hôte}, en tant qu'utilisateur @var{utilisateur} :
8402
8403 @example
8404 guix copy --to=@var{utilisateur}@@@var{hôte} \
8405 coreutils `readlink -f ~/.guix-profile`
8406 @end example
8407
8408 Si certains éléments à copier sont déjà présents sur @var{hôte}, ils ne sont
8409 pas envoyés.
8410
8411 La commande ci-dessous récupère @code{libreoffice} et @code{gimp} depuis
8412 @var{hôte}, en supposant qu'ils y sont présents :
8413
8414 @example
8415 guix copy --from=@var{hôte} libreoffice gimp
8416 @end example
8417
8418 La connexion SSH est établie avec le client Guile-SSH, qui set compatible
8419 avec OpenSSH : il honore @file{~/.ssh/known_hosts} et @file{~/.ssh/config}
8420 et utilise l'agent SSH pour l'authentification.
8421
8422 La clef utilisée pour signer les éléments qui sont envoyés doit être
8423 acceptée par la machine distante. De même, la clef utilisée pour la machine
8424 distante depuis laquelle vous récupérez des éléments doit être dans
8425 @file{/etc/guix/acl} pour qu'ils soient acceptés par votre propre démon.
8426 @xref{Invoquer guix archive}, pour plus d'informations sur
8427 l'authentification des éléments du dépôt.
8428
8429 La syntaxe générale est :
8430
8431 @example
8432 guix copy [--to=@var{spec}|--from=@var{spec}] @var{items}@dots{}
8433 @end example
8434
8435 Vous devez toujours spécifier l'une des options suivantes :
8436
8437 @table @code
8438 @item --to=@var{spec}
8439 @itemx --from=@var{spec}
8440 Spécifie l'hôte où envoyer ou d'où recevoir les éléments. @var{spec} doit
8441 être une spécification SSH comme @code{example.org},
8442 @code{charlie@@example.org} ou @code{charlie@@example.org:2222}.
8443 @end table
8444
8445 L'option @var{items} peut être des noms de paquets, comme @code{gimp} ou des
8446 éléments du dépôt comme @file{/gnu/store/@dots{}-idutils-4.6}.
8447
8448 Lorsque vous spécifiez le nom d'un paquet à envoyer, il est d'abord
8449 construit au besoin, sauf si l'option @option{--dry-run} est spécifiée. Les
8450 options de construction communes sont supportées (@pxref{Options de construction communes}).
8451
8452
8453 @node Invoquer guix container
8454 @section Invoquer @command{guix container}
8455 @cindex conteneur
8456 @cindex @command{guix container}
8457 @quotation Remarque
8458 À la version @value{VERSION}, cet outil est toujours expérimental.
8459 L'interface est sujette à changement radicaux dans le futur.
8460 @end quotation
8461
8462 Le but de @command{guix container} est de manipuler des processus qui
8463 tournent dans un environnement séparé, connus sous le nom de « conteneur »,
8464 typiquement créés par les commandes @command{guix environment}
8465 (@pxref{Invoquer guix environment}) et @command{guix system container}
8466 (@pxref{Invoquer guix system}).
8467
8468 La syntaxe générale est :
8469
8470 @example
8471 guix container @var{action} @var{options}@dots{}
8472 @end example
8473
8474 @var{action} spécifie les opérations à effectuer avec un conteneur, et
8475 @var{options} spécifie les arguments spécifiques au contexte pour l'action.
8476
8477 Les actions suivantes sont disponibles :
8478
8479 @table @code
8480 @item exec
8481 Exécute une commande dans le contexte d'un conteneur lancé.
8482
8483 La syntaxe est :
8484
8485 @example
8486 guix container exec @var{pid} @var{programme} @var{arguments}@dots{}
8487 @end example
8488
8489 @var{pid} spécifie le PID du conteneur lancé. @var{programme} spécifie le
8490 nom du fichier exécutable dans le système de fichiers racine du conteneur.
8491 @var{arguments} sont les options supplémentairesà passer à @var{programme}.
8492
8493 La commande suivante lance un shell de connexion interactif dans un
8494 conteneur GuixSD, démarré par @command{guix system container} et dont le PID
8495 est 9001 :
8496
8497 @example
8498 guix container exec 9001 /run/current-system/profile/bin/bash --login
8499 @end example
8500
8501 Remarquez que @var{pid} ne peut pas être le processus parent d'un
8502 conteneur. Ce doit être le PID 1 du conteneur ou l'un de ses processus
8503 fils.
8504
8505 @end table
8506
8507 @node Invoquer guix weather
8508 @section Invoquer @command{guix weather}
8509
8510 Vous pouvez parfois grogner lorsque les substituts ne sont pas disponibles
8511 et que vous devez construire les paquets vous-même (@pxref{Substituts}). La
8512 commande @command{guix weather} rapporte la disponibilité des substituts sur
8513 les serveurs spécifiés pour que vous sachiez si vous allez raller
8514 aujourd'hui. Cela peut parfois être une information utile pour les
8515 utilisateurs, mais elle est surtout utile pour les personnes qui font
8516 tourner @command{guix publish} (@pxref{Invoquer guix publish}).
8517
8518 @cindex statistiques sur les substituts
8519 @cindex disponibilité des substituts
8520 @cindex substuts, disponibilité
8521 @cindex weather, disponibilité des substituts
8522 Voici un exemple :
8523
8524 @example
8525 $ guix weather --substitute-urls=https://guix.example.org
8526 calcul de 5,872 dérivations de paquets pour x86_64-linux…
8527 recherche de 6,128 éléments du dépôt sur https://guix.example.org…
8528 mise à jour de la liste des substituts depuis 'https://guix.example.org'... 100.0%
8529 https://guix.example.org
8530 43.4% substituts disponibles (2,658 sur 6,128)
8531 7,032.5 Mo de fichiers nar (compressés)
8532 19,824.2 Mo sur le disque (décompressés)
8533 0.030 secondes par requêtes (182.9 secondes au total)
8534 33.5 requêtes par seconde
8535
8536 9.8% (342 sur 3,470) des éléments manquants sont dans la queue
8537 867 constructions dans la queue
8538 x86_64-linux : 518 (59.7%)
8539 i686-linux : 221 (25.5%)
8540 aarch64-linux : 128 (14.8%)
8541 vitesse de construction : 23.41 constructions par heure
8542 x86_64-linux : 11.16 constructions par heure
8543 i686-linux : 6.03 constructions par heure
8544 aarch64-linux : 6.41 constructions par heure
8545 @end example
8546
8547 @cindex intégration continue, statistiques
8548 Comme vous pouvez le voir, elle rapporte le pourcentage des paquets pour
8549 lesquels des substituts sont disponibles sur le serveur — indépendamment du
8550 fait que les substituts soient activés, et indépendamment du fait que la
8551 clef de signature du serveur soit autorisée. Elle rapporte aussi la taille
8552 des archives compressées fournies par le serveur, la taille des éléments du
8553 dépôt correspondant dans le dépôt (en supposant que la déduplication soit
8554 désactivée) et la vitesse du serveur. La deuxième partie donne des
8555 statistiques sur l'intégration continue (CI), si le serveur le supporte.
8556
8557 Pour cela, @command{guix weather} récupère par HTTP(S) les métadonnées
8558 (@dfn{narinfos}@ de tous les éléments du dépôts pertinents. Comme
8559 @command{guix challenge}, il ignore les signatures de ces substituts, ce qui
8560 n'est pas dangereux puisque la commande ne fait que récupérer des
8561 statistiques et n'installe pas ces substituts.
8562
8563 Entre autres choses, il est possible de demander des types de système
8564 particuliers et des ensembles de paquets particuliers. Les options
8565 disponibles sont listées plus bas.
8566
8567 @table @code
8568 @item --substitute-urls=@var{urls}
8569 @var{urls} est la liste des URL des serveurs de substituts séparés par des
8570 espaces. Lorsque cette option n'est pas renseignée, l'ensemble des serveurs
8571 de substituts par défaut est utilisé.
8572
8573 @item --system=@var{système}
8574 @itemx -s @var{système}
8575 Effectue des requêtes pour les substituts @var{système} — p.@: ex.@:
8576 @code{aarch64-linux}. Cette option peut être répétée, auquel cas
8577 @command{guix weather} demandera les substituts de plusieurs types de
8578 systèmes.
8579
8580 @item --manifest=@var{fichier}
8581 Plutôt que de demander des substituts pour tous les paquets, demande
8582 uniquement les paquets spécifiés dans @var{fichier}. @var{fichier} doit
8583 contenir un @dfn{manifeste} comme avec l'option @code{-m} de @command{guix
8584 package} (@pxref{Invoquer guix package}).
8585 @end table
8586
8587
8588 @c *********************************************************************
8589 @node Distribution GNU
8590 @chapter Distribution GNU
8591
8592 @cindex Distribution Système Guix
8593 @cindex GuixSD
8594 Guix fournit aussi une distribution du système GNU contenant uniquement des
8595 logiciels libres@footnote{Le terme « libre » se réfère ici bien sûr à
8596 @url{http://www.gnu.org/philosophy/free-sw.fr.html,la liberté offerte à
8597 l'utilisateur de ces logiciels}.}. On peut installer la distribution
8598 elle-même (@pxref{Installation du système}), mais on peut aussi installer Guix
8599 comme gestionnaire de paquets par dessus un système GNU/Linux déjà installé
8600 (@pxref{Installation}). Pour distinguer ces deux cas, on appelle la
8601 distribution autonome « Distribution Système Guix » ou GuixSD.
8602
8603 la distribution fournit les paquets cœur de GNU comme la GNU libc, GCC et
8604 Binutils, ainsi que de nombreuses applications GNU et non-GNU. La liste
8605 complète des paquets disponibles se trouve
8606 @url{http://www.gnu.org/software/guix/packages,en ligne} ou en lançant
8607 @command{guix package} (@pxref{Invoquer guix package}) :
8608
8609 @example
8610 guix package --list-available
8611 @end example
8612
8613 Notre but est de fournir une distribution logicielle entièrement libre de
8614 GNU/Linux et d'autres variantes de GNU, en se concentrant sur la promotion
8615 et l'intégration étroite des composants GNU en insistant sur les programmes
8616 et les outils qui aident l'utilisateur à exercer ses libertés.
8617
8618 Les paquets sont actuellement disponibles pour les plateformes suivantes :
8619
8620 @table @code
8621
8622 @item x86_64-linux
8623 l'architecture Intel et AMD @code{x86_64} avec le noyau Linux-libre ;
8624
8625 @item i686-linux
8626 l'architecture Intel 32-bits (IA32) avec le noyau Linux-libre ;
8627
8628 @item armhf-linux
8629 l'architecture ARMv7-A avec gestion des flottants matérielle, Thumb-2 et
8630 NEON, avec l'interface binaire applicative (ABI) EABI hard-float et le noyau
8631 Linux-libre ;
8632
8633 @item aarch64-linux
8634 les processeurs ARMv8-A 64-bits en little-endian avec le noyau Linux-libre.
8635 Le support est actuellement expérimental et limité. @xref{Contribuer},
8636 pour savoir comment aider !
8637
8638 @item mips64el-linux
8639 les processeurs MIPS 64-bits little-endian, spécifiquement la série
8640 Loongson, ABI n32, avec le noyau Linux-libre.
8641
8642 @end table
8643
8644 GuixSD lui-même est actuellement disponible sur @code{i686} et
8645 @code{x86_64}.
8646
8647 @noindent
8648 Pour des informations sur comment porter vers d'autres architectures et
8649 d'autres noyau, @pxref{Porter}.
8650
8651 @menu
8652 * Installation du système:: Installer le système d'exploitation complet.
8653 * Configuration système:: Configurer le système d'exploitation.
8654 * Documentation:: Visualiser les manuels d'utilisateur des
8655 logiciels.
8656 * Installer les fichiers de débogage:: Nourrir le débogueur.
8657 * Mises à jour de sécurité:: Déployer des correctifs de sécurité
8658 rapidement.
8659 * Modules de paquets:: Les paquets du point de vu du programmeur.
8660 * Consignes d'empaquetage:: Faire grandir la distribution.
8661 * Bootstrapping:: GNU/Linux depuis zéro.
8662 * Porter:: Cibler une autre plateforme ou un autre noyau.
8663 @end menu
8664
8665 La construction de cette distribution est un effort collaboratif et nous
8666 vous invitons à nous rejoindre ! @xref{Contribuer}, pour des informations
8667 sur la manière de nous aider.
8668
8669 @node Installation du système
8670 @section Installation du système
8671
8672 @cindex installer GuixSD
8673 @cindex Distribution Système Guix
8674 Cette section explique comment installer la distribution système Guix
8675 (GuixSD) sur votre machine. Le gestionnaire de paquets Guix peut aussi être
8676 installé sur un système GNU/Linux déjà installé, @pxref{Installation}.
8677
8678 @ifinfo
8679 @quotation Remarque
8680 @c This paragraph is for people reading this from tty2 of the
8681 @c installation image.
8682 Vous lisez cette documentation avec un lecteur Info. Pour des détails sur
8683 son utilisation, appuyez sur la touche @key{ENTRÉE} (« Entrée » ou « à la
8684 ligne ») sur le lien suivant : @pxref{Top, Info reader,, info-stnd,
8685 Stand-alone GNU Info}. Appuyez ensuite sur @kbd{l} pour revenir ici.
8686
8687 Autrement, lancez @command{info info} dans un autre tty pour garder ce
8688 manuel ouvert.
8689 @end quotation
8690 @end ifinfo
8691
8692 @menu
8693 * Limitations:: Ce à quoi vous attendre.
8694 * Considérations matérielles:: Matériel supporté.
8695 * Installation depuis une clef USB ou un DVD:: Préparer le média
8696 d'installation.
8697 * Préparer l'installation:: Réseau, partitionnement, etc.
8698 * Effectuer l'installation:: Pour de vrai.
8699 * Installer GuixSD dans une VM:: Jouer avec GuixSD@.
8700 * Construire l'image d'installation:: D'où vient tout cela.
8701 @end menu
8702
8703 @node Limitations
8704 @subsection Limitations
8705
8706 À la version @value{VERSION}, la distribution système Guix (GuixSD) n'est
8707 pas prête pour la production. Elle peut contenir des bogues et ne pas avoir
8708 certaines fonctionnalités importantes. Ainsi, si vous cherche un système de
8709 production stable qui respecte votre liberté en tant qu'utilisateur, une
8710 bonne solution consiste à utiliser
8711 @url{http://www.gnu.org/distros/free-distros.html, une des distributions
8712 GNU/Linux mieux établie}. Nous espérons que vous pourrez bientôt passer à
8713 GuixSD sans peur, bien sûr. Pendant ce temps, vous pouvez aussi utiliser
8714 votre distribution actuelle et essayer le gestionnaire de paquet par dessus
8715 celle-ci (@pxref{Installation}).
8716
8717 Avant de procéder à l'installation, soyez conscient de ces limitations les
8718 plus importantes qui s'appliquent à la version @value{VERSION} :
8719
8720 @itemize
8721 @item
8722 Le procédé d'installation n'a pas d'interface utilisateur graphique et
8723 requiert une certaine familiarité avec GNU/Linux (voir les sous-sections
8724 suivantes pour avoir un aperçu de ce que cela signifie).
8725
8726 @item
8727 LVM (gestionnaire de volumes logiques) n'est pas supporté.
8728
8729 @item
8730 De plus en plus de services systèmes sont fournis (@pxref{Services}) mais
8731 certains manquent toujours cruellement.
8732
8733 @item
8734 More than 7,500 packages are available, but you might occasionally find that
8735 a useful package is missing.
8736
8737 @item
8738 GNOME, Xfce, LXDE et Enlightenment sont disponibles (@pxref{Services de bureaux}), ainsi qu'un certain nombre de gestionnaires de fenêtres X11.
8739 cependant, certaines applications graphiques peuvent manquer, ainsi que KDE.
8740 @end itemize
8741
8742 Vous êtes avertis ! Mais plus qu'un avertissement, c'est une invitation à
8743 rapporter les problèmes (et vos succès !) et à nous rejoindre pour améliorer
8744 la distribution. @xref{Contribuer}, pour plus d'info.
8745
8746
8747 @node Considérations matérielles
8748 @subsection Considérations matérielles
8749
8750 @cindex support matériel sur GuixSD
8751 GNU@tie{}GuixSD se concentre sur le respect des libertés de ses
8752 utilisateurs. Il est construit autour du noyau Linux-libre, ce qui signifie
8753 que seuls les matériels pour lesquels des pilotes logiciels et des
8754 microgiciels libres sont disponibles sont supportés. De nos jours, une
8755 grande gamme de matériel qu'on peut acheter est supporté par GNU/Linux-libre
8756 — des claviers aux cartes graphiques en passant par les scanners et les
8757 contrôleurs Ethernet. Malheureusement, il reste des produit dont les
8758 fabriquants refusent de laisser le contrôle aux utilisateurs sur leur propre
8759 utilisation de l'ordinateur, et ces matériels ne sont pas supportés par
8760 GuixSD.
8761
8762 @cindex WiFi, support matériel
8763 L'un des types de matériels où les pilotes ou les microgiciels sont le moins
8764 disponibles sont les appareils WiFi. Les appareils WiFi connus pour
8765 fonctionner sont ceux qui utilisent des puces Atheros (AR9271 et AR7010) qui
8766 correspondent au pilote @code{ath9k} de Linux-libre, et ceux qui utilisent
8767 des puces Broadcom/AirForce (BCM43xx avec la révision Wireless-Core 5), qui
8768 correspondent au pilote @code{b43-open} de Linux-libre. Des microgiciels
8769 libres existent pour les deux et sont disponibles directement sur GuixSD,
8770 dans @var{%base-firmware} (@pxref{Référence de système d'exploitation,
8771 @code{firmware}}).
8772
8773 @cindex RYF, Respects Your Freedom
8774 La @uref{https://www.fsf.org/, Free Software Foundation} a un programme de
8775 certification nommé @uref{https://www.fsf.org/ryf, @dfn{Respects Your
8776 Freedom}} (RYF), pour les produits matériels qui respectent votre liberté et
8777 votre vie privée en s'assurant que vous avez le contrôle sur l'appareil.
8778 Nous vous encourageons à vérifier la liste des appareils certifiés par RYF.
8779
8780 Une autre ressource utile est le site web @uref{https://www.h-node.org/,
8781 H-Node}. Il contient un catalogue d'appareils avec des informations sur
8782 leur support dans GNU/Linux.
8783
8784
8785 @node Installation depuis une clef USB ou un DVD
8786 @subsection Installation depuis une clef USB ou un DVD
8787
8788 An ISO-9660 installation image that can be written to a USB stick or burnt
8789 to a DVD can be downloaded from
8790 @indicateurl{https://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{system}.iso.xz},
8791 where @var{system} is one of:
8792
8793 @table @code
8794 @item x86_64-linux
8795 pour un système GNU/Linux sur un CPU compatible Intel/AMD 64-bits ;
8796
8797 @item i686-linux
8798 pour un système GNU/Linux sur un CPU compatible Intel 32-bits ;
8799 @end table
8800
8801 @c start duplication of authentication part from ``Binary Installation''
8802 Assurez-vous de télécharger les fichiers @file{.sig} associés et de vérifier
8803 l'authenticité de l'image avec, de cette manière :
8804
8805 @example
8806 $ wget https://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{system}.iso.xz.sig
8807 $ gpg --verify guixsd-install-@value{VERSION}.@var{system}.iso.xz.sig
8808 @end example
8809
8810 Si cette commande échoue parce que vous n'avez pas la clef publique requise,
8811 lancez cette commande pour l'importer :
8812
8813 @example
8814 $ gpg --keyserver pgp.mit.edu --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
8815 @end example
8816
8817 @noindent
8818 @c end duplication
8819 et relancez la commande @code{gpg --verify}.
8820
8821 Cette image contient les outils nécessaires à l'installation. Elle est
8822 faite pour être copiée @emph{telle quelle} sur une clef USB assez grosse ou
8823 un DVD.
8824
8825 @unnumberedsubsubsec Copie sur une clef USB
8826
8827 Pour copier l'image sur une clef USB, suivez ces étapes :
8828
8829 @enumerate
8830 @item
8831 Décompressez l'image avec la commande @command{xz} :
8832
8833 @example
8834 xz -d guixsd-install-@value{VERSION}.@var{système}.iso.xz
8835 @end example
8836
8837 @item
8838 Insérez la clef USB de 1@tie{}Gio ou plus dans votre machine et déterminez
8839 son nom d'appareil. En supposant que la clef usb est connue sous le nom de
8840 @file{/dev/sdX}, copiez l'image avec :
8841
8842 @example
8843 dd if=guixsd-install-@value{VERSION}.x86_64-linux.iso of=/dev/sdX
8844 sync
8845 @end example
8846
8847 Accéder à @file{/dev/sdX} requiert généralement les privilèges
8848 super-utilisateur.
8849 @end enumerate
8850
8851 @unnumberedsubsubsec Graver sur un DVD
8852
8853 Pour copier l'image sur un DVD, suivez ces étapes :
8854
8855 @enumerate
8856 @item
8857 Décompressez l'image avec la commande @command{xz} :
8858
8859 @example
8860 xz -d guixsd-install-@value{VERSION}.@var{système}.iso.xz
8861 @end example
8862
8863 @item
8864 Insérez un DVD vierge dans votre machine et déterminez son nom d'appareil.
8865 En supposant que le DVD soit connu sont le nom de @file{/dev/srX}, copiez
8866 l'image avec :
8867
8868 @example
8869 growisofs -dvd-compat -Z /dev/srX=guixsd-install-@value{VERSION}.x86_64.iso
8870 @end example
8871
8872 Accéder à @file{/dev/srX} requiert généralement les privilèges
8873 super-utilisateur.
8874 @end enumerate
8875
8876 @unnumberedsubsubsec Démarrage
8877
8878 Une fois que c'est fait, vous devriez pouvoir redémarrer le système et
8879 démarrer depuis la clef USB ou le DVD. Pour cela, vous devrez généralement
8880 entrer dans le menu de démarrage BIOS ou UEFI, où vous pourrez choisir de
8881 démarrer sur la clef USB.
8882
8883 @xref{Installer GuixSD dans une VM}, si, à la place, vous souhaitez installer
8884 GuixSD dans une machine virtuelle (VM).
8885
8886
8887 @node Préparer l'installation
8888 @subsection Préparer l'installation
8889
8890 Une fois que vous avez démarré votre ordinateur sur le média d'installation,
8891 vous devriez vous retrouver sur un prompt en root. Plusieurs TTY sont
8892 configurées et peuvent être utilisés pour lancer des commandes en root. Le
8893 TTY2 affiche cette documentation, dans la quelle vous pouvez naviguer avec
8894 les commandes du lecteur Info (@pxref{Top,,, info-stnd, Stand-alone GNU
8895 Info}). Le démon de souris GPM tourne sur le système d'installation, ce qui
8896 vous permet de sélectionner du texte avec le bouton gauche de la souris et
8897 de le coller en appuyant sur la molette.
8898
8899 @quotation Remarque
8900 L'installation nécessite un accès au réseau pour que les dépendances
8901 manquantes de votre configuration système puissent être téléchargées. Voyez
8902 la section « réseau » plus bas.
8903 @end quotation
8904
8905 Le système d'installation inclus plusieurs outils usuels pour requis pour
8906 cette tâche. Mais c'est aussi un système GuixSD complet, ce qui signifie
8907 que vous pouvez installer des paquets supplémentaires si vous en avez
8908 besoin, avec @command{guix package} (@pxref{Invoquer guix package}).
8909
8910 @subsubsection Disposition du clavier
8911
8912 @cindex disposition du clavier
8913 L'image d'installation utilise la disposition clavier qwerty (US). Si vous
8914 voulez la changer, vous pouvez utiliser la commande @command{loadkeys}. Par
8915 exemple, la commande suivante sélectionne la disposition Dvorak :
8916
8917 @example
8918 loadkeys dvorak
8919 @end example
8920
8921 Consultez les fichiers dans @file{/run/current-system/profile/share/keymaps}
8922 pour trouver une liste des dispositions disponibles. Lancez @command{man
8923 loadkey} pour plus d'informations.
8924
8925 @subsubsection Réseau
8926
8927 Run the following command to see what your network interfaces are called:
8928
8929 @example
8930 ifconfig -a
8931 @end example
8932
8933 @noindent
8934 @dots{} ou, avec la commande spécifique à GNU/Linux @command{ip} :
8935
8936 @example
8937 ip a
8938 @end example
8939
8940 @c http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
8941 Les interfaces filaires ont un nom qui commence par @samp{e} ; par exemple,
8942 l'interface qui correspond au premier contrôleur Ethernet sur la carte mère
8943 est appelé @samp{eno1}. Les interfaces sans-fil ont un nom qui commence par
8944 @samp{w}, comme @samp{w1p2s0}.
8945
8946 @table @asis
8947 @item Connexion filaire
8948 Pour configure une connexion filaire, lancez la commande suivante, en
8949 remplaçant @var{interface} par le nom de l'interface filaire que vous voulez
8950 utiliser.
8951
8952 @example
8953 ifconfig @var{interface} up
8954 @end example
8955
8956 @item Connexion sans-fil
8957 @cindex sans-fil
8958 @cindex WiFi
8959 Pour configurer le réseau sans-fil, vous pouvez créer un fichier de
8960 configuration pour l'outil de configuration @command{wpa_supplicant} (son
8961 emplacement importe peu) avec l'un des éditeurs de texte disponibles comme
8962 @command{nano} :
8963
8964 @example
8965 nano wpa_supplicant.conf
8966 @end example
8967
8968 Par exemple, la déclaration qui suit peut aller dans ce fichier et
8969 fonctionnera pour plusieurs réseaux sans-fil, si vous donnez le vrai SSID et
8970 la phrase de passe pour le réseau auquel vous vous connectez :
8971
8972 @example
8973 network=@{
8974 ssid="@var{mon-ssid}"
8975 key_mgmt=WPA-PSK
8976 psk="la phrase de passe secrète du réseau"
8977 @}
8978 @end example
8979
8980 Démarrez le service sans-file et lancez-le en tache de fond avec la commande
8981 suivante (en remplaçant @var{interface} par le nom de l'interface réseau que
8982 vous voulez utiliser) :
8983
8984 @example
8985 wpa_supplicant -c wpa_supplicant.conf -i @var{interface} -B
8986 @end example
8987
8988 Lancez @command{man wpa_supplicant} pour plus d'informations.
8989 @end table
8990
8991 @cindex DHCP
8992 À partir de ce moment, vous avez besoin d'une adresse IP. Sur les réseaux
8993 où les IP sont automatiquement attribuée par DHCP, vous pouvez lancer :
8994
8995 @example
8996 dhclient -v @var{interface}
8997 @end example
8998
8999 Essayez de pinger un serveur pour voir si le réseau fonctionne :
9000
9001 @example
9002 ping -c 3 gnu.org
9003 @end example
9004
9005 Mettre en place un accès réseau est presque toujours une nécessité parce que
9006 l'image ne contient pas tous les logiciels et les outils dont vous pourriez
9007 avoir besoin.
9008
9009 @cindex installer par SSH
9010 Si vous le souhaitez, vous pouvez continuer l'installation à distance en
9011 démarrant un serveur SSH :
9012
9013 @example
9014 herd start ssh-daemon
9015 @end example
9016
9017 Assurez-vous soit de définir un mot de passe avec @command{passwd}, soit de
9018 configurer l'authentification par clef OpenSSH avant de vous connecter.
9019
9020 @subsubsection Partitionnement
9021
9022 À moins que vous ne l'ayez déjà fait, l'étape suivante consiste à
9023 partitionner le disque puis à formater les partitions cibles.
9024
9025 L'image d'installation inclus plusieurs outils de partitionnement, dont
9026 Parted (@pxref{Overview,,, parted, GNU Parted User Manual}),
9027 @command{fdisk}, et @command{cfdisk}. Lancez-en un et paramétrez votre
9028 disque avec le partitionnement qui vous convient :
9029
9030 @example
9031 cfdisk
9032 @end example
9033
9034 Si votre disque utilise le format des tables de partitions GUID (GPT) et que
9035 vous souhaitez installer un GRUB pour système BIOS (c'est le cas par
9036 défaut), assurez-vous de créer qu'une partition de démarrage BIOS soit bien
9037 disponible (@pxref{BIOS installation,,, grub, GNU GRUB manual}).
9038
9039 @cindex EFI, installation
9040 @cindex UEFI, installation
9041 @cindex ESP, partition système EFI
9042 Si vous souhaitez à la place utilise GRUB pour système EFI, vous devrez
9043 avoir une @dfn{partition système EFI} (ESP) en FAT32. Cette partition
9044 devrait être montée dans @file{/boot/efi} et doit avoir le drapeau
9045 @code{esp}. P.@: ex.@: pour @command{parted} :
9046
9047 @example
9048 parted /dev/sda set 1 esp on
9049 @end example
9050
9051 @quotation Remarque
9052 @vindex grub-bootloader
9053 @vindex grub-efi-bootloader
9054 Unsure whether to use EFI- or BIOS-based GRUB? If the directory
9055 @file{/sys/firmware/efi} exists in the installation image, then you should
9056 probably perform an EFI installation, using @code{grub-efi-bootloader}.
9057 Otherwise you should use the BIOS-based GRUB, known as
9058 @code{grub-bootloader}. @xref{Configuration du chargeur d'amorçage}, for more info on
9059 bootloaders.
9060 @end quotation
9061
9062 Once you are done partitioning the target hard disk drive, you have to
9063 create a file system on the relevant partition(s)@footnote{Currently GuixSD
9064 only supports ext4 and btrfs file systems. In particular, code that reads
9065 file system UUIDs and labels only works for these file system types.}. For
9066 the ESP, if you have one and assuming it is @file{/dev/sda1}, run:
9067
9068 @example
9069 mkfs.fat -F32 /dev/sda1
9070 @end example
9071
9072 Preferably, assign file systems a label so that you can easily and reliably
9073 refer to them in @code{file-system} declarations (@pxref{Systèmes de fichiers}).
9074 This is typically done using the @code{-L} option of @command{mkfs.ext4} and
9075 related commands. So, assuming the target root partition lives at
9076 @file{/dev/sda2}, a file system with the label @code{my-root} can be created
9077 with:
9078
9079 @example
9080 mkfs.ext4 -L my-root /dev/sda2
9081 @end example
9082
9083 @cindex chiffrement du disque
9084 If you are instead planning to encrypt the root partition, you can use the
9085 Cryptsetup/LUKS utilities to do that (see @inlinefmtifelse{html,
9086 @uref{https://linux.die.net/man/8/cryptsetup, @code{man cryptsetup}},
9087 @code{man cryptsetup}} for more information.) Assuming you want to store
9088 the root partition on @file{/dev/sda2}, the command sequence would be along
9089 these lines:
9090
9091 @example
9092 cryptsetup luksFormat /dev/sda2
9093 cryptsetup open --type luks /dev/sda2 my-partition
9094 mkfs.ext4 -L my-root /dev/mapper/my-partition
9095 @end example
9096
9097 Une fois cela effectué, montez le système de fichier cible dans @file{/mnt}
9098 avec une commande comme (de nouveau, en supposant que @code{my-root} est
9099 l'étiquette du système de fichiers racine) :
9100
9101 @example
9102 mount LABEL=my-root /mnt
9103 @end example
9104
9105 Montez aussi tous les systèmes de fichiers que vous voudriez utiliser sur le
9106 système cible relativement à ce chemin. Si vous avez un @file{/boot} sur
9107 une partition séparé par exemple, montez-le sur @file{/mnt/boot} maintenant
9108 pour qu'il puisse être trouvé par @code{guix system init} ensuite.
9109
9110 Finally, if you plan to use one or more swap partitions (@pxref{Memory
9111 Concepts, swap space,, libc, The GNU C Library Reference Manual}), make sure
9112 to initialize them with @command{mkswap}. Assuming you have one swap
9113 partition on @file{/dev/sda3}, you would run:
9114
9115 @example
9116 mkswap /dev/sda3
9117 swapon /dev/sda3
9118 @end example
9119
9120 Autrement, vous pouvez utiliser un fichier de swap. Par exemple, en
9121 supposant que dans le nouveau système vous voulez utiliser le fichier
9122 @file{/swapfile} comme fichier de swap, vous lanceriez@footnote{Cet exemple
9123 fonctionnera sur plusieurs types de systèmes de fichiers (p.@: ex.@: ext4).
9124 Cependant, pour les systèmes de fichiers qui utilisent la copie sur écriture
9125 (COW) comme btrfs, les étapes requises peuvent varier. Pour plus de
9126 détails, regardez les pages de manuel de @command{mkswap} et
9127 @command{swapon}.} :
9128
9129 @example
9130 # Cela représente 10 Gio d'espace d'échange. Ajustez « count » pour changer la taille.
9131 dd if=/dev/zero of=/mnt/swapfile bs=1MiB count=10240
9132 # Par sécurité, laissez le fichier en lecture et en écriture uniquement pour root.
9133 chmod 600 /mnt/swapfile
9134 mkswap /mnt/swapfile
9135 swapon /mnt/swapfile
9136 @end example
9137
9138 Remarquez que si vous avez chiffré la partition racine et créé un fichier
9139 d'échange dans son système de fichier comme décrit ci-dessus, alors le
9140 chiffrement protégera aussi le fichier d'échange, comme n'importe quel
9141 fichier de ce système de fichiers.
9142
9143 @node Effectuer l'installation
9144 @subsection Effectuer l'installation
9145
9146 Lorsque la partition cible est prête et que les autres partitions sont
9147 montées, on est prêt à commencer l'installation. Commencez par :
9148
9149 @example
9150 herd start cow-store /mnt
9151 @end example
9152
9153 Cela rend @file{/gnu/store} capable de faire de la copie sur écriture, de
9154 sorte que les paquets ajoutés pendant l'installation sont écrits sur le
9155 disque cible sur @file{/mnt} plutôt que gardés en mémoire. Cela est
9156 nécessaire parce que la première phase de la commande @command{guix system
9157 init} (voir plus bas) implique de télécharger ou de construire des éléments
9158 de @file{/gnu/store} qui est initialement un système de fichiers en mémoire.
9159
9160 Ensuite, vous devrez modifier un fichier et fournir la déclaration du
9161 système à installer. Pour cela, le système d'installation propose trois
9162 éditeurs de texte. Nous recommandons GNU nano (@pxref{Top,,, nano, GNU nano
9163 Manual}), qui supporte la coloration syntaxique la correspondance de
9164 parenthèses ; les autres éditeurs sont GNU Zile (un clone d'Emacs) et nvi
9165 (un clone de l'éditeur @command{vi} original de BSD). Nous recommandons
9166 vivement de stocker ce fichier sur le système de fichier racine cible,
9167 disons en tant que @file{/mnt/etc/config.scm}. Sinon, vous perdrez votre
9168 fichier de configuration une fois que vous aurez redémarré sur votre nouveau
9169 système.
9170
9171 @xref{Utiliser le système de configuration}, pour un aperçu de comment créer votre
9172 fichier de configuration. Les exemples de configuration dont on parle dans
9173 cette section sont disponibles dans @file{/etc/configuration} sur l'image
9174 d'installation. Ainsi, pour commencer avec une configuration du système qui
9175 fournit un serveur d'affichage graphique (un système de « bureau »), vous
9176 pouvez lancer ce qui suit :
9177
9178 @example
9179 # mkdir /mnt/etc
9180 # cp /etc/configuration/desktop.scm /mnt/etc/config.scm
9181 # nano /mnt/etc/config.scm
9182 @end example
9183
9184 Vous devriez faire attention à ce que contient votre fichier de
9185 configuration, en particulier :
9186
9187 @itemize
9188 @item
9189 Assurez-vous que la forme @code{bootloader-configuration} se réfère à la
9190 cible où vous voulez installer GRUB. Elle devrait aussi mentionner
9191 @code{grub-bootloader} si vous installer GRUB en mode BIOS (ou « legacy »)
9192 ou @code{grub-efi-bootloader} pour les système UEFI plus récents. Pour les
9193 anciens systèmes, le champs @code{target} contient un périphérique comme
9194 @code{/dev/sda} ; pour les systèmes UEFI il contient un chemin vers une
9195 partition EFI montée, comme @code{/boot/efi}, et assurez-vous que ce chemin
9196 est bien monté.
9197
9198 @item
9199 Be sure that your file system labels match the value of their respective
9200 @code{device} fields in your @code{file-system} configuration, assuming your
9201 @code{file-system} configuration uses the @code{file-system-label} procedure
9202 in its @code{device} field.
9203
9204 @item
9205 Si vous avez des partitions RAID ou chiffrées, assurez-vous d'ajouter un
9206 champ @code{mapped-device} pour les décrire (@pxref{Périphériques mappés}).
9207 @end itemize
9208
9209 Une fois que vous avez fini les préparatifs sur le fichier de configuration,
9210 le nouveau système peut être initialisé (rappelez-vous que le système de
9211 fichiers racine cible est dans @file{/mnt}) :
9212
9213 @example
9214 guix system init /mnt/etc/config.scm /mnt
9215 @end example
9216
9217 @noindent
9218 Cela copie tous les fichiers nécessaires et installe GRUB sur
9219 @file{/dev/sdX} à moins que vous ne passiez l'option
9220 @option{--no-bootloader}. Pour plus d'informations, @pxref{Invoquer guix system}. Cette commande peut engendrer des téléchargements ou des
9221 constructions pour les paquets manquants, ce qui peut prendre du temps.
9222
9223 Une fois que cette commande a terminée — et on l'espère réussi ! — vous
9224 pouvez lancer @command{reboot} et démarrer sur votre nouveau système. Le
9225 mot de passe @code{root} est d'abord vide ; les mots de passe des autres
9226 utilisateurs doivent être initialisés avec la commande @command{passwd} en
9227 tant que @code{root}, à mois que votre configuration ne spécifie autre chose
9228 (@pxref{user-account-password, mot de passe des comptes utilisateurs}).
9229
9230 @cindex mettre à jour GuixSD
9231 À partir de maintenant, vous pouvez mettre à jour GuixSD lorsque vous le
9232 souhaitez en lançant @command{guix pull} en tant que @code{root}
9233 (@pxref{Invoquer guix pull}), puis en lançant @command{guix system
9234 reconfigure} pour construire une nouvelle génération du système avec les
9235 derniers paquets et les derniers services (@pxref{Invoquer guix system}).
9236 Nous vous recommandons de le faire régulièrement pour que votre système
9237 inclus les dernières mises à jour de sécurité (@pxref{Mises à jour de sécurité}).
9238
9239 Rejoignez-nous sur @code{#guix} sur le réseau IRC Freenode ou sur
9240 @file{guix-devel@@gnu.org} pour partager votre expérience — bonne ou
9241 mauvaise.
9242
9243 @node Installer GuixSD dans une VM
9244 @subsection Installer GuixSD sur une machine virtuelle
9245
9246 @cindex machine virtuelle, installation de GuixSD
9247 @cindex serveur privé virtuel (VPS)
9248 @cindex VPS (serveur privé virtuel)
9249 Si vous souhaitez installer GuixSD sur une machine virtuelle (VM) ou un
9250 serveur privé virtuel (VPS) plutôt que sur votre machine chérie, cette
9251 section est faite pour vous.
9252
9253 Pour démarrer une VM @uref{http://qemu.org/,QEMU} pour installer GuixSD sur
9254 une image disque, suivez ces étapes :
9255
9256 @enumerate
9257 @item
9258 Tout d'abord récupérez et décompressez l'image d'installation de GuixSD
9259 comme décrit précédemment (@pxref{Installation depuis une clef USB ou un DVD}).
9260
9261 @item
9262 Créez une image disque qui contiendra le système installé. Pour créer une
9263 image qcow2, utilise la commande @command{qemu-img} :
9264
9265 @example
9266 qemu-img create -f qcow2 guixsd.img 50G
9267 @end example
9268
9269 Le fichier qui en résulte sera bien plus petit que les 50 Go (habituellement
9270 moins de 1 Mo) mais il grossira au fur et à mesure que le stockage virtuel
9271 grossira.
9272
9273 @item
9274 Démarrez l'image d'installation USB dans une VM :
9275
9276 @example
9277 qemu-system-x86_64 -m 1024 -smp 1 \
9278 -net user -net nic,model=virtio -boot menu=on \
9279 -drive file=guixsd-install-@value{VERSION}.@var{system}.iso \
9280 -drive file=guixsd.img
9281 @end example
9282
9283 L'ordre des périphérique est important
9284
9285 Dans la console de la VM, appuyez rapidement sur @kbd{F12} pour entrer dans
9286 le menu de démarrage. Ensuite appuyez sur @kbd{2} et la touche @kbd{Entrée}
9287 pour valider votre choix.
9288
9289 @item
9290 Vous êtes maintenant root dans la VM, continuez en suivant la procédure
9291 d'installation. @xref{Préparer l'installation}, et suivez les
9292 instructions.
9293 @end enumerate
9294
9295 Une fois l'installation terminée, vous pouvez démarrer le système dans votre
9296 image @file{guixsd.img}. @xref{Lancer GuixSD dans une VM}, pour une manière de
9297 faire.
9298
9299 @node Construire l'image d'installation
9300 @subsection Construire l'image d'installation
9301
9302 @cindex image d'installation
9303 L'image d'installation décrite plus haut a été construite avec la commande
9304 @command{guix system}, plus précisément :
9305
9306 @example
9307 guix system disk-image gnu/system/install.scm
9308 @end example
9309
9310 Regardez le fichier @file{gnu/system/install.scm} dans l'arborescence des
9311 sources et regardez aussi @ref{Invoquer guix system} pour plus
9312 d'informations sur l'image d'installation.
9313
9314 @subsection Construire l'image d'installation pour les cartes ARM
9315
9316 De nombreuses cartes ARM requièrent une variante spécifique du chargeur
9317 d'amorçage @uref{http://www.denx.de/wiki/U-Boot/, U-Boot}.
9318
9319 Si vous construisez une image disque et que le chargeur d'amorçage n'est pas
9320 disponible autrement (sur un autre périphérique d'amorçage etc), il est
9321 recommandé de construire une image qui inclus le chargeur d'amorçage, plus
9322 précisément :
9323
9324 @example
9325 guix system disk-image --system=armhf-linux -e '((@@ (gnu system install) os-with-u-boot) (@@ (gnu system install) installation-os) "A20-OLinuXino-Lime2")'
9326 @end example
9327
9328 @code{A20-OLinuXino-Lime2} est le nom de la carte. Si vous spécifiez une
9329 carte invalide, une liste de cartes possibles sera affichée.
9330
9331 @node Configuration système
9332 @section Configuration système
9333
9334 @cindex configuration du système
9335 La distribution système Guix utilise un mécanisme de configuration du
9336 système cohérent. On veut dire par là que tous les aspects de la
9337 configuration globale du système — comme la disponibilité des services
9338 système, des fuseaux horaires, des paramètres linguistiques, des comptes
9339 utilisateurs — sont déclarés à un seul endroit. Une telle
9340 @dfn{configuration système} peut être @dfn{instanciée}, c'est-à-dire entrer
9341 en vigueur.
9342
9343 @c Yes, we're talking of Puppet, Chef, & co. here. ↑
9344 L'un des avantages de placer toute la configuration du système sous le
9345 contrôle de Guix est de permettre les mises à jour transactionnelles du
9346 système ce qui rend possible le fait de revenir en arrière à une
9347 instanciation précédent du système, si quelque chose se passait mal avec le
9348 nouveau (@pxref{Fonctionnalités}). Un autre avantage est de rendre facile la
9349 réplication de la même configuration sur plusieurs machines différentes ou à
9350 différents moments dans le temps, sans avoir à recourir à des outils
9351 d'administrations supplémentaires au-dessus des outils du système.
9352
9353 Cette section décrit ce mécanisme. Tout d'abord nous nous concentrons sur
9354 le point de vue de l'administrateur système en expliquant comment le système
9355 est configuré et instancié. Ensuite nous montrons comment ce mécanisme peut
9356 être étendu, par exemple pour supporter de nouveaux services systèmes.
9357
9358 @menu
9359 * Utiliser le système de configuration:: Personnaliser votre système
9360 GNU@.
9361 * Référence de système d'exploitation:: Détail sur la déclaration de
9362 système d'exploitation.
9363 * Systèmes de fichiers:: Configurer les montages de systèmes de
9364 fichiers.
9365 * Périphériques mappés:: Gestion des périphériques de bloc.
9366 * Comptes utilisateurs:: Spécifier des comptes utilisateurs.
9367 * Régionalisation:: Paramétrer la langue et les conventions
9368 culturelles.
9369 * Services:: Spécifier les services du système.
9370 * Programmes setuid:: Programmes tournant avec les privilèges root.
9371 * Certificats X.509:: Authentifier les serveurs HTTPS@.
9372 * Name Service Switch:: Configurer le « name service switch » de la
9373 libc.
9374 * Disque de RAM initial:: Démarrage de Linux-Libre.
9375 * Configuration du chargeur d'amorçage:: Configurer le chargeur
9376 d'amorçage.
9377 * Invoquer guix system:: Instantier une configuration du système.
9378 * Lancer GuixSD dans une VM:: Comment lancer GuixSD dans une machine
9379 virtuelle.
9380 * Définir des services:: Ajouter de nouvelles définitions de services.
9381 @end menu
9382
9383 @node Utiliser le système de configuration
9384 @subsection Utiliser le système de configuration
9385
9386 Le système d'exploitation est configuré en fournissant une déclaration
9387 @code{operating-system} dans un fichier qui peut être passé à la command
9388 @command{guix system} (@pxref{Invoquer guix system}). Une configuration
9389 simple, avec les services systèmes par défaut, le noyau Linux-Libre par
9390 défaut, un disque de RAM initial et un chargeur d'amorçage ressemble à ceci
9391 :
9392
9393 @findex operating-system
9394 @lisp
9395 @include os-config-bare-bones.texi
9396 @end lisp
9397
9398 Cet exemple devrait se comprendre de lui-même. Certains champs définis
9399 ci-dessus, comme @code{host-name} et @code{bootloader} sont obligatoires.
9400 D'autres comme @code{packages} et @code{services} peuvent être omis auquel
9401 cas ils ont une valeur par défaut.
9402
9403 Ci-dessous nous discutons des effets de certains des champs les plus
9404 importants (@pxref{Référence de système d'exploitation}, pour des détails sur tous
9405 les champs disponibles) et comment @dfn{instancier} le système
9406 d'exploitation avec @command{guix system}.
9407
9408 @unnumberedsubsubsec Bootloader
9409
9410 @cindex legacy boot, on Intel machines
9411 @cindex BIOS boot, on Intel machines
9412 @cindex UEFI boot
9413 @cindex EFI boot
9414 The @code{bootloader} field describes the method that will be used to boot
9415 your system. Machines based on Intel processors can boot in ``legacy'' BIOS
9416 mode, as in the example above. However, more recent machines rely instead
9417 on the @dfn{Unified Extensible Firmware Interface} (UEFI) to boot. In that
9418 case, the @code{bootloader} field should contain something along these
9419 lines:
9420
9421 @example
9422 (bootloader-configuration
9423 (bootloader grub-efi-bootloader)
9424 (target "/boot/efi"))
9425 @end example
9426
9427 @xref{Configuration du chargeur d'amorçage}, for more information on the available
9428 configuration options.
9429
9430 @unnumberedsubsubsec Paquets visibles sur tout le système
9431
9432 @vindex %base-packages
9433 Le champ @code{packages} liste les paquets qui seront visibles sur tout le
9434 système, pour tous les comptes utilisateurs — c.-à-d.@: dans la variable
9435 d'environnement @code{PATH} de tous les utilisateurs — en plus des paquets
9436 par profil (@pxref{Invoquer guix package}). La variable
9437 @var{%base-packages} fournit tous les outils qu'on pourrait attendre pour
9438 les taches de base de l'administrateur et de l'utilisateur — dont les GNU
9439 Core Utilities, les GNU Networking Utilities, l'éditeur de texte léger GNU
9440 Zile, @command{find}, @command{grep}, etc. L'exemple au-dessus ajout
9441 GNU@tie{}Screen et OpenSSH à ces paquets, récupérés depuis les modules
9442 @code{(gnu packages screen)} et @code{(gnu packages ssh)} (@pxref{Modules de paquets}). La syntaxe @code{(list paquet sortie)} peut être utilisée pour
9443 ajouter une sortie spécifique d'un paquet :
9444
9445 @lisp
9446 (use-modules (gnu packages))
9447 (use-modules (gnu packages dns))
9448
9449 (operating-system
9450 ;; ...
9451 (packages (cons (list bind "utils")
9452 %base-packages)))
9453 @end lisp
9454
9455 @findex specification->package
9456 Se référer aux paquets par le nom de leur variable, comme @code{bind}
9457 ci-dessus, a l'avantage d'être sans ambiguïté ; cela permet aussi de se
9458 rendre rapidement compte de coquilles quand on a des « variables non liées
9459 ». L'inconvénient est qu'on a besoin de savoir dans quel module est défini
9460 le paquet, et de modifier la ligne @code{use-package-modules} en
9461 conséquence. Pour éviter cela, on peut utiliser la procédure
9462 @code{specification->package} du module @code{(gnu packages)}, qui renvoie
9463 le meilleur paquet pour un nom donné ou un nom et une version :
9464
9465 @lisp
9466 (use-modules (gnu packages))
9467
9468 (operating-system
9469 ;; ...
9470 (packages (append (map specification->package
9471 '("tcpdump" "htop" "gnupg@@2.0"))
9472 %base-packages)))
9473 @end lisp
9474
9475 @unnumberedsubsubsec Services systèmes
9476
9477 @cindex services
9478 @vindex %base-services
9479 Le champ @code{services} liste les @dfn{services système} à rendre
9480 disponible lorsque le système démarre (@pxref{Services}). La déclaration
9481 @code{operating-system} au-dessus spécifie que, en plus des services de
9482 base, on veut que le démon ssh @command{lshd} écoute sur le port 2222
9483 (@pxref{Services réseau, @code{lsh-service}}). Sous le capot,
9484 @code{lsh-service} s'arrange pour que @code{lshd} soit lancé avec les bonnes
9485 options de la ligne de commande, éventuellement en générant des fichiers de
9486 configuration (@pxref{Définir des services}).
9487
9488 @cindex personnalisation des services
9489 @findex modify-services
9490 Parfois, plutôt que d'utiliser les services de base tels-quels, on peut
9491 vouloir les personnaliser. Pour cela, utilisez @code{modify-services}
9492 (@pxref{Référence de service, @code{modify-services}}) pour modifier la liste.
9493
9494 Par exemple, supposons que vous souhaitiez modifier @code{guix-daemon} et
9495 Mingetty (l'écran de connexion en console) dans la liste
9496 @var{%base-services} (@pxref{Services de base, @code{%base-services}}). Pour
9497 cela, vous pouvez écrire ce qui suit dans votre déclaration de système
9498 d'exploitation :
9499
9500 @lisp
9501 (define %my-services
9502 ;; Ma propre liste de services.
9503 (modify-services %base-services
9504 (guix-service-type config =>
9505 (guix-configuration
9506 (inherit config)
9507 (use-substitutes? #f)
9508 (extra-options '("--gc-keep-derivations"))))
9509 (mingetty-service-type config =>
9510 (mingetty-configuration
9511 (inherit config)))))
9512 (operating-system
9513 ;; @dots{}
9514 (services %my-services))
9515 @end lisp
9516
9517 Cela modifie la configuration — c.-à-d.@: les paramètres du service — de
9518 l'instance de @code{guix-service-type}, et de toutes les instances de
9519 @code{mingetty-service-type} dans la liste @var{%base-services}. Remarquez
9520 comment on fait cela : d'abord, on s'arrange pour que la configuration de
9521 départ soit liée à l'identifiant @code{config} dans @var{body} puis on écrit
9522 @var{body} pour qu'il s'évalue en la configuration désirée. En particulier,
9523 remarquez comment on utilise @code{inherit} pour créer une nouvelle
9524 configuration qui a les même valeurs que l'ancienne configuration, avec
9525 seulement quelques modifications.
9526
9527 @cindex chiffrement du disque
9528 La configuration pour une utilisation de « bureau » typique, avec une
9529 partition racine chiffrée, le serveur d'affichage X11, GNOME et Xfce (les
9530 utilisateurs peuvent choisir l'environnement de bureau sur l'écran de
9531 connexion en appuyant sur @kbd{F1}), la gestion du réseau, la gestion de
9532 l'énergie, et bien plus, ressemblerait à ceci :
9533
9534 @lisp
9535 @include os-config-desktop.texi
9536 @end lisp
9537
9538 A graphical system with a choice of lightweight window managers instead of
9539 full-blown desktop environments would look like this:
9540
9541 @lisp
9542 @include os-config-lightweight-desktop.texi
9543 @end lisp
9544
9545 Cet exemple se réfère au système de fichier @file{/boot/efi} par son UUID,
9546 @code{1234-ABCD}. Remplacez cet UUID par le bon UUID de votre système,
9547 renvoyé par la commande @command{blkid}.
9548
9549 @xref{Services de bureaux}, pour la liste exacte des services fournis par
9550 @var{%desktop-services}. @xref{Certificats X.509}, pour des informations
9551 sur le paquet @code{nss-certs} utilisé ici.
9552
9553 Encore une fois, @var{%desktop-services} n'est qu'une liste d'objets
9554 service. Si vous voulez en supprimer des services, vous pouvez le faire
9555 avec des procédures pour les listes (@pxref{SRFI-1 Filtering and
9556 Partitioning,,, guile, GNU Guile Reference Manual}). Par exemple,
9557 l'expression suivante renvoie une liste qui contient tous les services dans
9558 @var{%desktop-services} sauf le service Avahi :
9559
9560 @example
9561 (remove (lambda (service)
9562 (eq? (service-kind service) avahi-service-type))
9563 %desktop-services)
9564 @end example
9565
9566 @unnumberedsubsubsec Instancier le système
9567
9568 En supposant que la déclaration @code{operating-system} est stockée dans le
9569 fichier @file{my-system-config.scm}, la commande @command{guix system
9570 reconfigure my-system-config.scm} instancie cette configuration et en fait
9571 l'entrée par défaut dans GRUB (@pxref{Invoquer guix system}).
9572
9573 Pour changer la configuration du système, on met normalement à jour ce
9574 fichier et on relance @command{guix system reconfigure}. On ne devrait
9575 jamais avoir à modifier de fichiers dans @file{/etc} ou à lancer des
9576 commandes qui modifient l'état du système comme @command{useradd} ou
9577 @command{grub-install}. En fait, vous devez les éviter parce que non
9578 seulement ça annulerait vos garanties, mais ça empêcherait aussi de revenir
9579 à des versions précédents du système, si vous en avez besoin.
9580
9581 @cindex revenir en arrière dans la configuration du système
9582 En parlant de revenir en arrière, à chaque fois que vous lancez
9583 @command{guix system reconfigure}, une nouvelle @dfn{génération} du système
9584 est crée — sans modifier ou supprimer les générations précédentes. Les
9585 anciennes générations du système ont une entrée dans le menu du chargeur
9586 d'amorçage, ce qui vous permet de démarrer dessus au cas où quelque chose se
9587 serait mal passé avec la dernière génération. C'est rassurant, non ? La
9588 commande @command{guix system list-generations} liste les générations du
9589 système disponibles sur le disque. Il est possible de revenir à une
9590 ancienne génération via les commandes @command{guix system roll-back} et
9591 @command{guix system switch-generation}.
9592
9593 Although the @command{guix system reconfigure} command will not modify
9594 previous generations, you must take care when the current generation is not
9595 the latest (e.g., after invoking @command{guix system roll-back}), since the
9596 operation might overwrite a later generation (@pxref{Invoquer guix system}).
9597
9598 @unnumberedsubsubsec L'interface de programmation
9599
9600 Au niveau Scheme, la grosse déclaration @code{operating-system} est
9601 instanciée avec la procédure monadique suivante (@pxref{La monad du dépôt}) :
9602
9603 @deffn {Procédure Monadique} operating-system-derivation os
9604 Renvoie une dérivation qui construit @var{os}, un objet
9605 @code{operating-system} (@pxref{Dérivations}).
9606
9607 La sortie de la dérivation est un répertoire qui se réfère à tous les
9608 paquets et d'autres fichiers supports requis pour instancier @var{os}.
9609 @end deffn
9610
9611 Cette procédure est fournie par le module @code{(gnu system)}. Avec
9612 @code{(gnu srevices)} (@pxref{Services}), ce module contient les entrailles
9613 de GuixSD. Ouvrez-le un jour !
9614
9615
9616 @node Référence de système d'exploitation
9617 @subsection Référence de @code{operating-system}
9618
9619 Cette section résume toutes les options disponibles dans les déclarations
9620 @code{operating-system} (@pxref{Utiliser le système de configuration}).
9621
9622 @deftp {Type de données} operating-system
9623 C'est le type de données représentant une configuration d'un système
9624 d'exploitation. On veut dire par là toute la configuration globale du
9625 système, mais pas la configuration par utilisateur (@pxref{Utiliser le système de configuration}).
9626
9627 @table @asis
9628 @item @code{kernel} (par défaut : @var{linux-libre})
9629 L'objet paquet d'un noyau de système d'exploitation à
9630 utiliser@footnote{Actuellement seul le noyau Linux-libre est supporté. Dans
9631 le futur, il sera possible d'utiliser GNU@tie{}Hurd.}.
9632
9633 @item @code{kernel-arguments} (par défaut : @code{'()})
9634 Liste de chaînes ou de gexps représentant des arguments supplémentaires à
9635 passer sur la ligne de commande du noyau — p.@: ex.@:
9636 @code{("console=ttyS0")}.
9637
9638 @item @code{bootloader}
9639 L'objet de configuration du chargeur d'amorçage. @xref{Configuration du chargeur d'amorçage}.
9640
9641 @item @code{initrd-modules} (par défaut : @code{%base-initrd-modules})
9642 @cindex initrd
9643 @cindex disque de RAM initial
9644 La liste des modules du noyau linux requis dans l'image disque de RAM
9645 initiale. @xref{Disque de RAM initial}.
9646
9647 @item @code{initrd} (par défaut : @code{base-initrd})
9648 Une procédure monadique qui renvoie un disque de RAM initial pour le noyau
9649 Linux. Ce champ est fournit pour pouvoir personnaliser son système à
9650 bas-niveau et n'est que rarement utile dans le cas général. @xref{Disque de RAM initial}.
9651
9652 @item @code{firmware} (par défaut : @var{%base-firmware})
9653 @cindex firmware
9654 Liste les paquets de microgiciels chargeables pour le noyau de système
9655 d'exploitation.
9656
9657 La valeur par défaut contient les microgiciels requis pour les périphériques
9658 WiFi Atheros et Broadcom (modules @code{ath9k} et @code{b43-open} de
9659 Linux-libre, respectivement). @xref{Considérations matérielles}, pour plus
9660 d'info sur les périphériques supportés.
9661
9662 @item @code{host-name}
9663 Le nom d'hôte.
9664
9665 @item @code{hosts-file}
9666 @cindex fichier hosts
9667 Un objet simili-fichier (@pxref{G-Expressions, file-like objects}) à
9668 utiliser comme @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C
9669 Library Reference Manual}). La valeur par défaut est un fichier avec des
9670 entrées pour @code{localhost} et @var{host-name}.
9671
9672 @item @code{mapped-devices} (par défaut : @code{'()})
9673 Une liste de périphériques mappés. @xref{Périphériques mappés}.
9674
9675 @item @code{file-systems}
9676 Une liste de systèmes de fichiers. @xref{Systèmes de fichiers}.
9677
9678 @item @code{swap-devices} (par défaut : @code{'()})
9679 @cindex espaces d'échange
9680 Une liste de chaînes identifiant les périphériques ou les fichiers utilisé
9681 pour « l'espace d'échange » (@pxref{Memory Concepts,,, libc, The GNU C
9682 Library Reference Manual}). Par exemple, @code{'("/dev/sda3")} ou
9683 @code{'("/swapfile")}. Il est possible de spécifier un fichier d'échange
9684 sur un périphérique mappé, tant que le périphérique nécessaire et le système
9685 de fichiers sont aussi spécifiés. @xref{Périphériques mappés} et @ref{Systèmes de fichiers}.
9686
9687 @item @code{users} (par défaut : @code{%base-user-accounts})
9688 @itemx @code{groups} (par défaut : @var{%base-groups})
9689 Liste les comptes utilisateurs et les groupes. @xref{Comptes utilisateurs}.
9690
9691 Si la liste @code{users} n'a pas de compte lié à l'UID@tie{}0, un compte «
9692 root » avec l'UID@tie{}0 est automatiquement ajouté.
9693
9694 @item @code{skeletons} (par défaut : @code{(default-skeletons)})
9695 Une liste de couples composés d'un nom de fichier cible et d'un objet
9696 simili-fichier (@pxref{G-Expressions, file-like objects}). Ce sont les
9697 fichiers squelettes qui seront ajoutés au répertoire personnel des comptes
9698 utilisateurs nouvellement créés.
9699
9700 Par exemple, un valeur valide ressemblerait à cela :
9701
9702 @example
9703 `((".bashrc" ,(plain-file "bashrc" "echo Hello\n"))
9704 (".guile" ,(plain-file "guile"
9705 "(use-modules (ice-9 readline))
9706 (activate-readline)")))
9707 @end example
9708
9709 @item @code{issue} (par défaut : @var{%default-issue})
9710 Une chaîne qui dénote le contenu du fichier @file{/etc/issue} qui est
9711 affiché lorsqu'un utilisateur se connecte sur la console.
9712
9713 @item @code{packages} (par défaut : @var{%base-packages})
9714 L'ensemble des paquets installés dans le profil global, qui est accessible à
9715 partir de @file{/run/current-system/profile}.
9716
9717 L'ensemble par défaut contient les utilitaires de base et c'est une bonne
9718 pratique d'installer les utilitaires non essentiels dans les profils
9719 utilisateurs (@pxref{Invoquer guix package}).
9720
9721 @item @code{timezone}
9722 Une chaîne identifiant un fuseau horaire — p.@: ex.@: @code{"Europe/Paris"}.
9723
9724 Vous pouvez lancer la commande @command{tzselect} pour trouver le fuseau
9725 horaire correspondant à votre région. Si vous choisissez un nom de fuseau
9726 horaire invalide, @command{guix system} échouera.
9727
9728 @item @code{locale} (par défaut : @code{"en_US.utf8"})
9729 Le nom du paramètre régional par défaut (@pxref{Locale Names,,, libc, The
9730 GNU C Library Reference Manual}). @xref{Régionalisation}, pour plus d'informations.
9731
9732 @item @code{locale-definitions} (par défaut : @var{%default-locale-definitions})
9733 La liste des définitions de locales à compiler et qui devraient être
9734 utilisées à l'exécution. @xref{Régionalisation}.
9735
9736 @item @code{locale-libcs} (par défaut : @code{(list @var{glibc})})
9737 La liste des paquets GNU@tie{}libc dont les données des paramètres
9738 linguistiques sont utilisées pour construire les définitions des paramètres
9739 linguistiques. @xref{Régionalisation}, pour des considérations sur la compatibilité
9740 qui justifient cette option.
9741
9742 @item @code{name-service-switch} (par défaut : @var{%default-nss})
9743 La configuration de NSS de la libc (name service switch) — un objet
9744 @code{<name-service-switch>}. @xref{Name Service Switch}, pour des détails.
9745
9746 @item @code{services} (par défaut : @var{%base-services})
9747 Une liste d'objets services qui dénotent les services du système.
9748 @xref{Services}.
9749
9750 @item @code{pam-services} (par défaut : @code{(base-pam-services)})
9751 @cindex PAM
9752 @cindex pluggable authentication modules
9753 @c FIXME: Add xref to PAM services section.
9754 Services PAM (@dfn{pluggable authentication module}) Linux.
9755
9756 @item @code{setuid-programs} (par défaut : @var{%setuid-programs})
9757 Liste de G-expressions qui s'évaluent en chaînes de caractères qui dénotent
9758 les programmes setuid. @xref{Programmes setuid}.
9759
9760 @item @code{sudoers-file} (par défaut : @var{%sudoers-specification})
9761 @cindex fichier sudoers
9762 Le contenu du fichier @file{/etc/sudoers} comme un objet simili-fichier
9763 (@pxref{G-Expressions, @code{local-file} et @code{plain-file}}).
9764
9765 Ce fichier spécifier quels utilisateurs peuvent utiliser la commande
9766 @command{sudo}, ce qu'ils ont le droit de faire, et quels privilèges ils
9767 peuvent gagner. La valeur par défaut est que seul @code{root} et les
9768 membres du groupe @code{wheel} peuvent utiliser @code{sudo}.
9769
9770 @end table
9771 @end deftp
9772
9773 @node Systèmes de fichiers
9774 @subsection Systèmes de fichiers
9775
9776 La liste des systèmes de fichiers à monter est spécifiée dans le champ
9777 @code{file-systems} de la déclaration de système d'exploitation
9778 (@pxref{Utiliser le système de configuration}). Chaque système de fichier est
9779 déclaré avec la forme @code{file-system}, comme ceci :
9780
9781 @example
9782 (file-system
9783 (mount-point "/home")
9784 (device "/dev/sda3")
9785 (type "ext4"))
9786 @end example
9787
9788 Comme d'habitude, certains de ces champs sont obligatoire — comme le montre
9789 l'exemple au-dessus — alors que d'autres peuvent être omis. Ils sont
9790 décrits plus bas.
9791
9792 @deftp {Type de données} file-system
9793 Les objets de ce type représentent des systèmes de fichiers à monter. Ils
9794 contiennent les membres suivants :
9795
9796 @table @asis
9797 @item @code{type}
9798 C'est une chaîne de caractères spécifiant le type du système de fichier —
9799 p.@: ex.@: @code{"ext4"}.
9800
9801 @item @code{mount-point}
9802 Désigne l'emplacement où le système de fichier sera monté.
9803
9804 @item @code{device}
9805 Ce champ nomme le système de fichier « source ». il peut être l'une de ces
9806 trois choses : une étiquette de système de fichiers, un UUID de système de
9807 fichier ou le nom d'un nœud dans @file{/dev}. Les étiquettes et les UUID
9808 offrent une manière de se référer à des systèmes de fichiers sans avoir à
9809 coder en dur le nom de périphérique@footnote{Remarquez que, s'il est tentant
9810 d'utiliser @file{/dev/disk/by-uuid} et autres chemins similaires pour
9811 obtenir le même résultat, ce n'est pas recommandé : ces nœuds de
9812 périphériques spéciaux sont créés par le démon udev et peuvent ne pas être
9813 disponibles au moment de monter le périphérique.}.
9814
9815 @findex file-system-label
9816 Les étiquettes de systèmes de fichiers sont crées avec la procédure
9817 @code{file-system-label}, les UUID avec @code{uuid} et les nœuds de
9818 @file{/dev} sont de simples chaînes de caractères. Voici un exemple d'un
9819 système de fichiers référencé par son étiquette, donnée par la commande
9820 @command{e2label} :
9821
9822 @example
9823 (file-system
9824 (mount-point "/home")
9825 (type "ext4")
9826 (device (file-system-label "my-home")))
9827 @end example
9828
9829 @findex uuid
9830 Les UUID sont convertis à partir de leur représentation en chaîne de
9831 caractères (montrée par la command @command{tune2fs -l}) en utilisant la
9832 forme @code{uuid}@footnote{La forme @code{uuid} s'attend à des UUID sur 16
9833 octets définis dans la @uref{https://tools.ietf.org/html/rfc4122,
9834 RFC@tie{}4122}. C'est la forme des UUID utilisées par la famille de
9835 systèmes de fichiers ext2 et d'autres, mais ce n'est pas le même type d'UUID
9836 que ceux qui se trouvent sur les systèmes de fichiers FAT par exemple},
9837 comme ceci :
9838
9839 @example
9840 (file-system
9841 (mount-point "/home")
9842 (type "ext4")
9843 (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
9844 @end example
9845
9846 Lorsque la source d'un système de fichiers est un périphérique mappé
9847 (@pxref{Périphériques mappés}), sont champ @code{device} @emph{doit} se référer au
9848 nom du périphérique mappé — p.@: ex.@: @file{"/dev/mapper/root-partition"}.
9849 Cela est requis pour que le système sache que monter ce système de fichier
9850 dépend de la présence du périphérique mappé correspondant.
9851
9852 @item @code{flags} (par défaut : @code{'()})
9853 C'est une liste de symboles qui dénotent des drapeaux de montage. Les
9854 drapeaux reconnus sont @code{read-only}, @code{bind-mount}, @code{no-dev}
9855 (interdit l'accès aux fichiers spéciaux), @code{no-suid} (ignore les bits
9856 setuid et setgid) et @code{no-exec} (interdit l'exécution de programmes).
9857
9858 @item @code{options} (par défaut : @code{#f})
9859 C'est soit @code{#f} soit une chaîne de caractères dénotant des options de
9860 montage.
9861
9862 @item @code{mount?} (par défaut : @code{#t})
9863 Cette valeur indique s'il faut monter automatiquement le système de fichier
9864 au démarrage du système. Lorsque la valeur est @code{#f}, le système de
9865 fichier reçoit une entrée dans @file{/etc/fstab} (lue par la commande
9866 @command{mount}) mais n'est pas monté automatiquement.
9867
9868 @item @code{needed-for-boot?} (par défaut : @code{#f})
9869 Cette valeur booléenne indique si le système de fichier est nécessaire au
9870 démarrage. Si c'est vrai alors le système de fichier est monté au
9871 chargement du disque de RAM initial. C'est toujours le cas par exemple du
9872 système de fichiers racine.
9873
9874 @item @code{check?} (par défaut : @code{#t})
9875 Cette valeur booléenne indique si le système de fichier doit être vérifié
9876 avant de le monter.
9877
9878 @item @code{create-mount-point?} (par défaut : @code{#f})
9879 Lorsque cette valeur est vraie, le point de montage est créé s'il n'existe
9880 pas déjà.
9881
9882 @item @code{dependencies} (par défaut : @code{'()})
9883 C'est une liste d'objets @code{<file-system>} ou @code{<mapped-device>} qui
9884 représentent les systèmes de fichiers qui doivent être montés ou les
9885 périphériques mappés qui doivent être ouverts avant (et monté ou fermés
9886 après) celui-ci.
9887
9888 Par exemple, considérons une hiérarchie de montage : @file{/sys/fs/cgroup}
9889 est une dépendance de @file{/sys/fs/cgroup/cpu} et
9890 @file{/sys/fs/cgroup/memory}.
9891
9892 Un autre exemple est un système de fichier qui dépend d'un périphérique
9893 mappé, par exemple pour une partition chiffrée (@pxref{Périphériques mappés}).
9894 @end table
9895 @end deftp
9896
9897 Le module @code{(gnu system file-systems)} exporte les variables utiles
9898 suivantes.
9899
9900 @defvr {Variable Scheme} %base-file-systems
9901 Ce sont les systèmes de fichiers essentiels qui sont requis sur les systèmes
9902 normaux, comme @var{%pseudo-terminal-file-system} et @var{%immutable-store}
9903 (voir plus bas). Les déclarations de systèmes d'exploitation devraient au
9904 moins les contenir.
9905 @end defvr
9906
9907 @defvr {Variable Scheme} %pseudo-terminal-file-system
9908 C'est le système de fichier monté sur @file{/dev/pts}. Il supporte les
9909 @dfn{pseudo-terminaux} créés via @code{openpty} et les fonctions similaires
9910 (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference Manual}). Les
9911 pseudo-terminaux sont utilisés par les émulateurs de terminaux comme
9912 @command{xterm}.
9913 @end defvr
9914
9915 @defvr {Variable Scheme} %shared-memory-file-system
9916 Ce système de fichier est monté dans @file{/dev/shm} et est utilisé pour le
9917 partage de mémoire entre processus (@pxref{Memory-mapped I/O,
9918 @code{shm_open},, libc, The GNU C Library Reference Manual}).
9919 @end defvr
9920
9921 @defvr {Variable Scheme} %immutable-store
9922 Ce système de fichiers effectue un « montage lié » en lecture-seule de
9923 @file{/gnu/store}, ce qui en fait un répertoire en lecture-seule pour tous
9924 les utilisateurs dont @code{root}. Cela évite que des logiciels qui
9925 tournent en @code{root} ou des administrateurs systèmes ne modifient
9926 accidentellement le dépôt.
9927
9928 Le démon lui-même est toujours capable d'écrire dans le dépôt : il est
9929 remonté en lecture-écriture dans son propre « espace de nom ».
9930 @end defvr
9931
9932 @defvr {Variable Scheme} %binary-format-file-system
9933 Le système de fichiers @code{binfmt_misc}, qui permet de gérer n'importe
9934 quel type de fichiers exécutables à déléguer en espace utilisateur. Cela
9935 demande que le module du noyau @code{binfmt.ko} soit chargé.
9936 @end defvr
9937
9938 @defvr {Variable Scheme} %fuse-control-file-system
9939 Le système de fichiers @code{fusectl}, qui permet à des utilisateurs non
9940 privilégiés de monter et de démonter des systèmes de fichiers FUSE en espace
9941 utilisateur. Cela requiert que le module du noyau @code{fuse.ko} soit
9942 chargé.
9943 @end defvr
9944
9945 @node Périphériques mappés
9946 @subsection Périphériques mappés
9947
9948 @cindex mappage de périphériques
9949 @cindex périphériques mappés
9950 Le noyau Linux a une notion de @dfn{mappage de périphériques} : un
9951 périphérique bloc, comme une partition sur un disque dur, peut être
9952 @dfn{mappé} sur un autre périphérique, typiquement dans @code{/dev/mapper},
9953 avec des calculs supplémentaires sur les données qui naviguent entre les
9954 deux@footnote{Remarquez que le Hurd ne fait pas de différence entre le
9955 concept de « périphérique mappé » et celle d'un système de fichiers : les
9956 deux correspondent à la @emph{traduction} des opérations d'entrée-sortie
9957 faites sur un fichier en des opérations sur ce qui le contient. Ainsi, le
9958 Hurd implémente les périphériques mappés, comme les systèmes de fichiers,
9959 avec le mécanisme des @dfn{traducteurs} générique (@pxref{Translators,,,
9960 hurd, The GNU Hurd Reference Manual}).}. Un exemple typique est le mappage
9961 de périphériques chiffrés : toutes les écritures sont sur le périphérique
9962 mappé sont chiffrées, toutes les lectures déchiffrées, de manière
9963 transparente. Guix étend cette notion en considérant que tout périphérique
9964 ou ensemble de périphériques qui sont @dfn{transformés} d'une certaine
9965 manière créent un nouveau périphérique ; par exemple, les périphériques RAID
9966 sont obtenus en @dfn{assemblant} plusieurs autres périphériques, comme des
9967 disque ou des partitions, en un nouveau périphérique en tant qu'unique
9968 partition. Un autre exemple, qui n'est pas encore disponible, sont les
9969 volumes logiques LVM.
9970
9971 Les périphériques mappés sont déclarés avec la forme @code{mapped-device},
9972 définie comme suit ; par exemple, voir ci-dessous.
9973
9974 @deftp {Type de données} mapped-device
9975 Les objets de ce type représentent des mappages de périphériques qui seront
9976 effectués au démarrage du système.
9977
9978 @table @code
9979 @item source
9980 C'est soit une chaîne qui spécifie le nom d'un périphérique bloc à mapper,
9981 comme @code{"/dev/sda3"}, soit une liste de plusieurs périphériques à
9982 assembler pour en créer un nouveau.
9983
9984 @item target
9985 Cette chaîne spécifie le nom du périphérique mappé qui en résulte. Pour les
9986 mappeurs noyaux comme les périphériques chiffrés de type
9987 @code{luks-device-mapping}, spécifier @code{"ma-partition"} crée le
9988 périphérique @code{"/dev/mapper/ma-partition"}. Pour les périphériques RAID
9989 de type @code{raid-device-mapping}, il faut donner le nom complet comme
9990 @code{"/dev/md0"}.
9991
9992 @item type
9993 Ce doit être un objets @code{mapped-device-kind}, qui spécifie comment
9994 @var{source} est mappés sur @var{target}.
9995 @end table
9996 @end deftp
9997
9998 @defvr {Variable Scheme} luks-device-mapping
9999 Cela définie les périphériques blocs chiffrés en LUKS avec
10000 @command{cryptsetup} du paquet du même nom. Elle s'appuie sur le module du
10001 noyau Linux @code{dm-crypt}.
10002 @end defvr
10003
10004 @defvr {Variable Scheme} raid-device-mapping
10005 Cela définie un périphérique RAID qui est assemblé avec la commande
10006 @code{mdadm} du paquet du même nom. Elle nécessite un module noyau Linux
10007 approprié pour le niveau RAID chargé, comme @code{raid456} pour RAID-4,
10008 RAID-5 et RAID-6 ou @code{raid10} pour RAID-10.
10009 @end defvr
10010
10011 @cindex chiffrement du disque
10012 @cindex LUKS
10013 L'exemple suivant spécifie un mappage de @file{/dev/sda3} vers
10014 @file{/dev/mapper/home} avec LUKS —
10015 @url{https://gitlab.com/cryptsetup/cryptsetup,Linux Unified Key Setup}, un
10016 mécanisme standard pour chiffrer les disques. Le périphérique
10017 @file{/dev/mapper/home} peut ensuite être utilisé comme @code{device} d'une
10018 déclaration @code{file-system} (@pxref{Systèmes de fichiers}).
10019
10020 @example
10021 (mapped-device
10022 (source "/dev/sda3")
10023 (target "home")
10024 (type luks-device-mapping))
10025 @end example
10026
10027 Autrement, pour devenir indépendant du numéro de périphérique, on peut
10028 obtenir l'UUID LUKS (@dfn{l'identifiant unique}) du périphérique source avec
10029 une commande comme :
10030
10031 @example
10032 cryptsetup luksUUID /dev/sda3
10033 @end example
10034
10035 et l'utiliser ainsi :
10036
10037 @example
10038 (mapped-device
10039 (source (uuid "cb67fc72-0d54-4c88-9d4b-b225f30b0f44"))
10040 (target "home")
10041 (type luks-device-mapping))
10042 @end example
10043
10044 @cindex chiffrement de l'espace d'échange
10045 Il est aussi désirable de chiffrer l'espace d'échange, puisque l'espace
10046 d'échange peut contenir des données sensibles. Une manière de faire cela
10047 est d'utiliser un fichier d'échange dans un système de fichiers sur un
10048 périphérique mappé avec un chiffrement LUKS. De cette manière, le fichier
10049 d'échange est chiffré parce que tout le périphérique est chiffré.
10050 @xref{Préparer l'installation,,Disk Partitioning}, pour un exemple.
10051
10052 Un périphérique RAID formé des partitions @file{/dev/sda1} et
10053 @file{/dev/sdb1} peut être déclaré ainsi :
10054
10055 @example
10056 (mapped-device
10057 (source (list "/dev/sda1" "/dev/sdb1"))
10058 (target "/dev/md0")
10059 (type raid-device-mapping))
10060 @end example
10061
10062 Le périphérique @file{/dev/md0} peut ensuite être utilisé comme
10063 @code{device} d'une déclaration @code{file-system} (@pxref{Systèmes de fichiers}).
10064 Remarquez que le niveau de RAID n'a pas besoin d'être donné ; il est choisi
10065 pendant la création initiale du périphérique RAID et est ensuite déterminé
10066 automatiquement.
10067
10068
10069 @node Comptes utilisateurs
10070 @subsection Comptes utilisateurs
10071
10072 @cindex utilisateurs
10073 @cindex comptes
10074 @cindex comptes utilisateurs
10075 Les comptes utilisateurs et les groupes sont gérés entièrement par la
10076 déclaration @code{operating-system}. Ils sont spécifiés avec les formes
10077 @code{user-account} et @code{user-group} :
10078
10079 @example
10080 (user-account
10081 (name "alice")
10082 (group "users")
10083 (supplementary-groups '("wheel" ;permet d'utiliser sudo, etc.
10084 "audio" ;carte son
10085 "video" ;périphériques réseaux comme les webcams
10086 "cdrom")) ;le bon vieux CD-ROM
10087 (comment "Bob's sister")
10088 (home-directory "/home/alice"))
10089 @end example
10090
10091 Lors du démarrage ou à la fin de @command{guix system reconfigure}, le
10092 système s'assure que seuls les comptes utilisateurs et les groupes spécifiés
10093 dans la déclaration @code{operating-system} existent, et avec les propriétés
10094 spécifiées. Ainsi, les modifications ou les créations de comptes ou de
10095 groupes effectuées directement en invoquant des commandes comme
10096 @command{useradd} sont perdue à la reconfiguration ou au redémarrage. Cela
10097 permet de s'assurer que le système reste exactement tel que déclaré.
10098
10099 @deftp {Type de données} user-account
10100 Les objets de se type représentent les comptes utilisateurs. Les membres
10101 suivants peuvent être spécifiés :
10102
10103 @table @asis
10104 @item @code{name}
10105 Le nom du compte utilisateur.
10106
10107 @item @code{group}
10108 @cindex groupes
10109 C'est le nom (une chaîne) ou un identifiant (un nombre) du groupe
10110 utilisateur auquel ce compte appartient.
10111
10112 @item @code{supplementary-groups} (par défaut : @code{'()})
10113 Éventuellement, cela peut être définie comme une liste de noms de groupes
10114 auxquels ce compte appartient.
10115
10116 @item @code{uid} (par défaut : @code{#f})
10117 C'est l'ID utilisateur de ce compte (un nombre) ou @code{#f}. Dans ce
10118 dernier cas, le nombre est choisi automatiquement par le système à la
10119 création du compte.
10120
10121 @item @code{comment} (par défaut : @code{""})
10122 Un commentaire à propos du compte, comme le nom complet de l'utilisateur.
10123
10124 @item @code{home-directory}
10125 C'est le nom du répertoire personnel du compte.
10126
10127 @item @code{create-home-directory?} (par défaut : @code{#t})
10128 Indique si le répertoire personnel du compte devrait être créé s'il n'existe
10129 pas déjà.
10130
10131 @item @code{shell} (par défaut : Bash)
10132 C'est une G-expression qui dénote un nom de fichier d'un programme utilisé
10133 comme shell (@pxref{G-Expressions}).
10134
10135 @item @code{system?} (par défaut : @code{#f})
10136 C'est une valeur booléenne qui indique si le compte est un compte « système
10137 ». Les comptes systèmes sont parfois traités à part ; par exemple, les
10138 gestionnaires de connexion graphiques ne les liste pas.
10139
10140 @anchor{user-account-password}
10141 @item @code{password} (par défaut : @code{#f})
10142 Vous laisseriez normalement ce champ à @code{#f} et initialiseriez les mots
10143 de passe utilisateurs en tant que @code{root} avec la commande
10144 @command{passwd}, puis laisseriez l'utilisateur le changer avec
10145 @command{passwd}. Les mots de passes définis avec @command{passwd} sont
10146 bien sûr préservés après redémarrage et reconfiguration.
10147
10148 Si vous voulez @emph{vraiment} définir un mot de passe pour un compte, alors
10149 ce champ doit contenir le mot de passe chiffré, comme une chaîne de
10150 caractère. @xref{crypt,,, libc, The GNU C Library Reference Manual}, pour
10151 plus d'information sur le chiffrement des mots de passe et
10152 @ref{Encryption,,, guile, GNU Guile Reference Manual}, pour des informations
10153 sur la procédure @code{crypt} de Guile.
10154
10155 @end table
10156 @end deftp
10157
10158 @cindex groupes
10159 Les déclarations de groupes sont encore plus simple :
10160
10161 @example
10162 (user-group (name "students"))
10163 @end example
10164
10165 @deftp {Type de données} user-group
10166 C'est le type pour, hé bien, les comptes utilisateurs. Il n'y a que
10167 quelques champs :
10168
10169 @table @asis
10170 @item @code{name}
10171 Le nom du groupe.
10172
10173 @item @code{id} (par défaut : @code{#f})
10174 L'identifiant du groupe (un nombre). S'il est @code{#f}, un nouveau nombre
10175 est alloué automatiquement lorsque le groupe est créé.
10176
10177 @item @code{system?} (par défaut : @code{#f})
10178 Cette valeur booléenne indique si le groupe est un groupe « système ». les
10179 groupes systèmes ont un numéro d'ID bas.
10180
10181 @item @code{password} (par défaut : @code{#f})
10182 Quoi, les groupes utilisateurs peuvent avoir des mots de passe ? On dirait
10183 bien. À moins que la valeur ne soit @code{#f}, ce champ spécifie le mot de
10184 passe du groupe.
10185
10186 @end table
10187 @end deftp
10188
10189 Par simplicité, une variable liste les groupes utilisateurs de base auxquels
10190 on pourrait s'attendre :
10191
10192 @defvr {Variable Scheme} %base-groups
10193 C'est la liste des groupes utilisateur de base que les utilisateurs et les
10194 paquets s'attendent à trouver sur le système. Cela comprend des groupes
10195 comme « root », « wheel » et « users », ainsi que des groupes utilisés pour
10196 contrôler l'accès à certains périphériques, comme « audio », « disk » et «
10197 cdrom ».
10198 @end defvr
10199
10200 @defvr {Variable Scheme} %base-user-accounts
10201 C'est la liste des compte du système de base que les programmes peuvent
10202 s'attendre à trouver sur un système GNU/Linux, comme le compte « nobody ».
10203
10204 Remarquez que le compte « root » n'est pas défini ici. C'est un cas
10205 particulier et il est automatiquement ajouté qu'il soit spécifié ou non.
10206 @end defvr
10207
10208 @node Régionalisation
10209 @subsection Régionalisation
10210
10211 @cindex paramètres linguistiques
10212 Un @dfn{paramètre linguistique} définie les conventions culturelles d'une
10213 langue et d'une région particulières (@pxref{Régionalisation,,, libc, The GNU C
10214 Library Reference Manual}). Chaque paramètre linguistique a un nom de la
10215 forme @code{@var{langue}_@var{territoire}.@var{jeudecaractères}} — p.@:
10216 ex.@: @code{fr_LU.utf8} désigne le paramètre linguistique pour le français,
10217 avec les conventions culturelles du Luxembourg, en utilisant l'encodage
10218 UTF-8.
10219
10220 @cindex définition des paramètres linguistiques
10221 Normalement, vous voudrez spécifier les paramètres linguistiques par défaut
10222 pour la machine en utilisant le champ @code{locale} de la déclaration
10223 @code{operating-system} (@pxref{Référence de système d'exploitation, @code{locale}}).
10224
10225 Les paramètres régionaux choisis sont automatiquement ajoutés aux
10226 définitions des @dfn{paramètres régionaux} connues par le système au besoin,
10227 avec le jeu de caractères inféré à partir de son nom, p.@: ex.@:
10228 @code{bo_CN.utf8} supposera qu'il faut utiliser le jeu de caractères
10229 @code{UTF-8}. Des définitions supplémentaires peuvent être spécifiées dans
10230 le champ @code{locale-definitions} de @code{operating-system} — c'est utile
10231 par exemple si le jeu de caractères n'a pas été inféré à partir du nom.
10232 L'ensemble par défaut de définitions comprend certains paramètres
10233 linguistiques parmi les plus utilisés, mais pas toutes les variantes
10234 disponibles, pour gagner de la place.
10235
10236 Par exemple, pour ajouter les paramètres pour le frison septentrional en
10237 Allemagne, la valeur de ce champ serait :
10238
10239 @example
10240 (cons (locale-definition
10241 (name "fy_DE.utf8") (source "fy_DE"))
10242 %default-locale-definitions)
10243 @end example
10244
10245 De me, pour gagner de la place, on peut vouloir lister dans
10246 @code{locale-definitions} seulement les paramètres qui sont vraiment
10247 utilisés, comme dans :
10248
10249 @example
10250 (list (locale-definition
10251 (name "ja_JP.eucjp") (source "ja_JP")
10252 (charset "EUC-JP")))
10253 @end example
10254
10255 @vindex LOCPATH
10256 Les définitions des paramètres linguistiques compilées sont disponibles dans
10257 @file{/run/current-system/locale/X.Y}, où @code{X.Y} est la version de la
10258 libc, ce qui est l'emplacement par défaut où la GNU@tie{}libc fournie par
10259 Guix cherche les données de régionalisation. Cet emplacement peut être
10260 modifié avec la variable d'environnement @code{LOCPATH}
10261 (@pxref{locales-and-locpath, @code{LOCPATH} and locale packages}).
10262
10263 La forme @code{locale-definition} est fournie par le module @code{(gnu
10264 system locale)}. Des détails sont disponibles plus bas.
10265
10266 @deftp {Type de données} locale-definition
10267 C'est le type de données d'une définition de paramètres linguistiques.
10268
10269 @table @asis
10270
10271 @item @code{name}
10272 Le nom du paramètre linguistique. @xref{Locale Names,,, libc, The GNU C
10273 Library Reference Manual}, pour en savoir plus sur les noms de paramètres
10274 linguistiques.
10275
10276 @item @code{source}
10277 Le nom de la source pour ce paramètre linguistique. C'est typiquement la
10278 partie @code{@var{langue}_@var{territoire}} du nom du paramètre.
10279
10280 @item @code{charset} (par défaut : @code{"UTF-8"})
10281 Le « jeu de caractères » d'un paramètre linguistique,
10282 @uref{http://www.iana.org/assignments/character-sets, défini par l'IANA}.
10283
10284 @end table
10285 @end deftp
10286
10287 @defvr {Variable Scheme} %default-locale-definitions
10288 Une liste des paramètres linguistiques UTF-8 couramment utilisés, utilisée
10289 comme valeur par défaut pour le champ @code{locale-definitions} des
10290 déclarations @code{operating-system}.
10291
10292 @cindex nom de paramètre linguistique
10293 @cindex jeu de caractère normalisé dans les noms de paramètres linguistiques
10294 Ces définitions de paramètres linguistiques utilisent le @dfn{jeu de
10295 caractère normalisé} pour la partie qui suit le point dans le nom
10296 (@pxref{Using gettextized software, normalized codeset,, libc, The GNU C
10297 Library Reference Manual}). Donc par exemple il y a @code{uk_UA.utf8} mais
10298 @emph{pas}, disons, @code{uk_UA.UTF-8}.
10299 @end defvr
10300
10301 @subsubsection Considérations sur la compatibilité des données linguistiques
10302
10303 @cindex incompatibilité, des données linguistiques
10304 Les déclaration @code{operating-system} fournissent un champ
10305 @code{locale-libcs} pour spécifier les paquets GNU@tie{}libc à utiliser pour
10306 compiler les déclarations de paramètres linguistiques
10307 (@pxref{Référence de système d'exploitation}). « Pourquoi je devrais m'en soucier ?
10308 », vous demandez-vous sûrement. Hé bien il se trouve que le format binaire
10309 des données linguistique est parfois incompatible d'une version de la libc à
10310 une autre.
10311
10312 @c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
10313 @c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
10314 Par exemple, un programme lié à la libc version 2.21 est incapable de lire
10315 les données linguistiques produites par la libc 2.22 ; pire, ce programme
10316 @emph{plante} plutôt que d'ignorer les données linguistiques
10317 incompatibles@footnote{Les version 2.23 et supérieures de la GNU@tie{}libc
10318 sauteront simplement les données linguistiques incompatibles, ce qui est
10319 déjà mieux.}. De même, un programme lié à la libc 2.22 peut lire la plupart
10320 mais pas toutes les données linguistiques de la libc 2.21 (spécifiquement
10321 les données @code{LC_COLLATE} sont incompatibles) ; donc les appels à
10322 @code{setlocale} peuvent échouer, mais les programmes ne plantent pas.
10323
10324 Le « problème » avec GuixSD c'est que les utilisateurs ont beaucoup de
10325 liberté : ils peuvent choisir s'ils veulent et quand ils veulent mettre à
10326 jour les logiciels de leur profil, et peuvent utiliser une version
10327 différente de la libc de celle que l'administrateur système utilise pour
10328 construire les données linguistiques du système global.
10329
10330 Heureusement, les utilisateurs non privilégiés peuvent aussi installer leur
10331 propres données linguistiques et définir @var{GUIX_LOCPATH} comme il le faut
10332 (@pxref{locales-and-locpath, @code{GUIX_LOCPATH} and locale packages}).
10333
10334 Cependant, c'est encore mieux si les données linguistiques du système dans
10335 @file{/run/current-system/locale} étaient construites avec les versions de
10336 la libc utilisées sur le système, pour que tous les programmes puissent y
10337 accéder — c'est surtout crucial sur un système multi-utilisateurs. Pour
10338 cela, l'administrateur peut spécifier plusieurs paquets de la libc dans le
10339 champ @code{locale-libcs} de @code{operating-system} :
10340
10341 @example
10342 (use-package-modules base)
10343
10344 (operating-system
10345 ;; @dots{}
10346 (locale-libcs (list glibc-2.21 (canonical-package glibc))))
10347 @end example
10348
10349 cet exemple créera un système contenant les définitions des paramètres
10350 linguistiques pour la libc 2.21 et pour la version actuelle de la libc dans
10351 @file{/run/current-system/locale}.
10352
10353
10354 @node Services
10355 @subsection Services
10356
10357 @cindex services systèmes
10358 Une part importante de la préparation d'une déclaration
10359 @code{operating-system} est la liste des @dfn{services systèmes} et de leur
10360 configuration (@pxref{Utiliser le système de configuration}). Les services
10361 systèmes sont typiquement des démons lancés au démarrage ou d'autres actions
10362 requises à ce moment-là — p.@: ex.@: configurer les accès réseaux.
10363
10364 GuixSD a une définition large de « service » (@pxref{Composition de services}),
10365 mais beaucoup de services sont gérés par le GNU@tie{}Shepherd
10366 (@pxref{Services Shepherd}). Sur un système lancé, la commande
10367 @command{herd} vous permet de lister les services disponibles, montrer leur
10368 statut, les démarrer et les arrêter, ou faire d'autres opérations
10369 spécifiques (@pxref{Jump Start,,, shepherd, The GNU Shepherd Manual}). Par
10370 exemple :
10371
10372 @example
10373 # herd status
10374 @end example
10375
10376 La commande ci-dessus, lancée en @code{root}, liste les services
10377 actuellement définis. La commande @command{herd doc} montre un synopsis du
10378 service donné :
10379
10380 @example
10381 # herd doc nscd
10382 Run libc's name service cache daemon (nscd).
10383 @end example
10384
10385 Les sous-commandes @command{start}, @command{stop} et @command{restart} ont
10386 l'effet auquel on s'attend. Par exemple, les commande suivantes stoppent le
10387 service nscd et redémarrent le serveur d'affichage Xorg :
10388
10389 @example
10390 # herd stop nscd
10391 Service nscd has been stopped.
10392 # herd restart xorg-server
10393 Service xorg-server has been stopped.
10394 Service xorg-server has been started.
10395 @end example
10396
10397 Les sections suivantes documentent les services disponibles, en commençant
10398 par les services de base qui peuvent être utilisés avec une déclaration
10399 @code{operating-system}.
10400
10401 @menu
10402 * Services de base:: Services systèmes essentiels.
10403 * Exécution de tâches planifiées:: Le service mcron.
10404 * Rotation des journaux:: Le service rottlog.
10405 * Services réseau:: Paramétres réseau, démon SSH, etc.
10406 * Système de fenêtrage X:: Affichage graphique.
10407 * Services d'impression:: Support pour les imprimantes locales et
10408 distantes.
10409 * Services de bureaux:: D-Bus et les services de bureaux.
10410 * Services de son:: Services ALSA et Pulseaudio.
10411 * Services de bases de données:: Bases SQL, clefs-valeurs, etc.
10412 * Services de courriels:: IMAP, POP3, SMTP, et tout ça.
10413 * Services de messagerie:: Services de messagerie.
10414 * Services de téléphonie:: Services de téléphonie.
10415 * Services de surveillance:: Services de surveillance.
10416 * Services Kerberos:: Services Kerberos.
10417 * Services web:: Services web.
10418 * Services de certificats:: Certificats TLS via Let's Encrypt.
10419 * Services DNS:: Démons DNS@.
10420 * Services VPN:: Démons VPN
10421 * Système de fichiers en réseau:: Services liés à NFS@.
10422 * Intégration continue:: Le service Cuirass.
10423 * Power Management Services:: Extending battery life.
10424 * Services audio:: MPD@.
10425 * Services de virtualisation:: Services de virtualisation.
10426 * Services de contrôle de version:: Fournit des accès distants à des
10427 dépôts Git.
10428 * Services de jeu:: Serveurs de jeu.
10429 * Services divers:: D'autres services.
10430 @end menu
10431
10432 @node Services de base
10433 @subsubsection Services de base
10434
10435 Le module @code{(gnu services base)} fournit des définitions de services
10436 poru les services de base qu'on peut attendre du système. Les services
10437 exportés par ce module sort listés ci-dessous.
10438
10439 @defvr {Variable Scheme} %base-services
10440 Cette variable contient une liste de services de base (@pxref{Types service et services}, pour plus d'informations sur les objets service) qu'on peut
10441 attendre du système : un service de connexion (mingetty) sur chaque tty,
10442 syslogd, le démon de cache de noms de la libc (nscd), le gestionnaire de
10443 périphériques udev, et plus.
10444
10445 C'est la valeur par défaut du champ @code{services} des déclarations
10446 @code{operating-system}. Habituellement, lors de la personnalisation d'un
10447 système, vous voudrez ajouter des services à ceux de @var{%base-services},
10448 comme ceci :
10449
10450 @example
10451 (cons* (avahi-service) (lsh-service) %base-services)
10452 @end example
10453 @end defvr
10454
10455 @defvr {Variable Scheme} special-files-service-type
10456 C'est le service qui met en place des « fichiers spéciaux » comme
10457 @file{/bin/sh} ; une instance de ce service fait partie de
10458 @code{%base-services}.
10459
10460 La valeur associée avec les services @code{special-files-service-type} doit
10461 être une liste de couples dont le premier élément est le « fichier spécial »
10462 et le deuxième sa cible. Par défaut il s'agit de :
10463
10464 @cindex @file{/bin/sh}
10465 @cindex @file{sh}, dans @file{/bin}
10466 @example
10467 `(("/bin/sh" ,(file-append @var{bash} "/bin/sh")))
10468 @end example
10469
10470 @cindex @file{/usr/bin/env}
10471 @cindex @file{env}, dans @file{/usr/bin}
10472 Si vous voulez ajouter, disons, @code{/usr/bin/env} à votre système, vous
10473 pouvez changer cela en :
10474
10475 @example
10476 `(("/bin/sh" ,(file-append @var{bash} "/bin/sh"))
10477 ("/usr/bin/env" ,(file-append @var{coreutils} "/bin/env")))
10478 @end example
10479
10480 Comme il fait parti de @code{%base-services}, vous pouvez utiliser
10481 @code{modify-services} pour personnaliser l'ensemble des fichiers spéciaux
10482 (@pxref{Référence de service, @code{modify-services}}). Mais une manière plus
10483 simple d'ajouter un fichier spécial est d'utiliser la procédure
10484 @code{extra-special-file} (voir plus bas).
10485 @end defvr
10486
10487 @deffn {Procédure Scheme} extra-special-file @var{file} @var{target}
10488 Utilise @var{target} comme « fichier spécial » @var{file}.
10489
10490 Par exemple, ajouter l'une des lignes suivantes au champ @code{services} de
10491 votre déclaration de système d'exploitation crée un lien symbolique
10492 @file{/usr/bin/env} :
10493
10494 @example
10495 (extra-special-file "/usr/bin/env"
10496 (file-append coreutils "/bin/env"))
10497 @end example
10498 @end deffn
10499
10500 @deffn {Procédure Scheme} host-name-service @var{name}
10501 Renvoie un service qui paramètre le nom d'hôte à @var{name}.
10502 @end deffn
10503
10504 @deffn {Procédure Scheme} login-service @var{config}
10505 Renvoie un service pour lancer login en suivant @var{config}, un objet
10506 @code{<login-configuration>} qui spécifie le message du jour, entre autres
10507 choses.
10508 @end deffn
10509
10510 @deftp {Type de données} login-configuration
10511 Le type de données qui représente la configuration de login.
10512
10513 @table @asis
10514
10515 @item @code{motd}
10516 @cindex message du jour
10517 Un objet simili-fichier contenant le « message du jour ».
10518
10519 @item @code{allow-empty-passwords?} (par défaut : @code{#t})
10520 Permet les mots de passes vides par défaut pour que les utilisateurs
10521 puissent se connecter au compte « root » la première fois après sa création.
10522
10523 @end table
10524 @end deftp
10525
10526 @deffn {Procédure Scheme} mingetty-service @var{config}
10527 Renvoie un service qui lance mingetty en suivant @var{config}, un objet
10528 @code{<mingetty-configuration>}, qui spécifie le tty à lancer entre autres
10529 choses.
10530 @end deffn
10531
10532 @deftp {Type de données} mingetty-configuration
10533 C'est le type de données représentant la configuration de Mingetty, qui
10534 fournit l'implémentation par défaut de l'écran de connexion des consoles
10535 virtuelles.
10536
10537 @table @asis
10538
10539 @item @code{tty}
10540 Le nom de la console sur laquelle tourne ce Mingetty, p.@: ex.@:
10541 @code{"tty1"}.
10542
10543 @item @code{auto-login} (par défaut : @code{#f})
10544 Lorsque la valeur est vraie, ce champ doit être une chaîne de caractère
10545 dénotant le nom d'utilisateur pour lequel le système se connecte
10546 automatiquement. Lorsque la valeur est @code{#f}, il faut entrer un nom
10547 d'utilisateur et un mot de passe pour se connecter.
10548
10549 @item @code{login-program} (par défaut : @code{#f})
10550 Ce doit être soit @code{#f}, auquel cas le programme de connexion par défaut
10551 est utilisé (@command{login} de la suite d'outils Shadow), soit une gexp
10552 dénotant le nom d'un programme de connexion.
10553
10554 @item @code{login-pause?} (par défaut : @code{#f})
10555 Lorsque la valeur est @code{#t} en plus de @var{auto-login}, l'utilisateur
10556 devrai appuyer sur une touche avant que le shell de connexion ne soit lancé.
10557
10558 @item @code{mingetty} (par défaut : @var{mingetty})
10559 Le paquet Mingetty à utiliser.
10560
10561 @end table
10562 @end deftp
10563
10564 @deffn {Procédure Scheme} agetty-service @var{config}
10565 Renvoie un service pour lancer agetty en suivant @var{config}, un objet
10566 @code{<agetty-configuration>}, qui spécifie le tty à lancer, entre autres
10567 choses.
10568 @end deffn
10569
10570 @deftp {Type de données} agetty-configuration
10571 Ce type de données représente la configuration de agetty, qui implémente
10572 l'écran de connexion des consoles virtuelles et series. Voir la page de
10573 manuel de @code{agetty(8)} pour plus d'informations.
10574
10575 @table @asis
10576
10577 @item @code{tty}
10578 Le nom de la console sur laquelle agetty est lancé p.@: ex.@:
10579 @code{"ttyS0"}. Cet argument est facultatif, il aura par défaut une valeur
10580 raisonnable d'un port série utilisé par le noyau Linux.
10581
10582 Pour cela, s'il y a une valeur pour une option @code{agetty.tty} sur la
10583 ligne de commande du noyau, agetty extraira le nom du périphérique du port
10584 série à partir de cette option.
10585
10586 Sinon et s'il y a une valeur pour une option @code{console} avec un tty sur
10587 la ligne de commande du noyau Linux, agetty extraira le nom du périphérique
10588 du port série et l'utilisera.
10589
10590 Dans les deux cas, agetty laissera les autres paramètres du périphérique
10591 série (baud, etc) sans y toucher — dans l'espoir que Linux leur a assigné
10592 les bonnes valeurs.
10593
10594 @item @code{baud-rate} (par défaut : @code{#f})
10595 Une chaîne qui contient une liste d'un ou plusieurs taux de baud séparés par
10596 des virgules, en ordre décroissant.
10597
10598 @item @code{term} (par défaut : @code{#f})
10599 Une chaîne contenant la valeur utilisée pour la variable d'environnement
10600 @code{TERM}.
10601
10602 @item @code{eight-bits?} (par défaut : @code{#f})
10603 Lorsque la valeur est @code{#t}, le tty est supposé être propre pour les
10604 caractères 8-bit et la détection de parité est désactivée.
10605
10606 @item @code{auto-login} (par défaut : @code{#f})
10607 Lorsqu'un nom de connexion est passé comme une chaîne de caractères,
10608 l'utilisateur spécifié sera automatiquement connecté sans demande du nom
10609 d'utilisateur ni du mot de passe.
10610
10611 @item @code{no-reset?} (par défaut : @code{#f})
10612 Lorsque la valeur est @code{#t}, ne vide pas les cflags du terminal (modes
10613 de contrôle).
10614
10615 @item @code{host} (par défaut : @code{#f})
10616 Cette option accepte une chaîne contenant le « login_host », qui sera écrit
10617 dans le fichier @file{/var/run/utmpx}.
10618
10619 @item @code{remote?} (par défaut : @code{#f})
10620 Lorsque la valeur est @code{#t} en plus de @var{host}, cette option ajoutera
10621 une option fakehost @code{-r} à la ligne de commande du programme de
10622 connexion spécifié dans @var{login-program}.
10623
10624 @item @code{flow-control?} (par défaut : @code{#f})
10625 Lorsque la valeur est @code{#t}, active le contrôle de flux matériel
10626 (RTS/CTS).
10627
10628 @item @code{no-issue?} (par défaut : @code{#f})
10629 Lorsque la valeur est @code{#t}, le contenu du fichier @file{/etc/issue} ne
10630 sera pas affiché avant de présenter l'écran de connexion.
10631
10632 @item @code{init-string} (par défaut : @code{#f})
10633 Cette option accepte une chaîne de caractères qui sera envoyée au tty ou au
10634 modem avant toute autre chose. Elle peut être utilisée pour initialiser un
10635 modem.
10636
10637 @item @code{no-clear?} (par défaut : @code{#f})
10638 Lorsque la valeur est @code{#t}, agetty ne nettoiera pas l'écran avant de
10639 montrer l'écran de connexion.
10640
10641 @item @code{login-program} (par défaut : (file-append shadow "/bin/login"))
10642 Cette option doit être soit une gexp dénotant le nom d'un programme de
10643 connexion, soit non définie, auquel cas la valeur par défaut est la commande
10644 @command{login} de la suite d'outils Shadow.
10645
10646 @item @code{local-line} (par défaut : @code{#f})
10647 Contrôle le drapeau CLOCAL. Cette option accepte l'un des trois symboles
10648 comme argument, @code{'auto}, @code{'always} ou @code{'never}. Si la valeur
10649 est @code{#f}, la valeur par défaut choisie par agetty est @code{'auto}…
10650
10651 @item @code{extract-baud?} (par défaut : @code{#f})
10652 Lorsque la valeur est @code{#t}, dit à agetty d'essayer d'extraire la taux
10653 de baud depuis les messages de statut produits par certains modems.
10654
10655 @item @code{skip-login?} (par défaut : @code{#f})
10656 Lorsque la valeur est @code{#t}, ne demande par de nom d'utilisateur. Elle
10657 peut être utilisée avec le champ @var{login-program} pour utiliser des
10658 systèmes de connexion non standards.
10659
10660 @item @code{no-newline?} (par défaut : @code{#f})
10661 Lorsque la valeur est @code{#t}, n'affiche pas de retour à la ligne avant
10662 d'afficher le fichier @file{/etc/issue}.
10663
10664 @c Is this dangerous only when used with login-program, or always?
10665 @item @code{login-options} (par défaut : @code{#f})
10666 Cette option accepte une chaîne de caractères contenant des options passées
10667 au programme login. Lorsqu'utilisé avec @var{login-program}, soyez
10668 conscient qu'un utilisateur malicieux pourrait essayer de rentrer un nom
10669 d'utilisateur contenant des options incluses qui pourraient être analysées
10670 par le programme de connexion.
10671
10672 @item @code{login-pause} (par défaut : @code{#f})
10673 Lorsque la valeur est @code{#t}, attend qu'une touche soit appuyée avant de
10674 montrer l'écran de connexion. Cela peut être utilisé avec @var{auto-login}
10675 pour sauvegarder de la mémoire en lançant les shells de manière fainéante.
10676
10677 @item @code{chroot} (par défaut : @code{#f})
10678 Change de racine dans le répertoire donné. Cette option accepte un chemin
10679 en tant que chaîne de caractères.
10680
10681 @item @code{hangup?} (par défaut : @code{#f})
10682 Utilise l'appel système Linux @code{vhangup} pour raccrocher virtuellement
10683 le terminal spécifié.
10684
10685 @item @code{keep-baud?} (par défaut : @code{#f})
10686 Lorsque la valeur est @code{#t}, essaye de garder le taux de baud existant.
10687 Les taux de baud de @var{baud-rate} sont utilisés lorsque agetty reçoit un
10688 caractères @key{BREAK}.
10689
10690 @item @code{timeout} (par défaut : @code{#f})
10691 Lorsque la valeur est un nombre entier, termine la session si aucun nom
10692 d'utilisateur n'a pu être lu après @var{timeout} secondes.
10693
10694 @item @code{detect-case?} (par défaut : @code{#f})
10695 Lorsque la valeur est @code{#t}, active le support pour la détection des
10696 terminaux en majuscule uniquement. Ce paramètre détectera qu'un nom
10697 d'utilisateur qui ne contient que des majuscules indique un terminal en
10698 majuscule et effectuera des conversion de majuscule en minuscule. Remarquez
10699 que cela ne fonctionne pas avec les caractères unicode.
10700
10701 @item @code{wait-cr?} (par défaut : @code{#f})
10702 Lorsque la valeur est @code{#t}, attend que l'utilisateur ou le modem envoie
10703 un retour chariot ou un saut de ligne avant d'afficher @file{/etc/issue} ou
10704 l'écran de connexion. Cela est typiquement utilisé avec l'option
10705 @var{init-string}.
10706
10707 @item @code{no-hints?} (par défaut : @code{#f})
10708 Lorsque la valeur est @code{#t}, n'affiche par les astuces à propos des
10709 verrouillages numériques, majuscule et défilement.
10710
10711 @item @code{no-hostname?} (par défaut : @code{#f})
10712 Par défaut, le nom d'hôte est affiché. Lorsque la valeur est @code{#t},
10713 aucun nom d'hôte ne sera affiché.
10714
10715 @item @code{long-hostname?} (par défaut : @code{#f})
10716 Par défaut, le nom d'hôte n'est affiché qu'après le premier point. Lorsque
10717 la valeur est @code{#t}, le nom d'hôte pleinement qualifié renvoyé par
10718 @code{gethostname} ou @code{getaddrinfo} sera affiché.
10719
10720 @item @code{erase-characters} (par défaut : @code{#f})
10721 Cette option accepte une chaîne de caractères de caractères supplémentaires
10722 qui devraient être interprétés comme des effacements lorsque l'utilisateur
10723 les tape dans leur nom d'utilisateur.
10724
10725 @item @code{kill-characters} (par défaut : @code{#f})
10726 Cette option accepte une chaîne de caractères qui devrait être interprété
10727 comme signifiant « ignore tous les caractères précédent » (aussi appelé un
10728 caractère « kill ») lorsque l'utilisateur tape son nom d'utilisateur.
10729
10730 @item @code{chdir} (par défaut : @code{#f})
10731 Cette option accepte, en tant que chaîne de caractères, un chemin vers un
10732 répertoire dans lequel se trouvera la commande avant la connexion.
10733
10734 @item @code{delay} (par défaut : @code{#f})
10735 Cette option accepte, en tant qu'entier, le nombre de secondes à attendre
10736 avant d'ouvrir le tty et afficher l'écran de connexion.
10737
10738 @item @code{nice} (par défaut : @code{#f})
10739 Cette option accepte, en tant qu'entier, la valeur « nice » avec laquelle le
10740 programme @command{login} tourne.
10741
10742 @item @code{extra-options} (par défaut : @code{'()})
10743 Cette option fournie un « mécanisme de secours » pour que l'utilisateur
10744 puisse ajouter des arguments de la ligne de commande arbitraires à
10745 @command{agetty} comme une liste de chaînes de caractères.
10746
10747 @end table
10748 @end deftp
10749
10750 @deffn {Procédure Scheme} kmscon-service-type @var{config}
10751 Renvoie un service qui lance
10752 @uref{https://www.freedesktop.org/wiki/Software/kmscon,kmscon} d'après
10753 @var{config}, un objet @code{<kmscon-configuration>}, qui spécifie le tty
10754 sur lequel tourner, entre autres choses.
10755 @end deffn
10756
10757 @deftp {Type de données} kmscon-configuration
10758 C'est le type de données représentant la configuration de Kscon, qui
10759 implémente l'écran de chargement de la console virtuelle.
10760
10761 @table @asis
10762
10763 @item @code{virtual-terminal}
10764 Le nom de la console sur laquelle Kmscon tourne, p.@: ex.@: @code{"tty1"}.
10765
10766 @item @code{login-program} (par défaut : @code{#~(string-append #$shadow "/bin/login")})
10767 Une gexp qui dénote le nom d'un programme de connexion. le programme de
10768 connexion par défaut est @command{login} de la suite d'outils Shadow.
10769
10770 @item @code{login-arguments} (par défaut : @code{'("-p")})
10771 Une liste d'arguments à passer à @command{login}.
10772
10773 @item @code{hardware-acceleration?} (par défaut : #f)
10774 S'il faut utiliser l'accélération matérielle.
10775
10776 @item @code{kmscon} (par défaut : @var{kmscon})
10777 Le paquet Kmscon à utiliser.
10778
10779 @end table
10780 @end deftp
10781
10782 @cindex name service cache daemon
10783 @cindex nscd
10784 @deffn {Procédure Scheme} nscd-service [@var{config}] [#:glibc glibc] @
10785 [#:name-services '()]
10786 Renvoie un service qui lance le démon de cache de services de noms de la
10787 libc (nscd) avec la @var{config} donnée — un objet
10788 @code{<nscd-configuration>}. @xref{Name Service Switch}, pour un exemple.
10789 @end deffn
10790
10791 @defvr {Variable Scheme} %nscd-default-configuration
10792 C'est la valeur par défaut de @code{<nscd-configuration>} (voir plus bas)
10793 utilisée par @code{nscd-service}. Elle utilise les caches définis par
10794 @var{%nscd-default-caches} ; voir plus bas.
10795 @end defvr
10796
10797 @deftp {Type de données} nscd-configuration
10798 C'est le type de données qui représente la configuration du démon de cache
10799 de services de noms (nscd).
10800
10801 @table @asis
10802
10803 @item @code{name-services} (par défaut : @code{'()})
10804 Liste des paquets dénotant des @dfn{services de noms} qui doivent être
10805 visible pour nscd, p.@: ex.@: @code{(list @var{nss-mdns})}.
10806
10807 @item @code{glibc} (par défaut : @var{glibc})
10808 Objet de paquet qui dénote la Biblothèque C de GNU qui fournit la commande
10809 @command{nscd}.
10810
10811 @item @code{log-file} (par défaut : @code{"/var/log/nscd.log"})
10812 Nom du fichier journal de nscd. C'est là que les sorties de débogage sont
10813 envoyée lorsque @code{debug-level} est strictement positif.
10814
10815 @item @code{debug-level} (par défaut : @code{0})
10816 Entier qui dénote le niveau de débogage. Les entiers les plus grands
10817 signifient plus de sortie de débogage.
10818
10819 @item @code{caches} (par défaut : @var{%nscd-default-caches})
10820 Liste d'objets @code{<nscd-cache>} qui dénotent des choses à mettre en cache
10821 ; voir plus bas.
10822
10823 @end table
10824 @end deftp
10825
10826 @deftp {Type de données} nscd-cache
10827 Type de données représentant une base de données de cache de nscd et ses
10828 paramètres.
10829
10830 @table @asis
10831
10832 @item @code{database}
10833 C'est un symbole qui représente le nom de la base de donnée à mettre en
10834 cache. Les valeurs valide sont @code{passwd}, @code{group}, @code{hosts} et
10835 @code{services} qui désignent les bases de données NSS correspondantes
10836 (@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
10837
10838 @item @code{positive-time-to-live}
10839 @itemx @code{negative-time-to-live} (par défaut : @code{20})
10840 Un entier qui représente le nombre de secondes pendant lesquelles un
10841 résultat positif ou négatif reste en cache.
10842
10843 @item @code{check-files?} (par défaut : @code{#t})
10844 Indique s'il faut vérifier des mises à jours dans les fichiers correspondant
10845 à @var{database}.
10846
10847 Par exemple, lorsque @var{database} est @code{hosts}, ce drapeau indique à
10848 nscd de vérifier s'il y a des mises à jour de @file{/etc/hosts} et de les
10849 prendre en compte.
10850
10851 @item @code{persistent?} (par défaut : @code{#t})
10852 Indique si le cache devrait être stocké de manière persistante sur le
10853 disque.
10854
10855 @item @code{shared?} (par défaut : @code{#t})
10856 Indique si le cache devrait être partagé entre les utilisateurs.
10857
10858 @item @code{max-database-size} (par défaut : 32@tie{}MiB)
10859 Taille maximale en octets de la base de données en cache.
10860
10861 @c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
10862 @c settings, so leave them out.
10863
10864 @end table
10865 @end deftp
10866
10867 @defvr {Variable Scheme} %nscd-default-caches
10868 Liste d'objets @code{<nscd-cache>} utilisés par défaut par
10869 @code{nscd-configuration} (voir plus haut).
10870
10871 Elle active la mise en cache persistante et agressive des recherches de
10872 services et de noms d'hôtes. Ces derniers fournissent une recherche de noms
10873 d'hôtes plus performante, résiliente face à des serveurs de noms peu fiables
10874 et une protection de votre vie privée plus efficace — souvent le résultat
10875 des recherches de noms d'hôtes sont dans le cache local, donc les serveurs
10876 de nom externes n'ont même pas besoin d'être questionnés.
10877 @end defvr
10878
10879 @anchor{syslog-configuration-type}
10880 @cindex syslog
10881 @cindex logging
10882 @deftp {Type de données} syslog-configuration
10883 Ce type de données représente la configuration du démon syslog.
10884
10885 @table @asis
10886 @item @code{syslogd} (par défaut : @code{#~(string-append #$inetutils "/libexec/syslogd")})
10887 Le démon syslog à utiliser.
10888
10889 @item @code{config-file} (par défaut : @code{%default-syslog.conf})
10890 Le fichier de configuration de syslog à utiliser.
10891
10892 @end table
10893 @end deftp
10894
10895 @anchor{syslog-service}
10896 @cindex syslog
10897 @deffn {Procédure Scheme} syslog-service @var{config}
10898 Renvoie un service qui lance un démon syslog en suivant @var{config}.
10899
10900 @xref{syslogd invocation,,, inetutils, GNU Inetutils}, pour plus
10901 d'informations sur la syntaxe du fichier de configuration.
10902 @end deffn
10903
10904 @anchor{guix-configuration-type}
10905 @deftp {Type de données} guix-configuration
10906 Ce type de données représente la configuration du démon de construction de
10907 Guix. @xref{Invoquer guix-daemon} pour plus d'informations.
10908
10909 @table @asis
10910 @item @code{guix} (par défaut : @var{guix})
10911 Le paquet Guix à utiliser.
10912
10913 @item @code{build-group} (par défaut : @code{"guixbuild"})
10914 Nom du groupe des comptes utilisateurs de construction.
10915
10916 @item @code{build-accounts} (par défaut : @code{10})
10917 Nombre de comptes utilisateurs de construction à créer.
10918
10919 @item @code{authorize-key?} (par défaut : @code{#t})
10920 @cindex substituts, autorisations
10921 Autoriser ou non les clefs de substituts listées dans @code{authorize-keys}
10922 — par défaut celle de @code{hydra.gny.org} (@pxref{Substituts}).
10923
10924 @vindex %default-authorized-guix-keys
10925 @item @code{authorized-keys} (par défaut : @var{%default-authorized-guix-keys})
10926 La liste des fichiers de clefs autorisées pour les imports d'archives, en
10927 tant que liste de gexps sous forme de chaînes (@pxref{Invoquer guix archive}). Par défaut, elle contient celle de @code{hydra.gnu.org}
10928 (@pxref{Substituts}).
10929
10930 @item @code{use-substitutes?} (par défaut : @code{#t})
10931 S'il faut utiliser les substituts.
10932
10933 @item @code{substitute-urls} (par défaut : @var{%default-substitute-urls})
10934 La liste des URL où trouver des substituts par défaut.
10935
10936 @item @code{max-silent-time} (par défaut : @code{0})
10937 @itemx @code{timeout} (par défaut : @code{0})
10938 Le nombre de secondes de silence et le nombre de secondes d'inactivité,
10939 respectivement, après lesquelles un processus de construction son délai
10940 d'attente. Une valeur de zéro désactive le délai d'attente.
10941
10942 @item @code{log-compression} (par défaut : @code{'bzip2})
10943 Le type de compression utilisé par les journaux de construction — parmi
10944 @code{gzip}, @code{bzip2} et @code{none}.
10945
10946 @item @code{extra-options} (par défaut : @code{'()})
10947 Liste d'options supplémentaires de la ligne de commande pour
10948 @command{guix-daemon}.
10949
10950 @item @code{log-file} (par défaut : @code{"/var/log/guix-daemon.log"})
10951 Le fichier où les sorties standard et d'erreur de @command{guix-daemon} sont
10952 écrites.
10953
10954 @item @code{http-proxy} (par défaut : @code{#f})
10955 Le serveur mandataire HTTP à utiliser pour télécharger les dérivations à
10956 sortie fixe et les substituts.
10957
10958 @item @code{tmpdir} (par défaut : @code{#f})
10959 Un répertoire où @command{guix-daemon} effectuera ses constructions.
10960
10961 @end table
10962 @end deftp
10963
10964 @deffn {Procédure Scheme} guix-service @var{config}
10965 Renvoie un service qui fait tourner le démon de construction de Guix en
10966 suivant @var{config}.
10967 @end deffn
10968
10969 @deffn {Procédure Scheme} udev-service [#:udev @var{eudev} #:rules @code{'()}]
10970 Lance @var{udev}, qui rempli le répertoire @file{/dev} dynamiquement. Les
10971 règles udev peuvent être fournies comme une liste de fichier via la variable
10972 @var{rules}. Les procédures @var{udev-rule} et @var{file->udev-rule} de
10973 @code{(gnu services base)} simplifient la création de ces fichiers de règle.
10974
10975 @deffn {Procédure Scheme} udev-rule [@var{file-name} @var{contents}]
10976 Renvoie un fichier de règle udev nommé @var{file-name} contenant les règles
10977 définie par le litéral @var{contents}.
10978
10979 Dans l'exemple suivant, on définie une règle pour un périphérique USB qui
10980 sera stockée dans le fichier @file{90-usb-thing.rules}. La règle lance un
10981 script à la détection du périphérique USB avec l'identifiant de produit
10982 donné.
10983
10984 @example
10985 (define %example-udev-rule
10986 (udev-rule
10987 "90-usb-thing.rules"
10988 (string-append "ACTION==\"add\", SUBSYSTEM==\"usb\", "
10989 "ATTR@{product@}==\"Example\", "
10990 "RUN+=\"/path/to/script\"")))
10991 @end example
10992 @end deffn
10993
10994 Ici on montre comment le service @var{udev-service} par défaut peut être
10995 étendu avec cette règle.
10996
10997 @example
10998 (operating-system
10999 ;; @dots{}
11000 (services
11001 (modify-services %desktop-services
11002 (udev-service-type config =>
11003 (udev-configuration (inherit config)
11004 (rules (append (udev-configuration-rules config)
11005 (list %example-udev-rule))))))))
11006 @end example
11007
11008 @deffn {Procédure Scheme} file->udev-rule [@var{file-name} @var{file}]
11009 Renvoie un fichier udev nommé @var{file-name} contenant les règles définies
11010 dans @var{file}, un objet simili-fichier.
11011
11012 L'exemple suivant montre comment utiliser un fichier de règles existant.
11013
11014 @example
11015 (use-modules (guix download) ;pour url-fetch
11016 (guix packages) ;pour origin
11017 ;; @dots{})
11018
11019 (define %android-udev-rules
11020 (file->udev-rule
11021 "51-android-udev.rules"
11022 (let ((version "20170910"))
11023 (origin
11024 (method url-fetch)
11025 (uri (string-append "https://raw.githubusercontent.com/M0Rf30/"
11026 "android-udev-rules/" version "/51-android.rules"))
11027 (sha256
11028 (base32 "0lmmagpyb6xsq6zcr2w1cyx9qmjqmajkvrdbhjx32gqf1d9is003"))))))
11029 @end example
11030 @end deffn
11031
11032 En plus, les définitions des paquets de Guix peuvent être inclus dans
11033 @var{rules} pour étendre les règles avec les définitions trouvées dans leur
11034 sous-répertoire @file{lib/udev/rules.d}. Au lieu de l'exemple
11035 @var{file->udev-rule} précédent, on aurait pu utiliser le paquet
11036 @var{android-udev-rules} qui existe dans le module @code{(gnu packages
11037 android)}.
11038
11039 L'exemple suivant montre comment utiliser le paquet @var{android-udev-rules}
11040 pour que l'outil Android @command{adb} puisse détecter les appareils sans
11041 privilège root. Il détaille aussi comment créer le grope @code{adbusers},
11042 requis pour le bon fonctionnement des règles définies dans le paquet
11043 @var{android-udev-rules}. Pour créer ce groupe, on doit le définir dans les
11044 @var{supplementary-groups} de la déclaration @var{user-account} ainsi que
11045 dans le champ @var{groups} de l'enregistrement @var{operating-system}.
11046
11047 @example
11048 (use-modules (gnu packages android) ;for android-udev-rules
11049 (gnu system shadow) ;for user-group
11050 ;; @dots{})
11051
11052 (operating-system
11053 ;; @dots{}
11054 (users (cons (user-acount
11055 ;; @dots{}
11056 (supplementary-groups
11057 '("adbusers" ;for adb
11058 "wheel" "netdev" "audio" "video"))
11059 ;; @dots{})))
11060
11061 (groups (cons (user-group (system? #t) (name "adbusers"))
11062 %base-groups))
11063
11064 ;; @dots{}
11065
11066 (services
11067 (modify-services %desktop-services
11068 (udev-service-type config =>
11069 (udev-configuration (inherit config)
11070 (rules (cons* android-udev-rules
11071 (udev-configuration-rules config))))))))
11072 @end example
11073 @end deffn
11074
11075 @defvr {Variable Scheme} urandom-seed-service-type
11076 Garde de l'entropie dans @var{%random-seed-file} pour démarrer
11077 @file{/dev/urandom} au redémarrage. Ce service essaye aussi de démarrer
11078 @file{/dev/urandom} à partir de @file{/dev/hwrng} au démarrage si
11079 @file{/dev/hwrng} existe et peut être lu.
11080 @end defvr
11081
11082 @defvr {Variable Scheme} %random-seed-file
11083 C'est le nom du fichier où des octets aléatoires sont sauvegardés par
11084 @var{urandom-seed-service} pour démarrer @file{/dev/urandom} au
11085 redémarrage. Sa valeur par défaut est @file{/var/lib/random-seed}.
11086 @end defvr
11087
11088 @cindex disposition clavier
11089 @cindex clavier
11090 @deffn {Procédure Scheme} console-keymap-service @var{files} ...
11091 @cindex disposition du clavier
11092 Renvoie un service qui charge les dispositions claviers de @var{files} avec
11093 la commande @command{loadkeys}. Vraisemblablement, vous voudrez charger une
11094 disposition par défaut, ce qui se fait ainsi :
11095
11096 @example
11097 (console-keymap-service "dvorak")
11098 @end example
11099
11100 Ou par exemple pour un clavier suédois, vous pourriez avoir besoin de
11101 combiner les dispositions suivantes :
11102 @example
11103 (console-keymap-service "se-lat6" "se-fi-lat6")
11104 @end example
11105
11106 Vous pouvez aussi spécifier le nom de fichier (ou les noms de fichiers)
11107 complets de vos dispositions. Voir @code{man loadkeys} pour des détails.
11108
11109 @end deffn
11110
11111 @cindex souris
11112 @cindex gpm
11113 @defvr {Variable Scheme} gpm-service-type
11114 C'est le type du service qui lance GPM, le @dfn{démon de souris à but
11115 général}, qui fournit le support de la souris sur la console Linux. GPM
11116 permet aux utilisateurs d'utiliser la souris dans la console, entre autres
11117 pour sélectionner, copier et coller du texte.
11118
11119 La valeur pour les services de ce type doit être un @code{gpm-configuration}
11120 (voir plus bas). Ce service ne fait pas partie de @var{%base-services}.
11121 @end defvr
11122
11123 @deftp {Type de données} gpm-configuration
11124 Type de données représentant la configuration de GPM.
11125
11126 @table @asis
11127 @item @code{options} (par défaut : @code{%default-gpm-options})
11128 Les options de la ligne de commande à passer à @command{gpm}. L'ensemble
11129 des options par défaut dit à @command{gpm} d'écouter les événements de la
11130 souris dans @file{/dev/input/mice}. @xref{Command Line,,, gpm, gpm manual},
11131 pour plus d'informations.
11132
11133 @item @code{gpm} (par défaut : @code{gpm})
11134 Le paquet GPM à utiliser.
11135
11136 @end table
11137 @end deftp
11138
11139 @anchor{guix-publish-service-type}
11140 @deffn {Variable Scheme} guix-publish-service-type
11141 C'est le type de service pour @command{guix publish} (@pxref{Invoquer guix publish}). Sa valeur doit être un objet @code{guix-configuration} décrit
11142 plus bas.
11143
11144 Ce service suppose que @file{/etc/guix} contient déjà une paire de clefs
11145 créée par @command{guix archive --generate-key} (@pxref{Invoquer guix archive}). Si ce n'est pas le cas, le service ne démarrera pas.
11146 @end deffn
11147
11148 @deftp {Type de données} guix-publish-configuration
11149 Le type de données représentant la configuration du service @code{guix
11150 publish}.
11151
11152 @table @asis
11153 @item @code{guix} (par défaut : @code{guix})
11154 Le paquet Guix à utiliser.
11155
11156 @item @code{port} (par défaut : @code{80})
11157 Le port TCP sur lequel écouter les connexions.
11158
11159 @item @code{host} (par défaut : @code{"localhost"})
11160 L'hôte (et donc, l'interface réseau) sur lequel écouter. Utilisez
11161 @code{"0.0.0.0"} pour écouter sur toutes les interfaces réseaux.
11162
11163 @item @code{compression-level} (par défaut : @code{3})
11164 Le niveau de compression gzip auquel les substituts sont compressés.
11165 Utilisez @code{0} pour désactiver complètement la compression, et @code{9}
11166 pour avoir le meilleur taux de compression contre une plus grande
11167 utilisation du CPU.
11168
11169 @item @code{nar-path} (par défaut : @code{"nar"})
11170 Le chemin d'URL où les « nars » se trouvent. @xref{Invoquer guix publish,
11171 @code{--nar-path}}, pour des détails.
11172
11173 @item @code{cache} (par défaut : @code{#f})
11174 Lorsque la valeur est @code{#f}, désactive le cache et génère les archives à
11175 la demande. Sinon, cela devrait être le nom d'un répertoire — p.@: ex.@:
11176 @code{"/var/cache/guix/publish"} — où @command{guix publish} gère le cache
11177 des archives et des métadonnées prêtes à être envoyées. @xref{Invoquer guix publish, @option{--cache}}, pour plus d'informations sur les compromis
11178 impliqués.
11179
11180 @item @code{workers} (par défaut : @code{#f})
11181 Lorsque la valeur est un entier, c'est le nombre de threads de travail
11182 utilisés pour le cache ; lorsque la valeur est @code{#f}, le nombre de
11183 processeurs est utilisé. @xref{Invoquer guix publish, @option{--workers}},
11184 pour plus d'informations.
11185
11186 @item @code{ttl} (par défaut : @code{#f})
11187 Lorsque la valeur est un entier, il dénote la @dfn{durée de vie} en secondes
11188 des archives publiées. @xref{Invoquer guix publish, @option{--ttl}}, pour
11189 plus d'informations.
11190 @end table
11191 @end deftp
11192
11193 @anchor{rngd-service}
11194 @deffn {Procédure Scheme} rngd-service [#:rng-tools @var{rng-tools}] @
11195 [#:device "/dev/hwrng"]
11196 Renvoie un service qui lance le programme @command{rngd} de @var{rng-tools}
11197 pour ajouter @var{device} à la réserve d'entropie du noyau. Le service
11198 échouera si @var{device} n'existe pas.
11199 @end deffn
11200
11201 @anchor{pam-limits-service}
11202 @cindex limites de session
11203 @cindex ulimit
11204 @cindex priorités
11205 @cindex temps réel
11206 @cindex jackd
11207 @deffn {Procédure Scheme} pam-limits-service [#:limits @code{'()}]
11208
11209 Renvoie un service qui installe un fichier de configuration pour le
11210 @uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html, module
11211 @code{pam_limits}}. La procédure prend éventuellement une liste de valeurs
11212 @code{pam-limits-entry} qui peuvent être utilisées pour spécifier les
11213 limites @code{ulimit} et les priorités des sessions utilisateurs.
11214
11215 La définition de limites suivante défini deux limites matérielles et
11216 logicielles pour toutes les sessions connectées des utilisateurs du groupe
11217 @code{realtime} :
11218
11219 @example
11220 (pam-limits-service
11221 (list
11222 (pam-limits-entry "@@realtime" 'both 'rtprio 99)
11223 (pam-limits-entry "@@realtime" 'both 'memlock 'unlimited)))
11224 @end example
11225
11226 La première entrée augment la priorité en temps réel maximale des processus
11227 non privilégiés ; la deuxième entrée abandonne les restrictions sur l'espace
11228 d'adressage maximal qui peut être verrouillé en mémoire. Ces paramètres
11229 sont souvent utilisés sur les systèmes audio temps-réel.
11230 @end deffn
11231
11232 @node Exécution de tâches planifiées
11233 @subsubsection Exécution de tâches planifiées
11234
11235 @cindex cron
11236 @cindex mcron
11237 @cindex tâches planifiées
11238 Le module @code{(gnu services mcron)} fournit une interface pour
11239 GNU@tie{}mcron, un démon qui lance des tâches planifiées (@pxref{Top,,,
11240 mcron, GNU@tie{}mcron}). GNU@tie{}mcron est similaire au démon Unix
11241 traditionel @command{cron} ; la principale différence est qu'il est
11242 implémenté en Guile Scheme, qui fournit beaucoup de flexibilité lors de la
11243 spécification de la planification des tâches et de leurs actions.
11244
11245 L'exemple en dessous définit un système d'exploitation qu lance les
11246 commandes @command{updatebd} (@pxref{Invoking updatedb,,, find, Finding
11247 Files}) et @command{guix gc} (@pxref{Invoquer guix gc}) tous les jours,
11248 ainsi que la commande @command{mkid} en tant qu'utilisateur non privilégié
11249 (@pxref{mkid invocation,,, idutils, ID Database Utilities}). Il utilise des
11250 gexps pour introduire des définitions de tâches qui sont passées à mcron
11251 (@pxref{G-Expressions}).
11252
11253 @lisp
11254 (use-modules (guix) (gnu) (gnu services mcron))
11255 (use-package-modules base idutils)
11256
11257 (define updatedb-job
11258 ;; Lance « updatedb » à 3h du matin chaque jour. Ici nous spécifions
11259 ;; l'action de la tâche comme une procédure Scheme.
11260 #~(job '(next-hour '(3))
11261 (lambda ()
11262 (execl (string-append #$findutils "/bin/updatedb")
11263 "updatedb"
11264 "--prunepaths=/tmp /var/tmp /gnu/store"))))
11265
11266 (define garbage-collector-job
11267 ;; Lance le ramasse-miettes tous les jours à minuit cinq.
11268 ;; L'action de la tâche est une commande shell.
11269 #~(job "5 0 * * *" ;Vixie cron syntax
11270 "guix gc -F 1G"))
11271
11272 (define idutils-job
11273 ;; Met à jour la base de données d'index en tant que « charlie » à 12h15
11274 ;; et 19h15. La commande est lancée depuis le répertoire personnel de l'utilisateur.
11275 #~(job '(next-minute-from (next-hour '(12 19)) '(15))
11276 (string-append #$idutils "/bin/mkid src")
11277 #:user "charlie"))
11278
11279 (operating-system
11280 ;; @dots{}
11281 (services (cons (mcron-service (list garbage-collector-job
11282 updatedb-job
11283 idutils-job))
11284 %base-services)))
11285 @end lisp
11286
11287 @xref{Guile Syntax, mcron job specifications,, mcron, GNU@tie{}mcron}, pour
11288 plus d'informations sur les spécifications des tâche de mcron. Ci-dessous
11289 est la référence du service mcron.
11290
11291 On a running system, you can use the @code{schedule} action of the service
11292 to visualize the mcron jobs that will be executed next:
11293
11294 @example
11295 # herd schedule mcron
11296 @end example
11297
11298 @noindent
11299 The example above lists the next five tasks that will be executed, but you
11300 can also specify the number of tasks to display:
11301
11302 @example
11303 # herd schedule mcron 10
11304 @end example
11305
11306 @deffn {Procédure Scheme} mcron-service @var{jobs} [#:mcron @var{mcron}]
11307 Renvoie un service mcron qui lance @var{mcron} qui planifie les tâches
11308 @var{jobs}, une liste de gexps qui dénotent des spécifications de tâches de
11309 mcron.
11310
11311 C'est un raccourci pour :
11312 @example
11313 (service mcron-service-type
11314 (mcron-configuration (mcron mcron) (jobs jobs)))
11315 @end example
11316 @end deffn
11317
11318 @defvr {Variable Scheme} mcron-service-type
11319 C'est le type du service @code{mcron}, dont la valeur est un objet
11320 @code{mcron-configuration}
11321
11322 Ce type de service peut être la cible d'une extension de service qui lui
11323 fournit des spécifications de tâches supplémentaires (@pxref{Composition de services}). En d'autres termes, il est possible de définir des services
11324 qui fournissent des tâches mcron à lancer.
11325 @end defvr
11326
11327 @deftp {Type de données} mcron-configuration
11328 Type données qui représente la configuration de mcron.
11329
11330 @table @asis
11331 @item @code{mcron} (par défaut : @var{mcron})
11332 Le paquet mcron à utiliser.
11333
11334 @item @code{jobs}
11335 C'est la liste des gexps (@pxref{G-Expressions}), où chaque gexp correspond
11336 à une spécification de tâche de mcron (@pxref{Syntax, mcron job
11337 specifications,, mcron, GNU@tie{}mcron}).
11338 @end table
11339 @end deftp
11340
11341
11342 @node Rotation des journaux
11343 @subsubsection Rotation des journaux
11344
11345 @cindex rottlog
11346 @cindex journaux, rotation
11347 @cindex logging
11348 Les fichiers journaux comme ceux qui se trouvent dans @file{/var/log} ont
11349 tendance à grandir sans fin, donc c'est une bonne idée de le @dfn{faire
11350 tourner} de temps à autres — c.-à-d.@: archiver leur contenu dans des
11351 fichiers séparés, potentiellement compressés. Le module @code{(gnu services
11352 admin)} fournit une interface pour GNU@tie{}Rot[t]log, un outil de rotation
11353 de journaux (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}).
11354
11355 L'exemple ci-dessous définit un système d'exploitation qui fournit la
11356 rotation des journaux avec les paramètres par défaut, pour les journaux les
11357 plus courants.
11358
11359 @lisp
11360 (use-modules (guix) (gnu))
11361 (use-service-modules admin mcron)
11362 (use-package-modules base idutils)
11363
11364 (operating-system
11365 ;; @dots{}
11366 (services (cons (service rottlog-service-type)
11367 %base-services)))
11368 @end lisp
11369
11370 @defvr {Variable Scheme} rottlog-service-type
11371 C'est le type du service Rotlog, dont la valeur est un objet
11372 @code{rottlog-configuration}.
11373
11374 D'autres services peuvent étendre celui-ci avec de nouveaux objets
11375 @code{log-rotation} (voir plus bas), en augmentant ainsi l'ensemble des
11376 fichiers à faire tourner.
11377
11378 Ce type de service peut définir des taches (@pxref{Exécution de tâches planifiées})
11379 pour lancer le service rottlog.
11380 @end defvr
11381
11382 @deftp {Type de données} rottlog-configuration
11383 Type de données représentant la configuration de rottlog.
11384
11385 @table @asis
11386 @item @code{rottlog} (par défaut : @code{rottlog})
11387 Le paquet Rottlog à utiliser.
11388
11389 @item @code{rc-file} (par défaut : @code{(file-append rottlog "/etc/rc")})
11390 Le fichier de configuration Rottlog à utiliser (@pxref{Mandatory RC
11391 Variables,,, rottlog, GNU Rot[t]log Manual}).
11392
11393 @item @code{rotations} (par défaut : @code{%default-rotations})
11394 Une liste d'objets @code{log-rotation} définis plus bas.
11395
11396 @item @code{jobs}
11397 C'est une liste de gexps où chaque gexp correspond à une spécification de
11398 tache de mcron (@pxref{Exécution de tâches planifiées}).
11399 @end table
11400 @end deftp
11401
11402 @deftp {Type de données} log-rotation
11403 Type de données représentant la rotation d'un groupe de fichiers journaux.
11404
11405 En reprenant un exemple du manuel de Rottlog (@pxref{Period Related File
11406 Examples,,, rottlog, GNU Rot[t]log Manual}), on peut définir la rotation
11407 d'un journal de cette manière :
11408
11409 @example
11410 (log-rotation
11411 (frequency 'daily)
11412 (files '("/var/log/apache/*"))
11413 (options '("storedir apache-archives"
11414 "rotate 6"
11415 "notifempty"
11416 "nocompress")))
11417 @end example
11418
11419 La liste des champs est la suivante :
11420
11421 @table @asis
11422 @item @code{frequency} (par défaut : @code{'weekly})
11423 La fréquence de rotation, un symbole.
11424
11425 @item @code{files}
11426 La liste des fichiers ou des motifs de noms de fichiers à faire tourner.
11427
11428 @item @code{options} (par défaut : @code{'()})
11429 La liste des options de rottlog pour cette rotation (@pxref{Configuration
11430 parameters,,, rottlog, GNU Rot[t]lg Manual}).
11431
11432 @item @code{post-rotate} (par défaut : @code{#f})
11433 Soit @code{#f}, soit une gexp à exécuter une fois la rotation terminée.
11434 @end table
11435 @end deftp
11436
11437 @defvr {Variable Scheme} %default-rotations
11438 Spécifie la rotation hebdomadaire de @var{%rotated-files} et de quelques
11439 autres fichiers.
11440 @end defvr
11441
11442 @defvr {Variable Scheme} %rotated-files
11443 La liste des fichiers contrôlés par syslog à faire tourner. Par défaut il
11444 s'agit de : @code{'("/var/log/messages" "/var/log/secure")}
11445 @end defvr
11446
11447 @node Services réseau
11448 @subsubsection Services réseau
11449
11450 Le module @code{(gnu services networking)} fournit des services pour
11451 configurer les interfaces réseaux.
11452
11453 @cindex DHCP, service réseau
11454 @deffn {Procédure Scheme} dhcp-client-service [#:dhcp @var{isc-dhcp}]
11455 Renvoie un service qui lance @var{dhcp}, un client DHCP (Dynamic Host
11456 Configuration Protocol) sur toutes les interfaces réseaux en dehors de la
11457 boucle locale.
11458 @end deffn
11459
11460 @deffn {Procédure Scheme} dhcpd-service-type
11461 Ce type définie un service qui lance un démon DHCP. Pour créer un service
11462 de ce type, vous devez appliquer un objet @code{<dhcpd-configuration>}. Par
11463 exemple :
11464
11465 @example
11466 (service dhcpd-service-type
11467 (dhcpd-configuration
11468 (config-file (local-file "my-dhcpd.conf"))
11469 (interfaces '("enp0s25"))))
11470 @end example
11471 @end deffn
11472
11473 @deftp {Type de données} dhcpd-configuration
11474 @table @asis
11475 @item @code{package} (par défaut : @code{isc-dhcp})
11476 Le paquet qui fournit le démon DHCP. ce paquet doit fournir le démon
11477 @file{sbin/dhcpd} relativement à son répertoire de sortie. Le paquet par
11478 défaut est le @uref{http://www.isc.org/products/DHCP, serveur DHCP d'ISC}
11479 @item @code{config-file} (par défaut : @code{#f})
11480 Le fichier de configuration à utiliser. Il est requis. Il sera passé à
11481 @code{dhcpd} via son option @code{-cf}. La valeur peut être n'importe quel
11482 objet « simili-fichier » (@pxref{G-Expressions, file-like objects}). Voir
11483 @code{man dhcpd.conf} pour des détails sur la syntaxe du fichier de
11484 configuration.
11485 @item @code{version} (par défaut : @code{"4"})
11486 La version de DHCP à utiliser. Le serveur DHCP d'ISC supporte les valeur «
11487 4 », « 6 » et « 4o6 ». Elles correspondent aux options @code{-4}, @code{-6}
11488 et @code{-4o6} du programme @code{dhcpd}. Voir @code{man dhcpd} pour plus
11489 de détails.
11490 @item @code{run-directory} (par défaut : @code{"/run/dhcpd"})
11491 Le répertoire d'exécution à utiliser. Au moment de l'activation du service,
11492 ce répertoire sera créé s'il n'existe pas.
11493 @item @code{pid-file} (par défaut : @code{"/run/dhcpd/dhcpd.pid"})
11494 Le fichier de PID à utiliser. Cela correspond à l'option @code{-pf} de
11495 @code{dhcpd}. Voir @code{man dhcpd} pour plus de détails.
11496 @item @code{interfaces} (par défaut : @code{'()})
11497 Les noms des interfaces réseaux sur lesquelles dhcpd écoute. Si cette liste
11498 n'est pas vide, alors ses éléments (qui doivent être des chaînes de
11499 caractères) seront ajoutés à l'invocation de @code{dhcpd} lors du démarrage
11500 du démon. Il n'est pas forcément nécessaire de spécifier des interfaces ici
11501 ; voir @code{man dhcpd} pour plus de détails.
11502 @end table
11503 @end deftp
11504
11505 @defvr {Variable Scheme} static-networking-service-type
11506 @c TODO Document <static-networking> data structures.
11507 C'est le type des interfaces réseaux configurés statiquement.
11508 @end defvr
11509
11510 @deffn {Procédure Scheme} static-networking-service @var{interface} @var{ip} @
11511 [#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}] @ [#:requirement
11512 @code{'(udev)}] Return a service that starts @var{interface} with address
11513 @var{ip}. If @var{netmask} is true, use it as the network mask. If
11514 @var{gateway} is true, it must be a string specifying the default network
11515 gateway. @var{requirement} can be used to declare a dependency on another
11516 service before configuring the interface.
11517
11518 On peut appeler cette procédure plusieurs fois, une fois par interface
11519 réseau qui nous intéresse. Dans les coulisses, elle étend
11520 @code{static-networking-service-type} avec les interfaces réseaux
11521 supplémentaires à gérer.
11522 @end deffn
11523
11524 @cindex wicd
11525 @cindex sans-fil
11526 @cindex WiFi
11527 @cindex gestion du réseau
11528 @deffn {Procédure Scheme} wicd-service [#:wicd @var{wicd}]
11529 Renvoie un service qui lance @url{https://launchpad.net/wicd,Wicd}, un démon
11530 de gestion réseau qui cherche à simplifier la configuration des résaux
11531 filaires et sans fil.
11532
11533 Ce service ajoute le paquet @var{wicd} au profil global, pour fournir des
11534 commandes pour interagir avec le démon et configurer le réseau :
11535 @command{wicd-client}, une interface graphique et les interfaces
11536 utilisateurs @command{wicd-cli} et @command{wicd-curses}.
11537 @end deffn
11538
11539 @cindex ModemManager
11540
11541 @defvr {Variable Scheme} modem-manager-service-type
11542 C'est le type de service pour le service
11543 @uref{https://wiki.gnome.org/Projects/ModemManager, ModemManager}. La
11544 valeur de ce type de service est un enregistrement
11545 @code{modem-manager-configuration}.
11546
11547 Ce service fait partie de @code{%desktop-services} (@pxref{Services de bureaux}).
11548 @end defvr
11549
11550 @deftp {Type de données} modem-manager-configuration
11551 Type de donnée représentant la configuration de ModemManager.
11552
11553 @table @asis
11554 @item @code{modem-manager} (par défaut : @code{modem-manager})
11555 Le paquet ModemManager à utiliser.
11556
11557 @end table
11558 @end deftp
11559
11560 @cindex NetworkManager
11561
11562 @defvr {Variable Scheme} network-manager-service-type
11563 C'est le type de service pour le service
11564 @uref{https://wiki.gnome.org/Projects/NetworkManager, NetworkManager}. La
11565 valeur pour ce type de service est un enregistrement
11566 @code{network-manager-configuration}.
11567
11568 Ce service fait partie de @code{%desktop-services} (@pxref{Services de bureaux}).
11569 @end defvr
11570
11571 @deftp {Type de données} network-manager-configuration
11572 Type de données représentant la configuration de NetworkManager.
11573
11574 @table @asis
11575 @item @code{network-manager} (par défaut : @code{network-manager})
11576 Le paquet NetworkManager à utiliser.
11577
11578 @item @code{dns} (par défaut : @code{"default"})
11579 Mode de gestion pour le DNS, qui affecte la manière dont NetworkManager
11580 utilise le fichier de configuration @code{resolv.conf}
11581
11582 @table @samp
11583 @item default
11584 NetworkManager mettra à jour @code{resolv.conf} pour refléter les serveurs
11585 de noms fournis par les connexions actives.
11586
11587 @item dnsmasq
11588 NetworkManager lancera @code{dnsmasq} en tant que serveur de cache local, en
11589 utilisant une configuration « DNS disjointe » si vous êtes connecté par un
11590 VPN puis mettra à jour @code{resolv.conf} pour pointer vers le serveur de
11591 nom local.
11592
11593 @item none
11594 NetworkManager ne modifiera pas @code{resolv.conf}.
11595 @end table
11596
11597 @item @code{vpn-plugins} (par défaut : @code{'()})
11598 C'est la liste des greffons disponibles pour les VPN (réseaux privés
11599 virtuels). Un exemple est le paquet @code{network-manager-openvpn}, qui
11600 permet à NetworkManager de gérer des VPN via OpenVPN.
11601
11602 @end table
11603 @end deftp
11604
11605 @cindex Connman
11606 @deffn {Variable Scheme} connman-service-type
11607 C'est le type de service pour lancer @url{https://01.org/connman,Connman},
11608 un gestionnaire de connexions réseaux.
11609
11610 Sa valeur doit être un enregistrement @code{connman-configuration} comme
11611 dans cet exemple :
11612
11613 @example
11614 (service connman-service-type
11615 (connman-configuration
11616 (disable-vpn? #t)))
11617 @end example
11618
11619 Voir plus bas pour des détails sur @code{connman-configuration}.
11620 @end deffn
11621
11622 @deftp {Type de données} connman-configuration
11623 Type de données représentant la configuration de connman.
11624
11625 @table @asis
11626 @item @code{connman} (par défaut : @var{connman})
11627 Le paquet connman à utiliser.
11628
11629 @item @code{disable-vpn?} (par défaut : @code{#f})
11630 Lorsque la valeur est vraie, active le greffon vpn de connman.
11631 @end table
11632 @end deftp
11633
11634 @cindex WPA Supplicant
11635 @defvr {Variable Scheme} wpa-supplicant-service-type
11636 C'est le type du service qui lance @url{https://w1.fi/wpa_supplicant/,WPA
11637 supplicant}, un démon d'authentification requis pour s'authentifier sur des
11638 WiFi chiffrés ou des réseaux ethernet. l est configuré pour écouter des
11639 requêtes sur D-Bus.
11640
11641 La valeur de ce service est le paquet @code{wpa-supplicant} à utiliser.
11642 Ainsi, il peut être instancié de cette manière :
11643
11644 @lisp
11645 (use-modules (gnu services networking))
11646
11647 (service wpa-supplicant-service-type)
11648 @end lisp
11649 @end defvr
11650
11651 @cindex NTP
11652 @cindex horloge
11653 @deffn {Procédure Scheme} ntp-service [#:ntp @var{ntp}] @
11654 [#:servers @var{%ntp-servers}] @
11655 [#:allow-large-adjustment? #f]
11656 Renvoie un service qui lance le démon de @var{ntp}, le
11657 @uref{http://www.ntp.org, paquet Network Time Protocol}. Le démon gardera
11658 l'horloge système synchronisée avec celle des serveurs @var{servers}.
11659 @var{allow-large-adjustment?} détermine si @command{ntpd} a le droit de
11660 faire des ajustements initiaux de plus de 1 000 secondes.
11661 @end deffn
11662
11663 @defvr {Variable Scheme} %ntp-servers
11664 Liste des noms d'hôtes utilisés comme serveurs NTP par défaut.
11665 @end defvr
11666
11667 @cindex OpenNTPD
11668 @deffn {Procédure Scheme} openntpd-service-type
11669 Lance le démon NTP @command{ntpd}, implémenté par
11670 @uref{http://www.openntpd.org, OpenNTPD}. Le démon gardera l'horloge
11671 système synchronisée avec celle des serveurs donnés.
11672
11673 @example
11674 (service
11675 openntpd-service-type
11676 (openntpd-configuration
11677 (listen-on '("127.0.0.1" "::1"))
11678 (sensor '("udcf0 correction 70000"))
11679 (constraint-from '("www.gnu.org"))
11680 (constraints-from '("https://www.google.com/"))
11681 (allow-large-adjustment? #t)))
11682
11683 @end example
11684 @end deffn
11685
11686 @deftp {Type de données} openntpd-configuration
11687 @table @asis
11688 @item @code{openntpd} (par défaut : @code{(file-append openntpd "/sbin/ntpd")})
11689 L'exécutable openntpd à utiliser.
11690 @item @code{listen-on} (par défaut : @code{'("127.0.0.1" "::1")})
11691 Une liste d'adresses IP locales ou de noms d'hôtes que devrait écouter le
11692 démon ntpd.
11693 @item @code{query-from} (par défaut : @code{'()})
11694 Une liste d'adresses IP que le démon devrait utiliser pour les requêtes
11695 sortantes.
11696 @item @code{sensor} (par défaut : @code{'()})
11697 Spécifie une liste de senseurs de différences de temps que ntpd devrait
11698 utiliser. @code{ntpd} écoutera chaque senseur qui existe et ignorera ceux
11699 qui n'existent pas. Voir @uref{https://man.openbsd.org/ntpd.conf, la
11700 documentation en amont} pour plus d'informations.
11701 @item @code{server} (par défaut : @var{%ntp-servers})
11702 Spécifie une liste d'adresses IP ou de noms d'hôtes de serveurs NTP avec
11703 lesquels se synchroniser.
11704 @item @code{servers} (par défaut : @code{'()})
11705 Spécifie une liste d'adresses IP ou de noms d'hôtes de banques de serveurs
11706 NTP avec lesquelles se synchroniser.
11707 @item @code{constraint-from} (par défaut : @code{'()})
11708 @code{ntpd} peut être configuré pour demander la « Date » à des serveurs
11709 HTTPS de confiance via TLS. Cette information de temps n'est pas utilisée
11710 pour sa précision mais agit comme une contrainte authentifiée, ce qui réduit
11711 l'impact d'une attaque par l'homme du milieu sur le protocole NTP non
11712 authentifié. Spécifie une liste d'URL, d'adresses IP ou de noms d'hôtes de
11713 serveurs HTTPS qui fournissent cette contrainte.
11714 @item @code{constraints-from} (par défaut : @code{'()})
11715 Comme pour @code{constraint-from}, spécifie une liste d'URL, d'adresses IP
11716 ou de noms d'hôtes de serveurs HTTPS qui fournissent une contrainte. Si les
11717 noms d'hôtes sont résolus en plusieurs adresses IP, @code{ntpd} calculera la
11718 contrainte médiane.
11719 @item @code{allow-large-adjustment?} (par défaut : @code{#f})
11720 Détermine si @code{ntpd} peut faire un ajustement initial de plus de 180
11721 secondes.
11722 @end table
11723 @end deftp
11724
11725 @cindex inetd
11726 @deffn {Variable Scheme} inetd-service-type
11727 Ce service lance le démon @command{inetd} (@pxref{inetd invocation,,,
11728 inetutils, GNU Inetutils}). @command{inetd} écoute des connexionssur des
11729 sockets internet et démarre le programme spécifié uniquement lorsqu'une
11730 connexion arrive sur l'un de ces sockets.
11731
11732 La valeur de ce service est un objet @code{inetd-configuration}. L'exemple
11733 suivant configure le démon @command{inetd} pour qu'il fournisse le service
11734 @command{echo}, ainsi qu'in service smtp qui transfère le trafic smtp par
11735 ssh à un serveur @code{smtp-server} derrière une passerelle @code{hostname}
11736 :
11737
11738 @example
11739 (service
11740 inetd-service-type
11741 (inetd-configuration
11742 (entries (list
11743 (inetd-entry
11744 (name "echo")
11745 (socket-type 'stream)
11746 (protocol "tcp")
11747 (wait? #f)
11748 (user "root"))
11749 (inetd-entry
11750 (node "127.0.0.1")
11751 (name "smtp")
11752 (socket-type 'stream)
11753 (protocol "tcp")
11754 (wait? #f)
11755 (user "root")
11756 (program (file-append openssh "/bin/ssh"))
11757 (arguments
11758 '("ssh" "-qT" "-i" "/path/to/ssh_key"
11759 "-W" "smtp-server:25" "user@@hostname")))))
11760 @end example
11761
11762 Voir plus bas pour plus de détails sur @code{inetd-configuration}.
11763 @end deffn
11764
11765 @deftp {Type de données} inetd-configuration
11766 Type de données représentant la configuration de @command{inetd}.
11767
11768 @table @asis
11769 @item @code{program} (par défaut : @code{(file-append inetutils "/libexec/inetd")})
11770 L'exécutable @command{inetd} à utiliser.
11771
11772 @item @code{entries} (par défaut : @code{'()})
11773 Une liste d'entrées de services @command{inetd}. Chaque entrée devrait être
11774 crée avec le constructeur @code{inetd-entry}.
11775 @end table
11776 @end deftp
11777
11778 @deftp {Type de données} inetd-entry
11779 Type de données représentant une entrée dans la configuration
11780 d'@command{inetd}. Chaque entrée correspond à un socket sur lequel
11781 @command{inetd} écoutera les requêtes.
11782
11783 @table @asis
11784 @item @code{node} (par défaut : @code{#f})
11785 Chaîne de caractères facultative, un liste d'adresses locales séparées par
11786 des virgules que @command{inetd} devrait utiliser pour écouter ce service.
11787 @xref{Configuration file,,, inetutils, GNU Inetutils} pour une description
11788 complète de toutes les options.
11789 @item @code{name}
11790 Une chaîne de caractères dont le nom doit correspondre à une entrée de
11791 @code{/etc/services}.
11792 @item @code{socket-type}
11793 Un symbole parmi @code{'stream}, @code{'dgram}, @code{'raw}, @code{'rdm} ou
11794 @code{'seqpacket}.
11795 @item @code{protocol}
11796 Une chaîne de caractères qui doit correspondre à une entrée dans
11797 @code{/etc/protocols}.
11798 @item @code{wait?} (par défaut : @code{#t})
11799 Indique si @command{inetd} devrait attendre que le serveur ait quitté avant
11800 d'écouter de nouvelles demandes de service.
11801 @item @code{user}
11802 Une chaîne de caractères contenant le nom d'utilisateur (et éventuellement
11803 de groupe) de l'utilisateur en tant que lequel le serveur devrait tourner.
11804 Le nom du groupe peut être spécifié comme un suffixe, séparé par un
11805 deux-points ou un point, c.-à-d.@: @code{"utilisateur"},
11806 @code{"utilisateur:groupe"} ou @code{"utilisateur.groupe"}.
11807 @item @code{program} (par défaut : @code{"internal"})
11808 Le programme du serveur qui servira les requêtes, ou @code{"internal"} si
11809 @command{inetd} devrait utiliser un service inclus.
11810 @item @code{arguments} (par défaut : @code{'()})
11811 Une liste de chaînes de caractères ou d'objets simili-fichiers qui sont les
11812 arguments du programme du serveur, en commençant par le zéroième argument,
11813 c.-à-d.@: le nom du programme lui-même. Pour les services internes à
11814 @command{inetd}, cette entrée doit être @code{'()} ou @code{'("internal")}.
11815 @end table
11816
11817 @xref{Configuration file,,, inetutils, GNU Inetutils} pour trouver une
11818 discussion plus détaillée de chaque champ de configuration.
11819 @end deftp
11820
11821 @cindex Tor
11822 @deffn {Procédure Scheme} tor-service [@var{config-file}] [#:tor @var{tor}]
11823 Renvoie un service qui lance le démon de réseau anonyme
11824 @uref{https://torproject.org, Tor}.
11825
11826 Le démon est lancé avec l'identité de l'utilisateur non privilégié
11827 @code{tor}. Il lit @var{config-file}, un objet simili-fichier, avec une
11828 ligne @code{User tor} supplémentaire et des lignes pour les services cachés
11829 ajoutées par des @code{tor-hidden-service}. Lncez @command{man tor} pour
11830 obtenir des informations sur le fichier de configuration.
11831 @end deffn
11832
11833 @cindex service caché
11834 @deffn {Procédure Scheme} tor-hidden-service @var{name} @var{mapping}
11835 Définie un @dfn{service caché} pour Tor nommé @var{name} qui implémente
11836 @var{mapping}. @var{mapping} est une liste de paires de port et d'hôte,
11837 comme dans :
11838
11839 @example
11840 '((22 "127.0.0.1:22")
11841 (80 "127.0.0.1:8080"))
11842 @end example
11843
11844 Dans cet exemple, le port 22 du service caché est relié au port local 22 et
11845 le port 80 est relié au port local 8080.
11846
11847 Cela crée un répertoire @file{/var/lib/tor/hidden-services/@var{name}} où le
11848 fichier @file{hostname} contient le nom d'hôte @code{.onion} pour le service
11849 caché.
11850
11851 Voir @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, the
11852 Tor project's documentation} pour trouver plus d'information.
11853 @end deffn
11854
11855 Le module @code{(gnu services rsync)} fournit les services suivant :
11856
11857 Vous pourriez vouloir un démon rsync si vous voulez que des fichiers soient
11858 disponibles pour que n'importe qui (ou juste vous) puisse télécharger des
11859 fichiers existants ou en téléverser des nouveaux.
11860
11861 @deffn {Variable Scheme} rsync-service-type
11862 C'est le type pour le démon @uref{https://rsync.samba.org, rsync}, qui prend
11863 un enregistrement @command{rsync-configuration} comme dans cet exemple :
11864
11865 @example
11866 (service rsync-service-type)
11867 @end example
11868
11869 Voir plus pas pour trouver des détails à propos de
11870 @code{rsync-configuration}.
11871 @end deffn
11872
11873 @deftp {Type de données} rsync-configuration
11874 Type de données représentant la configuration de @code{rsync-service}.
11875
11876 @table @asis
11877 @item @code{package} (par défaut : @var{rsync})
11878 Le paquet @code{rsync} à utiliser.
11879
11880 @item @code{port-number} (par défaut : @code{873})
11881 Le port TCP sur lequel @command{rsync} écoute les connexions entrantes. Si
11882 le port est inférieur à @code{1024}, @command{rsync} doit être démarré en
11883 tant qu'utilisateur et groupe @code{root}.
11884
11885 @item @code{pid-file} (par défaut : @code{"/var/run/rsyncd/rsyncd.pid"})
11886 Nom du fichier où @command{rsync} écrit son PID.
11887
11888 @item @code{lock-file} (par défaut : @code{"/var/run/rsyncd/rsyncd.lock"})
11889 Nom du fichier où @command{rsync} écrit son fichier de verrouillage.
11890
11891 @item @code{log-file} (par défaut : @code{"/var/log/rsyncd.log"})
11892 Nom du fichier où @command{rsync} écrit son fichier de journal.
11893
11894 @item @code{use-chroot?} (par défaut : @var{#t})
11895 S'il faut utiliser un chroot pour le répertoire partagé de @command{rsync}.
11896
11897 @item @code{share-path} (par défaut : @file{/srv/rsync})
11898 Emplacement du répertoire partagé de @command{rsync}.
11899
11900 @item @code{share-comment} (par défaut : @code{"Rsync share"})
11901 Commentaire du répertoire partagé de @command{rsync}.
11902
11903 @item @code{read-only?} (par défaut : @var{#f})
11904 Permission en écriture sur le répertoire partagé.
11905
11906 @item @code{timeout} (par défaut : @code{300})
11907 Délai d'attente d'entrée-sortie en secondes.
11908
11909 @item @code{user} (par défaut : @var{"root"})
11910 Propriétaire du processus @code{rsync}.
11911
11912 @item @code{group} (par défaut : @var{"root"})
11913 Groupe du processus @code{rsync}.
11914
11915 @item @code{uid} (par défaut : @var{"rsyncd"})
11916 Nom d'utilisateur ou ID utilisateur en tant que lequel les transferts de
11917 fichiers ont lieu si le démon a été lancé en @code{root}.
11918
11919 @item @code{gid} (par défaut : @var{"rsyncd"})
11920 Nom du groupe ou ID du groupe qui sera utilisé lors de l'accès au module.
11921
11922 @end table
11923 @end deftp
11924
11925 En plus, @code{(gnu services ssh)} fournit les services suivant.
11926 @cindex SSH
11927 @cindex serveur SSH
11928
11929 @deffn {Procédure Scheme} lsh-service [#:host-key "/etc/lsh/host-key"] @
11930 [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
11931 [#:allow-empty-passwords? #f] [#:root-login? #f] @
11932 [#:syslog-output? #t] [#:x11-forwarding? #t] @
11933 [#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
11934 [#:public-key-authentication? #t] [#:initialize? #t]
11935 Lance le programme @command{lshd} de @var{lsh} pour écouter sur le port
11936 @var{port-number}. @var{host-key} doit désigner un fichier contenant la
11937 clef d'hôte et ne doit être lisible que par root.
11938
11939 Lorsque @var{daemonic?} est vrai, @command{lshd} se détachera du terminal
11940 qui le contrôle et enregistrera ses journaux avec syslogd, à moins que
11941 @var{syslog-output?} ne soit faux. Évidemment, cela rend aussi lsh-service
11942 dépendant de l'existence d'un service syslogd. Lorsque @var{pid-file?} est
11943 vrai, @command{lshd} écrit son PID dans le fichier @var{pid-file}.
11944
11945 Lorsque @var{initialize?} est vrai, la graine et la clef d'hôte seront créés
11946 lors de l'activation du service s'ils n'existent pas encore. Cela peut
11947 prendre du temps et demande une interaction.
11948
11949 Lorsque @var{initialize?} est faux, c'est à l'utilisateur d'initialiser le
11950 générateur d'aléatoire (@pxref{lsh-make-seed,,, lsh, LSH Manual}) et de crée
11951 une paire de clefs dont la clef privée sera stockée dans le fichier
11952 @var{host-key} (@pxref{lshd basics,,, lsh, LSH Manual}).
11953
11954 Lorsque @var{interfaces} est vide, lshd écoute les connexions sur toutes les
11955 interfaces réseau ; autrement, @var{interfaces} doit être une liste de noms
11956 d'hôtes et d'adresses.
11957
11958 @var{allow-empty-passwords?} spécifie si les connexions avec des mots de
11959 passes vides sont acceptés et @var{root-login?} spécifie si la connexion en
11960 root est acceptée.
11961
11962 Les autres options devraient être évidentes.
11963 @end deffn
11964
11965 @cindex SSH
11966 @cindex serveur SSH
11967 @deffn {Variable Scheme} openssh-service-type
11968 C'est le type pour le démon ssh @uref{http://www.openssh.org, OpenSSH},
11969 @command{sshd}. Sa valeur doit être un enregistrement
11970 @code{openssh-configuration} comme dans cet exemple :
11971
11972 @example
11973 (service openssh-service-type
11974 (openssh-configuration
11975 (x11-forwarding? #t)
11976 (permit-root-login 'without-password)
11977 (authorized-keys
11978 `(("alice" ,(local-file "alice.pub"))
11979 ("bob" ,(local-file "bob.pub"))))))
11980 @end example
11981
11982 Voir plus bas pour trouver des détails sur @code{openssh-configuration}.
11983
11984 Ce service peut être étendu avec des clefs autorisées supplémentaires, comme
11985 dans cet exemple :
11986
11987 @example
11988 (service-extension openssh-service-type
11989 (const `(("charlie"
11990 ,(local-file "charlie.pub")))))
11991 @end example
11992 @end deffn
11993
11994 @deftp {Type de données} openssh-configuration
11995 C'est l'enregistrement de la configuration de la commande @command{sshd}
11996 d'OpenSSH.
11997
11998 @table @asis
11999 @item @code{pid-file} (par défaut : @code{"/var/run/sshd.pid"})
12000 Nom du fichier où @command{sshd} écrit son PID.
12001
12002 @item @code{port-number} (par défaut : @code{22})
12003 Port TCP sur lequel @command{sshd} écoute les connexions entrantes.
12004
12005 @item @code{permit-root-login} (par défaut : @code{#f})
12006 Ce champ détermine si et quand autoriser les connexions en root. Si la
12007 valeur est @code{#f}, les connexions en root sont désactivées ; si la valeur
12008 est @code{#t}, elles sont autorisées. S'il s'agit du symbole
12009 @code{'without-password}, alors les connexions root sont autorisées mais pas
12010 par une authentification par mot de passe.
12011
12012 @item @code{allow-empty-passwords?} (par défaut : @code{#f})
12013 Lorsque la valeur est vraie, les utilisateurs avec un mot de passe vide
12014 peuvent se connecter. Sinon, ils ne peuvent pas.
12015
12016 @item @code{password-authentication?} (par défaut : @code{#t})
12017 Lorsque la valeur est vraie, les utilisateurs peuvent se connecter avec leur
12018 mot de passe. Sinon, ils doivent utiliser une autre méthode
12019 d'authentification.
12020
12021 @item @code{public-key-authentication?} (par défaut : @code{#t})
12022 Lorsque la valeur est vraie, les utilisateurs peuvent se connecter avec leur
12023 clef publique. Sinon, les utilisateurs doivent utiliser une autre méthode
12024 d'authentification.
12025
12026 Les clefs publiques autorisées sont stockées dans
12027 @file{~/.ssh/authorized_keys}. Ce n'est utilisé que par le protocole
12028 version 2.
12029
12030 @item @code{x11-forwarding?} (par défaut : @code{#f})
12031 Lorsque la valeur est vraie, le transfert de connexion du client graphique
12032 X11 est activé — en d'autre termes, les options @option{-X} et @option{-Y}
12033 de @command{ssh} fonctionneront.
12034
12035 @item @code{allow-agent-forwarding?} (default: @code{#t})
12036 Whether to allow agent forwarding.
12037
12038 @item @code{allow-tcp-forwarding?} (default: @code{#t})
12039 Whether to allow TCP forwarding.
12040
12041 @item @code{gateway-ports?} (default: @code{#f})
12042 Whether to allow gateway ports.
12043
12044 @item @code{challenge-response-authentication?} (par défaut : @code{#f})
12045 Spécifie si l'authentification par défi est autorisée (p.@: ex.@: via PAM).
12046
12047 @item @code{use-pam?} (par défaut : @code{#t})
12048 Active l'interface avec le module d'authentification greffable, PAM. Si la
12049 valeur est @code{#t}, cela activera l'authentification PAM avec
12050 @code{challenge-response-authentication?} et
12051 @code{password-authentication?}, en plus des modules de compte et de session
12052 de PAM pour tous les types d'authentification.
12053
12054 Comme l'authentification par défi de PAM sert généralement un rôle
12055 équivalent à l'authentification par mot de passe, vous devriez désactiver
12056 soit @code{challenge-response-authentication?}, soit
12057 @code{password-authentication?}.
12058
12059 @item @code{print-last-log?} (par défaut : @code{#t})
12060 Spécifie si @command{sshd} devrait afficher la date et l'heure de dernière
12061 connexion des utilisateurs lorsqu'un utilisateur se connecte de manière
12062 interactive.
12063
12064 @item @code{subsystems} (par défaut : @code{'(("sftp" "internal-sftp"))})
12065 Configure les sous-systèmes externes (p.@: ex.@: le démon de transfert de
12066 fichiers).
12067
12068 C'est une liste de paires, composées chacune du nom du sous-système et d'une
12069 commande (avec éventuellement des arguments) à exécuter à la demande du
12070 sous-système.
12071
12072 La commande @command{internal-sftp} implémente un serveur SFTP dans le
12073 processus. Autrement, on peut spécifier la commande @command{sftp-server} :
12074 @example
12075 (service openssh-service-type
12076 (openssh-configuration
12077 (subsystems
12078 `(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))
12079 @end example
12080
12081 @item @code{accepted-environment} (par défaut : @code{'()})
12082 Liste de chaînes de caractères qui décrivent les variables d'environnement
12083 qui peuvent être exportées.
12084
12085 Chaque chaîne a sa propre ligne. Voir l'option @code{AcceptEnv} dans
12086 @code{man sshd_config}.
12087
12088 Cet exemple permet aux clients ssh d'exporter la variable @code{COLORTERM}.
12089 Elle est initialisée par les émulateurs de terminaux qui supportent les
12090 couleurs. Vous pouvez l'utiliser dans votre fichier de ressource de votre
12091 shell pour activer les couleurs sur la ligne de commande si cette variable
12092 est initialisée.
12093
12094 @example
12095 (service openssh-service-type
12096 (openssh-configuration
12097 (accepted-environment '("COLORTERM"))))
12098 @end example
12099
12100 @item @code{authorized-keys} (par défaut : @code{'()})
12101 @cindex clefs autorisées, SSH
12102 @cindex SSH, clefs autorisées
12103 C'est la liste des clefs autorisées. Chaque élément de la liste est un nom
12104 d'utilisateur suivit d'un ou plusieurs objets simili-fichiers qui
12105 représentent les clefs publiques SSH. Par exemple :
12106
12107 @example
12108 (openssh-configuration
12109 (authorized-keys
12110 `(("rekado" ,(local-file "rekado.pub"))
12111 ("chris" ,(local-file "chris.pub"))
12112 ("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))
12113 @end example
12114
12115 @noindent
12116 enregistre les clefs publiques spécifiées pour les comptes @code{rekado},
12117 @code{chris} et @code{root}.
12118
12119 Des clefs autorisées supplémentaires peuvent être spécifiées via
12120 @code{service-extension}.
12121
12122 Remarquez que cela n'interfère @emph{pas} avec l'utilisation de
12123 @file{~/.ssh/authorized_keys}.
12124 @end table
12125 @end deftp
12126
12127 @deffn {Procédure Scheme} dropbear-service [@var{config}]
12128 Lance le @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,démon SSH
12129 Dropbear} avec la configuration @var{config} donnée, un objet
12130 @code{<dropbear-configuration>}.
12131
12132 Par exemple, pour spécifier un service Dropbear qui écoute sur le port 1234,
12133 ajoutez cet appel au champ @code{services} d evotre système d'exploitation :
12134
12135 @example
12136 (dropbear-service (dropbear-configuration
12137 (port-number 1234)))
12138 @end example
12139 @end deffn
12140
12141 @deftp {Type de données} dropbear-configuration
12142 Ce type de données représente la configuration d'un démon SSH Dropbear.
12143
12144 @table @asis
12145 @item @code{dropbear} (par défaut : @var{dropbear})
12146 Le paquet Dropbear à utiliser.
12147
12148 @item @code{port-number} (par défaut : 22)
12149 Le port TCP sur lequel le démon attend des connexions entrantes.
12150
12151 @item @code{syslog-output?} (par défaut : @code{#t})
12152 Indique s'il faut activer la sortie vers syslog.
12153
12154 @item @code{pid-file} (par défaut : @code{"/var/run/dropbear.pid"})
12155 Nom du fichier de PID du démon.
12156
12157 @item @code{root-login?} (par défaut : @code{#f})
12158 Indique s'il faut autoriser les connexions en @code{root}.
12159
12160 @item @code{allow-empty-passwords?} (par défaut : @code{#f})
12161 Indique s'il faut autoriser les mots de passes vides.
12162
12163 @item @code{password-authentication?} (par défaut : @code{#t})
12164 Indique s'il faut autoriser l'authentification par mot de passe.
12165 @end table
12166 @end deftp
12167
12168 @defvr {Variable Scheme} %facebook-host-aliases
12169 Cette variable contient une chaîne de caractères à utiliser dans
12170 @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library Reference
12171 Manual}). Chaque ligne contient une entrée qui fait correspondre les noms
12172 des serveurs connus du service en ligne Facebook — p.@: ex.@:
12173 @code{www.facebook.com} — à l'hôte local — @code{127.0.0.1} ou son
12174 équivalent en IPv6, @code{::1}.
12175
12176 Cette variable est typiquement utilisée dans le champ @code{hosts-file}
12177 d'une déclaration @code{operating-system} (@pxref{Référence de système d'exploitation, @file{/etc/hosts}}) :
12178
12179 @example
12180 (use-modules (gnu) (guix))
12181
12182 (operating-system
12183 (host-name "mamachine")
12184 ;; ...
12185 (hosts-file
12186 ;; Crée un fichier /etc/hosts avec des alias pour « localhost »
12187 ;; et « mamachine », ainsi que pour les serveurs de Facebook.
12188 (plain-file "hosts"
12189 (string-append (local-host-aliases host-name)
12190 %facebook-host-aliases))))
12191 @end example
12192
12193 Ce mécanisme peut éviter que des programmes qui tournent localement, comme
12194 des navigateurs Web, ne se connectent à Facebook.
12195 @end defvr
12196
12197 Le module @code{(gnu services avahi)} fourni la définition suivante.
12198
12199 @deffn {Procédure Scheme} avahi-service [#:avahi @var{avahi}] @
12200 [#:host-name #f] [#:publish? #t] [#:ipv4? #t] @
12201 [#:ipv6? #t] [#:wide-area? #f] @
12202 [#:domains-to-browse '()] [#:debug? #f]
12203 Renvoie un service qui lance @command{avahi-daemon}, un serveur qui répond
12204 aux requêtes mDNS/DNS-SD qui permet de découvrir des services et de chercher
12205 des noms d'hôtes « sans configuration » (voir @uref{http://avahi.org/}) et
12206 qui étend le démon de cache de services de noms (nscd) pour qu'il puisse
12207 résoudre des noms en @code{.local} avec
12208 @uref{http://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. En plus,
12209 ajoute le paquet @var{avahi} au profil du système pour que les commandes
12210 comme @command{avahi-browse} soient directement utilisables.
12211
12212 Si @var{host-name} n'est pas @code{#f}, utilise cette valeur comme nom
12213 d'hôte à publier pour la machine ; sinon, utilise le vrai nom d'hôte de la
12214 machine.
12215
12216 Lorsque la valeur de @var{publish?} est vraie, la publication des noms
12217 d'hôtes et des domaines sont autorisés ; en particulier, avahi-daemon
12218 publiera le nom d'hôte et l'adresse IP de la machine via mDNS sur le réseau
12219 local.
12220
12221 Lorsque la valeur de @var{wide-area?} est vraie, DNS-SD sur DNS unicast est
12222 activé.
12223
12224 Les valeurs booléennes @var{ipv4?} et @var{ipv6?} déterminent s'il faut
12225 utiliser un socket IPv4 ou IPv6 respectivement.
12226 @end deffn
12227
12228 @deffn {Variable Scheme} openvswitch-service-type
12229 C'est le type du service @uref{http://www.openvswitch.org, Open vSwitch},
12230 dont la valeur devrait être un objet @code{openvswitch-configuration}.
12231 @end deffn
12232
12233 @deftp {Type de données} openvswitch-configuration
12234 Type de données représentant la configuration de Open vSwitch, un
12235 commutateur virtuel multiniveaux conçu pour rendre possible l'automatisation
12236 massive des réseaux avec des extensions programmables.
12237
12238 @table @asis
12239 @item @code{package} (par défaut : @var{openvswitch})
12240 Objet de paquet de Open vSwitch.
12241
12242 @end table
12243 @end deftp
12244
12245 @node Système de fenêtrage X
12246 @subsubsection Système de fenêtrage X
12247
12248 @cindex X11
12249 @cindex Système de fenêtrage X
12250 @cindex gestionnaire de connexion
12251 Le support pour le système d'affichage graphique X Window — en particulier
12252 Xorg — est fournit par le module @code{(gnu services xorg)}. Remarquez
12253 qu'il n'y a pas de procédure @code{xorg-service}. À la place, le serveur X
12254 est démarré par le @dfn{gestionnaire de connexion}, par défaut SLiM.
12255
12256 @cindex gestionnaire de fenêtre
12257 Pour utiliser X11, vous devez installer au moins un @dfn{gestionnaire de
12258 fenêtre} — par exemple les paquets @code{windowmaker} ou @code{openbox} — de
12259 préférence en l'ajoutant au champ @code{packages} de votre définition de
12260 système d'exploitation (@pxref{Référence de système d'exploitation, system-wide
12261 packages}).
12262
12263 @defvr {Variable Scheme} slim-service-type
12264 C'est de type pour le gestionnaire de connexion graphique SLiM pour X11.
12265
12266 @cindex types de sessions (X11)
12267 @cindex X11, types de sessions
12268 SLiM cherche des @dfn{types de sessions} définies par les fichiers
12269 @file{.desktop} dans @file{/run/current-system/profile/share/xsessions} et
12270 permet aux utilisateurs de choisir une session depuis l'écran de connexion
12271 avec @kbd{F1}. Les paquets comme @code{xfce}, @code{sawfish} et
12272 @code{ratpoison} fournissent des fichiers @file{.desktop} ; les ajouter à
12273 l'ensemble des paquets du système les rendra automatiquement disponibles sur
12274 l'écran de connexion.
12275
12276 En plus, les fichiers @file{~/.xsession} sont honorées. Lorsqu'il est
12277 disponible, @file{~/.xsession} doit être un fichier exécutable qui démarre
12278 un gestionnaire de fenêtre au un autre client X.
12279 @end defvr
12280
12281 @deftp {Type de données} slim-configuration
12282 Type de données représentant la configuration de @code{slim-service-type}.
12283
12284 @table @asis
12285 @item @code{allow-empty-passwords?} (par défaut : @code{#t})
12286 S'il faut autoriser les connexions avec un mot de passe vide.
12287
12288 @item @code{auto-login?} (par défaut : @code{#f})
12289 @itemx @code{default-user} (par défaut : @code{""})
12290 Lorsque @code{auto-login?} est faux, SLiM présent un écran de connexion.
12291
12292 Lorsque @code{auto-login?} est vrai, SLiM se connecte directement en tant
12293 que @code{default-user}.
12294
12295 @item @code{theme} (par défaut : @code{%default-slim-theme})
12296 @itemx @code{theme-name} (par défaut : @code{%default-slim-theme-name})
12297 Le thème graphique à utiliser et son nom.
12298
12299 @item @code{auto-login-session} (par défaut : @code{#f})
12300 Si la valeur est vraie, elle doit être le nom d'un exécutable à démarrer
12301 comme session par défaut — p.@: ex.@: @code{(file-append windowmaker
12302 "/bin/windowmaker")}.
12303
12304 Si la valeur est fausse, une session décrite par l'un des fichiers
12305 @file{.desktop} disponibles dans @code{/run/current-system/profile} et
12306 @code{~/.guix-profile} sera utilisée.
12307
12308 @quotation Remarque
12309 Vous devez installer au moins un gestionnaire de fenêtres dans le profil du
12310 système ou dans votre profil utilisateur. Sinon, si
12311 @code{auto-login-session} est faux, vous ne serez jamais capable de vous
12312 connecter.
12313 @end quotation
12314
12315 @item @code{startx} (par défaut : @code{(xorg-start-command)})
12316 La commande utilisée pour démarrer le serveur graphique X11.
12317
12318 @item @code{xauth} (par défaut : @code{xauth})
12319 Le paquet XAuth à utiliser.
12320
12321 @item @code{shepherd} (par défaut : @code{shepherd})
12322 Le paquet Shepherd à utiliser pour invoquer @command{halt} et
12323 @command{reboot}.
12324
12325 @item @code{sessreg} (par défaut : @code{sessreg})
12326 Le paquet sessreg à utiliser pour enregistrer la session.
12327
12328 @item @code{slim} (par défaut : @code{slim})
12329 Le paquet SLiM à utiliser.
12330 @end table
12331 @end deftp
12332
12333 @defvr {Variable Scheme} %default-theme
12334 @defvrx {Variable Scheme} %default-theme-name
12335 Le thème SLiM par défaut et son nom.
12336 @end defvr
12337
12338
12339 @deftp {Type de données} sddm-configuration
12340 C'est le type de données représentant la configuration du service sddm.
12341
12342 @table @asis
12343 @item @code{display-server} (par défaut : "x11")
12344 Choisit le serveur d'affichage à utiliser pour l'écran d'accueil. Les
12345 valeurs valides sont « x11 » et « wayland ».
12346
12347 @item @code{numlock} (par défaut : "on")
12348 Les valeurs valides sont « on », « off » ou « none ».
12349
12350 @item @code{halt-command} (par défaut : @code{#~(string-apppend #$shepherd "/sbin/halt")})
12351 La commande à lancer à l'arrêt du système.
12352
12353 @item @code{reboot-command} (par défaut : @code{#~(string-append #$shepherd "/sbin/reboot")})
12354 La commande à lancer lors du redémarrage du système.
12355
12356 @item @code{theme} (par défaut : "maldives")
12357 Le thème à utiliser. Les thèmes par défaut fournis par SDDM sont « elarun »
12358 et « maldives ».
12359
12360 @item @code{themes-directory} (par défaut : "/run/current-system/profile/share/sddm/themes")
12361 Le répertoire où se trouvent les thèmes.
12362
12363 @item @code{faces-directory} (par défaut : "/run/current-system/profile/share/sddm/faces")
12364 Répertoire où se trouvent les avatars.
12365
12366 @item @code{default-path} (par défaut : "/run/current-system/profile/bin")
12367 Le PATH par défaut à utiliser.
12368
12369 @item @code{minimum-uid} (par défaut : 1000)
12370 UID minimum pour être affiché dans SDDM.
12371
12372 @item @code{maximum-uid} (par défaut : 2000)
12373 UID maximum pour être affiché dans SDDM.
12374
12375 @item @code{remember-last-user?} (par défaut : #t)
12376 S'il faut se rappeler le dernier utilisateur connecté.
12377
12378 @item @code{remember-last-session?} (par défaut : #t)
12379 S'il faut se rappeler la dernière session.
12380
12381 @item @code{hide-users} (par défaut : "")
12382 Les noms d'utilisateurs à cacher sur l'écran d'accueil de SDDM.
12383
12384 @item @code{hide-shells} (par défaut : @code{#~(string-append #$shadow "/sbin/nologin")})
12385 Les utilisateurs avec les shells listés seront cachés sur l'écran d'accueil
12386 de SDDM.
12387
12388 @item @code{session-command} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/wayland-session")})
12389 Le script à lancer avant de démarrer une session wayland.
12390
12391 @item @code{sessions-directory} (par défaut : "/run/current-system/profile/share/wayland-sessions")
12392 Le répertoire où trouver les fichiers .desktop qui démarrent des sessions
12393 wayland.
12394
12395 @item @code{xorg-server-path} (par défaut : @code{xorg-start-command})
12396 Chemin vers xorg-server.
12397
12398 @item @code{xauth-path} (par défaut : @code{#~(string-append #$xauth "/bin/xauth")})
12399 Chemin vers xauth.
12400
12401 @item @code{xephyr-path} (par défaut : @code{#~(string-append #$xorg-server "/bin/Xephyr")})
12402 Chemin vers Xephyr.
12403
12404 @item @code{xdisplay-start} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/Xsetup")})
12405 Le script à lancer après avoir démarré xorg-server.
12406
12407 @item @code{xdisplay-stop} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/Xstop")})
12408 Le script à lancer avant d'arrêter xorg-server.
12409
12410 @item @code{xsession-command} (par défaut : @code{xinitrc})
12411 Le script à lancer avant de démarrer une session X.
12412
12413 @item @code{xsessions-directory} (par défaut : "/run/current-system/profile/share/xsessions")
12414 Répertoire où trouver les fichiers .desktop pour les sessions X.
12415
12416 @item @code{minimum-vt} (par défaut : 7)
12417 VT minimal à utiliser.
12418
12419 @item @code{xserver-arguments} (par défaut : "-nolisten tcp")
12420 Arguments à passer à xorg-server.
12421
12422 @item @code{auto-login-user} (par défaut : "")
12423 Utilisateur à utiliser pour la connexion automatique.
12424
12425 @item @code{auto-login-session} (par défaut : "")
12426 Le fichier desktop à utiliser pour la connexion automatique.
12427
12428 @item @code{relogin?} (par défaut : #f)
12429 S'il faut se reconnecter après la déconnexion.
12430
12431 @end table
12432 @end deftp
12433
12434 @cindex gestionnaire de connexion
12435 @cindex connexion X11
12436 @deffn {Procédure Scheme} sddm-service config
12437 Renvoie un service qui démarre le gestionnaire de connexion graphique SDDM
12438 avec une configuration de type @code{<sddm-configuration>}.
12439
12440 @example
12441 (sddm-service (sddm-configuration
12442 (auto-login-user "Alice")
12443 (auto-login-session "xfce.desktop")))
12444 @end example
12445 @end deffn
12446
12447 @deffn {Procédure Scheme} xorg-start-command [#:guile] @
12448 [#:modules %default-xorg-modules] @
12449 [#:fonts %default-xorg-fonts] @
12450 [#:configuration-file (xorg-configuration-file @dots{})] @
12451 [#:xorg-server @var{xorg-server}]
12452 Renvoie un script @code{startx} dans lequel @var{modules}, une liste de
12453 paquets de modules X et @var{fonts}, une liste de répertoires de polices X,
12454 sont disponibles. Voir @code{xorg-wrapper} pour plus de détails sur les
12455 arguments. Le résultat devrait être utilisé à la place de @code{startx}.
12456
12457 Habituellement le serveur X est démarré par un gestionnaire de connexion.
12458 @end deffn
12459
12460 @deffn {Procédure Scheme} xorg-configuration-file @
12461 [#:modules %default-xorg-modules] @
12462 [#:fonts %default-xorg-fonts] @
12463 [#:drivers '()] [#:resolutions '()] [#:extra-config '()]
12464 Renvoie un fichier de configuration pour le serveur Xorg qui contient des
12465 chemins de recherche pour tous les pilotes communs.
12466
12467 @var{modules} doit être une liste de @dfn{paquets de modules} chargés par le
12468 serveur Xorg — p.@: ex.@: @code{xf86-video-vesa}, @code{xf86-input-keyboard}
12469 etc. @var{fonts} doit être une liste de répertoires de polices à ajouter au
12470 @dfn{chemin de polices} du serveur.
12471
12472 @var{drivers} doit être soit la liste vide, auquel cas Xorg choisis un
12473 pilote graphique automatiquement, soit une liste de noms de pilotes qui
12474 seront essayés dans cet ordre — p.@: ex.@: @code{("modesetting" "vesa")}.
12475
12476 De même, lorsque @var{resolutions} est la liste vide, Xorg choisis une
12477 résolution d'écran appropriée ; autrement, ce doit être une liste de
12478 résolutions — p.@: ex.@: @code{((1024 768) (640 480))}.
12479
12480 Enfin, @var{extra-config} est une liste de chaînes de caractères ou d'objets
12481 ajoutés au fichier de configuration. Elle est utilisée pour passer du texte
12482 supplémentaire à être ajouté directement au fichier de configuration.
12483
12484 @cindex disposition clavier
12485 @cindex disposition du clavier
12486 Cette procédure est particulièrement utile pour configurer une disposition
12487 de clavier différente de la disposition US par défaut. Par exemple, pour
12488 utiliser la disposition « bépo » par défaut sur le gestionnaire d'affichage
12489 :
12490
12491 @example
12492 (define bepo-evdev
12493 "Section \"InputClass\"
12494 Identifier \"evdev keyboard catchall\"
12495 Driver \"evdev\"
12496 MatchIsKeyboard \"on\"
12497 Option \"xkb_layout\" \"fr\"
12498 Option \"xkb_variant\" \"bepo\"
12499 EndSection")
12500
12501 (operating-system
12502 ...
12503 (services
12504 (modify-services %desktop-services
12505 (slim-service-type config =>
12506 (slim-configuration
12507 (inherit config)
12508 (startx (xorg-start-command
12509 #:configuration-file
12510 (xorg-configuration-file
12511 #:extra-config
12512 (list bepo-evdev)))))))))
12513 @end example
12514
12515 La ligne @code{MatchIsKeyboard} spécifie que nous n'appliquons la
12516 configuration qu'aux claviers. Sans cette ligne, d'autres périphériques
12517 comme les pavés tactiles ne fonctionneront pas correctement parce qu'ils
12518 seront associés au mauvais pilote. Dans cet exemple, l'utilisateur
12519 utiliserait typiquement @code{setxkbmap fr bepo} pour utiliser sa
12520 disposition de clavier préférée une fois connecté. Le premier argument
12521 correspond à la disposition, tandis que le second argument correspond à la
12522 variante. La ligne @code{xkb_variant} peut être omise pour choisir la
12523 variante par défaut.
12524 @end deffn
12525
12526 @deffn {Procédure Scheme} screen-locker-service @var{package} [@var{program}]
12527 Ajoute @var{package}, un paquet pour un verrouiller l'écran ou un
12528 économiseur d'écran dont la commande est @var{program}, à l'ensemble des
12529 programmes setuid et lui ajoute une entrée PAM. Par exemple :
12530
12531 @lisp
12532 (screen-locker-service xlockmore "xlock")
12533 @end lisp
12534
12535 rend utilisable le bon vieux XlockMore.
12536 @end deffn
12537
12538
12539 @node Services d'impression
12540 @subsubsection Services d'impression
12541
12542 @cindex support des imprimantes avec CUPS
12543 Le module @code{(gnu services cups)} fournit une définition de service Guix
12544 pour le service d'impression CUPS. Pour ajouter le support d'une imprimante
12545 à un système GuixSD, ajoutez un @code{cups-service} à la définition du
12546 système d'exploitation :
12547
12548 @deffn {Variable Scheme} cups-service-type
12549 Le type de service pour un serveur d'impression CUPS. Sa valeur devrait
12550 être une configuration CUPS valide (voir plus bas). Pour utiliser les
12551 paramètres par défaut, écrivez simplement :
12552 @example
12553 (service cups-service-type)
12554 @end example
12555 @end deffn
12556
12557 La configuration de CUPS contrôle les paramètres de base de votre
12558 installation CUPS : sur quelles interfaces il doit écouter, que faire si un
12559 travail échoue, combien de journalisation il faut faire, etc. Pour ajouter
12560 une imprimante, vous devrez visiter l'URL @url{http://localhost:631} ou
12561 utiliser un outil comme les services de configuration d'imprimante de
12562 GNOME. Par défaut, la configuration du service CUPS générera un certificat
12563 auto-signé si besoin, pour les connexions sécurisée avec le serveur
12564 d'impression.
12565
12566 Suppose you want to enable the Web interface of CUPS and also add support
12567 for Epson printers @i{via} the @code{escpr} package and for HP printers
12568 @i{via} the @code{hplip-minimal} package. You can do that directly, like
12569 this (you need to use the @code{(gnu packages cups)} module):
12570
12571 @example
12572 (service cups-service-type
12573 (cups-configuration
12574 (web-interface? #t)
12575 (extensions
12576 (list cups-filters escpr hplip-minimal))))
12577 @end example
12578
12579 Note: If you wish to use the Qt5 based GUI which comes with the hplip
12580 package then it is suggested that you install the @code{hplip} package,
12581 either in your OS configuration file or as your user.
12582
12583 Les paramètres de configuration disponibles sont les suivants. Chaque
12584 définition des paramètres est précédé par son type ; par exemple,
12585 @samp{string-list foo} indique que le paramètre @code{foo} devrait être
12586 spécifié comme une liste de chaînes de caractères. Il y a aussi une manière
12587 de spécifier la configuration comme une chaîne de caractères, si vous avez
12588 un vieux fichier @code{cupsd.conf} que vous voulez porter depuis un autre
12589 système ; voir la fin pour plus de détails.
12590
12591 @c The following documentation was initially generated by
12592 @c (generate-documentation) in (gnu services cups). Manually maintained
12593 @c documentation is better, so we shouldn't hesitate to edit below as
12594 @c needed. However if the change you want to make to this documentation
12595 @c can be done in an automated way, it's probably easier to change
12596 @c (generate-documentation) than to make it below and have to deal with
12597 @c the churn as CUPS updates.
12598
12599
12600 Les champs de @code{cups-configuration} disponibles sont :
12601
12602 @deftypevr {paramètre de @code{cups-configuration}} package cups
12603 Le paquet CUPS.
12604 @end deftypevr
12605
12606 @deftypevr {paramètre de @code{cups-configuration}} package-list extensions
12607 Pilotes et autres extensions du paquet CUPS.
12608 @end deftypevr
12609
12610 @deftypevr {paramètre de @code{cups-configuration}} files-configuration files-configuration
12611 Configuration de l'emplacement où écrire les journaux, quels répertoires
12612 utiliser pour les travaux d'impression et les paramètres de configuration
12613 privilégiés liés.
12614
12615 Les champs @code{files-configuration} disponibles sont :
12616
12617 @deftypevr {paramètre de @code{files-configuration}} log-location access-log
12618 Définit le fichier de journal d'accès. Spécifier un nom de fichier vide
12619 désactive la génération de journaux d'accès. La valeur @code{stderr} fait
12620 que les entrées du journal seront envoyés sur l'erreur standard lorsque
12621 l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
12622 lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
12623 entrées du journal sont envoyées au démon de journalisation du système. Le
12624 nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
12625 @code{%s}, comme dans @code{/var/log/cups/%s-access_log}.
12626
12627 La valeur par défaut est @samp{"/var/log/cups/access_log"}.
12628 @end deftypevr
12629
12630 @deftypevr {paramètre de @code{files-configuration}} file-name cache-dir
12631 L'emplacement où CUPS devrait mettre les données en cache.
12632
12633 La valeur par défaut est @samp{"/var/cache/cups"}.
12634 @end deftypevr
12635
12636 @deftypevr {paramètre de @code{files-configuration}} string config-file-perm
12637 Spécifie les permissions pour tous les fichiers de configuration que
12638 l'ordonnanceur écrit.
12639
12640 Remarquez que les permissions pour le fichier printers.conf sont
12641 actuellement masqués pour ne permettre que l'accès par l'utilisateur de
12642 l'ordonnanceur (typiquement root). La raison est que les URI des
12643 imprimantes contiennent des informations d'authentification sensibles qui ne
12644 devraient pas être connues sur le système. Il n'est pas possible de
12645 désactiver cette fonctionnalité de sécurité.
12646
12647 La valeur par défaut est @samp{"0640"}.
12648 @end deftypevr
12649
12650 @deftypevr {paramètre de @code{files-configuration}} log-location error-log
12651 Définit le fichier de journal d'erreur. Spécifier un nom de fichier vide
12652 désactive la génération de journaux d'erreur. La valeur @code{stderr} fait
12653 que les entrées du journal seront envoyés sur l'erreur standard lorsque
12654 l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
12655 lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
12656 entrées du journal sont envoyées au démon de journalisation du système. Le
12657 nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
12658 @code{%s}, comme dans @code{/var/log/cups/%s-error_log}.
12659
12660 La valeur par défaut est @samp{"/var/log/cups/error_log"}.
12661 @end deftypevr
12662
12663 @deftypevr {paramètre de @code{files-configuration}} string fatal-errors
12664 Spécifie quelles erreurs sont fatales, qui font terminer l'ordonnanceur.
12665 Les types de chaînes sont :
12666
12667 @table @code
12668 @item none
12669 Aucune erreur n'est fatale.
12670
12671 @item all
12672 Toutes les erreurs ci-dessous sont fatales.
12673
12674 @item browse
12675 Les erreurs d'initialisation de la navigation sont fatales, par exemple les
12676 connexion échouées au démon DNS-SD.
12677
12678 @item config
12679 Les erreurs de syntaxe du fichier de configuration sont fatale.
12680
12681 @item listen
12682 Les erreurs d'écoute ou de port sont fatales, sauf pour les erreurs d'IPv6
12683 sur la boucle locale ou les adresses @code{any}.
12684
12685 @item log
12686 Les erreurs de création ou d'écriture des fichiers de journal sont fatales.
12687
12688 @item permissions
12689 Les mauvaises permissions des fichiers de démarrage sont fatales, par
12690 exemple un certificat TLS et des fichiers de clefs avec des permissions
12691 permettant la lecture à tout le monde.
12692 @end table
12693
12694 La valeur par défaut est @samp{"all -browse"}.
12695 @end deftypevr
12696
12697 @deftypevr {paramètre de @code{files-configuration}} boolean file-device?
12698 Spécifie si le fichier de pseudo-périphérique peut être utilisé pour de
12699 nouvelles queues d'impression. L'URI @uref{file:///dev/null} est toujours
12700 permise.
12701
12702 La valeur par défaut est @samp{#f}.
12703 @end deftypevr
12704
12705 @deftypevr {paramètre de @code{files-configuration}} string group
12706 Spécifie le nom ou l'ID du groupe qui sera utilisé lors de l'exécution de
12707 programmes externes.
12708
12709 La valeur par défaut est @samp{"lp"}.
12710 @end deftypevr
12711
12712 @deftypevr {paramètre de @code{files-configuration}} string log-file-perm
12713 Spécifie les permissions pour tous les fichiers de journal que
12714 l'ordonnanceur écrit.
12715
12716 La valeur par défaut est @samp{"0644"}.
12717 @end deftypevr
12718
12719 @deftypevr {paramètre de @code{files-configuration}} log-location page-log
12720 Définit le fichier de journal de page. Spécifier un nom de fichier vide
12721 désactive la génération de journaux de pages. La valeur @code{stderr} fait
12722 que les entrées du journal seront envoyés sur l'erreur standard lorsque
12723 l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
12724 lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
12725 entrées du journal sont envoyées au démon de journalisation du système. Le
12726 nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
12727 @code{%s}, comme dans @code{/var/log/cups/%s-page_log}.
12728
12729 La valeur par défaut est @samp{"/var/log/cups/page_log"}.
12730 @end deftypevr
12731
12732 @deftypevr {paramètre de @code{files-configuration}} string remote-root
12733 Spécifie le nom d'utilisateur associé aux accès non authentifiés par des
12734 clients qui se disent être l'utilisateur root. La valeur par défaut est
12735 @code{remroot}.
12736
12737 La valeur par défaut est @samp{"remroot"}.
12738 @end deftypevr
12739
12740 @deftypevr {paramètre de @code{files-configuration}} file-name request-root
12741 Spécifie le répertoire qui contient les travaux d'impression et d'autres
12742 données des requêtes HTTP.
12743
12744 La valeur par défaut est @samp{"/var/spool/cups"}.
12745 @end deftypevr
12746
12747 @deftypevr {paramètre de @code{files-configuration}} sandboxing sandboxing
12748 Spécifie le niveau d'isolation de sécurité appliqué aux filtres
12749 d'impression, aux moteurs et aux autres processus fils de l'ordonnanceur ;
12750 soit @code{relaxed} soit @code{strict}. Cette directive n'est actuellement
12751 utilisée et supportée que sur macOS.
12752
12753 La valeur par défaut est @samp{strict}.
12754 @end deftypevr
12755
12756 @deftypevr {paramètre de @code{files-configuration}} file-name server-keychain
12757 Spécifie l'emplacement des certifications TLS et des clefs privées. CUPS
12758 cherchera les clefs publiques et privées dans ce répertoire : un fichier
12759 @code{.crt} pour un certificat encodé en PEM et le fichier @code{.key}
12760 correspondant pour la clef privée encodée en PEM.
12761
12762 La valeur par défaut est @samp{"/etc/cups/ssl"}.
12763 @end deftypevr
12764
12765 @deftypevr {paramètre de @code{files-configuration}} file-name server-root
12766 Spécifie le répertoire contenant les fichiers de configuration du serveur.
12767
12768 La valeur par défaut est @samp{"/etc/cups"}.
12769 @end deftypevr
12770
12771 @deftypevr {paramètre de @code{files-configuration}} boolean sync-on-close?
12772 Spécifie si l'ordonnanceur appelle fsync(2) après avoir écrit la
12773 configuration ou les fichiers d'état.
12774
12775 La valeur par défaut est @samp{#f}.
12776 @end deftypevr
12777
12778 @deftypevr {paramètre de @code{files-configuration}} space-separated-string-list system-group
12779 Spécifie le groupe ou les groupes à utiliser pour l'authentification du
12780 groupe @code{@@SYSTEM}.
12781 @end deftypevr
12782
12783 @deftypevr {paramètre de @code{files-configuration}} file-name temp-dir
12784 Spécifie le répertoire où les fichiers temporaires sont stockés.
12785
12786 La valeur par défaut est @samp{"/var/spool/cups/tmp"}.
12787 @end deftypevr
12788
12789 @deftypevr {paramètre de @code{files-configuration}} string user
12790 Spécifie le nom d'utilisateur ou l'ID utilisé pour lancer des programmes
12791 externes.
12792
12793 La valeur par défaut est @samp{"lp"}.
12794 @end deftypevr
12795 @end deftypevr
12796
12797 @deftypevr {paramètre de @code{cups-configuration}} access-log-level access-log-level
12798 Spécifie le niveau de journalisation pour le fichier AccessLog. Le niveau
12799 @code{config} enregistre les ajouts, suppressions et modifications
12800 d'imprimantes et de classes et lorsque les fichiers de configuration sont
12801 accédés ou mis à jour. Le niveau @code{actions} enregistre la soumission,
12802 la suspension, la libération, la modification et l'annulation des travaux et
12803 toutes les conditions de @code{config}. Le niveau @code{all} enregistre
12804 toutes les requêtes.
12805
12806 La valeur par défaut est @samp{actions}.
12807 @end deftypevr
12808
12809 @deftypevr {paramètre de @code{cups-configuration}} boolean auto-purge-jobs?
12810 Spécifie s'il faut vider l'historique des travaux automatiquement lorsqu'il
12811 n'est plus nécessaire pour les quotas.
12812
12813 La valeur par défaut est @samp{#f}.
12814 @end deftypevr
12815
12816 @deftypevr {paramètre de @code{cups-configuration}} browse-local-protocols browse-local-protocols
12817 Spécifie les protocoles à utiliser pour partager les imprimantes sur le
12818 réseau local.
12819
12820 La valeur par défaut est @samp{dnssd}.
12821 @end deftypevr
12822
12823 @deftypevr {paramètre de @code{cups-configuration}} boolean browse-web-if?
12824 Spécifie si l'interface web de CUPS est publiée.
12825
12826 La valeur par défaut est @samp{#f}.
12827 @end deftypevr
12828
12829 @deftypevr {paramètre de @code{cups-configuration}} boolean browsing?
12830 Spécifie si les imprimantes partagées sont publiées.
12831
12832 La valeur par défaut est @samp{#f}.
12833 @end deftypevr
12834
12835 @deftypevr {paramètre de @code{cups-configuration}} string classification
12836 Spécifie la classification de sécurité du serveur. N'importe quel nom de
12837 bannière peut être utilisé, comme « classifié », « confidentiel », « secret
12838 », « top secret » et « déclassifié » ou la bannière peut être omise pour
12839 désactiver les fonctions d'impression sécurisées.
12840
12841 La valeur par défaut est @samp{""}.
12842 @end deftypevr
12843
12844 @deftypevr {paramètre de @code{cups-configuration}} boolean classify-override?
12845 Spécifie si les utilisateurs peuvent remplacer la classification (page de
12846 couverture) des travaux d'impression individuels avec l'option
12847 @code{job-sheets}.
12848
12849 La valeur par défaut est @samp{#f}.
12850 @end deftypevr
12851
12852 @deftypevr {paramètre de @code{cups-configuration}} default-auth-type default-auth-type
12853 Spécifie le type d'authentification par défaut à utiliser.
12854
12855 La valeur par défaut est @samp{Basic}.
12856 @end deftypevr
12857
12858 @deftypevr {paramètre de @code{cups-configuration}} default-encryption default-encryption
12859 Spécifie si le chiffrement sera utilisé pour les requêtes authentifiées.
12860
12861 La valeur par défaut est @samp{Required}.
12862 @end deftypevr
12863
12864 @deftypevr {paramètre de @code{cups-configuration}} string default-language
12865 Spécifie la langue par défaut à utiliser pour le contenu textuel et web.
12866
12867 La valeur par défaut est @samp{"en"}.
12868 @end deftypevr
12869
12870 @deftypevr {paramètre de @code{cups-configuration}} string default-paper-size
12871 Spécifie la taille de papier par défaut pour les nouvelles queues
12872 d'impression. @samp{"Auto"} utilise la valeur par défaut du paramètre de
12873 régionalisation, tandis que @samp{"None"} spécifie qu'il n'y a pas de taille
12874 par défaut. Des noms de tailles spécifique sont par exemple @samp{"Letter"}
12875 et @samp{"A4"}.
12876
12877 La valeur par défaut est @samp{"Auto"}.
12878 @end deftypevr
12879
12880 @deftypevr {paramètre de @code{cups-configuration}} string default-policy
12881 Spécifie la politique d'accès par défaut à utiliser.
12882
12883 La valeur par défaut est @samp{"default"}.
12884 @end deftypevr
12885
12886 @deftypevr {paramètre de @code{cups-configuration}} boolean default-shared?
12887 Spécifie si les imprimantes locales sont partagées par défaut.
12888
12889 La valeur par défaut est @samp{#t}.
12890 @end deftypevr
12891
12892 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer dirty-clean-interval
12893 Spécifie le délai pour mettre à jour les fichiers de configuration et
12894 d'état. Une valeur de 0 fait que la mise à jour arrive aussi vite que
12895 possible, typiquement en quelques millisecondes.
12896
12897 La valeur par défaut est @samp{30}.
12898 @end deftypevr
12899
12900 @deftypevr {paramètre de @code{cups-configuration}} error-policy error-policy
12901 Spécifie ce qu'il faut faire si une erreur a lieu. Les valeurs possibles
12902 sont @code{abort-job}, qui supprimera les travaux d'impression en échec ;
12903 @code{retry-job}, qui tentera de nouveau l'impression plus tard ;
12904 @code{retry-this-job}, qui retentera l'impression immédiatement ; et
12905 @code{stop-printer} qui arrête l'imprimante.
12906
12907 La valeur par défaut est @samp{stop-printer}.
12908 @end deftypevr
12909
12910 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer filter-limit
12911 Spécifie le coût maximum des filtres qui sont lancés en même temps, pour
12912 minimiser les problèmes de ressources de disque, de mémoire et de CPU. Une
12913 limite de 0 désactive la limite de filtrage. Une impression standard vers
12914 une imprimante non-PostScript requirt une limite de filtre d'environ 200.
12915 Une imprimante PostScript requiert environ la moitié (100). Mettre en place
12916 la limite en dessous de ces valeurs limitera l'ordonnanceur à un seul
12917 travail d'impression à la fois.
12918
12919 La valeur par défaut est @samp{0}.
12920 @end deftypevr
12921
12922 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer filter-nice
12923 Spécifie la priorité des filtres de l'ordonnanceur qui sont lancés pour
12924 imprimer un travail. La valeur va de 0, la plus grande priorité, à 19, la
12925 plus basse priorité.
12926
12927 La valeur par défaut est @samp{0}.
12928 @end deftypevr
12929
12930 @deftypevr {paramètre de @code{cups-configuration}} host-name-lookups host-name-lookups
12931 Spécifie s'il faut faire des résolutions inverses sur les clients qui se
12932 connectent. Le paramètre @code{double} fait que @code{cupsd} vérifie que le
12933 nom d'hôte résolu depuis l'adresse correspond à l'une des adresses renvoyées
12934 par ce nom d'hôte. Les résolutions doubles évitent aussi que des clients
12935 avec des adresses non enregistrées ne s'adressent à votre serveur.
12936 N'initialisez cette valeur qu'à @code{#t} ou @code{double} que si c'est
12937 absolument nécessaire.
12938
12939 La valeur par défaut est @samp{#f}.
12940 @end deftypevr
12941
12942 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-kill-delay
12943 Spécifie le nombre de secondes à attendre avant de tuer les filtres et les
12944 moteurs associés avec un travail annulé ou suspendu.
12945
12946 La valeur par défaut est @samp{30}.
12947 @end deftypevr
12948
12949 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-retry-interval
12950 Spécifie l'intervalle des nouvelles tentatives en secondes. C'est
12951 typiquement utilisé pour les queues de fax mais peut aussi être utilisé avec
12952 des queues d'impressions normales dont la politique d'erreur est
12953 @code{retry-job} ou @code{retry-current-job}.
12954
12955 La valeur par défaut est @samp{30}.
12956 @end deftypevr
12957
12958 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-retry-limit
12959 Spécifie le nombre de nouvelles tentatives pour les travaux. C'est
12960 typiquement utilisé pour les queues de fax mais peut aussi être utilisé pour
12961 les queues d'impressions dont la politique d'erreur est @code{retry-job} ou
12962 @code{retry-current-job}.
12963
12964 La valeur par défaut est @samp{5}.
12965 @end deftypevr
12966
12967 @deftypevr {paramètre de @code{cups-configuration}} boolean keep-alive?
12968 Spécifie s'il faut supporter les connexion HTTP keep-alive.
12969
12970 La valeur par défaut est @samp{#t}.
12971 @end deftypevr
12972
12973 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer keep-alive-timeout
12974 Spécifie combien de temps les connexions inactives avec les clients restent
12975 ouvertes, en secondes.
12976
12977 La valeur par défaut est @samp{30}.
12978 @end deftypevr
12979
12980 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer limit-request-body
12981 Spécifie la taille maximale des fichiers à imprimer, des requêtes IPP et des
12982 données de formulaires HTML. Une limite de 0 désactive la vérification de
12983 la limite.
12984
12985 La valeur par défaut est @samp{0}.
12986 @end deftypevr
12987
12988 @deftypevr {paramètre de @code{cups-configuration}} multiline-string-list listen
12989 Écoute sur les interfaces spécifiées. Les valeurs valides sont de la forme
12990 @var{adresse}:@var{port}, où @var{adresse} est sotit une daresse IPv6 dans
12991 des crochets, soit une adresse IPv4, soit @code{*} pour indiquer toutes les
12992 adresses. Les valeurs peuvent aussi être des noms de fichiers de socket
12993 UNIX domain. La directive Listen est similaire à la directive Port mais
12994 vous permet de restreindre l'accès à des interfaces ou des réseaux
12995 spécifiques.
12996 @end deftypevr
12997
12998 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer listen-back-log
12999 Spécifie le nombre de connexions en attente qui seront permises. Ça
13000 n'affecte normalement que les serveurs très actifs qui ont atteint la limite
13001 MaxClients, mais peut aussi être déclenché par un grand nombre de connexions
13002 simultanées. Lorsque la limite est atteinte, le système d'exploitation
13003 refusera les connexions supplémentaires jusqu'à ce que l'ordonnanceur
13004 accepte les connexions en attente.
13005
13006 La valeur par défaut est @samp{128}.
13007 @end deftypevr
13008
13009 @deftypevr {paramètre de @code{cups-configuration}} location-access-control-list location-access-controls
13010 Spécifie un ensemble de contrôles d'accès supplémentaires.
13011
13012 Les champs de @code{location-access-controls} disponibles sont :
13013
13014 @deftypevr {paramètre de @code{location-access-controls}} file-name path
13015 Spécifie le chemin d'URI auquel les contrôles d'accès s'appliquent.
13016 @end deftypevr
13017
13018 @deftypevr {paramètre de @code{location-access-controls}} access-control-list access-controls
13019 Les contrôles d'accès pour tous les accès à ce chemin, dans le même format
13020 que le champ @code{access-controls} de @code{operation-access-control}.
13021
13022 La valeur par défaut est @samp{()}.
13023 @end deftypevr
13024
13025 @deftypevr {paramètre de @code{location-access-controls}} method-access-control-list method-access-controls
13026 Contrôles d'accès pour les accès spécifiques à la méthode à ce chemin.
13027
13028 La valeur par défaut est @samp{()}.
13029
13030 Les champs de @code{method-access-controls} disponibles sont :
13031
13032 @deftypevr {paramètre de @code{method-access-controls}} boolean reverse?
13033 Si la valeur est @code{#t}, applique les contrôles d'accès à toutes les
13034 méthodes sauf les méthodes listées. Sinon, applique le contrôle uniquement
13035 aux méthodes listées.
13036
13037 La valeur par défaut est @samp{#f}.
13038 @end deftypevr
13039
13040 @deftypevr {paramètre de @code{method-access-controls}} method-list methods
13041 Les méthodes auxquelles ce contrôle d'accès s'applique.
13042
13043 La valeur par défaut est @samp{()}.
13044 @end deftypevr
13045
13046 @deftypevr {paramètre de @code{method-access-controls}} access-control-list access-controls
13047 Directives de contrôle d'accès, comme une liste de chaînes de caractères.
13048 Chaque chaîne devrait être une directive, comme « Order allow, deny ».
13049
13050 La valeur par défaut est @samp{()}.
13051 @end deftypevr
13052 @end deftypevr
13053 @end deftypevr
13054
13055 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer log-debug-history
13056 Spécifie le nombre de messages de débogage qui sont retenu pour la
13057 journalisation si une erreur arrive dans un travail d'impression. Les
13058 messages de débogage sont journalisés indépendamment du paramètre LogLevel.
13059
13060 La valeur par défaut est @samp{100}.
13061 @end deftypevr
13062
13063 @deftypevr {paramètre de @code{cups-configuration}} log-level log-level
13064 Spécifie le niveau de journalisation du fichier ErrorLog. La valeur
13065 @code{none} arrête toute journalisation alors que que @code{debug2}
13066 enregistre tout.
13067
13068 La valeur par défaut est @samp{info}.
13069 @end deftypevr
13070
13071 @deftypevr {paramètre de @code{cups-configuration}} log-time-format log-time-format
13072 Spécifie le format de la date et de l'heure dans les fichiers de journaux.
13073 La valeur @code{standard} enregistre les secondes entières alors que
13074 @code{usecs} enregistre les microsecondes.
13075
13076 La valeur par défaut est @samp{standard}.
13077 @end deftypevr
13078
13079 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-clients
13080 Spécifie le nombre maximum de clients simultanés qui sont autorisés par
13081 l'ordonnanceur.
13082
13083 La valeur par défaut est @samp{100}.
13084 @end deftypevr
13085
13086 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-clients-per-host
13087 Spécifie le nombre maximum de clients simultanés permis depuis une même
13088 adresse.
13089
13090 La valeur par défaut est @samp{100}.
13091 @end deftypevr
13092
13093 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-copies
13094 Spécifie le nombre maximum de copies qu'un utilisateur peut imprimer pour
13095 chaque travail.
13096
13097 La valeur par défaut est @samp{9999}.
13098 @end deftypevr
13099
13100 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-hold-time
13101 Spécifie la durée maximum qu'un travail peut rester dans l'état de
13102 suspension @code{indefinite} avant qu'il ne soit annulé. La valeur 0
13103 désactive l'annulation des travaux suspendus.
13104
13105 La valeur par défaut est @samp{0}.
13106 @end deftypevr
13107
13108 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs
13109 Spécifie le nombre maximum de travaux simultanés autorisés. La valeur 0
13110 permet un nombre illimité de travaux.
13111
13112 La valeur par défaut est @samp{500}.
13113 @end deftypevr
13114
13115 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs-per-printer
13116 Spécifie le nombre maximum de travaux simultanés autorisés par imprimante.
13117 La valeur 0 permet au plus MaxJobs travaux par imprimante.
13118
13119 La valeur par défaut est @samp{0}.
13120 @end deftypevr
13121
13122 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs-per-user
13123 Spécifie le nombre maximum de travaux simultanés permis par utilisateur. La
13124 valeur 0 permet au plus MaxJobs travaux par utilisateur.
13125
13126 La valeur par défaut est @samp{0}.
13127 @end deftypevr
13128
13129 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-job-time
13130 Spécifie la durée maximum qu'un travail peut prendre avant qu'il ne soit
13131 annulé, en secondes. Indiquez 0 pour désactiver l'annulation des travaux «
13132 coincés ».
13133
13134 La valeur par défaut est @samp{10800}.
13135 @end deftypevr
13136
13137 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-log-size
13138 Spécifie la taille maximale des fichiers de journaux avant qu'on ne les
13139 fasse tourner, en octets. La valeur 0 désactive la rotation.
13140
13141 La valeur par défaut est @samp{1048576}.
13142 @end deftypevr
13143
13144 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer multiple-operation-timeout
13145 Spécifie la durée maximale à permettre entre les fichiers d'un travail en
13146 contenant plusieurs, en secondes.
13147
13148 La valeur par défaut est @samp{300}.
13149 @end deftypevr
13150
13151 @deftypevr {paramètre de @code{cups-configuration}} string page-log-format
13152 Spécifie le format des lignes PageLog. Les séquences qui commencent par un
13153 pourcent (@samp{%}) sont remplacées par l'information correspondante, tandis
13154 que les autres caractères sont copiés littéralement. Les séquences pourcent
13155 suivantes sont reconnues :
13156
13157 @table @samp
13158 @item %%
13159 insère un seul caractères pourcent
13160
13161 @item %@{name@}
13162 insère la valeur de l'attribut IPP spécifié
13163
13164 @item %C
13165 insère le nombre de copies pour la page actuelle
13166
13167 @item %P
13168 insère le numéro de page actuelle
13169
13170 @item %T
13171 insère la date et l'heure actuelle dans un format de journal commun
13172
13173 @item %j
13174 insère l'ID du travail
13175
13176 @item %p
13177 insère le nom de l'imprimante
13178
13179 @item %u
13180 insère le nom d'utilisateur
13181 @end table
13182
13183 Si la valeur est la chaîne vide, le PageLog est désactivée. La chaîne
13184 @code{%p %u %j %T %P %C %@{job-billing@} %@{job-originating-host-name@}
13185 %@{job-name@} %@{media@} %@{sides@}} crée un PageLog avec les entrées
13186 standards.
13187
13188 La valeur par défaut est @samp{""}.
13189 @end deftypevr
13190
13191 @deftypevr {paramètre de @code{cups-configuration}} environment-variables environment-variables
13192 Passe les variables d'environnement spécifiées aux processus fils ; une
13193 liste de chaînes de caractères.
13194
13195 La valeur par défaut est @samp{()}.
13196 @end deftypevr
13197
13198 @deftypevr {paramètre de @code{cups-configuration}} policy-configuration-list policies
13199 Spécifie des politiques de contrôle d'accès nommées.
13200
13201 Les champs de @code{policy-configuration} disponibles sont :
13202
13203 @deftypevr {paramètre de @code{policy-configuration}} string name
13204 Nom de la politique.
13205 @end deftypevr
13206
13207 @deftypevr {paramètre de @code{policy-configuration}} string job-private-access
13208 Spécifie une liste d'accès pour les valeurs privées du travail.
13209 @code{@@ACL} correspond aux valeurs requesting-user-name-allowed ou
13210 requesting-user-name-denied de l'imprimante. @code{@@OWNER} correspond au
13211 propriétaire du travail. @code{@@SYSTEM} correspond aux groupes listés dans
13212 le champ @code{system-group} de la configuration @code{files-config}, qui
13213 est réifié dans le fichier @code{cups-files.conf(5)}. Les autres éléments
13214 possibles de la liste d'accès sont des noms d'utilisateurs spécifiques et
13215 @code{@@@var{group}} pour indiquer les membres d'un groupe spécifique. La
13216 liste d'accès peut aussi être simplement @code{all} ou @code{default}.
13217
13218 La valeur par défaut est @samp{"@@OWNER @@SYSTEM"}.
13219 @end deftypevr
13220
13221 @deftypevr {paramètre de @code{policy-configuration}} string job-private-values
13222 Spécifie la liste des valeurs de travaux à rendre privée, ou @code{all},
13223 @code{default}, ou @code{none}.
13224
13225 La valeur par défaut est @samp{"job-name job-originating-host-name
13226 job-originating-user-name phone"}.
13227 @end deftypevr
13228
13229 @deftypevr {paramètre de @code{policy-configuration}} string subscription-private-access
13230 Spécifie un liste d'accès pour les valeurs privées de la souscription.
13231 @code{@@ACL} correspond aux valeurs requesting-user-name-allowed ou
13232 requesting-user-name-denied de l'imprimante. @code{@@OWNER} correspond au
13233 propriétaire du travail. @code{@@SYSTEM} correspond aux groupes listés dans
13234 le champ @code{system-group} de la configuration @code{files-config}, qui
13235 est réifié dans le fichier @code{cups-files.conf(5)}. Les autres éléments
13236 possibles de la liste d'accès sont des noms d'utilisateurs spécifiques et
13237 @code{@@@var{group}} pour indiquer les membres d'un groupe spécifique. La
13238 liste d'accès peut aussi être simplement @code{all} ou @code{default}.
13239
13240 La valeur par défaut est @samp{"@@OWNER @@SYSTEM"}.
13241 @end deftypevr
13242
13243 @deftypevr {paramètre de @code{policy-configuration}} string subscription-private-values
13244 Spécifie la liste des valeurs de travaux à rendre privée, ou @code{all},
13245 @code{default}, ou @code{none}.
13246
13247 La valeur par défaut est @samp{"notify-events notify-pull-method
13248 notify-recipient-uri notify-subscriber-user-name notify-user-data"}.
13249 @end deftypevr
13250
13251 @deftypevr {paramètre de @code{policy-configuration}} operation-access-control-list access-controls
13252 Contrôle d'accès par les actions IPP.
13253
13254 La valeur par défaut est @samp{()}.
13255 @end deftypevr
13256 @end deftypevr
13257
13258 @deftypevr {paramètre de @code{cups-configuration}} boolean-or-non-negative-integer preserve-job-files
13259 Spécifie si les fichiers de travaux (les documents) sont préservés après
13260 qu'un travail est imprimé. Si une valeur numérique est spécifiée, les
13261 fichiers de travaux sont préservés pour le nombre de secondes indiquées
13262 après l'impression. Sinon, une valeur booléenne s'applique indéfiniment.
13263
13264 La valeur par défaut est @samp{86400}.
13265 @end deftypevr
13266
13267 @deftypevr {paramètre de @code{cups-configuration}} boolean-or-non-negative-integer preserve-job-history
13268 Spécifie si l'historique des travaux est préservé après qu'un travail est
13269 imprimé. Si une valeur numérique est spécifiée, l'historique des travaux
13270 est préservé pour le nombre de secondes indiquées après l'impression. Si la
13271 valeur est @code{#t}, l'historique des travaux est préservé jusqu'à
13272 atteindre la limite MaxJobs.
13273
13274 La valeur par défaut est @samp{#t}.
13275 @end deftypevr
13276
13277 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer reload-timeout
13278 Spécifie la durée d'attente pour la fin des travaux avant de redémarrer
13279 l'ordonnanceur.
13280
13281 La valeur par défaut est @samp{30}.
13282 @end deftypevr
13283
13284 @deftypevr {paramètre de @code{cups-configuration}} string rip-cache
13285 Spécifie la quantité de mémoire maximale à utiliser pour convertir des
13286 documents en bitmaps pour l'imprimante.
13287
13288 La valeur par défaut est @samp{"128m"}.
13289 @end deftypevr
13290
13291 @deftypevr {paramètre de @code{cups-configuration}} string server-admin
13292 Spécifie l'adresse de courriel de l'administrateur système.
13293
13294 La valeur par défaut est @samp{"root@@localhost.localdomain"}.
13295 @end deftypevr
13296
13297 @deftypevr {paramètre de @code{cups-configuration}} host-name-list-or-* server-alias
13298 La directive ServerAlias est utilisée pour la validation des en-tête HTTP
13299 Host lorsque les clients se connectent à l'ordonnanceur depuis des
13300 interfaces externes. Utiliser le nom spécial @code{*} peut exposer votre
13301 système à des attaques connues de recombinaison DNS dans le navigateur, même
13302 lorsque vous accédez au site à travers un pare-feu. Si la découverte
13303 automatique des autres noms ne fonctionne pas, nous vous recommandons de
13304 lister chaque nom alternatif avec une directive SeverAlias plutôt que
13305 d'utiliser @code{*}.
13306
13307 La valeur par défaut est @samp{*}.
13308 @end deftypevr
13309
13310 @deftypevr {paramètre de @code{cups-configuration}} string server-name
13311 Spécifie le nom d'hôte pleinement qualifié du serveur.
13312
13313 La valeur par défaut est @samp{"localhost"}.
13314 @end deftypevr
13315
13316 @deftypevr {paramètre de @code{cups-configuration}} server-tokens server-tokens
13317 Spécifie les informations incluses dans les en-têtes Server des réponses
13318 HTTP. @code{None} désactive l'en-tête Server. @code{ProductOnly} rapporte
13319 @code{CUPS}. @code{Major} rapporte @code{CUPS 2}. @code{Minor} rapporte
13320 @code{CUPS 2.0}. @code{Minimal} rapporte @code{CUPS 2.0.0}. @code{OS}
13321 rapporte @code{CUPS 2.0.0 (@var{uname})} où @var{uname} est la sortie de la
13322 commande @code{uname}. @code{Full} rapporte @code{CUPS 2.0.0 (@var{uname})
13323 IPP/2.0}.
13324
13325 La valeur par défaut est @samp{Minimal}.
13326 @end deftypevr
13327
13328 @deftypevr {paramètre de @code{cups-configuration}} string set-env
13329 Indique que la variable d'environnement spécifiée doit être passée aux
13330 processus fils.
13331
13332 La valeur par défaut est @samp{"variable value"}.
13333 @end deftypevr
13334
13335 @deftypevr {paramètre de @code{cups-configuration}} multiline-string-list ssl-listen
13336 Écoute des connexions chiffrées sur les interfaces spécifiées. Les valeurs
13337 valides sont de la forme @var{adresse}:@var{port}, où @var{adresse} est soit
13338 une adresse IPv6 dans des crochets, soit une adresse IPv4, soit @code{*}
13339 pour indiquer toutes les interfaces.
13340
13341 La valeur par défaut est @samp{()}.
13342 @end deftypevr
13343
13344 @deftypevr {paramètre de @code{cups-configuration}} ssl-options ssl-options
13345 Indique les options de chiffrement. Par défaut, CUPS ne supporte que le
13346 chiffrement avec TLS 1.0 ou plus avec des suites de chiffrement connues pour
13347 être sures. L'option @code{AllowRC4} active les suites de chiffrement
13348 128-bits RC4, qui sont requises pour certains vieux clients qui
13349 n'implémentent pas les nouvelles. L'option @code{AllowSSL3} active SSL
13350 v3.0, qui est requis par certains vieux clients qui ne supportent pas TLS
13351 v1.0.
13352
13353 La valeur par défaut est @samp{()}.
13354 @end deftypevr
13355
13356 @deftypevr {paramètre de @code{cups-configuration}} boolean strict-conformance?
13357 Spécifie si l'ordonnanceur demande aux clients d'adhérer aux spécifications
13358 IPP.
13359
13360 La valeur par défaut est @samp{#f}.
13361 @end deftypevr
13362
13363 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer timeout
13364 Spécifie le délai d'attente des requêtes HTTP, en secondes.
13365
13366 La valeur par défaut est @samp{300}.
13367
13368 @end deftypevr
13369
13370 @deftypevr {paramètre de @code{cups-configuration}} boolean web-interface?
13371 Spécifie si l'interface web est activée.
13372
13373 La valeur par défaut est @samp{#f}.
13374 @end deftypevr
13375
13376 Maintenant, vous vous dîtes peut-être « oh la la, cher manuel de Guix, je
13377 t'aime bien mais arrête maintenant avec ces options de configuration
13378 »@footnote{NdT : je vous rassure, c'est aussi mon sentiment au moment de
13379 traduire ces lignes. Et pour moi, c'est encore loin d'être fini.}. En
13380 effet. cependant, encore un point supplémentaire : vous pouvez avoir un
13381 fichier @code{cupsd.conf} existant que vous pourriez vouloir utiliser. Dans
13382 ce cas, vous pouvez passer un @code{opaque-cups-configuration} en
13383 configuration d'un @code{cups-service-type}.
13384
13385 Les champs de @code{opaque-cups-configuration} disponibles sont :
13386
13387 @deftypevr {paramètre de @code{opaque-cups-configuration}} package cups
13388 Le paquet CUPS.
13389 @end deftypevr
13390
13391 @deftypevr {paramètre de @code{opaque-cups-configuration}} string cupsd.conf
13392 Le contenu de @code{cupsd.conf}, en tant que chaîne de caractères.
13393 @end deftypevr
13394
13395 @deftypevr {paramètre de @code{opaque-cups-configuration}} string cups-files.conf
13396 Le contenu du fichier @code{cups-files.conf}, en tant que chaîne de
13397 caractères.
13398 @end deftypevr
13399
13400 Par exemple, si vos fichiers @code{cupsd.conf} et @code{cups-files.conf}
13401 sont dans des chaînes du même nom, pouvez instancier un service CUPS de
13402 cette manière :
13403
13404 @example
13405 (service cups-service-type
13406 (opaque-cups-configuration
13407 (cupsd.conf cupsd.conf)
13408 (cups-files.conf cups-files.conf)))
13409 @end example
13410
13411
13412 @node Services de bureaux
13413 @subsubsection Services de bureaux
13414
13415 Le module @code{(gnu services desktop)} fournit des services qui sont
13416 habituellement utiles dans le contexte d'une installation « de bureau » —
13417 c'est-à-dire sur une machine qui fait tourner un service d'affichage
13418 graphique, éventuellement avec des interfaces utilisateurs graphiques, etc.
13419 Il définit aussi des services qui fournissent des environnements de bureau
13420 spécifiques comme GNOME, XFCE et MATE.
13421
13422 Pour simplifier les choses, le module définit une variable contenant
13423 l'ensemble des services que les utilisateurs s'attendent en général à avoir
13424 sur une machine avec un environnement graphique et le réseau :
13425
13426 @defvr {Variable Scheme} %desktop-services
13427 C'est la liste des services qui étend @var{%base-services} en ajoutant ou en
13428 ajustant des services pour une configuration « de bureau » typique.
13429
13430 En particulier, il ajoute un gestionnaire de connexion graphique (@pxref{Système de fenêtrage X, @code{slim-service}}), des verrouilleurs d'écran, un outil de
13431 gestion réseau (@pxref{Services réseau,
13432 @code{network-manager-service-type}}), des services de gestion de l'énergie
13433 et des couleurs, le gestionnaire de connexion et de session @code{elogind},
13434 le service de privilèges Polkit, le service de géolocalisation GeoClue, le
13435 démon Accounts Service qui permet aux utilisateurs autorisés de changer leur
13436 mot de passe, un client NTP (@pxref{Services réseau}), le démon Avahi,
13437 et le service name service switch est configuré pour pouvoir utiliser
13438 @code{nss-mdns} (@pxref{Name Service Switch, mDNS}).
13439 @end defvr
13440
13441 La variable @var{%desktop-services} peut être utilisée comme champ
13442 @code{services} d'une déclaration @code{operating-system}
13443 (@pxref{Référence de système d'exploitation, @code{services}}).
13444
13445 En plus, les procédures @code{gnome-desktop-service},
13446 @code{xfce-desktop-service}, @code{mate-desktop-service} et
13447 @code{enlightenment-desktop-service-type} peuvent ajouter GNOME, XFCE, MATE
13448 ou Enlightenment à un système. « Ajouter GNOME » signifie que les services
13449 du système comme les utilitaires d'ajustement de la luminosité et de gestion
13450 de l'énergie sont ajoutés au système, en étendant @code{polkit} et
13451 @code{dbus} de la bonne manière, ce qui permet à GNOME d'opérer avec des
13452 privilèges plus élevés sur un nombre limité d'interfaces systèmes
13453 spécialisées. En plus, ajouter un service construit par
13454 @code{gnome-desktop-service} ajoute le métapaquet GNOME au profil du
13455 système. de même, ajouter le service XFCE ajoute le métapaquet @code{xfce}
13456 au profil système, mais il permet aussi au gestionnaire de fichiers Thunar
13457 d'ouvrir une fenêtre de gestion des fichier « en mode root », si
13458 l'utilisateur s'authentifie avec le mot de passe administrateur via
13459 l'interface graphique polkit standard. « Ajouter MATE » signifie que
13460 @code{polkit} et @code{dbus} sont étendue de la bonne manière, ce qui permet
13461 à MATE d'opérer avec des privilèges plus élevés sur un nombre limité
13462 d'interface systèmes spécialisées. « Ajouter ENLIGHTENMENT » signifie que
13463 @code{dbus} est étendu comme il faut et que plusieurs binaires
13464 d'Enlightenment récupèrent le bit setuid, ce qui permet au verrouilleur
13465 d'écran d'Enlightenment et à d'autres fonctionnalités de fonctionner
13466 correctement.
13467
13468 Les environnement de bureau dans Guix utilisent le service d'affichage Xorg
13469 par défaut. Si vous voulez utiliser le protocol de serveur d'affichage plus
13470 récent Wayland, vous devez utiliser @code{sddm-service} à la place de
13471 @code{slim-service} comme gestionnaire de connexion graphique. Vous devriez
13472 ensuite sélectionner la session « GNOME (Wayland) » dans SDDM. Autrement,
13473 vous pouvez essayer de démarrer GNOME sur Wayland manuellement depuis un TTY
13474 avec la commande @command{XDG_SESSION_TYPE=wayland exec dbus-run-session
13475 gnome-session}. Actuellement seul GNOME support Wayland.
13476
13477 @deffn {Procédure Scheme} gnome-desktop-service
13478 Renvoie un service qui ajoute le paquet @code{gnome} au profil système et
13479 étend polkit avec des actions de @code{gnome-settings-daemon}.
13480 @end deffn
13481
13482 @deffn {Procédure Scheme} xfce-desktop-service
13483 Renvoie un service qui ajoute le paquet @code{xfce} au profil du système et
13484 étend polkit avec la capacité pour @code{thunar} de manipuler le système de
13485 fichier en tant que root depuis une session utilisateur, après que
13486 l'utilisateur s'est authentifié avec le mot de passe administrateur.
13487 @end deffn
13488
13489 @deffn {Procédure Scheme} mate-desktop-service
13490 Renvoie un service qui ajoute le paquet @code{mate} au profil du système et
13491 étend polkit avec les actions de @code{mate-settings-daemon}.
13492 @end deffn
13493
13494 @deffn {Procédure Scheme} enlightenment-desktop-service-type
13495 Renvoie un service qui ajoute le paquet @code{enlightenment} et étend dbus
13496 avec les actions de @code{efl}
13497 @end deffn
13498
13499 @deftp {Type de données} enlightenment-desktop-service-configuration
13500 @table @asis
13501 @item @code{enlightenment} (par défaut : @code{enlightenment})
13502 Le paquet enlightenment à utiliser.
13503 @end table
13504 @end deftp
13505
13506 Comme les services de bureau GNOME, XFCE et MATE récupèrent tant de paquet,
13507 la variable @code{%desktop-services} par défaut n'inclut aucun d'entre eux.
13508 Pour ajouter GNOME, XFCE ou MATE, utilisez @code{cons} pour les ajouter à
13509 @code{%desktop-services} dans le champ @code{services} de votre
13510 @code{operating-system}.
13511
13512 @example
13513 (use-modules (gnu))
13514 (use-service-modules desktop)
13515 (operating-system
13516 ...
13517 ;; cons* ajoute les élément à la liste donnée en dernier argument
13518 (services (cons* (gnome-desktop-service)
13519 (xfce-desktop-service)
13520 %desktop-services))
13521 ...)
13522 @end example
13523
13524 Ces environnements de bureau seront alors disponibles comme une option dans
13525 la fenêtre de connexion graphique.
13526
13527 Les définitions de service qui sont vraiment incluses dans
13528 @code{%desktop-services} et fournies par @code{(gnu services dbus)} et
13529 @code{(gnu services desktop)} sont décrites plus bas.
13530
13531 @deffn {Procédure Scheme} dbus-service [#:dbus @var{dbus}] [#:services '()]
13532 Renvoie un service qui lance le « bus système », @var{dbus}, avec le support
13533 de @var{services}.
13534
13535 @uref{http://dbus.freedesktop.org/, D-Bus} est un utilitaire de
13536 communication inter-processus. Son bus système est utilisé pour permettre à
13537 des services systèmes de communiquer et d'être notifiés d'événements
13538 systèmes.
13539
13540 @var{services} doit être une liste de paquets qui fournissent un répertoire
13541 @file{etc/dbus-1/system.d} contenant de la configuration D-Bus
13542 supplémentaire et des fichiers de politiques. Par exemple, pour permettre à
13543 avahi-daemon d'utiliser le bus système, @var{services} doit être égal à
13544 @code{(list avahi)}.
13545 @end deffn
13546
13547 @deffn {Procédure Scheme} elogind-service [#:config @var{config}]
13548 Renvoie un service qui lance le démon de gestion de connexion et de session
13549 @code{elogind}. @uref{https://github.com/elogind/elogind, Elogind} expose
13550 une interface D-Bus qui peut être utilisée pour connaître quels utilisateurs
13551 sont connectés, le type de session qu'ils sont ouverte, suspendre le
13552 système, désactiver la veille système, redémarrer le système et d'autre
13553 taches.
13554
13555 Elogind gère la plupart des événements liés à l'énergie du système, par
13556 exemple mettre en veille le système quand l'écran est rabattu ou en
13557 l'éteignant quand le bouton de démarrage est appuyé.
13558
13559 L'argument @var{config} spécifie la configuration d'elogind et devrait être
13560 le résultat d'une invocation de @code{(elogind-configuration
13561 (@var{parameter} @var{value})...)}. Les paramètres disponibles et leur
13562 valeur par défaut sont :
13563
13564 @table @code
13565 @item kill-user-processes?
13566 @code{#f}
13567 @item kill-only-users
13568 @code{()}
13569 @item kill-exclude-users
13570 @code{("root")}
13571 @item inhibit-delay-max-seconds
13572 @code{5}
13573 @item handle-power-key
13574 @code{poweroff}
13575 @item handle-suspend-key
13576 @code{suspend}
13577 @item handle-hibernate-key
13578 @code{hibernate}
13579 @item handle-lid-switch
13580 @code{suspend}
13581 @item handle-lid-switch-docked
13582 @code{ignore}
13583 @item power-key-ignore-inhibited?
13584 @code{#f}
13585 @item suspend-key-ignore-inhibited?
13586 @code{#f}
13587 @item hibernate-key-ignore-inhibited?
13588 @code{#f}
13589 @item lid-switch-ignore-inhibited?
13590 @code{#t}
13591 @item holdoff-timeout-seconds
13592 @code{30}
13593 @item idle-action
13594 @code{ignore}
13595 @item idle-action-seconds
13596 @code{(* 30 60)}
13597 @item runtime-directory-size-percent
13598 @code{10}
13599 @item runtime-directory-size
13600 @code{#f}
13601 @item remove-ipc?
13602 @code{#t}
13603 @item suspend-state
13604 @code{("mem" "standby" "freeze")}
13605 @item suspend-mode
13606 @code{()}
13607 @item hibernate-state
13608 @code{("disk")}
13609 @item hibernate-mode
13610 @code{("platform" "shutdown")}
13611 @item hybrid-sleep-state
13612 @code{("disk")}
13613 @item hybrid-sleep-mode
13614 @code{("suspend" "platform" "shutdown")}
13615 @end table
13616 @end deffn
13617
13618 @deffn {Procédure Scheme} accountsservice-service @
13619 [#:accountsservice @var{accountsservice}]
13620 Renvoie un service qui lance AccountsService, un service système qui peut
13621 lister les comptes disponibles, changer leur mot de passe, etc.
13622 AccountsService s'intègre à Polkit pour permettre aux utilisateurs non
13623 privilégiés de pouvoir modifier la configuration de leur système.
13624 @uref{https://www.freedesktop.org/wiki/Software/AccountsService/, le site de
13625 accountsservice} pour trouver plus d'informations.
13626
13627 L'argument @var{accountsservice} est le paquet @code{accountsservice} à
13628 exposer comme un service.
13629 @end deffn
13630
13631 @deffn {Procédure Scheme} polkit-service @
13632 [#:polkit @var{polkit}]
13633 Renvoie un service qui lance le
13634 @uref{http://www.freedesktop.org/wiki/Software/polkit/, service de gestion
13635 des privilèges Polkit}, qui permet aux administrateurs systèmes de permettre
13636 l'accès à des opération privilégiées d'une manière structurée. En demandant
13637 au service Polkit, un composant système privilégié peut savoir lorsqu'il
13638 peut donner des privilèges supplémentaires à des utilisateurs normaux. Par
13639 exemple, un utilisateur normal peut obtenir le droit de mettre le système en
13640 veille si l'utilisateur est connecté localement.
13641 @end deffn
13642
13643 @deffn {Procédure Scheme} upower-service [#:upower @var{upower}] @
13644 [#:watts-up-pro? #f] @
13645 [#:poll-batteries? #t] @
13646 [#:ignore-lid? #f] @
13647 [#:use-percentage-for-policy? #f] @
13648 [#:percentage-low 10] @
13649 [#:percentage-critical 3] @
13650 [#:percentage-action 2] @
13651 [#:time-low 1200] @
13652 [#:time-critical 300] @
13653 [#:time-action 120] @
13654 [#:critical-power-action 'hybrid-sleep]
13655 Renvoie un service qui lance @uref{http://upower.freedesktop.org/,
13656 @command{upowerd}}, un moniteur système pour la consommation électrique et
13657 le niveau de batterie, avec les paramètres de configuration données. Il
13658 implémente l'interface D-Bus @code{org.freedesktop.UPower} et est notamment
13659 utilisé par GNOME.
13660 @end deffn
13661
13662 @deffn {Procédure Scheme} udisks-service [#:udisks @var{udisks}]
13663 Renvoie un service pour @uref{http://udisks.freedesktop.org/docs/latest/,
13664 UDisks}, un démon de @dfn{gestion de disques} qui fournit des notifications
13665 et la capacité de monter et démonter des disques à des interfaces
13666 utilisateurs. Les programmes qui parlent à UDisks sont par exemple la
13667 commande @command{udisksctl}, qui fait partie de UDisks et GNOME Disks.
13668 @end deffn
13669
13670 @deffn {Procédure Scheme} colord-service [#:colord @var{colord}]
13671 Renvoie un service qui lance @command{colord}, un service système avec une
13672 interface D-Bus pour gérer les profils de couleur des périphériques
13673 d'entrées et de sorties comme les écrans et les scanners. Il est notamment
13674 utilisé par l'outil graphique GNOME Color Manager. Voir
13675 @uref{http://www.freedesktop.org/software/colord/, le site web de colord}
13676 pour plus d'informations.
13677 @end deffn
13678
13679 @deffn {Procédure Scheme} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()]
13680 Renvoie une configuration qui permet d'accéder aux données de localisation
13681 de GeoClue. @var{name} est l'ID Desktop de l'application, sans la partie en
13682 @code{.desktop}. Si @var{allowed?} est vraie, l'application aura droit
13683 d'accéder aux informations de localisation par défaut. Le booléen
13684 @var{system?} indique si une application est un composant système ou non.
13685 Enfin @var{users} est la liste des UID des utilisateurs pour lesquels cette
13686 application a le droit d'accéder aux informations de géolocalisation. Une
13687 liste d'utilisateurs vide indique que tous les utilisateurs sont autorisés.
13688 @end deffn
13689
13690 @defvr {Variable Scheme} %standard-geoclue-applications
13691 la liste standard de configuration des application GeoClue connues, qui
13692 permet à l'utilitaire date-and-time de GNOME de demander l'emplacement
13693 actuel pour initialiser le fuseau horaire et aux navigateurs web IceCat et
13694 Epiphany de demander les informations de localisation. IceCat et Epiphany
13695 demandent tous deux à l'utilisateur avant de permettre à une page web de
13696 connaître l'emplacement de l'utilisateur.
13697 @end defvr
13698
13699 @deffn {Procédure Scheme} geoclue-service [#:colord @var{colord}] @
13700 [#:whitelist '()] @
13701 [#:wifi-geolocation-url
13702 "https://location.services.mozilla.com/v1/geolocate?key=geoclue"] @
13703 [#:submit-data? #f] [#:wifi-submission-url
13704 "https://location.services.mozilla.com/v1/submit?key=geoclue"] @
13705 [#:submission-nick "geoclue"] @
13706 [#:applications %standard-geoclue-applications]
13707 Renvoie un service qui lance le service de géolocalisation GeoClue. Ce
13708 service fournit une interface D-Bus pour permettre aux applications de
13709 demande l'accès à la position de l'utilisateur et éventuellement d'ajouter
13710 des informations à des bases de données de géolocalisation en ligne. Voir
13711 @uref{https://wiki.freedesktop.org/www/Software/GeoClue/, le site web de
13712 GeoClue} pour plus d'informations.
13713 @end deffn
13714
13715 @deffn {Procédure Scheme} bluetooth-service [#:bluez @var{bluez}] @
13716 [@w{#:auto-enable? #f}]
13717 Renvoie un service qui lance le démon @command{bluetoothd} qui gère tous les
13718 appareils Bluetooth et fournit un certain nombre d'interfaces D-Bus.
13719 Lorsque @var{auto-enable?} est vraie, le contrôler bluetooth est
13720 automatiquement alimenté au démarrage, ce qui peut être utile lorsque vous
13721 utilisez un clavier ou une souris bluetooth.
13722
13723 Les utilisateurs doivent être dans le groupe @code{lp} pour accéder au
13724 service D-Bus.
13725 @end deffn
13726
13727 @node Services de son
13728 @subsubsection Services de son
13729
13730 @cindex support du son
13731 @cindex ALSA
13732 @cindex PulseAudio, support du son
13733
13734 The @code{(gnu services sound)} module provides a service to configure the
13735 Advanced Linux Sound Architecture (ALSA) system, which making PulseAudio the
13736 prefered ALSA output driver.
13737
13738 @deffn {Variable Scheme} alsa-service-type
13739 This is the type for the @uref{https://alsa-project.org/, Advanced Linux
13740 Sound Architecture} (ALSA) system, which generates the
13741 @file{/etc/asound.conf} configuration file. The value for this type is a
13742 @command{alsa-configuration} record as in this example:
13743
13744 @example
13745 (service alsa-service-type)
13746 @end example
13747
13748 Voir plus bas pour des détails sur @code{alsa-configuration}.
13749 @end deffn
13750
13751 @deftp {Type de données} alsa-configuration
13752 Type de données représentant la configuration pour @code{alsa-service}.
13753
13754 @table @asis
13755 @item @code{alsa-plugins} (default: @var{alsa-plugins})
13756 @code{alsa-plugins} package to use.
13757
13758 @item @code{pulseaudio?} (par défaut : @var{#t})
13759 Indique si les applications ALSA devraient utiliser le serveur de son
13760 @uref{http://www.pulseaudio.org/, PulseAudio} de manière transparente pour
13761 elles.
13762
13763 Utiliser PulseAudio vous permet dans lancer plusieurs applications qui
13764 produisent du son en même temps et de les contrôler individuellement via
13765 @command{pavucontrol} entre autres choses.
13766
13767 @item @code{extra-options} (par défaut : @var{""})
13768 String to append to the @file{/etc/asound.conf} file.
13769
13770 @end table
13771 @end deftp
13772
13773 Individual users who want to override the system configuration of ALSA can
13774 do it with the @file{~/.asoundrc} file:
13775
13776 @example
13777 # In guix, we have to specify the absolute path for plugins.
13778 pcm_type.jack @{
13779 lib "/home/alice/.guix-profile/lib/alsa-lib/libasound_module_pcm_jack.so"
13780 @}
13781
13782 # Routing ALSA to jack:
13783 # <http://jackaudio.org/faq/routing_alsa.html>.
13784 pcm.rawjack @{
13785 type jack
13786 playback_ports @{
13787 0 system:playback_1
13788 1 system:playback_2
13789 @}
13790
13791 capture_ports @{
13792 0 system:capture_1
13793 1 system:capture_2
13794 @}
13795 @}
13796
13797 pcm.!default @{
13798 type plug
13799 slave @{
13800 pcm "rawjack"
13801 @}
13802 @}
13803 @end example
13804
13805 See @uref{https://www.alsa-project.org/main/index.php/Asoundrc} for the
13806 details.
13807
13808
13809 @node Services de bases de données
13810 @subsubsection Services de bases de données
13811
13812 @cindex database
13813 @cindex SQL
13814 Le module @code{(gnu services databases)} fournit les services suivants.
13815
13816 @deffn {Procédure Scheme} postgresql-service [#:postgresql postgresql] @
13817 [#:config-file] [#:data-directory ``/var/lib/postgresql/data''] @
13818 [#:port 5432] [#:locale ``en_US.utf8'']
13819 Renvoie un service qui lance @var{postgresql}, le service de bases de
13820 données PostgreSQL.
13821
13822 Le démon PostgreSQL charge sa configuration à l'exécution depuis
13823 @var{config-file}, crée une grappe de bases de données avec @var{locale}
13824 comme paramètre de régionalisation par défaut, stockée dans
13825 @var{data-directory}. Il écoute ensuite sur @var{port}.
13826 @end deffn
13827
13828 @deffn {Procédure Scheme} mysql-service [#:config (mysql-configuration)]
13829 Renvoie un service qui lance @command{mysqld}, le service de bases de
13830 données MySQL ou MariaDB.
13831
13832 L'argument @var{config} facultatif spécifie la configuration de
13833 @command{mysqld}, qui devrait être un objet @code{<mysql-configuration>}.
13834 @end deffn
13835
13836 @deftp {Type de données} mysql-configuration
13837 Type de données représentant la configuration de @var{mysql-service}.
13838
13839 @table @asis
13840 @item @code{mysql} (par défaut : @var{mariadb})
13841 Objet paquet du serveur de base de données MySQL, qui peut être soit
13842 @var{mariadb}, soit @var{mysql}.
13843
13844 Pour MySQL, un mot de passe root temporaire sera affiché à l'activation.
13845 Pour MariaDB, le mot de passe root est vide.
13846
13847 @item @code{port} (par défaut : @code{3306})
13848 Port TCP sur lequel le serveur de base de données écoute les connexions
13849 entrantes.
13850 @end table
13851 @end deftp
13852
13853 @defvr {Variable Scheme} memcached-service-type
13854 C'est le type de service pour le service @uref{https://memcached.org/,
13855 Memcached} qui fournit un cache en mémoire distribué. La valeur pour le
13856 type de service est un objet @code{memcached-configuration}.
13857 @end defvr
13858
13859 @example
13860 (service memcached-service-type)
13861 @end example
13862
13863 @deftp {Type de données} memcached-configuration
13864 Type de données représentant la configuration de memcached.
13865
13866 @table @asis
13867 @item @code{memcached} (par défaut : @code{memcached})
13868 Le paquet Memcached à utiliser.
13869
13870 @item @code{interfaces} (par défaut : @code{'("0.0.0.0")})
13871 Les interfaces réseaux sur lesquelles écouter.
13872
13873 @item @code{tcp-port} (par défaut : @code{11211})
13874 Port sur lequel accepter les connexions.
13875
13876 @item @code{udp-port} (par défaut : @code{11211})
13877 Port sur lequel accepter les connexions UDP, une valeur de 0 désactive
13878 l'écoute en UDP.
13879
13880 @item @code{additional-options} (par défaut : @code{'()})
13881 Options de la ligne de commande supplémentaires à passer à @code{memcached}.
13882 @end table
13883 @end deftp
13884
13885 @defvr {Variable Scheme} mongodb-service-type
13886 C'est le type de service pour @uref{https://www.mongodb.com/, MongoDB}. La
13887 valeur de ce service est un objet @code{mongodb-configuration}.
13888 @end defvr
13889
13890 @example
13891 (service mongodb-service-type)
13892 @end example
13893
13894 @deftp {Type de données} mongodb-configuration
13895 Type de données représentant la configuration de mongodb.
13896
13897 @table @asis
13898 @item @code{mongodb} (par défaut : @code{mongodb})
13899 Le paquet MongoDB à utiliser.
13900
13901 @item @code{config-file} (par défaut : @code{%default-mongodb-configuration-file})
13902 Le fichier de configuration pour MongoDB.
13903
13904 @item @code{data-directory} (par défaut : @code{"/var/lib/mongodb"})
13905 Cette valeur est utilisée pour créer le répertoire, pour qu'il existe et
13906 appartienne à l'utilisateur mongodb. Il devrait correspondre au
13907 data-directory que MongoDB est configuré pour utiliser dans son fichier de
13908 configuration.
13909 @end table
13910 @end deftp
13911
13912 @defvr {Variable Scheme} redis-service-type
13913 C'est le type de service pour la base clef-valeur @uref{https://redis.io/,
13914 Redis} dont la valeur est un objet @code{redis-configuration}.
13915 @end defvr
13916
13917 @deftp {Type de données} redis-configuration
13918 Type de données représentant la configuration de redis.
13919
13920 @table @asis
13921 @item @code{redis} (par défaut : @code{redis})
13922 Le paquet Redis à utiliser.
13923
13924 @item @code{bind} (par défaut : @code{"127.0.0.1"})
13925 Interface réseau sur laquelle écouter.
13926
13927 @item @code{port} (par défaut : @code{6379})
13928 Port sur lequel accepter les connexions, une valeur de 0 désactive l'écoute
13929 sur un socket TCP.
13930
13931 @item @code{working-directory} (par défaut : @code{"/var/lib/redis"})
13932 Répertoire dans lequel stocker la base de données et les fichiers liés.
13933 @end table
13934 @end deftp
13935
13936 @node Services de courriels
13937 @subsubsection Services de courriels
13938
13939 @cindex courriel
13940 @cindex email
13941 Le module @code{(gnu services mail)} fournit des définitions de services
13942 Guix pour les services de courriel : des serveurs IMAP, POP3 et LMTP ainsi
13943 que des MTA (Mail Transport Agent). Que d'acronymes ! Ces services sont
13944 détaillés dans les sous-sections ci-dessous.
13945
13946 @subsubheading Service Dovecot
13947
13948 @deffn {Procédure Scheme} dovecot-service [#:config (dovecot-configuration)]
13949 Renvoie un service qui lance le serveur de courriel IMAP/POP3/LMTP Dovecot.
13950 @end deffn
13951
13952 Par défaut, Dovecot n'a pas besoin de beaucoup de configuration ; l'objet de
13953 configuration par défaut créé par @code{(dovecot-configuration)} suffira si
13954 votre courriel est livré dans @code{~/Maildir}. Un certificat auto-signé
13955 sera généré pour les connexions TLS, bien que Dovecot écoutera aussi sur les
13956 ports non chiffrés par défaut. Il y a quelques options cependant, que les
13957 administrateurs peuvent avoir besoin de changer et comme c'est le cas avec
13958 d'autres services, Guix permet aux administrateurs systèmes de spécifier ces
13959 paramètres via une interface Scheme unifiée.
13960
13961 Par exemple, pour spécifier que les courriels se trouvent dans
13962 @code{maildir~/.mail}, on peut instancier Dovecot de cette manière :
13963
13964 @example
13965 (dovecot-service #:config
13966 (dovecot-configuration
13967 (mail-location "maildir:~/.mail")))
13968 @end example
13969
13970 Les paramètres de configuration disponibles sont les suivants. Chaque
13971 définition des paramètres est précédé par son type ; par exemple,
13972 @samp{string-list foo} indique que le paramètre @code{foo} devrait être
13973 spécifié comme une liste de chaînes de caractères. Il y a aussi une manière
13974 de spécifier la configuration comme une chaîne de caractères, si vous avez
13975 un vieux fichier @code{dovecot.conf} que vous voulez porter depuis un autre
13976 système ; voir la fin pour plus de détails.
13977
13978 @c The following documentation was initially generated by
13979 @c (generate-documentation) in (gnu services mail). Manually maintained
13980 @c documentation is better, so we shouldn't hesitate to edit below as
13981 @c needed. However if the change you want to make to this documentation
13982 @c can be done in an automated way, it's probably easier to change
13983 @c (generate-documentation) than to make it below and have to deal with
13984 @c the churn as dovecot updates.
13985
13986 Les champs de @code{dovecot-configuration} disponibles sont :
13987
13988 @deftypevr {paramètre de @code{dovecot-configuration}} package dovecot
13989 Le paquet dovecot
13990 @end deftypevr
13991
13992 @deftypevr {paramètre de @code{dovecot-configuration}} comma-separated-string-list listen
13993 Une liste d'IP ou d'hôtes à écouter pour les connexions. @samp{*} écoute
13994 sur toutes les interfaces IPv4, @samp{::} écoute sur toutes les interfaces
13995 IPv6. Si vous voulez spécifier des ports différents de la valeur par défaut
13996 ou quelque chose de plus complexe, complétez les champs d'adresse et de port
13997 de @samp{inet-listener} des services spécifiques qui vous intéressent.
13998 @end deftypevr
13999
14000 @deftypevr {paramètre de @code{dovecot-configuration}} protocol-configuration-list protocols
14001 Liste des protocoles que vous voulez servir. Les protocoles disponibles
14002 comprennent @samp{imap}, @samp{pop3} et @samp{lmtp}.
14003
14004 Les champs @code{protocol-configuration} disponibles sont :
14005
14006 @deftypevr {paramètre de @code{protocol-configuration}} string name
14007 Le nom du protocole.
14008 @end deftypevr
14009
14010 @deftypevr {paramètre de @code{protocol-configuration}} string auth-socket-path
14011 Le chemin d'un socket UNIX vers le serveur d'authentification maître pour
14012 trouver les utilisateurs. C'est utilisé par imap (pour les utilisateurs
14013 partagés) et lda. Sa valeur par défaut est
14014 @samp{"/var/run/dovecot/auth-userdb"}.
14015 @end deftypevr
14016
14017 @deftypevr {paramètre de @code{protocol-configuration}} space-separated-string-list mail-plugins
14018 Liste de greffons à charger séparés par des espaces.
14019 @end deftypevr
14020
14021 @deftypevr {paramètre de @code{protocol-configuration}} non-negative-integer mail-max-userip-connections
14022 Nombre maximum de connexions IMAP permises pour un utilisateur depuis chaque
14023 adresse IP. Remarque : la comparaison du nom d'utilisateur est sensible à
14024 la casse. Par défaut @samp{10}.
14025 @end deftypevr
14026
14027 @end deftypevr
14028
14029 @deftypevr {paramètre de @code{dovecot-configuration}} service-configuration-list services
14030 Liste des services à activer. Les services disponibles comprennent
14031 @samp{imap}, @samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}
14032 et @samp{lmtp}.
14033
14034 Les champs de @code{service-configuration} disponibles sont :
14035
14036 @deftypevr {paramètre de @code{service-configuration}} string kind
14037 Le type de service. Les valeurs valides comprennent @code{director},
14038 @code{imap-login}, @code{pop3-login}, @code{lmtp}, @code{imap}, @code{pop3},
14039 @code{auth}, @code{auth-worker}, @code{dict}, @code{tcpwrap},
14040 @code{quota-warning} ou n'importe quoi d'autre.
14041 @end deftypevr
14042
14043 @deftypevr {paramètre de @code{service-configuration}} listener-configuration-list listeners
14044 Les auditeurs du service. Un auditeur est soit un
14045 @code{unix-listener-configuration}, soit un
14046 @code{fifo-listener-configuration}, soit un
14047 @code{inet-listener-configuration}. La valeur par défaut est @samp{()}.
14048
14049 Les champs de @code{unix-listener-configuration} disponibles sont :
14050
14051 @deftypevr {paramètre de @code{unix-listener-configuration}} string path
14052 Chemin vers le fichier, relativement au champ @code{base-dir}. C'est aussi
14053 utilisé comme nom de section.
14054 @end deftypevr
14055
14056 @deftypevr {paramètre de @code{unix-listener-configuration}} string mode
14057 Le mode d'accès pour le socket. La valeur par défaut est @samp{"0600"}.
14058 @end deftypevr
14059
14060 @deftypevr {paramètre de @code{unix-listener-configuration}} string user
14061 L'utilisateur à qui appartient le socket. La valeur par défaut est
14062 @samp{""}
14063 @end deftypevr
14064
14065 @deftypevr {paramètre de @code{unix-listener-configuration}} string group
14066 Le groupe auquel appartient le socket. La valeur par défaut est @samp{""}.
14067 @end deftypevr
14068
14069
14070 Les champs de @code{fifo-listener-configuration} disponibles sont :
14071
14072 @deftypevr {paramètre de @code{fifo-listener-configuration}} string path
14073 Chemin vers le fichier, relativement au champ @code{base-dir}. C'est aussi
14074 utilisé comme nom de section.
14075 @end deftypevr
14076
14077 @deftypevr {paramètre de @code{fifo-listener-configuration}} string mode
14078 Le mode d'accès pour le socket. La valeur par défaut est @samp{"0600"}.
14079 @end deftypevr
14080
14081 @deftypevr {paramètre de @code{fifo-listener-configuration}} string user
14082 L'utilisateur à qui appartient le socket. La valeur par défaut est
14083 @samp{""}
14084 @end deftypevr
14085
14086 @deftypevr {paramètre de @code{fifo-listener-configuration}} string group
14087 Le groupe auquel appartient le socket. La valeur par défaut est @samp{""}.
14088 @end deftypevr
14089
14090
14091 Les champs de @code{inet-listener-configuration} disponibles sont :
14092
14093 @deftypevr {paramètre de @code{inet-listener-configuration}} string protocol
14094 Le protocole à écouter.
14095 @end deftypevr
14096
14097 @deftypevr {paramètre de @code{inet-listener-configuration}} string address
14098 L'adresse sur laquelle écouter, ou la chaîne vide pour toutes les adresses.
14099 La valeur par défaut est @samp{""}.
14100 @end deftypevr
14101
14102 @deftypevr {paramètre de @code{inet-listener-configuration}} non-negative-integer port
14103 Le port sur lequel écouter.
14104 @end deftypevr
14105
14106 @deftypevr {paramètre de @code{inet-listener-configuration}} boolean ssl?
14107 S'il faut utiliser SSL pour ce service ; @samp{yes}, @samp{no} ou
14108 @samp{required}. La valeur par défaut est @samp{#t}.
14109 @end deftypevr
14110
14111 @end deftypevr
14112
14113 @deftypevr {paramètre de @code{service-configuration}} non-negative-integer service-count
14114 Nombre de connexions à gérer avant de démarrer un nouveau processus.
14115 Typiquement les valeurs utiles sont 0 (sans limite) ou 1. 1 est plus sûr,
14116 mais 0 est plus rapide. <doc/wiki/LoginProcess.txt>. La valeur par défaut
14117 est @samp{1}.
14118 @end deftypevr
14119
14120 @deftypevr {paramètre de @code{service-configuration}} non-negative-integer process-min-avail
14121 Nombre de processus à toujours garder en attente de connexions. La valeur
14122 par défaut est @samp{0}.
14123 @end deftypevr
14124
14125 @deftypevr {paramètre de @code{service-configuration}} non-negative-integer vsz-limit
14126 Si vous mettez @samp{service-count 0}, vous avez sans doute besoin
14127 d'augmenter ce paramètre. La valeur par défaut est @samp{256000000}.
14128 @end deftypevr
14129
14130 @end deftypevr
14131
14132 @deftypevr {paramètre de @code{dovecot-configuration}} dict-configuration dict
14133 Configuration du dictionnaire, créé par le constructeur
14134 @code{dict-configuration}.
14135
14136 Les champs de @code{dict-configuration} disponibles sont :
14137
14138 @deftypevr {paramètre de @code{dict-configuration}} free-form-fields entries
14139 Une liste de paires de clefs-valeurs que ce dictionnaire contient. La
14140 valeur par défaut est @samp{()}.
14141 @end deftypevr
14142
14143 @end deftypevr
14144
14145 @deftypevr {paramètre de @code{dovecot-configuration}} passdb-configuration-list passdbs
14146 Une liste de configurations passdb, chacune créée par le constructeur
14147 @code{passdb-configuration}.
14148
14149 Les champs de @code{passdb-configuration} disponibles sont :
14150
14151 @deftypevr {paramètre de @code{passdb-configuration}} string driver
14152 Le pilote à utiliser par passdb. Les valeur valides comprennent @samp{pam},
14153 @samp{passwd}, @samp{shadow}, @samp{bsdauth} et @samp{static}. La valeur
14154 par défaut est @samp{"pam"}.
14155 @end deftypevr
14156
14157 @deftypevr {paramètre de @code{passdb-configuration}} space-separated-string-list args
14158 Liste d'arguments pour le pilote passdb séparés par des espaces. La valeur
14159 par défaut est @samp{""}.
14160 @end deftypevr
14161
14162 @end deftypevr
14163
14164 @deftypevr {paramètre de @code{dovecot-configuration}} userdb-configuration-list userdbs
14165 Liste des configurations userdb, chacune créée par le constructeur
14166 @code{userdb-configuration}.
14167
14168 Les champs de @code{userdb-configuration} disponibles sont :
14169
14170 @deftypevr {paramètre de @code{userdb-configuration}} string driver
14171 Le pilote que userdb devrait utiliser. Les valeurs valides comprennent
14172 @samp{passwd} et @samp{static}. La valeur par défaut est @samp{"passwd"}.
14173 @end deftypevr
14174
14175 @deftypevr {paramètre de @code{userdb-configuration}} space-separated-string-list args
14176 Liste des arguments du pilote userdb séparés par des espaces. La valeur par
14177 défaut est @samp{""}.
14178 @end deftypevr
14179
14180 @deftypevr {paramètre de @code{userdb-configuration}} free-form-args override-fields
14181 Remplace des champs de passwd. La valeur par défaut est @samp{()}.
14182 @end deftypevr
14183
14184 @end deftypevr
14185
14186 @deftypevr {paramètre de @code{dovecot-configuration}} plugin-configuration plugin-configuration
14187 Configuration du greffon, créé par le constructeur
14188 @code{plugin-configuration}.
14189 @end deftypevr
14190
14191 @deftypevr {paramètre de @code{dovecot-configuration}} list-of-namespace-configuration namespaces
14192 Liste d'espaces de noms. Chaque élément de la liste est créé par le
14193 constructeur @code{namespace-configuration}.
14194
14195 Les champs de @code{namespace-configuration} disponibles sont :
14196
14197 @deftypevr {paramètre de @code{namespace-configuration}} string name
14198 Nom de cet espace de nom.
14199 @end deftypevr
14200
14201 @deftypevr {paramètre de @code{namespace-configuration}} string type
14202 Type d'espace de nom : @samp{private}, @samp{shared} ou @samp{public}. La
14203 valeur par défaut est @samp{"private"}.
14204 @end deftypevr
14205
14206 @deftypevr {paramètre de @code{namespace-configuration}} string separator
14207 Séparateur de hiérarchie à utiliser. Vous devriez utiliser le même
14208 séparateur pour tous les espaces de noms ou certains clients seront confus.
14209 @samp{/} est généralement une bonne valeur. La valeur par défaut dépend
14210 cependant du format de stockage sous-jacent. La valeur par défaut est
14211 @samp{""}.
14212 @end deftypevr
14213
14214 @deftypevr {paramètre de @code{namespace-configuration}} string prefix
14215 Préfixe requis pour accéder à cet espace de nom. Ce paramètres doit être
14216 différent pour tous les espaces de noms. Par exemple @samp{Public/}. La
14217 valeur par défaut est @samp{""}.
14218 @end deftypevr
14219
14220 @deftypevr {paramètre de @code{namespace-configuration}} string location
14221 Emplacement physique de la boîte aux lettres. C'est le même format que
14222 mail_location, qui est aussi la valeur par défaut. La valeur par défaut est
14223 @samp{""}.
14224 @end deftypevr
14225
14226 @deftypevr {paramètre de @code{namespace-configuration}} boolean inbox?
14227 Il ne peut y avoir qu'un INBOX, et ce paramètre définit l'espace de nom qui
14228 le possède. La valeur par défaut est @samp{#f}.
14229 @end deftypevr
14230
14231 @deftypevr {paramètre de @code{namespace-configuration}} boolean hidden?
14232 Si l'espace de nom est caché, il n'est pas publié auprès des clients par
14233 l'extension NAMESPACE. Vous voudrez aussi sans doute indiquer @samp{list?
14234 #f}. C'est surtout utile lors de la conversion depuis un autre serveur avec
14235 des espaces de noms différents que vous voulez rendre obsolètes sans les
14236 casser. Par exemple vous pouvez cacher les espaces de noms avec les
14237 préfixes @samp{~/mail/}, @samp{~%u/mail/} et @samp{mail/}. La valeur par
14238 défaut est @samp{#f}.
14239 @end deftypevr
14240
14241 @deftypevr {paramètre de @code{namespace-configuration}} boolean list?
14242 Montre les boîtes aux lettres sons cet espace de nom avec la commande LIST.
14243 Cela rend l'espace de nom visible pour les clients qui ne supportent pas
14244 l'extension NAMESPACE. La valeur spéciale @code{children} liste les boîtes
14245 aux lettres filles mais cache le préfixe de l'espace de nom. La valeur par
14246 défaut est @samp{#t}.
14247 @end deftypevr
14248
14249 @deftypevr {paramètre de @code{namespace-configuration}} boolean subscriptions?
14250 Les espaces de noms gèrent leur propre souscription. Si la valeur est
14251 @code{#f}, l'espace de nom parent s'en charge. Le préfixe vide devrait
14252 toujours avoir cette valeur à @code{#t}. La valeur par défaut est
14253 @samp{#t}.
14254 @end deftypevr
14255
14256 @deftypevr {paramètre de @code{namespace-configuration}} mailbox-configuration-list mailboxes
14257 Liste des boîtes aux lettres prédéfinies dans cet espace de nom. La valeur
14258 par défaut est @samp{()}.
14259
14260 Les champs de @code{mailbox-configuration} disponibles sont :
14261
14262 @deftypevr {paramètre de @code{mailbox-configuration}} string name
14263 Nom de cette boîte aux lettres.
14264 @end deftypevr
14265
14266 @deftypevr {paramètre de @code{mailbox-configuration}} string auto
14267 @samp{create} créera automatiquement cette boîte aux lettres.
14268 @samp{subscribe} créera et souscrira à la boîte aux lettres. La valeur par
14269 défaut est @samp{"no"}.
14270 @end deftypevr
14271
14272 @deftypevr {paramètre de @code{mailbox-configuration}} space-separated-string-list special-use
14273 Liste des attributs @code{SPECIAL-USE} IMAP spécifiés par la RFC 6154. Les
14274 valeurs valides sont @code{\All}, @code{\Archive}, @code{\Drafts},
14275 @code{\Flagged}, @code{\Junk}, @code{\Sent} et @code{\Trash}. La valeur par
14276 défaut est @samp{()}.
14277 @end deftypevr
14278
14279 @end deftypevr
14280
14281 @end deftypevr
14282
14283 @deftypevr {paramètre de @code{dovecot-configuration}} file-name base-dir
14284 Répertoire de base où stocker les données d'exécution. La valeur par défaut
14285 est @samp{"/var/run/dovecot/"}.
14286 @end deftypevr
14287
14288 @deftypevr {paramètre de @code{dovecot-configuration}} string login-greeting
14289 Message d'accueil pour les clients. La valeur par défaut est @samp{"Dovecot
14290 ready."}.
14291 @end deftypevr
14292
14293 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-trusted-networks
14294 Liste des groupes d'adresses de confiance. Les connexions depuis ces IP
14295 sont autorisées à modifier leurs adresses IP et leurs ports (pour la
14296 connexion et la vérification d'authentification).
14297 @samp{disable-plaintext-auth} est aussi ignoré pour ces réseaux.
14298 Typiquement vous voudrez spécifier votre mandataire IMAP ici. La valeur par
14299 défaut est @samp{()}.
14300 @end deftypevr
14301
14302 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-access-sockets
14303 Liste des sockets de vérification d'accès de connexion (p.@: ex.@:
14304 tcpwrap). La valeur par défaut est @samp{()}.
14305 @end deftypevr
14306
14307 @deftypevr {paramètre de @code{dovecot-configuration}} boolean verbose-proctitle?
14308 Montre des titres de processus plus verbeux (dans ps). Actuellement, montre
14309 le nom d'utilisateur et l'adresse IP. Utile pour voir qui utilise les
14310 processus IMAP (p.@: ex.@: des boîtes aux lettres partagées ou si le même
14311 uid est utilisé pour plusieurs comptes). La valeur par défaut est
14312 @samp{#f}.
14313 @end deftypevr
14314
14315 @deftypevr {paramètre de @code{dovecot-configuration}} boolean shutdown-clients?
14316 Indique si les processus devraient toujours être tués lorsque le processus
14317 maître de Dovecot est éteint. La valeur @code{#f} signifie que Dovecot peut
14318 être mis à jour sans forcer les connexions clientes existantes à se fermer
14319 (bien que cela puisse être un problème si la mise à jour est un correctif de
14320 sécurité par exemple). La valeur par défaut est @samp{#t}.
14321 @end deftypevr
14322
14323 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer doveadm-worker-count
14324 Si la valeur n'est pas zéro, lance les commandes de courriel via ce nombre
14325 de connexions au serveur doveadm au lieu de les lancer dans le même
14326 processus. La valeur par défaut est @samp{0}.
14327 @end deftypevr
14328
14329 @deftypevr {paramètre de @code{dovecot-configuration}} string doveadm-socket-path
14330 Socket UNIX ou hôte:port utilisé pour se connecter au serveur doveadm. La
14331 valeur par défaut est @samp{"doveadm-server"}.
14332 @end deftypevr
14333
14334 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list import-environment
14335 Liste des variables d'environnement qui sont préservées au démarrage de
14336 Dovecot et passées à tous ses processus fils. Vous pouvez aussi donner des
14337 paires clef=valeur pour toujours spécifier ce paramètre.
14338 @end deftypevr
14339
14340 @deftypevr {paramètre de @code{dovecot-configuration}} boolean disable-plaintext-auth?
14341 Désactive la commande LOGIN et toutes les autres authentifications en texte
14342 clair à moins que SSL/TLS ne soit utilisé (capacité LOGINDISABLED).
14343 Remarquez que si l'IP distante correspond à l'IP locale (c.-à-d.@: que vous
14344 vous connectez depuis le même ordinateur), la connexion est considérée comme
14345 sécurisée et l'authentification en texte clair est permise. Voir aussi le
14346 paramètre ssl=required. La valeur par défaut est @samp{#t}.
14347 @end deftypevr
14348
14349 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer auth-cache-size
14350 Taille du cache d'authentification (p.@: ex.@: @samp{#e10e6}). 0 signifie
14351 qu'il est désactivé. Remarquez que bsdauth, PAM et vpopmail ont besoin que
14352 @samp{cache-key} soit indiqué pour que le cache soit utilisé. La valeur par
14353 défaut est @samp{0}.
14354 @end deftypevr
14355
14356 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-cache-ttl
14357 Durée de vie des données en cache. Après l'expiration du TTL
14358 l'enregistrement en cache n'est plus utilisé *sauf* si la requête à la base
14359 de données principale revoie une erreur interne. Nous essayons aussi de
14360 gérer les changements de mot de passe automatiquement : si
14361 l'authentification précédente de l'utilisateur était réussie mais pas
14362 celle-ci, le cache n'est pas utilisé. Pour l'instant cela fonctionne avec
14363 l'authentification en texte clair uniquement. La valeur par défaut est
14364 @samp{"1 hour"}.
14365 @end deftypevr
14366
14367 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-cache-negative-ttl
14368 TTL pour les résultats négatifs (l'utilisateur n'est pas trouvé ou le mot de
14369 passe ne correspond pas). 0 désactive la mise en cache complètement. La
14370 valeur par défaut est @samp{"1 hour"}.
14371 @end deftypevr
14372
14373 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list auth-realms
14374 Liste des domaines pour les mécanismes d'authentification SASL qui en ont
14375 besoin. Vous pouvez laisser ce paramètre vide si vous ne voulez pas
14376 utiliser plusieurs domaines. Beaucoup de clients utilisent le premier
14377 domaine listé ici, donc gardez celui par défaut en premier. La valeur par
14378 défaut est @samp{()}
14379 @end deftypevr
14380
14381 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-default-realm
14382 Domaine par défaut à utiliser si aucun n'est spécifié. C'est utilisé pour
14383 les domaines SASL et pour ajouter @@domaine au nom d'utilisateur dans les
14384 authentification en texte clair. La valeur par défaut est @samp{""}.
14385 @end deftypevr
14386
14387 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-chars
14388 Liste des caractères autorisés dans les noms d'utilisateur. Si le nom
14389 d'utilisateur donné par l'utilisateur contient un caractère qui n'est pas
14390 listé ici, la connexion échoue automatiquement. C'est juste une
14391 vérification supplémentaire pour s'assure que l'utilisateur ne puisse pas
14392 exploiter des vulnérabilités potentielles d'échappement de guillemets avec
14393 les bases de données SQL/LDAP. Si vous voulez autoriser tous les
14394 caractères, indiquez la liste vide.
14395 @end deftypevr
14396
14397 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-translation
14398 Traduction de caractères dans les noms d'utilisateur avant qu'ils ne soient
14399 cherchés en base. La valeur contient une série de caractère de -> à. Par
14400 exemple @samp{#@@/@@} signifie que @samp{#} et @samp{/} sont traduits en
14401 @samp{@@}. La valeur par défaut est @samp{""}.
14402 @end deftypevr
14403
14404 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-format
14405 Format des noms d'utilisateur avant qu'ils ne soient cherchés en base. Vous
14406 pouvez utiliser les variables standard ici, p.@: ex.@: %Lu est le nom
14407 d'utilisateur en minuscule, %n enlève le domaine s'il est donné ou
14408 @samp{%n-AT-%d} changerait le @samp{@@} en @samp{-AT-}. Cette traduction
14409 est faite après les changements de @samp{auth-username-translation}. La
14410 valeur par défaut est @samp{"%Lu"}.
14411 @end deftypevr
14412
14413 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-master-user-separator
14414 Si vous voulez permettre aux utilisateurs maîtres de se connecter en
14415 spécifiant le nom d'utilisateur maître dans la chaîne de nom d'utilisateur
14416 normal (c.-à-d.@: sans utiliser le support du mécanisme SASL pour cela),
14417 vous pouvez spécifier le caractère de séparation ici. Le format est ensuite
14418 <nom d'utilisateur><séparateur><nom d'utilisateur maître>. UW-IMAP utilise
14419 @samp{*} comme séparateur, donc ça pourrait être un bon choix. La valeur
14420 par défaut est @samp{""}.
14421 @end deftypevr
14422
14423 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-anonymous-username
14424 Nom d'utilisateur à utiliser pour les utilisateurs qui se connectent avec le
14425 mécanisme SASL ANONYMOUS. La valeur par défaut est @samp{"anonymous"}.
14426 @end deftypevr
14427
14428 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer auth-worker-max-count
14429 Nombre maximum de processus de travail dovecot-auth. Ils sont utilisés pour
14430 exécuter des requêtes passdb et userdb bloquantes (p.@: ex.@: MySQL et
14431 PAM). Ils sont créés automatiquement et détruits au besoin. La valeur par
14432 défaut est @samp{30}.
14433 @end deftypevr
14434
14435 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-gssapi-hostname
14436 Nom d'hôte à utiliser dans les noms GSSAPI principaux. La valeur par défaut
14437 est d'utiliser le nom renvoyé par gethostname(). Utilisez @samp{$ALL} (avec
14438 des guillemets) pour permettre toutes les entrées keytab. La valeur par
14439 défaut est @samp{""}.
14440 @end deftypevr
14441
14442 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-krb5-keytab
14443 Keytab Kerberos à utiliser pour le mécanisme GSSAPI. Utilisera la valeur
14444 par défaut du système (typiquement @file{/etc/krb5.keytab}) s'il n'est pas
14445 spécifié. Vous pourriez avoir besoin de faire en sorte que le service
14446 d'authentification tourne en root pour pouvoir lire ce fichier. La valeur
14447 par défaut est @samp{""}.
14448 @end deftypevr
14449
14450 @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-use-winbind?
14451 Effectue l'authentification NTLM et GSS-SPNEGO avec le démon winbind de
14452 Samba et l'utilitaire @samp{ntlm-auth}.
14453 <doc/wiki/Authentication/Mechanisms/Winbind.txt>. La valeur par défaut est
14454 @samp{#f}.
14455 @end deftypevr
14456
14457 @deftypevr {paramètre de @code{dovecot-configuration}} file-name auth-winbind-helper-path
14458 Chemin du binaire @samp{ntlm-auth} de samba. La valeur par défaut est
14459 @samp{"/usr/bin/ntlm_auth"}.
14460 @end deftypevr
14461
14462 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-failure-delay
14463 Durée d'attente avant de répondre à des authentifications échouées. La
14464 valeur par défaut est @samp{"2 secs"}.
14465 @end deftypevr
14466
14467 @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-ssl-require-client-cert?
14468 Requiert un certification client SSL valide ou l'authentification échoue.
14469 La valeur par défaut est @samp{#f}.
14470 @end deftypevr
14471
14472 @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-ssl-username-from-cert?
14473 Prend le nom d'utilisateur du certificat SSL client, avec
14474 @code{X509_NAME_get_text_by_NID()} qui renvoie le CommonName du DN du
14475 sujet. La valeur par défaut est @samp{#f}.
14476 @end deftypevr
14477
14478 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list auth-mechanisms
14479 Liste des mécanismes d'authentification souhaités. Les mécanismes supportés
14480 sont : @samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
14481 @samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
14482 @samp{otp}, @samp{skey} et @samp{gss-spnego}. Remarquez : Voir aussi le
14483 paramètre @samp{disable-plaintext-auth}.
14484 @end deftypevr
14485
14486 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list director-servers
14487 Liste des IP ou des noms d'hôtes des serveurs directeurs, dont soi-même.
14488 Les ports peuvent être spécifiés avec ip:port. Le port par défaut est le
14489 même que le @samp{inet-listener} du service directeur. La valeur par défaut
14490 est @samp{()}.
14491 @end deftypevr
14492
14493 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list director-mail-servers
14494 Liste des IP ou des noms d'hôtes de tous les serveurs de courriel de la
14495 grappe. Les intervalles sont aussi permis, comme 10.0.0.10-10.0.0.30. La
14496 valeur par défaut est @samp{()}.
14497 @end deftypevr
14498
14499 @deftypevr {paramètre de @code{dovecot-configuration}} string director-user-expire
14500 Combien de temps avant de rediriger les utilisateurs à un serveur spécifique
14501 après qu'il n'y a plus de connexion. La valeur par défaut est @samp{"15
14502 min"}.
14503 @end deftypevr
14504
14505 @deftypevr {paramètre de @code{dovecot-configuration}} string director-username-hash
14506 La manière de traduire le nom d'utilisateur avant de le hasher. Les valeurs
14507 utiles comprennent %Ln si l'utilisateur peut se connecter avec ou sans
14508 @@domain, %Ld si les boîtes aux lettres sont partagées dans le domaine. La
14509 valeur par défaut est @samp{"%Lu"}.
14510 @end deftypevr
14511
14512 @deftypevr {paramètre de @code{dovecot-configuration}} string log-path
14513 Fichier de journal à utiliser pour les messages d'erreur. @samp{syslog}
14514 journalise vers syslog, @samp{/dev/stderr} vers la sortie d'erreur. La
14515 valeur par défaut est @samp{"syslog"}.
14516 @end deftypevr
14517
14518 @deftypevr {paramètre de @code{dovecot-configuration}} string info-log-path
14519 Fichier de journal à utiliser pour les messages d'information. La valeur
14520 par défaut est @samp{log-path}. La valeur par défaut est @samp{""}.
14521 @end deftypevr
14522
14523 @deftypevr {paramètre de @code{dovecot-configuration}} string debug-log-path
14524 Fichier de journal à utiliser pour les messages de débogage. La valeur par
14525 défaut est @samp{info-log-path}. La valeur par défaut est @samp{""}.
14526 @end deftypevr
14527
14528 @deftypevr {paramètre de @code{dovecot-configuration}} string syslog-facility
14529 Dispositif syslog à utiliser si vous journalisez avec syslog. Normalement
14530 si vous ne voulez pas utiliser @samp{mail}, vous voudrez utiliser
14531 local0..local7. D'autres dispositifs standard sont supportés. La valeur
14532 par défaut est @samp{"mail"}.
14533 @end deftypevr
14534
14535 @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-verbose?
14536 Log unsuccessful authentication attempts and the reasons why they failed.
14537 Defaults to @samp{#f}.
14538 @end deftypevr
14539
14540 @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-verbose-passwords?
14541 In case of password mismatches, log the attempted password. Valid values
14542 are no, plain and sha1. sha1 can be useful for detecting brute force
14543 password attempts vs. user simply trying the same password over and over
14544 again. You can also truncate the value to n chars by appending ":n"
14545 (e.g. sha1:6). Defaults to @samp{#f}.
14546 @end deftypevr
14547
14548 @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-debug?
14549 Even more verbose logging for debugging purposes. Shows for example SQL
14550 queries. Defaults to @samp{#f}.
14551 @end deftypevr
14552
14553 @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-debug-passwords?
14554 In case of password mismatches, log the passwords and used scheme so the
14555 problem can be debugged. Enabling this also enables @samp{auth-debug}.
14556 Defaults to @samp{#f}.
14557 @end deftypevr
14558
14559 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-debug?
14560 Enable mail process debugging. This can help you figure out why Dovecot
14561 isn't finding your mails. Defaults to @samp{#f}.
14562 @end deftypevr
14563
14564 @deftypevr {paramètre de @code{dovecot-configuration}} boolean verbose-ssl?
14565 Show protocol level SSL errors. Defaults to @samp{#f}.
14566 @end deftypevr
14567
14568 @deftypevr {paramètre de @code{dovecot-configuration}} string log-timestamp
14569 Prefix for each line written to log file. % codes are in strftime(3)
14570 format. Defaults to @samp{"\"%b %d %H:%M:%S \""}.
14571 @end deftypevr
14572
14573 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-log-format-elements
14574 List of elements we want to log. The elements which have a non-empty
14575 variable value are joined together to form a comma-separated string.
14576 @end deftypevr
14577
14578 @deftypevr {paramètre de @code{dovecot-configuration}} string login-log-format
14579 Login log format. %s contains @samp{login-log-format-elements} string, %$
14580 contains the data we want to log. Defaults to @samp{"%$: %s"}.
14581 @end deftypevr
14582
14583 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-log-prefix
14584 Log prefix for mail processes. See doc/wiki/Variables.txt for list of
14585 possible variables you can use. Defaults to
14586 @samp{"\"%s(%u)<%@{pid@}><%@{session@}>: \""}.
14587 @end deftypevr
14588
14589 @deftypevr {paramètre de @code{dovecot-configuration}} string deliver-log-format
14590 Format to use for logging mail deliveries. You can use variables:
14591 @table @code
14592 @item %$
14593 Delivery status message (e.g. @samp{saved to INBOX})
14594 @item %m
14595 Message-ID
14596 @item %s
14597 Subject
14598 @item %f
14599 From address
14600 @item %p
14601 Physical size
14602 @item %w
14603 Virtual size.
14604 @end table
14605 La valeur par défaut est @samp{"msgid=%m: %$"}.
14606 @end deftypevr
14607
14608 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-location
14609 Location for users' mailboxes. The default is empty, which means that
14610 Dovecot tries to find the mailboxes automatically. This won't work if the
14611 user doesn't yet have any mail, so you should explicitly tell Dovecot the
14612 full location.
14613
14614 If you're using mbox, giving a path to the INBOX file (e.g. /var/mail/%u)
14615 isn't enough. You'll also need to tell Dovecot where the other mailboxes
14616 are kept. This is called the "root mail directory", and it must be the
14617 first path given in the @samp{mail-location} setting.
14618
14619 There are a few special variables you can use, eg.:
14620
14621 @table @samp
14622 @item %u
14623 username
14624 @item %n
14625 user part in user@@domain, same as %u if there's no domain
14626 @item %d
14627 domain part in user@@domain, empty if there's no domain
14628 @item %h
14629 home director
14630 @end table
14631
14632 See doc/wiki/Variables.txt for full list. Some examples:
14633 @table @samp
14634 @item maildir:~/Maildir
14635 @item mbox:~/mail:INBOX=/var/mail/%u
14636 @item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
14637 @end table
14638 La valeur par défaut est @samp{""}.
14639 @end deftypevr
14640
14641 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-uid
14642 System user and group used to access mails. If you use multiple, userdb can
14643 override these by returning uid or gid fields. You can use either numbers
14644 or names. <doc/wiki/UserIds.txt>. Defaults to @samp{""}.
14645 @end deftypevr
14646
14647 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-gid
14648
14649 La valeur par défaut est @samp{""}.
14650 @end deftypevr
14651
14652 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-privileged-group
14653 Group to enable temporarily for privileged operations. Currently this is
14654 used only with INBOX when either its initial creation or dotlocking fails.
14655 Typically this is set to "mail" to give access to /var/mail. Defaults to
14656 @samp{""}.
14657 @end deftypevr
14658
14659 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-access-groups
14660 Grant access to these supplementary groups for mail processes. Typically
14661 these are used to set up access to shared mailboxes. Note that it may be
14662 dangerous to set these if users can create symlinks (e.g. if "mail" group is
14663 set here, ln -s /var/mail ~/mail/var could allow a user to delete others'
14664 mailboxes, or ln -s /secret/shared/box ~/mail/mybox would allow reading
14665 it). Defaults to @samp{""}.
14666 @end deftypevr
14667
14668 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-full-filesystem-access?
14669 Allow full file system access to clients. There's no access checks other
14670 than what the operating system does for the active UID/GID. It works with
14671 both maildir and mboxes, allowing you to prefix mailboxes names with
14672 e.g. /path/ or ~user/. Defaults to @samp{#f}.
14673 @end deftypevr
14674
14675 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mmap-disable?
14676 Don't use mmap() at all. This is required if you store indexes to shared
14677 file systems (NFS or clustered file system). Defaults to @samp{#f}.
14678 @end deftypevr
14679
14680 @deftypevr {paramètre de @code{dovecot-configuration}} boolean dotlock-use-excl?
14681 Rely on @samp{O_EXCL} to work when creating dotlock files. NFS supports
14682 @samp{O_EXCL} since version 3, so this should be safe to use nowadays by
14683 default. Defaults to @samp{#t}.
14684 @end deftypevr
14685
14686 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-fsync
14687 When to use fsync() or fdatasync() calls:
14688 @table @code
14689 @item optimized
14690 Whenever necessary to avoid losing important data
14691 @item always
14692 Useful with e.g. NFS when write()s are delayed
14693 @item never
14694 Never use it (best performance, but crashes can lose data).
14695 @end table
14696 La valeur par défaut est @samp{"optimized"}.
14697 @end deftypevr
14698
14699 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-nfs-storage?
14700 Mail storage exists in NFS. Set this to yes to make Dovecot flush NFS
14701 caches whenever needed. If you're using only a single mail server this
14702 isn't needed. Defaults to @samp{#f}.
14703 @end deftypevr
14704
14705 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-nfs-index?
14706 Mail index files also exist in NFS. Setting this to yes requires
14707 @samp{mmap-disable? #t} and @samp{fsync-disable? #f}. Defaults to
14708 @samp{#f}.
14709 @end deftypevr
14710
14711 @deftypevr {paramètre de @code{dovecot-configuration}} string lock-method
14712 Locking method for index files. Alternatives are fcntl, flock and dotlock.
14713 Dotlocking uses some tricks which may create more disk I/O than other
14714 locking methods. NFS users: flock doesn't work, remember to change
14715 @samp{mmap-disable}. Defaults to @samp{"fcntl"}.
14716 @end deftypevr
14717
14718 @deftypevr {paramètre de @code{dovecot-configuration}} file-name mail-temp-dir
14719 Directory in which LDA/LMTP temporarily stores incoming mails >128 kB.
14720 Defaults to @samp{"/tmp"}.
14721 @end deftypevr
14722
14723 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer first-valid-uid
14724 Valid UID range for users. This is mostly to make sure that users can't log
14725 in as daemons or other system users. Note that denying root logins is
14726 hardcoded to dovecot binary and can't be done even if @samp{first-valid-uid}
14727 is set to 0. Defaults to @samp{500}.
14728 @end deftypevr
14729
14730 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer last-valid-uid
14731
14732 La valeur par défaut est @samp{0}.
14733 @end deftypevr
14734
14735 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer first-valid-gid
14736 Valid GID range for users. Users having non-valid GID as primary group ID
14737 aren't allowed to log in. If user belongs to supplementary groups with
14738 non-valid GIDs, those groups are not set. Defaults to @samp{1}.
14739 @end deftypevr
14740
14741 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer last-valid-gid
14742
14743 La valeur par défaut est @samp{0}.
14744 @end deftypevr
14745
14746 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-max-keyword-length
14747 Maximum allowed length for mail keyword name. It's only forced when trying
14748 to create new keywords. Defaults to @samp{50}.
14749 @end deftypevr
14750
14751 @deftypevr {paramètre de @code{dovecot-configuration}} colon-separated-file-name-list valid-chroot-dirs
14752 List of directories under which chrooting is allowed for mail processes
14753 (i.e. /var/mail will allow chrooting to /var/mail/foo/bar too). This
14754 setting doesn't affect @samp{login-chroot} @samp{mail-chroot} or auth chroot
14755 settings. If this setting is empty, "/./" in home dirs are ignored.
14756 WARNING: Never add directories here which local users can modify, that may
14757 lead to root exploit. Usually this should be done only if you don't allow
14758 shell access for users. <doc/wiki/Chrooting.txt>. Defaults to @samp{()}.
14759 @end deftypevr
14760
14761 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-chroot
14762 Default chroot directory for mail processes. This can be overridden for
14763 specific users in user database by giving /./ in user's home directory
14764 (e.g. /home/./user chroots into /home). Note that usually there is no real
14765 need to do chrooting, Dovecot doesn't allow users to access files outside
14766 their mail directory anyway. If your home directories are prefixed with the
14767 chroot directory, append "/." to @samp{mail-chroot}.
14768 <doc/wiki/Chrooting.txt>. Defaults to @samp{""}.
14769 @end deftypevr
14770
14771 @deftypevr {paramètre de @code{dovecot-configuration}} file-name auth-socket-path
14772 UNIX socket path to master authentication server to find users. This is
14773 used by imap (for shared users) and lda. Defaults to
14774 @samp{"/var/run/dovecot/auth-userdb"}.
14775 @end deftypevr
14776
14777 @deftypevr {paramètre de @code{dovecot-configuration}} file-name mail-plugin-dir
14778 Directory where to look up mail plugins. Defaults to
14779 @samp{"/usr/lib/dovecot"}.
14780 @end deftypevr
14781
14782 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mail-plugins
14783 List of plugins to load for all services. Plugins specific to IMAP, LDA,
14784 etc. are added to this list in their own .conf files. Defaults to
14785 @samp{()}.
14786 @end deftypevr
14787
14788 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-cache-min-mail-count
14789 The minimum number of mails in a mailbox before updates are done to cache
14790 file. This allows optimizing Dovecot's behavior to do less disk writes at
14791 the cost of more disk reads. Defaults to @samp{0}.
14792 @end deftypevr
14793
14794 @deftypevr {paramètre de @code{dovecot-configuration}} string mailbox-idle-check-interval
14795 When IDLE command is running, mailbox is checked once in a while to see if
14796 there are any new mails or other changes. This setting defines the minimum
14797 time to wait between those checks. Dovecot can also use dnotify, inotify
14798 and kqueue to find out immediately when changes occur. Defaults to
14799 @samp{"30 secs"}.
14800 @end deftypevr
14801
14802 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-save-crlf?
14803 Save mails with CR+LF instead of plain LF. This makes sending those mails
14804 take less CPU, especially with sendfile() syscall with Linux and FreeBSD.
14805 But it also creates a bit more disk I/O which may just make it slower. Also
14806 note that if other software reads the mboxes/maildirs, they may handle the
14807 extra CRs wrong and cause problems. Defaults to @samp{#f}.
14808 @end deftypevr
14809
14810 @deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-stat-dirs?
14811 By default LIST command returns all entries in maildir beginning with a
14812 dot. Enabling this option makes Dovecot return only entries which are
14813 directories. This is done by stat()ing each entry, so it causes more disk
14814 I/O. (For systems setting struct @samp{dirent->d_type} this check is free
14815 and it's done always regardless of this setting). Defaults to @samp{#f}.
14816 @end deftypevr
14817
14818 @deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-copy-with-hardlinks?
14819 When copying a message, do it with hard links whenever possible. This makes
14820 the performance much better, and it's unlikely to have any side effects.
14821 Defaults to @samp{#t}.
14822 @end deftypevr
14823
14824 @deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-very-dirty-syncs?
14825 Assume Dovecot is the only MUA accessing Maildir: Scan cur/ directory only
14826 when its mtime changes unexpectedly or when we can't find the mail
14827 otherwise. Defaults to @samp{#f}.
14828 @end deftypevr
14829
14830 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mbox-read-locks
14831 Which locking methods to use for locking mbox. There are four available:
14832
14833 @table @code
14834 @item dotlock
14835 Create <mailbox>.lock file. This is the oldest and most NFS-safe solution.
14836 If you want to use /var/mail/ like directory, the users will need write
14837 access to that directory.
14838 @item dotlock-try
14839 Same as dotlock, but if it fails because of permissions or because there
14840 isn't enough disk space, just skip it.
14841 @item fcntl
14842 Use this if possible. Works with NFS too if lockd is used.
14843 @item flock
14844 May not exist in all systems. Doesn't work with NFS.
14845 @item lockf
14846 May not exist in all systems. Doesn't work with NFS.
14847 @end table
14848
14849 You can use multiple locking methods; if you do the order they're declared
14850 in is important to avoid deadlocks if other MTAs/MUAs are using multiple
14851 locking methods as well. Some operating systems don't allow using some of
14852 them simultaneously.
14853 @end deftypevr
14854
14855 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mbox-write-locks
14856
14857 @end deftypevr
14858
14859 @deftypevr {paramètre de @code{dovecot-configuration}} string mbox-lock-timeout
14860 Maximum time to wait for lock (all of them) before aborting. Defaults to
14861 @samp{"5 mins"}.
14862 @end deftypevr
14863
14864 @deftypevr {paramètre de @code{dovecot-configuration}} string mbox-dotlock-change-timeout
14865 If dotlock exists but the mailbox isn't modified in any way, override the
14866 lock file after this much time. Defaults to @samp{"2 mins"}.
14867 @end deftypevr
14868
14869 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-dirty-syncs?
14870 When mbox changes unexpectedly we have to fully read it to find out what
14871 changed. If the mbox is large this can take a long time. Since the change
14872 is usually just a newly appended mail, it'd be faster to simply read the new
14873 mails. If this setting is enabled, Dovecot does this but still safely
14874 fallbacks to re-reading the whole mbox file whenever something in mbox isn't
14875 how it's expected to be. The only real downside to this setting is that if
14876 some other MUA changes message flags, Dovecot doesn't notice it
14877 immediately. Note that a full sync is done with SELECT, EXAMINE, EXPUNGE
14878 and CHECK commands. Defaults to @samp{#t}.
14879 @end deftypevr
14880
14881 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-very-dirty-syncs?
14882 Like @samp{mbox-dirty-syncs}, but don't do full syncs even with SELECT,
14883 EXAMINE, EXPUNGE or CHECK commands. If this is set, @samp{mbox-dirty-syncs}
14884 is ignored. Defaults to @samp{#f}.
14885 @end deftypevr
14886
14887 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-lazy-writes?
14888 Delay writing mbox headers until doing a full write sync (EXPUNGE and CHECK
14889 commands and when closing the mailbox). This is especially useful for POP3
14890 where clients often delete all mails. The downside is that our changes
14891 aren't immediately visible to other MUAs. Defaults to @samp{#t}.
14892 @end deftypevr
14893
14894 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mbox-min-index-size
14895 If mbox size is smaller than this (e.g. 100k), don't write index files. If
14896 an index file already exists it's still read, just not updated. Defaults to
14897 @samp{0}.
14898 @end deftypevr
14899
14900 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mdbox-rotate-size
14901 Maximum dbox file size until it's rotated. Defaults to @samp{10000000}.
14902 @end deftypevr
14903
14904 @deftypevr {paramètre de @code{dovecot-configuration}} string mdbox-rotate-interval
14905 Maximum dbox file age until it's rotated. Typically in days. Day begins
14906 from midnight, so 1d = today, 2d = yesterday, etc. 0 = check disabled.
14907 Defaults to @samp{"1d"}.
14908 @end deftypevr
14909
14910 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mdbox-preallocate-space?
14911 When creating new mdbox files, immediately preallocate their size to
14912 @samp{mdbox-rotate-size}. This setting currently works only in Linux with
14913 some file systems (ext4, xfs). Defaults to @samp{#f}.
14914 @end deftypevr
14915
14916 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-dir
14917 sdbox and mdbox support saving mail attachments to external files, which
14918 also allows single instance storage for them. Other backends don't support
14919 this for now.
14920
14921 WARNING: This feature hasn't been tested much yet. Use at your own risk.
14922
14923 Directory root where to store mail attachments. Disabled, if empty.
14924 Defaults to @samp{""}.
14925 @end deftypevr
14926
14927 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-attachment-min-size
14928 Attachments smaller than this aren't saved externally. It's also possible
14929 to write a plugin to disable saving specific attachments externally.
14930 Defaults to @samp{128000}.
14931 @end deftypevr
14932
14933 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-fs
14934 File system backend to use for saving attachments:
14935 @table @code
14936 @item posix
14937 No SiS done by Dovecot (but this might help FS's own deduplication)
14938 @item sis posix
14939 SiS with immediate byte-by-byte comparison during saving
14940 @item sis-queue posix
14941 SiS with delayed comparison and deduplication.
14942 @end table
14943 La valeur par défaut est @samp{"sis posix"}.
14944 @end deftypevr
14945
14946 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-hash
14947 Hash format to use in attachment filenames. You can add any text and
14948 variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}},
14949 @code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}. Variables can be
14950 truncated, e.g. @code{%@{sha256:80@}} returns only first 80 bits. Defaults
14951 to @samp{"%@{sha1@}"}.
14952 @end deftypevr
14953
14954 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-process-limit
14955
14956 La valeur par défaut est @samp{100}.
14957 @end deftypevr
14958
14959 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-client-limit
14960
14961 La valeur par défaut est @samp{1000}.
14962 @end deftypevr
14963
14964 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-vsz-limit
14965 Default VSZ (virtual memory size) limit for service processes. This is
14966 mainly intended to catch and kill processes that leak memory before they eat
14967 up everything. Defaults to @samp{256000000}.
14968 @end deftypevr
14969
14970 @deftypevr {paramètre de @code{dovecot-configuration}} string default-login-user
14971 Login user is internally used by login processes. This is the most
14972 untrusted user in Dovecot system. It shouldn't have access to anything at
14973 all. Defaults to @samp{"dovenull"}.
14974 @end deftypevr
14975
14976 @deftypevr {paramètre de @code{dovecot-configuration}} string default-internal-user
14977 Internal user is used by unprivileged processes. It should be separate from
14978 login user, so that login processes can't disturb other processes. Defaults
14979 to @samp{"dovecot"}.
14980 @end deftypevr
14981
14982 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl?
14983 SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>. Defaults to
14984 @samp{"required"}.
14985 @end deftypevr
14986
14987 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cert
14988 PEM encoded X.509 SSL/TLS certificate (public key). Defaults to
14989 @samp{"</etc/dovecot/default.pem"}.
14990 @end deftypevr
14991
14992 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-key
14993 PEM encoded SSL/TLS private key. The key is opened before dropping root
14994 privileges, so keep the key file unreadable by anyone but root. Defaults to
14995 @samp{"</etc/dovecot/private/default.pem"}.
14996 @end deftypevr
14997
14998 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-key-password
14999 If key file is password protected, give the password here. Alternatively
15000 give it when starting dovecot with -p parameter. Since this file is often
15001 world-readable, you may want to place this setting instead to a different.
15002 Defaults to @samp{""}.
15003 @end deftypevr
15004
15005 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-ca
15006 PEM encoded trusted certificate authority. Set this only if you intend to
15007 use @samp{ssl-verify-client-cert? #t}. The file should contain the CA
15008 certificate(s) followed by the matching CRL(s). (e.g. @samp{ssl-ca
15009 </etc/ssl/certs/ca.pem}). Defaults to @samp{""}.
15010 @end deftypevr
15011
15012 @deftypevr {paramètre de @code{dovecot-configuration}} boolean ssl-require-crl?
15013 Require that CRL check succeeds for client certificates. Defaults to
15014 @samp{#t}.
15015 @end deftypevr
15016
15017 @deftypevr {paramètre de @code{dovecot-configuration}} boolean ssl-verify-client-cert?
15018 Request client to send a certificate. If you also want to require it, set
15019 @samp{auth-ssl-require-client-cert? #t} in auth section. Defaults to
15020 @samp{#f}.
15021 @end deftypevr
15022
15023 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cert-username-field
15024 Which field from certificate to use for username. commonName and
15025 x500UniqueIdentifier are the usual choices. You'll also need to set
15026 @samp{auth-ssl-username-from-cert? #t}. Defaults to @samp{"commonName"}.
15027 @end deftypevr
15028
15029 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-min-protocol
15030 Minimum SSL protocol version to accept. Defaults to @samp{"TLSv1"}.
15031 @end deftypevr
15032
15033 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cipher-list
15034 SSL ciphers to use. Defaults to
15035 @samp{"ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@@STRENGTH"}.
15036 @end deftypevr
15037
15038 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-crypto-device
15039 SSL crypto device to use, for valid values run "openssl engine". Defaults
15040 to @samp{""}.
15041 @end deftypevr
15042
15043 @deftypevr {paramètre de @code{dovecot-configuration}} string postmaster-address
15044 Address to use when sending rejection mails. %d expands to recipient
15045 domain. Defaults to @samp{"postmaster@@%d"}.
15046 @end deftypevr
15047
15048 @deftypevr {paramètre de @code{dovecot-configuration}} string hostname
15049 Hostname to use in various parts of sent mails (e.g. in Message-Id) and in
15050 LMTP replies. Default is the system's real hostname@@domain. Defaults to
15051 @samp{""}.
15052 @end deftypevr
15053
15054 @deftypevr {paramètre de @code{dovecot-configuration}} boolean quota-full-tempfail?
15055 If user is over quota, return with temporary failure instead of bouncing the
15056 mail. Defaults to @samp{#f}.
15057 @end deftypevr
15058
15059 @deftypevr {paramètre de @code{dovecot-configuration}} file-name sendmail-path
15060 Binary to use for sending mails. Defaults to @samp{"/usr/sbin/sendmail"}.
15061 @end deftypevr
15062
15063 @deftypevr {paramètre de @code{dovecot-configuration}} string submission-host
15064 If non-empty, send mails via this SMTP host[:port] instead of sendmail.
15065 Defaults to @samp{""}.
15066 @end deftypevr
15067
15068 @deftypevr {paramètre de @code{dovecot-configuration}} string rejection-subject
15069 Subject: header to use for rejection mails. You can use the same variables
15070 as for @samp{rejection-reason} below. Defaults to @samp{"Rejected: %s"}.
15071 @end deftypevr
15072
15073 @deftypevr {paramètre de @code{dovecot-configuration}} string rejection-reason
15074 Human readable error message for rejection mails. You can use variables:
15075
15076 @table @code
15077 @item %n
15078 CRLF
15079 @item %r
15080 reason
15081 @item %s
15082 original subject
15083 @item %t
15084 recipient
15085 @end table
15086 La valeur par défaut est @samp{"Your message to <%t> was automatically
15087 rejected:%n%r"}.
15088 @end deftypevr
15089
15090 @deftypevr {paramètre de @code{dovecot-configuration}} string recipient-delimiter
15091 Delimiter character between local-part and detail in email address.
15092 Defaults to @samp{"+"}.
15093 @end deftypevr
15094
15095 @deftypevr {paramètre de @code{dovecot-configuration}} string lda-original-recipient-header
15096 Header where the original recipient address (SMTP's RCPT TO: address) is
15097 taken from if not available elsewhere. With dovecot-lda -a parameter
15098 overrides this. A commonly used header for this is X-Original-To. Defaults
15099 to @samp{""}.
15100 @end deftypevr
15101
15102 @deftypevr {paramètre de @code{dovecot-configuration}} boolean lda-mailbox-autocreate?
15103 Should saving a mail to a nonexistent mailbox automatically create it?.
15104 Defaults to @samp{#f}.
15105 @end deftypevr
15106
15107 @deftypevr {paramètre de @code{dovecot-configuration}} boolean lda-mailbox-autosubscribe?
15108 Should automatically created mailboxes be also automatically subscribed?.
15109 Defaults to @samp{#f}.
15110 @end deftypevr
15111
15112 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer imap-max-line-length
15113 Maximum IMAP command line length. Some clients generate very long command
15114 lines with huge mailboxes, so you may need to raise this if you get "Too
15115 long argument" or "IMAP command line too large" errors often. Defaults to
15116 @samp{64000}.
15117 @end deftypevr
15118
15119 @deftypevr {paramètre de @code{dovecot-configuration}} string imap-logout-format
15120 IMAP logout format string:
15121 @table @code
15122 @item %i
15123 total number of bytes read from client
15124 @item %o
15125 total number of bytes sent to client.
15126 @end table
15127 See @file{doc/wiki/Variables.txt} for a list of all the variables you can
15128 use. Defaults to @samp{"in=%i out=%o deleted=%@{deleted@}
15129 expunged=%@{expunged@} trashed=%@{trashed@} hdr_count=%@{fetch_hdr_count@}
15130 hdr_bytes=%@{fetch_hdr_bytes@} body_count=%@{fetch_body_count@}
15131 body_bytes=%@{fetch_body_bytes@}"}.
15132 @end deftypevr
15133
15134 @deftypevr {paramètre de @code{dovecot-configuration}} string imap-capability
15135 Override the IMAP CAPABILITY response. If the value begins with '+', add
15136 the given capabilities on top of the defaults (e.g. +XFOO XBAR). Defaults
15137 to @samp{""}.
15138 @end deftypevr
15139
15140 @deftypevr {paramètre de @code{dovecot-configuration}} string imap-idle-notify-interval
15141 How long to wait between "OK Still here" notifications when client is
15142 IDLEing. Defaults to @samp{"2 mins"}.
15143 @end deftypevr
15144
15145 @deftypevr {paramètre de @code{dovecot-configuration}} string imap-id-send
15146 ID field names and values to send to clients. Using * as the value makes
15147 Dovecot use the default value. The following fields have default values
15148 currently: name, version, os, os-version, support-url, support-email.
15149 Defaults to @samp{""}.
15150 @end deftypevr
15151
15152 @deftypevr {paramètre de @code{dovecot-configuration}} string imap-id-log
15153 ID fields sent by client to log. * means everything. Defaults to
15154 @samp{""}.
15155 @end deftypevr
15156
15157 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list imap-client-workarounds
15158 Workarounds for various client bugs:
15159
15160 @table @code
15161 @item delay-newmail
15162 Send EXISTS/RECENT new mail notifications only when replying to NOOP and
15163 CHECK commands. Some clients ignore them otherwise, for example OSX Mail
15164 (<v2.1). Outlook Express breaks more badly though, without this it may show
15165 user "Message no longer in server" errors. Note that OE6 still breaks even
15166 with this workaround if synchronization is set to "Headers Only".
15167
15168 @item tb-extra-mailbox-sep
15169 Thunderbird gets somehow confused with LAYOUT=fs (mbox and dbox) and adds
15170 extra @samp{/} suffixes to mailbox names. This option causes Dovecot to
15171 ignore the extra @samp{/} instead of treating it as invalid mailbox name.
15172
15173 @item tb-lsub-flags
15174 Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g. mbox). This
15175 makes Thunderbird realize they aren't selectable and show them greyed out,
15176 instead of only later giving "not selectable" popup error.
15177 @end table
15178 La valeur par défaut est @samp{()}.
15179 @end deftypevr
15180
15181 @deftypevr {paramètre de @code{dovecot-configuration}} string imap-urlauth-host
15182 Host allowed in URLAUTH URLs sent by client. "*" allows all. Defaults to
15183 @samp{""}.
15184 @end deftypevr
15185
15186
15187 Whew! Lots of configuration options. The nice thing about it though is that
15188 GuixSD has a complete interface to Dovecot's configuration language. This
15189 allows not only a nice way to declare configurations, but also offers
15190 reflective capabilities as well: users can write code to inspect and
15191 transform configurations from within Scheme.
15192
15193 However, it could be that you just want to get a @code{dovecot.conf} up and
15194 running. In that case, you can pass an @code{opaque-dovecot-configuration}
15195 as the @code{#:config} parameter to @code{dovecot-service}. As its name
15196 indicates, an opaque configuration does not have easy reflective
15197 capabilities.
15198
15199 Les champs de @code{opaque-dovecot-configuration} disponibles sont :
15200
15201 @deftypevr {paramètre de @code{opaque-dovecot-configuration}} package dovecot
15202 Le paquet dovecot
15203 @end deftypevr
15204
15205 @deftypevr {paramètre de @code{opaque-dovecot-configuration}} string string
15206 The contents of the @code{dovecot.conf}, as a string.
15207 @end deftypevr
15208
15209 For example, if your @code{dovecot.conf} is just the empty string, you could
15210 instantiate a dovecot service like this:
15211
15212 @example
15213 (dovecot-service #:config
15214 (opaque-dovecot-configuration
15215 (string "")))
15216 @end example
15217
15218 @subsubheading OpenSMTPD Service
15219
15220 @deffn {Variable Scheme} opensmtpd-service-type
15221 This is the type of the @uref{https://www.opensmtpd.org, OpenSMTPD} service,
15222 whose value should be an @code{opensmtpd-configuration} object as in this
15223 example:
15224
15225 @example
15226 (service opensmtpd-service-type
15227 (opensmtpd-configuration
15228 (config-file (local-file "./my-smtpd.conf"))))
15229 @end example
15230 @end deffn
15231
15232 @deftp {Type de données} opensmtpd-configuration
15233 Data type representing the configuration of opensmtpd.
15234
15235 @table @asis
15236 @item @code{package} (par défaut : @var{opensmtpd})
15237 Package object of the OpenSMTPD SMTP server.
15238
15239 @item @code{config-file} (par défaut : @var{%default-opensmtpd-file})
15240 File-like object of the OpenSMTPD configuration file to use. By default it
15241 listens on the loopback network interface, and allows for mail from users
15242 and daemons on the local machine, as well as permitting email to remote
15243 servers. Run @command{man smtpd.conf} for more information.
15244
15245 @end table
15246 @end deftp
15247
15248 @subsubheading Exim Service
15249
15250 @cindex mail transfer agent (MTA)
15251 @cindex MTA (mail transfer agent)
15252 @cindex SMTP
15253
15254 @deffn {Variable Scheme} exim-service-type
15255 This is the type of the @uref{https://exim.org, Exim} mail transfer agent
15256 (MTA), whose value should be an @code{exim-configuration} object as in this
15257 example:
15258
15259 @example
15260 (service exim-service-type
15261 (exim-configuration
15262 (config-file (local-file "./my-exim.conf"))))
15263 @end example
15264 @end deffn
15265
15266 In order to use an @code{exim-service-type} service you must also have a
15267 @code{mail-aliases-service-type} service present in your
15268 @code{operating-system} (even if it has no aliases).
15269
15270 @deftp {Type de données} exim-configuration
15271 Data type representing the configuration of exim.
15272
15273 @table @asis
15274 @item @code{package} (par défaut : @var{exim})
15275 Package object of the Exim server.
15276
15277 @item @code{config-file} (par défaut : @code{#f})
15278 File-like object of the Exim configuration file to use. If its value is
15279 @code{#f} then use the default configuration file from the package provided
15280 in @code{package}. The resulting configuration file is loaded after setting
15281 the @code{exim_user} and @code{exim_group} configuration variables.
15282
15283 @end table
15284 @end deftp
15285
15286 @subsubheading Mail Aliases Service
15287
15288 @cindex email aliases
15289 @cindex aliases, for email addresses
15290
15291 @deffn {Variable Scheme} mail-aliases-service-type
15292 This is the type of the service which provides @code{/etc/aliases},
15293 specifying how to deliver mail to users on this system.
15294
15295 @example
15296 (service mail-aliases-service-type
15297 '(("postmaster" "bob")
15298 ("bob" "bob@@example.com" "bob@@example2.com")))
15299 @end example
15300 @end deffn
15301
15302 The configuration for a @code{mail-aliases-service-type} service is an
15303 association list denoting how to deliver mail that comes to this
15304 system. Each entry is of the form @code{(alias addresses ...)}, with
15305 @code{alias} specifying the local alias and @code{addresses} specifying
15306 where to deliver this user's mail.
15307
15308 The aliases aren't required to exist as users on the local system. In the
15309 above example, there doesn't need to be a @code{postmaster} entry in the
15310 @code{operating-system}'s @code{user-accounts} in order to deliver the
15311 @code{postmaster} mail to @code{bob} (which subsequently would deliver mail
15312 to @code{bob@@example.com} and @code{bob@@example2.com}).
15313
15314 @node Services de messagerie
15315 @subsubsection Services de messagerie
15316
15317 @cindex messaging
15318 @cindex jabber
15319 @cindex XMPP
15320 The @code{(gnu services messaging)} module provides Guix service definitions
15321 for messaging services: currently only Prosody is supported.
15322
15323 @subsubheading Prosody Service
15324
15325 @deffn {Variable Scheme} prosody-service-type
15326 This is the type for the @uref{https://prosody.im, Prosody XMPP
15327 communication server}. Its value must be a @code{prosody-configuration}
15328 record as in this example:
15329
15330 @example
15331 (service prosody-service-type
15332 (prosody-configuration
15333 (modules-enabled (cons "groups" "mam" %default-modules-enabled))
15334 (int-components
15335 (list
15336 (int-component-configuration
15337 (hostname "conference.example.net")
15338 (plugin "muc")
15339 (mod-muc (mod-muc-configuration)))))
15340 (virtualhosts
15341 (list
15342 (virtualhost-configuration
15343 (domain "example.net"))))))
15344 @end example
15345
15346 See below for details about @code{prosody-configuration}.
15347
15348 @end deffn
15349
15350 By default, Prosody does not need much configuration. Only one
15351 @code{virtualhosts} field is needed: it specifies the domain you wish
15352 Prosody to serve.
15353
15354 You can perform various sanity checks on the generated configuration with
15355 the @code{prosodyctl check} command.
15356
15357 Prosodyctl will also help you to import certificates from the
15358 @code{letsencrypt} directory so that the @code{prosody} user can access
15359 them. See @url{https://prosody.im/doc/letsencrypt}.
15360
15361 @example
15362 prosodyctl --root cert import /etc/letsencrypt/live
15363 @end example
15364
15365 Les paramètres de configuration disponibles sont les suivants. Chaque
15366 définition des paramètres est précédé par son type ; par exemple,
15367 @samp{string-list foo} indique que le paramètre @code{foo} devrait être
15368 spécifié comme une liste de chaînes de caractères. Les types précédés de
15369 @code{maybe-} signifient que le paramètre n'apparaîtra pas dans
15370 @code{prosody.cfg.lua} lorsque sa valeur est @code{'disabled}.
15371
15372 There is also a way to specify the configuration as a string, if you have an
15373 old @code{prosody.cfg.lua} file that you want to port over from some other
15374 system; see the end for more details.
15375
15376 The @code{file-object} type designates either a file-like object
15377 (@pxref{G-Expressions, file-like objects}) or a file name.
15378
15379 @c The following documentation was initially generated by
15380 @c (generate-documentation) in (gnu services messaging). Manually maintained
15381 @c documentation is better, so we shouldn't hesitate to edit below as
15382 @c needed. However if the change you want to make to this documentation
15383 @c can be done in an automated way, it's probably easier to change
15384 @c (generate-documentation) than to make it below and have to deal with
15385 @c the churn as Prosody updates.
15386
15387 Les champs de @code{prosody-configuration} disponibles sont :
15388
15389 @deftypevr {paramètre de @code{prosody-configuration}} package prosody
15390 The Prosody package.
15391 @end deftypevr
15392
15393 @deftypevr {paramètre de @code{prosody-configuration}} file-name data-path
15394 Location of the Prosody data storage directory. See
15395 @url{https://prosody.im/doc/configure}. Defaults to
15396 @samp{"/var/lib/prosody"}.
15397 @end deftypevr
15398
15399 @deftypevr {paramètre de @code{prosody-configuration}} file-object-list plugin-paths
15400 Additional plugin directories. They are searched in all the specified paths
15401 in order. See @url{https://prosody.im/doc/plugins_directory}. Defaults to
15402 @samp{()}.
15403 @end deftypevr
15404
15405 @deftypevr {paramètre de @code{prosody-configuration}} file-name certificates
15406 Every virtual host and component needs a certificate so that clients and
15407 servers can securely verify its identity. Prosody will automatically load
15408 certificates/keys from the directory specified here. Defaults to
15409 @samp{"/etc/prosody/certs"}.
15410 @end deftypevr
15411
15412 @deftypevr {paramètre de @code{prosody-configuration}} string-list admins
15413 This is a list of accounts that are admins for the server. Note that you
15414 must create the accounts separately. See
15415 @url{https://prosody.im/doc/admins} and
15416 @url{https://prosody.im/doc/creating_accounts}. Example: @code{(admins
15417 '("user1@@example.com" "user2@@example.net"))} Defaults to @samp{()}.
15418 @end deftypevr
15419
15420 @deftypevr {paramètre de @code{prosody-configuration}} boolean use-libevent?
15421 Enable use of libevent for better performance under high load. See
15422 @url{https://prosody.im/doc/libevent}. Defaults to @samp{#f}.
15423 @end deftypevr
15424
15425 @deftypevr {paramètre de @code{prosody-configuration}} module-list modules-enabled
15426 This is the list of modules Prosody will load on startup. It looks for
15427 @code{mod_modulename.lua} in the plugins folder, so make sure that exists
15428 too. Documentation on modules can be found at:
15429 @url{https://prosody.im/doc/modules}. Defaults to @samp{("roster"
15430 "saslauth" "tls" "dialback" "disco" "carbons" "private" "blocklist" "vcard"
15431 "version" "uptime" "time" "ping" "pep" "register" "admin_adhoc")}.
15432 @end deftypevr
15433
15434 @deftypevr {paramètre de @code{prosody-configuration}} string-list modules-disabled
15435 @samp{"offline"}, @samp{"c2s"} and @samp{"s2s"} are auto-loaded, but should
15436 you want to disable them then add them to this list. Defaults to @samp{()}.
15437 @end deftypevr
15438
15439 @deftypevr {paramètre de @code{prosody-configuration}} file-object groups-file
15440 Path to a text file where the shared groups are defined. If this path is
15441 empty then @samp{mod_groups} does nothing. See
15442 @url{https://prosody.im/doc/modules/mod_groups}. Defaults to
15443 @samp{"/var/lib/prosody/sharedgroups.txt"}.
15444 @end deftypevr
15445
15446 @deftypevr {paramètre de @code{prosody-configuration}} boolean allow-registration?
15447 Disable account creation by default, for security. See
15448 @url{https://prosody.im/doc/creating_accounts}. Defaults to @samp{#f}.
15449 @end deftypevr
15450
15451 @deftypevr {paramètre de @code{prosody-configuration}} maybe-ssl-configuration ssl
15452 These are the SSL/TLS-related settings. Most of them are disabled so to use
15453 Prosody's defaults. If you do not completely understand these options, do
15454 not add them to your config, it is easy to lower the security of your server
15455 using them. See @url{https://prosody.im/doc/advanced_ssl_config}.
15456
15457 Les champs de @code{ssl-configuration} disponibles sont :
15458
15459 @deftypevr {paramètre de @code{ssl-configuration}} maybe-string protocol
15460 This determines what handshake to use.
15461 @end deftypevr
15462
15463 @deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name key
15464 Path to your private key file.
15465 @end deftypevr
15466
15467 @deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name certificate
15468 Path to your certificate file.
15469 @end deftypevr
15470
15471 @deftypevr {paramètre de @code{ssl-configuration}} file-object capath
15472 Path to directory containing root certificates that you wish Prosody to
15473 trust when verifying the certificates of remote servers. Defaults to
15474 @samp{"/etc/ssl/certs"}.
15475 @end deftypevr
15476
15477 @deftypevr {paramètre de @code{ssl-configuration}} maybe-file-object cafile
15478 Path to a file containing root certificates that you wish Prosody to trust.
15479 Similar to @code{capath} but with all certificates concatenated together.
15480 @end deftypevr
15481
15482 @deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list verify
15483 A list of verification options (these mostly map to OpenSSL's
15484 @code{set_verify()} flags).
15485 @end deftypevr
15486
15487 @deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list options
15488 A list of general options relating to SSL/TLS. These map to OpenSSL's
15489 @code{set_options()}. For a full list of options available in LuaSec, see
15490 the LuaSec source.
15491 @end deftypevr
15492
15493 @deftypevr {paramètre de @code{ssl-configuration}} maybe-non-negative-integer depth
15494 How long a chain of certificate authorities to check when looking for a
15495 trusted root certificate.
15496 @end deftypevr
15497
15498 @deftypevr {paramètre de @code{ssl-configuration}} maybe-string ciphers
15499 An OpenSSL cipher string. This selects what ciphers Prosody will offer to
15500 clients, and in what order.
15501 @end deftypevr
15502
15503 @deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name dhparam
15504 A path to a file containing parameters for Diffie-Hellman key exchange. You
15505 can create such a file with: @code{openssl dhparam -out
15506 /etc/prosody/certs/dh-2048.pem 2048}
15507 @end deftypevr
15508
15509 @deftypevr {paramètre de @code{ssl-configuration}} maybe-string curve
15510 Curve for Elliptic curve Diffie-Hellman. Prosody's default is
15511 @samp{"secp384r1"}.
15512 @end deftypevr
15513
15514 @deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list verifyext
15515 A list of "extra" verification options.
15516 @end deftypevr
15517
15518 @deftypevr {paramètre de @code{ssl-configuration}} maybe-string password
15519 Password for encrypted private keys.
15520 @end deftypevr
15521
15522 @end deftypevr
15523
15524 @deftypevr {paramètre de @code{prosody-configuration}} boolean c2s-require-encryption?
15525 Whether to force all client-to-server connections to be encrypted or not.
15526 See @url{https://prosody.im/doc/modules/mod_tls}. Defaults to @samp{#f}.
15527 @end deftypevr
15528
15529 @deftypevr {paramètre de @code{prosody-configuration}} string-list disable-sasl-mechanisms
15530 Set of mechanisms that will never be offered. See
15531 @url{https://prosody.im/doc/modules/mod_saslauth}. Defaults to
15532 @samp{("DIGEST-MD5")}.
15533 @end deftypevr
15534
15535 @deftypevr {paramètre de @code{prosody-configuration}} boolean s2s-require-encryption?
15536 Whether to force all server-to-server connections to be encrypted or not.
15537 See @url{https://prosody.im/doc/modules/mod_tls}. Defaults to @samp{#f}.
15538 @end deftypevr
15539
15540 @deftypevr {paramètre de @code{prosody-configuration}} boolean s2s-secure-auth?
15541 Whether to require encryption and certificate authentication. This provides
15542 ideal security, but requires servers you communicate with to support
15543 encryption AND present valid, trusted certificates. See
15544 @url{https://prosody.im/doc/s2s#security}. Defaults to @samp{#f}.
15545 @end deftypevr
15546
15547 @deftypevr {paramètre de @code{prosody-configuration}} string-list s2s-insecure-domains
15548 Many servers don't support encryption or have invalid or self-signed
15549 certificates. You can list domains here that will not be required to
15550 authenticate using certificates. They will be authenticated using DNS. See
15551 @url{https://prosody.im/doc/s2s#security}. Defaults to @samp{()}.
15552 @end deftypevr
15553
15554 @deftypevr {paramètre de @code{prosody-configuration}} string-list s2s-secure-domains
15555 Even if you leave @code{s2s-secure-auth?} disabled, you can still require
15556 valid certificates for some domains by specifying a list here. See
15557 @url{https://prosody.im/doc/s2s#security}. Defaults to @samp{()}.
15558 @end deftypevr
15559
15560 @deftypevr {paramètre de @code{prosody-configuration}} string authentication
15561 Select the authentication backend to use. The default provider stores
15562 passwords in plaintext and uses Prosody's configured data storage to store
15563 the authentication data. If you do not trust your server please see
15564 @url{https://prosody.im/doc/modules/mod_auth_internal_hashed} for
15565 information about using the hashed backend. See also
15566 @url{https://prosody.im/doc/authentication} Defaults to
15567 @samp{"internal_plain"}.
15568 @end deftypevr
15569
15570 @deftypevr {paramètre de @code{prosody-configuration}} maybe-string log
15571 Set logging options. Advanced logging configuration is not yet supported by
15572 the GuixSD Prosody Service. See @url{https://prosody.im/doc/logging}.
15573 Defaults to @samp{"*syslog"}.
15574 @end deftypevr
15575
15576 @deftypevr {paramètre de @code{prosody-configuration}} file-name pidfile
15577 File to write pid in. See @url{https://prosody.im/doc/modules/mod_posix}.
15578 Defaults to @samp{"/var/run/prosody/prosody.pid"}.
15579 @end deftypevr
15580
15581 @deftypevr {paramètre de @code{prosody-configuration}} maybe-non-negative-integer http-max-content-size
15582 Maximum allowed size of the HTTP body (in bytes).
15583 @end deftypevr
15584
15585 @deftypevr {paramètre de @code{prosody-configuration}} maybe-string http-external-url
15586 Some modules expose their own URL in various ways. This URL is built from
15587 the protocol, host and port used. If Prosody sits behind a proxy, the
15588 public URL will be @code{http-external-url} instead. See
15589 @url{https://prosody.im/doc/http#external_url}.
15590 @end deftypevr
15591
15592 @deftypevr {paramètre de @code{prosody-configuration}} virtualhost-configuration-list virtualhosts
15593 A host in Prosody is a domain on which user accounts can be created. For
15594 example if you want your users to have addresses like
15595 @samp{"john.smith@@example.com"} then you need to add a host
15596 @samp{"example.com"}. All options in this list will apply only to this
15597 host.
15598
15599 Note: the name "virtual" host is used in configuration to avoid confusion
15600 with the actual physical host that Prosody is installed on. A single
15601 Prosody instance can serve many domains, each one defined as a VirtualHost
15602 entry in Prosody's configuration. Conversely a server that hosts a single
15603 domain would have just one VirtualHost entry.
15604
15605 See @url{https://prosody.im/doc/configure#virtual_host_settings}.
15606
15607 Les champs de @code{virtualhost-configuration} disponibles sont :
15608
15609 all these @code{prosody-configuration} fields: @code{admins},
15610 @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
15611 @code{groups-file}, @code{allow-registration?}, @code{ssl},
15612 @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
15613 @code{s2s-require-encryption?}, @code{s2s-secure-auth?},
15614 @code{s2s-insecure-domains}, @code{s2s-secure-domains},
15615 @code{authentication}, @code{log}, @code{http-max-content-size},
15616 @code{http-external-url}, @code{raw-content}, plus:
15617 @deftypevr {paramètre de @code{virtualhost-configuration}} string domain
15618 Domain you wish Prosody to serve.
15619 @end deftypevr
15620
15621 @end deftypevr
15622
15623 @deftypevr {paramètre de @code{prosody-configuration}} int-component-configuration-list int-components
15624 Components are extra services on a server which are available to clients,
15625 usually on a subdomain of the main server (such as
15626 @samp{"mycomponent.example.com"}). Example components might be chatroom
15627 servers, user directories, or gateways to other protocols.
15628
15629 Internal components are implemented with Prosody-specific plugins. To add
15630 an internal component, you simply fill the hostname field, and the plugin
15631 you wish to use for the component.
15632
15633 See @url{https://prosody.im/doc/components}. Defaults to @samp{()}.
15634
15635 Les champs de @code{int-component-configuration} disponibles sont :
15636
15637 all these @code{prosody-configuration} fields: @code{admins},
15638 @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
15639 @code{groups-file}, @code{allow-registration?}, @code{ssl},
15640 @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
15641 @code{s2s-require-encryption?}, @code{s2s-secure-auth?},
15642 @code{s2s-insecure-domains}, @code{s2s-secure-domains},
15643 @code{authentication}, @code{log}, @code{http-max-content-size},
15644 @code{http-external-url}, @code{raw-content}, plus:
15645 @deftypevr {paramètre de @code{int-component-configuration}} string hostname
15646 Hostname of the component.
15647 @end deftypevr
15648
15649 @deftypevr {paramètre de @code{int-component-configuration}} string plugin
15650 Plugin you wish to use for the component.
15651 @end deftypevr
15652
15653 @deftypevr {paramètre de @code{int-component-configuration}} maybe-mod-muc-configuration mod-muc
15654 Multi-user chat (MUC) is Prosody's module for allowing you to create hosted
15655 chatrooms/conferences for XMPP users.
15656
15657 General information on setting up and using multi-user chatrooms can be
15658 found in the "Chatrooms" documentation
15659 (@url{https://prosody.im/doc/chatrooms}), which you should read if you are
15660 new to XMPP chatrooms.
15661
15662 See also @url{https://prosody.im/doc/modules/mod_muc}.
15663
15664 Les champs de @code{mod-muc-configuration} disponibles sont :
15665
15666 @deftypevr {paramètre de @code{mod-muc-configuration}} string name
15667 The name to return in service discovery responses. Defaults to
15668 @samp{"Prosody Chatrooms"}.
15669 @end deftypevr
15670
15671 @deftypevr {paramètre de @code{mod-muc-configuration}} string-or-boolean restrict-room-creation
15672 If @samp{#t}, this will only allow admins to create new chatrooms.
15673 Otherwise anyone can create a room. The value @samp{"local"} restricts room
15674 creation to users on the service's parent domain.
15675 E.g. @samp{user@@example.com} can create rooms on @samp{rooms.example.com}.
15676 The value @samp{"admin"} restricts to service administrators only. Defaults
15677 to @samp{#f}.
15678 @end deftypevr
15679
15680 @deftypevr {paramètre de @code{mod-muc-configuration}} non-negative-integer max-history-messages
15681 Maximum number of history messages that will be sent to the member that has
15682 just joined the room. Defaults to @samp{20}.
15683 @end deftypevr
15684
15685 @end deftypevr
15686
15687 @end deftypevr
15688
15689 @deftypevr {paramètre de @code{prosody-configuration}} ext-component-configuration-list ext-components
15690 External components use XEP-0114, which most standalone components support.
15691 To add an external component, you simply fill the hostname field. See
15692 @url{https://prosody.im/doc/components}. Defaults to @samp{()}.
15693
15694 Les champs de @code{ext-component-configuration} disponibles sont :
15695
15696 all these @code{prosody-configuration} fields: @code{admins},
15697 @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
15698 @code{groups-file}, @code{allow-registration?}, @code{ssl},
15699 @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
15700 @code{s2s-require-encryption?}, @code{s2s-secure-auth?},
15701 @code{s2s-insecure-domains}, @code{s2s-secure-domains},
15702 @code{authentication}, @code{log}, @code{http-max-content-size},
15703 @code{http-external-url}, @code{raw-content}, plus:
15704 @deftypevr {paramètre de @code{ext-component-configuration}} string component-secret
15705 Password which the component will use to log in.
15706 @end deftypevr
15707
15708 @deftypevr {paramètre de @code{ext-component-configuration}} string hostname
15709 Hostname of the component.
15710 @end deftypevr
15711
15712 @end deftypevr
15713
15714 @deftypevr {paramètre de @code{prosody-configuration}} non-negative-integer-list component-ports
15715 Port(s) Prosody listens on for component connections. Defaults to
15716 @samp{(5347)}.
15717 @end deftypevr
15718
15719 @deftypevr {paramètre de @code{prosody-configuration}} string component-interface
15720 Interface Prosody listens on for component connections. Defaults to
15721 @samp{"127.0.0.1"}.
15722 @end deftypevr
15723
15724 @deftypevr {paramètre de @code{prosody-configuration}} maybe-raw-content raw-content
15725 Raw content that will be added to the configuration file.
15726 @end deftypevr
15727
15728 It could be that you just want to get a @code{prosody.cfg.lua} up and
15729 running. In that case, you can pass an @code{opaque-prosody-configuration}
15730 record as the value of @code{prosody-service-type}. As its name indicates,
15731 an opaque configuration does not have easy reflective capabilities.
15732 Available @code{opaque-prosody-configuration} fields are:
15733
15734 @deftypevr {paramètre de @code{opaque-prosody-configuration}} package prosody
15735 The prosody package.
15736 @end deftypevr
15737
15738 @deftypevr {paramètre de @code{opaque-prosody-configuration}} string prosody.cfg.lua
15739 The contents of the @code{prosody.cfg.lua} to use.
15740 @end deftypevr
15741
15742 For example, if your @code{prosody.cfg.lua} is just the empty string, you
15743 could instantiate a prosody service like this:
15744
15745 @example
15746 (service prosody-service-type
15747 (opaque-prosody-configuration
15748 (prosody.cfg.lua "")))
15749 @end example
15750
15751 @c end of Prosody auto-generated documentation
15752
15753 @subsubheading BitlBee Service
15754
15755 @cindex IRC (Internet Relay Chat)
15756 @cindex IRC gateway
15757 @url{http://bitlbee.org,BitlBee} is a gateway that provides an IRC interface
15758 to a variety of messaging protocols such as XMPP.
15759
15760 @defvr {Variable Scheme} bitlbee-service-type
15761 This is the service type for the @url{http://bitlbee.org,BitlBee} IRC
15762 gateway daemon. Its value is a @code{bitlbee-configuration} (see below).
15763
15764 To have BitlBee listen on port 6667 on localhost, add this line to your
15765 services:
15766
15767 @example
15768 (service bitlbee-service-type)
15769 @end example
15770 @end defvr
15771
15772 @deftp {Type de données} bitlbee-configuration
15773 This is the configuration for BitlBee, with the following fields:
15774
15775 @table @asis
15776 @item @code{interface} (par défaut : @code{"127.0.0.1"})
15777 @itemx @code{port} (par défaut : @code{6667})
15778 Listen on the network interface corresponding to the IP address specified in
15779 @var{interface}, on @var{port}.
15780
15781 When @var{interface} is @code{127.0.0.1}, only local clients can connect;
15782 when it is @code{0.0.0.0}, connections can come from any networking
15783 interface.
15784
15785 @item @code{package} (par défaut : @code{bitlbee})
15786 Le paquet BitlBee à utiliser.
15787
15788 @item @code{plugins} (par défaut : @code{'()})
15789 List of plugin packages to use---e.g., @code{bitlbee-discord}.
15790
15791 @item @code{extra-settings} (par défaut : @code{""})
15792 Configuration snippet added as-is to the BitlBee configuration file.
15793 @end table
15794 @end deftp
15795
15796
15797 @node Services de téléphonie
15798 @subsubsection Services de téléphonie
15799
15800 @cindex Murmur (VoIP server)
15801 @cindex VoIP server
15802 This section describes how to set up and run a Murmur server. Murmur is the
15803 server of the @uref{https://mumble.info, Mumble} voice-over-IP (VoIP) suite.
15804
15805 @deftp {Type de données} murmur-configuration
15806 The service type for the Murmur server. An example configuration can look
15807 like this:
15808
15809 @example
15810 (service murmur-service-type
15811 (murmur-configuration
15812 (welcome-text
15813 "Welcome to this Mumble server running on GuixSD!")
15814 (cert-required? #t) ;disallow text password logins
15815 (ssl-cert "/etc/letsencrypt/live/mumble.example.com/fullchain.pem")
15816 (ssl-key "/etc/letsencrypt/live/mumble.example.com/privkey.pem")))
15817 @end example
15818
15819 After reconfiguring your system, you can manually set the murmur
15820 @code{SuperUser} password with the command that is printed during the
15821 activation phase.
15822
15823 It is recommended to register a normal Mumble user account and grant it
15824 admin or moderator rights. You can use the @code{mumble} client to login as
15825 new normal user, register yourself, and log out. For the next step login
15826 with the name @code{SuperUser} use the @code{SuperUser} password that you
15827 set previously, and grant your newly registered mumble user administrator or
15828 moderator rights and create some channels.
15829
15830 Les champs de @code{murmur-configuration} disponibles sont :
15831
15832 @table @asis
15833 @item @code{package} (par défaut : @code{mumble})
15834 Package that contains @code{bin/murmurd}.
15835
15836 @item @code{user} (par défaut : @code{"murmur"})
15837 User who will run the Murmur server.
15838
15839 @item @code{group} (par défaut : @code{"murmur"})
15840 Group of the user who will run the murmur server.
15841
15842 @item @code{port} (par défaut : @code{64738})
15843 Port on which the server will listen.
15844
15845 @item @code{welcome-text} (par défaut : @code{""})
15846 Welcome text sent to clients when they connect.
15847
15848 @item @code{server-password} (par défaut : @code{""})
15849 Password the clients have to enter in order to connect.
15850
15851 @item @code{max-users} (par défaut : @code{100})
15852 Maximum of users that can be connected to the server at once.
15853
15854 @item @code{max-user-bandwidth} (par défaut : @code{#f})
15855 Maximum voice traffic a user can send per second.
15856
15857 @item @code{database-file} (par défaut : @code{"/var/lib/murmur/db.sqlite"})
15858 File name of the sqlite database. The service's user will become the owner
15859 of the directory.
15860
15861 @item @code{log-file} (par défaut : @code{"/var/log/murmur/murmur.log"})
15862 File name of the log file. The service's user will become the owner of the
15863 directory.
15864
15865 @item @code{autoban-attempts} (par défaut : @code{10})
15866 Maximum number of logins a user can make in @code{autoban-timeframe} without
15867 getting auto banned for @code{autoban-time}.
15868
15869 @item @code{autoban-timeframe} (par défaut : @code{120})
15870 Timeframe for autoban in seconds.
15871
15872 @item @code{autoban-time} (par défaut : @code{300})
15873 Amount of time in seconds for which a client gets banned when violating the
15874 autoban limits.
15875
15876 @item @code{opus-threshold} (par défaut : @code{100})
15877 Percentage of clients that need to support opus before switching over to
15878 opus audio codec.
15879
15880 @item @code{channel-nesting-limit} (par défaut : @code{10})
15881 How deep channels can be nested at maximum.
15882
15883 @item @code{channelname-regex} (par défaut : @code{#f})
15884 A string in from of a Qt regular expression that channel names must conform
15885 to.
15886
15887 @item @code{username-regex} (par défaut : @code{#f})
15888 A string in from of a Qt regular expression that user names must conform to.
15889
15890 @item @code{text-message-length} (par défaut : @code{5000})
15891 Maximum size in bytes that a user can send in one text chat message.
15892
15893 @item @code{image-message-length} (par défaut : @code{(* 128 1024)})
15894 Maximum size in bytes that a user can send in one image message.
15895
15896 @item @code{cert-required?} (par défaut : @code{#f})
15897 If it is set to @code{#t} clients that use weak password authentification
15898 will not be accepted. Users must have completed the certificate wizard to
15899 join.
15900
15901 @item @code{remember-channel?} (defualt @code{#f})
15902 Should murmur remember the last channel each user was in when they
15903 disconnected and put them into the remembered channel when they rejoin.
15904
15905 @item @code{allow-html?} (par défaut : @code{#f})
15906 Should html be allowed in text messages, user comments, and channel
15907 descriptions.
15908
15909 @item @code{allow-ping?} (par défaut : @code{#f})
15910 Setting to true exposes the current user count, the maximum user count, and
15911 the server's maximum bandwidth per client to unauthenticated users. In the
15912 Mumble client, this information is shown in the Connect dialog.
15913
15914 Disabling this setting will prevent public listing of the server.
15915
15916 @item @code{bonjour?} (par défaut : @code{#f})
15917 Should the server advertise itself in the local network through the bonjour
15918 protocol.
15919
15920 @item @code{send-version?} (par défaut : @code{#f})
15921 Should the murmur server version be exposed in ping requests.
15922
15923 @item @code{log-days} (par défaut : @code{31})
15924 Murmur also stores logs in the database, which are accessible via RPC. The
15925 default is 31 days of months, but you can set this setting to 0 to keep logs
15926 forever, or -1 to disable logging to the database.
15927
15928 @item @code{obfuscate-ips?} (par défaut : @code{#t})
15929 Should logged ips be obfuscated to protect the privacy of users.
15930
15931 @item @code{ssl-cert} (par défaut : @code{#f})
15932 File name of the SSL/TLS certificate used for encrypted connections.
15933
15934 @example
15935 (ssl-cert "/etc/letsencrypt/live/example.com/fullchain.pem")
15936 @end example
15937 @item @code{ssl-key} (par défaut : @code{#f})
15938 Filepath to the ssl private key used for encrypted connections.
15939 @example
15940 (ssl-key "/etc/letsencrypt/live/example.com/privkey.pem")
15941 @end example
15942
15943 @item @code{ssl-dh-params} (par défaut : @code{#f})
15944 File name of a PEM-encoded file with Diffie-Hellman parameters for the
15945 SSL/TLS encryption. Alternatively you set it to @code{"@@ffdhe2048"},
15946 @code{"@@ffdhe3072"}, @code{"@@ffdhe4096"}, @code{"@@ffdhe6144"} or
15947 @code{"@@ffdhe8192"} to use bundled parameters from RFC 7919.
15948
15949 @item @code{ssl-ciphers} (par défaut : @code{#f})
15950 The @code{ssl-ciphers} option chooses the cipher suites to make available
15951 for use in SSL/TLS.
15952
15953 This option is specified using
15954 @uref{https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT,
15955 OpenSSL cipher list notation}.
15956
15957 It is recommended that you try your cipher string using 'openssl ciphers
15958 <string>' before setting it here, to get a feel for which cipher suites you
15959 will get. After setting this option, it is recommend that you inspect your
15960 Murmur log to ensure that Murmur is using the cipher suites that you
15961 expected it to.
15962
15963 Note: Changing this option may impact the backwards compatibility of your
15964 Murmur server, and can remove the ability for older Mumble clients to be
15965 able to connect to it.
15966
15967 @item @code{public-registration} (par défaut : @code{#f})
15968 Must be a @code{<murmur-public-registration-configuration>} record or
15969 @code{#f}.
15970
15971 You can optionally register your server in the public server list that the
15972 @code{mumble} client shows on startup. You cannot register your server if
15973 you have set a @code{server-password}, or set @code{allow-ping} to
15974 @code{#f}.
15975
15976 It might take a few hours until it shows up in the public list.
15977
15978 @item @code{file} (par défaut : @code{#f})
15979 Optional alternative override for this configuration.
15980 @end table
15981 @end deftp
15982
15983 @deftp {Type de données} murmur-public-registration-configuration
15984 Configuration for public registration of a murmur service.
15985
15986 @table @asis
15987 @item @code{name}
15988 This is a display name for your server. Not to be confused with the
15989 hostname.
15990
15991 @item @code{password}
15992 A password to identify your registration. Subsequent updates will need the
15993 same password. Don't lose your password.
15994
15995 @item @code{url}
15996 This should be a @code{http://} or @code{https://} link to your web site.
15997
15998 @item @code{hostname} (par défaut : @code{#f})
15999 By default your server will be listed by its IP address. If it is set your
16000 server will be linked by this host name instead.
16001 @end table
16002 @end deftp
16003
16004
16005
16006 @node Services de surveillance
16007 @subsubsection Services de surveillance
16008
16009 @subsubheading Tailon Service
16010
16011 @uref{https://tailon.readthedocs.io/, Tailon} is a web application for
16012 viewing and searching log files.
16013
16014 The following example will configure the service with default values. By
16015 default, Tailon can be accessed on port 8080 (@code{http://localhost:8080}).
16016
16017 @example
16018 (service tailon-service-type)
16019 @end example
16020
16021 The following example customises more of the Tailon configuration, adding
16022 @command{sed} to the list of allowed commands.
16023
16024 @example
16025 (service tailon-service-type
16026 (tailon-configuration
16027 (config-file
16028 (tailon-configuration-file
16029 (allowed-commands '("tail" "grep" "awk" "sed"))))))
16030 @end example
16031
16032
16033 @deftp {Type de données} tailon-configuration
16034 Data type representing the configuration of Tailon. This type has the
16035 following parameters:
16036
16037 @table @asis
16038 @item @code{config-file} (par défaut : @code{(tailon-configuration-file)})
16039 The configuration file to use for Tailon. This can be set to a
16040 @dfn{tailon-configuration-file} record value, or any gexp
16041 (@pxref{G-Expressions}).
16042
16043 For example, to instead use a local file, the @code{local-file} function can
16044 be used:
16045
16046 @example
16047 (service tailon-service-type
16048 (tailon-configuration
16049 (config-file (local-file "./my-tailon.conf"))))
16050 @end example
16051
16052 @item @code{package} (par défaut : @code{tailon})
16053 Le paquet tailon à utiliser.
16054
16055 @end table
16056 @end deftp
16057
16058 @deftp {Type de données} tailon-configuration-file
16059 Data type representing the configuration options for Tailon. This type has
16060 the following parameters:
16061
16062 @table @asis
16063 @item @code{files} (par défaut : @code{(list "/var/log")})
16064 List of files to display. The list can include strings for a single file or
16065 directory, or a list, where the first item is the name of a subsection, and
16066 the remaining items are the files or directories in that subsection.
16067
16068 @item @code{bind} (par défaut : @code{"localhost:8080"})
16069 Address and port to which Tailon should bind on.
16070
16071 @item @code{relative-root} (par défaut : @code{#f})
16072 URL path to use for Tailon, set to @code{#f} to not use a path.
16073
16074 @item @code{allow-transfers?} (par défaut : @code{#t})
16075 Allow downloading the log files in the web interface.
16076
16077 @item @code{follow-names?} (par défaut : @code{#t})
16078 Allow tailing of not-yet existent files.
16079
16080 @item @code{tail-lines} (par défaut : @code{200})
16081 Number of lines to read initially from each file.
16082
16083 @item @code{allowed-commands} (par défaut : @code{(list "tail" "grep" "awk")})
16084 Commands to allow running. By default, @code{sed} is disabled.
16085
16086 @item @code{debug?} (par défaut : @code{#f})
16087 Set @code{debug?} to @code{#t} to show debug messages.
16088
16089 @item @code{wrap-lines} (par défaut : @code{#t})
16090 Initial line wrapping state in the web interface. Set to @code{#t} to
16091 initially wrap lines (the default), or to @code{#f} to initially not wrap
16092 lines.
16093
16094 @item @code{http-auth} (par défaut : @code{#f})
16095 HTTP authentication type to use. Set to @code{#f} to disable authentication
16096 (the default). Supported values are @code{"digest"} or @code{"basic"}.
16097
16098 @item @code{users} (par défaut : @code{#f})
16099 If HTTP authentication is enabled (see @code{http-auth}), access will be
16100 restricted to the credentials provided here. To configure users, use a list
16101 of pairs, where the first element of the pair is the username, and the 2nd
16102 element of the pair is the password.
16103
16104 @example
16105 (tailon-configuration-file
16106 (http-auth "basic")
16107 (users '(("user1" . "password1")
16108 ("user2" . "password2"))))
16109 @end example
16110
16111 @end table
16112 @end deftp
16113
16114
16115 @subsubheading Darkstat Service
16116 @cindex darkstat
16117 Darkstat is a packet sniffer that captures network traffic, calculates
16118 statistics about usage, and serves reports over HTTP.
16119
16120 @defvar {Variable Scheme} darkstat-service-type
16121 This is the service type for the @uref{https://unix4lyfe.org/darkstat/,
16122 darkstat} service, its value must be a @code{darkstat-configuration} record
16123 as in this example:
16124
16125 @example
16126 (service darkstat-service-type
16127 (darkstat-configuration
16128 (interface "eno1")))
16129 @end example
16130 @end defvar
16131
16132 @deftp {Type de données} darkstat-configuration
16133 Data type representing the configuration of @command{darkstat}.
16134
16135 @table @asis
16136 @item @code{package} (par défaut : @code{darkstat})
16137 Le paquet darkstat à utiliser.
16138
16139 @item @code{interface}
16140 Capture traffic on the specified network interface.
16141
16142 @item @code{port} (par défaut : @code{"667"})
16143 Bind the web interface to the specified port.
16144
16145 @item @code{bind-address} (par défaut : @code{"127.0.0.1"})
16146 Bind the web interface to the specified address.
16147
16148 @item @code{base} (par défaut : @code{"/"})
16149 Specify the path of the base URL. This can be useful if @command{darkstat}
16150 is accessed via a reverse proxy.
16151
16152 @end table
16153 @end deftp
16154
16155 @subsubheading Prometheus Node Exporter Service
16156
16157 @cindex prometheus-node-exporter
16158 The Prometheus ``node exporter'' makes hardware and operating system
16159 statistics provided by the Linux kernel available for the Prometheus
16160 monitoring system. This service should be deployed on all physical nodes
16161 and virtual machines, where monitoring these statistics is desirable.
16162
16163 @defvar {Scheme variable} prometheus-node-exporter-service-type
16164 This is the service type for the
16165 @uref{https://github.com/prometheus/node_exporter/,
16166 prometheus-node-exporter} service, its value must be a
16167 @code{prometheus-node-exporter-configuration} record as in this example:
16168
16169 @example
16170 (service prometheus-node-exporter-service-type
16171 (prometheus-node-exporter-configuration
16172 (web-listen-address ":9100")))
16173 @end example
16174 @end defvar
16175
16176 @deftp {Data Type} prometheus-node-exporter-configuration
16177 Data type representing the configuration of @command{node_exporter}.
16178
16179 @table @asis
16180 @item @code{package} (default: @code{go-github-com-prometheus-node-exporter})
16181 The prometheus-node-exporter package to use.
16182
16183 @item @code{web-listen-address} (default: @code{":9100"})
16184 Bind the web interface to the specified address.
16185
16186 @end table
16187 @end deftp
16188
16189 @node Services Kerberos
16190 @subsubsection Services Kerberos
16191 @cindex Kerberos
16192
16193 The @code{(gnu services kerberos)} module provides services relating to the
16194 authentication protocol @dfn{Kerberos}.
16195
16196 @subsubheading Krb5 Service
16197
16198 Programs using a Kerberos client library normally expect a configuration
16199 file in @file{/etc/krb5.conf}. This service generates such a file from a
16200 definition provided in the operating system declaration. It does not cause
16201 any daemon to be started.
16202
16203 No ``keytab'' files are provided by this service---you must explicitly
16204 create them. This service is known to work with the MIT client library,
16205 @code{mit-krb5}. Other implementations have not been tested.
16206
16207 @defvr {Variable Scheme} krb5-service-type
16208 A service type for Kerberos 5 clients.
16209 @end defvr
16210
16211 @noindent
16212 Here is an example of its use:
16213 @lisp
16214 (service krb5-service-type
16215 (krb5-configuration
16216 (default-realm "EXAMPLE.COM")
16217 (allow-weak-crypto? #t)
16218 (realms (list
16219 (krb5-realm
16220 (name "EXAMPLE.COM")
16221 (admin-server "groucho.example.com")
16222 (kdc "karl.example.com"))
16223 (krb5-realm
16224 (name "ARGRX.EDU")
16225 (admin-server "kerb-admin.argrx.edu")
16226 (kdc "keys.argrx.edu"))))))
16227 @end lisp
16228
16229 @noindent
16230 This example provides a Kerberos@tie{}5 client configuration which:
16231 @itemize
16232 @item Recognizes two realms, @i{viz:} ``EXAMPLE.COM'' and ``ARGRX.EDU'', both
16233 of which have distinct administration servers and key distribution centers;
16234 @item Will default to the realm ``EXAMPLE.COM'' if the realm is not explicitly
16235 specified by clients;
16236 @item Accepts services which only support encryption types known to be weak.
16237 @end itemize
16238
16239 The @code{krb5-realm} and @code{krb5-configuration} types have many fields.
16240 Only the most commonly used ones are described here. For a full list, and
16241 more detailed explanation of each, see the MIT
16242 @uref{http://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html,,krb5.conf}
16243 documentation.
16244
16245
16246 @deftp {Type de données} krb5-realm
16247 @cindex realm, kerberos
16248 @table @asis
16249 @item @code{name}
16250 This field is a string identifying the name of the realm. A common
16251 convention is to use the fully qualified DNS name of your organization,
16252 converted to upper case.
16253
16254 @item @code{admin-server}
16255 This field is a string identifying the host where the administration server
16256 is running.
16257
16258 @item @code{kdc}
16259 This field is a string identifying the key distribution center for the
16260 realm.
16261 @end table
16262 @end deftp
16263
16264 @deftp {Type de données} krb5-configuration
16265
16266 @table @asis
16267 @item @code{allow-weak-crypto?} (par défaut : @code{#f})
16268 If this flag is @code{#t} then services which only offer encryption
16269 algorithms known to be weak will be accepted.
16270
16271 @item @code{default-realm} (par défaut : @code{#f})
16272 This field should be a string identifying the default Kerberos realm for the
16273 client. You should set this field to the name of your Kerberos realm. If
16274 this value is @code{#f} then a realm must be specified with every Kerberos
16275 principal when invoking programs such as @command{kinit}.
16276
16277 @item @code{realms}
16278 This should be a non-empty list of @code{krb5-realm} objects, which clients
16279 may access. Normally, one of them will have a @code{name} field matching
16280 the @code{default-realm} field.
16281 @end table
16282 @end deftp
16283
16284
16285 @subsubheading PAM krb5 Service
16286 @cindex pam-krb5
16287
16288 The @code{pam-krb5} service allows for login authentication and password
16289 management via Kerberos. You will need this service if you want PAM enabled
16290 applications to authenticate users using Kerberos.
16291
16292 @defvr {Variable Scheme} pam-krb5-service-type
16293 A service type for the Kerberos 5 PAM module.
16294 @end defvr
16295
16296 @deftp {Type de données} pam-krb5-configuration
16297 Data type representing the configuration of the Kerberos 5 PAM module This
16298 type has the following parameters:
16299 @table @asis
16300 @item @code{pam-krb5} (par défaut : @code{pam-krb5})
16301 Le paquet pam-krb5 à utiliser.
16302
16303 @item @code{minimum-uid} (par défaut : @code{1000})
16304 The smallest user ID for which Kerberos authentications should be
16305 attempted. Local accounts with lower values will silently fail to
16306 authenticate.
16307 @end table
16308 @end deftp
16309
16310
16311 @node Services web
16312 @subsubsection Services web
16313
16314 @cindex web
16315 @cindex www
16316 @cindex HTTP
16317 The @code{(gnu services web)} module provides the Apache HTTP Server, the
16318 nginx web server, and also a fastcgi wrapper daemon.
16319
16320 @subsubheading Apache HTTP Server
16321
16322 @deffn {Variable Scheme} httpd-service-type
16323 Service type for the @uref{https://httpd.apache.org/,Apache HTTP} server
16324 (@dfn{httpd}). The value for this service type is a
16325 @code{https-configuration} record.
16326
16327 A simple example configuration is given below.
16328
16329 @example
16330 (service httpd-service-type
16331 (httpd-configuration
16332 (config
16333 (httpd-config-file
16334 (server-name "www.example.com")
16335 (document-root "/srv/http/www.example.com")))))
16336 @end example
16337
16338 Other services can also extend the @code{httpd-service-type} to add to the
16339 configuration.
16340
16341 @example
16342 (simple-service 'my-extra-server httpd-service-type
16343 (list
16344 (httpd-virtualhost
16345 "*:80"
16346 (list (string-append
16347 "ServerName "www.example.com
16348 DocumentRoot \"/srv/http/www.example.com\"")))))
16349 @end example
16350 @end deffn
16351
16352 The details for the @code{httpd-configuration}, @code{httpd-module},
16353 @code{httpd-config-file} and @code{httpd-virtualhost} record types are given
16354 below.
16355
16356 @deffn {Type de données} httpd-configuration
16357 This data type represents the configuration for the httpd service.
16358
16359 @table @asis
16360 @item @code{package} (par défaut : @code{httpd})
16361 Le paquet httpd à utiliser.
16362
16363 @item @code{pid-file} (par défaut : @code{"/var/run/httpd"})
16364 The pid file used by the shepherd-service.
16365
16366 @item @code{config} (par défaut : @code{(httpd-config-file)})
16367 The configuration file to use with the httpd service. The default value is a
16368 @code{httpd-config-file} record, but this can also be a different
16369 G-expression that generates a file, for example a @code{plain-file}. A file
16370 outside of the store can also be specified through a string.
16371
16372 @end table
16373 @end deffn
16374
16375 @deffn {Type de données} httpd-module
16376 This data type represents a module for the httpd service.
16377
16378 @table @asis
16379 @item @code{name}
16380 The name of the module.
16381
16382 @item @code{file}
16383 The file for the module. This can be relative to the httpd package being
16384 used, the absolute location of a file, or a G-expression for a file within
16385 the store, for example @code{(file-append mod-wsgi "/modules/mod_wsgi.so")}.
16386
16387 @end table
16388 @end deffn
16389
16390 @deffn {Type de données} httpd-config-file
16391 This data type represents a configuration file for the httpd service.
16392
16393 @table @asis
16394 @item @code{modules} (par défaut : @code{%default-httpd-modules})
16395 The modules to load. Additional modules can be added here, or loaded by
16396 additional configuration.
16397
16398 @item @code{server-root} (par défaut : @code{httpd})
16399 The @code{ServerRoot} in the configuration file, defaults to the httpd
16400 package. Directives including @code{Include} and @code{LoadModule} are taken
16401 as relative to the server root.
16402
16403 @item @code{server-name} (par défaut : @code{#f})
16404 The @code{ServerName} in the configuration file, used to specify the request
16405 scheme, hostname and port that the server uses to identify itself.
16406
16407 This doesn't need to be set in the server config, and can be specifyed in
16408 virtual hosts. The default is @code{#f} to not specify a @code{ServerName}.
16409
16410 @item @code{document-root} (par défaut : @code{"/srv/http"})
16411 The @code{DocumentRoot} from which files will be served.
16412
16413 @item @code{listen} (par défaut : @code{'("80")})
16414 The list of values for the @code{Listen} directives in the config file. The
16415 value should be a list of strings, when each string can specify the port
16416 number to listen on, and optionally the IP address and protocol to use.
16417
16418 @item @code{pid-file} (par défaut : @code{"/var/run/httpd"})
16419 The @code{PidFile} to use. This should match the @code{pid-file} set in the
16420 @code{httpd-configuration} so that the Shepherd service is configured
16421 correctly.
16422
16423 @item @code{error-log} (par défaut : @code{"/var/log/httpd/error_log"})
16424 The @code{ErrorLog} to which the server will log errors.
16425
16426 @item @code{user} (par défaut : @code{"httpd"})
16427 The @code{User} which the server will answer requests as.
16428
16429 @item @code{group} (par défaut : @code{"httpd"})
16430 The @code{Group} which the server will answer requests as.
16431
16432 @item @code{extra-config} (par défaut : @code{(list "TypesConfig etc/httpd/mime.types")})
16433 A flat list of strings and G-expressions which will be added to the end of
16434 the configuration file.
16435
16436 Any values which the service is extended with will be appended to this list.
16437
16438 @end table
16439 @end deffn
16440
16441 @deffn {Type de données} httpd-virtualhost
16442 This data type represents a virtualhost configuration block for the httpd
16443 service.
16444
16445 These should be added to the extra-config for the httpd-service.
16446
16447 @example
16448 (simple-service 'my-extra-server httpd-service-type
16449 (list
16450 (httpd-virtualhost
16451 "*:80"
16452 (list (string-append
16453 "ServerName "www.example.com
16454 DocumentRoot \"/srv/http/www.example.com\"")))))
16455 @end example
16456
16457 @table @asis
16458 @item @code{addresses-and-ports}
16459 The addresses and ports for the @code{VirtualHost} directive.
16460
16461 @item @code{contents}
16462 The contents of the @code{VirtualHost} directive, this should be a list of
16463 strings and G-expressions.
16464
16465 @end table
16466 @end deffn
16467
16468 @subsubheading NGINX
16469
16470 @deffn {Variable Scheme} nginx-service-type
16471 Service type for the @uref{https://nginx.org/,NGinx} web server. The value
16472 for this service type is a @code{<nginx-configuration>} record.
16473
16474 A simple example configuration is given below.
16475
16476 @example
16477 (service nginx-service-type
16478 (nginx-configuration
16479 (server-blocks
16480 (list (nginx-server-configuration
16481 (server-name '("www.example.com"))
16482 (root "/srv/http/www.example.com"))))))
16483 @end example
16484
16485 In addition to adding server blocks to the service configuration directly,
16486 this service can be extended by other services to add server blocks, as in
16487 this example:
16488
16489 @example
16490 (simple-service 'my-extra-server nginx-service-type
16491 (list (nginx-server-configuration
16492 (root "/srv/http/extra-website")
16493 (try-files (list "$uri" "$uri/index.html")))))
16494 @end example
16495 @end deffn
16496
16497 At startup, @command{nginx} has not yet read its configuration file, so it
16498 uses a default file to log error messages. If it fails to load its
16499 configuration file, that is where error messages are logged. After the
16500 configuration file is loaded, the default error log file changes as per
16501 configuration. In our case, startup error messages can be found in
16502 @file{/var/run/nginx/logs/error.log}, and after configuration in
16503 @file{/var/log/nginx/error.log}. The second location can be changed with
16504 the @var{log-directory} configuration option.
16505
16506 @deffn {Type de données} nginx-configuration
16507 This data type represents the configuration for NGinx. Some configuration
16508 can be done through this and the other provided record types, or
16509 alternatively, a config file can be provided.
16510
16511 @table @asis
16512 @item @code{nginx} (par défaut : @code{nginx})
16513 Le paquet nginx à utiliser.
16514
16515 @item @code{log-directory} (par défaut : @code{"/var/log/nginx"})
16516 The directory to which NGinx will write log files.
16517
16518 @item @code{run-directory} (par défaut : @code{"/var/run/nginx"})
16519 The directory in which NGinx will create a pid file, and write temporary
16520 files.
16521
16522 @item @code{server-blocks} (par défaut : @code{'()})
16523 A list of @dfn{server blocks} to create in the generated configuration file,
16524 the elements should be of type @code{<nginx-server-configuration>}.
16525
16526 The following example would setup NGinx to serve @code{www.example.com} from
16527 the @code{/srv/http/www.example.com} directory, without using HTTPS.
16528 @example
16529 (service nginx-service-type
16530 (nginx-configuration
16531 (server-blocks
16532 (list (nginx-server-configuration
16533 (server-name '("www.example.com"))
16534 (root "/srv/http/www.example.com"))))))
16535 @end example
16536
16537 @item @code{upstream-blocks} (par défaut : @code{'()})
16538 A list of @dfn{upstream blocks} to create in the generated configuration
16539 file, the elements should be of type @code{<nginx-upstream-configuration>}.
16540
16541 Configuring upstreams through the @code{upstream-blocks} can be useful when
16542 combined with @code{locations} in the @code{<nginx-server-configuration>}
16543 records. The following example creates a server configuration with one
16544 location configuration, that will proxy requests to a upstream
16545 configuration, which will handle requests with two servers.
16546
16547 @example
16548 (service
16549 nginx-service-type
16550 (nginx-configuration
16551 (server-blocks
16552 (list (nginx-server-configuration
16553 (server-name '("www.example.com"))
16554 (root "/srv/http/www.example.com")
16555 (locations
16556 (list
16557 (nginx-location-configuration
16558 (uri "/path1")
16559 (body '("proxy_pass http://server-proxy;"))))))))
16560 (upstream-blocks
16561 (list (nginx-upstream-configuration
16562 (name "server-proxy")
16563 (servers (list "server1.example.com"
16564 "server2.example.com")))))))
16565 @end example
16566
16567 @item @code{file} (par défaut : @code{#f})
16568 If a configuration @var{file} is provided, this will be used, rather than
16569 generating a configuration file from the provided @code{log-directory},
16570 @code{run-directory}, @code{server-blocks} and @code{upstream-blocks}. For
16571 proper operation, these arguments should match what is in @var{file} to
16572 ensure that the directories are created when the service is activated.
16573
16574 This can be useful if you have an existing configuration file, or it's not
16575 possible to do what is required through the other parts of the
16576 nginx-configuration record.
16577
16578 @item @code{server-names-hash-bucket-size} (par défaut : @code{#f})
16579 Bucket size for the server names hash tables, defaults to @code{#f} to use
16580 the size of the processors cache line.
16581
16582 @item @code{server-names-hash-bucket-max-size} (par défaut : @code{#f})
16583 Maximum bucket size for the server names hash tables.
16584
16585 @item @code{extra-content} (par défaut : @code{""})
16586 Extra content for the @code{http} block. Should be string or a string
16587 valued G-expression.
16588
16589 @end table
16590 @end deffn
16591
16592 @deftp {Type de données} nginx-server-configuration
16593 Data type representing the configuration of an nginx server block. This
16594 type has the following parameters:
16595
16596 @table @asis
16597 @item @code{listen} (par défaut : @code{'("80" "443 ssl")})
16598 Each @code{listen} directive sets the address and port for IP, or the path
16599 for a UNIX-domain socket on which the server will accept requests. Both
16600 address and port, or only address or only port can be specified. An address
16601 may also be a hostname, for example:
16602
16603 @example
16604 '("127.0.0.1:8000" "127.0.0.1" "8000" "*:8000" "localhost:8000")
16605 @end example
16606
16607 @item @code{server-name} (par défaut : @code{(list 'default)})
16608 A list of server names this server represents. @code{'default} represents
16609 the default server for connections matching no other server.
16610
16611 @item @code{root} (par défaut : @code{"/srv/http"})
16612 Root of the website nginx will serve.
16613
16614 @item @code{locations} (par défaut : @code{'()})
16615 A list of @dfn{nginx-location-configuration} or
16616 @dfn{nginx-named-location-configuration} records to use within this server
16617 block.
16618
16619 @item @code{index} (par défaut : @code{(list "index.html")})
16620 Index files to look for when clients ask for a directory. If it cannot be
16621 found, Nginx will send the list of files in the directory.
16622
16623 @item @code{try-files} (par défaut : @code{'()})
16624 A list of files whose existence is checked in the specified order.
16625 @code{nginx} will use the first file it finds to process the request.
16626
16627 @item @code{ssl-certificate} (par défaut : @code{#f})
16628 Where to find the certificate for secure connections. Set it to @code{#f}
16629 if you don't have a certificate or you don't want to use HTTPS.
16630
16631 @item @code{ssl-certificate-key} (par défaut : @code{#f})
16632 Where to find the private key for secure connections. Set it to @code{#f}
16633 if you don't have a key or you don't want to use HTTPS.
16634
16635 @item @code{server-tokens?} (par défaut : @code{#f})
16636 Whether the server should add its configuration to response.
16637
16638 @item @code{raw-content} (par défaut : @code{'()})
16639 A list of raw lines added to the server block.
16640
16641 @end table
16642 @end deftp
16643
16644 @deftp {Type de données} nginx-upstream-configuration
16645 Data type representing the configuration of an nginx @code{upstream} block.
16646 This type has the following parameters:
16647
16648 @table @asis
16649 @item @code{name}
16650 Name for this group of servers.
16651
16652 @item @code{servers}
16653 Specify the addresses of the servers in the group. The address can be
16654 specified as a IP address (e.g. @samp{127.0.0.1}), domain name
16655 (e.g. @samp{backend1.example.com}) or a path to a UNIX socket using the
16656 prefix @samp{unix:}. For addresses using an IP address or domain name, the
16657 default port is 80, and a different port can be specified explicitly.
16658
16659 @end table
16660 @end deftp
16661
16662 @deftp {Type de données} nginx-location-configuration
16663 Data type representing the configuration of an nginx @code{location} block.
16664 This type has the following parameters:
16665
16666 @table @asis
16667 @item @code{uri}
16668 URI which this location block matches.
16669
16670 @anchor{nginx-location-configuration body}
16671 @item @code{body}
16672 Body of the location block, specified as a list of strings. This can contain
16673 many configuration directives. For example, to pass requests to a upstream
16674 server group defined using an @code{nginx-upstream-configuration} block, the
16675 following directive would be specified in the body @samp{(list "proxy_pass
16676 http://upstream-name;")}.
16677
16678 @end table
16679 @end deftp
16680
16681 @deftp {Type de données} nginx-named-location-configuration
16682 Data type representing the configuration of an nginx named location block.
16683 Named location blocks are used for request redirection, and not used for
16684 regular request processing. This type has the following parameters:
16685
16686 @table @asis
16687 @item @code{name}
16688 Name to identify this location block.
16689
16690 @item @code{body}
16691 @xref{nginx-location-configuration body}, as the body for named location
16692 blocks can be used in a similar way to the
16693 @code{nginx-location-configuration body}. One restriction is that the body
16694 of a named location block cannot contain location blocks.
16695
16696 @end table
16697 @end deftp
16698
16699 @cindex fastcgi
16700 @cindex fcgiwrap
16701 FastCGI is an interface between the front-end and the back-end of a web
16702 service. It is a somewhat legacy facility; new web services should
16703 generally just talk HTTP between the front-end and the back-end. However
16704 there are a number of back-end services such as PHP or the optimized HTTP
16705 Git repository access that use FastCGI, so we have support for it in Guix.
16706
16707 To use FastCGI, you configure the front-end web server (e.g., nginx) to
16708 dispatch some subset of its requests to the fastcgi backend, which listens
16709 on a local TCP or UNIX socket. There is an intermediary @code{fcgiwrap}
16710 program that sits between the actual backend process and the web server.
16711 The front-end indicates which backend program to run, passing that
16712 information to the @code{fcgiwrap} process.
16713
16714 @defvr {Variable Scheme} fcgiwrap-service-type
16715 A service type for the @code{fcgiwrap} FastCGI proxy.
16716 @end defvr
16717
16718 @deftp {Type de données} fcgiwrap-configuration
16719 Data type representing the configuration of the @code{fcgiwrap} serice.
16720 This type has the following parameters:
16721 @table @asis
16722 @item @code{package} (par défaut : @code{fcgiwrap})
16723 Le paquet fcgiwrap à utiliser.
16724
16725 @item @code{socket} (par défaut : @code{tcp:127.0.0.1:9000})
16726 The socket on which the @code{fcgiwrap} process should listen, as a string.
16727 Valid @var{socket} values include @code{unix:@var{/path/to/unix/socket}},
16728 @code{tcp:@var{dot.ted.qu.ad}:@var{port}} and
16729 @code{tcp6:[@var{ipv6_addr}]:port}.
16730
16731 @item @code{user} (par défaut : @code{fcgiwrap})
16732 @itemx @code{group} (par défaut : @code{fcgiwrap})
16733 The user and group names, as strings, under which to run the @code{fcgiwrap}
16734 process. The @code{fastcgi} service will ensure that if the user asks for
16735 the specific user or group names @code{fcgiwrap} that the corresponding user
16736 and/or group is present on the system.
16737
16738 It is possible to configure a FastCGI-backed web service to pass HTTP
16739 authentication information from the front-end to the back-end, and to allow
16740 @code{fcgiwrap} to run the back-end process as a corresponding local user.
16741 To enable this capability on the back-end., run @code{fcgiwrap} as the
16742 @code{root} user and group. Note that this capability also has to be
16743 configured on the front-end as well.
16744 @end table
16745 @end deftp
16746
16747 @cindex php-fpm
16748 PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI
16749 implementation with some additional features useful for sites of any size.
16750
16751 These features include:
16752 @itemize @bullet
16753 @item Adaptive process spawning
16754 @item Basic statistics (similar to Apache's mod_status)
16755 @item Advanced process management with graceful stop/start
16756 @item Ability to start workers with different uid/gid/chroot/environment
16757 and different php.ini (replaces safe_mode)
16758 @item Stdout & stderr logging
16759 @item Emergency restart in case of accidental opcode cache destruction
16760 @item Accelerated upload support
16761 @item Support for a "slowlog"
16762 @item Enhancements to FastCGI, such as fastcgi_finish_request() -
16763 a special function to finish request & flush all data while continuing to do
16764 something time-consuming (video converting, stats processing, etc.)
16765 @end itemize
16766 ... and much more.
16767
16768 @defvr {Variable Scheme} php-fpm-service-type
16769 A Service type for @code{php-fpm}.
16770 @end defvr
16771
16772 @deftp {Type de données} php-fpm-configuration
16773 Data Type for php-fpm service configuration.
16774 @table @asis
16775 @item @code{php} (par défaut : @code{php})
16776 Le paquet php à utiliser.
16777 @item @code{socket} (par défaut : @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.sock")})
16778 The address on which to accept FastCGI requests. Valid syntaxes are:
16779 @table @asis
16780 @item @code{"ip.add.re.ss:port"}
16781 Listen on a TCP socket to a specific address on a specific port.
16782 @item @code{"port"}
16783 Listen on a TCP socket to all addresses on a specific port.
16784 @item @code{"/path/to/unix/socket"}
16785 Listen on a unix socket.
16786 @end table
16787
16788 @item @code{user} (par défaut : @code{php-fpm})
16789 User who will own the php worker processes.
16790 @item @code{group} (par défaut : @code{php-fpm})
16791 Group of the worker processes.
16792 @item @code{socket-user} (par défaut : @code{php-fpm})
16793 User who can speak to the php-fpm socket.
16794 @item @code{socket-group} (par défaut : @code{php-fpm})
16795 Group that can speak to the php-fpm socket.
16796 @item @code{pid-file} (par défaut : @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.pid")})
16797 The process id of the php-fpm process is written to this file once the
16798 service has started.
16799 @item @code{log-file} (par défaut : @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.log")})
16800 Log for the php-fpm master process.
16801 @item @code{process-manager} (par défaut : @code{(php-fpm-dynamic-process-manager-configuration)})
16802 Detailed settings for the php-fpm process manager. Must be either:
16803 @table @asis
16804 @item @code{<php-fpm-dynamic-process-manager-configuration>}
16805 @item @code{<php-fpm-static-process-manager-configuration>}
16806 @item @code{<php-fpm-on-demand-process-manager-configuration>}
16807 @end table
16808 @item @code{display-errors} (par défaut : @code{#f})
16809 Determines whether php errors and warning should be sent to clients and
16810 displayed in their browsers. This is useful for local php development, but
16811 a security risk for public sites, as error messages can reveal passwords and
16812 personal data.
16813 @item @code{workers-logfile} (par défaut : @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.www.log")})
16814 This file will log the @code{stderr} outputs of php worker processes. Can
16815 be set to @code{#f} to disable logging.
16816 @item @code{file} (par défaut : @code{#f})
16817 An optional override of the whole configuration. You can use the
16818 @code{mixed-text-file} function or an absolute filepath for it.
16819 @end table
16820 @end deftp
16821
16822 @deftp {Data type} php-fpm-dynamic-process-manager-configuration
16823 Data Type for the @code{dynamic} php-fpm process manager. With the
16824 @code{dynamic} process manager, spare worker processes are kept around based
16825 on it's configured limits.
16826 @table @asis
16827 @item @code{max-children} (par défaut : @code{5})
16828 Maximum of worker processes.
16829 @item @code{start-servers} (par défaut : @code{2})
16830 How many worker processes should be started on start-up.
16831 @item @code{min-spare-servers} (par défaut : @code{1})
16832 How many spare worker processes should be kept around at minimum.
16833 @item @code{max-spare-servers} (par défaut : @code{3})
16834 How many spare worker processes should be kept around at maximum.
16835 @end table
16836 @end deftp
16837
16838 @deftp {Data type} php-fpm-static-process-manager-configuration
16839 Data Type for the @code{static} php-fpm process manager. With the
16840 @code{static} process manager, an unchanging number of worker processes are
16841 created.
16842 @table @asis
16843 @item @code{max-children} (par défaut : @code{5})
16844 Maximum of worker processes.
16845 @end table
16846 @end deftp
16847
16848 @deftp {Data type} php-fpm-on-demand-process-manager-configuration
16849 Data Type for the @code{on-demand} php-fpm process manager. With the
16850 @code{on-demand} process manager, worker processes are only created as
16851 requests arrive.
16852 @table @asis
16853 @item @code{max-children} (par défaut : @code{5})
16854 Maximum of worker processes.
16855 @item @code{process-idle-timeout} (par défaut : @code{10})
16856 The time in seconds after which a process with no requests is killed.
16857 @end table
16858 @end deftp
16859
16860
16861 @deffn {Procédure Scheme} nginx-php-fpm-location @
16862 [#:nginx-package nginx] @ [socket (string-append "/var/run/php" @
16863 (version-major (package-version php)) @ "-fpm.sock")] A helper function to
16864 quickly add php to an @code{nginx-server-configuration}.
16865 @end deffn
16866
16867 A simple services setup for nginx with php can look like this:
16868 @example
16869 (services (cons* (dhcp-client-service)
16870 (service php-fpm-service-type)
16871 (service nginx-service-type
16872 (nginx-server-configuration
16873 (server-name '("example.com"))
16874 (root "/srv/http/")
16875 (locations
16876 (list (nginx-php-location)))
16877 (https-port #f)
16878 (ssl-certificate #f)
16879 (ssl-certificate-key #f)))
16880 %base-services))
16881 @end example
16882
16883 @cindex cat-avatar-generator
16884 The cat avatar generator is a simple service to demonstrate the use of
16885 php-fpm in @code{Nginx}. It is used to generate cat avatar from a seed, for
16886 instance the hash of a user's email address.
16887
16888 @deffn {Procédure Scheme} cat-avatar-generator-serice @
16889 [#:cache-dir "/var/cache/cat-avatar-generator"] @ [#:package
16890 cat-avatar-generator] @ [#:configuration (nginx-server-configuration)]
16891 Returns an nginx-server-configuration that inherits @code{configuration}.
16892 It extends the nginx configuration to add a server block that serves
16893 @code{package}, a version of cat-avatar-generator. During execution,
16894 cat-avatar-generator will be able to use @code{cache-dir} as its cache
16895 directory.
16896 @end deffn
16897
16898 A simple setup for cat-avatar-generator can look like this:
16899 @example
16900 (services (cons* (cat-avatar-generator-service
16901 #:configuration
16902 (nginx-server-configuration
16903 (server-name '("example.com"))))
16904 ...
16905 %base-services))
16906 @end example
16907
16908 @subsubheading Hpcguix-web
16909
16910 @cindex hpcguix-web
16911 The @uref{hpcguix-web, https://github.com/UMCUGenetics/hpcguix-web/} program
16912 is a customizable web interface to browse Guix packages, initially designed
16913 for users of high-performance computing (HPC) clusters.
16914
16915 @defvr {Variable Scheme} hpcguix-web-service-type
16916 The service type for @code{hpcguix-web}.
16917 @end defvr
16918
16919 @deftp {Type de données} hpcguix-web-configuration
16920 Data type for the hpcguix-web service configuration.
16921
16922 @table @asis
16923 @item @code{specs}
16924 A gexp (@pxref{G-Expressions}) specifying the hpcguix-web service
16925 configuration. The main items available in this spec are:
16926
16927 @table @asis
16928 @item @code{title-prefix} (par défaut : @code{"hpcguix | "})
16929 Le préfixe du titre des pages.
16930
16931 @item @code{guix-command} (par défaut : @code{"guix"})
16932 La commande @command{guix}
16933
16934 @item @code{package-filter-proc} (par défaut : @code{(const #t)})
16935 Une procédure qui spécifie comment filtrer les paquets qui seront affichés.
16936
16937 @item @code{package-page-extension-proc} (par défaut : @code{(const '())})
16938 Extension package for @code{hpcguix-web}.
16939
16940 @item @code{menu} (par défaut : @code{'()})
16941 Additional entry in page @code{menu}.
16942 @end table
16943
16944 See the hpcguix-web repository for a
16945 @uref{https://github.com/UMCUGenetics/hpcguix-web/blob/master/hpcweb-configuration.scm,
16946 complete example}.
16947
16948 @item @code{package} (par défaut : @code{hpcguix-web})
16949 Le paquet hpcguix-web à utiliser.
16950 @end table
16951 @end deftp
16952
16953 A typical hpcguix-web service declaration looks like this:
16954
16955 @example
16956 (service hpcguix-web-service-type
16957 (hpcguix-web-configuration
16958 (specs
16959 #~(define site-config
16960 (hpcweb-configuration
16961 (title-prefix "Guix-HPC - ")
16962 (menu '(("/about" "ABOUT"))))))))
16963 @end example
16964
16965 @node Services de certificats
16966 @subsubsection Services de certificats
16967
16968 @cindex Web
16969 @cindex HTTP, HTTPS
16970 @cindex Let's Encrypt
16971 @cindex TLS certificates
16972 The @code{(gnu services certbot)} module provides a service to automatically
16973 obtain a valid TLS certificate from the Let's Encrypt certificate
16974 authority. These certificates can then be used to serve content securely
16975 over HTTPS or other TLS-based protocols, with the knowledge that the client
16976 will be able to verify the server's authenticity.
16977
16978 @url{https://letsencrypt.org/, Let's Encrypt} provides the @code{certbot}
16979 tool to automate the certification process. This tool first securely
16980 generates a key on the server. It then makes a request to the Let's Encrypt
16981 certificate authority (CA) to sign the key. The CA checks that the request
16982 originates from the host in question by using a challenge-response protocol,
16983 requiring the server to provide its response over HTTP. If that protocol
16984 completes successfully, the CA signs the key, resulting in a certificate.
16985 That certificate is valid for a limited period of time, and therefore to
16986 continue to provide TLS services, the server needs to periodically ask the
16987 CA to renew its signature.
16988
16989 The certbot service automates this process: the initial key generation, the
16990 initial certification request to the Let's Encrypt service, the web server
16991 challenge/response integration, writing the certificate to disk, the
16992 automated periodic renewals, and the deployment tasks associated with the
16993 renewal (e.g. reloading services, copying keys with different permissions).
16994
16995 Certbot is run twice a day, at a random minute within the hour. It won't do
16996 anything until your certificates are due for renewal or revoked, but running
16997 it regularly would give your service a chance of staying online in case a
16998 Let's Encrypt-initiated revocation happened for some reason.
16999
17000 By using this service, you agree to the ACME Subscriber Agreement, which can
17001 be found there: @url{https://acme-v01.api.letsencrypt.org/directory}.
17002
17003 @defvr {Variable Scheme} certbot-service-type
17004 A service type for the @code{certbot} Let's Encrypt client. Its value must
17005 be a @code{certbot-configuration} record as in this example:
17006
17007 @example
17008 (define %nginx-deploy-hook
17009 (program-file
17010 "nginx-deploy-hook"
17011 #~(let ((pid (call-with-input-file "/var/run/nginx/pid" read)))
17012 (kill pid SIGHUP))))
17013
17014 (service certbot-service-type
17015 (certbot-configuration
17016 (email "foo@@example.net")
17017 (certificates
17018 (list
17019 (certificate-configuration
17020 (domains '("example.net" "www.example.net"))
17021 (deploy-hook %nginx-deploy-hook))
17022 (certificate-configuration
17023 (domains '("bar.example.net")))))))
17024 @end example
17025
17026 See below for details about @code{certbot-configuration}.
17027 @end defvr
17028
17029 @deftp {Type de données} certbot-configuration
17030 Data type representing the configuration of the @code{certbot} service.
17031 This type has the following parameters:
17032
17033 @table @asis
17034 @item @code{package} (par défaut : @code{certbot})
17035 Le paquet certbot à utiliser.
17036
17037 @item @code{webroot} (par défaut : @code{/var/www})
17038 The directory from which to serve the Let's Encrypt challenge/response
17039 files.
17040
17041 @item @code{certificates} (par défaut : @code{()})
17042 A list of @code{certificates-configuration}s for which to generate
17043 certificates and request signatures. Each certificate has a @code{name} and
17044 several @code{domains}.
17045
17046 @item @code{email}
17047 Mandatory email used for registration, recovery contact, and important
17048 account notifications.
17049
17050 @item @code{rsa-key-size} (par défaut : @code{2048})
17051 Size of the RSA key.
17052
17053 @item @code{default-location} (default: @i{see below})
17054 The default @code{nginx-location-configuration}. Because @code{certbot}
17055 needs to be able to serve challenges and responses, it needs to be able to
17056 run a web server. It does so by extending the @code{nginx} web service with
17057 an @code{nginx-server-configuration} listening on the @var{domains} on port
17058 80, and which has a @code{nginx-location-configuration} for the
17059 @code{/.well-known/} URI path subspace used by Let's Encrypt. @xref{Services web}, for more on these nginx configuration data types.
17060
17061 Requests to other URL paths will be matched by the @code{default-location},
17062 which if present is added to all @code{nginx-server-configuration}s.
17063
17064 By default, the @code{default-location} will issue a redirect from
17065 @code{http://@var{domain}/...} to @code{https://@var{domain}/...}, leaving
17066 you to define what to serve on your site via @code{https}.
17067
17068 Pass @code{#f} to not issue a default location.
17069 @end table
17070 @end deftp
17071
17072 @deftp {Type de données} certificate-configuration
17073 Data type representing the configuration of a certificate. This type has
17074 the following parameters:
17075
17076 @table @asis
17077 @item @code{name} (default: @i{see below})
17078 This name is used by Certbot for housekeeping and in file paths; it doesn't
17079 affect the content of the certificate itself. To see certificate names, run
17080 @code{certbot certificates}.
17081
17082 Its default is the first provided domain.
17083
17084 @item @code{domains} (par défaut : @code{()})
17085 The first domain provided will be the subject CN of the certificate, and all
17086 domains will be Subject Alternative Names on the certificate.
17087
17088 @item @code{deploy-hook} (par défaut : @code{#f})
17089 Command to be run in a shell once for each successfully issued certificate.
17090 For this command, the shell variable @code{$RENEWED_LINEAGE} will point to
17091 the config live subdirectory (for example,
17092 @samp{"/etc/letsencrypt/live/example.com"}) containing the new certificates
17093 and keys; the shell variable @code{$RENEWED_DOMAINS} will contain a
17094 space-delimited list of renewed certificate domains (for example,
17095 @samp{"example.com www.example.com"}.
17096
17097 @end table
17098 @end deftp
17099
17100 For each @code{certificate-configuration}, the certificate is saved to
17101 @code{/etc/letsencrypt/live/@var{name}/fullchain.pem} and the key is saved
17102 to @code{/etc/letsencrypt/live/@var{name}/privkey.pem}.
17103 @node Services DNS
17104 @subsubsection Services DNS
17105 @cindex DNS (domain name system)
17106 @cindex domain name system (DNS)
17107
17108 The @code{(gnu services dns)} module provides services related to the
17109 @dfn{domain name system} (DNS). It provides a server service for hosting an
17110 @emph{authoritative} DNS server for multiple zones, slave or master. This
17111 service uses @uref{https://www.knot-dns.cz/, Knot DNS}. And also a caching
17112 and forwarding DNS server for the LAN, which uses
17113 @uref{http://www.thekelleys.org.uk/dnsmasq/doc.html, dnsmasq}.
17114
17115 @subsubheading Service Knot
17116
17117 An example configuration of an authoritative server for two zones, one
17118 master and one slave, is:
17119
17120 @lisp
17121 (define-zone-entries example.org.zone
17122 ;; Name TTL Class Type Data
17123 ("@@" "" "IN" "A" "127.0.0.1")
17124 ("@@" "" "IN" "NS" "ns")
17125 ("ns" "" "IN" "A" "127.0.0.1"))
17126
17127 (define master-zone
17128 (knot-zone-configuration
17129 (domain "example.org")
17130 (zone (zone-file
17131 (origin "example.org")
17132 (entries example.org.zone)))))
17133
17134 (define slave-zone
17135 (knot-zone-configuration
17136 (domain "plop.org")
17137 (dnssec-policy "default")
17138 (master (list "plop-master"))))
17139
17140 (define plop-master
17141 (knot-remote-configuration
17142 (id "plop-master")
17143 (address (list "208.76.58.171"))))
17144
17145 (operating-system
17146 ;; ...
17147 (services (cons* (service knot-service-type
17148 (knot-configuration
17149 (remotes (list plop-master))
17150 (zones (list master-zone slave-zone))))
17151 ;; ...
17152 %base-services)))
17153 @end lisp
17154
17155 @deffn {Variable Scheme} knot-service-type
17156 This is the type for the Knot DNS server.
17157
17158 Knot DNS is an authoritative DNS server, meaning that it can serve multiple
17159 zones, that is to say domain names you would buy from a registrar. This
17160 server is not a resolver, meaning that it can only resolve names for which
17161 it is authoritative. This server can be configured to serve zones as a
17162 master server or a slave server as a per-zone basis. Slave zones will get
17163 their data from masters, and will serve it as an authoritative server. From
17164 the point of view of a resolver, there is no difference between master and
17165 slave.
17166
17167 The following data types are used to configure the Knot DNS server:
17168 @end deffn
17169
17170 @deftp {Type de données} knot-key-configuration
17171 Data type representing a key. This type has the following parameters:
17172
17173 @table @asis
17174 @item @code{id} (par défaut : @code{""})
17175 An identifier for other configuration fields to refer to this key. IDs must
17176 be unique and must not be empty.
17177
17178 @item @code{algorithm} (par défaut : @code{#f})
17179 The algorithm to use. Choose between @code{#f}, @code{'hmac-md5},
17180 @code{'hmac-sha1}, @code{'hmac-sha224}, @code{'hmac-sha256},
17181 @code{'hmac-sha384} and @code{'hmac-sha512}.
17182
17183 @item @code{secret} (par défaut : @code{""})
17184 The secret key itself.
17185
17186 @end table
17187 @end deftp
17188
17189 @deftp {Type de données} knot-acl-configuration
17190 Data type representing an Access Control List (ACL) configuration. This
17191 type has the following parameters:
17192
17193 @table @asis
17194 @item @code{id} (par défaut : @code{""})
17195 An identifier for ether configuration fields to refer to this key. IDs must
17196 be unique and must not be empty.
17197
17198 @item @code{address} (par défaut : @code{'()})
17199 An ordered list of IP addresses, network subnets, or network ranges
17200 represented with strings. The query must match one of them. Empty value
17201 means that address match is not required.
17202
17203 @item @code{key} (par défaut : @code{'()})
17204 An ordered list of references to keys represented with strings. The string
17205 must match a key ID defined in a @code{knot-key-configuration}. No key
17206 means that a key is not require to match that ACL.
17207
17208 @item @code{action} (par défaut : @code{'()})
17209 An ordered list of actions that are permitted or forbidden by this ACL.
17210 Possible values are lists of zero or more elements from @code{'transfer},
17211 @code{'notify} and @code{'update}.
17212
17213 @item @code{deny?} (par défaut : @code{#f})
17214 When true, the ACL defines restrictions. Listed actions are forbidden.
17215 When false, listed actions are allowed.
17216
17217 @end table
17218 @end deftp
17219
17220 @deftp {Type de données} zone-entry
17221 Data type represnting a record entry in a zone file. This type has the
17222 following parameters:
17223
17224 @table @asis
17225 @item @code{name} (par défaut : @code{"@@"})
17226 The name of the record. @code{"@@"} refers to the origin of the zone.
17227 Names are relative to the origin of the zone. For example, in the
17228 @code{example.org} zone, @code{"ns.example.org"} actually refers to
17229 @code{ns.example.org.example.org}. Names ending with a dot are absolute,
17230 which means that @code{"ns.example.org."} refers to @code{ns.example.org}.
17231
17232 @item @code{ttl} (par défaut : @code{""})
17233 The Time-To-Live (TTL) of this record. If not set, the default TTL is used.
17234
17235 @item @code{class} (par défaut : @code{"IN"})
17236 The class of the record. Knot currently supports only @code{"IN"} and
17237 partially @code{"CH"}.
17238
17239 @item @code{type} (par défaut : @code{"A"})
17240 The type of the record. Common types include A (IPv4 address), AAAA (IPv6
17241 address), NS (Name Server) and MX (Mail eXchange). Many other types are
17242 defined.
17243
17244 @item @code{data} (par défaut : @code{""})
17245 The data contained in the record. For instance an IP address associated
17246 with an A record, or a domain name associated with an NS record. Remember
17247 that domain names are relative to the origin unless they end with a dot.
17248
17249 @end table
17250 @end deftp
17251
17252 @deftp {Type de données} zone-file
17253 Data type representing the content of a zone file. This type has the
17254 following parameters:
17255
17256 @table @asis
17257 @item @code{entries} (par défaut : @code{'()})
17258 The list of entries. The SOA record is taken care of, so you don't need to
17259 put it in the list of entries. This list should probably contain an entry
17260 for your primary authoritative DNS server. Other than using a list of
17261 entries directly, you can use @code{define-zone-entries} to define a object
17262 containing the list of entries more easily, that you can later pass to the
17263 @code{entries} field of the @code{zone-file}.
17264
17265 @item @code{origin} (par défaut : @code{""})
17266 The name of your zone. This parameter cannot be empty.
17267
17268 @item @code{ns} (par défaut : @code{"ns"})
17269 The domain of your primary authoritative DNS server. The name is relative
17270 to the origin, unless it ends with a dot. It is mandatory that this primary
17271 DNS server corresponds to an NS record in the zone and that it is associated
17272 to an IP address in the list of entries.
17273
17274 @item @code{mail} (par défaut : @code{"hostmaster"})
17275 An email address people can contact you at, as the owner of the zone. This
17276 is translated as @code{<mail>@@<origin>}.
17277
17278 @item @code{serial} (par défaut : @code{1})
17279 The serial number of the zone. As this is used to keep track of changes by
17280 both slaves and resolvers, it is mandatory that it @emph{never} decreases.
17281 Always increment it when you make a change in your zone.
17282
17283 @item @code{refresh} (par défaut : @code{(* 2 24 3600)})
17284 The frequency at which slaves will do a zone transfer. This value is a
17285 number of seconds. It can be computed by multiplications or with
17286 @code{(string->duration)}.
17287
17288 @item @code{retry} (par défaut : @code{(* 15 60)})
17289 The period after which a slave will retry to contact its master when it
17290 fails to do so a first time.
17291
17292 @item @code{expiry} (par défaut : @code{(* 14 24 3600)})
17293 Default TTL of records. Existing records are considered correct for at most
17294 this amount of time. After this period, resolvers will invalidate their
17295 cache and check again that it still exists.
17296
17297 @item @code{nx} (par défaut : @code{3600})
17298 Default TTL of inexistant records. This delay is usually short because you
17299 want your new domains to reach everyone quickly.
17300
17301 @end table
17302 @end deftp
17303
17304 @deftp {Type de données} knot-remote-configuration
17305 Data type representing a remote configuration. This type has the following
17306 parameters:
17307
17308 @table @asis
17309 @item @code{id} (par défaut : @code{""})
17310 An identifier for other configuration fields to refer to this remote. IDs
17311 must be unique and must not be empty.
17312
17313 @item @code{address} (par défaut : @code{'()})
17314 An ordered list of destination IP addresses. Addresses are tried in
17315 sequence. An optional port can be given with the @@ separator. For
17316 instance: @code{(list "1.2.3.4" "2.3.4.5@@53")}. Default port is 53.
17317
17318 @item @code{via} (par défaut : @code{'()})
17319 An ordered list of source IP addresses. An empty list will have Knot choose
17320 an appropriate source IP. An optional port can be given with the @@
17321 separator. The default is to choose at random.
17322
17323 @item @code{key} (par défaut : @code{#f})
17324 A reference to a key, that is a string containing the identifier of a key
17325 defined in a @code{knot-key-configuration} field.
17326
17327 @end table
17328 @end deftp
17329
17330 @deftp {Type de données} knot-keystore-configuration
17331 Data type representing a keystore to hold dnssec keys. This type has the
17332 following parameters:
17333
17334 @table @asis
17335 @item @code{id} (par défaut : @code{""})
17336 The id of the keystore. It must not be empty.
17337
17338 @item @code{backend} (par défaut : @code{'pem})
17339 The backend to store the keys in. Can be @code{'pem} or @code{'pkcs11}.
17340
17341 @item @code{config} (par défaut : @code{"/var/lib/knot/keys/keys"})
17342 The configuration string of the backend. An example for the PKCS#11 is:
17343 @code{"pkcs11:token=knot;pin-value=1234
17344 /gnu/store/.../lib/pkcs11/libsofthsm2.so"}. For the pem backend, the string
17345 reprensents a path in the file system.
17346
17347 @end table
17348 @end deftp
17349
17350 @deftp {Type de données} knot-policy-configuration
17351 Data type representing a dnssec policy. Knot DNS is able to automatically
17352 sign your zones. It can either generate and manage your keys automatically
17353 or use keys that you generate.
17354
17355 Dnssec is usually implemented using two keys: a Key Signing Key (KSK) that
17356 is used to sign the second, and a Zone Signing Key (ZSK) that is used to
17357 sign the zone. In order to be trusted, the KSK needs to be present in the
17358 parent zone (usually a top-level domain). If your registrar supports
17359 dnssec, you will have to send them your KSK's hash so they can add a DS
17360 record in their zone. This is not automated and need to be done each time
17361 you change your KSK.
17362
17363 The policy also defines the lifetime of keys. Usually, ZSK can be changed
17364 easily and use weaker cryptographic functions (they use lower parameters) in
17365 order to sign records quickly, so they are changed often. The KSK however
17366 requires manual interaction with the registrar, so they are changed less
17367 often and use stronger parameters because they sign only one record.
17368
17369 This type has the following parameters:
17370
17371 @table @asis
17372 @item @code{id} (par défaut : @code{""})
17373 The id of the policy. It must not be empty.
17374
17375 @item @code{keystore} (par défaut : @code{"default"})
17376 A reference to a keystore, that is a string containing the identifier of a
17377 keystore defined in a @code{knot-keystore-configuration} field. The
17378 @code{"default"} identifier means the default keystore (a kasp database that
17379 was setup by this service).
17380
17381 @item @code{manual?} (par défaut : @code{#f})
17382 Whether the key management is manual or automatic.
17383
17384 @item @code{single-type-signing?} (par défaut : @code{#f})
17385 When @code{#t}, use the Single-Type Signing Scheme.
17386
17387 @item @code{algorithm} (par défaut : @code{"ecdsap256sha256"})
17388 An algorithm of signing keys and issued signatures.
17389
17390 @item @code{ksk-size} (par défaut : @code{256})
17391 The length of the KSK. Note that this value is correct for the default
17392 algorithm, but would be unsecure for other algorithms.
17393
17394 @item @code{zsk-size} (par défaut : @code{256})
17395 The length of the ZSK. Note that this value is correct for the default
17396 algorithm, but would be unsecure for other algorithms.
17397
17398 @item @code{dnskey-ttl} (par défaut : @code{'default})
17399 The TTL value for DNSKEY records added into zone apex. The special
17400 @code{'default} value means same as the zone SOA TTL.
17401
17402 @item @code{zsk-lifetime} (par défaut : @code{(* 30 24 3600)})
17403 The period between ZSK publication and the next rollover initiation.
17404
17405 @item @code{propagation-delay} (par défaut : @code{(* 24 3600)})
17406 An extra delay added for each key rollover step. This value should be high
17407 enough to cover propagation of data from the master server to all slaves.
17408
17409 @item @code{rrsig-lifetime} (par défaut : @code{(* 14 24 3600)})
17410 A validity period of newly issued signatures.
17411
17412 @item @code{rrsig-refresh} (par défaut : @code{(* 7 24 3600)})
17413 A period how long before a signature expiration the signature will be
17414 refreshed.
17415
17416 @item @code{nsec3?} (par défaut : @code{#f})
17417 When @code{#t}, NSEC3 will be used instead of NSEC.
17418
17419 @item @code{nsec3-iterations} (par défaut : @code{5})
17420 The number of additional times the hashing is performed.
17421
17422 @item @code{nsec3-salt-length} (par défaut : @code{8})
17423 The length of a salt field in octets, which is appended to the original
17424 owner name before hashing.
17425
17426 @item @code{nsec3-salt-lifetime} (par défaut : @code{(* 30 24 3600)})
17427 The validity period of newly issued salt field.
17428
17429 @end table
17430 @end deftp
17431
17432 @deftp {Type de données} knot-zone-configuration
17433 Data type representing a zone served by Knot. This type has the following
17434 parameters:
17435
17436 @table @asis
17437 @item @code{domain} (par défaut : @code{""})
17438 The domain served by this configuration. It must not be empty.
17439
17440 @item @code{file} (par défaut : @code{""})
17441 The file where this zone is saved. This parameter is ignored by master
17442 zones. Empty means default location that depends on the domain name.
17443
17444 @item @code{zone} (par défaut : @code{(zone-file)})
17445 The content of the zone file. This parameter is ignored by slave zones. It
17446 must contain a zone-file record.
17447
17448 @item @code{master} (par défaut : @code{'()})
17449 A list of master remotes. When empty, this zone is a master. When set,
17450 this zone is a slave. This is a list of remotes identifiers.
17451
17452 @item @code{ddns-master} (par défaut : @code{#f})
17453 The main master. When empty, it defaults to the first master in the list of
17454 masters.
17455
17456 @item @code{notify} (par défaut : @code{'()})
17457 A list of slave remote identifiers.
17458
17459 @item @code{acl} (par défaut : @code{'()})
17460 A list of acl identifiers.
17461
17462 @item @code{semantic-checks?} (par défaut : @code{#f})
17463 When set, this adds more semantic checks to the zone.
17464
17465 @item @code{disable-any?} (par défaut : @code{#f})
17466 When set, this forbids queries of the ANY type.
17467
17468 @item @code{zonefile-sync} (par défaut : @code{0})
17469 The delay between a modification in memory and on disk. 0 means immediate
17470 synchronization.
17471
17472 @item @code{serial-policy} (par défaut : @code{'increment})
17473 A policy between @code{'increment} and @code{'unixtime}.
17474
17475 @end table
17476 @end deftp
17477
17478 @deftp {Type de données} knot-configuration
17479 Data type representing the Knot configuration. This type has the following
17480 parameters:
17481
17482 @table @asis
17483 @item @code{knot} (par défaut : @code{knot})
17484 The Knot package.
17485
17486 @item @code{run-directory} (par défaut : @code{"/var/run/knot"})
17487 The run directory. This directory will be used for pid file and sockets.
17488
17489 @item @code{listen-v4} (par défaut : @code{"0.0.0.0"})
17490 An ip address on which to listen.
17491
17492 @item @code{listen-v6} (par défaut : @code{"::"})
17493 An ip address on which to listen.
17494
17495 @item @code{listen-port} (par défaut : @code{53})
17496 A port on which to listen.
17497
17498 @item @code{keys} (par défaut : @code{'()})
17499 The list of knot-key-configuration used by this configuration.
17500
17501 @item @code{acls} (par défaut : @code{'()})
17502 The list of knot-acl-configuration used by this configuration.
17503
17504 @item @code{remotes} (par défaut : @code{'()})
17505 The list of knot-remote-configuration used by this configuration.
17506
17507 @item @code{zones} (par défaut : @code{'()})
17508 The list of knot-zone-configuration used by this configuration.
17509
17510 @end table
17511 @end deftp
17512
17513 @subsubheading Services Dnsmasq
17514
17515 @deffn {Variable Scheme} dnsmasq-service-type
17516 This is the type of the dnsmasq service, whose value should be an
17517 @code{dnsmasq-configuration} object as in this example:
17518
17519 @example
17520 (service dnsmasq-service-type
17521 (dnsmasq-configuration
17522 (no-resolv? #t)
17523 (servers '("192.168.1.1"))))
17524 @end example
17525 @end deffn
17526
17527 @deftp {Type de données} dnsmasq-configuration
17528 Type de données qui représente la configuration de dnsmasq.
17529
17530 @table @asis
17531 @item @code{package} (par défaut : @var{dnsmasq})
17532 Package object of the dnsmasq server.
17533
17534 @item @code{no-hosts?} (par défaut : @code{#f})
17535 When true, don't read the hostnames in /etc/hosts.
17536
17537 @item @code{port} (par défaut : @code{53})
17538 The port to listen on. Setting this to zero completely disables DNS
17539 funtion, leaving only DHCP and/or TFTP.
17540
17541 @item @code{local-service?} (par défaut : @code{#t})
17542 Accept DNS queries only from hosts whose address is on a local subnet, ie a
17543 subnet for which an interface exists on the server.
17544
17545 @item @code{listen-addresses} (par défaut : @code{'()})
17546 Listen on the given IP addresses.
17547
17548 @item @code{resolv-file} (par défaut : @code{"/etc/resolv.conf"})
17549 The file to read the IP address of the upstream nameservers from.
17550
17551 @item @code{no-resolv?} (par défaut : @code{#f})
17552 When true, don't read @var{resolv-file}.
17553
17554 @item @code{servers} (par défaut : @code{'()})
17555 Specify IP address of upstream servers directly.
17556
17557 @item @code{cache-size} (par défaut : @code{150})
17558 Set the size of dnsmasq's cache. Setting the cache size to zero disables
17559 caching.
17560
17561 @item @code{negative-cache?} (par défaut : @code{#t})
17562 When false, disable negative caching.
17563
17564 @end table
17565 @end deftp
17566
17567 @node Services VPN
17568 @subsubsection Services VPN
17569 @cindex VPN (virtual private network)
17570 @cindex virtual private network (VPN)
17571
17572 The @code{(gnu services vpn)} module provides services related to
17573 @dfn{virtual private networks} (VPNs). It provides a @emph{client} service
17574 for your machine to connect to a VPN, and a @emph{servire} service for your
17575 machine to host a VPN. Both services use @uref{https://openvpn.net/,
17576 OpenVPN}.
17577
17578 @deffn {Procédure Scheme} openvpn-client-service @
17579 [#:config (openvpn-client-configuration)]
17580
17581 Return a service that runs @command{openvpn}, a VPN daemon, as a client.
17582 @end deffn
17583
17584 @deffn {Procédure Scheme} openvpn-server-service @
17585 [#:config (openvpn-server-configuration)]
17586
17587 Return a service that runs @command{openvpn}, a VPN daemon, as a server.
17588
17589 Both can be run simultaneously.
17590 @end deffn
17591
17592 @c %automatically generated documentation
17593
17594 Les champs de @code{openvpn-client-configuration} disponibles sont :
17595
17596 @deftypevr {paramètre de @code{openvpn-client-configuration}} package openvpn
17597 The OpenVPN package.
17598
17599 @end deftypevr
17600
17601 @deftypevr {paramètre de @code{openvpn-client-configuration}} string pid-file
17602 The OpenVPN pid file.
17603
17604 La valeur par défaut est @samp{"/var/run/openvpn/openvpn.pid"}.
17605
17606 @end deftypevr
17607
17608 @deftypevr {paramètre de @code{openvpn-client-configuration}} proto proto
17609 The protocol (UDP or TCP) used to open a channel between clients and
17610 servers.
17611
17612 La valeur par défaut est @samp{udp}.
17613
17614 @end deftypevr
17615
17616 @deftypevr {paramètre de @code{openvpn-client-configuration}} dev dev
17617 The device type used to represent the VPN connection.
17618
17619 La valeur par défaut est @samp{tun}.
17620
17621 @end deftypevr
17622
17623 @deftypevr {paramètre de @code{openvpn-client-configuration}} string ca
17624 The certificate authority to check connections against.
17625
17626 La valeur par défaut est @samp{"/etc/openvpn/ca.crt"}.
17627
17628 @end deftypevr
17629
17630 @deftypevr {paramètre de @code{openvpn-client-configuration}} string cert
17631 The certificate of the machine the daemon is running on. It should be
17632 signed by the authority given in @code{ca}.
17633
17634 La valeur par défaut est @samp{"/etc/openvpn/client.crt"}.
17635
17636 @end deftypevr
17637
17638 @deftypevr {paramètre de @code{openvpn-client-configuration}} string key
17639 The key of the machine the daemon is running on. It must be the key whose
17640 certificate is @code{cert}.
17641
17642 La valeur par défaut est @samp{"/etc/openvpn/client.key"}.
17643
17644 @end deftypevr
17645
17646 @deftypevr {paramètre de @code{openvpn-client-configuration}} boolean comp-lzo?
17647 Whether to use the lzo compression algorithm.
17648
17649 La valeur par défaut est @samp{#t}.
17650
17651 @end deftypevr
17652
17653 @deftypevr {paramètre de @code{openvpn-client-configuration}} boolean persist-key?
17654 Don't re-read key files across SIGUSR1 or --ping-restart.
17655
17656 La valeur par défaut est @samp{#t}.
17657
17658 @end deftypevr
17659
17660 @deftypevr {paramètre de @code{openvpn-client-configuration}} boolean persist-tun?
17661 Don't close and reopen TUN/TAP device or run up/down scripts across SIGUSR1
17662 or --ping-restart restarts.
17663
17664 La valeur par défaut est @samp{#t}.
17665
17666 @end deftypevr
17667
17668 @deftypevr {paramètre de @code{openvpn-client-configuration}} number verbosity
17669 Verbosity level.
17670
17671 La valeur par défaut est @samp{3}.
17672
17673 @end deftypevr
17674
17675 @deftypevr {paramètre de @code{openvpn-client-configuration}} tls-auth-client tls-auth
17676 Add an additional layer of HMAC authentication on top of the TLS control
17677 channel to protect against DoS attacks.
17678
17679 La valeur par défaut est @samp{#f}.
17680
17681 @end deftypevr
17682
17683 @deftypevr {paramètre de @code{openvpn-client-configuration}} key-usage verify-key-usage?
17684 Whether to check the server certificate has server usage extension.
17685
17686 La valeur par défaut est @samp{#t}.
17687
17688 @end deftypevr
17689
17690 @deftypevr {paramètre de @code{openvpn-client-configuration}} bind bind?
17691 Bind to a specific local port number.
17692
17693 La valeur par défaut est @samp{#f}.
17694
17695 @end deftypevr
17696
17697 @deftypevr {paramètre de @code{openvpn-client-configuration}} resolv-retry resolv-retry?
17698 Retry resolving server address.
17699
17700 La valeur par défaut est @samp{#t}.
17701
17702 @end deftypevr
17703
17704 @deftypevr {paramètre de @code{openvpn-client-configuration}} openvpn-remote-list remote
17705 A list of remote servers to connect to.
17706
17707 La valeur par défaut est @samp{()}.
17708
17709 Les champs de @code{openvpn-remote-configuration} disponibles sont :
17710
17711 @deftypevr {paramètre de @code{openvpn-remote-configuration}} string name
17712 Server name.
17713
17714 La valeur par défaut est @samp{"my-server"}.
17715
17716 @end deftypevr
17717
17718 @deftypevr {paramètre de @code{openvpn-remote-configuration}} number port
17719 Port number the server listens to.
17720
17721 La valeur par défaut est @samp{1194}.
17722
17723 @end deftypevr
17724
17725 @end deftypevr
17726 @c %end of automatic openvpn-client documentation
17727
17728 @c %automatically generated documentation
17729
17730 Les champs de @code{openvpn-server-configuration} disponibles sont :
17731
17732 @deftypevr {paramètre de @code{openvpn-server-configuration}} package openvpn
17733 The OpenVPN package.
17734
17735 @end deftypevr
17736
17737 @deftypevr {paramètre de @code{openvpn-server-configuration}} string pid-file
17738 The OpenVPN pid file.
17739
17740 La valeur par défaut est @samp{"/var/run/openvpn/openvpn.pid"}.
17741
17742 @end deftypevr
17743
17744 @deftypevr {paramètre de @code{openvpn-server-configuration}} proto proto
17745 The protocol (UDP or TCP) used to open a channel between clients and
17746 servers.
17747
17748 La valeur par défaut est @samp{udp}.
17749
17750 @end deftypevr
17751
17752 @deftypevr {paramètre de @code{openvpn-server-configuration}} dev dev
17753 The device type used to represent the VPN connection.
17754
17755 La valeur par défaut est @samp{tun}.
17756
17757 @end deftypevr
17758
17759 @deftypevr {paramètre de @code{openvpn-server-configuration}} string ca
17760 The certificate authority to check connections against.
17761
17762 La valeur par défaut est @samp{"/etc/openvpn/ca.crt"}.
17763
17764 @end deftypevr
17765
17766 @deftypevr {paramètre de @code{openvpn-server-configuration}} string cert
17767 The certificate of the machine the daemon is running on. It should be
17768 signed by the authority given in @code{ca}.
17769
17770 La valeur par défaut est @samp{"/etc/openvpn/client.crt"}.
17771
17772 @end deftypevr
17773
17774 @deftypevr {paramètre de @code{openvpn-server-configuration}} string key
17775 The key of the machine the daemon is running on. It must be the key whose
17776 certificate is @code{cert}.
17777
17778 La valeur par défaut est @samp{"/etc/openvpn/client.key"}.
17779
17780 @end deftypevr
17781
17782 @deftypevr {paramètre de @code{openvpn-server-configuration}} boolean comp-lzo?
17783 Whether to use the lzo compression algorithm.
17784
17785 La valeur par défaut est @samp{#t}.
17786
17787 @end deftypevr
17788
17789 @deftypevr {paramètre de @code{openvpn-server-configuration}} boolean persist-key?
17790 Don't re-read key files across SIGUSR1 or --ping-restart.
17791
17792 La valeur par défaut est @samp{#t}.
17793
17794 @end deftypevr
17795
17796 @deftypevr {paramètre de @code{openvpn-server-configuration}} boolean persist-tun?
17797 Don't close and reopen TUN/TAP device or run up/down scripts across SIGUSR1
17798 or --ping-restart restarts.
17799
17800 La valeur par défaut est @samp{#t}.
17801
17802 @end deftypevr
17803
17804 @deftypevr {paramètre de @code{openvpn-server-configuration}} number verbosity
17805 Verbosity level.
17806
17807 La valeur par défaut est @samp{3}.
17808
17809 @end deftypevr
17810
17811 @deftypevr {paramètre de @code{openvpn-server-configuration}} tls-auth-server tls-auth
17812 Add an additional layer of HMAC authentication on top of the TLS control
17813 channel to protect against DoS attacks.
17814
17815 La valeur par défaut est @samp{#f}.
17816
17817 @end deftypevr
17818
17819 @deftypevr {paramètre de @code{openvpn-server-configuration}} number port
17820 Specifies the port number on which the server listens.
17821
17822 La valeur par défaut est @samp{1194}.
17823
17824 @end deftypevr
17825
17826 @deftypevr {paramètre de @code{openvpn-server-configuration}} ip-mask server
17827 An ip and mask specifying the subnet inside the virtual network.
17828
17829 La valeur par défaut est @samp{"10.8.0.0 255.255.255.0"}.
17830
17831 @end deftypevr
17832
17833 @deftypevr {paramètre de @code{openvpn-server-configuration}} cidr6 server-ipv6
17834 A CIDR notation specifying the IPv6 subnet inside the virtual network.
17835
17836 La valeur par défaut est @samp{#f}.
17837
17838 @end deftypevr
17839
17840 @deftypevr {paramètre de @code{openvpn-server-configuration}} string dh
17841 The Diffie-Hellman parameters file.
17842
17843 La valeur par défaut est @samp{"/etc/openvpn/dh2048.pem"}.
17844
17845 @end deftypevr
17846
17847 @deftypevr {paramètre de @code{openvpn-server-configuration}} string ifconfig-pool-persist
17848 The file that records client IPs.
17849
17850 La valeur par défaut est @samp{"/etc/openvpn/ipp.txt"}.
17851
17852 @end deftypevr
17853
17854 @deftypevr {paramètre de @code{openvpn-server-configuration}} gateway redirect-gateway?
17855 When true, the server will act as a gateway for its clients.
17856
17857 La valeur par défaut est @samp{#f}.
17858
17859 @end deftypevr
17860
17861 @deftypevr {paramètre de @code{openvpn-server-configuration}} boolean client-to-client?
17862 When true, clients are allowed to talk to each other inside the VPN.
17863
17864 La valeur par défaut est @samp{#f}.
17865
17866 @end deftypevr
17867
17868 @deftypevr {paramètre de @code{openvpn-server-configuration}} keepalive keepalive
17869 Causes ping-like messages to be sent back and forth over the link so that
17870 each side knows when the other side has gone down. @code{keepalive}
17871 requires a pair. The first element is the period of the ping sending, and
17872 the second element is the timeout before considering the other side down.
17873
17874 @end deftypevr
17875
17876 @deftypevr {paramètre de @code{openvpn-server-configuration}} number max-clients
17877 The maximum number of clients.
17878
17879 La valeur par défaut est @samp{100}.
17880
17881 @end deftypevr
17882
17883 @deftypevr {paramètre de @code{openvpn-server-configuration}} string status
17884 The status file. This file shows a small report on current connection. It
17885 is truncated and rewritten every minute.
17886
17887 La valeur par défaut est @samp{"/var/run/openvpn/status"}.
17888
17889 @end deftypevr
17890
17891 @deftypevr {paramètre de @code{openvpn-server-configuration}} openvpn-ccd-list client-config-dir
17892 The list of configuration for some clients.
17893
17894 La valeur par défaut est @samp{()}.
17895
17896 Les champs de @code{openvpn-ccd-configuration} disponibles sont :
17897
17898 @deftypevr {paramètre de @code{openvpn-ccd-configuration}} string name
17899 Client name.
17900
17901 La valeur par défaut est @samp{"client"}.
17902
17903 @end deftypevr
17904
17905 @deftypevr {paramètre de @code{openvpn-ccd-configuration}} ip-mask iroute
17906 Client own network
17907
17908 La valeur par défaut est @samp{#f}.
17909
17910 @end deftypevr
17911
17912 @deftypevr {paramètre de @code{openvpn-ccd-configuration}} ip-mask ifconfig-push
17913 Client VPN IP.
17914
17915 La valeur par défaut est @samp{#f}.
17916
17917 @end deftypevr
17918
17919 @end deftypevr
17920
17921
17922 @c %end of automatic openvpn-server documentation
17923
17924
17925 @node Système de fichiers en réseau
17926 @subsubsection Système de fichiers en réseau
17927 @cindex NFS
17928
17929 The @code{(gnu services nfs)} module provides the following services, which
17930 are most commonly used in relation to mounting or exporting directory trees
17931 as @dfn{network file systems} (NFS).
17932
17933 @subsubheading RPC Bind Service
17934 @cindex rpcbind
17935
17936 The RPC Bind service provides a facility to map program numbers into
17937 universal addresses. Many NFS related services use this facility. Hence it
17938 is automatically started when a dependent service starts.
17939
17940 @defvr {Variable Scheme} rpcbind-service-type
17941 A service type for the RPC portmapper daemon.
17942 @end defvr
17943
17944
17945 @deftp {Type de données} rpcbind-configuration
17946 Data type representing the configuration of the RPC Bind Service. This type
17947 has the following parameters:
17948 @table @asis
17949 @item @code{rpcbind} (par défaut : @code{rpcbind})
17950 Le paquet rpcbind à utiliser.
17951
17952 @item @code{warm-start?} (par défaut : @code{#t})
17953 If this parameter is @code{#t}, then the daemon will read a state file on
17954 startup thus reloading state information saved by a previous instance.
17955 @end table
17956 @end deftp
17957
17958
17959 @subsubheading Pipefs Pseudo File System
17960 @cindex pipefs
17961 @cindex rpc_pipefs
17962
17963 The pipefs file system is used to transfer NFS related data between the
17964 kernel and user space programs.
17965
17966 @defvr {Variable Scheme} pipefs-service-type
17967 A service type for the pipefs pseudo file system.
17968 @end defvr
17969
17970 @deftp {Type de données} pipefs-configuration
17971 Data type representing the configuration of the pipefs pseudo file system
17972 service. This type has the following parameters:
17973 @table @asis
17974 @item @code{mount-point} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
17975 The directory to which the file system is to be attached.
17976 @end table
17977 @end deftp
17978
17979
17980 @subsubheading GSS Daemon Service
17981 @cindex GSSD
17982 @cindex GSS
17983 @cindex global security system
17984
17985 The @dfn{global security system} (GSS) daemon provides strong security for
17986 RPC based protocols. Before exchanging RPC requests an RPC client must
17987 establish a security context. Typically this is done using the Kerberos
17988 command @command{kinit} or automatically at login time using PAM services
17989 (@pxref{Services Kerberos}).
17990
17991 @defvr {Variable Scheme} gss-service-type
17992 A service type for the Global Security System (GSS) daemon.
17993 @end defvr
17994
17995 @deftp {Type de données} gss-configuration
17996 Data type representing the configuration of the GSS daemon service. This
17997 type has the following parameters:
17998 @table @asis
17999 @item @code{nfs-utils} (par défaut : @code{nfs-utils})
18000 The package in which the @command{rpc.gssd} command is to be found.
18001
18002 @item @code{pipefs-directory} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
18003 The directory where the pipefs file system is mounted.
18004
18005 @end table
18006 @end deftp
18007
18008
18009 @subsubheading IDMAP Daemon Service
18010 @cindex idmapd
18011 @cindex name mapper
18012
18013 The idmap daemon service provides mapping between user IDs and user names.
18014 Typically it is required in order to access file systems mounted via NFSv4.
18015
18016 @defvr {Variable Scheme} idmap-service-type
18017 A service type for the Identity Mapper (IDMAP) daemon.
18018 @end defvr
18019
18020 @deftp {Type de données} idmap-configuration
18021 Data type representing the configuration of the IDMAP daemon service. This
18022 type has the following parameters:
18023 @table @asis
18024 @item @code{nfs-utils} (par défaut : @code{nfs-utils})
18025 The package in which the @command{rpc.idmapd} command is to be found.
18026
18027 @item @code{pipefs-directory} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
18028 The directory where the pipefs file system is mounted.
18029
18030 @item @code{domain} (par défaut : @code{#f})
18031 The local NFSv4 domain name. This must be a string or @code{#f}. If it is
18032 @code{#f} then the daemon will use the host's fully qualified domain name.
18033
18034 @end table
18035 @end deftp
18036
18037 @node Intégration continue
18038 @subsubsection Intégration continue
18039
18040 @cindex continuous integration
18041 @uref{https://git.savannah.gnu.org/cgit/guix/guix-cuirass.git, Cuirass} is a
18042 continuous integration tool for Guix. It can be used both for development
18043 and for providing substitutes to others (@pxref{Substituts}).
18044
18045 The @code{(gnu services cuirass)} module provides the following service.
18046
18047 @defvr {Procédure Scheme} cuirass-service-type
18048 The type of the Cuirass service. Its value must be a
18049 @code{cuirass-configuration} object, as described below.
18050 @end defvr
18051
18052 To add build jobs, you have to set the @code{specifications} field of the
18053 configuration. Here is an example of a service defining a build job based
18054 on a specification that can be found in Cuirass source tree. This service
18055 polls the Guix repository and builds a subset of the Guix packages, as
18056 prescribed in the @file{gnu-system.scm} example spec:
18057
18058 @example
18059 (let ((spec #~((#:name . "guix")
18060 (#:url . "git://git.savannah.gnu.org/guix.git")
18061 (#:load-path . ".")
18062 (#:file . "build-aux/cuirass/gnu-system.scm")
18063 (#:proc . cuirass-jobs)
18064 (#:arguments (subset . "hello"))
18065 (#:branch . "master"))))
18066 (service cuirass-service-type
18067 (cuirass-configuration
18068 (specifications #~(list '#$spec)))))
18069 @end example
18070
18071 While information related to build jobs is located directly in the
18072 specifications, global settings for the @command{cuirass} process are
18073 accessible in other @code{cuirass-configuration} fields.
18074
18075 @deftp {Type de données} cuirass-configuration
18076 Data type representing the configuration of Cuirass.
18077
18078 @table @asis
18079 @item @code{log-file} (par défaut : @code{"/var/log/cuirass.log"})
18080 Location of the log file.
18081
18082 @item @code{cache-directory} (par défaut : @code{"/var/cache/cuirass"})
18083 Location of the repository cache.
18084
18085 @item @code{user} (par défaut : @code{"cuirass"})
18086 Owner of the @code{cuirass} process.
18087
18088 @item @code{group} (par défaut : @code{"cuirass"})
18089 Owner's group of the @code{cuirass} process.
18090
18091 @item @code{interval} (par défaut : @code{60})
18092 Number of seconds between the poll of the repositories followed by the
18093 Cuirass jobs.
18094
18095 @item @code{database} (par défaut : @code{"/var/run/cuirass/cuirass.db"})
18096 Location of sqlite database which contains the build results and previously
18097 added specifications.
18098
18099 @item @code{port} (par défaut : @code{8081})
18100 Port number used by the HTTP server.
18101
18102 @item --listen=@var{hôte}
18103 Listen on the network interface for @var{host}. The default is to accept
18104 connections from localhost.
18105
18106 @item @code{specifications} (par défaut : @code{#~'()})
18107 A gexp (@pxref{G-Expressions}) that evaluates to a list of specifications,
18108 where a specification is an association list (@pxref{Associations Lists,,,
18109 guile, GNU Guile Reference Manual}) whose keys are keywords
18110 (@code{#:keyword-example}) as shown in the example above.
18111
18112 @item @code{use-substitutes?} (par défaut : @code{#f})
18113 This allows using substitutes to avoid building every dependencies of a job
18114 from source.
18115
18116 @item @code{one-shot?} (par défaut : @code{#f})
18117 Only evaluate specifications and build derivations once.
18118
18119 @item @code{fallback?} (par défaut : @code{#f})
18120 When substituting a pre-built binary fails, fall back to building packages
18121 locally.
18122
18123 @item @code{cuirass} (par défaut : @code{cuirass})
18124 Le paquet Cuirass à utiliser.
18125 @end table
18126 @end deftp
18127
18128 @node Power Management Services
18129 @subsubsection Power Management Services
18130
18131 @cindex tlp
18132 @cindex power management with TLP
18133 @subsubheading TLP daemon
18134
18135 The @code{(gnu services pm)} module provides a Guix service definition for
18136 the Linux power management tool TLP.
18137
18138 TLP enables various powersaving modes in userspace and kernel. Contrary to
18139 @code{upower-service}, it is not a passive, monitoring tool, as it will
18140 apply custom settings each time a new power source is detected. More
18141 information can be found at @uref{http://linrunner.de/en/tlp/tlp.html, TLP
18142 home page}.
18143
18144 @deffn {Variable Scheme} tlp-service-type
18145 The service type for the TLP tool. Its value should be a valid TLP
18146 configuration (see below). To use the default settings, simply write:
18147 @example
18148 (service tlp-service-type)
18149 @end example
18150 @end deffn
18151
18152 By default TLP does not need much configuration but most TLP parameters can
18153 be tweaked using @code{tlp-configuration}.
18154
18155 Each parameter definition is preceded by its type; for example,
18156 @samp{boolean foo} indicates that the @code{foo} parameter should be
18157 specified as a boolean. Types starting with @code{maybe-} denote parameters
18158 that won't show up in TLP config file when their value is @code{'disabled}.
18159
18160 @c The following documentation was initially generated by
18161 @c (generate-tlp-documentation) in (gnu services pm). Manually maintained
18162 @c documentation is better, so we shouldn't hesitate to edit below as
18163 @c needed. However if the change you want to make to this documentation
18164 @c can be done in an automated way, it's probably easier to change
18165 @c (generate-documentation) than to make it below and have to deal with
18166 @c the churn as TLP updates.
18167
18168 Les champs de @code{tlp-configuration} disponibles sont :
18169
18170 @deftypevr {paramètre de @code{tlp-configuration}} package tlp
18171 The TLP package.
18172
18173 @end deftypevr
18174
18175 @deftypevr {paramètre de @code{tlp-configuration}} boolean tlp-enable?
18176 Set to true if you wish to enable TLP.
18177
18178 La valeur par défaut est @samp{#t}.
18179
18180 @end deftypevr
18181
18182 @deftypevr {paramètre de @code{tlp-configuration}} string tlp-default-mode
18183 Default mode when no power supply can be detected. Alternatives are AC and
18184 BAT.
18185
18186 La valeur par défaut est @samp{"AC"}.
18187
18188 @end deftypevr
18189
18190 @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer disk-idle-secs-on-ac
18191 Number of seconds Linux kernel has to wait after the disk goes idle, before
18192 syncing on AC.
18193
18194 La valeur par défaut est @samp{0}.
18195
18196 @end deftypevr
18197
18198 @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer disk-idle-secs-on-bat
18199 Same as @code{disk-idle-ac} but on BAT mode.
18200
18201 La valeur par défaut est @samp{2}.
18202
18203 @end deftypevr
18204
18205 @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer max-lost-work-secs-on-ac
18206 Dirty pages flushing periodicity, expressed in seconds.
18207
18208 La valeur par défaut est @samp{15}.
18209
18210 @end deftypevr
18211
18212 @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer max-lost-work-secs-on-bat
18213 Same as @code{max-lost-work-secs-on-ac} but on BAT mode.
18214
18215 La valeur par défaut est @samp{60}.
18216
18217 @end deftypevr
18218
18219 @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list cpu-scaling-governor-on-ac
18220 CPU frequency scaling governor on AC mode. With intel_pstate driver,
18221 alternatives are powersave and performance. With acpi-cpufreq driver,
18222 alternatives are ondemand, powersave, performance and conservative.
18223
18224 La valeur par défaut est @samp{disabled}.
18225
18226 @end deftypevr
18227
18228 @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list cpu-scaling-governor-on-bat
18229 Same as @code{cpu-scaling-governor-on-ac} but on BAT mode.
18230
18231 La valeur par défaut est @samp{disabled}.
18232
18233 @end deftypevr
18234
18235 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-min-freq-on-ac
18236 Set the min available frequency for the scaling governor on AC.
18237
18238 La valeur par défaut est @samp{disabled}.
18239
18240 @end deftypevr
18241
18242 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-max-freq-on-ac
18243 Set the max available frequency for the scaling governor on AC.
18244
18245 La valeur par défaut est @samp{disabled}.
18246
18247 @end deftypevr
18248
18249 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-min-freq-on-bat
18250 Set the min available frequency for the scaling governor on BAT.
18251
18252 La valeur par défaut est @samp{disabled}.
18253
18254 @end deftypevr
18255
18256 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-max-freq-on-bat
18257 Set the max available frequency for the scaling governor on BAT.
18258
18259 La valeur par défaut est @samp{disabled}.
18260
18261 @end deftypevr
18262
18263 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-min-perf-on-ac
18264 Limit the min P-state to control the power dissipation of the CPU, in AC
18265 mode. Values are stated as a percentage of the available performance.
18266
18267 La valeur par défaut est @samp{disabled}.
18268
18269 @end deftypevr
18270
18271 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-max-perf-on-ac
18272 Limit the max P-state to control the power dissipation of the CPU, in AC
18273 mode. Values are stated as a percentage of the available performance.
18274
18275 La valeur par défaut est @samp{disabled}.
18276
18277 @end deftypevr
18278
18279 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-min-perf-on-bat
18280 Same as @code{cpu-min-perf-on-ac} on BAT mode.
18281
18282 La valeur par défaut est @samp{disabled}.
18283
18284 @end deftypevr
18285
18286 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-max-perf-on-bat
18287 Same as @code{cpu-max-perf-on-ac} on BAT mode.
18288
18289 La valeur par défaut est @samp{disabled}.
18290
18291 @end deftypevr
18292
18293 @deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean cpu-boost-on-ac?
18294 Enable CPU turbo boost feature on AC mode.
18295
18296 La valeur par défaut est @samp{disabled}.
18297
18298 @end deftypevr
18299
18300 @deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean cpu-boost-on-bat?
18301 Same as @code{cpu-boost-on-ac?} on BAT mode.
18302
18303 La valeur par défaut est @samp{disabled}.
18304
18305 @end deftypevr
18306
18307 @deftypevr {paramètre de @code{tlp-configuration}} boolean sched-powersave-on-ac?
18308 Allow Linux kernel to minimize the number of CPU cores/hyper-threads used
18309 under light load conditions.
18310
18311 La valeur par défaut est @samp{#f}.
18312
18313 @end deftypevr
18314
18315 @deftypevr {paramètre de @code{tlp-configuration}} boolean sched-powersave-on-bat?
18316 Same as @code{sched-powersave-on-ac?} but on BAT mode.
18317
18318 La valeur par défaut est @samp{#t}.
18319
18320 @end deftypevr
18321
18322 @deftypevr {paramètre de @code{tlp-configuration}} boolean nmi-watchdog?
18323 Enable Linux kernel NMI watchdog.
18324
18325 La valeur par défaut est @samp{#f}.
18326
18327 @end deftypevr
18328
18329 @deftypevr {paramètre de @code{tlp-configuration}} maybe-string phc-controls
18330 For Linux kernels with PHC patch applied, change CPU voltages. An example
18331 value would be @samp{"F:V F:V F:V F:V"}.
18332
18333 La valeur par défaut est @samp{disabled}.
18334
18335 @end deftypevr
18336
18337 @deftypevr {paramètre de @code{tlp-configuration}} string energy-perf-policy-on-ac
18338 Set CPU performance versus energy saving policy on AC. Alternatives are
18339 performance, normal, powersave.
18340
18341 La valeur par défaut est @samp{"performance"}.
18342
18343 @end deftypevr
18344
18345 @deftypevr {paramètre de @code{tlp-configuration}} string energy-perf-policy-on-bat
18346 Same as @code{energy-perf-policy-ac} but on BAT mode.
18347
18348 La valeur par défaut est @samp{"powersave"}.
18349
18350 @end deftypevr
18351
18352 @deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disks-devices
18353 Hard disk devices.
18354
18355 @end deftypevr
18356
18357 @deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disk-apm-level-on-ac
18358 Hard disk advanced power management level.
18359
18360 @end deftypevr
18361
18362 @deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disk-apm-level-on-bat
18363 Same as @code{disk-apm-bat} but on BAT mode.
18364
18365 @end deftypevr
18366
18367 @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-spindown-timeout-on-ac
18368 Hard disk spin down timeout. One value has to be specified for each
18369 declared hard disk.
18370
18371 La valeur par défaut est @samp{disabled}.
18372
18373 @end deftypevr
18374
18375 @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-spindown-timeout-on-bat
18376 Same as @code{disk-spindown-timeout-on-ac} but on BAT mode.
18377
18378 La valeur par défaut est @samp{disabled}.
18379
18380 @end deftypevr
18381
18382 @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-iosched
18383 Select IO scheduler for disk devices. One value has to be specified for
18384 each declared hard disk. Example alternatives are cfq, deadline and noop.
18385
18386 La valeur par défaut est @samp{disabled}.
18387
18388 @end deftypevr
18389
18390 @deftypevr {paramètre de @code{tlp-configuration}} string sata-linkpwr-on-ac
18391 SATA aggressive link power management (ALPM) level. Alternatives are
18392 min_power, medium_power, max_performance.
18393
18394 La valeur par défaut est @samp{"max_performance"}.
18395
18396 @end deftypevr
18397
18398 @deftypevr {paramètre de @code{tlp-configuration}} string sata-linkpwr-on-bat
18399 Same as @code{sata-linkpwr-ac} but on BAT mode.
18400
18401 La valeur par défaut est @samp{"min_power"}.
18402
18403 @end deftypevr
18404
18405 @deftypevr {paramètre de @code{tlp-configuration}} maybe-string sata-linkpwr-blacklist
18406 Exclude specified SATA host devices for link power management.
18407
18408 La valeur par défaut est @samp{disabled}.
18409
18410 @end deftypevr
18411
18412 @deftypevr {paramètre de @code{tlp-configuration}} maybe-on-off-boolean ahci-runtime-pm-on-ac?
18413 Enable Runtime Power Management for AHCI controller and disks on AC mode.
18414
18415 La valeur par défaut est @samp{disabled}.
18416
18417 @end deftypevr
18418
18419 @deftypevr {paramètre de @code{tlp-configuration}} maybe-on-off-boolean ahci-runtime-pm-on-bat?
18420 Same as @code{ahci-runtime-pm-on-ac} on BAT mode.
18421
18422 La valeur par défaut est @samp{disabled}.
18423
18424 @end deftypevr
18425
18426 @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer ahci-runtime-pm-timeout
18427 Seconds of inactivity before disk is suspended.
18428
18429 La valeur par défaut est @samp{15}.
18430
18431 @end deftypevr
18432
18433 @deftypevr {paramètre de @code{tlp-configuration}} string pcie-aspm-on-ac
18434 PCI Express Active State Power Management level. Alternatives are default,
18435 performance, powersave.
18436
18437 La valeur par défaut est @samp{"performance"}.
18438
18439 @end deftypevr
18440
18441 @deftypevr {paramètre de @code{tlp-configuration}} string pcie-aspm-on-bat
18442 Same as @code{pcie-aspm-ac} but on BAT mode.
18443
18444 La valeur par défaut est @samp{"powersave"}.
18445
18446 @end deftypevr
18447
18448 @deftypevr {paramètre de @code{tlp-configuration}} string radeon-power-profile-on-ac
18449 Radeon graphics clock speed level. Alternatives are low, mid, high, auto,
18450 default.
18451
18452 La valeur par défaut est @samp{"high"}.
18453
18454 @end deftypevr
18455
18456 @deftypevr {paramètre de @code{tlp-configuration}} string radeon-power-profile-on-bat
18457 Same as @code{radeon-power-ac} but on BAT mode.
18458
18459 La valeur par défaut est @samp{"low"}.
18460
18461 @end deftypevr
18462
18463 @deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-state-on-ac
18464 Radeon dynamic power management method (DPM). Alternatives are battery,
18465 performance.
18466
18467 La valeur par défaut est @samp{"performance"}.
18468
18469 @end deftypevr
18470
18471 @deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-state-on-bat
18472 Same as @code{radeon-dpm-state-ac} but on BAT mode.
18473
18474 La valeur par défaut est @samp{"battery"}.
18475
18476 @end deftypevr
18477
18478 @deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-perf-level-on-ac
18479 Radeon DPM performance level. Alternatives are auto, low, high.
18480
18481 La valeur par défaut est @samp{"auto"}.
18482
18483 @end deftypevr
18484
18485 @deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-perf-level-on-bat
18486 Same as @code{radeon-dpm-perf-ac} but on BAT mode.
18487
18488 La valeur par défaut est @samp{"auto"}.
18489
18490 @end deftypevr
18491
18492 @deftypevr {paramètre de @code{tlp-configuration}} on-off-boolean wifi-pwr-on-ac?
18493 Wifi power saving mode.
18494
18495 La valeur par défaut est @samp{#f}.
18496
18497 @end deftypevr
18498
18499 @deftypevr {paramètre de @code{tlp-configuration}} on-off-boolean wifi-pwr-on-bat?
18500 Same as @code{wifi-power-ac?} but on BAT mode.
18501
18502 La valeur par défaut est @samp{#t}.
18503
18504 @end deftypevr
18505
18506 @deftypevr {paramètre de @code{tlp-configuration}} y-n-boolean wol-disable?
18507 Disable wake on LAN.
18508
18509 La valeur par défaut est @samp{#t}.
18510
18511 @end deftypevr
18512
18513 @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer sound-power-save-on-ac
18514 Timeout duration in seconds before activating audio power saving on Intel
18515 HDA and AC97 devices. A value of 0 disables power saving.
18516
18517 La valeur par défaut est @samp{0}.
18518
18519 @end deftypevr
18520
18521 @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer sound-power-save-on-bat
18522 Same as @code{sound-powersave-ac} but on BAT mode.
18523
18524 La valeur par défaut est @samp{1}.
18525
18526 @end deftypevr
18527
18528 @deftypevr {paramètre de @code{tlp-configuration}} y-n-boolean sound-power-save-controller?
18529 Disable controller in powersaving mode on Intel HDA devices.
18530
18531 La valeur par défaut est @samp{#t}.
18532
18533 @end deftypevr
18534
18535 @deftypevr {paramètre de @code{tlp-configuration}} boolean bay-poweroff-on-bat?
18536 Enable optical drive in UltraBay/MediaBay on BAT mode. Drive can be powered
18537 on again by releasing (and reinserting) the eject lever or by pressing the
18538 disc eject button on newer models.
18539
18540 La valeur par défaut est @samp{#f}.
18541
18542 @end deftypevr
18543
18544 @deftypevr {paramètre de @code{tlp-configuration}} string bay-device
18545 Name of the optical drive device to power off.
18546
18547 La valeur par défaut est @samp{"sr0"}.
18548
18549 @end deftypevr
18550
18551 @deftypevr {paramètre de @code{tlp-configuration}} string runtime-pm-on-ac
18552 Runtime Power Management for PCI(e) bus devices. Alternatives are on and
18553 auto.
18554
18555 La valeur par défaut est @samp{"on"}.
18556
18557 @end deftypevr
18558
18559 @deftypevr {paramètre de @code{tlp-configuration}} string runtime-pm-on-bat
18560 Same as @code{runtime-pm-ac} but on BAT mode.
18561
18562 La valeur par défaut est @samp{"auto"}.
18563
18564 @end deftypevr
18565
18566 @deftypevr {paramètre de @code{tlp-configuration}} boolean runtime-pm-all?
18567 Runtime Power Management for all PCI(e) bus devices, except blacklisted
18568 ones.
18569
18570 La valeur par défaut est @samp{#t}.
18571
18572 @end deftypevr
18573
18574 @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list runtime-pm-blacklist
18575 Exclude specified PCI(e) device addresses from Runtime Power Management.
18576
18577 La valeur par défaut est @samp{disabled}.
18578
18579 @end deftypevr
18580
18581 @deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list runtime-pm-driver-blacklist
18582 Exclude PCI(e) devices assigned to the specified drivers from Runtime Power
18583 Management.
18584
18585 @end deftypevr
18586
18587 @deftypevr {paramètre de @code{tlp-configuration}} boolean usb-autosuspend?
18588 Enable USB autosuspend feature.
18589
18590 La valeur par défaut est @samp{#t}.
18591
18592 @end deftypevr
18593
18594 @deftypevr {paramètre de @code{tlp-configuration}} maybe-string usb-blacklist
18595 Exclude specified devices from USB autosuspend.
18596
18597 La valeur par défaut est @samp{disabled}.
18598
18599 @end deftypevr
18600
18601 @deftypevr {paramètre de @code{tlp-configuration}} boolean usb-blacklist-wwan?
18602 Exclude WWAN devices from USB autosuspend.
18603
18604 La valeur par défaut est @samp{#t}.
18605
18606 @end deftypevr
18607
18608 @deftypevr {paramètre de @code{tlp-configuration}} maybe-string usb-whitelist
18609 Include specified devices into USB autosuspend, even if they are already
18610 excluded by the driver or via @code{usb-blacklist-wwan?}.
18611
18612 La valeur par défaut est @samp{disabled}.
18613
18614 @end deftypevr
18615
18616 @deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean usb-autosuspend-disable-on-shutdown?
18617 Enable USB autosuspend before shutdown.
18618
18619 La valeur par défaut est @samp{disabled}.
18620
18621 @end deftypevr
18622
18623 @deftypevr {paramètre de @code{tlp-configuration}} boolean restore-device-state-on-startup?
18624 Restore radio device state (bluetooth, wifi, wwan) from previous shutdown on
18625 system startup.
18626
18627 La valeur par défaut est @samp{#f}.
18628
18629 @end deftypevr
18630
18631 @cindex thermald
18632 @cindex CPU frequency scaling with thermald
18633 @subsubheading Thermald daemon
18634
18635 The @code{(gnu services pm)} module provides an interface to thermald, a CPU
18636 frequency scaling service which helps prevent overheating.
18637
18638 @defvr {Variable Scheme} thermald-service-type
18639 This is the service type for @uref{https://01.org/linux-thermal-daemon/,
18640 thermald}, the Linux Thermal Daemon, which is responsible for controlling
18641 the thermal state of processors and preventing overheating.
18642 @end defvr
18643
18644 @deftp {Type de données} thermald-configuration
18645 Data type representing the configuration of @code{thermald-service-type}.
18646
18647 @table @asis
18648 @item @code{ignore-cpuid-check?} (par défaut : @code{#f})
18649 Ignore cpuid check for supported CPU models.
18650
18651 @item @code{thermald} (par défaut : @var{thermald})
18652 Package object of thermald.
18653
18654 @end table
18655 @end deftp
18656
18657 @node Services audio
18658 @subsubsection Services audio
18659
18660 The @code{(gnu services audio)} module provides a service to start MPD (the
18661 Music Player Daemon).
18662
18663 @cindex mpd
18664 @subsubheading Music Player Daemon
18665
18666 The Music Player Daemon (MPD) is a service that can play music while being
18667 controlled from the local machine or over the network by a variety of
18668 clients.
18669
18670 The following example shows how one might run @code{mpd} as user
18671 @code{"bob"} on port @code{6666}. It uses pulseaudio for output.
18672
18673 @example
18674 (service mpd-service-type
18675 (mpd-configuration
18676 (user "bob")
18677 (port "6666")))
18678 @end example
18679
18680 @defvr {Variable Scheme} mpd-service-type
18681 The service type for @command{mpd}
18682 @end defvr
18683
18684 @deftp {Type de données} mpd-configuration
18685 Data type representing the configuration of @command{mpd}.
18686
18687 @table @asis
18688 @item @code{user} (par défaut : @code{"mpd"})
18689 The user to run mpd as.
18690
18691 @item @code{music-dir} (par défaut : @code{"~/Music"})
18692 The directory to scan for music files.
18693
18694 @item @code{playlist-dir} (par défaut : @code{"~/.mpd/playlists"})
18695 The directory to store playlists.
18696
18697 @item @code{port} (par défaut : @code{"6600"})
18698 The port to run mpd on.
18699
18700 @item @code{address} (par défaut : @code{"any"})
18701 The address that mpd will bind to. To use a Unix domain socket, an absolute
18702 path can be specified here.
18703
18704 @end table
18705 @end deftp
18706
18707 @node Services de virtualisation
18708 @subsubsection Virtualization services
18709
18710 The @code{(gnu services virtualization)} module provides services for the
18711 libvirt and virtlog daemons, as well as other virtualization-related
18712 services.
18713
18714 @subsubheading Libvirt daemon
18715 @code{libvirtd} is the server side daemon component of the libvirt
18716 virtualization management system. This daemon runs on host servers and
18717 performs required management tasks for virtualized guests.
18718
18719 @deffn {Variable Scheme} libvirt-service-type
18720 This is the type of the @uref{https://libvirt.org, libvirt daemon}. Its
18721 value must be a @code{libvirt-configuration}.
18722
18723 @example
18724 (service libvirt-service-type
18725 (libvirt-configuration
18726 (unix-sock-group "libvirt")
18727 (tls-port "16555")))
18728 @end example
18729 @end deffn
18730
18731 @c Auto-generated with (generate-libvirt-documentation)
18732 Les champs de @code{libvirt-configuration} disponibles sont :
18733
18734 @deftypevr {paramètre de @code{libvirt-configuration}} package libvirt
18735 Libvirt package.
18736
18737 @end deftypevr
18738
18739 @deftypevr {paramètre de @code{libvirt-configuration}} boolean listen-tls?
18740 Flag listening for secure TLS connections on the public TCP/IP port. must
18741 set @code{listen} for this to have any effect.
18742
18743 It is necessary to setup a CA and issue server certificates before using
18744 this capability.
18745
18746 La valeur par défaut est @samp{#t}.
18747
18748 @end deftypevr
18749
18750 @deftypevr {paramètre de @code{libvirt-configuration}} boolean listen-tcp?
18751 Listen for unencrypted TCP connections on the public TCP/IP port. must set
18752 @code{listen} for this to have any effect.
18753
18754 Using the TCP socket requires SASL authentication by default. Only SASL
18755 mechanisms which support data encryption are allowed. This is DIGEST_MD5
18756 and GSSAPI (Kerberos5)
18757
18758 La valeur par défaut est @samp{#f}.
18759
18760 @end deftypevr
18761
18762 @deftypevr {paramètre de @code{libvirt-configuration}} string tls-port
18763 Port for accepting secure TLS connections This can be a port number, or
18764 service name
18765
18766 La valeur par défaut est @samp{"16514"}.
18767
18768 @end deftypevr
18769
18770 @deftypevr {paramètre de @code{libvirt-configuration}} string tcp-port
18771 Port for accepting insecure TCP connections This can be a port number, or
18772 service name
18773
18774 La valeur par défaut est @samp{"16509"}.
18775
18776 @end deftypevr
18777
18778 @deftypevr {paramètre de @code{libvirt-configuration}} string listen-addr
18779 IP address or hostname used for client connections.
18780
18781 La valeur par défaut est @samp{"0.0.0.0"}.
18782
18783 @end deftypevr
18784
18785 @deftypevr {paramètre de @code{libvirt-configuration}} boolean mdns-adv?
18786 Flag toggling mDNS advertisement of the libvirt service.
18787
18788 Alternatively can disable for all services on a host by stopping the Avahi
18789 daemon.
18790
18791 La valeur par défaut est @samp{#f}.
18792
18793 @end deftypevr
18794
18795 @deftypevr {paramètre de @code{libvirt-configuration}} string mdns-name
18796 Default mDNS advertisement name. This must be unique on the immediate
18797 broadcast network.
18798
18799 La valeur par défaut est @samp{"Virtualization Host <hostname>"}.
18800
18801 @end deftypevr
18802
18803 @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-group
18804 UNIX domain socket group ownership. This can be used to allow a 'trusted'
18805 set of users access to management capabilities without becoming root.
18806
18807 La valeur par défaut est @samp{"root"}.
18808
18809 @end deftypevr
18810
18811 @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-ro-perms
18812 UNIX socket permissions for the R/O socket. This is used for monitoring VM
18813 status only.
18814
18815 La valeur par défaut est @samp{"0777"}.
18816
18817 @end deftypevr
18818
18819 @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-rw-perms
18820 UNIX socket permissions for the R/W socket. Default allows only root. If
18821 PolicyKit is enabled on the socket, the default will change to allow
18822 everyone (eg, 0777)
18823
18824 La valeur par défaut est @samp{"0770"}.
18825
18826 @end deftypevr
18827
18828 @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-admin-perms
18829 UNIX socket permissions for the admin socket. Default allows only owner
18830 (root), do not change it unless you are sure to whom you are exposing the
18831 access to.
18832
18833 La valeur par défaut est @samp{"0777"}.
18834
18835 @end deftypevr
18836
18837 @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-dir
18838 The directory in which sockets will be found/created.
18839
18840 La valeur par défaut est @samp{"/var/run/libvirt"}.
18841
18842 @end deftypevr
18843
18844 @deftypevr {paramètre de @code{libvirt-configuration}} string auth-unix-ro
18845 Authentication scheme for UNIX read-only sockets. By default socket
18846 permissions allow anyone to connect
18847
18848 La valeur par défaut est @samp{"polkit"}.
18849
18850 @end deftypevr
18851
18852 @deftypevr {paramètre de @code{libvirt-configuration}} string auth-unix-rw
18853 Authentication scheme for UNIX read-write sockets. By default socket
18854 permissions only allow root. If PolicyKit support was compiled into
18855 libvirt, the default will be to use 'polkit' auth.
18856
18857 La valeur par défaut est @samp{"polkit"}.
18858
18859 @end deftypevr
18860
18861 @deftypevr {paramètre de @code{libvirt-configuration}} string auth-tcp
18862 Authentication scheme for TCP sockets. If you don't enable SASL, then all
18863 TCP traffic is cleartext. Don't do this outside of a dev/test scenario.
18864
18865 La valeur par défaut est @samp{"sasl"}.
18866
18867 @end deftypevr
18868
18869 @deftypevr {paramètre de @code{libvirt-configuration}} string auth-tls
18870 Authentication scheme for TLS sockets. TLS sockets already have encryption
18871 provided by the TLS layer, and limited authentication is done by
18872 certificates.
18873
18874 It is possible to make use of any SASL authentication mechanism as well, by
18875 using 'sasl' for this option
18876
18877 La valeur par défaut est @samp{"none"}.
18878
18879 @end deftypevr
18880
18881 @deftypevr {paramètre de @code{libvirt-configuration}} optional-list access-drivers
18882 API access control scheme.
18883
18884 By default an authenticated user is allowed access to all APIs. Access
18885 drivers can place restrictions on this.
18886
18887 La valeur par défaut est @samp{()}.
18888
18889 @end deftypevr
18890
18891 @deftypevr {paramètre de @code{libvirt-configuration}} string key-file
18892 Server key file path. If set to an empty string, then no private key is
18893 loaded.
18894
18895 La valeur par défaut est @samp{""}.
18896
18897 @end deftypevr
18898
18899 @deftypevr {paramètre de @code{libvirt-configuration}} string cert-file
18900 Server key file path. If set to an empty string, then no certificate is
18901 loaded.
18902
18903 La valeur par défaut est @samp{""}.
18904
18905 @end deftypevr
18906
18907 @deftypevr {paramètre de @code{libvirt-configuration}} string ca-file
18908 Server key file path. If set to an empty string, then no CA certificate is
18909 loaded.
18910
18911 La valeur par défaut est @samp{""}.
18912
18913 @end deftypevr
18914
18915 @deftypevr {paramètre de @code{libvirt-configuration}} string crl-file
18916 Certificate revocation list path. If set to an empty string, then no CRL is
18917 loaded.
18918
18919 La valeur par défaut est @samp{""}.
18920
18921 @end deftypevr
18922
18923 @deftypevr {paramètre de @code{libvirt-configuration}} boolean tls-no-sanity-cert
18924 Disable verification of our own server certificates.
18925
18926 When libvirtd starts it performs some sanity checks against its own
18927 certificates.
18928
18929 La valeur par défaut est @samp{#f}.
18930
18931 @end deftypevr
18932
18933 @deftypevr {paramètre de @code{libvirt-configuration}} boolean tls-no-verify-cert
18934 Disable verification of client certificates.
18935
18936 Client certificate verification is the primary authentication mechanism.
18937 Any client which does not present a certificate signed by the CA will be
18938 rejected.
18939
18940 La valeur par défaut est @samp{#f}.
18941
18942 @end deftypevr
18943
18944 @deftypevr {paramètre de @code{libvirt-configuration}} optional-list tls-allowed-dn-list
18945 Whitelist of allowed x509 Distinguished Name.
18946
18947 La valeur par défaut est @samp{()}.
18948
18949 @end deftypevr
18950
18951 @deftypevr {paramètre de @code{libvirt-configuration}} optional-list sasl-allowed-usernames
18952 Whitelist of allowed SASL usernames. The format for username depends on the
18953 SASL authentication mechanism.
18954
18955 La valeur par défaut est @samp{()}.
18956
18957 @end deftypevr
18958
18959 @deftypevr {paramètre de @code{libvirt-configuration}} string tls-priority
18960 Override the compile time default TLS priority string. The default is
18961 usually "NORMAL" unless overridden at build time. Only set this is it is
18962 desired for libvirt to deviate from the global default settings.
18963
18964 La valeur par défaut est @samp{"NORMAL"}.
18965
18966 @end deftypevr
18967
18968 @deftypevr {paramètre de @code{libvirt-configuration}} integer max-clients
18969 Maximum number of concurrent client connections to allow over all sockets
18970 combined.
18971
18972 La valeur par défaut est @samp{5000}.
18973
18974 @end deftypevr
18975
18976 @deftypevr {paramètre de @code{libvirt-configuration}} integer max-queued-clients
18977 Maximum length of queue of connections waiting to be accepted by the
18978 daemon. Note, that some protocols supporting retransmission may obey this
18979 so that a later reattempt at connection succeeds.
18980
18981 La valeur par défaut est @samp{1000}.
18982
18983 @end deftypevr
18984
18985 @deftypevr {paramètre de @code{libvirt-configuration}} integer max-anonymous-clients
18986 Maximum length of queue of accepted but not yet authenticated clients. Set
18987 this to zero to turn this feature off
18988
18989 La valeur par défaut est @samp{20}.
18990
18991 @end deftypevr
18992
18993 @deftypevr {paramètre de @code{libvirt-configuration}} integer min-workers
18994 Number of workers to start up initially.
18995
18996 La valeur par défaut est @samp{5}.
18997
18998 @end deftypevr
18999
19000 @deftypevr {paramètre de @code{libvirt-configuration}} integer max-workers
19001 Maximum number of worker threads.
19002
19003 If the number of active clients exceeds @code{min-workers}, then more
19004 threads are spawned, up to max_workers limit. Typically you'd want
19005 max_workers to equal maximum number of clients allowed.
19006
19007 La valeur par défaut est @samp{20}.
19008
19009 @end deftypevr
19010
19011 @deftypevr {paramètre de @code{libvirt-configuration}} integer prio-workers
19012 Number of priority workers. If all workers from above pool are stuck, some
19013 calls marked as high priority (notably domainDestroy) can be executed in
19014 this pool.
19015
19016 La valeur par défaut est @samp{5}.
19017
19018 @end deftypevr
19019
19020 @deftypevr {paramètre de @code{libvirt-configuration}} integer max-requests
19021 Total global limit on concurrent RPC calls.
19022
19023 La valeur par défaut est @samp{20}.
19024
19025 @end deftypevr
19026
19027 @deftypevr {paramètre de @code{libvirt-configuration}} integer max-client-requests
19028 Limit on concurrent requests from a single client connection. To avoid one
19029 client monopolizing the server this should be a small fraction of the global
19030 max_requests and max_workers parameter.
19031
19032 La valeur par défaut est @samp{5}.
19033
19034 @end deftypevr
19035
19036 @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-min-workers
19037 Same as @code{min-workers} but for the admin interface.
19038
19039 La valeur par défaut est @samp{1}.
19040
19041 @end deftypevr
19042
19043 @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-workers
19044 Same as @code{max-workers} but for the admin interface.
19045
19046 La valeur par défaut est @samp{5}.
19047
19048 @end deftypevr
19049
19050 @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-clients
19051 Same as @code{max-clients} but for the admin interface.
19052
19053 La valeur par défaut est @samp{5}.
19054
19055 @end deftypevr
19056
19057 @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-queued-clients
19058 Same as @code{max-queued-clients} but for the admin interface.
19059
19060 La valeur par défaut est @samp{5}.
19061
19062 @end deftypevr
19063
19064 @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-client-requests
19065 Same as @code{max-client-requests} but for the admin interface.
19066
19067 La valeur par défaut est @samp{5}.
19068
19069 @end deftypevr
19070
19071 @deftypevr {paramètre de @code{libvirt-configuration}} integer log-level
19072 Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
19073
19074 La valeur par défaut est @samp{3}.
19075
19076 @end deftypevr
19077
19078 @deftypevr {paramètre de @code{libvirt-configuration}} string log-filters
19079 Logging filters.
19080
19081 A filter allows to select a different logging level for a given category of
19082 logs The format for a filter is one of:
19083
19084 @itemize @bullet
19085 @item
19086 x:name
19087
19088 @item
19089 x:+name
19090
19091 @end itemize
19092
19093 where @code{name} is a string which is matched against the category given in
19094 the @code{VIR_LOG_INIT()} at the top of each libvirt source file, e.g.,
19095 "remote", "qemu", or "util.json" (the name in the filter can be a substring
19096 of the full category name, in order to match multiple similar categories),
19097 the optional "+" prefix tells libvirt to log stack trace for each message
19098 matching name, and @code{x} is the minimal level where matching messages
19099 should be logged:
19100
19101 @itemize @bullet
19102 @item
19103 1: DEBUG
19104
19105 @item
19106 2: INFO
19107
19108 @item
19109 3: WARNING
19110
19111 @item
19112 4: ERROR
19113
19114 @end itemize
19115
19116 Multiple filters can be defined in a single filters statement, they just
19117 need to be separated by spaces.
19118
19119 La valeur par défaut est @samp{"3:remote 4:event"}.
19120
19121 @end deftypevr
19122
19123 @deftypevr {paramètre de @code{libvirt-configuration}} string log-outputs
19124 Logging outputs.
19125
19126 An output is one of the places to save logging information The format for an
19127 output can be:
19128
19129 @table @code
19130 @item x:stderr
19131 output goes to stderr
19132
19133 @item x:syslog:name
19134 use syslog for the output and use the given name as the ident
19135
19136 @item x:file:file_path
19137 output to a file, with the given filepath
19138
19139 @item x:journald
19140 output to journald logging system
19141
19142 @end table
19143
19144 In all case the x prefix is the minimal level, acting as a filter
19145
19146 @itemize @bullet
19147 @item
19148 1: DEBUG
19149
19150 @item
19151 2: INFO
19152
19153 @item
19154 3: WARNING
19155
19156 @item
19157 4: ERROR
19158
19159 @end itemize
19160
19161 Multiple outputs can be defined, they just need to be separated by spaces.
19162
19163 La valeur par défaut est @samp{"3:stderr"}.
19164
19165 @end deftypevr
19166
19167 @deftypevr {paramètre de @code{libvirt-configuration}} integer audit-level
19168 Allows usage of the auditing subsystem to be altered
19169
19170 @itemize @bullet
19171 @item
19172 0: disable all auditing
19173
19174 @item
19175 1: enable auditing, only if enabled on host
19176
19177 @item
19178 2: enable auditing, and exit if disabled on host.
19179
19180 @end itemize
19181
19182 La valeur par défaut est @samp{1}.
19183
19184 @end deftypevr
19185
19186 @deftypevr {paramètre de @code{libvirt-configuration}} boolean audit-logging
19187 Send audit messages via libvirt logging infrastructure.
19188
19189 La valeur par défaut est @samp{#f}.
19190
19191 @end deftypevr
19192
19193 @deftypevr {paramètre de @code{libvirt-configuration}} optional-string host-uuid
19194 Host UUID. UUID must not have all digits be the same.
19195
19196 La valeur par défaut est @samp{""}.
19197
19198 @end deftypevr
19199
19200 @deftypevr {paramètre de @code{libvirt-configuration}} string host-uuid-source
19201 Source to read host UUID.
19202
19203 @itemize @bullet
19204 @item
19205 @code{smbios}: fetch the UUID from @code{dmidecode -s system-uuid}
19206
19207 @item
19208 @code{machine-id}: fetch the UUID from @code{/etc/machine-id}
19209
19210 @end itemize
19211
19212 If @code{dmidecode} does not provide a valid UUID a temporary UUID will be
19213 generated.
19214
19215 La valeur par défaut est @samp{"smbios"}.
19216
19217 @end deftypevr
19218
19219 @deftypevr {paramètre de @code{libvirt-configuration}} integer keepalive-interval
19220 A keepalive message is sent to a client after @code{keepalive_interval}
19221 seconds of inactivity to check if the client is still responding. If set to
19222 -1, libvirtd will never send keepalive requests; however clients can still
19223 send them and the daemon will send responses.
19224
19225 La valeur par défaut est @samp{5}.
19226
19227 @end deftypevr
19228
19229 @deftypevr {paramètre de @code{libvirt-configuration}} integer keepalive-count
19230 Maximum number of keepalive messages that are allowed to be sent to the
19231 client without getting any response before the connection is considered
19232 broken.
19233
19234 In other words, the connection is automatically closed approximately after
19235 @code{keepalive_interval * (keepalive_count + 1)} seconds since the last
19236 message received from the client. When @code{keepalive-count} is set to 0,
19237 connections will be automatically closed after @code{keepalive-interval}
19238 seconds of inactivity without sending any keepalive messages.
19239
19240 La valeur par défaut est @samp{5}.
19241
19242 @end deftypevr
19243
19244 @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-keepalive-interval
19245 Same as above but for admin interface.
19246
19247 La valeur par défaut est @samp{5}.
19248
19249 @end deftypevr
19250
19251 @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-keepalive-count
19252 Same as above but for admin interface.
19253
19254 La valeur par défaut est @samp{5}.
19255
19256 @end deftypevr
19257
19258 @deftypevr {paramètre de @code{libvirt-configuration}} integer ovs-timeout
19259 Timeout for Open vSwitch calls.
19260
19261 The @code{ovs-vsctl} utility is used for the configuration and its timeout
19262 option is set by default to 5 seconds to avoid potential infinite waits
19263 blocking libvirt.
19264
19265 La valeur par défaut est @samp{5}.
19266
19267 @end deftypevr
19268
19269 @c %end of autogenerated docs
19270
19271 @subsubheading Virtlog daemon
19272 The virtlogd service is a server side daemon component of libvirt that is
19273 used to manage logs from virtual machine consoles.
19274
19275 This daemon is not used directly by libvirt client applications, rather it
19276 is called on their behalf by @code{libvirtd}. By maintaining the logs in a
19277 standalone daemon, the main @code{libvirtd} daemon can be restarted without
19278 risk of losing logs. The @code{virtlogd} daemon has the ability to re-exec()
19279 itself upon receiving @code{SIGUSR1}, to allow live upgrades without
19280 downtime.
19281
19282 @deffn {Variable Scheme} virtlog-service-type
19283 This is the type of the virtlog daemon. Its value must be a
19284 @code{virtlog-configuration}.
19285
19286 @example
19287 (service virtlog-service-type
19288 (virtlog-configuration
19289 (max-clients 1000)))
19290 @end example
19291 @end deffn
19292
19293 @deftypevr {paramètre de @code{virtlog-configuration}} integer log-level
19294 Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
19295
19296 La valeur par défaut est @samp{3}.
19297
19298 @end deftypevr
19299
19300 @deftypevr {paramètre de @code{virtlog-configuration}} string log-filters
19301 Logging filters.
19302
19303 A filter allows to select a different logging level for a given category of
19304 logs The format for a filter is one of:
19305
19306 @itemize @bullet
19307 @item
19308 x:name
19309
19310 @item
19311 x:+name
19312
19313 @end itemize
19314
19315 where @code{name} is a string which is matched against the category given in
19316 the @code{VIR_LOG_INIT()} at the top of each libvirt source file, e.g.,
19317 "remote", "qemu", or "util.json" (the name in the filter can be a substring
19318 of the full category name, in order to match multiple similar categories),
19319 the optional "+" prefix tells libvirt to log stack trace for each message
19320 matching name, and @code{x} is the minimal level where matching messages
19321 should be logged:
19322
19323 @itemize @bullet
19324 @item
19325 1: DEBUG
19326
19327 @item
19328 2: INFO
19329
19330 @item
19331 3: WARNING
19332
19333 @item
19334 4: ERROR
19335
19336 @end itemize
19337
19338 Multiple filters can be defined in a single filters statement, they just
19339 need to be separated by spaces.
19340
19341 La valeur par défaut est @samp{"3:remote 4:event"}.
19342
19343 @end deftypevr
19344
19345 @deftypevr {paramètre de @code{virtlog-configuration}} string log-outputs
19346 Logging outputs.
19347
19348 An output is one of the places to save logging information The format for an
19349 output can be:
19350
19351 @table @code
19352 @item x:stderr
19353 output goes to stderr
19354
19355 @item x:syslog:name
19356 use syslog for the output and use the given name as the ident
19357
19358 @item x:file:file_path
19359 output to a file, with the given filepath
19360
19361 @item x:journald
19362 output to journald logging system
19363
19364 @end table
19365
19366 In all case the x prefix is the minimal level, acting as a filter
19367
19368 @itemize @bullet
19369 @item
19370 1: DEBUG
19371
19372 @item
19373 2: INFO
19374
19375 @item
19376 3: WARNING
19377
19378 @item
19379 4: ERROR
19380
19381 @end itemize
19382
19383 Multiple outputs can be defined, they just need to be separated by spaces.
19384
19385 La valeur par défaut est @samp{"3:stderr"}.
19386
19387 @end deftypevr
19388
19389 @deftypevr {paramètre de @code{virtlog-configuration}} integer max-clients
19390 Maximum number of concurrent client connections to allow over all sockets
19391 combined.
19392
19393 La valeur par défaut est @samp{1024}.
19394
19395 @end deftypevr
19396
19397 @deftypevr {paramètre de @code{virtlog-configuration}} integer max-size
19398 Maximum file size before rolling over.
19399
19400 Defaults to @samp{2MB}
19401
19402 @end deftypevr
19403
19404 @deftypevr {paramètre de @code{virtlog-configuration}} integer max-backups
19405 Maximum number of backup files to keep.
19406
19407 Defaults to @samp{3}
19408
19409 @end deftypevr
19410
19411 @subsubheading Transparent Emulation with QEMU
19412
19413 @cindex emulation
19414 @cindex @code{binfmt_misc}
19415 @code{qemu-binfmt-service-type} provides support for transparent emulation
19416 of program binaries built for different architectures---e.g., it allows you
19417 to transparently execute an ARMv7 program on an x86_64 machine. It achieves
19418 this by combining the @uref{https://www.qemu.org, QEMU} emulator and the
19419 @code{binfmt_misc} feature of the kernel Linux.
19420
19421 @defvr {Variable Scheme} qemu-binfmt-service-type
19422 This is the type of the QEMU/binfmt service for transparent emulation. Its
19423 value must be a @code{qemu-binfmt-configuration} object, which specifies the
19424 QEMU package to use as well as the architecture we want to emulated:
19425
19426 @example
19427 (service qemu-binfmt-service-type
19428 (qemu-binfmt-configuration
19429 (platforms (lookup-qemu-platforms "arm" "aarch64" "ppc"))))
19430 @end example
19431
19432 In this example, we enable transparent emulation for the ARM and aarch64
19433 platforms. Running @code{herd stop qemu-binfmt} turns it off, and running
19434 @code{herd start qemu-binfmt} turns it back on (@pxref{Invoking herd, the
19435 @command{herd} command,, shepherd, The GNU Shepherd Manual}).
19436 @end defvr
19437
19438 @deftp {Type de données} qemu-binfmt-configuration
19439 This is the configuration for the @code{qemu-binfmt} service.
19440
19441 @table @asis
19442 @item @code{platforms} (par défaut : @code{'()})
19443 The list of emulated QEMU platforms. Each item must be a @dfn{platform
19444 object} as returned by @code{lookup-qemu-platforms} (see below).
19445
19446 @item @code{guix-support?} (par défaut : @code{#f})
19447 When it is true, QEMU and all its dependencies are added to the build
19448 environment of @command{guix-daemon} (@pxref{Invoquer guix-daemon,
19449 @code{--chroot-directory} option}). This allows the @code{binfmt_misc}
19450 handlers to be used within the build environment, which in turn means that
19451 you can transparently build programs for another architecture.
19452
19453 For example, let's suppose you're on an x86_64 machine and you have this
19454 service:
19455
19456 @example
19457 (service qemu-binfmt-service-type
19458 (qemu-binfmt-configuration
19459 (platforms (lookup-qemu-platforms "arm"))
19460 (guix-support? #t)))
19461 @end example
19462
19463 You can run:
19464
19465 @example
19466 guix build -s armhf-linux inkscape
19467 @end example
19468
19469 @noindent
19470 and it will build Inkscape for ARMv7 @emph{as if it were a native build},
19471 transparently using QEMU to emulate the ARMv7 CPU. Pretty handy if you'd
19472 like to test a package build for an architecture you don't have access to!
19473
19474 @item @code{qemu} (par défaut : @code{qemu})
19475 Le paquet QEMU à utiliser.
19476 @end table
19477 @end deftp
19478
19479 @deffn {Procédure Scheme} lookup-qemu-platforms @var{platforms}@dots{}
19480 Return the list of QEMU platform objects corresponding to
19481 @var{platforms}@dots{}. @var{platforms} must be a list of strings
19482 corresponding to platform names, such as @code{"arm"}, @code{"sparc"},
19483 @code{"mips64el"}, and so on.
19484 @end deffn
19485
19486 @deffn {Procédure Scheme} qemu-platform? @var{obj}
19487 Return true if @var{obj} is a platform object.
19488 @end deffn
19489
19490 @deffn {Procédure Scheme} qemu-platform-name @var{platform}
19491 Return the name of @var{platform}---a string such as @code{"arm"}.
19492 @end deffn
19493
19494 @node Services de contrôle de version
19495 @subsubsection Services de contrôle de version
19496
19497 The @code{(gnu services version-control)} module provides a service to allow
19498 remote access to local Git repositories. There are three options: the
19499 @code{git-daemon-service}, which provides access to repositories via the
19500 @code{git://} unsecured TCP-based protocol, extending the @code{nginx} web
19501 server to proxy some requests to @code{git-http-backend}, or providing a web
19502 interface with @code{cgit-service-type}.
19503
19504 @deffn {Procédure Scheme} git-daemon-service [#:config (git-daemon-configuration)]
19505
19506 Return a service that runs @command{git daemon}, a simple TCP server to
19507 expose repositories over the Git protocol for anonymous access.
19508
19509 The optional @var{config} argument should be a
19510 @code{<git-daemon-configuration>} object, by default it allows read-only
19511 access to exported@footnote{By creating the magic file
19512 "git-daemon-export-ok" in the repository directory.} repositories under
19513 @file{/srv/git}.
19514
19515 @end deffn
19516
19517 @deftp {Type de données} git-daemon-configuration
19518 Data type representing the configuration for @code{git-daemon-service}.
19519
19520 @table @asis
19521 @item @code{package} (par défaut : @var{git})
19522 Package object of the Git distributed version control system.
19523
19524 @item @code{export-all?} (par défaut : @var{#f})
19525 Whether to allow access for all Git repositories, even if they do not have
19526 the @file{git-daemon-export-ok} file.
19527
19528 @item @code{base-path} (default: @file{/srv/git})
19529 Whether to remap all the path requests as relative to the given path. If
19530 you run git daemon with @var{(base-path "/srv/git")} on example.com, then if
19531 you later try to pull @code{git://example.com/hello.git}, git daemon will
19532 interpret the path as @code{/srv/git/hello.git}.
19533
19534 @item @code{user-path} (par défaut : @var{#f})
19535 Whether to allow @code{~user} notation to be used in requests. When
19536 specified with empty string, requests to @code{git://host/~alice/foo} is
19537 taken as a request to access @code{foo} repository in the home directory of
19538 user @code{alice}. If @var{(user-path "path")} is specified, the same
19539 request is taken as a request to access @code{path/foo} repository in the
19540 home directory of user @code{alice}.
19541
19542 @item @code{listen} (par défaut : @var{'()})
19543 Whether to listen on specific IP addresses or hostnames, defaults to all.
19544
19545 @item @code{port} (par défaut : @var{#f})
19546 Whether to listen on an alternative port, which defaults to 9418.
19547
19548 @item @code{whitelist} (par défaut : @var{'()})
19549 If not empty, only allow access to this list of directories.
19550
19551 @item @code{extra-options} (par défaut : @var{'()})
19552 Extra options will be passed to @code{git daemon}, please run @command{man
19553 git-daemon} for more information.
19554
19555 @end table
19556 @end deftp
19557
19558 The @code{git://} protocol lacks authentication. When you pull from a
19559 repository fetched via @code{git://}, you don't know that the data you
19560 receive was modified is really coming from the specified host, and you have
19561 your connection is subject to eavesdropping. It's better to use an
19562 authenticated and encrypted transport, such as @code{https}. Although Git
19563 allows you to serve repositories using unsophisticated file-based web
19564 servers, there is a faster protocol implemented by the
19565 @code{git-http-backend} program. This program is the back-end of a proper
19566 Git web service. It is designed to sit behind a FastCGI proxy. @xref{Services web}, for more on running the necessary @code{fcgiwrap} daemon.
19567
19568 Guix has a separate configuration data type for serving Git repositories
19569 over HTTP.
19570
19571 @deftp {Type de données} git-http-configuration
19572 Data type representing the configuration for @code{git-http-service}.
19573
19574 @table @asis
19575 @item @code{package} (par défaut : @var{git})
19576 Package object of the Git distributed version control system.
19577
19578 @item @code{git-root} (default: @file{/srv/git})
19579 Directory containing the Git repositories to expose to the world.
19580
19581 @item @code{export-all?} (par défaut : @var{#f})
19582 Whether to expose access for all Git repositories in @var{git-root}, even if
19583 they do not have the @file{git-daemon-export-ok} file.
19584
19585 @item @code{uri-path} (default: @file{/git/})
19586 Path prefix for Git access. With the default @code{/git/} prefix, this will
19587 map @code{http://@var{server}/git/@var{repo}.git} to
19588 @code{/srv/git/@var{repo}.git}. Requests whose URI paths do not begin with
19589 this prefix are not passed on to this Git instance.
19590
19591 @item @code{fcgiwrap-socket} (par défaut : @code{127.0.0.1:9000})
19592 The socket on which the @code{fcgiwrap} daemon is listening. @xref{Services web}.
19593 @end table
19594 @end deftp
19595
19596 There is no @code{git-http-service-type}, currently; instead you can create
19597 an @code{nginx-location-configuration} from a @code{git-http-configuration}
19598 and then add that location to a web server.
19599
19600 @deffn {Procédure Scheme} git-http-nginx-location-configuration @
19601 [config=(git-http-configuration)] Compute an
19602 @code{nginx-location-configuration} that corresponds to the given Git http
19603 configuration. An example nginx service definition to serve the default
19604 @file{/srv/git} over HTTPS might be:
19605
19606 @example
19607 (service nginx-service-type
19608 (nginx-configuration
19609 (server-blocks
19610 (list
19611 (nginx-server-configuration
19612 (listen '("443 ssl"))
19613 (server-name "git.my-host.org")
19614 (ssl-certificate
19615 "/etc/letsencrypt/live/git.my-host.org/fullchain.pem")
19616 (ssl-certificate-key
19617 "/etc/letsencrypt/live/git.my-host.org/privkey.pem")
19618 (locations
19619 (list
19620 (git-http-nginx-location-configuration
19621 (git-http-configuration (uri-path "/"))))))))))
19622 @end example
19623
19624 This example assumes that you are using Let's Encrypt to get your TLS
19625 certificate. @xref{Services de certificats}. The default @code{certbot}
19626 service will redirect all HTTP traffic on @code{git.my-host.org} to HTTPS.
19627 You will also need to add an @code{fcgiwrap} proxy to your system services.
19628 @xref{Services web}.
19629 @end deffn
19630
19631 @subsubheading Cgit Service
19632
19633 @cindex Cgit service
19634 @cindex Git, web interface
19635 @uref{https://git.zx2c4.com/cgit/, Cgit} is a web frontend for Git
19636 repositories written in C.
19637
19638 The following example will configure the service with default values. By
19639 default, Cgit can be accessed on port 80 (@code{http://localhost:80}).
19640
19641 @example
19642 (service cgit-service-type)
19643 @end example
19644
19645 The @code{file-object} type designates either a file-like object
19646 (@pxref{G-Expressions, file-like objects}) or a string.
19647
19648 @c %start of fragment
19649
19650 Les champs de @code{cgit-configuration} disponibles sont :
19651
19652 @deftypevr {paramètre de @code{cgit-configuration}} package package
19653 The CGIT package.
19654
19655 @end deftypevr
19656
19657 @deftypevr {paramètre de @code{cgit-configuration}} nginx-server-configuration-list nginx
19658 NGINX configuration.
19659
19660 @end deftypevr
19661
19662 @deftypevr {paramètre de @code{cgit-configuration}} file-object about-filter
19663 Specifies a command which will be invoked to format the content of about
19664 pages (both top-level and for each repository).
19665
19666 La valeur par défaut est @samp{""}.
19667
19668 @end deftypevr
19669
19670 @deftypevr {paramètre de @code{cgit-configuration}} string agefile
19671 Specifies a path, relative to each repository path, which can be used to
19672 specify the date and time of the youngest commit in the repository.
19673
19674 La valeur par défaut est @samp{""}.
19675
19676 @end deftypevr
19677
19678 @deftypevr {paramètre de @code{cgit-configuration}} file-object auth-filter
19679 Specifies a command that will be invoked for authenticating repository
19680 access.
19681
19682 La valeur par défaut est @samp{""}.
19683
19684 @end deftypevr
19685
19686 @deftypevr {paramètre de @code{cgit-configuration}} string branch-sort
19687 Flag which, when set to @samp{age}, enables date ordering in the branch ref
19688 list, and when set @samp{name} enables ordering by branch name.
19689
19690 La valeur par défaut est @samp{"name"}.
19691
19692 @end deftypevr
19693
19694 @deftypevr {paramètre de @code{cgit-configuration}} string cache-root
19695 Path used to store the cgit cache entries.
19696
19697 La valeur par défaut est @samp{"/var/cache/cgit"}.
19698
19699 @end deftypevr
19700
19701 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-static-ttl
19702 Number which specifies the time-to-live, in minutes, for the cached version
19703 of repository pages accessed with a fixed SHA1.
19704
19705 La valeur par défaut est @samp{-1}.
19706
19707 @end deftypevr
19708
19709 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-dynamic-ttl
19710 Number which specifies the time-to-live, in minutes, for the cached version
19711 of repository pages accessed without a fixed SHA1.
19712
19713 La valeur par défaut est @samp{5}.
19714
19715 @end deftypevr
19716
19717 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-repo-ttl
19718 Number which specifies the time-to-live, in minutes, for the cached version
19719 of the repository summary page.
19720
19721 La valeur par défaut est @samp{5}.
19722
19723 @end deftypevr
19724
19725 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-root-ttl
19726 Number which specifies the time-to-live, in minutes, for the cached version
19727 of the repository index page.
19728
19729 La valeur par défaut est @samp{5}.
19730
19731 @end deftypevr
19732
19733 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-scanrc-ttl
19734 Number which specifies the time-to-live, in minutes, for the result of
19735 scanning a path for Git repositories.
19736
19737 La valeur par défaut est @samp{15}.
19738
19739 @end deftypevr
19740
19741 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-about-ttl
19742 Number which specifies the time-to-live, in minutes, for the cached version
19743 of the repository about page.
19744
19745 La valeur par défaut est @samp{15}.
19746
19747 @end deftypevr
19748
19749 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-snapshot-ttl
19750 Number which specifies the time-to-live, in minutes, for the cached version
19751 of snapshots.
19752
19753 La valeur par défaut est @samp{5}.
19754
19755 @end deftypevr
19756
19757 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-size
19758 The maximum number of entries in the cgit cache. When set to @samp{0},
19759 caching is disabled.
19760
19761 La valeur par défaut est @samp{0}.
19762
19763 @end deftypevr
19764
19765 @deftypevr {paramètre de @code{cgit-configuration}} boolean case-sensitive-sort?
19766 Sort items in the repo list case sensitively.
19767
19768 La valeur par défaut est @samp{#t}.
19769
19770 @end deftypevr
19771
19772 @deftypevr {paramètre de @code{cgit-configuration}} list clone-prefix
19773 List of common prefixes which, when combined with a repository URL,
19774 generates valid clone URLs for the repository.
19775
19776 La valeur par défaut est @samp{()}.
19777
19778 @end deftypevr
19779
19780 @deftypevr {paramètre de @code{cgit-configuration}} list clone-url
19781 List of @code{clone-url} templates.
19782
19783 La valeur par défaut est @samp{()}.
19784
19785 @end deftypevr
19786
19787 @deftypevr {paramètre de @code{cgit-configuration}} file-object commit-filter
19788 Command which will be invoked to format commit messages.
19789
19790 La valeur par défaut est @samp{""}.
19791
19792 @end deftypevr
19793
19794 @deftypevr {paramètre de @code{cgit-configuration}} string commit-sort
19795 Flag which, when set to @samp{date}, enables strict date ordering in the
19796 commit log, and when set to @samp{topo} enables strict topological ordering.
19797
19798 La valeur par défaut est @samp{"git log"}.
19799
19800 @end deftypevr
19801
19802 @deftypevr {paramètre de @code{cgit-configuration}} file-object css
19803 URL which specifies the css document to include in all cgit pages.
19804
19805 La valeur par défaut est @samp{"/share/cgit/cgit.css"}.
19806
19807 @end deftypevr
19808
19809 @deftypevr {paramètre de @code{cgit-configuration}} file-object email-filter
19810 Specifies a command which will be invoked to format names and email address
19811 of committers, authors, and taggers, as represented in various places
19812 throughout the cgit interface.
19813
19814 La valeur par défaut est @samp{""}.
19815
19816 @end deftypevr
19817
19818 @deftypevr {paramètre de @code{cgit-configuration}} boolean embedded?
19819 Flag which, when set to @samp{#t}, will make cgit generate a HTML fragment
19820 suitable for embedding in other HTML pages.
19821
19822 La valeur par défaut est @samp{#f}.
19823
19824 @end deftypevr
19825
19826 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-commit-graph?
19827 Flag which, when set to @samp{#t}, will make cgit print an ASCII-art commit
19828 history graph to the left of the commit messages in the repository log page.
19829
19830 La valeur par défaut est @samp{#f}.
19831
19832 @end deftypevr
19833
19834 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-filter-overrides?
19835 Flag which, when set to @samp{#t}, allows all filter settings to be
19836 overridden in repository-specific cgitrc files.
19837
19838 La valeur par défaut est @samp{#f}.
19839
19840 @end deftypevr
19841
19842 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-follow-links?
19843 Flag which, when set to @samp{#t}, allows users to follow a file in the log
19844 view.
19845
19846 La valeur par défaut est @samp{#f}.
19847
19848 @end deftypevr
19849
19850 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-http-clone?
19851 If set to @samp{#t}, cgit will act as an dumb HTTP endpoint for Git clones.
19852
19853 La valeur par défaut est @samp{#t}.
19854
19855 @end deftypevr
19856
19857 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-index-links?
19858 Flag which, when set to @samp{#t}, will make cgit generate extra links
19859 "summary", "commit", "tree" for each repo in the repository index.
19860
19861 La valeur par défaut est @samp{#f}.
19862
19863 @end deftypevr
19864
19865 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-index-owner?
19866 Flag which, when set to @samp{#t}, will make cgit display the owner of each
19867 repo in the repository index.
19868
19869 La valeur par défaut est @samp{#t}.
19870
19871 @end deftypevr
19872
19873 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-log-filecount?
19874 Flag which, when set to @samp{#t}, will make cgit print the number of
19875 modified files for each commit on the repository log page.
19876
19877 La valeur par défaut est @samp{#f}.
19878
19879 @end deftypevr
19880
19881 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-log-linecount?
19882 Flag which, when set to @samp{#t}, will make cgit print the number of added
19883 and removed lines for each commit on the repository log page.
19884
19885 La valeur par défaut est @samp{#f}.
19886
19887 @end deftypevr
19888
19889 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-remote-branches?
19890 Flag which, when set to @code{#t}, will make cgit display remote branches in
19891 the summary and refs views.
19892
19893 La valeur par défaut est @samp{#f}.
19894
19895 @end deftypevr
19896
19897 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-subject-links?
19898 Flag which, when set to @code{1}, will make cgit use the subject of the
19899 parent commit as link text when generating links to parent commits in commit
19900 view.
19901
19902 La valeur par défaut est @samp{#f}.
19903
19904 @end deftypevr
19905
19906 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-html-serving?
19907 Flag which, when set to @samp{#t}, will make cgit use the subject of the
19908 parent commit as link text when generating links to parent commits in commit
19909 view.
19910
19911 La valeur par défaut est @samp{#f}.
19912
19913 @end deftypevr
19914
19915 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-tree-linenumbers?
19916 Flag which, when set to @samp{#t}, will make cgit generate linenumber links
19917 for plaintext blobs printed in the tree view.
19918
19919 La valeur par défaut est @samp{#t}.
19920
19921 @end deftypevr
19922
19923 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-git-config?
19924 Flag which, when set to @samp{#f}, will allow cgit to use Git config to set
19925 any repo specific settings.
19926
19927 La valeur par défaut est @samp{#f}.
19928
19929 @end deftypevr
19930
19931 @deftypevr {paramètre de @code{cgit-configuration}} file-object favicon
19932 URL used as link to a shortcut icon for cgit.
19933
19934 La valeur par défaut est @samp{"/favicon.ico"}.
19935
19936 @end deftypevr
19937
19938 @deftypevr {paramètre de @code{cgit-configuration}} string footer
19939 The content of the file specified with this option will be included verbatim
19940 at the bottom of all pages (i.e. it replaces the standard "generated by..."
19941 message).
19942
19943 La valeur par défaut est @samp{""}.
19944
19945 @end deftypevr
19946
19947 @deftypevr {paramètre de @code{cgit-configuration}} string head-include
19948 The content of the file specified with this option will be included verbatim
19949 in the HTML HEAD section on all pages.
19950
19951 La valeur par défaut est @samp{""}.
19952
19953 @end deftypevr
19954
19955 @deftypevr {paramètre de @code{cgit-configuration}} string header
19956 The content of the file specified with this option will be included verbatim
19957 at the top of all pages.
19958
19959 La valeur par défaut est @samp{""}.
19960
19961 @end deftypevr
19962
19963 @deftypevr {paramètre de @code{cgit-configuration}} file-object include
19964 Name of a configfile to include before the rest of the current config- file
19965 is parsed.
19966
19967 La valeur par défaut est @samp{""}.
19968
19969 @end deftypevr
19970
19971 @deftypevr {paramètre de @code{cgit-configuration}} string index-header
19972 The content of the file specified with this option will be included verbatim
19973 above the repository index.
19974
19975 La valeur par défaut est @samp{""}.
19976
19977 @end deftypevr
19978
19979 @deftypevr {paramètre de @code{cgit-configuration}} string index-info
19980 The content of the file specified with this option will be included verbatim
19981 below the heading on the repository index page.
19982
19983 La valeur par défaut est @samp{""}.
19984
19985 @end deftypevr
19986
19987 @deftypevr {paramètre de @code{cgit-configuration}} boolean local-time?
19988 Flag which, if set to @samp{#t}, makes cgit print commit and tag times in
19989 the servers timezone.
19990
19991 La valeur par défaut est @samp{#f}.
19992
19993 @end deftypevr
19994
19995 @deftypevr {paramètre de @code{cgit-configuration}} file-object logo
19996 URL which specifies the source of an image which will be used as a logo on
19997 all cgit pages.
19998
19999 La valeur par défaut est @samp{"/share/cgit/cgit.png"}.
20000
20001 @end deftypevr
20002
20003 @deftypevr {paramètre de @code{cgit-configuration}} string logo-link
20004 URL loaded when clicking on the cgit logo image.
20005
20006 La valeur par défaut est @samp{""}.
20007
20008 @end deftypevr
20009
20010 @deftypevr {paramètre de @code{cgit-configuration}} file-object owner-filter
20011 Command which will be invoked to format the Owner column of the main page.
20012
20013 La valeur par défaut est @samp{""}.
20014
20015 @end deftypevr
20016
20017 @deftypevr {paramètre de @code{cgit-configuration}} integer max-atom-items
20018 Number of items to display in atom feeds view.
20019
20020 La valeur par défaut est @samp{10}.
20021
20022 @end deftypevr
20023
20024 @deftypevr {paramètre de @code{cgit-configuration}} integer max-commit-count
20025 Number of entries to list per page in "log" view.
20026
20027 La valeur par défaut est @samp{50}.
20028
20029 @end deftypevr
20030
20031 @deftypevr {paramètre de @code{cgit-configuration}} integer max-message-length
20032 Number of commit message characters to display in "log" view.
20033
20034 La valeur par défaut est @samp{80}.
20035
20036 @end deftypevr
20037
20038 @deftypevr {paramètre de @code{cgit-configuration}} integer max-repo-count
20039 Specifies the number of entries to list per page on the repository index
20040 page.
20041
20042 La valeur par défaut est @samp{50}.
20043
20044 @end deftypevr
20045
20046 @deftypevr {paramètre de @code{cgit-configuration}} integer max-repodesc-length
20047 Specifies the maximum number of repo description characters to display on
20048 the repository index page.
20049
20050 La valeur par défaut est @samp{80}.
20051
20052 @end deftypevr
20053
20054 @deftypevr {paramètre de @code{cgit-configuration}} integer max-blob-size
20055 Specifies the maximum size of a blob to display HTML for in KBytes.
20056
20057 La valeur par défaut est @samp{0}.
20058
20059 @end deftypevr
20060
20061 @deftypevr {paramètre de @code{cgit-configuration}} string max-stats
20062 Maximum statistics period. Valid values are @samp{week},@samp{month},
20063 @samp{quarter} and @samp{year}.
20064
20065 La valeur par défaut est @samp{""}.
20066
20067 @end deftypevr
20068
20069 @deftypevr {paramètre de @code{cgit-configuration}} mimetype-alist mimetype
20070 Mimetype for the specified filename extension.
20071
20072 La valeur par défaut est @samp{((gif "image/gif") (html "text/html") (jpg
20073 "image/jpeg") (jpeg "image/jpeg") (pdf "application/pdf") (png "image/png")
20074 (svg "image/svg+xml"))}.
20075
20076 @end deftypevr
20077
20078 @deftypevr {paramètre de @code{cgit-configuration}} file-object mimetype-file
20079 Specifies the file to use for automatic mimetype lookup.
20080
20081 La valeur par défaut est @samp{""}.
20082
20083 @end deftypevr
20084
20085 @deftypevr {paramètre de @code{cgit-configuration}} string module-link
20086 Text which will be used as the formatstring for a hyperlink when a submodule
20087 is printed in a directory listing.
20088
20089 La valeur par défaut est @samp{""}.
20090
20091 @end deftypevr
20092
20093 @deftypevr {paramètre de @code{cgit-configuration}} boolean nocache?
20094 If set to the value @samp{#t} caching will be disabled.
20095
20096 La valeur par défaut est @samp{#f}.
20097
20098 @end deftypevr
20099
20100 @deftypevr {paramètre de @code{cgit-configuration}} boolean noplainemail?
20101 If set to @samp{#t} showing full author email addresses will be disabled.
20102
20103 La valeur par défaut est @samp{#f}.
20104
20105 @end deftypevr
20106
20107 @deftypevr {paramètre de @code{cgit-configuration}} boolean noheader?
20108 Flag which, when set to @samp{#t}, will make cgit omit the standard header
20109 on all pages.
20110
20111 La valeur par défaut est @samp{#f}.
20112
20113 @end deftypevr
20114
20115 @deftypevr {paramètre de @code{cgit-configuration}} project-list project-list
20116 A list of subdirectories inside of @code{repository-directory}, relative to
20117 it, that should loaded as Git repositories. An empty list means that all
20118 subdirectories will be loaded.
20119
20120 La valeur par défaut est @samp{()}.
20121
20122 @end deftypevr
20123
20124 @deftypevr {paramètre de @code{cgit-configuration}} file-object readme
20125 Text which will be used as default value for @code{cgit-repo-readme}.
20126
20127 La valeur par défaut est @samp{""}.
20128
20129 @end deftypevr
20130
20131 @deftypevr {paramètre de @code{cgit-configuration}} boolean remove-suffix?
20132 If set to @code{#t} and @code{repository-directory} is enabled, if any
20133 repositories are found with a suffix of @code{.git}, this suffix will be
20134 removed for the URL and name.
20135
20136 La valeur par défaut est @samp{#f}.
20137
20138 @end deftypevr
20139
20140 @deftypevr {paramètre de @code{cgit-configuration}} integer renamelimit
20141 Maximum number of files to consider when detecting renames.
20142
20143 La valeur par défaut est @samp{-1}.
20144
20145 @end deftypevr
20146
20147 @deftypevr {paramètre de @code{cgit-configuration}} string repository-sort
20148 The way in which repositories in each section are sorted.
20149
20150 La valeur par défaut est @samp{""}.
20151
20152 @end deftypevr
20153
20154 @deftypevr {paramètre de @code{cgit-configuration}} robots-list robots
20155 Text used as content for the @code{robots} meta-tag.
20156
20157 La valeur par défaut est @samp{("noindex" "nofollow")}.
20158
20159 @end deftypevr
20160
20161 @deftypevr {paramètre de @code{cgit-configuration}} string root-desc
20162 Text printed below the heading on the repository index page.
20163
20164 La valeur par défaut est @samp{"a fast webinterface for the git dscm"}.
20165
20166 @end deftypevr
20167
20168 @deftypevr {paramètre de @code{cgit-configuration}} string root-readme
20169 The content of the file specified with this option will be included verbatim
20170 below thef "about" link on the repository index page.
20171
20172 La valeur par défaut est @samp{""}.
20173
20174 @end deftypevr
20175
20176 @deftypevr {paramètre de @code{cgit-configuration}} string root-title
20177 Text printed as heading on the repository index page.
20178
20179 La valeur par défaut est @samp{""}.
20180
20181 @end deftypevr
20182
20183 @deftypevr {paramètre de @code{cgit-configuration}} boolean scan-hidden-path
20184 If set to @samp{#t} and repository-directory is enabled,
20185 repository-directory will recurse into directories whose name starts with a
20186 period. Otherwise, repository-directory will stay away from such
20187 directories, considered as "hidden". Note that this does not apply to the
20188 ".git" directory in non-bare repos.
20189
20190 La valeur par défaut est @samp{#f}.
20191
20192 @end deftypevr
20193
20194 @deftypevr {paramètre de @code{cgit-configuration}} list snapshots
20195 Text which specifies the default set of snapshot formats that cgit generates
20196 links for.
20197
20198 La valeur par défaut est @samp{()}.
20199
20200 @end deftypevr
20201
20202 @deftypevr {paramètre de @code{cgit-configuration}} repository-directory repository-directory
20203 Name of the directory to scan for repositories (represents
20204 @code{scan-path}).
20205
20206 La valeur par défaut est @samp{"/srv/git"}.
20207
20208 @end deftypevr
20209
20210 @deftypevr {paramètre de @code{cgit-configuration}} string section
20211 The name of the current repository section - all repositories defined after
20212 this option will inherit the current section name.
20213
20214 La valeur par défaut est @samp{""}.
20215
20216 @end deftypevr
20217
20218 @deftypevr {paramètre de @code{cgit-configuration}} string section-sort
20219 Flag which, when set to @samp{1}, will sort the sections on the repository
20220 listing by name.
20221
20222 La valeur par défaut est @samp{""}.
20223
20224 @end deftypevr
20225
20226 @deftypevr {paramètre de @code{cgit-configuration}} integer section-from-path
20227 A number which, if defined prior to repository-directory, specifies how many
20228 path elements from each repo path to use as a default section name.
20229
20230 La valeur par défaut est @samp{0}.
20231
20232 @end deftypevr
20233
20234 @deftypevr {paramètre de @code{cgit-configuration}} boolean side-by-side-diffs?
20235 If set to @samp{#t} shows side-by-side diffs instead of unidiffs per
20236 default.
20237
20238 La valeur par défaut est @samp{#f}.
20239
20240 @end deftypevr
20241
20242 @deftypevr {paramètre de @code{cgit-configuration}} file-object source-filter
20243 Specifies a command which will be invoked to format plaintext blobs in the
20244 tree view.
20245
20246 La valeur par défaut est @samp{""}.
20247
20248 @end deftypevr
20249
20250 @deftypevr {paramètre de @code{cgit-configuration}} integer summary-branches
20251 Specifies the number of branches to display in the repository "summary"
20252 view.
20253
20254 La valeur par défaut est @samp{10}.
20255
20256 @end deftypevr
20257
20258 @deftypevr {paramètre de @code{cgit-configuration}} integer summary-log
20259 Specifies the number of log entries to display in the repository "summary"
20260 view.
20261
20262 La valeur par défaut est @samp{10}.
20263
20264 @end deftypevr
20265
20266 @deftypevr {paramètre de @code{cgit-configuration}} integer summary-tags
20267 Specifies the number of tags to display in the repository "summary" view.
20268
20269 La valeur par défaut est @samp{10}.
20270
20271 @end deftypevr
20272
20273 @deftypevr {paramètre de @code{cgit-configuration}} string strict-export
20274 Filename which, if specified, needs to be present within the repository for
20275 cgit to allow access to that repository.
20276
20277 La valeur par défaut est @samp{""}.
20278
20279 @end deftypevr
20280
20281 @deftypevr {paramètre de @code{cgit-configuration}} string virtual-root
20282 URL which, if specified, will be used as root for all cgit links.
20283
20284 La valeur par défaut est @samp{"/"}.
20285
20286 @end deftypevr
20287
20288 @deftypevr {paramètre de @code{cgit-configuration}} repository-cgit-configuration-list repositories
20289 A list of @dfn{cgit-repo} records to use with config.
20290
20291 La valeur par défaut est @samp{()}.
20292
20293 Les champs de @code{repository-cgit-configuration} disponibles sont :
20294
20295 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list snapshots
20296 A mask of snapshot formats for this repo that cgit generates links for,
20297 restricted by the global @code{snapshots} setting.
20298
20299 La valeur par défaut est @samp{()}.
20300
20301 @end deftypevr
20302
20303 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object source-filter
20304 Override the default @code{source-filter}.
20305
20306 La valeur par défaut est @samp{""}.
20307
20308 @end deftypevr
20309
20310 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string url
20311 The relative URL used to access the repository.
20312
20313 La valeur par défaut est @samp{""}.
20314
20315 @end deftypevr
20316
20317 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object about-filter
20318 Override the default @code{about-filter}.
20319
20320 La valeur par défaut est @samp{""}.
20321
20322 @end deftypevr
20323
20324 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string branch-sort
20325 Flag which, when set to @samp{age}, enables date ordering in the branch ref
20326 list, and when set to @samp{name} enables ordering by branch name.
20327
20328 La valeur par défaut est @samp{""}.
20329
20330 @end deftypevr
20331
20332 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list clone-url
20333 A list of URLs which can be used to clone repo.
20334
20335 La valeur par défaut est @samp{()}.
20336
20337 @end deftypevr
20338
20339 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object commit-filter
20340 Override the default @code{commit-filter}.
20341
20342 La valeur par défaut est @samp{""}.
20343
20344 @end deftypevr
20345
20346 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string commit-sort
20347 Flag which, when set to @samp{date}, enables strict date ordering in the
20348 commit log, and when set to @samp{topo} enables strict topological ordering.
20349
20350 La valeur par défaut est @samp{""}.
20351
20352 @end deftypevr
20353
20354 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string defbranch
20355 The name of the default branch for this repository. If no such branch
20356 exists in the repository, the first branch name (when sorted) is used as
20357 default instead. By default branch pointed to by HEAD, or "master" if there
20358 is no suitable HEAD.
20359
20360 La valeur par défaut est @samp{""}.
20361
20362 @end deftypevr
20363
20364 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string desc
20365 The value to show as repository description.
20366
20367 La valeur par défaut est @samp{""}.
20368
20369 @end deftypevr
20370
20371 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string homepage
20372 The value to show as repository homepage.
20373
20374 La valeur par défaut est @samp{""}.
20375
20376 @end deftypevr
20377
20378 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object email-filter
20379 Override the default @code{email-filter}.
20380
20381 La valeur par défaut est @samp{""}.
20382
20383 @end deftypevr
20384
20385 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-commit-graph?
20386 A flag which can be used to disable the global setting
20387 @code{enable-commit-graph?}.
20388
20389 La valeur par défaut est @samp{disabled}.
20390
20391 @end deftypevr
20392
20393 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-log-filecount?
20394 A flag which can be used to disable the global setting
20395 @code{enable-log-filecount?}.
20396
20397 La valeur par défaut est @samp{disabled}.
20398
20399 @end deftypevr
20400
20401 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-log-linecount?
20402 A flag which can be used to disable the global setting
20403 @code{enable-log-linecount?}.
20404
20405 La valeur par défaut est @samp{disabled}.
20406
20407 @end deftypevr
20408
20409 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-remote-branches?
20410 Flag which, when set to @code{#t}, will make cgit display remote branches in
20411 the summary and refs views.
20412
20413 La valeur par défaut est @samp{disabled}.
20414
20415 @end deftypevr
20416
20417 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-subject-links?
20418 A flag which can be used to override the global setting
20419 @code{enable-subject-links?}.
20420
20421 La valeur par défaut est @samp{disabled}.
20422
20423 @end deftypevr
20424
20425 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-html-serving?
20426 A flag which can be used to override the global setting
20427 @code{enable-html-serving?}.
20428
20429 La valeur par défaut est @samp{disabled}.
20430
20431 @end deftypevr
20432
20433 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-boolean hide?
20434 Flag which, when set to @code{#t}, hides the repository from the repository
20435 index.
20436
20437 La valeur par défaut est @samp{#f}.
20438
20439 @end deftypevr
20440
20441 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-boolean ignore?
20442 Flag which, when set to @samp{#t}, ignores the repository.
20443
20444 La valeur par défaut est @samp{#f}.
20445
20446 @end deftypevr
20447
20448 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object logo
20449 URL which specifies the source of an image which will be used as a logo on
20450 this repo’s pages.
20451
20452 La valeur par défaut est @samp{""}.
20453
20454 @end deftypevr
20455
20456 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string logo-link
20457 URL loaded when clicking on the cgit logo image.
20458
20459 La valeur par défaut est @samp{""}.
20460
20461 @end deftypevr
20462
20463 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object owner-filter
20464 Override the default @code{owner-filter}.
20465
20466 La valeur par défaut est @samp{""}.
20467
20468 @end deftypevr
20469
20470 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string module-link
20471 Text which will be used as the formatstring for a hyperlink when a submodule
20472 is printed in a directory listing. The arguments for the formatstring are
20473 the path and SHA1 of the submodule commit.
20474
20475 La valeur par défaut est @samp{""}.
20476
20477 @end deftypevr
20478
20479 @deftypevr {paramètre de @code{repository-cgit-configuration}} module-link-path module-link-path
20480 Text which will be used as the formatstring for a hyperlink when a submodule
20481 with the specified subdirectory path is printed in a directory listing.
20482
20483 La valeur par défaut est @samp{()}.
20484
20485 @end deftypevr
20486
20487 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string max-stats
20488 Override the default maximum statistics period.
20489
20490 La valeur par défaut est @samp{""}.
20491
20492 @end deftypevr
20493
20494 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string name
20495 The value to show as repository name.
20496
20497 La valeur par défaut est @samp{""}.
20498
20499 @end deftypevr
20500
20501 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string owner
20502 A value used to identify the owner of the repository.
20503
20504 La valeur par défaut est @samp{""}.
20505
20506 @end deftypevr
20507
20508 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string path
20509 An absolute path to the repository directory.
20510
20511 La valeur par défaut est @samp{""}.
20512
20513 @end deftypevr
20514
20515 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string readme
20516 A path (relative to repo) which specifies a file to include verbatim as the
20517 "About" page for this repo.
20518
20519 La valeur par défaut est @samp{""}.
20520
20521 @end deftypevr
20522
20523 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string section
20524 The name of the current repository section - all repositories defined after
20525 this option will inherit the current section name.
20526
20527 La valeur par défaut est @samp{""}.
20528
20529 @end deftypevr
20530
20531 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list extra-options
20532 Extra options will be appended to cgitrc file.
20533
20534 La valeur par défaut est @samp{()}.
20535
20536 @end deftypevr
20537
20538 @end deftypevr
20539
20540 @deftypevr {paramètre de @code{cgit-configuration}} list extra-options
20541 Extra options will be appended to cgitrc file.
20542
20543 La valeur par défaut est @samp{()}.
20544
20545 @end deftypevr
20546
20547
20548 @c %end of fragment
20549
20550 However, it could be that you just want to get a @code{cgitrc} up and
20551 running. In that case, you can pass an @code{opaque-cgit-configuration} as
20552 a record to @code{cgit-service-type}. As its name indicates, an opaque
20553 configuration does not have easy reflective capabilities.
20554
20555 Les champs de @code{opaque-cgit-configuration} disponibles sont :
20556
20557 @deftypevr {paramètre de @code{opaque-cgit-configuration}} package cgit
20558 The cgit package.
20559 @end deftypevr
20560
20561 @deftypevr {paramètre de @code{opaque-cgit-configuration}} string string
20562 The contents of the @code{cgitrc}, as a string.
20563 @end deftypevr
20564
20565 For example, if your @code{cgitrc} is just the empty string, you could
20566 instantiate a cgit service like this:
20567
20568 @example
20569 (service cgit-service-type
20570 (opaque-cgit-configuration
20571 (cgitrc "")))
20572 @end example
20573
20574
20575 @node Services de jeu
20576 @subsubsection Services de jeu
20577
20578 @subsubheading The Battle for Wesnoth Service
20579 @cindex wesnothd
20580 @uref{https://wesnoth.org, The Battle for Wesnoth} is a fantasy, turn based
20581 tactical strategy game, with several single player campaigns, and
20582 multiplayer games (both networked and local).
20583
20584 @defvar {Variable Scheme} wesnothd-service-type
20585 Service type for the wesnothd service. Its value must be a
20586 @code{wesnothd-configuration} object. To run wesnothd in the default
20587 configuration, instantiate it as:
20588
20589 @example
20590 (service wesnothd-service-type)
20591 @end example
20592 @end defvar
20593
20594 @deftp {Type de données} wesnothd-configuration
20595 Data type representing the configuration of @command{wesnothd}.
20596
20597 @table @asis
20598 @item @code{package} (par défaut : @code{wesnoth-server})
20599 The wesnoth server package to use.
20600
20601 @item @code{port} (par défaut : @code{15000})
20602 The port to bind the server to.
20603 @end table
20604 @end deftp
20605
20606 @node Services divers
20607 @subsubsection Services divers
20608
20609 @cindex fingerprint
20610 @subsubheading Fingerprint Service
20611
20612 The @code{(gnu services fingerprint)} module provides a DBus service to read
20613 and identify fingerprints via a fingerprint sensor.
20614
20615 @defvr {Scheme Variable} fprintd-service-type
20616 The service type for @command{fprintd}, which provides the fingerprint
20617 reading capability.
20618
20619 @example
20620 (service fprintd-service-type)
20621 @end example
20622 @end defvr
20623
20624 @cindex sysctl
20625 @subsubheading System Control Service
20626
20627 The @code{(gnu services sysctl)} provides a service to configure kernel
20628 parameters at boot.
20629
20630 @defvr {Variable Scheme} sysctl-service-type
20631 The service type for @command{sysctl}, which modifies kernel parameters
20632 under @file{/proc/sys/}. To enable IPv4 forwarding, it can be instantiated
20633 as:
20634
20635 @example
20636 (service sysctl-service-type
20637 (sysctl-configuration
20638 (settings '(("net.ipv4.ip_forward" . "1")))))
20639 @end example
20640 @end defvr
20641
20642 @deftp {Type de données} sysctl-configuration
20643 The data type representing the configuration of @command{sysctl}.
20644
20645 @table @asis
20646 @item @code{sysctl} (par défaut : @code{(file-append procps "/sbin/sysctl"})
20647 The @command{sysctl} executable to use.
20648
20649 @item @code{settings} (par défaut : @code{'()})
20650 An association list specifies kernel parameters and their values.
20651 @end table
20652 @end deftp
20653
20654 @cindex pcscd
20655 @subsubheading PC/SC Smart Card Daemon Service
20656
20657 The @code{(gnu services security-token)} module provides the following
20658 service to run @command{pcscd}, the PC/SC Smart Card Daemon.
20659 @command{pcscd} is the daemon program for pcsc-lite and the MuscleCard
20660 framework. It is a resource manager that coordinates communications with
20661 smart card readers, smart cards and cryptographic tokens that are connected
20662 to the system.
20663
20664 @defvr {Scheme Variable} pcscd-service-type
20665 Service type for the @command{pcscd} service. Its value must be a
20666 @code{pcscd-configuration} object. To run pcscd in the default
20667 configuration, instantiate it as:
20668
20669 @example
20670 (service pcscd-service-type)
20671 @end example
20672 @end defvr
20673
20674 @deftp {Data Type} pcscd-configuration
20675 The data type representing the configuration of @command{pcscd}.
20676
20677 @table @asis
20678 @item @code{pcsc-lite} (default: @code{pcsc-lite})
20679 The pcsc-lite package that provides pcscd.
20680 @item @code{usb-drivers} (default: @code{(list ccid)})
20681 List of packages that provide USB drivers to pcscd. Drivers are expected to
20682 be under @file{pcsc/drivers} in the store directory of the package.
20683 @end table
20684 @end deftp
20685
20686 @cindex lirc
20687 @subsubheading Lirc Service
20688
20689 The @code{(gnu services lirc)} module provides the following service.
20690
20691 @deffn {Procédure Scheme} lirc-service [#:lirc lirc] @
20692 [#:device #f] [#:driver #f] [#:config-file #f] @ [#:extra-options '()]
20693 Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
20694 decodes infrared signals from remote controls.
20695
20696 Optionally, @var{device}, @var{driver} and @var{config-file} (configuration
20697 file name) may be specified. See @command{lircd} manual for details.
20698
20699 Finally, @var{extra-options} is a list of additional command-line options
20700 passed to @command{lircd}.
20701 @end deffn
20702
20703 @cindex spice
20704 @subsubheading Spice Service
20705
20706 The @code{(gnu services spice)} module provides the following service.
20707
20708 @deffn {Procédure Scheme} spice-vdagent-service [#:spice-vdagent]
20709 Returns a service that runs @url{http://www.spice-space.org,VDAGENT}, a
20710 daemon that enables sharing the clipboard with a vm and setting the guest
20711 display resolution when the graphical console window resizes.
20712 @end deffn
20713
20714 @subsubsection Dictionary Services
20715 @cindex dictionary
20716 The @code{(gnu services dict)} module provides the following service:
20717
20718 @deffn {Procédure Scheme} dicod-service [#:config (dicod-configuration)]
20719 Return a service that runs the @command{dicod} daemon, an implementation of
20720 DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
20721
20722 The optional @var{config} argument specifies the configuration for
20723 @command{dicod}, which should be a @code{<dicod-configuration>} object, by
20724 default it serves the GNU Collaborative International Dictonary of English.
20725
20726 You can add @command{open localhost} to your @file{~/.dico} file to make
20727 @code{localhost} the default server for @command{dico} client
20728 (@pxref{Initialization File,,, dico, GNU Dico Manual}).
20729 @end deffn
20730
20731 @deftp {Type de données} dicod-configuration
20732 Data type representing the configuration of dicod.
20733
20734 @table @asis
20735 @item @code{dico} (par défaut : @var{dico})
20736 Package object of the GNU Dico dictionary server.
20737
20738 @item @code{interfaces} (par défaut : @var{'("localhost")})
20739 This is the list of IP addresses and ports and possibly socket file names to
20740 listen to (@pxref{Server Settings, @code{listen} directive,, dico, GNU Dico
20741 Manual}).
20742
20743 @item @code{handlers} (par défaut : @var{'()})
20744 List of @code{<dicod-handler>} objects denoting handlers (module instances).
20745
20746 @item @code{databases} (par défaut : @var{(list %dicod-database:gcide)})
20747 List of @code{<dicod-database>} objects denoting dictionaries to be served.
20748 @end table
20749 @end deftp
20750
20751 @deftp {Type de données} dicod-handler
20752 Data type representing a dictionary handler (module instance).
20753
20754 @table @asis
20755 @item @code{name}
20756 Name of the handler (module instance).
20757
20758 @item @code{module} (par défaut : @var{#f})
20759 Name of the dicod module of the handler (instance). If it is @code{#f}, the
20760 module has the same name as the handler. (@pxref{Modules,,, dico, GNU Dico
20761 Manual}).
20762
20763 @item @code{options}
20764 List of strings or gexps representing the arguments for the module handler
20765 @end table
20766 @end deftp
20767
20768 @deftp {Type de données} dicod-database
20769 Data type representing a dictionary database.
20770
20771 @table @asis
20772 @item @code{name}
20773 Name of the database, will be used in DICT commands.
20774
20775 @item @code{handler}
20776 Name of the dicod handler (module instance) used by this database
20777 (@pxref{Handlers,,, dico, GNU Dico Manual}).
20778
20779 @item @code{complex?} (par défaut : @var{#f})
20780 Whether the database configuration complex. The complex configuration will
20781 need a corresponding @code{<dicod-handler>} object, otherwise not.
20782
20783 @item @code{options}
20784 List of strings or gexps representing the arguments for the database
20785 (@pxref{Databases,,, dico, GNU Dico Manual}).
20786 @end table
20787 @end deftp
20788
20789 @defvr {Variable Scheme} %dicod-database:gcide
20790 A @code{<dicod-database>} object serving the GNU Collaborative International
20791 Dictionary of English using the @code{gcide} package.
20792 @end defvr
20793
20794 The following is an example @code{dicod-service} configuration.
20795
20796 @example
20797 (dicod-service #:config
20798 (dicod-configuration
20799 (handlers (list (dicod-handler
20800 (name "wordnet")
20801 (module "dictorg")
20802 (options
20803 (list #~(string-append "dbdir=" #$wordnet))))))
20804 (databases (list (dicod-database
20805 (name "wordnet")
20806 (complex? #t)
20807 (handler "wordnet")
20808 (options '("database=wn")))
20809 %dicod-database:gcide))))
20810 @end example
20811
20812 @node Programmes setuid
20813 @subsection Programmes setuid
20814
20815 @cindex setuid programs
20816 Some programs need to run with ``root'' privileges, even when they are
20817 launched by unprivileged users. A notorious example is the @command{passwd}
20818 program, which users can run to change their password, and which needs to
20819 access the @file{/etc/passwd} and @file{/etc/shadow} files---something
20820 normally restricted to root, for obvious security reasons. To address that,
20821 these executables are @dfn{setuid-root}, meaning that they always run with
20822 root privileges (@pxref{How Change Persona,,, libc, The GNU C Library
20823 Reference Manual}, for more info about the setuid mechanism.)
20824
20825 The store itself @emph{cannot} contain setuid programs: that would be a
20826 security issue since any user on the system can write derivations that
20827 populate the store (@pxref{Le dépôt}). Thus, a different mechanism is
20828 used: instead of changing the setuid bit directly on files that are in the
20829 store, we let the system administrator @emph{declare} which programs should
20830 be setuid root.
20831
20832 The @code{setuid-programs} field of an @code{operating-system} declaration
20833 contains a list of G-expressions denoting the names of programs to be
20834 setuid-root (@pxref{Utiliser le système de configuration}). For instance, the
20835 @command{passwd} program, which is part of the Shadow package, can be
20836 designated by this G-expression (@pxref{G-Expressions}):
20837
20838 @example
20839 #~(string-append #$shadow "/bin/passwd")
20840 @end example
20841
20842 A default set of setuid programs is defined by the @code{%setuid-programs}
20843 variable of the @code{(gnu system)} module.
20844
20845 @defvr {Variable Scheme} %setuid-programs
20846 A list of G-expressions denoting common programs that are setuid-root.
20847
20848 The list includes commands such as @command{passwd}, @command{ping},
20849 @command{su}, and @command{sudo}.
20850 @end defvr
20851
20852 Under the hood, the actual setuid programs are created in the
20853 @file{/run/setuid-programs} directory at system activation time. The files
20854 in this directory refer to the ``real'' binaries, which are in the store.
20855
20856 @node Certificats X.509
20857 @subsection Certificats X.509
20858
20859 @cindex HTTPS, certificates
20860 @cindex X.509 certificates
20861 @cindex TLS
20862 Web servers available over HTTPS (that is, HTTP over the transport-layer
20863 security mechanism, TLS) send client programs an @dfn{X.509 certificate}
20864 that the client can then use to @emph{authenticate} the server. To do that,
20865 clients verify that the server's certificate is signed by a so-called
20866 @dfn{certificate authority} (CA). But to verify the CA's signature, clients
20867 must have first acquired the CA's certificate.
20868
20869 Web browsers such as GNU@tie{}IceCat include their own set of CA
20870 certificates, such that they are able to verify CA signatures
20871 out-of-the-box.
20872
20873 However, most other programs that can talk HTTPS---@command{wget},
20874 @command{git}, @command{w3m}, etc.---need to be told where CA certificates
20875 can be found.
20876
20877 @cindex @code{nss-certs}
20878 In GuixSD, this is done by adding a package that provides certificates to
20879 the @code{packages} field of the @code{operating-system} declaration
20880 (@pxref{Référence de système d'exploitation}). GuixSD includes one such package,
20881 @code{nss-certs}, which is a set of CA certificates provided as part of
20882 Mozilla's Network Security Services.
20883
20884 Note that it is @emph{not} part of @var{%base-packages}, so you need to
20885 explicitly add it. The @file{/etc/ssl/certs} directory, which is where most
20886 applications and libraries look for certificates by default, points to the
20887 certificates installed globally.
20888
20889 Unprivileged users, including users of Guix on a foreign distro, can also
20890 install their own certificate package in their profile. A number of
20891 environment variables need to be defined so that applications and libraries
20892 know where to find them. Namely, the OpenSSL library honors the
20893 @code{SSL_CERT_DIR} and @code{SSL_CERT_FILE} variables. Some applications
20894 add their own environment variables; for instance, the Git version control
20895 system honors the certificate bundle pointed to by the @code{GIT_SSL_CAINFO}
20896 environment variable. Thus, you would typically run something like:
20897
20898 @example
20899 $ guix package -i nss-certs
20900 $ export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs"
20901 $ export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
20902 $ export GIT_SSL_CAINFO="$SSL_CERT_FILE"
20903 @end example
20904
20905 As another example, R requires the @code{CURL_CA_BUNDLE} environment
20906 variable to point to a certificate bundle, so you would have to run
20907 something like this:
20908
20909 @example
20910 $ guix package -i nss-certs
20911 $ export CURL_CA_BUNDLE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
20912 @end example
20913
20914 For other applications you may want to look up the required environment
20915 variable in the relevant documentation.
20916
20917
20918 @node Name Service Switch
20919 @subsection Name Service Switch
20920
20921 @cindex name service switch
20922 @cindex NSS
20923 The @code{(gnu system nss)} module provides bindings to the configuration
20924 file of the libc @dfn{name service switch} or @dfn{NSS} (@pxref{NSS
20925 Configuration File,,, libc, The GNU C Library Reference Manual}). In a
20926 nutshell, the NSS is a mechanism that allows libc to be extended with new
20927 ``name'' lookup methods for system databases, which includes host names,
20928 service names, user accounts, and more (@pxref{Name Service Switch, System
20929 Databases and Name Service Switch,, libc, The GNU C Library Reference
20930 Manual}).
20931
20932 The NSS configuration specifies, for each system database, which lookup
20933 method is to be used, and how the various methods are chained together---for
20934 instance, under which circumstances NSS should try the next method in the
20935 list. The NSS configuration is given in the @code{name-service-switch}
20936 field of @code{operating-system} declarations (@pxref{Référence de système d'exploitation, @code{name-service-switch}}).
20937
20938 @cindex nss-mdns
20939 @cindex .local, host name lookup
20940 As an example, the declaration below configures the NSS to use the
20941 @uref{http://0pointer.de/lennart/projects/nss-mdns/, @code{nss-mdns}
20942 back-end}, which supports host name lookups over multicast DNS (mDNS) for
20943 host names ending in @code{.local}:
20944
20945 @example
20946 (name-service-switch
20947 (hosts (list %files ;first, check /etc/hosts
20948
20949 ;; If the above did not succeed, try
20950 ;; with 'mdns_minimal'.
20951 (name-service
20952 (name "mdns_minimal")
20953
20954 ;; 'mdns_minimal' is authoritative for
20955 ;; '.local'. When it returns "not found",
20956 ;; no need to try the next methods.
20957 (reaction (lookup-specification
20958 (not-found => return))))
20959
20960 ;; Then fall back to DNS.
20961 (name-service
20962 (name "dns"))
20963
20964 ;; Finally, try with the "full" 'mdns'.
20965 (name-service
20966 (name "mdns")))))
20967 @end example
20968
20969 Do not worry: the @code{%mdns-host-lookup-nss} variable (see below)
20970 contains this configuration, so you will not have to type it if all you want
20971 is to have @code{.local} host lookup working.
20972
20973 Note that, in this case, in addition to setting the
20974 @code{name-service-switch} of the @code{operating-system} declaration, you
20975 also need to use @code{avahi-service} (@pxref{Services réseau,
20976 @code{avahi-service}}), or @var{%desktop-services}, which includes it
20977 (@pxref{Services de bureaux}). Doing this makes @code{nss-mdns} accessible to
20978 the name service cache daemon (@pxref{Services de base, @code{nscd-service}}).
20979
20980 For convenience, the following variables provide typical NSS configurations.
20981
20982 @defvr {Variable Scheme} %default-nss
20983 This is the default name service switch configuration, a
20984 @code{name-service-switch} object.
20985 @end defvr
20986
20987 @defvr {Variable Scheme} %mdns-host-lookup-nss
20988 This is the name service switch configuration with support for host name
20989 lookup over multicast DNS (mDNS) for host names ending in @code{.local}.
20990 @end defvr
20991
20992 The reference for name service switch configuration is given below. It is a
20993 direct mapping of the configuration file format of the C library , so please
20994 refer to the C library manual for more information (@pxref{NSS Configuration
20995 File,,, libc, The GNU C Library Reference Manual}). Compared to the
20996 configuration file format of libc NSS, it has the advantage not only of
20997 adding this warm parenthetic feel that we like, but also static checks: you
20998 will know about syntax errors and typos as soon as you run @command{guix
20999 system}.
21000
21001 @deftp {Type de données} name-service-switch
21002
21003 This is the data type representation the configuration of libc's name
21004 service switch (NSS). Each field below represents one of the supported
21005 system databases.
21006
21007 @table @code
21008 @item aliases
21009 @itemx ethers
21010 @itemx group
21011 @itemx gshadow
21012 @itemx hosts
21013 @itemx initgroups
21014 @itemx netgroup
21015 @itemx networks
21016 @itemx password
21017 @itemx public-key
21018 @itemx rpc
21019 @itemx services
21020 @itemx shadow
21021 The system databases handled by the NSS. Each of these fields must be a
21022 list of @code{<name-service>} objects (see below).
21023 @end table
21024 @end deftp
21025
21026 @deftp {Type de données} name-service
21027
21028 This is the data type representing an actual name service and the associated
21029 lookup action.
21030
21031 @table @code
21032 @item name
21033 A string denoting the name service (@pxref{Services in the NSS
21034 configuration,,, libc, The GNU C Library Reference Manual}).
21035
21036 Note that name services listed here must be visible to nscd. This is
21037 achieved by passing the @code{#:name-services} argument to
21038 @code{nscd-service} the list of packages providing the needed name services
21039 (@pxref{Services de base, @code{nscd-service}}).
21040
21041 @item reaction
21042 An action specified using the @code{lookup-specification} macro
21043 (@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
21044 Reference Manual}). For example:
21045
21046 @example
21047 (lookup-specification (unavailable => continue)
21048 (success => return))
21049 @end example
21050 @end table
21051 @end deftp
21052
21053 @node Disque de RAM initial
21054 @subsection Disque de RAM initial
21055
21056 @cindex initrd
21057 @cindex disque de RAM initial
21058 For bootstrapping purposes, the Linux-Libre kernel is passed an @dfn{initial
21059 RAM disk}, or @dfn{initrd}. An initrd contains a temporary root file system
21060 as well as an initialization script. The latter is responsible for mounting
21061 the real root file system, and for loading any kernel modules that may be
21062 needed to achieve that.
21063
21064 The @code{initrd-modules} field of an @code{operating-system} declaration
21065 allows you to specify Linux-libre kernel modules that must be available in
21066 the initrd. In particular, this is where you would list modules needed to
21067 actually drive the hard disk where your root partition is---although the
21068 default value of @code{initrd-modules} should cover most use cases. For
21069 example, assuming you need the @code{megaraid_sas} module in addition to the
21070 default modules to be able to access your root file system, you would write:
21071
21072 @example
21073 (operating-system
21074 ;; @dots{}
21075 (initrd-modules (cons "megaraid_sas" %base-initrd-modules)))
21076 @end example
21077
21078 @defvr {Variable Scheme} %base-initrd-modules
21079 This is the list of kernel modules included in the initrd by default.
21080 @end defvr
21081
21082 Furthermore, if you need lower-level customization, the @code{initrd} field
21083 of an @code{operating-system} declaration allows you to specify which initrd
21084 you would like to use. The @code{(gnu system linux-initrd)} module provides
21085 three ways to build an initrd: the high-level @code{base-initrd} procedure
21086 and the low-level @code{raw-initrd} and @code{expression->initrd}
21087 procedures.
21088
21089 The @code{base-initrd} procedure is intended to cover most common uses. For
21090 example, if you want to add a bunch of kernel modules to be loaded at boot
21091 time, you can define the @code{initrd} field of the operating system
21092 declaration like this:
21093
21094 @example
21095 (initrd (lambda (file-systems . rest)
21096 ;; Create a standard initrd but set up networking
21097 ;; with the parameters QEMU expects by default.
21098 (apply base-initrd file-systems
21099 #:qemu-networking? #t
21100 rest)))
21101 @end example
21102
21103 The @code{base-initrd} procedure also handles common use cases that involves
21104 using the system as a QEMU guest, or as a ``live'' system with volatile root
21105 file system.
21106
21107 The @code{base-initrd} procedure is built from @code{raw-initrd} procedure.
21108 Unlike @code{base-initrd}, @code{raw-initrd} doesn't do anything high-level,
21109 such as trying to guess which kernel modules and packages should be included
21110 to the initrd. An example use of @code{raw-initrd} is when a user has a
21111 custom Linux kernel configuration and default kernel modules included by
21112 @code{base-initrd} are not available.
21113
21114 The initial RAM disk produced by @code{base-initrd} or @code{raw-initrd}
21115 honors several options passed on the Linux kernel command line (that is,
21116 arguments passed @i{via} the @code{linux} command of GRUB, or the
21117 @code{-append} option of QEMU), notably:
21118
21119 @table @code
21120 @item --load=@var{boot}
21121 Tell the initial RAM disk to load @var{boot}, a file containing a Scheme
21122 program, once it has mounted the root file system.
21123
21124 GuixSD uses this option to yield control to a boot program that runs the
21125 service activation programs and then spawns the GNU@tie{}Shepherd, the
21126 initialization system.
21127
21128 @item --root=@var{root}
21129 Mount @var{root} as the root file system. @var{root} can be a device name
21130 like @code{/dev/sda1}, a file system label, or a file system UUID.
21131
21132 @item --system=@var{système}
21133 Have @file{/run/booted-system} and @file{/run/current-system} point to
21134 @var{system}.
21135
21136 @item modprobe.blacklist=@var{modules}@dots{}
21137 @cindex module, black-listing
21138 @cindex black list, of kernel modules
21139 Instruct the initial RAM disk as well as the @command{modprobe} command
21140 (from the kmod package) to refuse to load @var{modules}. @var{modules} must
21141 be a comma-separated list of module names---e.g., @code{usbkbd,9pnet}.
21142
21143 @item --repl
21144 Start a read-eval-print loop (REPL) from the initial RAM disk before it
21145 tries to load kernel modules and to mount the root file system. Our
21146 marketing team calls it @dfn{boot-to-Guile}. The Schemer in you will love
21147 it. @xref{Using Guile Interactively,,, guile, GNU Guile Reference Manual},
21148 for more information on Guile's REPL.
21149
21150 @end table
21151
21152 Now that you know all the features that initial RAM disks produced by
21153 @code{base-initrd} and @code{raw-initrd} provide, here is how to use it and
21154 customize it further.
21155
21156 @cindex initrd
21157 @cindex disque de RAM initial
21158 @deffn {Monadic Procedure} raw-initrd @var{file-systems} @
21159 [#:linux-modules '()] [#:mapped-devices '()] @ [#:helper-packages '()]
21160 [#:qemu-networking? #f] [#:volatile-root? #f] Return a monadic derivation
21161 that builds a raw initrd. @var{file-systems} is a list of file systems to
21162 be mounted by the initrd, possibly in addition to the root file system
21163 specified on the kernel command line via @code{--root}. @var{linux-modules}
21164 is a list of kernel modules to be loaded at boot time. @var{mapped-devices}
21165 is a list of device mappings to realize before @var{file-systems} are
21166 mounted (@pxref{Périphériques mappés}). @var{helper-packages} is a list of
21167 packages to be copied in the initrd. It may include @code{e2fsck/static} or
21168 other packages needed by the initrd to check the root file system.
21169
21170 When @var{qemu-networking?} is true, set up networking with the standard
21171 QEMU parameters. When @var{virtio?} is true, load additional modules so
21172 that the initrd can be used as a QEMU guest with para-virtualized I/O
21173 drivers.
21174
21175 When @var{volatile-root?} is true, the root file system is writable but any
21176 changes to it are lost.
21177 @end deffn
21178
21179 @deffn {Monadic Procedure} base-initrd @var{file-systems} @
21180 [#:mapped-devices '()] [#:qemu-networking? #f] [#:volatile-root? #f]@
21181 [#:linux-modules '()] Return a monadic derivation that builds a generic
21182 initrd, with kernel modules taken from @var{linux}. @var{file-systems} is a
21183 list of file-systems to be mounted by the initrd, possibly in addition to
21184 the root file system specified on the kernel command line via
21185 @code{--root}. @var{mapped-devices} is a list of device mappings to realize
21186 before @var{file-systems} are mounted.
21187
21188 @var{qemu-networking?} and @var{volatile-root?} behaves as in
21189 @code{raw-initrd}.
21190
21191 The initrd is automatically populated with all the kernel modules necessary
21192 for @var{file-systems} and for the given options. Additional kernel modules
21193 can be listed in @var{linux-modules}. They will be added to the initrd, and
21194 loaded at boot time in the order in which they appear.
21195 @end deffn
21196
21197 Needless to say, the initrds we produce and use embed a statically-linked
21198 Guile, and the initialization program is a Guile program. That gives a lot
21199 of flexibility. The @code{expression->initrd} procedure builds such an
21200 initrd, given the program to run in that initrd.
21201
21202 @deffn {Monadic Procedure} expression->initrd @var{exp} @
21203 [#:guile %guile-static-stripped] [#:name "guile-initrd"] Return a derivation
21204 that builds a Linux initrd (a gzipped cpio archive) containing @var{guile}
21205 and that evaluates @var{exp}, a G-expression, upon booting. All the
21206 derivations referenced by @var{exp} are automatically copied to the initrd.
21207 @end deffn
21208
21209 @node Configuration du chargeur d'amorçage
21210 @subsection Configuration du chargeur d'amorçage
21211
21212 @cindex bootloader
21213 @cindex boot loader
21214
21215 The operating system supports multiple bootloaders. The bootloader is
21216 configured using @code{bootloader-configuration} declaration. All the
21217 fields of this structure are bootloader agnostic except for one field,
21218 @code{bootloader} that indicates the bootloader to be configured and
21219 installed.
21220
21221 Some of the bootloaders do not honor every field of
21222 @code{bootloader-configuration}. For instance, the extlinux bootloader does
21223 not support themes and thus ignores the @code{theme} field.
21224
21225 @deftp {Type de données} bootloader-configuration
21226 The type of a bootloader configuration declaration.
21227
21228 @table @asis
21229
21230 @item @code{bootloader}
21231 @cindex EFI, bootloader
21232 @cindex UEFI, bootloader
21233 @cindex BIOS, bootloader
21234 The bootloader to use, as a @code{bootloader} object. For now
21235 @code{grub-bootloader}, @code{grub-efi-bootloader},
21236 @code{extlinux-bootloader} and @code{u-boot-bootloader} are supported.
21237
21238 @vindex grub-efi-bootloader
21239 @code{grub-efi-bootloader} allows to boot on modern systems using the
21240 @dfn{Unified Extensible Firmware Interface} (UEFI). This is what you should
21241 use if the installation image contains a @file{/sys/firmware/efi} directory
21242 when you boot it on your system.
21243
21244 @vindex grub-bootloader
21245 @code{grub-bootloader} allows you to boot in particular Intel-based machines
21246 in ``legacy'' BIOS mode.
21247
21248 @cindex ARM, bootloaders
21249 @cindex AArch64, bootloaders
21250 Available bootloaders are described in @code{(gnu bootloader @dots{})}
21251 modules. In particular, @code{(gnu bootloader u-boot)} contains definitions
21252 of bootloaders for a wide range of ARM and AArch64 systems, using the
21253 @uref{http://www.denx.de/wiki/U-Boot/, U-Boot bootloader}.
21254
21255 @item @code{target}
21256 This is a string denoting the target onto which to install the bootloader.
21257
21258 The interpretation depends on the bootloader in question. For
21259 @code{grub-bootloader}, for example, it should be a device name understood
21260 by the bootloader @command{installer} command, such as @code{/dev/sda} or
21261 @code{(hd0)} (@pxref{Invoking grub-install,,, grub, GNU GRUB Manual}). For
21262 @code{grub-efi-bootloader}, it should be the mount point of the EFI file
21263 system, usually @file{/boot/efi}.
21264
21265 @item @code{menu-entries} (par défaut : @code{()})
21266 A possibly empty list of @code{menu-entry} objects (see below), denoting
21267 entries to appear in the bootloader menu, in addition to the current system
21268 entry and the entry pointing to previous system generations.
21269
21270 @item @code{default-entry} (par défaut : @code{0})
21271 The index of the default boot menu entry. Index 0 is for the entry of the
21272 current system.
21273
21274 @item @code{timeout} (par défaut : @code{5})
21275 The number of seconds to wait for keyboard input before booting. Set to 0
21276 to boot immediately, and to -1 to wait indefinitely.
21277
21278 @item @code{theme} (par défaut : @var{#f})
21279 The bootloader theme object describing the theme to use. If no theme is
21280 provided, some bootloaders might use a default theme, that's true for GRUB.
21281
21282 @item @code{terminal-outputs} (par défaut : @code{'gfxterm})
21283 The output terminals used for the bootloader boot menu, as a list of
21284 symbols. GRUB accepts the values: @code{console}, @code{serial},
21285 @code{serial_@{0-3@}}, @code{gfxterm}, @code{vga_text}, @code{mda_text},
21286 @code{morse}, and @code{pkmodem}. This field corresponds to the GRUB
21287 variable @code{GRUB_TERMINAL_OUTPUT} (@pxref{Simple configuration,,,
21288 grub,GNU GRUB manual}).
21289
21290 @item @code{terminal-inputs} (par défaut : @code{'()})
21291 The input terminals used for the bootloader boot menu, as a list of
21292 symbols. For GRUB, the default is the native platform terminal as
21293 determined at run-time. GRUB accepts the values: @code{console},
21294 @code{serial}, @code{serial_@{0-3@}}, @code{at_keyboard}, and
21295 @code{usb_keyboard}. This field corresponds to the GRUB variable
21296 @code{GRUB_TERMINAL_INPUT} (@pxref{Simple configuration,,, grub,GNU GRUB
21297 manual}).
21298
21299 @item @code{serial-unit} (par défaut : @code{#f})
21300 The serial unit used by the bootloader, as an integer from 0 to 3. For
21301 GRUB, it is chosen at run-time; currently GRUB chooses 0, which corresponds
21302 to COM1 (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
21303
21304 @item @code{serial-speed} (par défaut : @code{#f})
21305 The speed of the serial interface, as an integer. For GRUB, the default
21306 value is chosen at run-time; currently GRUB chooses 9600@tie{}bps
21307 (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
21308 @end table
21309
21310 @end deftp
21311
21312 @cindex dual boot
21313 @cindex boot menu
21314 Should you want to list additional boot menu entries @i{via} the
21315 @code{menu-entries} field above, you will need to create them with the
21316 @code{menu-entry} form. For example, imagine you want to be able to boot
21317 another distro (hard to imagine!), you can define a menu entry along these
21318 lines:
21319
21320 @example
21321 (menu-entry
21322 (label "The Other Distro")
21323 (linux "/boot/old/vmlinux-2.6.32")
21324 (linux-arguments '("root=/dev/sda2"))
21325 (initrd "/boot/old/initrd"))
21326 @end example
21327
21328 Details below.
21329
21330 @deftp {Type de données} menu-entry
21331 The type of an entry in the bootloader menu.
21332
21333 @table @asis
21334
21335 @item @code{label}
21336 The label to show in the menu---e.g., @code{"GNU"}.
21337
21338 @item @code{linux}
21339 The Linux kernel image to boot, for example:
21340
21341 @example
21342 (file-append linux-libre "/bzImage")
21343 @end example
21344
21345 For GRUB, it is also possible to specify a device explicitly in the file
21346 path using GRUB's device naming convention (@pxref{Naming convention,,,
21347 grub, GNU GRUB manual}), for example:
21348
21349 @example
21350 "(hd0,msdos1)/boot/vmlinuz"
21351 @end example
21352
21353 If the device is specified explicitly as above, then the @code{device} field
21354 is ignored entirely.
21355
21356 @item @code{linux-arguments} (par défaut : @code{()})
21357 The list of extra Linux kernel command-line arguments---e.g.,
21358 @code{("console=ttyS0")}.
21359
21360 @item @code{initrd}
21361 A G-Expression or string denoting the file name of the initial RAM disk to
21362 use (@pxref{G-Expressions}).
21363 @item @code{device} (par défaut : @code{#f})
21364 The device where the kernel and initrd are to be found---i.e., for GRUB,
21365 @dfn{root} for this menu entry (@pxref{root,,, grub, GNU GRUB manual}).
21366
21367 This may be a file system label (a string), a file system UUID (a
21368 bytevector, @pxref{Systèmes de fichiers}), or @code{#f}, in which case the
21369 bootloader will search the device containing the file specified by the
21370 @code{linux} field (@pxref{search,,, grub, GNU GRUB manual}). It must
21371 @emph{not} be an OS device name such as @file{/dev/sda1}.
21372
21373 @end table
21374 @end deftp
21375
21376 @c FIXME: Write documentation once it's stable.
21377 Fow now only GRUB has theme support. GRUB themes are created using the
21378 @code{grub-theme} form, which is not documented yet.
21379
21380 @defvr {Variable Scheme} %default-theme
21381 This is the default GRUB theme used by the operating system if no
21382 @code{theme} field is specified in @code{bootloader-configuration} record.
21383
21384 It comes with a fancy background image displaying the GNU and Guix logos.
21385 @end defvr
21386
21387
21388 @node Invoquer guix system
21389 @subsection Invoquer @code{guix system}
21390
21391 Once you have written an operating system declaration as seen in the
21392 previous section, it can be @dfn{instantiated} using the @command{guix
21393 system} command. The synopsis is:
21394
21395 @example
21396 guix system @var{options}@dots{} @var{action} @var{file}
21397 @end example
21398
21399 @var{file} must be the name of a file containing an @code{operating-system}
21400 declaration. @var{action} specifies how the operating system is
21401 instantiated. Currently the following values are supported:
21402
21403 @table @code
21404 @item search
21405 Display available service type definitions that match the given regular
21406 expressions, sorted by relevance:
21407
21408 @example
21409 $ guix system search console font
21410 name: console-fonts
21411 location: gnu/services/base.scm:729:2
21412 extends: shepherd-root
21413 description: Install the given fonts on the specified ttys (fonts are
21414 + per virtual console on GNU/Linux). The value of this service is a list
21415 + of tty/font pairs like:
21416 +
21417 + '(("tty1" . "LatGrkCyr-8x16"))
21418 relevance: 20
21419
21420 name: mingetty
21421 location: gnu/services/base.scm:1048:2
21422 extends: shepherd-root
21423 description: Provide console login using the `mingetty' program.
21424 relevance: 2
21425
21426 name: login
21427 location: gnu/services/base.scm:775:2
21428 extends: pam
21429 description: Provide a console log-in service as specified by its
21430 + configuration value, a `login-configuration' object.
21431 relevance: 2
21432
21433 @dots{}
21434 @end example
21435
21436 As for @command{guix package --search}, the result is written in
21437 @code{recutils} format, which makes it easy to filter the output
21438 (@pxref{Top, GNU recutils databases,, recutils, GNU recutils manual}).
21439
21440 @item reconfigure
21441 Build the operating system described in @var{file}, activate it, and switch
21442 to it@footnote{This action (and the related actions @code{switch-generation}
21443 and @code{roll-back}) are usable only on systems already running GuixSD.}.
21444
21445 This effects all the configuration specified in @var{file}: user accounts,
21446 system services, global package list, setuid programs, etc. The command
21447 starts system services specified in @var{file} that are not currently
21448 running; if a service is currently running, it does not attempt to upgrade
21449 it since this would not be possible without stopping it first.
21450
21451 This command creates a new generation whose number is one greater than the
21452 current generation (as reported by @command{guix system list-generations}).
21453 If that generation already exists, it will be overwritten. This behavior
21454 mirrors that of @command{guix package} (@pxref{Invoquer guix package}).
21455
21456 It also adds a bootloader menu entry for the new OS configuration, ---unless
21457 @option{--no-bootloader} is passed. For GRUB, it moves entries for older
21458 configurations to a submenu, allowing you to choose an older system
21459 generation at boot time should you need it.
21460
21461 @quotation Remarque
21462 @c The paragraph below refers to the problem discussed at
21463 @c <http://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
21464 It is highly recommended to run @command{guix pull} once before you run
21465 @command{guix system reconfigure} for the first time (@pxref{Invoquer guix pull}). Failing to do that you would see an older version of Guix once
21466 @command{reconfigure} has completed.
21467 @end quotation
21468
21469 @item switch-generation
21470 @cindex générations
21471 Switch to an existing system generation. This action atomically switches
21472 the system profile to the specified system generation. It also rearranges
21473 the system's existing bootloader menu entries. It makes the menu entry for
21474 the specified system generation the default, and it moves the entries for
21475 the other generatiors to a submenu, if supported by the bootloader being
21476 used. The next time the system boots, it will use the specified system
21477 generation.
21478
21479 The bootloader itself is not being reinstalled when using this command.
21480 Thus, the installed bootloader is used with an updated configuration file.
21481
21482 The target generation can be specified explicitly by its generation number.
21483 For example, the following invocation would switch to system generation 7:
21484
21485 @example
21486 guix system switch-generation 7
21487 @end example
21488
21489 The target generation can also be specified relative to the current
21490 generation with the form @code{+N} or @code{-N}, where @code{+3} means ``3
21491 generations ahead of the current generation,'' and @code{-1} means ``1
21492 generation prior to the current generation.'' When specifying a negative
21493 value such as @code{-1}, you must precede it with @code{--} to prevent it
21494 from being parsed as an option. For example:
21495
21496 @example
21497 guix system switch-generation -- -1
21498 @end example
21499
21500 Currently, the effect of invoking this action is @emph{only} to switch the
21501 system profile to an existing generation and rearrange the bootloader menu
21502 entries. To actually start using the target system generation, you must
21503 reboot after running this action. In the future, it will be updated to do
21504 the same things as @command{reconfigure}, like activating and deactivating
21505 services.
21506
21507 This action will fail if the specified generation does not exist.
21508
21509 @item roll-back
21510 @cindex revenir en arrière
21511 Switch to the preceding system generation. The next time the system boots,
21512 it will use the preceding system generation. This is the inverse of
21513 @command{reconfigure}, and it is exactly the same as invoking
21514 @command{switch-generation} with an argument of @code{-1}.
21515
21516 Currently, as with @command{switch-generation}, you must reboot after
21517 running this action to actually start using the preceding system generation.
21518
21519 @item build
21520 Build the derivation of the operating system, which includes all the
21521 configuration files and programs needed to boot and run the system. This
21522 action does not actually install anything.
21523
21524 @item init
21525 Populate the given directory with all the files necessary to run the
21526 operating system specified in @var{file}. This is useful for first-time
21527 installations of GuixSD. For instance:
21528
21529 @example
21530 guix system init my-os-config.scm /mnt
21531 @end example
21532
21533 copies to @file{/mnt} all the store items required by the configuration
21534 specified in @file{my-os-config.scm}. This includes configuration files,
21535 packages, and so on. It also creates other essential files needed for the
21536 system to operate correctly---e.g., the @file{/etc}, @file{/var}, and
21537 @file{/run} directories, and the @file{/bin/sh} file.
21538
21539 This command also installs bootloader on the target specified in
21540 @file{my-os-config}, unless the @option{--no-bootloader} option was passed.
21541
21542 @item vm
21543 @cindex virtual machine
21544 @cindex VM
21545 @anchor{guix system vm}
21546 Build a virtual machine that contains the operating system declared in
21547 @var{file}, and return a script to run that virtual machine (VM). Arguments
21548 given to the script are passed to QEMU as in the example below, which
21549 enables networking and requests 1@tie{}GiB of RAM for the emulated machine:
21550
21551 @example
21552 $ /gnu/store/@dots{}-run-vm.sh -m 1024 -net user
21553 @end example
21554
21555 The VM shares its store with the host system.
21556
21557 Additional file systems can be shared between the host and the VM using the
21558 @code{--share} and @code{--expose} command-line options: the former
21559 specifies a directory to be shared with write access, while the latter
21560 provides read-only access to the shared directory.
21561
21562 The example below creates a VM in which the user's home directory is
21563 accessible read-only, and where the @file{/exchange} directory is a
21564 read-write mapping of @file{$HOME/tmp} on the host:
21565
21566 @example
21567 guix system vm my-config.scm \
21568 --expose=$HOME --share=$HOME/tmp=/exchange
21569 @end example
21570
21571 On GNU/Linux, the default is to boot directly to the kernel; this has the
21572 advantage of requiring only a very tiny root disk image since the store of
21573 the host can then be mounted.
21574
21575 The @code{--full-boot} option forces a complete boot sequence, starting with
21576 the bootloader. This requires more disk space since a root image containing
21577 at least the kernel, initrd, and bootloader data files must be created. The
21578 @code{--image-size} option can be used to specify the size of the image.
21579
21580 @cindex System images, creation in various formats
21581 @cindex Creating system images in various formats
21582 @item vm-image
21583 @itemx disk-image
21584 @itemx docker-image
21585 Return a virtual machine, disk image, or Docker image of the operating
21586 system declared in @var{file} that stands alone. By default, @command{guix
21587 system} estimates the size of the image needed to store the system, but you
21588 can use the @option{--image-size} option to specify a value. Docker images
21589 are built to contain exactly what they need, so the @option{--image-size}
21590 option is ignored in the case of @code{docker-image}.
21591
21592 You can specify the root file system type by using the
21593 @option{--file-system-type} option. It defaults to @code{ext4}.
21594
21595 When using @code{vm-image}, the returned image is in qcow2 format, which the
21596 QEMU emulator can efficiently use. @xref{Lancer GuixSD dans une VM}, for more
21597 information on how to run the image in a virtual machine.
21598
21599 When using @code{disk-image}, a raw disk image is produced; it can be copied
21600 as is to a USB stick, for instance. Assuming @code{/dev/sdc} is the device
21601 corresponding to a USB stick, one can copy the image to it using the
21602 following command:
21603
21604 @example
21605 # dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
21606 @end example
21607
21608 When using @code{docker-image}, a Docker image is produced. Guix builds the
21609 image from scratch, not from a pre-existing Docker base image. As a result,
21610 it contains @emph{exactly} what you define in the operating system
21611 configuration file. You can then load the image and launch a Docker
21612 container using commands like the following:
21613
21614 @example
21615 image_id="$(docker load < guixsd-docker-image.tar.gz)"
21616 docker run -e GUIX_NEW_SYSTEM=/var/guix/profiles/system \\
21617 --entrypoint /var/guix/profiles/system/profile/bin/guile \\
21618 $image_id /var/guix/profiles/system/boot
21619 @end example
21620
21621 This command starts a new Docker container from the specified image. It
21622 will boot the GuixSD system in the usual manner, which means it will start
21623 any services you have defined in the operating system configuration.
21624 Depending on what you run in the Docker container, it may be necessary to
21625 give the container additional permissions. For example, if you intend to
21626 build software using Guix inside of the Docker container, you may need to
21627 pass the @option{--privileged} option to @code{docker run}.
21628
21629 @item conteneur
21630 Return a script to run the operating system declared in @var{file} within a
21631 container. Containers are a set of lightweight isolation mechanisms
21632 provided by the kernel Linux-libre. Containers are substantially less
21633 resource-demanding than full virtual machines since the kernel, shared
21634 objects, and other resources can be shared with the host system; this also
21635 means they provide thinner isolation.
21636
21637 Currently, the script must be run as root in order to support more than a
21638 single user and group. The container shares its store with the host system.
21639
21640 As with the @code{vm} action (@pxref{guix system vm}), additional file
21641 systems to be shared between the host and container can be specified using
21642 the @option{--share} and @option{--expose} options:
21643
21644 @example
21645 guix system container my-config.scm \
21646 --expose=$HOME --share=$HOME/tmp=/exchange
21647 @end example
21648
21649 @quotation Remarque
21650 This option requires Linux-libre 3.19 or newer.
21651 @end quotation
21652
21653 @end table
21654
21655 @var{options} can contain any of the common build options (@pxref{Options de construction communes}). In addition, @var{options} can contain one of the
21656 following:
21657
21658 @table @option
21659 @item --expression=@var{expr}
21660 @itemx -e @var{expr}
21661 Consider the operating-system @var{expr} evaluates to. This is an
21662 alternative to specifying a file which evaluates to an operating system.
21663 This is used to generate the GuixSD installer @pxref{Construire l'image d'installation}).
21664
21665 @item --system=@var{système}
21666 @itemx -s @var{système}
21667 Attempt to build for @var{system} instead of the host system type. This
21668 works as per @command{guix build} (@pxref{Invoquer guix build}).
21669
21670 @item --derivation
21671 @itemx -d
21672 Return the derivation file name of the given operating system without
21673 building anything.
21674
21675 @item --file-system-type=@var{type}
21676 @itemx -t @var{type}
21677 For the @code{disk-image} action, create a file system of the given
21678 @var{type} on the image.
21679
21680 When this option is omitted, @command{guix system} uses @code{ext4}.
21681
21682 @cindex ISO-9660 format
21683 @cindex CD image format
21684 @cindex DVD image format
21685 @code{--file-system-type=iso9660} produces an ISO-9660 image, suitable for
21686 burning on CDs and DVDs.
21687
21688 @item --image-size=@var{size}
21689 For the @code{vm-image} and @code{disk-image} actions, create an image of
21690 the given @var{size}. @var{size} may be a number of bytes, or it may
21691 include a unit as a suffix (@pxref{Block size, size specifications,,
21692 coreutils, GNU Coreutils}).
21693
21694 When this option is omitted, @command{guix system} computes an estimate of
21695 the image size as a function of the size of the system declared in
21696 @var{file}.
21697
21698 @item --root=@var{fichier}
21699 @itemx -r @var{fichier}
21700 Fait de @var{fichier} un lien symbolique vers le résultat, et l'enregistre
21701 en tant que racine du ramasse-miettes.
21702
21703 @item --skip-checks
21704 Skip pre-installation safety checks.
21705
21706 By default, @command{guix system init} and @command{guix system reconfigure}
21707 perform safety checks: they make sure the file systems that appear in the
21708 @code{operating-system} declaration actually exist (@pxref{Systèmes de fichiers}),
21709 and that any Linux kernel modules that may be needed at boot time are listed
21710 in @code{initrd-modules} (@pxref{Disque de RAM initial}). Passing this option
21711 skips these tests altogether.
21712
21713 @item --on-error=@var{strategy}
21714 Apply @var{strategy} when an error occurs when reading @var{file}.
21715 @var{strategy} may be one of the following:
21716
21717 @table @code
21718 @item nothing-special
21719 Report the error concisely and exit. This is the default strategy.
21720
21721 @item backtrace
21722 Likewise, but also display a backtrace.
21723
21724 @item debug
21725 Report the error and enter Guile's debugger. From there, you can run
21726 commands such as @code{,bt} to get a backtrace, @code{,locals} to display
21727 local variable values, and more generally inspect the state of the program.
21728 @xref{Debug Commands,,, guile, GNU Guile Reference Manual}, for a list of
21729 available debugging commands.
21730 @end table
21731 @end table
21732
21733 @quotation Remarque
21734 All the actions above, except @code{build} and @code{init}, can use KVM
21735 support in the Linux-libre kernel. Specifically, if the machine has
21736 hardware virtualization support, the corresponding KVM kernel module should
21737 be loaded, and the @file{/dev/kvm} device node must exist and be readable
21738 and writable by the user and by the build users of the daemon (@pxref{Réglages de l'environnement de construction}).
21739 @end quotation
21740
21741 Once you have built, configured, re-configured, and re-re-configured your
21742 GuixSD installation, you may find it useful to list the operating system
21743 generations available on disk---and that you can choose from the bootloader
21744 boot menu:
21745
21746 @table @code
21747
21748 @item list-generations
21749 List a summary of each generation of the operating system available on disk,
21750 in a human-readable way. This is similar to the @option{--list-generations}
21751 option of @command{guix package} (@pxref{Invoquer guix package}).
21752
21753 Optionally, one can specify a pattern, with the same syntax that is used in
21754 @command{guix package --list-generations}, to restrict the list of
21755 generations displayed. For instance, the following command displays
21756 generations that are up to 10 days old:
21757
21758 @example
21759 $ guix system list-generations 10d
21760 @end example
21761
21762 @end table
21763
21764 The @command{guix system} command has even more to offer! The following
21765 sub-commands allow you to visualize how your system services relate to each
21766 other:
21767
21768 @anchor{system-extension-graph}
21769 @table @code
21770
21771 @item extension-graph
21772 Emit in Dot/Graphviz format to standard output the @dfn{service extension
21773 graph} of the operating system defined in @var{file} (@pxref{Composition de services}, for more information on service extensions.)
21774
21775 The command:
21776
21777 @example
21778 $ guix system extension-graph @var{file} | dot -Tpdf > services.pdf
21779 @end example
21780
21781 produces a PDF file showing the extension relations among services.
21782
21783 @anchor{system-shepherd-graph}
21784 @item shepherd-graph
21785 Emit in Dot/Graphviz format to standard output the @dfn{dependency graph} of
21786 shepherd services of the operating system defined in @var{file}.
21787 @xref{Services Shepherd}, for more information and for an example graph.
21788
21789 @end table
21790
21791 @node Lancer GuixSD dans une VM
21792 @subsection Running GuixSD in a Virtual Machine
21793
21794 @cindex virtual machine
21795 To run GuixSD in a virtual machine (VM), one can either use the pre-built
21796 GuixSD VM image distributed at
21797 @indicateurl{https://alpha.gnu.org/gnu/guix/guixsd-vm-image-@value{VERSION}.@var{system}.xz}
21798 , or build their own virtual machine image using @command{guix system
21799 vm-image} (@pxref{Invoquer guix system}). The returned image is in qcow2
21800 format, which the @uref{http://qemu.org/, QEMU emulator} can efficiently
21801 use.
21802
21803 @cindex QEMU
21804 If you built your own image, you must copy it out of the store (@pxref{Le dépôt}) and give yourself permission to write to the copy before you can use
21805 it. When invoking QEMU, you must choose a system emulator that is suitable
21806 for your hardware platform. Here is a minimal QEMU invocation that will
21807 boot the result of @command{guix system vm-image} on x86_64 hardware:
21808
21809 @example
21810 $ qemu-system-x86_64 \
21811 -net user -net nic,model=virtio \
21812 -enable-kvm -m 256 /tmp/qemu-image
21813 @end example
21814
21815 Here is what each of these options means:
21816
21817 @table @code
21818 @item qemu-system-x86_64
21819 This specifies the hardware platform to emulate. This should match the
21820 host.
21821
21822 @item -net user
21823 Enable the unprivileged user-mode network stack. The guest OS can access
21824 the host but not vice versa. This is the simplest way to get the guest OS
21825 online.
21826
21827 @item -net nic,model=virtio
21828 You must create a network interface of a given model. If you do not create
21829 a NIC, the boot will fail. Assuming your hardware platform is x86_64, you
21830 can get a list of available NIC models by running
21831 @command{qemu-system-x86_64 -net nic,model=help}.
21832
21833 @item -enable-kvm
21834 If your system has hardware virtualization extensions, enabling the virtual
21835 machine support (KVM) of the Linux kernel will make things run faster.
21836
21837 @item -m 256
21838 RAM available to the guest OS, in mebibytes. Defaults to 128@tie{}MiB,
21839 which may be insufficient for some operations.
21840
21841 @item /tmp/qemu-image
21842 The file name of the qcow2 image.
21843 @end table
21844
21845 The default @command{run-vm.sh} script that is returned by an invocation of
21846 @command{guix system vm} does not add a @command{-net user} flag by
21847 default. To get network access from within the vm add the
21848 @code{(dhcp-client-service)} to your system definition and start the VM
21849 using @command{`guix system vm config.scm` -net user}. An important caveat
21850 of using @command{-net user} for networking is that @command{ping} will not
21851 work, because it uses the ICMP protocol. You'll have to use a different
21852 command to check for network connectivity, for example @command{guix
21853 download}.
21854
21855 @subsubsection Connecting Through SSH
21856
21857 @cindex SSH
21858 @cindex serveur SSH
21859 To enable SSH inside a VM you need to add a SSH server like
21860 @code{(dropbear-service)} or @code{(lsh-service)} to your VM. The
21861 @code{(lsh-service}) doesn't currently boot unsupervised. It requires you
21862 to type some characters to initialize the randomness generator. In addition
21863 you need to forward the SSH port, 22 by default, to the host. You can do
21864 this with
21865
21866 @example
21867 `guix system vm config.scm` -net user,hostfwd=tcp::10022-:22
21868 @end example
21869
21870 To connect to the VM you can run
21871
21872 @example
21873 ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022
21874 @end example
21875
21876 The @command{-p} tells @command{ssh} the port you want to connect to.
21877 @command{-o UserKnownHostsFile=/dev/null} prevents @command{ssh} from
21878 complaining every time you modify your @command{config.scm} file and the
21879 @command{-o StrictHostKeyChecking=no} prevents you from having to allow a
21880 connection to an unknown host every time you connect.
21881
21882 @subsubsection Using @command{virt-viewer} with Spice
21883
21884 As an alternative to the default @command{qemu} graphical client you can use
21885 the @command{remote-viewer} from the @command{virt-viewer} package. To
21886 connect pass the @command{-spice port=5930,disable-ticketing} flag to
21887 @command{qemu}. See previous section for further information on how to do
21888 this.
21889
21890 Spice also allows you to do some nice stuff like share your clipboard with
21891 your VM. To enable that you'll also have to pass the following flags to
21892 @command{qemu}:
21893
21894 @example
21895 -device virtio-serial-pci,id=virtio-serial0,max_ports=16,bus=pci.0,addr=0x5
21896 -chardev spicevmc,name=vdagent,id=vdagent
21897 -device virtserialport,nr=1,bus=virtio-serial0.0,chardev=vdagent,
21898 name=com.redhat.spice.0
21899 @end example
21900
21901 You'll also need to add the @pxref{Services divers, Spice service}.
21902
21903 @node Définir des services
21904 @subsection Définir des services
21905
21906 The previous sections show the available services and how one can combine
21907 them in an @code{operating-system} declaration. But how do we define them
21908 in the first place? And what is a service anyway?
21909
21910 @menu
21911 * Composition de services:: Le modèle de composition des services.
21912 * Types service et services:: Types et services.
21913 * Référence de service:: Référence de l'API@.
21914 * Services Shepherd:: Un type de service particulier.
21915 @end menu
21916
21917 @node Composition de services
21918 @subsubsection Composition de services
21919
21920 @cindex services
21921 @cindex daemons
21922 Here we define a @dfn{service} as, broadly, something that extends the
21923 functionality of the operating system. Often a service is a process---a
21924 @dfn{daemon}---started when the system boots: a secure shell server, a Web
21925 server, the Guix build daemon, etc. Sometimes a service is a daemon whose
21926 execution can be triggered by another daemon---e.g., an FTP server started
21927 by @command{inetd} or a D-Bus service activated by @command{dbus-daemon}.
21928 Occasionally, a service does not map to a daemon. For instance, the
21929 ``account'' service collects user accounts and makes sure they exist when
21930 the system runs; the ``udev'' service collects device management rules and
21931 makes them available to the eudev daemon; the @file{/etc} service populates
21932 the @file{/etc} directory of the system.
21933
21934 @cindex service extensions
21935 GuixSD services are connected by @dfn{extensions}. For instance, the secure
21936 shell service @emph{extends} the Shepherd---the GuixSD initialization
21937 system, running as PID@tie{}1---by giving it the command lines to start and
21938 stop the secure shell daemon (@pxref{Services réseau,
21939 @code{lsh-service}}); the UPower service extends the D-Bus service by
21940 passing it its @file{.service} specification, and extends the udev service
21941 by passing it device management rules (@pxref{Services de bureaux,
21942 @code{upower-service}}); the Guix daemon service extends the Shepherd by
21943 passing it the command lines to start and stop the daemon, and extends the
21944 account service by passing it a list of required build user accounts
21945 (@pxref{Services de base}).
21946
21947 All in all, services and their ``extends'' relations form a directed acyclic
21948 graph (DAG). If we represent services as boxes and extensions as arrows, a
21949 typical system might provide something like this:
21950
21951 @image{images/service-graph,,5in,Typical service extension graph.}
21952
21953 @cindex system service
21954 At the bottom, we see the @dfn{system service}, which produces the directory
21955 containing everything to run and boot the system, as returned by the
21956 @command{guix system build} command. @xref{Référence de service}, to learn
21957 about the other service types shown here. @xref{system-extension-graph, the
21958 @command{guix system extension-graph} command}, for information on how to
21959 generate this representation for a particular operating system definition.
21960
21961 @cindex service types
21962 Technically, developers can define @dfn{service types} to express these
21963 relations. There can be any number of services of a given type on the
21964 system---for instance, a system running two instances of the GNU secure
21965 shell server (lsh) has two instances of @var{lsh-service-type}, with
21966 different parameters.
21967
21968 The following section describes the programming interface for service types
21969 and services.
21970
21971 @node Types service et services
21972 @subsubsection Types service et services
21973
21974 A @dfn{service type} is a node in the DAG described above. Let us start
21975 with a simple example, the service type for the Guix build daemon
21976 (@pxref{Invoquer guix-daemon}):
21977
21978 @example
21979 (define guix-service-type
21980 (service-type
21981 (name 'guix)
21982 (extensions
21983 (list (service-extension shepherd-root-service-type guix-shepherd-service)
21984 (service-extension account-service-type guix-accounts)
21985 (service-extension activation-service-type guix-activation)))
21986 (default-value (guix-configuration))))
21987 @end example
21988
21989 @noindent
21990 It defines three things:
21991
21992 @enumerate
21993 @item
21994 A name, whose sole purpose is to make inspection and debugging easier.
21995
21996 @item
21997 A list of @dfn{service extensions}, where each extension designates the
21998 target service type and a procedure that, given the parameters of the
21999 service, returns a list of objects to extend the service of that type.
22000
22001 Every service type has at least one service extension. The only exception
22002 is the @dfn{boot service type}, which is the ultimate service.
22003
22004 @item
22005 Optionally, a default value for instances of this type.
22006 @end enumerate
22007
22008 In this example, @var{guix-service-type} extends three services:
22009
22010 @table @var
22011 @item shepherd-root-service-type
22012 The @var{guix-shepherd-service} procedure defines how the Shepherd service
22013 is extended. Namely, it returns a @code{<shepherd-service>} object that
22014 defines how @command{guix-daemon} is started and stopped (@pxref{Services Shepherd}).
22015
22016 @item account-service-type
22017 This extension for this service is computed by @var{guix-accounts}, which
22018 returns a list of @code{user-group} and @code{user-account} objects
22019 representing the build user accounts (@pxref{Invoquer guix-daemon}).
22020
22021 @item activation-service-type
22022 Here @var{guix-activation} is a procedure that returns a gexp, which is a
22023 code snippet to run at ``activation time''---e.g., when the service is
22024 booted.
22025 @end table
22026
22027 A service of this type is instantiated like this:
22028
22029 @example
22030 (service guix-service-type
22031 (guix-configuration
22032 (build-accounts 5)
22033 (use-substitutes? #f)))
22034 @end example
22035
22036 The second argument to the @code{service} form is a value representing the
22037 parameters of this specific service instance.
22038 @xref{guix-configuration-type, @code{guix-configuration}}, for information
22039 about the @code{guix-configuration} data type. When the value is omitted,
22040 the default value specified by @code{guix-service-type} is used:
22041
22042 @example
22043 (service guix-service-type)
22044 @end example
22045
22046 @var{guix-service-type} is quite simple because it extends other services
22047 but is not extensible itself.
22048
22049 @c @subsubsubsection Extensible Service Types
22050
22051 The service type for an @emph{extensible} service looks like this:
22052
22053 @example
22054 (define udev-service-type
22055 (service-type (name 'udev)
22056 (extensions
22057 (list (service-extension shepherd-root-service-type
22058 udev-shepherd-service)))
22059
22060 (compose concatenate) ;concatenate the list of rules
22061 (extend (lambda (config rules)
22062 (match config
22063 (($ <udev-configuration> udev initial-rules)
22064 (udev-configuration
22065 (udev udev) ;the udev package to use
22066 (rules (append initial-rules rules)))))))))
22067 @end example
22068
22069 This is the service type for the
22070 @uref{https://wiki.gentoo.org/wiki/Project:Eudev, eudev device management
22071 daemon}. Compared to the previous example, in addition to an extension of
22072 @var{shepherd-root-service-type}, we see two new fields:
22073
22074 @table @code
22075 @item compose
22076 This is the procedure to @dfn{compose} the list of extensions to services of
22077 this type.
22078
22079 Services can extend the udev service by passing it lists of rules; we
22080 compose those extensions simply by concatenating them.
22081
22082 @item extend
22083 This procedure defines how the value of the service is @dfn{extended} with
22084 the composition of the extensions.
22085
22086 Udev extensions are composed into a list of rules, but the udev service
22087 value is itself a @code{<udev-configuration>} record. So here, we extend
22088 that record by appending the list of rules it contains to the list of
22089 contributed rules.
22090
22091 @item description
22092 This is a string giving an overview of the service type. The string can
22093 contain Texinfo markup (@pxref{Overview,,, texinfo, GNU Texinfo}). The
22094 @command{guix system search} command searches these strings and displays
22095 them (@pxref{Invoquer guix system}).
22096 @end table
22097
22098 There can be only one instance of an extensible service type such as
22099 @var{udev-service-type}. If there were more, the @code{service-extension}
22100 specifications would be ambiguous.
22101
22102 Still here? The next section provides a reference of the programming
22103 interface for services.
22104
22105 @node Référence de service
22106 @subsubsection Référence de service
22107
22108 We have seen an overview of service types (@pxref{Types service et services}). This section provides a reference on how to manipulate services
22109 and service types. This interface is provided by the @code{(gnu services)}
22110 module.
22111
22112 @deffn {Procédure Scheme} service @var{type} [@var{value}]
22113 Return a new service of @var{type}, a @code{<service-type>} object (see
22114 below.) @var{value} can be any object; it represents the parameters of this
22115 particular service instance.
22116
22117 When @var{value} is omitted, the default value specified by @var{type} is
22118 used; if @var{type} does not specify a default value, an error is raised.
22119
22120 For instance, this:
22121
22122 @example
22123 (service openssh-service-type)
22124 @end example
22125
22126 @noindent
22127 is equivalent to this:
22128
22129 @example
22130 (service openssh-service-type
22131 (openssh-configuration))
22132 @end example
22133
22134 In both cases the result is an instance of @code{openssh-service-type} with
22135 the default configuration.
22136 @end deffn
22137
22138 @deffn {Procédure Scheme} service? @var{obj}
22139 Return true if @var{obj} is a service.
22140 @end deffn
22141
22142 @deffn {Procédure Scheme} service-kind @var{service}
22143 Return the type of @var{service}---i.e., a @code{<service-type>} object.
22144 @end deffn
22145
22146 @deffn {Procédure Scheme} service-value @var{service}
22147 Return the value associated with @var{service}. It represents its
22148 parameters.
22149 @end deffn
22150
22151 Here is an example of how a service is created and manipulated:
22152
22153 @example
22154 (define s
22155 (service nginx-service-type
22156 (nginx-configuration
22157 (nginx nginx)
22158 (log-directory log-directory)
22159 (run-directory run-directory)
22160 (file config-file))))
22161
22162 (service? s)
22163 @result{} #t
22164
22165 (eq? (service-kind s) nginx-service-type)
22166 @result{} #t
22167 @end example
22168
22169 The @code{modify-services} form provides a handy way to change the
22170 parameters of some of the services of a list such as @var{%base-services}
22171 (@pxref{Services de base, @code{%base-services}}). It evaluates to a list of
22172 services. Of course, you could always use standard list combinators such as
22173 @code{map} and @code{fold} to do that (@pxref{SRFI-1, List Library,, guile,
22174 GNU Guile Reference Manual}); @code{modify-services} simply provides a more
22175 concise form for this common pattern.
22176
22177 @deffn {Scheme Syntax} modify-services @var{services} @
22178 (@var{type} @var{variable} => @var{body}) @dots{}
22179
22180 Modify the services listed in @var{services} according to the given
22181 clauses. Each clause has the form:
22182
22183 @example
22184 (@var{type} @var{variable} => @var{body})
22185 @end example
22186
22187 where @var{type} is a service type---e.g., @code{guix-service-type}---and
22188 @var{variable} is an identifier that is bound within the @var{body} to the
22189 service parameters---e.g., a @code{guix-configuration} instance---of the
22190 original service of that @var{type}.
22191
22192 The @var{body} should evaluate to the new service parameters, which will be
22193 used to configure the new service. This new service will replace the
22194 original in the resulting list. Because a service's service parameters are
22195 created using @code{define-record-type*}, you can write a succinct
22196 @var{body} that evaluates to the new service parameters by using the
22197 @code{inherit} feature that @code{define-record-type*} provides.
22198
22199 @xref{Utiliser le système de configuration}, for example usage.
22200
22201 @end deffn
22202
22203 Next comes the programming interface for service types. This is something
22204 you want to know when writing new service definitions, but not necessarily
22205 when simply looking for ways to customize your @code{operating-system}
22206 declaration.
22207
22208 @deftp {Type de données} service-type
22209 @cindex service type
22210 This is the representation of a @dfn{service type} (@pxref{Types service et services}).
22211
22212 @table @asis
22213 @item @code{name}
22214 This is a symbol, used only to simplify inspection and debugging.
22215
22216 @item @code{extensions}
22217 A non-empty list of @code{<service-extension>} objects (see below).
22218
22219 @item @code{compose} (par défaut : @code{#f})
22220 If this is @code{#f}, then the service type denotes services that cannot be
22221 extended---i.e., services that do not receive ``values'' from other
22222 services.
22223
22224 Otherwise, it must be a one-argument procedure. The procedure is called by
22225 @code{fold-services} and is passed a list of values collected from
22226 extensions. It may return any single value.
22227
22228 @item @code{extend} (par défaut : @code{#f})
22229 If this is @code{#f}, services of this type cannot be extended.
22230
22231 Otherwise, it must be a two-argument procedure: @code{fold-services} calls
22232 it, passing it the initial value of the service as the first argument and
22233 the result of applying @code{compose} to the extension values as the second
22234 argument. It must return a value that is a valid parameter value for the
22235 service instance.
22236 @end table
22237
22238 @xref{Types service et services}, for examples.
22239 @end deftp
22240
22241 @deffn {Procédure Scheme} service-extension @var{target-type} @
22242 @var{compute} Return a new extension for services of type
22243 @var{target-type}. @var{compute} must be a one-argument procedure:
22244 @code{fold-services} calls it, passing it the value associated with the
22245 service that provides the extension; it must return a valid value for the
22246 target service.
22247 @end deffn
22248
22249 @deffn {Procédure Scheme} service-extension? @var{obj}
22250 Return true if @var{obj} is a service extension.
22251 @end deffn
22252
22253 Occasionally, you might want to simply extend an existing service. This
22254 involves creating a new service type and specifying the extension of
22255 interest, which can be verbose; the @code{simple-service} procedure provides
22256 a shorthand for this.
22257
22258 @deffn {Procédure Scheme} simple-service @var{name} @var{target} @var{value}
22259 Return a service that extends @var{target} with @var{value}. This works by
22260 creating a singleton service type @var{name}, of which the returned service
22261 is an instance.
22262
22263 For example, this extends mcron (@pxref{Exécution de tâches planifiées}) with an
22264 additional job:
22265
22266 @example
22267 (simple-service 'my-mcron-job mcron-service-type
22268 #~(job '(next-hour (3)) "guix gc -F 2G"))
22269 @end example
22270 @end deffn
22271
22272 At the core of the service abstraction lies the @code{fold-services}
22273 procedure, which is responsible for ``compiling'' a list of services down to
22274 a single directory that contains everything needed to boot and run the
22275 system---the directory shown by the @command{guix system build} command
22276 (@pxref{Invoquer guix system}). In essence, it propagates service
22277 extensions down the service graph, updating each node parameters on the way,
22278 until it reaches the root node.
22279
22280 @deffn {Procédure Scheme} fold-services @var{services} @
22281 [#:target-type @var{system-service-type}] Fold @var{services} by propagating
22282 their extensions down to the root of type @var{target-type}; return the root
22283 service adjusted accordingly.
22284 @end deffn
22285
22286 Lastly, the @code{(gnu services)} module also defines several essential
22287 service types, some of which are listed below.
22288
22289 @defvr {Variable Scheme} system-service-type
22290 This is the root of the service graph. It produces the system directory as
22291 returned by the @command{guix system build} command.
22292 @end defvr
22293
22294 @defvr {Variable Scheme} boot-service-type
22295 The type of the ``boot service'', which produces the @dfn{boot script}. The
22296 boot script is what the initial RAM disk runs when booting.
22297 @end defvr
22298
22299 @defvr {Variable Scheme} etc-service-type
22300 The type of the @file{/etc} service. This service is used to create files
22301 under @file{/etc} and can be extended by passing it name/file tuples such
22302 as:
22303
22304 @example
22305 (list `("issue" ,(plain-file "issue" "Welcome!\n")))
22306 @end example
22307
22308 In this example, the effect would be to add an @file{/etc/issue} file
22309 pointing to the given file.
22310 @end defvr
22311
22312 @defvr {Variable Scheme} setuid-program-service-type
22313 Type for the ``setuid-program service''. This service collects lists of
22314 executable file names, passed as gexps, and adds them to the set of
22315 setuid-root programs on the system (@pxref{Programmes setuid}).
22316 @end defvr
22317
22318 @defvr {Variable Scheme} profile-service-type
22319 Type of the service that populates the @dfn{system profile}---i.e., the
22320 programs under @file{/run/current-system/profile}. Other services can
22321 extend it by passing it lists of packages to add to the system profile.
22322 @end defvr
22323
22324
22325 @node Services Shepherd
22326 @subsubsection Services Shepherd
22327
22328 @cindex shepherd services
22329 @cindex PID 1
22330 @cindex init system
22331 The @code{(gnu services shepherd)} module provides a way to define services
22332 managed by the GNU@tie{}Shepherd, which is the GuixSD initialization
22333 system---the first process that is started when the system boots, also known
22334 as PID@tie{}1 (@pxref{Introduction,,, shepherd, The GNU Shepherd Manual}).
22335
22336 Services in the Shepherd can depend on each other. For instance, the SSH
22337 daemon may need to be started after the syslog daemon has been started,
22338 which in turn can only happen once all the file systems have been mounted.
22339 The simple operating system defined earlier (@pxref{Utiliser le système de configuration}) results in a service graph like this:
22340
22341 @image{images/shepherd-graph,,5in,Typical shepherd service graph.}
22342
22343 You can actually generate such a graph for any operating system definition
22344 using the @command{guix system shepherd-graph} command
22345 (@pxref{system-shepherd-graph, @command{guix system shepherd-graph}}).
22346
22347 The @var{%shepherd-root-service} is a service object representing
22348 PID@tie{}1, of type @var{shepherd-root-service-type}; it can be extended by
22349 passing it lists of @code{<shepherd-service>} objects.
22350
22351 @deftp {Type de données} shepherd-service
22352 The data type representing a service managed by the Shepherd.
22353
22354 @table @asis
22355 @item @code{provision}
22356 This is a list of symbols denoting what the service provides.
22357
22358 These are the names that may be passed to @command{herd start},
22359 @command{herd status}, and similar commands (@pxref{Invoking herd,,,
22360 shepherd, The GNU Shepherd Manual}). @xref{Slots of services, the
22361 @code{provides} slot,, shepherd, The GNU Shepherd Manual}, for details.
22362
22363 @item @code{requirements} (par défaut : @code{'()})
22364 List of symbols denoting the Shepherd services this one depends on.
22365
22366 @item @code{respawn?} (par défaut : @code{#t})
22367 Whether to restart the service when it stops, for instance when the
22368 underlying process dies.
22369
22370 @item @code{start}
22371 @itemx @code{stop} (par défaut : @code{#~(const #f)})
22372 The @code{start} and @code{stop} fields refer to the Shepherd's facilities
22373 to start and stop processes (@pxref{Service De- and Constructors,,,
22374 shepherd, The GNU Shepherd Manual}). They are given as G-expressions that
22375 get expanded in the Shepherd configuration file (@pxref{G-Expressions}).
22376
22377 @item @code{actions} (default: @code{'()})
22378 @cindex actions, of Shepherd services
22379 This is a list of @code{shepherd-action} objects (see below) defining
22380 @dfn{actions} supported by the service, in addition to the standard
22381 @code{start} and @code{stop} actions. Actions listed here become available
22382 as @command{herd} sub-commands:
22383
22384 @example
22385 herd @var{action} @var{service} [@var{arguments}@dots{}]
22386 @end example
22387
22388 @item @code{documentation}
22389 A documentation string, as shown when running:
22390
22391 @example
22392 herd doc @var{service-name}
22393 @end example
22394
22395 where @var{service-name} is one of the symbols in @var{provision}
22396 (@pxref{Invoking herd,,, shepherd, The GNU Shepherd Manual}).
22397
22398 @item @code{modules} (par défaut : @var{%default-modules})
22399 This is the list of modules that must be in scope when @code{start} and
22400 @code{stop} are evaluated.
22401
22402 @end table
22403 @end deftp
22404
22405 @deftp {Data Type} shepherd-action
22406 This is the data type that defines additional actions implemented by a
22407 Shepherd service (see above).
22408
22409 @table @code
22410 @item name
22411 Symbol naming the action.
22412
22413 @item documentation
22414 This is a documentation string for the action. It can be viewed by running:
22415
22416 @example
22417 herd doc @var{service} action @var{action}
22418 @end example
22419
22420 @item procedure
22421 This should be a gexp that evaluates to a procedure of at least one
22422 argument, which is the ``running value'' of the service (@pxref{Slots of
22423 services,,, shepherd, The GNU Shepherd Manual}).
22424 @end table
22425
22426 The following example defines an action called @code{say-hello} that kindly
22427 greets the user:
22428
22429 @example
22430 (shepherd-action
22431 (name 'say-hello)
22432 (documentation "Say hi!")
22433 (procedure #~(lambda (running . args)
22434 (format #t "Hello, friend! arguments: ~s\n"
22435 args)
22436 #t)))
22437 @end example
22438
22439 Assuming this action is added to the @code{example} service, then you can
22440 do:
22441
22442 @example
22443 # herd say-hello example
22444 Hello, friend! arguments: ()
22445 # herd say-hello example a b c
22446 Hello, friend! arguments: ("a" "b" "c")
22447 @end example
22448
22449 This, as you can see, is a fairly sophisticated way to say hello.
22450 @xref{Service Convenience,,, shepherd, The GNU Shepherd Manual}, for more
22451 info on actions.
22452 @end deftp
22453
22454 @defvr {Variable Scheme} shepherd-root-service-type
22455 The service type for the Shepherd ``root service''---i.e., PID@tie{}1.
22456
22457 This is the service type that extensions target when they want to create
22458 shepherd services (@pxref{Types service et services}, for an example).
22459 Each extension must pass a list of @code{<shepherd-service>}.
22460 @end defvr
22461
22462 @defvr {Variable Scheme} %shepherd-root-service
22463 This service represents PID@tie{}1.
22464 @end defvr
22465
22466
22467 @node Documentation
22468 @section Documentation
22469
22470 @cindex documentation, searching for
22471 @cindex searching for documentation
22472 @cindex Info, documentation format
22473 @cindex man pages
22474 @cindex manual pages
22475 In most cases packages installed with Guix come with documentation. There
22476 are two main documentation formats: ``Info'', a browseable hypertext format
22477 used for GNU software, and ``manual pages'' (or ``man pages''), the linear
22478 documentation format traditionally found on Unix. Info manuals are accessed
22479 with the @command{info} command or with Emacs, and man pages are accessed
22480 using @command{man}.
22481
22482 You can look for documentation of software installed on your system by
22483 keyword. For example, the following command searches for information about
22484 ``TLS'' in Info manuals:
22485
22486 @example
22487 $ info -k TLS
22488 "(emacs)Network Security" -- STARTTLS
22489 "(emacs)Network Security" -- TLS
22490 "(gnutls)Core TLS API" -- gnutls_certificate_set_verify_flags
22491 "(gnutls)Core TLS API" -- gnutls_certificate_set_verify_function
22492 @dots{}
22493 @end example
22494
22495 @noindent
22496 The command below searches for the same keyword in man pages:
22497
22498 @example
22499 $ man -k TLS
22500 SSL (7) - OpenSSL SSL/TLS library
22501 certtool (1) - GnuTLS certificate tool
22502 @dots {}
22503 @end example
22504
22505 These searches are purely local to your computer so you have the guarantee
22506 that documentation you find corresponds to what you have actually installed,
22507 you can access it off-line, and your privacy is respected.
22508
22509 Once you have these results, you can view the relevant documentation by
22510 running, say:
22511
22512 @example
22513 $ info "(gnutls)Core TLS API"
22514 @end example
22515
22516 @noindent
22517 or:
22518
22519 @example
22520 $ man certtool
22521 @end example
22522
22523 Info manuals contain sections and indices as well as hyperlinks like those
22524 found in Web pages. The @command{info} reader (@pxref{Top, Info reader,,
22525 info-stnd, Stand-alone GNU Info}) and its Emacs counterpart (@pxref{Misc
22526 Help,,, emacs, The GNU Emacs Manual}) provide intuitive key bindings to
22527 navigate manuals. @xref{Getting Started,,, info, Info: An Introduction},
22528 for an introduction to Info navigation.
22529
22530 @node Installer les fichiers de débogage
22531 @section Installer les fichiers de débogage
22532
22533 @cindex debugging files
22534 Program binaries, as produced by the GCC compilers for instance, are
22535 typically written in the ELF format, with a section containing
22536 @dfn{debugging information}. Debugging information is what allows the
22537 debugger, GDB, to map binary code to source code; it is required to debug a
22538 compiled program in good conditions.
22539
22540 Le problème avec les informations de débogage est qu'elles prennent pas mal
22541 de place sur le disque. Par exemple, les informations de débogage de la
22542 bibliothèque C de GNU prend plus de 60 Mo. Ainsi, en tant qu'utilisateur,
22543 garder toutes les informations de débogage de tous les programmes installés
22544 n'est souvent pas une possibilité. Cependant, l'économie d'espace ne devrait
22545 pas empêcher le débogage — en particulier, dans le système GNU, qui devrait
22546 faciliter pour ses utilisateurs l'exercice de leurs libertés
22547 (@pxref{Distribution GNU}).
22548
22549 Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a mechanism
22550 that allows users to get the best of both worlds: debugging information can
22551 be stripped from the binaries and stored in separate files. GDB is then
22552 able to load debugging information from those files, when they are available
22553 (@pxref{Separate Debug Files,,, gdb, Debugging with GDB}).
22554
22555 The GNU distribution takes advantage of this by storing debugging
22556 information in the @code{lib/debug} sub-directory of a separate package
22557 output unimaginatively called @code{debug} (@pxref{Des paquets avec plusieurs résultats}). Users can choose to install the @code{debug} output of a package
22558 when they need it. For instance, the following command installs the
22559 debugging information for the GNU C Library and for GNU Guile:
22560
22561 @example
22562 guix package -i glibc:debug guile:debug
22563 @end example
22564
22565 GDB must then be told to look for debug files in the user's profile, by
22566 setting the @code{debug-file-directory} variable (consider setting it from
22567 the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with GDB}):
22568
22569 @example
22570 (gdb) set debug-file-directory ~/.guix-profile/lib/debug
22571 @end example
22572
22573 From there on, GDB will pick up debugging information from the @code{.debug}
22574 files under @file{~/.guix-profile/lib/debug}.
22575
22576 In addition, you will most likely want GDB to be able to show the source
22577 code being debugged. To do that, you will have to unpack the source code of
22578 the package of interest (obtained with @code{guix build --source},
22579 @pxref{Invoquer guix build}), and to point GDB to that source directory
22580 using the @code{directory} command (@pxref{Source Path, @code{directory},,
22581 gdb, Debugging with GDB}).
22582
22583 @c XXX: keep me up-to-date
22584 The @code{debug} output mechanism in Guix is implemented by the
22585 @code{gnu-build-system} (@pxref{Systèmes de construction}). Currently, it is
22586 opt-in---debugging information is available only for the packages with
22587 definitions explicitly declaring a @code{debug} output. This may be changed
22588 to opt-out in the future if our build farm servers can handle the load. To
22589 check whether a package has a @code{debug} output, use @command{guix package
22590 --list-available} (@pxref{Invoquer guix package}).
22591
22592
22593 @node Mises à jour de sécurité
22594 @section Mises à jour de sécurité
22595
22596 @cindex security updates
22597 @cindex vulnérabilités
22598 Occasionally, important security vulnerabilities are discovered in software
22599 packages and must be patched. Guix developers try hard to keep track of
22600 known vulnerabilities and to apply fixes as soon as possible in the
22601 @code{master} branch of Guix (we do not yet provide a ``stable'' branch
22602 containing only security updates.) The @command{guix lint} tool helps
22603 developers find out about vulnerable versions of software packages in the
22604 distribution:
22605
22606 @smallexample
22607 $ guix lint -c cve
22608 gnu/packages/base.scm:652:2: glibc@@2.21: probably vulnerable to CVE-2015-1781, CVE-2015-7547
22609 gnu/packages/gcc.scm:334:2: gcc@@4.9.3: probably vulnerable to CVE-2015-5276
22610 gnu/packages/image.scm:312:2: openjpeg@@2.1.0: probably vulnerable to CVE-2016-1923, CVE-2016-1924
22611 @dots{}
22612 @end smallexample
22613
22614 @xref{Invoquer guix lint}, for more information.
22615
22616 @quotation Remarque
22617 As of version @value{VERSION}, the feature described below is considered
22618 ``beta''.
22619 @end quotation
22620
22621 Guix suit une discipline de gestion de paquets fonctionnelle
22622 (@pxref{Introduction}), ce qui implique que lorsqu'un paquet change,
22623 @emph{tous les paquets qui en dépendent} doivent être reconstruits. Cela
22624 peut grandement ralentir le déploiement de corrections dans les paquets du
22625 cœur comme libc ou bash comme presque toute la distribution aurait besoin
22626 d'être reconstruite. Cela aide d'utiliser des binaires pré-construits
22627 (@pxref{Substituts}), mais le déploiement peut toujours prendre plus de
22628 temps de souhaité.
22629
22630 @cindex greffes
22631 To address this, Guix implements @dfn{grafts}, a mechanism that allows for
22632 fast deployment of critical updates without the costs associated with a
22633 whole-distribution rebuild. The idea is to rebuild only the package that
22634 needs to be patched, and then to ``graft'' it onto packages explicitly
22635 installed by the user and that were previously referring to the original
22636 package. The cost of grafting is typically very low, and order of
22637 magnitudes lower than a full rebuild of the dependency chain.
22638
22639 @cindex replacements of packages, for grafts
22640 For instance, suppose a security update needs to be applied to Bash. Guix
22641 developers will provide a package definition for the ``fixed'' Bash, say
22642 @var{bash-fixed}, in the usual way (@pxref{Définition des paquets}). Then, the
22643 original package definition is augmented with a @code{replacement} field
22644 pointing to the package containing the bug fix:
22645
22646 @example
22647 (define bash
22648 (package
22649 (name "bash")
22650 ;; @dots{}
22651 (replacement bash-fixed)))
22652 @end example
22653
22654 From there on, any package depending directly or indirectly on Bash---as
22655 reported by @command{guix gc --requisites} (@pxref{Invoquer guix gc})---that
22656 is installed is automatically ``rewritten'' to refer to @var{bash-fixed}
22657 instead of @var{bash}. This grafting process takes time proportional to the
22658 size of the package, usually less than a minute for an ``average'' package
22659 on a recent machine. Grafting is recursive: when an indirect dependency
22660 requires grafting, then grafting ``propagates'' up to the package that the
22661 user is installing.
22662
22663 Currently, the length of the name and version of the graft and that of the
22664 package it replaces (@var{bash-fixed} and @var{bash} in the example above)
22665 must be equal. This restriction mostly comes from the fact that grafting
22666 works by patching files, including binary files, directly. Other
22667 restrictions may apply: for instance, when adding a graft to a package
22668 providing a shared library, the original shared library and its replacement
22669 must have the same @code{SONAME} and be binary-compatible.
22670
22671 The @option{--no-grafts} command-line option allows you to forcefully avoid
22672 grafting (@pxref{Options de construction communes, @option{--no-grafts}}). Thus, the
22673 command:
22674
22675 @example
22676 guix build bash --no-grafts
22677 @end example
22678
22679 @noindent
22680 returns the store file name of the original Bash, whereas:
22681
22682 @example
22683 guix build bash
22684 @end example
22685
22686 @noindent
22687 returns the store file name of the ``fixed'', replacement Bash. This allows
22688 you to distinguish between the two variants of Bash.
22689
22690 To verify which Bash your whole profile refers to, you can run
22691 (@pxref{Invoquer guix gc}):
22692
22693 @example
22694 guix gc -R `readlink -f ~/.guix-profile` | grep bash
22695 @end example
22696
22697 @noindent
22698 @dots{} and compare the store file names that you get with those above.
22699 Likewise for a complete GuixSD system generation:
22700
22701 @example
22702 guix gc -R `guix system build my-config.scm` | grep bash
22703 @end example
22704
22705 Lastly, to check which Bash running processes are using, you can use the
22706 @command{lsof} command:
22707
22708 @example
22709 lsof | grep /gnu/store/.*bash
22710 @end example
22711
22712
22713 @node Modules de paquets
22714 @section Modules de paquets
22715
22716 From a programming viewpoint, the package definitions of the GNU
22717 distribution are provided by Guile modules in the @code{(gnu packages
22718 @dots{})} name space@footnote{Note that packages under the @code{(gnu
22719 packages @dots{})} module name space are not necessarily ``GNU packages''.
22720 This module naming scheme follows the usual Guile module naming convention:
22721 @code{gnu} means that these modules are distributed as part of the GNU
22722 system, and @code{packages} identifies modules that define packages.}
22723 (@pxref{Modules, Guile modules,, guile, GNU Guile Reference Manual}). For
22724 instance, the @code{(gnu packages emacs)} module exports a variable named
22725 @code{emacs}, which is bound to a @code{<package>} object (@pxref{Définition des paquets}).
22726
22727 The @code{(gnu packages @dots{})} module name space is automatically scanned
22728 for packages by the command-line tools. For instance, when running
22729 @code{guix package -i emacs}, all the @code{(gnu packages @dots{})} modules
22730 are scanned until one that exports a package object whose name is
22731 @code{emacs} is found. This package search facility is implemented in the
22732 @code{(gnu packages)} module.
22733
22734 @cindex personnalisation, des paquets
22735 @cindex package module search path
22736 Users can store package definitions in modules with different names---e.g.,
22737 @code{(my-packages emacs)}@footnote{Note that the file name and module name
22738 must match. For instance, the @code{(my-packages emacs)} module must be
22739 stored in a @file{my-packages/emacs.scm} file relative to the load path
22740 specified with @option{--load-path} or @code{GUIX_PACKAGE_PATH}.
22741 @xref{Modules and the File System,,, guile, GNU Guile Reference Manual}, for
22742 details.}. These package definitions will not be visible by default. Users
22743 can invoke commands such as @command{guix package} and @command{guix build}
22744 with the @code{-e} option so that they know where to find the package.
22745 Better yet, they can use the @code{-L} option of these commands to make
22746 those modules visible (@pxref{Invoquer guix build, @code{--load-path}}), or
22747 define the @code{GUIX_PACKAGE_PATH} environment variable. This environment
22748 variable makes it easy to extend or customize the distribution and is
22749 honored by all the user interfaces.
22750
22751 @defvr {Environment Variable} GUIX_PACKAGE_PATH
22752 This is a colon-separated list of directories to search for additional
22753 package modules. Directories listed in this variable take precedence over
22754 the own modules of the distribution.
22755 @end defvr
22756
22757 The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}: each
22758 package is built based solely on other packages in the distribution. The
22759 root of this dependency graph is a small set of @dfn{bootstrap binaries},
22760 provided by the @code{(gnu packages bootstrap)} module. For more
22761 information on bootstrapping, @pxref{Bootstrapping}.
22762
22763 @node Consignes d'empaquetage
22764 @section Consignes d'empaquetage
22765
22766 @cindex packages, creating
22767 The GNU distribution is nascent and may well lack some of your favorite
22768 packages. This section describes how you can help make the distribution
22769 grow. @xref{Contribuer}, for additional information on how you can help.
22770
22771 Free software packages are usually distributed in the form of @dfn{source
22772 code tarballs}---typically @file{tar.gz} files that contain all the source
22773 files. Adding a package to the distribution means essentially two things:
22774 adding a @dfn{recipe} that describes how to build the package, including a
22775 list of other packages required to build it, and adding @dfn{package
22776 metadata} along with that recipe, such as a description and licensing
22777 information.
22778
22779 In Guix all this information is embodied in @dfn{package definitions}.
22780 Package definitions provide a high-level view of the package. They are
22781 written using the syntax of the Scheme programming language; in fact, for
22782 each package we define a variable bound to the package definition, and
22783 export that variable from a module (@pxref{Modules de paquets}). However,
22784 in-depth Scheme knowledge is @emph{not} a prerequisite for creating
22785 packages. For more information on package definitions, @pxref{Définition des paquets}.
22786
22787 Once a package definition is in place, stored in a file in the Guix source
22788 tree, it can be tested using the @command{guix build} command
22789 (@pxref{Invoquer guix build}). For example, assuming the new package is
22790 called @code{gnew}, you may run this command from the Guix build tree
22791 (@pxref{Lancer Guix avant qu'il ne soit installé}):
22792
22793 @example
22794 ./pre-inst-env guix build gnew --keep-failed
22795 @end example
22796
22797 Using @code{--keep-failed} makes it easier to debug build failures since it
22798 provides access to the failed build tree. Another useful command-line
22799 option when debugging is @code{--log-file}, to access the build log.
22800
22801 If the package is unknown to the @command{guix} command, it may be that the
22802 source file contains a syntax error, or lacks a @code{define-public} clause
22803 to export the package variable. To figure it out, you may load the module
22804 from Guile to get more information about the actual error:
22805
22806 @example
22807 ./pre-inst-env guile -c '(use-modules (gnu packages gnew))'
22808 @end example
22809
22810 Once your package builds correctly, please send us a patch
22811 (@pxref{Contribuer}). Well, if you need help, we will be happy to help
22812 you too. Once the patch is committed in the Guix repository, the new
22813 package automatically gets built on the supported platforms by
22814 @url{http://hydra.gnu.org/jobset/gnu/master, our continuous integration
22815 system}.
22816
22817 @cindex substituter
22818 On peut obtenir la nouvelle définition du paquet simplement en lançant
22819 @command{guix pull} (@pxref{Invoquer guix pull}). Lorsque
22820 @code{hydra.gnu.org} a fini de construire le paquet, l'installation du
22821 paquet y télécharge automatiquement les binaires (@pxref{Substituts}). La
22822 seule intervention humaine requise est pendant la revue et l'application du
22823 correctif.
22824
22825
22826 @menu
22827 * Liberté logiciel:: Ce que la distribution peut contenir.
22828 * Conventions de nommage:: Qu'est-ce qu'un bon nom ?
22829 * Numéros de version:: Lorsque le nom n'est pas suffisant.
22830 * Synopsis et descriptions:: Aider les utilisateurs à trouver le bon
22831 paquet.
22832 * Modules python:: Un peu de comédie anglaise.
22833 * Modules perl:: Petites perles.
22834 * Paquets java:: Pause café.
22835 * Polices de caractères:: À fond les fontes.
22836 @end menu
22837
22838 @node Liberté logiciel
22839 @subsection Liberté logiciel
22840
22841 @c Adapted from http://www.gnu.org/philosophy/philosophy.html.
22842 @cindex free software
22843 The GNU operating system has been developed so that users can have freedom
22844 in their computing. GNU is @dfn{free software}, meaning that users have the
22845 @url{http://www.gnu.org/philosophy/free-sw.html,four essential freedoms}: to
22846 run the program, to study and change the program in source code form, to
22847 redistribute exact copies, and to distribute modified versions. Packages
22848 found in the GNU distribution provide only software that conveys these four
22849 freedoms.
22850
22851 In addition, the GNU distribution follow the
22852 @url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free
22853 software distribution guidelines}. Among other things, these guidelines
22854 reject non-free firmware, recommendations of non-free software, and discuss
22855 ways to deal with trademarks and patents.
22856
22857 Some otherwise free upstream package sources contain a small and optional
22858 subset that violates the above guidelines, for instance because this subset
22859 is itself non-free code. When that happens, the offending items are removed
22860 with appropriate patches or code snippets in the @code{origin} form of the
22861 package (@pxref{Définition des paquets}). This way, @code{guix build --source}
22862 returns the ``freed'' source rather than the unmodified upstream source.
22863
22864
22865 @node Conventions de nommage
22866 @subsection Conventions de nommage
22867
22868 @cindex package name
22869 A package has actually two names associated with it: First, there is the
22870 name of the @emph{Scheme variable}, the one following @code{define-public}.
22871 By this name, the package can be made known in the Scheme code, for instance
22872 as input to another package. Second, there is the string in the @code{name}
22873 field of a package definition. This name is used by package management
22874 commands such as @command{guix package} and @command{guix build}.
22875
22876 Both are usually the same and correspond to the lowercase conversion of the
22877 project name chosen upstream, with underscores replaced with hyphens. For
22878 instance, GNUnet is available as @code{gnunet}, and SDL_net as
22879 @code{sdl-net}.
22880
22881 We do not add @code{lib} prefixes for library packages, unless these are
22882 already part of the official project name. But @pxref{Modules python} and
22883 @ref{Modules perl} for special rules concerning modules for the Python and
22884 Perl languages.
22885
22886 Font package names are handled differently, @pxref{Polices de caractères}.
22887
22888
22889 @node Numéros de version
22890 @subsection Numéros de version
22891
22892 @cindex package version
22893 We usually package only the latest version of a given free software
22894 project. But sometimes, for instance for incompatible library versions, two
22895 (or more) versions of the same package are needed. These require different
22896 Scheme variable names. We use the name as defined in @ref{Conventions de nommage}
22897 for the most recent version; previous versions use the same name, suffixed
22898 by @code{-} and the smallest prefix of the version number that may
22899 distinguish the two versions.
22900
22901 The name inside the package definition is the same for all versions of a
22902 package and does not contain any version number.
22903
22904 For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as
22905 follows:
22906
22907 @example
22908 (define-public gtk+
22909 (package
22910 (name "gtk+")
22911 (version "3.9.12")
22912 ...))
22913 (define-public gtk+-2
22914 (package
22915 (name "gtk+")
22916 (version "2.24.20")
22917 ...))
22918 @end example
22919 If we also wanted GTK+ 3.8.2, this would be packaged as
22920 @example
22921 (define-public gtk+-3.8
22922 (package
22923 (name "gtk+")
22924 (version "3.8.2")
22925 ...))
22926 @end example
22927
22928 @c See <https://lists.gnu.org/archive/html/guix-devel/2016-01/msg00425.html>,
22929 @c for a discussion of what follows.
22930 @cindex version number, for VCS snapshots
22931 Occasionally, we package snapshots of upstream's version control system
22932 (VCS) instead of formal releases. This should remain exceptional, because
22933 it is up to upstream developers to clarify what the stable release is. Yet,
22934 it is sometimes necessary. So, what should we put in the @code{version}
22935 field?
22936
22937 Clearly, we need to make the commit identifier of the VCS snapshot visible
22938 in the version string, but we also need to make sure that the version string
22939 is monotonically increasing so that @command{guix package --upgrade} can
22940 determine which version is newer. Since commit identifiers, notably with
22941 Git, are not monotonically increasing, we add a revision number that we
22942 increase each time we upgrade to a newer snapshot. The resulting version
22943 string looks like this:
22944
22945 @example
22946 2.0.11-3.cabba9e
22947 ^ ^ ^
22948 | | `-- upstream commit ID
22949 | |
22950 | `--- Guix package revision
22951 |
22952 latest upstream version
22953 @end example
22954
22955 It is a good idea to strip commit identifiers in the @code{version} field
22956 to, say, 7 digits. It avoids an aesthetic annoyance (assuming aesthetics
22957 have a role to play here) as well as problems related to OS limits such as
22958 the maximum shebang length (127 bytes for the Linux kernel.) It is best to
22959 use the full commit identifiers in @code{origin}s, though, to avoid
22960 ambiguities. A typical package definition may look like this:
22961
22962 @example
22963 (define my-package
22964 (let ((commit "c3f29bc928d5900971f65965feaae59e1272a3f7")
22965 (revision "1")) ;révision du paquet Guix
22966 (package
22967 (version (git-version "0.9" revision commit))
22968 (source (origin
22969 (method git-fetch)
22970 (uri (git-reference
22971 (url "git://example.org/my-package.git")
22972 (commit commit)))
22973 (sha256 (base32 "1mbikn@dots{}"))
22974 (file-name (git-file-name name version))))
22975 ;; @dots{}
22976 )))
22977 @end example
22978
22979 @node Synopsis et descriptions
22980 @subsection Synopsis et descriptions
22981
22982 @cindex package description
22983 @cindex package synopsis
22984 As we have seen before, each package in GNU@tie{}Guix includes a synopsis
22985 and a description (@pxref{Définition des paquets}). Synopses and descriptions
22986 are important: They are what @command{guix package --search} searches, and a
22987 crucial piece of information to help users determine whether a given package
22988 suits their needs. Consequently, packagers should pay attention to what
22989 goes into them.
22990
22991 Synopses must start with a capital letter and must not end with a period.
22992 They must not start with ``a'' or ``the'', which usually does not bring
22993 anything; for instance, prefer ``File-frobbing tool'' over ``A tool that
22994 frobs files''. The synopsis should say what the package is---e.g., ``Core
22995 GNU utilities (file, text, shell)''---or what it is used for---e.g., the
22996 synopsis for GNU@tie{}grep is ``Print lines matching a pattern''.
22997
22998 Keep in mind that the synopsis must be meaningful for a very wide audience.
22999 For example, ``Manipulate alignments in the SAM format'' might make sense
23000 for a seasoned bioinformatics researcher, but might be fairly unhelpful or
23001 even misleading to a non-specialized audience. It is a good idea to come up
23002 with a synopsis that gives an idea of the application domain of the
23003 package. In this example, this might give something like ``Manipulate
23004 nucleotide sequence alignments'', which hopefully gives the user a better
23005 idea of whether this is what they are looking for.
23006
23007 Descriptions should take between five and ten lines. Use full sentences,
23008 and avoid using acronyms without first introducing them. Please avoid
23009 marketing phrases such as ``world-leading'', ``industrial-strength'', and
23010 ``next-generation'', and avoid superlatives like ``the most
23011 advanced''---they are not helpful to users looking for a package and may
23012 even sound suspicious. Instead, try to be factual, mentioning use cases and
23013 features.
23014
23015 @cindex Texinfo markup, in package descriptions
23016 Descriptions can include Texinfo markup, which is useful to introduce
23017 ornaments such as @code{@@code} or @code{@@dfn}, bullet lists, or hyperlinks
23018 (@pxref{Overview,,, texinfo, GNU Texinfo}). However you should be careful
23019 when using some characters for example @samp{@@} and curly braces which are
23020 the basic special characters in Texinfo (@pxref{Special Characters,,,
23021 texinfo, GNU Texinfo}). User interfaces such as @command{guix package
23022 --show} take care of rendering it appropriately.
23023
23024 Synopses and descriptions are translated by volunteers
23025 @uref{http://translationproject.org/domain/guix-packages.html, at the
23026 Translation Project} so that as many users as possible can read them in
23027 their native language. User interfaces search them and display them in the
23028 language specified by the current locale.
23029
23030 To allow @command{xgettext} to extract them as translatable strings,
23031 synopses and descriptions @emph{must be literal strings}. This means that
23032 you cannot use @code{string-append} or @code{format} to construct these
23033 strings:
23034
23035 @lisp
23036 (package
23037 ;; @dots{}
23038 (synopsis "This is translatable")
23039 (description (string-append "This is " "*not*" " translatable.")))
23040 @end lisp
23041
23042 Translation is a lot of work so, as a packager, please pay even more
23043 attention to your synopses and descriptions as every change may entail
23044 additional work for translators. In order to help them, it is possible to
23045 make recommendations or instructions visible to them by inserting special
23046 comments like this (@pxref{xgettext Invocation,,, gettext, GNU Gettext}):
23047
23048 @example
23049 ;; TRANSLATORS: "X11 resize-and-rotate" should not be translated.
23050 (description "ARandR is designed to provide a simple visual front end
23051 for the X11 resize-and-rotate (RandR) extension. @dots{}")
23052 @end example
23053
23054
23055 @node Modules python
23056 @subsection Modules python
23057
23058 @cindex python
23059 We currently package Python 2 and Python 3, under the Scheme variable names
23060 @code{python-2} and @code{python} as explained in @ref{Numéros de version}. To
23061 avoid confusion and naming clashes with other programming languages, it
23062 seems desirable that the name of a package for a Python module contains the
23063 word @code{python}.
23064
23065 Some modules are compatible with only one version of Python, others with
23066 both. If the package Foo compiles only with Python 3, we name it
23067 @code{python-foo}; if it compiles only with Python 2, we name it
23068 @code{python2-foo}. If it is compatible with both versions, we create two
23069 packages with the corresponding names.
23070
23071 If a project already contains the word @code{python}, we drop this; for
23072 instance, the module python-dateutil is packaged under the names
23073 @code{python-dateutil} and @code{python2-dateutil}. If the project name
23074 starts with @code{py} (e.g. @code{pytz}), we keep it and prefix it as
23075 described above.
23076
23077 @subsubsection Specifying Dependencies
23078 @cindex inputs, for Python packages
23079
23080 Dependency information for Python packages is usually available in the
23081 package source tree, with varying degrees of accuracy: in the
23082 @file{setup.py} file, in @file{requirements.txt}, or in @file{tox.ini}.
23083
23084 Your mission, when writing a recipe for a Python package, is to map these
23085 dependencies to the appropriate type of ``input'' (@pxref{Référence de paquet,
23086 inputs}). Although the @code{pypi} importer normally does a good job
23087 (@pxref{Invoquer guix import}), you may want to check the following check
23088 list to determine which dependency goes where.
23089
23090 @itemize
23091
23092 @item
23093 We currently package Python 2 with @code{setuptools} and @code{pip}
23094 installed like Python 3.4 has per default. Thus you don't need to specify
23095 either of these as an input. @command{guix lint} will warn you if you do.
23096
23097 @item
23098 Python dependencies required at run time go into @code{propagated-inputs}.
23099 They are typically defined with the @code{install_requires} keyword in
23100 @file{setup.py}, or in the @file{requirements.txt} file.
23101
23102 @item
23103 Python packages required only at build time---e.g., those listed with the
23104 @code{setup_requires} keyword in @file{setup.py}---or only for
23105 testing---e.g., those in @code{tests_require}---go into
23106 @code{native-inputs}. The rationale is that (1) they do not need to be
23107 propagated because they are not needed at run time, and (2) in a
23108 cross-compilation context, it's the ``native'' input that we'd want.
23109
23110 Examples are the @code{pytest}, @code{mock}, and @code{nose} test
23111 frameworks. Of course if any of these packages is also required at
23112 run-time, it needs to go to @code{propagated-inputs}.
23113
23114 @item
23115 Anything that does not fall in the previous categories goes to
23116 @code{inputs}, for example programs or C libraries required for building
23117 Python packages containing C extensions.
23118
23119 @item
23120 If a Python package has optional dependencies (@code{extras_require}), it is
23121 up to you to decide whether to add them or not, based on their
23122 usefulness/overhead ratio (@pxref{Envoyer des correctifs, @command{guix size}}).
23123
23124 @end itemize
23125
23126
23127 @node Modules perl
23128 @subsection Modules perl
23129
23130 @cindex perl
23131 Perl programs standing for themselves are named as any other package, using
23132 the lowercase upstream name. For Perl packages containing a single class,
23133 we use the lowercase class name, replace all occurrences of @code{::} by
23134 dashes and prepend the prefix @code{perl-}. So the class @code{XML::Parser}
23135 becomes @code{perl-xml-parser}. Modules containing several classes keep
23136 their lowercase upstream name and are also prepended by @code{perl-}. Such
23137 modules tend to have the word @code{perl} somewhere in their name, which
23138 gets dropped in favor of the prefix. For instance, @code{libwww-perl}
23139 becomes @code{perl-libwww}.
23140
23141
23142 @node Paquets java
23143 @subsection Paquets java
23144
23145 @cindex java
23146 Java programs standing for themselves are named as any other package, using
23147 the lowercase upstream name.
23148
23149 To avoid confusion and naming clashes with other programming languages, it
23150 is desirable that the name of a package for a Java package is prefixed with
23151 @code{java-}. If a project already contains the word @code{java}, we drop
23152 this; for instance, the package @code{ngsjava} is packaged under the name
23153 @code{java-ngs}.
23154
23155 For Java packages containing a single class or a small class hierarchy, we
23156 use the lowercase class name, replace all occurrences of @code{.} by dashes
23157 and prepend the prefix @code{java-}. So the class @code{apache.commons.cli}
23158 becomes package @code{java-apache-commons-cli}.
23159
23160
23161 @node Polices de caractères
23162 @subsection Polices de caractères
23163
23164 @cindex polices
23165 For fonts that are in general not installed by a user for typesetting
23166 purposes, or that are distributed as part of a larger software package, we
23167 rely on the general packaging rules for software; for instance, this applies
23168 to the fonts delivered as part of the X.Org system or fonts that are part of
23169 TeX Live.
23170
23171 To make it easier for a user to search for fonts, names for other packages
23172 containing only fonts are constructed as follows, independently of the
23173 upstream package name.
23174
23175 The name of a package containing only one font family starts with
23176 @code{font-}; it is followed by the foundry name and a dash @code{-} if the
23177 foundry is known, and the font family name, in which spaces are replaced by
23178 dashes (and as usual, all upper case letters are transformed to lower
23179 case). For example, the Gentium font family by SIL is packaged under the
23180 name @code{font-sil-gentium}.
23181
23182 For a package containing several font families, the name of the collection
23183 is used in the place of the font family name. For instance, the Liberation
23184 fonts consist of three families, Liberation Sans, Liberation Serif and
23185 Liberation Mono. These could be packaged separately under the names
23186 @code{font-liberation-sans} and so on; but as they are distributed together
23187 under a common name, we prefer to package them together as
23188 @code{font-liberation}.
23189
23190 In the case where several formats of the same font family or font collection
23191 are packaged separately, a short form of the format, prepended by a dash, is
23192 added to the package name. We use @code{-ttf} for TrueType fonts,
23193 @code{-otf} for OpenType fonts and @code{-type1} for PostScript Type 1
23194 fonts.
23195
23196
23197
23198 @node Bootstrapping
23199 @section Bootstrapping
23200
23201 @c Adapted from the ELS 2013 paper.
23202
23203 @cindex bootstrapping
23204
23205 Bootstrapping in our context refers to how the distribution gets built
23206 ``from nothing''. Remember that the build environment of a derivation
23207 contains nothing but its declared inputs (@pxref{Introduction}). So there's
23208 an obvious chicken-and-egg problem: how does the first package get built?
23209 How does the first compiler get compiled? Note that this is a question of
23210 interest only to the curious hacker, not to the regular user, so you can
23211 shamelessly skip this section if you consider yourself a ``regular user''.
23212
23213 @cindex bootstrap binaries
23214 The GNU system is primarily made of C code, with libc at its core. The GNU
23215 build system itself assumes the availability of a Bourne shell and
23216 command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
23217 `grep'. Furthermore, build programs---programs that run @code{./configure},
23218 @code{make}, etc.---are written in Guile Scheme (@pxref{Dérivations}).
23219 Consequently, to be able to build anything at all, from scratch, Guix relies
23220 on pre-built binaries of Guile, GCC, Binutils, libc, and the other packages
23221 mentioned above---the @dfn{bootstrap binaries}.
23222
23223 These bootstrap binaries are ``taken for granted'', though we can also
23224 re-create them if needed (more on that later).
23225
23226 @unnumberedsubsec Preparing to Use the Bootstrap Binaries
23227
23228 @c As of Emacs 24.3, Info-mode displays the image, but since it's a
23229 @c large image, it's hard to scroll. Oh well.
23230 @image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap
23231 derivations}
23232
23233 The figure above shows the very beginning of the dependency graph of the
23234 distribution, corresponding to the package definitions of the @code{(gnu
23235 packages bootstrap)} module. A similar figure can be generated with
23236 @command{guix graph} (@pxref{Invoquer guix graph}), along the lines of:
23237
23238 @example
23239 guix graph -t derivation \
23240 -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
23241 | dot -Tps > t.ps
23242 @end example
23243
23244 At this level of detail, things are slightly complex. First, Guile itself
23245 consists of an ELF executable, along with many source and compiled Scheme
23246 files that are dynamically loaded when it runs. This gets stored in the
23247 @file{guile-2.0.7.tar.xz} tarball shown in this graph. This tarball is part
23248 of Guix's ``source'' distribution, and gets inserted into the store with
23249 @code{add-to-store} (@pxref{Le dépôt}).
23250
23251 But how do we write a derivation that unpacks this tarball and adds it to
23252 the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
23253 derivation---the first one that gets built---uses @code{bash} as its
23254 builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
23255 @code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar}, @file{xz},
23256 and @file{mkdir} are statically-linked binaries, also part of the Guix
23257 source distribution, whose sole purpose is to allow the Guile tarball to be
23258 unpacked.
23259
23260 Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning Guile
23261 that can be used to run subsequent build programs. Its first task is to
23262 download tarballs containing the other pre-built binaries---this is what the
23263 @code{.tar.xz.drv} derivations do. Guix modules such as
23264 @code{ftp-client.scm} are used for this purpose. The
23265 @code{module-import.drv} derivations import those modules in a directory in
23266 the store, using the original layout. The @code{module-import-compiled.drv}
23267 derivations compile those modules, and write them in an output directory
23268 with the right layout. This corresponds to the @code{#:modules} argument of
23269 @code{build-expression->derivation} (@pxref{Dérivations}).
23270
23271 Finally, the various tarballs are unpacked by the derivations
23272 @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv}, etc., at which
23273 point we have a working C tool chain.
23274
23275
23276 @unnumberedsubsec Building the Build Tools
23277
23278 Bootstrapping is complete when we have a full tool chain that does not
23279 depend on the pre-built bootstrap tools discussed above. This no-dependency
23280 requirement is verified by checking whether the files of the final tool
23281 chain contain references to the @file{/gnu/store} directories of the
23282 bootstrap inputs. The process that leads to this ``final'' tool chain is
23283 described by the package definitions found in the @code{(gnu packages
23284 commencement)} module.
23285
23286 The @command{guix graph} command allows us to ``zoom out'' compared to the
23287 graph above, by looking at the level of package objects instead of
23288 individual derivations---remember that a package may translate to several
23289 derivations, typically one derivation to download its source, one to build
23290 the Guile modules it needs, and one to actually build the package from
23291 source. The command:
23292
23293 @example
23294 guix graph -t bag \
23295 -e '(@@@@ (gnu packages commencement)
23296 glibc-final-with-bootstrap-bash)' | dot -Tps > t.ps
23297 @end example
23298
23299 @noindent
23300 produces the dependency graph leading to the ``final'' C
23301 library@footnote{You may notice the @code{glibc-intermediate} label,
23302 suggesting that it is not @emph{quite} final, but as a good approximation,
23303 we will consider it final.}, depicted below.
23304
23305 @image{images/bootstrap-packages,6in,,Graphe de dépendance des premiers
23306 paquets}
23307
23308 @c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
23309 The first tool that gets built with the bootstrap binaries is
23310 GNU@tie{}Make---noted @code{make-boot0} above---which is a prerequisite for
23311 all the following packages. From there Findutils and Diffutils get built.
23312
23313 Then come the first-stage Binutils and GCC, built as pseudo cross
23314 tools---i.e., with @code{--target} equal to @code{--host}. They are used to
23315 build libc. Thanks to this cross-build trick, this libc is guaranteed not
23316 to hold any reference to the initial tool chain.
23317
23318 From there the final Binutils and GCC (not shown above) are built. GCC uses
23319 @code{ld} from the final Binutils, and links programs against the just-built
23320 libc. This tool chain is used to build the other packages used by Guix and
23321 by the GNU Build System: Guile, Bash, Coreutils, etc.
23322
23323 And voilà! At this point we have the complete set of build tools that the
23324 GNU Build System expects. These are in the @code{%final-inputs} variable of
23325 the @code{(gnu packages commencement)} module, and are implicitly used by
23326 any package that uses @code{gnu-build-system} (@pxref{Systèmes de construction,
23327 @code{gnu-build-system}}).
23328
23329
23330 @unnumberedsubsec Building the Bootstrap Binaries
23331
23332 @cindex bootstrap binaries
23333 Because the final tool chain does not depend on the bootstrap binaries,
23334 those rarely need to be updated. Nevertheless, it is useful to have an
23335 automated way to produce them, should an update occur, and this is what the
23336 @code{(gnu packages make-bootstrap)} module provides.
23337
23338 The following command builds the tarballs containing the bootstrap binaries
23339 (Guile, Binutils, GCC, libc, and a tarball containing a mixture of Coreutils
23340 and other basic command-line tools):
23341
23342 @example
23343 guix build bootstrap-tarballs
23344 @end example
23345
23346 The generated tarballs are those that should be referred to in the
23347 @code{(gnu packages bootstrap)} module mentioned at the beginning of this
23348 section.
23349
23350 Still here? Then perhaps by now you've started to wonder: when do we reach a
23351 fixed point? That is an interesting question! The answer is unknown, but if
23352 you would like to investigate further (and have significant computational
23353 and storage resources to do so), then let us know.
23354
23355 @unnumberedsubsec Reducing the Set of Bootstrap Binaries
23356
23357 Our bootstrap binaries currently include GCC, Guile, etc. That's a lot of
23358 binary code! Why is that a problem? It's a problem because these big chunks
23359 of binary code are practically non-auditable, which makes it hard to
23360 establish what source code produced them. Every unauditable binary also
23361 leaves us vulnerable to compiler backdoors as described by Ken Thompson in
23362 the 1984 paper @emph{Reflections on Trusting Trust}.
23363
23364 This is mitigated by the fact that our bootstrap binaries were generated
23365 from an earlier Guix revision. Nevertheless it lacks the level of
23366 transparency that we get in the rest of the package dependency graph, where
23367 Guix always gives us a source-to-binary mapping. Thus, our goal is to
23368 reduce the set of bootstrap binaries to the bare minimum.
23369
23370 The @uref{http://bootstrappable.org, Bootstrappable.org web site} lists
23371 on-going projects to do that. One of these is about replacing the bootstrap
23372 GCC with a sequence of assemblers, interpreters, and compilers of increasing
23373 complexity, which could be built from source starting from a simple and
23374 auditable assembler. Your help is welcome!
23375
23376
23377 @node Porter
23378 @section Porter vers une nouvelle plateforme
23379
23380 As discussed above, the GNU distribution is self-contained, and
23381 self-containment is achieved by relying on pre-built ``bootstrap binaries''
23382 (@pxref{Bootstrapping}). These binaries are specific to an operating system
23383 kernel, CPU architecture, and application binary interface (ABI). Thus, to
23384 port the distribution to a platform that is not yet supported, one must
23385 build those bootstrap binaries, and update the @code{(gnu packages
23386 bootstrap)} module to use them on that platform.
23387
23388 Fortunately, Guix can @emph{cross compile} those bootstrap binaries. When
23389 everything goes well, and assuming the GNU tool chain supports the target
23390 platform, this can be as simple as running a command like this one:
23391
23392 @example
23393 guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
23394 @end example
23395
23396 For this to work, the @code{glibc-dynamic-linker} procedure in @code{(gnu
23397 packages bootstrap)} must be augmented to return the right file name for
23398 libc's dynamic linker on that platform; likewise,
23399 @code{system->linux-architecture} in @code{(gnu packages linux)} must be
23400 taught about the new platform.
23401
23402 Once these are built, the @code{(gnu packages bootstrap)} module needs to be
23403 updated to refer to these binaries on the target platform. That is, the
23404 hashes and URLs of the bootstrap tarballs for the new platform must be added
23405 alongside those of the currently supported platforms. The bootstrap Guile
23406 tarball is treated specially: it is expected to be available locally, and
23407 @file{gnu/local.mk} has rules do download it for the supported
23408 architectures; a rule for the new platform must be added as well.
23409
23410 In practice, there may be some complications. First, it may be that the
23411 extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
23412 above) is not recognized by all the GNU tools. Typically, glibc recognizes
23413 some of these, whereas GCC uses an extra @code{--with-abi} configure flag
23414 (see @code{gcc.scm} for examples of how to handle this). Second, some of
23415 the required packages could fail to build for that platform. Lastly, the
23416 generated binaries could be broken for some reason.
23417
23418 @c *********************************************************************
23419 @include contributing.fr.texi
23420
23421 @c *********************************************************************
23422 @node Remerciements
23423 @chapter Remerciements
23424
23425 Guix se base sur le @uref{http://nixos.org/nix/, gestionnaire de paquets
23426 Nix} conçu et implémenté par Eelco Dolstra, avec des constributions d'autres
23427 personnes (voir le fichier @file{nix/AUTHORS} dans Guix). Nix a inventé la
23428 gestion de paquet fonctionnelle et promu des fonctionnalités sans précédents
23429 comme les mises à jour de paquets transactionnelles et les retours en
23430 arrière, les profils par utilisateurs et les processus de constructions
23431 transparents pour les références. Sans ce travail, Guix n'existerait pas.
23432
23433 Les distributions logicielles basées sur Nix, Nixpkgs et NixOS, ont aussi
23434 été une inspiration pour Guix.
23435
23436 GNU@tie{}Guix lui-même est un travail collectif avec des contributions d'un
23437 grand nombre de personnes. Voyez le fichier @file{AUTHORS} dans Guix pour
23438 plus d'information sur ces personnes de qualité. Le fichier @file{THANKS}
23439 liste les personnes qui ont aidé en rapportant des bogues, en prenant soin
23440 de l'infrastructure, en fournissant des images et des thèmes, en faisant des
23441 suggestions et bien plus. Merci !
23442
23443
23444 @c *********************************************************************
23445 @node La licence GNU Free Documentation
23446 @appendix La licence GNU Free Documentation
23447 @cindex license, GNU Free Documentation License
23448 @include fdl-1.3.texi
23449
23450 @c *********************************************************************
23451 @node Index des concepts
23452 @unnumbered Index des concepts
23453 @printindex cp
23454
23455 @node Index de programmation
23456 @unnumbered Index de programmation
23457 @syncodeindex tp fn
23458 @syncodeindex vr fn
23459 @printindex fn
23460
23461 @bye
23462
23463 @c Local Variables:
23464 @c ispell-local-dictionary: "american";
23465 @c End: