maint: Provide the configuration file in the VM image.
[jackhill/guix/guix.git] / doc / guix.texi
1 \input texinfo
2 @c -*-texinfo-*-
3
4 @c %**start of header
5 @setfilename guix.info
6 @documentencoding UTF-8
7 @settitle GNU Guix Reference Manual
8 @c %**end of header
9
10 @include version.texi
11
12 @c Identifier of the OpenPGP key used to sign tarballs and such.
13 @set OPENPGP-SIGNING-KEY-ID 3CE464558A84FDC69DB40CFB090B11993D9AEBB5
14 @set OPENPGP-SIGNING-KEY-URL https://sv.gnu.org/people/viewgpg.php?user_id=15145
15
16 @c Base URL for downloads.
17 @set BASE-URL https://ftp.gnu.org/gnu/guix
18
19 @c The official substitute server used by default.
20 @set SUBSTITUTE-SERVER ci.guix.gnu.org
21 @set SUBSTITUTE-URL https://@value{SUBSTITUTE-SERVER}
22
23 @copying
24 Copyright @copyright{} 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès@*
25 Copyright @copyright{} 2013, 2014, 2016 Andreas Enge@*
26 Copyright @copyright{} 2013 Nikita Karetnikov@*
27 Copyright @copyright{} 2014, 2015, 2016 Alex Kost@*
28 Copyright @copyright{} 2015, 2016 Mathieu Lirzin@*
29 Copyright @copyright{} 2014 Pierre-Antoine Rault@*
30 Copyright @copyright{} 2015 Taylan Ulrich Bayırlı/Kammer@*
31 Copyright @copyright{} 2015, 2016, 2017, 2019, 2020 Leo Famulari@*
32 Copyright @copyright{} 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus@*
33 Copyright @copyright{} 2016 Ben Woodcroft@*
34 Copyright @copyright{} 2016, 2017, 2018 Chris Marusich@*
35 Copyright @copyright{} 2016, 2017, 2018, 2019, 2020 Efraim Flashner@*
36 Copyright @copyright{} 2016 John Darrington@*
37 Copyright @copyright{} 2016, 2017 ng0@*
38 Copyright @copyright{} 2016, 2017, 2018, 2019 Jan Nieuwenhuizen@*
39 Copyright @copyright{} 2016 Julien Lepiller@*
40 Copyright @copyright{} 2016 Alex ter Weele@*
41 Copyright @copyright{} 2016, 2017, 2018, 2019 Christopher Baines@*
42 Copyright @copyright{} 2017, 2018, 2019 Clément Lassieur@*
43 Copyright @copyright{} 2017, 2018 Mathieu Othacehe@*
44 Copyright @copyright{} 2017 Federico Beffa@*
45 Copyright @copyright{} 2017, 2018 Carlo Zancanaro@*
46 Copyright @copyright{} 2017 Thomas Danckaert@*
47 Copyright @copyright{} 2017 humanitiesNerd@*
48 Copyright @copyright{} 2017 Christopher Allan Webber@*
49 Copyright @copyright{} 2017, 2018, 2019, 2020 Marius Bakke@*
50 Copyright @copyright{} 2017, 2019, 2020 Hartmut Goebel@*
51 Copyright @copyright{} 2017, 2019, 2020 Maxim Cournoyer@*
52 Copyright @copyright{} 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice@*
53 Copyright @copyright{} 2017 George Clemmer@*
54 Copyright @copyright{} 2017 Andy Wingo@*
55 Copyright @copyright{} 2017, 2018, 2019 Arun Isaac@*
56 Copyright @copyright{} 2017 nee@*
57 Copyright @copyright{} 2018 Rutger Helling@*
58 Copyright @copyright{} 2018 Oleg Pykhalov@*
59 Copyright @copyright{} 2018 Mike Gerwitz@*
60 Copyright @copyright{} 2018 Pierre-Antoine Rouby@*
61 Copyright @copyright{} 2018, 2019 Gábor Boskovits@*
62 Copyright @copyright{} 2018, 2019 Florian Pelz@*
63 Copyright @copyright{} 2018 Laura Lazzati@*
64 Copyright @copyright{} 2018 Alex Vong@*
65 Copyright @copyright{} 2019 Josh Holland@*
66 Copyright @copyright{} 2019 Diego Nicola Barbato@*
67 Copyright @copyright{} 2019 Ivan Petkov@*
68 Copyright @copyright{} 2019 Jakob L. Kreuze@*
69 Copyright @copyright{} 2019 Kyle Andrews@*
70 Copyright @copyright{} 2019 Alex Griffin@*
71 Copyright @copyright{} 2019 Guillaume Le Vaillant@*
72 Copyright @copyright{} 2020 Leo Prikler@*
73 Copyright @copyright{} 2019, 2020 Simon Tournier@*
74 Copyright @copyright{} 2020 Wiktor Żelazny@*
75 Copyright @copyright{} 2020 Damien Cassou@*
76 Copyright @copyright{} 2020 Jakub Kądziołka@*
77 Copyright @copyright{} 2020 Jack Hill@*
78 Copyright @copyright{} 2020 Naga Malleswari@*
79 Copyright @copyright{} 2020 Brice Waegeneire@*
80 Copyright @copyright{} 2020 R Veera Kumar@*
81
82 Permission is granted to copy, distribute and/or modify this document
83 under the terms of the GNU Free Documentation License, Version 1.3 or
84 any later version published by the Free Software Foundation; with no
85 Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
86 copy of the license is included in the section entitled ``GNU Free
87 Documentation License''.
88 @end copying
89
90 @dircategory System administration
91 @direntry
92 * Guix: (guix). Manage installed software and system configuration.
93 * guix package: (guix)Invoking guix package. Installing, removing, and upgrading packages.
94 * guix gc: (guix)Invoking guix gc. Reclaiming unused disk space.
95 * guix pull: (guix)Invoking guix pull. Update the list of available packages.
96 * guix system: (guix)Invoking guix system. Manage the operating system configuration.
97 * guix deploy: (guix)Invoking guix deploy. Manage operating system configurations for remote hosts.
98 @end direntry
99
100 @dircategory Software development
101 @direntry
102 * guix environment: (guix)Invoking guix environment. Building development environments with Guix.
103 * guix build: (guix)Invoking guix build. Building packages.
104 * guix pack: (guix)Invoking guix pack. Creating binary bundles.
105 @end direntry
106
107 @titlepage
108 @title GNU Guix Reference Manual
109 @subtitle Using the GNU Guix Functional Package Manager
110 @author The GNU Guix Developers
111
112 @page
113 @vskip 0pt plus 1filll
114 Edition @value{EDITION} @*
115 @value{UPDATED} @*
116
117 @insertcopying
118 @end titlepage
119
120 @contents
121
122 @c *********************************************************************
123 @node Top
124 @top GNU Guix
125
126 This document describes GNU Guix version @value{VERSION}, a functional
127 package management tool written for the GNU system.
128
129 @c TRANSLATORS: You can replace the following paragraph with information on
130 @c how to join your own translation team and how to report issues with the
131 @c translation.
132 This manual is also available in Simplified Chinese (@pxref{Top,,, guix.zh_CN,
133 GNU Guix参考手册}), French (@pxref{Top,,, guix.fr, Manuel de référence de GNU
134 Guix}), German (@pxref{Top,,, guix.de, Referenzhandbuch zu GNU Guix}),
135 Spanish (@pxref{Top,,, guix.es, Manual de referencia de GNU Guix}), and
136 Russian (@pxref{Top,,, guix.ru, Руководство GNU Guix}). If you
137 would like to translate it in your native language, consider joining the
138 @uref{https://translationproject.org/domain/guix-manual.html, Translation
139 Project}.
140
141 @menu
142 * Introduction:: What is Guix about?
143 * Installation:: Installing Guix.
144 * System Installation:: Installing the whole operating system.
145 * Package Management:: Package installation, upgrade, etc.
146 * Development:: Guix-aided software development.
147 * Programming Interface:: Using Guix in Scheme.
148 * Utilities:: Package management commands.
149 * System Configuration:: Configuring the operating system.
150 * Documentation:: Browsing software user manuals.
151 * Installing Debugging Files:: Feeding the debugger.
152 * Security Updates:: Deploying security fixes quickly.
153 * Bootstrapping:: GNU/Linux built from scratch.
154 * Porting:: Targeting another platform or kernel.
155 * Contributing:: Your help needed!
156
157 * Acknowledgments:: Thanks!
158 * GNU Free Documentation License:: The license of this manual.
159 * Concept Index:: Concepts.
160 * Programming Index:: Data types, functions, and variables.
161
162 @detailmenu
163 --- The Detailed Node Listing ---
164
165 Introduction
166
167 * Managing Software the Guix Way:: What's special.
168 * GNU Distribution:: The packages and tools.
169
170 Installation
171
172 * Binary Installation:: Getting Guix running in no time!
173 * Requirements:: Software needed to build and run Guix.
174 * Running the Test Suite:: Testing Guix.
175 * Setting Up the Daemon:: Preparing the build daemon's environment.
176 * Invoking guix-daemon:: Running the build daemon.
177 * Application Setup:: Application-specific setup.
178
179 Setting Up the Daemon
180
181 * Build Environment Setup:: Preparing the isolated build environment.
182 * Daemon Offload Setup:: Offloading builds to remote machines.
183 * SELinux Support:: Using an SELinux policy for the daemon.
184
185 System Installation
186
187 * Limitations:: What you can expect.
188 * Hardware Considerations:: Supported hardware.
189 * USB Stick and DVD Installation:: Preparing the installation medium.
190 * Preparing for Installation:: Networking, partitioning, etc.
191 * Guided Graphical Installation:: Easy graphical installation.
192 * Manual Installation:: Manual installation for wizards.
193 * After System Installation:: When installation succeeded.
194 * Installing Guix in a VM:: Guix System playground.
195 * Building the Installation Image:: How this comes to be.
196
197 Manual Installation
198
199 * Keyboard Layout and Networking and Partitioning:: Initial setup.
200 * Proceeding with the Installation:: Installing.
201
202 Package Management
203
204 * Features:: How Guix will make your life brighter.
205 * Invoking guix package:: Package installation, removal, etc.
206 * Substitutes:: Downloading pre-built binaries.
207 * Packages with Multiple Outputs:: Single source package, multiple outputs.
208 * Invoking guix gc:: Running the garbage collector.
209 * Invoking guix pull:: Fetching the latest Guix and distribution.
210 * Channels:: Customizing the package collection.
211 * Invoking guix time-machine:: Running an older revision of Guix.
212 * Inferiors:: Interacting with another revision of Guix.
213 * Invoking guix describe:: Display information about your Guix revision.
214 * Invoking guix archive:: Exporting and importing store files.
215
216 Substitutes
217
218 * Official Substitute Server:: One particular source of substitutes.
219 * Substitute Server Authorization:: How to enable or disable substitutes.
220 * Substitute Authentication:: How Guix verifies substitutes.
221 * Proxy Settings:: How to get substitutes via proxy.
222 * Substitution Failure:: What happens when substitution fails.
223 * On Trusting Binaries:: How can you trust that binary blob?
224
225 Development
226
227 * Invoking guix environment:: Setting up development environments.
228 * Invoking guix pack:: Creating software bundles.
229
230 Programming Interface
231
232 * Package Modules:: Packages from the programmer's viewpoint.
233 * Defining Packages:: Defining new packages.
234 * Build Systems:: Specifying how packages are built.
235 * The Store:: Manipulating the package store.
236 * Derivations:: Low-level interface to package derivations.
237 * The Store Monad:: Purely functional interface to the store.
238 * G-Expressions:: Manipulating build expressions.
239 * Invoking guix repl:: Fiddling with Guix interactively.
240
241 Defining Packages
242
243 * package Reference:: The package data type.
244 * origin Reference:: The origin data type.
245
246 Utilities
247
248 * Invoking guix build:: Building packages from the command line.
249 * Invoking guix edit:: Editing package definitions.
250 * Invoking guix download:: Downloading a file and printing its hash.
251 * Invoking guix hash:: Computing the cryptographic hash of a file.
252 * Invoking guix import:: Importing package definitions.
253 * Invoking guix refresh:: Updating package definitions.
254 * Invoking guix lint:: Finding errors in package definitions.
255 * Invoking guix size:: Profiling disk usage.
256 * Invoking guix graph:: Visualizing the graph of packages.
257 * Invoking guix publish:: Sharing substitutes.
258 * Invoking guix challenge:: Challenging substitute servers.
259 * Invoking guix copy:: Copying to and from a remote store.
260 * Invoking guix container:: Process isolation.
261 * Invoking guix weather:: Assessing substitute availability.
262 * Invoking guix processes:: Listing client processes.
263
264 Invoking @command{guix build}
265
266 * Common Build Options:: Build options for most commands.
267 * Package Transformation Options:: Creating variants of packages.
268 * Additional Build Options:: Options specific to 'guix build'.
269 * Debugging Build Failures:: Real life packaging experience.
270
271 System Configuration
272
273 * Using the Configuration System:: Customizing your GNU system.
274 * operating-system Reference:: Detail of operating-system declarations.
275 * File Systems:: Configuring file system mounts.
276 * Mapped Devices:: Block device extra processing.
277 * User Accounts:: Specifying user accounts.
278 * Keyboard Layout:: How the system interprets key strokes.
279 * Locales:: Language and cultural convention settings.
280 * Services:: Specifying system services.
281 * Setuid Programs:: Programs running with root privileges.
282 * X.509 Certificates:: Authenticating HTTPS servers.
283 * Name Service Switch:: Configuring libc's name service switch.
284 * Initial RAM Disk:: Linux-Libre bootstrapping.
285 * Bootloader Configuration:: Configuring the boot loader.
286 * Invoking guix system:: Instantiating a system configuration.
287 * Invoking guix deploy:: Deploying a system configuration to a remote host.
288 * Running Guix in a VM:: How to run Guix System in a virtual machine.
289 * Defining Services:: Adding new service definitions.
290
291 Services
292
293 * Base Services:: Essential system services.
294 * Scheduled Job Execution:: The mcron service.
295 * Log Rotation:: The rottlog service.
296 * Networking Services:: Network setup, SSH daemon, etc.
297 * X Window:: Graphical display.
298 * Printing Services:: Local and remote printer support.
299 * Desktop Services:: D-Bus and desktop services.
300 * Sound Services:: ALSA and Pulseaudio services.
301 * Database Services:: SQL databases, key-value stores, etc.
302 * Mail Services:: IMAP, POP3, SMTP, and all that.
303 * Messaging Services:: Messaging services.
304 * Telephony Services:: Telephony services.
305 * Monitoring Services:: Monitoring services.
306 * Kerberos Services:: Kerberos services.
307 * Web Services:: Web servers.
308 * Certificate Services:: TLS certificates via Let's Encrypt.
309 * DNS Services:: DNS daemons.
310 * VPN Services:: VPN daemons.
311 * Network File System:: NFS related services.
312 * Continuous Integration:: The Cuirass service.
313 * Power Management Services:: Extending battery life.
314 * Audio Services:: The MPD.
315 * Virtualization Services:: Virtualization services.
316 * Version Control Services:: Providing remote access to Git repositories.
317 * Game Services:: Game servers.
318 * PAM Mount Service:: Service to mount volumes when logging in.
319 * Linux Services:: Services tied to the Linux kernel.
320 * Miscellaneous Services:: Other services.
321
322 Defining Services
323
324 * Service Composition:: The model for composing services.
325 * Service Types and Services:: Types and services.
326 * Service Reference:: API reference.
327 * Shepherd Services:: A particular type of service.
328
329 @end detailmenu
330 @end menu
331
332 @c *********************************************************************
333 @node Introduction
334 @chapter Introduction
335
336 @cindex purpose
337 GNU Guix@footnote{``Guix'' is pronounced like ``geeks'', or ``ɡiːks''
338 using the international phonetic alphabet (IPA).} is a package
339 management tool for and distribution of the GNU system.
340 Guix makes it easy for unprivileged
341 users to install, upgrade, or remove software packages, to roll back to a
342 previous package set, to build packages from source, and generally
343 assists with the creation and maintenance of software environments.
344
345 @cindex Guix System
346 @cindex GuixSD, now Guix System
347 @cindex Guix System Distribution, now Guix System
348 You can install GNU@tie{}Guix on top of an existing GNU/Linux system where it
349 complements the available tools without interference (@pxref{Installation}),
350 or you can use it as a standalone operating system distribution,
351 @dfn{Guix@tie{}System}@footnote{We used to refer to Guix System as ``Guix
352 System Distribution'' or ``GuixSD''. We now consider it makes more sense to
353 group everything under the ``Guix'' banner since, after all, Guix System is
354 readily available through the @command{guix system} command, even if you're
355 using a different distro underneath!}. @xref{GNU Distribution}.
356
357 @menu
358 * Managing Software the Guix Way:: What's special.
359 * GNU Distribution:: The packages and tools.
360 @end menu
361
362 @node Managing Software the Guix Way
363 @section Managing Software the Guix Way
364
365 @cindex user interfaces
366 Guix provides a command-line package management interface
367 (@pxref{Package Management}), tools to help with software development
368 (@pxref{Development}), command-line utilities for more advanced usage,
369 (@pxref{Utilities}), as well as Scheme programming interfaces
370 (@pxref{Programming Interface}).
371 @cindex build daemon
372 Its @dfn{build daemon} is responsible for building packages on behalf of
373 users (@pxref{Setting Up the Daemon}) and for downloading pre-built
374 binaries from authorized sources (@pxref{Substitutes}).
375
376 @cindex extensibility of the distribution
377 @cindex customization, of packages
378 Guix includes package definitions for many GNU and non-GNU packages, all
379 of which @uref{https://www.gnu.org/philosophy/free-sw.html, respect the
380 user's computing freedom}. It is @emph{extensible}: users can write
381 their own package definitions (@pxref{Defining Packages}) and make them
382 available as independent package modules (@pxref{Package Modules}). It
383 is also @emph{customizable}: users can @emph{derive} specialized package
384 definitions from existing ones, including from the command line
385 (@pxref{Package Transformation Options}).
386
387 @cindex functional package management
388 @cindex isolation
389 Under the hood, Guix implements the @dfn{functional package management}
390 discipline pioneered by Nix (@pxref{Acknowledgments}).
391 In Guix, the package build and installation process is seen
392 as a @emph{function}, in the mathematical sense. That function takes inputs,
393 such as build scripts, a compiler, and libraries, and
394 returns an installed package. As a pure function, its result depends
395 solely on its inputs---for instance, it cannot refer to software or
396 scripts that were not explicitly passed as inputs. A build function
397 always produces the same result when passed a given set of inputs. It
398 cannot alter the environment of the running system in
399 any way; for instance, it cannot create, modify, or delete files outside
400 of its build and installation directories. This is achieved by running
401 build processes in isolated environments (or @dfn{containers}), where only their
402 explicit inputs are visible.
403
404 @cindex store
405 The result of package build functions is @dfn{cached} in the file
406 system, in a special directory called @dfn{the store} (@pxref{The
407 Store}). Each package is installed in a directory of its own in the
408 store---by default under @file{/gnu/store}. The directory name contains
409 a hash of all the inputs used to build that package; thus, changing an
410 input yields a different directory name.
411
412 This approach is the foundation for the salient features of Guix: support
413 for transactional package upgrade and rollback, per-user installation, and
414 garbage collection of packages (@pxref{Features}).
415
416
417 @node GNU Distribution
418 @section GNU Distribution
419
420 @cindex Guix System
421 Guix comes with a distribution of the GNU system consisting entirely of
422 free software@footnote{The term ``free'' here refers to the
423 @url{https://www.gnu.org/philosophy/free-sw.html,freedom provided to
424 users of that software}.}. The
425 distribution can be installed on its own (@pxref{System Installation}),
426 but it is also possible to install Guix as a package manager on top of
427 an installed GNU/Linux system (@pxref{Installation}). When we need to
428 distinguish between the two, we refer to the standalone distribution as
429 Guix@tie{}System.
430
431 The distribution provides core GNU packages such as GNU libc, GCC, and
432 Binutils, as well as many GNU and non-GNU applications. The complete
433 list of available packages can be browsed
434 @url{https://www.gnu.org/software/guix/packages,on-line} or by
435 running @command{guix package} (@pxref{Invoking guix package}):
436
437 @example
438 guix package --list-available
439 @end example
440
441 Our goal is to provide a practical 100% free software distribution of
442 Linux-based and other variants of GNU, with a focus on the promotion and
443 tight integration of GNU components, and an emphasis on programs and
444 tools that help users exert that freedom.
445
446 Packages are currently available on the following platforms:
447
448 @table @code
449
450 @item x86_64-linux
451 Intel/AMD @code{x86_64} architecture, Linux-Libre kernel;
452
453 @item i686-linux
454 Intel 32-bit architecture (IA32), Linux-Libre kernel;
455
456 @item armhf-linux
457 ARMv7-A architecture with hard float, Thumb-2 and NEON,
458 using the EABI hard-float application binary interface (ABI),
459 and Linux-Libre kernel.
460
461 @item aarch64-linux
462 little-endian 64-bit ARMv8-A processors, Linux-Libre kernel.
463
464 @item mips64el-linux
465 little-endian 64-bit MIPS processors, specifically the Loongson series,
466 n32 ABI, and Linux-Libre kernel. This configuration is no longer fully
467 supported; in particular, the project's build farms no longer provide
468 substitutes for this architecture.
469
470 @end table
471
472 With Guix@tie{}System, you @emph{declare} all aspects of the operating system
473 configuration and Guix takes care of instantiating the configuration in a
474 transactional, reproducible, and stateless fashion (@pxref{System
475 Configuration}). Guix System uses the Linux-libre kernel, the Shepherd
476 initialization system (@pxref{Introduction,,, shepherd, The GNU Shepherd
477 Manual}), the well-known GNU utilities and tool chain, as well as the
478 graphical environment or system services of your choice.
479
480 Guix System is available on all the above platforms except
481 @code{mips64el-linux}.
482
483 @noindent
484 For information on porting to other architectures or kernels,
485 @pxref{Porting}.
486
487 Building this distribution is a cooperative effort, and you are invited
488 to join! @xref{Contributing}, for information about how you can help.
489
490
491 @c *********************************************************************
492 @node Installation
493 @chapter Installation
494
495 @cindex installing Guix
496
497 @quotation Note
498 We recommend the use of this
499 @uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh,
500 shell installer script} to install Guix on top of a running GNU/Linux system,
501 thereafter called a @dfn{foreign distro}.@footnote{This section is concerned
502 with the installation of the package manager, which can be done on top of a
503 running GNU/Linux system. If, instead, you want to install the complete GNU
504 operating system, @pxref{System Installation}.} The script automates the
505 download, installation, and initial configuration of Guix. It should be run
506 as the root user.
507 @end quotation
508
509 @cindex foreign distro
510 @cindex directories related to foreign distro
511 When installed on a foreign distro, GNU@tie{}Guix complements the available
512 tools without interference. Its data lives exclusively in two directories,
513 usually @file{/gnu/store} and @file{/var/guix}; other files on your system,
514 such as @file{/etc}, are left untouched.
515
516 Once installed, Guix can be updated by running @command{guix pull}
517 (@pxref{Invoking guix pull}).
518
519 If you prefer to perform the installation steps manually or want to tweak
520 them, you may find the following subsections useful. They describe the
521 software requirements of Guix, as well as how to install it manually and get
522 ready to use it.
523
524 @menu
525 * Binary Installation:: Getting Guix running in no time!
526 * Requirements:: Software needed to build and run Guix.
527 * Running the Test Suite:: Testing Guix.
528 * Setting Up the Daemon:: Preparing the build daemon's environment.
529 * Invoking guix-daemon:: Running the build daemon.
530 * Application Setup:: Application-specific setup.
531 * Upgrading Guix:: Upgrading Guix and its build daemon.
532 @end menu
533
534 @node Binary Installation
535 @section Binary Installation
536
537 @cindex installing Guix from binaries
538 @cindex installer script
539 This section describes how to install Guix on an arbitrary system from a
540 self-contained tarball providing binaries for Guix and for all its
541 dependencies. This is often quicker than installing from source, which
542 is described in the next sections. The only requirement is to have
543 GNU@tie{}tar and Xz.
544
545 @c Note duplicated from the ``Installation'' node.
546 @quotation Note
547 We recommend the use of this
548 @uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh,
549 shell installer script}. The script automates the download, installation, and
550 initial configuration steps described below. It should be run as the root
551 user.
552 @end quotation
553
554 Installing goes along these lines:
555
556 @enumerate
557 @item
558 @cindex downloading Guix binary
559 Download the binary tarball from
560 @indicateurl{@value{BASE-URL}/guix-binary-@value{VERSION}.@var{system}.tar.xz},
561 where @var{system} is @code{x86_64-linux} for an @code{x86_64} machine
562 already running the kernel Linux, and so on.
563
564 @c The following is somewhat duplicated in ``System Installation''.
565 Make sure to download the associated @file{.sig} file and to verify the
566 authenticity of the tarball against it, along these lines:
567
568 @example
569 $ wget @value{BASE-URL}/guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
570 $ gpg --verify guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
571 @end example
572
573 If that command fails because you do not have the required public key,
574 then run this command to import it:
575
576 @example
577 $ wget @value{OPENPGP-SIGNING-KEY-URL} \
578 -qO - | gpg --import -
579 @end example
580
581 @noindent
582 and rerun the @code{gpg --verify} command.
583
584 Take note that a warning like ``This key is not certified with a trusted
585 signature!'' is normal.
586
587 @c end authentication part
588
589 @item
590 Now, you need to become the @code{root} user. Depending on your distribution,
591 you may have to run @code{su -} or @code{sudo -i}. As @code{root}, run:
592
593 @example
594 # cd /tmp
595 # tar --warning=no-timestamp -xf \
596 /path/to/guix-binary-@value{VERSION}.@var{system}.tar.xz
597 # mv var/guix /var/ && mv gnu /
598 @end example
599
600 This creates @file{/gnu/store} (@pxref{The Store}) and @file{/var/guix}.
601 The latter contains a ready-to-use profile for @code{root} (see next
602 step.)
603
604 Do @emph{not} unpack the tarball on a working Guix system since that
605 would overwrite its own essential files.
606
607 The @code{--warning=no-timestamp} option makes sure GNU@tie{}tar does
608 not emit warnings about ``implausibly old time stamps'' (such
609 warnings were triggered by GNU@tie{}tar 1.26 and older; recent
610 versions are fine.)
611 They stem from the fact that all the
612 files in the archive have their modification time set to zero (which
613 means January 1st, 1970.) This is done on purpose to make sure the
614 archive content is independent of its creation time, thus making it
615 reproducible.
616
617 @item
618 Make the profile available under @file{~root/.config/guix/current}, which is
619 where @command{guix pull} will install updates (@pxref{Invoking guix pull}):
620
621 @example
622 # mkdir -p ~root/.config/guix
623 # ln -sf /var/guix/profiles/per-user/root/current-guix \
624 ~root/.config/guix/current
625 @end example
626
627 Source @file{etc/profile} to augment @code{PATH} and other relevant
628 environment variables:
629
630 @example
631 # GUIX_PROFILE="`echo ~root`/.config/guix/current" ; \
632 source $GUIX_PROFILE/etc/profile
633 @end example
634
635 @item
636 Create the group and user accounts for build users as explained below
637 (@pxref{Build Environment Setup}).
638
639 @item
640 Run the daemon, and set it to automatically start on boot.
641
642 If your host distro uses the systemd init system, this can be achieved
643 with these commands:
644
645 @c Versions of systemd that supported symlinked service files are not
646 @c yet widely deployed, so we should suggest that users copy the service
647 @c files into place.
648 @c
649 @c See this thread for more information:
650 @c https://lists.gnu.org/archive/html/guix-devel/2017-01/msg01199.html
651
652 @example
653 # cp ~root/.config/guix/current/lib/systemd/system/guix-daemon.service \
654 /etc/systemd/system/
655 # systemctl start guix-daemon && systemctl enable guix-daemon
656 @end example
657
658 If your host distro uses the Upstart init system:
659
660 @example
661 # initctl reload-configuration
662 # cp ~root/.config/guix/current/lib/upstart/system/guix-daemon.conf \
663 /etc/init/
664 # start guix-daemon
665 @end example
666
667 Otherwise, you can still start the daemon manually with:
668
669 @example
670 # ~root/.config/guix/current/bin/guix-daemon \
671 --build-users-group=guixbuild
672 @end example
673
674 @item
675 Make the @command{guix} command available to other users on the machine,
676 for instance with:
677
678 @example
679 # mkdir -p /usr/local/bin
680 # cd /usr/local/bin
681 # ln -s /var/guix/profiles/per-user/root/current-guix/bin/guix
682 @end example
683
684 It is also a good idea to make the Info version of this manual available
685 there:
686
687 @example
688 # mkdir -p /usr/local/share/info
689 # cd /usr/local/share/info
690 # for i in /var/guix/profiles/per-user/root/current-guix/share/info/* ;
691 do ln -s $i ; done
692 @end example
693
694 That way, assuming @file{/usr/local/share/info} is in the search path,
695 running @command{info guix} will open this manual (@pxref{Other Info
696 Directories,,, texinfo, GNU Texinfo}, for more details on changing the
697 Info search path.)
698
699 @item
700 @cindex substitutes, authorization thereof
701 To use substitutes from @code{@value{SUBSTITUTE-SERVER}} or one of its mirrors
702 (@pxref{Substitutes}), authorize them:
703
704 @example
705 # guix archive --authorize < \
706 ~root/.config/guix/current/share/guix/@value{SUBSTITUTE-SERVER}.pub
707 @end example
708
709 @item
710 Each user may need to perform a few additional steps to make their Guix
711 environment ready for use, @pxref{Application Setup}.
712 @end enumerate
713
714 Voilà, the installation is complete!
715
716 You can confirm that Guix is working by installing a sample package into
717 the root profile:
718
719 @example
720 # guix install hello
721 @end example
722
723 The binary installation tarball can be (re)produced and verified simply
724 by running the following command in the Guix source tree:
725
726 @example
727 make guix-binary.@var{system}.tar.xz
728 @end example
729
730 @noindent
731 ...@: which, in turn, runs:
732
733 @example
734 guix pack -s @var{system} --localstatedir \
735 --profile-name=current-guix guix
736 @end example
737
738 @xref{Invoking guix pack}, for more info on this handy tool.
739
740 @node Requirements
741 @section Requirements
742
743 This section lists requirements when building Guix from source. The
744 build procedure for Guix is the same as for other GNU software, and is
745 not covered here. Please see the files @file{README} and @file{INSTALL}
746 in the Guix source tree for additional details.
747
748 @cindex official website
749 GNU Guix is available for download from its website at
750 @url{https://www.gnu.org/software/guix/}.
751
752 GNU Guix depends on the following packages:
753
754 @itemize
755 @item @url{https://gnu.org/software/guile/, GNU Guile}, version 3.0.x or
756 2.2.x;
757 @item @url{https://notabug.org/cwebber/guile-gcrypt, Guile-Gcrypt}, version
758 0.1.0 or later;
759 @item
760 @uref{https://gnutls.org/, GnuTLS}, specifically its Guile bindings
761 (@pxref{Guile Preparations, how to install the GnuTLS bindings for
762 Guile,, gnutls-guile, GnuTLS-Guile});
763 @item
764 @uref{https://notabug.org/guile-sqlite3/guile-sqlite3, Guile-SQLite3}, version 0.1.0
765 or later;
766 @item
767 @c FIXME: Specify a version number once a release has been made.
768 @uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, from August
769 2017 or later;
770 @item @uref{https://savannah.nongnu.org/projects/guile-json/, Guile-JSON} 3.x;
771 @item @url{https://zlib.net, zlib};
772 @item @url{https://www.gnu.org/software/make/, GNU Make}.
773 @end itemize
774
775 The following dependencies are optional:
776
777 @itemize
778 @item
779 @c Note: We need at least 0.12.0 for 'userauth-gssapi!'.
780 Support for build offloading (@pxref{Daemon Offload Setup}) and
781 @command{guix copy} (@pxref{Invoking guix copy}) depends on
782 @uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH},
783 version 0.12.0 or later.
784
785 @item
786 When @url{https://www.nongnu.org/lzip/lzlib.html, lzlib} is available, lzlib
787 substitutes can be used and @command{guix publish} can compress substitutes
788 with lzlib.
789
790 @item
791 When @url{http://www.bzip.org, libbz2} is available,
792 @command{guix-daemon} can use it to compress build logs.
793 @end itemize
794
795 Unless @code{--disable-daemon} was passed to @command{configure}, the
796 following packages are also needed:
797
798 @itemize
799 @item @url{https://gnupg.org/, GNU libgcrypt};
800 @item @url{https://sqlite.org, SQLite 3};
801 @item @url{https://gcc.gnu.org, GCC's g++}, with support for the
802 C++11 standard.
803 @end itemize
804
805 @cindex state directory
806 When configuring Guix on a system that already has a Guix installation,
807 be sure to specify the same state directory as the existing installation
808 using the @code{--localstatedir} option of the @command{configure}
809 script (@pxref{Directory Variables, @code{localstatedir},, standards,
810 GNU Coding Standards}). Usually, this @var{localstatedir} option is
811 set to the value @file{/var}. The @command{configure} script protects
812 against unintended misconfiguration of @var{localstatedir} so you do not
813 inadvertently corrupt your store (@pxref{The Store}).
814
815 @node Running the Test Suite
816 @section Running the Test Suite
817
818 @cindex test suite
819 After a successful @command{configure} and @code{make} run, it is a good
820 idea to run the test suite. It can help catch issues with the setup or
821 environment, or bugs in Guix itself---and really, reporting test
822 failures is a good way to help improve the software. To run the test
823 suite, type:
824
825 @example
826 make check
827 @end example
828
829 Test cases can run in parallel: you can use the @code{-j} option of
830 GNU@tie{}make to speed things up. The first run may take a few minutes
831 on a recent machine; subsequent runs will be faster because the store
832 that is created for test purposes will already have various things in
833 cache.
834
835 It is also possible to run a subset of the tests by defining the
836 @code{TESTS} makefile variable as in this example:
837
838 @example
839 make check TESTS="tests/store.scm tests/cpio.scm"
840 @end example
841
842 By default, tests results are displayed at a file level. In order to
843 see the details of every individual test cases, it is possible to define
844 the @code{SCM_LOG_DRIVER_FLAGS} makefile variable as in this example:
845
846 @example
847 make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no"
848 @end example
849
850 Upon failure, please email @email{bug-guix@@gnu.org} and attach the
851 @file{test-suite.log} file. Please specify the Guix version being used
852 as well as version numbers of the dependencies (@pxref{Requirements}) in
853 your message.
854
855 Guix also comes with a whole-system test suite that tests complete
856 Guix System instances. It can only run on systems where
857 Guix is already installed, using:
858
859 @example
860 make check-system
861 @end example
862
863 @noindent
864 or, again, by defining @code{TESTS} to select a subset of tests to run:
865
866 @example
867 make check-system TESTS="basic mcron"
868 @end example
869
870 These system tests are defined in the @code{(gnu tests @dots{})}
871 modules. They work by running the operating systems under test with
872 lightweight instrumentation in a virtual machine (VM). They can be
873 computationally intensive or rather cheap, depending on whether
874 substitutes are available for their dependencies (@pxref{Substitutes}).
875 Some of them require a lot of storage space to hold VM images.
876
877 Again in case of test failures, please send @email{bug-guix@@gnu.org}
878 all the details.
879
880 @node Setting Up the Daemon
881 @section Setting Up the Daemon
882
883 @cindex daemon
884 Operations such as building a package or running the garbage collector
885 are all performed by a specialized process, the @dfn{build daemon}, on
886 behalf of clients. Only the daemon may access the store and its
887 associated database. Thus, any operation that manipulates the store
888 goes through the daemon. For instance, command-line tools such as
889 @command{guix package} and @command{guix build} communicate with the
890 daemon (@i{via} remote procedure calls) to instruct it what to do.
891
892 The following sections explain how to prepare the build daemon's
893 environment. See also @ref{Substitutes}, for information on how to allow
894 the daemon to download pre-built binaries.
895
896 @menu
897 * Build Environment Setup:: Preparing the isolated build environment.
898 * Daemon Offload Setup:: Offloading builds to remote machines.
899 * SELinux Support:: Using an SELinux policy for the daemon.
900 @end menu
901
902 @node Build Environment Setup
903 @subsection Build Environment Setup
904
905 @cindex build environment
906 In a standard multi-user setup, Guix and its daemon---the
907 @command{guix-daemon} program---are installed by the system
908 administrator; @file{/gnu/store} is owned by @code{root} and
909 @command{guix-daemon} runs as @code{root}. Unprivileged users may use
910 Guix tools to build packages or otherwise access the store, and the
911 daemon will do it on their behalf, ensuring that the store is kept in a
912 consistent state, and allowing built packages to be shared among users.
913
914 @cindex build users
915 When @command{guix-daemon} runs as @code{root}, you may not want package
916 build processes themselves to run as @code{root} too, for obvious
917 security reasons. To avoid that, a special pool of @dfn{build users}
918 should be created for use by build processes started by the daemon.
919 These build users need not have a shell and a home directory: they will
920 just be used when the daemon drops @code{root} privileges in build
921 processes. Having several such users allows the daemon to launch
922 distinct build processes under separate UIDs, which guarantees that they
923 do not interfere with each other---an essential feature since builds are
924 regarded as pure functions (@pxref{Introduction}).
925
926 On a GNU/Linux system, a build user pool may be created like this (using
927 Bash syntax and the @code{shadow} commands):
928
929 @c See https://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
930 @c for why `-G' is needed.
931 @example
932 # groupadd --system guixbuild
933 # for i in `seq -w 1 10`;
934 do
935 useradd -g guixbuild -G guixbuild \
936 -d /var/empty -s `which nologin` \
937 -c "Guix build user $i" --system \
938 guixbuilder$i;
939 done
940 @end example
941
942 @noindent
943 The number of build users determines how many build jobs may run in
944 parallel, as specified by the @option{--max-jobs} option
945 (@pxref{Invoking guix-daemon, @option{--max-jobs}}). To use
946 @command{guix system vm} and related commands, you may need to add the
947 build users to the @code{kvm} group so they can access @file{/dev/kvm},
948 using @code{-G guixbuild,kvm} instead of @code{-G guixbuild}
949 (@pxref{Invoking guix system}).
950
951 The @code{guix-daemon} program may then be run as @code{root} with the
952 following command@footnote{If your machine uses the systemd init system,
953 dropping the @file{@var{prefix}/lib/systemd/system/guix-daemon.service}
954 file in @file{/etc/systemd/system} will ensure that
955 @command{guix-daemon} is automatically started. Similarly, if your
956 machine uses the Upstart init system, drop the
957 @file{@var{prefix}/lib/upstart/system/guix-daemon.conf}
958 file in @file{/etc/init}.}:
959
960 @example
961 # guix-daemon --build-users-group=guixbuild
962 @end example
963
964 @cindex chroot
965 @noindent
966 This way, the daemon starts build processes in a chroot, under one of
967 the @code{guixbuilder} users. On GNU/Linux, by default, the chroot
968 environment contains nothing but:
969
970 @c Keep this list in sync with libstore/build.cc! -----------------------
971 @itemize
972 @item
973 a minimal @code{/dev} directory, created mostly independently from the
974 host @code{/dev}@footnote{``Mostly'', because while the set of files
975 that appear in the chroot's @code{/dev} is fixed, most of these files
976 can only be created if the host has them.};
977
978 @item
979 the @code{/proc} directory; it only shows the processes of the container
980 since a separate PID name space is used;
981
982 @item
983 @file{/etc/passwd} with an entry for the current user and an entry for
984 user @file{nobody};
985
986 @item
987 @file{/etc/group} with an entry for the user's group;
988
989 @item
990 @file{/etc/hosts} with an entry that maps @code{localhost} to
991 @code{127.0.0.1};
992
993 @item
994 a writable @file{/tmp} directory.
995 @end itemize
996
997 You can influence the directory where the daemon stores build trees
998 @i{via} the @code{TMPDIR} environment variable. However, the build tree
999 within the chroot is always called @file{/tmp/guix-build-@var{name}.drv-0},
1000 where @var{name} is the derivation name---e.g., @code{coreutils-8.24}.
1001 This way, the value of @code{TMPDIR} does not leak inside build
1002 environments, which avoids discrepancies in cases where build processes
1003 capture the name of their build tree.
1004
1005 @vindex http_proxy
1006 The daemon also honors the @code{http_proxy} environment variable for
1007 HTTP downloads it performs, be it for fixed-output derivations
1008 (@pxref{Derivations}) or for substitutes (@pxref{Substitutes}).
1009
1010 If you are installing Guix as an unprivileged user, it is still possible
1011 to run @command{guix-daemon} provided you pass @code{--disable-chroot}.
1012 However, build processes will not be isolated from one another, and not
1013 from the rest of the system. Thus, build processes may interfere with
1014 each other, and may access programs, libraries, and other files
1015 available on the system---making it much harder to view them as
1016 @emph{pure} functions.
1017
1018
1019 @node Daemon Offload Setup
1020 @subsection Using the Offload Facility
1021
1022 @cindex offloading
1023 @cindex build hook
1024 When desired, the build daemon can @dfn{offload} derivation builds to
1025 other machines running Guix, using the @code{offload} @dfn{build
1026 hook}@footnote{This feature is available only when
1027 @uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH} is
1028 present.}. When that
1029 feature is enabled, a list of user-specified build machines is read from
1030 @file{/etc/guix/machines.scm}; every time a build is requested, for
1031 instance via @code{guix build}, the daemon attempts to offload it to one
1032 of the machines that satisfy the constraints of the derivation, in
1033 particular its system type---e.g., @file{x86_64-linux}. Missing
1034 prerequisites for the build are copied over SSH to the target machine,
1035 which then proceeds with the build; upon success the output(s) of the
1036 build are copied back to the initial machine.
1037
1038 The @file{/etc/guix/machines.scm} file typically looks like this:
1039
1040 @lisp
1041 (list (build-machine
1042 (name "eightysix.example.org")
1043 (system "x86_64-linux")
1044 (host-key "ssh-ed25519 AAAAC3Nza@dots{}")
1045 (user "bob")
1046 (speed 2.)) ;incredibly fast!
1047
1048 (build-machine
1049 (name "meeps.example.org")
1050 (system "mips64el-linux")
1051 (host-key "ssh-rsa AAAAB3Nza@dots{}")
1052 (user "alice")
1053 (private-key
1054 (string-append (getenv "HOME")
1055 "/.ssh/identity-for-guix"))))
1056 @end lisp
1057
1058 @noindent
1059 In the example above we specify a list of two build machines, one for
1060 the @code{x86_64} architecture and one for the @code{mips64el}
1061 architecture.
1062
1063 In fact, this file is---not surprisingly!---a Scheme file that is
1064 evaluated when the @code{offload} hook is started. Its return value
1065 must be a list of @code{build-machine} objects. While this example
1066 shows a fixed list of build machines, one could imagine, say, using
1067 DNS-SD to return a list of potential build machines discovered in the
1068 local network (@pxref{Introduction, Guile-Avahi,, guile-avahi, Using
1069 Avahi in Guile Scheme Programs}). The @code{build-machine} data type is
1070 detailed below.
1071
1072 @deftp {Data Type} build-machine
1073 This data type represents build machines to which the daemon may offload
1074 builds. The important fields are:
1075
1076 @table @code
1077
1078 @item name
1079 The host name of the remote machine.
1080
1081 @item system
1082 The system type of the remote machine---e.g., @code{"x86_64-linux"}.
1083
1084 @item user
1085 The user account to use when connecting to the remote machine over SSH.
1086 Note that the SSH key pair must @emph{not} be passphrase-protected, to
1087 allow non-interactive logins.
1088
1089 @item host-key
1090 This must be the machine's SSH @dfn{public host key} in OpenSSH format.
1091 This is used to authenticate the machine when we connect to it. It is a
1092 long string that looks like this:
1093
1094 @example
1095 ssh-ed25519 AAAAC3NzaC@dots{}mde+UhL hint@@example.org
1096 @end example
1097
1098 If the machine is running the OpenSSH daemon, @command{sshd}, the host
1099 key can be found in a file such as
1100 @file{/etc/ssh/ssh_host_ed25519_key.pub}.
1101
1102 If the machine is running the SSH daemon of GNU@tie{}lsh,
1103 @command{lshd}, the host key is in @file{/etc/lsh/host-key.pub} or a
1104 similar file. It can be converted to the OpenSSH format using
1105 @command{lsh-export-key} (@pxref{Converting keys,,, lsh, LSH Manual}):
1106
1107 @example
1108 $ lsh-export-key --openssh < /etc/lsh/host-key.pub
1109 ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV@dots{}
1110 @end example
1111
1112 @end table
1113
1114 A number of optional fields may be specified:
1115
1116 @table @asis
1117
1118 @item @code{port} (default: @code{22})
1119 Port number of SSH server on the machine.
1120
1121 @item @code{private-key} (default: @file{~root/.ssh/id_rsa})
1122 The SSH private key file to use when connecting to the machine, in
1123 OpenSSH format. This key must not be protected with a passphrase.
1124
1125 Note that the default value is the private key @emph{of the root
1126 account}. Make sure it exists if you use the default.
1127
1128 @item @code{compression} (default: @code{"zlib@@openssh.com,zlib"})
1129 @itemx @code{compression-level} (default: @code{3})
1130 The SSH-level compression methods and compression level requested.
1131
1132 Note that offloading relies on SSH compression to reduce bandwidth usage
1133 when transferring files to and from build machines.
1134
1135 @item @code{daemon-socket} (default: @code{"/var/guix/daemon-socket/socket"})
1136 File name of the Unix-domain socket @command{guix-daemon} is listening
1137 to on that machine.
1138
1139 @item @code{parallel-builds} (default: @code{1})
1140 The number of builds that may run in parallel on the machine.
1141
1142 @item @code{speed} (default: @code{1.0})
1143 A ``relative speed factor''. The offload scheduler will tend to prefer
1144 machines with a higher speed factor.
1145
1146 @item @code{features} (default: @code{'()})
1147 A list of strings denoting specific features supported by the machine.
1148 An example is @code{"kvm"} for machines that have the KVM Linux modules
1149 and corresponding hardware support. Derivations can request features by
1150 name, and they will be scheduled on matching build machines.
1151
1152 @end table
1153 @end deftp
1154
1155 The @command{guix} command must be in the search path on the build
1156 machines. You can check whether this is the case by running:
1157
1158 @example
1159 ssh build-machine guix repl --version
1160 @end example
1161
1162 There is one last thing to do once @file{machines.scm} is in place. As
1163 explained above, when offloading, files are transferred back and forth
1164 between the machine stores. For this to work, you first need to
1165 generate a key pair on each machine to allow the daemon to export signed
1166 archives of files from the store (@pxref{Invoking guix archive}):
1167
1168 @example
1169 # guix archive --generate-key
1170 @end example
1171
1172 @noindent
1173 Each build machine must authorize the key of the master machine so that
1174 it accepts store items it receives from the master:
1175
1176 @example
1177 # guix archive --authorize < master-public-key.txt
1178 @end example
1179
1180 @noindent
1181 Likewise, the master machine must authorize the key of each build machine.
1182
1183 All the fuss with keys is here to express pairwise mutual trust
1184 relations between the master and the build machines. Concretely, when
1185 the master receives files from a build machine (and @i{vice versa}), its
1186 build daemon can make sure they are genuine, have not been tampered
1187 with, and that they are signed by an authorized key.
1188
1189 @cindex offload test
1190 To test whether your setup is operational, run this command on the
1191 master node:
1192
1193 @example
1194 # guix offload test
1195 @end example
1196
1197 This will attempt to connect to each of the build machines specified in
1198 @file{/etc/guix/machines.scm}, make sure Guile and the Guix modules are
1199 available on each machine, attempt to export to the machine and import
1200 from it, and report any error in the process.
1201
1202 If you want to test a different machine file, just specify it on the
1203 command line:
1204
1205 @example
1206 # guix offload test machines-qualif.scm
1207 @end example
1208
1209 Last, you can test the subset of the machines whose name matches a
1210 regular expression like this:
1211
1212 @example
1213 # guix offload test machines.scm '\.gnu\.org$'
1214 @end example
1215
1216 @cindex offload status
1217 To display the current load of all build hosts, run this command on the
1218 main node:
1219
1220 @example
1221 # guix offload status
1222 @end example
1223
1224
1225 @node SELinux Support
1226 @subsection SELinux Support
1227
1228 @cindex SELinux, daemon policy
1229 @cindex mandatory access control, SELinux
1230 @cindex security, guix-daemon
1231 Guix includes an SELinux policy file at @file{etc/guix-daemon.cil} that
1232 can be installed on a system where SELinux is enabled, in order to label
1233 Guix files and to specify the expected behavior of the daemon. Since
1234 Guix System does not provide an SELinux base policy, the daemon policy cannot
1235 be used on Guix System.
1236
1237 @subsubsection Installing the SELinux policy
1238 @cindex SELinux, policy installation
1239 To install the policy run this command as root:
1240
1241 @example
1242 semodule -i etc/guix-daemon.cil
1243 @end example
1244
1245 Then relabel the file system with @code{restorecon} or by a different
1246 mechanism provided by your system.
1247
1248 Once the policy is installed, the file system has been relabeled, and
1249 the daemon has been restarted, it should be running in the
1250 @code{guix_daemon_t} context. You can confirm this with the following
1251 command:
1252
1253 @example
1254 ps -Zax | grep guix-daemon
1255 @end example
1256
1257 Monitor the SELinux log files as you run a command like @code{guix build
1258 hello} to convince yourself that SELinux permits all necessary
1259 operations.
1260
1261 @subsubsection Limitations
1262 @cindex SELinux, limitations
1263
1264 This policy is not perfect. Here is a list of limitations or quirks
1265 that should be considered when deploying the provided SELinux policy for
1266 the Guix daemon.
1267
1268 @enumerate
1269 @item
1270 @code{guix_daemon_socket_t} isn’t actually used. None of the socket
1271 operations involve contexts that have anything to do with
1272 @code{guix_daemon_socket_t}. It doesn’t hurt to have this unused label,
1273 but it would be preferrable to define socket rules for only this label.
1274
1275 @item
1276 @code{guix gc} cannot access arbitrary links to profiles. By design,
1277 the file label of the destination of a symlink is independent of the
1278 file label of the link itself. Although all profiles under
1279 $localstatedir are labelled, the links to these profiles inherit the
1280 label of the directory they are in. For links in the user’s home
1281 directory this will be @code{user_home_t}. But for links from the root
1282 user’s home directory, or @file{/tmp}, or the HTTP server’s working
1283 directory, etc, this won’t work. @code{guix gc} would be prevented from
1284 reading and following these links.
1285
1286 @item
1287 The daemon’s feature to listen for TCP connections might no longer work.
1288 This might require extra rules, because SELinux treats network sockets
1289 differently from files.
1290
1291 @item
1292 Currently all files with a name matching the regular expression
1293 @code{/gnu/store/.+-(guix-.+|profile)/bin/guix-daemon} are assigned the
1294 label @code{guix_daemon_exec_t}; this means that @emph{any} file with
1295 that name in any profile would be permitted to run in the
1296 @code{guix_daemon_t} domain. This is not ideal. An attacker could
1297 build a package that provides this executable and convince a user to
1298 install and run it, which lifts it into the @code{guix_daemon_t} domain.
1299 At that point SELinux could not prevent it from accessing files that are
1300 allowed for processes in that domain.
1301
1302 We could generate a much more restrictive policy at installation time,
1303 so that only the @emph{exact} file name of the currently installed
1304 @code{guix-daemon} executable would be labelled with
1305 @code{guix_daemon_exec_t}, instead of using a broad regular expression.
1306 The downside is that root would have to install or upgrade the policy at
1307 installation time whenever the Guix package that provides the
1308 effectively running @code{guix-daemon} executable is upgraded.
1309 @end enumerate
1310
1311 @node Invoking guix-daemon
1312 @section Invoking @command{guix-daemon}
1313
1314 The @command{guix-daemon} program implements all the functionality to
1315 access the store. This includes launching build processes, running the
1316 garbage collector, querying the availability of a build result, etc. It
1317 is normally run as @code{root} like this:
1318
1319 @example
1320 # guix-daemon --build-users-group=guixbuild
1321 @end example
1322
1323 @noindent
1324 For details on how to set it up, @pxref{Setting Up the Daemon}.
1325
1326 @cindex chroot
1327 @cindex container, build environment
1328 @cindex build environment
1329 @cindex reproducible builds
1330 By default, @command{guix-daemon} launches build processes under
1331 different UIDs, taken from the build group specified with
1332 @code{--build-users-group}. In addition, each build process is run in a
1333 chroot environment that only contains the subset of the store that the
1334 build process depends on, as specified by its derivation
1335 (@pxref{Programming Interface, derivation}), plus a set of specific
1336 system directories. By default, the latter contains @file{/dev} and
1337 @file{/dev/pts}. Furthermore, on GNU/Linux, the build environment is a
1338 @dfn{container}: in addition to having its own file system tree, it has
1339 a separate mount name space, its own PID name space, network name space,
1340 etc. This helps achieve reproducible builds (@pxref{Features}).
1341
1342 When the daemon performs a build on behalf of the user, it creates a
1343 build directory under @file{/tmp} or under the directory specified by
1344 its @code{TMPDIR} environment variable. This directory is shared with
1345 the container for the duration of the build, though within the container,
1346 the build tree is always called @file{/tmp/guix-build-@var{name}.drv-0}.
1347
1348 The build directory is automatically deleted upon completion, unless the
1349 build failed and the client specified @option{--keep-failed}
1350 (@pxref{Invoking guix build, @option{--keep-failed}}).
1351
1352 The daemon listens for connections and spawns one sub-process for each session
1353 started by a client (one of the @command{guix} sub-commands.) The
1354 @command{guix processes} command allows you to get an overview of the activity
1355 on your system by viewing each of the active sessions and clients.
1356 @xref{Invoking guix processes}, for more information.
1357
1358 The following command-line options are supported:
1359
1360 @table @code
1361 @item --build-users-group=@var{group}
1362 Take users from @var{group} to run build processes (@pxref{Setting Up
1363 the Daemon, build users}).
1364
1365 @item --no-substitutes
1366 @cindex substitutes
1367 Do not use substitutes for build products. That is, always build things
1368 locally instead of allowing downloads of pre-built binaries
1369 (@pxref{Substitutes}).
1370
1371 When the daemon runs with @code{--no-substitutes}, clients can still
1372 explicitly enable substitution @i{via} the @code{set-build-options}
1373 remote procedure call (@pxref{The Store}).
1374
1375 @item --substitute-urls=@var{urls}
1376 @anchor{daemon-substitute-urls}
1377 Consider @var{urls} the default whitespace-separated list of substitute
1378 source URLs. When this option is omitted,
1379 @indicateurl{https://@value{SUBSTITUTE-SERVER}} is used.
1380
1381 This means that substitutes may be downloaded from @var{urls}, as long
1382 as they are signed by a trusted signature (@pxref{Substitutes}).
1383
1384 @cindex offloading
1385 @item --no-offload
1386 Do not use offload builds to other machines (@pxref{Daemon Offload
1387 Setup}). That is, always build things locally instead of offloading
1388 builds to remote machines.
1389
1390 @item --cache-failures
1391 Cache build failures. By default, only successful builds are cached.
1392
1393 When this option is used, @command{guix gc --list-failures} can be used
1394 to query the set of store items marked as failed; @command{guix gc
1395 --clear-failures} removes store items from the set of cached failures.
1396 @xref{Invoking guix gc}.
1397
1398 @item --cores=@var{n}
1399 @itemx -c @var{n}
1400 Use @var{n} CPU cores to build each derivation; @code{0} means as many
1401 as available.
1402
1403 The default value is @code{0}, but it may be overridden by clients, such
1404 as the @code{--cores} option of @command{guix build} (@pxref{Invoking
1405 guix build}).
1406
1407 The effect is to define the @code{NIX_BUILD_CORES} environment variable
1408 in the build process, which can then use it to exploit internal
1409 parallelism---for instance, by running @code{make -j$NIX_BUILD_CORES}.
1410
1411 @item --max-jobs=@var{n}
1412 @itemx -M @var{n}
1413 Allow at most @var{n} build jobs in parallel. The default value is
1414 @code{1}. Setting it to @code{0} means that no builds will be performed
1415 locally; instead, the daemon will offload builds (@pxref{Daemon Offload
1416 Setup}), or simply fail.
1417
1418 @item --max-silent-time=@var{seconds}
1419 When the build or substitution process remains silent for more than
1420 @var{seconds}, terminate it and report a build failure.
1421
1422 The default value is @code{0}, which disables the timeout.
1423
1424 The value specified here can be overridden by clients (@pxref{Common
1425 Build Options, @code{--max-silent-time}}).
1426
1427 @item --timeout=@var{seconds}
1428 Likewise, when the build or substitution process lasts for more than
1429 @var{seconds}, terminate it and report a build failure.
1430
1431 The default value is @code{0}, which disables the timeout.
1432
1433 The value specified here can be overridden by clients (@pxref{Common
1434 Build Options, @code{--timeout}}).
1435
1436 @item --rounds=@var{N}
1437 Build each derivation @var{n} times in a row, and raise an error if
1438 consecutive build results are not bit-for-bit identical. Note that this
1439 setting can be overridden by clients such as @command{guix build}
1440 (@pxref{Invoking guix build}).
1441
1442 When used in conjunction with @option{--keep-failed}, the differing
1443 output is kept in the store, under @file{/gnu/store/@dots{}-check}.
1444 This makes it easy to look for differences between the two results.
1445
1446 @item --debug
1447 Produce debugging output.
1448
1449 This is useful to debug daemon start-up issues, but then it may be
1450 overridden by clients, for example the @code{--verbosity} option of
1451 @command{guix build} (@pxref{Invoking guix build}).
1452
1453 @item --chroot-directory=@var{dir}
1454 Add @var{dir} to the build chroot.
1455
1456 Doing this may change the result of build processes---for instance if
1457 they use optional dependencies found in @var{dir} when it is available,
1458 and not otherwise. For that reason, it is not recommended to do so.
1459 Instead, make sure that each derivation declares all the inputs that it
1460 needs.
1461
1462 @item --disable-chroot
1463 Disable chroot builds.
1464
1465 Using this option is not recommended since, again, it would allow build
1466 processes to gain access to undeclared dependencies. It is necessary,
1467 though, when @command{guix-daemon} is running under an unprivileged user
1468 account.
1469
1470 @item --log-compression=@var{type}
1471 Compress build logs according to @var{type}, one of @code{gzip},
1472 @code{bzip2}, or @code{none}.
1473
1474 Unless @code{--lose-logs} is used, all the build logs are kept in the
1475 @var{localstatedir}. To save space, the daemon automatically compresses
1476 them with bzip2 by default.
1477
1478 @item --disable-deduplication
1479 @cindex deduplication
1480 Disable automatic file ``deduplication'' in the store.
1481
1482 By default, files added to the store are automatically ``deduplicated'':
1483 if a newly added file is identical to another one found in the store,
1484 the daemon makes the new file a hard link to the other file. This can
1485 noticeably reduce disk usage, at the expense of slightly increased
1486 input/output load at the end of a build process. This option disables
1487 this optimization.
1488
1489 @item --gc-keep-outputs[=yes|no]
1490 Tell whether the garbage collector (GC) must keep outputs of live
1491 derivations.
1492
1493 @cindex GC roots
1494 @cindex garbage collector roots
1495 When set to ``yes'', the GC will keep the outputs of any live derivation
1496 available in the store---the @code{.drv} files. The default is ``no'',
1497 meaning that derivation outputs are kept only if they are reachable from a GC
1498 root. @xref{Invoking guix gc}, for more on GC roots.
1499
1500 @item --gc-keep-derivations[=yes|no]
1501 Tell whether the garbage collector (GC) must keep derivations
1502 corresponding to live outputs.
1503
1504 When set to ``yes'', as is the case by default, the GC keeps
1505 derivations---i.e., @code{.drv} files---as long as at least one of their
1506 outputs is live. This allows users to keep track of the origins of
1507 items in their store. Setting it to ``no'' saves a bit of disk space.
1508
1509 In this way, setting @code{--gc-keep-derivations} to ``yes'' causes liveness
1510 to flow from outputs to derivations, and setting @code{--gc-keep-outputs} to
1511 ``yes'' causes liveness to flow from derivations to outputs. When both are
1512 set to ``yes'', the effect is to keep all the build prerequisites (the
1513 sources, compiler, libraries, and other build-time tools) of live objects in
1514 the store, regardless of whether these prerequisites are reachable from a GC
1515 root. This is convenient for developers since it saves rebuilds or downloads.
1516
1517 @item --impersonate-linux-2.6
1518 On Linux-based systems, impersonate Linux 2.6. This means that the
1519 kernel's @code{uname} system call will report 2.6 as the release number.
1520
1521 This might be helpful to build programs that (usually wrongfully) depend
1522 on the kernel version number.
1523
1524 @item --lose-logs
1525 Do not keep build logs. By default they are kept under
1526 @code{@var{localstatedir}/guix/log}.
1527
1528 @item --system=@var{system}
1529 Assume @var{system} as the current system type. By default it is the
1530 architecture/kernel pair found at configure time, such as
1531 @code{x86_64-linux}.
1532
1533 @item --listen=@var{endpoint}
1534 Listen for connections on @var{endpoint}. @var{endpoint} is interpreted
1535 as the file name of a Unix-domain socket if it starts with
1536 @code{/} (slash sign). Otherwise, @var{endpoint} is interpreted as a
1537 host name or host name and port to listen to. Here are a few examples:
1538
1539 @table @code
1540 @item --listen=/gnu/var/daemon
1541 Listen for connections on the @file{/gnu/var/daemon} Unix-domain socket,
1542 creating it if needed.
1543
1544 @item --listen=localhost
1545 @cindex daemon, remote access
1546 @cindex remote access to the daemon
1547 @cindex daemon, cluster setup
1548 @cindex clusters, daemon setup
1549 Listen for TCP connections on the network interface corresponding to
1550 @code{localhost}, on port 44146.
1551
1552 @item --listen=128.0.0.42:1234
1553 Listen for TCP connections on the network interface corresponding to
1554 @code{128.0.0.42}, on port 1234.
1555 @end table
1556
1557 This option can be repeated multiple times, in which case
1558 @command{guix-daemon} accepts connections on all the specified
1559 endpoints. Users can tell client commands what endpoint to connect to
1560 by setting the @code{GUIX_DAEMON_SOCKET} environment variable
1561 (@pxref{The Store, @code{GUIX_DAEMON_SOCKET}}).
1562
1563 @quotation Note
1564 The daemon protocol is @emph{unauthenticated and unencrypted}. Using
1565 @code{--listen=@var{host}} is suitable on local networks, such as
1566 clusters, where only trusted nodes may connect to the build daemon. In
1567 other cases where remote access to the daemon is needed, we recommend
1568 using Unix-domain sockets along with SSH.
1569 @end quotation
1570
1571 When @code{--listen} is omitted, @command{guix-daemon} listens for
1572 connections on the Unix-domain socket located at
1573 @file{@var{localstatedir}/guix/daemon-socket/socket}.
1574 @end table
1575
1576
1577 @node Application Setup
1578 @section Application Setup
1579
1580 @cindex foreign distro
1581 When using Guix on top of GNU/Linux distribution other than Guix System---a
1582 so-called @dfn{foreign distro}---a few additional steps are needed to
1583 get everything in place. Here are some of them.
1584
1585 @subsection Locales
1586
1587 @anchor{locales-and-locpath}
1588 @cindex locales, when not on Guix System
1589 @vindex LOCPATH
1590 @vindex GUIX_LOCPATH
1591 Packages installed @i{via} Guix will not use the locale data of the
1592 host system. Instead, you must first install one of the locale packages
1593 available with Guix and then define the @code{GUIX_LOCPATH} environment
1594 variable:
1595
1596 @example
1597 $ guix install glibc-locales
1598 $ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
1599 @end example
1600
1601 Note that the @code{glibc-locales} package contains data for all the
1602 locales supported by the GNU@tie{}libc and weighs in at around
1603 917@tie{}MiB. Alternatively, the @code{glibc-utf8-locales} is smaller but
1604 limited to a few UTF-8 locales.
1605
1606 The @code{GUIX_LOCPATH} variable plays a role similar to @code{LOCPATH}
1607 (@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library Reference
1608 Manual}). There are two important differences though:
1609
1610 @enumerate
1611 @item
1612 @code{GUIX_LOCPATH} is honored only by the libc in Guix, and not by the libc
1613 provided by foreign distros. Thus, using @code{GUIX_LOCPATH} allows you
1614 to make sure the programs of the foreign distro will not end up loading
1615 incompatible locale data.
1616
1617 @item
1618 libc suffixes each entry of @code{GUIX_LOCPATH} with @code{/X.Y}, where
1619 @code{X.Y} is the libc version---e.g., @code{2.22}. This means that,
1620 should your Guix profile contain a mixture of programs linked against
1621 different libc version, each libc version will only try to load locale
1622 data in the right format.
1623 @end enumerate
1624
1625 This is important because the locale data format used by different libc
1626 versions may be incompatible.
1627
1628 @subsection Name Service Switch
1629
1630 @cindex name service switch, glibc
1631 @cindex NSS (name service switch), glibc
1632 @cindex nscd (name service caching daemon)
1633 @cindex name service caching daemon (nscd)
1634 When using Guix on a foreign distro, we @emph{strongly recommend} that
1635 the system run the GNU C library's @dfn{name service cache daemon},
1636 @command{nscd}, which should be listening on the
1637 @file{/var/run/nscd/socket} socket. Failing to do that, applications
1638 installed with Guix may fail to look up host names or user accounts, or
1639 may even crash. The next paragraphs explain why.
1640
1641 @cindex @file{nsswitch.conf}
1642 The GNU C library implements a @dfn{name service switch} (NSS), which is
1643 an extensible mechanism for ``name lookups'' in general: host name
1644 resolution, user accounts, and more (@pxref{Name Service Switch,,, libc,
1645 The GNU C Library Reference Manual}).
1646
1647 @cindex Network information service (NIS)
1648 @cindex NIS (Network information service)
1649 Being extensible, the NSS supports @dfn{plugins}, which provide new name
1650 lookup implementations: for example, the @code{nss-mdns} plugin allow
1651 resolution of @code{.local} host names, the @code{nis} plugin allows
1652 user account lookup using the Network information service (NIS), and so
1653 on. These extra ``lookup services'' are configured system-wide in
1654 @file{/etc/nsswitch.conf}, and all the programs running on the system
1655 honor those settings (@pxref{NSS Configuration File,,, libc, The GNU C
1656 Reference Manual}).
1657
1658 When they perform a name lookup---for instance by calling the
1659 @code{getaddrinfo} function in C---applications first try to connect to
1660 the nscd; on success, nscd performs name lookups on their behalf. If
1661 the nscd is not running, then they perform the name lookup by
1662 themselves, by loading the name lookup services into their own address
1663 space and running it. These name lookup services---the
1664 @file{libnss_*.so} files---are @code{dlopen}'d, but they may come from
1665 the host system's C library, rather than from the C library the
1666 application is linked against (the C library coming from Guix).
1667
1668 And this is where the problem is: if your application is linked against
1669 Guix's C library (say, glibc 2.24) and tries to load NSS plugins from
1670 another C library (say, @code{libnss_mdns.so} for glibc 2.22), it will
1671 likely crash or have its name lookups fail unexpectedly.
1672
1673 Running @command{nscd} on the system, among other advantages, eliminates
1674 this binary incompatibility problem because those @code{libnss_*.so}
1675 files are loaded in the @command{nscd} process, not in applications
1676 themselves.
1677
1678 @subsection X11 Fonts
1679
1680 @cindex fonts
1681 The majority of graphical applications use Fontconfig to locate and
1682 load fonts and perform X11-client-side rendering. The @code{fontconfig}
1683 package in Guix looks for fonts in @file{$HOME/.guix-profile}
1684 by default. Thus, to allow graphical applications installed with Guix
1685 to display fonts, you have to install fonts with Guix as well.
1686 Essential font packages include @code{gs-fonts}, @code{font-dejavu}, and
1687 @code{font-gnu-freefont-ttf}.
1688
1689 @cindex @code{fc-cache}
1690 @cindex font cache
1691 Once you have installed or removed fonts, or when you notice an
1692 application that does not find fonts, you may need to install Fontconfig
1693 and to force an update of its font cache by running:
1694
1695 @example
1696 guix install fontconfig
1697 fc-cache -rv
1698 @end example
1699
1700 To display text written in Chinese languages, Japanese, or Korean in
1701 graphical applications, consider installing
1702 @code{font-adobe-source-han-sans} or @code{font-wqy-zenhei}. The former
1703 has multiple outputs, one per language family (@pxref{Packages with
1704 Multiple Outputs}). For instance, the following command installs fonts
1705 for Chinese languages:
1706
1707 @example
1708 guix install font-adobe-source-han-sans:cn
1709 @end example
1710
1711 @cindex @code{xterm}
1712 Older programs such as @command{xterm} do not use Fontconfig and instead
1713 rely on server-side font rendering. Such programs require to specify a
1714 full name of a font using XLFD (X Logical Font Description), like this:
1715
1716 @example
1717 -*-dejavu sans-medium-r-normal-*-*-100-*-*-*-*-*-1
1718 @end example
1719
1720 To be able to use such full names for the TrueType fonts installed in
1721 your Guix profile, you need to extend the font path of the X server:
1722
1723 @c Note: 'xset' does not accept symlinks so the trick below arranges to
1724 @c get at the real directory. See <https://bugs.gnu.org/30655>.
1725 @example
1726 xset +fp $(dirname $(readlink -f ~/.guix-profile/share/fonts/truetype/fonts.dir))
1727 @end example
1728
1729 @cindex @code{xlsfonts}
1730 After that, you can run @code{xlsfonts} (from @code{xlsfonts} package)
1731 to make sure your TrueType fonts are listed there.
1732
1733
1734 @subsection X.509 Certificates
1735
1736 @cindex @code{nss-certs}
1737 The @code{nss-certs} package provides X.509 certificates, which allow
1738 programs to authenticate Web servers accessed over HTTPS.
1739
1740 When using Guix on a foreign distro, you can install this package and
1741 define the relevant environment variables so that packages know where to
1742 look for certificates. @xref{X.509 Certificates}, for detailed
1743 information.
1744
1745 @subsection Emacs Packages
1746
1747 @cindex @code{emacs}
1748 When you install Emacs packages with Guix, the Elisp files are placed
1749 under the @file{share/emacs/site-lisp/} directory of the profile in
1750 which they are installed. The Elisp libraries are made available to
1751 Emacs through the @code{EMACSLOADPATH} environment variable, which is
1752 set when installing Emacs itself.
1753
1754 Additionally, autoload definitions are automatically evaluated at the
1755 initialization of Emacs, by the Guix-specific
1756 @code{guix-emacs-autoload-packages} procedure. If, for some reason, you
1757 want to avoid auto-loading the Emacs packages installed with Guix, you
1758 can do so by running Emacs with the @code{--no-site-file} option
1759 (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
1760
1761 @subsection The GCC toolchain
1762
1763 @cindex GCC
1764 @cindex ld-wrapper
1765
1766 Guix offers individual compiler packages such as @code{gcc} but if you
1767 are in need of a complete toolchain for compiling and linking source
1768 code what you really want is the @code{gcc-toolchain} package. This
1769 package provides a complete GCC toolchain for C/C++ development,
1770 including GCC itself, the GNU C Library (headers and binaries, plus
1771 debugging symbols in the @code{debug} output), Binutils, and a linker
1772 wrapper.
1773
1774 The wrapper's purpose is to inspect the @code{-L} and @code{-l} switches
1775 passed to the linker, add corresponding @code{-rpath} arguments, and
1776 invoke the actual linker with this new set of arguments. You can instruct the
1777 wrapper to refuse to link against libraries not in the store by setting the
1778 @code{GUIX_LD_WRAPPER_ALLOW_IMPURITIES} environment variable to @code{no}.
1779
1780 @node Upgrading Guix
1781 @section Upgrading Guix
1782
1783 @cindex Upgrading Guix, on a foreign distro
1784
1785 To upgrade Guix, run:
1786
1787 @example
1788 guix pull
1789 @end example
1790
1791 @xref{Invoking guix pull}, for more information.
1792
1793 @cindex upgrading Guix for the root user, on a foreign distro
1794 @cindex upgrading the Guix daemon, on a foreign distro
1795 @cindex @command{guix pull} for the root user, on a foreign distro
1796
1797 On a foreign distro, you can upgrade the build daemon by running:
1798
1799 @example
1800 sudo -i guix pull
1801 @end example
1802
1803 @noindent
1804 followed by (assuming your distro uses the systemd service management
1805 tool):
1806
1807 @example
1808 systemctl restart guix-daemon.service
1809 @end example
1810
1811 On Guix System, upgrading the daemon is achieved by reconfiguring the
1812 system (@pxref{Invoking guix system, @code{guix system reconfigure}}).
1813
1814 @c TODO What else?
1815
1816 @c *********************************************************************
1817 @node System Installation
1818 @chapter System Installation
1819
1820 @cindex installing Guix System
1821 @cindex Guix System, installation
1822 This section explains how to install Guix System
1823 on a machine. Guix, as a package manager, can
1824 also be installed on top of a running GNU/Linux system,
1825 @pxref{Installation}.
1826
1827 @ifinfo
1828 @quotation Note
1829 @c This paragraph is for people reading this from tty2 of the
1830 @c installation image.
1831 You are reading this documentation with an Info reader. For details on
1832 how to use it, hit the @key{RET} key (``return'' or ``enter'') on the
1833 link that follows: @pxref{Top, Info reader,, info-stnd, Stand-alone GNU
1834 Info}. Hit @kbd{l} afterwards to come back here.
1835
1836 Alternately, run @command{info info} in another tty to keep the manual
1837 available.
1838 @end quotation
1839 @end ifinfo
1840
1841 @menu
1842 * Limitations:: What you can expect.
1843 * Hardware Considerations:: Supported hardware.
1844 * USB Stick and DVD Installation:: Preparing the installation medium.
1845 * Preparing for Installation:: Networking, partitioning, etc.
1846 * Guided Graphical Installation:: Easy graphical installation.
1847 * Manual Installation:: Manual installation for wizards.
1848 * After System Installation:: When installation succeeded.
1849 * Installing Guix in a VM:: Guix System playground.
1850 * Building the Installation Image:: How this comes to be.
1851 @end menu
1852
1853 @node Limitations
1854 @section Limitations
1855
1856 We consider Guix System to be ready for a wide range of ``desktop'' and server
1857 use cases. The reliability guarantees it provides---transactional upgrades
1858 and rollbacks, reproducibility---make it a solid foundation.
1859
1860 Nevertheless, before you proceed with the installation, be aware of the
1861 following noteworthy limitations applicable to version @value{VERSION}:
1862
1863 @itemize
1864 @item
1865 Support for the Logical Volume Manager (LVM) is missing.
1866
1867 @item
1868 More and more system services are provided (@pxref{Services}), but some
1869 may be missing.
1870
1871 @item
1872 GNOME, Xfce, LXDE, and Enlightenment are available (@pxref{Desktop Services}),
1873 as well as a number of X11 window managers. However, KDE is currently
1874 missing.
1875 @end itemize
1876
1877 More than a disclaimer, this is an invitation to report issues (and success
1878 stories!), and to join us in improving it. @xref{Contributing}, for more
1879 info.
1880
1881
1882 @node Hardware Considerations
1883 @section Hardware Considerations
1884
1885 @cindex hardware support on Guix System
1886 GNU@tie{}Guix focuses on respecting the user's computing freedom. It
1887 builds around the kernel Linux-libre, which means that only hardware for
1888 which free software drivers and firmware exist is supported. Nowadays,
1889 a wide range of off-the-shelf hardware is supported on
1890 GNU/Linux-libre---from keyboards to graphics cards to scanners and
1891 Ethernet controllers. Unfortunately, there are still areas where
1892 hardware vendors deny users control over their own computing, and such
1893 hardware is not supported on Guix System.
1894
1895 @cindex WiFi, hardware support
1896 One of the main areas where free drivers or firmware are lacking is WiFi
1897 devices. WiFi devices known to work include those using Atheros chips
1898 (AR9271 and AR7010), which corresponds to the @code{ath9k} Linux-libre
1899 driver, and those using Broadcom/AirForce chips (BCM43xx with
1900 Wireless-Core Revision 5), which corresponds to the @code{b43-open}
1901 Linux-libre driver. Free firmware exists for both and is available
1902 out-of-the-box on Guix System, as part of @code{%base-firmware}
1903 (@pxref{operating-system Reference, @code{firmware}}).
1904
1905 @cindex RYF, Respects Your Freedom
1906 The @uref{https://www.fsf.org/, Free Software Foundation} runs
1907 @uref{https://www.fsf.org/ryf, @dfn{Respects Your Freedom}} (RYF), a
1908 certification program for hardware products that respect your freedom
1909 and your privacy and ensure that you have control over your device. We
1910 encourage you to check the list of RYF-certified devices.
1911
1912 Another useful resource is the @uref{https://www.h-node.org/, H-Node}
1913 web site. It contains a catalog of hardware devices with information
1914 about their support in GNU/Linux.
1915
1916
1917 @node USB Stick and DVD Installation
1918 @section USB Stick and DVD Installation
1919
1920 An ISO-9660 installation image that can be written to a USB stick or
1921 burnt to a DVD can be downloaded from
1922 @indicateurl{@value{BASE-URL}/guix-system-install-@value{VERSION}.@var{system}.iso.xz},
1923 where @var{system} is one of:
1924
1925 @table @code
1926 @item x86_64-linux
1927 for a GNU/Linux system on Intel/AMD-compatible 64-bit CPUs;
1928
1929 @item i686-linux
1930 for a 32-bit GNU/Linux system on Intel-compatible CPUs.
1931 @end table
1932
1933 @c start duplication of authentication part from ``Binary Installation''
1934 Make sure to download the associated @file{.sig} file and to verify the
1935 authenticity of the image against it, along these lines:
1936
1937 @example
1938 $ wget @value{BASE-URL}/guix-system-install-@value{VERSION}.@var{system}.iso.xz.sig
1939 $ gpg --verify guix-system-install-@value{VERSION}.@var{system}.iso.xz.sig
1940 @end example
1941
1942 If that command fails because you do not have the required public key,
1943 then run this command to import it:
1944
1945 @example
1946 $ wget @value{OPENPGP-SIGNING-KEY-URL} \
1947 -qO - | gpg --import -
1948 @end example
1949
1950 @noindent
1951 and rerun the @code{gpg --verify} command.
1952
1953 Take note that a warning like ``This key is not certified with a trusted
1954 signature!'' is normal.
1955
1956 @c end duplication
1957
1958 This image contains the tools necessary for an installation.
1959 It is meant to be copied @emph{as is} to a large-enough USB stick or DVD.
1960
1961 @unnumberedsubsec Copying to a USB Stick
1962
1963 To copy the image to a USB stick, follow these steps:
1964
1965 @enumerate
1966 @item
1967 Decompress the image using the @command{xz} command:
1968
1969 @example
1970 xz -d guix-system-install-@value{VERSION}.@var{system}.iso.xz
1971 @end example
1972
1973 @item
1974 Insert a USB stick of 1@tie{}GiB or more into your machine, and determine
1975 its device name. Assuming that the USB stick is known as @file{/dev/sdX},
1976 copy the image with:
1977
1978 @example
1979 dd if=guix-system-install-@value{VERSION}.@var{system}.iso of=/dev/sdX
1980 sync
1981 @end example
1982
1983 Access to @file{/dev/sdX} usually requires root privileges.
1984 @end enumerate
1985
1986 @unnumberedsubsec Burning on a DVD
1987
1988 To copy the image to a DVD, follow these steps:
1989
1990 @enumerate
1991 @item
1992 Decompress the image using the @command{xz} command:
1993
1994 @example
1995 xz -d guix-system-install-@value{VERSION}.@var{system}.iso.xz
1996 @end example
1997
1998 @item
1999 Insert a blank DVD into your machine, and determine
2000 its device name. Assuming that the DVD drive is known as @file{/dev/srX},
2001 copy the image with:
2002
2003 @example
2004 growisofs -dvd-compat -Z /dev/srX=guix-system-install-@value{VERSION}.@var{system}.iso
2005 @end example
2006
2007 Access to @file{/dev/srX} usually requires root privileges.
2008 @end enumerate
2009
2010 @unnumberedsubsec Booting
2011
2012 Once this is done, you should be able to reboot the system and boot from
2013 the USB stick or DVD. The latter usually requires you to get in the
2014 BIOS or UEFI boot menu, where you can choose to boot from the USB stick.
2015 In order to boot from Libreboot, switch to the command mode by pressing
2016 the @kbd{c} key and type @command{search_grub usb}.
2017
2018 @xref{Installing Guix in a VM}, if, instead, you would like to install
2019 Guix System in a virtual machine (VM).
2020
2021
2022 @node Preparing for Installation
2023 @section Preparing for Installation
2024
2025 Once you have booted, you can use the guided graphical installer, which makes
2026 it easy to get started (@pxref{Guided Graphical Installation}). Alternately,
2027 if you are already familiar with GNU/Linux and if you want more control than
2028 what the graphical installer provides, you can choose the ``manual''
2029 installation process (@pxref{Manual Installation}).
2030
2031 The graphical installer is available on TTY1. You can obtain root shells on
2032 TTYs 3 to 6 by hitting @kbd{ctrl-alt-f3}, @kbd{ctrl-alt-f4}, etc. TTY2 shows
2033 this documentation and you can reach it with @kbd{ctrl-alt-f2}. Documentation
2034 is browsable using the Info reader commands (@pxref{Top,,, info-stnd,
2035 Stand-alone GNU Info}). The installation system runs the GPM mouse daemon,
2036 which allows you to select text with the left mouse button and to paste it
2037 with the middle button.
2038
2039 @quotation Note
2040 Installation requires access to the Internet so that any missing
2041 dependencies of your system configuration can be downloaded. See the
2042 ``Networking'' section below.
2043 @end quotation
2044
2045 @node Guided Graphical Installation
2046 @section Guided Graphical Installation
2047
2048 The graphical installer is a text-based user interface. It will guide you,
2049 with dialog boxes, through the steps needed to install GNU@tie{}Guix System.
2050
2051 The first dialog boxes allow you to set up the system as you use it during the
2052 installation: you can choose the language, keyboard layout, and set up
2053 networking, which will be used during the installation. The image below shows
2054 the networking dialog.
2055
2056 @image{images/installer-network,5in,, networking setup with the graphical installer}
2057
2058 Later steps allow you to partition your hard disk, as shown in the image
2059 below, to choose whether or not to use encrypted file systems, to enter the
2060 host name and root password, and to create an additional account, among other
2061 things.
2062
2063 @image{images/installer-partitions,5in,, partitioning with the graphical installer}
2064
2065 Note that, at any time, the installer allows you to exit the current
2066 installation step and resume at a previous step, as show in the image below.
2067
2068 @image{images/installer-resume,5in,, resuming the installation process}
2069
2070 Once you're done, the installer produces an operating system configuration and
2071 displays it (@pxref{Using the Configuration System}). At that point you can
2072 hit ``OK'' and installation will proceed. On success, you can reboot into the
2073 new system and enjoy. @xref{After System Installation}, for what's next!
2074
2075
2076 @node Manual Installation
2077 @section Manual Installation
2078
2079 This section describes how you would ``manually'' install GNU@tie{}Guix System
2080 on your machine. This option requires familiarity with GNU/Linux, with the
2081 shell, and with common administration tools. If you think this is not for
2082 you, consider using the guided graphical installer (@pxref{Guided Graphical
2083 Installation}).
2084
2085 The installation system provides root shells on TTYs 3 to 6; press
2086 @kbd{ctrl-alt-f3}, @kbd{ctrl-alt-f4}, and so on to reach them. It includes
2087 many common tools needed to install the system. But it is also a full-blown
2088 Guix System, which means that you can install additional packages, should you
2089 need it, using @command{guix package} (@pxref{Invoking guix package}).
2090
2091 @menu
2092 * Keyboard Layout and Networking and Partitioning:: Initial setup.
2093 * Proceeding with the Installation:: Installing.
2094 @end menu
2095
2096 @node Keyboard Layout and Networking and Partitioning
2097 @subsection Keyboard Layout, Networking, and Partitioning
2098
2099 Before you can install the system, you may want to adjust the keyboard layout,
2100 set up networking, and partition your target hard disk. This section will
2101 guide you through this.
2102
2103 @subsubsection Keyboard Layout
2104
2105 @cindex keyboard layout
2106 The installation image uses the US qwerty keyboard layout. If you want
2107 to change it, you can use the @command{loadkeys} command. For example,
2108 the following command selects the Dvorak keyboard layout:
2109
2110 @example
2111 loadkeys dvorak
2112 @end example
2113
2114 See the files under @file{/run/current-system/profile/share/keymaps} for
2115 a list of available keyboard layouts. Run @command{man loadkeys} for
2116 more information.
2117
2118 @subsubsection Networking
2119
2120 Run the following command to see what your network interfaces are called:
2121
2122 @example
2123 ifconfig -a
2124 @end example
2125
2126 @noindent
2127 @dots{} or, using the GNU/Linux-specific @command{ip} command:
2128
2129 @example
2130 ip address
2131 @end example
2132
2133 @c https://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
2134 Wired interfaces have a name starting with @samp{e}; for example, the
2135 interface corresponding to the first on-board Ethernet controller is
2136 called @samp{eno1}. Wireless interfaces have a name starting with
2137 @samp{w}, like @samp{w1p2s0}.
2138
2139 @table @asis
2140 @item Wired connection
2141 To configure a wired network run the following command, substituting
2142 @var{interface} with the name of the wired interface you want to use.
2143
2144 @example
2145 ifconfig @var{interface} up
2146 @end example
2147
2148 @noindent
2149 @dots{} or, using the GNU/Linux-specific @command{ip} command:
2150
2151 @example
2152 ip link set @var{interface} up
2153 @end example
2154
2155 @item Wireless connection
2156 @cindex wireless
2157 @cindex WiFi
2158 To configure wireless networking, you can create a configuration file
2159 for the @command{wpa_supplicant} configuration tool (its location is not
2160 important) using one of the available text editors such as
2161 @command{nano}:
2162
2163 @example
2164 nano wpa_supplicant.conf
2165 @end example
2166
2167 As an example, the following stanza can go to this file and will work
2168 for many wireless networks, provided you give the actual SSID and
2169 passphrase for the network you are connecting to:
2170
2171 @example
2172 network=@{
2173 ssid="@var{my-ssid}"
2174 key_mgmt=WPA-PSK
2175 psk="the network's secret passphrase"
2176 @}
2177 @end example
2178
2179 Start the wireless service and run it in the background with the
2180 following command (substitute @var{interface} with the name of the
2181 network interface you want to use):
2182
2183 @example
2184 wpa_supplicant -c wpa_supplicant.conf -i @var{interface} -B
2185 @end example
2186
2187 Run @command{man wpa_supplicant} for more information.
2188 @end table
2189
2190 @cindex DHCP
2191 At this point, you need to acquire an IP address. On a network where IP
2192 addresses are automatically assigned @i{via} DHCP, you can run:
2193
2194 @example
2195 dhclient -v @var{interface}
2196 @end example
2197
2198 Try to ping a server to see if networking is up and running:
2199
2200 @example
2201 ping -c 3 gnu.org
2202 @end example
2203
2204 Setting up network access is almost always a requirement because the
2205 image does not contain all the software and tools that may be needed.
2206
2207 @cindex proxy, during system installation
2208 If you need HTTP and HTTPS access to go through a proxy, run the
2209 following command:
2210
2211 @example
2212 herd set-http-proxy guix-daemon @var{URL}
2213 @end example
2214
2215 @noindent
2216 where @var{URL} is the proxy URL, for example
2217 @code{http://example.org:8118}.
2218
2219 @cindex installing over SSH
2220 If you want to, you can continue the installation remotely by starting
2221 an SSH server:
2222
2223 @example
2224 herd start ssh-daemon
2225 @end example
2226
2227 Make sure to either set a password with @command{passwd}, or configure
2228 OpenSSH public key authentication before logging in.
2229
2230 @subsubsection Disk Partitioning
2231
2232 Unless this has already been done, the next step is to partition, and
2233 then format the target partition(s).
2234
2235 The installation image includes several partitioning tools, including
2236 Parted (@pxref{Overview,,, parted, GNU Parted User Manual}),
2237 @command{fdisk}, and @command{cfdisk}. Run it and set up your disk with
2238 the partition layout you want:
2239
2240 @example
2241 cfdisk
2242 @end example
2243
2244 If your disk uses the GUID Partition Table (GPT) format and you plan to
2245 install BIOS-based GRUB (which is the default), make sure a BIOS Boot
2246 Partition is available (@pxref{BIOS installation,,, grub, GNU GRUB
2247 manual}).
2248
2249 @cindex EFI, installation
2250 @cindex UEFI, installation
2251 @cindex ESP, EFI system partition
2252 If you instead wish to use EFI-based GRUB, a FAT32 @dfn{EFI System Partition}
2253 (ESP) is required. This partition can be mounted at @file{/boot/efi} for
2254 instance and must have the @code{esp} flag set. E.g., for @command{parted}:
2255
2256 @example
2257 parted /dev/sda set 1 esp on
2258 @end example
2259
2260 @quotation Note
2261 @vindex grub-bootloader
2262 @vindex grub-efi-bootloader
2263 Unsure whether to use EFI- or BIOS-based GRUB? If the directory
2264 @file{/sys/firmware/efi} exists in the installation image, then you should
2265 probably perform an EFI installation, using @code{grub-efi-bootloader}.
2266 Otherwise you should use the BIOS-based GRUB, known as
2267 @code{grub-bootloader}. @xref{Bootloader Configuration}, for more info on
2268 bootloaders.
2269 @end quotation
2270
2271 Once you are done partitioning the target hard disk drive, you have to
2272 create a file system on the relevant partition(s)@footnote{Currently
2273 Guix System only supports ext4, btrfs, and JFS file systems. In particular,
2274 code that reads file system UUIDs and labels only works for these file system
2275 types.}. For the ESP, if you have one and assuming it is
2276 @file{/dev/sda1}, run:
2277
2278 @example
2279 mkfs.fat -F32 /dev/sda1
2280 @end example
2281
2282 Preferably, assign file systems a label so that you can easily and
2283 reliably refer to them in @code{file-system} declarations (@pxref{File
2284 Systems}). This is typically done using the @code{-L} option of
2285 @command{mkfs.ext4} and related commands. So, assuming the target root
2286 partition lives at @file{/dev/sda2}, a file system with the label
2287 @code{my-root} can be created with:
2288
2289 @example
2290 mkfs.ext4 -L my-root /dev/sda2
2291 @end example
2292
2293 @cindex encrypted disk
2294 If you are instead planning to encrypt the root partition, you can use
2295 the Cryptsetup/LUKS utilities to do that (see @inlinefmtifelse{html,
2296 @uref{https://linux.die.net/man/8/cryptsetup, @code{man cryptsetup}},
2297 @code{man cryptsetup}} for more information.) Assuming you want to
2298 store the root partition on @file{/dev/sda2}, the command sequence would
2299 be along these lines:
2300
2301 @example
2302 cryptsetup luksFormat /dev/sda2
2303 cryptsetup open --type luks /dev/sda2 my-partition
2304 mkfs.ext4 -L my-root /dev/mapper/my-partition
2305 @end example
2306
2307 Once that is done, mount the target file system under @file{/mnt}
2308 with a command like (again, assuming @code{my-root} is the label of the
2309 root file system):
2310
2311 @example
2312 mount LABEL=my-root /mnt
2313 @end example
2314
2315 Also mount any other file systems you would like to use on the target
2316 system relative to this path. If you have opted for @file{/boot/efi} as an
2317 EFI mount point for example, mount it at @file{/mnt/boot/efi} now so it is
2318 found by @code{guix system init} afterwards.
2319
2320 Finally, if you plan to use one or more swap partitions (@pxref{Memory
2321 Concepts, swap space,, libc, The GNU C Library Reference Manual}), make
2322 sure to initialize them with @command{mkswap}. Assuming you have one
2323 swap partition on @file{/dev/sda3}, you would run:
2324
2325 @example
2326 mkswap /dev/sda3
2327 swapon /dev/sda3
2328 @end example
2329
2330 Alternatively, you may use a swap file. For example, assuming that in
2331 the new system you want to use the file @file{/swapfile} as a swap file,
2332 you would run@footnote{This example will work for many types of file
2333 systems (e.g., ext4). However, for copy-on-write file systems (e.g.,
2334 btrfs), the required steps may be different. For details, see the
2335 manual pages for @command{mkswap} and @command{swapon}.}:
2336
2337 @example
2338 # This is 10 GiB of swap space. Adjust "count" to change the size.
2339 dd if=/dev/zero of=/mnt/swapfile bs=1MiB count=10240
2340 # For security, make the file readable and writable only by root.
2341 chmod 600 /mnt/swapfile
2342 mkswap /mnt/swapfile
2343 swapon /mnt/swapfile
2344 @end example
2345
2346 Note that if you have encrypted the root partition and created a swap
2347 file in its file system as described above, then the encryption also
2348 protects the swap file, just like any other file in that file system.
2349
2350 @node Proceeding with the Installation
2351 @subsection Proceeding with the Installation
2352
2353 With the target partitions ready and the target root mounted on
2354 @file{/mnt}, we're ready to go. First, run:
2355
2356 @example
2357 herd start cow-store /mnt
2358 @end example
2359
2360 This makes @file{/gnu/store} copy-on-write, such that packages added to it
2361 during the installation phase are written to the target disk on @file{/mnt}
2362 rather than kept in memory. This is necessary because the first phase of
2363 the @command{guix system init} command (see below) entails downloads or
2364 builds to @file{/gnu/store} which, initially, is an in-memory file system.
2365
2366 Next, you have to edit a file and
2367 provide the declaration of the operating system to be installed. To
2368 that end, the installation system comes with three text editors. We
2369 recommend GNU nano (@pxref{Top,,, nano, GNU nano Manual}), which
2370 supports syntax highlighting and parentheses matching; other editors
2371 include GNU Zile (an Emacs clone), and
2372 nvi (a clone of the original BSD @command{vi} editor).
2373 We strongly recommend storing that file on the target root file system, say,
2374 as @file{/mnt/etc/config.scm}. Failing to do that, you will have lost your
2375 configuration file once you have rebooted into the newly-installed system.
2376
2377 @xref{Using the Configuration System}, for an overview of the
2378 configuration file. The example configurations discussed in that
2379 section are available under @file{/etc/configuration} in the
2380 installation image. Thus, to get started with a system configuration
2381 providing a graphical display server (a ``desktop'' system), you can run
2382 something along these lines:
2383
2384 @example
2385 # mkdir /mnt/etc
2386 # cp /etc/configuration/desktop.scm /mnt/etc/config.scm
2387 # nano /mnt/etc/config.scm
2388 @end example
2389
2390 You should pay attention to what your configuration file contains, and
2391 in particular:
2392
2393 @itemize
2394 @item
2395 Make sure the @code{bootloader-configuration} form refers to the target
2396 you want to install GRUB on. It should mention @code{grub-bootloader} if
2397 you are installing GRUB in the legacy way, or @code{grub-efi-bootloader}
2398 for newer UEFI systems. For legacy systems, the @code{target} field
2399 names a device, like @code{/dev/sda}; for UEFI systems it names a path
2400 to a mounted EFI partition, like @code{/boot/efi}; do make sure the path is
2401 currently mounted and a @code{file-system} entry is specified in your
2402 configuration.
2403
2404 @item
2405 Be sure that your file system labels match the value of their respective
2406 @code{device} fields in your @code{file-system} configuration, assuming
2407 your @code{file-system} configuration uses the @code{file-system-label}
2408 procedure in its @code{device} field.
2409
2410 @item
2411 If there are encrypted or RAID partitions, make sure to add a
2412 @code{mapped-devices} field to describe them (@pxref{Mapped Devices}).
2413 @end itemize
2414
2415 Once you are done preparing the configuration file, the new system must
2416 be initialized (remember that the target root file system is mounted
2417 under @file{/mnt}):
2418
2419 @example
2420 guix system init /mnt/etc/config.scm /mnt
2421 @end example
2422
2423 @noindent
2424 This copies all the necessary files and installs GRUB on
2425 @file{/dev/sdX}, unless you pass the @option{--no-bootloader} option. For
2426 more information, @pxref{Invoking guix system}. This command may trigger
2427 downloads or builds of missing packages, which can take some time.
2428
2429 Once that command has completed---and hopefully succeeded!---you can run
2430 @command{reboot} and boot into the new system. The @code{root} password
2431 in the new system is initially empty; other users' passwords need to be
2432 initialized by running the @command{passwd} command as @code{root},
2433 unless your configuration specifies otherwise
2434 (@pxref{user-account-password, user account passwords}).
2435 @xref{After System Installation}, for what's next!
2436
2437
2438 @node After System Installation
2439 @section After System Installation
2440
2441 Success, you've now booted into Guix System! From then on, you can update the
2442 system whenever you want by running, say:
2443
2444 @example
2445 guix pull
2446 sudo guix system reconfigure /etc/config.scm
2447 @end example
2448
2449 @noindent
2450 This builds a new system generation with the latest packages and services
2451 (@pxref{Invoking guix system}). We recommend doing that regularly so that
2452 your system includes the latest security updates (@pxref{Security Updates}).
2453
2454 @c See <https://lists.gnu.org/archive/html/guix-devel/2019-01/msg00268.html>.
2455 @quotation Note
2456 @cindex sudo vs. @command{guix pull}
2457 Note that @command{sudo guix} runs your user's @command{guix} command and
2458 @emph{not} root's, because @command{sudo} leaves @code{PATH} unchanged. To
2459 explicitly run root's @command{guix}, type @command{sudo -i guix @dots{}}.
2460
2461 The difference matters here, because @command{guix pull} updates
2462 the @command{guix} command and package definitions only for the user it is ran
2463 as. This means that if you choose to use @command{guix system reconfigure} in
2464 root's login shell, you'll need to @command{guix pull} separately.
2465 @end quotation
2466
2467 Join us on @code{#guix} on the Freenode IRC network or on
2468 @email{guix-devel@@gnu.org} to share your experience!
2469
2470
2471 @node Installing Guix in a VM
2472 @section Installing Guix in a Virtual Machine
2473
2474 @cindex virtual machine, Guix System installation
2475 @cindex virtual private server (VPS)
2476 @cindex VPS (virtual private server)
2477 If you'd like to install Guix System in a virtual machine (VM) or on a
2478 virtual private server (VPS) rather than on your beloved machine, this
2479 section is for you.
2480
2481 To boot a @uref{https://qemu.org/,QEMU} VM for installing Guix System in a
2482 disk image, follow these steps:
2483
2484 @enumerate
2485 @item
2486 First, retrieve and decompress the Guix system installation image as
2487 described previously (@pxref{USB Stick and DVD Installation}).
2488
2489 @item
2490 Create a disk image that will hold the installed system. To make a
2491 qcow2-formatted disk image, use the @command{qemu-img} command:
2492
2493 @example
2494 qemu-img create -f qcow2 guix-system.img 50G
2495 @end example
2496
2497 The resulting file will be much smaller than 50 GB (typically less than
2498 1 MB), but it will grow as the virtualized storage device is filled up.
2499
2500 @item
2501 Boot the USB installation image in an VM:
2502
2503 @example
2504 qemu-system-x86_64 -m 1024 -smp 1 -enable-kvm \
2505 -nic user,model=virtio-net-pci -boot menu=on,order=d \
2506 -drive file=guix-system.img \
2507 -drive media=cdrom,file=guix-system-install-@value{VERSION}.@var{system}.iso
2508 @end example
2509
2510 @code{-enable-kvm} is optional, but significantly improves performance,
2511 @pxref{Running Guix in a VM}.
2512
2513 @item
2514 You're now root in the VM, proceed with the installation process.
2515 @xref{Preparing for Installation}, and follow the instructions.
2516 @end enumerate
2517
2518 Once installation is complete, you can boot the system that's on your
2519 @file{guix-system.img} image. @xref{Running Guix in a VM}, for how to do
2520 that.
2521
2522 @node Building the Installation Image
2523 @section Building the Installation Image
2524
2525 @cindex installation image
2526 The installation image described above was built using the @command{guix
2527 system} command, specifically:
2528
2529 @example
2530 guix system disk-image --file-system-type=iso9660 \
2531 gnu/system/install.scm
2532 @end example
2533
2534 Have a look at @file{gnu/system/install.scm} in the source tree,
2535 and see also @ref{Invoking guix system} for more information
2536 about the installation image.
2537
2538 @section Building the Installation Image for ARM Boards
2539
2540 Many ARM boards require a specific variant of the
2541 @uref{https://www.denx.de/wiki/U-Boot/, U-Boot} bootloader.
2542
2543 If you build a disk image and the bootloader is not available otherwise
2544 (on another boot drive etc), it's advisable to build an image that
2545 includes the bootloader, specifically:
2546
2547 @example
2548 guix system disk-image --system=armhf-linux -e '((@@ (gnu system install) os-with-u-boot) (@@ (gnu system install) installation-os) "A20-OLinuXino-Lime2")'
2549 @end example
2550
2551 @code{A20-OLinuXino-Lime2} is the name of the board. If you specify an invalid
2552 board, a list of possible boards will be printed.
2553
2554 @c *********************************************************************
2555 @node Package Management
2556 @chapter Package Management
2557
2558 @cindex packages
2559 The purpose of GNU Guix is to allow users to easily install, upgrade, and
2560 remove software packages, without having to know about their build
2561 procedures or dependencies. Guix also goes beyond this obvious set of
2562 features.
2563
2564 This chapter describes the main features of Guix, as well as the
2565 package management tools it provides. Along with the command-line
2566 interface described below (@pxref{Invoking guix package, @code{guix
2567 package}}), you may also use the Emacs-Guix interface (@pxref{Top,,,
2568 emacs-guix, The Emacs-Guix Reference Manual}), after installing
2569 @code{emacs-guix} package (run @kbd{M-x guix-help} command to start
2570 with it):
2571
2572 @example
2573 guix install emacs-guix
2574 @end example
2575
2576 @menu
2577 * Features:: How Guix will make your life brighter.
2578 * Invoking guix package:: Package installation, removal, etc.
2579 * Substitutes:: Downloading pre-built binaries.
2580 * Packages with Multiple Outputs:: Single source package, multiple outputs.
2581 * Invoking guix gc:: Running the garbage collector.
2582 * Invoking guix pull:: Fetching the latest Guix and distribution.
2583 * Channels:: Customizing the package collection.
2584 * Invoking guix time-machine:: Running an older revision of Guix.
2585 * Inferiors:: Interacting with another revision of Guix.
2586 * Invoking guix describe:: Display information about your Guix revision.
2587 * Invoking guix archive:: Exporting and importing store files.
2588 @end menu
2589
2590 @node Features
2591 @section Features
2592
2593 When using Guix, each package ends up in the @dfn{package store}, in its
2594 own directory---something that resembles
2595 @file{/gnu/store/xxx-package-1.2}, where @code{xxx} is a base32 string.
2596
2597 Instead of referring to these directories, users have their own
2598 @dfn{profile}, which points to the packages that they actually want to
2599 use. These profiles are stored within each user's home directory, at
2600 @code{$HOME/.guix-profile}.
2601
2602 For example, @code{alice} installs GCC 4.7.2. As a result,
2603 @file{/home/alice/.guix-profile/bin/gcc} points to
2604 @file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Now, on the same machine,
2605 @code{bob} had already installed GCC 4.8.0. The profile of @code{bob}
2606 simply continues to point to
2607 @file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc}---i.e., both versions of GCC
2608 coexist on the same system without any interference.
2609
2610 The @command{guix package} command is the central tool to manage
2611 packages (@pxref{Invoking guix package}). It operates on the per-user
2612 profiles, and can be used @emph{with normal user privileges}.
2613
2614 @cindex transactions
2615 The command provides the obvious install, remove, and upgrade
2616 operations. Each invocation is actually a @emph{transaction}: either
2617 the specified operation succeeds, or nothing happens. Thus, if the
2618 @command{guix package} process is terminated during the transaction,
2619 or if a power outage occurs during the transaction, then the user's
2620 profile remains in its previous state, and remains usable.
2621
2622 In addition, any package transaction may be @emph{rolled back}. So, if,
2623 for example, an upgrade installs a new version of a package that turns
2624 out to have a serious bug, users may roll back to the previous instance
2625 of their profile, which was known to work well. Similarly, the global
2626 system configuration on Guix is subject to
2627 transactional upgrades and roll-back
2628 (@pxref{Using the Configuration System}).
2629
2630 All packages in the package store may be @emph{garbage-collected}.
2631 Guix can determine which packages are still referenced by user
2632 profiles, and remove those that are provably no longer referenced
2633 (@pxref{Invoking guix gc}). Users may also explicitly remove old
2634 generations of their profile so that the packages they refer to can be
2635 collected.
2636
2637 @cindex reproducibility
2638 @cindex reproducible builds
2639 Guix takes a @dfn{purely functional} approach to package
2640 management, as described in the introduction (@pxref{Introduction}).
2641 Each @file{/gnu/store} package directory name contains a hash of all the
2642 inputs that were used to build that package---compiler, libraries, build
2643 scripts, etc. This direct correspondence allows users to make sure a
2644 given package installation matches the current state of their
2645 distribution. It also helps maximize @dfn{build reproducibility}:
2646 thanks to the isolated build environments that are used, a given build
2647 is likely to yield bit-identical files when performed on different
2648 machines (@pxref{Invoking guix-daemon, container}).
2649
2650 @cindex substitutes
2651 This foundation allows Guix to support @dfn{transparent binary/source
2652 deployment}. When a pre-built binary for a @file{/gnu/store} item is
2653 available from an external source---a @dfn{substitute}, Guix just
2654 downloads it and unpacks it;
2655 otherwise, it builds the package from source, locally
2656 (@pxref{Substitutes}). Because build results are usually bit-for-bit
2657 reproducible, users do not have to trust servers that provide
2658 substitutes: they can force a local build and @emph{challenge} providers
2659 (@pxref{Invoking guix challenge}).
2660
2661 Control over the build environment is a feature that is also useful for
2662 developers. The @command{guix environment} command allows developers of
2663 a package to quickly set up the right development environment for their
2664 package, without having to manually install the dependencies of the
2665 package into their profile (@pxref{Invoking guix environment}).
2666
2667 @cindex replication, of software environments
2668 @cindex provenance tracking, of software artifacts
2669 All of Guix and its package definitions is version-controlled, and
2670 @command{guix pull} allows you to ``travel in time'' on the history of Guix
2671 itself (@pxref{Invoking guix pull}). This makes it possible to replicate a
2672 Guix instance on a different machine or at a later point in time, which in
2673 turn allows you to @emph{replicate complete software environments}, while
2674 retaining precise @dfn{provenance tracking} of the software.
2675
2676 @node Invoking guix package
2677 @section Invoking @command{guix package}
2678
2679 @cindex installing packages
2680 @cindex removing packages
2681 @cindex package installation
2682 @cindex package removal
2683 The @command{guix package} command is the tool that allows users to
2684 install, upgrade, and remove packages, as well as rolling back to
2685 previous configurations. It operates only on the user's own profile,
2686 and works with normal user privileges (@pxref{Features}). Its syntax
2687 is:
2688
2689 @example
2690 guix package @var{options}
2691 @end example
2692
2693 @cindex transactions
2694 Primarily, @var{options} specifies the operations to be performed during
2695 the transaction. Upon completion, a new profile is created, but
2696 previous @dfn{generations} of the profile remain available, should the user
2697 want to roll back.
2698
2699 For example, to remove @code{lua} and install @code{guile} and
2700 @code{guile-cairo} in a single transaction:
2701
2702 @example
2703 guix package -r lua -i guile guile-cairo
2704 @end example
2705
2706 @cindex aliases, for @command{guix package}
2707 For your convenience, we also provide the following aliases:
2708
2709 @itemize
2710 @item
2711 @command{guix search} is an alias for @command{guix package -s},
2712 @item
2713 @command{guix install} is an alias for @command{guix package -i},
2714 @item
2715 @command{guix remove} is an alias for @command{guix package -r},
2716 @item
2717 @command{guix upgrade} is an alias for @command{guix package -u},
2718 @item
2719 and @command{guix show} is an alias for @command{guix package --show=}.
2720 @end itemize
2721
2722 These aliases are less expressive than @command{guix package} and provide
2723 fewer options, so in some cases you'll probably want to use @command{guix
2724 package} directly.
2725
2726 @command{guix package} also supports a @dfn{declarative approach}
2727 whereby the user specifies the exact set of packages to be available and
2728 passes it @i{via} the @option{--manifest} option
2729 (@pxref{profile-manifest, @option{--manifest}}).
2730
2731 @cindex profile
2732 For each user, a symlink to the user's default profile is automatically
2733 created in @file{$HOME/.guix-profile}. This symlink always points to the
2734 current generation of the user's default profile. Thus, users can add
2735 @file{$HOME/.guix-profile/bin} to their @code{PATH} environment
2736 variable, and so on.
2737 @cindex search paths
2738 If you are not using Guix System, consider adding the
2739 following lines to your @file{~/.bash_profile} (@pxref{Bash Startup
2740 Files,,, bash, The GNU Bash Reference Manual}) so that newly-spawned
2741 shells get all the right environment variable definitions:
2742
2743 @example
2744 GUIX_PROFILE="$HOME/.guix-profile" ; \
2745 source "$HOME/.guix-profile/etc/profile"
2746 @end example
2747
2748 In a multi-user setup, user profiles are stored in a place registered as
2749 a @dfn{garbage-collector root}, which @file{$HOME/.guix-profile} points
2750 to (@pxref{Invoking guix gc}). That directory is normally
2751 @code{@var{localstatedir}/guix/profiles/per-user/@var{user}}, where
2752 @var{localstatedir} is the value passed to @code{configure} as
2753 @code{--localstatedir}, and @var{user} is the user name. The
2754 @file{per-user} directory is created when @command{guix-daemon} is
2755 started, and the @var{user} sub-directory is created by @command{guix
2756 package}.
2757
2758 The @var{options} can be among the following:
2759
2760 @table @code
2761
2762 @item --install=@var{package} @dots{}
2763 @itemx -i @var{package} @dots{}
2764 Install the specified @var{package}s.
2765
2766 Each @var{package} may specify either a simple package name, such as
2767 @code{guile}, or a package name followed by an at-sign and version number,
2768 such as @code{guile@@1.8.8} or simply @code{guile@@1.8} (in the latter
2769 case, the newest version prefixed by @code{1.8} is selected.)
2770
2771 If no version number is specified, the
2772 newest available version will be selected. In addition, @var{package}
2773 may contain a colon, followed by the name of one of the outputs of the
2774 package, as in @code{gcc:doc} or @code{binutils@@2.22:lib}
2775 (@pxref{Packages with Multiple Outputs}). Packages with a corresponding
2776 name (and optionally version) are searched for among the GNU
2777 distribution modules (@pxref{Package Modules}).
2778
2779 @cindex propagated inputs
2780 Sometimes packages have @dfn{propagated inputs}: these are dependencies
2781 that automatically get installed along with the required package
2782 (@pxref{package-propagated-inputs, @code{propagated-inputs} in
2783 @code{package} objects}, for information about propagated inputs in
2784 package definitions).
2785
2786 @anchor{package-cmd-propagated-inputs}
2787 An example is the GNU MPC library: its C header files refer to those of
2788 the GNU MPFR library, which in turn refer to those of the GMP library.
2789 Thus, when installing MPC, the MPFR and GMP libraries also get installed
2790 in the profile; removing MPC also removes MPFR and GMP---unless they had
2791 also been explicitly installed by the user.
2792
2793 Besides, packages sometimes rely on the definition of environment
2794 variables for their search paths (see explanation of
2795 @code{--search-paths} below). Any missing or possibly incorrect
2796 environment variable definitions are reported here.
2797
2798 @item --install-from-expression=@var{exp}
2799 @itemx -e @var{exp}
2800 Install the package @var{exp} evaluates to.
2801
2802 @var{exp} must be a Scheme expression that evaluates to a
2803 @code{<package>} object. This option is notably useful to disambiguate
2804 between same-named variants of a package, with expressions such as
2805 @code{(@@ (gnu packages base) guile-final)}.
2806
2807 Note that this option installs the first output of the specified
2808 package, which may be insufficient when needing a specific output of a
2809 multiple-output package.
2810
2811 @item --install-from-file=@var{file}
2812 @itemx -f @var{file}
2813 Install the package that the code within @var{file} evaluates to.
2814
2815 As an example, @var{file} might contain a definition like this
2816 (@pxref{Defining Packages}):
2817
2818 @lisp
2819 @include package-hello.scm
2820 @end lisp
2821
2822 Developers may find it useful to include such a @file{guix.scm} file
2823 in the root of their project source tree that can be used to test
2824 development snapshots and create reproducible development environments
2825 (@pxref{Invoking guix environment}).
2826
2827 The @var{file} may also contain a JSON representation of one or more
2828 package definitions. Running @code{guix package -f} on
2829 @file{hello.json} with the following contents would result in installing
2830 the package @code{greeter} after building @code{myhello}:
2831
2832 @example
2833 @verbatiminclude package-hello.json
2834 @end example
2835
2836 @item --remove=@var{package} @dots{}
2837 @itemx -r @var{package} @dots{}
2838 Remove the specified @var{package}s.
2839
2840 As for @code{--install}, each @var{package} may specify a version number
2841 and/or output name in addition to the package name. For instance,
2842 @code{-r glibc:debug} would remove the @code{debug} output of
2843 @code{glibc}.
2844
2845 @item --upgrade[=@var{regexp} @dots{}]
2846 @itemx -u [@var{regexp} @dots{}]
2847 @cindex upgrading packages
2848 Upgrade all the installed packages. If one or more @var{regexp}s are
2849 specified, upgrade only installed packages whose name matches a
2850 @var{regexp}. Also see the @code{--do-not-upgrade} option below.
2851
2852 Note that this upgrades package to the latest version of packages found
2853 in the distribution currently installed. To update your distribution,
2854 you should regularly run @command{guix pull} (@pxref{Invoking guix
2855 pull}).
2856
2857 @item --do-not-upgrade[=@var{regexp} @dots{}]
2858 When used together with the @code{--upgrade} option, do @emph{not}
2859 upgrade any packages whose name matches a @var{regexp}. For example, to
2860 upgrade all packages in the current profile except those containing the
2861 substring ``emacs'':
2862
2863 @example
2864 $ guix package --upgrade . --do-not-upgrade emacs
2865 @end example
2866
2867 @item @anchor{profile-manifest}--manifest=@var{file}
2868 @itemx -m @var{file}
2869 @cindex profile declaration
2870 @cindex profile manifest
2871 Create a new generation of the profile from the manifest object
2872 returned by the Scheme code in @var{file}. This option can be repeated
2873 several times, in which case the manifests are concatenated.
2874
2875 This allows you to @emph{declare} the profile's contents rather than
2876 constructing it through a sequence of @code{--install} and similar
2877 commands. The advantage is that @var{file} can be put under version
2878 control, copied to different machines to reproduce the same profile, and
2879 so on.
2880
2881 @c FIXME: Add reference to (guix profile) documentation when available.
2882 @var{file} must return a @dfn{manifest} object, which is roughly a list
2883 of packages:
2884
2885 @findex packages->manifest
2886 @lisp
2887 (use-package-modules guile emacs)
2888
2889 (packages->manifest
2890 (list emacs
2891 guile-2.0
2892 ;; Use a specific package output.
2893 (list guile-2.0 "debug")))
2894 @end lisp
2895
2896 @findex specifications->manifest
2897 In this example we have to know which modules define the @code{emacs}
2898 and @code{guile-2.0} variables to provide the right
2899 @code{use-package-modules} line, which can be cumbersome. We can
2900 instead provide regular package specifications and let
2901 @code{specifications->manifest} look up the corresponding package
2902 objects, like this:
2903
2904 @lisp
2905 (specifications->manifest
2906 '("emacs" "guile@@2.2" "guile@@2.2:debug"))
2907 @end lisp
2908
2909 @item --roll-back
2910 @cindex rolling back
2911 @cindex undoing transactions
2912 @cindex transactions, undoing
2913 Roll back to the previous @dfn{generation} of the profile---i.e., undo
2914 the last transaction.
2915
2916 When combined with options such as @code{--install}, roll back occurs
2917 before any other actions.
2918
2919 When rolling back from the first generation that actually contains
2920 installed packages, the profile is made to point to the @dfn{zeroth
2921 generation}, which contains no files apart from its own metadata.
2922
2923 After having rolled back, installing, removing, or upgrading packages
2924 overwrites previous future generations. Thus, the history of the
2925 generations in a profile is always linear.
2926
2927 @item --switch-generation=@var{pattern}
2928 @itemx -S @var{pattern}
2929 @cindex generations
2930 Switch to a particular generation defined by @var{pattern}.
2931
2932 @var{pattern} may be either a generation number or a number prefixed
2933 with ``+'' or ``-''. The latter means: move forward/backward by a
2934 specified number of generations. For example, if you want to return to
2935 the latest generation after @code{--roll-back}, use
2936 @code{--switch-generation=+1}.
2937
2938 The difference between @code{--roll-back} and
2939 @code{--switch-generation=-1} is that @code{--switch-generation} will
2940 not make a zeroth generation, so if a specified generation does not
2941 exist, the current generation will not be changed.
2942
2943 @item --search-paths[=@var{kind}]
2944 @cindex search paths
2945 Report environment variable definitions, in Bash syntax, that may be
2946 needed in order to use the set of installed packages. These environment
2947 variables are used to specify @dfn{search paths} for files used by some
2948 of the installed packages.
2949
2950 For example, GCC needs the @code{CPATH} and @code{LIBRARY_PATH}
2951 environment variables to be defined so it can look for headers and
2952 libraries in the user's profile (@pxref{Environment Variables,,, gcc,
2953 Using the GNU Compiler Collection (GCC)}). If GCC and, say, the C
2954 library are installed in the profile, then @code{--search-paths} will
2955 suggest setting these variables to @code{@var{profile}/include} and
2956 @code{@var{profile}/lib}, respectively.
2957
2958 The typical use case is to define these environment variables in the
2959 shell:
2960
2961 @example
2962 $ eval `guix package --search-paths`
2963 @end example
2964
2965 @var{kind} may be one of @code{exact}, @code{prefix}, or @code{suffix},
2966 meaning that the returned environment variable definitions will either
2967 be exact settings, or prefixes or suffixes of the current value of these
2968 variables. When omitted, @var{kind} defaults to @code{exact}.
2969
2970 This option can also be used to compute the @emph{combined} search paths
2971 of several profiles. Consider this example:
2972
2973 @example
2974 $ guix package -p foo -i guile
2975 $ guix package -p bar -i guile-json
2976 $ guix package -p foo -p bar --search-paths
2977 @end example
2978
2979 The last command above reports about the @code{GUILE_LOAD_PATH}
2980 variable, even though, taken individually, neither @file{foo} nor
2981 @file{bar} would lead to that recommendation.
2982
2983
2984 @item --profile=@var{profile}
2985 @itemx -p @var{profile}
2986 Use @var{profile} instead of the user's default profile.
2987
2988 @var{profile} must be the name of a file that will be created upon
2989 completion. Concretely, @var{profile} will be a mere symbolic link
2990 (``symlink'') pointing to the actual profile where packages are
2991 installed:
2992
2993 @example
2994 $ guix install hello -p ~/code/my-profile
2995 @dots{}
2996 $ ~/code/my-profile/bin/hello
2997 Hello, world!
2998 @end example
2999
3000 All it takes to get rid of the profile is to remove this symlink and its
3001 siblings that point to specific generations:
3002
3003 @example
3004 $ rm ~/code/my-profile ~/code/my-profile-*-link
3005 @end example
3006
3007 @item --list-profiles
3008 List all the user's profiles:
3009
3010 @example
3011 $ guix package --list-profiles
3012 /home/charlie/.guix-profile
3013 /home/charlie/code/my-profile
3014 /home/charlie/code/devel-profile
3015 /home/charlie/tmp/test
3016 @end example
3017
3018 When running as root, list all the profiles of all the users.
3019
3020 @cindex collisions, in a profile
3021 @cindex colliding packages in profiles
3022 @cindex profile collisions
3023 @item --allow-collisions
3024 Allow colliding packages in the new profile. Use at your own risk!
3025
3026 By default, @command{guix package} reports as an error @dfn{collisions}
3027 in the profile. Collisions happen when two or more different versions
3028 or variants of a given package end up in the profile.
3029
3030 @item --bootstrap
3031 Use the bootstrap Guile to build the profile. This option is only
3032 useful to distribution developers.
3033
3034 @end table
3035
3036 In addition to these actions, @command{guix package} supports the
3037 following options to query the current state of a profile, or the
3038 availability of packages:
3039
3040 @table @option
3041
3042 @item --search=@var{regexp}
3043 @itemx -s @var{regexp}
3044 @cindex searching for packages
3045 List the available packages whose name, synopsis, or description matches
3046 @var{regexp} (in a case-insensitive fashion), sorted by relevance.
3047 Print all the metadata of matching packages in
3048 @code{recutils} format (@pxref{Top, GNU recutils databases,, recutils,
3049 GNU recutils manual}).
3050
3051 This allows specific fields to be extracted using the @command{recsel}
3052 command, for instance:
3053
3054 @example
3055 $ guix package -s malloc | recsel -p name,version,relevance
3056 name: jemalloc
3057 version: 4.5.0
3058 relevance: 6
3059
3060 name: glibc
3061 version: 2.25
3062 relevance: 1
3063
3064 name: libgc
3065 version: 7.6.0
3066 relevance: 1
3067 @end example
3068
3069 Similarly, to show the name of all the packages available under the
3070 terms of the GNU@tie{}LGPL version 3:
3071
3072 @example
3073 $ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
3074 name: elfutils
3075
3076 name: gmp
3077 @dots{}
3078 @end example
3079
3080 It is also possible to refine search results using several @code{-s} flags to
3081 @command{guix package}, or several arguments to @command{guix search}. For
3082 example, the following command returns a list of board games (this time using
3083 the @command{guix search} alias):
3084
3085 @example
3086 $ guix search '\<board\>' game | recsel -p name
3087 name: gnubg
3088 @dots{}
3089 @end example
3090
3091 If we were to omit @code{-s game}, we would also get software packages
3092 that deal with printed circuit boards; removing the angle brackets
3093 around @code{board} would further add packages that have to do with
3094 keyboards.
3095
3096 And now for a more elaborate example. The following command searches
3097 for cryptographic libraries, filters out Haskell, Perl, Python, and Ruby
3098 libraries, and prints the name and synopsis of the matching packages:
3099
3100 @example
3101 $ guix search crypto library | \
3102 recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
3103 @end example
3104
3105 @noindent
3106 @xref{Selection Expressions,,, recutils, GNU recutils manual}, for more
3107 information on @dfn{selection expressions} for @code{recsel -e}.
3108
3109 @item --show=@var{package}
3110 Show details about @var{package}, taken from the list of available packages, in
3111 @code{recutils} format (@pxref{Top, GNU recutils databases,, recutils, GNU
3112 recutils manual}).
3113
3114 @example
3115 $ guix package --show=python | recsel -p name,version
3116 name: python
3117 version: 2.7.6
3118
3119 name: python
3120 version: 3.3.5
3121 @end example
3122
3123 You may also specify the full name of a package to only get details about a
3124 specific version of it (this time using the @command{guix show} alias):
3125 @example
3126 $ guix show python@@3.4 | recsel -p name,version
3127 name: python
3128 version: 3.4.3
3129 @end example
3130
3131
3132
3133 @item --list-installed[=@var{regexp}]
3134 @itemx -I [@var{regexp}]
3135 List the currently installed packages in the specified profile, with the
3136 most recently installed packages shown last. When @var{regexp} is
3137 specified, list only installed packages whose name matches @var{regexp}.
3138
3139 For each installed package, print the following items, separated by
3140 tabs: the package name, its version string, the part of the package that
3141 is installed (for instance, @code{out} for the default output,
3142 @code{include} for its headers, etc.), and the path of this package in
3143 the store.
3144
3145 @item --list-available[=@var{regexp}]
3146 @itemx -A [@var{regexp}]
3147 List packages currently available in the distribution for this system
3148 (@pxref{GNU Distribution}). When @var{regexp} is specified, list only
3149 available packages whose name matches @var{regexp}.
3150
3151 For each package, print the following items separated by tabs: its name,
3152 its version string, the parts of the package (@pxref{Packages with
3153 Multiple Outputs}), and the source location of its definition.
3154
3155 @item --list-generations[=@var{pattern}]
3156 @itemx -l [@var{pattern}]
3157 @cindex generations
3158 Return a list of generations along with their creation dates; for each
3159 generation, show the installed packages, with the most recently
3160 installed packages shown last. Note that the zeroth generation is never
3161 shown.
3162
3163 For each installed package, print the following items, separated by
3164 tabs: the name of a package, its version string, the part of the package
3165 that is installed (@pxref{Packages with Multiple Outputs}), and the
3166 location of this package in the store.
3167
3168 When @var{pattern} is used, the command returns only matching
3169 generations. Valid patterns include:
3170
3171 @itemize
3172 @item @emph{Integers and comma-separated integers}. Both patterns denote
3173 generation numbers. For instance, @code{--list-generations=1} returns
3174 the first one.
3175
3176 And @code{--list-generations=1,8,2} outputs three generations in the
3177 specified order. Neither spaces nor trailing commas are allowed.
3178
3179 @item @emph{Ranges}. @code{--list-generations=2..9} prints the
3180 specified generations and everything in between. Note that the start of
3181 a range must be smaller than its end.
3182
3183 It is also possible to omit the endpoint. For example,
3184 @code{--list-generations=2..}, returns all generations starting from the
3185 second one.
3186
3187 @item @emph{Durations}. You can also get the last @emph{N}@tie{}days, weeks,
3188 or months by passing an integer along with the first letter of the
3189 duration. For example, @code{--list-generations=20d} lists generations
3190 that are up to 20 days old.
3191 @end itemize
3192
3193 @item --delete-generations[=@var{pattern}]
3194 @itemx -d [@var{pattern}]
3195 When @var{pattern} is omitted, delete all generations except the current
3196 one.
3197
3198 This command accepts the same patterns as @option{--list-generations}.
3199 When @var{pattern} is specified, delete the matching generations. When
3200 @var{pattern} specifies a duration, generations @emph{older} than the
3201 specified duration match. For instance, @code{--delete-generations=1m}
3202 deletes generations that are more than one month old.
3203
3204 If the current generation matches, it is @emph{not} deleted. Also, the
3205 zeroth generation is never deleted.
3206
3207 Note that deleting generations prevents rolling back to them.
3208 Consequently, this command must be used with care.
3209
3210 @end table
3211
3212 Finally, since @command{guix package} may actually start build
3213 processes, it supports all the common build options (@pxref{Common Build
3214 Options}). It also supports package transformation options, such as
3215 @option{--with-source} (@pxref{Package Transformation Options}).
3216 However, note that package transformations are lost when upgrading; to
3217 preserve transformations across upgrades, you should define your own
3218 package variant in a Guile module and add it to @code{GUIX_PACKAGE_PATH}
3219 (@pxref{Defining Packages}).
3220
3221 @node Substitutes
3222 @section Substitutes
3223
3224 @cindex substitutes
3225 @cindex pre-built binaries
3226 Guix supports transparent source/binary deployment, which means that it
3227 can either build things locally, or download pre-built items from a
3228 server, or both. We call these pre-built items @dfn{substitutes}---they
3229 are substitutes for local build results. In many cases, downloading a
3230 substitute is much faster than building things locally.
3231
3232 Substitutes can be anything resulting from a derivation build
3233 (@pxref{Derivations}). Of course, in the common case, they are
3234 pre-built package binaries, but source tarballs, for instance, which
3235 also result from derivation builds, can be available as substitutes.
3236
3237 @menu
3238 * Official Substitute Server:: One particular source of substitutes.
3239 * Substitute Server Authorization:: How to enable or disable substitutes.
3240 * Substitute Authentication:: How Guix verifies substitutes.
3241 * Proxy Settings:: How to get substitutes via proxy.
3242 * Substitution Failure:: What happens when substitution fails.
3243 * On Trusting Binaries:: How can you trust that binary blob?
3244 @end menu
3245
3246 @node Official Substitute Server
3247 @subsection Official Substitute Server
3248
3249 @cindex build farm
3250 The @code{@value{SUBSTITUTE-SERVER}} server is a front-end to an official build farm
3251 that builds packages from Guix continuously for some
3252 architectures, and makes them available as substitutes. This is the
3253 default source of substitutes; it can be overridden by passing the
3254 @option{--substitute-urls} option either to @command{guix-daemon}
3255 (@pxref{daemon-substitute-urls,, @code{guix-daemon --substitute-urls}})
3256 or to client tools such as @command{guix package}
3257 (@pxref{client-substitute-urls,, client @option{--substitute-urls}
3258 option}).
3259
3260 Substitute URLs can be either HTTP or HTTPS.
3261 HTTPS is recommended because communications are encrypted; conversely,
3262 using HTTP makes all communications visible to an eavesdropper, who
3263 could use the information gathered to determine, for instance, whether
3264 your system has unpatched security vulnerabilities.
3265
3266 Substitutes from the official build farm are enabled by default when
3267 using Guix System (@pxref{GNU Distribution}). However,
3268 they are disabled by default when using Guix on a foreign distribution,
3269 unless you have explicitly enabled them via one of the recommended
3270 installation steps (@pxref{Installation}). The following paragraphs
3271 describe how to enable or disable substitutes for the official build
3272 farm; the same procedure can also be used to enable substitutes for any
3273 other substitute server.
3274
3275 @node Substitute Server Authorization
3276 @subsection Substitute Server Authorization
3277
3278 @cindex security
3279 @cindex substitutes, authorization thereof
3280 @cindex access control list (ACL), for substitutes
3281 @cindex ACL (access control list), for substitutes
3282 To allow Guix to download substitutes from @code{@value{SUBSTITUTE-SERVER}} or a
3283 mirror thereof, you
3284 must add its public key to the access control list (ACL) of archive
3285 imports, using the @command{guix archive} command (@pxref{Invoking guix
3286 archive}). Doing so implies that you trust @code{@value{SUBSTITUTE-SERVER}} to not
3287 be compromised and to serve genuine substitutes.
3288
3289 The public key for @code{@value{SUBSTITUTE-SERVER}} is installed along with Guix, in
3290 @code{@var{prefix}/share/guix/@value{SUBSTITUTE-SERVER}.pub}, where @var{prefix} is
3291 the installation prefix of Guix. If you installed Guix from source,
3292 make sure you checked the GPG signature of
3293 @file{guix-@value{VERSION}.tar.gz}, which contains this public key file.
3294 Then, you can run something like this:
3295
3296 @example
3297 # guix archive --authorize < @var{prefix}/share/guix/@value{SUBSTITUTE-SERVER}.pub
3298 @end example
3299
3300 Once this is in place, the output of a command like @code{guix build}
3301 should change from something like:
3302
3303 @example
3304 $ guix build emacs --dry-run
3305 The following derivations would be built:
3306 /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
3307 /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
3308 /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
3309 /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
3310 @dots{}
3311 @end example
3312
3313 @noindent
3314 to something like:
3315
3316 @example
3317 $ guix build emacs --dry-run
3318 112.3 MB would be downloaded:
3319 /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
3320 /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
3321 /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
3322 /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
3323 @dots{}
3324 @end example
3325
3326 @noindent
3327 The text changed from ``The following derivations would be built'' to
3328 ``112.3 MB would be downloaded''. This indicates that substitutes from
3329 @code{@value{SUBSTITUTE-SERVER}} are usable and will be downloaded, when
3330 possible, for future builds.
3331
3332 @cindex substitutes, how to disable
3333 The substitute mechanism can be disabled globally by running
3334 @code{guix-daemon} with @code{--no-substitutes} (@pxref{Invoking
3335 guix-daemon}). It can also be disabled temporarily by passing the
3336 @code{--no-substitutes} option to @command{guix package}, @command{guix
3337 build}, and other command-line tools.
3338
3339 @node Substitute Authentication
3340 @subsection Substitute Authentication
3341
3342 @cindex digital signatures
3343 Guix detects and raises an error when attempting to use a substitute
3344 that has been tampered with. Likewise, it ignores substitutes that are
3345 not signed, or that are not signed by one of the keys listed in the ACL.
3346
3347 There is one exception though: if an unauthorized server provides
3348 substitutes that are @emph{bit-for-bit identical} to those provided by
3349 an authorized server, then the unauthorized server becomes eligible for
3350 downloads. For example, assume we have chosen two substitute servers
3351 with this option:
3352
3353 @example
3354 --substitute-urls="https://a.example.org https://b.example.org"
3355 @end example
3356
3357 @noindent
3358 @cindex reproducible builds
3359 If the ACL contains only the key for @code{b.example.org}, and if
3360 @code{a.example.org} happens to serve the @emph{exact same} substitutes,
3361 then Guix will download substitutes from @code{a.example.org} because it
3362 comes first in the list and can be considered a mirror of
3363 @code{b.example.org}. In practice, independent build machines usually
3364 produce the same binaries, thanks to bit-reproducible builds (see
3365 below).
3366
3367 When using HTTPS, the server's X.509 certificate is @emph{not} validated
3368 (in other words, the server is not authenticated), contrary to what
3369 HTTPS clients such as Web browsers usually do. This is because Guix
3370 authenticates substitute information itself, as explained above, which
3371 is what we care about (whereas X.509 certificates are about
3372 authenticating bindings between domain names and public keys.)
3373
3374 @node Proxy Settings
3375 @subsection Proxy Settings
3376
3377 @vindex http_proxy
3378 Substitutes are downloaded over HTTP or HTTPS.
3379 The @code{http_proxy} environment
3380 variable can be set in the environment of @command{guix-daemon} and is
3381 honored for downloads of substitutes. Note that the value of
3382 @code{http_proxy} in the environment where @command{guix build},
3383 @command{guix package}, and other client commands are run has
3384 @emph{absolutely no effect}.
3385
3386 @node Substitution Failure
3387 @subsection Substitution Failure
3388
3389 Even when a substitute for a derivation is available, sometimes the
3390 substitution attempt will fail. This can happen for a variety of
3391 reasons: the substitute server might be offline, the substitute may
3392 recently have been deleted, the connection might have been interrupted,
3393 etc.
3394
3395 When substitutes are enabled and a substitute for a derivation is
3396 available, but the substitution attempt fails, Guix will attempt to
3397 build the derivation locally depending on whether or not
3398 @code{--fallback} was given (@pxref{fallback-option,, common build
3399 option @code{--fallback}}). Specifically, if @code{--fallback} was
3400 omitted, then no local build will be performed, and the derivation is
3401 considered to have failed. However, if @code{--fallback} was given,
3402 then Guix will attempt to build the derivation locally, and the success
3403 or failure of the derivation depends on the success or failure of the
3404 local build. Note that when substitutes are disabled or no substitute
3405 is available for the derivation in question, a local build will
3406 @emph{always} be performed, regardless of whether or not
3407 @code{--fallback} was given.
3408
3409 To get an idea of how many substitutes are available right now, you can
3410 try running the @command{guix weather} command (@pxref{Invoking guix
3411 weather}). This command provides statistics on the substitutes provided
3412 by a server.
3413
3414 @node On Trusting Binaries
3415 @subsection On Trusting Binaries
3416
3417 @cindex trust, of pre-built binaries
3418 Today, each individual's control over their own computing is at the
3419 mercy of institutions, corporations, and groups with enough power and
3420 determination to subvert the computing infrastructure and exploit its
3421 weaknesses. While using @code{@value{SUBSTITUTE-SERVER}} substitutes can be
3422 convenient, we encourage users to also build on their own, or even run
3423 their own build farm, such that @code{@value{SUBSTITUTE-SERVER}} is less of an
3424 interesting target. One way to help is by publishing the software you
3425 build using @command{guix publish} so that others have one more choice
3426 of server to download substitutes from (@pxref{Invoking guix publish}).
3427
3428 Guix has the foundations to maximize build reproducibility
3429 (@pxref{Features}). In most cases, independent builds of a given
3430 package or derivation should yield bit-identical results. Thus, through
3431 a diverse set of independent package builds, we can strengthen the
3432 integrity of our systems. The @command{guix challenge} command aims to
3433 help users assess substitute servers, and to assist developers in
3434 finding out about non-deterministic package builds (@pxref{Invoking guix
3435 challenge}). Similarly, the @option{--check} option of @command{guix
3436 build} allows users to check whether previously-installed substitutes
3437 are genuine by rebuilding them locally (@pxref{build-check,
3438 @command{guix build --check}}).
3439
3440 In the future, we want Guix to have support to publish and retrieve
3441 binaries to/from other users, in a peer-to-peer fashion. If you would
3442 like to discuss this project, join us on @email{guix-devel@@gnu.org}.
3443
3444 @node Packages with Multiple Outputs
3445 @section Packages with Multiple Outputs
3446
3447 @cindex multiple-output packages
3448 @cindex package outputs
3449 @cindex outputs
3450
3451 Often, packages defined in Guix have a single @dfn{output}---i.e., the
3452 source package leads to exactly one directory in the store. When running
3453 @command{guix install glibc}, one installs the default output of the
3454 GNU libc package; the default output is called @code{out}, but its name
3455 can be omitted as shown in this command. In this particular case, the
3456 default output of @code{glibc} contains all the C header files, shared
3457 libraries, static libraries, Info documentation, and other supporting
3458 files.
3459
3460 Sometimes it is more appropriate to separate the various types of files
3461 produced from a single source package into separate outputs. For
3462 instance, the GLib C library (used by GTK+ and related packages)
3463 installs more than 20 MiB of reference documentation as HTML pages.
3464 To save space for users who do not need it, the documentation goes to a
3465 separate output, called @code{doc}. To install the main GLib output,
3466 which contains everything but the documentation, one would run:
3467
3468 @example
3469 guix install glib
3470 @end example
3471
3472 @cindex documentation
3473 The command to install its documentation is:
3474
3475 @example
3476 guix install glib:doc
3477 @end example
3478
3479 Some packages install programs with different ``dependency footprints''.
3480 For instance, the WordNet package installs both command-line tools and
3481 graphical user interfaces (GUIs). The former depend solely on the C
3482 library, whereas the latter depend on Tcl/Tk and the underlying X
3483 libraries. In this case, we leave the command-line tools in the default
3484 output, whereas the GUIs are in a separate output. This allows users
3485 who do not need the GUIs to save space. The @command{guix size} command
3486 can help find out about such situations (@pxref{Invoking guix size}).
3487 @command{guix graph} can also be helpful (@pxref{Invoking guix graph}).
3488
3489 There are several such multiple-output packages in the GNU distribution.
3490 Other conventional output names include @code{lib} for libraries and
3491 possibly header files, @code{bin} for stand-alone programs, and
3492 @code{debug} for debugging information (@pxref{Installing Debugging
3493 Files}). The outputs of a packages are listed in the third column of
3494 the output of @command{guix package --list-available} (@pxref{Invoking
3495 guix package}).
3496
3497
3498 @node Invoking guix gc
3499 @section Invoking @command{guix gc}
3500
3501 @cindex garbage collector
3502 @cindex disk space
3503 Packages that are installed, but not used, may be @dfn{garbage-collected}.
3504 The @command{guix gc} command allows users to explicitly run the garbage
3505 collector to reclaim space from the @file{/gnu/store} directory. It is
3506 the @emph{only} way to remove files from @file{/gnu/store}---removing
3507 files or directories manually may break it beyond repair!
3508
3509 @cindex GC roots
3510 @cindex garbage collector roots
3511 The garbage collector has a set of known @dfn{roots}: any file under
3512 @file{/gnu/store} reachable from a root is considered @dfn{live} and
3513 cannot be deleted; any other file is considered @dfn{dead} and may be
3514 deleted. The set of garbage collector roots (``GC roots'' for short)
3515 includes default user profiles; by default, the symlinks under
3516 @file{/var/guix/gcroots} represent these GC roots. New GC roots can be
3517 added with @command{guix build --root}, for example (@pxref{Invoking
3518 guix build}). The @command{guix gc --list-roots} command lists them.
3519
3520 Prior to running @code{guix gc --collect-garbage} to make space, it is
3521 often useful to remove old generations from user profiles; that way, old
3522 package builds referenced by those generations can be reclaimed. This
3523 is achieved by running @code{guix package --delete-generations}
3524 (@pxref{Invoking guix package}).
3525
3526 Our recommendation is to run a garbage collection periodically, or when
3527 you are short on disk space. For instance, to guarantee that at least
3528 5@tie{}GB are available on your disk, simply run:
3529
3530 @example
3531 guix gc -F 5G
3532 @end example
3533
3534 It is perfectly safe to run as a non-interactive periodic job
3535 (@pxref{Scheduled Job Execution}, for how to set up such a job).
3536 Running @command{guix gc} with no arguments will collect as
3537 much garbage as it can, but that is often inconvenient: you may find
3538 yourself having to rebuild or re-download software that is ``dead'' from
3539 the GC viewpoint but that is necessary to build other pieces of
3540 software---e.g., the compiler tool chain.
3541
3542 The @command{guix gc} command has three modes of operation: it can be
3543 used to garbage-collect any dead files (the default), to delete specific
3544 files (the @code{--delete} option), to print garbage-collector
3545 information, or for more advanced queries. The garbage collection
3546 options are as follows:
3547
3548 @table @code
3549 @item --collect-garbage[=@var{min}]
3550 @itemx -C [@var{min}]
3551 Collect garbage---i.e., unreachable @file{/gnu/store} files and
3552 sub-directories. This is the default operation when no option is
3553 specified.
3554
3555 When @var{min} is given, stop once @var{min} bytes have been collected.
3556 @var{min} may be a number of bytes, or it may include a unit as a
3557 suffix, such as @code{MiB} for mebibytes and @code{GB} for gigabytes
3558 (@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
3559
3560 When @var{min} is omitted, collect all the garbage.
3561
3562 @item --free-space=@var{free}
3563 @itemx -F @var{free}
3564 Collect garbage until @var{free} space is available under
3565 @file{/gnu/store}, if possible; @var{free} denotes storage space, such
3566 as @code{500MiB}, as described above.
3567
3568 When @var{free} or more is already available in @file{/gnu/store}, do
3569 nothing and exit immediately.
3570
3571 @item --delete-generations[=@var{duration}]
3572 @itemx -d [@var{duration}]
3573 Before starting the garbage collection process, delete all the generations
3574 older than @var{duration}, for all the user profiles; when run as root, this
3575 applies to all the profiles @emph{of all the users}.
3576
3577 For example, this command deletes all the generations of all your profiles
3578 that are older than 2 months (except generations that are current), and then
3579 proceeds to free space until at least 10 GiB are available:
3580
3581 @example
3582 guix gc -d 2m -F 10G
3583 @end example
3584
3585 @item --delete
3586 @itemx -D
3587 Attempt to delete all the store files and directories specified as
3588 arguments. This fails if some of the files are not in the store, or if
3589 they are still live.
3590
3591 @item --list-failures
3592 List store items corresponding to cached build failures.
3593
3594 This prints nothing unless the daemon was started with
3595 @option{--cache-failures} (@pxref{Invoking guix-daemon,
3596 @option{--cache-failures}}).
3597
3598 @item --list-roots
3599 List the GC roots owned by the user; when run as root, list @emph{all} the GC
3600 roots.
3601
3602 @item --list-busy
3603 List store items in use by currently running processes. These store
3604 items are effectively considered GC roots: they cannot be deleted.
3605
3606 @item --clear-failures
3607 Remove the specified store items from the failed-build cache.
3608
3609 Again, this option only makes sense when the daemon is started with
3610 @option{--cache-failures}. Otherwise, it does nothing.
3611
3612 @item --list-dead
3613 Show the list of dead files and directories still present in the
3614 store---i.e., files and directories no longer reachable from any root.
3615
3616 @item --list-live
3617 Show the list of live store files and directories.
3618
3619 @end table
3620
3621 In addition, the references among existing store files can be queried:
3622
3623 @table @code
3624
3625 @item --references
3626 @itemx --referrers
3627 @cindex package dependencies
3628 List the references (respectively, the referrers) of store files given
3629 as arguments.
3630
3631 @item --requisites
3632 @itemx -R
3633 @cindex closure
3634 List the requisites of the store files passed as arguments. Requisites
3635 include the store files themselves, their references, and the references
3636 of these, recursively. In other words, the returned list is the
3637 @dfn{transitive closure} of the store files.
3638
3639 @xref{Invoking guix size}, for a tool to profile the size of the closure
3640 of an element. @xref{Invoking guix graph}, for a tool to visualize
3641 the graph of references.
3642
3643 @item --derivers
3644 @cindex derivation
3645 Return the derivation(s) leading to the given store items
3646 (@pxref{Derivations}).
3647
3648 For example, this command:
3649
3650 @example
3651 guix gc --derivers `guix package -I ^emacs$ | cut -f4`
3652 @end example
3653
3654 @noindent
3655 returns the @file{.drv} file(s) leading to the @code{emacs} package
3656 installed in your profile.
3657
3658 Note that there may be zero matching @file{.drv} files, for instance
3659 because these files have been garbage-collected. There can also be more
3660 than one matching @file{.drv} due to fixed-output derivations.
3661 @end table
3662
3663 Lastly, the following options allow you to check the integrity of the
3664 store and to control disk usage.
3665
3666 @table @option
3667
3668 @item --verify[=@var{options}]
3669 @cindex integrity, of the store
3670 @cindex integrity checking
3671 Verify the integrity of the store.
3672
3673 By default, make sure that all the store items marked as valid in the
3674 database of the daemon actually exist in @file{/gnu/store}.
3675
3676 When provided, @var{options} must be a comma-separated list containing one
3677 or more of @code{contents} and @code{repair}.
3678
3679 When passing @option{--verify=contents}, the daemon computes the
3680 content hash of each store item and compares it against its hash in the
3681 database. Hash mismatches are reported as data corruptions. Because it
3682 traverses @emph{all the files in the store}, this command can take a
3683 long time, especially on systems with a slow disk drive.
3684
3685 @cindex repairing the store
3686 @cindex corruption, recovering from
3687 Using @option{--verify=repair} or @option{--verify=contents,repair}
3688 causes the daemon to try to repair corrupt store items by fetching
3689 substitutes for them (@pxref{Substitutes}). Because repairing is not
3690 atomic, and thus potentially dangerous, it is available only to the
3691 system administrator. A lightweight alternative, when you know exactly
3692 which items in the store are corrupt, is @command{guix build --repair}
3693 (@pxref{Invoking guix build}).
3694
3695 @item --optimize
3696 @cindex deduplication
3697 Optimize the store by hard-linking identical files---this is
3698 @dfn{deduplication}.
3699
3700 The daemon performs deduplication after each successful build or archive
3701 import, unless it was started with @code{--disable-deduplication}
3702 (@pxref{Invoking guix-daemon, @code{--disable-deduplication}}). Thus,
3703 this option is primarily useful when the daemon was running with
3704 @code{--disable-deduplication}.
3705
3706 @end table
3707
3708 @node Invoking guix pull
3709 @section Invoking @command{guix pull}
3710
3711 @cindex upgrading Guix
3712 @cindex updating Guix
3713 @cindex @command{guix pull}
3714 @cindex pull
3715 Packages are installed or upgraded to the latest version available in
3716 the distribution currently available on your local machine. To update
3717 that distribution, along with the Guix tools, you must run @command{guix
3718 pull}: the command downloads the latest Guix source code and package
3719 descriptions, and deploys it. Source code is downloaded from a
3720 @uref{https://git-scm.com, Git} repository, by default the official
3721 GNU@tie{}Guix repository, though this can be customized.
3722
3723 Specifically, @command{guix pull} downloads code from the @dfn{channels}
3724 (@pxref{Channels}) specified by one of the followings, in this order:
3725
3726 @enumerate
3727 @item
3728 the @option{--channels} option;
3729 @item
3730 the user's @file{~/.config/guix/channels.scm} file;
3731 @item
3732 the system-wide @file{/etc/guix/channels.scm} file;
3733 @item
3734 the built-in default channels specified in the @code{%default-channels}
3735 variable.
3736 @end enumerate
3737
3738 On completion, @command{guix package} will use packages and package
3739 versions from this just-retrieved copy of Guix. Not only that, but all
3740 the Guix commands and Scheme modules will also be taken from that latest
3741 version. New @command{guix} sub-commands added by the update also
3742 become available.
3743
3744 Any user can update their Guix copy using @command{guix pull}, and the
3745 effect is limited to the user who ran @command{guix pull}. For
3746 instance, when user @code{root} runs @command{guix pull}, this has no
3747 effect on the version of Guix that user @code{alice} sees, and vice
3748 versa.
3749
3750 The result of running @command{guix pull} is a @dfn{profile} available
3751 under @file{~/.config/guix/current} containing the latest Guix. Thus,
3752 make sure to add it to the beginning of your search path so that you use
3753 the latest version, and similarly for the Info manual
3754 (@pxref{Documentation}):
3755
3756 @example
3757 export PATH="$HOME/.config/guix/current/bin:$PATH"
3758 export INFOPATH="$HOME/.config/guix/current/share/info:$INFOPATH"
3759 @end example
3760
3761 The @code{--list-generations} or @code{-l} option lists past generations
3762 produced by @command{guix pull}, along with details about their provenance:
3763
3764 @example
3765 $ guix pull -l
3766 Generation 1 Jun 10 2018 00:18:18
3767 guix 65956ad
3768 repository URL: https://git.savannah.gnu.org/git/guix.git
3769 branch: origin/master
3770 commit: 65956ad3526ba09e1f7a40722c96c6ef7c0936fe
3771
3772 Generation 2 Jun 11 2018 11:02:49
3773 guix e0cc7f6
3774 repository URL: https://git.savannah.gnu.org/git/guix.git
3775 branch: origin/master
3776 commit: e0cc7f669bec22c37481dd03a7941c7d11a64f1d
3777 2 new packages: keepalived, libnfnetlink
3778 6 packages upgraded: emacs-nix-mode@@2.0.4,
3779 guile2.0-guix@@0.14.0-12.77a1aac, guix@@0.14.0-12.77a1aac,
3780 heimdal@@7.5.0, milkytracker@@1.02.00, nix@@2.0.4
3781
3782 Generation 3 Jun 13 2018 23:31:07 (current)
3783 guix 844cc1c
3784 repository URL: https://git.savannah.gnu.org/git/guix.git
3785 branch: origin/master
3786 commit: 844cc1c8f394f03b404c5bb3aee086922373490c
3787 28 new packages: emacs-helm-ls-git, emacs-helm-mu, @dots{}
3788 69 packages upgraded: borg@@1.1.6, cheese@@3.28.0, @dots{}
3789 @end example
3790
3791 @xref{Invoking guix describe, @command{guix describe}}, for other ways to
3792 describe the current status of Guix.
3793
3794 This @code{~/.config/guix/current} profile works exactly like the profiles
3795 created by @command{guix package} (@pxref{Invoking guix package}). That
3796 is, you can list generations, roll back to the previous
3797 generation---i.e., the previous Guix---and so on:
3798
3799 @example
3800 $ guix pull --roll-back
3801 switched from generation 3 to 2
3802 $ guix pull --delete-generations=1
3803 deleting /var/guix/profiles/per-user/charlie/current-guix-1-link
3804 @end example
3805
3806 You can also use @command{guix package} (@pxref{Invoking guix package})
3807 to manage the profile by naming it explicitly:
3808 @example
3809 $ guix package -p ~/.config/guix/current --roll-back
3810 switched from generation 3 to 2
3811 $ guix package -p ~/.config/guix/current --delete-generations=1
3812 deleting /var/guix/profiles/per-user/charlie/current-guix-1-link
3813 @end example
3814
3815 The @command{guix pull} command is usually invoked with no arguments,
3816 but it supports the following options:
3817
3818 @table @code
3819 @item --url=@var{url}
3820 @itemx --commit=@var{commit}
3821 @itemx --branch=@var{branch}
3822 Download code for the @code{guix} channel from the specified @var{url}, at the
3823 given @var{commit} (a valid Git commit ID represented as a hexadecimal
3824 string), or @var{branch}.
3825
3826 @cindex @file{channels.scm}, configuration file
3827 @cindex configuration file for channels
3828 These options are provided for convenience, but you can also specify your
3829 configuration in the @file{~/.config/guix/channels.scm} file or using the
3830 @option{--channels} option (see below).
3831
3832 @item --channels=@var{file}
3833 @itemx -C @var{file}
3834 Read the list of channels from @var{file} instead of
3835 @file{~/.config/guix/channels.scm} or @file{/etc/guix/channels.scm}.
3836 @var{file} must contain Scheme code that
3837 evaluates to a list of channel objects. @xref{Channels}, for more
3838 information.
3839
3840 @cindex channel news
3841 @item --news
3842 @itemx -N
3843 Display the list of packages added or upgraded since the previous
3844 generation, as well as, occasionally, news written by channel authors
3845 for their users (@pxref{Channels, Writing Channel News}).
3846
3847 The package information is the same as displayed upon @command{guix
3848 pull} completion, but without ellipses; it is also similar to the output
3849 of @command{guix pull -l} for the last generation (see below).
3850
3851 @item --list-generations[=@var{pattern}]
3852 @itemx -l [@var{pattern}]
3853 List all the generations of @file{~/.config/guix/current} or, if @var{pattern}
3854 is provided, the subset of generations that match @var{pattern}.
3855 The syntax of @var{pattern} is the same as with @code{guix package
3856 --list-generations} (@pxref{Invoking guix package}).
3857
3858 @item --roll-back
3859 @cindex rolling back
3860 @cindex undoing transactions
3861 @cindex transactions, undoing
3862 Roll back to the previous @dfn{generation} of @file{~/.config/guix/current}---i.e.,
3863 undo the last transaction.
3864
3865 @item --switch-generation=@var{pattern}
3866 @itemx -S @var{pattern}
3867 @cindex generations
3868 Switch to a particular generation defined by @var{pattern}.
3869
3870 @var{pattern} may be either a generation number or a number prefixed
3871 with ``+'' or ``-''. The latter means: move forward/backward by a
3872 specified number of generations. For example, if you want to return to
3873 the latest generation after @code{--roll-back}, use
3874 @code{--switch-generation=+1}.
3875
3876 @item --delete-generations[=@var{pattern}]
3877 @itemx -d [@var{pattern}]
3878 When @var{pattern} is omitted, delete all generations except the current
3879 one.
3880
3881 This command accepts the same patterns as @option{--list-generations}.
3882 When @var{pattern} is specified, delete the matching generations. When
3883 @var{pattern} specifies a duration, generations @emph{older} than the
3884 specified duration match. For instance, @code{--delete-generations=1m}
3885 deletes generations that are more than one month old.
3886
3887 If the current generation matches, it is @emph{not} deleted.
3888
3889 Note that deleting generations prevents rolling back to them.
3890 Consequently, this command must be used with care.
3891
3892 @xref{Invoking guix describe}, for a way to display information about the
3893 current generation only.
3894
3895 @item --profile=@var{profile}
3896 @itemx -p @var{profile}
3897 Use @var{profile} instead of @file{~/.config/guix/current}.
3898
3899 @item --dry-run
3900 @itemx -n
3901 Show which channel commit(s) would be used and what would be built or
3902 substituted but do not actually do it.
3903
3904 @item --system=@var{system}
3905 @itemx -s @var{system}
3906 Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
3907 the system type of the build host.
3908
3909 @item --verbose
3910 Produce verbose output, writing build logs to the standard error output.
3911
3912 @item --bootstrap
3913 Use the bootstrap Guile to build the latest Guix. This option is only
3914 useful to Guix developers.
3915 @end table
3916
3917 The @dfn{channel} mechanism allows you to instruct @command{guix pull} which
3918 repository and branch to pull from, as well as @emph{additional} repositories
3919 containing package modules that should be deployed. @xref{Channels}, for more
3920 information.
3921
3922 In addition, @command{guix pull} supports all the common build options
3923 (@pxref{Common Build Options}).
3924
3925 @node Channels
3926 @section Channels
3927
3928 @cindex channels
3929 @cindex @file{channels.scm}, configuration file
3930 @cindex configuration file for channels
3931 @cindex @command{guix pull}, configuration file
3932 @cindex configuration of @command{guix pull}
3933 Guix and its package collection are updated by running @command{guix pull}
3934 (@pxref{Invoking guix pull}). By default @command{guix pull} downloads and
3935 deploys Guix itself from the official GNU@tie{}Guix repository. This can be
3936 customized by defining @dfn{channels} in the
3937 @file{~/.config/guix/channels.scm} file. A channel specifies a URL and branch
3938 of a Git repository to be deployed, and @command{guix pull} can be instructed
3939 to pull from one or more channels. In other words, channels can be used to
3940 @emph{customize} and to @emph{extend} Guix, as we will see below.
3941
3942 @subsection Using a Custom Guix Channel
3943
3944 The channel called @code{guix} specifies where Guix itself---its command-line
3945 tools as well as its package collection---should be downloaded. For instance,
3946 suppose you want to update from your own copy of the Guix repository at
3947 @code{example.org}, and specifically the @code{super-hacks} branch, you can
3948 write in @code{~/.config/guix/channels.scm} this specification:
3949
3950 @lisp
3951 ;; Tell 'guix pull' to use my own repo.
3952 (list (channel
3953 (name 'guix)
3954 (url "https://example.org/my-guix.git")
3955 (branch "super-hacks")))
3956 @end lisp
3957
3958 @noindent
3959 From there on, @command{guix pull} will fetch code from the @code{super-hacks}
3960 branch of the repository at @code{example.org}.
3961
3962 @subsection Specifying Additional Channels
3963
3964 @cindex extending the package collection (channels)
3965 @cindex personal packages (channels)
3966 @cindex channels, for personal packages
3967 You can also specify @emph{additional channels} to pull from. Let's say you
3968 have a bunch of custom package variants or personal packages that you think
3969 would make little sense to contribute to the Guix project, but would like to
3970 have these packages transparently available to you at the command line. You
3971 would first write modules containing those package definitions (@pxref{Package
3972 Modules}), maintain them in a Git repository, and then you and anyone else can
3973 use it as an additional channel to get packages from. Neat, no?
3974
3975 @c What follows stems from discussions at
3976 @c <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22629#134> as well as
3977 @c earlier discussions on guix-devel@gnu.org.
3978 @quotation Warning
3979 Before you, dear user, shout---``woow this is @emph{soooo coool}!''---and
3980 publish your personal channel to the world, we would like to share a few words
3981 of caution:
3982
3983 @itemize
3984 @item
3985 Before publishing a channel, please consider contributing your package
3986 definitions to Guix proper (@pxref{Contributing}). Guix as a project is open
3987 to free software of all sorts, and packages in Guix proper are readily
3988 available to all Guix users and benefit from the project's quality assurance
3989 process.
3990
3991 @item
3992 When you maintain package definitions outside Guix, we, Guix developers,
3993 consider that @emph{the compatibility burden is on you}. Remember that
3994 package modules and package definitions are just Scheme code that uses various
3995 programming interfaces (APIs). We want to remain free to change these APIs to
3996 keep improving Guix, possibly in ways that break your channel. We never
3997 change APIs gratuitously, but we will @emph{not} commit to freezing APIs
3998 either.
3999
4000 @item
4001 Corollary: if you're using an external channel and that channel breaks, please
4002 @emph{report the issue to the channel authors}, not to the Guix project.
4003 @end itemize
4004
4005 You've been warned! Having said this, we believe external channels are a
4006 practical way to exert your freedom to augment Guix' package collection and to
4007 share your improvements, which are basic tenets of
4008 @uref{https://www.gnu.org/philosophy/free-sw.html, free software}. Please
4009 email us at @email{guix-devel@@gnu.org} if you'd like to discuss this.
4010 @end quotation
4011
4012 To use a channel, write @code{~/.config/guix/channels.scm} to instruct
4013 @command{guix pull} to pull from it @emph{in addition} to the default Guix
4014 channel(s):
4015
4016 @vindex %default-channels
4017 @lisp
4018 ;; Add my personal packages to those Guix provides.
4019 (cons (channel
4020 (name 'my-personal-packages)
4021 (url "https://example.org/personal-packages.git"))
4022 %default-channels)
4023 @end lisp
4024
4025 @noindent
4026 Note that the snippet above is (as always!)@: Scheme code; we use @code{cons} to
4027 add a channel the list of channels that the variable @code{%default-channels}
4028 is bound to (@pxref{Pairs, @code{cons} and lists,, guile, GNU Guile Reference
4029 Manual}). With this file in place, @command{guix pull} builds not only Guix
4030 but also the package modules from your own repository. The result in
4031 @file{~/.config/guix/current} is the union of Guix with your own package
4032 modules:
4033
4034 @example
4035 $ guix pull --list-generations
4036 @dots{}
4037 Generation 19 Aug 27 2018 16:20:48
4038 guix d894ab8
4039 repository URL: https://git.savannah.gnu.org/git/guix.git
4040 branch: master
4041 commit: d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300
4042 my-personal-packages dd3df5e
4043 repository URL: https://example.org/personal-packages.git
4044 branch: master
4045 commit: dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb
4046 11 new packages: my-gimp, my-emacs-with-cool-features, @dots{}
4047 4 packages upgraded: emacs-racket-mode@@0.0.2-2.1b78827, @dots{}
4048 @end example
4049
4050 @noindent
4051 The output of @command{guix pull} above shows that Generation@tie{}19 includes
4052 both Guix and packages from the @code{my-personal-packages} channel. Among
4053 the new and upgraded packages that are listed, some like @code{my-gimp} and
4054 @code{my-emacs-with-cool-features} might come from
4055 @code{my-personal-packages}, while others come from the Guix default channel.
4056
4057 To create a channel, create a Git repository containing your own package
4058 modules and make it available. The repository can contain anything, but a
4059 useful channel will contain Guile modules that export packages. Once you
4060 start using a channel, Guix will behave as if the root directory of that
4061 channel's Git repository has been added to the Guile load path (@pxref{Load
4062 Paths,,, guile, GNU Guile Reference Manual}). For example, if your channel
4063 contains a file at @file{my-packages/my-tools.scm} that defines a Guile
4064 module, then the module will be available under the name @code{(my-packages
4065 my-tools)}, and you will be able to use it like any other module
4066 (@pxref{Modules,,, guile, GNU Guile Reference Manual}).
4067
4068 @cindex dependencies, channels
4069 @cindex meta-data, channels
4070 @subsection Declaring Channel Dependencies
4071
4072 Channel authors may decide to augment a package collection provided by other
4073 channels. They can declare their channel to be dependent on other channels in
4074 a meta-data file @file{.guix-channel}, which is to be placed in the root of
4075 the channel repository.
4076
4077 The meta-data file should contain a simple S-expression like this:
4078
4079 @lisp
4080 (channel
4081 (version 0)
4082 (dependencies
4083 (channel
4084 (name some-collection)
4085 (url "https://example.org/first-collection.git"))
4086 (channel
4087 (name some-other-collection)
4088 (url "https://example.org/second-collection.git")
4089 (branch "testing"))))
4090 @end lisp
4091
4092 In the above example this channel is declared to depend on two other channels,
4093 which will both be fetched automatically. The modules provided by the channel
4094 will be compiled in an environment where the modules of all these declared
4095 channels are available.
4096
4097 For the sake of reliability and maintainability, you should avoid dependencies
4098 on channels that you don't control, and you should aim to keep the number of
4099 dependencies to a minimum.
4100
4101 @cindex subdirectory, channels
4102 @subsection Package Modules in a Sub-directory
4103
4104 As a channel author, you may want to keep your channel modules in a
4105 sub-directory. If your modules are in the sub-directory @file{guix}, you must
4106 add a meta-data file @file{.guix-channel} that contains:
4107
4108 @lisp
4109 (channel
4110 (version 0)
4111 (directory "guix"))
4112 @end lisp
4113
4114 @cindex news, for channels
4115 @subsection Writing Channel News
4116
4117 Channel authors may occasionally want to communicate to their users
4118 information about important changes in the channel. You'd send them all
4119 an email, but that's not convenient.
4120
4121 Instead, channels can provide a @dfn{news file}; when the channel users
4122 run @command{guix pull}, that news file is automatically read and
4123 @command{guix pull --news} can display the announcements that correspond
4124 to the new commits that have been pulled, if any.
4125
4126 To do that, channel authors must first declare the name of the news file
4127 in their @file{.guix-channel} file:
4128
4129 @lisp
4130 (channel
4131 (version 0)
4132 (news-file "etc/news.txt"))
4133 @end lisp
4134
4135 The news file itself, @file{etc/news.txt} in this example, must look
4136 something like this:
4137
4138 @lisp
4139 (channel-news
4140 (version 0)
4141 (entry (tag "the-bug-fix")
4142 (title (en "Fixed terrible bug")
4143 (fr "Oh la la"))
4144 (body (en "@@emph@{Good news@}! It's fixed!")
4145 (eo "Certe ĝi pli bone funkcias nun!")))
4146 (entry (commit "bdcabe815cd28144a2d2b4bc3c5057b051fa9906")
4147 (title (en "Added a great package")
4148 (ca "Què vol dir guix?"))
4149 (body (en "Don't miss the @@code@{hello@} package!"))))
4150 @end lisp
4151
4152 The file consists of a list of @dfn{news entries}. Each entry is
4153 associated with a commit or tag: it describes changes made in this
4154 commit, possibly in preceding commits as well. Users see entries only
4155 the first time they obtain the commit the entry refers to.
4156
4157 The @code{title} field should be a one-line summary while @code{body}
4158 can be arbitrarily long, and both can contain Texinfo markup
4159 (@pxref{Overview,,, texinfo, GNU Texinfo}). Both the title and body are
4160 a list of language tag/message tuples, which allows @command{guix pull}
4161 to display news in the language that corresponds to the user's locale.
4162
4163 If you want to translate news using a gettext-based workflow, you can
4164 extract translatable strings with @command{xgettext} (@pxref{xgettext
4165 Invocation,,, gettext, GNU Gettext Utilities}). For example, assuming
4166 you write news entries in English first, the command below creates a PO
4167 file containing the strings to translate:
4168
4169 @example
4170 xgettext -o news.po -l scheme -ken etc/news.scm
4171 @end example
4172
4173 To sum up, yes, you could use your channel as a blog. But beware, this
4174 is @emph{not quite} what your users might expect.
4175
4176 @subsection Replicating Guix
4177
4178 @cindex pinning, channels
4179 @cindex replicating Guix
4180 @cindex reproducibility, of Guix
4181 The @command{guix pull --list-generations} output above shows precisely which
4182 commits were used to build this instance of Guix. We can thus replicate it,
4183 say, on another machine, by providing a channel specification in
4184 @file{~/.config/guix/channels.scm} that is ``pinned'' to these commits:
4185
4186 @lisp
4187 ;; Deploy specific commits of my channels of interest.
4188 (list (channel
4189 (name 'guix)
4190 (url "https://git.savannah.gnu.org/git/guix.git")
4191 (commit "d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300"))
4192 (channel
4193 (name 'my-personal-packages)
4194 (url "https://example.org/personal-packages.git")
4195 (commit "dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb")))
4196 @end lisp
4197
4198 The @command{guix describe --format=channels} command can even generate this
4199 list of channels directly (@pxref{Invoking guix describe}). The resulting
4200 file can be used with the -C options of @command{guix pull}
4201 (@pxref{Invoking guix pull}) or @command{guix time-machine}
4202 (@pxref{Invoking guix time-machine}).
4203
4204 At this point the two machines run the @emph{exact same Guix}, with access to
4205 the @emph{exact same packages}. The output of @command{guix build gimp} on
4206 one machine will be exactly the same, bit for bit, as the output of the same
4207 command on the other machine. It also means both machines have access to all
4208 the source code of Guix and, transitively, to all the source code of every
4209 package it defines.
4210
4211 This gives you super powers, allowing you to track the provenance of binary
4212 artifacts with very fine grain, and to reproduce software environments at
4213 will---some sort of ``meta reproducibility'' capabilities, if you will.
4214 @xref{Inferiors}, for another way to take advantage of these super powers.
4215
4216 @node Invoking guix time-machine
4217 @section Invoking @command{guix time-machine}
4218
4219 @cindex @command{guix time-machine}
4220 @cindex pinning, channels
4221 @cindex replicating Guix
4222 @cindex reproducibility, of Guix
4223
4224 The @command{guix time-machine} command provides access to other
4225 revisions of Guix, for example to install older versions of packages,
4226 or to reproduce a computation in an identical environment. The revision
4227 of Guix to be used is defined by a commit or by a channel
4228 description file created by @command{guix describe}
4229 (@pxref{Invoking guix describe}).
4230
4231 The general syntax is:
4232
4233 @example
4234 guix time-machine @var{options}@dots{} -- @var{command} @var {arg}@dots{}
4235 @end example
4236
4237 where @var{command} and @var{arg}@dots{} are passed unmodified to the
4238 @command{guix} command of the specified revision. The @var{options} that define
4239 this revision are the same as for @command{guix pull} (@pxref{Invoking guix pull}):
4240
4241 @table @code
4242 @item --url=@var{url}
4243 @itemx --commit=@var{commit}
4244 @itemx --branch=@var{branch}
4245 Use the @code{guix} channel from the specified @var{url}, at the
4246 given @var{commit} (a valid Git commit ID represented as a hexadecimal
4247 string), or @var{branch}.
4248
4249 @item --channels=@var{file}
4250 @itemx -C @var{file}
4251 Read the list of channels from @var{file}. @var{file} must contain
4252 Scheme code that evaluates to a list of channel objects.
4253 @xref{Channels} for more information.
4254 @end table
4255
4256 As for @command{guix pull}, the absence of any options means that the
4257 the latest commit on the master branch will be used. The command
4258
4259 @example
4260 guix time-machine -- build hello
4261 @end example
4262
4263 will thus build the package @code{hello} as defined in the master branch,
4264 which is in general a newer revision of Guix than you have installed.
4265 Time travel works in both directions!
4266
4267 Note that @command{guix time-machine} can trigger builds of channels and
4268 their dependencies, and these are controlled by the standard build
4269 options (@pxref{Common Build Options}).
4270
4271 @node Inferiors
4272 @section Inferiors
4273
4274 @c TODO: Remove this once we're more confident about API stability.
4275 @quotation Note
4276 The functionality described here is a ``technology preview'' as of version
4277 @value{VERSION}. As such, the interface is subject to change.
4278 @end quotation
4279
4280 @cindex inferiors
4281 @cindex composition of Guix revisions
4282 Sometimes you might need to mix packages from the revision of Guix you're
4283 currently running with packages available in a different revision of Guix.
4284 Guix @dfn{inferiors} allow you to achieve that by composing different Guix
4285 revisions in arbitrary ways.
4286
4287 @cindex inferior packages
4288 Technically, an ``inferior'' is essentially a separate Guix process connected
4289 to your main Guix process through a REPL (@pxref{Invoking guix repl}). The
4290 @code{(guix inferior)} module allows you to create inferiors and to
4291 communicate with them. It also provides a high-level interface to browse and
4292 manipulate the packages that an inferior provides---@dfn{inferior packages}.
4293
4294 When combined with channels (@pxref{Channels}), inferiors provide a simple way
4295 to interact with a separate revision of Guix. For example, let's assume you
4296 want to install in your profile the current @code{guile} package, along with
4297 the @code{guile-json} as it existed in an older revision of Guix---perhaps
4298 because the newer @code{guile-json} has an incompatible API and you want to
4299 run your code against the old API@. To do that, you could write a manifest for
4300 use by @code{guix package --manifest} (@pxref{Invoking guix package}); in that
4301 manifest, you would create an inferior for that old Guix revision you care
4302 about, and you would look up the @code{guile-json} package in the inferior:
4303
4304 @lisp
4305 (use-modules (guix inferior) (guix channels)
4306 (srfi srfi-1)) ;for 'first'
4307
4308 (define channels
4309 ;; This is the old revision from which we want to
4310 ;; extract guile-json.
4311 (list (channel
4312 (name 'guix)
4313 (url "https://git.savannah.gnu.org/git/guix.git")
4314 (commit
4315 "65956ad3526ba09e1f7a40722c96c6ef7c0936fe"))))
4316
4317 (define inferior
4318 ;; An inferior representing the above revision.
4319 (inferior-for-channels channels))
4320
4321 ;; Now create a manifest with the current "guile" package
4322 ;; and the old "guile-json" package.
4323 (packages->manifest
4324 (list (first (lookup-inferior-packages inferior "guile-json"))
4325 (specification->package "guile")))
4326 @end lisp
4327
4328 On its first run, @command{guix package --manifest} might have to build the
4329 channel you specified before it can create the inferior; subsequent runs will
4330 be much faster because the Guix revision will be cached.
4331
4332 The @code{(guix inferior)} module provides the following procedures to open an
4333 inferior:
4334
4335 @deffn {Scheme Procedure} inferior-for-channels @var{channels} @
4336 [#:cache-directory] [#:ttl]
4337 Return an inferior for @var{channels}, a list of channels. Use the cache at
4338 @var{cache-directory}, where entries can be reclaimed after @var{ttl} seconds.
4339 This procedure opens a new connection to the build daemon.
4340
4341 As a side effect, this procedure may build or substitute binaries for
4342 @var{channels}, which can take time.
4343 @end deffn
4344
4345 @deffn {Scheme Procedure} open-inferior @var{directory} @
4346 [#:command "bin/guix"]
4347 Open the inferior Guix in @var{directory}, running
4348 @code{@var{directory}/@var{command} repl} or equivalent. Return @code{#f} if
4349 the inferior could not be launched.
4350 @end deffn
4351
4352 @cindex inferior packages
4353 The procedures listed below allow you to obtain and manipulate inferior
4354 packages.
4355
4356 @deffn {Scheme Procedure} inferior-packages @var{inferior}
4357 Return the list of packages known to @var{inferior}.
4358 @end deffn
4359
4360 @deffn {Scheme Procedure} lookup-inferior-packages @var{inferior} @var{name} @
4361 [@var{version}]
4362 Return the sorted list of inferior packages matching @var{name} in
4363 @var{inferior}, with highest version numbers first. If @var{version} is true,
4364 return only packages with a version number prefixed by @var{version}.
4365 @end deffn
4366
4367 @deffn {Scheme Procedure} inferior-package? @var{obj}
4368 Return true if @var{obj} is an inferior package.
4369 @end deffn
4370
4371 @deffn {Scheme Procedure} inferior-package-name @var{package}
4372 @deffnx {Scheme Procedure} inferior-package-version @var{package}
4373 @deffnx {Scheme Procedure} inferior-package-synopsis @var{package}
4374 @deffnx {Scheme Procedure} inferior-package-description @var{package}
4375 @deffnx {Scheme Procedure} inferior-package-home-page @var{package}
4376 @deffnx {Scheme Procedure} inferior-package-location @var{package}
4377 @deffnx {Scheme Procedure} inferior-package-inputs @var{package}
4378 @deffnx {Scheme Procedure} inferior-package-native-inputs @var{package}
4379 @deffnx {Scheme Procedure} inferior-package-propagated-inputs @var{package}
4380 @deffnx {Scheme Procedure} inferior-package-transitive-propagated-inputs @var{package}
4381 @deffnx {Scheme Procedure} inferior-package-native-search-paths @var{package}
4382 @deffnx {Scheme Procedure} inferior-package-transitive-native-search-paths @var{package}
4383 @deffnx {Scheme Procedure} inferior-package-search-paths @var{package}
4384 These procedures are the counterpart of package record accessors
4385 (@pxref{package Reference}). Most of them work by querying the inferior
4386 @var{package} comes from, so the inferior must still be live when you call
4387 these procedures.
4388 @end deffn
4389
4390 Inferior packages can be used transparently like any other package or
4391 file-like object in G-expressions (@pxref{G-Expressions}). They are also
4392 transparently handled by the @code{packages->manifest} procedure, which is
4393 commonly use in manifests (@pxref{Invoking guix package, the
4394 @option{--manifest} option of @command{guix package}}). Thus you can insert
4395 an inferior package pretty much anywhere you would insert a regular package:
4396 in manifests, in the @code{packages} field of your @code{operating-system}
4397 declaration, and so on.
4398
4399 @node Invoking guix describe
4400 @section Invoking @command{guix describe}
4401
4402 @cindex reproducibility
4403 @cindex replicating Guix
4404 Often you may want to answer questions like: ``Which revision of Guix am I
4405 using?'' or ``Which channels am I using?'' This is useful information in many
4406 situations: if you want to @emph{replicate} an environment on a different
4407 machine or user account, if you want to report a bug or to determine what
4408 change in the channels you are using caused it, or if you want to record your
4409 system state for reproducibility purposes. The @command{guix describe}
4410 command answers these questions.
4411
4412 When run from a @command{guix pull}ed @command{guix}, @command{guix describe}
4413 displays the channel(s) that it was built from, including their repository URL
4414 and commit IDs (@pxref{Channels}):
4415
4416 @example
4417 $ guix describe
4418 Generation 10 Sep 03 2018 17:32:44 (current)
4419 guix e0fa68c
4420 repository URL: https://git.savannah.gnu.org/git/guix.git
4421 branch: master
4422 commit: e0fa68c7718fffd33d81af415279d6ddb518f727
4423 @end example
4424
4425 If you're familiar with the Git version control system, this is similar in
4426 spirit to @command{git describe}; the output is also similar to that of
4427 @command{guix pull --list-generations}, but limited to the current generation
4428 (@pxref{Invoking guix pull, the @option{--list-generations} option}). Because
4429 the Git commit ID shown above unambiguously refers to a snapshot of Guix, this
4430 information is all it takes to describe the revision of Guix you're using, and
4431 also to replicate it.
4432
4433 To make it easier to replicate Guix, @command{guix describe} can also be asked
4434 to return a list of channels instead of the human-readable description above:
4435
4436 @example
4437 $ guix describe -f channels
4438 (list (channel
4439 (name 'guix)
4440 (url "https://git.savannah.gnu.org/git/guix.git")
4441 (commit
4442 "e0fa68c7718fffd33d81af415279d6ddb518f727")))
4443 @end example
4444
4445 @noindent
4446 You can save this to a file and feed it to @command{guix pull -C} on some
4447 other machine or at a later point in time, which will instantiate @emph{this
4448 exact Guix revision} (@pxref{Invoking guix pull, the @option{-C} option}).
4449 From there on, since you're able to deploy the same revision of Guix, you can
4450 just as well @emph{replicate a complete software environment}. We humbly
4451 think that this is @emph{awesome}, and we hope you'll like it too!
4452
4453 The details of the options supported by @command{guix describe} are as
4454 follows:
4455
4456 @table @code
4457 @item --format=@var{format}
4458 @itemx -f @var{format}
4459 Produce output in the specified @var{format}, one of:
4460
4461 @table @code
4462 @item human
4463 produce human-readable output;
4464 @item channels
4465 produce a list of channel specifications that can be passed to @command{guix
4466 pull -C} or installed as @file{~/.config/guix/channels.scm} (@pxref{Invoking
4467 guix pull});
4468 @item json
4469 @cindex JSON
4470 produce a list of channel specifications in JSON format;
4471 @item recutils
4472 produce a list of channel specifications in Recutils format.
4473 @end table
4474
4475 @item --profile=@var{profile}
4476 @itemx -p @var{profile}
4477 Display information about @var{profile}.
4478 @end table
4479
4480 @node Invoking guix archive
4481 @section Invoking @command{guix archive}
4482
4483 @cindex @command{guix archive}
4484 @cindex archive
4485 The @command{guix archive} command allows users to @dfn{export} files
4486 from the store into a single archive, and to later @dfn{import} them on
4487 a machine that runs Guix.
4488 In particular, it allows store files to be transferred from one machine
4489 to the store on another machine.
4490
4491 @quotation Note
4492 If you're looking for a way to produce archives in a format suitable for
4493 tools other than Guix, @pxref{Invoking guix pack}.
4494 @end quotation
4495
4496 @cindex exporting store items
4497 To export store files as an archive to standard output, run:
4498
4499 @example
4500 guix archive --export @var{options} @var{specifications}...
4501 @end example
4502
4503 @var{specifications} may be either store file names or package
4504 specifications, as for @command{guix package} (@pxref{Invoking guix
4505 package}). For instance, the following command creates an archive
4506 containing the @code{gui} output of the @code{git} package and the main
4507 output of @code{emacs}:
4508
4509 @example
4510 guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
4511 @end example
4512
4513 If the specified packages are not built yet, @command{guix archive}
4514 automatically builds them. The build process may be controlled with the
4515 common build options (@pxref{Common Build Options}).
4516
4517 To transfer the @code{emacs} package to a machine connected over SSH,
4518 one would run:
4519
4520 @example
4521 guix archive --export -r emacs | ssh the-machine guix archive --import
4522 @end example
4523
4524 @noindent
4525 Similarly, a complete user profile may be transferred from one machine
4526 to another like this:
4527
4528 @example
4529 guix archive --export -r $(readlink -f ~/.guix-profile) | \
4530 ssh the-machine guix archive --import
4531 @end example
4532
4533 @noindent
4534 However, note that, in both examples, all of @code{emacs} and the
4535 profile as well as all of their dependencies are transferred (due to
4536 @code{-r}), regardless of what is already available in the store on the
4537 target machine. The @code{--missing} option can help figure out which
4538 items are missing from the target store. The @command{guix copy}
4539 command simplifies and optimizes this whole process, so this is probably
4540 what you should use in this case (@pxref{Invoking guix copy}).
4541
4542 @cindex nar, archive format
4543 @cindex normalized archive (nar)
4544 Archives are stored in the ``normalized archive'' or ``nar'' format, which is
4545 comparable in spirit to `tar', but with differences
4546 that make it more appropriate for our purposes. First, rather than
4547 recording all Unix metadata for each file, the nar format only mentions
4548 the file type (regular, directory, or symbolic link); Unix permissions
4549 and owner/group are dismissed. Second, the order in which directory
4550 entries are stored always follows the order of file names according to
4551 the C locale collation order. This makes archive production fully
4552 deterministic.
4553
4554 When exporting, the daemon digitally signs the contents of the archive,
4555 and that digital signature is appended. When importing, the daemon
4556 verifies the signature and rejects the import in case of an invalid
4557 signature or if the signing key is not authorized.
4558 @c FIXME: Add xref to daemon doc about signatures.
4559
4560 The main options are:
4561
4562 @table @code
4563 @item --export
4564 Export the specified store files or packages (see below.) Write the
4565 resulting archive to the standard output.
4566
4567 Dependencies are @emph{not} included in the output, unless
4568 @code{--recursive} is passed.
4569
4570 @item -r
4571 @itemx --recursive
4572 When combined with @code{--export}, this instructs @command{guix
4573 archive} to include dependencies of the given items in the archive.
4574 Thus, the resulting archive is self-contained: it contains the closure
4575 of the exported store items.
4576
4577 @item --import
4578 Read an archive from the standard input, and import the files listed
4579 therein into the store. Abort if the archive has an invalid digital
4580 signature, or if it is signed by a public key not among the authorized
4581 keys (see @code{--authorize} below.)
4582
4583 @item --missing
4584 Read a list of store file names from the standard input, one per line,
4585 and write on the standard output the subset of these files missing from
4586 the store.
4587
4588 @item --generate-key[=@var{parameters}]
4589 @cindex signing, archives
4590 Generate a new key pair for the daemon. This is a prerequisite before
4591 archives can be exported with @code{--export}. Note that this operation
4592 usually takes time, because it needs to gather enough entropy to
4593 generate the key pair.
4594
4595 The generated key pair is typically stored under @file{/etc/guix}, in
4596 @file{signing-key.pub} (public key) and @file{signing-key.sec} (private
4597 key, which must be kept secret.) When @var{parameters} is omitted,
4598 an ECDSA key using the Ed25519 curve is generated, or, for Libgcrypt
4599 versions before 1.6.0, it is a 4096-bit RSA key.
4600 Alternatively, @var{parameters} can specify
4601 @code{genkey} parameters suitable for Libgcrypt (@pxref{General
4602 public-key related Functions, @code{gcry_pk_genkey},, gcrypt, The
4603 Libgcrypt Reference Manual}).
4604
4605 @item --authorize
4606 @cindex authorizing, archives
4607 Authorize imports signed by the public key passed on standard input.
4608 The public key must be in ``s-expression advanced format''---i.e., the
4609 same format as the @file{signing-key.pub} file.
4610
4611 The list of authorized keys is kept in the human-editable file
4612 @file{/etc/guix/acl}. The file contains
4613 @url{https://people.csail.mit.edu/rivest/Sexp.txt, ``advanced-format
4614 s-expressions''} and is structured as an access-control list in the
4615 @url{https://theworld.com/~cme/spki.txt, Simple Public-Key Infrastructure
4616 (SPKI)}.
4617
4618 @item --extract=@var{directory}
4619 @itemx -x @var{directory}
4620 Read a single-item archive as served by substitute servers
4621 (@pxref{Substitutes}) and extract it to @var{directory}. This is a
4622 low-level operation needed in only very narrow use cases; see below.
4623
4624 For example, the following command extracts the substitute for Emacs
4625 served by @code{@value{SUBSTITUTE-SERVER}} to @file{/tmp/emacs}:
4626
4627 @example
4628 $ wget -O - \
4629 https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-emacs-24.5 \
4630 | bunzip2 | guix archive -x /tmp/emacs
4631 @end example
4632
4633 Single-item archives are different from multiple-item archives produced
4634 by @command{guix archive --export}; they contain a single store item,
4635 and they do @emph{not} embed a signature. Thus this operation does
4636 @emph{no} signature verification and its output should be considered
4637 unsafe.
4638
4639 The primary purpose of this operation is to facilitate inspection of
4640 archive contents coming from possibly untrusted substitute servers.
4641
4642 @item --list
4643 @itemx -t
4644 Read a single-item archive as served by substitute servers
4645 (@pxref{Substitutes}) and print the list of files it contains, as in
4646 this example:
4647
4648 @example
4649 $ wget -O - \
4650 https://@value{SUBSTITUTE-SERVER}/nar/lzip/@dots{}-emacs-26.3 \
4651 | lzip -d | guix archive -t
4652 @end example
4653
4654 @end table
4655
4656
4657 @c *********************************************************************
4658 @node Development
4659 @chapter Development
4660
4661 @cindex software development
4662 If you are a software developer, Guix provides tools that you should find
4663 helpful---independently of the language you're developing in. This is what
4664 this chapter is about.
4665
4666 The @command{guix environment} command provides a convenient way to set up
4667 @dfn{development environments} containing all the dependencies and tools
4668 necessary to work on the software package of your choice. The @command{guix
4669 pack} command allows you to create @dfn{application bundles} that can be
4670 easily distributed to users who do not run Guix.
4671
4672 @menu
4673 * Invoking guix environment:: Setting up development environments.
4674 * Invoking guix pack:: Creating software bundles.
4675 @end menu
4676
4677 @node Invoking guix environment
4678 @section Invoking @command{guix environment}
4679
4680 @cindex reproducible build environments
4681 @cindex development environments
4682 @cindex @command{guix environment}
4683 @cindex environment, package build environment
4684 The purpose of @command{guix environment} is to assist hackers in
4685 creating reproducible development environments without polluting their
4686 package profile. The @command{guix environment} tool takes one or more
4687 packages, builds all of their inputs, and creates a shell
4688 environment to use them.
4689
4690 The general syntax is:
4691
4692 @example
4693 guix environment @var{options} @var{package}@dots{}
4694 @end example
4695
4696 The following example spawns a new shell set up for the development of
4697 GNU@tie{}Guile:
4698
4699 @example
4700 guix environment guile
4701 @end example
4702
4703 If the needed dependencies are not built yet, @command{guix environment}
4704 automatically builds them. The environment of the new shell is an augmented
4705 version of the environment that @command{guix environment} was run in.
4706 It contains the necessary search paths for building the given package
4707 added to the existing environment variables. To create a ``pure''
4708 environment, in which the original environment variables have been unset,
4709 use the @code{--pure} option@footnote{Users sometimes wrongfully augment
4710 environment variables such as @code{PATH} in their @file{~/.bashrc}
4711 file. As a consequence, when @code{guix environment} launches it, Bash
4712 may read @file{~/.bashrc}, thereby introducing ``impurities'' in these
4713 environment variables. It is an error to define such environment
4714 variables in @file{.bashrc}; instead, they should be defined in
4715 @file{.bash_profile}, which is sourced only by log-in shells.
4716 @xref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}, for
4717 details on Bash start-up files.}.
4718
4719 @vindex GUIX_ENVIRONMENT
4720 @command{guix environment} defines the @code{GUIX_ENVIRONMENT}
4721 variable in the shell it spawns; its value is the file name of the
4722 profile of this environment. This allows users to, say, define a
4723 specific prompt for development environments in their @file{.bashrc}
4724 (@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}):
4725
4726 @example
4727 if [ -n "$GUIX_ENVIRONMENT" ]
4728 then
4729 export PS1="\u@@\h \w [dev]\$ "
4730 fi
4731 @end example
4732
4733 @noindent
4734 ...@: or to browse the profile:
4735
4736 @example
4737 $ ls "$GUIX_ENVIRONMENT/bin"
4738 @end example
4739
4740 Additionally, more than one package may be specified, in which case the
4741 union of the inputs for the given packages are used. For example, the
4742 command below spawns a shell where all of the dependencies of both Guile
4743 and Emacs are available:
4744
4745 @example
4746 guix environment guile emacs
4747 @end example
4748
4749 Sometimes an interactive shell session is not desired. An arbitrary
4750 command may be invoked by placing the @code{--} token to separate the
4751 command from the rest of the arguments:
4752
4753 @example
4754 guix environment guile -- make -j4
4755 @end example
4756
4757 In other situations, it is more convenient to specify the list of
4758 packages needed in the environment. For example, the following command
4759 runs @command{python} from an environment containing Python@tie{}2.7 and
4760 NumPy:
4761
4762 @example
4763 guix environment --ad-hoc python2-numpy python-2.7 -- python
4764 @end example
4765
4766 Furthermore, one might want the dependencies of a package and also some
4767 additional packages that are not build-time or runtime dependencies, but
4768 are useful when developing nonetheless. Because of this, the
4769 @code{--ad-hoc} flag is positional. Packages appearing before
4770 @code{--ad-hoc} are interpreted as packages whose dependencies will be
4771 added to the environment. Packages appearing after are interpreted as
4772 packages that will be added to the environment directly. For example,
4773 the following command creates a Guix development environment that
4774 additionally includes Git and strace:
4775
4776 @example
4777 guix environment --pure guix --ad-hoc git strace
4778 @end example
4779
4780 Sometimes it is desirable to isolate the environment as much as
4781 possible, for maximal purity and reproducibility. In particular, when
4782 using Guix on a host distro that is not Guix System, it is desirable to
4783 prevent access to @file{/usr/bin} and other system-wide resources from
4784 the development environment. For example, the following command spawns
4785 a Guile REPL in a ``container'' where only the store and the current
4786 working directory are mounted:
4787
4788 @example
4789 guix environment --ad-hoc --container guile -- guile
4790 @end example
4791
4792 @quotation Note
4793 The @code{--container} option requires Linux-libre 3.19 or newer.
4794 @end quotation
4795
4796 The available options are summarized below.
4797
4798 @table @code
4799 @item --root=@var{file}
4800 @itemx -r @var{file}
4801 @cindex persistent environment
4802 @cindex garbage collector root, for environments
4803 Make @var{file} a symlink to the profile for this environment, and
4804 register it as a garbage collector root.
4805
4806 This is useful if you want to protect your environment from garbage
4807 collection, to make it ``persistent''.
4808
4809 When this option is omitted, the environment is protected from garbage
4810 collection only for the duration of the @command{guix environment}
4811 session. This means that next time you recreate the same environment,
4812 you could have to rebuild or re-download packages. @xref{Invoking guix
4813 gc}, for more on GC roots.
4814
4815 @item --expression=@var{expr}
4816 @itemx -e @var{expr}
4817 Create an environment for the package or list of packages that
4818 @var{expr} evaluates to.
4819
4820 For example, running:
4821
4822 @example
4823 guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
4824 @end example
4825
4826 starts a shell with the environment for this specific variant of the
4827 PETSc package.
4828
4829 Running:
4830
4831 @example
4832 guix environment --ad-hoc -e '(@@ (gnu) %base-packages)'
4833 @end example
4834
4835 starts a shell with all the base system packages available.
4836
4837 The above commands only use the default output of the given packages.
4838 To select other outputs, two element tuples can be specified:
4839
4840 @example
4841 guix environment --ad-hoc -e '(list (@@ (gnu packages bash) bash) "include")'
4842 @end example
4843
4844 @item --load=@var{file}
4845 @itemx -l @var{file}
4846 Create an environment for the package or list of packages that the code
4847 within @var{file} evaluates to.
4848
4849 As an example, @var{file} might contain a definition like this
4850 (@pxref{Defining Packages}):
4851
4852 @lisp
4853 @verbatiminclude environment-gdb.scm
4854 @end lisp
4855
4856 @item --manifest=@var{file}
4857 @itemx -m @var{file}
4858 Create an environment for the packages contained in the manifest object
4859 returned by the Scheme code in @var{file}. This option can be repeated
4860 several times, in which case the manifests are concatenated.
4861
4862 This is similar to the same-named option in @command{guix package}
4863 (@pxref{profile-manifest, @option{--manifest}}) and uses the same
4864 manifest files.
4865
4866 @item --ad-hoc
4867 Include all specified packages in the resulting environment, as if an
4868 @i{ad hoc} package were defined with them as inputs. This option is
4869 useful for quickly creating an environment without having to write a
4870 package expression to contain the desired inputs.
4871
4872 For instance, the command:
4873
4874 @example
4875 guix environment --ad-hoc guile guile-sdl -- guile
4876 @end example
4877
4878 runs @command{guile} in an environment where Guile and Guile-SDL are
4879 available.
4880
4881 Note that this example implicitly asks for the default output of
4882 @code{guile} and @code{guile-sdl}, but it is possible to ask for a
4883 specific output---e.g., @code{glib:bin} asks for the @code{bin} output
4884 of @code{glib} (@pxref{Packages with Multiple Outputs}).
4885
4886 This option may be composed with the default behavior of @command{guix
4887 environment}. Packages appearing before @code{--ad-hoc} are interpreted
4888 as packages whose dependencies will be added to the environment, the
4889 default behavior. Packages appearing after are interpreted as packages
4890 that will be added to the environment directly.
4891
4892 @item --pure
4893 Unset existing environment variables when building the new environment, except
4894 those specified with @option{--preserve} (see below.) This has the effect of
4895 creating an environment in which search paths only contain package inputs.
4896
4897 @item --preserve=@var{regexp}
4898 @itemx -E @var{regexp}
4899 When used alongside @option{--pure}, preserve the environment variables
4900 matching @var{regexp}---in other words, put them on a ``white list'' of
4901 environment variables that must be preserved. This option can be repeated
4902 several times.
4903
4904 @example
4905 guix environment --pure --preserve=^SLURM --ad-hoc openmpi @dots{} \
4906 -- mpirun @dots{}
4907 @end example
4908
4909 This example runs @command{mpirun} in a context where the only environment
4910 variables defined are @code{PATH}, environment variables whose name starts
4911 with @code{SLURM}, as well as the usual ``precious'' variables (@code{HOME},
4912 @code{USER}, etc.)
4913
4914 @item --search-paths
4915 Display the environment variable definitions that make up the
4916 environment.
4917
4918 @item --system=@var{system}
4919 @itemx -s @var{system}
4920 Attempt to build for @var{system}---e.g., @code{i686-linux}.
4921
4922 @item --container
4923 @itemx -C
4924 @cindex container
4925 Run @var{command} within an isolated container. The current working
4926 directory outside the container is mapped inside the container.
4927 Additionally, unless overridden with @code{--user}, a dummy home
4928 directory is created that matches the current user's home directory, and
4929 @file{/etc/passwd} is configured accordingly.
4930
4931 The spawned process runs as the current user outside the container. Inside
4932 the container, it has the same UID and GID as the current user, unless
4933 @option{--user} is passed (see below.)
4934
4935 @item --network
4936 @itemx -N
4937 For containers, share the network namespace with the host system.
4938 Containers created without this flag only have access to the loopback
4939 device.
4940
4941 @item --link-profile
4942 @itemx -P
4943 For containers, link the environment profile to
4944 @file{~/.guix-profile} within the container. This is equivalent to
4945 running the command @command{ln -s $GUIX_ENVIRONMENT ~/.guix-profile}
4946 within the container. Linking will fail and abort the environment if
4947 the directory already exists, which will certainly be the case if
4948 @command{guix environment} was invoked in the user's home directory.
4949
4950 Certain packages are configured to look in
4951 @code{~/.guix-profile} for configuration files and data;@footnote{For
4952 example, the @code{fontconfig} package inspects
4953 @file{~/.guix-profile/share/fonts} for additional fonts.}
4954 @code{--link-profile} allows these programs to behave as expected within
4955 the environment.
4956
4957 @item --user=@var{user}
4958 @itemx -u @var{user}
4959 For containers, use the username @var{user} in place of the current
4960 user. The generated @file{/etc/passwd} entry within the container will
4961 contain the name @var{user}, the home directory will be
4962 @file{/home/@var{user}}, and no user GECOS data will be copied. Furthermore,
4963 the UID and GID inside the container are 1000. @var{user}
4964 need not exist on the system.
4965
4966 Additionally, any shared or exposed path (see @code{--share} and
4967 @code{--expose} respectively) whose target is within the current user's
4968 home directory will be remapped relative to @file{/home/USER}; this
4969 includes the automatic mapping of the current working directory.
4970
4971 @example
4972 # will expose paths as /home/foo/wd, /home/foo/test, and /home/foo/target
4973 cd $HOME/wd
4974 guix environment --container --user=foo \
4975 --expose=$HOME/test \
4976 --expose=/tmp/target=$HOME/target
4977 @end example
4978
4979 While this will limit the leaking of user identity through home paths
4980 and each of the user fields, this is only one useful component of a
4981 broader privacy/anonymity solution---not one in and of itself.
4982
4983 @item --no-cwd
4984 For containers, the default behavior is to share the current working
4985 directory with the isolated container and immediately change to that
4986 directory within the container. If this is undesirable, @code{--no-cwd}
4987 will cause the current working directory to @emph{not} be automatically
4988 shared and will change to the user's home directory within the container
4989 instead. See also @code{--user}.
4990
4991 @item --expose=@var{source}[=@var{target}]
4992 @itemx --share=@var{source}[=@var{target}]
4993 For containers, @code{--expose} (resp. @code{--share}) exposes the file
4994 system @var{source} from the host system as the read-only
4995 (resp. writable) file system @var{target} within the container. If
4996 @var{target} is not specified, @var{source} is used as the target mount
4997 point in the container.
4998
4999 The example below spawns a Guile REPL in a container in which the user's
5000 home directory is accessible read-only via the @file{/exchange}
5001 directory:
5002
5003 @example
5004 guix environment --container --expose=$HOME=/exchange --ad-hoc guile -- guile
5005 @end example
5006
5007 @end table
5008
5009 @command{guix environment}
5010 also supports all of the common build options that @command{guix
5011 build} supports (@pxref{Common Build Options}) as well as package
5012 transformation options (@pxref{Package Transformation Options}).
5013
5014 @node Invoking guix pack
5015 @section Invoking @command{guix pack}
5016
5017 Occasionally you want to pass software to people who are not (yet!)
5018 lucky enough to be using Guix. You'd tell them to run @command{guix
5019 package -i @var{something}}, but that's not possible in this case. This
5020 is where @command{guix pack} comes in.
5021
5022 @quotation Note
5023 If you are looking for ways to exchange binaries among machines that
5024 already run Guix, @pxref{Invoking guix copy}, @ref{Invoking guix
5025 publish}, and @ref{Invoking guix archive}.
5026 @end quotation
5027
5028 @cindex pack
5029 @cindex bundle
5030 @cindex application bundle
5031 @cindex software bundle
5032 The @command{guix pack} command creates a shrink-wrapped @dfn{pack} or
5033 @dfn{software bundle}: it creates a tarball or some other archive
5034 containing the binaries of the software you're interested in, and all
5035 its dependencies. The resulting archive can be used on any machine that
5036 does not have Guix, and people can run the exact same binaries as those
5037 you have with Guix. The pack itself is created in a bit-reproducible
5038 fashion, so anyone can verify that it really contains the build results
5039 that you pretend to be shipping.
5040
5041 For example, to create a bundle containing Guile, Emacs, Geiser, and all
5042 their dependencies, you can run:
5043
5044 @example
5045 $ guix pack guile emacs geiser
5046 @dots{}
5047 /gnu/store/@dots{}-pack.tar.gz
5048 @end example
5049
5050 The result here is a tarball containing a @file{/gnu/store} directory
5051 with all the relevant packages. The resulting tarball contains a
5052 @dfn{profile} with the three packages of interest; the profile is the
5053 same as would be created by @command{guix package -i}. It is this
5054 mechanism that is used to create Guix's own standalone binary tarball
5055 (@pxref{Binary Installation}).
5056
5057 Users of this pack would have to run
5058 @file{/gnu/store/@dots{}-profile/bin/guile} to run Guile, which you may
5059 find inconvenient. To work around it, you can create, say, a
5060 @file{/opt/gnu/bin} symlink to the profile:
5061
5062 @example
5063 guix pack -S /opt/gnu/bin=bin guile emacs geiser
5064 @end example
5065
5066 @noindent
5067 That way, users can happily type @file{/opt/gnu/bin/guile} and enjoy.
5068
5069 @cindex relocatable binaries, with @command{guix pack}
5070 What if the recipient of your pack does not have root privileges on
5071 their machine, and thus cannot unpack it in the root file system? In
5072 that case, you will want to use the @code{--relocatable} option (see
5073 below). This option produces @dfn{relocatable binaries}, meaning they
5074 they can be placed anywhere in the file system hierarchy: in the example
5075 above, users can unpack your tarball in their home directory and
5076 directly run @file{./opt/gnu/bin/guile}.
5077
5078 @cindex Docker, build an image with guix pack
5079 Alternatively, you can produce a pack in the Docker image format using
5080 the following command:
5081
5082 @example
5083 guix pack -f docker -S /bin=bin guile guile-readline
5084 @end example
5085
5086 @noindent
5087 The result is a tarball that can be passed to the @command{docker load}
5088 command, followed by @code{docker run}:
5089
5090 @example
5091 docker load < @var{file}
5092 docker run -ti guile-guile-readline /bin/guile
5093 @end example
5094
5095 @noindent
5096 where @var{file} is the image returned by @var{guix pack}, and
5097 @code{guile-guile-readline} is its ``image tag''. See the
5098 @uref{https://docs.docker.com/engine/reference/commandline/load/, Docker
5099 documentation} for more information.
5100
5101 @cindex Singularity, build an image with guix pack
5102 @cindex SquashFS, build an image with guix pack
5103 Yet another option is to produce a SquashFS image with the following
5104 command:
5105
5106 @example
5107 guix pack -f squashfs bash guile emacs geiser
5108 @end example
5109
5110 @noindent
5111 The result is a SquashFS file system image that can either be mounted or
5112 directly be used as a file system container image with the
5113 @uref{https://singularity.lbl.gov, Singularity container execution
5114 environment}, using commands like @command{singularity shell} or
5115 @command{singularity exec}.
5116
5117 Several command-line options allow you to customize your pack:
5118
5119 @table @code
5120 @item --format=@var{format}
5121 @itemx -f @var{format}
5122 Produce a pack in the given @var{format}.
5123
5124 The available formats are:
5125
5126 @table @code
5127 @item tarball
5128 This is the default format. It produces a tarball containing all the
5129 specified binaries and symlinks.
5130
5131 @item docker
5132 This produces a tarball that follows the
5133 @uref{https://github.com/docker/docker/blob/master/image/spec/v1.2.md,
5134 Docker Image Specification}. The ``repository name'' as it appears in
5135 the output of the @command{docker images} command is computed from
5136 package names passed on the command line or in the manifest file.
5137
5138 @item squashfs
5139 This produces a SquashFS image containing all the specified binaries and
5140 symlinks, as well as empty mount points for virtual file systems like
5141 procfs.
5142
5143 @quotation Note
5144 Singularity @emph{requires} you to provide @file{/bin/sh} in the image.
5145 For that reason, @command{guix pack -f squashfs} always implies @code{-S
5146 /bin=bin}. Thus, your @command{guix pack} invocation must always start
5147 with something like:
5148
5149 @example
5150 guix pack -f squashfs bash @dots{}
5151 @end example
5152
5153 If you forget the @code{bash} (or similar) package, @command{singularity
5154 run} and @command{singularity exec} will fail with an unhelpful ``no
5155 such file or directory'' message.
5156 @end quotation
5157 @end table
5158
5159 @cindex relocatable binaries
5160 @item --relocatable
5161 @itemx -R
5162 Produce @dfn{relocatable binaries}---i.e., binaries that can be placed
5163 anywhere in the file system hierarchy and run from there.
5164
5165 When this option is passed once, the resulting binaries require support for
5166 @dfn{user namespaces} in the kernel Linux; when passed
5167 @emph{twice}@footnote{Here's a trick to memorize it: @code{-RR}, which adds
5168 PRoot support, can be thought of as the abbreviation of ``Really
5169 Relocatable''. Neat, isn't it?}, relocatable binaries fall to back to PRoot
5170 if user namespaces are unavailable, and essentially work anywhere---see below
5171 for the implications.
5172
5173 For example, if you create a pack containing Bash with:
5174
5175 @example
5176 guix pack -RR -S /mybin=bin bash
5177 @end example
5178
5179 @noindent
5180 ...@: you can copy that pack to a machine that lacks Guix, and from your
5181 home directory as a normal user, run:
5182
5183 @example
5184 tar xf pack.tar.gz
5185 ./mybin/sh
5186 @end example
5187
5188 @noindent
5189 In that shell, if you type @code{ls /gnu/store}, you'll notice that
5190 @file{/gnu/store} shows up and contains all the dependencies of
5191 @code{bash}, even though the machine actually lacks @file{/gnu/store}
5192 altogether! That is probably the simplest way to deploy Guix-built
5193 software on a non-Guix machine.
5194
5195 @quotation Note
5196 By default, relocatable binaries rely on the @dfn{user namespace} feature of
5197 the kernel Linux, which allows unprivileged users to mount or change root.
5198 Old versions of Linux did not support it, and some GNU/Linux distributions
5199 turn it off.
5200
5201 To produce relocatable binaries that work even in the absence of user
5202 namespaces, pass @option{--relocatable} or @option{-R} @emph{twice}. In that
5203 case, binaries will try user namespace support and fall back to PRoot if user
5204 namespaces are not supported.
5205
5206 The @uref{https://proot-me.github.io/, PRoot} program provides the necessary
5207 support for file system virtualization. It achieves that by using the
5208 @code{ptrace} system call on the running program. This approach has the
5209 advantage to work without requiring special kernel support, but it incurs
5210 run-time overhead every time a system call is made.
5211 @end quotation
5212
5213 @cindex entry point, for Docker images
5214 @item --entry-point=@var{command}
5215 Use @var{command} as the @dfn{entry point} of the resulting pack, if the pack
5216 format supports it---currently @code{docker} and @code{squashfs} (Singularity)
5217 support it. @var{command} must be relative to the profile contained in the
5218 pack.
5219
5220 The entry point specifies the command that tools like @code{docker run} or
5221 @code{singularity run} automatically start by default. For example, you can
5222 do:
5223
5224 @example
5225 guix pack -f docker --entry-point=bin/guile guile
5226 @end example
5227
5228 The resulting pack can easily be loaded and @code{docker run} with no extra
5229 arguments will spawn @code{bin/guile}:
5230
5231 @example
5232 docker load -i pack.tar.gz
5233 docker run @var{image-id}
5234 @end example
5235
5236 @item --expression=@var{expr}
5237 @itemx -e @var{expr}
5238 Consider the package @var{expr} evaluates to.
5239
5240 This has the same purpose as the same-named option in @command{guix
5241 build} (@pxref{Additional Build Options, @code{--expression} in
5242 @command{guix build}}).
5243
5244 @item --manifest=@var{file}
5245 @itemx -m @var{file}
5246 Use the packages contained in the manifest object returned by the Scheme
5247 code in @var{file}. This option can be repeated several times, in which
5248 case the manifests are concatenated.
5249
5250 This has a similar purpose as the same-named option in @command{guix
5251 package} (@pxref{profile-manifest, @option{--manifest}}) and uses the
5252 same manifest files. It allows you to define a collection of packages
5253 once and use it both for creating profiles and for creating archives
5254 for use on machines that do not have Guix installed. Note that you can
5255 specify @emph{either} a manifest file @emph{or} a list of packages,
5256 but not both.
5257
5258 @item --system=@var{system}
5259 @itemx -s @var{system}
5260 Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
5261 the system type of the build host.
5262
5263 @item --target=@var{triplet}
5264 @cindex cross-compilation
5265 Cross-build for @var{triplet}, which must be a valid GNU triplet, such
5266 as @code{"mips64el-linux-gnu"} (@pxref{Specifying target triplets, GNU
5267 configuration triplets,, autoconf, Autoconf}).
5268
5269 @item --compression=@var{tool}
5270 @itemx -C @var{tool}
5271 Compress the resulting tarball using @var{tool}---one of @code{gzip},
5272 @code{bzip2}, @code{xz}, @code{lzip}, or @code{none} for no compression.
5273
5274 @item --symlink=@var{spec}
5275 @itemx -S @var{spec}
5276 Add the symlinks specified by @var{spec} to the pack. This option can
5277 appear several times.
5278
5279 @var{spec} has the form @code{@var{source}=@var{target}}, where
5280 @var{source} is the symlink that will be created and @var{target} is the
5281 symlink target.
5282
5283 For instance, @code{-S /opt/gnu/bin=bin} creates a @file{/opt/gnu/bin}
5284 symlink pointing to the @file{bin} sub-directory of the profile.
5285
5286 @item --save-provenance
5287 Save provenance information for the packages passed on the command line.
5288 Provenance information includes the URL and commit of the channels in use
5289 (@pxref{Channels}).
5290
5291 Provenance information is saved in the
5292 @file{/gnu/store/@dots{}-profile/manifest} file in the pack, along with the
5293 usual package metadata---the name and version of each package, their
5294 propagated inputs, and so on. It is useful information to the recipient of
5295 the pack, who then knows how the pack was (supposedly) obtained.
5296
5297 This option is not enabled by default because, like timestamps, provenance
5298 information contributes nothing to the build process. In other words, there
5299 is an infinity of channel URLs and commit IDs that can lead to the same pack.
5300 Recording such ``silent'' metadata in the output thus potentially breaks the
5301 source-to-binary bitwise reproducibility property.
5302
5303 @item --root=@var{file}
5304 @itemx -r @var{file}
5305 @cindex garbage collector root, for packs
5306 Make @var{file} a symlink to the resulting pack, and register it as a garbage
5307 collector root.
5308
5309 @item --localstatedir
5310 @itemx --profile-name=@var{name}
5311 Include the ``local state directory'', @file{/var/guix}, in the resulting
5312 pack, and notably the @file{/var/guix/profiles/per-user/root/@var{name}}
5313 profile---by default @var{name} is @code{guix-profile}, which corresponds to
5314 @file{~root/.guix-profile}.
5315
5316 @file{/var/guix} contains the store database (@pxref{The Store}) as well
5317 as garbage-collector roots (@pxref{Invoking guix gc}). Providing it in
5318 the pack means that the store is ``complete'' and manageable by Guix;
5319 not providing it pack means that the store is ``dead'': items cannot be
5320 added to it or removed from it after extraction of the pack.
5321
5322 One use case for this is the Guix self-contained binary tarball
5323 (@pxref{Binary Installation}).
5324
5325 @item --derivation
5326 @itemx -d
5327 Print the name of the derivation that builds the pack.
5328
5329 @item --bootstrap
5330 Use the bootstrap binaries to build the pack. This option is only
5331 useful to Guix developers.
5332 @end table
5333
5334 In addition, @command{guix pack} supports all the common build options
5335 (@pxref{Common Build Options}) and all the package transformation
5336 options (@pxref{Package Transformation Options}).
5337
5338
5339 @c *********************************************************************
5340 @node Programming Interface
5341 @chapter Programming Interface
5342
5343 GNU Guix provides several Scheme programming interfaces (APIs) to
5344 define, build, and query packages. The first interface allows users to
5345 write high-level package definitions. These definitions refer to
5346 familiar packaging concepts, such as the name and version of a package,
5347 its build system, and its dependencies. These definitions can then be
5348 turned into concrete build actions.
5349
5350 Build actions are performed by the Guix daemon, on behalf of users. In a
5351 standard setup, the daemon has write access to the store---the
5352 @file{/gnu/store} directory---whereas users do not. The recommended
5353 setup also has the daemon perform builds in chroots, under a specific
5354 build users, to minimize interference with the rest of the system.
5355
5356 @cindex derivation
5357 Lower-level APIs are available to interact with the daemon and the
5358 store. To instruct the daemon to perform a build action, users actually
5359 provide it with a @dfn{derivation}. A derivation is a low-level
5360 representation of the build actions to be taken, and the environment in
5361 which they should occur---derivations are to package definitions what
5362 assembly is to C programs. The term ``derivation'' comes from the fact
5363 that build results @emph{derive} from them.
5364
5365 This chapter describes all these APIs in turn, starting from high-level
5366 package definitions.
5367
5368 @menu
5369 * Package Modules:: Packages from the programmer's viewpoint.
5370 * Defining Packages:: Defining new packages.
5371 * Build Systems:: Specifying how packages are built.
5372 * The Store:: Manipulating the package store.
5373 * Derivations:: Low-level interface to package derivations.
5374 * The Store Monad:: Purely functional interface to the store.
5375 * G-Expressions:: Manipulating build expressions.
5376 * Invoking guix repl:: Fiddling with Guix interactively.
5377 @end menu
5378
5379 @node Package Modules
5380 @section Package Modules
5381
5382 From a programming viewpoint, the package definitions of the
5383 GNU distribution are provided by Guile modules in the @code{(gnu packages
5384 @dots{})} name space@footnote{Note that packages under the @code{(gnu
5385 packages @dots{})} module name space are not necessarily ``GNU
5386 packages''. This module naming scheme follows the usual Guile module
5387 naming convention: @code{gnu} means that these modules are distributed
5388 as part of the GNU system, and @code{packages} identifies modules that
5389 define packages.} (@pxref{Modules, Guile modules,, guile, GNU Guile
5390 Reference Manual}). For instance, the @code{(gnu packages emacs)}
5391 module exports a variable named @code{emacs}, which is bound to a
5392 @code{<package>} object (@pxref{Defining Packages}).
5393
5394 The @code{(gnu packages @dots{})} module name space is
5395 automatically scanned for packages by the command-line tools. For
5396 instance, when running @code{guix install emacs}, all the @code{(gnu
5397 packages @dots{})} modules are scanned until one that exports a package
5398 object whose name is @code{emacs} is found. This package search
5399 facility is implemented in the @code{(gnu packages)} module.
5400
5401 @cindex customization, of packages
5402 @cindex package module search path
5403 Users can store package definitions in modules with different
5404 names---e.g., @code{(my-packages emacs)}@footnote{Note that the file
5405 name and module name must match. For instance, the @code{(my-packages
5406 emacs)} module must be stored in a @file{my-packages/emacs.scm} file
5407 relative to the load path specified with @option{--load-path} or
5408 @code{GUIX_PACKAGE_PATH}. @xref{Modules and the File System,,,
5409 guile, GNU Guile Reference Manual}, for details.}. There are two ways to make
5410 these package definitions visible to the user interfaces:
5411
5412 @enumerate
5413 @item
5414 By adding the directory containing your package modules to the search path
5415 with the @code{-L} flag of @command{guix package} and other commands
5416 (@pxref{Common Build Options}), or by setting the @code{GUIX_PACKAGE_PATH}
5417 environment variable described below.
5418
5419 @item
5420 By defining a @dfn{channel} and configuring @command{guix pull} so that it
5421 pulls from it. A channel is essentially a Git repository containing package
5422 modules. @xref{Channels}, for more information on how to define and use
5423 channels.
5424 @end enumerate
5425
5426 @code{GUIX_PACKAGE_PATH} works similarly to other search path variables:
5427
5428 @defvr {Environment Variable} GUIX_PACKAGE_PATH
5429 This is a colon-separated list of directories to search for additional
5430 package modules. Directories listed in this variable take precedence
5431 over the own modules of the distribution.
5432 @end defvr
5433
5434 The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}:
5435 each package is built based solely on other packages in the
5436 distribution. The root of this dependency graph is a small set of
5437 @dfn{bootstrap binaries}, provided by the @code{(gnu packages
5438 bootstrap)} module. For more information on bootstrapping,
5439 @pxref{Bootstrapping}.
5440
5441 @node Defining Packages
5442 @section Defining Packages
5443
5444 The high-level interface to package definitions is implemented in the
5445 @code{(guix packages)} and @code{(guix build-system)} modules. As an
5446 example, the package definition, or @dfn{recipe}, for the GNU Hello
5447 package looks like this:
5448
5449 @lisp
5450 (define-module (gnu packages hello)
5451 #:use-module (guix packages)
5452 #:use-module (guix download)
5453 #:use-module (guix build-system gnu)
5454 #:use-module (guix licenses)
5455 #:use-module (gnu packages gawk))
5456
5457 (define-public hello
5458 (package
5459 (name "hello")
5460 (version "2.10")
5461 (source (origin
5462 (method url-fetch)
5463 (uri (string-append "mirror://gnu/hello/hello-" version
5464 ".tar.gz"))
5465 (sha256
5466 (base32
5467 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
5468 (build-system gnu-build-system)
5469 (arguments '(#:configure-flags '("--enable-silent-rules")))
5470 (inputs `(("gawk" ,gawk)))
5471 (synopsis "Hello, GNU world: An example GNU package")
5472 (description "Guess what GNU Hello prints!")
5473 (home-page "https://www.gnu.org/software/hello/")
5474 (license gpl3+)))
5475 @end lisp
5476
5477 @noindent
5478 Without being a Scheme expert, the reader may have guessed the meaning
5479 of the various fields here. This expression binds the variable
5480 @code{hello} to a @code{<package>} object, which is essentially a record
5481 (@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}).
5482 This package object can be inspected using procedures found in the
5483 @code{(guix packages)} module; for instance, @code{(package-name hello)}
5484 returns---surprise!---@code{"hello"}.
5485
5486 With luck, you may be able to import part or all of the definition of
5487 the package you are interested in from another repository, using the
5488 @code{guix import} command (@pxref{Invoking guix import}).
5489
5490 In the example above, @var{hello} is defined in a module of its own,
5491 @code{(gnu packages hello)}. Technically, this is not strictly
5492 necessary, but it is convenient to do so: all the packages defined in
5493 modules under @code{(gnu packages @dots{})} are automatically known to
5494 the command-line tools (@pxref{Package Modules}).
5495
5496 There are a few points worth noting in the above package definition:
5497
5498 @itemize
5499 @item
5500 The @code{source} field of the package is an @code{<origin>} object
5501 (@pxref{origin Reference}, for the complete reference).
5502 Here, the @code{url-fetch} method from @code{(guix download)} is used,
5503 meaning that the source is a file to be downloaded over FTP or HTTP.
5504
5505 The @code{mirror://gnu} prefix instructs @code{url-fetch} to use one of
5506 the GNU mirrors defined in @code{(guix download)}.
5507
5508 The @code{sha256} field specifies the expected SHA256 hash of the file
5509 being downloaded. It is mandatory, and allows Guix to check the
5510 integrity of the file. The @code{(base32 @dots{})} form introduces the
5511 base32 representation of the hash. You can obtain this information with
5512 @code{guix download} (@pxref{Invoking guix download}) and @code{guix
5513 hash} (@pxref{Invoking guix hash}).
5514
5515 @cindex patches
5516 When needed, the @code{origin} form can also have a @code{patches} field
5517 listing patches to be applied, and a @code{snippet} field giving a
5518 Scheme expression to modify the source code.
5519
5520 @item
5521 @cindex GNU Build System
5522 The @code{build-system} field specifies the procedure to build the
5523 package (@pxref{Build Systems}). Here, @var{gnu-build-system}
5524 represents the familiar GNU Build System, where packages may be
5525 configured, built, and installed with the usual @code{./configure &&
5526 make && make check && make install} command sequence.
5527
5528 @item
5529 The @code{arguments} field specifies options for the build system
5530 (@pxref{Build Systems}). Here it is interpreted by
5531 @var{gnu-build-system} as a request run @file{configure} with the
5532 @code{--enable-silent-rules} flag.
5533
5534 @cindex quote
5535 @cindex quoting
5536 @findex '
5537 @findex quote
5538 What about these quote (@code{'}) characters? They are Scheme syntax to
5539 introduce a literal list; @code{'} is synonymous with @code{quote}.
5540 @xref{Expression Syntax, quoting,, guile, GNU Guile Reference Manual},
5541 for details. Here the value of the @code{arguments} field is a list of
5542 arguments passed to the build system down the road, as with @code{apply}
5543 (@pxref{Fly Evaluation, @code{apply},, guile, GNU Guile Reference
5544 Manual}).
5545
5546 The hash-colon (@code{#:}) sequence defines a Scheme @dfn{keyword}
5547 (@pxref{Keywords,,, guile, GNU Guile Reference Manual}), and
5548 @code{#:configure-flags} is a keyword used to pass a keyword argument
5549 to the build system (@pxref{Coding With Keywords,,, guile, GNU Guile
5550 Reference Manual}).
5551
5552 @item
5553 The @code{inputs} field specifies inputs to the build process---i.e.,
5554 build-time or run-time dependencies of the package. Here, we define an
5555 input called @code{"gawk"} whose value is that of the @var{gawk}
5556 variable; @var{gawk} is itself bound to a @code{<package>} object.
5557
5558 @cindex backquote (quasiquote)
5559 @findex `
5560 @findex quasiquote
5561 @cindex comma (unquote)
5562 @findex ,
5563 @findex unquote
5564 @findex ,@@
5565 @findex unquote-splicing
5566 Again, @code{`} (a backquote, synonymous with @code{quasiquote}) allows
5567 us to introduce a literal list in the @code{inputs} field, while
5568 @code{,} (a comma, synonymous with @code{unquote}) allows us to insert a
5569 value in that list (@pxref{Expression Syntax, unquote,, guile, GNU Guile
5570 Reference Manual}).
5571
5572 Note that GCC, Coreutils, Bash, and other essential tools do not need to
5573 be specified as inputs here. Instead, @var{gnu-build-system} takes care
5574 of ensuring that they are present (@pxref{Build Systems}).
5575
5576 However, any other dependencies need to be specified in the
5577 @code{inputs} field. Any dependency not specified here will simply be
5578 unavailable to the build process, possibly leading to a build failure.
5579 @end itemize
5580
5581 @xref{package Reference}, for a full description of possible fields.
5582
5583 Once a package definition is in place, the
5584 package may actually be built using the @code{guix build} command-line
5585 tool (@pxref{Invoking guix build}), troubleshooting any build failures
5586 you encounter (@pxref{Debugging Build Failures}). You can easily jump back to the
5587 package definition using the @command{guix edit} command
5588 (@pxref{Invoking guix edit}).
5589 @xref{Packaging Guidelines}, for
5590 more information on how to test package definitions, and
5591 @ref{Invoking guix lint}, for information on how to check a definition
5592 for style conformance.
5593 @vindex GUIX_PACKAGE_PATH
5594 Lastly, @pxref{Channels}, for information
5595 on how to extend the distribution by adding your own package definitions
5596 in a ``channel''.
5597
5598 Finally, updating the package definition to a new upstream version
5599 can be partly automated by the @command{guix refresh} command
5600 (@pxref{Invoking guix refresh}).
5601
5602 Behind the scenes, a derivation corresponding to the @code{<package>}
5603 object is first computed by the @code{package-derivation} procedure.
5604 That derivation is stored in a @code{.drv} file under @file{/gnu/store}.
5605 The build actions it prescribes may then be realized by using the
5606 @code{build-derivations} procedure (@pxref{The Store}).
5607
5608 @deffn {Scheme Procedure} package-derivation @var{store} @var{package} [@var{system}]
5609 Return the @code{<derivation>} object of @var{package} for @var{system}
5610 (@pxref{Derivations}).
5611
5612 @var{package} must be a valid @code{<package>} object, and @var{system}
5613 must be a string denoting the target system type---e.g.,
5614 @code{"x86_64-linux"} for an x86_64 Linux-based GNU system. @var{store}
5615 must be a connection to the daemon, which operates on the store
5616 (@pxref{The Store}).
5617 @end deffn
5618
5619 @noindent
5620 @cindex cross-compilation
5621 Similarly, it is possible to compute a derivation that cross-builds a
5622 package for some other system:
5623
5624 @deffn {Scheme Procedure} package-cross-derivation @var{store} @
5625 @var{package} @var{target} [@var{system}]
5626 Return the @code{<derivation>} object of @var{package} cross-built from
5627 @var{system} to @var{target}.
5628
5629 @var{target} must be a valid GNU triplet denoting the target hardware
5630 and operating system, such as @code{"mips64el-linux-gnu"}
5631 (@pxref{Specifying Target Triplets,,, autoconf, Autoconf}).
5632 @end deffn
5633
5634 @cindex package transformations
5635 @cindex input rewriting
5636 @cindex dependency tree rewriting
5637 Packages can be manipulated in arbitrary ways. An example of a useful
5638 transformation is @dfn{input rewriting}, whereby the dependency tree of
5639 a package is rewritten by replacing specific inputs by others:
5640
5641 @deffn {Scheme Procedure} package-input-rewriting @var{replacements} @
5642 [@var{rewrite-name}]
5643 Return a procedure that, when passed a package, replaces its direct and
5644 indirect dependencies (but not its implicit inputs) according to
5645 @var{replacements}. @var{replacements} is a list of package pairs; the
5646 first element of each pair is the package to replace, and the second one
5647 is the replacement.
5648
5649 Optionally, @var{rewrite-name} is a one-argument procedure that takes
5650 the name of a package and returns its new name after rewrite.
5651 @end deffn
5652
5653 @noindent
5654 Consider this example:
5655
5656 @lisp
5657 (define libressl-instead-of-openssl
5658 ;; This is a procedure to replace OPENSSL by LIBRESSL,
5659 ;; recursively.
5660 (package-input-rewriting `((,openssl . ,libressl))))
5661
5662 (define git-with-libressl
5663 (libressl-instead-of-openssl git))
5664 @end lisp
5665
5666 @noindent
5667 Here we first define a rewriting procedure that replaces @var{openssl}
5668 with @var{libressl}. Then we use it to define a @dfn{variant} of the
5669 @var{git} package that uses @var{libressl} instead of @var{openssl}.
5670 This is exactly what the @option{--with-input} command-line option does
5671 (@pxref{Package Transformation Options, @option{--with-input}}).
5672
5673 The following variant of @code{package-input-rewriting} can match packages to
5674 be replaced by name rather than by identity.
5675
5676 @deffn {Scheme Procedure} package-input-rewriting/spec @var{replacements}
5677 Return a procedure that, given a package, applies the given @var{replacements} to
5678 all the package graph (excluding implicit inputs). @var{replacements} is a list of
5679 spec/procedures pair; each spec is a package specification such as @code{"gcc"} or
5680 @code{"guile@@2"}, and each procedure takes a matching package and returns a
5681 replacement for that package.
5682 @end deffn
5683
5684 The example above could be rewritten this way:
5685
5686 @lisp
5687 (define libressl-instead-of-openssl
5688 ;; Replace all the packages called "openssl" with LibreSSL.
5689 (package-input-rewriting/spec `(("openssl" . ,(const libressl)))))
5690 @end lisp
5691
5692 The key difference here is that, this time, packages are matched by spec and
5693 not by identity. In other words, any package in the graph that is called
5694 @code{openssl} will be replaced.
5695
5696 A more generic procedure to rewrite a package dependency graph is
5697 @code{package-mapping}: it supports arbitrary changes to nodes in the
5698 graph.
5699
5700 @deffn {Scheme Procedure} package-mapping @var{proc} [@var{cut?}]
5701 Return a procedure that, given a package, applies @var{proc} to all the packages
5702 depended on and returns the resulting package. The procedure stops recursion
5703 when @var{cut?} returns true for a given package.
5704 @end deffn
5705
5706 @menu
5707 * package Reference:: The package data type.
5708 * origin Reference:: The origin data type.
5709 @end menu
5710
5711
5712 @node package Reference
5713 @subsection @code{package} Reference
5714
5715 This section summarizes all the options available in @code{package}
5716 declarations (@pxref{Defining Packages}).
5717
5718 @deftp {Data Type} package
5719 This is the data type representing a package recipe.
5720
5721 @table @asis
5722 @item @code{name}
5723 The name of the package, as a string.
5724
5725 @item @code{version}
5726 The version of the package, as a string.
5727
5728 @item @code{source}
5729 An object telling how the source code for the package should be
5730 acquired. Most of the time, this is an @code{origin} object, which
5731 denotes a file fetched from the Internet (@pxref{origin Reference}). It
5732 can also be any other ``file-like'' object such as a @code{local-file},
5733 which denotes a file from the local file system (@pxref{G-Expressions,
5734 @code{local-file}}).
5735
5736 @item @code{build-system}
5737 The build system that should be used to build the package (@pxref{Build
5738 Systems}).
5739
5740 @item @code{arguments} (default: @code{'()})
5741 The arguments that should be passed to the build system. This is a
5742 list, typically containing sequential keyword-value pairs.
5743
5744 @item @code{inputs} (default: @code{'()})
5745 @itemx @code{native-inputs} (default: @code{'()})
5746 @itemx @code{propagated-inputs} (default: @code{'()})
5747 @cindex inputs, of packages
5748 These fields list dependencies of the package. Each one is a list of
5749 tuples, where each tuple has a label for the input (a string) as its
5750 first element, a package, origin, or derivation as its second element,
5751 and optionally the name of the output thereof that should be used, which
5752 defaults to @code{"out"} (@pxref{Packages with Multiple Outputs}, for
5753 more on package outputs). For example, the list below specifies three
5754 inputs:
5755
5756 @lisp
5757 `(("libffi" ,libffi)
5758 ("libunistring" ,libunistring)
5759 ("glib:bin" ,glib "bin")) ;the "bin" output of Glib
5760 @end lisp
5761
5762 @cindex cross compilation, package dependencies
5763 The distinction between @code{native-inputs} and @code{inputs} is
5764 necessary when considering cross-compilation. When cross-compiling,
5765 dependencies listed in @code{inputs} are built for the @emph{target}
5766 architecture; conversely, dependencies listed in @code{native-inputs}
5767 are built for the architecture of the @emph{build} machine.
5768
5769 @code{native-inputs} is typically used to list tools needed at
5770 build time, but not at run time, such as Autoconf, Automake, pkg-config,
5771 Gettext, or Bison. @command{guix lint} can report likely mistakes in
5772 this area (@pxref{Invoking guix lint}).
5773
5774 @anchor{package-propagated-inputs}
5775 Lastly, @code{propagated-inputs} is similar to @code{inputs}, but the
5776 specified packages will be automatically installed alongside the package
5777 they belong to (@pxref{package-cmd-propagated-inputs, @command{guix
5778 package}}, for information on how @command{guix package} deals with
5779 propagated inputs.)
5780
5781 For example this is necessary when a C/C++ library needs headers of
5782 another library to compile, or when a pkg-config file refers to another
5783 one @i{via} its @code{Requires} field.
5784
5785 Another example where @code{propagated-inputs} is useful is for languages
5786 that lack a facility to record the run-time search path akin to the
5787 @code{RUNPATH} of ELF files; this includes Guile, Python, Perl, and
5788 more. To ensure that libraries written in those languages can find
5789 library code they depend on at run time, run-time dependencies must be
5790 listed in @code{propagated-inputs} rather than @code{inputs}.
5791
5792 @item @code{outputs} (default: @code{'("out")})
5793 The list of output names of the package. @xref{Packages with Multiple
5794 Outputs}, for typical uses of additional outputs.
5795
5796 @item @code{native-search-paths} (default: @code{'()})
5797 @itemx @code{search-paths} (default: @code{'()})
5798 A list of @code{search-path-specification} objects describing
5799 search-path environment variables honored by the package.
5800
5801 @item @code{replacement} (default: @code{#f})
5802 This must be either @code{#f} or a package object that will be used as a
5803 @dfn{replacement} for this package. @xref{Security Updates, grafts},
5804 for details.
5805
5806 @item @code{synopsis}
5807 A one-line description of the package.
5808
5809 @item @code{description}
5810 A more elaborate description of the package.
5811
5812 @item @code{license}
5813 @cindex license, of packages
5814 The license of the package; a value from @code{(guix licenses)},
5815 or a list of such values.
5816
5817 @item @code{home-page}
5818 The URL to the home-page of the package, as a string.
5819
5820 @item @code{supported-systems} (default: @code{%supported-systems})
5821 The list of systems supported by the package, as strings of the form
5822 @code{architecture-kernel}, for example @code{"x86_64-linux"}.
5823
5824 @item @code{location} (default: source location of the @code{package} form)
5825 The source location of the package. It is useful to override this when
5826 inheriting from another package, in which case this field is not
5827 automatically corrected.
5828 @end table
5829 @end deftp
5830
5831 @deffn {Scheme Syntax} this-package
5832 When used in the @emph{lexical scope} of a package field definition, this
5833 identifier resolves to the package being defined.
5834
5835 The example below shows how to add a package as a native input of itself when
5836 cross-compiling:
5837
5838 @lisp
5839 (package
5840 (name "guile")
5841 ;; ...
5842
5843 ;; When cross-compiled, Guile, for example, depends on
5844 ;; a native version of itself. Add it here.
5845 (native-inputs (if (%current-target-system)
5846 `(("self" ,this-package))
5847 '())))
5848 @end lisp
5849
5850 It is an error to refer to @code{this-package} outside a package definition.
5851 @end deffn
5852
5853 @node origin Reference
5854 @subsection @code{origin} Reference
5855
5856 This section summarizes all the options available in @code{origin}
5857 declarations (@pxref{Defining Packages}).
5858
5859 @deftp {Data Type} origin
5860 This is the data type representing a source code origin.
5861
5862 @table @asis
5863 @item @code{uri}
5864 An object containing the URI of the source. The object type depends on
5865 the @code{method} (see below). For example, when using the
5866 @var{url-fetch} method of @code{(guix download)}, the valid @code{uri}
5867 values are: a URL represented as a string, or a list thereof.
5868
5869 @item @code{method}
5870 A procedure that handles the URI.
5871
5872 Examples include:
5873
5874 @table @asis
5875 @item @var{url-fetch} from @code{(guix download)}
5876 download a file from the HTTP, HTTPS, or FTP URL specified in the
5877 @code{uri} field;
5878
5879 @vindex git-fetch
5880 @item @var{git-fetch} from @code{(guix git-download)}
5881 clone the Git version control repository, and check out the revision
5882 specified in the @code{uri} field as a @code{git-reference} object; a
5883 @code{git-reference} looks like this:
5884
5885 @lisp
5886 (git-reference
5887 (url "https://git.savannah.gnu.org/git/hello.git")
5888 (commit "v2.10"))
5889 @end lisp
5890 @end table
5891
5892 @item @code{sha256}
5893 A bytevector containing the SHA-256 hash of the source. Typically the
5894 @code{base32} form is used here to generate the bytevector from a
5895 base-32 string.
5896
5897 You can obtain this information using @code{guix download}
5898 (@pxref{Invoking guix download}) or @code{guix hash} (@pxref{Invoking
5899 guix hash}).
5900
5901 @item @code{file-name} (default: @code{#f})
5902 The file name under which the source code should be saved. When this is
5903 @code{#f}, a sensible default value will be used in most cases. In case
5904 the source is fetched from a URL, the file name from the URL will be
5905 used. For version control checkouts, it is recommended to provide the
5906 file name explicitly because the default is not very descriptive.
5907
5908 @item @code{patches} (default: @code{'()})
5909 A list of file names, origins, or file-like objects (@pxref{G-Expressions,
5910 file-like objects}) pointing to patches to be applied to the source.
5911
5912 This list of patches must be unconditional. In particular, it cannot
5913 depend on the value of @code{%current-system} or
5914 @code{%current-target-system}.
5915
5916 @item @code{snippet} (default: @code{#f})
5917 A G-expression (@pxref{G-Expressions}) or S-expression that will be run
5918 in the source directory. This is a convenient way to modify the source,
5919 sometimes more convenient than a patch.
5920
5921 @item @code{patch-flags} (default: @code{'("-p1")})
5922 A list of command-line flags that should be passed to the @code{patch}
5923 command.
5924
5925 @item @code{patch-inputs} (default: @code{#f})
5926 Input packages or derivations to the patching process. When this is
5927 @code{#f}, the usual set of inputs necessary for patching are provided,
5928 such as GNU@tie{}Patch.
5929
5930 @item @code{modules} (default: @code{'()})
5931 A list of Guile modules that should be loaded during the patching
5932 process and while running the code in the @code{snippet} field.
5933
5934 @item @code{patch-guile} (default: @code{#f})
5935 The Guile package that should be used in the patching process. When
5936 this is @code{#f}, a sensible default is used.
5937 @end table
5938 @end deftp
5939
5940
5941 @node Build Systems
5942 @section Build Systems
5943
5944 @cindex build system
5945 Each package definition specifies a @dfn{build system} and arguments for
5946 that build system (@pxref{Defining Packages}). This @code{build-system}
5947 field represents the build procedure of the package, as well as implicit
5948 dependencies of that build procedure.
5949
5950 Build systems are @code{<build-system>} objects. The interface to
5951 create and manipulate them is provided by the @code{(guix build-system)}
5952 module, and actual build systems are exported by specific modules.
5953
5954 @cindex bag (low-level package representation)
5955 Under the hood, build systems first compile package objects to
5956 @dfn{bags}. A @dfn{bag} is like a package, but with less
5957 ornamentation---in other words, a bag is a lower-level representation of
5958 a package, which includes all the inputs of that package, including some
5959 that were implicitly added by the build system. This intermediate
5960 representation is then compiled to a derivation (@pxref{Derivations}).
5961
5962 Build systems accept an optional list of @dfn{arguments}. In package
5963 definitions, these are passed @i{via} the @code{arguments} field
5964 (@pxref{Defining Packages}). They are typically keyword arguments
5965 (@pxref{Optional Arguments, keyword arguments in Guile,, guile, GNU
5966 Guile Reference Manual}). The value of these arguments is usually
5967 evaluated in the @dfn{build stratum}---i.e., by a Guile process launched
5968 by the daemon (@pxref{Derivations}).
5969
5970 The main build system is @code{gnu-build-system}, which implements the
5971 standard build procedure for GNU and many other packages. It
5972 is provided by the @code{(guix build-system gnu)} module.
5973
5974 @defvr {Scheme Variable} gnu-build-system
5975 @code{gnu-build-system} represents the GNU Build System, and variants
5976 thereof (@pxref{Configuration, configuration and makefile conventions,,
5977 standards, GNU Coding Standards}).
5978
5979 @cindex build phases
5980 In a nutshell, packages using it are configured, built, and installed with
5981 the usual @code{./configure && make && make check && make install}
5982 command sequence. In practice, a few additional steps are often needed.
5983 All these steps are split up in separate @dfn{phases},
5984 notably@footnote{Please see the @code{(guix build gnu-build-system)}
5985 modules for more details about the build phases.}:
5986
5987 @table @code
5988 @item unpack
5989 Unpack the source tarball, and change the current directory to the
5990 extracted source tree. If the source is actually a directory, copy it
5991 to the build tree, and enter that directory.
5992
5993 @item patch-source-shebangs
5994 Patch shebangs encountered in source files so they refer to the right
5995 store file names. For instance, this changes @code{#!/bin/sh} to
5996 @code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
5997
5998 @item configure
5999 Run the @file{configure} script with a number of default options, such
6000 as @code{--prefix=/gnu/store/@dots{}}, as well as the options specified
6001 by the @code{#:configure-flags} argument.
6002
6003 @item build
6004 Run @code{make} with the list of flags specified with
6005 @code{#:make-flags}. If the @code{#:parallel-build?} argument is true
6006 (the default), build with @code{make -j}.
6007
6008 @item check
6009 Run @code{make check}, or some other target specified with
6010 @code{#:test-target}, unless @code{#:tests? #f} is passed. If the
6011 @code{#:parallel-tests?} argument is true (the default), run @code{make
6012 check -j}.
6013
6014 @item install
6015 Run @code{make install} with the flags listed in @code{#:make-flags}.
6016
6017 @item patch-shebangs
6018 Patch shebangs on the installed executable files.
6019
6020 @item strip
6021 Strip debugging symbols from ELF files (unless @code{#:strip-binaries?}
6022 is false), copying them to the @code{debug} output when available
6023 (@pxref{Installing Debugging Files}).
6024 @end table
6025
6026 @vindex %standard-phases
6027 The build-side module @code{(guix build gnu-build-system)} defines
6028 @code{%standard-phases} as the default list of build phases.
6029 @code{%standard-phases} is a list of symbol/procedure pairs, where the
6030 procedure implements the actual phase.
6031
6032 The list of phases used for a particular package can be changed with the
6033 @code{#:phases} parameter. For instance, passing:
6034
6035 @example
6036 #:phases (modify-phases %standard-phases (delete 'configure))
6037 @end example
6038
6039 means that all the phases described above will be used, except the
6040 @code{configure} phase.
6041
6042 In addition, this build system ensures that the ``standard'' environment
6043 for GNU packages is available. This includes tools such as GCC, libc,
6044 Coreutils, Bash, Make, Diffutils, grep, and sed (see the @code{(guix
6045 build-system gnu)} module for a complete list). We call these the
6046 @dfn{implicit inputs} of a package, because package definitions do not
6047 have to mention them.
6048 @end defvr
6049
6050 Other @code{<build-system>} objects are defined to support other
6051 conventions and tools used by free software packages. They inherit most
6052 of @code{gnu-build-system}, and differ mainly in the set of inputs
6053 implicitly added to the build process, and in the list of phases
6054 executed. Some of these build systems are listed below.
6055
6056 @defvr {Scheme Variable} ant-build-system
6057 This variable is exported by @code{(guix build-system ant)}. It
6058 implements the build procedure for Java packages that can be built with
6059 @url{https://ant.apache.org/, Ant build tool}.
6060
6061 It adds both @code{ant} and the @dfn{Java Development Kit} (JDK) as
6062 provided by the @code{icedtea} package to the set of inputs. Different
6063 packages can be specified with the @code{#:ant} and @code{#:jdk}
6064 parameters, respectively.
6065
6066 When the original package does not provide a suitable Ant build file,
6067 the parameter @code{#:jar-name} can be used to generate a minimal Ant
6068 build file @file{build.xml} with tasks to build the specified jar
6069 archive. In this case the parameter @code{#:source-dir} can be used to
6070 specify the source sub-directory, defaulting to ``src''.
6071
6072 The @code{#:main-class} parameter can be used with the minimal ant
6073 buildfile to specify the main class of the resulting jar. This makes the
6074 jar file executable. The @code{#:test-include} parameter can be used to
6075 specify the list of junit tests to run. It defaults to
6076 @code{(list "**/*Test.java")}. The @code{#:test-exclude} can be used to
6077 disable some tests. It defaults to @code{(list "**/Abstract*.java")},
6078 because abstract classes cannot be run as tests.
6079
6080 The parameter @code{#:build-target} can be used to specify the Ant task
6081 that should be run during the @code{build} phase. By default the
6082 ``jar'' task will be run.
6083
6084 @end defvr
6085
6086 @defvr {Scheme Variable} android-ndk-build-system
6087 @cindex Android distribution
6088 @cindex Android NDK build system
6089 This variable is exported by @code{(guix build-system android-ndk)}. It
6090 implements a build procedure for Android NDK (native development kit)
6091 packages using a Guix-specific build process.
6092
6093 The build system assumes that packages install their public interface
6094 (header) files to the subdirectory "include" of the "out" output and
6095 their libraries to the subdirectory "lib" of the "out" output.
6096
6097 It's also assumed that the union of all the dependencies of a package
6098 has no conflicting files.
6099
6100 For the time being, cross-compilation is not supported - so right now
6101 the libraries and header files are assumed to be host tools.
6102
6103 @end defvr
6104
6105 @defvr {Scheme Variable} asdf-build-system/source
6106 @defvrx {Scheme Variable} asdf-build-system/sbcl
6107 @defvrx {Scheme Variable} asdf-build-system/ecl
6108
6109 These variables, exported by @code{(guix build-system asdf)}, implement
6110 build procedures for Common Lisp packages using
6111 @url{https://common-lisp.net/project/asdf/, ``ASDF''}. ASDF is a system
6112 definition facility for Common Lisp programs and libraries.
6113
6114 The @code{asdf-build-system/source} system installs the packages in
6115 source form, and can be loaded using any common lisp implementation, via
6116 ASDF. The others, such as @code{asdf-build-system/sbcl}, install binary
6117 systems in the format which a particular implementation understands.
6118 These build systems can also be used to produce executable programs, or
6119 lisp images which contain a set of packages pre-loaded.
6120
6121 The build system uses naming conventions. For binary packages, the
6122 package name should be prefixed with the lisp implementation, such as
6123 @code{sbcl-} for @code{asdf-build-system/sbcl}.
6124
6125 Additionally, the corresponding source package should be labeled using
6126 the same convention as python packages (see @ref{Python Modules}), using
6127 the @code{cl-} prefix.
6128
6129 For binary packages, each system should be defined as a Guix package.
6130 If one package @code{origin} contains several systems, package variants
6131 can be created in order to build all the systems. Source packages,
6132 which use @code{asdf-build-system/source}, may contain several systems.
6133
6134 In order to create executable programs and images, the build-side
6135 procedures @code{build-program} and @code{build-image} can be used.
6136 They should be called in a build phase after the @code{create-symlinks}
6137 phase, so that the system which was just built can be used within the
6138 resulting image. @code{build-program} requires a list of Common Lisp
6139 expressions to be passed as the @code{#:entry-program} argument.
6140
6141 If the system is not defined within its own @code{.asd} file of the same
6142 name, then the @code{#:asd-file} parameter should be used to specify
6143 which file the system is defined in. Furthermore, if the package
6144 defines a system for its tests in a separate file, it will be loaded
6145 before the tests are run if it is specified by the
6146 @code{#:test-asd-file} parameter. If it is not set, the files
6147 @code{<system>-tests.asd}, @code{<system>-test.asd}, @code{tests.asd},
6148 and @code{test.asd} will be tried if they exist.
6149
6150 If for some reason the package must be named in a different way than the
6151 naming conventions suggest, the @code{#:asd-system-name} parameter can
6152 be used to specify the name of the system.
6153
6154 @end defvr
6155
6156 @defvr {Scheme Variable} cargo-build-system
6157 @cindex Rust programming language
6158 @cindex Cargo (Rust build system)
6159 This variable is exported by @code{(guix build-system cargo)}. It
6160 supports builds of packages using Cargo, the build tool of the
6161 @uref{https://www.rust-lang.org, Rust programming language}.
6162
6163 It adds @code{rustc} and @code{cargo} to the set of inputs.
6164 A different Rust package can be specified with the @code{#:rust} parameter.
6165
6166 Regular cargo dependencies should be added to the package definition via the
6167 @code{#:cargo-inputs} parameter as a list of name and spec pairs, where the
6168 spec can be a package or a source definition. Note that the spec must
6169 evaluate to a path to a gzipped tarball which includes a @code{Cargo.toml}
6170 file at its root, or it will be ignored. Similarly, cargo dev-dependencies
6171 should be added to the package definition via the
6172 @code{#:cargo-development-inputs} parameter.
6173
6174 In its @code{configure} phase, this build system will make any source inputs
6175 specified in the @code{#:cargo-inputs} and @code{#:cargo-development-inputs}
6176 parameters available to cargo. It will also remove an included
6177 @code{Cargo.lock} file to be recreated by @code{cargo} during the
6178 @code{build} phase. The @code{install} phase installs any crate the binaries
6179 if they are defined by the crate.
6180 @end defvr
6181
6182
6183 @defvr {Scheme Variable} copy-build-system
6184 This variable is exported by @code{(guix build-system copy)}. It
6185 supports builds of simple packages that don't require much compiling,
6186 mostly just moving files around.
6187
6188 It adds much of the @code{gnu-build-system} packages to the set of
6189 inputs. Because of this, the @code{copy-build-system} does not require
6190 all the boilerplate code often needed for the
6191 @code{trivial-build-system}.
6192
6193 To further simplify the file installation process, an
6194 @code{#:install-plan} argument is exposed to let the packager specify
6195 which files go where. The install plan is a list of @code{(@var{source}
6196 @var{target} [@var{filters}])}. @var{filters} are optional.
6197
6198 @itemize
6199 @item When @var{source} matches a file or directory without trailing slash, install it to @var{target}.
6200 @itemize
6201 @item If @var{target} has a trailing slash, install @var{source} basename beneath @var{target}.
6202 @item Otherwise install @var{source} as @var{target}.
6203 @end itemize
6204
6205 @item When @var{source} is a directory with a trailing slash, or when @var{filters} are used,
6206 the trailing slash of @var{target} is implied with the same meaning
6207 as above.
6208 @itemize
6209 @item Without @var{filters}, install the full @var{source} @emph{content} to @var{target}.
6210 @item With @var{filters} among @code{#:include}, @code{#:include-regexp}, @code{#:exclude},
6211 @code{#:exclude-regexp}, only select files are installed depending on
6212 the filters. Each filters is specified by a list of strings.
6213 @itemize
6214 @item With @code{#:include}, install all the files which the path suffix matches
6215 at least one of the elements in the given list.
6216 @item With @code{#:include-regexp}, install all the files which the
6217 subpaths match at least one of the regular expressions in the given
6218 list.
6219 @item The @code{#:exclude} and @code{#:exclude-regexp} filters
6220 are the complement of their inclusion counterpart. Without @code{#:include} flags,
6221 install all files but those matching the exclusion filters.
6222 If both inclusions and exclusions are specified, the exclusions are done
6223 on top of the inclusions.
6224 @end itemize
6225 @end itemize
6226 In all cases, the paths relative to @var{source} are preserved within
6227 @var{target}.
6228 @end itemize
6229
6230 Examples:
6231
6232 @itemize
6233 @item @code{("foo/bar" "share/my-app/")}: Install @file{bar} to @file{share/my-app/bar}.
6234 @item @code{("foo/bar" "share/my-app/baz")}: Install @file{bar} to @file{share/my-app/baz}.
6235 @item @code{("foo/" "share/my-app")}: Install the content of @file{foo} inside @file{share/my-app},
6236 e.g., install @file{foo/sub/file} to @file{share/my-app/sub/file}.
6237 @item @code{("foo/" "share/my-app" #:include ("sub/file"))}: Install only @file{foo/sub/file} to
6238 @file{share/my-app/sub/file}.
6239 @item @code{("foo/sub" "share/my-app" #:include ("file"))}: Install @file{foo/sub/file} to
6240 @file{share/my-app/file}.
6241 @end itemize
6242 @end defvr
6243
6244
6245 @cindex Clojure (programming language)
6246 @cindex simple Clojure build system
6247 @defvr {Scheme Variable} clojure-build-system
6248 This variable is exported by @code{(guix build-system clojure)}. It implements
6249 a simple build procedure for @uref{https://clojure.org/, Clojure} packages
6250 using plain old @code{compile} in Clojure. Cross-compilation is not supported
6251 yet.
6252
6253 It adds @code{clojure}, @code{icedtea} and @code{zip} to the set of inputs.
6254 Different packages can be specified with the @code{#:clojure}, @code{#:jdk} and
6255 @code{#:zip} parameters, respectively.
6256
6257 A list of source directories, test directories and jar names can be specified
6258 with the @code{#:source-dirs}, @code{#:test-dirs} and @code{#:jar-names}
6259 parameters, respectively. Compile directory and main class can be specified
6260 with the @code{#:compile-dir} and @code{#:main-class} parameters, respectively.
6261 Other parameters are documented below.
6262
6263 This build system is an extension of @code{ant-build-system}, but with the
6264 following phases changed:
6265
6266 @table @code
6267
6268 @item build
6269 This phase calls @code{compile} in Clojure to compile source files and runs
6270 @command{jar} to create jars from both source files and compiled files
6271 according to the include list and exclude list specified in
6272 @code{#:aot-include} and @code{#:aot-exclude}, respectively. The exclude list
6273 has priority over the include list. These lists consist of symbols
6274 representing Clojure libraries or the special keyword @code{#:all} representing
6275 all Clojure libraries found under the source directories. The parameter
6276 @code{#:omit-source?} decides if source should be included into the jars.
6277
6278 @item check
6279 This phase runs tests according to the include list and exclude list specified
6280 in @code{#:test-include} and @code{#:test-exclude}, respectively. Their
6281 meanings are analogous to that of @code{#:aot-include} and
6282 @code{#:aot-exclude}, except that the special keyword @code{#:all} now
6283 stands for all Clojure libraries found under the test directories. The
6284 parameter @code{#:tests?} decides if tests should be run.
6285
6286 @item install
6287 This phase installs all jars built previously.
6288 @end table
6289
6290 Apart from the above, this build system also contains an additional phase:
6291
6292 @table @code
6293
6294 @item install-doc
6295 This phase installs all top-level files with base name matching
6296 @code{%doc-regex}. A different regex can be specified with the
6297 @code{#:doc-regex} parameter. All files (recursively) inside the documentation
6298 directories specified in @code{#:doc-dirs} are installed as well.
6299 @end table
6300 @end defvr
6301
6302 @defvr {Scheme Variable} cmake-build-system
6303 This variable is exported by @code{(guix build-system cmake)}. It
6304 implements the build procedure for packages using the
6305 @url{https://www.cmake.org, CMake build tool}.
6306
6307 It automatically adds the @code{cmake} package to the set of inputs.
6308 Which package is used can be specified with the @code{#:cmake}
6309 parameter.
6310
6311 The @code{#:configure-flags} parameter is taken as a list of flags
6312 passed to the @command{cmake} command. The @code{#:build-type}
6313 parameter specifies in abstract terms the flags passed to the compiler;
6314 it defaults to @code{"RelWithDebInfo"} (short for ``release mode with
6315 debugging information''), which roughly means that code is compiled with
6316 @code{-O2 -g}, as is the case for Autoconf-based packages by default.
6317 @end defvr
6318
6319 @defvr {Scheme Variable} dune-build-system
6320 This variable is exported by @code{(guix build-system dune)}. It
6321 supports builds of packages using @uref{https://dune.build/, Dune}, a build
6322 tool for the OCaml programming language. It is implemented as an extension
6323 of the @code{ocaml-build-system} which is described below. As such, the
6324 @code{#:ocaml} and @code{#:findlib} parameters can be passed to this build
6325 system.
6326
6327 It automatically adds the @code{dune} package to the set of inputs.
6328 Which package is used can be specified with the @code{#:dune}
6329 parameter.
6330
6331 There is no @code{configure} phase because dune packages typically don't
6332 need to be configured. The @code{#:build-flags} parameter is taken as a
6333 list of flags passed to the @code{dune} command during the build.
6334
6335 The @code{#:jbuild?} parameter can be passed to use the @code{jbuild}
6336 command instead of the more recent @code{dune} command while building
6337 a package. Its default value is @code{#f}.
6338
6339 The @code{#:package} parameter can be passed to specify a package name, which
6340 is useful when a package contains multiple packages and you want to build
6341 only one of them. This is equivalent to passing the @code{-p} argument to
6342 @code{dune}.
6343 @end defvr
6344
6345 @defvr {Scheme Variable} go-build-system
6346 This variable is exported by @code{(guix build-system go)}. It
6347 implements a build procedure for Go packages using the standard
6348 @url{https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies,
6349 Go build mechanisms}.
6350
6351 The user is expected to provide a value for the key @code{#:import-path}
6352 and, in some cases, @code{#:unpack-path}. The
6353 @url{https://golang.org/doc/code.html#ImportPaths, import path}
6354 corresponds to the file system path expected by the package's build
6355 scripts and any referring packages, and provides a unique way to
6356 refer to a Go package. It is typically based on a combination of the
6357 package source code's remote URI and file system hierarchy structure. In
6358 some cases, you will need to unpack the package's source code to a
6359 different directory structure than the one indicated by the import path,
6360 and @code{#:unpack-path} should be used in such cases.
6361
6362 Packages that provide Go libraries should install their source code into
6363 the built output. The key @code{#:install-source?}, which defaults to
6364 @code{#t}, controls whether or not the source code is installed. It can
6365 be set to @code{#f} for packages that only provide executable files.
6366 @end defvr
6367
6368 @defvr {Scheme Variable} glib-or-gtk-build-system
6369 This variable is exported by @code{(guix build-system glib-or-gtk)}. It
6370 is intended for use with packages making use of GLib or GTK+.
6371
6372 This build system adds the following two phases to the ones defined by
6373 @code{gnu-build-system}:
6374
6375 @table @code
6376 @item glib-or-gtk-wrap
6377 The phase @code{glib-or-gtk-wrap} ensures that programs in
6378 @file{bin/} are able to find GLib ``schemas'' and
6379 @uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, GTK+
6380 modules}. This is achieved by wrapping the programs in launch scripts
6381 that appropriately set the @code{XDG_DATA_DIRS} and @code{GTK_PATH}
6382 environment variables.
6383
6384 It is possible to exclude specific package outputs from that wrapping
6385 process by listing their names in the
6386 @code{#:glib-or-gtk-wrap-excluded-outputs} parameter. This is useful
6387 when an output is known not to contain any GLib or GTK+ binaries, and
6388 where wrapping would gratuitously add a dependency of that output on
6389 GLib and GTK+.
6390
6391 @item glib-or-gtk-compile-schemas
6392 The phase @code{glib-or-gtk-compile-schemas} makes sure that all
6393 @uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
6394 GSettings schemas} of GLib are compiled. Compilation is performed by the
6395 @command{glib-compile-schemas} program. It is provided by the package
6396 @code{glib:bin} which is automatically imported by the build system.
6397 The @code{glib} package providing @command{glib-compile-schemas} can be
6398 specified with the @code{#:glib} parameter.
6399 @end table
6400
6401 Both phases are executed after the @code{install} phase.
6402 @end defvr
6403
6404 @defvr {Scheme Variable} guile-build-system
6405 This build system is for Guile packages that consist exclusively of Scheme
6406 code and that are so lean that they don't even have a makefile, let alone a
6407 @file{configure} script. It compiles Scheme code using @command{guild
6408 compile} (@pxref{Compilation,,, guile, GNU Guile Reference Manual}) and
6409 installs the @file{.scm} and @file{.go} files in the right place. It also
6410 installs documentation.
6411
6412 This build system supports cross-compilation by using the @code{--target}
6413 option of @command{guild compile}.
6414
6415 Packages built with @code{guile-build-system} must provide a Guile package in
6416 their @code{native-inputs} field.
6417 @end defvr
6418
6419 @defvr {Scheme Variable} julia-build-system
6420 This variable is exported by @code{(guix build-system julia)}. It implements
6421 the build procedure used by @uref{https://julialang.org/, julia} packages,
6422 which essentially is similar to running @command{julia -e 'using Pkg;
6423 Pkg.add(package)'} in an environment where @code{JULIA_LOAD_PATH} contains the
6424 paths to all Julia package inputs. Tests are run not run.
6425
6426 Julia packages require the source @code{file-name} to be the real name of the
6427 package, correctly capitalized.
6428
6429 For packages requiring shared library dependencies, you may need to write the
6430 @file{/deps/deps.jl} file manually. It's usually a line of @code{const
6431 variable = /gnu/store/library.so} for each dependency, plus a void function
6432 @code{check_deps() = nothing}.
6433
6434 Some older packages that aren't using @file{Package.toml} yet, will require
6435 this file to be created, too. The function @code{julia-create-package-toml}
6436 helps creating the file. You need to pass the outputs and the source of the
6437 package, it's name (the same as the @code{file-name} parameter), the package
6438 uuid, the package version, and a list of dependencies specified by their name
6439 and their uuid.
6440 @end defvr
6441
6442 @defvr {Scheme Variable} minify-build-system
6443 This variable is exported by @code{(guix build-system minify)}. It
6444 implements a minification procedure for simple JavaScript packages.
6445
6446 It adds @code{uglify-js} to the set of inputs and uses it to compress
6447 all JavaScript files in the @file{src} directory. A different minifier
6448 package can be specified with the @code{#:uglify-js} parameter, but it
6449 is expected that the package writes the minified code to the standard
6450 output.
6451
6452 When the input JavaScript files are not all located in the @file{src}
6453 directory, the parameter @code{#:javascript-files} can be used to
6454 specify a list of file names to feed to the minifier.
6455 @end defvr
6456
6457 @defvr {Scheme Variable} ocaml-build-system
6458 This variable is exported by @code{(guix build-system ocaml)}. It implements
6459 a build procedure for @uref{https://ocaml.org, OCaml} packages, which consists
6460 of choosing the correct set of commands to run for each package. OCaml
6461 packages can expect many different commands to be run. This build system will
6462 try some of them.
6463
6464 When the package has a @file{setup.ml} file present at the top-level, it will
6465 run @code{ocaml setup.ml -configure}, @code{ocaml setup.ml -build} and
6466 @code{ocaml setup.ml -install}. The build system will assume that this file
6467 was generated by @uref{http://oasis.forge.ocamlcore.org/, OASIS} and will take
6468 care of setting the prefix and enabling tests if they are not disabled. You
6469 can pass configure and build flags with the @code{#:configure-flags} and
6470 @code{#:build-flags}. The @code{#:test-flags} key can be passed to change the
6471 set of flags used to enable tests. The @code{#:use-make?} key can be used to
6472 bypass this system in the build and install phases.
6473
6474 When the package has a @file{configure} file, it is assumed that it is a
6475 hand-made configure script that requires a different argument format than
6476 in the @code{gnu-build-system}. You can add more flags with the
6477 @code{#:configure-flags} key.
6478
6479 When the package has a @file{Makefile} file (or @code{#:use-make?} is
6480 @code{#t}), it will be used and more flags can be passed to the build and
6481 install phases with the @code{#:make-flags} key.
6482
6483 Finally, some packages do not have these files and use a somewhat standard
6484 location for its build system. In that case, the build system will run
6485 @code{ocaml pkg/pkg.ml} or @code{ocaml pkg/build.ml} and take care of
6486 providing the path to the required findlib module. Additional flags can
6487 be passed via the @code{#:build-flags} key. Install is taken care of by
6488 @command{opam-installer}. In this case, the @code{opam} package must
6489 be added to the @code{native-inputs} field of the package definition.
6490
6491 Note that most OCaml packages assume they will be installed in the same
6492 directory as OCaml, which is not what we want in guix. In particular, they
6493 will install @file{.so} files in their module's directory, which is usually
6494 fine because it is in the OCaml compiler directory. In guix though, these
6495 libraries cannot be found and we use @code{CAML_LD_LIBRARY_PATH}. This
6496 variable points to @file{lib/ocaml/site-lib/stubslibs} and this is where
6497 @file{.so} libraries should be installed.
6498 @end defvr
6499
6500 @defvr {Scheme Variable} python-build-system
6501 This variable is exported by @code{(guix build-system python)}. It
6502 implements the more or less standard build procedure used by Python
6503 packages, which consists in running @code{python setup.py build} and
6504 then @code{python setup.py install --prefix=/gnu/store/@dots{}}.
6505
6506 For packages that install stand-alone Python programs under @code{bin/},
6507 it takes care of wrapping these programs so that their @code{PYTHONPATH}
6508 environment variable points to all the Python libraries they depend on.
6509
6510 Which Python package is used to perform the build can be specified with
6511 the @code{#:python} parameter. This is a useful way to force a package
6512 to be built for a specific version of the Python interpreter, which
6513 might be necessary if the package is only compatible with a single
6514 interpreter version.
6515
6516 By default guix calls @code{setup.py} under control of
6517 @code{setuptools}, much like @command{pip} does. Some packages are not
6518 compatible with setuptools (and pip), thus you can disable this by
6519 setting the @code{#:use-setuptools?} parameter to @code{#f}.
6520 @end defvr
6521
6522 @defvr {Scheme Variable} perl-build-system
6523 This variable is exported by @code{(guix build-system perl)}. It
6524 implements the standard build procedure for Perl packages, which either
6525 consists in running @code{perl Build.PL --prefix=/gnu/store/@dots{}},
6526 followed by @code{Build} and @code{Build install}; or in running
6527 @code{perl Makefile.PL PREFIX=/gnu/store/@dots{}}, followed by
6528 @code{make} and @code{make install}, depending on which of
6529 @code{Build.PL} or @code{Makefile.PL} is present in the package
6530 distribution. Preference is given to the former if both @code{Build.PL}
6531 and @code{Makefile.PL} exist in the package distribution. This
6532 preference can be reversed by specifying @code{#t} for the
6533 @code{#:make-maker?} parameter.
6534
6535 The initial @code{perl Makefile.PL} or @code{perl Build.PL} invocation
6536 passes flags specified by the @code{#:make-maker-flags} or
6537 @code{#:module-build-flags} parameter, respectively.
6538
6539 Which Perl package is used can be specified with @code{#:perl}.
6540 @end defvr
6541
6542 @defvr {Scheme Variable} qt-build-system
6543 This variable is exported by @code{(guix build-system qt)}. It
6544 is intended for use with applications using Qt or KDE.
6545
6546 This build system adds the following two phases to the ones defined by
6547 @code{cmake-build-system}:
6548
6549 @table @code
6550 @item check-setup
6551 The phase @code{check-setup} prepares the environment for running
6552 the checks as commonly used by Qt test programs.
6553 For now this only sets some environment variables:
6554 @code{QT_QPA_PLATFORM=offscreen},
6555 @code{DBUS_FATAL_WARNINGS=0} and
6556 @code{CTEST_OUTPUT_ON_FAILURE=1}.
6557
6558 This phase is added before the @code{check} phase.
6559 It's a separate phase to ease adjusting if necessary.
6560
6561 @item qt-wrap
6562 The phase @code{qt-wrap}
6563 searches for Qt5 plugin paths, QML paths and some XDG in the inputs
6564 and output. In case some path is found, all programs in the output's
6565 @file{bin/}, @file{sbin/}, @file{libexec/} and @file{lib/libexec/} directories
6566 are wrapped in scripts defining the necessary environment variables.
6567
6568 It is possible to exclude specific package outputs from that wrapping process
6569 by listing their names in the @code{#:qt-wrap-excluded-outputs} parameter.
6570 This is useful when an output is known not to contain any Qt binaries, and
6571 where wrapping would gratuitously add a dependency of that output on Qt, KDE,
6572 or such.
6573
6574 This phase is added after the @code{install} phase.
6575 @end table
6576 @end defvr
6577
6578 @defvr {Scheme Variable} r-build-system
6579 This variable is exported by @code{(guix build-system r)}. It
6580 implements the build procedure used by @uref{https://r-project.org, R}
6581 packages, which essentially is little more than running @code{R CMD
6582 INSTALL --library=/gnu/store/@dots{}} in an environment where
6583 @code{R_LIBS_SITE} contains the paths to all R package inputs. Tests
6584 are run after installation using the R function
6585 @code{tools::testInstalledPackage}.
6586 @end defvr
6587
6588 @defvr {Scheme Variable} rakudo-build-system
6589 This variable is exported by @code{(guix build-system rakudo)}. It
6590 implements the build procedure used by @uref{https://rakudo.org/,
6591 Rakudo} for @uref{https://perl6.org/, Perl6} packages. It installs the
6592 package to @code{/gnu/store/@dots{}/NAME-VERSION/share/perl6} and
6593 installs the binaries, library files and the resources, as well as wrap
6594 the files under the @code{bin/} directory. Tests can be skipped by
6595 passing @code{#f} to the @code{tests?} parameter.
6596
6597 Which rakudo package is used can be specified with @code{rakudo}.
6598 Which perl6-tap-harness package used for the tests can be specified with
6599 @code{#:prove6} or removed by passing @code{#f} to the
6600 @code{with-prove6?} parameter.
6601 Which perl6-zef package used for tests and installing can be specified
6602 with @code{#:zef} or removed by passing @code{#f} to the
6603 @code{with-zef?} parameter.
6604 @end defvr
6605
6606 @defvr {Scheme Variable} texlive-build-system
6607 This variable is exported by @code{(guix build-system texlive)}. It is
6608 used to build TeX packages in batch mode with a specified engine. The
6609 build system sets the @code{TEXINPUTS} variable to find all TeX source
6610 files in the inputs.
6611
6612 By default it runs @code{luatex} on all files ending on @code{ins}. A
6613 different engine and format can be specified with the
6614 @code{#:tex-format} argument. Different build targets can be specified
6615 with the @code{#:build-targets} argument, which expects a list of file
6616 names. The build system adds only @code{texlive-bin} and
6617 @code{texlive-latex-base} (both from @code{(gnu packages tex}) to the
6618 inputs. Both can be overridden with the arguments @code{#:texlive-bin}
6619 and @code{#:texlive-latex-base}, respectively.
6620
6621 The @code{#:tex-directory} parameter tells the build system where to
6622 install the built files under the texmf tree.
6623 @end defvr
6624
6625 @defvr {Scheme Variable} ruby-build-system
6626 This variable is exported by @code{(guix build-system ruby)}. It
6627 implements the RubyGems build procedure used by Ruby packages, which
6628 involves running @code{gem build} followed by @code{gem install}.
6629
6630 The @code{source} field of a package that uses this build system
6631 typically references a gem archive, since this is the format that Ruby
6632 developers use when releasing their software. The build system unpacks
6633 the gem archive, potentially patches the source, runs the test suite,
6634 repackages the gem, and installs it. Additionally, directories and
6635 tarballs may be referenced to allow building unreleased gems from Git or
6636 a traditional source release tarball.
6637
6638 Which Ruby package is used can be specified with the @code{#:ruby}
6639 parameter. A list of additional flags to be passed to the @command{gem}
6640 command can be specified with the @code{#:gem-flags} parameter.
6641 @end defvr
6642
6643 @defvr {Scheme Variable} waf-build-system
6644 This variable is exported by @code{(guix build-system waf)}. It
6645 implements a build procedure around the @code{waf} script. The common
6646 phases---@code{configure}, @code{build}, and @code{install}---are
6647 implemented by passing their names as arguments to the @code{waf}
6648 script.
6649
6650 The @code{waf} script is executed by the Python interpreter. Which
6651 Python package is used to run the script can be specified with the
6652 @code{#:python} parameter.
6653 @end defvr
6654
6655 @defvr {Scheme Variable} scons-build-system
6656 This variable is exported by @code{(guix build-system scons)}. It
6657 implements the build procedure used by the SCons software construction
6658 tool. This build system runs @code{scons} to build the package,
6659 @code{scons test} to run tests, and then @code{scons install} to install
6660 the package.
6661
6662 Additional flags to be passed to @code{scons} can be specified with the
6663 @code{#:scons-flags} parameter. The default build and install targets
6664 can be overridden with @code{#:build-targets} and
6665 @code{#:install-targets} respectively. The version of Python used to
6666 run SCons can be specified by selecting the appropriate SCons package
6667 with the @code{#:scons} parameter.
6668 @end defvr
6669
6670 @defvr {Scheme Variable} haskell-build-system
6671 This variable is exported by @code{(guix build-system haskell)}. It
6672 implements the Cabal build procedure used by Haskell packages, which
6673 involves running @code{runhaskell Setup.hs configure
6674 --prefix=/gnu/store/@dots{}} and @code{runhaskell Setup.hs build}.
6675 Instead of installing the package by running @code{runhaskell Setup.hs
6676 install}, to avoid trying to register libraries in the read-only
6677 compiler store directory, the build system uses @code{runhaskell
6678 Setup.hs copy}, followed by @code{runhaskell Setup.hs register}. In
6679 addition, the build system generates the package documentation by
6680 running @code{runhaskell Setup.hs haddock}, unless @code{#:haddock? #f}
6681 is passed. Optional Haddock parameters can be passed with the help of
6682 the @code{#:haddock-flags} parameter. If the file @code{Setup.hs} is
6683 not found, the build system looks for @code{Setup.lhs} instead.
6684
6685 Which Haskell compiler is used can be specified with the @code{#:haskell}
6686 parameter which defaults to @code{ghc}.
6687 @end defvr
6688
6689 @defvr {Scheme Variable} dub-build-system
6690 This variable is exported by @code{(guix build-system dub)}. It
6691 implements the Dub build procedure used by D packages, which
6692 involves running @code{dub build} and @code{dub run}.
6693 Installation is done by copying the files manually.
6694
6695 Which D compiler is used can be specified with the @code{#:ldc}
6696 parameter which defaults to @code{ldc}.
6697 @end defvr
6698
6699 @defvr {Scheme Variable} emacs-build-system
6700 This variable is exported by @code{(guix build-system emacs)}. It
6701 implements an installation procedure similar to the packaging system
6702 of Emacs itself (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
6703
6704 It first creates the @code{@code{package}-autoloads.el} file, then it
6705 byte compiles all Emacs Lisp files. Differently from the Emacs
6706 packaging system, the Info documentation files are moved to the standard
6707 documentation directory and the @file{dir} file is deleted. The Elisp
6708 package files are installed directly under @file{share/emacs/site-lisp}.
6709 @end defvr
6710
6711 @defvr {Scheme Variable} font-build-system
6712 This variable is exported by @code{(guix build-system font)}. It
6713 implements an installation procedure for font packages where upstream
6714 provides pre-compiled TrueType, OpenType, etc.@: font files that merely
6715 need to be copied into place. It copies font files to standard
6716 locations in the output directory.
6717 @end defvr
6718
6719 @defvr {Scheme Variable} meson-build-system
6720 This variable is exported by @code{(guix build-system meson)}. It
6721 implements the build procedure for packages that use
6722 @url{https://mesonbuild.com, Meson} as their build system.
6723
6724 It adds both Meson and @uref{https://ninja-build.org/, Ninja} to the set
6725 of inputs, and they can be changed with the parameters @code{#:meson}
6726 and @code{#:ninja} if needed. The default Meson is
6727 @code{meson-for-build}, which is special because it doesn't clear the
6728 @code{RUNPATH} of binaries and libraries when they are installed.
6729
6730 This build system is an extension of @code{gnu-build-system}, but with the
6731 following phases changed to some specific for Meson:
6732
6733 @table @code
6734
6735 @item configure
6736 The phase runs @code{meson} with the flags specified in
6737 @code{#:configure-flags}. The flag @code{--build-type} is always set to
6738 @code{plain} unless something else is specified in @code{#:build-type}.
6739
6740 @item build
6741 The phase runs @code{ninja} to build the package in parallel by default, but
6742 this can be changed with @code{#:parallel-build?}.
6743
6744 @item check
6745 The phase runs @code{ninja} with the target specified in @code{#:test-target},
6746 which is @code{"test"} by default.
6747
6748 @item install
6749 The phase runs @code{ninja install} and can not be changed.
6750 @end table
6751
6752 Apart from that, the build system also adds the following phases:
6753
6754 @table @code
6755
6756 @item fix-runpath
6757 This phase ensures that all binaries can find the libraries they need.
6758 It searches for required libraries in subdirectories of the package being
6759 built, and adds those to @code{RUNPATH} where needed. It also removes
6760 references to libraries left over from the build phase by
6761 @code{meson-for-build}, such as test dependencies, that aren't actually
6762 required for the program to run.
6763
6764 @item glib-or-gtk-wrap
6765 This phase is the phase provided by @code{glib-or-gtk-build-system}, and it
6766 is not enabled by default. It can be enabled with @code{#:glib-or-gtk?}.
6767
6768 @item glib-or-gtk-compile-schemas
6769 This phase is the phase provided by @code{glib-or-gtk-build-system}, and it
6770 is not enabled by default. It can be enabled with @code{#:glib-or-gtk?}.
6771 @end table
6772 @end defvr
6773
6774 @defvr {Scheme Variable} linux-module-build-system
6775 @code{linux-module-build-system} allows building Linux kernel modules.
6776
6777 @cindex build phases
6778 This build system is an extension of @code{gnu-build-system}, but with the
6779 following phases changed:
6780
6781 @table @code
6782
6783 @item configure
6784 This phase configures the environment so that the Linux kernel's Makefile
6785 can be used to build the external kernel module.
6786
6787 @item build
6788 This phase uses the Linux kernel's Makefile in order to build the external
6789 kernel module.
6790
6791 @item install
6792 This phase uses the Linux kernel's Makefile in order to install the external
6793 kernel module.
6794 @end table
6795
6796 It is possible and useful to specify the Linux kernel to use for building
6797 the module (in the "arguments" form of a package using the
6798 linux-module-build-system, use the key #:linux to specify it).
6799 @end defvr
6800
6801 @defvr {Scheme Variable} node-build-system
6802 This variable is exported by @code{(guix build-system node)}. It
6803 implements the build procedure used by @uref{https://nodejs.org,
6804 Node.js}, which implements an approximation of the @code{npm install}
6805 command, followed by an @code{npm test} command.
6806
6807 Which Node.js package is used to interpret the @code{npm} commands can
6808 be specified with the @code{#:node} parameter which defaults to
6809 @code{node}.
6810 @end defvr
6811
6812 Lastly, for packages that do not need anything as sophisticated, a
6813 ``trivial'' build system is provided. It is trivial in the sense that
6814 it provides basically no support: it does not pull any implicit inputs,
6815 and does not have a notion of build phases.
6816
6817 @defvr {Scheme Variable} trivial-build-system
6818 This variable is exported by @code{(guix build-system trivial)}.
6819
6820 This build system requires a @code{#:builder} argument. This argument
6821 must be a Scheme expression that builds the package output(s)---as
6822 with @code{build-expression->derivation} (@pxref{Derivations,
6823 @code{build-expression->derivation}}).
6824 @end defvr
6825
6826 @node The Store
6827 @section The Store
6828
6829 @cindex store
6830 @cindex store items
6831 @cindex store paths
6832
6833 Conceptually, the @dfn{store} is the place where derivations that have
6834 been built successfully are stored---by default, @file{/gnu/store}.
6835 Sub-directories in the store are referred to as @dfn{store items} or
6836 sometimes @dfn{store paths}. The store has an associated database that
6837 contains information such as the store paths referred to by each store
6838 path, and the list of @emph{valid} store items---results of successful
6839 builds. This database resides in @file{@var{localstatedir}/guix/db},
6840 where @var{localstatedir} is the state directory specified @i{via}
6841 @option{--localstatedir} at configure time, usually @file{/var}.
6842
6843 The store is @emph{always} accessed by the daemon on behalf of its clients
6844 (@pxref{Invoking guix-daemon}). To manipulate the store, clients
6845 connect to the daemon over a Unix-domain socket, send requests to it,
6846 and read the result---these are remote procedure calls, or RPCs.
6847
6848 @quotation Note
6849 Users must @emph{never} modify files under @file{/gnu/store} directly.
6850 This would lead to inconsistencies and break the immutability
6851 assumptions of Guix's functional model (@pxref{Introduction}).
6852
6853 @xref{Invoking guix gc, @command{guix gc --verify}}, for information on
6854 how to check the integrity of the store and attempt recovery from
6855 accidental modifications.
6856 @end quotation
6857
6858 The @code{(guix store)} module provides procedures to connect to the
6859 daemon, and to perform RPCs. These are described below. By default,
6860 @code{open-connection}, and thus all the @command{guix} commands,
6861 connect to the local daemon or to the URI specified by the
6862 @code{GUIX_DAEMON_SOCKET} environment variable.
6863
6864 @defvr {Environment Variable} GUIX_DAEMON_SOCKET
6865 When set, the value of this variable should be a file name or a URI
6866 designating the daemon endpoint. When it is a file name, it denotes a
6867 Unix-domain socket to connect to. In addition to file names, the
6868 supported URI schemes are:
6869
6870 @table @code
6871 @item file
6872 @itemx unix
6873 These are for Unix-domain sockets.
6874 @code{file:///var/guix/daemon-socket/socket} is equivalent to
6875 @file{/var/guix/daemon-socket/socket}.
6876
6877 @item guix
6878 @cindex daemon, remote access
6879 @cindex remote access to the daemon
6880 @cindex daemon, cluster setup
6881 @cindex clusters, daemon setup
6882 These URIs denote connections over TCP/IP, without encryption nor
6883 authentication of the remote host. The URI must specify the host name
6884 and optionally a port number (by default port 44146 is used):
6885
6886 @example
6887 guix://master.guix.example.org:1234
6888 @end example
6889
6890 This setup is suitable on local networks, such as clusters, where only
6891 trusted nodes may connect to the build daemon at
6892 @code{master.guix.example.org}.
6893
6894 The @code{--listen} option of @command{guix-daemon} can be used to
6895 instruct it to listen for TCP connections (@pxref{Invoking guix-daemon,
6896 @code{--listen}}).
6897
6898 @item ssh
6899 @cindex SSH access to build daemons
6900 These URIs allow you to connect to a remote daemon over SSH. This
6901 feature requires Guile-SSH (@pxref{Requirements}) and a working
6902 @code{guile} binary in @code{PATH} on the destination machine. It
6903 supports public key and GSSAPI authentication. A typical URL might look
6904 like this:
6905
6906 @example
6907 ssh://charlie@@guix.example.org:22
6908 @end example
6909
6910 As for @command{guix copy}, the usual OpenSSH client configuration files
6911 are honored (@pxref{Invoking guix copy}).
6912 @end table
6913
6914 Additional URI schemes may be supported in the future.
6915
6916 @c XXX: Remove this note when the protocol incurs fewer round trips
6917 @c and when (guix derivations) no longer relies on file system access.
6918 @quotation Note
6919 The ability to connect to remote build daemons is considered
6920 experimental as of @value{VERSION}. Please get in touch with us to
6921 share any problems or suggestions you may have (@pxref{Contributing}).
6922 @end quotation
6923 @end defvr
6924
6925 @deffn {Scheme Procedure} open-connection [@var{uri}] [#:reserve-space? #t]
6926 Connect to the daemon over the Unix-domain socket at @var{uri} (a string). When
6927 @var{reserve-space?} is true, instruct it to reserve a little bit of
6928 extra space on the file system so that the garbage collector can still
6929 operate should the disk become full. Return a server object.
6930
6931 @var{file} defaults to @code{%default-socket-path}, which is the normal
6932 location given the options that were passed to @command{configure}.
6933 @end deffn
6934
6935 @deffn {Scheme Procedure} close-connection @var{server}
6936 Close the connection to @var{server}.
6937 @end deffn
6938
6939 @defvr {Scheme Variable} current-build-output-port
6940 This variable is bound to a SRFI-39 parameter, which refers to the port
6941 where build and error logs sent by the daemon should be written.
6942 @end defvr
6943
6944 Procedures that make RPCs all take a server object as their first
6945 argument.
6946
6947 @deffn {Scheme Procedure} valid-path? @var{server} @var{path}
6948 @cindex invalid store items
6949 Return @code{#t} when @var{path} designates a valid store item and
6950 @code{#f} otherwise (an invalid item may exist on disk but still be
6951 invalid, for instance because it is the result of an aborted or failed
6952 build.)
6953
6954 A @code{&store-protocol-error} condition is raised if @var{path} is not
6955 prefixed by the store directory (@file{/gnu/store}).
6956 @end deffn
6957
6958 @deffn {Scheme Procedure} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
6959 Add @var{text} under file @var{name} in the store, and return its store
6960 path. @var{references} is the list of store paths referred to by the
6961 resulting store path.
6962 @end deffn
6963
6964 @deffn {Scheme Procedure} build-derivations @var{store} @var{derivations} @
6965 [@var{mode}]
6966 Build @var{derivations}, a list of @code{<derivation>} objects, @file{.drv}
6967 file names, or derivation/output pairs, using the specified
6968 @var{mode}---@code{(build-mode normal)} by default.
6969 @end deffn
6970
6971 Note that the @code{(guix monads)} module provides a monad as well as
6972 monadic versions of the above procedures, with the goal of making it
6973 more convenient to work with code that accesses the store (@pxref{The
6974 Store Monad}).
6975
6976 @c FIXME
6977 @i{This section is currently incomplete.}
6978
6979 @node Derivations
6980 @section Derivations
6981
6982 @cindex derivations
6983 Low-level build actions and the environment in which they are performed
6984 are represented by @dfn{derivations}. A derivation contains the
6985 following pieces of information:
6986
6987 @itemize
6988 @item
6989 The outputs of the derivation---derivations produce at least one file or
6990 directory in the store, but may produce more.
6991
6992 @item
6993 @cindex build-time dependencies
6994 @cindex dependencies, build-time
6995 The inputs of the derivations---i.e., its build-time dependencies---which may
6996 be other derivations or plain files in the store (patches, build scripts,
6997 etc.)
6998
6999 @item
7000 The system type targeted by the derivation---e.g., @code{x86_64-linux}.
7001
7002 @item
7003 The file name of a build script in the store, along with the arguments
7004 to be passed.
7005
7006 @item
7007 A list of environment variables to be defined.
7008
7009 @end itemize
7010
7011 @cindex derivation path
7012 Derivations allow clients of the daemon to communicate build actions to
7013 the store. They exist in two forms: as an in-memory representation,
7014 both on the client- and daemon-side, and as files in the store whose
7015 name end in @code{.drv}---these files are referred to as @dfn{derivation
7016 paths}. Derivations paths can be passed to the @code{build-derivations}
7017 procedure to perform the build actions they prescribe (@pxref{The
7018 Store}).
7019
7020 @cindex fixed-output derivations
7021 Operations such as file downloads and version-control checkouts for
7022 which the expected content hash is known in advance are modeled as
7023 @dfn{fixed-output derivations}. Unlike regular derivations, the outputs
7024 of a fixed-output derivation are independent of its inputs---e.g., a
7025 source code download produces the same result regardless of the download
7026 method and tools being used.
7027
7028 @cindex references
7029 @cindex run-time dependencies
7030 @cindex dependencies, run-time
7031 The outputs of derivations---i.e., the build results---have a set of
7032 @dfn{references}, as reported by the @code{references} RPC or the
7033 @command{guix gc --references} command (@pxref{Invoking guix gc}). References
7034 are the set of run-time dependencies of the build results. References are a
7035 subset of the inputs of the derivation; this subset is automatically computed
7036 by the build daemon by scanning all the files in the outputs.
7037
7038 The @code{(guix derivations)} module provides a representation of
7039 derivations as Scheme objects, along with procedures to create and
7040 otherwise manipulate derivations. The lowest-level primitive to create
7041 a derivation is the @code{derivation} procedure:
7042
7043 @deffn {Scheme Procedure} derivation @var{store} @var{name} @var{builder} @
7044 @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
7045 [#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
7046 [#:system (%current-system)] [#:references-graphs #f] @
7047 [#:allowed-references #f] [#:disallowed-references #f] @
7048 [#:leaked-env-vars #f] [#:local-build? #f] @
7049 [#:substitutable? #t] [#:properties '()]
7050 Build a derivation with the given arguments, and return the resulting
7051 @code{<derivation>} object.
7052
7053 When @var{hash} and @var{hash-algo} are given, a
7054 @dfn{fixed-output derivation} is created---i.e., one whose result is
7055 known in advance, such as a file download. If, in addition,
7056 @var{recursive?} is true, then that fixed output may be an executable
7057 file or a directory and @var{hash} must be the hash of an archive
7058 containing this output.
7059
7060 When @var{references-graphs} is true, it must be a list of file
7061 name/store path pairs. In that case, the reference graph of each store
7062 path is exported in the build environment in the corresponding file, in
7063 a simple text format.
7064
7065 When @var{allowed-references} is true, it must be a list of store items
7066 or outputs that the derivation's output may refer to. Likewise,
7067 @var{disallowed-references}, if true, must be a list of things the
7068 outputs may @emph{not} refer to.
7069
7070 When @var{leaked-env-vars} is true, it must be a list of strings
7071 denoting environment variables that are allowed to ``leak'' from the
7072 daemon's environment to the build environment. This is only applicable
7073 to fixed-output derivations---i.e., when @var{hash} is true. The main
7074 use is to allow variables such as @code{http_proxy} to be passed to
7075 derivations that download files.
7076
7077 When @var{local-build?} is true, declare that the derivation is not a
7078 good candidate for offloading and should rather be built locally
7079 (@pxref{Daemon Offload Setup}). This is the case for small derivations
7080 where the costs of data transfers would outweigh the benefits.
7081
7082 When @var{substitutable?} is false, declare that substitutes of the
7083 derivation's output should not be used (@pxref{Substitutes}). This is
7084 useful, for instance, when building packages that capture details of the
7085 host CPU instruction set.
7086
7087 @var{properties} must be an association list describing ``properties'' of the
7088 derivation. It is kept as-is, uninterpreted, in the derivation.
7089 @end deffn
7090
7091 @noindent
7092 Here's an example with a shell script as its builder, assuming
7093 @var{store} is an open connection to the daemon, and @var{bash} points
7094 to a Bash executable in the store:
7095
7096 @lisp
7097 (use-modules (guix utils)
7098 (guix store)
7099 (guix derivations))
7100
7101 (let ((builder ; add the Bash script to the store
7102 (add-text-to-store store "my-builder.sh"
7103 "echo hello world > $out\n" '())))
7104 (derivation store "foo"
7105 bash `("-e" ,builder)
7106 #:inputs `((,bash) (,builder))
7107 #:env-vars '(("HOME" . "/homeless"))))
7108 @result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
7109 @end lisp
7110
7111 As can be guessed, this primitive is cumbersome to use directly. A
7112 better approach is to write build scripts in Scheme, of course! The
7113 best course of action for that is to write the build code as a
7114 ``G-expression'', and to pass it to @code{gexp->derivation}. For more
7115 information, @pxref{G-Expressions}.
7116
7117 Once upon a time, @code{gexp->derivation} did not exist and constructing
7118 derivations with build code written in Scheme was achieved with
7119 @code{build-expression->derivation}, documented below. This procedure
7120 is now deprecated in favor of the much nicer @code{gexp->derivation}.
7121
7122 @deffn {Scheme Procedure} build-expression->derivation @var{store} @
7123 @var{name} @var{exp} @
7124 [#:system (%current-system)] [#:inputs '()] @
7125 [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
7126 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
7127 [#:references-graphs #f] [#:allowed-references #f] @
7128 [#:disallowed-references #f] @
7129 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
7130 Return a derivation that executes Scheme expression @var{exp} as a
7131 builder for derivation @var{name}. @var{inputs} must be a list of
7132 @code{(name drv-path sub-drv)} tuples; when @var{sub-drv} is omitted,
7133 @code{"out"} is assumed. @var{modules} is a list of names of Guile
7134 modules from the current search path to be copied in the store,
7135 compiled, and made available in the load path during the execution of
7136 @var{exp}---e.g., @code{((guix build utils) (guix build
7137 gnu-build-system))}.
7138
7139 @var{exp} is evaluated in an environment where @code{%outputs} is bound
7140 to a list of output/path pairs, and where @code{%build-inputs} is bound
7141 to a list of string/output-path pairs made from @var{inputs}.
7142 Optionally, @var{env-vars} is a list of string pairs specifying the name
7143 and value of environment variables visible to the builder. The builder
7144 terminates by passing the result of @var{exp} to @code{exit}; thus, when
7145 @var{exp} returns @code{#f}, the build is considered to have failed.
7146
7147 @var{exp} is built using @var{guile-for-build} (a derivation). When
7148 @var{guile-for-build} is omitted or is @code{#f}, the value of the
7149 @code{%guile-for-build} fluid is used instead.
7150
7151 See the @code{derivation} procedure for the meaning of
7152 @var{references-graphs}, @var{allowed-references},
7153 @var{disallowed-references}, @var{local-build?}, and
7154 @var{substitutable?}.
7155 @end deffn
7156
7157 @noindent
7158 Here's an example of a single-output derivation that creates a directory
7159 containing one file:
7160
7161 @lisp
7162 (let ((builder '(let ((out (assoc-ref %outputs "out")))
7163 (mkdir out) ; create /gnu/store/@dots{}-goo
7164 (call-with-output-file (string-append out "/test")
7165 (lambda (p)
7166 (display '(hello guix) p))))))
7167 (build-expression->derivation store "goo" builder))
7168
7169 @result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
7170 @end lisp
7171
7172
7173 @node The Store Monad
7174 @section The Store Monad
7175
7176 @cindex monad
7177
7178 The procedures that operate on the store described in the previous
7179 sections all take an open connection to the build daemon as their first
7180 argument. Although the underlying model is functional, they either have
7181 side effects or depend on the current state of the store.
7182
7183 The former is inconvenient: the connection to the build daemon has to be
7184 carried around in all those functions, making it impossible to compose
7185 functions that do not take that parameter with functions that do. The
7186 latter can be problematic: since store operations have side effects
7187 and/or depend on external state, they have to be properly sequenced.
7188
7189 @cindex monadic values
7190 @cindex monadic functions
7191 This is where the @code{(guix monads)} module comes in. This module
7192 provides a framework for working with @dfn{monads}, and a particularly
7193 useful monad for our uses, the @dfn{store monad}. Monads are a
7194 construct that allows two things: associating ``context'' with values
7195 (in our case, the context is the store), and building sequences of
7196 computations (here computations include accesses to the store). Values
7197 in a monad---values that carry this additional context---are called
7198 @dfn{monadic values}; procedures that return such values are called
7199 @dfn{monadic procedures}.
7200
7201 Consider this ``normal'' procedure:
7202
7203 @lisp
7204 (define (sh-symlink store)
7205 ;; Return a derivation that symlinks the 'bash' executable.
7206 (let* ((drv (package-derivation store bash))
7207 (out (derivation->output-path drv))
7208 (sh (string-append out "/bin/bash")))
7209 (build-expression->derivation store "sh"
7210 `(symlink ,sh %output))))
7211 @end lisp
7212
7213 Using @code{(guix monads)} and @code{(guix gexp)}, it may be rewritten
7214 as a monadic function:
7215
7216 @lisp
7217 (define (sh-symlink)
7218 ;; Same, but return a monadic value.
7219 (mlet %store-monad ((drv (package->derivation bash)))
7220 (gexp->derivation "sh"
7221 #~(symlink (string-append #$drv "/bin/bash")
7222 #$output))))
7223 @end lisp
7224
7225 There are several things to note in the second version: the @code{store}
7226 parameter is now implicit and is ``threaded'' in the calls to the
7227 @code{package->derivation} and @code{gexp->derivation} monadic
7228 procedures, and the monadic value returned by @code{package->derivation}
7229 is @dfn{bound} using @code{mlet} instead of plain @code{let}.
7230
7231 As it turns out, the call to @code{package->derivation} can even be
7232 omitted since it will take place implicitly, as we will see later
7233 (@pxref{G-Expressions}):
7234
7235 @lisp
7236 (define (sh-symlink)
7237 (gexp->derivation "sh"
7238 #~(symlink (string-append #$bash "/bin/bash")
7239 #$output)))
7240 @end lisp
7241
7242 @c See
7243 @c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
7244 @c for the funny quote.
7245 Calling the monadic @code{sh-symlink} has no effect. As someone once
7246 said, ``you exit a monad like you exit a building on fire: by running''.
7247 So, to exit the monad and get the desired effect, one must use
7248 @code{run-with-store}:
7249
7250 @lisp
7251 (run-with-store (open-connection) (sh-symlink))
7252 @result{} /gnu/store/...-sh-symlink
7253 @end lisp
7254
7255 Note that the @code{(guix monad-repl)} module extends the Guile REPL with
7256 new ``meta-commands'' to make it easier to deal with monadic procedures:
7257 @code{run-in-store}, and @code{enter-store-monad}. The former is used
7258 to ``run'' a single monadic value through the store:
7259
7260 @example
7261 scheme@@(guile-user)> ,run-in-store (package->derivation hello)
7262 $1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
7263 @end example
7264
7265 The latter enters a recursive REPL, where all the return values are
7266 automatically run through the store:
7267
7268 @example
7269 scheme@@(guile-user)> ,enter-store-monad
7270 store-monad@@(guile-user) [1]> (package->derivation hello)
7271 $2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
7272 store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
7273 $3 = "/gnu/store/@dots{}-foo"
7274 store-monad@@(guile-user) [1]> ,q
7275 scheme@@(guile-user)>
7276 @end example
7277
7278 @noindent
7279 Note that non-monadic values cannot be returned in the
7280 @code{store-monad} REPL.
7281
7282 The main syntactic forms to deal with monads in general are provided by
7283 the @code{(guix monads)} module and are described below.
7284
7285 @deffn {Scheme Syntax} with-monad @var{monad} @var{body} ...
7286 Evaluate any @code{>>=} or @code{return} forms in @var{body} as being
7287 in @var{monad}.
7288 @end deffn
7289
7290 @deffn {Scheme Syntax} return @var{val}
7291 Return a monadic value that encapsulates @var{val}.
7292 @end deffn
7293
7294 @deffn {Scheme Syntax} >>= @var{mval} @var{mproc} ...
7295 @dfn{Bind} monadic value @var{mval}, passing its ``contents'' to monadic
7296 procedures @var{mproc}@dots{}@footnote{This operation is commonly
7297 referred to as ``bind'', but that name denotes an unrelated procedure in
7298 Guile. Thus we use this somewhat cryptic symbol inherited from the
7299 Haskell language.}. There can be one @var{mproc} or several of them, as
7300 in this example:
7301
7302 @lisp
7303 (run-with-state
7304 (with-monad %state-monad
7305 (>>= (return 1)
7306 (lambda (x) (return (+ 1 x)))
7307 (lambda (x) (return (* 2 x)))))
7308 'some-state)
7309
7310 @result{} 4
7311 @result{} some-state
7312 @end lisp
7313 @end deffn
7314
7315 @deffn {Scheme Syntax} mlet @var{monad} ((@var{var} @var{mval}) ...) @
7316 @var{body} ...
7317 @deffnx {Scheme Syntax} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
7318 @var{body} ...
7319 Bind the variables @var{var} to the monadic values @var{mval} in
7320 @var{body}, which is a sequence of expressions. As with the bind
7321 operator, this can be thought of as ``unpacking'' the raw, non-monadic
7322 value ``contained'' in @var{mval} and making @var{var} refer to that
7323 raw, non-monadic value within the scope of the @var{body}. The form
7324 (@var{var} -> @var{val}) binds @var{var} to the ``normal'' value
7325 @var{val}, as per @code{let}. The binding operations occur in sequence
7326 from left to right. The last expression of @var{body} must be a monadic
7327 expression, and its result will become the result of the @code{mlet} or
7328 @code{mlet*} when run in the @var{monad}.
7329
7330 @code{mlet*} is to @code{mlet} what @code{let*} is to @code{let}
7331 (@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
7332 @end deffn
7333
7334 @deffn {Scheme System} mbegin @var{monad} @var{mexp} ...
7335 Bind @var{mexp} and the following monadic expressions in sequence,
7336 returning the result of the last expression. Every expression in the
7337 sequence must be a monadic expression.
7338
7339 This is akin to @code{mlet}, except that the return values of the
7340 monadic expressions are ignored. In that sense, it is analogous to
7341 @code{begin}, but applied to monadic expressions.
7342 @end deffn
7343
7344 @deffn {Scheme System} mwhen @var{condition} @var{mexp0} @var{mexp*} ...
7345 When @var{condition} is true, evaluate the sequence of monadic
7346 expressions @var{mexp0}..@var{mexp*} as in an @code{mbegin}. When
7347 @var{condition} is false, return @code{*unspecified*} in the current
7348 monad. Every expression in the sequence must be a monadic expression.
7349 @end deffn
7350
7351 @deffn {Scheme System} munless @var{condition} @var{mexp0} @var{mexp*} ...
7352 When @var{condition} is false, evaluate the sequence of monadic
7353 expressions @var{mexp0}..@var{mexp*} as in an @code{mbegin}. When
7354 @var{condition} is true, return @code{*unspecified*} in the current
7355 monad. Every expression in the sequence must be a monadic expression.
7356 @end deffn
7357
7358 @cindex state monad
7359 The @code{(guix monads)} module provides the @dfn{state monad}, which
7360 allows an additional value---the state---to be @emph{threaded} through
7361 monadic procedure calls.
7362
7363 @defvr {Scheme Variable} %state-monad
7364 The state monad. Procedures in the state monad can access and change
7365 the state that is threaded.
7366
7367 Consider the example below. The @code{square} procedure returns a value
7368 in the state monad. It returns the square of its argument, but also
7369 increments the current state value:
7370
7371 @lisp
7372 (define (square x)
7373 (mlet %state-monad ((count (current-state)))
7374 (mbegin %state-monad
7375 (set-current-state (+ 1 count))
7376 (return (* x x)))))
7377
7378 (run-with-state (sequence %state-monad (map square (iota 3))) 0)
7379 @result{} (0 1 4)
7380 @result{} 3
7381 @end lisp
7382
7383 When ``run'' through @code{%state-monad}, we obtain that additional state
7384 value, which is the number of @code{square} calls.
7385 @end defvr
7386
7387 @deffn {Monadic Procedure} current-state
7388 Return the current state as a monadic value.
7389 @end deffn
7390
7391 @deffn {Monadic Procedure} set-current-state @var{value}
7392 Set the current state to @var{value} and return the previous state as a
7393 monadic value.
7394 @end deffn
7395
7396 @deffn {Monadic Procedure} state-push @var{value}
7397 Push @var{value} to the current state, which is assumed to be a list,
7398 and return the previous state as a monadic value.
7399 @end deffn
7400
7401 @deffn {Monadic Procedure} state-pop
7402 Pop a value from the current state and return it as a monadic value.
7403 The state is assumed to be a list.
7404 @end deffn
7405
7406 @deffn {Scheme Procedure} run-with-state @var{mval} [@var{state}]
7407 Run monadic value @var{mval} starting with @var{state} as the initial
7408 state. Return two values: the resulting value, and the resulting state.
7409 @end deffn
7410
7411 The main interface to the store monad, provided by the @code{(guix
7412 store)} module, is as follows.
7413
7414 @defvr {Scheme Variable} %store-monad
7415 The store monad---an alias for @code{%state-monad}.
7416
7417 Values in the store monad encapsulate accesses to the store. When its
7418 effect is needed, a value of the store monad must be ``evaluated'' by
7419 passing it to the @code{run-with-store} procedure (see below.)
7420 @end defvr
7421
7422 @deffn {Scheme Procedure} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
7423 Run @var{mval}, a monadic value in the store monad, in @var{store}, an
7424 open store connection.
7425 @end deffn
7426
7427 @deffn {Monadic Procedure} text-file @var{name} @var{text} [@var{references}]
7428 Return as a monadic value the absolute file name in the store of the file
7429 containing @var{text}, a string. @var{references} is a list of store items that the
7430 resulting text file refers to; it defaults to the empty list.
7431 @end deffn
7432
7433 @deffn {Monadic Procedure} binary-file @var{name} @var{data} [@var{references}]
7434 Return as a monadic value the absolute file name in the store of the file
7435 containing @var{data}, a bytevector. @var{references} is a list of store
7436 items that the resulting binary file refers to; it defaults to the empty list.
7437 @end deffn
7438
7439 @deffn {Monadic Procedure} interned-file @var{file} [@var{name}] @
7440 [#:recursive? #t] [#:select? (const #t)]
7441 Return the name of @var{file} once interned in the store. Use
7442 @var{name} as its store name, or the basename of @var{file} if
7443 @var{name} is omitted.
7444
7445 When @var{recursive?} is true, the contents of @var{file} are added
7446 recursively; if @var{file} designates a flat file and @var{recursive?}
7447 is true, its contents are added, and its permission bits are kept.
7448
7449 When @var{recursive?} is true, call @code{(@var{select?} @var{file}
7450 @var{stat})} for each directory entry, where @var{file} is the entry's
7451 absolute file name and @var{stat} is the result of @code{lstat}; exclude
7452 entries for which @var{select?} does not return true.
7453
7454 The example below adds a file to the store, under two different names:
7455
7456 @lisp
7457 (run-with-store (open-connection)
7458 (mlet %store-monad ((a (interned-file "README"))
7459 (b (interned-file "README" "LEGU-MIN")))
7460 (return (list a b))))
7461
7462 @result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
7463 @end lisp
7464
7465 @end deffn
7466
7467 The @code{(guix packages)} module exports the following package-related
7468 monadic procedures:
7469
7470 @deffn {Monadic Procedure} package-file @var{package} [@var{file}] @
7471 [#:system (%current-system)] [#:target #f] @
7472 [#:output "out"]
7473 Return as a monadic
7474 value in the absolute file name of @var{file} within the @var{output}
7475 directory of @var{package}. When @var{file} is omitted, return the name
7476 of the @var{output} directory of @var{package}. When @var{target} is
7477 true, use it as a cross-compilation target triplet.
7478 @end deffn
7479
7480 @deffn {Monadic Procedure} package->derivation @var{package} [@var{system}]
7481 @deffnx {Monadic Procedure} package->cross-derivation @var{package} @
7482 @var{target} [@var{system}]
7483 Monadic version of @code{package-derivation} and
7484 @code{package-cross-derivation} (@pxref{Defining Packages}).
7485 @end deffn
7486
7487
7488 @node G-Expressions
7489 @section G-Expressions
7490
7491 @cindex G-expression
7492 @cindex build code quoting
7493 So we have ``derivations'', which represent a sequence of build actions
7494 to be performed to produce an item in the store (@pxref{Derivations}).
7495 These build actions are performed when asking the daemon to actually
7496 build the derivations; they are run by the daemon in a container
7497 (@pxref{Invoking guix-daemon}).
7498
7499 @cindex strata of code
7500 It should come as no surprise that we like to write these build actions
7501 in Scheme. When we do that, we end up with two @dfn{strata} of Scheme
7502 code@footnote{The term @dfn{stratum} in this context was coined by
7503 Manuel Serrano et al.@: in the context of their work on Hop. Oleg
7504 Kiselyov, who has written insightful
7505 @url{http://okmij.org/ftp/meta-programming/#meta-scheme, essays and code
7506 on this topic}, refers to this kind of code generation as
7507 @dfn{staging}.}: the ``host code''---code that defines packages, talks
7508 to the daemon, etc.---and the ``build code''---code that actually
7509 performs build actions, such as making directories, invoking
7510 @command{make}, etc.
7511
7512 To describe a derivation and its build actions, one typically needs to
7513 embed build code inside host code. It boils down to manipulating build
7514 code as data, and the homoiconicity of Scheme---code has a direct
7515 representation as data---comes in handy for that. But we need more than
7516 the normal @code{quasiquote} mechanism in Scheme to construct build
7517 expressions.
7518
7519 The @code{(guix gexp)} module implements @dfn{G-expressions}, a form of
7520 S-expressions adapted to build expressions. G-expressions, or
7521 @dfn{gexps}, consist essentially of three syntactic forms: @code{gexp},
7522 @code{ungexp}, and @code{ungexp-splicing} (or simply: @code{#~},
7523 @code{#$}, and @code{#$@@}), which are comparable to
7524 @code{quasiquote}, @code{unquote}, and @code{unquote-splicing},
7525 respectively (@pxref{Expression Syntax, @code{quasiquote},, guile,
7526 GNU Guile Reference Manual}). However, there are major differences:
7527
7528 @itemize
7529 @item
7530 Gexps are meant to be written to a file and run or manipulated by other
7531 processes.
7532
7533 @item
7534 When a high-level object such as a package or derivation is unquoted
7535 inside a gexp, the result is as if its output file name had been
7536 introduced.
7537
7538 @item
7539 Gexps carry information about the packages or derivations they refer to,
7540 and these dependencies are automatically added as inputs to the build
7541 processes that use them.
7542 @end itemize
7543
7544 @cindex lowering, of high-level objects in gexps
7545 This mechanism is not limited to package and derivation
7546 objects: @dfn{compilers} able to ``lower'' other high-level objects to
7547 derivations or files in the store can be defined,
7548 such that these objects can also be inserted
7549 into gexps. For example, a useful type of high-level objects that can be
7550 inserted in a gexp is ``file-like objects'', which make it easy to
7551 add files to the store and to refer to them in
7552 derivations and such (see @code{local-file} and @code{plain-file}
7553 below.)
7554
7555 To illustrate the idea, here is an example of a gexp:
7556
7557 @lisp
7558 (define build-exp
7559 #~(begin
7560 (mkdir #$output)
7561 (chdir #$output)
7562 (symlink (string-append #$coreutils "/bin/ls")
7563 "list-files")))
7564 @end lisp
7565
7566 This gexp can be passed to @code{gexp->derivation}; we obtain a
7567 derivation that builds a directory containing exactly one symlink to
7568 @file{/gnu/store/@dots{}-coreutils-8.22/bin/ls}:
7569
7570 @lisp
7571 (gexp->derivation "the-thing" build-exp)
7572 @end lisp
7573
7574 As one would expect, the @code{"/gnu/store/@dots{}-coreutils-8.22"} string is
7575 substituted to the reference to the @var{coreutils} package in the
7576 actual build code, and @var{coreutils} is automatically made an input to
7577 the derivation. Likewise, @code{#$output} (equivalent to @code{(ungexp
7578 output)}) is replaced by a string containing the directory name of the
7579 output of the derivation.
7580
7581 @cindex cross compilation
7582 In a cross-compilation context, it is useful to distinguish between
7583 references to the @emph{native} build of a package---that can run on the
7584 host---versus references to cross builds of a package. To that end, the
7585 @code{#+} plays the same role as @code{#$}, but is a reference to a
7586 native package build:
7587
7588 @lisp
7589 (gexp->derivation "vi"
7590 #~(begin
7591 (mkdir #$output)
7592 (mkdir (string-append #$output "/bin"))
7593 (system* (string-append #+coreutils "/bin/ln")
7594 "-s"
7595 (string-append #$emacs "/bin/emacs")
7596 (string-append #$output "/bin/vi")))
7597 #:target "mips64el-linux-gnu")
7598 @end lisp
7599
7600 @noindent
7601 In the example above, the native build of @var{coreutils} is used, so
7602 that @command{ln} can actually run on the host; but then the
7603 cross-compiled build of @var{emacs} is referenced.
7604
7605 @cindex imported modules, for gexps
7606 @findex with-imported-modules
7607 Another gexp feature is @dfn{imported modules}: sometimes you want to be
7608 able to use certain Guile modules from the ``host environment'' in the
7609 gexp, so those modules should be imported in the ``build environment''.
7610 The @code{with-imported-modules} form allows you to express that:
7611
7612 @lisp
7613 (let ((build (with-imported-modules '((guix build utils))
7614 #~(begin
7615 (use-modules (guix build utils))
7616 (mkdir-p (string-append #$output "/bin"))))))
7617 (gexp->derivation "empty-dir"
7618 #~(begin
7619 #$build
7620 (display "success!\n")
7621 #t)))
7622 @end lisp
7623
7624 @noindent
7625 In this example, the @code{(guix build utils)} module is automatically
7626 pulled into the isolated build environment of our gexp, such that
7627 @code{(use-modules (guix build utils))} works as expected.
7628
7629 @cindex module closure
7630 @findex source-module-closure
7631 Usually you want the @emph{closure} of the module to be imported---i.e.,
7632 the module itself and all the modules it depends on---rather than just
7633 the module; failing to do that, attempts to use the module will fail
7634 because of missing dependent modules. The @code{source-module-closure}
7635 procedure computes the closure of a module by looking at its source file
7636 headers, which comes in handy in this case:
7637
7638 @lisp
7639 (use-modules (guix modules)) ;for 'source-module-closure'
7640
7641 (with-imported-modules (source-module-closure
7642 '((guix build utils)
7643 (gnu build vm)))
7644 (gexp->derivation "something-with-vms"
7645 #~(begin
7646 (use-modules (guix build utils)
7647 (gnu build vm))
7648 @dots{})))
7649 @end lisp
7650
7651 @cindex extensions, for gexps
7652 @findex with-extensions
7653 In the same vein, sometimes you want to import not just pure-Scheme
7654 modules, but also ``extensions'' such as Guile bindings to C libraries
7655 or other ``full-blown'' packages. Say you need the @code{guile-json}
7656 package available on the build side, here's how you would do it:
7657
7658 @lisp
7659 (use-modules (gnu packages guile)) ;for 'guile-json'
7660
7661 (with-extensions (list guile-json)
7662 (gexp->derivation "something-with-json"
7663 #~(begin
7664 (use-modules (json))
7665 @dots{})))
7666 @end lisp
7667
7668 The syntactic form to construct gexps is summarized below.
7669
7670 @deffn {Scheme Syntax} #~@var{exp}
7671 @deffnx {Scheme Syntax} (gexp @var{exp})
7672 Return a G-expression containing @var{exp}. @var{exp} may contain one
7673 or more of the following forms:
7674
7675 @table @code
7676 @item #$@var{obj}
7677 @itemx (ungexp @var{obj})
7678 Introduce a reference to @var{obj}. @var{obj} may have one of the
7679 supported types, for example a package or a
7680 derivation, in which case the @code{ungexp} form is replaced by its
7681 output file name---e.g., @code{"/gnu/store/@dots{}-coreutils-8.22}.
7682
7683 If @var{obj} is a list, it is traversed and references to supported
7684 objects are substituted similarly.
7685
7686 If @var{obj} is another gexp, its contents are inserted and its
7687 dependencies are added to those of the containing gexp.
7688
7689 If @var{obj} is another kind of object, it is inserted as is.
7690
7691 @item #$@var{obj}:@var{output}
7692 @itemx (ungexp @var{obj} @var{output})
7693 This is like the form above, but referring explicitly to the
7694 @var{output} of @var{obj}---this is useful when @var{obj} produces
7695 multiple outputs (@pxref{Packages with Multiple Outputs}).
7696
7697 @item #+@var{obj}
7698 @itemx #+@var{obj}:output
7699 @itemx (ungexp-native @var{obj})
7700 @itemx (ungexp-native @var{obj} @var{output})
7701 Same as @code{ungexp}, but produces a reference to the @emph{native}
7702 build of @var{obj} when used in a cross compilation context.
7703
7704 @item #$output[:@var{output}]
7705 @itemx (ungexp output [@var{output}])
7706 Insert a reference to derivation output @var{output}, or to the main
7707 output when @var{output} is omitted.
7708
7709 This only makes sense for gexps passed to @code{gexp->derivation}.
7710
7711 @item #$@@@var{lst}
7712 @itemx (ungexp-splicing @var{lst})
7713 Like the above, but splices the contents of @var{lst} inside the
7714 containing list.
7715
7716 @item #+@@@var{lst}
7717 @itemx (ungexp-native-splicing @var{lst})
7718 Like the above, but refers to native builds of the objects listed in
7719 @var{lst}.
7720
7721 @end table
7722
7723 G-expressions created by @code{gexp} or @code{#~} are run-time objects
7724 of the @code{gexp?} type (see below.)
7725 @end deffn
7726
7727 @deffn {Scheme Syntax} with-imported-modules @var{modules} @var{body}@dots{}
7728 Mark the gexps defined in @var{body}@dots{} as requiring @var{modules}
7729 in their execution environment.
7730
7731 Each item in @var{modules} can be the name of a module, such as
7732 @code{(guix build utils)}, or it can be a module name, followed by an
7733 arrow, followed by a file-like object:
7734
7735 @lisp
7736 `((guix build utils)
7737 (guix gcrypt)
7738 ((guix config) => ,(scheme-file "config.scm"
7739 #~(define-module @dots{}))))
7740 @end lisp
7741
7742 @noindent
7743 In the example above, the first two modules are taken from the search
7744 path, and the last one is created from the given file-like object.
7745
7746 This form has @emph{lexical} scope: it has an effect on the gexps
7747 directly defined in @var{body}@dots{}, but not on those defined, say, in
7748 procedures called from @var{body}@dots{}.
7749 @end deffn
7750
7751 @deffn {Scheme Syntax} with-extensions @var{extensions} @var{body}@dots{}
7752 Mark the gexps defined in @var{body}@dots{} as requiring
7753 @var{extensions} in their build and execution environment.
7754 @var{extensions} is typically a list of package objects such as those
7755 defined in the @code{(gnu packages guile)} module.
7756
7757 Concretely, the packages listed in @var{extensions} are added to the
7758 load path while compiling imported modules in @var{body}@dots{}; they
7759 are also added to the load path of the gexp returned by
7760 @var{body}@dots{}.
7761 @end deffn
7762
7763 @deffn {Scheme Procedure} gexp? @var{obj}
7764 Return @code{#t} if @var{obj} is a G-expression.
7765 @end deffn
7766
7767 G-expressions are meant to be written to disk, either as code building
7768 some derivation, or as plain files in the store. The monadic procedures
7769 below allow you to do that (@pxref{The Store Monad}, for more
7770 information about monads.)
7771
7772 @deffn {Monadic Procedure} gexp->derivation @var{name} @var{exp} @
7773 [#:system (%current-system)] [#:target #f] [#:graft? #t] @
7774 [#:hash #f] [#:hash-algo #f] @
7775 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
7776 [#:module-path @code{%load-path}] @
7777 [#:effective-version "2.2"] @
7778 [#:references-graphs #f] [#:allowed-references #f] @
7779 [#:disallowed-references #f] @
7780 [#:leaked-env-vars #f] @
7781 [#:script-name (string-append @var{name} "-builder")] @
7782 [#:deprecation-warnings #f] @
7783 [#:local-build? #f] [#:substitutable? #t] @
7784 [#:properties '()] [#:guile-for-build #f]
7785 Return a derivation @var{name} that runs @var{exp} (a gexp) with
7786 @var{guile-for-build} (a derivation) on @var{system}; @var{exp} is
7787 stored in a file called @var{script-name}. When @var{target} is true,
7788 it is used as the cross-compilation target triplet for packages referred
7789 to by @var{exp}.
7790
7791 @var{modules} is deprecated in favor of @code{with-imported-modules}.
7792 Its meaning is to
7793 make @var{modules} available in the evaluation context of @var{exp};
7794 @var{modules} is a list of names of Guile modules searched in
7795 @var{module-path} to be copied in the store, compiled, and made available in
7796 the load path during the execution of @var{exp}---e.g., @code{((guix
7797 build utils) (guix build gnu-build-system))}.
7798
7799 @var{effective-version} determines the string to use when adding extensions of
7800 @var{exp} (see @code{with-extensions}) to the search path---e.g., @code{"2.2"}.
7801
7802 @var{graft?} determines whether packages referred to by @var{exp} should be grafted when
7803 applicable.
7804
7805 When @var{references-graphs} is true, it must be a list of tuples of one of the
7806 following forms:
7807
7808 @example
7809 (@var{file-name} @var{package})
7810 (@var{file-name} @var{package} @var{output})
7811 (@var{file-name} @var{derivation})
7812 (@var{file-name} @var{derivation} @var{output})
7813 (@var{file-name} @var{store-item})
7814 @end example
7815
7816 The right-hand-side of each element of @var{references-graphs} is automatically made
7817 an input of the build process of @var{exp}. In the build environment, each
7818 @var{file-name} contains the reference graph of the corresponding item, in a simple
7819 text format.
7820
7821 @var{allowed-references} must be either @code{#f} or a list of output names and packages.
7822 In the latter case, the list denotes store items that the result is allowed to
7823 refer to. Any reference to another store item will lead to a build error.
7824 Similarly for @var{disallowed-references}, which can list items that must not be
7825 referenced by the outputs.
7826
7827 @var{deprecation-warnings} determines whether to show deprecation warnings while
7828 compiling modules. It can be @code{#f}, @code{#t}, or @code{'detailed}.
7829
7830 The other arguments are as for @code{derivation} (@pxref{Derivations}).
7831 @end deffn
7832
7833 @cindex file-like objects
7834 The @code{local-file}, @code{plain-file}, @code{computed-file},
7835 @code{program-file}, and @code{scheme-file} procedures below return
7836 @dfn{file-like objects}. That is, when unquoted in a G-expression,
7837 these objects lead to a file in the store. Consider this G-expression:
7838
7839 @lisp
7840 #~(system* #$(file-append glibc "/sbin/nscd") "-f"
7841 #$(local-file "/tmp/my-nscd.conf"))
7842 @end lisp
7843
7844 The effect here is to ``intern'' @file{/tmp/my-nscd.conf} by copying it
7845 to the store. Once expanded, for instance @i{via}
7846 @code{gexp->derivation}, the G-expression refers to that copy under
7847 @file{/gnu/store}; thus, modifying or removing the file in @file{/tmp}
7848 does not have any effect on what the G-expression does.
7849 @code{plain-file} can be used similarly; it differs in that the file
7850 content is directly passed as a string.
7851
7852 @deffn {Scheme Procedure} local-file @var{file} [@var{name}] @
7853 [#:recursive? #f] [#:select? (const #t)]
7854 Return an object representing local file @var{file} to add to the store;
7855 this object can be used in a gexp. If @var{file} is a literal string
7856 denoting a relative file name, it is looked up relative to the source
7857 file where it appears; if @var{file} is not a literal string, it is
7858 looked up relative to the current working directory at run time.
7859 @var{file} will be added to the store under @var{name}--by default the
7860 base name of @var{file}.
7861
7862 When @var{recursive?} is true, the contents of @var{file} are added recursively; if @var{file}
7863 designates a flat file and @var{recursive?} is true, its contents are added, and its
7864 permission bits are kept.
7865
7866 When @var{recursive?} is true, call @code{(@var{select?} @var{file}
7867 @var{stat})} for each directory entry, where @var{file} is the entry's
7868 absolute file name and @var{stat} is the result of @code{lstat}; exclude
7869 entries for which @var{select?} does not return true.
7870
7871 This is the declarative counterpart of the @code{interned-file} monadic
7872 procedure (@pxref{The Store Monad, @code{interned-file}}).
7873 @end deffn
7874
7875 @deffn {Scheme Procedure} plain-file @var{name} @var{content}
7876 Return an object representing a text file called @var{name} with the given
7877 @var{content} (a string or a bytevector) to be added to the store.
7878
7879 This is the declarative counterpart of @code{text-file}.
7880 @end deffn
7881
7882 @deffn {Scheme Procedure} computed-file @var{name} @var{gexp} @
7883 [#:options '(#:local-build? #t)]
7884 Return an object representing the store item @var{name}, a file or
7885 directory computed by @var{gexp}. @var{options}
7886 is a list of additional arguments to pass to @code{gexp->derivation}.
7887
7888 This is the declarative counterpart of @code{gexp->derivation}.
7889 @end deffn
7890
7891 @deffn {Monadic Procedure} gexp->script @var{name} @var{exp} @
7892 [#:guile (default-guile)] [#:module-path %load-path] @
7893 [#:system (%current-system)] [#:target #f]
7894 Return an executable script @var{name} that runs @var{exp} using
7895 @var{guile}, with @var{exp}'s imported modules in its search path.
7896 Look up @var{exp}'s modules in @var{module-path}.
7897
7898 The example below builds a script that simply invokes the @command{ls}
7899 command:
7900
7901 @lisp
7902 (use-modules (guix gexp) (gnu packages base))
7903
7904 (gexp->script "list-files"
7905 #~(execl #$(file-append coreutils "/bin/ls")
7906 "ls"))
7907 @end lisp
7908
7909 When ``running'' it through the store (@pxref{The Store Monad,
7910 @code{run-with-store}}), we obtain a derivation that produces an
7911 executable file @file{/gnu/store/@dots{}-list-files} along these lines:
7912
7913 @example
7914 #!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
7915 !#
7916 (execl "/gnu/store/@dots{}-coreutils-8.22"/bin/ls" "ls")
7917 @end example
7918 @end deffn
7919
7920 @deffn {Scheme Procedure} program-file @var{name} @var{exp} @
7921 [#:guile #f] [#:module-path %load-path]
7922 Return an object representing the executable store item @var{name} that
7923 runs @var{gexp}. @var{guile} is the Guile package used to execute that
7924 script. Imported modules of @var{gexp} are looked up in @var{module-path}.
7925
7926 This is the declarative counterpart of @code{gexp->script}.
7927 @end deffn
7928
7929 @deffn {Monadic Procedure} gexp->file @var{name} @var{exp} @
7930 [#:set-load-path? #t] [#:module-path %load-path] @
7931 [#:splice? #f] @
7932 [#:guile (default-guile)]
7933 Return a derivation that builds a file @var{name} containing @var{exp}.
7934 When @var{splice?} is true, @var{exp} is considered to be a list of
7935 expressions that will be spliced in the resulting file.
7936
7937 When @var{set-load-path?} is true, emit code in the resulting file to
7938 set @code{%load-path} and @code{%load-compiled-path} to honor
7939 @var{exp}'s imported modules. Look up @var{exp}'s modules in
7940 @var{module-path}.
7941
7942 The resulting file holds references to all the dependencies of @var{exp}
7943 or a subset thereof.
7944 @end deffn
7945
7946 @deffn {Scheme Procedure} scheme-file @var{name} @var{exp} [#:splice? #f]
7947 Return an object representing the Scheme file @var{name} that contains
7948 @var{exp}.
7949
7950 This is the declarative counterpart of @code{gexp->file}.
7951 @end deffn
7952
7953 @deffn {Monadic Procedure} text-file* @var{name} @var{text} @dots{}
7954 Return as a monadic value a derivation that builds a text file
7955 containing all of @var{text}. @var{text} may list, in addition to
7956 strings, objects of any type that can be used in a gexp: packages,
7957 derivations, local file objects, etc. The resulting store file holds
7958 references to all these.
7959
7960 This variant should be preferred over @code{text-file} anytime the file
7961 to create will reference items from the store. This is typically the
7962 case when building a configuration file that embeds store file names,
7963 like this:
7964
7965 @lisp
7966 (define (profile.sh)
7967 ;; Return the name of a shell script in the store that
7968 ;; initializes the 'PATH' environment variable.
7969 (text-file* "profile.sh"
7970 "export PATH=" coreutils "/bin:"
7971 grep "/bin:" sed "/bin\n"))
7972 @end lisp
7973
7974 In this example, the resulting @file{/gnu/store/@dots{}-profile.sh} file
7975 will reference @var{coreutils}, @var{grep}, and @var{sed}, thereby
7976 preventing them from being garbage-collected during its lifetime.
7977 @end deffn
7978
7979 @deffn {Scheme Procedure} mixed-text-file @var{name} @var{text} @dots{}
7980 Return an object representing store file @var{name} containing
7981 @var{text}. @var{text} is a sequence of strings and file-like objects,
7982 as in:
7983
7984 @lisp
7985 (mixed-text-file "profile"
7986 "export PATH=" coreutils "/bin:" grep "/bin")
7987 @end lisp
7988
7989 This is the declarative counterpart of @code{text-file*}.
7990 @end deffn
7991
7992 @deffn {Scheme Procedure} file-union @var{name} @var{files}
7993 Return a @code{<computed-file>} that builds a directory containing all of @var{files}.
7994 Each item in @var{files} must be a two-element list where the first element is the
7995 file name to use in the new directory, and the second element is a gexp
7996 denoting the target file. Here's an example:
7997
7998 @lisp
7999 (file-union "etc"
8000 `(("hosts" ,(plain-file "hosts"
8001 "127.0.0.1 localhost"))
8002 ("bashrc" ,(plain-file "bashrc"
8003 "alias ls='ls --color=auto'"))))
8004 @end lisp
8005
8006 This yields an @code{etc} directory containing these two files.
8007 @end deffn
8008
8009 @deffn {Scheme Procedure} directory-union @var{name} @var{things}
8010 Return a directory that is the union of @var{things}, where @var{things} is a list of
8011 file-like objects denoting directories. For example:
8012
8013 @lisp
8014 (directory-union "guile+emacs" (list guile emacs))
8015 @end lisp
8016
8017 yields a directory that is the union of the @code{guile} and @code{emacs} packages.
8018 @end deffn
8019
8020 @deffn {Scheme Procedure} file-append @var{obj} @var{suffix} @dots{}
8021 Return a file-like object that expands to the concatenation of @var{obj}
8022 and @var{suffix}, where @var{obj} is a lowerable object and each
8023 @var{suffix} is a string.
8024
8025 As an example, consider this gexp:
8026
8027 @lisp
8028 (gexp->script "run-uname"
8029 #~(system* #$(file-append coreutils
8030 "/bin/uname")))
8031 @end lisp
8032
8033 The same effect could be achieved with:
8034
8035 @lisp
8036 (gexp->script "run-uname"
8037 #~(system* (string-append #$coreutils
8038 "/bin/uname")))
8039 @end lisp
8040
8041 There is one difference though: in the @code{file-append} case, the
8042 resulting script contains the absolute file name as a string, whereas in
8043 the second case, the resulting script contains a @code{(string-append
8044 @dots{})} expression to construct the file name @emph{at run time}.
8045 @end deffn
8046
8047 @deffn {Scheme Syntax} with-parameters ((@var{parameter} @var{value}) @dots{}) @var{exp}
8048 This macro is similar to the @code{parameterize} form for
8049 dynamically-bound @dfn{parameters} (@pxref{Parameters,,, guile, GNU
8050 Guile Reference Manual}). The key difference is that it takes effect
8051 when the file-like object returned by @var{exp} is lowered to a
8052 derivation or store item.
8053
8054 A typical use of @code{with-parameters} is to force the system in effect
8055 for a given object:
8056
8057 @lisp
8058 (with-parameters ((%current-system "i686-linux"))
8059 coreutils)
8060 @end lisp
8061
8062 The example above returns an object that corresponds to the i686 build
8063 of Coreutils, regardless of the current value of @code{%current-system}.
8064 @end deffn
8065
8066
8067 Of course, in addition to gexps embedded in ``host'' code, there are
8068 also modules containing build tools. To make it clear that they are
8069 meant to be used in the build stratum, these modules are kept in the
8070 @code{(guix build @dots{})} name space.
8071
8072 @cindex lowering, of high-level objects in gexps
8073 Internally, high-level objects are @dfn{lowered}, using their compiler,
8074 to either derivations or store items. For instance, lowering a package
8075 yields a derivation, and lowering a @code{plain-file} yields a store
8076 item. This is achieved using the @code{lower-object} monadic procedure.
8077
8078 @deffn {Monadic Procedure} lower-object @var{obj} [@var{system}] @
8079 [#:target #f]
8080 Return as a value in @code{%store-monad} the derivation or store item
8081 corresponding to @var{obj} for @var{system}, cross-compiling for
8082 @var{target} if @var{target} is true. @var{obj} must be an object that
8083 has an associated gexp compiler, such as a @code{<package>}.
8084 @end deffn
8085
8086 @node Invoking guix repl
8087 @section Invoking @command{guix repl}
8088
8089 @cindex REPL, read-eval-print loop
8090 The @command{guix repl} command spawns a Guile @dfn{read-eval-print loop}
8091 (REPL) for interactive programming (@pxref{Using Guile Interactively,,, guile,
8092 GNU Guile Reference Manual}). Compared to just launching the @command{guile}
8093 command, @command{guix repl} guarantees that all the Guix modules and all its
8094 dependencies are available in the search path. You can use it this way:
8095
8096 @example
8097 $ guix repl
8098 scheme@@(guile-user)> ,use (gnu packages base)
8099 scheme@@(guile-user)> coreutils
8100 $1 = #<package coreutils@@8.29 gnu/packages/base.scm:327 3e28300>
8101 @end example
8102
8103 @cindex inferiors
8104 In addition, @command{guix repl} implements a simple machine-readable REPL
8105 protocol for use by @code{(guix inferior)}, a facility to interact with
8106 @dfn{inferiors}, separate processes running a potentially different revision
8107 of Guix.
8108
8109 The available options are as follows:
8110
8111 @table @code
8112 @item --type=@var{type}
8113 @itemx -t @var{type}
8114 Start a REPL of the given @var{TYPE}, which can be one of the following:
8115
8116 @table @code
8117 @item guile
8118 This is default, and it spawns a standard full-featured Guile REPL.
8119 @item machine
8120 Spawn a REPL that uses the machine-readable protocol. This is the protocol
8121 that the @code{(guix inferior)} module speaks.
8122 @end table
8123
8124 @item --listen=@var{endpoint}
8125 By default, @command{guix repl} reads from standard input and writes to
8126 standard output. When this option is passed, it will instead listen for
8127 connections on @var{endpoint}. Here are examples of valid options:
8128
8129 @table @code
8130 @item --listen=tcp:37146
8131 Accept connections on localhost on port 37146.
8132
8133 @item --listen=unix:/tmp/socket
8134 Accept connections on the Unix-domain socket @file{/tmp/socket}.
8135 @end table
8136
8137 @item --load-path=@var{directory}
8138 @itemx -L @var{directory}
8139 Add @var{directory} to the front of the package module search path
8140 (@pxref{Package Modules}).
8141
8142 This allows users to define their own packages and make them visible to
8143 the command-line tool.
8144
8145 @item -q
8146 Inhibit loading of the @file{~/.guile} file. By default, that
8147 configuration file is loaded when spawning a @code{guile} REPL.
8148 @end table
8149
8150 @c *********************************************************************
8151 @node Utilities
8152 @chapter Utilities
8153
8154 This section describes Guix command-line utilities. Some of them are
8155 primarily targeted at developers and users who write new package
8156 definitions, while others are more generally useful. They complement
8157 the Scheme programming interface of Guix in a convenient way.
8158
8159 @menu
8160 * Invoking guix build:: Building packages from the command line.
8161 * Invoking guix edit:: Editing package definitions.
8162 * Invoking guix download:: Downloading a file and printing its hash.
8163 * Invoking guix hash:: Computing the cryptographic hash of a file.
8164 * Invoking guix import:: Importing package definitions.
8165 * Invoking guix refresh:: Updating package definitions.
8166 * Invoking guix lint:: Finding errors in package definitions.
8167 * Invoking guix size:: Profiling disk usage.
8168 * Invoking guix graph:: Visualizing the graph of packages.
8169 * Invoking guix publish:: Sharing substitutes.
8170 * Invoking guix challenge:: Challenging substitute servers.
8171 * Invoking guix copy:: Copying to and from a remote store.
8172 * Invoking guix container:: Process isolation.
8173 * Invoking guix weather:: Assessing substitute availability.
8174 * Invoking guix processes:: Listing client processes.
8175 @end menu
8176
8177 @node Invoking guix build
8178 @section Invoking @command{guix build}
8179
8180 @cindex package building
8181 @cindex @command{guix build}
8182 The @command{guix build} command builds packages or derivations and
8183 their dependencies, and prints the resulting store paths. Note that it
8184 does not modify the user's profile---this is the job of the
8185 @command{guix package} command (@pxref{Invoking guix package}). Thus,
8186 it is mainly useful for distribution developers.
8187
8188 The general syntax is:
8189
8190 @example
8191 guix build @var{options} @var{package-or-derivation}@dots{}
8192 @end example
8193
8194 As an example, the following command builds the latest versions of Emacs
8195 and of Guile, displays their build logs, and finally displays the
8196 resulting directories:
8197
8198 @example
8199 guix build emacs guile
8200 @end example
8201
8202 Similarly, the following command builds all the available packages:
8203
8204 @example
8205 guix build --quiet --keep-going \
8206 `guix package -A | cut -f1,2 --output-delimiter=@@`
8207 @end example
8208
8209 @var{package-or-derivation} may be either the name of a package found in
8210 the software distribution such as @code{coreutils} or
8211 @code{coreutils@@8.20}, or a derivation such as
8212 @file{/gnu/store/@dots{}-coreutils-8.19.drv}. In the former case, a
8213 package with the corresponding name (and optionally version) is searched
8214 for among the GNU distribution modules (@pxref{Package Modules}).
8215
8216 Alternatively, the @code{--expression} option may be used to specify a
8217 Scheme expression that evaluates to a package; this is useful when
8218 disambiguating among several same-named packages or package variants is
8219 needed.
8220
8221 There may be zero or more @var{options}. The available options are
8222 described in the subsections below.
8223
8224 @menu
8225 * Common Build Options:: Build options for most commands.
8226 * Package Transformation Options:: Creating variants of packages.
8227 * Additional Build Options:: Options specific to 'guix build'.
8228 * Debugging Build Failures:: Real life packaging experience.
8229 @end menu
8230
8231 @node Common Build Options
8232 @subsection Common Build Options
8233
8234 A number of options that control the build process are common to
8235 @command{guix build} and other commands that can spawn builds, such as
8236 @command{guix package} or @command{guix archive}. These are the
8237 following:
8238
8239 @table @code
8240
8241 @item --load-path=@var{directory}
8242 @itemx -L @var{directory}
8243 Add @var{directory} to the front of the package module search path
8244 (@pxref{Package Modules}).
8245
8246 This allows users to define their own packages and make them visible to
8247 the command-line tools.
8248
8249 @item --keep-failed
8250 @itemx -K
8251 Keep the build tree of failed builds. Thus, if a build fails, its build
8252 tree is kept under @file{/tmp}, in a directory whose name is shown at
8253 the end of the build log. This is useful when debugging build issues.
8254 @xref{Debugging Build Failures}, for tips and tricks on how to debug
8255 build issues.
8256
8257 This option implies @option{--no-offload}, and it has no effect when
8258 connecting to a remote daemon with a @code{guix://} URI (@pxref{The
8259 Store, the @code{GUIX_DAEMON_SOCKET} variable}).
8260
8261 @item --keep-going
8262 @itemx -k
8263 Keep going when some of the derivations fail to build; return only once
8264 all the builds have either completed or failed.
8265
8266 The default behavior is to stop as soon as one of the specified
8267 derivations has failed.
8268
8269 @item --dry-run
8270 @itemx -n
8271 Do not build the derivations.
8272
8273 @anchor{fallback-option}
8274 @item --fallback
8275 When substituting a pre-built binary fails, fall back to building
8276 packages locally (@pxref{Substitution Failure}).
8277
8278 @item --substitute-urls=@var{urls}
8279 @anchor{client-substitute-urls}
8280 Consider @var{urls} the whitespace-separated list of substitute source
8281 URLs, overriding the default list of URLs of @command{guix-daemon}
8282 (@pxref{daemon-substitute-urls,, @command{guix-daemon} URLs}).
8283
8284 This means that substitutes may be downloaded from @var{urls}, provided
8285 they are signed by a key authorized by the system administrator
8286 (@pxref{Substitutes}).
8287
8288 When @var{urls} is the empty string, substitutes are effectively
8289 disabled.
8290
8291 @item --no-substitutes
8292 Do not use substitutes for build products. That is, always build things
8293 locally instead of allowing downloads of pre-built binaries
8294 (@pxref{Substitutes}).
8295
8296 @item --no-grafts
8297 Do not ``graft'' packages. In practice, this means that package updates
8298 available as grafts are not applied. @xref{Security Updates}, for more
8299 information on grafts.
8300
8301 @item --rounds=@var{n}
8302 Build each derivation @var{n} times in a row, and raise an error if
8303 consecutive build results are not bit-for-bit identical.
8304
8305 This is a useful way to detect non-deterministic builds processes.
8306 Non-deterministic build processes are a problem because they make it
8307 practically impossible for users to @emph{verify} whether third-party
8308 binaries are genuine. @xref{Invoking guix challenge}, for more.
8309
8310 Note that, currently, the differing build results are not kept around,
8311 so you will have to manually investigate in case of an error---e.g., by
8312 stashing one of the build results with @code{guix archive --export}
8313 (@pxref{Invoking guix archive}), then rebuilding, and finally comparing
8314 the two results.
8315
8316 @item --no-offload
8317 Do not use offload builds to other machines (@pxref{Daemon Offload
8318 Setup}). That is, always build things locally instead of offloading
8319 builds to remote machines.
8320
8321 @item --max-silent-time=@var{seconds}
8322 When the build or substitution process remains silent for more than
8323 @var{seconds}, terminate it and report a build failure.
8324
8325 By default, the daemon's setting is honored (@pxref{Invoking
8326 guix-daemon, @code{--max-silent-time}}).
8327
8328 @item --timeout=@var{seconds}
8329 Likewise, when the build or substitution process lasts for more than
8330 @var{seconds}, terminate it and report a build failure.
8331
8332 By default, the daemon's setting is honored (@pxref{Invoking
8333 guix-daemon, @code{--timeout}}).
8334
8335 @c Note: This option is actually not part of %standard-build-options but
8336 @c most programs honor it.
8337 @cindex verbosity, of the command-line tools
8338 @cindex build logs, verbosity
8339 @item -v @var{level}
8340 @itemx --verbosity=@var{level}
8341 Use the given verbosity @var{level}, an integer. Choosing 0 means that no
8342 output is produced, 1 is for quiet output, and 2 shows all the build log
8343 output on standard error.
8344
8345 @item --cores=@var{n}
8346 @itemx -c @var{n}
8347 Allow the use of up to @var{n} CPU cores for the build. The special
8348 value @code{0} means to use as many CPU cores as available.
8349
8350 @item --max-jobs=@var{n}
8351 @itemx -M @var{n}
8352 Allow at most @var{n} build jobs in parallel. @xref{Invoking
8353 guix-daemon, @code{--max-jobs}}, for details about this option and the
8354 equivalent @command{guix-daemon} option.
8355
8356 @item --debug=@var{level}
8357 Produce debugging output coming from the build daemon. @var{level} must be an
8358 integer between 0 and 5; higher means more verbose output. Setting a level of
8359 4 or more may be helpful when debugging setup issues with the build daemon.
8360
8361 @end table
8362
8363 Behind the scenes, @command{guix build} is essentially an interface to
8364 the @code{package-derivation} procedure of the @code{(guix packages)}
8365 module, and to the @code{build-derivations} procedure of the @code{(guix
8366 derivations)} module.
8367
8368 In addition to options explicitly passed on the command line,
8369 @command{guix build} and other @command{guix} commands that support
8370 building honor the @code{GUIX_BUILD_OPTIONS} environment variable.
8371
8372 @defvr {Environment Variable} GUIX_BUILD_OPTIONS
8373 Users can define this variable to a list of command line options that
8374 will automatically be used by @command{guix build} and other
8375 @command{guix} commands that can perform builds, as in the example
8376 below:
8377
8378 @example
8379 $ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
8380 @end example
8381
8382 These options are parsed independently, and the result is appended to
8383 the parsed command-line options.
8384 @end defvr
8385
8386
8387 @node Package Transformation Options
8388 @subsection Package Transformation Options
8389
8390 @cindex package variants
8391 Another set of command-line options supported by @command{guix build}
8392 and also @command{guix package} are @dfn{package transformation
8393 options}. These are options that make it possible to define @dfn{package
8394 variants}---for instance, packages built from different source code.
8395 This is a convenient way to create customized packages on the fly
8396 without having to type in the definitions of package variants
8397 (@pxref{Defining Packages}).
8398
8399 @table @code
8400
8401 @item --with-source=@var{source}
8402 @itemx --with-source=@var{package}=@var{source}
8403 @itemx --with-source=@var{package}@@@var{version}=@var{source}
8404 Use @var{source} as the source of @var{package}, and @var{version} as
8405 its version number.
8406 @var{source} must be a file name or a URL, as for @command{guix
8407 download} (@pxref{Invoking guix download}).
8408
8409 When @var{package} is omitted,
8410 it is taken to be the package name specified on the
8411 command line that matches the base of @var{source}---e.g.,
8412 if @var{source} is @code{/src/guile-2.0.10.tar.gz}, the corresponding
8413 package is @code{guile}.
8414
8415 Likewise, when @var{version} is omitted, the version string is inferred from
8416 @var{source}; in the previous example, it is @code{2.0.10}.
8417
8418 This option allows users to try out versions of packages other than the
8419 one provided by the distribution. The example below downloads
8420 @file{ed-1.7.tar.gz} from a GNU mirror and uses that as the source for
8421 the @code{ed} package:
8422
8423 @example
8424 guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
8425 @end example
8426
8427 As a developer, @code{--with-source} makes it easy to test release
8428 candidates:
8429
8430 @example
8431 guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
8432 @end example
8433
8434 @dots{} or to build from a checkout in a pristine environment:
8435
8436 @example
8437 $ git clone git://git.sv.gnu.org/guix.git
8438 $ guix build guix --with-source=guix@@1.0=./guix
8439 @end example
8440
8441 @item --with-input=@var{package}=@var{replacement}
8442 Replace dependency on @var{package} by a dependency on
8443 @var{replacement}. @var{package} must be a package name, and
8444 @var{replacement} must be a package specification such as @code{guile}
8445 or @code{guile@@1.8}.
8446
8447 For instance, the following command builds Guix, but replaces its
8448 dependency on the current stable version of Guile with a dependency on
8449 the legacy version of Guile, @code{guile@@2.0}:
8450
8451 @example
8452 guix build --with-input=guile=guile@@2.0 guix
8453 @end example
8454
8455 This is a recursive, deep replacement. So in this example, both
8456 @code{guix} and its dependency @code{guile-json} (which also depends on
8457 @code{guile}) get rebuilt against @code{guile@@2.0}.
8458
8459 This is implemented using the @code{package-input-rewriting} Scheme
8460 procedure (@pxref{Defining Packages, @code{package-input-rewriting}}).
8461
8462 @item --with-graft=@var{package}=@var{replacement}
8463 This is similar to @code{--with-input} but with an important difference:
8464 instead of rebuilding the whole dependency chain, @var{replacement} is
8465 built and then @dfn{grafted} onto the binaries that were initially
8466 referring to @var{package}. @xref{Security Updates}, for more
8467 information on grafts.
8468
8469 For example, the command below grafts version 3.5.4 of GnuTLS onto Wget
8470 and all its dependencies, replacing references to the version of GnuTLS
8471 they currently refer to:
8472
8473 @example
8474 guix build --with-graft=gnutls=gnutls@@3.5.4 wget
8475 @end example
8476
8477 This has the advantage of being much faster than rebuilding everything.
8478 But there is a caveat: it works if and only if @var{package} and
8479 @var{replacement} are strictly compatible---for example, if they provide
8480 a library, the application binary interface (ABI) of those libraries
8481 must be compatible. If @var{replacement} is somehow incompatible with
8482 @var{package}, then the resulting package may be unusable. Use with
8483 care!
8484
8485 @item --with-git-url=@var{package}=@var{url}
8486 @cindex Git, using the latest commit
8487 @cindex latest commit, building
8488 Build @var{package} from the latest commit of the @code{master} branch of the
8489 Git repository at @var{url}. Git sub-modules of the repository are fetched,
8490 recursively.
8491
8492 For example, the following command builds the NumPy Python library against the
8493 latest commit of the master branch of Python itself:
8494
8495 @example
8496 guix build python-numpy \
8497 --with-git-url=python=https://github.com/python/cpython
8498 @end example
8499
8500 This option can also be combined with @code{--with-branch} or
8501 @code{--with-commit} (see below).
8502
8503 @cindex continuous integration
8504 Obviously, since it uses the latest commit of the given branch, the result of
8505 such a command varies over time. Nevertheless it is a convenient way to
8506 rebuild entire software stacks against the latest commit of one or more
8507 packages. This is particularly useful in the context of continuous
8508 integration (CI).
8509
8510 Checkouts are kept in a cache under @file{~/.cache/guix/checkouts} to speed up
8511 consecutive accesses to the same repository. You may want to clean it up once
8512 in a while to save disk space.
8513
8514 @item --with-branch=@var{package}=@var{branch}
8515 Build @var{package} from the latest commit of @var{branch}. If the
8516 @code{source} field of @var{package} is an origin with the @code{git-fetch}
8517 method (@pxref{origin Reference}) or a @code{git-checkout} object, the
8518 repository URL is taken from that @code{source}. Otherwise you have to use
8519 @code{--with-git-url} to specify the URL of the Git repository.
8520
8521 For instance, the following command builds @code{guile-sqlite3} from the
8522 latest commit of its @code{master} branch, and then builds @code{guix} (which
8523 depends on it) and @code{cuirass} (which depends on @code{guix}) against this
8524 specific @code{guile-sqlite3} build:
8525
8526 @example
8527 guix build --with-branch=guile-sqlite3=master cuirass
8528 @end example
8529
8530 @item --with-commit=@var{package}=@var{commit}
8531 This is similar to @code{--with-branch}, except that it builds from
8532 @var{commit} rather than the tip of a branch. @var{commit} must be a valid
8533 Git commit SHA1 identifier or a tag.
8534 @end table
8535
8536 @node Additional Build Options
8537 @subsection Additional Build Options
8538
8539 The command-line options presented below are specific to @command{guix
8540 build}.
8541
8542 @table @code
8543
8544 @item --quiet
8545 @itemx -q
8546 Build quietly, without displaying the build log; this is equivalent to
8547 @code{--verbosity=0}. Upon completion, the build log is kept in @file{/var}
8548 (or similar) and can always be retrieved using the @option{--log-file} option.
8549
8550 @item --file=@var{file}
8551 @itemx -f @var{file}
8552 Build the package, derivation, or other file-like object that the code within
8553 @var{file} evaluates to (@pxref{G-Expressions, file-like objects}).
8554
8555 As an example, @var{file} might contain a package definition like this
8556 (@pxref{Defining Packages}):
8557
8558 @lisp
8559 @include package-hello.scm
8560 @end lisp
8561
8562 The @var{file} may also contain a JSON representation of one or more
8563 package definitions. Running @code{guix build -f} on @file{hello.json}
8564 with the following contents would result in building the packages
8565 @code{myhello} and @code{greeter}:
8566
8567 @example
8568 @verbatiminclude package-hello.json
8569 @end example
8570
8571 @item --manifest=@var{manifest}
8572 @itemx -m @var{manifest}
8573 Build all packages listed in the given @var{manifest}
8574 (@pxref{profile-manifest, @option{--manifest}}).
8575
8576 @item --expression=@var{expr}
8577 @itemx -e @var{expr}
8578 Build the package or derivation @var{expr} evaluates to.
8579
8580 For example, @var{expr} may be @code{(@@ (gnu packages guile)
8581 guile-1.8)}, which unambiguously designates this specific variant of
8582 version 1.8 of Guile.
8583
8584 Alternatively, @var{expr} may be a G-expression, in which case it is used
8585 as a build program passed to @code{gexp->derivation}
8586 (@pxref{G-Expressions}).
8587
8588 Lastly, @var{expr} may refer to a zero-argument monadic procedure
8589 (@pxref{The Store Monad}). The procedure must return a derivation as a
8590 monadic value, which is then passed through @code{run-with-store}.
8591
8592 @item --source
8593 @itemx -S
8594 Build the source derivations of the packages, rather than the packages
8595 themselves.
8596
8597 For instance, @code{guix build -S gcc} returns something like
8598 @file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, which is the GCC
8599 source tarball.
8600
8601 The returned source tarball is the result of applying any patches and
8602 code snippets specified in the package @code{origin} (@pxref{Defining
8603 Packages}).
8604
8605 Note that @command{guix build -S} compiles the sources only of the
8606 specified packages. They do not include the sources of statically
8607 linked dependencies and by themselves are insufficient for reproducing
8608 the packages.
8609
8610 @item --sources
8611 Fetch and return the source of @var{package-or-derivation} and all their
8612 dependencies, recursively. This is a handy way to obtain a local copy
8613 of all the source code needed to build @var{packages}, allowing you to
8614 eventually build them even without network access. It is an extension
8615 of the @code{--source} option and can accept one of the following
8616 optional argument values:
8617
8618 @table @code
8619 @item package
8620 This value causes the @code{--sources} option to behave in the same way
8621 as the @code{--source} option.
8622
8623 @item all
8624 Build the source derivations of all packages, including any source that
8625 might be listed as @code{inputs}. This is the default value.
8626
8627 @example
8628 $ guix build --sources tzdata
8629 The following derivations will be built:
8630 /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
8631 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
8632 @end example
8633
8634 @item transitive
8635 Build the source derivations of all packages, as well of all transitive
8636 inputs to the packages. This can be used e.g.@: to
8637 prefetch package source for later offline building.
8638
8639 @example
8640 $ guix build --sources=transitive tzdata
8641 The following derivations will be built:
8642 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
8643 /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
8644 /gnu/store/@dots{}-grep-2.21.tar.xz.drv
8645 /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
8646 /gnu/store/@dots{}-make-4.1.tar.xz.drv
8647 /gnu/store/@dots{}-bash-4.3.tar.xz.drv
8648 @dots{}
8649 @end example
8650
8651 @end table
8652
8653 @item --system=@var{system}
8654 @itemx -s @var{system}
8655 Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
8656 the system type of the build host. The @command{guix build} command allows
8657 you to repeat this option several times, in which case it builds for all the
8658 specified systems; other commands ignore extraneous @option{-s} options.
8659
8660 @quotation Note
8661 The @code{--system} flag is for @emph{native} compilation and must not
8662 be confused with cross-compilation. See @code{--target} below for
8663 information on cross-compilation.
8664 @end quotation
8665
8666 An example use of this is on Linux-based systems, which can emulate
8667 different personalities. For instance, passing
8668 @code{--system=i686-linux} on an @code{x86_64-linux} system or
8669 @code{--system=armhf-linux} on an @code{aarch64-linux} system allows you
8670 to build packages in a complete 32-bit environment.
8671
8672 @quotation Note
8673 Building for an @code{armhf-linux} system is unconditionally enabled on
8674 @code{aarch64-linux} machines, although certain aarch64 chipsets do not
8675 allow for this functionality, notably the ThunderX.
8676 @end quotation
8677
8678 Similarly, when transparent emulation with QEMU and @code{binfmt_misc}
8679 is enabled (@pxref{Virtualization Services,
8680 @code{qemu-binfmt-service-type}}), you can build for any system for
8681 which a QEMU @code{binfmt_misc} handler is installed.
8682
8683 Builds for a system other than that of the machine you are using can
8684 also be offloaded to a remote machine of the right architecture.
8685 @xref{Daemon Offload Setup}, for more information on offloading.
8686
8687 @item --target=@var{triplet}
8688 @cindex cross-compilation
8689 Cross-build for @var{triplet}, which must be a valid GNU triplet, such
8690 as @code{"mips64el-linux-gnu"} (@pxref{Specifying Target Triplets, GNU
8691 configuration triplets,, autoconf, Autoconf}).
8692
8693 @anchor{build-check}
8694 @item --check
8695 @cindex determinism, checking
8696 @cindex reproducibility, checking
8697 Rebuild @var{package-or-derivation}, which are already available in the
8698 store, and raise an error if the build results are not bit-for-bit
8699 identical.
8700
8701 This mechanism allows you to check whether previously installed
8702 substitutes are genuine (@pxref{Substitutes}), or whether the build result
8703 of a package is deterministic. @xref{Invoking guix challenge}, for more
8704 background information and tools.
8705
8706 When used in conjunction with @option{--keep-failed}, the differing
8707 output is kept in the store, under @file{/gnu/store/@dots{}-check}.
8708 This makes it easy to look for differences between the two results.
8709
8710 @item --repair
8711 @cindex repairing store items
8712 @cindex corruption, recovering from
8713 Attempt to repair the specified store items, if they are corrupt, by
8714 re-downloading or rebuilding them.
8715
8716 This operation is not atomic and thus restricted to @code{root}.
8717
8718 @item --derivations
8719 @itemx -d
8720 Return the derivation paths, not the output paths, of the given
8721 packages.
8722
8723 @item --root=@var{file}
8724 @itemx -r @var{file}
8725 @cindex GC roots, adding
8726 @cindex garbage collector roots, adding
8727 Make @var{file} a symlink to the result, and register it as a garbage
8728 collector root.
8729
8730 Consequently, the results of this @command{guix build} invocation are
8731 protected from garbage collection until @var{file} is removed. When
8732 that option is omitted, build results are eligible for garbage
8733 collection as soon as the build completes. @xref{Invoking guix gc}, for
8734 more on GC roots.
8735
8736 @item --log-file
8737 @cindex build logs, access
8738 Return the build log file names or URLs for the given
8739 @var{package-or-derivation}, or raise an error if build logs are
8740 missing.
8741
8742 This works regardless of how packages or derivations are specified. For
8743 instance, the following invocations are equivalent:
8744
8745 @example
8746 guix build --log-file `guix build -d guile`
8747 guix build --log-file `guix build guile`
8748 guix build --log-file guile
8749 guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
8750 @end example
8751
8752 If a log is unavailable locally, and unless @code{--no-substitutes} is
8753 passed, the command looks for a corresponding log on one of the
8754 substitute servers (as specified with @code{--substitute-urls}.)
8755
8756 So for instance, imagine you want to see the build log of GDB on MIPS,
8757 but you are actually on an @code{x86_64} machine:
8758
8759 @example
8760 $ guix build --log-file gdb -s mips64el-linux
8761 https://@value{SUBSTITUTE-SERVER}/log/@dots{}-gdb-7.10
8762 @end example
8763
8764 You can freely access a huge library of build logs!
8765 @end table
8766
8767 @node Debugging Build Failures
8768 @subsection Debugging Build Failures
8769
8770 @cindex build failures, debugging
8771 When defining a new package (@pxref{Defining Packages}), you will
8772 probably find yourself spending some time debugging and tweaking the
8773 build until it succeeds. To do that, you need to operate the build
8774 commands yourself in an environment as close as possible to the one the
8775 build daemon uses.
8776
8777 To that end, the first thing to do is to use the @option{--keep-failed}
8778 or @option{-K} option of @command{guix build}, which will keep the
8779 failed build tree in @file{/tmp} or whatever directory you specified as
8780 @code{TMPDIR} (@pxref{Invoking guix build, @code{--keep-failed}}).
8781
8782 From there on, you can @command{cd} to the failed build tree and source
8783 the @file{environment-variables} file, which contains all the
8784 environment variable definitions that were in place when the build
8785 failed. So let's say you're debugging a build failure in package
8786 @code{foo}; a typical session would look like this:
8787
8788 @example
8789 $ guix build foo -K
8790 @dots{} @i{build fails}
8791 $ cd /tmp/guix-build-foo.drv-0
8792 $ source ./environment-variables
8793 $ cd foo-1.2
8794 @end example
8795
8796 Now, you can invoke commands as if you were the daemon (almost) and
8797 troubleshoot your build process.
8798
8799 Sometimes it happens that, for example, a package's tests pass when you
8800 run them manually but they fail when the daemon runs them. This can
8801 happen because the daemon runs builds in containers where, unlike in our
8802 environment above, network access is missing, @file{/bin/sh} does not
8803 exist, etc. (@pxref{Build Environment Setup}).
8804
8805 In such cases, you may need to run inspect the build process from within
8806 a container similar to the one the build daemon creates:
8807
8808 @example
8809 $ guix build -K foo
8810 @dots{}
8811 $ cd /tmp/guix-build-foo.drv-0
8812 $ guix environment --no-grafts -C foo --ad-hoc strace gdb
8813 [env]# source ./environment-variables
8814 [env]# cd foo-1.2
8815 @end example
8816
8817 Here, @command{guix environment -C} creates a container and spawns a new
8818 shell in it (@pxref{Invoking guix environment}). The @command{--ad-hoc
8819 strace gdb} part adds the @command{strace} and @command{gdb} commands to
8820 the container, which would may find handy while debugging. The
8821 @option{--no-grafts} option makes sure we get the exact same
8822 environment, with ungrafted packages (@pxref{Security Updates}, for more
8823 info on grafts).
8824
8825 To get closer to a container like that used by the build daemon, we can
8826 remove @file{/bin/sh}:
8827
8828 @example
8829 [env]# rm /bin/sh
8830 @end example
8831
8832 (Don't worry, this is harmless: this is all happening in the throw-away
8833 container created by @command{guix environment}.)
8834
8835 The @command{strace} command is probably not in the search path, but we
8836 can run:
8837
8838 @example
8839 [env]# $GUIX_ENVIRONMENT/bin/strace -f -o log make check
8840 @end example
8841
8842 In this way, not only you will have reproduced the environment variables
8843 the daemon uses, you will also be running the build process in a container
8844 similar to the one the daemon uses.
8845
8846
8847 @node Invoking guix edit
8848 @section Invoking @command{guix edit}
8849
8850 @cindex @command{guix edit}
8851 @cindex package definition, editing
8852 So many packages, so many source files! The @command{guix edit} command
8853 facilitates the life of users and packagers by pointing their editor at
8854 the source file containing the definition of the specified packages.
8855 For instance:
8856
8857 @example
8858 guix edit gcc@@4.9 vim
8859 @end example
8860
8861 @noindent
8862 launches the program specified in the @code{VISUAL} or in the
8863 @code{EDITOR} environment variable to view the recipe of GCC@tie{}4.9.3
8864 and that of Vim.
8865
8866 If you are using a Guix Git checkout (@pxref{Building from Git}), or
8867 have created your own packages on @code{GUIX_PACKAGE_PATH}
8868 (@pxref{Package Modules}), you will be able to edit the package
8869 recipes. In other cases, you will be able to examine the read-only recipes
8870 for packages currently in the store.
8871
8872 Instead of @code{GUIX_PACKAGE_PATH}, the command-line option
8873 @code{--load-path=@var{directory}} (or in short @code{-L
8874 @var{directory}}) allows you to add @var{directory} to the front of the
8875 package module search path and so make your own packages visible.
8876
8877 @node Invoking guix download
8878 @section Invoking @command{guix download}
8879
8880 @cindex @command{guix download}
8881 @cindex downloading package sources
8882 When writing a package definition, developers typically need to download
8883 a source tarball, compute its SHA256 hash, and write that
8884 hash in the package definition (@pxref{Defining Packages}). The
8885 @command{guix download} tool helps with this task: it downloads a file
8886 from the given URI, adds it to the store, and prints both its file name
8887 in the store and its SHA256 hash.
8888
8889 The fact that the downloaded file is added to the store saves bandwidth:
8890 when the developer eventually tries to build the newly defined package
8891 with @command{guix build}, the source tarball will not have to be
8892 downloaded again because it is already in the store. It is also a
8893 convenient way to temporarily stash files, which may be deleted
8894 eventually (@pxref{Invoking guix gc}).
8895
8896 The @command{guix download} command supports the same URIs as used in
8897 package definitions. In particular, it supports @code{mirror://} URIs.
8898 @code{https} URIs (HTTP over TLS) are supported @emph{provided} the
8899 Guile bindings for GnuTLS are available in the user's environment; when
8900 they are not available, an error is raised. @xref{Guile Preparations,
8901 how to install the GnuTLS bindings for Guile,, gnutls-guile,
8902 GnuTLS-Guile}, for more information.
8903
8904 @command{guix download} verifies HTTPS server certificates by loading
8905 the certificates of X.509 authorities from the directory pointed to by
8906 the @code{SSL_CERT_DIR} environment variable (@pxref{X.509
8907 Certificates}), unless @option{--no-check-certificate} is used.
8908
8909 The following options are available:
8910
8911 @table @code
8912 @item --format=@var{fmt}
8913 @itemx -f @var{fmt}
8914 Write the hash in the format specified by @var{fmt}. For more
8915 information on the valid values for @var{fmt}, @pxref{Invoking guix hash}.
8916
8917 @item --no-check-certificate
8918 Do not validate the X.509 certificates of HTTPS servers.
8919
8920 When using this option, you have @emph{absolutely no guarantee} that you
8921 are communicating with the authentic server responsible for the given
8922 URL, which makes you vulnerable to ``man-in-the-middle'' attacks.
8923
8924 @item --output=@var{file}
8925 @itemx -o @var{file}
8926 Save the downloaded file to @var{file} instead of adding it to the
8927 store.
8928 @end table
8929
8930 @node Invoking guix hash
8931 @section Invoking @command{guix hash}
8932
8933 @cindex @command{guix hash}
8934 The @command{guix hash} command computes the SHA256 hash of a file.
8935 It is primarily a convenience tool for anyone contributing to the
8936 distribution: it computes the cryptographic hash of a file, which can be
8937 used in the definition of a package (@pxref{Defining Packages}).
8938
8939 The general syntax is:
8940
8941 @example
8942 guix hash @var{option} @var{file}
8943 @end example
8944
8945 When @var{file} is @code{-} (a hyphen), @command{guix hash} computes the
8946 hash of data read from standard input. @command{guix hash} has the
8947 following options:
8948
8949 @table @code
8950
8951 @item --format=@var{fmt}
8952 @itemx -f @var{fmt}
8953 Write the hash in the format specified by @var{fmt}.
8954
8955 Supported formats: @code{nix-base32}, @code{base32}, @code{base16}
8956 (@code{hex} and @code{hexadecimal} can be used as well).
8957
8958 If the @option{--format} option is not specified, @command{guix hash}
8959 will output the hash in @code{nix-base32}. This representation is used
8960 in the definitions of packages.
8961
8962 @item --recursive
8963 @itemx -r
8964 Compute the hash on @var{file} recursively.
8965
8966 In this case, the hash is computed on an archive containing @var{file},
8967 including its children if it is a directory. Some of the metadata of
8968 @var{file} is part of the archive; for instance, when @var{file} is a
8969 regular file, the hash is different depending on whether @var{file} is
8970 executable or not. Metadata such as time stamps has no impact on the
8971 hash (@pxref{Invoking guix archive}).
8972 @c FIXME: Replace xref above with xref to an ``Archive'' section when
8973 @c it exists.
8974
8975 @item --exclude-vcs
8976 @itemx -x
8977 When combined with @option{--recursive}, exclude version control system
8978 directories (@file{.bzr}, @file{.git}, @file{.hg}, etc.)
8979
8980 @vindex git-fetch
8981 As an example, here is how you would compute the hash of a Git checkout,
8982 which is useful when using the @code{git-fetch} method (@pxref{origin
8983 Reference}):
8984
8985 @example
8986 $ git clone http://example.org/foo.git
8987 $ cd foo
8988 $ guix hash -rx .
8989 @end example
8990 @end table
8991
8992 @node Invoking guix import
8993 @section Invoking @command{guix import}
8994
8995 @cindex importing packages
8996 @cindex package import
8997 @cindex package conversion
8998 @cindex Invoking @command{guix import}
8999 The @command{guix import} command is useful for people who would like to
9000 add a package to the distribution with as little work as
9001 possible---a legitimate demand. The command knows of a few
9002 repositories from which it can ``import'' package metadata. The result
9003 is a package definition, or a template thereof, in the format we know
9004 (@pxref{Defining Packages}).
9005
9006 The general syntax is:
9007
9008 @example
9009 guix import @var{importer} @var{options}@dots{}
9010 @end example
9011
9012 @var{importer} specifies the source from which to import package
9013 metadata, and @var{options} specifies a package identifier and other
9014 options specific to @var{importer}.
9015
9016 Some of the importers rely on the ability to run the @command{gpgv} command.
9017 For these, GnuPG must be installed and in @code{$PATH}; run @code{guix install
9018 gnupg} if needed.
9019
9020 Currently, the available ``importers'' are:
9021
9022 @table @code
9023 @item gnu
9024 Import metadata for the given GNU package. This provides a template
9025 for the latest version of that GNU package, including the hash of its
9026 source tarball, and its canonical synopsis and description.
9027
9028 Additional information such as the package dependencies and its
9029 license needs to be figured out manually.
9030
9031 For example, the following command returns a package definition for
9032 GNU@tie{}Hello:
9033
9034 @example
9035 guix import gnu hello
9036 @end example
9037
9038 Specific command-line options are:
9039
9040 @table @code
9041 @item --key-download=@var{policy}
9042 As for @code{guix refresh}, specify the policy to handle missing OpenPGP
9043 keys when verifying the package signature. @xref{Invoking guix
9044 refresh, @code{--key-download}}.
9045 @end table
9046
9047 @item pypi
9048 @cindex pypi
9049 Import metadata from the @uref{https://pypi.python.org/, Python Package
9050 Index}. Information is taken from the JSON-formatted description
9051 available at @code{pypi.python.org} and usually includes all the relevant
9052 information, including package dependencies. For maximum efficiency, it
9053 is recommended to install the @command{unzip} utility, so that the
9054 importer can unzip Python wheels and gather data from them.
9055
9056 The command below imports metadata for the @code{itsdangerous} Python
9057 package:
9058
9059 @example
9060 guix import pypi itsdangerous
9061 @end example
9062
9063 @table @code
9064 @item --recursive
9065 @itemx -r
9066 Traverse the dependency graph of the given upstream package recursively
9067 and generate package expressions for all those packages that are not yet
9068 in Guix.
9069 @end table
9070
9071 @item gem
9072 @cindex gem
9073 Import metadata from @uref{https://rubygems.org/, RubyGems}. Information
9074 is taken from the JSON-formatted description available at
9075 @code{rubygems.org} and includes most relevant information, including
9076 runtime dependencies. There are some caveats, however. The metadata
9077 doesn't distinguish between synopses and descriptions, so the same string
9078 is used for both fields. Additionally, the details of non-Ruby
9079 dependencies required to build native extensions is unavailable and left
9080 as an exercise to the packager.
9081
9082 The command below imports metadata for the @code{rails} Ruby package:
9083
9084 @example
9085 guix import gem rails
9086 @end example
9087
9088 @table @code
9089 @item --recursive
9090 @itemx -r
9091 Traverse the dependency graph of the given upstream package recursively
9092 and generate package expressions for all those packages that are not yet
9093 in Guix.
9094 @end table
9095
9096 @item cpan
9097 @cindex CPAN
9098 Import metadata from @uref{https://www.metacpan.org/, MetaCPAN}.
9099 Information is taken from the JSON-formatted metadata provided through
9100 @uref{https://fastapi.metacpan.org/, MetaCPAN's API} and includes most
9101 relevant information, such as module dependencies. License information
9102 should be checked closely. If Perl is available in the store, then the
9103 @code{corelist} utility will be used to filter core modules out of the
9104 list of dependencies.
9105
9106 The command command below imports metadata for the @code{Acme::Boolean}
9107 Perl module:
9108
9109 @example
9110 guix import cpan Acme::Boolean
9111 @end example
9112
9113 @item cran
9114 @cindex CRAN
9115 @cindex Bioconductor
9116 Import metadata from @uref{https://cran.r-project.org/, CRAN}, the
9117 central repository for the @uref{https://r-project.org, GNU@tie{}R
9118 statistical and graphical environment}.
9119
9120 Information is extracted from the @code{DESCRIPTION} file of the package.
9121
9122 The command command below imports metadata for the @code{Cairo}
9123 R package:
9124
9125 @example
9126 guix import cran Cairo
9127 @end example
9128
9129 When @code{--recursive} is added, the importer will traverse the
9130 dependency graph of the given upstream package recursively and generate
9131 package expressions for all those packages that are not yet in Guix.
9132
9133 When @code{--archive=bioconductor} is added, metadata is imported from
9134 @uref{https://www.bioconductor.org/, Bioconductor}, a repository of R
9135 packages for for the analysis and comprehension of high-throughput
9136 genomic data in bioinformatics.
9137
9138 Information is extracted from the @code{DESCRIPTION} file contained in the
9139 package archive.
9140
9141 The command below imports metadata for the @code{GenomicRanges}
9142 R package:
9143
9144 @example
9145 guix import cran --archive=bioconductor GenomicRanges
9146 @end example
9147
9148 Finally, you can also import R packages that have not yet been published on
9149 CRAN or Bioconductor as long as they are in a git repository. Use
9150 @code{--archive=git} followed by the URL of the git repository:
9151
9152 @example
9153 guix import cran --archive=git https://github.com/immunogenomics/harmony
9154 @end example
9155
9156 @item texlive
9157 @cindex TeX Live
9158 @cindex CTAN
9159 Import metadata from @uref{https://www.ctan.org/, CTAN}, the
9160 comprehensive TeX archive network for TeX packages that are part of the
9161 @uref{https://www.tug.org/texlive/, TeX Live distribution}.
9162
9163 Information about the package is obtained through the XML API provided
9164 by CTAN, while the source code is downloaded from the SVN repository of
9165 the Tex Live project. This is done because the CTAN does not keep
9166 versioned archives.
9167
9168 The command command below imports metadata for the @code{fontspec}
9169 TeX package:
9170
9171 @example
9172 guix import texlive fontspec
9173 @end example
9174
9175 When @code{--archive=DIRECTORY} is added, the source code is downloaded
9176 not from the @file{latex} sub-directory of the @file{texmf-dist/source}
9177 tree in the TeX Live SVN repository, but from the specified sibling
9178 directory under the same root.
9179
9180 The command below imports metadata for the @code{ifxetex} package from
9181 CTAN while fetching the sources from the directory
9182 @file{texmf/source/generic}:
9183
9184 @example
9185 guix import texlive --archive=generic ifxetex
9186 @end example
9187
9188 @item json
9189 @cindex JSON, import
9190 Import package metadata from a local JSON file. Consider the following
9191 example package definition in JSON format:
9192
9193 @example
9194 @{
9195 "name": "hello",
9196 "version": "2.10",
9197 "source": "mirror://gnu/hello/hello-2.10.tar.gz",
9198 "build-system": "gnu",
9199 "home-page": "https://www.gnu.org/software/hello/",
9200 "synopsis": "Hello, GNU world: An example GNU package",
9201 "description": "GNU Hello prints a greeting.",
9202 "license": "GPL-3.0+",
9203 "native-inputs": ["gettext"]
9204 @}
9205 @end example
9206
9207 The field names are the same as for the @code{<package>} record
9208 (@xref{Defining Packages}). References to other packages are provided
9209 as JSON lists of quoted package specification strings such as
9210 @code{guile} or @code{guile@@2.0}.
9211
9212 The importer also supports a more explicit source definition using the
9213 common fields for @code{<origin>} records:
9214
9215 @example
9216 @{
9217 @dots{}
9218 "source": @{
9219 "method": "url-fetch",
9220 "uri": "mirror://gnu/hello/hello-2.10.tar.gz",
9221 "sha256": @{
9222 "base32": "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"
9223 @}
9224 @}
9225 @dots{}
9226 @}
9227 @end example
9228
9229 The command below reads metadata from the JSON file @code{hello.json}
9230 and outputs a package expression:
9231
9232 @example
9233 guix import json hello.json
9234 @end example
9235
9236 @item nix
9237 Import metadata from a local copy of the source of the
9238 @uref{https://nixos.org/nixpkgs/, Nixpkgs distribution}@footnote{This
9239 relies on the @command{nix-instantiate} command of
9240 @uref{https://nixos.org/nix/, Nix}.}. Package definitions in Nixpkgs are
9241 typically written in a mixture of Nix-language and Bash code. This
9242 command only imports the high-level package structure that is written in
9243 the Nix language. It normally includes all the basic fields of a
9244 package definition.
9245
9246 When importing a GNU package, the synopsis and descriptions are replaced
9247 by their canonical upstream variant.
9248
9249 Usually, you will first need to do:
9250
9251 @example
9252 export NIX_REMOTE=daemon
9253 @end example
9254
9255 @noindent
9256 so that @command{nix-instantiate} does not try to open the Nix database.
9257
9258 As an example, the command below imports the package definition of
9259 LibreOffice (more precisely, it imports the definition of the package
9260 bound to the @code{libreoffice} top-level attribute):
9261
9262 @example
9263 guix import nix ~/path/to/nixpkgs libreoffice
9264 @end example
9265
9266 @item hackage
9267 @cindex hackage
9268 Import metadata from the Haskell community's central package archive
9269 @uref{https://hackage.haskell.org/, Hackage}. Information is taken from
9270 Cabal files and includes all the relevant information, including package
9271 dependencies.
9272
9273 Specific command-line options are:
9274
9275 @table @code
9276 @item --stdin
9277 @itemx -s
9278 Read a Cabal file from standard input.
9279 @item --no-test-dependencies
9280 @itemx -t
9281 Do not include dependencies required only by the test suites.
9282 @item --cabal-environment=@var{alist}
9283 @itemx -e @var{alist}
9284 @var{alist} is a Scheme alist defining the environment in which the
9285 Cabal conditionals are evaluated. The accepted keys are: @code{os},
9286 @code{arch}, @code{impl} and a string representing the name of a flag.
9287 The value associated with a flag has to be either the symbol
9288 @code{true} or @code{false}. The value associated with other keys
9289 has to conform to the Cabal file format definition. The default value
9290 associated with the keys @code{os}, @code{arch} and @code{impl} is
9291 @samp{linux}, @samp{x86_64} and @samp{ghc}, respectively.
9292 @item --recursive
9293 @itemx -r
9294 Traverse the dependency graph of the given upstream package recursively
9295 and generate package expressions for all those packages that are not yet
9296 in Guix.
9297 @end table
9298
9299 The command below imports metadata for the latest version of the
9300 @code{HTTP} Haskell package without including test dependencies and
9301 specifying the value of the flag @samp{network-uri} as @code{false}:
9302
9303 @example
9304 guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
9305 @end example
9306
9307 A specific package version may optionally be specified by following the
9308 package name by an at-sign and a version number as in the following example:
9309
9310 @example
9311 guix import hackage mtl@@2.1.3.1
9312 @end example
9313
9314 @item stackage
9315 @cindex stackage
9316 The @code{stackage} importer is a wrapper around the @code{hackage} one.
9317 It takes a package name, looks up the package version included in a
9318 long-term support (LTS) @uref{https://www.stackage.org, Stackage}
9319 release and uses the @code{hackage} importer to retrieve its metadata.
9320 Note that it is up to you to select an LTS release compatible with the
9321 GHC compiler used by Guix.
9322
9323 Specific command-line options are:
9324
9325 @table @code
9326 @item --no-test-dependencies
9327 @itemx -t
9328 Do not include dependencies required only by the test suites.
9329 @item --lts-version=@var{version}
9330 @itemx -l @var{version}
9331 @var{version} is the desired LTS release version. If omitted the latest
9332 release is used.
9333 @item --recursive
9334 @itemx -r
9335 Traverse the dependency graph of the given upstream package recursively
9336 and generate package expressions for all those packages that are not yet
9337 in Guix.
9338 @end table
9339
9340 The command below imports metadata for the @code{HTTP} Haskell package
9341 included in the LTS Stackage release version 7.18:
9342
9343 @example
9344 guix import stackage --lts-version=7.18 HTTP
9345 @end example
9346
9347 @item elpa
9348 @cindex elpa
9349 Import metadata from an Emacs Lisp Package Archive (ELPA) package
9350 repository (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
9351
9352 Specific command-line options are:
9353
9354 @table @code
9355 @item --archive=@var{repo}
9356 @itemx -a @var{repo}
9357 @var{repo} identifies the archive repository from which to retrieve the
9358 information. Currently the supported repositories and their identifiers
9359 are:
9360 @itemize -
9361 @item
9362 @uref{https://elpa.gnu.org/packages, GNU}, selected by the @code{gnu}
9363 identifier. This is the default.
9364
9365 Packages from @code{elpa.gnu.org} are signed with one of the keys
9366 contained in the GnuPG keyring at
9367 @file{share/emacs/25.1/etc/package-keyring.gpg} (or similar) in the
9368 @code{emacs} package (@pxref{Package Installation, ELPA package
9369 signatures,, emacs, The GNU Emacs Manual}).
9370
9371 @item
9372 @uref{https://stable.melpa.org/packages, MELPA-Stable}, selected by the
9373 @code{melpa-stable} identifier.
9374
9375 @item
9376 @uref{https://melpa.org/packages, MELPA}, selected by the @code{melpa}
9377 identifier.
9378 @end itemize
9379
9380 @item --recursive
9381 @itemx -r
9382 Traverse the dependency graph of the given upstream package recursively
9383 and generate package expressions for all those packages that are not yet
9384 in Guix.
9385 @end table
9386
9387 @item crate
9388 @cindex crate
9389 Import metadata from the crates.io Rust package repository
9390 @uref{https://crates.io, crates.io}, as in this example:
9391
9392 @example
9393 guix import crate blake2-rfc
9394 @end example
9395
9396 The crate importer also allows you to specify a version string:
9397
9398 @example
9399 guix import crate constant-time-eq@@0.1.0
9400 @end example
9401
9402 Additional options include:
9403
9404 @table @code
9405 @item --recursive
9406 @itemx -r
9407 Traverse the dependency graph of the given upstream package recursively
9408 and generate package expressions for all those packages that are not yet
9409 in Guix.
9410 @end table
9411
9412 @item opam
9413 @cindex OPAM
9414 @cindex OCaml
9415 Import metadata from the @uref{https://opam.ocaml.org/, OPAM} package
9416 repository used by the OCaml community.
9417 @end table
9418
9419 The structure of the @command{guix import} code is modular. It would be
9420 useful to have more importers for other package formats, and your help
9421 is welcome here (@pxref{Contributing}).
9422
9423 @node Invoking guix refresh
9424 @section Invoking @command{guix refresh}
9425
9426 @cindex @command {guix refresh}
9427 The primary audience of the @command{guix refresh} command is developers
9428 of the GNU software distribution. By default, it reports any packages
9429 provided by the distribution that are outdated compared to the latest
9430 upstream version, like this:
9431
9432 @example
9433 $ guix refresh
9434 gnu/packages/gettext.scm:29:13: gettext would be upgraded from 0.18.1.1 to 0.18.2.1
9435 gnu/packages/glib.scm:77:12: glib would be upgraded from 2.34.3 to 2.37.0
9436 @end example
9437
9438 Alternately, one can specify packages to consider, in which case a
9439 warning is emitted for packages that lack an updater:
9440
9441 @example
9442 $ guix refresh coreutils guile guile-ssh
9443 gnu/packages/ssh.scm:205:2: warning: no updater for guile-ssh
9444 gnu/packages/guile.scm:136:12: guile would be upgraded from 2.0.12 to 2.0.13
9445 @end example
9446
9447 @command{guix refresh} browses the upstream repository of each package and determines
9448 the highest version number of the releases therein. The command
9449 knows how to update specific types of packages: GNU packages, ELPA
9450 packages, etc.---see the documentation for @option{--type} below. There
9451 are many packages, though, for which it lacks a method to determine
9452 whether a new upstream release is available. However, the mechanism is
9453 extensible, so feel free to get in touch with us to add a new method!
9454
9455 @table @code
9456
9457 @item --recursive
9458 Consider the packages specified, and all the packages upon which they depend.
9459
9460 @example
9461 $ guix refresh --recursive coreutils
9462 gnu/packages/acl.scm:35:2: warning: no updater for acl
9463 gnu/packages/m4.scm:30:12: info: 1.4.18 is already the latest version of m4
9464 gnu/packages/xml.scm:68:2: warning: no updater for expat
9465 gnu/packages/multiprecision.scm:40:12: info: 6.1.2 is already the latest version of gmp
9466 @dots{}
9467 @end example
9468
9469 @end table
9470
9471 Sometimes the upstream name differs from the package name used in Guix,
9472 and @command{guix refresh} needs a little help. Most updaters honor the
9473 @code{upstream-name} property in package definitions, which can be used
9474 to that effect:
9475
9476 @lisp
9477 (define-public network-manager
9478 (package
9479 (name "network-manager")
9480 ;; @dots{}
9481 (properties '((upstream-name . "NetworkManager")))))
9482 @end lisp
9483
9484 When passed @code{--update}, it modifies distribution source files to
9485 update the version numbers and source tarball hashes of those package
9486 recipes (@pxref{Defining Packages}). This is achieved by downloading
9487 each package's latest source tarball and its associated OpenPGP
9488 signature, authenticating the downloaded tarball against its signature
9489 using @command{gpgv}, and finally computing its hash---note that GnuPG must be
9490 installed and in @code{$PATH}; run @code{guix install gnupg} if needed.
9491
9492 When the public
9493 key used to sign the tarball is missing from the user's keyring, an
9494 attempt is made to automatically retrieve it from a public key server;
9495 when this is successful, the key is added to the user's keyring; otherwise,
9496 @command{guix refresh} reports an error.
9497
9498 The following options are supported:
9499
9500 @table @code
9501
9502 @item --expression=@var{expr}
9503 @itemx -e @var{expr}
9504 Consider the package @var{expr} evaluates to.
9505
9506 This is useful to precisely refer to a package, as in this example:
9507
9508 @example
9509 guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
9510 @end example
9511
9512 This command lists the dependents of the ``final'' libc (essentially all
9513 the packages.)
9514
9515 @item --update
9516 @itemx -u
9517 Update distribution source files (package recipes) in place. This is
9518 usually run from a checkout of the Guix source tree (@pxref{Running
9519 Guix Before It Is Installed}):
9520
9521 @example
9522 $ ./pre-inst-env guix refresh -s non-core -u
9523 @end example
9524
9525 @xref{Defining Packages}, for more information on package definitions.
9526
9527 @item --select=[@var{subset}]
9528 @itemx -s @var{subset}
9529 Select all the packages in @var{subset}, one of @code{core} or
9530 @code{non-core}.
9531
9532 The @code{core} subset refers to all the packages at the core of the
9533 distribution---i.e., packages that are used to build ``everything
9534 else''. This includes GCC, libc, Binutils, Bash, etc. Usually,
9535 changing one of these packages in the distribution entails a rebuild of
9536 all the others. Thus, such updates are an inconvenience to users in
9537 terms of build time or bandwidth used to achieve the upgrade.
9538
9539 The @code{non-core} subset refers to the remaining packages. It is
9540 typically useful in cases where an update of the core packages would be
9541 inconvenient.
9542
9543 @item --manifest=@var{file}
9544 @itemx -m @var{file}
9545 Select all the packages from the manifest in @var{file}. This is useful to
9546 check if any packages of the user manifest can be updated.
9547
9548 @item --type=@var{updater}
9549 @itemx -t @var{updater}
9550 Select only packages handled by @var{updater} (may be a comma-separated
9551 list of updaters). Currently, @var{updater} may be one of:
9552
9553 @table @code
9554 @item gnu
9555 the updater for GNU packages;
9556 @item gnome
9557 the updater for GNOME packages;
9558 @item kde
9559 the updater for KDE packages;
9560 @item xorg
9561 the updater for X.org packages;
9562 @item kernel.org
9563 the updater for packages hosted on kernel.org;
9564 @item elpa
9565 the updater for @uref{https://elpa.gnu.org/, ELPA} packages;
9566 @item cran
9567 the updater for @uref{https://cran.r-project.org/, CRAN} packages;
9568 @item bioconductor
9569 the updater for @uref{https://www.bioconductor.org/, Bioconductor} R packages;
9570 @item cpan
9571 the updater for @uref{https://www.cpan.org/, CPAN} packages;
9572 @item pypi
9573 the updater for @uref{https://pypi.python.org, PyPI} packages.
9574 @item gem
9575 the updater for @uref{https://rubygems.org, RubyGems} packages.
9576 @item github
9577 the updater for @uref{https://github.com, GitHub} packages.
9578 @item hackage
9579 the updater for @uref{https://hackage.haskell.org, Hackage} packages.
9580 @item stackage
9581 the updater for @uref{https://www.stackage.org, Stackage} packages.
9582 @item crate
9583 the updater for @uref{https://crates.io, Crates} packages.
9584 @item launchpad
9585 the updater for @uref{https://launchpad.net, Launchpad} packages.
9586 @end table
9587
9588 For instance, the following command only checks for updates of Emacs
9589 packages hosted at @code{elpa.gnu.org} and for updates of CRAN packages:
9590
9591 @example
9592 $ guix refresh --type=elpa,cran
9593 gnu/packages/statistics.scm:819:13: r-testthat would be upgraded from 0.10.0 to 0.11.0
9594 gnu/packages/emacs.scm:856:13: emacs-auctex would be upgraded from 11.88.6 to 11.88.9
9595 @end example
9596
9597 @end table
9598
9599 In addition, @command{guix refresh} can be passed one or more package
9600 names, as in this example:
9601
9602 @example
9603 $ ./pre-inst-env guix refresh -u emacs idutils gcc@@4.8
9604 @end example
9605
9606 @noindent
9607 The command above specifically updates the @code{emacs} and
9608 @code{idutils} packages. The @code{--select} option would have no
9609 effect in this case.
9610
9611 When considering whether to upgrade a package, it is sometimes
9612 convenient to know which packages would be affected by the upgrade and
9613 should be checked for compatibility. For this the following option may
9614 be used when passing @command{guix refresh} one or more package names:
9615
9616 @table @code
9617
9618 @item --list-updaters
9619 @itemx -L
9620 List available updaters and exit (see @option{--type} above.)
9621
9622 For each updater, display the fraction of packages it covers; at the
9623 end, display the fraction of packages covered by all these updaters.
9624
9625 @item --list-dependent
9626 @itemx -l
9627 List top-level dependent packages that would need to be rebuilt as a
9628 result of upgrading one or more packages.
9629
9630 @xref{Invoking guix graph, the @code{reverse-package} type of
9631 @command{guix graph}}, for information on how to visualize the list of
9632 dependents of a package.
9633
9634 @end table
9635
9636 Be aware that the @code{--list-dependent} option only
9637 @emph{approximates} the rebuilds that would be required as a result of
9638 an upgrade. More rebuilds might be required under some circumstances.
9639
9640 @example
9641 $ guix refresh --list-dependent flex
9642 Building the following 120 packages would ensure 213 dependent packages are rebuilt:
9643 hop@@2.4.0 geiser@@0.4 notmuch@@0.18 mu@@0.9.9.5 cflow@@1.4 idutils@@4.6 @dots{}
9644 @end example
9645
9646 The command above lists a set of packages that could be built to check
9647 for compatibility with an upgraded @code{flex} package.
9648
9649 @table @code
9650
9651 @item --list-transitive
9652 List all the packages which one or more packages depend upon.
9653
9654 @example
9655 $ guix refresh --list-transitive flex
9656 flex@@2.6.4 depends on the following 25 packages: perl@@5.28.0 help2man@@1.47.6
9657 bison@@3.0.5 indent@@2.2.10 tar@@1.30 gzip@@1.9 bzip2@@1.0.6 xz@@5.2.4 file@@5.33 @dots{}
9658 @end example
9659
9660 @end table
9661
9662 The command above lists a set of packages which, when changed, would cause
9663 @code{flex} to be rebuilt.
9664
9665 The following options can be used to customize GnuPG operation:
9666
9667 @table @code
9668
9669 @item --gpg=@var{command}
9670 Use @var{command} as the GnuPG 2.x command. @var{command} is searched
9671 for in @code{$PATH}.
9672
9673 @item --keyring=@var{file}
9674 Use @var{file} as the keyring for upstream keys. @var{file} must be in the
9675 @dfn{keybox format}. Keybox files usually have a name ending in @file{.kbx}
9676 and the GNU@tie{}Privacy Guard (GPG) can manipulate these files
9677 (@pxref{kbxutil, @command{kbxutil},, gnupg, Using the GNU Privacy Guard}, for
9678 information on a tool to manipulate keybox files).
9679
9680 When this option is omitted, @command{guix refresh} uses
9681 @file{~/.config/guix/upstream/trustedkeys.kbx} as the keyring for upstream
9682 signing keys. OpenPGP signatures are checked against keys from this keyring;
9683 missing keys are downloaded to this keyring as well (see
9684 @option{--key-download} below.)
9685
9686 You can export keys from your default GPG keyring into a keybox file using
9687 commands like this one:
9688
9689 @example
9690 gpg --export rms@@gnu.org | kbxutil --import-openpgp >> mykeyring.kbx
9691 @end example
9692
9693 Likewise, you can fetch keys to a specific keybox file like this:
9694
9695 @example
9696 gpg --no-default-keyring --keyring mykeyring.kbx \
9697 --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
9698 @end example
9699
9700 @ref{GPG Configuration Options, @option{--keyring},, gnupg, Using the GNU
9701 Privacy Guard}, for more information on GPG's @option{--keyring} option.
9702
9703 @item --key-download=@var{policy}
9704 Handle missing OpenPGP keys according to @var{policy}, which may be one
9705 of:
9706
9707 @table @code
9708 @item always
9709 Always download missing OpenPGP keys from the key server, and add them
9710 to the user's GnuPG keyring.
9711
9712 @item never
9713 Never try to download missing OpenPGP keys. Instead just bail out.
9714
9715 @item interactive
9716 When a package signed with an unknown OpenPGP key is encountered, ask
9717 the user whether to download it or not. This is the default behavior.
9718 @end table
9719
9720 @item --key-server=@var{host}
9721 Use @var{host} as the OpenPGP key server when importing a public key.
9722
9723 @item --load-path=@var{directory}
9724 Add @var{directory} to the front of the package module search path
9725 (@pxref{Package Modules}).
9726
9727 This allows users to define their own packages and make them visible to
9728 the command-line tools.
9729
9730 @end table
9731
9732 The @code{github} updater uses the
9733 @uref{https://developer.github.com/v3/, GitHub API} to query for new
9734 releases. When used repeatedly e.g.@: when refreshing all packages,
9735 GitHub will eventually refuse to answer any further API requests. By
9736 default 60 API requests per hour are allowed, and a full refresh on all
9737 GitHub packages in Guix requires more than this. Authentication with
9738 GitHub through the use of an API token alleviates these limits. To use
9739 an API token, set the environment variable @code{GUIX_GITHUB_TOKEN} to a
9740 token procured from @uref{https://github.com/settings/tokens} or
9741 otherwise.
9742
9743
9744 @node Invoking guix lint
9745 @section Invoking @command{guix lint}
9746
9747 @cindex @command{guix lint}
9748 @cindex package, checking for errors
9749 The @command{guix lint} command is meant to help package developers avoid
9750 common errors and use a consistent style. It runs a number of checks on
9751 a given set of packages in order to find common mistakes in their
9752 definitions. Available @dfn{checkers} include (see
9753 @code{--list-checkers} for a complete list):
9754
9755 @table @code
9756 @item synopsis
9757 @itemx description
9758 Validate certain typographical and stylistic rules about package
9759 descriptions and synopses.
9760
9761 @item inputs-should-be-native
9762 Identify inputs that should most likely be native inputs.
9763
9764 @item source
9765 @itemx home-page
9766 @itemx mirror-url
9767 @itemx github-url
9768 @itemx source-file-name
9769 Probe @code{home-page} and @code{source} URLs and report those that are
9770 invalid. Suggest a @code{mirror://} URL when applicable. If the
9771 @code{source} URL redirects to a GitHub URL, recommend usage of the GitHub
9772 URL. Check that the source file name is meaningful, e.g.@: is not just a
9773 version number or ``git-checkout'', without a declared @code{file-name}
9774 (@pxref{origin Reference}).
9775
9776 @item source-unstable-tarball
9777 Parse the @code{source} URL to determine if a tarball from GitHub is
9778 autogenerated or if it is a release tarball. Unfortunately GitHub's
9779 autogenerated tarballs are sometimes regenerated.
9780
9781 @item archival
9782 @cindex Software Heritage, source code archive
9783 @cindex archival of source code, Software Heritage
9784 Checks whether the package's source code is archived at
9785 @uref{https://www.softwareheritage.org, Software Heritage}.
9786
9787 When the source code that is not archived comes from a version-control system
9788 (VCS)---e.g., it's obtained with @code{git-fetch}, send Software Heritage a
9789 ``save'' request so that it eventually archives it. This ensures that the
9790 source will remain available in the long term, and that Guix can fall back to
9791 Software Heritage should the source code disappear from its original host.
9792 The status of recent ``save'' requests can be
9793 @uref{https://archive.softwareheritage.org/save/#requests, viewed on-line}.
9794
9795 When source code is a tarball obtained with @code{url-fetch}, simply print a
9796 message when it is not archived. As of this writing, Software Heritage does
9797 not allow requests to save arbitrary tarballs; we are working on ways to
9798 ensure that non-VCS source code is also archived.
9799
9800 Software Heritage
9801 @uref{https://archive.softwareheritage.org/api/#rate-limiting, limits the
9802 request rate per IP address}. When the limit is reached, @command{guix lint}
9803 prints a message and the @code{archival} checker stops doing anything until
9804 that limit has been reset.
9805
9806 @item cve
9807 @cindex security vulnerabilities
9808 @cindex CVE, Common Vulnerabilities and Exposures
9809 Report known vulnerabilities found in the Common Vulnerabilities and
9810 Exposures (CVE) databases of the current and past year
9811 @uref{https://nvd.nist.gov/vuln/data-feeds, published by the US
9812 NIST}.
9813
9814 To view information about a particular vulnerability, visit pages such as:
9815
9816 @itemize
9817 @item
9818 @indicateurl{https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-YYYY-ABCD}
9819 @item
9820 @indicateurl{https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-YYYY-ABCD}
9821 @end itemize
9822
9823 @noindent
9824 where @code{CVE-YYYY-ABCD} is the CVE identifier---e.g.,
9825 @code{CVE-2015-7554}.
9826
9827 Package developers can specify in package recipes the
9828 @uref{https://nvd.nist.gov/products/cpe,Common Platform Enumeration (CPE)}
9829 name and version of the package when they differ from the name or version
9830 that Guix uses, as in this example:
9831
9832 @lisp
9833 (package
9834 (name "grub")
9835 ;; @dots{}
9836 ;; CPE calls this package "grub2".
9837 (properties '((cpe-name . "grub2")
9838 (cpe-version . "2.3"))))
9839 @end lisp
9840
9841 @c See <https://www.openwall.com/lists/oss-security/2017/03/15/3>.
9842 Some entries in the CVE database do not specify which version of a
9843 package they apply to, and would thus ``stick around'' forever. Package
9844 developers who found CVE alerts and verified they can be ignored can
9845 declare them as in this example:
9846
9847 @lisp
9848 (package
9849 (name "t1lib")
9850 ;; @dots{}
9851 ;; These CVEs no longer apply and can be safely ignored.
9852 (properties `((lint-hidden-cve . ("CVE-2011-0433"
9853 "CVE-2011-1553"
9854 "CVE-2011-1554"
9855 "CVE-2011-5244")))))
9856 @end lisp
9857
9858 @item formatting
9859 Warn about obvious source code formatting issues: trailing white space,
9860 use of tabulations, etc.
9861 @end table
9862
9863 The general syntax is:
9864
9865 @example
9866 guix lint @var{options} @var{package}@dots{}
9867 @end example
9868
9869 If no package is given on the command line, then all packages are checked.
9870 The @var{options} may be zero or more of the following:
9871
9872 @table @code
9873 @item --list-checkers
9874 @itemx -l
9875 List and describe all the available checkers that will be run on packages
9876 and exit.
9877
9878 @item --checkers
9879 @itemx -c
9880 Only enable the checkers specified in a comma-separated list using the
9881 names returned by @code{--list-checkers}.
9882
9883 @item --load-path=@var{directory}
9884 @itemx -L @var{directory}
9885 Add @var{directory} to the front of the package module search path
9886 (@pxref{Package Modules}).
9887
9888 This allows users to define their own packages and make them visible to
9889 the command-line tools.
9890
9891 @end table
9892
9893 @node Invoking guix size
9894 @section Invoking @command{guix size}
9895
9896 @cindex size
9897 @cindex package size
9898 @cindex closure
9899 @cindex @command{guix size}
9900 The @command{guix size} command helps package developers profile the
9901 disk usage of packages. It is easy to overlook the impact of an
9902 additional dependency added to a package, or the impact of using a
9903 single output for a package that could easily be split (@pxref{Packages
9904 with Multiple Outputs}). Such are the typical issues that
9905 @command{guix size} can highlight.
9906
9907 The command can be passed one or more package specifications
9908 such as @code{gcc@@4.8}
9909 or @code{guile:debug}, or a file name in the store. Consider this
9910 example:
9911
9912 @example
9913 $ guix size coreutils
9914 store item total self
9915 /gnu/store/@dots{}-gcc-5.5.0-lib 60.4 30.1 38.1%
9916 /gnu/store/@dots{}-glibc-2.27 30.3 28.8 36.6%
9917 /gnu/store/@dots{}-coreutils-8.28 78.9 15.0 19.0%
9918 /gnu/store/@dots{}-gmp-6.1.2 63.1 2.7 3.4%
9919 /gnu/store/@dots{}-bash-static-4.4.12 1.5 1.5 1.9%
9920 /gnu/store/@dots{}-acl-2.2.52 61.1 0.4 0.5%
9921 /gnu/store/@dots{}-attr-2.4.47 60.6 0.2 0.3%
9922 /gnu/store/@dots{}-libcap-2.25 60.5 0.2 0.2%
9923 total: 78.9 MiB
9924 @end example
9925
9926 @cindex closure
9927 The store items listed here constitute the @dfn{transitive closure} of
9928 Coreutils---i.e., Coreutils and all its dependencies, recursively---as
9929 would be returned by:
9930
9931 @example
9932 $ guix gc -R /gnu/store/@dots{}-coreutils-8.23
9933 @end example
9934
9935 Here the output shows three columns next to store items. The first column,
9936 labeled ``total'', shows the size in mebibytes (MiB) of the closure of
9937 the store item---that is, its own size plus the size of all its
9938 dependencies. The next column, labeled ``self'', shows the size of the
9939 item itself. The last column shows the ratio of the size of the item
9940 itself to the space occupied by all the items listed here.
9941
9942 In this example, we see that the closure of Coreutils weighs in at
9943 79@tie{}MiB, most of which is taken by libc and GCC's run-time support
9944 libraries. (That libc and GCC's libraries represent a large fraction of
9945 the closure is not a problem @i{per se} because they are always available
9946 on the system anyway.)
9947
9948 When the package(s) passed to @command{guix size} are available in the
9949 store@footnote{More precisely, @command{guix size} looks for the
9950 @emph{ungrafted} variant of the given package(s), as returned by
9951 @code{guix build @var{package} --no-grafts}. @xref{Security Updates},
9952 for information on grafts.}, @command{guix size} queries the daemon to determine its
9953 dependencies, and measures its size in the store, similar to @command{du
9954 -ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
9955 Coreutils}).
9956
9957 When the given packages are @emph{not} in the store, @command{guix size}
9958 reports information based on the available substitutes
9959 (@pxref{Substitutes}). This makes it possible it to profile disk usage of
9960 store items that are not even on disk, only available remotely.
9961
9962 You can also specify several package names:
9963
9964 @example
9965 $ guix size coreutils grep sed bash
9966 store item total self
9967 /gnu/store/@dots{}-coreutils-8.24 77.8 13.8 13.4%
9968 /gnu/store/@dots{}-grep-2.22 73.1 0.8 0.8%
9969 /gnu/store/@dots{}-bash-4.3.42 72.3 4.7 4.6%
9970 /gnu/store/@dots{}-readline-6.3 67.6 1.2 1.2%
9971 @dots{}
9972 total: 102.3 MiB
9973 @end example
9974
9975 @noindent
9976 In this example we see that the combination of the four packages takes
9977 102.3@tie{}MiB in total, which is much less than the sum of each closure
9978 since they have a lot of dependencies in common.
9979
9980 The available options are:
9981
9982 @table @option
9983
9984 @item --substitute-urls=@var{urls}
9985 Use substitute information from @var{urls}.
9986 @xref{client-substitute-urls, the same option for @code{guix build}}.
9987
9988 @item --sort=@var{key}
9989 Sort lines according to @var{key}, one of the following options:
9990
9991 @table @code
9992 @item self
9993 the size of each item (the default);
9994 @item closure
9995 the total size of the item's closure.
9996 @end table
9997
9998 @item --map-file=@var{file}
9999 Write a graphical map of disk usage in PNG format to @var{file}.
10000
10001 For the example above, the map looks like this:
10002
10003 @image{images/coreutils-size-map,5in,, map of Coreutils disk usage
10004 produced by @command{guix size}}
10005
10006 This option requires that
10007 @uref{https://wingolog.org/software/guile-charting/, Guile-Charting} be
10008 installed and visible in Guile's module search path. When that is not
10009 the case, @command{guix size} fails as it tries to load it.
10010
10011 @item --system=@var{system}
10012 @itemx -s @var{system}
10013 Consider packages for @var{system}---e.g., @code{x86_64-linux}.
10014
10015 @item --load-path=@var{directory}
10016 @itemx -L @var{directory}
10017 Add @var{directory} to the front of the package module search path
10018 (@pxref{Package Modules}).
10019
10020 This allows users to define their own packages and make them visible to
10021 the command-line tools.
10022 @end table
10023
10024 @node Invoking guix graph
10025 @section Invoking @command{guix graph}
10026
10027 @cindex DAG
10028 @cindex @command{guix graph}
10029 @cindex package dependencies
10030 Packages and their dependencies form a @dfn{graph}, specifically a
10031 directed acyclic graph (DAG). It can quickly become difficult to have a
10032 mental model of the package DAG, so the @command{guix graph} command
10033 provides a visual representation of the DAG. By default,
10034 @command{guix graph} emits a DAG representation in the input format of
10035 @uref{https://www.graphviz.org/, Graphviz}, so its output can be passed
10036 directly to the @command{dot} command of Graphviz. It can also emit an
10037 HTML page with embedded JavaScript code to display a ``chord diagram''
10038 in a Web browser, using the @uref{https://d3js.org/, d3.js} library, or
10039 emit Cypher queries to construct a graph in a graph database supporting
10040 the @uref{https://www.opencypher.org/, openCypher} query language.
10041 The general syntax is:
10042
10043 @example
10044 guix graph @var{options} @var{package}@dots{}
10045 @end example
10046
10047 For example, the following command generates a PDF file representing the
10048 package DAG for the GNU@tie{}Core Utilities, showing its build-time
10049 dependencies:
10050
10051 @example
10052 guix graph coreutils | dot -Tpdf > dag.pdf
10053 @end example
10054
10055 The output looks like this:
10056
10057 @image{images/coreutils-graph,2in,,Dependency graph of the GNU Coreutils}
10058
10059 Nice little graph, no?
10060
10061 But there is more than one graph! The one above is concise: it is the
10062 graph of package objects, omitting implicit inputs such as GCC, libc,
10063 grep, etc. It is often useful to have such a concise graph, but
10064 sometimes one may want to see more details. @command{guix graph} supports
10065 several types of graphs, allowing you to choose the level of detail:
10066
10067 @table @code
10068 @item package
10069 This is the default type used in the example above. It shows the DAG of
10070 package objects, excluding implicit dependencies. It is concise, but
10071 filters out many details.
10072
10073 @item reverse-package
10074 This shows the @emph{reverse} DAG of packages. For example:
10075
10076 @example
10077 guix graph --type=reverse-package ocaml
10078 @end example
10079
10080 ...@: yields the graph of packages that @emph{explicitly} depend on OCaml (if
10081 you are also interested in cases where OCaml is an implicit dependency, see
10082 @code{reverse-bag} below.)
10083
10084 Note that for core packages this can yield huge graphs. If all you want
10085 is to know the number of packages that depend on a given package, use
10086 @command{guix refresh --list-dependent} (@pxref{Invoking guix refresh,
10087 @option{--list-dependent}}).
10088
10089 @item bag-emerged
10090 This is the package DAG, @emph{including} implicit inputs.
10091
10092 For instance, the following command:
10093
10094 @example
10095 guix graph --type=bag-emerged coreutils | dot -Tpdf > dag.pdf
10096 @end example
10097
10098 ...@: yields this bigger graph:
10099
10100 @image{images/coreutils-bag-graph,,5in,Detailed dependency graph of the GNU Coreutils}
10101
10102 At the bottom of the graph, we see all the implicit inputs of
10103 @var{gnu-build-system} (@pxref{Build Systems, @code{gnu-build-system}}).
10104
10105 Now, note that the dependencies of these implicit inputs---that is, the
10106 @dfn{bootstrap dependencies} (@pxref{Bootstrapping})---are not shown
10107 here, for conciseness.
10108
10109 @item bag
10110 Similar to @code{bag-emerged}, but this time including all the bootstrap
10111 dependencies.
10112
10113 @item bag-with-origins
10114 Similar to @code{bag}, but also showing origins and their dependencies.
10115
10116 @item reverse-bag
10117 This shows the @emph{reverse} DAG of packages. Unlike @code{reverse-package},
10118 it also takes implicit dependencies into account. For example:
10119
10120 @example
10121 guix graph -t reverse-bag dune
10122 @end example
10123
10124 @noindent
10125 ...@: yields the graph of all packages that depend on Dune, directly or
10126 indirectly. Since Dune is an @emph{implicit} dependency of many packages
10127 @i{via} @code{dune-build-system}, this shows a large number of packages,
10128 whereas @code{reverse-package} would show very few if any.
10129
10130 @item derivation
10131 This is the most detailed representation: It shows the DAG of
10132 derivations (@pxref{Derivations}) and plain store items. Compared to
10133 the above representation, many additional nodes are visible, including
10134 build scripts, patches, Guile modules, etc.
10135
10136 For this type of graph, it is also possible to pass a @file{.drv} file
10137 name instead of a package name, as in:
10138
10139 @example
10140 guix graph -t derivation `guix system build -d my-config.scm`
10141 @end example
10142
10143 @item module
10144 This is the graph of @dfn{package modules} (@pxref{Package Modules}).
10145 For example, the following command shows the graph for the package
10146 module that defines the @code{guile} package:
10147
10148 @example
10149 guix graph -t module guile | dot -Tpdf > module-graph.pdf
10150 @end example
10151 @end table
10152
10153 All the types above correspond to @emph{build-time dependencies}. The
10154 following graph type represents the @emph{run-time dependencies}:
10155
10156 @table @code
10157 @item references
10158 This is the graph of @dfn{references} of a package output, as returned
10159 by @command{guix gc --references} (@pxref{Invoking guix gc}).
10160
10161 If the given package output is not available in the store, @command{guix
10162 graph} attempts to obtain dependency information from substitutes.
10163
10164 Here you can also pass a store file name instead of a package name. For
10165 example, the command below produces the reference graph of your profile
10166 (which can be big!):
10167
10168 @example
10169 guix graph -t references `readlink -f ~/.guix-profile`
10170 @end example
10171
10172 @item referrers
10173 This is the graph of the @dfn{referrers} of a store item, as returned by
10174 @command{guix gc --referrers} (@pxref{Invoking guix gc}).
10175
10176 This relies exclusively on local information from your store. For
10177 instance, let us suppose that the current Inkscape is available in 10
10178 profiles on your machine; @command{guix graph -t referrers inkscape}
10179 will show a graph rooted at Inkscape and with those 10 profiles linked
10180 to it.
10181
10182 It can help determine what is preventing a store item from being garbage
10183 collected.
10184
10185 @end table
10186
10187 The available options are the following:
10188
10189 @table @option
10190 @item --type=@var{type}
10191 @itemx -t @var{type}
10192 Produce a graph output of @var{type}, where @var{type} must be one of
10193 the values listed above.
10194
10195 @item --list-types
10196 List the supported graph types.
10197
10198 @item --backend=@var{backend}
10199 @itemx -b @var{backend}
10200 Produce a graph using the selected @var{backend}.
10201
10202 @item --list-backends
10203 List the supported graph backends.
10204
10205 Currently, the available backends are Graphviz and d3.js.
10206
10207 @item --expression=@var{expr}
10208 @itemx -e @var{expr}
10209 Consider the package @var{expr} evaluates to.
10210
10211 This is useful to precisely refer to a package, as in this example:
10212
10213 @example
10214 guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
10215 @end example
10216
10217 @item --system=@var{system}
10218 @itemx -s @var{system}
10219 Display the graph for @var{system}---e.g., @code{i686-linux}.
10220
10221 The package dependency graph is largely architecture-independent, but there
10222 are some architecture-dependent bits that this option allows you to visualize.
10223
10224 @item --load-path=@var{directory}
10225 @itemx -L @var{directory}
10226 Add @var{directory} to the front of the package module search path
10227 (@pxref{Package Modules}).
10228
10229 This allows users to define their own packages and make them visible to
10230 the command-line tools.
10231 @end table
10232
10233 On top of that, @command{guix graph} supports all the usual package
10234 transformation options (@pxref{Package Transformation Options}). This
10235 makes it easy to view the effect of a graph-rewriting transformation
10236 such as @option{--with-input}. For example, the command below outputs
10237 the graph of @code{git} once @code{openssl} has been replaced by
10238 @code{libressl} everywhere in the graph:
10239
10240 @example
10241 guix graph git --with-input=openssl=libressl
10242 @end example
10243
10244 So many possibilities, so much fun!
10245
10246 @node Invoking guix publish
10247 @section Invoking @command{guix publish}
10248
10249 @cindex @command{guix publish}
10250 The purpose of @command{guix publish} is to enable users to easily share
10251 their store with others, who can then use it as a substitute server
10252 (@pxref{Substitutes}).
10253
10254 When @command{guix publish} runs, it spawns an HTTP server which allows
10255 anyone with network access to obtain substitutes from it. This means
10256 that any machine running Guix can also act as if it were a build farm,
10257 since the HTTP interface is compatible with Cuirass, the software behind
10258 the @code{@value{SUBSTITUTE-SERVER}} build farm.
10259
10260 For security, each substitute is signed, allowing recipients to check
10261 their authenticity and integrity (@pxref{Substitutes}). Because
10262 @command{guix publish} uses the signing key of the system, which is only
10263 readable by the system administrator, it must be started as root; the
10264 @code{--user} option makes it drop root privileges early on.
10265
10266 The signing key pair must be generated before @command{guix publish} is
10267 launched, using @command{guix archive --generate-key} (@pxref{Invoking
10268 guix archive}).
10269
10270 The general syntax is:
10271
10272 @example
10273 guix publish @var{options}@dots{}
10274 @end example
10275
10276 Running @command{guix publish} without any additional arguments will
10277 spawn an HTTP server on port 8080:
10278
10279 @example
10280 guix publish
10281 @end example
10282
10283 Once a publishing server has been authorized (@pxref{Invoking guix
10284 archive}), the daemon may download substitutes from it:
10285
10286 @example
10287 guix-daemon --substitute-urls=http://example.org:8080
10288 @end example
10289
10290 By default, @command{guix publish} compresses archives on the fly as it
10291 serves them. This ``on-the-fly'' mode is convenient in that it requires
10292 no setup and is immediately available. However, when serving lots of
10293 clients, we recommend using the @option{--cache} option, which enables
10294 caching of the archives before they are sent to clients---see below for
10295 details. The @command{guix weather} command provides a handy way to
10296 check what a server provides (@pxref{Invoking guix weather}).
10297
10298 As a bonus, @command{guix publish} also serves as a content-addressed
10299 mirror for source files referenced in @code{origin} records
10300 (@pxref{origin Reference}). For instance, assuming @command{guix
10301 publish} is running on @code{example.org}, the following URL returns the
10302 raw @file{hello-2.10.tar.gz} file with the given SHA256 hash
10303 (represented in @code{nix-base32} format, @pxref{Invoking guix hash}):
10304
10305 @example
10306 http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1@dots{}ndq1i
10307 @end example
10308
10309 Obviously, these URLs only work for files that are in the store; in
10310 other cases, they return 404 (``Not Found'').
10311
10312 @cindex build logs, publication
10313 Build logs are available from @code{/log} URLs like:
10314
10315 @example
10316 http://example.org/log/gwspk@dots{}-guile-2.2.3
10317 @end example
10318
10319 @noindent
10320 When @command{guix-daemon} is configured to save compressed build logs,
10321 as is the case by default (@pxref{Invoking guix-daemon}), @code{/log}
10322 URLs return the compressed log as-is, with an appropriate
10323 @code{Content-Type} and/or @code{Content-Encoding} header. We recommend
10324 running @command{guix-daemon} with @code{--log-compression=gzip} since
10325 Web browsers can automatically decompress it, which is not the case with
10326 bzip2 compression.
10327
10328 The following options are available:
10329
10330 @table @code
10331 @item --port=@var{port}
10332 @itemx -p @var{port}
10333 Listen for HTTP requests on @var{port}.
10334
10335 @item --listen=@var{host}
10336 Listen on the network interface for @var{host}. The default is to
10337 accept connections from any interface.
10338
10339 @item --user=@var{user}
10340 @itemx -u @var{user}
10341 Change privileges to @var{user} as soon as possible---i.e., once the
10342 server socket is open and the signing key has been read.
10343
10344 @item --compression[=@var{method}[:@var{level}]]
10345 @itemx -C [@var{method}[:@var{level}]]
10346 Compress data using the given @var{method} and @var{level}. @var{method} is
10347 one of @code{lzip} and @code{gzip}; when @var{method} is omitted, @code{gzip}
10348 is used.
10349
10350 When @var{level} is zero, disable compression. The range 1 to 9 corresponds
10351 to different compression levels: 1 is the fastest, and 9 is the best
10352 (CPU-intensive). The default is 3.
10353
10354 Usually, @code{lzip} compresses noticeably better than @code{gzip} for a small
10355 increase in CPU usage; see
10356 @uref{https://nongnu.org/lzip/lzip_benchmark.html,benchmarks on the lzip Web
10357 page}.
10358
10359 Unless @option{--cache} is used, compression occurs on the fly and
10360 the compressed streams are not
10361 cached. Thus, to reduce load on the machine that runs @command{guix
10362 publish}, it may be a good idea to choose a low compression level, to
10363 run @command{guix publish} behind a caching proxy, or to use
10364 @option{--cache}. Using @option{--cache} has the advantage that it
10365 allows @command{guix publish} to add @code{Content-Length} HTTP header
10366 to its responses.
10367
10368 This option can be repeated, in which case every substitute gets compressed
10369 using all the selected methods, and all of them are advertised. This is
10370 useful when users may not support all the compression methods: they can select
10371 the one they support.
10372
10373 @item --cache=@var{directory}
10374 @itemx -c @var{directory}
10375 Cache archives and meta-data (@code{.narinfo} URLs) to @var{directory}
10376 and only serve archives that are in cache.
10377
10378 When this option is omitted, archives and meta-data are created
10379 on-the-fly. This can reduce the available bandwidth, especially when
10380 compression is enabled, since this may become CPU-bound. Another
10381 drawback of the default mode is that the length of archives is not known
10382 in advance, so @command{guix publish} does not add a
10383 @code{Content-Length} HTTP header to its responses, which in turn
10384 prevents clients from knowing the amount of data being downloaded.
10385
10386 Conversely, when @option{--cache} is used, the first request for a store
10387 item (@i{via} a @code{.narinfo} URL) returns 404 and triggers a
10388 background process to @dfn{bake} the archive---computing its
10389 @code{.narinfo} and compressing the archive, if needed. Once the
10390 archive is cached in @var{directory}, subsequent requests succeed and
10391 are served directly from the cache, which guarantees that clients get
10392 the best possible bandwidth.
10393
10394 The ``baking'' process is performed by worker threads. By default, one
10395 thread per CPU core is created, but this can be customized. See
10396 @option{--workers} below.
10397
10398 When @option{--ttl} is used, cached entries are automatically deleted
10399 when they have expired.
10400
10401 @item --workers=@var{N}
10402 When @option{--cache} is used, request the allocation of @var{N} worker
10403 threads to ``bake'' archives.
10404
10405 @item --ttl=@var{ttl}
10406 Produce @code{Cache-Control} HTTP headers that advertise a time-to-live
10407 (TTL) of @var{ttl}. @var{ttl} must denote a duration: @code{5d} means 5
10408 days, @code{1m} means 1 month, and so on.
10409
10410 This allows the user's Guix to keep substitute information in cache for
10411 @var{ttl}. However, note that @code{guix publish} does not itself
10412 guarantee that the store items it provides will indeed remain available
10413 for as long as @var{ttl}.
10414
10415 Additionally, when @option{--cache} is used, cached entries that have
10416 not been accessed for @var{ttl} and that no longer have a corresponding
10417 item in the store, may be deleted.
10418
10419 @item --nar-path=@var{path}
10420 Use @var{path} as the prefix for the URLs of ``nar'' files
10421 (@pxref{Invoking guix archive, normalized archives}).
10422
10423 By default, nars are served at a URL such as
10424 @code{/nar/gzip/@dots{}-coreutils-8.25}. This option allows you to
10425 change the @code{/nar} part to @var{path}.
10426
10427 @item --public-key=@var{file}
10428 @itemx --private-key=@var{file}
10429 Use the specific @var{file}s as the public/private key pair used to sign
10430 the store items being published.
10431
10432 The files must correspond to the same key pair (the private key is used
10433 for signing and the public key is merely advertised in the signature
10434 metadata). They must contain keys in the canonical s-expression format
10435 as produced by @command{guix archive --generate-key} (@pxref{Invoking
10436 guix archive}). By default, @file{/etc/guix/signing-key.pub} and
10437 @file{/etc/guix/signing-key.sec} are used.
10438
10439 @item --repl[=@var{port}]
10440 @itemx -r [@var{port}]
10441 Spawn a Guile REPL server (@pxref{REPL Servers,,, guile, GNU Guile
10442 Reference Manual}) on @var{port} (37146 by default). This is used
10443 primarily for debugging a running @command{guix publish} server.
10444 @end table
10445
10446 Enabling @command{guix publish} on Guix System is a one-liner: just
10447 instantiate a @code{guix-publish-service-type} service in the @code{services} field
10448 of the @code{operating-system} declaration (@pxref{guix-publish-service-type,
10449 @code{guix-publish-service-type}}).
10450
10451 If you are instead running Guix on a ``foreign distro'', follow these
10452 instructions:
10453
10454 @itemize
10455 @item
10456 If your host distro uses the systemd init system:
10457
10458 @example
10459 # ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \
10460 /etc/systemd/system/
10461 # systemctl start guix-publish && systemctl enable guix-publish
10462 @end example
10463
10464 @item
10465 If your host distro uses the Upstart init system:
10466
10467 @example
10468 # ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/
10469 # start guix-publish
10470 @end example
10471
10472 @item
10473 Otherwise, proceed similarly with your distro's init system.
10474 @end itemize
10475
10476 @node Invoking guix challenge
10477 @section Invoking @command{guix challenge}
10478
10479 @cindex reproducible builds
10480 @cindex verifiable builds
10481 @cindex @command{guix challenge}
10482 @cindex challenge
10483 Do the binaries provided by this server really correspond to the source
10484 code it claims to build? Is a package build process deterministic?
10485 These are the questions the @command{guix challenge} command attempts to
10486 answer.
10487
10488 The former is obviously an important question: Before using a substitute
10489 server (@pxref{Substitutes}), one had better @emph{verify} that it
10490 provides the right binaries, and thus @emph{challenge} it. The latter
10491 is what enables the former: If package builds are deterministic, then
10492 independent builds of the package should yield the exact same result,
10493 bit for bit; if a server provides a binary different from the one
10494 obtained locally, it may be either corrupt or malicious.
10495
10496 We know that the hash that shows up in @file{/gnu/store} file names is
10497 the hash of all the inputs of the process that built the file or
10498 directory---compilers, libraries, build scripts,
10499 etc. (@pxref{Introduction}). Assuming deterministic build processes,
10500 one store file name should map to exactly one build output.
10501 @command{guix challenge} checks whether there is, indeed, a single
10502 mapping by comparing the build outputs of several independent builds of
10503 any given store item.
10504
10505 The command output looks like this:
10506
10507 @smallexample
10508 $ guix challenge --substitute-urls="https://@value{SUBSTITUTE-SERVER} https://guix.example.org"
10509 updating list of substitutes from 'https://@value{SUBSTITUTE-SERVER}'... 100.0%
10510 updating list of substitutes from 'https://guix.example.org'... 100.0%
10511 /gnu/store/@dots{}-openssl-1.0.2d contents differ:
10512 local hash: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
10513 https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-openssl-1.0.2d: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
10514 https://guix.example.org/nar/@dots{}-openssl-1.0.2d: 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim
10515 differing files:
10516 /lib/libcrypto.so.1.1
10517 /lib/libssl.so.1.1
10518
10519 /gnu/store/@dots{}-git-2.5.0 contents differ:
10520 local hash: 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha
10521 https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-git-2.5.0: 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f
10522 https://guix.example.org/nar/@dots{}-git-2.5.0: 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73
10523 differing file:
10524 /libexec/git-core/git-fsck
10525
10526 /gnu/store/@dots{}-pius-2.1.1 contents differ:
10527 local hash: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
10528 https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-pius-2.1.1: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
10529 https://guix.example.org/nar/@dots{}-pius-2.1.1: 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs
10530 differing file:
10531 /share/man/man1/pius.1.gz
10532
10533 @dots{}
10534
10535 6,406 store items were analyzed:
10536 - 4,749 (74.1%) were identical
10537 - 525 (8.2%) differed
10538 - 1,132 (17.7%) were inconclusive
10539 @end smallexample
10540
10541 @noindent
10542 In this example, @command{guix challenge} first scans the store to
10543 determine the set of locally-built derivations---as opposed to store
10544 items that were downloaded from a substitute server---and then queries
10545 all the substitute servers. It then reports those store items for which
10546 the servers obtained a result different from the local build.
10547
10548 @cindex non-determinism, in package builds
10549 As an example, @code{guix.example.org} always gets a different answer.
10550 Conversely, @code{@value{SUBSTITUTE-SERVER}} agrees with local builds, except in the
10551 case of Git. This might indicate that the build process of Git is
10552 non-deterministic, meaning that its output varies as a function of
10553 various things that Guix does not fully control, in spite of building
10554 packages in isolated environments (@pxref{Features}). Most common
10555 sources of non-determinism include the addition of timestamps in build
10556 results, the inclusion of random numbers, and directory listings sorted
10557 by inode number. See @uref{https://reproducible-builds.org/docs/}, for
10558 more information.
10559
10560 To find out what is wrong with this Git binary, the easiest approach is
10561 to run:
10562
10563 @example
10564 guix challenge git \
10565 --diff=diffoscope \
10566 --substitute-urls="https://@value{SUBSTITUTE-SERVER} https://guix.example.org"
10567 @end example
10568
10569 This automatically invokes @command{diffoscope}, which displays detailed
10570 information about files that differ.
10571
10572 Alternately, we can do something along these lines (@pxref{Invoking guix
10573 archive}):
10574
10575 @example
10576 $ wget -q -O - https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-git-2.5.0 \
10577 | guix archive -x /tmp/git
10578 $ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git
10579 @end example
10580
10581 This command shows the difference between the files resulting from the
10582 local build, and the files resulting from the build on
10583 @code{@value{SUBSTITUTE-SERVER}} (@pxref{Overview, Comparing and Merging Files,,
10584 diffutils, Comparing and Merging Files}). The @command{diff} command
10585 works great for text files. When binary files differ, a better option
10586 is @uref{https://diffoscope.org/, Diffoscope}, a tool that helps
10587 visualize differences for all kinds of files.
10588
10589 Once you have done that work, you can tell whether the differences are due
10590 to a non-deterministic build process or to a malicious server. We try
10591 hard to remove sources of non-determinism in packages to make it easier
10592 to verify substitutes, but of course, this is a process that
10593 involves not just Guix, but a large part of the free software community.
10594 In the meantime, @command{guix challenge} is one tool to help address
10595 the problem.
10596
10597 If you are writing packages for Guix, you are encouraged to check
10598 whether @code{@value{SUBSTITUTE-SERVER}} and other substitute servers obtain the
10599 same build result as you did with:
10600
10601 @example
10602 $ guix challenge @var{package}
10603 @end example
10604
10605 @noindent
10606 where @var{package} is a package specification such as
10607 @code{guile@@2.0} or @code{glibc:debug}.
10608
10609 The general syntax is:
10610
10611 @example
10612 guix challenge @var{options} [@var{packages}@dots{}]
10613 @end example
10614
10615 When a difference is found between the hash of a locally-built item and
10616 that of a server-provided substitute, or among substitutes provided by
10617 different servers, the command displays it as in the example above and
10618 its exit code is 2 (other non-zero exit codes denote other kinds of
10619 errors.)
10620
10621 The one option that matters is:
10622
10623 @table @code
10624
10625 @item --substitute-urls=@var{urls}
10626 Consider @var{urls} the whitespace-separated list of substitute source
10627 URLs to compare to.
10628
10629 @item --diff=@var{mode}
10630 Upon mismatches, show differences according to @var{mode}, one of:
10631
10632 @table @asis
10633 @item @code{simple} (the default)
10634 Show the list of files that differ.
10635
10636 @item @code{diffoscope}
10637 @itemx @var{command}
10638 Invoke @uref{https://diffoscope.org/, Diffoscope}, passing it
10639 two directories whose contents do not match.
10640
10641 When @var{command} is an absolute file name, run @var{command} instead
10642 of Diffoscope.
10643
10644 @item @code{none}
10645 Do not show further details about the differences.
10646 @end table
10647
10648 Thus, unless @code{--diff=none} is passed, @command{guix challenge}
10649 downloads the store items from the given substitute servers so that it
10650 can compare them.
10651
10652 @item --verbose
10653 @itemx -v
10654 Show details about matches (identical contents) in addition to
10655 information about mismatches.
10656
10657 @end table
10658
10659 @node Invoking guix copy
10660 @section Invoking @command{guix copy}
10661
10662 @cindex copy, of store items, over SSH
10663 @cindex SSH, copy of store items
10664 @cindex sharing store items across machines
10665 @cindex transferring store items across machines
10666 The @command{guix copy} command copies items from the store of one
10667 machine to that of another machine over a secure shell (SSH)
10668 connection@footnote{This command is available only when Guile-SSH was
10669 found. @xref{Requirements}, for details.}. For example, the following
10670 command copies the @code{coreutils} package, the user's profile, and all
10671 their dependencies over to @var{host}, logged in as @var{user}:
10672
10673 @example
10674 guix copy --to=@var{user}@@@var{host} \
10675 coreutils `readlink -f ~/.guix-profile`
10676 @end example
10677
10678 If some of the items to be copied are already present on @var{host},
10679 they are not actually sent.
10680
10681 The command below retrieves @code{libreoffice} and @code{gimp} from
10682 @var{host}, assuming they are available there:
10683
10684 @example
10685 guix copy --from=@var{host} libreoffice gimp
10686 @end example
10687
10688 The SSH connection is established using the Guile-SSH client, which is
10689 compatible with OpenSSH: it honors @file{~/.ssh/known_hosts} and
10690 @file{~/.ssh/config}, and uses the SSH agent for authentication.
10691
10692 The key used to sign items that are sent must be accepted by the remote
10693 machine. Likewise, the key used by the remote machine to sign items you
10694 are retrieving must be in @file{/etc/guix/acl} so it is accepted by your
10695 own daemon. @xref{Invoking guix archive}, for more information about
10696 store item authentication.
10697
10698 The general syntax is:
10699
10700 @example
10701 guix copy [--to=@var{spec}|--from=@var{spec}] @var{items}@dots{}
10702 @end example
10703
10704 You must always specify one of the following options:
10705
10706 @table @code
10707 @item --to=@var{spec}
10708 @itemx --from=@var{spec}
10709 Specify the host to send to or receive from. @var{spec} must be an SSH
10710 spec such as @code{example.org}, @code{charlie@@example.org}, or
10711 @code{charlie@@example.org:2222}.
10712 @end table
10713
10714 The @var{items} can be either package names, such as @code{gimp}, or
10715 store items, such as @file{/gnu/store/@dots{}-idutils-4.6}.
10716
10717 When specifying the name of a package to send, it is first built if
10718 needed, unless @option{--dry-run} was specified. Common build options
10719 are supported (@pxref{Common Build Options}).
10720
10721
10722 @node Invoking guix container
10723 @section Invoking @command{guix container}
10724 @cindex container
10725 @cindex @command{guix container}
10726 @quotation Note
10727 As of version @value{VERSION}, this tool is experimental. The interface
10728 is subject to radical change in the future.
10729 @end quotation
10730
10731 The purpose of @command{guix container} is to manipulate processes
10732 running within an isolated environment, commonly known as a
10733 ``container'', typically created by the @command{guix environment}
10734 (@pxref{Invoking guix environment}) and @command{guix system container}
10735 (@pxref{Invoking guix system}) commands.
10736
10737 The general syntax is:
10738
10739 @example
10740 guix container @var{action} @var{options}@dots{}
10741 @end example
10742
10743 @var{action} specifies the operation to perform with a container, and
10744 @var{options} specifies the context-specific arguments for the action.
10745
10746 The following actions are available:
10747
10748 @table @code
10749 @item exec
10750 Execute a command within the context of a running container.
10751
10752 The syntax is:
10753
10754 @example
10755 guix container exec @var{pid} @var{program} @var{arguments}@dots{}
10756 @end example
10757
10758 @var{pid} specifies the process ID of the running container.
10759 @var{program} specifies an executable file name within the root file
10760 system of the container. @var{arguments} are the additional options that
10761 will be passed to @var{program}.
10762
10763 The following command launches an interactive login shell inside a
10764 Guix system container, started by @command{guix system container}, and whose
10765 process ID is 9001:
10766
10767 @example
10768 guix container exec 9001 /run/current-system/profile/bin/bash --login
10769 @end example
10770
10771 Note that the @var{pid} cannot be the parent process of a container. It
10772 must be PID 1 of the container or one of its child processes.
10773
10774 @end table
10775
10776 @node Invoking guix weather
10777 @section Invoking @command{guix weather}
10778
10779 Occasionally you're grumpy because substitutes are lacking and you end
10780 up building packages by yourself (@pxref{Substitutes}). The
10781 @command{guix weather} command reports on substitute availability on the
10782 specified servers so you can have an idea of whether you'll be grumpy
10783 today. It can sometimes be useful info as a user, but it is primarily
10784 useful to people running @command{guix publish} (@pxref{Invoking guix
10785 publish}).
10786
10787 @cindex statistics, for substitutes
10788 @cindex availability of substitutes
10789 @cindex substitute availability
10790 @cindex weather, substitute availability
10791 Here's a sample run:
10792
10793 @example
10794 $ guix weather --substitute-urls=https://guix.example.org
10795 computing 5,872 package derivations for x86_64-linux...
10796 looking for 6,128 store items on https://guix.example.org..
10797 updating list of substitutes from 'https://guix.example.org'... 100.0%
10798 https://guix.example.org
10799 43.4% substitutes available (2,658 out of 6,128)
10800 7,032.5 MiB of nars (compressed)
10801 19,824.2 MiB on disk (uncompressed)
10802 0.030 seconds per request (182.9 seconds in total)
10803 33.5 requests per second
10804
10805 9.8% (342 out of 3,470) of the missing items are queued
10806 867 queued builds
10807 x86_64-linux: 518 (59.7%)
10808 i686-linux: 221 (25.5%)
10809 aarch64-linux: 128 (14.8%)
10810 build rate: 23.41 builds per hour
10811 x86_64-linux: 11.16 builds per hour
10812 i686-linux: 6.03 builds per hour
10813 aarch64-linux: 6.41 builds per hour
10814 @end example
10815
10816 @cindex continuous integration, statistics
10817 As you can see, it reports the fraction of all the packages for which
10818 substitutes are available on the server---regardless of whether
10819 substitutes are enabled, and regardless of whether this server's signing
10820 key is authorized. It also reports the size of the compressed archives
10821 (``nars'') provided by the server, the size the corresponding store
10822 items occupy in the store (assuming deduplication is turned off), and
10823 the server's throughput. The second part gives continuous integration
10824 (CI) statistics, if the server supports it. In addition, using the
10825 @option{--coverage} option, @command{guix weather} can list ``important''
10826 package substitutes missing on the server (see below).
10827
10828 To achieve that, @command{guix weather} queries over HTTP(S) meta-data
10829 (@dfn{narinfos}) for all the relevant store items. Like @command{guix
10830 challenge}, it ignores signatures on those substitutes, which is
10831 innocuous since the command only gathers statistics and cannot install
10832 those substitutes.
10833
10834 The general syntax is:
10835
10836 @example
10837 guix weather @var{options}@dots{} [@var{packages}@dots{}]
10838 @end example
10839
10840 When @var{packages} is omitted, @command{guix weather} checks the availability
10841 of substitutes for @emph{all} the packages, or for those specified with
10842 @option{--manifest}; otherwise it only considers the specified packages. It
10843 is also possible to query specific system types with @option{--system}.
10844 @command{guix weather} exits with a non-zero code when the fraction of
10845 available substitutes is below 100%.
10846
10847 The available options are listed below.
10848
10849 @table @code
10850 @item --substitute-urls=@var{urls}
10851 @var{urls} is the space-separated list of substitute server URLs to
10852 query. When this option is omitted, the default set of substitute
10853 servers is queried.
10854
10855 @item --system=@var{system}
10856 @itemx -s @var{system}
10857 Query substitutes for @var{system}---e.g., @code{aarch64-linux}. This
10858 option can be repeated, in which case @command{guix weather} will query
10859 substitutes for several system types.
10860
10861 @item --manifest=@var{file}
10862 Instead of querying substitutes for all the packages, only ask for those
10863 specified in @var{file}. @var{file} must contain a @dfn{manifest}, as
10864 with the @code{-m} option of @command{guix package} (@pxref{Invoking
10865 guix package}).
10866
10867 This option can be repeated several times, in which case the manifests
10868 are concatenated.
10869
10870 @item --coverage[=@var{count}]
10871 @itemx -c [@var{count}]
10872 Report on substitute coverage for packages: list packages with at least
10873 @var{count} dependents (zero by default) for which substitutes are
10874 unavailable. Dependent packages themselves are not listed: if @var{b} depends
10875 on @var{a} and @var{a} has no substitutes, only @var{a} is listed, even though
10876 @var{b} usually lacks substitutes as well. The result looks like this:
10877
10878 @example
10879 $ guix weather --substitute-urls=@value{SUBSTITUTE-URL} -c 10
10880 computing 8,983 package derivations for x86_64-linux...
10881 looking for 9,343 store items on @value{SUBSTITUTE-URL}...
10882 updating substitutes from '@value{SUBSTITUTE-URL}'... 100.0%
10883 @value{SUBSTITUTE-URL}
10884 64.7% substitutes available (6,047 out of 9,343)
10885 @dots{}
10886 2502 packages are missing from '@value{SUBSTITUTE-URL}' for 'x86_64-linux', among which:
10887 58 kcoreaddons@@5.49.0 /gnu/store/@dots{}-kcoreaddons-5.49.0
10888 46 qgpgme@@1.11.1 /gnu/store/@dots{}-qgpgme-1.11.1
10889 37 perl-http-cookiejar@@0.008 /gnu/store/@dots{}-perl-http-cookiejar-0.008
10890 @dots{}
10891 @end example
10892
10893 What this example shows is that @code{kcoreaddons} and presumably the 58
10894 packages that depend on it have no substitutes at @code{ci.guix.info};
10895 likewise for @code{qgpgme} and the 46 packages that depend on it.
10896
10897 If you are a Guix developer, or if you are taking care of this build farm,
10898 you'll probably want to have a closer look at these packages: they may simply
10899 fail to build.
10900
10901 @item --display-missing
10902 Display the list of store items for which substitutes are missing.
10903 @end table
10904
10905 @node Invoking guix processes
10906 @section Invoking @command{guix processes}
10907
10908 The @command{guix processes} command can be useful to developers and system
10909 administrators, especially on multi-user machines and on build farms: it lists
10910 the current sessions (connections to the daemon), as well as information about
10911 the processes involved@footnote{Remote sessions, when @command{guix-daemon} is
10912 started with @option{--listen} specifying a TCP endpoint, are @emph{not}
10913 listed.}. Here's an example of the information it returns:
10914
10915 @example
10916 $ sudo guix processes
10917 SessionPID: 19002
10918 ClientPID: 19090
10919 ClientCommand: guix environment --ad-hoc python
10920
10921 SessionPID: 19402
10922 ClientPID: 19367
10923 ClientCommand: guix publish -u guix-publish -p 3000 -C 9 @dots{}
10924
10925 SessionPID: 19444
10926 ClientPID: 19419
10927 ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
10928 LockHeld: /gnu/store/@dots{}-perl-ipc-cmd-0.96.lock
10929 LockHeld: /gnu/store/@dots{}-python-six-bootstrap-1.11.0.lock
10930 LockHeld: /gnu/store/@dots{}-libjpeg-turbo-2.0.0.lock
10931 ChildProcess: 20495: guix offload x86_64-linux 7200 1 28800
10932 ChildProcess: 27733: guix offload x86_64-linux 7200 1 28800
10933 ChildProcess: 27793: guix offload x86_64-linux 7200 1 28800
10934 @end example
10935
10936 In this example we see that @command{guix-daemon} has three clients:
10937 @command{guix environment}, @command{guix publish}, and the Cuirass continuous
10938 integration tool; their process identifier (PID) is given by the
10939 @code{ClientPID} field. The @code{SessionPID} field gives the PID of the
10940 @command{guix-daemon} sub-process of this particular session.
10941
10942 The @code{LockHeld} fields show which store items are currently locked by this
10943 session, which corresponds to store items being built or substituted (the
10944 @code{LockHeld} field is not displayed when @command{guix processes} is not
10945 running as root.) Last, by looking at the @code{ChildProcess} field, we
10946 understand that these three builds are being offloaded (@pxref{Daemon Offload
10947 Setup}).
10948
10949 The output is in Recutils format so we can use the handy @command{recsel}
10950 command to select sessions of interest (@pxref{Selection Expressions,,,
10951 recutils, GNU recutils manual}). As an example, the command shows the command
10952 line and PID of the client that triggered the build of a Perl package:
10953
10954 @example
10955 $ sudo guix processes | \
10956 recsel -p ClientPID,ClientCommand -e 'LockHeld ~ "perl"'
10957 ClientPID: 19419
10958 ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
10959 @end example
10960
10961 @node System Configuration
10962 @chapter System Configuration
10963
10964 @cindex system configuration
10965 Guix System supports a consistent whole-system configuration
10966 mechanism. By that we mean that all aspects of the global system
10967 configuration---such as the available system services, timezone and
10968 locale settings, user accounts---are declared in a single place. Such
10969 a @dfn{system configuration} can be @dfn{instantiated}---i.e., effected.
10970
10971 One of the advantages of putting all the system configuration under the
10972 control of Guix is that it supports transactional system upgrades, and
10973 makes it possible to roll back to a previous system instantiation,
10974 should something go wrong with the new one (@pxref{Features}). Another
10975 advantage is that it makes it easy to replicate the exact same configuration
10976 across different machines, or at different points in time, without
10977 having to resort to additional administration tools layered on top of
10978 the own tools of the system.
10979 @c Yes, we're talking of Puppet, Chef, & co. here. ↑
10980
10981 This section describes this mechanism. First we focus on the system
10982 administrator's viewpoint---explaining how the system is configured and
10983 instantiated. Then we show how this mechanism can be extended, for
10984 instance to support new system services.
10985
10986 @menu
10987 * Using the Configuration System:: Customizing your GNU system.
10988 * operating-system Reference:: Detail of operating-system declarations.
10989 * File Systems:: Configuring file system mounts.
10990 * Mapped Devices:: Block device extra processing.
10991 * User Accounts:: Specifying user accounts.
10992 * Keyboard Layout:: How the system interprets key strokes.
10993 * Locales:: Language and cultural convention settings.
10994 * Services:: Specifying system services.
10995 * Setuid Programs:: Programs running with root privileges.
10996 * X.509 Certificates:: Authenticating HTTPS servers.
10997 * Name Service Switch:: Configuring libc's name service switch.
10998 * Initial RAM Disk:: Linux-Libre bootstrapping.
10999 * Bootloader Configuration:: Configuring the boot loader.
11000 * Invoking guix system:: Instantiating a system configuration.
11001 * Invoking guix deploy:: Deploying a system configuration to a remote host.
11002 * Running Guix in a VM:: How to run Guix System in a virtual machine.
11003 * Defining Services:: Adding new service definitions.
11004 @end menu
11005
11006 @node Using the Configuration System
11007 @section Using the Configuration System
11008
11009 The operating system is configured by providing an
11010 @code{operating-system} declaration in a file that can then be passed to
11011 the @command{guix system} command (@pxref{Invoking guix system}). A
11012 simple setup, with the default system services, the default Linux-Libre
11013 kernel, initial RAM disk, and boot loader looks like this:
11014
11015 @findex operating-system
11016 @lisp
11017 @include os-config-bare-bones.texi
11018 @end lisp
11019
11020 This example should be self-describing. Some of the fields defined
11021 above, such as @code{host-name} and @code{bootloader}, are mandatory.
11022 Others, such as @code{packages} and @code{services}, can be omitted, in
11023 which case they get a default value.
11024
11025 Below we discuss the effect of some of the most important fields
11026 (@pxref{operating-system Reference}, for details about all the available
11027 fields), and how to @dfn{instantiate} the operating system using
11028 @command{guix system}.
11029
11030 @unnumberedsubsec Bootloader
11031
11032 @cindex legacy boot, on Intel machines
11033 @cindex BIOS boot, on Intel machines
11034 @cindex UEFI boot
11035 @cindex EFI boot
11036 The @code{bootloader} field describes the method that will be used to boot
11037 your system. Machines based on Intel processors can boot in ``legacy'' BIOS
11038 mode, as in the example above. However, more recent machines rely instead on
11039 the @dfn{Unified Extensible Firmware Interface} (UEFI) to boot. In that case,
11040 the @code{bootloader} field should contain something along these lines:
11041
11042 @lisp
11043 (bootloader-configuration
11044 (bootloader grub-efi-bootloader)
11045 (target "/boot/efi"))
11046 @end lisp
11047
11048 @xref{Bootloader Configuration}, for more information on the available
11049 configuration options.
11050
11051 @unnumberedsubsec Globally-Visible Packages
11052
11053 @vindex %base-packages
11054 The @code{packages} field lists packages that will be globally visible
11055 on the system, for all user accounts---i.e., in every user's @code{PATH}
11056 environment variable---in addition to the per-user profiles
11057 (@pxref{Invoking guix package}). The @code{%base-packages} variable
11058 provides all the tools one would expect for basic user and administrator
11059 tasks---including the GNU Core Utilities, the GNU Networking Utilities,
11060 the GNU Zile lightweight text editor, @command{find}, @command{grep},
11061 etc. The example above adds GNU@tie{}Screen to those,
11062 taken from the @code{(gnu packages screen)}
11063 module (@pxref{Package Modules}). The
11064 @code{(list package output)} syntax can be used to add a specific output
11065 of a package:
11066
11067 @lisp
11068 (use-modules (gnu packages))
11069 (use-modules (gnu packages dns))
11070
11071 (operating-system
11072 ;; ...
11073 (packages (cons (list bind "utils")
11074 %base-packages)))
11075 @end lisp
11076
11077 @findex specification->package
11078 Referring to packages by variable name, like @code{bind} above, has
11079 the advantage of being unambiguous; it also allows typos and such to be
11080 diagnosed right away as ``unbound variables''. The downside is that one
11081 needs to know which module defines which package, and to augment the
11082 @code{use-package-modules} line accordingly. To avoid that, one can use
11083 the @code{specification->package} procedure of the @code{(gnu packages)}
11084 module, which returns the best package for a given name or name and
11085 version:
11086
11087 @lisp
11088 (use-modules (gnu packages))
11089
11090 (operating-system
11091 ;; ...
11092 (packages (append (map specification->package
11093 '("tcpdump" "htop" "gnupg@@2.0"))
11094 %base-packages)))
11095 @end lisp
11096
11097 @unnumberedsubsec System Services
11098
11099 @cindex services
11100 @vindex %base-services
11101 The @code{services} field lists @dfn{system services} to be made
11102 available when the system starts (@pxref{Services}).
11103 The @code{operating-system} declaration above specifies that, in
11104 addition to the basic services, we want the OpenSSH secure shell
11105 daemon listening on port 2222 (@pxref{Networking Services,
11106 @code{openssh-service-type}}). Under the hood,
11107 @code{openssh-service-type} arranges so that @command{sshd} is started with the
11108 right command-line options, possibly with supporting configuration files
11109 generated as needed (@pxref{Defining Services}).
11110
11111 @cindex customization, of services
11112 @findex modify-services
11113 Occasionally, instead of using the base services as is, you will want to
11114 customize them. To do this, use @code{modify-services} (@pxref{Service
11115 Reference, @code{modify-services}}) to modify the list.
11116
11117 For example, suppose you want to modify @code{guix-daemon} and Mingetty
11118 (the console log-in) in the @code{%base-services} list (@pxref{Base
11119 Services, @code{%base-services}}). To do that, you can write the
11120 following in your operating system declaration:
11121
11122 @lisp
11123 (define %my-services
11124 ;; My very own list of services.
11125 (modify-services %base-services
11126 (guix-service-type config =>
11127 (guix-configuration
11128 (inherit config)
11129 (use-substitutes? #f)
11130 (extra-options '("--gc-keep-derivations"))))
11131 (mingetty-service-type config =>
11132 (mingetty-configuration
11133 (inherit config)))))
11134
11135 (operating-system
11136 ;; @dots{}
11137 (services %my-services))
11138 @end lisp
11139
11140 This changes the configuration---i.e., the service parameters---of the
11141 @code{guix-service-type} instance, and that of all the
11142 @code{mingetty-service-type} instances in the @code{%base-services} list.
11143 Observe how this is accomplished: first, we arrange for the original
11144 configuration to be bound to the identifier @code{config} in the
11145 @var{body}, and then we write the @var{body} so that it evaluates to the
11146 desired configuration. In particular, notice how we use @code{inherit}
11147 to create a new configuration which has the same values as the old
11148 configuration, but with a few modifications.
11149
11150 @cindex encrypted disk
11151 The configuration for a typical ``desktop'' usage, with an encrypted
11152 root partition, the X11 display
11153 server, GNOME and Xfce (users can choose which of these desktop
11154 environments to use at the log-in screen by pressing @kbd{F1}), network
11155 management, power management, and more, would look like this:
11156
11157 @lisp
11158 @include os-config-desktop.texi
11159 @end lisp
11160
11161 A graphical system with a choice of lightweight window managers
11162 instead of full-blown desktop environments would look like this:
11163
11164 @lisp
11165 @include os-config-lightweight-desktop.texi
11166 @end lisp
11167
11168 This example refers to the @file{/boot/efi} file system by its UUID,
11169 @code{1234-ABCD}. Replace this UUID with the right UUID on your system,
11170 as returned by the @command{blkid} command.
11171
11172 @xref{Desktop Services}, for the exact list of services provided by
11173 @code{%desktop-services}. @xref{X.509 Certificates}, for background
11174 information about the @code{nss-certs} package that is used here.
11175
11176 Again, @code{%desktop-services} is just a list of service objects. If
11177 you want to remove services from there, you can do so using the
11178 procedures for list filtering (@pxref{SRFI-1 Filtering and
11179 Partitioning,,, guile, GNU Guile Reference Manual}). For instance, the
11180 following expression returns a list that contains all the services in
11181 @code{%desktop-services} minus the Avahi service:
11182
11183 @lisp
11184 (remove (lambda (service)
11185 (eq? (service-kind service) avahi-service-type))
11186 %desktop-services)
11187 @end lisp
11188
11189 @unnumberedsubsec Instantiating the System
11190
11191 Assuming the @code{operating-system} declaration
11192 is stored in the @file{my-system-config.scm}
11193 file, the @command{guix system reconfigure my-system-config.scm} command
11194 instantiates that configuration, and makes it the default GRUB boot
11195 entry (@pxref{Invoking guix system}).
11196
11197 The normal way to change the system configuration is by updating this
11198 file and re-running @command{guix system reconfigure}. One should never
11199 have to touch files in @file{/etc} or to run commands that modify the
11200 system state such as @command{useradd} or @command{grub-install}. In
11201 fact, you must avoid that since that would not only void your warranty
11202 but also prevent you from rolling back to previous versions of your
11203 system, should you ever need to.
11204
11205 @cindex roll-back, of the operating system
11206 Speaking of roll-back, each time you run @command{guix system
11207 reconfigure}, a new @dfn{generation} of the system is created---without
11208 modifying or deleting previous generations. Old system generations get
11209 an entry in the bootloader boot menu, allowing you to boot them in case
11210 something went wrong with the latest generation. Reassuring, no? The
11211 @command{guix system list-generations} command lists the system
11212 generations available on disk. It is also possible to roll back the
11213 system via the commands @command{guix system roll-back} and
11214 @command{guix system switch-generation}.
11215
11216 Although the @command{guix system reconfigure} command will not modify
11217 previous generations, you must take care when the current generation is not
11218 the latest (e.g., after invoking @command{guix system roll-back}), since
11219 the operation might overwrite a later generation (@pxref{Invoking guix
11220 system}).
11221
11222 @unnumberedsubsec The Programming Interface
11223
11224 At the Scheme level, the bulk of an @code{operating-system} declaration
11225 is instantiated with the following monadic procedure (@pxref{The Store
11226 Monad}):
11227
11228 @deffn {Monadic Procedure} operating-system-derivation os
11229 Return a derivation that builds @var{os}, an @code{operating-system}
11230 object (@pxref{Derivations}).
11231
11232 The output of the derivation is a single directory that refers to all
11233 the packages, configuration files, and other supporting files needed to
11234 instantiate @var{os}.
11235 @end deffn
11236
11237 This procedure is provided by the @code{(gnu system)} module. Along
11238 with @code{(gnu services)} (@pxref{Services}), this module contains the
11239 guts of Guix System. Make sure to visit it!
11240
11241
11242 @node operating-system Reference
11243 @section @code{operating-system} Reference
11244
11245 This section summarizes all the options available in
11246 @code{operating-system} declarations (@pxref{Using the Configuration
11247 System}).
11248
11249 @deftp {Data Type} operating-system
11250 This is the data type representing an operating system configuration.
11251 By that, we mean all the global system configuration, not per-user
11252 configuration (@pxref{Using the Configuration System}).
11253
11254 @table @asis
11255 @item @code{kernel} (default: @code{linux-libre})
11256 The package object of the operating system kernel to use@footnote{Currently
11257 only the Linux-libre kernel is supported. In the future, it will be
11258 possible to use the GNU@tie{}Hurd.}.
11259
11260 @item @code{kernel-loadable-modules} (default: '())
11261 A list of objects (usually packages) to collect loadable kernel modules
11262 from--e.g. @code{(list ddcci-driver-linux)}.
11263
11264 @item @code{kernel-arguments} (default: @code{'("quiet")})
11265 List of strings or gexps representing additional arguments to pass on
11266 the command-line of the kernel---e.g., @code{("console=ttyS0")}.
11267
11268 @item @code{bootloader}
11269 The system bootloader configuration object. @xref{Bootloader Configuration}.
11270
11271 @item @code{label}
11272 This is the label (a string) as it appears in the bootloader's menu entry.
11273 The default label includes the kernel name and version.
11274
11275 @item @code{keyboard-layout} (default: @code{#f})
11276 This field specifies the keyboard layout to use in the console. It can be
11277 either @code{#f}, in which case the default keyboard layout is used (usually
11278 US English), or a @code{<keyboard-layout>} record.
11279
11280 This keyboard layout is in effect as soon as the kernel has booted. For
11281 instance, it is the keyboard layout in effect when you type a passphrase if
11282 your root file system is on a @code{luks-device-mapping} mapped device
11283 (@pxref{Mapped Devices}).
11284
11285 @quotation Note
11286 This does @emph{not} specify the keyboard layout used by the bootloader, nor
11287 that used by the graphical display server. @xref{Bootloader Configuration},
11288 for information on how to specify the bootloader's keyboard layout. @xref{X
11289 Window}, for information on how to specify the keyboard layout used by the X
11290 Window System.
11291 @end quotation
11292
11293 @item @code{initrd-modules} (default: @code{%base-initrd-modules})
11294 @cindex initrd
11295 @cindex initial RAM disk
11296 The list of Linux kernel modules that need to be available in the
11297 initial RAM disk. @xref{Initial RAM Disk}.
11298
11299 @item @code{initrd} (default: @code{base-initrd})
11300 A procedure that returns an initial RAM disk for the Linux
11301 kernel. This field is provided to support low-level customization and
11302 should rarely be needed for casual use. @xref{Initial RAM Disk}.
11303
11304 @item @code{firmware} (default: @code{%base-firmware})
11305 @cindex firmware
11306 List of firmware packages loadable by the operating system kernel.
11307
11308 The default includes firmware needed for Atheros- and Broadcom-based
11309 WiFi devices (Linux-libre modules @code{ath9k} and @code{b43-open},
11310 respectively). @xref{Hardware Considerations}, for more info on
11311 supported hardware.
11312
11313 @item @code{host-name}
11314 The host name.
11315
11316 @item @code{hosts-file}
11317 @cindex hosts file
11318 A file-like object (@pxref{G-Expressions, file-like objects}) for use as
11319 @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library
11320 Reference Manual}). The default is a file with entries for
11321 @code{localhost} and @var{host-name}.
11322
11323 @item @code{mapped-devices} (default: @code{'()})
11324 A list of mapped devices. @xref{Mapped Devices}.
11325
11326 @item @code{file-systems}
11327 A list of file systems. @xref{File Systems}.
11328
11329 @item @code{swap-devices} (default: @code{'()})
11330 @cindex swap devices
11331 A list of strings identifying devices or files to be used for ``swap
11332 space'' (@pxref{Memory Concepts,,, libc, The GNU C Library Reference
11333 Manual}). For example, @code{'("/dev/sda3")} or @code{'("/swapfile")}.
11334 It is possible to specify a swap file in a file system on a mapped
11335 device, provided that the necessary device mapping and file system are
11336 also specified. @xref{Mapped Devices} and @ref{File Systems}.
11337
11338 @item @code{users} (default: @code{%base-user-accounts})
11339 @itemx @code{groups} (default: @code{%base-groups})
11340 List of user accounts and groups. @xref{User Accounts}.
11341
11342 If the @code{users} list lacks a user account with UID@tie{}0, a
11343 ``root'' account with UID@tie{}0 is automatically added.
11344
11345 @item @code{skeletons} (default: @code{(default-skeletons)})
11346 A list target file name/file-like object tuples (@pxref{G-Expressions,
11347 file-like objects}). These are the skeleton files that will be added to
11348 the home directory of newly-created user accounts.
11349
11350 For instance, a valid value may look like this:
11351
11352 @lisp
11353 `((".bashrc" ,(plain-file "bashrc" "echo Hello\n"))
11354 (".guile" ,(plain-file "guile"
11355 "(use-modules (ice-9 readline))
11356 (activate-readline)")))
11357 @end lisp
11358
11359 @item @code{issue} (default: @code{%default-issue})
11360 A string denoting the contents of the @file{/etc/issue} file, which is
11361 displayed when users log in on a text console.
11362
11363 @item @code{packages} (default: @code{%base-packages})
11364 The set of packages installed in the global profile, which is accessible
11365 at @file{/run/current-system/profile}.
11366
11367 The default set includes core utilities and it is good practice to
11368 install non-core utilities in user profiles (@pxref{Invoking guix
11369 package}).
11370
11371 @item @code{timezone}
11372 A timezone identifying string---e.g., @code{"Europe/Paris"}.
11373
11374 You can run the @command{tzselect} command to find out which timezone
11375 string corresponds to your region. Choosing an invalid timezone name
11376 causes @command{guix system} to fail.
11377
11378 @item @code{locale} (default: @code{"en_US.utf8"})
11379 The name of the default locale (@pxref{Locale Names,,, libc, The GNU C
11380 Library Reference Manual}). @xref{Locales}, for more information.
11381
11382 @item @code{locale-definitions} (default: @code{%default-locale-definitions})
11383 The list of locale definitions to be compiled and that may be used at
11384 run time. @xref{Locales}.
11385
11386 @item @code{locale-libcs} (default: @code{(list @var{glibc})})
11387 The list of GNU@tie{}libc packages whose locale data and tools are used
11388 to build the locale definitions. @xref{Locales}, for compatibility
11389 considerations that justify this option.
11390
11391 @item @code{name-service-switch} (default: @code{%default-nss})
11392 Configuration of the libc name service switch (NSS)---a
11393 @code{<name-service-switch>} object. @xref{Name Service Switch}, for
11394 details.
11395
11396 @item @code{services} (default: @code{%base-services})
11397 A list of service objects denoting system services. @xref{Services}.
11398
11399 @cindex essential services
11400 @item @code{essential-services} (default: ...)
11401 The list of ``essential services''---i.e., things like instances of
11402 @code{system-service-type} and @code{host-name-service-type} (@pxref{Service
11403 Reference}), which are derived from the operating system definition itself.
11404 As a user you should @emph{never} need to touch this field.
11405
11406 @item @code{pam-services} (default: @code{(base-pam-services)})
11407 @cindex PAM
11408 @cindex pluggable authentication modules
11409 Linux @dfn{pluggable authentication module} (PAM) services.
11410 @c FIXME: Add xref to PAM services section.
11411
11412 @item @code{setuid-programs} (default: @code{%setuid-programs})
11413 List of string-valued G-expressions denoting setuid programs.
11414 @xref{Setuid Programs}.
11415
11416 @item @code{sudoers-file} (default: @code{%sudoers-specification})
11417 @cindex sudoers file
11418 The contents of the @file{/etc/sudoers} file as a file-like object
11419 (@pxref{G-Expressions, @code{local-file} and @code{plain-file}}).
11420
11421 This file specifies which users can use the @command{sudo} command, what
11422 they are allowed to do, and what privileges they may gain. The default
11423 is that only @code{root} and members of the @code{wheel} group may use
11424 @code{sudo}.
11425
11426 @end table
11427
11428 @deffn {Scheme Syntax} this-operating-system
11429 When used in the @emph{lexical scope} of an operating system field definition,
11430 this identifier resolves to the operating system being defined.
11431
11432 The example below shows how to refer to the operating system being defined in
11433 the definition of the @code{label} field:
11434
11435 @lisp
11436 (use-modules (gnu) (guix))
11437
11438 (operating-system
11439 ;; ...
11440 (label (package-full-name
11441 (operating-system-kernel this-operating-system))))
11442 @end lisp
11443
11444 It is an error to refer to @code{this-operating-system} outside an operating
11445 system definition.
11446 @end deffn
11447
11448 @end deftp
11449
11450 @node File Systems
11451 @section File Systems
11452
11453 The list of file systems to be mounted is specified in the
11454 @code{file-systems} field of the operating system declaration
11455 (@pxref{Using the Configuration System}). Each file system is declared
11456 using the @code{file-system} form, like this:
11457
11458 @lisp
11459 (file-system
11460 (mount-point "/home")
11461 (device "/dev/sda3")
11462 (type "ext4"))
11463 @end lisp
11464
11465 As usual, some of the fields are mandatory---those shown in the example
11466 above---while others can be omitted. These are described below.
11467
11468 @deftp {Data Type} file-system
11469 Objects of this type represent file systems to be mounted. They
11470 contain the following members:
11471
11472 @table @asis
11473 @item @code{type}
11474 This is a string specifying the type of the file system---e.g.,
11475 @code{"ext4"}.
11476
11477 @item @code{mount-point}
11478 This designates the place where the file system is to be mounted.
11479
11480 @item @code{device}
11481 This names the ``source'' of the file system. It can be one of three
11482 things: a file system label, a file system UUID, or the name of a
11483 @file{/dev} node. Labels and UUIDs offer a way to refer to file
11484 systems without having to hard-code their actual device
11485 name@footnote{Note that, while it is tempting to use
11486 @file{/dev/disk/by-uuid} and similar device names to achieve the same
11487 result, this is not recommended: These special device nodes are created
11488 by the udev daemon and may be unavailable at the time the device is
11489 mounted.}.
11490
11491 @findex file-system-label
11492 File system labels are created using the @code{file-system-label}
11493 procedure, UUIDs are created using @code{uuid}, and @file{/dev} node are
11494 plain strings. Here's an example of a file system referred to by its
11495 label, as shown by the @command{e2label} command:
11496
11497 @lisp
11498 (file-system
11499 (mount-point "/home")
11500 (type "ext4")
11501 (device (file-system-label "my-home")))
11502 @end lisp
11503
11504 @findex uuid
11505 UUIDs are converted from their string representation (as shown by the
11506 @command{tune2fs -l} command) using the @code{uuid} form@footnote{The
11507 @code{uuid} form expects 16-byte UUIDs as defined in
11508 @uref{https://tools.ietf.org/html/rfc4122, RFC@tie{}4122}. This is the
11509 form of UUID used by the ext2 family of file systems and others, but it
11510 is different from ``UUIDs'' found in FAT file systems, for instance.},
11511 like this:
11512
11513 @lisp
11514 (file-system
11515 (mount-point "/home")
11516 (type "ext4")
11517 (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
11518 @end lisp
11519
11520 When the source of a file system is a mapped device (@pxref{Mapped
11521 Devices}), its @code{device} field @emph{must} refer to the mapped
11522 device name---e.g., @file{"/dev/mapper/root-partition"}.
11523 This is required so that
11524 the system knows that mounting the file system depends on having the
11525 corresponding device mapping established.
11526
11527 @item @code{flags} (default: @code{'()})
11528 This is a list of symbols denoting mount flags. Recognized flags
11529 include @code{read-only}, @code{bind-mount}, @code{no-dev} (disallow
11530 access to special files), @code{no-suid} (ignore setuid and setgid
11531 bits), @code{no-atime} (do not update file access times),
11532 @code{strict-atime} (update file access time), @code{lazy-time} (only
11533 update time on the in-memory version of the file inode), and
11534 @code{no-exec} (disallow program execution).
11535 @xref{Mount-Unmount-Remount,,, libc, The GNU C Library Reference
11536 Manual}, for more information on these flags.
11537
11538 @item @code{options} (default: @code{#f})
11539 This is either @code{#f}, or a string denoting mount options passed to the
11540 file system driver. @xref{Mount-Unmount-Remount,,, libc, The GNU C Library
11541 Reference Manual}, for details and run @command{man 8 mount} for options for
11542 various file systems.
11543
11544 @item @code{mount?} (default: @code{#t})
11545 This value indicates whether to automatically mount the file system when
11546 the system is brought up. When set to @code{#f}, the file system gets
11547 an entry in @file{/etc/fstab} (read by the @command{mount} command) but
11548 is not automatically mounted.
11549
11550 @item @code{needed-for-boot?} (default: @code{#f})
11551 This Boolean value indicates whether the file system is needed when
11552 booting. If that is true, then the file system is mounted when the
11553 initial RAM disk (initrd) is loaded. This is always the case, for
11554 instance, for the root file system.
11555
11556 @item @code{check?} (default: @code{#t})
11557 This Boolean indicates whether the file system needs to be checked for
11558 errors before being mounted.
11559
11560 @item @code{create-mount-point?} (default: @code{#f})
11561 When true, the mount point is created if it does not exist yet.
11562
11563 @item @code{dependencies} (default: @code{'()})
11564 This is a list of @code{<file-system>} or @code{<mapped-device>} objects
11565 representing file systems that must be mounted or mapped devices that
11566 must be opened before (and unmounted or closed after) this one.
11567
11568 As an example, consider a hierarchy of mounts: @file{/sys/fs/cgroup} is
11569 a dependency of @file{/sys/fs/cgroup/cpu} and
11570 @file{/sys/fs/cgroup/memory}.
11571
11572 Another example is a file system that depends on a mapped device, for
11573 example for an encrypted partition (@pxref{Mapped Devices}).
11574 @end table
11575 @end deftp
11576
11577 The @code{(gnu system file-systems)} exports the following useful
11578 variables.
11579
11580 @defvr {Scheme Variable} %base-file-systems
11581 These are essential file systems that are required on normal systems,
11582 such as @code{%pseudo-terminal-file-system} and @code{%immutable-store} (see
11583 below.) Operating system declarations should always contain at least
11584 these.
11585 @end defvr
11586
11587 @defvr {Scheme Variable} %pseudo-terminal-file-system
11588 This is the file system to be mounted as @file{/dev/pts}. It supports
11589 @dfn{pseudo-terminals} created @i{via} @code{openpty} and similar
11590 functions (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference
11591 Manual}). Pseudo-terminals are used by terminal emulators such as
11592 @command{xterm}.
11593 @end defvr
11594
11595 @defvr {Scheme Variable} %shared-memory-file-system
11596 This file system is mounted as @file{/dev/shm} and is used to support
11597 memory sharing across processes (@pxref{Memory-mapped I/O,
11598 @code{shm_open},, libc, The GNU C Library Reference Manual}).
11599 @end defvr
11600
11601 @defvr {Scheme Variable} %immutable-store
11602 This file system performs a read-only ``bind mount'' of
11603 @file{/gnu/store}, making it read-only for all the users including
11604 @code{root}. This prevents against accidental modification by software
11605 running as @code{root} or by system administrators.
11606
11607 The daemon itself is still able to write to the store: it remounts it
11608 read-write in its own ``name space.''
11609 @end defvr
11610
11611 @defvr {Scheme Variable} %binary-format-file-system
11612 The @code{binfmt_misc} file system, which allows handling of arbitrary
11613 executable file types to be delegated to user space. This requires the
11614 @code{binfmt.ko} kernel module to be loaded.
11615 @end defvr
11616
11617 @defvr {Scheme Variable} %fuse-control-file-system
11618 The @code{fusectl} file system, which allows unprivileged users to mount
11619 and unmount user-space FUSE file systems. This requires the
11620 @code{fuse.ko} kernel module to be loaded.
11621 @end defvr
11622
11623 @node Mapped Devices
11624 @section Mapped Devices
11625
11626 @cindex device mapping
11627 @cindex mapped devices
11628 The Linux kernel has a notion of @dfn{device mapping}: a block device,
11629 such as a hard disk partition, can be @dfn{mapped} into another device,
11630 usually in @code{/dev/mapper/},
11631 with additional processing over the data that flows through
11632 it@footnote{Note that the GNU@tie{}Hurd makes no difference between the
11633 concept of a ``mapped device'' and that of a file system: both boil down
11634 to @emph{translating} input/output operations made on a file to
11635 operations on its backing store. Thus, the Hurd implements mapped
11636 devices, like file systems, using the generic @dfn{translator} mechanism
11637 (@pxref{Translators,,, hurd, The GNU Hurd Reference Manual}).}. A
11638 typical example is encryption device mapping: all writes to the mapped
11639 device are encrypted, and all reads are deciphered, transparently.
11640 Guix extends this notion by considering any device or set of devices that
11641 are @dfn{transformed} in some way to create a new device; for instance,
11642 RAID devices are obtained by @dfn{assembling} several other devices, such
11643 as hard disks or partitions, into a new one that behaves as one partition.
11644 Other examples, not yet implemented, are LVM logical volumes.
11645
11646 Mapped devices are declared using the @code{mapped-device} form,
11647 defined as follows; for examples, see below.
11648
11649 @deftp {Data Type} mapped-device
11650 Objects of this type represent device mappings that will be made when
11651 the system boots up.
11652
11653 @table @code
11654 @item source
11655 This is either a string specifying the name of the block device to be mapped,
11656 such as @code{"/dev/sda3"}, or a list of such strings when several devices
11657 need to be assembled for creating a new one.
11658
11659 @item target
11660 This string specifies the name of the resulting mapped device. For
11661 kernel mappers such as encrypted devices of type @code{luks-device-mapping},
11662 specifying @code{"my-partition"} leads to the creation of
11663 the @code{"/dev/mapper/my-partition"} device.
11664 For RAID devices of type @code{raid-device-mapping}, the full device name
11665 such as @code{"/dev/md0"} needs to be given.
11666
11667 @item type
11668 This must be a @code{mapped-device-kind} object, which specifies how
11669 @var{source} is mapped to @var{target}.
11670 @end table
11671 @end deftp
11672
11673 @defvr {Scheme Variable} luks-device-mapping
11674 This defines LUKS block device encryption using the @command{cryptsetup}
11675 command from the package with the same name. It relies on the
11676 @code{dm-crypt} Linux kernel module.
11677 @end defvr
11678
11679 @defvr {Scheme Variable} raid-device-mapping
11680 This defines a RAID device, which is assembled using the @code{mdadm}
11681 command from the package with the same name. It requires a Linux kernel
11682 module for the appropriate RAID level to be loaded, such as @code{raid456}
11683 for RAID-4, RAID-5 or RAID-6, or @code{raid10} for RAID-10.
11684 @end defvr
11685
11686 @cindex disk encryption
11687 @cindex LUKS
11688 The following example specifies a mapping from @file{/dev/sda3} to
11689 @file{/dev/mapper/home} using LUKS---the
11690 @url{https://gitlab.com/cryptsetup/cryptsetup,Linux Unified Key Setup}, a
11691 standard mechanism for disk encryption.
11692 The @file{/dev/mapper/home}
11693 device can then be used as the @code{device} of a @code{file-system}
11694 declaration (@pxref{File Systems}).
11695
11696 @lisp
11697 (mapped-device
11698 (source "/dev/sda3")
11699 (target "home")
11700 (type luks-device-mapping))
11701 @end lisp
11702
11703 Alternatively, to become independent of device numbering, one may obtain
11704 the LUKS UUID (@dfn{unique identifier}) of the source device by a
11705 command like:
11706
11707 @example
11708 cryptsetup luksUUID /dev/sda3
11709 @end example
11710
11711 and use it as follows:
11712
11713 @lisp
11714 (mapped-device
11715 (source (uuid "cb67fc72-0d54-4c88-9d4b-b225f30b0f44"))
11716 (target "home")
11717 (type luks-device-mapping))
11718 @end lisp
11719
11720 @cindex swap encryption
11721 It is also desirable to encrypt swap space, since swap space may contain
11722 sensitive data. One way to accomplish that is to use a swap file in a
11723 file system on a device mapped via LUKS encryption. In this way, the
11724 swap file is encrypted because the entire device is encrypted.
11725 @xref{Preparing for Installation,,Disk Partitioning}, for an example.
11726
11727 A RAID device formed of the partitions @file{/dev/sda1} and @file{/dev/sdb1}
11728 may be declared as follows:
11729
11730 @lisp
11731 (mapped-device
11732 (source (list "/dev/sda1" "/dev/sdb1"))
11733 (target "/dev/md0")
11734 (type raid-device-mapping))
11735 @end lisp
11736
11737 The @file{/dev/md0} device can then be used as the @code{device} of a
11738 @code{file-system} declaration (@pxref{File Systems}).
11739 Note that the RAID level need not be given; it is chosen during the
11740 initial creation and formatting of the RAID device and is determined
11741 automatically later.
11742
11743
11744 @node User Accounts
11745 @section User Accounts
11746
11747 @cindex users
11748 @cindex accounts
11749 @cindex user accounts
11750 User accounts and groups are entirely managed through the
11751 @code{operating-system} declaration. They are specified with the
11752 @code{user-account} and @code{user-group} forms:
11753
11754 @lisp
11755 (user-account
11756 (name "alice")
11757 (group "users")
11758 (supplementary-groups '("wheel" ;allow use of sudo, etc.
11759 "audio" ;sound card
11760 "video" ;video devices such as webcams
11761 "cdrom")) ;the good ol' CD-ROM
11762 (comment "Bob's sister")
11763 (home-directory "/home/alice"))
11764 @end lisp
11765
11766 When booting or upon completion of @command{guix system reconfigure},
11767 the system ensures that only the user accounts and groups specified in
11768 the @code{operating-system} declaration exist, and with the specified
11769 properties. Thus, account or group creations or modifications made by
11770 directly invoking commands such as @command{useradd} are lost upon
11771 reconfiguration or reboot. This ensures that the system remains exactly
11772 as declared.
11773
11774 @deftp {Data Type} user-account
11775 Objects of this type represent user accounts. The following members may
11776 be specified:
11777
11778 @table @asis
11779 @item @code{name}
11780 The name of the user account.
11781
11782 @item @code{group}
11783 @cindex groups
11784 This is the name (a string) or identifier (a number) of the user group
11785 this account belongs to.
11786
11787 @item @code{supplementary-groups} (default: @code{'()})
11788 Optionally, this can be defined as a list of group names that this
11789 account belongs to.
11790
11791 @item @code{uid} (default: @code{#f})
11792 This is the user ID for this account (a number), or @code{#f}. In the
11793 latter case, a number is automatically chosen by the system when the
11794 account is created.
11795
11796 @item @code{comment} (default: @code{""})
11797 A comment about the account, such as the account owner's full name.
11798
11799 @item @code{home-directory}
11800 This is the name of the home directory for the account.
11801
11802 @item @code{create-home-directory?} (default: @code{#t})
11803 Indicates whether the home directory of this account should be created
11804 if it does not exist yet.
11805
11806 @item @code{shell} (default: Bash)
11807 This is a G-expression denoting the file name of a program to be used as
11808 the shell (@pxref{G-Expressions}).
11809
11810 @item @code{system?} (default: @code{#f})
11811 This Boolean value indicates whether the account is a ``system''
11812 account. System accounts are sometimes treated specially; for instance,
11813 graphical login managers do not list them.
11814
11815 @anchor{user-account-password}
11816 @cindex password, for user accounts
11817 @item @code{password} (default: @code{#f})
11818 You would normally leave this field to @code{#f}, initialize user
11819 passwords as @code{root} with the @command{passwd} command, and then let
11820 users change it with @command{passwd}. Passwords set with
11821 @command{passwd} are of course preserved across reboot and
11822 reconfiguration.
11823
11824 If you @emph{do} want to set an initial password for an account, then
11825 this field must contain the encrypted password, as a string. You can use the
11826 @code{crypt} procedure for this purpose:
11827
11828 @lisp
11829 (user-account
11830 (name "charlie")
11831 (group "users")
11832
11833 ;; Specify a SHA-512-hashed initial password.
11834 (password (crypt "InitialPassword!" "$6$abc")))
11835 @end lisp
11836
11837 @quotation Note
11838 The hash of this initial password will be available in a file in
11839 @file{/gnu/store}, readable by all the users, so this method must be used with
11840 care.
11841 @end quotation
11842
11843 @xref{Passphrase Storage,,, libc, The GNU C Library Reference Manual}, for
11844 more information on password encryption, and @ref{Encryption,,, guile, GNU
11845 Guile Reference Manual}, for information on Guile's @code{crypt} procedure.
11846
11847 @end table
11848 @end deftp
11849
11850 @cindex groups
11851 User group declarations are even simpler:
11852
11853 @lisp
11854 (user-group (name "students"))
11855 @end lisp
11856
11857 @deftp {Data Type} user-group
11858 This type is for, well, user groups. There are just a few fields:
11859
11860 @table @asis
11861 @item @code{name}
11862 The name of the group.
11863
11864 @item @code{id} (default: @code{#f})
11865 The group identifier (a number). If @code{#f}, a new number is
11866 automatically allocated when the group is created.
11867
11868 @item @code{system?} (default: @code{#f})
11869 This Boolean value indicates whether the group is a ``system'' group.
11870 System groups have low numerical IDs.
11871
11872 @item @code{password} (default: @code{#f})
11873 What, user groups can have a password? Well, apparently yes. Unless
11874 @code{#f}, this field specifies the password of the group.
11875
11876 @end table
11877 @end deftp
11878
11879 For convenience, a variable lists all the basic user groups one may
11880 expect:
11881
11882 @defvr {Scheme Variable} %base-groups
11883 This is the list of basic user groups that users and/or packages expect
11884 to be present on the system. This includes groups such as ``root'',
11885 ``wheel'', and ``users'', as well as groups used to control access to
11886 specific devices such as ``audio'', ``disk'', and ``cdrom''.
11887 @end defvr
11888
11889 @defvr {Scheme Variable} %base-user-accounts
11890 This is the list of basic system accounts that programs may expect to
11891 find on a GNU/Linux system, such as the ``nobody'' account.
11892
11893 Note that the ``root'' account is not included here. It is a
11894 special-case and is automatically added whether or not it is specified.
11895 @end defvr
11896
11897 @node Keyboard Layout
11898 @section Keyboard Layout
11899
11900 @cindex keyboard layout
11901 @cindex keymap
11902 To specify what each key of your keyboard does, you need to tell the operating
11903 system what @dfn{keyboard layout} you want to use. The default, when nothing
11904 is specified, is the US English QWERTY layout for 105-key PC keyboards.
11905 However, German speakers will usually prefer the German QWERTZ layout, French
11906 speakers will want the AZERTY layout, and so on; hackers might prefer Dvorak
11907 or bépo, and they might even want to further customize the effect of some of
11908 the keys. This section explains how to get that done.
11909
11910 @cindex keyboard layout, definition
11911 There are three components that will want to know about your keyboard layout:
11912
11913 @itemize
11914 @item
11915 The @emph{bootloader} may want to know what keyboard layout you want to use
11916 (@pxref{Bootloader Configuration, @code{keyboard-layout}}). This is useful if
11917 you want, for instance, to make sure that you can type the passphrase of your
11918 encrypted root partition using the right layout.
11919
11920 @item
11921 The @emph{operating system kernel}, Linux, will need that so that the console
11922 is properly configured (@pxref{operating-system Reference,
11923 @code{keyboard-layout}}).
11924
11925 @item
11926 The @emph{graphical display server}, usually Xorg, also has its own idea of
11927 the keyboard layout (@pxref{X Window, @code{keyboard-layout}}).
11928 @end itemize
11929
11930 Guix allows you to configure all three separately but, fortunately, it allows
11931 you to share the same keyboard layout for all three components.
11932
11933 @cindex XKB, keyboard layouts
11934 Keyboard layouts are represented by records created by the
11935 @code{keyboard-layout} procedure of @code{(gnu system keyboard)}. Following
11936 the X Keyboard extension (XKB), each layout has four attributes: a name (often
11937 a language code such as ``fi'' for Finnish or ``jp'' for Japanese), an
11938 optional variant name, an optional keyboard model name, and a possibly empty
11939 list of additional options. In most cases the layout name is all you care
11940 about. Here are a few example:
11941
11942 @lisp
11943 ;; The German QWERTZ layout. Here we assume a standard
11944 ;; "pc105" keyboard model.
11945 (keyboard-layout "de")
11946
11947 ;; The bépo variant of the French layout.
11948 (keyboard-layout "fr" "bepo")
11949
11950 ;; The Catalan layout.
11951 (keyboard-layout "es" "cat")
11952
11953 ;; Arabic layout with "Alt-Shift" to switch to US layout.
11954 (keyboard-layout "ar,us" #:options '("grp:alt_shift_toggle"))
11955
11956 ;; The Latin American Spanish layout. In addition, the
11957 ;; "Caps Lock" key is used as an additional "Ctrl" key,
11958 ;; and the "Menu" key is used as a "Compose" key to enter
11959 ;; accented letters.
11960 (keyboard-layout "latam"
11961 #:options '("ctrl:nocaps" "compose:menu"))
11962
11963 ;; The Russian layout for a ThinkPad keyboard.
11964 (keyboard-layout "ru" #:model "thinkpad")
11965
11966 ;; The "US international" layout, which is the US layout plus
11967 ;; dead keys to enter accented characters. This is for an
11968 ;; Apple MacBook keyboard.
11969 (keyboard-layout "us" "intl" #:model "macbook78")
11970 @end lisp
11971
11972 See the @file{share/X11/xkb} directory of the @code{xkeyboard-config} package
11973 for a complete list of supported layouts, variants, and models.
11974
11975 @cindex keyboard layout, configuration
11976 Let's say you want your system to use the Turkish keyboard layout throughout
11977 your system---bootloader, console, and Xorg. Here's what your system
11978 configuration would look like:
11979
11980 @findex set-xorg-configuration
11981 @lisp
11982 ;; Using the Turkish layout for the bootloader, the console,
11983 ;; and for Xorg.
11984
11985 (operating-system
11986 ;; ...
11987 (keyboard-layout (keyboard-layout "tr")) ;for the console
11988 (bootloader (bootloader-configuration
11989 (bootloader grub-efi-bootloader)
11990 (target "/boot/efi")
11991 (keyboard-layout keyboard-layout))) ;for GRUB
11992 (services (cons (set-xorg-configuration
11993 (xorg-configuration ;for Xorg
11994 (keyboard-layout keyboard-layout)))
11995 %desktop-services)))
11996 @end lisp
11997
11998 In the example above, for GRUB and for Xorg, we just refer to the
11999 @code{keyboard-layout} field defined above, but we could just as well refer to
12000 a different layout. The @code{set-xorg-configuration} procedure communicates
12001 the desired Xorg configuration to the graphical log-in manager, by default
12002 GDM.
12003
12004 We've discussed how to specify the @emph{default} keyboard layout of your
12005 system when it starts, but you can also adjust it at run time:
12006
12007 @itemize
12008 @item
12009 If you're using GNOME, its settings panel has a ``Region & Language'' entry
12010 where you can select one or more keyboard layouts.
12011
12012 @item
12013 Under Xorg, the @command{setxkbmap} command (from the same-named package)
12014 allows you to change the current layout. For example, this is how you would
12015 change the layout to US Dvorak:
12016
12017 @example
12018 setxkbmap us dvorak
12019 @end example
12020
12021 @item
12022 The @code{loadkeys} command changes the keyboard layout in effect in the Linux
12023 console. However, note that @code{loadkeys} does @emph{not} use the XKB
12024 keyboard layout categorization described above. The command below loads the
12025 French bépo layout:
12026
12027 @example
12028 loadkeys fr-bepo
12029 @end example
12030 @end itemize
12031
12032 @node Locales
12033 @section Locales
12034
12035 @cindex locale
12036 A @dfn{locale} defines cultural conventions for a particular language
12037 and region of the world (@pxref{Locales,,, libc, The GNU C Library
12038 Reference Manual}). Each locale has a name that typically has the form
12039 @code{@var{language}_@var{territory}.@var{codeset}}---e.g.,
12040 @code{fr_LU.utf8} designates the locale for the French language, with
12041 cultural conventions from Luxembourg, and using the UTF-8 encoding.
12042
12043 @cindex locale definition
12044 Usually, you will want to specify the default locale for the machine
12045 using the @code{locale} field of the @code{operating-system} declaration
12046 (@pxref{operating-system Reference, @code{locale}}).
12047
12048 The selected locale is automatically added to the @dfn{locale
12049 definitions} known to the system if needed, with its codeset inferred
12050 from its name---e.g., @code{bo_CN.utf8} will be assumed to use the
12051 @code{UTF-8} codeset. Additional locale definitions can be specified in
12052 the @code{locale-definitions} slot of @code{operating-system}---this is
12053 useful, for instance, if the codeset could not be inferred from the
12054 locale name. The default set of locale definitions includes some widely
12055 used locales, but not all the available locales, in order to save space.
12056
12057 For instance, to add the North Frisian locale for Germany, the value of
12058 that field may be:
12059
12060 @lisp
12061 (cons (locale-definition
12062 (name "fy_DE.utf8") (source "fy_DE"))
12063 %default-locale-definitions)
12064 @end lisp
12065
12066 Likewise, to save space, one might want @code{locale-definitions} to
12067 list only the locales that are actually used, as in:
12068
12069 @lisp
12070 (list (locale-definition
12071 (name "ja_JP.eucjp") (source "ja_JP")
12072 (charset "EUC-JP")))
12073 @end lisp
12074
12075 @vindex LOCPATH
12076 The compiled locale definitions are available at
12077 @file{/run/current-system/locale/X.Y}, where @code{X.Y} is the libc
12078 version, which is the default location where the GNU@tie{}libc provided
12079 by Guix looks for locale data. This can be overridden using the
12080 @code{LOCPATH} environment variable (@pxref{locales-and-locpath,
12081 @code{LOCPATH} and locale packages}).
12082
12083 The @code{locale-definition} form is provided by the @code{(gnu system
12084 locale)} module. Details are given below.
12085
12086 @deftp {Data Type} locale-definition
12087 This is the data type of a locale definition.
12088
12089 @table @asis
12090
12091 @item @code{name}
12092 The name of the locale. @xref{Locale Names,,, libc, The GNU C Library
12093 Reference Manual}, for more information on locale names.
12094
12095 @item @code{source}
12096 The name of the source for that locale. This is typically the
12097 @code{@var{language}_@var{territory}} part of the locale name.
12098
12099 @item @code{charset} (default: @code{"UTF-8"})
12100 The ``character set'' or ``code set'' for that locale,
12101 @uref{https://www.iana.org/assignments/character-sets, as defined by
12102 IANA}.
12103
12104 @end table
12105 @end deftp
12106
12107 @defvr {Scheme Variable} %default-locale-definitions
12108 A list of commonly used UTF-8 locales, used as the default
12109 value of the @code{locale-definitions} field of @code{operating-system}
12110 declarations.
12111
12112 @cindex locale name
12113 @cindex normalized codeset in locale names
12114 These locale definitions use the @dfn{normalized codeset} for the part
12115 that follows the dot in the name (@pxref{Using gettextized software,
12116 normalized codeset,, libc, The GNU C Library Reference Manual}). So for
12117 instance it has @code{uk_UA.utf8} but @emph{not}, say,
12118 @code{uk_UA.UTF-8}.
12119 @end defvr
12120
12121 @subsection Locale Data Compatibility Considerations
12122
12123 @cindex incompatibility, of locale data
12124 @code{operating-system} declarations provide a @code{locale-libcs} field
12125 to specify the GNU@tie{}libc packages that are used to compile locale
12126 declarations (@pxref{operating-system Reference}). ``Why would I
12127 care?'', you may ask. Well, it turns out that the binary format of
12128 locale data is occasionally incompatible from one libc version to
12129 another.
12130
12131 @c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
12132 @c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
12133 For instance, a program linked against libc version 2.21 is unable to
12134 read locale data produced with libc 2.22; worse, that program
12135 @emph{aborts} instead of simply ignoring the incompatible locale
12136 data@footnote{Versions 2.23 and later of GNU@tie{}libc will simply skip
12137 the incompatible locale data, which is already an improvement.}.
12138 Similarly, a program linked against libc 2.22 can read most, but not
12139 all, of the locale data from libc 2.21 (specifically, @code{LC_COLLATE}
12140 data is incompatible); thus calls to @code{setlocale} may fail, but
12141 programs will not abort.
12142
12143 The ``problem'' with Guix is that users have a lot of freedom: They can
12144 choose whether and when to upgrade software in their profiles, and might
12145 be using a libc version different from the one the system administrator
12146 used to build the system-wide locale data.
12147
12148 Fortunately, unprivileged users can also install their own locale data
12149 and define @var{GUIX_LOCPATH} accordingly (@pxref{locales-and-locpath,
12150 @code{GUIX_LOCPATH} and locale packages}).
12151
12152 Still, it is best if the system-wide locale data at
12153 @file{/run/current-system/locale} is built for all the libc versions
12154 actually in use on the system, so that all the programs can access
12155 it---this is especially crucial on a multi-user system. To do that, the
12156 administrator can specify several libc packages in the
12157 @code{locale-libcs} field of @code{operating-system}:
12158
12159 @lisp
12160 (use-package-modules base)
12161
12162 (operating-system
12163 ;; @dots{}
12164 (locale-libcs (list glibc-2.21 (canonical-package glibc))))
12165 @end lisp
12166
12167 This example would lead to a system containing locale definitions for
12168 both libc 2.21 and the current version of libc in
12169 @file{/run/current-system/locale}.
12170
12171
12172 @node Services
12173 @section Services
12174
12175 @cindex system services
12176 An important part of preparing an @code{operating-system} declaration is
12177 listing @dfn{system services} and their configuration (@pxref{Using the
12178 Configuration System}). System services are typically daemons launched
12179 when the system boots, or other actions needed at that time---e.g.,
12180 configuring network access.
12181
12182 Guix has a broad definition of ``service'' (@pxref{Service
12183 Composition}), but many services are managed by the GNU@tie{}Shepherd
12184 (@pxref{Shepherd Services}). On a running system, the @command{herd}
12185 command allows you to list the available services, show their status,
12186 start and stop them, or do other specific operations (@pxref{Jump
12187 Start,,, shepherd, The GNU Shepherd Manual}). For example:
12188
12189 @example
12190 # herd status
12191 @end example
12192
12193 The above command, run as @code{root}, lists the currently defined
12194 services. The @command{herd doc} command shows a synopsis of the given
12195 service and its associated actions:
12196
12197 @example
12198 # herd doc nscd
12199 Run libc's name service cache daemon (nscd).
12200
12201 # herd doc nscd action invalidate
12202 invalidate: Invalidate the given cache--e.g., 'hosts' for host name lookups.
12203 @end example
12204
12205 The @command{start}, @command{stop}, and @command{restart} sub-commands
12206 have the effect you would expect. For instance, the commands below stop
12207 the nscd service and restart the Xorg display server:
12208
12209 @example
12210 # herd stop nscd
12211 Service nscd has been stopped.
12212 # herd restart xorg-server
12213 Service xorg-server has been stopped.
12214 Service xorg-server has been started.
12215 @end example
12216
12217 The following sections document the available services, starting with
12218 the core services, that may be used in an @code{operating-system}
12219 declaration.
12220
12221 @menu
12222 * Base Services:: Essential system services.
12223 * Scheduled Job Execution:: The mcron service.
12224 * Log Rotation:: The rottlog service.
12225 * Networking Services:: Network setup, SSH daemon, etc.
12226 * X Window:: Graphical display.
12227 * Printing Services:: Local and remote printer support.
12228 * Desktop Services:: D-Bus and desktop services.
12229 * Sound Services:: ALSA and Pulseaudio services.
12230 * Database Services:: SQL databases, key-value stores, etc.
12231 * Mail Services:: IMAP, POP3, SMTP, and all that.
12232 * Messaging Services:: Messaging services.
12233 * Telephony Services:: Telephony services.
12234 * Monitoring Services:: Monitoring services.
12235 * Kerberos Services:: Kerberos services.
12236 * LDAP Services:: LDAP services.
12237 * Web Services:: Web servers.
12238 * Certificate Services:: TLS certificates via Let's Encrypt.
12239 * DNS Services:: DNS daemons.
12240 * VPN Services:: VPN daemons.
12241 * Network File System:: NFS related services.
12242 * Continuous Integration:: The Cuirass service.
12243 * Power Management Services:: Extending battery life.
12244 * Audio Services:: The MPD.
12245 * Virtualization Services:: Virtualization services.
12246 * Version Control Services:: Providing remote access to Git repositories.
12247 * Game Services:: Game servers.
12248 * PAM Mount Service:: Service to mount volumes when logging in.
12249 * Guix Services:: Services relating specifically to Guix.
12250 * Linux Services:: Services tied to the Linux kernel.
12251 * Miscellaneous Services:: Other services.
12252 @end menu
12253
12254 @node Base Services
12255 @subsection Base Services
12256
12257 The @code{(gnu services base)} module provides definitions for the basic
12258 services that one expects from the system. The services exported by
12259 this module are listed below.
12260
12261 @defvr {Scheme Variable} %base-services
12262 This variable contains a list of basic services (@pxref{Service Types
12263 and Services}, for more information on service objects) one would
12264 expect from the system: a login service (mingetty) on each tty, syslogd,
12265 the libc name service cache daemon (nscd), the udev device manager, and
12266 more.
12267
12268 This is the default value of the @code{services} field of
12269 @code{operating-system} declarations. Usually, when customizing a
12270 system, you will want to append services to @code{%base-services}, like
12271 this:
12272
12273 @lisp
12274 (append (list (service avahi-service-type)
12275 (service openssh-service-type))
12276 %base-services)
12277 @end lisp
12278 @end defvr
12279
12280 @defvr {Scheme Variable} special-files-service-type
12281 This is the service that sets up ``special files'' such as
12282 @file{/bin/sh}; an instance of it is part of @code{%base-services}.
12283
12284 The value associated with @code{special-files-service-type} services
12285 must be a list of tuples where the first element is the ``special file''
12286 and the second element is its target. By default it is:
12287
12288 @cindex @file{/bin/sh}
12289 @cindex @file{sh}, in @file{/bin}
12290 @lisp
12291 `(("/bin/sh" ,(file-append bash "/bin/sh")))
12292 @end lisp
12293
12294 @cindex @file{/usr/bin/env}
12295 @cindex @file{env}, in @file{/usr/bin}
12296 If you want to add, say, @code{/usr/bin/env} to your system, you can
12297 change it to:
12298
12299 @lisp
12300 `(("/bin/sh" ,(file-append bash "/bin/sh"))
12301 ("/usr/bin/env" ,(file-append coreutils "/bin/env")))
12302 @end lisp
12303
12304 Since this is part of @code{%base-services}, you can use
12305 @code{modify-services} to customize the set of special files
12306 (@pxref{Service Reference, @code{modify-services}}). But the simple way
12307 to add a special file is @i{via} the @code{extra-special-file} procedure
12308 (see below.)
12309 @end defvr
12310
12311 @deffn {Scheme Procedure} extra-special-file @var{file} @var{target}
12312 Use @var{target} as the ``special file'' @var{file}.
12313
12314 For example, adding the following lines to the @code{services} field of
12315 your operating system declaration leads to a @file{/usr/bin/env}
12316 symlink:
12317
12318 @lisp
12319 (extra-special-file "/usr/bin/env"
12320 (file-append coreutils "/bin/env"))
12321 @end lisp
12322 @end deffn
12323
12324 @deffn {Scheme Procedure} host-name-service @var{name}
12325 Return a service that sets the host name to @var{name}.
12326 @end deffn
12327
12328 @defvr {Scheme Variable} console-font-service-type
12329 Install the given fonts on the specified ttys (fonts are per
12330 virtual console on the kernel Linux). The value of this service is a list of
12331 tty/font pairs. The font can be the name of a font provided by the @code{kbd}
12332 package or any valid argument to @command{setfont}, as in this example:
12333
12334 @lisp
12335 `(("tty1" . "LatGrkCyr-8x16")
12336 ("tty2" . ,(file-append
12337 font-tamzen
12338 "/share/kbd/consolefonts/TamzenForPowerline10x20.psf"))
12339 ("tty3" . ,(file-append
12340 font-terminus
12341 "/share/consolefonts/ter-132n"))) ; for HDPI
12342 @end lisp
12343 @end defvr
12344
12345 @deffn {Scheme Procedure} login-service @var{config}
12346 Return a service to run login according to @var{config}, a
12347 @code{<login-configuration>} object, which specifies the message of the day,
12348 among other things.
12349 @end deffn
12350
12351 @deftp {Data Type} login-configuration
12352 This is the data type representing the configuration of login.
12353
12354 @table @asis
12355
12356 @item @code{motd}
12357 @cindex message of the day
12358 A file-like object containing the ``message of the day''.
12359
12360 @item @code{allow-empty-passwords?} (default: @code{#t})
12361 Allow empty passwords by default so that first-time users can log in when
12362 the 'root' account has just been created.
12363
12364 @end table
12365 @end deftp
12366
12367 @deffn {Scheme Procedure} mingetty-service @var{config}
12368 Return a service to run mingetty according to @var{config}, a
12369 @code{<mingetty-configuration>} object, which specifies the tty to run, among
12370 other things.
12371 @end deffn
12372
12373 @deftp {Data Type} mingetty-configuration
12374 This is the data type representing the configuration of Mingetty, which
12375 provides the default implementation of virtual console log-in.
12376
12377 @table @asis
12378
12379 @item @code{tty}
12380 The name of the console this Mingetty runs on---e.g., @code{"tty1"}.
12381
12382 @item @code{auto-login} (default: @code{#f})
12383 When true, this field must be a string denoting the user name under
12384 which the system automatically logs in. When it is @code{#f}, a
12385 user name and password must be entered to log in.
12386
12387 @item @code{login-program} (default: @code{#f})
12388 This must be either @code{#f}, in which case the default log-in program
12389 is used (@command{login} from the Shadow tool suite), or a gexp denoting
12390 the name of the log-in program.
12391
12392 @item @code{login-pause?} (default: @code{#f})
12393 When set to @code{#t} in conjunction with @var{auto-login}, the user
12394 will have to press a key before the log-in shell is launched.
12395
12396 @item @code{mingetty} (default: @var{mingetty})
12397 The Mingetty package to use.
12398
12399 @end table
12400 @end deftp
12401
12402 @deffn {Scheme Procedure} agetty-service @var{config}
12403 Return a service to run agetty according to @var{config}, an
12404 @code{<agetty-configuration>} object, which specifies the tty to run,
12405 among other things.
12406 @end deffn
12407
12408 @deftp {Data Type} agetty-configuration
12409 This is the data type representing the configuration of agetty, which
12410 implements virtual and serial console log-in. See the @code{agetty(8)}
12411 man page for more information.
12412
12413 @table @asis
12414
12415 @item @code{tty}
12416 The name of the console this agetty runs on, as a string---e.g.,
12417 @code{"ttyS0"}. This argument is optional, it will default to
12418 a reasonable default serial port used by the kernel Linux.
12419
12420 For this, if there is a value for an option @code{agetty.tty} in the kernel
12421 command line, agetty will extract the device name of the serial port
12422 from it and use that.
12423
12424 If not and if there is a value for an option @code{console} with a tty in
12425 the Linux command line, agetty will extract the device name of the
12426 serial port from it and use that.
12427
12428 In both cases, agetty will leave the other serial device settings
12429 (baud rate etc.)@: alone---in the hope that Linux pinned them to the
12430 correct values.
12431
12432 @item @code{baud-rate} (default: @code{#f})
12433 A string containing a comma-separated list of one or more baud rates, in
12434 descending order.
12435
12436 @item @code{term} (default: @code{#f})
12437 A string containing the value used for the @code{TERM} environment
12438 variable.
12439
12440 @item @code{eight-bits?} (default: @code{#f})
12441 When @code{#t}, the tty is assumed to be 8-bit clean, and parity detection is
12442 disabled.
12443
12444 @item @code{auto-login} (default: @code{#f})
12445 When passed a login name, as a string, the specified user will be logged
12446 in automatically without prompting for their login name or password.
12447
12448 @item @code{no-reset?} (default: @code{#f})
12449 When @code{#t}, don't reset terminal cflags (control modes).
12450
12451 @item @code{host} (default: @code{#f})
12452 This accepts a string containing the "login_host", which will be written
12453 into the @file{/var/run/utmpx} file.
12454
12455 @item @code{remote?} (default: @code{#f})
12456 When set to @code{#t} in conjunction with @var{host}, this will add an
12457 @code{-r} fakehost option to the command line of the login program
12458 specified in @var{login-program}.
12459
12460 @item @code{flow-control?} (default: @code{#f})
12461 When set to @code{#t}, enable hardware (RTS/CTS) flow control.
12462
12463 @item @code{no-issue?} (default: @code{#f})
12464 When set to @code{#t}, the contents of the @file{/etc/issue} file will
12465 not be displayed before presenting the login prompt.
12466
12467 @item @code{init-string} (default: @code{#f})
12468 This accepts a string that will be sent to the tty or modem before
12469 sending anything else. It can be used to initialize a modem.
12470
12471 @item @code{no-clear?} (default: @code{#f})
12472 When set to @code{#t}, agetty will not clear the screen before showing
12473 the login prompt.
12474
12475 @item @code{login-program} (default: (file-append shadow "/bin/login"))
12476 This must be either a gexp denoting the name of a log-in program, or
12477 unset, in which case the default value is the @command{login} from the
12478 Shadow tool suite.
12479
12480 @item @code{local-line} (default: @code{#f})
12481 Control the CLOCAL line flag. This accepts one of three symbols as
12482 arguments, @code{'auto}, @code{'always}, or @code{'never}. If @code{#f},
12483 the default value chosen by agetty is @code{'auto}.
12484
12485 @item @code{extract-baud?} (default: @code{#f})
12486 When set to @code{#t}, instruct agetty to try to extract the baud rate
12487 from the status messages produced by certain types of modems.
12488
12489 @item @code{skip-login?} (default: @code{#f})
12490 When set to @code{#t}, do not prompt the user for a login name. This
12491 can be used with @var{login-program} field to use non-standard login
12492 systems.
12493
12494 @item @code{no-newline?} (default: @code{#f})
12495 When set to @code{#t}, do not print a newline before printing the
12496 @file{/etc/issue} file.
12497
12498 @c Is this dangerous only when used with login-program, or always?
12499 @item @code{login-options} (default: @code{#f})
12500 This option accepts a string containing options that are passed to the
12501 login program. When used with the @var{login-program}, be aware that a
12502 malicious user could try to enter a login name containing embedded
12503 options that could be parsed by the login program.
12504
12505 @item @code{login-pause} (default: @code{#f})
12506 When set to @code{#t}, wait for any key before showing the login prompt.
12507 This can be used in conjunction with @var{auto-login} to save memory by
12508 lazily spawning shells.
12509
12510 @item @code{chroot} (default: @code{#f})
12511 Change root to the specified directory. This option accepts a directory
12512 path as a string.
12513
12514 @item @code{hangup?} (default: @code{#f})
12515 Use the Linux system call @code{vhangup} to do a virtual hangup of the
12516 specified terminal.
12517
12518 @item @code{keep-baud?} (default: @code{#f})
12519 When set to @code{#t}, try to keep the existing baud rate. The baud
12520 rates from @var{baud-rate} are used when agetty receives a @key{BREAK}
12521 character.
12522
12523 @item @code{timeout} (default: @code{#f})
12524 When set to an integer value, terminate if no user name could be read
12525 within @var{timeout} seconds.
12526
12527 @item @code{detect-case?} (default: @code{#f})
12528 When set to @code{#t}, turn on support for detecting an uppercase-only
12529 terminal. This setting will detect a login name containing only
12530 uppercase letters as indicating an uppercase-only terminal and turn on
12531 some upper-to-lower case conversions. Note that this will not support
12532 Unicode characters.
12533
12534 @item @code{wait-cr?} (default: @code{#f})
12535 When set to @code{#t}, wait for the user or modem to send a
12536 carriage-return or linefeed character before displaying
12537 @file{/etc/issue} or login prompt. This is typically used with the
12538 @var{init-string} option.
12539
12540 @item @code{no-hints?} (default: @code{#f})
12541 When set to @code{#t}, do not print hints about Num, Caps, and Scroll
12542 locks.
12543
12544 @item @code{no-hostname?} (default: @code{#f})
12545 By default, the hostname is printed. When this option is set to
12546 @code{#t}, no hostname will be shown at all.
12547
12548 @item @code{long-hostname?} (default: @code{#f})
12549 By default, the hostname is only printed until the first dot. When this
12550 option is set to @code{#t}, the fully qualified hostname by
12551 @code{gethostname} or @code{getaddrinfo} is shown.
12552
12553 @item @code{erase-characters} (default: @code{#f})
12554 This option accepts a string of additional characters that should be
12555 interpreted as backspace when the user types their login name.
12556
12557 @item @code{kill-characters} (default: @code{#f})
12558 This option accepts a string that should be interpreted to mean "ignore
12559 all previous characters" (also called a "kill" character) when the user
12560 types their login name.
12561
12562 @item @code{chdir} (default: @code{#f})
12563 This option accepts, as a string, a directory path that will be changed
12564 to before login.
12565
12566 @item @code{delay} (default: @code{#f})
12567 This options accepts, as an integer, the number of seconds to sleep
12568 before opening the tty and displaying the login prompt.
12569
12570 @item @code{nice} (default: @code{#f})
12571 This option accepts, as an integer, the nice value with which to run the
12572 @command{login} program.
12573
12574 @item @code{extra-options} (default: @code{'()})
12575 This option provides an "escape hatch" for the user to provide arbitrary
12576 command-line arguments to @command{agetty} as a list of strings.
12577
12578 @end table
12579 @end deftp
12580
12581 @deffn {Scheme Procedure} kmscon-service-type @var{config}
12582 Return a service to run @uref{https://www.freedesktop.org/wiki/Software/kmscon,kmscon}
12583 according to @var{config}, a @code{<kmscon-configuration>} object, which
12584 specifies the tty to run, among other things.
12585 @end deffn
12586
12587 @deftp {Data Type} kmscon-configuration
12588 This is the data type representing the configuration of Kmscon, which
12589 implements virtual console log-in.
12590
12591 @table @asis
12592
12593 @item @code{virtual-terminal}
12594 The name of the console this Kmscon runs on---e.g., @code{"tty1"}.
12595
12596 @item @code{login-program} (default: @code{#~(string-append #$shadow "/bin/login")})
12597 A gexp denoting the name of the log-in program. The default log-in program is
12598 @command{login} from the Shadow tool suite.
12599
12600 @item @code{login-arguments} (default: @code{'("-p")})
12601 A list of arguments to pass to @command{login}.
12602
12603 @item @code{auto-login} (default: @code{#f})
12604 When passed a login name, as a string, the specified user will be logged
12605 in automatically without prompting for their login name or password.
12606
12607 @item @code{hardware-acceleration?} (default: #f)
12608 Whether to use hardware acceleration.
12609
12610 @item @code{kmscon} (default: @var{kmscon})
12611 The Kmscon package to use.
12612
12613 @end table
12614 @end deftp
12615
12616 @cindex name service cache daemon
12617 @cindex nscd
12618 @deffn {Scheme Procedure} nscd-service [@var{config}] [#:glibc glibc] @
12619 [#:name-services '()]
12620 Return a service that runs the libc name service cache daemon (nscd) with the
12621 given @var{config}---an @code{<nscd-configuration>} object. @xref{Name
12622 Service Switch}, for an example.
12623
12624 For convenience, the Shepherd service for nscd provides the following actions:
12625
12626 @table @code
12627 @item invalidate
12628 @cindex cache invalidation, nscd
12629 @cindex nscd, cache invalidation
12630 This invalidate the given cache. For instance, running:
12631
12632 @example
12633 herd invalidate nscd hosts
12634 @end example
12635
12636 @noindent
12637 invalidates the host name lookup cache of nscd.
12638
12639 @item statistics
12640 Running @command{herd statistics nscd} displays information about nscd usage
12641 and caches.
12642 @end table
12643
12644 @end deffn
12645
12646 @defvr {Scheme Variable} %nscd-default-configuration
12647 This is the default @code{<nscd-configuration>} value (see below) used
12648 by @code{nscd-service}. It uses the caches defined by
12649 @code{%nscd-default-caches}; see below.
12650 @end defvr
12651
12652 @deftp {Data Type} nscd-configuration
12653 This is the data type representing the name service cache daemon (nscd)
12654 configuration.
12655
12656 @table @asis
12657
12658 @item @code{name-services} (default: @code{'()})
12659 List of packages denoting @dfn{name services} that must be visible to
12660 the nscd---e.g., @code{(list @var{nss-mdns})}.
12661
12662 @item @code{glibc} (default: @var{glibc})
12663 Package object denoting the GNU C Library providing the @command{nscd}
12664 command.
12665
12666 @item @code{log-file} (default: @code{"/var/log/nscd.log"})
12667 Name of the nscd log file. This is where debugging output goes when
12668 @code{debug-level} is strictly positive.
12669
12670 @item @code{debug-level} (default: @code{0})
12671 Integer denoting the debugging levels. Higher numbers mean that more
12672 debugging output is logged.
12673
12674 @item @code{caches} (default: @code{%nscd-default-caches})
12675 List of @code{<nscd-cache>} objects denoting things to be cached; see
12676 below.
12677
12678 @end table
12679 @end deftp
12680
12681 @deftp {Data Type} nscd-cache
12682 Data type representing a cache database of nscd and its parameters.
12683
12684 @table @asis
12685
12686 @item @code{database}
12687 This is a symbol representing the name of the database to be cached.
12688 Valid values are @code{passwd}, @code{group}, @code{hosts}, and
12689 @code{services}, which designate the corresponding NSS database
12690 (@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
12691
12692 @item @code{positive-time-to-live}
12693 @itemx @code{negative-time-to-live} (default: @code{20})
12694 A number representing the number of seconds during which a positive or
12695 negative lookup result remains in cache.
12696
12697 @item @code{check-files?} (default: @code{#t})
12698 Whether to check for updates of the files corresponding to
12699 @var{database}.
12700
12701 For instance, when @var{database} is @code{hosts}, setting this flag
12702 instructs nscd to check for updates in @file{/etc/hosts} and to take
12703 them into account.
12704
12705 @item @code{persistent?} (default: @code{#t})
12706 Whether the cache should be stored persistently on disk.
12707
12708 @item @code{shared?} (default: @code{#t})
12709 Whether the cache should be shared among users.
12710
12711 @item @code{max-database-size} (default: 32@tie{}MiB)
12712 Maximum size in bytes of the database cache.
12713
12714 @c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
12715 @c settings, so leave them out.
12716
12717 @end table
12718 @end deftp
12719
12720 @defvr {Scheme Variable} %nscd-default-caches
12721 List of @code{<nscd-cache>} objects used by default by
12722 @code{nscd-configuration} (see above).
12723
12724 It enables persistent and aggressive caching of service and host name
12725 lookups. The latter provides better host name lookup performance,
12726 resilience in the face of unreliable name servers, and also better
12727 privacy---often the result of host name lookups is in local cache, so
12728 external name servers do not even need to be queried.
12729 @end defvr
12730
12731 @anchor{syslog-configuration-type}
12732 @cindex syslog
12733 @cindex logging
12734 @deftp {Data Type} syslog-configuration
12735 This data type represents the configuration of the syslog daemon.
12736
12737 @table @asis
12738 @item @code{syslogd} (default: @code{#~(string-append #$inetutils "/libexec/syslogd")})
12739 The syslog daemon to use.
12740
12741 @item @code{config-file} (default: @code{%default-syslog.conf})
12742 The syslog configuration file to use.
12743
12744 @end table
12745 @end deftp
12746
12747 @anchor{syslog-service}
12748 @cindex syslog
12749 @deffn {Scheme Procedure} syslog-service @var{config}
12750 Return a service that runs a syslog daemon according to @var{config}.
12751
12752 @xref{syslogd invocation,,, inetutils, GNU Inetutils}, for more
12753 information on the configuration file syntax.
12754 @end deffn
12755
12756 @defvr {Scheme Variable} guix-service-type
12757 This is the type of the service that runs the build daemon,
12758 @command{guix-daemon} (@pxref{Invoking guix-daemon}). Its value must be a
12759 @code{guix-configuration} record as described below.
12760 @end defvr
12761
12762 @anchor{guix-configuration-type}
12763 @deftp {Data Type} guix-configuration
12764 This data type represents the configuration of the Guix build daemon.
12765 @xref{Invoking guix-daemon}, for more information.
12766
12767 @table @asis
12768 @item @code{guix} (default: @var{guix})
12769 The Guix package to use.
12770
12771 @item @code{build-group} (default: @code{"guixbuild"})
12772 Name of the group for build user accounts.
12773
12774 @item @code{build-accounts} (default: @code{10})
12775 Number of build user accounts to create.
12776
12777 @item @code{authorize-key?} (default: @code{#t})
12778 @cindex substitutes, authorization thereof
12779 Whether to authorize the substitute keys listed in
12780 @code{authorized-keys}---by default that of @code{@value{SUBSTITUTE-SERVER}}
12781 (@pxref{Substitutes}).
12782
12783 @vindex %default-authorized-guix-keys
12784 @item @code{authorized-keys} (default: @code{%default-authorized-guix-keys})
12785 The list of authorized key files for archive imports, as a list of
12786 string-valued gexps (@pxref{Invoking guix archive}). By default, it
12787 contains that of @code{@value{SUBSTITUTE-SERVER}} (@pxref{Substitutes}).
12788
12789 @item @code{use-substitutes?} (default: @code{#t})
12790 Whether to use substitutes.
12791
12792 @item @code{substitute-urls} (default: @code{%default-substitute-urls})
12793 The list of URLs where to look for substitutes by default.
12794
12795 @item @code{max-silent-time} (default: @code{0})
12796 @itemx @code{timeout} (default: @code{0})
12797 The number of seconds of silence and the number of seconds of activity,
12798 respectively, after which a build process times out. A value of zero
12799 disables the timeout.
12800
12801 @item @code{log-compression} (default: @code{'bzip2})
12802 The type of compression used for build logs---one of @code{gzip},
12803 @code{bzip2}, or @code{none}.
12804
12805 @item @code{extra-options} (default: @code{'()})
12806 List of extra command-line options for @command{guix-daemon}.
12807
12808 @item @code{log-file} (default: @code{"/var/log/guix-daemon.log"})
12809 File where @command{guix-daemon}'s standard output and standard error
12810 are written.
12811
12812 @cindex HTTP proxy, for @code{guix-daemon}
12813 @cindex proxy, for @code{guix-daemon} HTTP access
12814 @item @code{http-proxy} (default: @code{#f})
12815 The URL of the HTTP and HTTPS proxy used for downloading fixed-output
12816 derivations and substitutes.
12817
12818 It is also possible to change the daemon's proxy at run time through the
12819 @code{set-http-proxy} action, which restarts it:
12820
12821 @example
12822 herd set-http-proxy guix-daemon http://localhost:8118
12823 @end example
12824
12825 To clear the proxy settings, run:
12826
12827 @example
12828 herd set-http-proxy guix-daemon
12829 @end example
12830
12831 @item @code{tmpdir} (default: @code{#f})
12832 A directory path where the @command{guix-daemon} will perform builds.
12833
12834 @end table
12835 @end deftp
12836
12837 @deffn {Scheme Procedure} udev-service [#:udev @var{eudev} #:rules @code{'()}]
12838 Run @var{udev}, which populates the @file{/dev} directory dynamically.
12839 udev rules can be provided as a list of files through the @var{rules}
12840 variable. The procedures @code{udev-rule} and @code{file->udev-rule} from
12841 @code{(gnu services base)} simplify the creation of such rule files.
12842 @end deffn
12843
12844 @deffn {Scheme Procedure} udev-rule [@var{file-name} @var{contents}]
12845 Return a udev-rule file named @var{file-name} containing the rules
12846 defined by the @var{contents} literal.
12847
12848 In the following example, a rule for a USB device is defined to be
12849 stored in the file @file{90-usb-thing.rules}. The rule runs a script
12850 upon detecting a USB device with a given product identifier.
12851
12852 @lisp
12853 (define %example-udev-rule
12854 (udev-rule
12855 "90-usb-thing.rules"
12856 (string-append "ACTION==\"add\", SUBSYSTEM==\"usb\", "
12857 "ATTR@{product@}==\"Example\", "
12858 "RUN+=\"/path/to/script\"")))
12859 @end lisp
12860
12861 The @command{herd rules udev} command, as root, returns the name of the
12862 directory containing all the active udev rules.
12863 @end deffn
12864
12865 Here we show how the default @var{udev-service} can be extended with it.
12866
12867 @lisp
12868 (operating-system
12869 ;; @dots{}
12870 (services
12871 (modify-services %desktop-services
12872 (udev-service-type config =>
12873 (udev-configuration (inherit config)
12874 (rules (append (udev-configuration-rules config)
12875 (list %example-udev-rule))))))))
12876 @end lisp
12877
12878 @deffn {Scheme Procedure} file->udev-rule [@var{file-name} @var{file}]
12879 Return a udev file named @var{file-name} containing the rules defined
12880 within @var{file}, a file-like object.
12881
12882 The following example showcases how we can use an existing rule file.
12883
12884 @lisp
12885 (use-modules (guix download) ;for url-fetch
12886 (guix packages) ;for origin
12887 @dots{})
12888
12889 (define %android-udev-rules
12890 (file->udev-rule
12891 "51-android-udev.rules"
12892 (let ((version "20170910"))
12893 (origin
12894 (method url-fetch)
12895 (uri (string-append "https://raw.githubusercontent.com/M0Rf30/"
12896 "android-udev-rules/" version "/51-android.rules"))
12897 (sha256
12898 (base32 "0lmmagpyb6xsq6zcr2w1cyx9qmjqmajkvrdbhjx32gqf1d9is003"))))))
12899 @end lisp
12900 @end deffn
12901
12902 Additionally, Guix package definitions can be included in @var{rules} in
12903 order to extend the udev rules with the definitions found under their
12904 @file{lib/udev/rules.d} sub-directory. In lieu of the previous
12905 @var{file->udev-rule} example, we could have used the
12906 @var{android-udev-rules} package which exists in Guix in the @code{(gnu
12907 packages android)} module.
12908
12909 The following example shows how to use the @var{android-udev-rules}
12910 package so that the Android tool @command{adb} can detect devices
12911 without root privileges. It also details how to create the
12912 @code{adbusers} group, which is required for the proper functioning of
12913 the rules defined within the @var{android-udev-rules} package. To
12914 create such a group, we must define it both as part of the
12915 @var{supplementary-groups} of our @var{user-account} declaration, as
12916 well as in the @var{groups} field of the @var{operating-system} record.
12917
12918 @lisp
12919 (use-modules (gnu packages android) ;for android-udev-rules
12920 (gnu system shadow) ;for user-group
12921 @dots{})
12922
12923 (operating-system
12924 ;; @dots{}
12925 (users (cons (user-account
12926 ;; @dots{}
12927 (supplementary-groups
12928 '("adbusers" ;for adb
12929 "wheel" "netdev" "audio" "video")))))
12930
12931 (groups (cons (user-group (system? #t) (name "adbusers"))
12932 %base-groups))
12933
12934 ;; @dots{}
12935
12936 (services
12937 (modify-services %desktop-services
12938 (udev-service-type
12939 config =>
12940 (udev-configuration (inherit config)
12941 (rules (cons android-udev-rules
12942 (udev-configuration-rules config))))))))
12943 @end lisp
12944
12945 @defvr {Scheme Variable} urandom-seed-service-type
12946 Save some entropy in @code{%random-seed-file} to seed @file{/dev/urandom}
12947 when rebooting. It also tries to seed @file{/dev/urandom} from
12948 @file{/dev/hwrng} while booting, if @file{/dev/hwrng} exists and is
12949 readable.
12950 @end defvr
12951
12952 @defvr {Scheme Variable} %random-seed-file
12953 This is the name of the file where some random bytes are saved by
12954 @var{urandom-seed-service} to seed @file{/dev/urandom} when rebooting.
12955 It defaults to @file{/var/lib/random-seed}.
12956 @end defvr
12957
12958 @cindex mouse
12959 @cindex gpm
12960 @defvr {Scheme Variable} gpm-service-type
12961 This is the type of the service that runs GPM, the @dfn{general-purpose
12962 mouse daemon}, which provides mouse support to the Linux console. GPM
12963 allows users to use the mouse in the console, notably to select, copy,
12964 and paste text.
12965
12966 The value for services of this type must be a @code{gpm-configuration}
12967 (see below). This service is not part of @code{%base-services}.
12968 @end defvr
12969
12970 @deftp {Data Type} gpm-configuration
12971 Data type representing the configuration of GPM.
12972
12973 @table @asis
12974 @item @code{options} (default: @code{%default-gpm-options})
12975 Command-line options passed to @command{gpm}. The default set of
12976 options instruct @command{gpm} to listen to mouse events on
12977 @file{/dev/input/mice}. @xref{Command Line,,, gpm, gpm manual}, for
12978 more information.
12979
12980 @item @code{gpm} (default: @code{gpm})
12981 The GPM package to use.
12982
12983 @end table
12984 @end deftp
12985
12986 @anchor{guix-publish-service-type}
12987 @deffn {Scheme Variable} guix-publish-service-type
12988 This is the service type for @command{guix publish} (@pxref{Invoking
12989 guix publish}). Its value must be a @code{guix-publish-configuration}
12990 object, as described below.
12991
12992 This assumes that @file{/etc/guix} already contains a signing key pair as
12993 created by @command{guix archive --generate-key} (@pxref{Invoking guix
12994 archive}). If that is not the case, the service will fail to start.
12995 @end deffn
12996
12997 @deftp {Data Type} guix-publish-configuration
12998 Data type representing the configuration of the @code{guix publish}
12999 service.
13000
13001 @table @asis
13002 @item @code{guix} (default: @code{guix})
13003 The Guix package to use.
13004
13005 @item @code{port} (default: @code{80})
13006 The TCP port to listen for connections.
13007
13008 @item @code{host} (default: @code{"localhost"})
13009 The host (and thus, network interface) to listen to. Use
13010 @code{"0.0.0.0"} to listen on all the network interfaces.
13011
13012 @item @code{compression} (default: @code{'(("gzip" 3))})
13013 This is a list of compression method/level tuple used when compressing
13014 substitutes. For example, to compress all substitutes with @emph{both} lzip
13015 at level 7 and gzip at level 9, write:
13016
13017 @lisp
13018 '(("lzip" 7) ("gzip" 9))
13019 @end lisp
13020
13021 Level 9 achieves the best compression ratio at the expense of increased CPU
13022 usage, whereas level 1 achieves fast compression.
13023
13024 An empty list disables compression altogether.
13025
13026 @item @code{nar-path} (default: @code{"nar"})
13027 The URL path at which ``nars'' can be fetched. @xref{Invoking guix
13028 publish, @code{--nar-path}}, for details.
13029
13030 @item @code{cache} (default: @code{#f})
13031 When it is @code{#f}, disable caching and instead generate archives on
13032 demand. Otherwise, this should be the name of a directory---e.g.,
13033 @code{"/var/cache/guix/publish"}---where @command{guix publish} caches
13034 archives and meta-data ready to be sent. @xref{Invoking guix publish,
13035 @option{--cache}}, for more information on the tradeoffs involved.
13036
13037 @item @code{workers} (default: @code{#f})
13038 When it is an integer, this is the number of worker threads used for
13039 caching; when @code{#f}, the number of processors is used.
13040 @xref{Invoking guix publish, @option{--workers}}, for more information.
13041
13042 @item @code{ttl} (default: @code{#f})
13043 When it is an integer, this denotes the @dfn{time-to-live} in seconds
13044 of the published archives. @xref{Invoking guix publish, @option{--ttl}},
13045 for more information.
13046 @end table
13047 @end deftp
13048
13049 @anchor{rngd-service}
13050 @deffn {Scheme Procedure} rngd-service [#:rng-tools @var{rng-tools}] @
13051 [#:device "/dev/hwrng"]
13052 Return a service that runs the @command{rngd} program from @var{rng-tools}
13053 to add @var{device} to the kernel's entropy pool. The service will fail if
13054 @var{device} does not exist.
13055 @end deffn
13056
13057 @anchor{pam-limits-service}
13058 @cindex session limits
13059 @cindex ulimit
13060 @cindex priority
13061 @cindex realtime
13062 @cindex jackd
13063 @deffn {Scheme Procedure} pam-limits-service [#:limits @code{'()}]
13064
13065 Return a service that installs a configuration file for the
13066 @uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html,
13067 @code{pam_limits} module}. The procedure optionally takes a list of
13068 @code{pam-limits-entry} values, which can be used to specify
13069 @code{ulimit} limits and nice priority limits to user sessions.
13070
13071 The following limits definition sets two hard and soft limits for all
13072 login sessions of users in the @code{realtime} group:
13073
13074 @lisp
13075 (pam-limits-service
13076 (list
13077 (pam-limits-entry "@@realtime" 'both 'rtprio 99)
13078 (pam-limits-entry "@@realtime" 'both 'memlock 'unlimited)))
13079 @end lisp
13080
13081 The first entry increases the maximum realtime priority for
13082 non-privileged processes; the second entry lifts any restriction of the
13083 maximum address space that can be locked in memory. These settings are
13084 commonly used for real-time audio systems.
13085 @end deffn
13086
13087 @node Scheduled Job Execution
13088 @subsection Scheduled Job Execution
13089
13090 @cindex cron
13091 @cindex mcron
13092 @cindex scheduling jobs
13093 The @code{(gnu services mcron)} module provides an interface to
13094 GNU@tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
13095 mcron, GNU@tie{}mcron}). GNU@tie{}mcron is similar to the traditional
13096 Unix @command{cron} daemon; the main difference is that it is
13097 implemented in Guile Scheme, which provides a lot of flexibility when
13098 specifying the scheduling of jobs and their actions.
13099
13100 The example below defines an operating system that runs the
13101 @command{updatedb} (@pxref{Invoking updatedb,,, find, Finding Files})
13102 and the @command{guix gc} commands (@pxref{Invoking guix gc}) daily, as
13103 well as the @command{mkid} command on behalf of an unprivileged user
13104 (@pxref{mkid invocation,,, idutils, ID Database Utilities}). It uses
13105 gexps to introduce job definitions that are passed to mcron
13106 (@pxref{G-Expressions}).
13107
13108 @lisp
13109 (use-modules (guix) (gnu) (gnu services mcron))
13110 (use-package-modules base idutils)
13111
13112 (define updatedb-job
13113 ;; Run 'updatedb' at 3AM every day. Here we write the
13114 ;; job's action as a Scheme procedure.
13115 #~(job '(next-hour '(3))
13116 (lambda ()
13117 (execl (string-append #$findutils "/bin/updatedb")
13118 "updatedb"
13119 "--prunepaths=/tmp /var/tmp /gnu/store"))))
13120
13121 (define garbage-collector-job
13122 ;; Collect garbage 5 minutes after midnight every day.
13123 ;; The job's action is a shell command.
13124 #~(job "5 0 * * *" ;Vixie cron syntax
13125 "guix gc -F 1G"))
13126
13127 (define idutils-job
13128 ;; Update the index database as user "charlie" at 12:15PM
13129 ;; and 19:15PM. This runs from the user's home directory.
13130 #~(job '(next-minute-from (next-hour '(12 19)) '(15))
13131 (string-append #$idutils "/bin/mkid src")
13132 #:user "charlie"))
13133
13134 (operating-system
13135 ;; @dots{}
13136 (services (cons (service mcron-service-type
13137 (mcron-configuration
13138 (jobs (list garbage-collector-job
13139 updatedb-job
13140 idutils-job))))
13141 %base-services)))
13142 @end lisp
13143
13144 For more complex jobs defined in Scheme where you need control over the top
13145 level, for instance to introduce a @code{use-modules} form, you can move your
13146 code to a separate program using the @code{program-file} procedure of the
13147 @code{(guix gexp)} module (@pxref{G-Expressions}). The example below
13148 illustrates that.
13149
13150 @lisp
13151 (define %battery-alert-job
13152 ;; Beep when the battery percentage falls below %MIN-LEVEL.
13153 #~(job
13154 '(next-minute (range 0 60 1))
13155 #$(program-file
13156 "battery-alert.scm"
13157 (with-imported-modules (source-module-closure
13158 '((guix build utils)))
13159 #~(begin
13160 (define %min-level 20)
13161 (use-modules (guix build utils)
13162 (ice-9 popen)
13163 (ice-9 regex)
13164 (ice-9 textual-ports)
13165 (srfi srfi-2))
13166 (setenv "LC_ALL" "C") ;ensure English output
13167 (and-let* ((input-pipe (open-pipe*
13168 OPEN_READ
13169 #$(file-append acpi "/bin/acpi")))
13170 (output (get-string-all input-pipe))
13171 (m (string-match "Discharging, ([0-9]+)%" output))
13172 (level (string->number (match:substring m 1)))
13173 ((< level %min-level)))
13174 (format #t "warning: Battery level is low (~a%)~%" level)
13175 (invoke #$(file-append beep "/bin/beep") "-r5")))))))
13176 @end lisp
13177
13178 @xref{Guile Syntax, mcron job specifications,, mcron, GNU@tie{}mcron},
13179 for more information on mcron job specifications. Below is the
13180 reference of the mcron service.
13181
13182 On a running system, you can use the @code{schedule} action of the service to
13183 visualize the mcron jobs that will be executed next:
13184
13185 @example
13186 # herd schedule mcron
13187 @end example
13188
13189 @noindent
13190 The example above lists the next five tasks that will be executed, but you can
13191 also specify the number of tasks to display:
13192
13193 @example
13194 # herd schedule mcron 10
13195 @end example
13196
13197 @defvr {Scheme Variable} mcron-service-type
13198 This is the type of the @code{mcron} service, whose value is an
13199 @code{mcron-configuration} object.
13200
13201 This service type can be the target of a service extension that provides
13202 it additional job specifications (@pxref{Service Composition}). In
13203 other words, it is possible to define services that provide additional
13204 mcron jobs to run.
13205 @end defvr
13206
13207 @deftp {Data Type} mcron-configuration
13208 Data type representing the configuration of mcron.
13209
13210 @table @asis
13211 @item @code{mcron} (default: @var{mcron})
13212 The mcron package to use.
13213
13214 @item @code{jobs}
13215 This is a list of gexps (@pxref{G-Expressions}), where each gexp
13216 corresponds to an mcron job specification (@pxref{Syntax, mcron job
13217 specifications,, mcron, GNU@tie{}mcron}).
13218 @end table
13219 @end deftp
13220
13221
13222 @node Log Rotation
13223 @subsection Log Rotation
13224
13225 @cindex rottlog
13226 @cindex log rotation
13227 @cindex logging
13228 Log files such as those found in @file{/var/log} tend to grow endlessly,
13229 so it's a good idea to @dfn{rotate} them once in a while---i.e., archive
13230 their contents in separate files, possibly compressed. The @code{(gnu
13231 services admin)} module provides an interface to GNU@tie{}Rot[t]log, a
13232 log rotation tool (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}).
13233
13234 This service is part of @code{%base-services}, and thus enabled by
13235 default, with the default settings, for commonly encountered log files.
13236 The example below shows how to extend it with an additional
13237 @dfn{rotation}, should you need to do that (usually, services that
13238 produce log files already take care of that):
13239
13240 @lisp
13241 (use-modules (guix) (gnu))
13242 (use-service-modules admin)
13243
13244 (define my-log-files
13245 ;; Log files that I want to rotate.
13246 '("/var/log/something.log" "/var/log/another.log"))
13247
13248 (operating-system
13249 ;; @dots{}
13250 (services (cons (simple-service 'rotate-my-stuff
13251 rottlog-service-type
13252 (list (log-rotation
13253 (frequency 'daily)
13254 (files my-log-files))))
13255 %base-services)))
13256 @end lisp
13257
13258 @defvr {Scheme Variable} rottlog-service-type
13259 This is the type of the Rottlog service, whose value is a
13260 @code{rottlog-configuration} object.
13261
13262 Other services can extend this one with new @code{log-rotation} objects
13263 (see below), thereby augmenting the set of files to be rotated.
13264
13265 This service type can define mcron jobs (@pxref{Scheduled Job
13266 Execution}) to run the rottlog service.
13267 @end defvr
13268
13269 @deftp {Data Type} rottlog-configuration
13270 Data type representing the configuration of rottlog.
13271
13272 @table @asis
13273 @item @code{rottlog} (default: @code{rottlog})
13274 The Rottlog package to use.
13275
13276 @item @code{rc-file} (default: @code{(file-append rottlog "/etc/rc")})
13277 The Rottlog configuration file to use (@pxref{Mandatory RC Variables,,,
13278 rottlog, GNU Rot[t]log Manual}).
13279
13280 @item @code{rotations} (default: @code{%default-rotations})
13281 A list of @code{log-rotation} objects as defined below.
13282
13283 @item @code{jobs}
13284 This is a list of gexps where each gexp corresponds to an mcron job
13285 specification (@pxref{Scheduled Job Execution}).
13286 @end table
13287 @end deftp
13288
13289 @deftp {Data Type} log-rotation
13290 Data type representing the rotation of a group of log files.
13291
13292 Taking an example from the Rottlog manual (@pxref{Period Related File
13293 Examples,,, rottlog, GNU Rot[t]log Manual}), a log rotation might be
13294 defined like this:
13295
13296 @lisp
13297 (log-rotation
13298 (frequency 'daily)
13299 (files '("/var/log/apache/*"))
13300 (options '("storedir apache-archives"
13301 "rotate 6"
13302 "notifempty"
13303 "nocompress")))
13304 @end lisp
13305
13306 The list of fields is as follows:
13307
13308 @table @asis
13309 @item @code{frequency} (default: @code{'weekly})
13310 The log rotation frequency, a symbol.
13311
13312 @item @code{files}
13313 The list of files or file glob patterns to rotate.
13314
13315 @item @code{options} (default: @code{'()})
13316 The list of rottlog options for this rotation (@pxref{Configuration
13317 parameters,,, rottlog, GNU Rot[t]lg Manual}).
13318
13319 @item @code{post-rotate} (default: @code{#f})
13320 Either @code{#f} or a gexp to execute once the rotation has completed.
13321 @end table
13322 @end deftp
13323
13324 @defvr {Scheme Variable} %default-rotations
13325 Specifies weekly rotation of @code{%rotated-files} and of
13326 @file{/var/log/guix-daemon.log}.
13327 @end defvr
13328
13329 @defvr {Scheme Variable} %rotated-files
13330 The list of syslog-controlled files to be rotated. By default it is:
13331 @code{'("/var/log/messages" "/var/log/secure" "/var/log/debug" \
13332 "/var/log/maillog")}.
13333 @end defvr
13334
13335 @node Networking Services
13336 @subsection Networking Services
13337
13338 The @code{(gnu services networking)} module provides services to configure
13339 the network interface.
13340
13341 @cindex DHCP, networking service
13342 @defvr {Scheme Variable} dhcp-client-service-type
13343 This is the type of services that run @var{dhcp}, a Dynamic Host Configuration
13344 Protocol (DHCP) client, on all the non-loopback network interfaces. Its value
13345 is the DHCP client package to use, @code{isc-dhcp} by default.
13346 @end defvr
13347
13348 @deffn {Scheme Procedure} dhcpd-service-type
13349 This type defines a service that runs a DHCP daemon. To create a
13350 service of this type, you must supply a @code{<dhcpd-configuration>}.
13351 For example:
13352
13353 @lisp
13354 (service dhcpd-service-type
13355 (dhcpd-configuration
13356 (config-file (local-file "my-dhcpd.conf"))
13357 (interfaces '("enp0s25"))))
13358 @end lisp
13359 @end deffn
13360
13361 @deftp {Data Type} dhcpd-configuration
13362 @table @asis
13363 @item @code{package} (default: @code{isc-dhcp})
13364 The package that provides the DHCP daemon. This package is expected to
13365 provide the daemon at @file{sbin/dhcpd} relative to its output
13366 directory. The default package is the
13367 @uref{https://www.isc.org/products/DHCP, ISC's DHCP server}.
13368 @item @code{config-file} (default: @code{#f})
13369 The configuration file to use. This is required. It will be passed to
13370 @code{dhcpd} via its @code{-cf} option. This may be any ``file-like''
13371 object (@pxref{G-Expressions, file-like objects}). See @code{man
13372 dhcpd.conf} for details on the configuration file syntax.
13373 @item @code{version} (default: @code{"4"})
13374 The DHCP version to use. The ISC DHCP server supports the values ``4'',
13375 ``6'', and ``4o6''. These correspond to the @code{dhcpd} program
13376 options @code{-4}, @code{-6}, and @code{-4o6}. See @code{man dhcpd} for
13377 details.
13378 @item @code{run-directory} (default: @code{"/run/dhcpd"})
13379 The run directory to use. At service activation time, this directory
13380 will be created if it does not exist.
13381 @item @code{pid-file} (default: @code{"/run/dhcpd/dhcpd.pid"})
13382 The PID file to use. This corresponds to the @code{-pf} option of
13383 @code{dhcpd}. See @code{man dhcpd} for details.
13384 @item @code{interfaces} (default: @code{'()})
13385 The names of the network interfaces on which dhcpd should listen for
13386 broadcasts. If this list is not empty, then its elements (which must be
13387 strings) will be appended to the @code{dhcpd} invocation when starting
13388 the daemon. It may not be necessary to explicitly specify any
13389 interfaces here; see @code{man dhcpd} for details.
13390 @end table
13391 @end deftp
13392
13393 @defvr {Scheme Variable} static-networking-service-type
13394 This is the type for statically-configured network interfaces.
13395 @c TODO Document <static-networking> data structures.
13396 @end defvr
13397
13398 @deffn {Scheme Procedure} static-networking-service @var{interface} @var{ip} @
13399 [#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}] @
13400 [#:requirement @code{'(udev)}]
13401 Return a service that starts @var{interface} with address @var{ip}. If
13402 @var{netmask} is true, use it as the network mask. If @var{gateway} is true,
13403 it must be a string specifying the default network gateway. @var{requirement}
13404 can be used to declare a dependency on another service before configuring the
13405 interface.
13406
13407 This procedure can be called several times, one for each network
13408 interface of interest. Behind the scenes what it does is extend
13409 @code{static-networking-service-type} with additional network interfaces
13410 to handle.
13411
13412 For example:
13413
13414 @lisp
13415 (static-networking-service "eno1" "192.168.1.82"
13416 #:gateway "192.168.1.2"
13417 #:name-servers '("192.168.1.2"))
13418 @end lisp
13419 @end deffn
13420
13421 @cindex wicd
13422 @cindex wireless
13423 @cindex WiFi
13424 @cindex network management
13425 @deffn {Scheme Procedure} wicd-service [#:wicd @var{wicd}]
13426 Return a service that runs @url{https://launchpad.net/wicd,Wicd}, a network
13427 management daemon that aims to simplify wired and wireless networking.
13428
13429 This service adds the @var{wicd} package to the global profile, providing
13430 several commands to interact with the daemon and configure networking:
13431 @command{wicd-client}, a graphical user interface, and the @command{wicd-cli}
13432 and @command{wicd-curses} user interfaces.
13433 @end deffn
13434
13435 @cindex ModemManager
13436
13437 @defvr {Scheme Variable} modem-manager-service-type
13438 This is the service type for the
13439 @uref{https://wiki.gnome.org/Projects/ModemManager, ModemManager}
13440 service. The value for this service type is a
13441 @code{modem-manager-configuration} record.
13442
13443 This service is part of @code{%desktop-services} (@pxref{Desktop
13444 Services}).
13445 @end defvr
13446
13447 @deftp {Data Type} modem-manager-configuration
13448 Data type representing the configuration of ModemManager.
13449
13450 @table @asis
13451 @item @code{modem-manager} (default: @code{modem-manager})
13452 The ModemManager package to use.
13453
13454 @end table
13455 @end deftp
13456
13457 @cindex USB_ModeSwitch
13458 @cindex Modeswitching
13459
13460 @defvr {Scheme Variable} usb-modeswitch-service-type
13461 This is the service type for the
13462 @uref{https://www.draisberghof.de/usb_modeswitch/, USB_ModeSwitch} service. The
13463 value for this service type is a @code{usb-modeswitch-configuration} record.
13464
13465 When plugged in, some USB modems (and other USB devices) initially present
13466 themselves as a read-only storage medium and not as a modem. They need to be
13467 @dfn{modeswitched} before they are usable. The USB_ModeSwitch service type
13468 installs udev rules to automatically modeswitch these devices when they are
13469 plugged in.
13470
13471 This service is part of @code{%desktop-services} (@pxref{Desktop
13472 Services}).
13473 @end defvr
13474
13475 @deftp {Data Type} usb-modeswitch-configuration
13476 Data type representing the configuration of USB_ModeSwitch.
13477
13478 @table @asis
13479 @item @code{usb-modeswitch} (default: @code{usb-modeswitch})
13480 The USB_ModeSwitch package providing the binaries for modeswitching.
13481
13482 @item @code{usb-modeswitch-data} (default: @code{usb-modeswitch-data})
13483 The package providing the device data and udev rules file used by
13484 USB_ModeSwitch.
13485
13486 @item @code{config-file} (default: @code{#~(string-append #$usb-modeswitch:dispatcher "/etc/usb_modeswitch.conf")})
13487 Which config file to use for the USB_ModeSwitch dispatcher. By default the
13488 config file shipped with USB_ModeSwitch is used which disables logging to
13489 @file{/var/log} among other default settings. If set to @code{#f}, no config
13490 file is used.
13491
13492 @end table
13493 @end deftp
13494
13495 @cindex NetworkManager
13496
13497 @defvr {Scheme Variable} network-manager-service-type
13498 This is the service type for the
13499 @uref{https://wiki.gnome.org/Projects/NetworkManager, NetworkManager}
13500 service. The value for this service type is a
13501 @code{network-manager-configuration} record.
13502
13503 This service is part of @code{%desktop-services} (@pxref{Desktop
13504 Services}).
13505 @end defvr
13506
13507 @deftp {Data Type} network-manager-configuration
13508 Data type representing the configuration of NetworkManager.
13509
13510 @table @asis
13511 @item @code{network-manager} (default: @code{network-manager})
13512 The NetworkManager package to use.
13513
13514 @item @code{dns} (default: @code{"default"})
13515 Processing mode for DNS, which affects how NetworkManager uses the
13516 @code{resolv.conf} configuration file.
13517
13518 @table @samp
13519 @item default
13520 NetworkManager will update @code{resolv.conf} to reflect the nameservers
13521 provided by currently active connections.
13522
13523 @item dnsmasq
13524 NetworkManager will run @code{dnsmasq} as a local caching nameserver, using a
13525 @dfn{conditional forwarding} configuration if you are connected to a VPN, and
13526 then update @code{resolv.conf} to point to the local nameserver.
13527
13528 With this setting, you can share your network connection. For example when
13529 you want to share your network connection to another laptop @i{via} an
13530 Ethernet cable, you can open @command{nm-connection-editor} and configure the
13531 Wired connection's method for IPv4 and IPv6 to be ``Shared to other computers''
13532 and reestablish the connection (or reboot).
13533
13534 You can also set up a @dfn{host-to-guest connection} to QEMU VMs
13535 (@pxref{Installing Guix in a VM}). With a host-to-guest connection, you can
13536 e.g.@: access a Web server running on the VM (@pxref{Web Services}) from a Web
13537 browser on your host system, or connect to the VM @i{via} SSH
13538 (@pxref{Networking Services, @code{openssh-service-type}}). To set up a
13539 host-to-guest connection, run this command once:
13540
13541 @example
13542 nmcli connection add type tun \
13543 connection.interface-name tap0 \
13544 tun.mode tap tun.owner $(id -u) \
13545 ipv4.method shared \
13546 ipv4.addresses 172.28.112.1/24
13547 @end example
13548
13549 Then each time you launch your QEMU VM (@pxref{Running Guix in a VM}), pass
13550 @option{-nic tap,ifname=tap0,script=no,downscript=no} to
13551 @command{qemu-system-...}.
13552
13553 @item none
13554 NetworkManager will not modify @code{resolv.conf}.
13555 @end table
13556
13557 @item @code{vpn-plugins} (default: @code{'()})
13558 This is the list of available plugins for virtual private networks
13559 (VPNs). An example of this is the @code{network-manager-openvpn}
13560 package, which allows NetworkManager to manage VPNs @i{via} OpenVPN.
13561
13562 @end table
13563 @end deftp
13564
13565 @cindex Connman
13566 @deffn {Scheme Variable} connman-service-type
13567 This is the service type to run @url{https://01.org/connman,Connman},
13568 a network connection manager.
13569
13570 Its value must be an
13571 @code{connman-configuration} record as in this example:
13572
13573 @lisp
13574 (service connman-service-type
13575 (connman-configuration
13576 (disable-vpn? #t)))
13577 @end lisp
13578
13579 See below for details about @code{connman-configuration}.
13580 @end deffn
13581
13582 @deftp {Data Type} connman-configuration
13583 Data Type representing the configuration of connman.
13584
13585 @table @asis
13586 @item @code{connman} (default: @var{connman})
13587 The connman package to use.
13588
13589 @item @code{disable-vpn?} (default: @code{#f})
13590 When true, disable connman's vpn plugin.
13591 @end table
13592 @end deftp
13593
13594 @cindex WPA Supplicant
13595 @defvr {Scheme Variable} wpa-supplicant-service-type
13596 This is the service type to run @url{https://w1.fi/wpa_supplicant/,WPA
13597 supplicant}, an authentication daemon required to authenticate against
13598 encrypted WiFi or ethernet networks.
13599 @end defvr
13600
13601 @deftp {Data Type} wpa-supplicant-configuration
13602 Data type representing the configuration of WPA Supplicant.
13603
13604 It takes the following parameters:
13605
13606 @table @asis
13607 @item @code{wpa-supplicant} (default: @code{wpa-supplicant})
13608 The WPA Supplicant package to use.
13609
13610 @item @code{dbus?} (default: @code{#t})
13611 Whether to listen for requests on D-Bus.
13612
13613 @item @code{pid-file} (default: @code{"/var/run/wpa_supplicant.pid"})
13614 Where to store the PID file.
13615
13616 @item @code{interface} (default: @code{#f})
13617 If this is set, it must specify the name of a network interface that
13618 WPA supplicant will control.
13619
13620 @item @code{config-file} (default: @code{#f})
13621 Optional configuration file to use.
13622
13623 @item @code{extra-options} (default: @code{'()})
13624 List of additional command-line arguments to pass to the daemon.
13625 @end table
13626 @end deftp
13627
13628 @cindex iptables
13629 @defvr {Scheme Variable} iptables-service-type
13630 This is the service type to set up an iptables configuration. iptables is a
13631 packet filtering framework supported by the Linux kernel. This service
13632 supports configuring iptables for both IPv4 and IPv6. A simple example
13633 configuration rejecting all incoming connections except those to the ssh port
13634 22 is shown below.
13635
13636 @lisp
13637 (service iptables-service-type
13638 (iptables-configuration
13639 (ipv4-rules (plain-file "iptables.rules" "*filter
13640 :INPUT ACCEPT
13641 :FORWARD ACCEPT
13642 :OUTPUT ACCEPT
13643 -A INPUT -p tcp --dport 22 -j ACCEPT
13644 -A INPUT -j REJECT --reject-with icmp-port-unreachable
13645 COMMIT
13646 "))
13647 (ipv6-rules (plain-file "ip6tables.rules" "*filter
13648 :INPUT ACCEPT
13649 :FORWARD ACCEPT
13650 :OUTPUT ACCEPT
13651 -A INPUT -p tcp --dport 22 -j ACCEPT
13652 -A INPUT -j REJECT --reject-with icmp6-port-unreachable
13653 COMMIT
13654 "))))
13655 @end lisp
13656 @end defvr
13657
13658 @deftp {Data Type} iptables-configuration
13659 The data type representing the configuration of iptables.
13660
13661 @table @asis
13662 @item @code{iptables} (default: @code{iptables})
13663 The iptables package that provides @code{iptables-restore} and
13664 @code{ip6tables-restore}.
13665 @item @code{ipv4-rules} (default: @code{%iptables-accept-all-rules})
13666 The iptables rules to use. It will be passed to @code{iptables-restore}.
13667 This may be any ``file-like'' object (@pxref{G-Expressions, file-like
13668 objects}).
13669 @item @code{ipv6-rules} (default: @code{%iptables-accept-all-rules})
13670 The ip6tables rules to use. It will be passed to @code{ip6tables-restore}.
13671 This may be any ``file-like'' object (@pxref{G-Expressions, file-like
13672 objects}).
13673 @end table
13674 @end deftp
13675
13676 @cindex nftables
13677 @defvr {Scheme Variable} nftables-service-type
13678 This is the service type to set up a nftables configuration. nftables is a
13679 netfilter project that aims to replace the existing iptables, ip6tables,
13680 arptables and ebtables framework. It provides a new packet filtering
13681 framework, a new user-space utility @command{nft}, and a compatibility layer
13682 for iptables. This service comes with a default ruleset
13683 @code{%default-nftables-ruleset} that rejecting all incomming connections
13684 except those to the ssh port 22. To use it, simply write:
13685
13686 @lisp
13687 (service nftables-service-type)
13688 @end lisp
13689 @end defvr
13690
13691 @deftp {Data Type} nftables-configuration
13692 The data type representing the configuration of nftables.
13693
13694 @table @asis
13695 @item @code{package} (default: @code{nftables})
13696 The nftables package that provides @command{nft}.
13697 @item @code{ruleset} (default: @code{%default-nftables-ruleset})
13698 The nftables ruleset to use. This may be any ``file-like'' object
13699 (@pxref{G-Expressions, file-like objects}).
13700 @end table
13701 @end deftp
13702
13703 @cindex NTP (Network Time Protocol), service
13704 @cindex ntpd, service for the Network Time Protocol daemon
13705 @cindex real time clock
13706 @defvr {Scheme Variable} ntp-service-type
13707 This is the type of the service running the @uref{https://www.ntp.org,
13708 Network Time Protocol (NTP)} daemon, @command{ntpd}. The daemon will keep the
13709 system clock synchronized with that of the specified NTP servers.
13710
13711 The value of this service is an @code{ntpd-configuration} object, as described
13712 below.
13713 @end defvr
13714
13715 @deftp {Data Type} ntp-configuration
13716 This is the data type for the NTP service configuration.
13717
13718 @table @asis
13719 @item @code{servers} (default: @code{%ntp-servers})
13720 This is the list of servers (@code{<ntp-server>} records) with which
13721 @command{ntpd} will be synchronized. See the @code{ntp-server} data type
13722 definition below.
13723
13724 @item @code{allow-large-adjustment?} (default: @code{#t})
13725 This determines whether @command{ntpd} is allowed to make an initial
13726 adjustment of more than 1,000 seconds.
13727
13728 @item @code{ntp} (default: @code{ntp})
13729 The NTP package to use.
13730 @end table
13731 @end deftp
13732
13733 @defvr {Scheme Variable} %ntp-servers
13734 List of host names used as the default NTP servers. These are servers of the
13735 @uref{https://www.ntppool.org/en/, NTP Pool Project}.
13736 @end defvr
13737
13738 @deftp {Data Type} ntp-server
13739 The data type representing the configuration of a NTP server.
13740
13741 @table @asis
13742 @item @code{type} (default: @code{'server})
13743 The type of the NTP server, given as a symbol. One of @code{'pool},
13744 @code{'server}, @code{'peer}, @code{'broadcast} or @code{'manycastclient}.
13745
13746 @item @code{address}
13747 The address of the server, as a string.
13748
13749 @item @code{options}
13750 NTPD options to use with that specific server, given as a list of option names
13751 and/or of option names and values tuples. The following example define a server
13752 to use with the options @option{iburst} and @option{prefer}, as well as
13753 @option{version} 3 and a @option{maxpoll} time of 16 seconds.
13754
13755 @example
13756 (ntp-server
13757 (type 'server)
13758 (address "some.ntp.server.org")
13759 (options `(iburst (version 3) (maxpoll 16) prefer))))
13760 @end example
13761 @end table
13762 @end deftp
13763
13764 @cindex OpenNTPD
13765 @deffn {Scheme Procedure} openntpd-service-type
13766 Run the @command{ntpd}, the Network Time Protocol (NTP) daemon, as implemented
13767 by @uref{http://www.openntpd.org, OpenNTPD}. The daemon will keep the system
13768 clock synchronized with that of the given servers.
13769
13770 @lisp
13771 (service
13772 openntpd-service-type
13773 (openntpd-configuration
13774 (listen-on '("127.0.0.1" "::1"))
13775 (sensor '("udcf0 correction 70000"))
13776 (constraint-from '("www.gnu.org"))
13777 (constraints-from '("https://www.google.com/"))
13778 (allow-large-adjustment? #t)))
13779
13780 @end lisp
13781 @end deffn
13782
13783 @defvr {Scheme Variable} %openntpd-servers
13784 This variable is a list of the server addresses defined in
13785 @code{%ntp-servers}.
13786 @end defvr
13787
13788 @deftp {Data Type} openntpd-configuration
13789 @table @asis
13790 @item @code{openntpd} (default: @code{(file-append openntpd "/sbin/ntpd")})
13791 The openntpd executable to use.
13792 @item @code{listen-on} (default: @code{'("127.0.0.1" "::1")})
13793 A list of local IP addresses or hostnames the ntpd daemon should listen on.
13794 @item @code{query-from} (default: @code{'()})
13795 A list of local IP address the ntpd daemon should use for outgoing queries.
13796 @item @code{sensor} (default: @code{'()})
13797 Specify a list of timedelta sensor devices ntpd should use. @code{ntpd}
13798 will listen to each sensor that actually exists and ignore non-existent ones.
13799 See @uref{https://man.openbsd.org/ntpd.conf, upstream documentation} for more
13800 information.
13801 @item @code{server} (default: @code{'()})
13802 Specify a list of IP addresses or hostnames of NTP servers to synchronize to.
13803 @item @code{servers} (default: @code{%openntp-servers})
13804 Specify a list of IP addresses or hostnames of NTP pools to synchronize to.
13805 @item @code{constraint-from} (default: @code{'()})
13806 @code{ntpd} can be configured to query the ‘Date’ from trusted HTTPS servers via TLS.
13807 This time information is not used for precision but acts as an authenticated
13808 constraint, thereby reducing the impact of unauthenticated NTP
13809 man-in-the-middle attacks.
13810 Specify a list of URLs, IP addresses or hostnames of HTTPS servers to provide
13811 a constraint.
13812 @item @code{constraints-from} (default: @code{'()})
13813 As with constraint from, specify a list of URLs, IP addresses or hostnames of
13814 HTTPS servers to provide a constraint. Should the hostname resolve to multiple
13815 IP addresses, @code{ntpd} will calculate a median constraint from all of them.
13816 @item @code{allow-large-adjustment?} (default: @code{#f})
13817 Determines if @code{ntpd} is allowed to make an initial adjustment of more
13818 than 180 seconds.
13819 @end table
13820 @end deftp
13821
13822 @cindex inetd
13823 @deffn {Scheme variable} inetd-service-type
13824 This service runs the @command{inetd} (@pxref{inetd invocation,,,
13825 inetutils, GNU Inetutils}) daemon. @command{inetd} listens for
13826 connections on internet sockets, and lazily starts the specified server
13827 program when a connection is made on one of these sockets.
13828
13829 The value of this service is an @code{inetd-configuration} object. The
13830 following example configures the @command{inetd} daemon to provide the
13831 built-in @command{echo} service, as well as an smtp service which
13832 forwards smtp traffic over ssh to a server @code{smtp-server} behind a
13833 gateway @code{hostname}:
13834
13835 @lisp
13836 (service
13837 inetd-service-type
13838 (inetd-configuration
13839 (entries (list
13840 (inetd-entry
13841 (name "echo")
13842 (socket-type 'stream)
13843 (protocol "tcp")
13844 (wait? #f)
13845 (user "root"))
13846 (inetd-entry
13847 (node "127.0.0.1")
13848 (name "smtp")
13849 (socket-type 'stream)
13850 (protocol "tcp")
13851 (wait? #f)
13852 (user "root")
13853 (program (file-append openssh "/bin/ssh"))
13854 (arguments
13855 '("ssh" "-qT" "-i" "/path/to/ssh_key"
13856 "-W" "smtp-server:25" "user@@hostname")))))))
13857 @end lisp
13858
13859 See below for more details about @code{inetd-configuration}.
13860 @end deffn
13861
13862 @deftp {Data Type} inetd-configuration
13863 Data type representing the configuration of @command{inetd}.
13864
13865 @table @asis
13866 @item @code{program} (default: @code{(file-append inetutils "/libexec/inetd")})
13867 The @command{inetd} executable to use.
13868
13869 @item @code{entries} (default: @code{'()})
13870 A list of @command{inetd} service entries. Each entry should be created
13871 by the @code{inetd-entry} constructor.
13872 @end table
13873 @end deftp
13874
13875 @deftp {Data Type} inetd-entry
13876 Data type representing an entry in the @command{inetd} configuration.
13877 Each entry corresponds to a socket where @command{inetd} will listen for
13878 requests.
13879
13880 @table @asis
13881 @item @code{node} (default: @code{#f})
13882 Optional string, a comma-separated list of local addresses
13883 @command{inetd} should use when listening for this service.
13884 @xref{Configuration file,,, inetutils, GNU Inetutils} for a complete
13885 description of all options.
13886 @item @code{name}
13887 A string, the name must correspond to an entry in @code{/etc/services}.
13888 @item @code{socket-type}
13889 One of @code{'stream}, @code{'dgram}, @code{'raw}, @code{'rdm} or
13890 @code{'seqpacket}.
13891 @item @code{protocol}
13892 A string, must correspond to an entry in @code{/etc/protocols}.
13893 @item @code{wait?} (default: @code{#t})
13894 Whether @command{inetd} should wait for the server to exit before
13895 listening to new service requests.
13896 @item @code{user}
13897 A string containing the user (and, optionally, group) name of the user
13898 as whom the server should run. The group name can be specified in a
13899 suffix, separated by a colon or period, i.e.@: @code{"user"},
13900 @code{"user:group"} or @code{"user.group"}.
13901 @item @code{program} (default: @code{"internal"})
13902 The server program which will serve the requests, or @code{"internal"}
13903 if @command{inetd} should use a built-in service.
13904 @item @code{arguments} (default: @code{'()})
13905 A list strings or file-like objects, which are the server program's
13906 arguments, starting with the zeroth argument, i.e.@: the name of the
13907 program itself. For @command{inetd}'s internal services, this entry
13908 must be @code{'()} or @code{'("internal")}.
13909 @end table
13910
13911 @xref{Configuration file,,, inetutils, GNU Inetutils} for a more
13912 detailed discussion of each configuration field.
13913 @end deftp
13914
13915 @cindex Tor
13916 @defvr {Scheme Variable} tor-service-type
13917 This is the type for a service that runs the @uref{https://torproject.org,
13918 Tor} anonymous networking daemon. The service is configured using a
13919 @code{<tor-configuration>} record. By default, the Tor daemon runs as the
13920 @code{tor} unprivileged user, which is a member of the @code{tor} group.
13921
13922 @end defvr
13923
13924 @deftp {Data Type} tor-configuration
13925 @table @asis
13926 @item @code{tor} (default: @code{tor})
13927 The package that provides the Tor daemon. This package is expected to provide
13928 the daemon at @file{bin/tor} relative to its output directory. The default
13929 package is the @uref{https://www.torproject.org, Tor Project's}
13930 implementation.
13931
13932 @item @code{config-file} (default: @code{(plain-file "empty" "")})
13933 The configuration file to use. It will be appended to a default configuration
13934 file, and the final configuration file will be passed to @code{tor} via its
13935 @code{-f} option. This may be any ``file-like'' object (@pxref{G-Expressions,
13936 file-like objects}). See @code{man tor} for details on the configuration file
13937 syntax.
13938
13939 @item @code{hidden-services} (default: @code{'()})
13940 The list of @code{<hidden-service>} records to use. For any hidden service
13941 you include in this list, appropriate configuration to enable the hidden
13942 service will be automatically added to the default configuration file. You
13943 may conveniently create @code{<hidden-service>} records using the
13944 @code{tor-hidden-service} procedure described below.
13945
13946 @item @code{socks-socket-type} (default: @code{'tcp})
13947 The default socket type that Tor should use for its SOCKS socket. This must
13948 be either @code{'tcp} or @code{'unix}. If it is @code{'tcp}, then by default
13949 Tor will listen on TCP port 9050 on the loopback interface (i.e., localhost).
13950 If it is @code{'unix}, then Tor will listen on the UNIX domain socket
13951 @file{/var/run/tor/socks-sock}, which will be made writable by members of the
13952 @code{tor} group.
13953
13954 If you want to customize the SOCKS socket in more detail, leave
13955 @code{socks-socket-type} at its default value of @code{'tcp} and use
13956 @code{config-file} to override the default by providing your own
13957 @code{SocksPort} option.
13958 @end table
13959 @end deftp
13960
13961 @cindex hidden service
13962 @deffn {Scheme Procedure} tor-hidden-service @var{name} @var{mapping}
13963 Define a new Tor @dfn{hidden service} called @var{name} and implementing
13964 @var{mapping}. @var{mapping} is a list of port/host tuples, such as:
13965
13966 @example
13967 '((22 "127.0.0.1:22")
13968 (80 "127.0.0.1:8080"))
13969 @end example
13970
13971 In this example, port 22 of the hidden service is mapped to local port 22, and
13972 port 80 is mapped to local port 8080.
13973
13974 This creates a @file{/var/lib/tor/hidden-services/@var{name}} directory, where
13975 the @file{hostname} file contains the @code{.onion} host name for the hidden
13976 service.
13977
13978 See @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, the Tor
13979 project's documentation} for more information.
13980 @end deffn
13981
13982 The @code{(gnu services rsync)} module provides the following services:
13983
13984 You might want an rsync daemon if you have files that you want available
13985 so anyone (or just yourself) can download existing files or upload new
13986 files.
13987
13988 @deffn {Scheme Variable} rsync-service-type
13989 This is the service type for the @uref{https://rsync.samba.org, rsync} daemon,
13990 The value for this service type is a
13991 @command{rsync-configuration} record as in this example:
13992
13993 @lisp
13994 (service rsync-service-type)
13995 @end lisp
13996
13997 See below for details about @code{rsync-configuration}.
13998 @end deffn
13999
14000 @deftp {Data Type} rsync-configuration
14001 Data type representing the configuration for @code{rsync-service}.
14002
14003 @table @asis
14004 @item @code{package} (default: @var{rsync})
14005 @code{rsync} package to use.
14006
14007 @item @code{port-number} (default: @code{873})
14008 TCP port on which @command{rsync} listens for incoming connections. If port
14009 is less than @code{1024} @command{rsync} needs to be started as the
14010 @code{root} user and group.
14011
14012 @item @code{pid-file} (default: @code{"/var/run/rsyncd/rsyncd.pid"})
14013 Name of the file where @command{rsync} writes its PID.
14014
14015 @item @code{lock-file} (default: @code{"/var/run/rsyncd/rsyncd.lock"})
14016 Name of the file where @command{rsync} writes its lock file.
14017
14018 @item @code{log-file} (default: @code{"/var/log/rsyncd.log"})
14019 Name of the file where @command{rsync} writes its log file.
14020
14021 @item @code{use-chroot?} (default: @var{#t})
14022 Whether to use chroot for @command{rsync} shared directory.
14023
14024 @item @code{share-path} (default: @file{/srv/rsync})
14025 Location of the @command{rsync} shared directory.
14026
14027 @item @code{share-comment} (default: @code{"Rsync share"})
14028 Comment of the @command{rsync} shared directory.
14029
14030 @item @code{read-only?} (default: @var{#f})
14031 Read-write permissions to shared directory.
14032
14033 @item @code{timeout} (default: @code{300})
14034 I/O timeout in seconds.
14035
14036 @item @code{user} (default: @var{"root"})
14037 Owner of the @code{rsync} process.
14038
14039 @item @code{group} (default: @var{"root"})
14040 Group of the @code{rsync} process.
14041
14042 @item @code{uid} (default: @var{"rsyncd"})
14043 User name or user ID that file transfers to and from that module should take
14044 place as when the daemon was run as @code{root}.
14045
14046 @item @code{gid} (default: @var{"rsyncd"})
14047 Group name or group ID that will be used when accessing the module.
14048
14049 @end table
14050 @end deftp
14051
14052 Furthermore, @code{(gnu services ssh)} provides the following services.
14053 @cindex SSH
14054 @cindex SSH server
14055
14056 @deffn {Scheme Procedure} lsh-service [#:host-key "/etc/lsh/host-key"] @
14057 [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
14058 [#:allow-empty-passwords? #f] [#:root-login? #f] @
14059 [#:syslog-output? #t] [#:x11-forwarding? #t] @
14060 [#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
14061 [#:public-key-authentication? #t] [#:initialize? #t]
14062 Run the @command{lshd} program from @var{lsh} to listen on port @var{port-number}.
14063 @var{host-key} must designate a file containing the host key, and readable
14064 only by root.
14065
14066 When @var{daemonic?} is true, @command{lshd} will detach from the
14067 controlling terminal and log its output to syslogd, unless one sets
14068 @var{syslog-output?} to false. Obviously, it also makes lsh-service
14069 depend on existence of syslogd service. When @var{pid-file?} is true,
14070 @command{lshd} writes its PID to the file called @var{pid-file}.
14071
14072 When @var{initialize?} is true, automatically create the seed and host key
14073 upon service activation if they do not exist yet. This may take long and
14074 require interaction.
14075
14076 When @var{initialize?} is false, it is up to the user to initialize the
14077 randomness generator (@pxref{lsh-make-seed,,, lsh, LSH Manual}), and to create
14078 a key pair with the private key stored in file @var{host-key} (@pxref{lshd
14079 basics,,, lsh, LSH Manual}).
14080
14081 When @var{interfaces} is empty, lshd listens for connections on all the
14082 network interfaces; otherwise, @var{interfaces} must be a list of host names
14083 or addresses.
14084
14085 @var{allow-empty-passwords?} specifies whether to accept log-ins with empty
14086 passwords, and @var{root-login?} specifies whether to accept log-ins as
14087 root.
14088
14089 The other options should be self-descriptive.
14090 @end deffn
14091
14092 @cindex SSH
14093 @cindex SSH server
14094 @deffn {Scheme Variable} openssh-service-type
14095 This is the type for the @uref{http://www.openssh.org, OpenSSH} secure
14096 shell daemon, @command{sshd}. Its value must be an
14097 @code{openssh-configuration} record as in this example:
14098
14099 @lisp
14100 (service openssh-service-type
14101 (openssh-configuration
14102 (x11-forwarding? #t)
14103 (permit-root-login 'without-password)
14104 (authorized-keys
14105 `(("alice" ,(local-file "alice.pub"))
14106 ("bob" ,(local-file "bob.pub"))))))
14107 @end lisp
14108
14109 See below for details about @code{openssh-configuration}.
14110
14111 This service can be extended with extra authorized keys, as in this
14112 example:
14113
14114 @lisp
14115 (service-extension openssh-service-type
14116 (const `(("charlie"
14117 ,(local-file "charlie.pub")))))
14118 @end lisp
14119 @end deffn
14120
14121 @deftp {Data Type} openssh-configuration
14122 This is the configuration record for OpenSSH's @command{sshd}.
14123
14124 @table @asis
14125 @item @code{pid-file} (default: @code{"/var/run/sshd.pid"})
14126 Name of the file where @command{sshd} writes its PID.
14127
14128 @item @code{port-number} (default: @code{22})
14129 TCP port on which @command{sshd} listens for incoming connections.
14130
14131 @item @code{permit-root-login} (default: @code{#f})
14132 This field determines whether and when to allow logins as root. If
14133 @code{#f}, root logins are disallowed; if @code{#t}, they are allowed.
14134 If it's the symbol @code{'without-password}, then root logins are
14135 permitted but not with password-based authentication.
14136
14137 @item @code{allow-empty-passwords?} (default: @code{#f})
14138 When true, users with empty passwords may log in. When false, they may
14139 not.
14140
14141 @item @code{password-authentication?} (default: @code{#t})
14142 When true, users may log in with their password. When false, they have
14143 other authentication methods.
14144
14145 @item @code{public-key-authentication?} (default: @code{#t})
14146 When true, users may log in using public key authentication. When
14147 false, users have to use other authentication method.
14148
14149 Authorized public keys are stored in @file{~/.ssh/authorized_keys}.
14150 This is used only by protocol version 2.
14151
14152 @item @code{x11-forwarding?} (default: @code{#f})
14153 When true, forwarding of X11 graphical client connections is
14154 enabled---in other words, @command{ssh} options @option{-X} and
14155 @option{-Y} will work.
14156
14157 @item @code{allow-agent-forwarding?} (default: @code{#t})
14158 Whether to allow agent forwarding.
14159
14160 @item @code{allow-tcp-forwarding?} (default: @code{#t})
14161 Whether to allow TCP forwarding.
14162
14163 @item @code{gateway-ports?} (default: @code{#f})
14164 Whether to allow gateway ports.
14165
14166 @item @code{challenge-response-authentication?} (default: @code{#f})
14167 Specifies whether challenge response authentication is allowed (e.g.@: via
14168 PAM).
14169
14170 @item @code{use-pam?} (default: @code{#t})
14171 Enables the Pluggable Authentication Module interface. If set to
14172 @code{#t}, this will enable PAM authentication using
14173 @code{challenge-response-authentication?} and
14174 @code{password-authentication?}, in addition to PAM account and session
14175 module processing for all authentication types.
14176
14177 Because PAM challenge response authentication usually serves an
14178 equivalent role to password authentication, you should disable either
14179 @code{challenge-response-authentication?} or
14180 @code{password-authentication?}.
14181
14182 @item @code{print-last-log?} (default: @code{#t})
14183 Specifies whether @command{sshd} should print the date and time of the
14184 last user login when a user logs in interactively.
14185
14186 @item @code{subsystems} (default: @code{'(("sftp" "internal-sftp"))})
14187 Configures external subsystems (e.g.@: file transfer daemon).
14188
14189 This is a list of two-element lists, each of which containing the
14190 subsystem name and a command (with optional arguments) to execute upon
14191 subsystem request.
14192
14193 The command @command{internal-sftp} implements an in-process SFTP
14194 server. Alternately, one can specify the @command{sftp-server} command:
14195 @lisp
14196 (service openssh-service-type
14197 (openssh-configuration
14198 (subsystems
14199 `(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))
14200 @end lisp
14201
14202 @item @code{accepted-environment} (default: @code{'()})
14203 List of strings describing which environment variables may be exported.
14204
14205 Each string gets on its own line. See the @code{AcceptEnv} option in
14206 @code{man sshd_config}.
14207
14208 This example allows ssh-clients to export the @code{COLORTERM} variable.
14209 It is set by terminal emulators, which support colors. You can use it in
14210 your shell's resource file to enable colors for the prompt and commands
14211 if this variable is set.
14212
14213 @lisp
14214 (service openssh-service-type
14215 (openssh-configuration
14216 (accepted-environment '("COLORTERM"))))
14217 @end lisp
14218
14219 @item @code{authorized-keys} (default: @code{'()})
14220 @cindex authorized keys, SSH
14221 @cindex SSH authorized keys
14222 This is the list of authorized keys. Each element of the list is a user
14223 name followed by one or more file-like objects that represent SSH public
14224 keys. For example:
14225
14226 @lisp
14227 (openssh-configuration
14228 (authorized-keys
14229 `(("rekado" ,(local-file "rekado.pub"))
14230 ("chris" ,(local-file "chris.pub"))
14231 ("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))
14232 @end lisp
14233
14234 @noindent
14235 registers the specified public keys for user accounts @code{rekado},
14236 @code{chris}, and @code{root}.
14237
14238 Additional authorized keys can be specified @i{via}
14239 @code{service-extension}.
14240
14241 Note that this does @emph{not} interfere with the use of
14242 @file{~/.ssh/authorized_keys}.
14243
14244 @item @code{log-level} (default: @code{'info})
14245 This is a symbol specifying the logging level: @code{quiet}, @code{fatal},
14246 @code{error}, @code{info}, @code{verbose}, @code{debug}, etc. See the man
14247 page for @file{sshd_config} for the full list of level names.
14248
14249 @item @code{extra-content} (default: @code{""})
14250 This field can be used to append arbitrary text to the configuration file. It
14251 is especially useful for elaborate configurations that cannot be expressed
14252 otherwise. This configuration, for example, would generally disable root
14253 logins, but permit them from one specific IP address:
14254
14255 @lisp
14256 (openssh-configuration
14257 (extra-content "\
14258 Match Address 192.168.0.1
14259 PermitRootLogin yes"))
14260 @end lisp
14261
14262 @end table
14263 @end deftp
14264
14265 @deffn {Scheme Procedure} dropbear-service [@var{config}]
14266 Run the @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,Dropbear SSH
14267 daemon} with the given @var{config}, a @code{<dropbear-configuration>}
14268 object.
14269
14270 For example, to specify a Dropbear service listening on port 1234, add
14271 this call to the operating system's @code{services} field:
14272
14273 @lisp
14274 (dropbear-service (dropbear-configuration
14275 (port-number 1234)))
14276 @end lisp
14277 @end deffn
14278
14279 @deftp {Data Type} dropbear-configuration
14280 This data type represents the configuration of a Dropbear SSH daemon.
14281
14282 @table @asis
14283 @item @code{dropbear} (default: @var{dropbear})
14284 The Dropbear package to use.
14285
14286 @item @code{port-number} (default: 22)
14287 The TCP port where the daemon waits for incoming connections.
14288
14289 @item @code{syslog-output?} (default: @code{#t})
14290 Whether to enable syslog output.
14291
14292 @item @code{pid-file} (default: @code{"/var/run/dropbear.pid"})
14293 File name of the daemon's PID file.
14294
14295 @item @code{root-login?} (default: @code{#f})
14296 Whether to allow @code{root} logins.
14297
14298 @item @code{allow-empty-passwords?} (default: @code{#f})
14299 Whether to allow empty passwords.
14300
14301 @item @code{password-authentication?} (default: @code{#t})
14302 Whether to enable password-based authentication.
14303 @end table
14304 @end deftp
14305
14306 @defvr {Scheme Variable} %facebook-host-aliases
14307 This variable contains a string for use in @file{/etc/hosts}
14308 (@pxref{Host Names,,, libc, The GNU C Library Reference Manual}). Each
14309 line contains a entry that maps a known server name of the Facebook
14310 on-line service---e.g., @code{www.facebook.com}---to the local
14311 host---@code{127.0.0.1} or its IPv6 equivalent, @code{::1}.
14312
14313 This variable is typically used in the @code{hosts-file} field of an
14314 @code{operating-system} declaration (@pxref{operating-system Reference,
14315 @file{/etc/hosts}}):
14316
14317 @lisp
14318 (use-modules (gnu) (guix))
14319
14320 (operating-system
14321 (host-name "mymachine")
14322 ;; ...
14323 (hosts-file
14324 ;; Create a /etc/hosts file with aliases for "localhost"
14325 ;; and "mymachine", as well as for Facebook servers.
14326 (plain-file "hosts"
14327 (string-append (local-host-aliases host-name)
14328 %facebook-host-aliases))))
14329 @end lisp
14330
14331 This mechanism can prevent programs running locally, such as Web
14332 browsers, from accessing Facebook.
14333 @end defvr
14334
14335 The @code{(gnu services avahi)} provides the following definition.
14336
14337 @defvr {Scheme Variable} avahi-service-type
14338 This is the service that runs @command{avahi-daemon}, a system-wide
14339 mDNS/DNS-SD responder that allows for service discovery and
14340 ``zero-configuration'' host name lookups (see @uref{https://avahi.org/}).
14341 Its value must be a @code{zero-configuration} record---see below.
14342
14343 This service extends the name service cache daemon (nscd) so that it can
14344 resolve @code{.local} host names using
14345 @uref{https://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. @xref{Name
14346 Service Switch}, for information on host name resolution.
14347
14348 Additionally, add the @var{avahi} package to the system profile so that
14349 commands such as @command{avahi-browse} are directly usable.
14350 @end defvr
14351
14352 @deftp {Data Type} avahi-configuration
14353 Data type representation the configuration for Avahi.
14354
14355 @table @asis
14356
14357 @item @code{host-name} (default: @code{#f})
14358 If different from @code{#f}, use that as the host name to
14359 publish for this machine; otherwise, use the machine's actual host name.
14360
14361 @item @code{publish?} (default: @code{#t})
14362 When true, allow host names and services to be published (broadcast) over the
14363 network.
14364
14365 @item @code{publish-workstation?} (default: @code{#t})
14366 When true, @command{avahi-daemon} publishes the machine's host name and IP
14367 address via mDNS on the local network. To view the host names published on
14368 your local network, you can run:
14369
14370 @example
14371 avahi-browse _workstation._tcp
14372 @end example
14373
14374 @item @code{wide-area?} (default: @code{#f})
14375 When true, DNS-SD over unicast DNS is enabled.
14376
14377 @item @code{ipv4?} (default: @code{#t})
14378 @itemx @code{ipv6?} (default: @code{#t})
14379 These fields determine whether to use IPv4/IPv6 sockets.
14380
14381 @item @code{domains-to-browse} (default: @code{'()})
14382 This is a list of domains to browse.
14383 @end table
14384 @end deftp
14385
14386 @deffn {Scheme Variable} openvswitch-service-type
14387 This is the type of the @uref{https://www.openvswitch.org, Open vSwitch}
14388 service, whose value should be an @code{openvswitch-configuration}
14389 object.
14390 @end deffn
14391
14392 @deftp {Data Type} openvswitch-configuration
14393 Data type representing the configuration of Open vSwitch, a multilayer
14394 virtual switch which is designed to enable massive network automation
14395 through programmatic extension.
14396
14397 @table @asis
14398 @item @code{package} (default: @var{openvswitch})
14399 Package object of the Open vSwitch.
14400
14401 @end table
14402 @end deftp
14403
14404 @defvr {Scheme Variable} pagekite-service-type
14405 This is the service type for the @uref{https://pagekite.net, PageKite} service,
14406 a tunneling solution for making localhost servers publicly visible, even from
14407 behind restrictive firewalls or NAT without forwarded ports. The value for
14408 this service type is a @code{pagekite-configuration} record.
14409
14410 Here's an example exposing the local HTTP and SSH daemons:
14411
14412 @lisp
14413 (service pagekite-service-type
14414 (pagekite-configuration
14415 (kites '("http:@@kitename:localhost:80:@@kitesecret"
14416 "raw/22:@@kitename:localhost:22:@@kitesecret"))
14417 (extra-file "/etc/pagekite.rc")))
14418 @end lisp
14419 @end defvr
14420
14421 @deftp {Data Type} pagekite-configuration
14422 Data type representing the configuration of PageKite.
14423
14424 @table @asis
14425 @item @code{package} (default: @var{pagekite})
14426 Package object of PageKite.
14427
14428 @item @code{kitename} (default: @code{#f})
14429 PageKite name for authenticating to the frontend server.
14430
14431 @item @code{kitesecret} (default: @code{#f})
14432 Shared secret for authenticating to the frontend server. You should probably
14433 put this inside @code{extra-file} instead.
14434
14435 @item @code{frontend} (default: @code{#f})
14436 Connect to the named PageKite frontend server instead of the
14437 @uref{https://pagekite.net,,pagekite.net} service.
14438
14439 @item @code{kites} (default: @code{'("http:@@kitename:localhost:80:@@kitesecret")})
14440 List of service kites to use. Exposes HTTP on port 80 by default. The format
14441 is @code{proto:kitename:host:port:secret}.
14442
14443 @item @code{extra-file} (default: @code{#f})
14444 Extra configuration file to read, which you are expected to create manually.
14445 Use this to add additional options and manage shared secrets out-of-band.
14446
14447 @end table
14448 @end deftp
14449
14450 @node X Window
14451 @subsection X Window
14452
14453 @cindex X11
14454 @cindex X Window System
14455 @cindex login manager
14456 Support for the X Window graphical display system---specifically
14457 Xorg---is provided by the @code{(gnu services xorg)} module. Note that
14458 there is no @code{xorg-service} procedure. Instead, the X server is
14459 started by the @dfn{login manager}, by default the GNOME Display Manager (GDM).
14460
14461 @cindex GDM
14462 @cindex GNOME, login manager
14463 GDM of course allows users to log in into window managers and desktop
14464 environments other than GNOME; for those using GNOME, GDM is required for
14465 features such as automatic screen locking.
14466
14467 @cindex window manager
14468 To use X11, you must install at least one @dfn{window manager}---for
14469 example the @code{windowmaker} or @code{openbox} packages---preferably
14470 by adding it to the @code{packages} field of your operating system
14471 definition (@pxref{operating-system Reference, system-wide packages}).
14472
14473 @defvr {Scheme Variable} gdm-service-type
14474 This is the type for the @uref{https://wiki.gnome.org/Projects/GDM/, GNOME
14475 Desktop Manager} (GDM), a program that manages graphical display servers and
14476 handles graphical user logins. Its value must be a @code{gdm-configuration}
14477 (see below.)
14478
14479 @cindex session types (X11)
14480 @cindex X11 session types
14481 GDM looks for @dfn{session types} described by the @file{.desktop} files in
14482 @file{/run/current-system/profile/share/xsessions} and allows users to choose
14483 a session from the log-in screen. Packages such as @code{gnome}, @code{xfce},
14484 and @code{i3} provide @file{.desktop} files; adding them to the system-wide
14485 set of packages automatically makes them available at the log-in screen.
14486
14487 In addition, @file{~/.xsession} files are honored. When available,
14488 @file{~/.xsession} must be an executable that starts a window manager
14489 and/or other X clients.
14490 @end defvr
14491
14492 @deftp {Data Type} gdm-configuration
14493 @table @asis
14494 @item @code{auto-login?} (default: @code{#f})
14495 @itemx @code{default-user} (default: @code{#f})
14496 When @code{auto-login?} is false, GDM presents a log-in screen.
14497
14498 When @code{auto-login?} is true, GDM logs in directly as
14499 @code{default-user}.
14500
14501 @item @code{debug?} (default: @code{#f})
14502 When true, GDM writes debug messages to its log.
14503
14504 @item @code{gnome-shell-assets} (default: ...)
14505 List of GNOME Shell assets needed by GDM: icon theme, fonts, etc.
14506
14507 @item @code{xorg-configuration} (default: @code{(xorg-configuration)})
14508 Configuration of the Xorg graphical server.
14509
14510 @item @code{xsession} (default: @code{(xinitrc)})
14511 Script to run before starting a X session.
14512
14513 @item @code{dbus-daemon} (default: @code{dbus-daemon-wrapper})
14514 File name of the @code{dbus-daemon} executable.
14515
14516 @item @code{gdm} (default: @code{gdm})
14517 The GDM package to use.
14518 @end table
14519 @end deftp
14520
14521 @defvr {Scheme Variable} slim-service-type
14522 This is the type for the SLiM graphical login manager for X11.
14523
14524 Like GDM, SLiM looks for session types described by @file{.desktop} files and
14525 allows users to choose a session from the log-in screen using @kbd{F1}. It
14526 also honors @file{~/.xsession} files.
14527
14528 Unlike GDM, SLiM does not spawn the user session on a different VT after
14529 logging in, which means that you can only start one graphical session. If you
14530 want to be able to run multiple graphical sessions at the same time you have
14531 to add multiple SLiM services to your system services. The following example
14532 shows how to replace the default GDM service with two SLiM services on tty7
14533 and tty8.
14534
14535 @lisp
14536 (use-modules (gnu services)
14537 (gnu services desktop)
14538 (gnu services xorg)
14539 (srfi srfi-1)) ;for 'remove'
14540
14541 (operating-system
14542 ;; ...
14543 (services (cons* (service slim-service-type (slim-configuration
14544 (display ":0")
14545 (vt "vt7")))
14546 (service slim-service-type (slim-configuration
14547 (display ":1")
14548 (vt "vt8")))
14549 (remove (lambda (service)
14550 (eq? (service-kind service) gdm-service-type))
14551 %desktop-services))))
14552 @end lisp
14553
14554 @end defvr
14555
14556 @deftp {Data Type} slim-configuration
14557 Data type representing the configuration of @code{slim-service-type}.
14558
14559 @table @asis
14560 @item @code{allow-empty-passwords?} (default: @code{#t})
14561 Whether to allow logins with empty passwords.
14562
14563 @item @code{auto-login?} (default: @code{#f})
14564 @itemx @code{default-user} (default: @code{""})
14565 When @code{auto-login?} is false, SLiM presents a log-in screen.
14566
14567 When @code{auto-login?} is true, SLiM logs in directly as
14568 @code{default-user}.
14569
14570 @item @code{theme} (default: @code{%default-slim-theme})
14571 @itemx @code{theme-name} (default: @code{%default-slim-theme-name})
14572 The graphical theme to use and its name.
14573
14574 @item @code{auto-login-session} (default: @code{#f})
14575 If true, this must be the name of the executable to start as the default
14576 session---e.g., @code{(file-append windowmaker "/bin/windowmaker")}.
14577
14578 If false, a session described by one of the available @file{.desktop}
14579 files in @code{/run/current-system/profile} and @code{~/.guix-profile}
14580 will be used.
14581
14582 @quotation Note
14583 You must install at least one window manager in the system profile or in
14584 your user profile. Failing to do that, if @code{auto-login-session} is
14585 false, you will be unable to log in.
14586 @end quotation
14587
14588 @item @code{xorg-configuration} (default @code{(xorg-configuration)})
14589 Configuration of the Xorg graphical server.
14590
14591 @item @code{display} (default @code{":0"})
14592 The display on which to start the Xorg graphical server.
14593
14594 @item @code{vt} (default @code{"vt7"})
14595 The VT on which to start the Xorg graphical server.
14596
14597 @item @code{xauth} (default: @code{xauth})
14598 The XAuth package to use.
14599
14600 @item @code{shepherd} (default: @code{shepherd})
14601 The Shepherd package used when invoking @command{halt} and
14602 @command{reboot}.
14603
14604 @item @code{sessreg} (default: @code{sessreg})
14605 The sessreg package used in order to register the session.
14606
14607 @item @code{slim} (default: @code{slim})
14608 The SLiM package to use.
14609 @end table
14610 @end deftp
14611
14612 @defvr {Scheme Variable} %default-theme
14613 @defvrx {Scheme Variable} %default-theme-name
14614 The default SLiM theme and its name.
14615 @end defvr
14616
14617
14618 @deftp {Data Type} sddm-configuration
14619 This is the data type representing the sddm service configuration.
14620
14621 @table @asis
14622 @item @code{display-server} (default: "x11")
14623 Select display server to use for the greeter. Valid values are "x11"
14624 or "wayland".
14625
14626 @item @code{numlock} (default: "on")
14627 Valid values are "on", "off" or "none".
14628
14629 @item @code{halt-command} (default @code{#~(string-apppend #$shepherd "/sbin/halt")})
14630 Command to run when halting.
14631
14632 @item @code{reboot-command} (default @code{#~(string-append #$shepherd "/sbin/reboot")})
14633 Command to run when rebooting.
14634
14635 @item @code{theme} (default "maldives")
14636 Theme to use. Default themes provided by SDDM are "elarun", "maldives" or "maya".
14637
14638 @item @code{themes-directory} (default "/run/current-system/profile/share/sddm/themes")
14639 Directory to look for themes.
14640
14641 @item @code{faces-directory} (default "/run/current-system/profile/share/sddm/faces")
14642 Directory to look for faces.
14643
14644 @item @code{default-path} (default "/run/current-system/profile/bin")
14645 Default PATH to use.
14646
14647 @item @code{minimum-uid} (default: 1000)
14648 Minimum UID displayed in SDDM and allowed for log-in.
14649
14650 @item @code{maximum-uid} (default: 2000)
14651 Maximum UID to display in SDDM.
14652
14653 @item @code{remember-last-user?} (default #t)
14654 Remember last user.
14655
14656 @item @code{remember-last-session?} (default #t)
14657 Remember last session.
14658
14659 @item @code{hide-users} (default "")
14660 Usernames to hide from SDDM greeter.
14661
14662 @item @code{hide-shells} (default @code{#~(string-append #$shadow "/sbin/nologin")})
14663 Users with shells listed will be hidden from the SDDM greeter.
14664
14665 @item @code{session-command} (default @code{#~(string-append #$sddm "/share/sddm/scripts/wayland-session")})
14666 Script to run before starting a wayland session.
14667
14668 @item @code{sessions-directory} (default "/run/current-system/profile/share/wayland-sessions")
14669 Directory to look for desktop files starting wayland sessions.
14670
14671 @item @code{xorg-configuration} (default @code{(xorg-configuration)})
14672 Configuration of the Xorg graphical server.
14673
14674 @item @code{xauth-path} (default @code{#~(string-append #$xauth "/bin/xauth")})
14675 Path to xauth.
14676
14677 @item @code{xephyr-path} (default @code{#~(string-append #$xorg-server "/bin/Xephyr")})
14678 Path to Xephyr.
14679
14680 @item @code{xdisplay-start} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xsetup")})
14681 Script to run after starting xorg-server.
14682
14683 @item @code{xdisplay-stop} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xstop")})
14684 Script to run before stopping xorg-server.
14685
14686 @item @code{xsession-command} (default: @code{xinitrc})
14687 Script to run before starting a X session.
14688
14689 @item @code{xsessions-directory} (default: "/run/current-system/profile/share/xsessions")
14690 Directory to look for desktop files starting X sessions.
14691
14692 @item @code{minimum-vt} (default: 7)
14693 Minimum VT to use.
14694
14695 @item @code{auto-login-user} (default "")
14696 User to use for auto-login.
14697
14698 @item @code{auto-login-session} (default "")
14699 Desktop file to use for auto-login.
14700
14701 @item @code{relogin?} (default #f)
14702 Relogin after logout.
14703
14704 @end table
14705 @end deftp
14706
14707 @cindex login manager
14708 @cindex X11 login
14709 @defvr {Scheme Variable} sddm-service-type
14710 This is the type of the service to run the
14711 @uref{https://github.com/sddm/sddm,SDDM display manager}. Its value
14712 must be a @code{sddm-configuration} record (see below).
14713
14714 Here's an example use:
14715
14716 @lisp
14717 (service sddm-service-type
14718 (sddm-configuration
14719 (auto-login-user "alice")
14720 (auto-login-session "xfce.desktop")))
14721 @end lisp
14722 @end defvr
14723
14724 @deftp {Data Type} sddm-configuration
14725 This data type represents the configuration of the SDDM login manager.
14726 The available fields are:
14727
14728 @table @asis
14729 @item @code{sddm} (default: @code{sddm})
14730 The SDDM package to use.
14731
14732 @item @code{display-server} (default: @code{"x11"})
14733 This must be either @code{"x11"} or @code{"wayland"}.
14734
14735 @c FIXME: Add more fields.
14736
14737 @item @code{auto-login-user} (default: @code{""})
14738 If non-empty, this is the user account under which to log in
14739 automatically.
14740
14741 @item @code{auto-login-session} (default: @code{""})
14742 If non-empty, this is the @file{.desktop} file name to use as the
14743 auto-login session.
14744 @end table
14745 @end deftp
14746
14747 @cindex Xorg, configuration
14748 @deftp {Data Type} xorg-configuration
14749 This data type represents the configuration of the Xorg graphical display
14750 server. Note that there is not Xorg service; instead, the X server is started
14751 by a ``display manager'' such as GDM, SDDM, and SLiM. Thus, the configuration
14752 of these display managers aggregates an @code{xorg-configuration} record.
14753
14754 @table @asis
14755 @item @code{modules} (default: @code{%default-xorg-modules})
14756 This is a list of @dfn{module packages} loaded by the Xorg
14757 server---e.g., @code{xf86-video-vesa}, @code{xf86-input-keyboard}, and so on.
14758
14759 @item @code{fonts} (default: @code{%default-xorg-fonts})
14760 This is a list of font directories to add to the server's @dfn{font path}.
14761
14762 @item @code{drivers} (default: @code{'()})
14763 This must be either the empty list, in which case Xorg chooses a graphics
14764 driver automatically, or a list of driver names that will be tried in this
14765 order---e.g., @code{("modesetting" "vesa")}.
14766
14767 @item @code{resolutions} (default: @code{'()})
14768 When @code{resolutions} is the empty list, Xorg chooses an appropriate screen
14769 resolution. Otherwise, it must be a list of resolutions---e.g., @code{((1024
14770 768) (640 480))}.
14771
14772 @cindex keyboard layout, for Xorg
14773 @cindex keymap, for Xorg
14774 @item @code{keyboard-layout} (default: @code{#f})
14775 If this is @code{#f}, Xorg uses the default keyboard layout---usually US
14776 English (``qwerty'') for a 105-key PC keyboard.
14777
14778 Otherwise this must be a @code{keyboard-layout} object specifying the keyboard
14779 layout in use when Xorg is running. @xref{Keyboard Layout}, for more
14780 information on how to specify the keyboard layout.
14781
14782 @item @code{extra-config} (default: @code{'()})
14783 This is a list of strings or objects appended to the configuration file. It
14784 is used to pass extra text to be added verbatim to the configuration file.
14785
14786 @item @code{server} (default: @code{xorg-server})
14787 This is the package providing the Xorg server.
14788
14789 @item @code{server-arguments} (default: @code{%default-xorg-server-arguments})
14790 This is the list of command-line arguments to pass to the X server. The
14791 default is @code{-nolisten tcp}.
14792 @end table
14793 @end deftp
14794
14795 @deffn {Scheme Procedure} set-xorg-configuration @var{config} @
14796 [@var{login-manager-service-type}]
14797 Tell the log-in manager (of type @var{login-manager-service-type}) to use
14798 @var{config}, an @code{<xorg-configuration>} record.
14799
14800 Since the Xorg configuration is embedded in the log-in manager's
14801 configuration---e.g., @code{gdm-configuration}---this procedure provides a
14802 shorthand to set the Xorg configuration.
14803 @end deffn
14804
14805 @deffn {Scheme Procedure} xorg-start-command [@var{config}]
14806 Return a @code{startx} script in which the modules, fonts, etc. specified
14807 in @var{config}, are available. The result should be used in place of
14808 @code{startx}.
14809
14810 Usually the X server is started by a login manager.
14811 @end deffn
14812
14813
14814 @deffn {Scheme Procedure} screen-locker-service @var{package} [@var{program}]
14815 Add @var{package}, a package for a screen locker or screen saver whose
14816 command is @var{program}, to the set of setuid programs and add a PAM entry
14817 for it. For example:
14818
14819 @lisp
14820 (screen-locker-service xlockmore "xlock")
14821 @end lisp
14822
14823 makes the good ol' XlockMore usable.
14824 @end deffn
14825
14826
14827 @node Printing Services
14828 @subsection Printing Services
14829
14830 @cindex printer support with CUPS
14831 The @code{(gnu services cups)} module provides a Guix service definition
14832 for the CUPS printing service. To add printer support to a Guix
14833 system, add a @code{cups-service} to the operating system definition:
14834
14835 @deffn {Scheme Variable} cups-service-type
14836 The service type for the CUPS print server. Its value should be a valid
14837 CUPS configuration (see below). To use the default settings, simply
14838 write:
14839 @lisp
14840 (service cups-service-type)
14841 @end lisp
14842 @end deffn
14843
14844 The CUPS configuration controls the basic things about your CUPS
14845 installation: what interfaces it listens on, what to do if a print job
14846 fails, how much logging to do, and so on. To actually add a printer,
14847 you have to visit the @url{http://localhost:631} URL, or use a tool such
14848 as GNOME's printer configuration services. By default, configuring a
14849 CUPS service will generate a self-signed certificate if needed, for
14850 secure connections to the print server.
14851
14852 Suppose you want to enable the Web interface of CUPS and also add
14853 support for Epson printers @i{via} the @code{escpr} package and for HP
14854 printers @i{via} the @code{hplip-minimal} package. You can do that directly,
14855 like this (you need to use the @code{(gnu packages cups)} module):
14856
14857 @lisp
14858 (service cups-service-type
14859 (cups-configuration
14860 (web-interface? #t)
14861 (extensions
14862 (list cups-filters escpr hplip-minimal))))
14863 @end lisp
14864
14865 Note: If you wish to use the Qt5 based GUI which comes with the hplip
14866 package then it is suggested that you install the @code{hplip} package,
14867 either in your OS configuration file or as your user.
14868
14869 The available configuration parameters follow. Each parameter
14870 definition is preceded by its type; for example, @samp{string-list foo}
14871 indicates that the @code{foo} parameter should be specified as a list of
14872 strings. There is also a way to specify the configuration as a string,
14873 if you have an old @code{cupsd.conf} file that you want to port over
14874 from some other system; see the end for more details.
14875
14876 @c The following documentation was initially generated by
14877 @c (generate-documentation) in (gnu services cups). Manually maintained
14878 @c documentation is better, so we shouldn't hesitate to edit below as
14879 @c needed. However if the change you want to make to this documentation
14880 @c can be done in an automated way, it's probably easier to change
14881 @c (generate-documentation) than to make it below and have to deal with
14882 @c the churn as CUPS updates.
14883
14884
14885 Available @code{cups-configuration} fields are:
14886
14887 @deftypevr {@code{cups-configuration} parameter} package cups
14888 The CUPS package.
14889 @end deftypevr
14890
14891 @deftypevr {@code{cups-configuration} parameter} package-list extensions
14892 Drivers and other extensions to the CUPS package.
14893 @end deftypevr
14894
14895 @deftypevr {@code{cups-configuration} parameter} files-configuration files-configuration
14896 Configuration of where to write logs, what directories to use for print
14897 spools, and related privileged configuration parameters.
14898
14899 Available @code{files-configuration} fields are:
14900
14901 @deftypevr {@code{files-configuration} parameter} log-location access-log
14902 Defines the access log filename. Specifying a blank filename disables
14903 access log generation. The value @code{stderr} causes log entries to be
14904 sent to the standard error file when the scheduler is running in the
14905 foreground, or to the system log daemon when run in the background. The
14906 value @code{syslog} causes log entries to be sent to the system log
14907 daemon. The server name may be included in filenames using the string
14908 @code{%s}, as in @code{/var/log/cups/%s-access_log}.
14909
14910 Defaults to @samp{"/var/log/cups/access_log"}.
14911 @end deftypevr
14912
14913 @deftypevr {@code{files-configuration} parameter} file-name cache-dir
14914 Where CUPS should cache data.
14915
14916 Defaults to @samp{"/var/cache/cups"}.
14917 @end deftypevr
14918
14919 @deftypevr {@code{files-configuration} parameter} string config-file-perm
14920 Specifies the permissions for all configuration files that the scheduler
14921 writes.
14922
14923 Note that the permissions for the printers.conf file are currently
14924 masked to only allow access from the scheduler user (typically root).
14925 This is done because printer device URIs sometimes contain sensitive
14926 authentication information that should not be generally known on the
14927 system. There is no way to disable this security feature.
14928
14929 Defaults to @samp{"0640"}.
14930 @end deftypevr
14931
14932 @deftypevr {@code{files-configuration} parameter} log-location error-log
14933 Defines the error log filename. Specifying a blank filename disables
14934 error log generation. The value @code{stderr} causes log entries to be
14935 sent to the standard error file when the scheduler is running in the
14936 foreground, or to the system log daemon when run in the background. The
14937 value @code{syslog} causes log entries to be sent to the system log
14938 daemon. The server name may be included in filenames using the string
14939 @code{%s}, as in @code{/var/log/cups/%s-error_log}.
14940
14941 Defaults to @samp{"/var/log/cups/error_log"}.
14942 @end deftypevr
14943
14944 @deftypevr {@code{files-configuration} parameter} string fatal-errors
14945 Specifies which errors are fatal, causing the scheduler to exit. The
14946 kind strings are:
14947
14948 @table @code
14949 @item none
14950 No errors are fatal.
14951
14952 @item all
14953 All of the errors below are fatal.
14954
14955 @item browse
14956 Browsing initialization errors are fatal, for example failed connections
14957 to the DNS-SD daemon.
14958
14959 @item config
14960 Configuration file syntax errors are fatal.
14961
14962 @item listen
14963 Listen or Port errors are fatal, except for IPv6 failures on the
14964 loopback or @code{any} addresses.
14965
14966 @item log
14967 Log file creation or write errors are fatal.
14968
14969 @item permissions
14970 Bad startup file permissions are fatal, for example shared TLS
14971 certificate and key files with world-read permissions.
14972 @end table
14973
14974 Defaults to @samp{"all -browse"}.
14975 @end deftypevr
14976
14977 @deftypevr {@code{files-configuration} parameter} boolean file-device?
14978 Specifies whether the file pseudo-device can be used for new printer
14979 queues. The URI @uref{file:///dev/null} is always allowed.
14980
14981 Defaults to @samp{#f}.
14982 @end deftypevr
14983
14984 @deftypevr {@code{files-configuration} parameter} string group
14985 Specifies the group name or ID that will be used when executing external
14986 programs.
14987
14988 Defaults to @samp{"lp"}.
14989 @end deftypevr
14990
14991 @deftypevr {@code{files-configuration} parameter} string log-file-perm
14992 Specifies the permissions for all log files that the scheduler writes.
14993
14994 Defaults to @samp{"0644"}.
14995 @end deftypevr
14996
14997 @deftypevr {@code{files-configuration} parameter} log-location page-log
14998 Defines the page log filename. Specifying a blank filename disables
14999 page log generation. The value @code{stderr} causes log entries to be
15000 sent to the standard error file when the scheduler is running in the
15001 foreground, or to the system log daemon when run in the background. The
15002 value @code{syslog} causes log entries to be sent to the system log
15003 daemon. The server name may be included in filenames using the string
15004 @code{%s}, as in @code{/var/log/cups/%s-page_log}.
15005
15006 Defaults to @samp{"/var/log/cups/page_log"}.
15007 @end deftypevr
15008
15009 @deftypevr {@code{files-configuration} parameter} string remote-root
15010 Specifies the username that is associated with unauthenticated accesses
15011 by clients claiming to be the root user. The default is @code{remroot}.
15012
15013 Defaults to @samp{"remroot"}.
15014 @end deftypevr
15015
15016 @deftypevr {@code{files-configuration} parameter} file-name request-root
15017 Specifies the directory that contains print jobs and other HTTP request
15018 data.
15019
15020 Defaults to @samp{"/var/spool/cups"}.
15021 @end deftypevr
15022
15023 @deftypevr {@code{files-configuration} parameter} sandboxing sandboxing
15024 Specifies the level of security sandboxing that is applied to print
15025 filters, backends, and other child processes of the scheduler; either
15026 @code{relaxed} or @code{strict}. This directive is currently only
15027 used/supported on macOS.
15028
15029 Defaults to @samp{strict}.
15030 @end deftypevr
15031
15032 @deftypevr {@code{files-configuration} parameter} file-name server-keychain
15033 Specifies the location of TLS certificates and private keys. CUPS will
15034 look for public and private keys in this directory: a @code{.crt} files
15035 for PEM-encoded certificates and corresponding @code{.key} files for
15036 PEM-encoded private keys.
15037
15038 Defaults to @samp{"/etc/cups/ssl"}.
15039 @end deftypevr
15040
15041 @deftypevr {@code{files-configuration} parameter} file-name server-root
15042 Specifies the directory containing the server configuration files.
15043
15044 Defaults to @samp{"/etc/cups"}.
15045 @end deftypevr
15046
15047 @deftypevr {@code{files-configuration} parameter} boolean sync-on-close?
15048 Specifies whether the scheduler calls fsync(2) after writing
15049 configuration or state files.
15050
15051 Defaults to @samp{#f}.
15052 @end deftypevr
15053
15054 @deftypevr {@code{files-configuration} parameter} space-separated-string-list system-group
15055 Specifies the group(s) to use for @code{@@SYSTEM} group authentication.
15056 @end deftypevr
15057
15058 @deftypevr {@code{files-configuration} parameter} file-name temp-dir
15059 Specifies the directory where temporary files are stored.
15060
15061 Defaults to @samp{"/var/spool/cups/tmp"}.
15062 @end deftypevr
15063
15064 @deftypevr {@code{files-configuration} parameter} string user
15065 Specifies the user name or ID that is used when running external
15066 programs.
15067
15068 Defaults to @samp{"lp"}.
15069 @end deftypevr
15070
15071 @deftypevr {@code{files-configuration} parameter} string set-env
15072 Set the specified environment variable to be passed to child processes.
15073
15074 Defaults to @samp{"variable value"}.
15075 @end deftypevr
15076 @end deftypevr
15077
15078 @deftypevr {@code{cups-configuration} parameter} access-log-level access-log-level
15079 Specifies the logging level for the AccessLog file. The @code{config}
15080 level logs when printers and classes are added, deleted, or modified and
15081 when configuration files are accessed or updated. The @code{actions}
15082 level logs when print jobs are submitted, held, released, modified, or
15083 canceled, and any of the conditions for @code{config}. The @code{all}
15084 level logs all requests.
15085
15086 Defaults to @samp{actions}.
15087 @end deftypevr
15088
15089 @deftypevr {@code{cups-configuration} parameter} boolean auto-purge-jobs?
15090 Specifies whether to purge job history data automatically when it is no
15091 longer required for quotas.
15092
15093 Defaults to @samp{#f}.
15094 @end deftypevr
15095
15096 @deftypevr {@code{cups-configuration} parameter} comma-separated-string-list browse-dns-sd-sub-types
15097 Specifies a list of DNS-SD sub-types to advertise for each shared printer.
15098 For example, @samp{"_cups" "_print"} will tell network clients that both
15099 CUPS sharing and IPP Everywhere are supported.
15100
15101 Defaults to @samp{"_cups"}.
15102 @end deftypevr
15103
15104 @deftypevr {@code{cups-configuration} parameter} browse-local-protocols browse-local-protocols
15105 Specifies which protocols to use for local printer sharing.
15106
15107 Defaults to @samp{dnssd}.
15108 @end deftypevr
15109
15110 @deftypevr {@code{cups-configuration} parameter} boolean browse-web-if?
15111 Specifies whether the CUPS web interface is advertised.
15112
15113 Defaults to @samp{#f}.
15114 @end deftypevr
15115
15116 @deftypevr {@code{cups-configuration} parameter} boolean browsing?
15117 Specifies whether shared printers are advertised.
15118
15119 Defaults to @samp{#f}.
15120 @end deftypevr
15121
15122 @deftypevr {@code{cups-configuration} parameter} string classification
15123 Specifies the security classification of the server. Any valid banner
15124 name can be used, including "classified", "confidential", "secret",
15125 "topsecret", and "unclassified", or the banner can be omitted to disable
15126 secure printing functions.
15127
15128 Defaults to @samp{""}.
15129 @end deftypevr
15130
15131 @deftypevr {@code{cups-configuration} parameter} boolean classify-override?
15132 Specifies whether users may override the classification (cover page) of
15133 individual print jobs using the @code{job-sheets} option.
15134
15135 Defaults to @samp{#f}.
15136 @end deftypevr
15137
15138 @deftypevr {@code{cups-configuration} parameter} default-auth-type default-auth-type
15139 Specifies the default type of authentication to use.
15140
15141 Defaults to @samp{Basic}.
15142 @end deftypevr
15143
15144 @deftypevr {@code{cups-configuration} parameter} default-encryption default-encryption
15145 Specifies whether encryption will be used for authenticated requests.
15146
15147 Defaults to @samp{Required}.
15148 @end deftypevr
15149
15150 @deftypevr {@code{cups-configuration} parameter} string default-language
15151 Specifies the default language to use for text and web content.
15152
15153 Defaults to @samp{"en"}.
15154 @end deftypevr
15155
15156 @deftypevr {@code{cups-configuration} parameter} string default-paper-size
15157 Specifies the default paper size for new print queues. @samp{"Auto"}
15158 uses a locale-specific default, while @samp{"None"} specifies there is
15159 no default paper size. Specific size names are typically
15160 @samp{"Letter"} or @samp{"A4"}.
15161
15162 Defaults to @samp{"Auto"}.
15163 @end deftypevr
15164
15165 @deftypevr {@code{cups-configuration} parameter} string default-policy
15166 Specifies the default access policy to use.
15167
15168 Defaults to @samp{"default"}.
15169 @end deftypevr
15170
15171 @deftypevr {@code{cups-configuration} parameter} boolean default-shared?
15172 Specifies whether local printers are shared by default.
15173
15174 Defaults to @samp{#t}.
15175 @end deftypevr
15176
15177 @deftypevr {@code{cups-configuration} parameter} non-negative-integer dirty-clean-interval
15178 Specifies the delay for updating of configuration and state files, in
15179 seconds. A value of 0 causes the update to happen as soon as possible,
15180 typically within a few milliseconds.
15181
15182 Defaults to @samp{30}.
15183 @end deftypevr
15184
15185 @deftypevr {@code{cups-configuration} parameter} error-policy error-policy
15186 Specifies what to do when an error occurs. Possible values are
15187 @code{abort-job}, which will discard the failed print job;
15188 @code{retry-job}, which will retry the job at a later time;
15189 @code{retry-current-job}, which retries the failed job immediately; and
15190 @code{stop-printer}, which stops the printer.
15191
15192 Defaults to @samp{stop-printer}.
15193 @end deftypevr
15194
15195 @deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-limit
15196 Specifies the maximum cost of filters that are run concurrently, which
15197 can be used to minimize disk, memory, and CPU resource problems. A
15198 limit of 0 disables filter limiting. An average print to a
15199 non-PostScript printer needs a filter limit of about 200. A PostScript
15200 printer needs about half that (100). Setting the limit below these
15201 thresholds will effectively limit the scheduler to printing a single job
15202 at any time.
15203
15204 Defaults to @samp{0}.
15205 @end deftypevr
15206
15207 @deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-nice
15208 Specifies the scheduling priority of filters that are run to print a
15209 job. The nice value ranges from 0, the highest priority, to 19, the
15210 lowest priority.
15211
15212 Defaults to @samp{0}.
15213 @end deftypevr
15214
15215 @deftypevr {@code{cups-configuration} parameter} host-name-lookups host-name-lookups
15216 Specifies whether to do reverse lookups on connecting clients. The
15217 @code{double} setting causes @code{cupsd} to verify that the hostname
15218 resolved from the address matches one of the addresses returned for that
15219 hostname. Double lookups also prevent clients with unregistered
15220 addresses from connecting to your server. Only set this option to
15221 @code{#t} or @code{double} if absolutely required.
15222
15223 Defaults to @samp{#f}.
15224 @end deftypevr
15225
15226 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-kill-delay
15227 Specifies the number of seconds to wait before killing the filters and
15228 backend associated with a canceled or held job.
15229
15230 Defaults to @samp{30}.
15231 @end deftypevr
15232
15233 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-interval
15234 Specifies the interval between retries of jobs in seconds. This is
15235 typically used for fax queues but can also be used with normal print
15236 queues whose error policy is @code{retry-job} or
15237 @code{retry-current-job}.
15238
15239 Defaults to @samp{30}.
15240 @end deftypevr
15241
15242 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-limit
15243 Specifies the number of retries that are done for jobs. This is
15244 typically used for fax queues but can also be used with normal print
15245 queues whose error policy is @code{retry-job} or
15246 @code{retry-current-job}.
15247
15248 Defaults to @samp{5}.
15249 @end deftypevr
15250
15251 @deftypevr {@code{cups-configuration} parameter} boolean keep-alive?
15252 Specifies whether to support HTTP keep-alive connections.
15253
15254 Defaults to @samp{#t}.
15255 @end deftypevr
15256
15257 @deftypevr {@code{cups-configuration} parameter} non-negative-integer keep-alive-timeout
15258 Specifies how long an idle client connection remains open, in seconds.
15259
15260 Defaults to @samp{30}.
15261 @end deftypevr
15262
15263 @deftypevr {@code{cups-configuration} parameter} non-negative-integer limit-request-body
15264 Specifies the maximum size of print files, IPP requests, and HTML form
15265 data. A limit of 0 disables the limit check.
15266
15267 Defaults to @samp{0}.
15268 @end deftypevr
15269
15270 @deftypevr {@code{cups-configuration} parameter} multiline-string-list listen
15271 Listens on the specified interfaces for connections. Valid values are
15272 of the form @var{address}:@var{port}, where @var{address} is either an
15273 IPv6 address enclosed in brackets, an IPv4 address, or @code{*} to
15274 indicate all addresses. Values can also be file names of local UNIX
15275 domain sockets. The Listen directive is similar to the Port directive
15276 but allows you to restrict access to specific interfaces or networks.
15277 @end deftypevr
15278
15279 @deftypevr {@code{cups-configuration} parameter} non-negative-integer listen-back-log
15280 Specifies the number of pending connections that will be allowed. This
15281 normally only affects very busy servers that have reached the MaxClients
15282 limit, but can also be triggered by large numbers of simultaneous
15283 connections. When the limit is reached, the operating system will
15284 refuse additional connections until the scheduler can accept the pending
15285 ones.
15286
15287 Defaults to @samp{128}.
15288 @end deftypevr
15289
15290 @deftypevr {@code{cups-configuration} parameter} location-access-control-list location-access-controls
15291 Specifies a set of additional access controls.
15292
15293 Available @code{location-access-controls} fields are:
15294
15295 @deftypevr {@code{location-access-controls} parameter} file-name path
15296 Specifies the URI path to which the access control applies.
15297 @end deftypevr
15298
15299 @deftypevr {@code{location-access-controls} parameter} access-control-list access-controls
15300 Access controls for all access to this path, in the same format as the
15301 @code{access-controls} of @code{operation-access-control}.
15302
15303 Defaults to @samp{()}.
15304 @end deftypevr
15305
15306 @deftypevr {@code{location-access-controls} parameter} method-access-control-list method-access-controls
15307 Access controls for method-specific access to this path.
15308
15309 Defaults to @samp{()}.
15310
15311 Available @code{method-access-controls} fields are:
15312
15313 @deftypevr {@code{method-access-controls} parameter} boolean reverse?
15314 If @code{#t}, apply access controls to all methods except the listed
15315 methods. Otherwise apply to only the listed methods.
15316
15317 Defaults to @samp{#f}.
15318 @end deftypevr
15319
15320 @deftypevr {@code{method-access-controls} parameter} method-list methods
15321 Methods to which this access control applies.
15322
15323 Defaults to @samp{()}.
15324 @end deftypevr
15325
15326 @deftypevr {@code{method-access-controls} parameter} access-control-list access-controls
15327 Access control directives, as a list of strings. Each string should be
15328 one directive, such as "Order allow,deny".
15329
15330 Defaults to @samp{()}.
15331 @end deftypevr
15332 @end deftypevr
15333 @end deftypevr
15334
15335 @deftypevr {@code{cups-configuration} parameter} non-negative-integer log-debug-history
15336 Specifies the number of debugging messages that are retained for logging
15337 if an error occurs in a print job. Debug messages are logged regardless
15338 of the LogLevel setting.
15339
15340 Defaults to @samp{100}.
15341 @end deftypevr
15342
15343 @deftypevr {@code{cups-configuration} parameter} log-level log-level
15344 Specifies the level of logging for the ErrorLog file. The value
15345 @code{none} stops all logging while @code{debug2} logs everything.
15346
15347 Defaults to @samp{info}.
15348 @end deftypevr
15349
15350 @deftypevr {@code{cups-configuration} parameter} log-time-format log-time-format
15351 Specifies the format of the date and time in the log files. The value
15352 @code{standard} logs whole seconds while @code{usecs} logs microseconds.
15353
15354 Defaults to @samp{standard}.
15355 @end deftypevr
15356
15357 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients
15358 Specifies the maximum number of simultaneous clients that are allowed by
15359 the scheduler.
15360
15361 Defaults to @samp{100}.
15362 @end deftypevr
15363
15364 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients-per-host
15365 Specifies the maximum number of simultaneous clients that are allowed
15366 from a single address.
15367
15368 Defaults to @samp{100}.
15369 @end deftypevr
15370
15371 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-copies
15372 Specifies the maximum number of copies that a user can print of each
15373 job.
15374
15375 Defaults to @samp{9999}.
15376 @end deftypevr
15377
15378 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-hold-time
15379 Specifies the maximum time a job may remain in the @code{indefinite}
15380 hold state before it is canceled. A value of 0 disables cancellation of
15381 held jobs.
15382
15383 Defaults to @samp{0}.
15384 @end deftypevr
15385
15386 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs
15387 Specifies the maximum number of simultaneous jobs that are allowed. Set
15388 to 0 to allow an unlimited number of jobs.
15389
15390 Defaults to @samp{500}.
15391 @end deftypevr
15392
15393 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-printer
15394 Specifies the maximum number of simultaneous jobs that are allowed per
15395 printer. A value of 0 allows up to MaxJobs jobs per printer.
15396
15397 Defaults to @samp{0}.
15398 @end deftypevr
15399
15400 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-user
15401 Specifies the maximum number of simultaneous jobs that are allowed per
15402 user. A value of 0 allows up to MaxJobs jobs per user.
15403
15404 Defaults to @samp{0}.
15405 @end deftypevr
15406
15407 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-job-time
15408 Specifies the maximum time a job may take to print before it is
15409 canceled, in seconds. Set to 0 to disable cancellation of "stuck" jobs.
15410
15411 Defaults to @samp{10800}.
15412 @end deftypevr
15413
15414 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-log-size
15415 Specifies the maximum size of the log files before they are rotated, in
15416 bytes. The value 0 disables log rotation.
15417
15418 Defaults to @samp{1048576}.
15419 @end deftypevr
15420
15421 @deftypevr {@code{cups-configuration} parameter} non-negative-integer multiple-operation-timeout
15422 Specifies the maximum amount of time to allow between files in a
15423 multiple file print job, in seconds.
15424
15425 Defaults to @samp{300}.
15426 @end deftypevr
15427
15428 @deftypevr {@code{cups-configuration} parameter} string page-log-format
15429 Specifies the format of PageLog lines. Sequences beginning with percent
15430 (@samp{%}) characters are replaced with the corresponding information,
15431 while all other characters are copied literally. The following percent
15432 sequences are recognized:
15433
15434 @table @samp
15435 @item %%
15436 insert a single percent character
15437
15438 @item %@{name@}
15439 insert the value of the specified IPP attribute
15440
15441 @item %C
15442 insert the number of copies for the current page
15443
15444 @item %P
15445 insert the current page number
15446
15447 @item %T
15448 insert the current date and time in common log format
15449
15450 @item %j
15451 insert the job ID
15452
15453 @item %p
15454 insert the printer name
15455
15456 @item %u
15457 insert the username
15458 @end table
15459
15460 A value of the empty string disables page logging. The string @code{%p
15461 %u %j %T %P %C %@{job-billing@} %@{job-originating-host-name@}
15462 %@{job-name@} %@{media@} %@{sides@}} creates a page log with the
15463 standard items.
15464
15465 Defaults to @samp{""}.
15466 @end deftypevr
15467
15468 @deftypevr {@code{cups-configuration} parameter} environment-variables environment-variables
15469 Passes the specified environment variable(s) to child processes; a list
15470 of strings.
15471
15472 Defaults to @samp{()}.
15473 @end deftypevr
15474
15475 @deftypevr {@code{cups-configuration} parameter} policy-configuration-list policies
15476 Specifies named access control policies.
15477
15478 Available @code{policy-configuration} fields are:
15479
15480 @deftypevr {@code{policy-configuration} parameter} string name
15481 Name of the policy.
15482 @end deftypevr
15483
15484 @deftypevr {@code{policy-configuration} parameter} string job-private-access
15485 Specifies an access list for a job's private values. @code{@@ACL} maps
15486 to the printer's requesting-user-name-allowed or
15487 requesting-user-name-denied values. @code{@@OWNER} maps to the job's
15488 owner. @code{@@SYSTEM} maps to the groups listed for the
15489 @code{system-group} field of the @code{files-config} configuration,
15490 which is reified into the @code{cups-files.conf(5)} file. Other
15491 possible elements of the access list include specific user names, and
15492 @code{@@@var{group}} to indicate members of a specific group. The
15493 access list may also be simply @code{all} or @code{default}.
15494
15495 Defaults to @samp{"@@OWNER @@SYSTEM"}.
15496 @end deftypevr
15497
15498 @deftypevr {@code{policy-configuration} parameter} string job-private-values
15499 Specifies the list of job values to make private, or @code{all},
15500 @code{default}, or @code{none}.
15501
15502 Defaults to @samp{"job-name job-originating-host-name
15503 job-originating-user-name phone"}.
15504 @end deftypevr
15505
15506 @deftypevr {@code{policy-configuration} parameter} string subscription-private-access
15507 Specifies an access list for a subscription's private values.
15508 @code{@@ACL} maps to the printer's requesting-user-name-allowed or
15509 requesting-user-name-denied values. @code{@@OWNER} maps to the job's
15510 owner. @code{@@SYSTEM} maps to the groups listed for the
15511 @code{system-group} field of the @code{files-config} configuration,
15512 which is reified into the @code{cups-files.conf(5)} file. Other
15513 possible elements of the access list include specific user names, and
15514 @code{@@@var{group}} to indicate members of a specific group. The
15515 access list may also be simply @code{all} or @code{default}.
15516
15517 Defaults to @samp{"@@OWNER @@SYSTEM"}.
15518 @end deftypevr
15519
15520 @deftypevr {@code{policy-configuration} parameter} string subscription-private-values
15521 Specifies the list of job values to make private, or @code{all},
15522 @code{default}, or @code{none}.
15523
15524 Defaults to @samp{"notify-events notify-pull-method notify-recipient-uri
15525 notify-subscriber-user-name notify-user-data"}.
15526 @end deftypevr
15527
15528 @deftypevr {@code{policy-configuration} parameter} operation-access-control-list access-controls
15529 Access control by IPP operation.
15530
15531 Defaults to @samp{()}.
15532 @end deftypevr
15533 @end deftypevr
15534
15535 @deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-files
15536 Specifies whether job files (documents) are preserved after a job is
15537 printed. If a numeric value is specified, job files are preserved for
15538 the indicated number of seconds after printing. Otherwise a boolean
15539 value applies indefinitely.
15540
15541 Defaults to @samp{86400}.
15542 @end deftypevr
15543
15544 @deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-history
15545 Specifies whether the job history is preserved after a job is printed.
15546 If a numeric value is specified, the job history is preserved for the
15547 indicated number of seconds after printing. If @code{#t}, the job
15548 history is preserved until the MaxJobs limit is reached.
15549
15550 Defaults to @samp{#t}.
15551 @end deftypevr
15552
15553 @deftypevr {@code{cups-configuration} parameter} non-negative-integer reload-timeout
15554 Specifies the amount of time to wait for job completion before
15555 restarting the scheduler.
15556
15557 Defaults to @samp{30}.
15558 @end deftypevr
15559
15560 @deftypevr {@code{cups-configuration} parameter} string rip-cache
15561 Specifies the maximum amount of memory to use when converting documents
15562 into bitmaps for a printer.
15563
15564 Defaults to @samp{"128m"}.
15565 @end deftypevr
15566
15567 @deftypevr {@code{cups-configuration} parameter} string server-admin
15568 Specifies the email address of the server administrator.
15569
15570 Defaults to @samp{"root@@localhost.localdomain"}.
15571 @end deftypevr
15572
15573 @deftypevr {@code{cups-configuration} parameter} host-name-list-or-* server-alias
15574 The ServerAlias directive is used for HTTP Host header validation when
15575 clients connect to the scheduler from external interfaces. Using the
15576 special name @code{*} can expose your system to known browser-based DNS
15577 rebinding attacks, even when accessing sites through a firewall. If the
15578 auto-discovery of alternate names does not work, we recommend listing
15579 each alternate name with a ServerAlias directive instead of using
15580 @code{*}.
15581
15582 Defaults to @samp{*}.
15583 @end deftypevr
15584
15585 @deftypevr {@code{cups-configuration} parameter} string server-name
15586 Specifies the fully-qualified host name of the server.
15587
15588 Defaults to @samp{"localhost"}.
15589 @end deftypevr
15590
15591 @deftypevr {@code{cups-configuration} parameter} server-tokens server-tokens
15592 Specifies what information is included in the Server header of HTTP
15593 responses. @code{None} disables the Server header. @code{ProductOnly}
15594 reports @code{CUPS}. @code{Major} reports @code{CUPS 2}. @code{Minor}
15595 reports @code{CUPS 2.0}. @code{Minimal} reports @code{CUPS 2.0.0}.
15596 @code{OS} reports @code{CUPS 2.0.0 (@var{uname})} where @var{uname} is
15597 the output of the @code{uname} command. @code{Full} reports @code{CUPS
15598 2.0.0 (@var{uname}) IPP/2.0}.
15599
15600 Defaults to @samp{Minimal}.
15601 @end deftypevr
15602
15603 @deftypevr {@code{cups-configuration} parameter} multiline-string-list ssl-listen
15604 Listens on the specified interfaces for encrypted connections. Valid
15605 values are of the form @var{address}:@var{port}, where @var{address} is
15606 either an IPv6 address enclosed in brackets, an IPv4 address, or
15607 @code{*} to indicate all addresses.
15608
15609 Defaults to @samp{()}.
15610 @end deftypevr
15611
15612 @deftypevr {@code{cups-configuration} parameter} ssl-options ssl-options
15613 Sets encryption options. By default, CUPS only supports encryption
15614 using TLS v1.0 or higher using known secure cipher suites. Security is
15615 reduced when @code{Allow} options are used, and enhanced when @code{Deny}
15616 options are used. The @code{AllowRC4} option enables the 128-bit RC4 cipher
15617 suites, which are required for some older clients. The @code{AllowSSL3} option
15618 enables SSL v3.0, which is required for some older clients that do not support
15619 TLS v1.0. The @code{DenyCBC} option disables all CBC cipher suites. The
15620 @code{DenyTLS1.0} option disables TLS v1.0 support - this sets the minimum
15621 protocol version to TLS v1.1.
15622
15623 Defaults to @samp{()}.
15624 @end deftypevr
15625
15626 @deftypevr {@code{cups-configuration} parameter} boolean strict-conformance?
15627 Specifies whether the scheduler requires clients to strictly adhere to
15628 the IPP specifications.
15629
15630 Defaults to @samp{#f}.
15631 @end deftypevr
15632
15633 @deftypevr {@code{cups-configuration} parameter} non-negative-integer timeout
15634 Specifies the HTTP request timeout, in seconds.
15635
15636 Defaults to @samp{300}.
15637
15638 @end deftypevr
15639
15640 @deftypevr {@code{cups-configuration} parameter} boolean web-interface?
15641 Specifies whether the web interface is enabled.
15642
15643 Defaults to @samp{#f}.
15644 @end deftypevr
15645
15646 At this point you're probably thinking ``oh dear, Guix manual, I like
15647 you but you can stop already with the configuration options''. Indeed.
15648 However, one more point: it could be that you have an existing
15649 @code{cupsd.conf} that you want to use. In that case, you can pass an
15650 @code{opaque-cups-configuration} as the configuration of a
15651 @code{cups-service-type}.
15652
15653 Available @code{opaque-cups-configuration} fields are:
15654
15655 @deftypevr {@code{opaque-cups-configuration} parameter} package cups
15656 The CUPS package.
15657 @end deftypevr
15658
15659 @deftypevr {@code{opaque-cups-configuration} parameter} string cupsd.conf
15660 The contents of the @code{cupsd.conf}, as a string.
15661 @end deftypevr
15662
15663 @deftypevr {@code{opaque-cups-configuration} parameter} string cups-files.conf
15664 The contents of the @code{cups-files.conf} file, as a string.
15665 @end deftypevr
15666
15667 For example, if your @code{cupsd.conf} and @code{cups-files.conf} are in
15668 strings of the same name, you could instantiate a CUPS service like
15669 this:
15670
15671 @lisp
15672 (service cups-service-type
15673 (opaque-cups-configuration
15674 (cupsd.conf cupsd.conf)
15675 (cups-files.conf cups-files.conf)))
15676 @end lisp
15677
15678
15679 @node Desktop Services
15680 @subsection Desktop Services
15681
15682 The @code{(gnu services desktop)} module provides services that are
15683 usually useful in the context of a ``desktop'' setup---that is, on a
15684 machine running a graphical display server, possibly with graphical user
15685 interfaces, etc. It also defines services that provide specific desktop
15686 environments like GNOME, Xfce or MATE.
15687
15688 To simplify things, the module defines a variable containing the set of
15689 services that users typically expect on a machine with a graphical
15690 environment and networking:
15691
15692 @defvr {Scheme Variable} %desktop-services
15693 This is a list of services that builds upon @code{%base-services} and
15694 adds or adjusts services for a typical ``desktop'' setup.
15695
15696 In particular, it adds a graphical login manager (@pxref{X Window,
15697 @code{gdm-service-type}}), screen lockers, a network management tool
15698 (@pxref{Networking Services, @code{network-manager-service-type}}) with modem
15699 support (@pxref{Networking Services, @code{modem-manager-service-type}}),
15700 energy and color management services, the @code{elogind} login and seat
15701 manager, the Polkit privilege service, the GeoClue location service, the
15702 AccountsService daemon that allows authorized users change system passwords,
15703 an NTP client (@pxref{Networking Services}), the Avahi daemon, and has the
15704 name service switch service configured to be able to use @code{nss-mdns}
15705 (@pxref{Name Service Switch, mDNS}).
15706 @end defvr
15707
15708 The @code{%desktop-services} variable can be used as the @code{services}
15709 field of an @code{operating-system} declaration (@pxref{operating-system
15710 Reference, @code{services}}).
15711
15712 Additionally, the @code{gnome-desktop-service-type},
15713 @code{xfce-desktop-service}, @code{mate-desktop-service-type} and
15714 @code{enlightenment-desktop-service-type} procedures can add GNOME, Xfce, MATE
15715 and/or Enlightenment to a system. To ``add GNOME'' means that system-level
15716 services like the backlight adjustment helpers and the power management
15717 utilities are added to the system, extending @code{polkit} and @code{dbus}
15718 appropriately, allowing GNOME to operate with elevated privileges on a
15719 limited number of special-purpose system interfaces. Additionally,
15720 adding a service made by @code{gnome-desktop-service-type} adds the GNOME
15721 metapackage to the system profile. Likewise, adding the Xfce service
15722 not only adds the @code{xfce} metapackage to the system profile, but it
15723 also gives the Thunar file manager the ability to open a ``root-mode''
15724 file management window, if the user authenticates using the
15725 administrator's password via the standard polkit graphical interface.
15726 To ``add MATE'' means that @code{polkit} and @code{dbus} are extended
15727 appropriately, allowing MATE to operate with elevated privileges on a
15728 limited number of special-purpose system interfaces. Additionally,
15729 adding a service of type @code{mate-desktop-service-type} adds the MATE
15730 metapackage to the system profile. ``Adding Enlightenment'' means that
15731 @code{dbus} is extended appropriately, and several of Enlightenment's binaries
15732 are set as setuid, allowing Enlightenment's screen locker and other
15733 functionality to work as expected.
15734
15735 The desktop environments in Guix use the Xorg display server by
15736 default. If you'd like to use the newer display server protocol
15737 called Wayland, you need to use the @code{sddm-service} instead of
15738 GDM as the graphical login manager. You should then
15739 select the ``GNOME (Wayland)'' session in SDDM. Alternatively you can
15740 also try starting GNOME on Wayland manually from a TTY with the
15741 command ``XDG_SESSION_TYPE=wayland exec dbus-run-session
15742 gnome-session``. Currently only GNOME has support for Wayland.
15743
15744 @defvr {Scheme Variable} gnome-desktop-service-type
15745 This is the type of the service that adds the @uref{https://www.gnome.org,
15746 GNOME} desktop environment. Its value is a @code{gnome-desktop-configuration}
15747 object (see below.)
15748
15749 This service adds the @code{gnome} package to the system profile, and extends
15750 polkit with the actions from @code{gnome-settings-daemon}.
15751 @end defvr
15752
15753 @deftp {Data Type} gnome-desktop-configuration
15754 Configuration record for the GNOME desktop environment.
15755
15756 @table @asis
15757 @item @code{gnome} (default: @code{gnome})
15758 The GNOME package to use.
15759 @end table
15760 @end deftp
15761
15762 @defvr {Scheme Variable} xfce-desktop-service-type
15763 This is the type of a service to run the @uref{Xfce, https://xfce.org/}
15764 desktop environment. Its value is an @code{xfce-desktop-configuration} object
15765 (see below.)
15766
15767 This service adds the @code{xfce} package to the system profile, and
15768 extends polkit with the ability for @code{thunar} to manipulate the file
15769 system as root from within a user session, after the user has authenticated
15770 with the administrator's password.
15771 @end defvr
15772
15773 @deftp {Data Type} xfce-desktop-configuration
15774 Configuration record for the Xfce desktop environment.
15775
15776 @table @asis
15777 @item @code{xfce} (default: @code{xfce})
15778 The Xfce package to use.
15779 @end table
15780 @end deftp
15781
15782 @deffn {Scheme Variable} mate-desktop-service-type
15783 This is the type of the service that runs the @uref{https://mate-desktop.org/,
15784 MATE desktop environment}. Its value is a @code{mate-desktop-configuration}
15785 object (see below.)
15786
15787 This service adds the @code{mate} package to the system
15788 profile, and extends polkit with the actions from
15789 @code{mate-settings-daemon}.
15790 @end deffn
15791
15792 @deftp {Data Type} mate-desktop-configuration
15793 Configuration record for the MATE desktop environment.
15794
15795 @table @asis
15796 @item @code{mate} (default: @code{mate})
15797 The MATE package to use.
15798 @end table
15799 @end deftp
15800
15801 @deffn {Scheme Variable} enlightenment-desktop-service-type
15802 Return a service that adds the @code{enlightenment} package to the system
15803 profile, and extends dbus with actions from @code{efl}.
15804 @end deffn
15805
15806 @deftp {Data Type} enlightenment-desktop-service-configuration
15807 @table @asis
15808 @item @code{enlightenment} (default: @code{enlightenment})
15809 The enlightenment package to use.
15810 @end table
15811 @end deftp
15812
15813 Because the GNOME, Xfce and MATE desktop services pull in so many packages,
15814 the default @code{%desktop-services} variable doesn't include any of
15815 them by default. To add GNOME, Xfce or MATE, just @code{cons} them onto
15816 @code{%desktop-services} in the @code{services} field of your
15817 @code{operating-system}:
15818
15819 @lisp
15820 (use-modules (gnu))
15821 (use-service-modules desktop)
15822 (operating-system
15823 ...
15824 ;; cons* adds items to the list given as its last argument.
15825 (services (cons* (service gnome-desktop-service-type)
15826 (service xfce-desktop-service)
15827 %desktop-services))
15828 ...)
15829 @end lisp
15830
15831 These desktop environments will then be available as options in the
15832 graphical login window.
15833
15834 The actual service definitions included in @code{%desktop-services} and
15835 provided by @code{(gnu services dbus)} and @code{(gnu services desktop)}
15836 are described below.
15837
15838 @deffn {Scheme Procedure} dbus-service [#:dbus @var{dbus}] [#:services '()]
15839 Return a service that runs the ``system bus'', using @var{dbus}, with
15840 support for @var{services}.
15841
15842 @uref{https://dbus.freedesktop.org/, D-Bus} is an inter-process communication
15843 facility. Its system bus is used to allow system services to communicate
15844 and to be notified of system-wide events.
15845
15846 @var{services} must be a list of packages that provide an
15847 @file{etc/dbus-1/system.d} directory containing additional D-Bus configuration
15848 and policy files. For example, to allow avahi-daemon to use the system bus,
15849 @var{services} must be equal to @code{(list avahi)}.
15850 @end deffn
15851
15852 @deffn {Scheme Procedure} elogind-service [#:config @var{config}]
15853 Return a service that runs the @code{elogind} login and
15854 seat management daemon. @uref{https://github.com/elogind/elogind,
15855 Elogind} exposes a D-Bus interface that can be used to know which users
15856 are logged in, know what kind of sessions they have open, suspend the
15857 system, inhibit system suspend, reboot the system, and other tasks.
15858
15859 Elogind handles most system-level power events for a computer, for
15860 example suspending the system when a lid is closed, or shutting it down
15861 when the power button is pressed.
15862
15863 The @var{config} keyword argument specifies the configuration for
15864 elogind, and should be the result of an @code{(elogind-configuration
15865 (@var{parameter} @var{value})...)} invocation. Available parameters and
15866 their default values are:
15867
15868 @table @code
15869 @item kill-user-processes?
15870 @code{#f}
15871 @item kill-only-users
15872 @code{()}
15873 @item kill-exclude-users
15874 @code{("root")}
15875 @item inhibit-delay-max-seconds
15876 @code{5}
15877 @item handle-power-key
15878 @code{poweroff}
15879 @item handle-suspend-key
15880 @code{suspend}
15881 @item handle-hibernate-key
15882 @code{hibernate}
15883 @item handle-lid-switch
15884 @code{suspend}
15885 @item handle-lid-switch-docked
15886 @code{ignore}
15887 @item power-key-ignore-inhibited?
15888 @code{#f}
15889 @item suspend-key-ignore-inhibited?
15890 @code{#f}
15891 @item hibernate-key-ignore-inhibited?
15892 @code{#f}
15893 @item lid-switch-ignore-inhibited?
15894 @code{#t}
15895 @item holdoff-timeout-seconds
15896 @code{30}
15897 @item idle-action
15898 @code{ignore}
15899 @item idle-action-seconds
15900 @code{(* 30 60)}
15901 @item runtime-directory-size-percent
15902 @code{10}
15903 @item runtime-directory-size
15904 @code{#f}
15905 @item remove-ipc?
15906 @code{#t}
15907 @item suspend-state
15908 @code{("mem" "standby" "freeze")}
15909 @item suspend-mode
15910 @code{()}
15911 @item hibernate-state
15912 @code{("disk")}
15913 @item hibernate-mode
15914 @code{("platform" "shutdown")}
15915 @item hybrid-sleep-state
15916 @code{("disk")}
15917 @item hybrid-sleep-mode
15918 @code{("suspend" "platform" "shutdown")}
15919 @end table
15920 @end deffn
15921
15922 @deffn {Scheme Procedure} accountsservice-service @
15923 [#:accountsservice @var{accountsservice}]
15924 Return a service that runs AccountsService, a system service that can
15925 list available accounts, change their passwords, and so on.
15926 AccountsService integrates with PolicyKit to enable unprivileged users
15927 to acquire the capability to modify their system configuration.
15928 @uref{https://www.freedesktop.org/wiki/Software/AccountsService/, the
15929 accountsservice web site} for more information.
15930
15931 The @var{accountsservice} keyword argument is the @code{accountsservice}
15932 package to expose as a service.
15933 @end deffn
15934
15935 @deffn {Scheme Procedure} polkit-service @
15936 [#:polkit @var{polkit}]
15937 Return a service that runs the
15938 @uref{https://www.freedesktop.org/wiki/Software/polkit/, Polkit privilege
15939 management service}, which allows system administrators to grant access to
15940 privileged operations in a structured way. By querying the Polkit service, a
15941 privileged system component can know when it should grant additional
15942 capabilities to ordinary users. For example, an ordinary user can be granted
15943 the capability to suspend the system if the user is logged in locally.
15944 @end deffn
15945
15946 @defvr {Scheme Variable} polkit-wheel-service
15947 Service that adds the @code{wheel} group as admins to the Polkit
15948 service. This makes it so that users in the @code{wheel} group are queried
15949 for their own passwords when performing administrative actions instead of
15950 @code{root}'s, similar to the behaviour used by @code{sudo}.
15951 @end defvr
15952
15953 @defvr {Scheme Variable} upower-service-type
15954 Service that runs @uref{https://upower.freedesktop.org/, @command{upowerd}}, a
15955 system-wide monitor for power consumption and battery levels, with the given
15956 configuration settings.
15957
15958 It implements the @code{org.freedesktop.UPower} D-Bus interface, and is
15959 notably used by GNOME.
15960 @end defvr
15961
15962 @deftp {Data Type} upower-configuration
15963 Data type representation the configuration for UPower.
15964
15965 @table @asis
15966
15967 @item @code{upower} (default: @var{upower})
15968 Package to use for @code{upower}.
15969
15970 @item @code{watts-up-pro?} (default: @code{#f})
15971 Enable the Watts Up Pro device.
15972
15973 @item @code{poll-batteries?} (default: @code{#t})
15974 Enable polling the kernel for battery level changes.
15975
15976 @item @code{ignore-lid?} (default: @code{#f})
15977 Ignore the lid state, this can be useful if it's incorrect on a device.
15978
15979 @item @code{use-percentage-for-policy?} (default: @code{#f})
15980 Whether battery percentage based policy should be used. The default is to use
15981 the time left, change to @code{#t} to use the percentage.
15982
15983 @item @code{percentage-low} (default: @code{10})
15984 When @code{use-percentage-for-policy?} is @code{#t}, this sets the percentage
15985 at which the battery is considered low.
15986
15987 @item @code{percentage-critical} (default: @code{3})
15988 When @code{use-percentage-for-policy?} is @code{#t}, this sets the percentage
15989 at which the battery is considered critical.
15990
15991 @item @code{percentage-action} (default: @code{2})
15992 When @code{use-percentage-for-policy?} is @code{#t}, this sets the percentage
15993 at which action will be taken.
15994
15995 @item @code{time-low} (default: @code{1200})
15996 When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining in
15997 seconds at which the battery is considered low.
15998
15999 @item @code{time-critical} (default: @code{300})
16000 When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining in
16001 seconds at which the battery is considered critical.
16002
16003 @item @code{time-action} (default: @code{120})
16004 When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining in
16005 seconds at which action will be taken.
16006
16007 @item @code{critical-power-action} (default: @code{'hybrid-sleep})
16008 The action taken when @code{percentage-action} or @code{time-action} is
16009 reached (depending on the configuration of @code{use-percentage-for-policy?}).
16010
16011 Possible values are:
16012
16013 @itemize @bullet
16014 @item
16015 @code{'power-off}
16016
16017 @item
16018 @code{'hibernate}
16019
16020 @item
16021 @code{'hybrid-sleep}.
16022 @end itemize
16023
16024 @end table
16025 @end deftp
16026
16027 @deffn {Scheme Procedure} udisks-service [#:udisks @var{udisks}]
16028 Return a service for @uref{https://udisks.freedesktop.org/docs/latest/,
16029 UDisks}, a @dfn{disk management} daemon that provides user interfaces with
16030 notifications and ways to mount/unmount disks. Programs that talk to UDisks
16031 include the @command{udisksctl} command, part of UDisks, and GNOME Disks.
16032 @end deffn
16033
16034 @deffn {Scheme Variable} colord-service-type
16035 This is the type of the service that runs @command{colord}, a system
16036 service with a D-Bus
16037 interface to manage the color profiles of input and output devices such as
16038 screens and scanners. It is notably used by the GNOME Color Manager graphical
16039 tool. See @uref{https://www.freedesktop.org/software/colord/, the colord web
16040 site} for more information.
16041 @end deffn
16042
16043 @deffn {Scheme Procedure} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()]
16044 Return a configuration allowing an application to access GeoClue
16045 location data. @var{name} is the Desktop ID of the application, without
16046 the @code{.desktop} part. If @var{allowed?} is true, the application
16047 will have access to location information by default. The boolean
16048 @var{system?} value indicates whether an application is a system component
16049 or not. Finally @var{users} is a list of UIDs of all users for which
16050 this application is allowed location info access. An empty users list
16051 means that all users are allowed.
16052 @end deffn
16053
16054 @cindex scanner access
16055 @deffn {Scheme Procedure} sane-service-type
16056 This service provides access to scanners @i{via}
16057 @uref{http://www.sane-project.org, SANE} by installing the necessary udev
16058 rules.
16059 @end deffn
16060
16061 @defvr {Scheme Variable} %standard-geoclue-applications
16062 The standard list of well-known GeoClue application configurations,
16063 granting authority to the GNOME date-and-time utility to ask for the
16064 current location in order to set the time zone, and allowing the
16065 IceCat and Epiphany web browsers to request location information.
16066 IceCat and Epiphany both query the user before allowing a web page to
16067 know the user's location.
16068 @end defvr
16069
16070 @deffn {Scheme Procedure} geoclue-service [#:colord @var{colord}] @
16071 [#:whitelist '()] @
16072 [#:wifi-geolocation-url "https://location.services.mozilla.com/v1/geolocate?key=geoclue"] @
16073 [#:submit-data? #f]
16074 [#:wifi-submission-url "https://location.services.mozilla.com/v1/submit?key=geoclue"] @
16075 [#:submission-nick "geoclue"] @
16076 [#:applications %standard-geoclue-applications]
16077 Return a service that runs the GeoClue location service. This service
16078 provides a D-Bus interface to allow applications to request access to a
16079 user's physical location, and optionally to add information to online
16080 location databases. See
16081 @uref{https://wiki.freedesktop.org/www/Software/GeoClue/, the GeoClue
16082 web site} for more information.
16083 @end deffn
16084
16085 @deffn {Scheme Procedure} bluetooth-service [#:bluez @var{bluez}] @
16086 [@w{#:auto-enable? #f}]
16087 Return a service that runs the @command{bluetoothd} daemon, which
16088 manages all the Bluetooth devices and provides a number of D-Bus
16089 interfaces. When AUTO-ENABLE? is true, the bluetooth controller is
16090 powered automatically at boot, which can be useful when using a
16091 bluetooth keyboard or mouse.
16092
16093 Users need to be in the @code{lp} group to access the D-Bus service.
16094 @end deffn
16095
16096 @defvr {Scheme Variable} gnome-keyring-service-type
16097 This is the type of the service that adds the
16098 @uref{https://wiki.gnome.org/Projects/GnomeKeyring, GNOME Keyring}. Its
16099 value is a @code{gnome-keyring-configuration} object (see below.)
16100
16101 This service adds the @code{gnome-keyring} package to the system profile
16102 and extends PAM with entries using @code{pam_gnome_keyring.so}, unlocking
16103 a user's login keyring when they log in or setting its password with passwd.
16104 @end defvr
16105
16106 @deftp {Data Type} gnome-keyring-configuration
16107 Configuration record for the GNOME Keyring service.
16108
16109 @table @asis
16110 @item @code{keyring} (default: @code{gnome-keyring})
16111 The GNOME keyring package to use.
16112
16113 @item @code{pam-services}
16114 A list of @code{(@var{service} . @var{kind})} pairs denoting PAM
16115 services to extend, where @var{service} is the name of an existing
16116 service to extend and @var{kind} is one of @code{login} or
16117 @code{passwd}.
16118
16119 If @code{login} is given, it adds an optional
16120 @code{pam_gnome_keyring.so} to the auth block without arguments and to
16121 the session block with @code{auto_start}. If @code{passwd} is given, it
16122 adds an optional @code{pam_gnome_keyring.so} to the password block
16123 without arguments.
16124
16125 By default, this field contains ``gdm-password'' with the value @code{login}
16126 and ``passwd'' is with the value @code{passwd}.
16127 @end table
16128 @end deftp
16129
16130
16131 @node Sound Services
16132 @subsection Sound Services
16133
16134 @cindex sound support
16135 @cindex ALSA
16136 @cindex PulseAudio, sound support
16137
16138 The @code{(gnu services sound)} module provides a service to configure the
16139 Advanced Linux Sound Architecture (ALSA) system, which makes PulseAudio the
16140 preferred ALSA output driver.
16141
16142 @deffn {Scheme Variable} alsa-service-type
16143 This is the type for the @uref{https://alsa-project.org/, Advanced Linux Sound
16144 Architecture} (ALSA) system, which generates the @file{/etc/asound.conf}
16145 configuration file. The value for this type is a @command{alsa-configuration}
16146 record as in this example:
16147
16148 @lisp
16149 (service alsa-service-type)
16150 @end lisp
16151
16152 See below for details about @code{alsa-configuration}.
16153 @end deffn
16154
16155 @deftp {Data Type} alsa-configuration
16156 Data type representing the configuration for @code{alsa-service}.
16157
16158 @table @asis
16159 @item @code{alsa-plugins} (default: @var{alsa-plugins})
16160 @code{alsa-plugins} package to use.
16161
16162 @item @code{pulseaudio?} (default: @var{#t})
16163 Whether ALSA applications should transparently be made to use the
16164 @uref{https://www.pulseaudio.org/, PulseAudio} sound server.
16165
16166 Using PulseAudio allows you to run several sound-producing applications
16167 at the same time and to individual control them @i{via}
16168 @command{pavucontrol}, among other things.
16169
16170 @item @code{extra-options} (default: @var{""})
16171 String to append to the @file{/etc/asound.conf} file.
16172
16173 @end table
16174 @end deftp
16175
16176 Individual users who want to override the system configuration of ALSA can do
16177 it with the @file{~/.asoundrc} file:
16178
16179 @example
16180 # In guix, we have to specify the absolute path for plugins.
16181 pcm_type.jack @{
16182 lib "/home/alice/.guix-profile/lib/alsa-lib/libasound_module_pcm_jack.so"
16183 @}
16184
16185 # Routing ALSA to jack:
16186 # <http://jackaudio.org/faq/routing_alsa.html>.
16187 pcm.rawjack @{
16188 type jack
16189 playback_ports @{
16190 0 system:playback_1
16191 1 system:playback_2
16192 @}
16193
16194 capture_ports @{
16195 0 system:capture_1
16196 1 system:capture_2
16197 @}
16198 @}
16199
16200 pcm.!default @{
16201 type plug
16202 slave @{
16203 pcm "rawjack"
16204 @}
16205 @}
16206 @end example
16207
16208 See @uref{https://www.alsa-project.org/main/index.php/Asoundrc} for the
16209 details.
16210
16211 @deffn {Scheme Variable} pulseaudio-service-type
16212 This is the type for the @uref{https://www.pulseaudio.org/, PulseAudio}
16213 sound server. It exists to allow system overrides of the default settings
16214 via @code{pulseaudio-configuration}, see below.
16215
16216 @quotation Warning
16217 This service on its own does not ensure, that the @code{pulseaudio} package
16218 exists on your machine. It merely adds configuration files for it, as
16219 detailed below. In the (admittedly unlikely) case, that you find yourself
16220 without a @code{pulseaudio} package, consider enabling it through the
16221 @code{alsa-service-type} above.
16222 @end quotation
16223 @end deffn
16224
16225 @deftp {Data Type} pulseaudio-configuration
16226 Data type representing the configuration for @code{pulseaudio-service}.
16227
16228 @table @asis
16229 @item @var{client-conf} (default: @code{'()})
16230 List of settings to set in @file{client.conf}.
16231 Accepts a list of strings or a symbol-value pairs. A string will be
16232 inserted as-is with a newline added. A pair will be formatted as
16233 ``key = value'', again with a newline added.
16234
16235 @item @var{daemon-conf} (default: @code{'((flat-volumes . no))})
16236 List of settings to set in @file{daemon.conf}, formatted just like
16237 @var{client-conf}.
16238
16239 @item @var{script-file} (default: @code{(file-append pulseaudio "/etc/pulse/default.pa")})
16240 Script file to use as as @file{default.pa}.
16241
16242 @item @var{system-script-file} (default: @code{(file-append pulseaudio "/etc/pulse/system.pa")})
16243 Script file to use as as @file{system.pa}.
16244 @end table
16245 @end deftp
16246
16247 @deffn {Scheme Variable} ladspa-service-type
16248 This service sets the @var{LADSPA_PATH} variable, so that programs, which
16249 respect it, e.g. PulseAudio, can load LADSPA plugins.
16250
16251 The following example will setup the service to enable modules from the
16252 @code{swh-plugins} package:
16253
16254 @lisp
16255 (service ladspa-service-type
16256 (ladspa-configuration (plugins (list swh-plugins))))
16257 @end lisp
16258
16259 See @uref{http://plugin.org.uk/ladspa-swh/docs/ladspa-swh.html} for the
16260 details.
16261
16262 @end deffn
16263
16264 @node Database Services
16265 @subsection Database Services
16266
16267 @cindex database
16268 @cindex SQL
16269 The @code{(gnu services databases)} module provides the following services.
16270
16271 @deffn {Scheme Procedure} postgresql-service [#:postgresql postgresql] @
16272 [#:config-file] [#:data-directory ``/var/lib/postgresql/data''] @
16273 [#:port 5432] [#:locale ``en_US.utf8''] [#:extension-packages '()]
16274 Return a service that runs @var{postgresql}, the PostgreSQL database
16275 server.
16276
16277 The PostgreSQL daemon loads its runtime configuration from @var{config-file},
16278 creates a database cluster with @var{locale} as the default
16279 locale, stored in @var{data-directory}. It then listens on @var{port}.
16280
16281 @cindex postgresql extension-packages
16282 Additional extensions are loaded from packages listed in
16283 @var{extension-packages}. Extensions are available at runtime. For instance,
16284 to create a geographic database using the @code{postgis} extension, a user can
16285 configure the postgresql-service as in this example:
16286
16287 @cindex postgis
16288 @lisp
16289 (use-package-modules databases geo)
16290
16291 (operating-system
16292 ...
16293 ;; postgresql is required to run `psql' but postgis is not required for
16294 ;; proper operation.
16295 (packages (cons* postgresql %base-packages))
16296 (services
16297 (cons*
16298 (postgresql-service #:extension-packages (list postgis))
16299 %base-services)))
16300 @end lisp
16301
16302 Then the extension becomes visible and you can initialise an empty geographic
16303 database in this way:
16304
16305 @example
16306 psql -U postgres
16307 > create database postgistest;
16308 > \connect postgistest;
16309 > create extension postgis;
16310 > create extension postgis_topology;
16311 @end example
16312
16313 There is no need to add this field for contrib extensions such as hstore or
16314 dblink as they are already loadable by postgresql. This field is only
16315 required to add extensions provided by other packages.
16316 @end deffn
16317
16318 @deffn {Scheme Procedure} mysql-service [#:config (mysql-configuration)]
16319 Return a service that runs @command{mysqld}, the MySQL or MariaDB
16320 database server.
16321
16322 The optional @var{config} argument specifies the configuration for
16323 @command{mysqld}, which should be a @code{<mysql-configuration>} object.
16324 @end deffn
16325
16326 @deftp {Data Type} mysql-configuration
16327 Data type representing the configuration of @var{mysql-service}.
16328
16329 @table @asis
16330 @item @code{mysql} (default: @var{mariadb})
16331 Package object of the MySQL database server, can be either @var{mariadb}
16332 or @var{mysql}.
16333
16334 For MySQL, a temporary root password will be displayed at activation time.
16335 For MariaDB, the root password is empty.
16336
16337 @item @code{port} (default: @code{3306})
16338 TCP port on which the database server listens for incoming connections.
16339 @end table
16340 @end deftp
16341
16342 @defvr {Scheme Variable} memcached-service-type
16343 This is the service type for the @uref{https://memcached.org/,
16344 Memcached} service, which provides a distributed in memory cache. The
16345 value for the service type is a @code{memcached-configuration} object.
16346 @end defvr
16347
16348 @lisp
16349 (service memcached-service-type)
16350 @end lisp
16351
16352 @deftp {Data Type} memcached-configuration
16353 Data type representing the configuration of memcached.
16354
16355 @table @asis
16356 @item @code{memcached} (default: @code{memcached})
16357 The Memcached package to use.
16358
16359 @item @code{interfaces} (default: @code{'("0.0.0.0")})
16360 Network interfaces on which to listen.
16361
16362 @item @code{tcp-port} (default: @code{11211})
16363 Port on which to accept connections on,
16364
16365 @item @code{udp-port} (default: @code{11211})
16366 Port on which to accept UDP connections on, a value of 0 will disable
16367 listening on a UDP socket.
16368
16369 @item @code{additional-options} (default: @code{'()})
16370 Additional command line options to pass to @code{memcached}.
16371 @end table
16372 @end deftp
16373
16374 @defvr {Scheme Variable} mongodb-service-type
16375 This is the service type for @uref{https://www.mongodb.com/, MongoDB}.
16376 The value for the service type is a @code{mongodb-configuration} object.
16377 @end defvr
16378
16379 @lisp
16380 (service mongodb-service-type)
16381 @end lisp
16382
16383 @deftp {Data Type} mongodb-configuration
16384 Data type representing the configuration of mongodb.
16385
16386 @table @asis
16387 @item @code{mongodb} (default: @code{mongodb})
16388 The MongoDB package to use.
16389
16390 @item @code{config-file} (default: @code{%default-mongodb-configuration-file})
16391 The configuration file for MongoDB.
16392
16393 @item @code{data-directory} (default: @code{"/var/lib/mongodb"})
16394 This value is used to create the directory, so that it exists and is
16395 owned by the mongodb user. It should match the data-directory which
16396 MongoDB is configured to use through the configuration file.
16397 @end table
16398 @end deftp
16399
16400 @defvr {Scheme Variable} redis-service-type
16401 This is the service type for the @uref{https://redis.io/, Redis}
16402 key/value store, whose value is a @code{redis-configuration} object.
16403 @end defvr
16404
16405 @deftp {Data Type} redis-configuration
16406 Data type representing the configuration of redis.
16407
16408 @table @asis
16409 @item @code{redis} (default: @code{redis})
16410 The Redis package to use.
16411
16412 @item @code{bind} (default: @code{"127.0.0.1"})
16413 Network interface on which to listen.
16414
16415 @item @code{port} (default: @code{6379})
16416 Port on which to accept connections on, a value of 0 will disable
16417 listening on a TCP socket.
16418
16419 @item @code{working-directory} (default: @code{"/var/lib/redis"})
16420 Directory in which to store the database and related files.
16421 @end table
16422 @end deftp
16423
16424 @node Mail Services
16425 @subsection Mail Services
16426
16427 @cindex mail
16428 @cindex email
16429 The @code{(gnu services mail)} module provides Guix service definitions
16430 for email services: IMAP, POP3, and LMTP servers, as well as mail
16431 transport agents (MTAs). Lots of acronyms! These services are detailed
16432 in the subsections below.
16433
16434 @subsubheading Dovecot Service
16435
16436 @deffn {Scheme Procedure} dovecot-service [#:config (dovecot-configuration)]
16437 Return a service that runs the Dovecot IMAP/POP3/LMTP mail server.
16438 @end deffn
16439
16440 By default, Dovecot does not need much configuration; the default
16441 configuration object created by @code{(dovecot-configuration)} will
16442 suffice if your mail is delivered to @code{~/Maildir}. A self-signed
16443 certificate will be generated for TLS-protected connections, though
16444 Dovecot will also listen on cleartext ports by default. There are a
16445 number of options, though, which mail administrators might need to change,
16446 and as is the case with other services, Guix allows the system
16447 administrator to specify these parameters via a uniform Scheme interface.
16448
16449 For example, to specify that mail is located at @code{maildir~/.mail},
16450 one would instantiate the Dovecot service like this:
16451
16452 @lisp
16453 (dovecot-service #:config
16454 (dovecot-configuration
16455 (mail-location "maildir:~/.mail")))
16456 @end lisp
16457
16458 The available configuration parameters follow. Each parameter
16459 definition is preceded by its type; for example, @samp{string-list foo}
16460 indicates that the @code{foo} parameter should be specified as a list of
16461 strings. There is also a way to specify the configuration as a string,
16462 if you have an old @code{dovecot.conf} file that you want to port over
16463 from some other system; see the end for more details.
16464
16465 @c The following documentation was initially generated by
16466 @c (generate-documentation) in (gnu services mail). Manually maintained
16467 @c documentation is better, so we shouldn't hesitate to edit below as
16468 @c needed. However if the change you want to make to this documentation
16469 @c can be done in an automated way, it's probably easier to change
16470 @c (generate-documentation) than to make it below and have to deal with
16471 @c the churn as dovecot updates.
16472
16473 Available @code{dovecot-configuration} fields are:
16474
16475 @deftypevr {@code{dovecot-configuration} parameter} package dovecot
16476 The dovecot package.
16477 @end deftypevr
16478
16479 @deftypevr {@code{dovecot-configuration} parameter} comma-separated-string-list listen
16480 A list of IPs or hosts where to listen for connections. @samp{*}
16481 listens on all IPv4 interfaces, @samp{::} listens on all IPv6
16482 interfaces. If you want to specify non-default ports or anything more
16483 complex, customize the address and port fields of the
16484 @samp{inet-listener} of the specific services you are interested in.
16485 @end deftypevr
16486
16487 @deftypevr {@code{dovecot-configuration} parameter} protocol-configuration-list protocols
16488 List of protocols we want to serve. Available protocols include
16489 @samp{imap}, @samp{pop3}, and @samp{lmtp}.
16490
16491 Available @code{protocol-configuration} fields are:
16492
16493 @deftypevr {@code{protocol-configuration} parameter} string name
16494 The name of the protocol.
16495 @end deftypevr
16496
16497 @deftypevr {@code{protocol-configuration} parameter} string auth-socket-path
16498 UNIX socket path to the master authentication server to find users.
16499 This is used by imap (for shared users) and lda.
16500 It defaults to @samp{"/var/run/dovecot/auth-userdb"}.
16501 @end deftypevr
16502
16503 @deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins
16504 Space separated list of plugins to load.
16505 @end deftypevr
16506
16507 @deftypevr {@code{protocol-configuration} parameter} non-negative-integer mail-max-userip-connections
16508 Maximum number of IMAP connections allowed for a user from each IP
16509 address. NOTE: The username is compared case-sensitively.
16510 Defaults to @samp{10}.
16511 @end deftypevr
16512
16513 @end deftypevr
16514
16515 @deftypevr {@code{dovecot-configuration} parameter} service-configuration-list services
16516 List of services to enable. Available services include @samp{imap},
16517 @samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}, and
16518 @samp{lmtp}.
16519
16520 Available @code{service-configuration} fields are:
16521
16522 @deftypevr {@code{service-configuration} parameter} string kind
16523 The service kind. Valid values include @code{director},
16524 @code{imap-login}, @code{pop3-login}, @code{lmtp}, @code{imap},
16525 @code{pop3}, @code{auth}, @code{auth-worker}, @code{dict},
16526 @code{tcpwrap}, @code{quota-warning}, or anything else.
16527 @end deftypevr
16528
16529 @deftypevr {@code{service-configuration} parameter} listener-configuration-list listeners
16530 Listeners for the service. A listener is either a
16531 @code{unix-listener-configuration}, a @code{fifo-listener-configuration}, or
16532 an @code{inet-listener-configuration}.
16533 Defaults to @samp{()}.
16534
16535 Available @code{unix-listener-configuration} fields are:
16536
16537 @deftypevr {@code{unix-listener-configuration} parameter} string path
16538 Path to the file, relative to @code{base-dir} field. This is also used as
16539 the section name.
16540 @end deftypevr
16541
16542 @deftypevr {@code{unix-listener-configuration} parameter} string mode
16543 The access mode for the socket.
16544 Defaults to @samp{"0600"}.
16545 @end deftypevr
16546
16547 @deftypevr {@code{unix-listener-configuration} parameter} string user
16548 The user to own the socket.
16549 Defaults to @samp{""}.
16550 @end deftypevr
16551
16552 @deftypevr {@code{unix-listener-configuration} parameter} string group
16553 The group to own the socket.
16554 Defaults to @samp{""}.
16555 @end deftypevr
16556
16557
16558 Available @code{fifo-listener-configuration} fields are:
16559
16560 @deftypevr {@code{fifo-listener-configuration} parameter} string path
16561 Path to the file, relative to @code{base-dir} field. This is also used as
16562 the section name.
16563 @end deftypevr
16564
16565 @deftypevr {@code{fifo-listener-configuration} parameter} string mode
16566 The access mode for the socket.
16567 Defaults to @samp{"0600"}.
16568 @end deftypevr
16569
16570 @deftypevr {@code{fifo-listener-configuration} parameter} string user
16571 The user to own the socket.
16572 Defaults to @samp{""}.
16573 @end deftypevr
16574
16575 @deftypevr {@code{fifo-listener-configuration} parameter} string group
16576 The group to own the socket.
16577 Defaults to @samp{""}.
16578 @end deftypevr
16579
16580
16581 Available @code{inet-listener-configuration} fields are:
16582
16583 @deftypevr {@code{inet-listener-configuration} parameter} string protocol
16584 The protocol to listen for.
16585 @end deftypevr
16586
16587 @deftypevr {@code{inet-listener-configuration} parameter} string address
16588 The address on which to listen, or empty for all addresses.
16589 Defaults to @samp{""}.
16590 @end deftypevr
16591
16592 @deftypevr {@code{inet-listener-configuration} parameter} non-negative-integer port
16593 The port on which to listen.
16594 @end deftypevr
16595
16596 @deftypevr {@code{inet-listener-configuration} parameter} boolean ssl?
16597 Whether to use SSL for this service; @samp{yes}, @samp{no}, or
16598 @samp{required}.
16599 Defaults to @samp{#t}.
16600 @end deftypevr
16601
16602 @end deftypevr
16603
16604 @deftypevr {@code{service-configuration} parameter} non-negative-integer client-limit
16605 Maximum number of simultaneous client connections per process. Once
16606 this number of connections is received, the next incoming connection
16607 will prompt Dovecot to spawn another process. If set to 0,
16608 @code{default-client-limit} is used instead.
16609
16610 Defaults to @samp{0}.
16611
16612 @end deftypevr
16613
16614 @deftypevr {@code{service-configuration} parameter} non-negative-integer service-count
16615 Number of connections to handle before starting a new process.
16616 Typically the only useful values are 0 (unlimited) or 1. 1 is more
16617 secure, but 0 is faster. <doc/wiki/LoginProcess.txt>.
16618 Defaults to @samp{1}.
16619
16620 @end deftypevr
16621
16622 @deftypevr {@code{service-configuration} parameter} non-negative-integer process-limit
16623 Maximum number of processes that can exist for this service. If set to
16624 0, @code{default-process-limit} is used instead.
16625
16626 Defaults to @samp{0}.
16627
16628 @end deftypevr
16629
16630 @deftypevr {@code{service-configuration} parameter} non-negative-integer process-min-avail
16631 Number of processes to always keep waiting for more connections.
16632 Defaults to @samp{0}.
16633 @end deftypevr
16634
16635 @deftypevr {@code{service-configuration} parameter} non-negative-integer vsz-limit
16636 If you set @samp{service-count 0}, you probably need to grow
16637 this.
16638 Defaults to @samp{256000000}.
16639 @end deftypevr
16640
16641 @end deftypevr
16642
16643 @deftypevr {@code{dovecot-configuration} parameter} dict-configuration dict
16644 Dict configuration, as created by the @code{dict-configuration}
16645 constructor.
16646
16647 Available @code{dict-configuration} fields are:
16648
16649 @deftypevr {@code{dict-configuration} parameter} free-form-fields entries
16650 A list of key-value pairs that this dict should hold.
16651 Defaults to @samp{()}.
16652 @end deftypevr
16653
16654 @end deftypevr
16655
16656 @deftypevr {@code{dovecot-configuration} parameter} passdb-configuration-list passdbs
16657 A list of passdb configurations, each one created by the
16658 @code{passdb-configuration} constructor.
16659
16660 Available @code{passdb-configuration} fields are:
16661
16662 @deftypevr {@code{passdb-configuration} parameter} string driver
16663 The driver that the passdb should use. Valid values include
16664 @samp{pam}, @samp{passwd}, @samp{shadow}, @samp{bsdauth}, and
16665 @samp{static}.
16666 Defaults to @samp{"pam"}.
16667 @end deftypevr
16668
16669 @deftypevr {@code{passdb-configuration} parameter} space-separated-string-list args
16670 Space separated list of arguments to the passdb driver.
16671 Defaults to @samp{""}.
16672 @end deftypevr
16673
16674 @end deftypevr
16675
16676 @deftypevr {@code{dovecot-configuration} parameter} userdb-configuration-list userdbs
16677 List of userdb configurations, each one created by the
16678 @code{userdb-configuration} constructor.
16679
16680 Available @code{userdb-configuration} fields are:
16681
16682 @deftypevr {@code{userdb-configuration} parameter} string driver
16683 The driver that the userdb should use. Valid values include
16684 @samp{passwd} and @samp{static}.
16685 Defaults to @samp{"passwd"}.
16686 @end deftypevr
16687
16688 @deftypevr {@code{userdb-configuration} parameter} space-separated-string-list args
16689 Space separated list of arguments to the userdb driver.
16690 Defaults to @samp{""}.
16691 @end deftypevr
16692
16693 @deftypevr {@code{userdb-configuration} parameter} free-form-args override-fields
16694 Override fields from passwd.
16695 Defaults to @samp{()}.
16696 @end deftypevr
16697
16698 @end deftypevr
16699
16700 @deftypevr {@code{dovecot-configuration} parameter} plugin-configuration plugin-configuration
16701 Plug-in configuration, created by the @code{plugin-configuration}
16702 constructor.
16703 @end deftypevr
16704
16705 @deftypevr {@code{dovecot-configuration} parameter} list-of-namespace-configuration namespaces
16706 List of namespaces. Each item in the list is created by the
16707 @code{namespace-configuration} constructor.
16708
16709 Available @code{namespace-configuration} fields are:
16710
16711 @deftypevr {@code{namespace-configuration} parameter} string name
16712 Name for this namespace.
16713 @end deftypevr
16714
16715 @deftypevr {@code{namespace-configuration} parameter} string type
16716 Namespace type: @samp{private}, @samp{shared} or @samp{public}.
16717 Defaults to @samp{"private"}.
16718 @end deftypevr
16719
16720 @deftypevr {@code{namespace-configuration} parameter} string separator
16721 Hierarchy separator to use. You should use the same separator for
16722 all namespaces or some clients get confused. @samp{/} is usually a good
16723 one. The default however depends on the underlying mail storage
16724 format.
16725 Defaults to @samp{""}.
16726 @end deftypevr
16727
16728 @deftypevr {@code{namespace-configuration} parameter} string prefix
16729 Prefix required to access this namespace. This needs to be
16730 different for all namespaces. For example @samp{Public/}.
16731 Defaults to @samp{""}.
16732 @end deftypevr
16733
16734 @deftypevr {@code{namespace-configuration} parameter} string location
16735 Physical location of the mailbox. This is in the same format as
16736 mail_location, which is also the default for it.
16737 Defaults to @samp{""}.
16738 @end deftypevr
16739
16740 @deftypevr {@code{namespace-configuration} parameter} boolean inbox?
16741 There can be only one INBOX, and this setting defines which
16742 namespace has it.
16743 Defaults to @samp{#f}.
16744 @end deftypevr
16745
16746 @deftypevr {@code{namespace-configuration} parameter} boolean hidden?
16747 If namespace is hidden, it's not advertised to clients via NAMESPACE
16748 extension. You'll most likely also want to set @samp{list? #f}. This is mostly
16749 useful when converting from another server with different namespaces
16750 which you want to deprecate but still keep working. For example you can
16751 create hidden namespaces with prefixes @samp{~/mail/}, @samp{~%u/mail/}
16752 and @samp{mail/}.
16753 Defaults to @samp{#f}.
16754 @end deftypevr
16755
16756 @deftypevr {@code{namespace-configuration} parameter} boolean list?
16757 Show the mailboxes under this namespace with the LIST command. This
16758 makes the namespace visible for clients that do not support the NAMESPACE
16759 extension. The special @code{children} value lists child mailboxes, but
16760 hides the namespace prefix.
16761 Defaults to @samp{#t}.
16762 @end deftypevr
16763
16764 @deftypevr {@code{namespace-configuration} parameter} boolean subscriptions?
16765 Namespace handles its own subscriptions. If set to @code{#f}, the
16766 parent namespace handles them. The empty prefix should always have this
16767 as @code{#t}).
16768 Defaults to @samp{#t}.
16769 @end deftypevr
16770
16771 @deftypevr {@code{namespace-configuration} parameter} mailbox-configuration-list mailboxes
16772 List of predefined mailboxes in this namespace.
16773 Defaults to @samp{()}.
16774
16775 Available @code{mailbox-configuration} fields are:
16776
16777 @deftypevr {@code{mailbox-configuration} parameter} string name
16778 Name for this mailbox.
16779 @end deftypevr
16780
16781 @deftypevr {@code{mailbox-configuration} parameter} string auto
16782 @samp{create} will automatically create this mailbox.
16783 @samp{subscribe} will both create and subscribe to the mailbox.
16784 Defaults to @samp{"no"}.
16785 @end deftypevr
16786
16787 @deftypevr {@code{mailbox-configuration} parameter} space-separated-string-list special-use
16788 List of IMAP @code{SPECIAL-USE} attributes as specified by RFC 6154.
16789 Valid values are @code{\All}, @code{\Archive}, @code{\Drafts},
16790 @code{\Flagged}, @code{\Junk}, @code{\Sent}, and @code{\Trash}.
16791 Defaults to @samp{()}.
16792 @end deftypevr
16793
16794 @end deftypevr
16795
16796 @end deftypevr
16797
16798 @deftypevr {@code{dovecot-configuration} parameter} file-name base-dir
16799 Base directory where to store runtime data.
16800 Defaults to @samp{"/var/run/dovecot/"}.
16801 @end deftypevr
16802
16803 @deftypevr {@code{dovecot-configuration} parameter} string login-greeting
16804 Greeting message for clients.
16805 Defaults to @samp{"Dovecot ready."}.
16806 @end deftypevr
16807
16808 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-trusted-networks
16809 List of trusted network ranges. Connections from these IPs are
16810 allowed to override their IP addresses and ports (for logging and for
16811 authentication checks). @samp{disable-plaintext-auth} is also ignored
16812 for these networks. Typically you would specify your IMAP proxy servers
16813 here.
16814 Defaults to @samp{()}.
16815 @end deftypevr
16816
16817 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-access-sockets
16818 List of login access check sockets (e.g.@: tcpwrap).
16819 Defaults to @samp{()}.
16820 @end deftypevr
16821
16822 @deftypevr {@code{dovecot-configuration} parameter} boolean verbose-proctitle?
16823 Show more verbose process titles (in ps). Currently shows user name
16824 and IP address. Useful for seeing who is actually using the IMAP
16825 processes (e.g.@: shared mailboxes or if the same uid is used for multiple
16826 accounts).
16827 Defaults to @samp{#f}.
16828 @end deftypevr
16829
16830 @deftypevr {@code{dovecot-configuration} parameter} boolean shutdown-clients?
16831 Should all processes be killed when Dovecot master process shuts down.
16832 Setting this to @code{#f} means that Dovecot can be upgraded without
16833 forcing existing client connections to close (although that could also
16834 be a problem if the upgrade is e.g.@: due to a security fix).
16835 Defaults to @samp{#t}.
16836 @end deftypevr
16837
16838 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer doveadm-worker-count
16839 If non-zero, run mail commands via this many connections to doveadm
16840 server, instead of running them directly in the same process.
16841 Defaults to @samp{0}.
16842 @end deftypevr
16843
16844 @deftypevr {@code{dovecot-configuration} parameter} string doveadm-socket-path
16845 UNIX socket or host:port used for connecting to doveadm server.
16846 Defaults to @samp{"doveadm-server"}.
16847 @end deftypevr
16848
16849 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list import-environment
16850 List of environment variables that are preserved on Dovecot startup
16851 and passed down to all of its child processes. You can also give
16852 key=value pairs to always set specific settings.
16853 @end deftypevr
16854
16855 @deftypevr {@code{dovecot-configuration} parameter} boolean disable-plaintext-auth?
16856 Disable LOGIN command and all other plaintext authentications unless
16857 SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
16858 matches the local IP (i.e.@: you're connecting from the same computer),
16859 the connection is considered secure and plaintext authentication is
16860 allowed. See also ssl=required setting.
16861 Defaults to @samp{#t}.
16862 @end deftypevr
16863
16864 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-cache-size
16865 Authentication cache size (e.g.@: @samp{#e10e6}). 0 means it's disabled.
16866 Note that bsdauth, PAM and vpopmail require @samp{cache-key} to be set
16867 for caching to be used.
16868 Defaults to @samp{0}.
16869 @end deftypevr
16870
16871 @deftypevr {@code{dovecot-configuration} parameter} string auth-cache-ttl
16872 Time to live for cached data. After TTL expires the cached record
16873 is no longer used, *except* if the main database lookup returns internal
16874 failure. We also try to handle password changes automatically: If
16875 user's previous authentication was successful, but this one wasn't, the
16876 cache isn't used. For now this works only with plaintext
16877 authentication.
16878 Defaults to @samp{"1 hour"}.
16879 @end deftypevr
16880
16881 @deftypevr {@code{dovecot-configuration} parameter} string auth-cache-negative-ttl
16882 TTL for negative hits (user not found, password mismatch).
16883 0 disables caching them completely.
16884 Defaults to @samp{"1 hour"}.
16885 @end deftypevr
16886
16887 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-realms
16888 List of realms for SASL authentication mechanisms that need them.
16889 You can leave it empty if you don't want to support multiple realms.
16890 Many clients simply use the first one listed here, so keep the default
16891 realm first.
16892 Defaults to @samp{()}.
16893 @end deftypevr
16894
16895 @deftypevr {@code{dovecot-configuration} parameter} string auth-default-realm
16896 Default realm/domain to use if none was specified. This is used for
16897 both SASL realms and appending @@domain to username in plaintext
16898 logins.
16899 Defaults to @samp{""}.
16900 @end deftypevr
16901
16902 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-chars
16903 List of allowed characters in username. If the user-given username
16904 contains a character not listed in here, the login automatically fails.
16905 This is just an extra check to make sure user can't exploit any
16906 potential quote escaping vulnerabilities with SQL/LDAP databases. If
16907 you want to allow all characters, set this value to empty.
16908 Defaults to @samp{"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@@"}.
16909 @end deftypevr
16910
16911 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-translation
16912 Username character translations before it's looked up from
16913 databases. The value contains series of from -> to characters. For
16914 example @samp{#@@/@@} means that @samp{#} and @samp{/} characters are
16915 translated to @samp{@@}.
16916 Defaults to @samp{""}.
16917 @end deftypevr
16918
16919 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-format
16920 Username formatting before it's looked up from databases. You can
16921 use the standard variables here, e.g.@: %Lu would lowercase the username,
16922 %n would drop away the domain if it was given, or @samp{%n-AT-%d} would
16923 change the @samp{@@} into @samp{-AT-}. This translation is done after
16924 @samp{auth-username-translation} changes.
16925 Defaults to @samp{"%Lu"}.
16926 @end deftypevr
16927
16928 @deftypevr {@code{dovecot-configuration} parameter} string auth-master-user-separator
16929 If you want to allow master users to log in by specifying the master
16930 username within the normal username string (i.e.@: not using SASL
16931 mechanism's support for it), you can specify the separator character
16932 here. The format is then <username><separator><master username>.
16933 UW-IMAP uses @samp{*} as the separator, so that could be a good
16934 choice.
16935 Defaults to @samp{""}.
16936 @end deftypevr
16937
16938 @deftypevr {@code{dovecot-configuration} parameter} string auth-anonymous-username
16939 Username to use for users logging in with ANONYMOUS SASL
16940 mechanism.
16941 Defaults to @samp{"anonymous"}.
16942 @end deftypevr
16943
16944 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-worker-max-count
16945 Maximum number of dovecot-auth worker processes. They're used to
16946 execute blocking passdb and userdb queries (e.g.@: MySQL and PAM).
16947 They're automatically created and destroyed as needed.
16948 Defaults to @samp{30}.
16949 @end deftypevr
16950
16951 @deftypevr {@code{dovecot-configuration} parameter} string auth-gssapi-hostname
16952 Host name to use in GSSAPI principal names. The default is to use
16953 the name returned by gethostname(). Use @samp{$ALL} (with quotes) to
16954 allow all keytab entries.
16955 Defaults to @samp{""}.
16956 @end deftypevr
16957
16958 @deftypevr {@code{dovecot-configuration} parameter} string auth-krb5-keytab
16959 Kerberos keytab to use for the GSSAPI mechanism. Will use the
16960 system default (usually @file{/etc/krb5.keytab}) if not specified. You may
16961 need to change the auth service to run as root to be able to read this
16962 file.
16963 Defaults to @samp{""}.
16964 @end deftypevr
16965
16966 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-use-winbind?
16967 Do NTLM and GSS-SPNEGO authentication using Samba's winbind daemon
16968 and @samp{ntlm-auth} helper.
16969 <doc/wiki/Authentication/Mechanisms/Winbind.txt>.
16970 Defaults to @samp{#f}.
16971 @end deftypevr
16972
16973 @deftypevr {@code{dovecot-configuration} parameter} file-name auth-winbind-helper-path
16974 Path for Samba's @samp{ntlm-auth} helper binary.
16975 Defaults to @samp{"/usr/bin/ntlm_auth"}.
16976 @end deftypevr
16977
16978 @deftypevr {@code{dovecot-configuration} parameter} string auth-failure-delay
16979 Time to delay before replying to failed authentications.
16980 Defaults to @samp{"2 secs"}.
16981 @end deftypevr
16982
16983 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-require-client-cert?
16984 Require a valid SSL client certificate or the authentication
16985 fails.
16986 Defaults to @samp{#f}.
16987 @end deftypevr
16988
16989 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-username-from-cert?
16990 Take the username from client's SSL certificate, using
16991 @code{X509_NAME_get_text_by_NID()} which returns the subject's DN's
16992 CommonName.
16993 Defaults to @samp{#f}.
16994 @end deftypevr
16995
16996 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-mechanisms
16997 List of wanted authentication mechanisms. Supported mechanisms are:
16998 @samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
16999 @samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
17000 @samp{otp}, @samp{skey}, and @samp{gss-spnego}. NOTE: See also
17001 @samp{disable-plaintext-auth} setting.
17002 @end deftypevr
17003
17004 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-servers
17005 List of IPs or hostnames to all director servers, including ourself.
17006 Ports can be specified as ip:port. The default port is the same as what
17007 director service's @samp{inet-listener} is using.
17008 Defaults to @samp{()}.
17009 @end deftypevr
17010
17011 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-mail-servers
17012 List of IPs or hostnames to all backend mail servers. Ranges are
17013 allowed too, like 10.0.0.10-10.0.0.30.
17014 Defaults to @samp{()}.
17015 @end deftypevr
17016
17017 @deftypevr {@code{dovecot-configuration} parameter} string director-user-expire
17018 How long to redirect users to a specific server after it no longer
17019 has any connections.
17020 Defaults to @samp{"15 min"}.
17021 @end deftypevr
17022
17023 @deftypevr {@code{dovecot-configuration} parameter} string director-username-hash
17024 How the username is translated before being hashed. Useful values
17025 include %Ln if user can log in with or without @@domain, %Ld if mailboxes
17026 are shared within domain.
17027 Defaults to @samp{"%Lu"}.
17028 @end deftypevr
17029
17030 @deftypevr {@code{dovecot-configuration} parameter} string log-path
17031 Log file to use for error messages. @samp{syslog} logs to syslog,
17032 @samp{/dev/stderr} logs to stderr.
17033 Defaults to @samp{"syslog"}.
17034 @end deftypevr
17035
17036 @deftypevr {@code{dovecot-configuration} parameter} string info-log-path
17037 Log file to use for informational messages. Defaults to
17038 @samp{log-path}.
17039 Defaults to @samp{""}.
17040 @end deftypevr
17041
17042 @deftypevr {@code{dovecot-configuration} parameter} string debug-log-path
17043 Log file to use for debug messages. Defaults to
17044 @samp{info-log-path}.
17045 Defaults to @samp{""}.
17046 @end deftypevr
17047
17048 @deftypevr {@code{dovecot-configuration} parameter} string syslog-facility
17049 Syslog facility to use if you're logging to syslog. Usually if you
17050 don't want to use @samp{mail}, you'll use local0..local7. Also other
17051 standard facilities are supported.
17052 Defaults to @samp{"mail"}.
17053 @end deftypevr
17054
17055 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose?
17056 Log unsuccessful authentication attempts and the reasons why they
17057 failed.
17058 Defaults to @samp{#f}.
17059 @end deftypevr
17060
17061 @deftypevr {@code{dovecot-configuration} parameter} string auth-verbose-passwords
17062 In case of password mismatches, log the attempted password. Valid
17063 values are no, plain and sha1. sha1 can be useful for detecting brute
17064 force password attempts vs. user simply trying the same password over
17065 and over again. You can also truncate the value to n chars by appending
17066 ":n" (e.g.@: sha1:6).
17067 Defaults to @samp{"no"}.
17068 @end deftypevr
17069
17070 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug?
17071 Even more verbose logging for debugging purposes. Shows for example
17072 SQL queries.
17073 Defaults to @samp{#f}.
17074 @end deftypevr
17075
17076 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug-passwords?
17077 In case of password mismatches, log the passwords and used scheme so
17078 the problem can be debugged. Enabling this also enables
17079 @samp{auth-debug}.
17080 Defaults to @samp{#f}.
17081 @end deftypevr
17082
17083 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-debug?
17084 Enable mail process debugging. This can help you figure out why
17085 Dovecot isn't finding your mails.
17086 Defaults to @samp{#f}.
17087 @end deftypevr
17088
17089 @deftypevr {@code{dovecot-configuration} parameter} boolean verbose-ssl?
17090 Show protocol level SSL errors.
17091 Defaults to @samp{#f}.
17092 @end deftypevr
17093
17094 @deftypevr {@code{dovecot-configuration} parameter} string log-timestamp
17095 Prefix for each line written to log file. % codes are in
17096 strftime(3) format.
17097 Defaults to @samp{"\"%b %d %H:%M:%S \""}.
17098 @end deftypevr
17099
17100 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-log-format-elements
17101 List of elements we want to log. The elements which have a
17102 non-empty variable value are joined together to form a comma-separated
17103 string.
17104 @end deftypevr
17105
17106 @deftypevr {@code{dovecot-configuration} parameter} string login-log-format
17107 Login log format. %s contains @samp{login-log-format-elements}
17108 string, %$ contains the data we want to log.
17109 Defaults to @samp{"%$: %s"}.
17110 @end deftypevr
17111
17112 @deftypevr {@code{dovecot-configuration} parameter} string mail-log-prefix
17113 Log prefix for mail processes. See doc/wiki/Variables.txt for list
17114 of possible variables you can use.
17115 Defaults to @samp{"\"%s(%u)<%@{pid@}><%@{session@}>: \""}.
17116 @end deftypevr
17117
17118 @deftypevr {@code{dovecot-configuration} parameter} string deliver-log-format
17119 Format to use for logging mail deliveries. You can use variables:
17120 @table @code
17121 @item %$
17122 Delivery status message (e.g.@: @samp{saved to INBOX})
17123 @item %m
17124 Message-ID
17125 @item %s
17126 Subject
17127 @item %f
17128 From address
17129 @item %p
17130 Physical size
17131 @item %w
17132 Virtual size.
17133 @end table
17134 Defaults to @samp{"msgid=%m: %$"}.
17135 @end deftypevr
17136
17137 @deftypevr {@code{dovecot-configuration} parameter} string mail-location
17138 Location for users' mailboxes. The default is empty, which means
17139 that Dovecot tries to find the mailboxes automatically. This won't work
17140 if the user doesn't yet have any mail, so you should explicitly tell
17141 Dovecot the full location.
17142
17143 If you're using mbox, giving a path to the INBOX
17144 file (e.g.@: /var/mail/%u) isn't enough. You'll also need to tell Dovecot
17145 where the other mailboxes are kept. This is called the "root mail
17146 directory", and it must be the first path given in the
17147 @samp{mail-location} setting.
17148
17149 There are a few special variables you can use, eg.:
17150
17151 @table @samp
17152 @item %u
17153 username
17154 @item %n
17155 user part in user@@domain, same as %u if there's no domain
17156 @item %d
17157 domain part in user@@domain, empty if there's no domain
17158 @item %h
17159 home director
17160 @end table
17161
17162 See doc/wiki/Variables.txt for full list. Some examples:
17163 @table @samp
17164 @item maildir:~/Maildir
17165 @item mbox:~/mail:INBOX=/var/mail/%u
17166 @item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
17167 @end table
17168 Defaults to @samp{""}.
17169 @end deftypevr
17170
17171 @deftypevr {@code{dovecot-configuration} parameter} string mail-uid
17172 System user and group used to access mails. If you use multiple,
17173 userdb can override these by returning uid or gid fields. You can use
17174 either numbers or names. <doc/wiki/UserIds.txt>.
17175 Defaults to @samp{""}.
17176 @end deftypevr
17177
17178 @deftypevr {@code{dovecot-configuration} parameter} string mail-gid
17179
17180 Defaults to @samp{""}.
17181 @end deftypevr
17182
17183 @deftypevr {@code{dovecot-configuration} parameter} string mail-privileged-group
17184 Group to enable temporarily for privileged operations. Currently
17185 this is used only with INBOX when either its initial creation or
17186 dotlocking fails. Typically this is set to "mail" to give access to
17187 /var/mail.
17188 Defaults to @samp{""}.
17189 @end deftypevr
17190
17191 @deftypevr {@code{dovecot-configuration} parameter} string mail-access-groups
17192 Grant access to these supplementary groups for mail processes.
17193 Typically these are used to set up access to shared mailboxes. Note
17194 that it may be dangerous to set these if users can create
17195 symlinks (e.g.@: if "mail" group is set here, ln -s /var/mail ~/mail/var
17196 could allow a user to delete others' mailboxes, or ln -s
17197 /secret/shared/box ~/mail/mybox would allow reading it).
17198 Defaults to @samp{""}.
17199 @end deftypevr
17200
17201 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-full-filesystem-access?
17202 Allow full file system access to clients. There's no access checks
17203 other than what the operating system does for the active UID/GID. It
17204 works with both maildir and mboxes, allowing you to prefix mailboxes
17205 names with e.g.@: /path/ or ~user/.
17206 Defaults to @samp{#f}.
17207 @end deftypevr
17208
17209 @deftypevr {@code{dovecot-configuration} parameter} boolean mmap-disable?
17210 Don't use mmap() at all. This is required if you store indexes to
17211 shared file systems (NFS or clustered file system).
17212 Defaults to @samp{#f}.
17213 @end deftypevr
17214
17215 @deftypevr {@code{dovecot-configuration} parameter} boolean dotlock-use-excl?
17216 Rely on @samp{O_EXCL} to work when creating dotlock files. NFS
17217 supports @samp{O_EXCL} since version 3, so this should be safe to use
17218 nowadays by default.
17219 Defaults to @samp{#t}.
17220 @end deftypevr
17221
17222 @deftypevr {@code{dovecot-configuration} parameter} string mail-fsync
17223 When to use fsync() or fdatasync() calls:
17224 @table @code
17225 @item optimized
17226 Whenever necessary to avoid losing important data
17227 @item always
17228 Useful with e.g.@: NFS when write()s are delayed
17229 @item never
17230 Never use it (best performance, but crashes can lose data).
17231 @end table
17232 Defaults to @samp{"optimized"}.
17233 @end deftypevr
17234
17235 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-storage?
17236 Mail storage exists in NFS. Set this to yes to make Dovecot flush
17237 NFS caches whenever needed. If you're using only a single mail server
17238 this isn't needed.
17239 Defaults to @samp{#f}.
17240 @end deftypevr
17241
17242 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-index?
17243 Mail index files also exist in NFS. Setting this to yes requires
17244 @samp{mmap-disable? #t} and @samp{fsync-disable? #f}.
17245 Defaults to @samp{#f}.
17246 @end deftypevr
17247
17248 @deftypevr {@code{dovecot-configuration} parameter} string lock-method
17249 Locking method for index files. Alternatives are fcntl, flock and
17250 dotlock. Dotlocking uses some tricks which may create more disk I/O
17251 than other locking methods. NFS users: flock doesn't work, remember to
17252 change @samp{mmap-disable}.
17253 Defaults to @samp{"fcntl"}.
17254 @end deftypevr
17255
17256 @deftypevr {@code{dovecot-configuration} parameter} file-name mail-temp-dir
17257 Directory in which LDA/LMTP temporarily stores incoming mails >128
17258 kB.
17259 Defaults to @samp{"/tmp"}.
17260 @end deftypevr
17261
17262 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-uid
17263 Valid UID range for users. This is mostly to make sure that users can't
17264 log in as daemons or other system users. Note that denying root logins is
17265 hardcoded to dovecot binary and can't be done even if @samp{first-valid-uid}
17266 is set to 0.
17267 Defaults to @samp{500}.
17268 @end deftypevr
17269
17270 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-uid
17271
17272 Defaults to @samp{0}.
17273 @end deftypevr
17274
17275 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-gid
17276 Valid GID range for users. Users having non-valid GID as primary group ID
17277 aren't allowed to log in. If user belongs to supplementary groups with
17278 non-valid GIDs, those groups are not set.
17279 Defaults to @samp{1}.
17280 @end deftypevr
17281
17282 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-gid
17283
17284 Defaults to @samp{0}.
17285 @end deftypevr
17286
17287 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-max-keyword-length
17288 Maximum allowed length for mail keyword name. It's only forced when
17289 trying to create new keywords.
17290 Defaults to @samp{50}.
17291 @end deftypevr
17292
17293 @deftypevr {@code{dovecot-configuration} parameter} colon-separated-file-name-list valid-chroot-dirs
17294 List of directories under which chrooting is allowed for mail
17295 processes (i.e.@: /var/mail will allow chrooting to /var/mail/foo/bar
17296 too). This setting doesn't affect @samp{login-chroot}
17297 @samp{mail-chroot} or auth chroot settings. If this setting is empty,
17298 "/./" in home dirs are ignored. WARNING: Never add directories here
17299 which local users can modify, that may lead to root exploit. Usually
17300 this should be done only if you don't allow shell access for users.
17301 <doc/wiki/Chrooting.txt>.
17302 Defaults to @samp{()}.
17303 @end deftypevr
17304
17305 @deftypevr {@code{dovecot-configuration} parameter} string mail-chroot
17306 Default chroot directory for mail processes. This can be overridden
17307 for specific users in user database by giving /./ in user's home
17308 directory (e.g.@: /home/./user chroots into /home). Note that usually
17309 there is no real need to do chrooting, Dovecot doesn't allow users to
17310 access files outside their mail directory anyway. If your home
17311 directories are prefixed with the chroot directory, append "/."@: to
17312 @samp{mail-chroot}. <doc/wiki/Chrooting.txt>.
17313 Defaults to @samp{""}.
17314 @end deftypevr
17315
17316 @deftypevr {@code{dovecot-configuration} parameter} file-name auth-socket-path
17317 UNIX socket path to master authentication server to find users.
17318 This is used by imap (for shared users) and lda.
17319 Defaults to @samp{"/var/run/dovecot/auth-userdb"}.
17320 @end deftypevr
17321
17322 @deftypevr {@code{dovecot-configuration} parameter} file-name mail-plugin-dir
17323 Directory where to look up mail plugins.
17324 Defaults to @samp{"/usr/lib/dovecot"}.
17325 @end deftypevr
17326
17327 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mail-plugins
17328 List of plugins to load for all services. Plugins specific to IMAP,
17329 LDA, etc.@: are added to this list in their own .conf files.
17330 Defaults to @samp{()}.
17331 @end deftypevr
17332
17333 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-cache-min-mail-count
17334 The minimum number of mails in a mailbox before updates are done to
17335 cache file. This allows optimizing Dovecot's behavior to do less disk
17336 writes at the cost of more disk reads.
17337 Defaults to @samp{0}.
17338 @end deftypevr
17339
17340 @deftypevr {@code{dovecot-configuration} parameter} string mailbox-idle-check-interval
17341 When IDLE command is running, mailbox is checked once in a while to
17342 see if there are any new mails or other changes. This setting defines
17343 the minimum time to wait between those checks. Dovecot can also use
17344 dnotify, inotify and kqueue to find out immediately when changes
17345 occur.
17346 Defaults to @samp{"30 secs"}.
17347 @end deftypevr
17348
17349 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-save-crlf?
17350 Save mails with CR+LF instead of plain LF. This makes sending those
17351 mails take less CPU, especially with sendfile() syscall with Linux and
17352 FreeBSD. But it also creates a bit more disk I/O which may just make it
17353 slower. Also note that if other software reads the mboxes/maildirs,
17354 they may handle the extra CRs wrong and cause problems.
17355 Defaults to @samp{#f}.
17356 @end deftypevr
17357
17358 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-stat-dirs?
17359 By default LIST command returns all entries in maildir beginning
17360 with a dot. Enabling this option makes Dovecot return only entries
17361 which are directories. This is done by stat()ing each entry, so it
17362 causes more disk I/O.
17363 (For systems setting struct @samp{dirent->d_type} this check is free
17364 and it's done always regardless of this setting).
17365 Defaults to @samp{#f}.
17366 @end deftypevr
17367
17368 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-copy-with-hardlinks?
17369 When copying a message, do it with hard links whenever possible.
17370 This makes the performance much better, and it's unlikely to have any
17371 side effects.
17372 Defaults to @samp{#t}.
17373 @end deftypevr
17374
17375 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-very-dirty-syncs?
17376 Assume Dovecot is the only MUA accessing Maildir: Scan cur/
17377 directory only when its mtime changes unexpectedly or when we can't find
17378 the mail otherwise.
17379 Defaults to @samp{#f}.
17380 @end deftypevr
17381
17382 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-read-locks
17383 Which locking methods to use for locking mbox. There are four
17384 available:
17385
17386 @table @code
17387 @item dotlock
17388 Create <mailbox>.lock file. This is the oldest and most NFS-safe
17389 solution. If you want to use /var/mail/ like directory, the users will
17390 need write access to that directory.
17391 @item dotlock-try
17392 Same as dotlock, but if it fails because of permissions or because there
17393 isn't enough disk space, just skip it.
17394 @item fcntl
17395 Use this if possible. Works with NFS too if lockd is used.
17396 @item flock
17397 May not exist in all systems. Doesn't work with NFS.
17398 @item lockf
17399 May not exist in all systems. Doesn't work with NFS.
17400 @end table
17401
17402 You can use multiple locking methods; if you do the order they're declared
17403 in is important to avoid deadlocks if other MTAs/MUAs are using multiple
17404 locking methods as well. Some operating systems don't allow using some of
17405 them simultaneously.
17406 @end deftypevr
17407
17408 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-write-locks
17409
17410 @end deftypevr
17411
17412 @deftypevr {@code{dovecot-configuration} parameter} string mbox-lock-timeout
17413 Maximum time to wait for lock (all of them) before aborting.
17414 Defaults to @samp{"5 mins"}.
17415 @end deftypevr
17416
17417 @deftypevr {@code{dovecot-configuration} parameter} string mbox-dotlock-change-timeout
17418 If dotlock exists but the mailbox isn't modified in any way,
17419 override the lock file after this much time.
17420 Defaults to @samp{"2 mins"}.
17421 @end deftypevr
17422
17423 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-dirty-syncs?
17424 When mbox changes unexpectedly we have to fully read it to find out
17425 what changed. If the mbox is large this can take a long time. Since
17426 the change is usually just a newly appended mail, it'd be faster to
17427 simply read the new mails. If this setting is enabled, Dovecot does
17428 this but still safely fallbacks to re-reading the whole mbox file
17429 whenever something in mbox isn't how it's expected to be. The only real
17430 downside to this setting is that if some other MUA changes message
17431 flags, Dovecot doesn't notice it immediately. Note that a full sync is
17432 done with SELECT, EXAMINE, EXPUNGE and CHECK commands.
17433 Defaults to @samp{#t}.
17434 @end deftypevr
17435
17436 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-very-dirty-syncs?
17437 Like @samp{mbox-dirty-syncs}, but don't do full syncs even with SELECT,
17438 EXAMINE, EXPUNGE or CHECK commands. If this is set,
17439 @samp{mbox-dirty-syncs} is ignored.
17440 Defaults to @samp{#f}.
17441 @end deftypevr
17442
17443 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-lazy-writes?
17444 Delay writing mbox headers until doing a full write sync (EXPUNGE
17445 and CHECK commands and when closing the mailbox). This is especially
17446 useful for POP3 where clients often delete all mails. The downside is
17447 that our changes aren't immediately visible to other MUAs.
17448 Defaults to @samp{#t}.
17449 @end deftypevr
17450
17451 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mbox-min-index-size
17452 If mbox size is smaller than this (e.g.@: 100k), don't write index
17453 files. If an index file already exists it's still read, just not
17454 updated.
17455 Defaults to @samp{0}.
17456 @end deftypevr
17457
17458 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mdbox-rotate-size
17459 Maximum dbox file size until it's rotated.
17460 Defaults to @samp{10000000}.
17461 @end deftypevr
17462
17463 @deftypevr {@code{dovecot-configuration} parameter} string mdbox-rotate-interval
17464 Maximum dbox file age until it's rotated. Typically in days. Day
17465 begins from midnight, so 1d = today, 2d = yesterday, etc. 0 = check
17466 disabled.
17467 Defaults to @samp{"1d"}.
17468 @end deftypevr
17469
17470 @deftypevr {@code{dovecot-configuration} parameter} boolean mdbox-preallocate-space?
17471 When creating new mdbox files, immediately preallocate their size to
17472 @samp{mdbox-rotate-size}. This setting currently works only in Linux
17473 with some file systems (ext4, xfs).
17474 Defaults to @samp{#f}.
17475 @end deftypevr
17476
17477 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-dir
17478 sdbox and mdbox support saving mail attachments to external files,
17479 which also allows single instance storage for them. Other backends
17480 don't support this for now.
17481
17482 WARNING: This feature hasn't been tested much yet. Use at your own risk.
17483
17484 Directory root where to store mail attachments. Disabled, if empty.
17485 Defaults to @samp{""}.
17486 @end deftypevr
17487
17488 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-attachment-min-size
17489 Attachments smaller than this aren't saved externally. It's also
17490 possible to write a plugin to disable saving specific attachments
17491 externally.
17492 Defaults to @samp{128000}.
17493 @end deftypevr
17494
17495 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-fs
17496 File system backend to use for saving attachments:
17497 @table @code
17498 @item posix
17499 No SiS done by Dovecot (but this might help FS's own deduplication)
17500 @item sis posix
17501 SiS with immediate byte-by-byte comparison during saving
17502 @item sis-queue posix
17503 SiS with delayed comparison and deduplication.
17504 @end table
17505 Defaults to @samp{"sis posix"}.
17506 @end deftypevr
17507
17508 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-hash
17509 Hash format to use in attachment filenames. You can add any text and
17510 variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}},
17511 @code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}. Variables can be
17512 truncated, e.g.@: @code{%@{sha256:80@}} returns only first 80 bits.
17513 Defaults to @samp{"%@{sha1@}"}.
17514 @end deftypevr
17515
17516 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-process-limit
17517
17518 Defaults to @samp{100}.
17519 @end deftypevr
17520
17521 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-client-limit
17522
17523 Defaults to @samp{1000}.
17524 @end deftypevr
17525
17526 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-vsz-limit
17527 Default VSZ (virtual memory size) limit for service processes.
17528 This is mainly intended to catch and kill processes that leak memory
17529 before they eat up everything.
17530 Defaults to @samp{256000000}.
17531 @end deftypevr
17532
17533 @deftypevr {@code{dovecot-configuration} parameter} string default-login-user
17534 Login user is internally used by login processes. This is the most
17535 untrusted user in Dovecot system. It shouldn't have access to anything
17536 at all.
17537 Defaults to @samp{"dovenull"}.
17538 @end deftypevr
17539
17540 @deftypevr {@code{dovecot-configuration} parameter} string default-internal-user
17541 Internal user is used by unprivileged processes. It should be
17542 separate from login user, so that login processes can't disturb other
17543 processes.
17544 Defaults to @samp{"dovecot"}.
17545 @end deftypevr
17546
17547 @deftypevr {@code{dovecot-configuration} parameter} string ssl?
17548 SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>.
17549 Defaults to @samp{"required"}.
17550 @end deftypevr
17551
17552 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cert
17553 PEM encoded X.509 SSL/TLS certificate (public key).
17554 Defaults to @samp{"</etc/dovecot/default.pem"}.
17555 @end deftypevr
17556
17557 @deftypevr {@code{dovecot-configuration} parameter} string ssl-key
17558 PEM encoded SSL/TLS private key. The key is opened before
17559 dropping root privileges, so keep the key file unreadable by anyone but
17560 root.
17561 Defaults to @samp{"</etc/dovecot/private/default.pem"}.
17562 @end deftypevr
17563
17564 @deftypevr {@code{dovecot-configuration} parameter} string ssl-key-password
17565 If key file is password protected, give the password here.
17566 Alternatively give it when starting dovecot with -p parameter. Since
17567 this file is often world-readable, you may want to place this setting
17568 instead to a different.
17569 Defaults to @samp{""}.
17570 @end deftypevr
17571
17572 @deftypevr {@code{dovecot-configuration} parameter} string ssl-ca
17573 PEM encoded trusted certificate authority. Set this only if you
17574 intend to use @samp{ssl-verify-client-cert? #t}. The file should
17575 contain the CA certificate(s) followed by the matching
17576 CRL(s). (e.g.@: @samp{ssl-ca </etc/ssl/certs/ca.pem}).
17577 Defaults to @samp{""}.
17578 @end deftypevr
17579
17580 @deftypevr {@code{dovecot-configuration} parameter} boolean ssl-require-crl?
17581 Require that CRL check succeeds for client certificates.
17582 Defaults to @samp{#t}.
17583 @end deftypevr
17584
17585 @deftypevr {@code{dovecot-configuration} parameter} boolean ssl-verify-client-cert?
17586 Request client to send a certificate. If you also want to require
17587 it, set @samp{auth-ssl-require-client-cert? #t} in auth section.
17588 Defaults to @samp{#f}.
17589 @end deftypevr
17590
17591 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cert-username-field
17592 Which field from certificate to use for username. commonName and
17593 x500UniqueIdentifier are the usual choices. You'll also need to set
17594 @samp{auth-ssl-username-from-cert? #t}.
17595 Defaults to @samp{"commonName"}.
17596 @end deftypevr
17597
17598 @deftypevr {@code{dovecot-configuration} parameter} string ssl-min-protocol
17599 Minimum SSL protocol version to accept.
17600 Defaults to @samp{"TLSv1"}.
17601 @end deftypevr
17602
17603 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cipher-list
17604 SSL ciphers to use.
17605 Defaults to @samp{"ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@@STRENGTH"}.
17606 @end deftypevr
17607
17608 @deftypevr {@code{dovecot-configuration} parameter} string ssl-crypto-device
17609 SSL crypto device to use, for valid values run "openssl engine".
17610 Defaults to @samp{""}.
17611 @end deftypevr
17612
17613 @deftypevr {@code{dovecot-configuration} parameter} string postmaster-address
17614 Address to use when sending rejection mails.
17615 %d expands to recipient domain.
17616 Defaults to @samp{"postmaster@@%d"}.
17617 @end deftypevr
17618
17619 @deftypevr {@code{dovecot-configuration} parameter} string hostname
17620 Hostname to use in various parts of sent mails (e.g.@: in Message-Id)
17621 and in LMTP replies. Default is the system's real hostname@@domain.
17622 Defaults to @samp{""}.
17623 @end deftypevr
17624
17625 @deftypevr {@code{dovecot-configuration} parameter} boolean quota-full-tempfail?
17626 If user is over quota, return with temporary failure instead of
17627 bouncing the mail.
17628 Defaults to @samp{#f}.
17629 @end deftypevr
17630
17631 @deftypevr {@code{dovecot-configuration} parameter} file-name sendmail-path
17632 Binary to use for sending mails.
17633 Defaults to @samp{"/usr/sbin/sendmail"}.
17634 @end deftypevr
17635
17636 @deftypevr {@code{dovecot-configuration} parameter} string submission-host
17637 If non-empty, send mails via this SMTP host[:port] instead of
17638 sendmail.
17639 Defaults to @samp{""}.
17640 @end deftypevr
17641
17642 @deftypevr {@code{dovecot-configuration} parameter} string rejection-subject
17643 Subject: header to use for rejection mails. You can use the same
17644 variables as for @samp{rejection-reason} below.
17645 Defaults to @samp{"Rejected: %s"}.
17646 @end deftypevr
17647
17648 @deftypevr {@code{dovecot-configuration} parameter} string rejection-reason
17649 Human readable error message for rejection mails. You can use
17650 variables:
17651
17652 @table @code
17653 @item %n
17654 CRLF
17655 @item %r
17656 reason
17657 @item %s
17658 original subject
17659 @item %t
17660 recipient
17661 @end table
17662 Defaults to @samp{"Your message to <%t> was automatically rejected:%n%r"}.
17663 @end deftypevr
17664
17665 @deftypevr {@code{dovecot-configuration} parameter} string recipient-delimiter
17666 Delimiter character between local-part and detail in email
17667 address.
17668 Defaults to @samp{"+"}.
17669 @end deftypevr
17670
17671 @deftypevr {@code{dovecot-configuration} parameter} string lda-original-recipient-header
17672 Header where the original recipient address (SMTP's RCPT TO:
17673 address) is taken from if not available elsewhere. With dovecot-lda -a
17674 parameter overrides this. A commonly used header for this is
17675 X-Original-To.
17676 Defaults to @samp{""}.
17677 @end deftypevr
17678
17679 @deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autocreate?
17680 Should saving a mail to a nonexistent mailbox automatically create
17681 it?.
17682 Defaults to @samp{#f}.
17683 @end deftypevr
17684
17685 @deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autosubscribe?
17686 Should automatically created mailboxes be also automatically
17687 subscribed?.
17688 Defaults to @samp{#f}.
17689 @end deftypevr
17690
17691 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer imap-max-line-length
17692 Maximum IMAP command line length. Some clients generate very long
17693 command lines with huge mailboxes, so you may need to raise this if you
17694 get "Too long argument" or "IMAP command line too large" errors
17695 often.
17696 Defaults to @samp{64000}.
17697 @end deftypevr
17698
17699 @deftypevr {@code{dovecot-configuration} parameter} string imap-logout-format
17700 IMAP logout format string:
17701 @table @code
17702 @item %i
17703 total number of bytes read from client
17704 @item %o
17705 total number of bytes sent to client.
17706 @end table
17707 See @file{doc/wiki/Variables.txt} for a list of all the variables you can use.
17708 Defaults to @samp{"in=%i out=%o deleted=%@{deleted@} expunged=%@{expunged@} trashed=%@{trashed@} hdr_count=%@{fetch_hdr_count@} hdr_bytes=%@{fetch_hdr_bytes@} body_count=%@{fetch_body_count@} body_bytes=%@{fetch_body_bytes@}"}.
17709 @end deftypevr
17710
17711 @deftypevr {@code{dovecot-configuration} parameter} string imap-capability
17712 Override the IMAP CAPABILITY response. If the value begins with '+',
17713 add the given capabilities on top of the defaults (e.g.@: +XFOO XBAR).
17714 Defaults to @samp{""}.
17715 @end deftypevr
17716
17717 @deftypevr {@code{dovecot-configuration} parameter} string imap-idle-notify-interval
17718 How long to wait between "OK Still here" notifications when client
17719 is IDLEing.
17720 Defaults to @samp{"2 mins"}.
17721 @end deftypevr
17722
17723 @deftypevr {@code{dovecot-configuration} parameter} string imap-id-send
17724 ID field names and values to send to clients. Using * as the value
17725 makes Dovecot use the default value. The following fields have default
17726 values currently: name, version, os, os-version, support-url,
17727 support-email.
17728 Defaults to @samp{""}.
17729 @end deftypevr
17730
17731 @deftypevr {@code{dovecot-configuration} parameter} string imap-id-log
17732 ID fields sent by client to log. * means everything.
17733 Defaults to @samp{""}.
17734 @end deftypevr
17735
17736 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list imap-client-workarounds
17737 Workarounds for various client bugs:
17738
17739 @table @code
17740 @item delay-newmail
17741 Send EXISTS/RECENT new mail notifications only when replying to NOOP and
17742 CHECK commands. Some clients ignore them otherwise, for example OSX
17743 Mail (<v2.1). Outlook Express breaks more badly though, without this it
17744 may show user "Message no longer in server" errors. Note that OE6
17745 still breaks even with this workaround if synchronization is set to
17746 "Headers Only".
17747
17748 @item tb-extra-mailbox-sep
17749 Thunderbird gets somehow confused with LAYOUT=fs (mbox and dbox) and
17750 adds extra @samp{/} suffixes to mailbox names. This option causes Dovecot to
17751 ignore the extra @samp{/} instead of treating it as invalid mailbox name.
17752
17753 @item tb-lsub-flags
17754 Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g.@: mbox).
17755 This makes Thunderbird realize they aren't selectable and show them
17756 greyed out, instead of only later giving "not selectable" popup error.
17757 @end table
17758 Defaults to @samp{()}.
17759 @end deftypevr
17760
17761 @deftypevr {@code{dovecot-configuration} parameter} string imap-urlauth-host
17762 Host allowed in URLAUTH URLs sent by client. "*" allows all.
17763 Defaults to @samp{""}.
17764 @end deftypevr
17765
17766
17767 Whew! Lots of configuration options. The nice thing about it though is
17768 that Guix has a complete interface to Dovecot's configuration
17769 language. This allows not only a nice way to declare configurations,
17770 but also offers reflective capabilities as well: users can write code to
17771 inspect and transform configurations from within Scheme.
17772
17773 However, it could be that you just want to get a @code{dovecot.conf} up
17774 and running. In that case, you can pass an
17775 @code{opaque-dovecot-configuration} as the @code{#:config} parameter to
17776 @code{dovecot-service}. As its name indicates, an opaque configuration
17777 does not have easy reflective capabilities.
17778
17779 Available @code{opaque-dovecot-configuration} fields are:
17780
17781 @deftypevr {@code{opaque-dovecot-configuration} parameter} package dovecot
17782 The dovecot package.
17783 @end deftypevr
17784
17785 @deftypevr {@code{opaque-dovecot-configuration} parameter} string string
17786 The contents of the @code{dovecot.conf}, as a string.
17787 @end deftypevr
17788
17789 For example, if your @code{dovecot.conf} is just the empty string, you
17790 could instantiate a dovecot service like this:
17791
17792 @lisp
17793 (dovecot-service #:config
17794 (opaque-dovecot-configuration
17795 (string "")))
17796 @end lisp
17797
17798 @subsubheading OpenSMTPD Service
17799
17800 @deffn {Scheme Variable} opensmtpd-service-type
17801 This is the type of the @uref{https://www.opensmtpd.org, OpenSMTPD}
17802 service, whose value should be an @code{opensmtpd-configuration} object
17803 as in this example:
17804
17805 @lisp
17806 (service opensmtpd-service-type
17807 (opensmtpd-configuration
17808 (config-file (local-file "./my-smtpd.conf"))))
17809 @end lisp
17810 @end deffn
17811
17812 @deftp {Data Type} opensmtpd-configuration
17813 Data type representing the configuration of opensmtpd.
17814
17815 @table @asis
17816 @item @code{package} (default: @var{opensmtpd})
17817 Package object of the OpenSMTPD SMTP server.
17818
17819 @item @code{config-file} (default: @code{%default-opensmtpd-file})
17820 File-like object of the OpenSMTPD configuration file to use. By default
17821 it listens on the loopback network interface, and allows for mail from
17822 users and daemons on the local machine, as well as permitting email to
17823 remote servers. Run @command{man smtpd.conf} for more information.
17824
17825 @end table
17826 @end deftp
17827
17828 @subsubheading Exim Service
17829
17830 @cindex mail transfer agent (MTA)
17831 @cindex MTA (mail transfer agent)
17832 @cindex SMTP
17833
17834 @deffn {Scheme Variable} exim-service-type
17835 This is the type of the @uref{https://exim.org, Exim} mail transfer
17836 agent (MTA), whose value should be an @code{exim-configuration} object
17837 as in this example:
17838
17839 @lisp
17840 (service exim-service-type
17841 (exim-configuration
17842 (config-file (local-file "./my-exim.conf"))))
17843 @end lisp
17844 @end deffn
17845
17846 In order to use an @code{exim-service-type} service you must also have a
17847 @code{mail-aliases-service-type} service present in your
17848 @code{operating-system} (even if it has no aliases).
17849
17850 @deftp {Data Type} exim-configuration
17851 Data type representing the configuration of exim.
17852
17853 @table @asis
17854 @item @code{package} (default: @var{exim})
17855 Package object of the Exim server.
17856
17857 @item @code{config-file} (default: @code{#f})
17858 File-like object of the Exim configuration file to use. If its value is
17859 @code{#f} then use the default configuration file from the package
17860 provided in @code{package}. The resulting configuration file is loaded
17861 after setting the @code{exim_user} and @code{exim_group} configuration
17862 variables.
17863
17864 @end table
17865 @end deftp
17866
17867 @subsubheading Getmail service
17868
17869 @cindex IMAP
17870 @cindex POP
17871
17872 @deffn {Scheme Variable} getmail-service-type
17873 This is the type of the @uref{http://pyropus.ca/software/getmail/, Getmail}
17874 mail retriever, whose value should be an @code{getmail-configuration}.
17875 @end deffn
17876
17877 Available @code{getmail-configuration} fields are:
17878
17879 @deftypevr {@code{getmail-configuration} parameter} symbol name
17880 A symbol to identify the getmail service.
17881
17882 Defaults to @samp{"unset"}.
17883
17884 @end deftypevr
17885
17886 @deftypevr {@code{getmail-configuration} parameter} package package
17887 The getmail package to use.
17888
17889 @end deftypevr
17890
17891 @deftypevr {@code{getmail-configuration} parameter} string user
17892 The user to run getmail as.
17893
17894 Defaults to @samp{"getmail"}.
17895
17896 @end deftypevr
17897
17898 @deftypevr {@code{getmail-configuration} parameter} string group
17899 The group to run getmail as.
17900
17901 Defaults to @samp{"getmail"}.
17902
17903 @end deftypevr
17904
17905 @deftypevr {@code{getmail-configuration} parameter} string directory
17906 The getmail directory to use.
17907
17908 Defaults to @samp{"/var/lib/getmail/default"}.
17909
17910 @end deftypevr
17911
17912 @deftypevr {@code{getmail-configuration} parameter} getmail-configuration-file rcfile
17913 The getmail configuration file to use.
17914
17915 Available @code{getmail-configuration-file} fields are:
17916
17917 @deftypevr {@code{getmail-configuration-file} parameter} getmail-retriever-configuration retriever
17918 What mail account to retrieve mail from, and how to access that account.
17919
17920 Available @code{getmail-retriever-configuration} fields are:
17921
17922 @deftypevr {@code{getmail-retriever-configuration} parameter} string type
17923 The type of mail retriever to use. Valid values include @samp{passwd}
17924 and @samp{static}.
17925
17926 Defaults to @samp{"SimpleIMAPSSLRetriever"}.
17927
17928 @end deftypevr
17929
17930 @deftypevr {@code{getmail-retriever-configuration} parameter} string server
17931 Username to login to the mail server with.
17932
17933 Defaults to @samp{unset}.
17934
17935 @end deftypevr
17936
17937 @deftypevr {@code{getmail-retriever-configuration} parameter} string username
17938 Username to login to the mail server with.
17939
17940 Defaults to @samp{unset}.
17941
17942 @end deftypevr
17943
17944 @deftypevr {@code{getmail-retriever-configuration} parameter} non-negative-integer port
17945 Port number to connect to.
17946
17947 Defaults to @samp{#f}.
17948
17949 @end deftypevr
17950
17951 @deftypevr {@code{getmail-retriever-configuration} parameter} string password
17952 Override fields from passwd.
17953
17954 Defaults to @samp{""}.
17955
17956 @end deftypevr
17957
17958 @deftypevr {@code{getmail-retriever-configuration} parameter} list password-command
17959 Override fields from passwd.
17960
17961 Defaults to @samp{()}.
17962
17963 @end deftypevr
17964
17965 @deftypevr {@code{getmail-retriever-configuration} parameter} string keyfile
17966 PEM-formatted key file to use for the TLS negotiation.
17967
17968 Defaults to @samp{""}.
17969
17970 @end deftypevr
17971
17972 @deftypevr {@code{getmail-retriever-configuration} parameter} string certfile
17973 PEM-formatted certificate file to use for the TLS negotiation.
17974
17975 Defaults to @samp{""}.
17976
17977 @end deftypevr
17978
17979 @deftypevr {@code{getmail-retriever-configuration} parameter} string ca-certs
17980 CA certificates to use.
17981
17982 Defaults to @samp{""}.
17983
17984 @end deftypevr
17985
17986 @deftypevr {@code{getmail-retriever-configuration} parameter} parameter-alist extra-parameters
17987 Extra retriever parameters.
17988
17989 Defaults to @samp{()}.
17990
17991 @end deftypevr
17992
17993 @end deftypevr
17994
17995 @deftypevr {@code{getmail-configuration-file} parameter} getmail-destination-configuration destination
17996 What to do with retrieved messages.
17997
17998 Available @code{getmail-destination-configuration} fields are:
17999
18000 @deftypevr {@code{getmail-destination-configuration} parameter} string type
18001 The type of mail destination. Valid values include @samp{Maildir},
18002 @samp{Mboxrd} and @samp{MDA_external}.
18003
18004 Defaults to @samp{unset}.
18005
18006 @end deftypevr
18007
18008 @deftypevr {@code{getmail-destination-configuration} parameter} string-or-filelike path
18009 The path option for the mail destination. The behaviour depends on the
18010 chosen type.
18011
18012 Defaults to @samp{""}.
18013
18014 @end deftypevr
18015
18016 @deftypevr {@code{getmail-destination-configuration} parameter} parameter-alist extra-parameters
18017 Extra destination parameters
18018
18019 Defaults to @samp{()}.
18020
18021 @end deftypevr
18022
18023 @end deftypevr
18024
18025 @deftypevr {@code{getmail-configuration-file} parameter} getmail-options-configuration options
18026 Configure getmail.
18027
18028 Available @code{getmail-options-configuration} fields are:
18029
18030 @deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer verbose
18031 If set to @samp{0}, getmail will only print warnings and errors. A
18032 value of @samp{1} means that messages will be printed about retrieving
18033 and deleting messages. If set to @samp{2}, getmail will print messages
18034 about each of it's actions.
18035
18036 Defaults to @samp{1}.
18037
18038 @end deftypevr
18039
18040 @deftypevr {@code{getmail-options-configuration} parameter} boolean read-all
18041 If true, getmail will retrieve all available messages. Otherwise it
18042 will only retrieve messages it hasn't seen previously.
18043
18044 Defaults to @samp{#t}.
18045
18046 @end deftypevr
18047
18048 @deftypevr {@code{getmail-options-configuration} parameter} boolean delete
18049 If set to true, messages will be deleted from the server after
18050 retrieving and successfully delivering them. Otherwise, messages will
18051 be left on the server.
18052
18053 Defaults to @samp{#f}.
18054
18055 @end deftypevr
18056
18057 @deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer delete-after
18058 Getmail will delete messages this number of days after seeing them, if
18059 they have been delivered. This means messages will be left on the
18060 server this number of days after delivering them. A value of @samp{0}
18061 disabled this feature.
18062
18063 Defaults to @samp{0}.
18064
18065 @end deftypevr
18066
18067 @deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer delete-bigger-than
18068 Delete messages larger than this of bytes after retrieving them, even if
18069 the delete and delete-after options are disabled. A value of @samp{0}
18070 disables this feature.
18071
18072 Defaults to @samp{0}.
18073
18074 @end deftypevr
18075
18076 @deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer max-bytes-per-session
18077 Retrieve messages totalling up to this number of bytes before closing
18078 the session with the server. A value of @samp{0} disables this feature.
18079
18080 Defaults to @samp{0}.
18081
18082 @end deftypevr
18083
18084 @deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer max-message-size
18085 Don't retrieve messages larger than this number of bytes. A value of
18086 @samp{0} disables this feature.
18087
18088 Defaults to @samp{0}.
18089
18090 @end deftypevr
18091
18092 @deftypevr {@code{getmail-options-configuration} parameter} boolean delivered-to
18093 If true, getmail will add a Delivered-To header to messages.
18094
18095 Defaults to @samp{#t}.
18096
18097 @end deftypevr
18098
18099 @deftypevr {@code{getmail-options-configuration} parameter} boolean received
18100 If set, getmail adds a Received header to the messages.
18101
18102 Defaults to @samp{#t}.
18103
18104 @end deftypevr
18105
18106 @deftypevr {@code{getmail-options-configuration} parameter} string message-log
18107 Getmail will record a log of its actions to the named file. A value of
18108 @samp{""} disables this feature.
18109
18110 Defaults to @samp{""}.
18111
18112 @end deftypevr
18113
18114 @deftypevr {@code{getmail-options-configuration} parameter} boolean message-log-syslog
18115 If true, getmail will record a log of its actions using the system
18116 logger.
18117
18118 Defaults to @samp{#f}.
18119
18120 @end deftypevr
18121
18122 @deftypevr {@code{getmail-options-configuration} parameter} boolean message-log-verbose
18123 If true, getmail will log information about messages not retrieved and
18124 the reason for not retrieving them, as well as starting and ending
18125 information lines.
18126
18127 Defaults to @samp{#f}.
18128
18129 @end deftypevr
18130
18131 @deftypevr {@code{getmail-options-configuration} parameter} parameter-alist extra-parameters
18132 Extra options to include.
18133
18134 Defaults to @samp{()}.
18135
18136 @end deftypevr
18137
18138 @end deftypevr
18139
18140 @end deftypevr
18141
18142 @deftypevr {@code{getmail-configuration} parameter} list idle
18143 A list of mailboxes that getmail should wait on the server for new mail
18144 notifications. This depends on the server supporting the IDLE
18145 extension.
18146
18147 Defaults to @samp{()}.
18148
18149 @end deftypevr
18150
18151 @deftypevr {@code{getmail-configuration} parameter} list environment-variables
18152 Environment variables to set for getmail.
18153
18154 Defaults to @samp{()}.
18155
18156 @end deftypevr
18157
18158 @subsubheading Mail Aliases Service
18159
18160 @cindex email aliases
18161 @cindex aliases, for email addresses
18162
18163 @deffn {Scheme Variable} mail-aliases-service-type
18164 This is the type of the service which provides @code{/etc/aliases},
18165 specifying how to deliver mail to users on this system.
18166
18167 @lisp
18168 (service mail-aliases-service-type
18169 '(("postmaster" "bob")
18170 ("bob" "bob@@example.com" "bob@@example2.com")))
18171 @end lisp
18172 @end deffn
18173
18174 The configuration for a @code{mail-aliases-service-type} service is an
18175 association list denoting how to deliver mail that comes to this
18176 system. Each entry is of the form @code{(alias addresses ...)}, with
18177 @code{alias} specifying the local alias and @code{addresses} specifying
18178 where to deliver this user's mail.
18179
18180 The aliases aren't required to exist as users on the local system. In
18181 the above example, there doesn't need to be a @code{postmaster} entry in
18182 the @code{operating-system}'s @code{user-accounts} in order to deliver
18183 the @code{postmaster} mail to @code{bob} (which subsequently would
18184 deliver mail to @code{bob@@example.com} and @code{bob@@example2.com}).
18185
18186 @subsubheading GNU Mailutils IMAP4 Daemon
18187 @cindex GNU Mailutils IMAP4 Daemon
18188
18189 @deffn {Scheme Variable} imap4d-service-type
18190 This is the type of the GNU Mailutils IMAP4 Daemon (@pxref{imap4d,,,
18191 mailutils, GNU Mailutils Manual}), whose value should be an
18192 @code{imap4d-configuration} object as in this example:
18193
18194 @lisp
18195 (service imap4d-service-type
18196 (imap4d-configuration
18197 (config-file (local-file "imap4d.conf"))))
18198 @end lisp
18199 @end deffn
18200
18201 @deftp {Data Type} imap4d-configuration
18202 Data type representing the configuration of @command{imap4d}.
18203
18204 @table @asis
18205 @item @code{package} (default: @code{mailutils})
18206 The package that provides @command{imap4d}.
18207
18208 @item @code{config-file} (default: @code{%default-imap4d-config-file})
18209 File-like object of the configuration file to use, by default it will listen
18210 on TCP port 143 of @code{localhost}. @xref{Conf-imap4d,,, mailutils, GNU
18211 Mailutils Manual}, for details.
18212
18213 @end table
18214 @end deftp
18215
18216 @node Messaging Services
18217 @subsection Messaging Services
18218
18219 @cindex messaging
18220 @cindex jabber
18221 @cindex XMPP
18222 The @code{(gnu services messaging)} module provides Guix service
18223 definitions for messaging services: currently only Prosody is supported.
18224
18225 @subsubheading Prosody Service
18226
18227 @deffn {Scheme Variable} prosody-service-type
18228 This is the type for the @uref{https://prosody.im, Prosody XMPP
18229 communication server}. Its value must be a @code{prosody-configuration}
18230 record as in this example:
18231
18232 @lisp
18233 (service prosody-service-type
18234 (prosody-configuration
18235 (modules-enabled (cons* "groups" "mam" %default-modules-enabled))
18236 (int-components
18237 (list
18238 (int-component-configuration
18239 (hostname "conference.example.net")
18240 (plugin "muc")
18241 (mod-muc (mod-muc-configuration)))))
18242 (virtualhosts
18243 (list
18244 (virtualhost-configuration
18245 (domain "example.net"))))))
18246 @end lisp
18247
18248 See below for details about @code{prosody-configuration}.
18249
18250 @end deffn
18251
18252 By default, Prosody does not need much configuration. Only one
18253 @code{virtualhosts} field is needed: it specifies the domain you wish
18254 Prosody to serve.
18255
18256 You can perform various sanity checks on the generated configuration
18257 with the @code{prosodyctl check} command.
18258
18259 Prosodyctl will also help you to import certificates from the
18260 @code{letsencrypt} directory so that the @code{prosody} user can access
18261 them. See @url{https://prosody.im/doc/letsencrypt}.
18262
18263 @example
18264 prosodyctl --root cert import /etc/letsencrypt/live
18265 @end example
18266
18267 The available configuration parameters follow. Each parameter
18268 definition is preceded by its type; for example, @samp{string-list foo}
18269 indicates that the @code{foo} parameter should be specified as a list of
18270 strings. Types starting with @code{maybe-} denote parameters that won't
18271 show up in @code{prosody.cfg.lua} when their value is @code{'disabled}.
18272
18273 There is also a way to specify the configuration as a string, if you
18274 have an old @code{prosody.cfg.lua} file that you want to port over from
18275 some other system; see the end for more details.
18276
18277 The @code{file-object} type designates either a file-like object
18278 (@pxref{G-Expressions, file-like objects}) or a file name.
18279
18280 @c The following documentation was initially generated by
18281 @c (generate-documentation) in (gnu services messaging). Manually maintained
18282 @c documentation is better, so we shouldn't hesitate to edit below as
18283 @c needed. However if the change you want to make to this documentation
18284 @c can be done in an automated way, it's probably easier to change
18285 @c (generate-documentation) than to make it below and have to deal with
18286 @c the churn as Prosody updates.
18287
18288 Available @code{prosody-configuration} fields are:
18289
18290 @deftypevr {@code{prosody-configuration} parameter} package prosody
18291 The Prosody package.
18292 @end deftypevr
18293
18294 @deftypevr {@code{prosody-configuration} parameter} file-name data-path
18295 Location of the Prosody data storage directory. See
18296 @url{https://prosody.im/doc/configure}.
18297 Defaults to @samp{"/var/lib/prosody"}.
18298 @end deftypevr
18299
18300 @deftypevr {@code{prosody-configuration} parameter} file-object-list plugin-paths
18301 Additional plugin directories. They are searched in all the specified
18302 paths in order. See @url{https://prosody.im/doc/plugins_directory}.
18303 Defaults to @samp{()}.
18304 @end deftypevr
18305
18306 @deftypevr {@code{prosody-configuration} parameter} file-name certificates
18307 Every virtual host and component needs a certificate so that clients and
18308 servers can securely verify its identity. Prosody will automatically load
18309 certificates/keys from the directory specified here.
18310 Defaults to @samp{"/etc/prosody/certs"}.
18311 @end deftypevr
18312
18313 @deftypevr {@code{prosody-configuration} parameter} string-list admins
18314 This is a list of accounts that are admins for the server. Note that you
18315 must create the accounts separately. See @url{https://prosody.im/doc/admins} and
18316 @url{https://prosody.im/doc/creating_accounts}.
18317 Example: @code{(admins '("user1@@example.com" "user2@@example.net"))}
18318 Defaults to @samp{()}.
18319 @end deftypevr
18320
18321 @deftypevr {@code{prosody-configuration} parameter} boolean use-libevent?
18322 Enable use of libevent for better performance under high load. See
18323 @url{https://prosody.im/doc/libevent}.
18324 Defaults to @samp{#f}.
18325 @end deftypevr
18326
18327 @deftypevr {@code{prosody-configuration} parameter} module-list modules-enabled
18328 This is the list of modules Prosody will load on startup. It looks for
18329 @code{mod_modulename.lua} in the plugins folder, so make sure that exists too.
18330 Documentation on modules can be found at:
18331 @url{https://prosody.im/doc/modules}.
18332 Defaults to @samp{("roster" "saslauth" "tls" "dialback" "disco" "carbons" "private" "blocklist" "vcard" "version" "uptime" "time" "ping" "pep" "register" "admin_adhoc")}.
18333 @end deftypevr
18334
18335 @deftypevr {@code{prosody-configuration} parameter} string-list modules-disabled
18336 @samp{"offline"}, @samp{"c2s"} and @samp{"s2s"} are auto-loaded, but
18337 should you want to disable them then add them to this list.
18338 Defaults to @samp{()}.
18339 @end deftypevr
18340
18341 @deftypevr {@code{prosody-configuration} parameter} file-object groups-file
18342 Path to a text file where the shared groups are defined. If this path is
18343 empty then @samp{mod_groups} does nothing. See
18344 @url{https://prosody.im/doc/modules/mod_groups}.
18345 Defaults to @samp{"/var/lib/prosody/sharedgroups.txt"}.
18346 @end deftypevr
18347
18348 @deftypevr {@code{prosody-configuration} parameter} boolean allow-registration?
18349 Disable account creation by default, for security. See
18350 @url{https://prosody.im/doc/creating_accounts}.
18351 Defaults to @samp{#f}.
18352 @end deftypevr
18353
18354 @deftypevr {@code{prosody-configuration} parameter} maybe-ssl-configuration ssl
18355 These are the SSL/TLS-related settings. Most of them are disabled so to
18356 use Prosody's defaults. If you do not completely understand these options, do
18357 not add them to your config, it is easy to lower the security of your server
18358 using them. See @url{https://prosody.im/doc/advanced_ssl_config}.
18359
18360 Available @code{ssl-configuration} fields are:
18361
18362 @deftypevr {@code{ssl-configuration} parameter} maybe-string protocol
18363 This determines what handshake to use.
18364 @end deftypevr
18365
18366 @deftypevr {@code{ssl-configuration} parameter} maybe-file-name key
18367 Path to your private key file.
18368 @end deftypevr
18369
18370 @deftypevr {@code{ssl-configuration} parameter} maybe-file-name certificate
18371 Path to your certificate file.
18372 @end deftypevr
18373
18374 @deftypevr {@code{ssl-configuration} parameter} file-object capath
18375 Path to directory containing root certificates that you wish Prosody to
18376 trust when verifying the certificates of remote servers.
18377 Defaults to @samp{"/etc/ssl/certs"}.
18378 @end deftypevr
18379
18380 @deftypevr {@code{ssl-configuration} parameter} maybe-file-object cafile
18381 Path to a file containing root certificates that you wish Prosody to trust.
18382 Similar to @code{capath} but with all certificates concatenated together.
18383 @end deftypevr
18384
18385 @deftypevr {@code{ssl-configuration} parameter} maybe-string-list verify
18386 A list of verification options (these mostly map to OpenSSL's
18387 @code{set_verify()} flags).
18388 @end deftypevr
18389
18390 @deftypevr {@code{ssl-configuration} parameter} maybe-string-list options
18391 A list of general options relating to SSL/TLS. These map to OpenSSL's
18392 @code{set_options()}. For a full list of options available in LuaSec, see the
18393 LuaSec source.
18394 @end deftypevr
18395
18396 @deftypevr {@code{ssl-configuration} parameter} maybe-non-negative-integer depth
18397 How long a chain of certificate authorities to check when looking for a
18398 trusted root certificate.
18399 @end deftypevr
18400
18401 @deftypevr {@code{ssl-configuration} parameter} maybe-string ciphers
18402 An OpenSSL cipher string. This selects what ciphers Prosody will offer to
18403 clients, and in what order.
18404 @end deftypevr
18405
18406 @deftypevr {@code{ssl-configuration} parameter} maybe-file-name dhparam
18407 A path to a file containing parameters for Diffie-Hellman key exchange. You
18408 can create such a file with:
18409 @code{openssl dhparam -out /etc/prosody/certs/dh-2048.pem 2048}
18410 @end deftypevr
18411
18412 @deftypevr {@code{ssl-configuration} parameter} maybe-string curve
18413 Curve for Elliptic curve Diffie-Hellman. Prosody's default is
18414 @samp{"secp384r1"}.
18415 @end deftypevr
18416
18417 @deftypevr {@code{ssl-configuration} parameter} maybe-string-list verifyext
18418 A list of "extra" verification options.
18419 @end deftypevr
18420
18421 @deftypevr {@code{ssl-configuration} parameter} maybe-string password
18422 Password for encrypted private keys.
18423 @end deftypevr
18424
18425 @end deftypevr
18426
18427 @deftypevr {@code{prosody-configuration} parameter} boolean c2s-require-encryption?
18428 Whether to force all client-to-server connections to be encrypted or not.
18429 See @url{https://prosody.im/doc/modules/mod_tls}.
18430 Defaults to @samp{#f}.
18431 @end deftypevr
18432
18433 @deftypevr {@code{prosody-configuration} parameter} string-list disable-sasl-mechanisms
18434 Set of mechanisms that will never be offered. See
18435 @url{https://prosody.im/doc/modules/mod_saslauth}.
18436 Defaults to @samp{("DIGEST-MD5")}.
18437 @end deftypevr
18438
18439 @deftypevr {@code{prosody-configuration} parameter} boolean s2s-require-encryption?
18440 Whether to force all server-to-server connections to be encrypted or not.
18441 See @url{https://prosody.im/doc/modules/mod_tls}.
18442 Defaults to @samp{#f}.
18443 @end deftypevr
18444
18445 @deftypevr {@code{prosody-configuration} parameter} boolean s2s-secure-auth?
18446 Whether to require encryption and certificate authentication. This
18447 provides ideal security, but requires servers you communicate with to support
18448 encryption AND present valid, trusted certificates. See
18449 @url{https://prosody.im/doc/s2s#security}.
18450 Defaults to @samp{#f}.
18451 @end deftypevr
18452
18453 @deftypevr {@code{prosody-configuration} parameter} string-list s2s-insecure-domains
18454 Many servers don't support encryption or have invalid or self-signed
18455 certificates. You can list domains here that will not be required to
18456 authenticate using certificates. They will be authenticated using DNS. See
18457 @url{https://prosody.im/doc/s2s#security}.
18458 Defaults to @samp{()}.
18459 @end deftypevr
18460
18461 @deftypevr {@code{prosody-configuration} parameter} string-list s2s-secure-domains
18462 Even if you leave @code{s2s-secure-auth?} disabled, you can still require
18463 valid certificates for some domains by specifying a list here. See
18464 @url{https://prosody.im/doc/s2s#security}.
18465 Defaults to @samp{()}.
18466 @end deftypevr
18467
18468 @deftypevr {@code{prosody-configuration} parameter} string authentication
18469 Select the authentication backend to use. The default provider stores
18470 passwords in plaintext and uses Prosody's configured data storage to store the
18471 authentication data. If you do not trust your server please see
18472 @url{https://prosody.im/doc/modules/mod_auth_internal_hashed} for information
18473 about using the hashed backend. See also
18474 @url{https://prosody.im/doc/authentication}
18475 Defaults to @samp{"internal_plain"}.
18476 @end deftypevr
18477
18478 @deftypevr {@code{prosody-configuration} parameter} maybe-string log
18479 Set logging options. Advanced logging configuration is not yet supported
18480 by the Prosody service. See @url{https://prosody.im/doc/logging}.
18481 Defaults to @samp{"*syslog"}.
18482 @end deftypevr
18483
18484 @deftypevr {@code{prosody-configuration} parameter} file-name pidfile
18485 File to write pid in. See @url{https://prosody.im/doc/modules/mod_posix}.
18486 Defaults to @samp{"/var/run/prosody/prosody.pid"}.
18487 @end deftypevr
18488
18489 @deftypevr {@code{prosody-configuration} parameter} maybe-non-negative-integer http-max-content-size
18490 Maximum allowed size of the HTTP body (in bytes).
18491 @end deftypevr
18492
18493 @deftypevr {@code{prosody-configuration} parameter} maybe-string http-external-url
18494 Some modules expose their own URL in various ways. This URL is built
18495 from the protocol, host and port used. If Prosody sits behind a proxy, the
18496 public URL will be @code{http-external-url} instead. See
18497 @url{https://prosody.im/doc/http#external_url}.
18498 @end deftypevr
18499
18500 @deftypevr {@code{prosody-configuration} parameter} virtualhost-configuration-list virtualhosts
18501 A host in Prosody is a domain on which user accounts can be created. For
18502 example if you want your users to have addresses like
18503 @samp{"john.smith@@example.com"} then you need to add a host
18504 @samp{"example.com"}. All options in this list will apply only to this host.
18505
18506 Note: the name "virtual" host is used in configuration to avoid confusion with
18507 the actual physical host that Prosody is installed on. A single Prosody
18508 instance can serve many domains, each one defined as a VirtualHost entry in
18509 Prosody's configuration. Conversely a server that hosts a single domain would
18510 have just one VirtualHost entry.
18511
18512 See @url{https://prosody.im/doc/configure#virtual_host_settings}.
18513
18514 Available @code{virtualhost-configuration} fields are:
18515
18516 all these @code{prosody-configuration} fields: @code{admins}, @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled}, @code{groups-file}, @code{allow-registration?}, @code{ssl}, @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms}, @code{s2s-require-encryption?}, @code{s2s-secure-auth?}, @code{s2s-insecure-domains}, @code{s2s-secure-domains}, @code{authentication}, @code{log}, @code{http-max-content-size}, @code{http-external-url}, @code{raw-content}, plus:
18517 @deftypevr {@code{virtualhost-configuration} parameter} string domain
18518 Domain you wish Prosody to serve.
18519 @end deftypevr
18520
18521 @end deftypevr
18522
18523 @deftypevr {@code{prosody-configuration} parameter} int-component-configuration-list int-components
18524 Components are extra services on a server which are available to clients,
18525 usually on a subdomain of the main server (such as
18526 @samp{"mycomponent.example.com"}). Example components might be chatroom
18527 servers, user directories, or gateways to other protocols.
18528
18529 Internal components are implemented with Prosody-specific plugins. To add an
18530 internal component, you simply fill the hostname field, and the plugin you wish
18531 to use for the component.
18532
18533 See @url{https://prosody.im/doc/components}.
18534 Defaults to @samp{()}.
18535
18536 Available @code{int-component-configuration} fields are:
18537
18538 all these @code{prosody-configuration} fields: @code{admins}, @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled}, @code{groups-file}, @code{allow-registration?}, @code{ssl}, @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms}, @code{s2s-require-encryption?}, @code{s2s-secure-auth?}, @code{s2s-insecure-domains}, @code{s2s-secure-domains}, @code{authentication}, @code{log}, @code{http-max-content-size}, @code{http-external-url}, @code{raw-content}, plus:
18539 @deftypevr {@code{int-component-configuration} parameter} string hostname
18540 Hostname of the component.
18541 @end deftypevr
18542
18543 @deftypevr {@code{int-component-configuration} parameter} string plugin
18544 Plugin you wish to use for the component.
18545 @end deftypevr
18546
18547 @deftypevr {@code{int-component-configuration} parameter} maybe-mod-muc-configuration mod-muc
18548 Multi-user chat (MUC) is Prosody's module for allowing you to create
18549 hosted chatrooms/conferences for XMPP users.
18550
18551 General information on setting up and using multi-user chatrooms can be found
18552 in the "Chatrooms" documentation (@url{https://prosody.im/doc/chatrooms}),
18553 which you should read if you are new to XMPP chatrooms.
18554
18555 See also @url{https://prosody.im/doc/modules/mod_muc}.
18556
18557 Available @code{mod-muc-configuration} fields are:
18558
18559 @deftypevr {@code{mod-muc-configuration} parameter} string name
18560 The name to return in service discovery responses.
18561 Defaults to @samp{"Prosody Chatrooms"}.
18562 @end deftypevr
18563
18564 @deftypevr {@code{mod-muc-configuration} parameter} string-or-boolean restrict-room-creation
18565 If @samp{#t}, this will only allow admins to create new chatrooms.
18566 Otherwise anyone can create a room. The value @samp{"local"} restricts room
18567 creation to users on the service's parent domain. E.g.@: @samp{user@@example.com}
18568 can create rooms on @samp{rooms.example.com}. The value @samp{"admin"}
18569 restricts to service administrators only.
18570 Defaults to @samp{#f}.
18571 @end deftypevr
18572
18573 @deftypevr {@code{mod-muc-configuration} parameter} non-negative-integer max-history-messages
18574 Maximum number of history messages that will be sent to the member that has
18575 just joined the room.
18576 Defaults to @samp{20}.
18577 @end deftypevr
18578
18579 @end deftypevr
18580
18581 @end deftypevr
18582
18583 @deftypevr {@code{prosody-configuration} parameter} ext-component-configuration-list ext-components
18584 External components use XEP-0114, which most standalone components
18585 support. To add an external component, you simply fill the hostname field. See
18586 @url{https://prosody.im/doc/components}.
18587 Defaults to @samp{()}.
18588
18589 Available @code{ext-component-configuration} fields are:
18590
18591 all these @code{prosody-configuration} fields: @code{admins}, @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled}, @code{groups-file}, @code{allow-registration?}, @code{ssl}, @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms}, @code{s2s-require-encryption?}, @code{s2s-secure-auth?}, @code{s2s-insecure-domains}, @code{s2s-secure-domains}, @code{authentication}, @code{log}, @code{http-max-content-size}, @code{http-external-url}, @code{raw-content}, plus:
18592 @deftypevr {@code{ext-component-configuration} parameter} string component-secret
18593 Password which the component will use to log in.
18594 @end deftypevr
18595
18596 @deftypevr {@code{ext-component-configuration} parameter} string hostname
18597 Hostname of the component.
18598 @end deftypevr
18599
18600 @end deftypevr
18601
18602 @deftypevr {@code{prosody-configuration} parameter} non-negative-integer-list component-ports
18603 Port(s) Prosody listens on for component connections.
18604 Defaults to @samp{(5347)}.
18605 @end deftypevr
18606
18607 @deftypevr {@code{prosody-configuration} parameter} string component-interface
18608 Interface Prosody listens on for component connections.
18609 Defaults to @samp{"127.0.0.1"}.
18610 @end deftypevr
18611
18612 @deftypevr {@code{prosody-configuration} parameter} maybe-raw-content raw-content
18613 Raw content that will be added to the configuration file.
18614 @end deftypevr
18615
18616 It could be that you just want to get a @code{prosody.cfg.lua}
18617 up and running. In that case, you can pass an
18618 @code{opaque-prosody-configuration} record as the value of
18619 @code{prosody-service-type}. As its name indicates, an opaque configuration
18620 does not have easy reflective capabilities.
18621 Available @code{opaque-prosody-configuration} fields are:
18622
18623 @deftypevr {@code{opaque-prosody-configuration} parameter} package prosody
18624 The prosody package.
18625 @end deftypevr
18626
18627 @deftypevr {@code{opaque-prosody-configuration} parameter} string prosody.cfg.lua
18628 The contents of the @code{prosody.cfg.lua} to use.
18629 @end deftypevr
18630
18631 For example, if your @code{prosody.cfg.lua} is just the empty
18632 string, you could instantiate a prosody service like this:
18633
18634 @lisp
18635 (service prosody-service-type
18636 (opaque-prosody-configuration
18637 (prosody.cfg.lua "")))
18638 @end lisp
18639
18640 @c end of Prosody auto-generated documentation
18641
18642 @subsubheading BitlBee Service
18643
18644 @cindex IRC (Internet Relay Chat)
18645 @cindex IRC gateway
18646 @url{https://bitlbee.org,BitlBee} is a gateway that provides an IRC
18647 interface to a variety of messaging protocols such as XMPP.
18648
18649 @defvr {Scheme Variable} bitlbee-service-type
18650 This is the service type for the @url{https://bitlbee.org,BitlBee} IRC
18651 gateway daemon. Its value is a @code{bitlbee-configuration} (see
18652 below).
18653
18654 To have BitlBee listen on port 6667 on localhost, add this line to your
18655 services:
18656
18657 @lisp
18658 (service bitlbee-service-type)
18659 @end lisp
18660 @end defvr
18661
18662 @deftp {Data Type} bitlbee-configuration
18663 This is the configuration for BitlBee, with the following fields:
18664
18665 @table @asis
18666 @item @code{interface} (default: @code{"127.0.0.1"})
18667 @itemx @code{port} (default: @code{6667})
18668 Listen on the network interface corresponding to the IP address
18669 specified in @var{interface}, on @var{port}.
18670
18671 When @var{interface} is @code{127.0.0.1}, only local clients can
18672 connect; when it is @code{0.0.0.0}, connections can come from any
18673 networking interface.
18674
18675 @item @code{bitlbee} (default: @code{bitlbee})
18676 The BitlBee package to use.
18677
18678 @item @code{plugins} (default: @code{'()})
18679 List of plugin packages to use---e.g., @code{bitlbee-discord}.
18680
18681 @item @code{extra-settings} (default: @code{""})
18682 Configuration snippet added as-is to the BitlBee configuration file.
18683 @end table
18684 @end deftp
18685
18686 @subsubheading Quassel Service
18687
18688 @cindex IRC (Internet Relay Chat)
18689 @url{https://quassel-irc.org/,Quassel} is a distributed IRC client,
18690 meaning that one or more clients can attach to and detach from the
18691 central core.
18692
18693 @defvr {Scheme Variable} quassel-service-type
18694 This is the service type for the @url{https://quassel-irc.org/,Quassel}
18695 IRC backend daemon. Its value is a @code{quassel-configuration}
18696 (see below).
18697 @end defvr
18698
18699 @deftp {Data Type} quassel-configuration
18700 This is the configuration for Quassel, with the following fields:
18701
18702 @table @asis
18703 @item @code{quassel} (default: @code{quassel})
18704 The Quassel package to use.
18705
18706 @item @code{interface} (default: @code{"::,0.0.0.0"})
18707 @item @code{port} (default: @code{4242})
18708 Listen on the network interface(s) corresponding to the IPv4 or IPv6
18709 interfaces specified in the comma delimited @var{interface}, on
18710 @var{port}.
18711
18712 @item @code{loglevel} (default: @code{"Info"})
18713 The level of logging desired. Accepted values are Debug, Info, Warning
18714 and Error.
18715 @end table
18716 @end deftp
18717
18718 @node Telephony Services
18719 @subsection Telephony Services
18720
18721 @cindex Murmur (VoIP server)
18722 @cindex VoIP server
18723 This section describes how to set up and run a Murmur server. Murmur is
18724 the server of the @uref{https://mumble.info, Mumble} voice-over-IP
18725 (VoIP) suite.
18726
18727 @deftp {Data Type} murmur-configuration
18728 The service type for the Murmur server. An example configuration can
18729 look like this:
18730
18731 @lisp
18732 (service murmur-service-type
18733 (murmur-configuration
18734 (welcome-text
18735 "Welcome to this Mumble server running on Guix!")
18736 (cert-required? #t) ;disallow text password logins
18737 (ssl-cert "/etc/letsencrypt/live/mumble.example.com/fullchain.pem")
18738 (ssl-key "/etc/letsencrypt/live/mumble.example.com/privkey.pem")))
18739 @end lisp
18740
18741 After reconfiguring your system, you can manually set the murmur @code{SuperUser}
18742 password with the command that is printed during the activation phase.
18743
18744 It is recommended to register a normal Mumble user account
18745 and grant it admin or moderator rights.
18746 You can use the @code{mumble} client to
18747 login as new normal user, register yourself, and log out.
18748 For the next step login with the name @code{SuperUser} use
18749 the @code{SuperUser} password that you set previously,
18750 and grant your newly registered mumble user administrator or moderator
18751 rights and create some channels.
18752
18753 Available @code{murmur-configuration} fields are:
18754
18755 @table @asis
18756 @item @code{package} (default: @code{mumble})
18757 Package that contains @code{bin/murmurd}.
18758
18759 @item @code{user} (default: @code{"murmur"})
18760 User who will run the Murmur server.
18761
18762 @item @code{group} (default: @code{"murmur"})
18763 Group of the user who will run the murmur server.
18764
18765 @item @code{port} (default: @code{64738})
18766 Port on which the server will listen.
18767
18768 @item @code{welcome-text} (default: @code{""})
18769 Welcome text sent to clients when they connect.
18770
18771 @item @code{server-password} (default: @code{""})
18772 Password the clients have to enter in order to connect.
18773
18774 @item @code{max-users} (default: @code{100})
18775 Maximum of users that can be connected to the server at once.
18776
18777 @item @code{max-user-bandwidth} (default: @code{#f})
18778 Maximum voice traffic a user can send per second.
18779
18780 @item @code{database-file} (default: @code{"/var/lib/murmur/db.sqlite"})
18781 File name of the sqlite database.
18782 The service's user will become the owner of the directory.
18783
18784 @item @code{log-file} (default: @code{"/var/log/murmur/murmur.log"})
18785 File name of the log file.
18786 The service's user will become the owner of the directory.
18787
18788 @item @code{autoban-attempts} (default: @code{10})
18789 Maximum number of logins a user can make in @code{autoban-timeframe}
18790 without getting auto banned for @code{autoban-time}.
18791
18792 @item @code{autoban-timeframe} (default: @code{120})
18793 Timeframe for autoban in seconds.
18794
18795 @item @code{autoban-time} (default: @code{300})
18796 Amount of time in seconds for which a client gets banned
18797 when violating the autoban limits.
18798
18799 @item @code{opus-threshold} (default: @code{100})
18800 Percentage of clients that need to support opus
18801 before switching over to opus audio codec.
18802
18803 @item @code{channel-nesting-limit} (default: @code{10})
18804 How deep channels can be nested at maximum.
18805
18806 @item @code{channelname-regex} (default: @code{#f})
18807 A string in form of a Qt regular expression that channel names must conform to.
18808
18809 @item @code{username-regex} (default: @code{#f})
18810 A string in form of a Qt regular expression that user names must conform to.
18811
18812 @item @code{text-message-length} (default: @code{5000})
18813 Maximum size in bytes that a user can send in one text chat message.
18814
18815 @item @code{image-message-length} (default: @code{(* 128 1024)})
18816 Maximum size in bytes that a user can send in one image message.
18817
18818 @item @code{cert-required?} (default: @code{#f})
18819 If it is set to @code{#t} clients that use weak password authentication
18820 will not be accepted. Users must have completed the certificate wizard to join.
18821
18822 @item @code{remember-channel?} (default: @code{#f})
18823 Should murmur remember the last channel each user was in when they disconnected
18824 and put them into the remembered channel when they rejoin.
18825
18826 @item @code{allow-html?} (default: @code{#f})
18827 Should html be allowed in text messages, user comments, and channel descriptions.
18828
18829 @item @code{allow-ping?} (default: @code{#f})
18830 Setting to true exposes the current user count, the maximum user count, and
18831 the server's maximum bandwidth per client to unauthenticated users. In the
18832 Mumble client, this information is shown in the Connect dialog.
18833
18834 Disabling this setting will prevent public listing of the server.
18835
18836 @item @code{bonjour?} (default: @code{#f})
18837 Should the server advertise itself in the local network through the bonjour protocol.
18838
18839 @item @code{send-version?} (default: @code{#f})
18840 Should the murmur server version be exposed in ping requests.
18841
18842 @item @code{log-days} (default: @code{31})
18843 Murmur also stores logs in the database, which are accessible via RPC.
18844 The default is 31 days of months, but you can set this setting to 0 to keep logs forever,
18845 or -1 to disable logging to the database.
18846
18847 @item @code{obfuscate-ips?} (default: @code{#t})
18848 Should logged ips be obfuscated to protect the privacy of users.
18849
18850 @item @code{ssl-cert} (default: @code{#f})
18851 File name of the SSL/TLS certificate used for encrypted connections.
18852
18853 @lisp
18854 (ssl-cert "/etc/letsencrypt/live/example.com/fullchain.pem")
18855 @end lisp
18856 @item @code{ssl-key} (default: @code{#f})
18857 Filepath to the ssl private key used for encrypted connections.
18858 @lisp
18859 (ssl-key "/etc/letsencrypt/live/example.com/privkey.pem")
18860 @end lisp
18861
18862 @item @code{ssl-dh-params} (default: @code{#f})
18863 File name of a PEM-encoded file with Diffie-Hellman parameters
18864 for the SSL/TLS encryption. Alternatively you set it to
18865 @code{"@@ffdhe2048"}, @code{"@@ffdhe3072"}, @code{"@@ffdhe4096"}, @code{"@@ffdhe6144"}
18866 or @code{"@@ffdhe8192"} to use bundled parameters from RFC 7919.
18867
18868 @item @code{ssl-ciphers} (default: @code{#f})
18869 The @code{ssl-ciphers} option chooses the cipher suites to make available for use
18870 in SSL/TLS.
18871
18872 This option is specified using
18873 @uref{https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT,
18874 OpenSSL cipher list notation}.
18875
18876 It is recommended that you try your cipher string using 'openssl ciphers <string>'
18877 before setting it here, to get a feel for which cipher suites you will get.
18878 After setting this option, it is recommend that you inspect your Murmur log
18879 to ensure that Murmur is using the cipher suites that you expected it to.
18880
18881 Note: Changing this option may impact the backwards compatibility of your
18882 Murmur server, and can remove the ability for older Mumble clients to be able
18883 to connect to it.
18884
18885 @item @code{public-registration} (default: @code{#f})
18886 Must be a @code{<murmur-public-registration-configuration>} record or @code{#f}.
18887
18888 You can optionally register your server in the public server list that the
18889 @code{mumble} client shows on startup.
18890 You cannot register your server if you have set a @code{server-password},
18891 or set @code{allow-ping} to @code{#f}.
18892
18893 It might take a few hours until it shows up in the public list.
18894
18895 @item @code{file} (default: @code{#f})
18896 Optional alternative override for this configuration.
18897 @end table
18898 @end deftp
18899
18900 @deftp {Data Type} murmur-public-registration-configuration
18901 Configuration for public registration of a murmur service.
18902
18903 @table @asis
18904 @item @code{name}
18905 This is a display name for your server. Not to be confused with the hostname.
18906
18907 @item @code{password}
18908 A password to identify your registration.
18909 Subsequent updates will need the same password. Don't lose your password.
18910
18911 @item @code{url}
18912 This should be a @code{http://} or @code{https://} link to your web
18913 site.
18914
18915 @item @code{hostname} (default: @code{#f})
18916 By default your server will be listed by its IP address.
18917 If it is set your server will be linked by this host name instead.
18918 @end table
18919 @end deftp
18920
18921
18922
18923 @node Monitoring Services
18924 @subsection Monitoring Services
18925
18926 @subsubheading Tailon Service
18927
18928 @uref{https://tailon.readthedocs.io/, Tailon} is a web application for
18929 viewing and searching log files.
18930
18931 The following example will configure the service with default values.
18932 By default, Tailon can be accessed on port 8080 (@code{http://localhost:8080}).
18933
18934 @lisp
18935 (service tailon-service-type)
18936 @end lisp
18937
18938 The following example customises more of the Tailon configuration,
18939 adding @command{sed} to the list of allowed commands.
18940
18941 @lisp
18942 (service tailon-service-type
18943 (tailon-configuration
18944 (config-file
18945 (tailon-configuration-file
18946 (allowed-commands '("tail" "grep" "awk" "sed"))))))
18947 @end lisp
18948
18949
18950 @deftp {Data Type} tailon-configuration
18951 Data type representing the configuration of Tailon.
18952 This type has the following parameters:
18953
18954 @table @asis
18955 @item @code{config-file} (default: @code{(tailon-configuration-file)})
18956 The configuration file to use for Tailon. This can be set to a
18957 @dfn{tailon-configuration-file} record value, or any gexp
18958 (@pxref{G-Expressions}).
18959
18960 For example, to instead use a local file, the @code{local-file} function
18961 can be used:
18962
18963 @lisp
18964 (service tailon-service-type
18965 (tailon-configuration
18966 (config-file (local-file "./my-tailon.conf"))))
18967 @end lisp
18968
18969 @item @code{package} (default: @code{tailon})
18970 The tailon package to use.
18971
18972 @end table
18973 @end deftp
18974
18975 @deftp {Data Type} tailon-configuration-file
18976 Data type representing the configuration options for Tailon.
18977 This type has the following parameters:
18978
18979 @table @asis
18980 @item @code{files} (default: @code{(list "/var/log")})
18981 List of files to display. The list can include strings for a single file
18982 or directory, or a list, where the first item is the name of a
18983 subsection, and the remaining items are the files or directories in that
18984 subsection.
18985
18986 @item @code{bind} (default: @code{"localhost:8080"})
18987 Address and port to which Tailon should bind on.
18988
18989 @item @code{relative-root} (default: @code{#f})
18990 URL path to use for Tailon, set to @code{#f} to not use a path.
18991
18992 @item @code{allow-transfers?} (default: @code{#t})
18993 Allow downloading the log files in the web interface.
18994
18995 @item @code{follow-names?} (default: @code{#t})
18996 Allow tailing of not-yet existent files.
18997
18998 @item @code{tail-lines} (default: @code{200})
18999 Number of lines to read initially from each file.
19000
19001 @item @code{allowed-commands} (default: @code{(list "tail" "grep" "awk")})
19002 Commands to allow running. By default, @code{sed} is disabled.
19003
19004 @item @code{debug?} (default: @code{#f})
19005 Set @code{debug?} to @code{#t} to show debug messages.
19006
19007 @item @code{wrap-lines} (default: @code{#t})
19008 Initial line wrapping state in the web interface. Set to @code{#t} to
19009 initially wrap lines (the default), or to @code{#f} to initially not
19010 wrap lines.
19011
19012 @item @code{http-auth} (default: @code{#f})
19013 HTTP authentication type to use. Set to @code{#f} to disable
19014 authentication (the default). Supported values are @code{"digest"} or
19015 @code{"basic"}.
19016
19017 @item @code{users} (default: @code{#f})
19018 If HTTP authentication is enabled (see @code{http-auth}), access will be
19019 restricted to the credentials provided here. To configure users, use a
19020 list of pairs, where the first element of the pair is the username, and
19021 the 2nd element of the pair is the password.
19022
19023 @lisp
19024 (tailon-configuration-file
19025 (http-auth "basic")
19026 (users '(("user1" . "password1")
19027 ("user2" . "password2"))))
19028 @end lisp
19029
19030 @end table
19031 @end deftp
19032
19033
19034 @subsubheading Darkstat Service
19035 @cindex darkstat
19036 Darkstat is a packet sniffer that captures network traffic, calculates
19037 statistics about usage, and serves reports over HTTP.
19038
19039 @defvar {Scheme Variable} darkstat-service-type
19040 This is the service type for the
19041 @uref{https://unix4lyfe.org/darkstat/, darkstat}
19042 service, its value must be a @code{darkstat-configuration} record as in
19043 this example:
19044
19045 @lisp
19046 (service darkstat-service-type
19047 (darkstat-configuration
19048 (interface "eno1")))
19049 @end lisp
19050 @end defvar
19051
19052 @deftp {Data Type} darkstat-configuration
19053 Data type representing the configuration of @command{darkstat}.
19054
19055 @table @asis
19056 @item @code{package} (default: @code{darkstat})
19057 The darkstat package to use.
19058
19059 @item @code{interface}
19060 Capture traffic on the specified network interface.
19061
19062 @item @code{port} (default: @code{"667"})
19063 Bind the web interface to the specified port.
19064
19065 @item @code{bind-address} (default: @code{"127.0.0.1"})
19066 Bind the web interface to the specified address.
19067
19068 @item @code{base} (default: @code{"/"})
19069 Specify the path of the base URL. This can be useful if
19070 @command{darkstat} is accessed via a reverse proxy.
19071
19072 @end table
19073 @end deftp
19074
19075 @subsubheading Prometheus Node Exporter Service
19076
19077 @cindex prometheus-node-exporter
19078 The Prometheus ``node exporter'' makes hardware and operating system statistics
19079 provided by the Linux kernel available for the Prometheus monitoring system.
19080 This service should be deployed on all physical nodes and virtual machines,
19081 where monitoring these statistics is desirable.
19082
19083 @defvar {Scheme variable} prometheus-node-exporter-service-type
19084 This is the service type for the
19085 @uref{https://github.com/prometheus/node_exporter/, prometheus-node-exporter}
19086 service, its value must be a @code{prometheus-node-exporter-configuration}
19087 record as in this example:
19088
19089 @lisp
19090 (service prometheus-node-exporter-service-type
19091 (prometheus-node-exporter-configuration
19092 (web-listen-address ":9100")))
19093 @end lisp
19094 @end defvar
19095
19096 @deftp {Data Type} prometheus-node-exporter-configuration
19097 Data type representing the configuration of @command{node_exporter}.
19098
19099 @table @asis
19100 @item @code{package} (default: @code{go-github-com-prometheus-node-exporter})
19101 The prometheus-node-exporter package to use.
19102
19103 @item @code{web-listen-address} (default: @code{":9100"})
19104 Bind the web interface to the specified address.
19105
19106 @end table
19107 @end deftp
19108
19109 @subsubheading Zabbix server
19110 @cindex zabbix zabbix-server
19111 Zabbix provides monitoring metrics, among others network utilization, CPU load
19112 and disk space consumption:
19113
19114 @itemize
19115 @item High performance, high capacity (able to monitor hundreds of thousands of devices).
19116 @item Auto-discovery of servers and network devices and interfaces.
19117 @item Low-level discovery, allows to automatically start monitoring new items, file systems or network interfaces among others.
19118 @item Distributed monitoring with centralized web administration.
19119 @item Native high performance agents.
19120 @item SLA, and ITIL KPI metrics on reporting.
19121 @item High-level (business) view of monitored resources through user-defined visual console screens and dashboards.
19122 @item Remote command execution through Zabbix proxies.
19123 @end itemize
19124
19125 @c %start of fragment
19126
19127 Available @code{zabbix-server-configuration} fields are:
19128
19129 @deftypevr {@code{zabbix-server-configuration} parameter} package zabbix-server
19130 The zabbix-server package.
19131
19132 @end deftypevr
19133
19134 @deftypevr {@code{zabbix-server-configuration} parameter} string user
19135 User who will run the Zabbix server.
19136
19137 Defaults to @samp{"zabbix"}.
19138
19139 @end deftypevr
19140
19141 @deftypevr {@code{zabbix-server-configuration} parameter} group group
19142 Group who will run the Zabbix server.
19143
19144 Defaults to @samp{"zabbix"}.
19145
19146 @end deftypevr
19147
19148 @deftypevr {@code{zabbix-server-configuration} parameter} string db-host
19149 Database host name.
19150
19151 Defaults to @samp{"127.0.0.1"}.
19152
19153 @end deftypevr
19154
19155 @deftypevr {@code{zabbix-server-configuration} parameter} string db-name
19156 Database name.
19157
19158 Defaults to @samp{"zabbix"}.
19159
19160 @end deftypevr
19161
19162 @deftypevr {@code{zabbix-server-configuration} parameter} string db-user
19163 Database user.
19164
19165 Defaults to @samp{"zabbix"}.
19166
19167 @end deftypevr
19168
19169 @deftypevr {@code{zabbix-server-configuration} parameter} string db-password
19170 Database password. Please, use @code{include-files} with
19171 @code{DBPassword=SECRET} inside a specified file instead.
19172
19173 Defaults to @samp{""}.
19174
19175 @end deftypevr
19176
19177 @deftypevr {@code{zabbix-server-configuration} parameter} number db-port
19178 Database port.
19179
19180 Defaults to @samp{5432}.
19181
19182 @end deftypevr
19183
19184 @deftypevr {@code{zabbix-server-configuration} parameter} string log-type
19185 Specifies where log messages are written to:
19186
19187 @itemize @bullet
19188 @item
19189 @code{system} - syslog.
19190
19191 @item
19192 @code{file} - file specified with @code{log-file} parameter.
19193
19194 @item
19195 @code{console} - standard output.
19196
19197 @end itemize
19198
19199 Defaults to @samp{""}.
19200
19201 @end deftypevr
19202
19203 @deftypevr {@code{zabbix-server-configuration} parameter} string log-file
19204 Log file name for @code{log-type} @code{file} parameter.
19205
19206 Defaults to @samp{"/var/log/zabbix/server.log"}.
19207
19208 @end deftypevr
19209
19210 @deftypevr {@code{zabbix-server-configuration} parameter} string pid-file
19211 Name of PID file.
19212
19213 Defaults to @samp{"/var/run/zabbix/zabbix_server.pid"}.
19214
19215 @end deftypevr
19216
19217 @deftypevr {@code{zabbix-server-configuration} parameter} string ssl-ca-location
19218 The location of certificate authority (CA) files for SSL server
19219 certificate verification.
19220
19221 Defaults to @samp{"/etc/ssl/certs/ca-certificates.crt"}.
19222
19223 @end deftypevr
19224
19225 @deftypevr {@code{zabbix-server-configuration} parameter} string ssl-cert-location
19226 Location of SSL client certificates.
19227
19228 Defaults to @samp{"/etc/ssl/certs"}.
19229
19230 @end deftypevr
19231
19232 @deftypevr {@code{zabbix-server-configuration} parameter} string extra-options
19233 Extra options will be appended to Zabbix server configuration file.
19234
19235 Defaults to @samp{""}.
19236
19237 @end deftypevr
19238
19239 @deftypevr {@code{zabbix-server-configuration} parameter} include-files include-files
19240 You may include individual files or all files in a directory in the
19241 configuration file.
19242
19243 Defaults to @samp{()}.
19244
19245 @end deftypevr
19246
19247 @c %end of fragment
19248
19249 @subsubheading Zabbix agent
19250 @cindex zabbix zabbix-agent
19251
19252 Zabbix agent gathers information for Zabbix server.
19253
19254 @c %start of fragment
19255
19256 Available @code{zabbix-agent-configuration} fields are:
19257
19258 @deftypevr {@code{zabbix-agent-configuration} parameter} package zabbix-agent
19259 The zabbix-agent package.
19260
19261 @end deftypevr
19262
19263 @deftypevr {@code{zabbix-agent-configuration} parameter} string user
19264 User who will run the Zabbix agent.
19265
19266 Defaults to @samp{"zabbix"}.
19267
19268 @end deftypevr
19269
19270 @deftypevr {@code{zabbix-agent-configuration} parameter} group group
19271 Group who will run the Zabbix agent.
19272
19273 Defaults to @samp{"zabbix"}.
19274
19275 @end deftypevr
19276
19277 @deftypevr {@code{zabbix-agent-configuration} parameter} string hostname
19278 Unique, case sensitive hostname which is required for active checks and
19279 must match hostname as configured on the server.
19280
19281 Defaults to @samp{"Zabbix server"}.
19282
19283 @end deftypevr
19284
19285 @deftypevr {@code{zabbix-agent-configuration} parameter} string log-type
19286 Specifies where log messages are written to:
19287
19288 @itemize @bullet
19289 @item
19290 @code{system} - syslog.
19291
19292 @item
19293 @code{file} - file specified with @code{log-file} parameter.
19294
19295 @item
19296 @code{console} - standard output.
19297
19298 @end itemize
19299
19300 Defaults to @samp{""}.
19301
19302 @end deftypevr
19303
19304 @deftypevr {@code{zabbix-agent-configuration} parameter} string log-file
19305 Log file name for @code{log-type} @code{file} parameter.
19306
19307 Defaults to @samp{"/var/log/zabbix/agent.log"}.
19308
19309 @end deftypevr
19310
19311 @deftypevr {@code{zabbix-agent-configuration} parameter} string pid-file
19312 Name of PID file.
19313
19314 Defaults to @samp{"/var/run/zabbix/zabbix_agent.pid"}.
19315
19316 @end deftypevr
19317
19318 @deftypevr {@code{zabbix-agent-configuration} parameter} list server
19319 List of IP addresses, optionally in CIDR notation, or hostnames of
19320 Zabbix servers and Zabbix proxies. Incoming connections will be
19321 accepted only from the hosts listed here.
19322
19323 Defaults to @samp{("127.0.0.1")}.
19324
19325 @end deftypevr
19326
19327 @deftypevr {@code{zabbix-agent-configuration} parameter} list server-active
19328 List of IP:port (or hostname:port) pairs of Zabbix servers and Zabbix
19329 proxies for active checks. If port is not specified, default port is
19330 used. If this parameter is not specified, active checks are disabled.
19331
19332 Defaults to @samp{("127.0.0.1")}.
19333
19334 @end deftypevr
19335
19336 @deftypevr {@code{zabbix-agent-configuration} parameter} string extra-options
19337 Extra options will be appended to Zabbix server configuration file.
19338
19339 Defaults to @samp{""}.
19340
19341 @end deftypevr
19342
19343 @deftypevr {@code{zabbix-agent-configuration} parameter} include-files include-files
19344 You may include individual files or all files in a directory in the
19345 configuration file.
19346
19347 Defaults to @samp{()}.
19348
19349 @end deftypevr
19350
19351 @c %end of fragment
19352
19353 @subsubheading Zabbix front-end
19354 @cindex zabbix zabbix-front-end
19355
19356 This service provides a WEB interface to Zabbix server.
19357
19358 @c %start of fragment
19359
19360 Available @code{zabbix-front-end-configuration} fields are:
19361
19362 @deftypevr {@code{zabbix-front-end-configuration} parameter} nginx-server-configuration-list nginx
19363 NGINX configuration.
19364
19365 @end deftypevr
19366
19367 @deftypevr {@code{zabbix-front-end-configuration} parameter} string db-host
19368 Database host name.
19369
19370 Defaults to @samp{"localhost"}.
19371
19372 @end deftypevr
19373
19374 @deftypevr {@code{zabbix-front-end-configuration} parameter} number db-port
19375 Database port.
19376
19377 Defaults to @samp{5432}.
19378
19379 @end deftypevr
19380
19381 @deftypevr {@code{zabbix-front-end-configuration} parameter} string db-name
19382 Database name.
19383
19384 Defaults to @samp{"zabbix"}.
19385
19386 @end deftypevr
19387
19388 @deftypevr {@code{zabbix-front-end-configuration} parameter} string db-user
19389 Database user.
19390
19391 Defaults to @samp{"zabbix"}.
19392
19393 @end deftypevr
19394
19395 @deftypevr {@code{zabbix-front-end-configuration} parameter} string db-password
19396 Database password. Please, use @code{db-secret-file} instead.
19397
19398 Defaults to @samp{""}.
19399
19400 @end deftypevr
19401
19402 @deftypevr {@code{zabbix-front-end-configuration} parameter} string db-secret-file
19403 Secret file which will be appended to @file{zabbix.conf.php} file. This
19404 file contains credentials for use by Zabbix front-end. You are expected
19405 to create it manually.
19406
19407 Defaults to @samp{""}.
19408
19409 @end deftypevr
19410
19411 @deftypevr {@code{zabbix-front-end-configuration} parameter} string zabbix-host
19412 Zabbix server hostname.
19413
19414 Defaults to @samp{"localhost"}.
19415
19416 @end deftypevr
19417
19418 @deftypevr {@code{zabbix-front-end-configuration} parameter} number zabbix-port
19419 Zabbix server port.
19420
19421 Defaults to @samp{10051}.
19422
19423 @end deftypevr
19424
19425
19426 @c %end of fragment
19427
19428 @node Kerberos Services
19429 @subsection Kerberos Services
19430 @cindex Kerberos
19431
19432 The @code{(gnu services kerberos)} module provides services relating to
19433 the authentication protocol @dfn{Kerberos}.
19434
19435 @subsubheading Krb5 Service
19436
19437 Programs using a Kerberos client library normally
19438 expect a configuration file in @file{/etc/krb5.conf}.
19439 This service generates such a file from a definition provided in the
19440 operating system declaration.
19441 It does not cause any daemon to be started.
19442
19443 No ``keytab'' files are provided by this service---you must explicitly create them.
19444 This service is known to work with the MIT client library, @code{mit-krb5}.
19445 Other implementations have not been tested.
19446
19447 @defvr {Scheme Variable} krb5-service-type
19448 A service type for Kerberos 5 clients.
19449 @end defvr
19450
19451 @noindent
19452 Here is an example of its use:
19453 @lisp
19454 (service krb5-service-type
19455 (krb5-configuration
19456 (default-realm "EXAMPLE.COM")
19457 (allow-weak-crypto? #t)
19458 (realms (list
19459 (krb5-realm
19460 (name "EXAMPLE.COM")
19461 (admin-server "groucho.example.com")
19462 (kdc "karl.example.com"))
19463 (krb5-realm
19464 (name "ARGRX.EDU")
19465 (admin-server "kerb-admin.argrx.edu")
19466 (kdc "keys.argrx.edu"))))))
19467 @end lisp
19468
19469 @noindent
19470 This example provides a Kerberos@tie{}5 client configuration which:
19471 @itemize
19472 @item Recognizes two realms, @i{viz:} ``EXAMPLE.COM'' and ``ARGRX.EDU'', both
19473 of which have distinct administration servers and key distribution centers;
19474 @item Will default to the realm ``EXAMPLE.COM'' if the realm is not explicitly
19475 specified by clients;
19476 @item Accepts services which only support encryption types known to be weak.
19477 @end itemize
19478
19479 The @code{krb5-realm} and @code{krb5-configuration} types have many fields.
19480 Only the most commonly used ones are described here.
19481 For a full list, and more detailed explanation of each, see the MIT
19482 @uref{https://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html,,krb5.conf}
19483 documentation.
19484
19485
19486 @deftp {Data Type} krb5-realm
19487 @cindex realm, kerberos
19488 @table @asis
19489 @item @code{name}
19490 This field is a string identifying the name of the realm.
19491 A common convention is to use the fully qualified DNS name of your organization,
19492 converted to upper case.
19493
19494 @item @code{admin-server}
19495 This field is a string identifying the host where the administration server is
19496 running.
19497
19498 @item @code{kdc}
19499 This field is a string identifying the key distribution center
19500 for the realm.
19501 @end table
19502 @end deftp
19503
19504 @deftp {Data Type} krb5-configuration
19505
19506 @table @asis
19507 @item @code{allow-weak-crypto?} (default: @code{#f})
19508 If this flag is @code{#t} then services which only offer encryption algorithms
19509 known to be weak will be accepted.
19510
19511 @item @code{default-realm} (default: @code{#f})
19512 This field should be a string identifying the default Kerberos
19513 realm for the client.
19514 You should set this field to the name of your Kerberos realm.
19515 If this value is @code{#f}
19516 then a realm must be specified with every Kerberos principal when invoking programs
19517 such as @command{kinit}.
19518
19519 @item @code{realms}
19520 This should be a non-empty list of @code{krb5-realm} objects, which clients may
19521 access.
19522 Normally, one of them will have a @code{name} field matching the @code{default-realm}
19523 field.
19524 @end table
19525 @end deftp
19526
19527
19528 @subsubheading PAM krb5 Service
19529 @cindex pam-krb5
19530
19531 The @code{pam-krb5} service allows for login authentication and password
19532 management via Kerberos.
19533 You will need this service if you want PAM enabled applications to authenticate
19534 users using Kerberos.
19535
19536 @defvr {Scheme Variable} pam-krb5-service-type
19537 A service type for the Kerberos 5 PAM module.
19538 @end defvr
19539
19540 @deftp {Data Type} pam-krb5-configuration
19541 Data type representing the configuration of the Kerberos 5 PAM module.
19542 This type has the following parameters:
19543 @table @asis
19544 @item @code{pam-krb5} (default: @code{pam-krb5})
19545 The pam-krb5 package to use.
19546
19547 @item @code{minimum-uid} (default: @code{1000})
19548 The smallest user ID for which Kerberos authentications should be attempted.
19549 Local accounts with lower values will silently fail to authenticate.
19550 @end table
19551 @end deftp
19552
19553
19554 @node LDAP Services
19555 @subsection LDAP Services
19556 @cindex LDAP
19557 @cindex nslcd, LDAP service
19558
19559 The @code{(gnu services authentication)} module provides the
19560 @code{nslcd-service-type}, which can be used to authenticate against an LDAP
19561 server. In addition to configuring the service itself, you may want to add
19562 @code{ldap} as a name service to the Name Service Switch. @xref{Name Service
19563 Switch} for detailed information.
19564
19565 Here is a simple operating system declaration with a default configuration of
19566 the @code{nslcd-service-type} and a Name Service Switch configuration that
19567 consults the @code{ldap} name service last:
19568
19569 @lisp
19570 (use-service-modules authentication)
19571 (use-modules (gnu system nss))
19572 ...
19573 (operating-system
19574 ...
19575 (services
19576 (cons*
19577 (service nslcd-service-type)
19578 (service dhcp-client-service-type)
19579 %base-services))
19580 (name-service-switch
19581 (let ((services (list (name-service (name "db"))
19582 (name-service (name "files"))
19583 (name-service (name "ldap")))))
19584 (name-service-switch
19585 (inherit %mdns-host-lookup-nss)
19586 (password services)
19587 (shadow services)
19588 (group services)
19589 (netgroup services)
19590 (gshadow services)))))
19591 @end lisp
19592
19593 @c %start of generated documentation for nslcd-configuration
19594
19595 Available @code{nslcd-configuration} fields are:
19596
19597 @deftypevr {@code{nslcd-configuration} parameter} package nss-pam-ldapd
19598 The @code{nss-pam-ldapd} package to use.
19599
19600 @end deftypevr
19601
19602 @deftypevr {@code{nslcd-configuration} parameter} maybe-number threads
19603 The number of threads to start that can handle requests and perform LDAP
19604 queries. Each thread opens a separate connection to the LDAP server.
19605 The default is to start 5 threads.
19606
19607 Defaults to @samp{disabled}.
19608
19609 @end deftypevr
19610
19611 @deftypevr {@code{nslcd-configuration} parameter} string uid
19612 This specifies the user id with which the daemon should be run.
19613
19614 Defaults to @samp{"nslcd"}.
19615
19616 @end deftypevr
19617
19618 @deftypevr {@code{nslcd-configuration} parameter} string gid
19619 This specifies the group id with which the daemon should be run.
19620
19621 Defaults to @samp{"nslcd"}.
19622
19623 @end deftypevr
19624
19625 @deftypevr {@code{nslcd-configuration} parameter} log-option log
19626 This option controls the way logging is done via a list containing
19627 SCHEME and LEVEL. The SCHEME argument may either be the symbols "none"
19628 or "syslog", or an absolute file name. The LEVEL argument is optional
19629 and specifies the log level. The log level may be one of the following
19630 symbols: "crit", "error", "warning", "notice", "info" or "debug". All
19631 messages with the specified log level or higher are logged.
19632
19633 Defaults to @samp{("/var/log/nslcd" info)}.
19634
19635 @end deftypevr
19636
19637 @deftypevr {@code{nslcd-configuration} parameter} list uri
19638 The list of LDAP server URIs. Normally, only the first server will be
19639 used with the following servers as fall-back.
19640
19641 Defaults to @samp{("ldap://localhost:389/")}.
19642
19643 @end deftypevr
19644
19645 @deftypevr {@code{nslcd-configuration} parameter} maybe-string ldap-version
19646 The version of the LDAP protocol to use. The default is to use the
19647 maximum version supported by the LDAP library.
19648
19649 Defaults to @samp{disabled}.
19650
19651 @end deftypevr
19652
19653 @deftypevr {@code{nslcd-configuration} parameter} maybe-string binddn
19654 Specifies the distinguished name with which to bind to the directory
19655 server for lookups. The default is to bind anonymously.
19656
19657 Defaults to @samp{disabled}.
19658
19659 @end deftypevr
19660
19661 @deftypevr {@code{nslcd-configuration} parameter} maybe-string bindpw
19662 Specifies the credentials with which to bind. This option is only
19663 applicable when used with binddn.
19664
19665 Defaults to @samp{disabled}.
19666
19667 @end deftypevr
19668
19669 @deftypevr {@code{nslcd-configuration} parameter} maybe-string rootpwmoddn
19670 Specifies the distinguished name to use when the root user tries to
19671 modify a user's password using the PAM module.
19672
19673 Defaults to @samp{disabled}.
19674
19675 @end deftypevr
19676
19677 @deftypevr {@code{nslcd-configuration} parameter} maybe-string rootpwmodpw
19678 Specifies the credentials with which to bind if the root user tries to
19679 change a user's password. This option is only applicable when used with
19680 rootpwmoddn
19681
19682 Defaults to @samp{disabled}.
19683
19684 @end deftypevr
19685
19686 @deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-mech
19687 Specifies the SASL mechanism to be used when performing SASL
19688 authentication.
19689
19690 Defaults to @samp{disabled}.
19691
19692 @end deftypevr
19693
19694 @deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-realm
19695 Specifies the SASL realm to be used when performing SASL authentication.
19696
19697 Defaults to @samp{disabled}.
19698
19699 @end deftypevr
19700
19701 @deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-authcid
19702 Specifies the authentication identity to be used when performing SASL
19703 authentication.
19704
19705 Defaults to @samp{disabled}.
19706
19707 @end deftypevr
19708
19709 @deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-authzid
19710 Specifies the authorization identity to be used when performing SASL
19711 authentication.
19712
19713 Defaults to @samp{disabled}.
19714
19715 @end deftypevr
19716
19717 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean sasl-canonicalize?
19718 Determines whether the LDAP server host name should be canonicalised. If
19719 this is enabled the LDAP library will do a reverse host name lookup. By
19720 default, it is left up to the LDAP library whether this check is
19721 performed or not.
19722
19723 Defaults to @samp{disabled}.
19724
19725 @end deftypevr
19726
19727 @deftypevr {@code{nslcd-configuration} parameter} maybe-string krb5-ccname
19728 Set the name for the GSS-API Kerberos credentials cache.
19729
19730 Defaults to @samp{disabled}.
19731
19732 @end deftypevr
19733
19734 @deftypevr {@code{nslcd-configuration} parameter} string base
19735 The directory search base.
19736
19737 Defaults to @samp{"dc=example,dc=com"}.
19738
19739 @end deftypevr
19740
19741 @deftypevr {@code{nslcd-configuration} parameter} scope-option scope
19742 Specifies the search scope (subtree, onelevel, base or children). The
19743 default scope is subtree; base scope is almost never useful for name
19744 service lookups; children scope is not supported on all servers.
19745
19746 Defaults to @samp{(subtree)}.
19747
19748 @end deftypevr
19749
19750 @deftypevr {@code{nslcd-configuration} parameter} maybe-deref-option deref
19751 Specifies the policy for dereferencing aliases. The default policy is
19752 to never dereference aliases.
19753
19754 Defaults to @samp{disabled}.
19755
19756 @end deftypevr
19757
19758 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean referrals
19759 Specifies whether automatic referral chasing should be enabled. The
19760 default behaviour is to chase referrals.
19761
19762 Defaults to @samp{disabled}.
19763
19764 @end deftypevr
19765
19766 @deftypevr {@code{nslcd-configuration} parameter} list-of-map-entries maps
19767 This option allows for custom attributes to be looked up instead of the
19768 default RFC 2307 attributes. It is a list of maps, each consisting of
19769 the name of a map, the RFC 2307 attribute to match and the query
19770 expression for the attribute as it is available in the directory.
19771
19772 Defaults to @samp{()}.
19773
19774 @end deftypevr
19775
19776 @deftypevr {@code{nslcd-configuration} parameter} list-of-filter-entries filters
19777 A list of filters consisting of the name of a map to which the filter
19778 applies and an LDAP search filter expression.
19779
19780 Defaults to @samp{()}.
19781
19782 @end deftypevr
19783
19784 @deftypevr {@code{nslcd-configuration} parameter} maybe-number bind-timelimit
19785 Specifies the time limit in seconds to use when connecting to the
19786 directory server. The default value is 10 seconds.
19787
19788 Defaults to @samp{disabled}.
19789
19790 @end deftypevr
19791
19792 @deftypevr {@code{nslcd-configuration} parameter} maybe-number timelimit
19793 Specifies the time limit (in seconds) to wait for a response from the
19794 LDAP server. A value of zero, which is the default, is to wait
19795 indefinitely for searches to be completed.
19796
19797 Defaults to @samp{disabled}.
19798
19799 @end deftypevr
19800
19801 @deftypevr {@code{nslcd-configuration} parameter} maybe-number idle-timelimit
19802 Specifies the period if inactivity (in seconds) after which the con‐
19803 nection to the LDAP server will be closed. The default is not to time
19804 out connections.
19805
19806 Defaults to @samp{disabled}.
19807
19808 @end deftypevr
19809
19810 @deftypevr {@code{nslcd-configuration} parameter} maybe-number reconnect-sleeptime
19811 Specifies the number of seconds to sleep when connecting to all LDAP
19812 servers fails. By default one second is waited between the first
19813 failure and the first retry.
19814
19815 Defaults to @samp{disabled}.
19816
19817 @end deftypevr
19818
19819 @deftypevr {@code{nslcd-configuration} parameter} maybe-number reconnect-retrytime
19820 Specifies the time after which the LDAP server is considered to be
19821 permanently unavailable. Once this time is reached retries will be done
19822 only once per this time period. The default value is 10 seconds.
19823
19824 Defaults to @samp{disabled}.
19825
19826 @end deftypevr
19827
19828 @deftypevr {@code{nslcd-configuration} parameter} maybe-ssl-option ssl
19829 Specifies whether to use SSL/TLS or not (the default is not to). If
19830 'start-tls is specified then StartTLS is used rather than raw LDAP over
19831 SSL.
19832
19833 Defaults to @samp{disabled}.
19834
19835 @end deftypevr
19836
19837 @deftypevr {@code{nslcd-configuration} parameter} maybe-tls-reqcert-option tls-reqcert
19838 Specifies what checks to perform on a server-supplied certificate. The
19839 meaning of the values is described in the ldap.conf(5) manual page.
19840
19841 Defaults to @samp{disabled}.
19842
19843 @end deftypevr
19844
19845 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-cacertdir
19846 Specifies the directory containing X.509 certificates for peer authen‐
19847 tication. This parameter is ignored when using GnuTLS.
19848
19849 Defaults to @samp{disabled}.
19850
19851 @end deftypevr
19852
19853 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-cacertfile
19854 Specifies the path to the X.509 certificate for peer authentication.
19855
19856 Defaults to @samp{disabled}.
19857
19858 @end deftypevr
19859
19860 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-randfile
19861 Specifies the path to an entropy source. This parameter is ignored when
19862 using GnuTLS.
19863
19864 Defaults to @samp{disabled}.
19865
19866 @end deftypevr
19867
19868 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-ciphers
19869 Specifies the ciphers to use for TLS as a string.
19870
19871 Defaults to @samp{disabled}.
19872
19873 @end deftypevr
19874
19875 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-cert
19876 Specifies the path to the file containing the local certificate for
19877 client TLS authentication.
19878
19879 Defaults to @samp{disabled}.
19880
19881 @end deftypevr
19882
19883 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-key
19884 Specifies the path to the file containing the private key for client TLS
19885 authentication.
19886
19887 Defaults to @samp{disabled}.
19888
19889 @end deftypevr
19890
19891 @deftypevr {@code{nslcd-configuration} parameter} maybe-number pagesize
19892 Set this to a number greater than 0 to request paged results from the
19893 LDAP server in accordance with RFC2696. The default (0) is to not
19894 request paged results.
19895
19896 Defaults to @samp{disabled}.
19897
19898 @end deftypevr
19899
19900 @deftypevr {@code{nslcd-configuration} parameter} maybe-ignore-users-option nss-initgroups-ignoreusers
19901 This option prevents group membership lookups through LDAP for the
19902 specified users. Alternatively, the value 'all-local may be used. With
19903 that value nslcd builds a full list of non-LDAP users on startup.
19904
19905 Defaults to @samp{disabled}.
19906
19907 @end deftypevr
19908
19909 @deftypevr {@code{nslcd-configuration} parameter} maybe-number nss-min-uid
19910 This option ensures that LDAP users with a numeric user id lower than
19911 the specified value are ignored.
19912
19913 Defaults to @samp{disabled}.
19914
19915 @end deftypevr
19916
19917 @deftypevr {@code{nslcd-configuration} parameter} maybe-number nss-uid-offset
19918 This option specifies an offset that is added to all LDAP numeric user
19919 ids. This can be used to avoid user id collisions with local users.
19920
19921 Defaults to @samp{disabled}.
19922
19923 @end deftypevr
19924
19925 @deftypevr {@code{nslcd-configuration} parameter} maybe-number nss-gid-offset
19926 This option specifies an offset that is added to all LDAP numeric group
19927 ids. This can be used to avoid user id collisions with local groups.
19928
19929 Defaults to @samp{disabled}.
19930
19931 @end deftypevr
19932
19933 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean nss-nested-groups
19934 If this option is set, the member attribute of a group may point to
19935 another group. Members of nested groups are also returned in the higher
19936 level group and parent groups are returned when finding groups for a
19937 specific user. The default is not to perform extra searches for nested
19938 groups.
19939
19940 Defaults to @samp{disabled}.
19941
19942 @end deftypevr
19943
19944 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean nss-getgrent-skipmembers
19945 If this option is set, the group member list is not retrieved when
19946 looking up groups. Lookups for finding which groups a user belongs to
19947 will remain functional so the user will likely still get the correct
19948 groups assigned on login.
19949
19950 Defaults to @samp{disabled}.
19951
19952 @end deftypevr
19953
19954 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean nss-disable-enumeration
19955 If this option is set, functions which cause all user/group entries to
19956 be loaded from the directory will not succeed in doing so. This can
19957 dramatically reduce LDAP server load in situations where there are a
19958 great number of users and/or groups. This option is not recommended for
19959 most configurations.
19960
19961 Defaults to @samp{disabled}.
19962
19963 @end deftypevr
19964
19965 @deftypevr {@code{nslcd-configuration} parameter} maybe-string validnames
19966 This option can be used to specify how user and group names are verified
19967 within the system. This pattern is used to check all user and group
19968 names that are requested and returned from LDAP.
19969
19970 Defaults to @samp{disabled}.
19971
19972 @end deftypevr
19973
19974 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean ignorecase
19975 This specifies whether or not to perform searches using case-insensitive
19976 matching. Enabling this could open up the system to authorization
19977 bypass vulnerabilities and introduce nscd cache poisoning
19978 vulnerabilities which allow denial of service.
19979
19980 Defaults to @samp{disabled}.
19981
19982 @end deftypevr
19983
19984 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean pam-authc-ppolicy
19985 This option specifies whether password policy controls are requested and
19986 handled from the LDAP server when performing user authentication.
19987
19988 Defaults to @samp{disabled}.
19989
19990 @end deftypevr
19991
19992 @deftypevr {@code{nslcd-configuration} parameter} maybe-string pam-authc-search
19993 By default nslcd performs an LDAP search with the user's credentials
19994 after BIND (authentication) to ensure that the BIND operation was
19995 successful. The default search is a simple check to see if the user's
19996 DN exists. A search filter can be specified that will be used instead.
19997 It should return at least one entry.
19998
19999 Defaults to @samp{disabled}.
20000
20001 @end deftypevr
20002
20003 @deftypevr {@code{nslcd-configuration} parameter} maybe-string pam-authz-search
20004 This option allows flexible fine tuning of the authorisation check that
20005 should be performed. The search filter specified is executed and if any
20006 entries match, access is granted, otherwise access is denied.
20007
20008 Defaults to @samp{disabled}.
20009
20010 @end deftypevr
20011
20012 @deftypevr {@code{nslcd-configuration} parameter} maybe-string pam-password-prohibit-message
20013 If this option is set password modification using pam_ldap will be
20014 denied and the specified message will be presented to the user instead.
20015 The message can be used to direct the user to an alternative means of
20016 changing their password.
20017
20018 Defaults to @samp{disabled}.
20019
20020 @end deftypevr
20021
20022 @deftypevr {@code{nslcd-configuration} parameter} list pam-services
20023 List of pam service names for which LDAP authentication should suffice.
20024
20025 Defaults to @samp{()}.
20026
20027 @end deftypevr
20028
20029 @c %end of generated documentation for nslcd-configuration
20030
20031
20032 @node Web Services
20033 @subsection Web Services
20034
20035 @cindex web
20036 @cindex www
20037 @cindex HTTP
20038 The @code{(gnu services web)} module provides the Apache HTTP Server,
20039 the nginx web server, and also a fastcgi wrapper daemon.
20040
20041 @subsubheading Apache HTTP Server
20042
20043 @deffn {Scheme Variable} httpd-service-type
20044 Service type for the @uref{https://httpd.apache.org/,Apache HTTP} server
20045 (@dfn{httpd}). The value for this service type is a
20046 @code{httpd-configuration} record.
20047
20048 A simple example configuration is given below.
20049
20050 @lisp
20051 (service httpd-service-type
20052 (httpd-configuration
20053 (config
20054 (httpd-config-file
20055 (server-name "www.example.com")
20056 (document-root "/srv/http/www.example.com")))))
20057 @end lisp
20058
20059 Other services can also extend the @code{httpd-service-type} to add to
20060 the configuration.
20061
20062 @lisp
20063 (simple-service 'www.example.com-server httpd-service-type
20064 (list
20065 (httpd-virtualhost
20066 "*:80"
20067 (list (string-join '("ServerName www.example.com"
20068 "DocumentRoot /srv/http/www.example.com")
20069 "\n")))))
20070 @end lisp
20071 @end deffn
20072
20073 The details for the @code{httpd-configuration}, @code{httpd-module},
20074 @code{httpd-config-file} and @code{httpd-virtualhost} record types are
20075 given below.
20076
20077 @deffn {Data Type} httpd-configuration
20078 This data type represents the configuration for the httpd service.
20079
20080 @table @asis
20081 @item @code{package} (default: @code{httpd})
20082 The httpd package to use.
20083
20084 @item @code{pid-file} (default: @code{"/var/run/httpd"})
20085 The pid file used by the shepherd-service.
20086
20087 @item @code{config} (default: @code{(httpd-config-file)})
20088 The configuration file to use with the httpd service. The default value
20089 is a @code{httpd-config-file} record, but this can also be a different
20090 G-expression that generates a file, for example a @code{plain-file}. A
20091 file outside of the store can also be specified through a string.
20092
20093 @end table
20094 @end deffn
20095
20096 @deffn {Data Type} httpd-module
20097 This data type represents a module for the httpd service.
20098
20099 @table @asis
20100 @item @code{name}
20101 The name of the module.
20102
20103 @item @code{file}
20104 The file for the module. This can be relative to the httpd package being
20105 used, the absolute location of a file, or a G-expression for a file
20106 within the store, for example @code{(file-append mod-wsgi
20107 "/modules/mod_wsgi.so")}.
20108
20109 @end table
20110 @end deffn
20111
20112 @defvr {Scheme Variable} %default-httpd-modules
20113 A default list of @code{httpd-module} objects.
20114 @end defvr
20115
20116 @deffn {Data Type} httpd-config-file
20117 This data type represents a configuration file for the httpd service.
20118
20119 @table @asis
20120 @item @code{modules} (default: @code{%default-httpd-modules})
20121 The modules to load. Additional modules can be added here, or loaded by
20122 additional configuration.
20123
20124 For example, in order to handle requests for PHP files, you can use Apache’s
20125 @code{mod_proxy_fcgi} module along with @code{php-fpm-service-type}:
20126
20127 @lisp
20128 (service httpd-service-type
20129 (httpd-configuration
20130 (config
20131 (httpd-config-file
20132 (modules (cons*
20133 (httpd-module
20134 (name "proxy_module")
20135 (file "modules/mod_proxy.so"))
20136 (httpd-module
20137 (name "proxy_fcgi_module")
20138 (file "modules/mod_proxy_fcgi.so"))
20139 %default-httpd-modules))
20140 (extra-config (list "\
20141 <FilesMatch \\.php$>
20142 SetHandler \"proxy:unix:/var/run/php-fpm.sock|fcgi://localhost/\"
20143 </FilesMatch>"))))))
20144 (service php-fpm-service-type
20145 (php-fpm-configuration
20146 (socket "/var/run/php-fpm.sock")
20147 (socket-group "httpd")))
20148 @end lisp
20149
20150 @item @code{server-root} (default: @code{httpd})
20151 The @code{ServerRoot} in the configuration file, defaults to the httpd
20152 package. Directives including @code{Include} and @code{LoadModule} are
20153 taken as relative to the server root.
20154
20155 @item @code{server-name} (default: @code{#f})
20156 The @code{ServerName} in the configuration file, used to specify the
20157 request scheme, hostname and port that the server uses to identify
20158 itself.
20159
20160 This doesn't need to be set in the server config, and can be specified
20161 in virtual hosts. The default is @code{#f} to not specify a
20162 @code{ServerName}.
20163
20164 @item @code{document-root} (default: @code{"/srv/http"})
20165 The @code{DocumentRoot} from which files will be served.
20166
20167 @item @code{listen} (default: @code{'("80")})
20168 The list of values for the @code{Listen} directives in the config
20169 file. The value should be a list of strings, when each string can
20170 specify the port number to listen on, and optionally the IP address and
20171 protocol to use.
20172
20173 @item @code{pid-file} (default: @code{"/var/run/httpd"})
20174 The @code{PidFile} to use. This should match the @code{pid-file} set in
20175 the @code{httpd-configuration} so that the Shepherd service is
20176 configured correctly.
20177
20178 @item @code{error-log} (default: @code{"/var/log/httpd/error_log"})
20179 The @code{ErrorLog} to which the server will log errors.
20180
20181 @item @code{user} (default: @code{"httpd"})
20182 The @code{User} which the server will answer requests as.
20183
20184 @item @code{group} (default: @code{"httpd"})
20185 The @code{Group} which the server will answer requests as.
20186
20187 @item @code{extra-config} (default: @code{(list "TypesConfig etc/httpd/mime.types")})
20188 A flat list of strings and G-expressions which will be added to the end
20189 of the configuration file.
20190
20191 Any values which the service is extended with will be appended to this
20192 list.
20193
20194 @end table
20195 @end deffn
20196
20197 @deffn {Data Type} httpd-virtualhost
20198 This data type represents a virtualhost configuration block for the httpd service.
20199
20200 These should be added to the extra-config for the httpd-service.
20201
20202 @lisp
20203 (simple-service 'www.example.com-server httpd-service-type
20204 (list
20205 (httpd-virtualhost
20206 "*:80"
20207 (list (string-join '("ServerName www.example.com"
20208 "DocumentRoot /srv/http/www.example.com")
20209 "\n")))))
20210 @end lisp
20211
20212 @table @asis
20213 @item @code{addresses-and-ports}
20214 The addresses and ports for the @code{VirtualHost} directive.
20215
20216 @item @code{contents}
20217 The contents of the @code{VirtualHost} directive, this should be a list
20218 of strings and G-expressions.
20219
20220 @end table
20221 @end deffn
20222
20223 @subsubheading NGINX
20224
20225 @deffn {Scheme Variable} nginx-service-type
20226 Service type for the @uref{https://nginx.org/,NGinx} web server. The
20227 value for this service type is a @code{<nginx-configuration>} record.
20228
20229 A simple example configuration is given below.
20230
20231 @lisp
20232 (service nginx-service-type
20233 (nginx-configuration
20234 (server-blocks
20235 (list (nginx-server-configuration
20236 (server-name '("www.example.com"))
20237 (root "/srv/http/www.example.com"))))))
20238 @end lisp
20239
20240 In addition to adding server blocks to the service configuration
20241 directly, this service can be extended by other services to add server
20242 blocks, as in this example:
20243
20244 @lisp
20245 (simple-service 'my-extra-server nginx-service-type
20246 (list (nginx-server-configuration
20247 (root "/srv/http/extra-website")
20248 (try-files (list "$uri" "$uri/index.html")))))
20249 @end lisp
20250 @end deffn
20251
20252 At startup, @command{nginx} has not yet read its configuration file, so
20253 it uses a default file to log error messages. If it fails to load its
20254 configuration file, that is where error messages are logged. After the
20255 configuration file is loaded, the default error log file changes as per
20256 configuration. In our case, startup error messages can be found in
20257 @file{/var/run/nginx/logs/error.log}, and after configuration in
20258 @file{/var/log/nginx/error.log}. The second location can be changed
20259 with the @var{log-directory} configuration option.
20260
20261 @deffn {Data Type} nginx-configuration
20262 This data type represents the configuration for NGinx. Some
20263 configuration can be done through this and the other provided record
20264 types, or alternatively, a config file can be provided.
20265
20266 @table @asis
20267 @item @code{nginx} (default: @code{nginx})
20268 The nginx package to use.
20269
20270 @item @code{log-directory} (default: @code{"/var/log/nginx"})
20271 The directory to which NGinx will write log files.
20272
20273 @item @code{run-directory} (default: @code{"/var/run/nginx"})
20274 The directory in which NGinx will create a pid file, and write temporary
20275 files.
20276
20277 @item @code{server-blocks} (default: @code{'()})
20278 A list of @dfn{server blocks} to create in the generated configuration
20279 file, the elements should be of type
20280 @code{<nginx-server-configuration>}.
20281
20282 The following example would setup NGinx to serve @code{www.example.com}
20283 from the @code{/srv/http/www.example.com} directory, without using
20284 HTTPS.
20285 @lisp
20286 (service nginx-service-type
20287 (nginx-configuration
20288 (server-blocks
20289 (list (nginx-server-configuration
20290 (server-name '("www.example.com"))
20291 (root "/srv/http/www.example.com"))))))
20292 @end lisp
20293
20294 @item @code{upstream-blocks} (default: @code{'()})
20295 A list of @dfn{upstream blocks} to create in the generated configuration
20296 file, the elements should be of type
20297 @code{<nginx-upstream-configuration>}.
20298
20299 Configuring upstreams through the @code{upstream-blocks} can be useful
20300 when combined with @code{locations} in the
20301 @code{<nginx-server-configuration>} records. The following example
20302 creates a server configuration with one location configuration, that
20303 will proxy requests to a upstream configuration, which will handle
20304 requests with two servers.
20305
20306 @lisp
20307 (service
20308 nginx-service-type
20309 (nginx-configuration
20310 (server-blocks
20311 (list (nginx-server-configuration
20312 (server-name '("www.example.com"))
20313 (root "/srv/http/www.example.com")
20314 (locations
20315 (list
20316 (nginx-location-configuration
20317 (uri "/path1")
20318 (body '("proxy_pass http://server-proxy;"))))))))
20319 (upstream-blocks
20320 (list (nginx-upstream-configuration
20321 (name "server-proxy")
20322 (servers (list "server1.example.com"
20323 "server2.example.com")))))))
20324 @end lisp
20325
20326 @item @code{file} (default: @code{#f})
20327 If a configuration @var{file} is provided, this will be used, rather than
20328 generating a configuration file from the provided @code{log-directory},
20329 @code{run-directory}, @code{server-blocks} and @code{upstream-blocks}. For
20330 proper operation, these arguments should match what is in @var{file} to ensure
20331 that the directories are created when the service is activated.
20332
20333 This can be useful if you have an existing configuration file, or it's
20334 not possible to do what is required through the other parts of the
20335 nginx-configuration record.
20336
20337 @item @code{server-names-hash-bucket-size} (default: @code{#f})
20338 Bucket size for the server names hash tables, defaults to @code{#f} to
20339 use the size of the processors cache line.
20340
20341 @item @code{server-names-hash-bucket-max-size} (default: @code{#f})
20342 Maximum bucket size for the server names hash tables.
20343
20344 @item @code{modules} (default: @code{'()})
20345 List of nginx dynamic modules to load. This should be a list of file
20346 names of loadable modules, as in this example:
20347
20348 @lisp
20349 (modules
20350 (list
20351 (file-append nginx-accept-language-module "\
20352 /etc/nginx/modules/ngx_http_accept_language_module.so")))
20353 @end lisp
20354
20355 @item @code{global-directives} (default: @code{'((events . ()))})
20356 Association list of global directives for the top level of the nginx
20357 configuration. Values may themselves be association lists.
20358
20359 @lisp
20360 (global-directives
20361 `((worker_processes . 16)
20362 (pcre_jit . on)
20363 (events . ((worker_connections . 1024)))))
20364 @end lisp
20365
20366 @item @code{extra-content} (default: @code{""})
20367 Extra content for the @code{http} block. Should be string or a string
20368 valued G-expression.
20369
20370 @end table
20371 @end deffn
20372
20373 @deftp {Data Type} nginx-server-configuration
20374 Data type representing the configuration of an nginx server block.
20375 This type has the following parameters:
20376
20377 @table @asis
20378 @item @code{listen} (default: @code{'("80" "443 ssl")})
20379 Each @code{listen} directive sets the address and port for IP, or the
20380 path for a UNIX-domain socket on which the server will accept requests.
20381 Both address and port, or only address or only port can be specified.
20382 An address may also be a hostname, for example:
20383
20384 @lisp
20385 '("127.0.0.1:8000" "127.0.0.1" "8000" "*:8000" "localhost:8000")
20386 @end lisp
20387
20388 @item @code{server-name} (default: @code{(list 'default)})
20389 A list of server names this server represents. @code{'default} represents the
20390 default server for connections matching no other server.
20391
20392 @item @code{root} (default: @code{"/srv/http"})
20393 Root of the website nginx will serve.
20394
20395 @item @code{locations} (default: @code{'()})
20396 A list of @dfn{nginx-location-configuration} or
20397 @dfn{nginx-named-location-configuration} records to use within this
20398 server block.
20399
20400 @item @code{index} (default: @code{(list "index.html")})
20401 Index files to look for when clients ask for a directory. If it cannot be found,
20402 Nginx will send the list of files in the directory.
20403
20404 @item @code{try-files} (default: @code{'()})
20405 A list of files whose existence is checked in the specified order.
20406 @code{nginx} will use the first file it finds to process the request.
20407
20408 @item @code{ssl-certificate} (default: @code{#f})
20409 Where to find the certificate for secure connections. Set it to @code{#f} if
20410 you don't have a certificate or you don't want to use HTTPS.
20411
20412 @item @code{ssl-certificate-key} (default: @code{#f})
20413 Where to find the private key for secure connections. Set it to @code{#f} if
20414 you don't have a key or you don't want to use HTTPS.
20415
20416 @item @code{server-tokens?} (default: @code{#f})
20417 Whether the server should add its configuration to response.
20418
20419 @item @code{raw-content} (default: @code{'()})
20420 A list of raw lines added to the server block.
20421
20422 @end table
20423 @end deftp
20424
20425 @deftp {Data Type} nginx-upstream-configuration
20426 Data type representing the configuration of an nginx @code{upstream}
20427 block. This type has the following parameters:
20428
20429 @table @asis
20430 @item @code{name}
20431 Name for this group of servers.
20432
20433 @item @code{servers}
20434 Specify the addresses of the servers in the group. The address can be
20435 specified as a IP address (e.g.@: @samp{127.0.0.1}), domain name
20436 (e.g.@: @samp{backend1.example.com}) or a path to a UNIX socket using the
20437 prefix @samp{unix:}. For addresses using an IP address or domain name,
20438 the default port is 80, and a different port can be specified
20439 explicitly.
20440
20441 @end table
20442 @end deftp
20443
20444 @deftp {Data Type} nginx-location-configuration
20445 Data type representing the configuration of an nginx @code{location}
20446 block. This type has the following parameters:
20447
20448 @table @asis
20449 @item @code{uri}
20450 URI which this location block matches.
20451
20452 @anchor{nginx-location-configuration body}
20453 @item @code{body}
20454 Body of the location block, specified as a list of strings. This can contain
20455 many
20456 configuration directives. For example, to pass requests to a upstream
20457 server group defined using an @code{nginx-upstream-configuration} block,
20458 the following directive would be specified in the body @samp{(list "proxy_pass
20459 http://upstream-name;")}.
20460
20461 @end table
20462 @end deftp
20463
20464 @deftp {Data Type} nginx-named-location-configuration
20465 Data type representing the configuration of an nginx named location
20466 block. Named location blocks are used for request redirection, and not
20467 used for regular request processing. This type has the following
20468 parameters:
20469
20470 @table @asis
20471 @item @code{name}
20472 Name to identify this location block.
20473
20474 @item @code{body}
20475 @xref{nginx-location-configuration body}, as the body for named location
20476 blocks can be used in a similar way to the
20477 @code{nginx-location-configuration body}. One restriction is that the
20478 body of a named location block cannot contain location blocks.
20479
20480 @end table
20481 @end deftp
20482
20483 @subsubheading Varnish Cache
20484 @cindex Varnish
20485 Varnish is a fast cache server that sits in between web applications
20486 and end users. It proxies requests from clients and caches the
20487 accessed URLs such that multiple requests for the same resource only
20488 creates one request to the back-end.
20489
20490 @defvr {Scheme Variable} varnish-service-type
20491 Service type for the Varnish daemon.
20492 @end defvr
20493
20494 @deftp {Data Type} varnish-configuration
20495 Data type representing the @code{varnish} service configuration.
20496 This type has the following parameters:
20497
20498 @table @asis
20499 @item @code{package} (default: @code{varnish})
20500 The Varnish package to use.
20501
20502 @item @code{name} (default: @code{"default"})
20503 A name for this Varnish instance. Varnish will create a directory in
20504 @file{/var/varnish/} with this name and keep temporary files there. If
20505 the name starts with a forward slash, it is interpreted as an absolute
20506 directory name.
20507
20508 Pass the @code{-n} argument to other Varnish programs to connect to the
20509 named instance, e.g.@: @command{varnishncsa -n default}.
20510
20511 @item @code{backend} (default: @code{"localhost:8080"})
20512 The backend to use. This option has no effect if @code{vcl} is set.
20513
20514 @item @code{vcl} (default: #f)
20515 The @dfn{VCL} (Varnish Configuration Language) program to run. If this
20516 is @code{#f}, Varnish will proxy @code{backend} using the default
20517 configuration. Otherwise this must be a file-like object with valid
20518 VCL syntax.
20519
20520 @c Varnish does not support HTTPS, so keep this URL to avoid confusion.
20521 For example, to mirror @url{https://www.gnu.org,www.gnu.org} with VCL you
20522 can do something along these lines:
20523
20524 @lisp
20525 (define %gnu-mirror
20526 (plain-file "gnu.vcl"
20527 "vcl 4.1;
20528 backend gnu @{ .host = \"www.gnu.org\"; @}"))
20529
20530 (operating-system
20531 ;; @dots{}
20532 (services (cons (service varnish-service-type
20533 (varnish-configuration
20534 (listen '(":80"))
20535 (vcl %gnu-mirror)))
20536 %base-services)))
20537 @end lisp
20538
20539 The configuration of an already running Varnish instance can be inspected
20540 and changed using the @command{varnishadm} program.
20541
20542 Consult the @url{https://varnish-cache.org/docs/,Varnish User Guide} and
20543 @url{https://book.varnish-software.com/4.0/,Varnish Book} for
20544 comprehensive documentation on Varnish and its configuration language.
20545
20546 @item @code{listen} (default: @code{'("localhost:80")})
20547 List of addresses Varnish will listen on.
20548
20549 @item @code{storage} (default: @code{'("malloc,128m")})
20550 List of storage backends that will be available in VCL.
20551
20552 @item @code{parameters} (default: @code{'()})
20553 List of run-time parameters in the form @code{'(("parameter" . "value"))}.
20554
20555 @item @code{extra-options} (default: @code{'()})
20556 Additional arguments to pass to the @command{varnishd} process.
20557
20558 @end table
20559 @end deftp
20560
20561 @subsubheading Patchwork
20562 @cindex Patchwork
20563 Patchwork is a patch tracking system. It can collect patches sent to a
20564 mailing list, and display them in a web interface.
20565
20566 @defvr {Scheme Variable} patchwork-service-type
20567 Service type for Patchwork.
20568 @end defvr
20569
20570 The following example is an example of a minimal service for Patchwork, for
20571 the @code{patchwork.example.com} domain.
20572
20573 @lisp
20574 (service patchwork-service-type
20575 (patchwork-configuration
20576 (domain "patchwork.example.com")
20577 (settings-module
20578 (patchwork-settings-module
20579 (allowed-hosts (list domain))
20580 (default-from-email "patchwork@@patchwork.example.com")))
20581 (getmail-retriever-config
20582 (getmail-retriever-configuration
20583 (type "SimpleIMAPSSLRetriever")
20584 (server "imap.example.com")
20585 (port 993)
20586 (username "patchwork")
20587 (password-command
20588 (list (file-append coreutils "/bin/cat")
20589 "/etc/getmail-patchwork-imap-password"))
20590 (extra-parameters
20591 '((mailboxes . ("Patches"))))))))
20592
20593 @end lisp
20594
20595 There are three records for configuring the Patchwork service. The
20596 @code{<patchwork-configuration>} relates to the configuration for Patchwork
20597 within the HTTPD service.
20598
20599 The @code{settings-module} field within the @code{<patchwork-configuration>}
20600 record can be populated with the @code{<patchwork-settings-module>} record,
20601 which describes a settings module that is generated within the Guix store.
20602
20603 For the @code{database-configuration} field within the
20604 @code{<patchwork-settings-module>}, the
20605 @code{<patchwork-database-configuration>} must be used.
20606
20607 @deftp {Data Type} patchwork-configuration
20608 Data type representing the Patchwork service configuration. This type has the
20609 following parameters:
20610
20611 @table @asis
20612 @item @code{patchwork} (default: @code{patchwork})
20613 The Patchwork package to use.
20614
20615 @item @code{domain}
20616 The domain to use for Patchwork, this is used in the HTTPD service virtual
20617 host.
20618
20619 @item @code{settings-module}
20620 The settings module to use for Patchwork. As a Django application, Patchwork
20621 is configured with a Python module containing the settings. This can either be
20622 an instance of the @code{<patchwork-settings-module>} record, any other record
20623 that represents the settings in the store, or a directory outside of the
20624 store.
20625
20626 @item @code{static-path} (default: @code{"/static/"})
20627 The path under which the HTTPD service should serve the static files.
20628
20629 @item @code{getmail-retriever-config}
20630 The getmail-retriever-configuration record value to use with
20631 Patchwork. Getmail will be configured with this value, the messages will be
20632 delivered to Patchwork.
20633
20634 @end table
20635 @end deftp
20636
20637 @deftp {Data Type} patchwork-settings-module
20638 Data type representing a settings module for Patchwork. Some of these
20639 settings relate directly to Patchwork, but others relate to Django, the web
20640 framework used by Patchwork, or the Django Rest Framework library. This type
20641 has the following parameters:
20642
20643 @table @asis
20644 @item @code{database-configuration} (default: @code{(patchwork-database-configuration)})
20645 The database connection settings used for Patchwork. See the
20646 @code{<patchwork-database-configuration>} record type for more information.
20647
20648 @item @code{secret-key-file} (default: @code{"/etc/patchwork/django-secret-key"})
20649 Patchwork, as a Django web application uses a secret key for cryptographically
20650 signing values. This file should contain a unique unpredictable value.
20651
20652 If this file does not exist, it will be created and populated with a random
20653 value by the patchwork-setup shepherd service.
20654
20655 This setting relates to Django.
20656
20657 @item @code{allowed-hosts}
20658 A list of valid hosts for this Patchwork service. This should at least include
20659 the domain specified in the @code{<patchwork-configuration>} record.
20660
20661 This is a Django setting.
20662
20663 @item @code{default-from-email}
20664 The email address from which Patchwork should send email by default.
20665
20666 This is a Patchwork setting.
20667
20668 @item @code{static-url} (default: @code{#f})
20669 The URL to use when serving static assets. It can be part of a URL, or a full
20670 URL, but must end in a @code{/}.
20671
20672 If the default value is used, the @code{static-path} value from the
20673 @code{<patchwork-configuration>} record will be used.
20674
20675 This is a Django setting.
20676
20677 @item @code{admins} (default: @code{'()})
20678 Email addresses to send the details of errors that occur. Each value should
20679 be a list containing two elements, the name and then the email address.
20680
20681 This is a Django setting.
20682
20683 @item @code{debug?} (default: @code{#f})
20684 Whether to run Patchwork in debug mode. If set to @code{#t}, detailed error
20685 messages will be shown.
20686
20687 This is a Django setting.
20688
20689 @item @code{enable-rest-api?} (default: @code{#t})
20690 Whether to enable the Patchwork REST API.
20691
20692 This is a Patchwork setting.
20693
20694 @item @code{enable-xmlrpc?} (default: @code{#t})
20695 Whether to enable the XML RPC API.
20696
20697 This is a Patchwork setting.
20698
20699 @item @code{force-https-links?} (default: @code{#t})
20700 Whether to use HTTPS links on Patchwork pages.
20701
20702 This is a Patchwork setting.
20703
20704 @item @code{extra-settings} (default: @code{""})
20705 Extra code to place at the end of the Patchwork settings module.
20706
20707 @end table
20708 @end deftp
20709
20710 @deftp {Data Type} patchwork-database-configuration
20711 Data type representing the database configuration for Patchwork.
20712
20713 @table @asis
20714 @item @code{engine} (default: @code{"django.db.backends.postgresql_psycopg2"})
20715 The database engine to use.
20716
20717 @item @code{name} (default: @code{"patchwork"})
20718 The name of the database to use.
20719
20720 @item @code{user} (default: @code{"httpd"})
20721 The user to connect to the database as.
20722
20723 @item @code{password} (default: @code{""})
20724 The password to use when connecting to the database.
20725
20726 @item @code{host} (default: @code{""})
20727 The host to make the database connection to.
20728
20729 @item @code{port} (default: @code{""})
20730 The port on which to connect to the database.
20731
20732 @end table
20733 @end deftp
20734
20735 @subsubheading Mumi
20736
20737 @cindex Mumi, Debbugs Web interface
20738 @cindex Debbugs, Mumi Web interface
20739 @uref{https://git.elephly.net/gitweb.cgi?p=software/mumi.git, Mumi} is a
20740 Web interface to the Debbugs bug tracker, by default for
20741 @uref{https://bugs.gnu.org, the GNU instance}. Mumi is a Web server,
20742 but it also fetches and indexes mail retrieved from Debbugs.
20743
20744 @defvr {Scheme Variable} mumi-service-type
20745 This is the service type for Mumi.
20746 @end defvr
20747
20748 @deftp {Data Type} mumi-configuration
20749 Data type representing the Mumi service configuration. This type has the
20750 following fields:
20751
20752 @table @asis
20753 @item @code{mumi} (default: @code{mumi})
20754 The Mumi package to use.
20755
20756 @item @code{mailer?} (default: @code{#true})
20757 Whether to enable or disable the mailer component.
20758
20759 @item @code{mumi-configuration-sender}
20760 The email address used as the sender for comments.
20761
20762 @item @code{mumi-configuration-smtp}
20763 A URI to configure the SMTP settings for Mailutils. This could be
20764 something like @code{sendmail:///path/to/bin/msmtp} or any other URI
20765 supported by Mailutils. @xref{SMTP Mailboxes, SMTP Mailboxes,,
20766 mailutils, GNU@tie{}Mailutils}.
20767
20768 @end table
20769 @end deftp
20770
20771
20772 @subsubheading FastCGI
20773 @cindex fastcgi
20774 @cindex fcgiwrap
20775 FastCGI is an interface between the front-end and the back-end of a web
20776 service. It is a somewhat legacy facility; new web services should
20777 generally just talk HTTP between the front-end and the back-end.
20778 However there are a number of back-end services such as PHP or the
20779 optimized HTTP Git repository access that use FastCGI, so we have
20780 support for it in Guix.
20781
20782 To use FastCGI, you configure the front-end web server (e.g., nginx) to
20783 dispatch some subset of its requests to the fastcgi backend, which
20784 listens on a local TCP or UNIX socket. There is an intermediary
20785 @code{fcgiwrap} program that sits between the actual backend process and
20786 the web server. The front-end indicates which backend program to run,
20787 passing that information to the @code{fcgiwrap} process.
20788
20789 @defvr {Scheme Variable} fcgiwrap-service-type
20790 A service type for the @code{fcgiwrap} FastCGI proxy.
20791 @end defvr
20792
20793 @deftp {Data Type} fcgiwrap-configuration
20794 Data type representing the configuration of the @code{fcgiwrap} service.
20795 This type has the following parameters:
20796 @table @asis
20797 @item @code{package} (default: @code{fcgiwrap})
20798 The fcgiwrap package to use.
20799
20800 @item @code{socket} (default: @code{tcp:127.0.0.1:9000})
20801 The socket on which the @code{fcgiwrap} process should listen, as a
20802 string. Valid @var{socket} values include
20803 @code{unix:@var{/path/to/unix/socket}},
20804 @code{tcp:@var{dot.ted.qu.ad}:@var{port}} and
20805 @code{tcp6:[@var{ipv6_addr}]:port}.
20806
20807 @item @code{user} (default: @code{fcgiwrap})
20808 @itemx @code{group} (default: @code{fcgiwrap})
20809 The user and group names, as strings, under which to run the
20810 @code{fcgiwrap} process. The @code{fastcgi} service will ensure that if
20811 the user asks for the specific user or group names @code{fcgiwrap} that
20812 the corresponding user and/or group is present on the system.
20813
20814 It is possible to configure a FastCGI-backed web service to pass HTTP
20815 authentication information from the front-end to the back-end, and to
20816 allow @code{fcgiwrap} to run the back-end process as a corresponding
20817 local user. To enable this capability on the back-end, run
20818 @code{fcgiwrap} as the @code{root} user and group. Note that this
20819 capability also has to be configured on the front-end as well.
20820 @end table
20821 @end deftp
20822
20823 @cindex php-fpm
20824 PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation
20825 with some additional features useful for sites of any size.
20826
20827 These features include:
20828 @itemize @bullet
20829 @item Adaptive process spawning
20830 @item Basic statistics (similar to Apache's mod_status)
20831 @item Advanced process management with graceful stop/start
20832 @item Ability to start workers with different uid/gid/chroot/environment
20833 and different php.ini (replaces safe_mode)
20834 @item Stdout & stderr logging
20835 @item Emergency restart in case of accidental opcode cache destruction
20836 @item Accelerated upload support
20837 @item Support for a "slowlog"
20838 @item Enhancements to FastCGI, such as fastcgi_finish_request() -
20839 a special function to finish request & flush all data while continuing to do
20840 something time-consuming (video converting, stats processing, etc.)
20841 @end itemize
20842 ...@: and much more.
20843
20844 @defvr {Scheme Variable} php-fpm-service-type
20845 A Service type for @code{php-fpm}.
20846 @end defvr
20847
20848 @deftp {Data Type} php-fpm-configuration
20849 Data Type for php-fpm service configuration.
20850 @table @asis
20851 @item @code{php} (default: @code{php})
20852 The php package to use.
20853 @item @code{socket} (default: @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.sock")})
20854 The address on which to accept FastCGI requests. Valid syntaxes are:
20855 @table @asis
20856 @item @code{"ip.add.re.ss:port"}
20857 Listen on a TCP socket to a specific address on a specific port.
20858 @item @code{"port"}
20859 Listen on a TCP socket to all addresses on a specific port.
20860 @item @code{"/path/to/unix/socket"}
20861 Listen on a unix socket.
20862 @end table
20863
20864 @item @code{user} (default: @code{php-fpm})
20865 User who will own the php worker processes.
20866 @item @code{group} (default: @code{php-fpm})
20867 Group of the worker processes.
20868 @item @code{socket-user} (default: @code{php-fpm})
20869 User who can speak to the php-fpm socket.
20870 @item @code{socket-group} (default: @code{nginx})
20871 Group that can speak to the php-fpm socket.
20872 @item @code{pid-file} (default: @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.pid")})
20873 The process id of the php-fpm process is written to this file
20874 once the service has started.
20875 @item @code{log-file} (default: @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.log")})
20876 Log for the php-fpm master process.
20877 @item @code{process-manager} (default: @code{(php-fpm-dynamic-process-manager-configuration)})
20878 Detailed settings for the php-fpm process manager.
20879 Must be one of:
20880 @table @asis
20881 @item @code{<php-fpm-dynamic-process-manager-configuration>}
20882 @item @code{<php-fpm-static-process-manager-configuration>}
20883 @item @code{<php-fpm-on-demand-process-manager-configuration>}
20884 @end table
20885 @item @code{display-errors} (default @code{#f})
20886 Determines whether php errors and warning should be sent to clients
20887 and displayed in their browsers.
20888 This is useful for local php development, but a security risk for public sites,
20889 as error messages can reveal passwords and personal data.
20890 @item @code{timezone} (default @code{#f})
20891 Specifies @code{php_admin_value[date.timezone]} parameter.
20892 @item @code{workers-logfile} (default @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.www.log")})
20893 This file will log the @code{stderr} outputs of php worker processes.
20894 Can be set to @code{#f} to disable logging.
20895 @item @code{file} (default @code{#f})
20896 An optional override of the whole configuration.
20897 You can use the @code{mixed-text-file} function or an absolute filepath for it.
20898 @end table
20899 @end deftp
20900
20901 @deftp {Data type} php-fpm-dynamic-process-manager-configuration
20902 Data Type for the @code{dynamic} php-fpm process manager. With the
20903 @code{dynamic} process manager, spare worker processes are kept around
20904 based on it's configured limits.
20905 @table @asis
20906 @item @code{max-children} (default: @code{5})
20907 Maximum of worker processes.
20908 @item @code{start-servers} (default: @code{2})
20909 How many worker processes should be started on start-up.
20910 @item @code{min-spare-servers} (default: @code{1})
20911 How many spare worker processes should be kept around at minimum.
20912 @item @code{max-spare-servers} (default: @code{3})
20913 How many spare worker processes should be kept around at maximum.
20914 @end table
20915 @end deftp
20916
20917 @deftp {Data type} php-fpm-static-process-manager-configuration
20918 Data Type for the @code{static} php-fpm process manager. With the
20919 @code{static} process manager, an unchanging number of worker processes
20920 are created.
20921 @table @asis
20922 @item @code{max-children} (default: @code{5})
20923 Maximum of worker processes.
20924 @end table
20925 @end deftp
20926
20927 @deftp {Data type} php-fpm-on-demand-process-manager-configuration
20928 Data Type for the @code{on-demand} php-fpm process manager. With the
20929 @code{on-demand} process manager, worker processes are only created as
20930 requests arrive.
20931 @table @asis
20932 @item @code{max-children} (default: @code{5})
20933 Maximum of worker processes.
20934 @item @code{process-idle-timeout} (default: @code{10})
20935 The time in seconds after which a process with no requests is killed.
20936 @end table
20937 @end deftp
20938
20939
20940 @deffn {Scheme Procedure} nginx-php-location @
20941 [#:nginx-package nginx] @
20942 [socket (string-append "/var/run/php" @
20943 (version-major (package-version php)) @
20944 "-fpm.sock")]
20945 A helper function to quickly add php to an @code{nginx-server-configuration}.
20946 @end deffn
20947
20948 A simple services setup for nginx with php can look like this:
20949 @lisp
20950 (services (cons* (service dhcp-client-service-type)
20951 (service php-fpm-service-type)
20952 (service nginx-service-type
20953 (nginx-server-configuration
20954 (server-name '("example.com"))
20955 (root "/srv/http/")
20956 (locations
20957 (list (nginx-php-location)))
20958 (listen '("80"))
20959 (ssl-certificate #f)
20960 (ssl-certificate-key #f)))
20961 %base-services))
20962 @end lisp
20963
20964 @cindex cat-avatar-generator
20965 The cat avatar generator is a simple service to demonstrate the use of php-fpm
20966 in @code{Nginx}. It is used to generate cat avatar from a seed, for instance
20967 the hash of a user's email address.
20968
20969 @deffn {Scheme Procedure} cat-avatar-generator-service @
20970 [#:cache-dir "/var/cache/cat-avatar-generator"] @
20971 [#:package cat-avatar-generator] @
20972 [#:configuration (nginx-server-configuration)]
20973 Returns an nginx-server-configuration that inherits @code{configuration}. It
20974 extends the nginx configuration to add a server block that serves @code{package},
20975 a version of cat-avatar-generator. During execution, cat-avatar-generator will
20976 be able to use @code{cache-dir} as its cache directory.
20977 @end deffn
20978
20979 A simple setup for cat-avatar-generator can look like this:
20980 @lisp
20981 (services (cons* (cat-avatar-generator-service
20982 #:configuration
20983 (nginx-server-configuration
20984 (server-name '("example.com"))))
20985 ...
20986 %base-services))
20987 @end lisp
20988
20989 @subsubheading Hpcguix-web
20990
20991 @cindex hpcguix-web
20992 The @uref{https://github.com/UMCUGenetics/hpcguix-web/, hpcguix-web}
20993 program is a customizable web interface to browse Guix packages,
20994 initially designed for users of high-performance computing (HPC)
20995 clusters.
20996
20997 @defvr {Scheme Variable} hpcguix-web-service-type
20998 The service type for @code{hpcguix-web}.
20999 @end defvr
21000
21001 @deftp {Data Type} hpcguix-web-configuration
21002 Data type for the hpcguix-web service configuration.
21003
21004 @table @asis
21005 @item @code{specs}
21006 A gexp (@pxref{G-Expressions}) specifying the hpcguix-web service
21007 configuration. The main items available in this spec are:
21008
21009 @table @asis
21010 @item @code{title-prefix} (default: @code{"hpcguix | "})
21011 The page title prefix.
21012
21013 @item @code{guix-command} (default: @code{"guix"})
21014 The @command{guix} command.
21015
21016 @item @code{package-filter-proc} (default: @code{(const #t)})
21017 A procedure specifying how to filter packages that are displayed.
21018
21019 @item @code{package-page-extension-proc} (default: @code{(const '())})
21020 Extension package for @code{hpcguix-web}.
21021
21022 @item @code{menu} (default: @code{'()})
21023 Additional entry in page @code{menu}.
21024
21025 @item @code{channels} (default: @code{%default-channels})
21026 List of channels from which the package list is built (@pxref{Channels}).
21027
21028 @item @code{package-list-expiration} (default: @code{(* 12 3600)})
21029 The expiration time, in seconds, after which the package list is rebuilt from
21030 the latest instances of the given channels.
21031 @end table
21032
21033 See the hpcguix-web repository for a
21034 @uref{https://github.com/UMCUGenetics/hpcguix-web/blob/master/hpcweb-configuration.scm,
21035 complete example}.
21036
21037 @item @code{package} (default: @code{hpcguix-web})
21038 The hpcguix-web package to use.
21039 @end table
21040 @end deftp
21041
21042 A typical hpcguix-web service declaration looks like this:
21043
21044 @lisp
21045 (service hpcguix-web-service-type
21046 (hpcguix-web-configuration
21047 (specs
21048 #~(define site-config
21049 (hpcweb-configuration
21050 (title-prefix "Guix-HPC - ")
21051 (menu '(("/about" "ABOUT"))))))))
21052 @end lisp
21053
21054 @quotation Note
21055 The hpcguix-web service periodically updates the package list it publishes by
21056 pulling channels from Git. To that end, it needs to access X.509 certificates
21057 so that it can authenticate Git servers when communicating over HTTPS, and it
21058 assumes that @file{/etc/ssl/certs} contains those certificates.
21059
21060 Thus, make sure to add @code{nss-certs} or another certificate package to the
21061 @code{packages} field of your configuration. @ref{X.509 Certificates}, for
21062 more information on X.509 certificates.
21063 @end quotation
21064
21065 @node Certificate Services
21066 @subsection Certificate Services
21067
21068 @cindex Web
21069 @cindex HTTP, HTTPS
21070 @cindex Let's Encrypt
21071 @cindex TLS certificates
21072 The @code{(gnu services certbot)} module provides a service to
21073 automatically obtain a valid TLS certificate from the Let's Encrypt
21074 certificate authority. These certificates can then be used to serve
21075 content securely over HTTPS or other TLS-based protocols, with the
21076 knowledge that the client will be able to verify the server's
21077 authenticity.
21078
21079 @url{https://letsencrypt.org/, Let's Encrypt} provides the
21080 @code{certbot} tool to automate the certification process. This tool
21081 first securely generates a key on the server. It then makes a request
21082 to the Let's Encrypt certificate authority (CA) to sign the key. The CA
21083 checks that the request originates from the host in question by using a
21084 challenge-response protocol, requiring the server to provide its
21085 response over HTTP. If that protocol completes successfully, the CA
21086 signs the key, resulting in a certificate. That certificate is valid
21087 for a limited period of time, and therefore to continue to provide TLS
21088 services, the server needs to periodically ask the CA to renew its
21089 signature.
21090
21091 The certbot service automates this process: the initial key
21092 generation, the initial certification request to the Let's Encrypt
21093 service, the web server challenge/response integration, writing the
21094 certificate to disk, the automated periodic renewals, and the deployment
21095 tasks associated with the renewal (e.g.@: reloading services, copying keys
21096 with different permissions).
21097
21098 Certbot is run twice a day, at a random minute within the hour. It
21099 won't do anything until your certificates are due for renewal or
21100 revoked, but running it regularly would give your service a chance of
21101 staying online in case a Let's Encrypt-initiated revocation happened for
21102 some reason.
21103
21104 By using this service, you agree to the ACME Subscriber Agreement, which
21105 can be found there:
21106 @url{https://acme-v01.api.letsencrypt.org/directory}.
21107
21108 @defvr {Scheme Variable} certbot-service-type
21109 A service type for the @code{certbot} Let's Encrypt client. Its value
21110 must be a @code{certbot-configuration} record as in this example:
21111
21112 @lisp
21113 (define %nginx-deploy-hook
21114 (program-file
21115 "nginx-deploy-hook"
21116 #~(let ((pid (call-with-input-file "/var/run/nginx/pid" read)))
21117 (kill pid SIGHUP))))
21118
21119 (service certbot-service-type
21120 (certbot-configuration
21121 (email "foo@@example.net")
21122 (certificates
21123 (list
21124 (certificate-configuration
21125 (domains '("example.net" "www.example.net"))
21126 (deploy-hook %nginx-deploy-hook))
21127 (certificate-configuration
21128 (domains '("bar.example.net")))))))
21129 @end lisp
21130
21131 See below for details about @code{certbot-configuration}.
21132 @end defvr
21133
21134 @deftp {Data Type} certbot-configuration
21135 Data type representing the configuration of the @code{certbot} service.
21136 This type has the following parameters:
21137
21138 @table @asis
21139 @item @code{package} (default: @code{certbot})
21140 The certbot package to use.
21141
21142 @item @code{webroot} (default: @code{/var/www})
21143 The directory from which to serve the Let's Encrypt challenge/response
21144 files.
21145
21146 @item @code{certificates} (default: @code{()})
21147 A list of @code{certificates-configuration}s for which to generate
21148 certificates and request signatures. Each certificate has a @code{name}
21149 and several @code{domains}.
21150
21151 @item @code{email}
21152 Mandatory email used for registration, recovery contact, and important
21153 account notifications.
21154
21155 @item @code{server} (default: @code{#f})
21156 Optional URL of ACME server. Setting this overrides certbot's default,
21157 which is the Let's Encrypt server.
21158
21159 @item @code{rsa-key-size} (default: @code{2048})
21160 Size of the RSA key.
21161
21162 @item @code{default-location} (default: @i{see below})
21163 The default @code{nginx-location-configuration}. Because @code{certbot}
21164 needs to be able to serve challenges and responses, it needs to be able
21165 to run a web server. It does so by extending the @code{nginx} web
21166 service with an @code{nginx-server-configuration} listening on the
21167 @var{domains} on port 80, and which has a
21168 @code{nginx-location-configuration} for the @code{/.well-known/} URI
21169 path subspace used by Let's Encrypt. @xref{Web Services}, for more on
21170 these nginx configuration data types.
21171
21172 Requests to other URL paths will be matched by the
21173 @code{default-location}, which if present is added to all
21174 @code{nginx-server-configuration}s.
21175
21176 By default, the @code{default-location} will issue a redirect from
21177 @code{http://@var{domain}/...} to @code{https://@var{domain}/...}, leaving
21178 you to define what to serve on your site via @code{https}.
21179
21180 Pass @code{#f} to not issue a default location.
21181 @end table
21182 @end deftp
21183
21184 @deftp {Data Type} certificate-configuration
21185 Data type representing the configuration of a certificate.
21186 This type has the following parameters:
21187
21188 @table @asis
21189 @item @code{name} (default: @i{see below})
21190 This name is used by Certbot for housekeeping and in file paths; it
21191 doesn't affect the content of the certificate itself. To see
21192 certificate names, run @code{certbot certificates}.
21193
21194 Its default is the first provided domain.
21195
21196 @item @code{domains} (default: @code{()})
21197 The first domain provided will be the subject CN of the certificate, and
21198 all domains will be Subject Alternative Names on the certificate.
21199
21200 @item @code{challenge} (default: @code{#f})
21201 The challenge type that has to be run by certbot. If @code{#f} is specified,
21202 default to the HTTP challenge. If a value is specified, defaults to the
21203 manual plugin (see @code{authentication-hook}, @code{cleanup-hook} and
21204 the documentation at @url{https://certbot.eff.org/docs/using.html#hooks}),
21205 and gives Let's Encrypt permission to log the public IP address of the
21206 requesting machine.
21207
21208 @item @code{authentication-hook} (default: @code{#f})
21209 Command to be run in a shell once for each certificate challenge to be
21210 answered. For this command, the shell variable @code{$CERTBOT_DOMAIN}
21211 will contain the domain being authenticated, @code{$CERTBOT_VALIDATION}
21212 contains the validation string and @code{$CERTBOT_TOKEN} contains the
21213 file name of the resource requested when performing an HTTP-01 challenge.
21214
21215 @item @code{cleanup-hook} (default: @code{#f})
21216 Command to be run in a shell once for each certificate challenge that
21217 have been answered by the @code{auth-hook}. For this command, the shell
21218 variables available in the @code{auth-hook} script are still available, and
21219 additionally @code{$CERTBOT_AUTH_OUTPUT} will contain the standard output
21220 of the @code{auth-hook} script.
21221
21222 @item @code{deploy-hook} (default: @code{#f})
21223 Command to be run in a shell once for each successfully issued
21224 certificate. For this command, the shell variable
21225 @code{$RENEWED_LINEAGE} will point to the config live subdirectory (for
21226 example, @samp{"/etc/letsencrypt/live/example.com"}) containing the new
21227 certificates and keys; the shell variable @code{$RENEWED_DOMAINS} will
21228 contain a space-delimited list of renewed certificate domains (for
21229 example, @samp{"example.com www.example.com"}.
21230
21231 @end table
21232 @end deftp
21233
21234 For each @code{certificate-configuration}, the certificate is saved to
21235 @code{/etc/letsencrypt/live/@var{name}/fullchain.pem} and the key is
21236 saved to @code{/etc/letsencrypt/live/@var{name}/privkey.pem}.
21237 @node DNS Services
21238 @subsection DNS Services
21239 @cindex DNS (domain name system)
21240 @cindex domain name system (DNS)
21241
21242 The @code{(gnu services dns)} module provides services related to the
21243 @dfn{domain name system} (DNS). It provides a server service for hosting
21244 an @emph{authoritative} DNS server for multiple zones, slave or master.
21245 This service uses @uref{https://www.knot-dns.cz/, Knot DNS}. And also a
21246 caching and forwarding DNS server for the LAN, which uses
21247 @uref{http://www.thekelleys.org.uk/dnsmasq/doc.html, dnsmasq}.
21248
21249 @subsubheading Knot Service
21250
21251 An example configuration of an authoritative server for two zones, one master
21252 and one slave, is:
21253
21254 @lisp
21255 (define-zone-entries example.org.zone
21256 ;; Name TTL Class Type Data
21257 ("@@" "" "IN" "A" "127.0.0.1")
21258 ("@@" "" "IN" "NS" "ns")
21259 ("ns" "" "IN" "A" "127.0.0.1"))
21260
21261 (define master-zone
21262 (knot-zone-configuration
21263 (domain "example.org")
21264 (zone (zone-file
21265 (origin "example.org")
21266 (entries example.org.zone)))))
21267
21268 (define slave-zone
21269 (knot-zone-configuration
21270 (domain "plop.org")
21271 (dnssec-policy "default")
21272 (master (list "plop-master"))))
21273
21274 (define plop-master
21275 (knot-remote-configuration
21276 (id "plop-master")
21277 (address (list "208.76.58.171"))))
21278
21279 (operating-system
21280 ;; ...
21281 (services (cons* (service knot-service-type
21282 (knot-configuration
21283 (remotes (list plop-master))
21284 (zones (list master-zone slave-zone))))
21285 ;; ...
21286 %base-services)))
21287 @end lisp
21288
21289 @deffn {Scheme Variable} knot-service-type
21290 This is the type for the Knot DNS server.
21291
21292 Knot DNS is an authoritative DNS server, meaning that it can serve multiple
21293 zones, that is to say domain names you would buy from a registrar. This server
21294 is not a resolver, meaning that it can only resolve names for which it is
21295 authoritative. This server can be configured to serve zones as a master server
21296 or a slave server as a per-zone basis. Slave zones will get their data from
21297 masters, and will serve it as an authoritative server. From the point of view
21298 of a resolver, there is no difference between master and slave.
21299
21300 The following data types are used to configure the Knot DNS server:
21301 @end deffn
21302
21303 @deftp {Data Type} knot-key-configuration
21304 Data type representing a key.
21305 This type has the following parameters:
21306
21307 @table @asis
21308 @item @code{id} (default: @code{""})
21309 An identifier for other configuration fields to refer to this key. IDs must
21310 be unique and must not be empty.
21311
21312 @item @code{algorithm} (default: @code{#f})
21313 The algorithm to use. Choose between @code{#f}, @code{'hmac-md5},
21314 @code{'hmac-sha1}, @code{'hmac-sha224}, @code{'hmac-sha256}, @code{'hmac-sha384}
21315 and @code{'hmac-sha512}.
21316
21317 @item @code{secret} (default: @code{""})
21318 The secret key itself.
21319
21320 @end table
21321 @end deftp
21322
21323 @deftp {Data Type} knot-acl-configuration
21324 Data type representing an Access Control List (ACL) configuration.
21325 This type has the following parameters:
21326
21327 @table @asis
21328 @item @code{id} (default: @code{""})
21329 An identifier for ether configuration fields to refer to this key. IDs must be
21330 unique and must not be empty.
21331
21332 @item @code{address} (default: @code{'()})
21333 An ordered list of IP addresses, network subnets, or network ranges represented
21334 with strings. The query must match one of them. Empty value means that
21335 address match is not required.
21336
21337 @item @code{key} (default: @code{'()})
21338 An ordered list of references to keys represented with strings. The string
21339 must match a key ID defined in a @code{knot-key-configuration}. No key means
21340 that a key is not require to match that ACL.
21341
21342 @item @code{action} (default: @code{'()})
21343 An ordered list of actions that are permitted or forbidden by this ACL. Possible
21344 values are lists of zero or more elements from @code{'transfer}, @code{'notify}
21345 and @code{'update}.
21346
21347 @item @code{deny?} (default: @code{#f})
21348 When true, the ACL defines restrictions. Listed actions are forbidden. When
21349 false, listed actions are allowed.
21350
21351 @end table
21352 @end deftp
21353
21354 @deftp {Data Type} zone-entry
21355 Data type representing a record entry in a zone file.
21356 This type has the following parameters:
21357
21358 @table @asis
21359 @item @code{name} (default: @code{"@@"})
21360 The name of the record. @code{"@@"} refers to the origin of the zone. Names
21361 are relative to the origin of the zone. For example, in the @code{example.org}
21362 zone, @code{"ns.example.org"} actually refers to @code{ns.example.org.example.org}.
21363 Names ending with a dot are absolute, which means that @code{"ns.example.org."}
21364 refers to @code{ns.example.org}.
21365
21366 @item @code{ttl} (default: @code{""})
21367 The Time-To-Live (TTL) of this record. If not set, the default TTL is used.
21368
21369 @item @code{class} (default: @code{"IN"})
21370 The class of the record. Knot currently supports only @code{"IN"} and
21371 partially @code{"CH"}.
21372
21373 @item @code{type} (default: @code{"A"})
21374 The type of the record. Common types include A (IPv4 address), AAAA (IPv6
21375 address), NS (Name Server) and MX (Mail eXchange). Many other types are
21376 defined.
21377
21378 @item @code{data} (default: @code{""})
21379 The data contained in the record. For instance an IP address associated with
21380 an A record, or a domain name associated with an NS record. Remember that
21381 domain names are relative to the origin unless they end with a dot.
21382
21383 @end table
21384 @end deftp
21385
21386 @deftp {Data Type} zone-file
21387 Data type representing the content of a zone file.
21388 This type has the following parameters:
21389
21390 @table @asis
21391 @item @code{entries} (default: @code{'()})
21392 The list of entries. The SOA record is taken care of, so you don't need to
21393 put it in the list of entries. This list should probably contain an entry
21394 for your primary authoritative DNS server. Other than using a list of entries
21395 directly, you can use @code{define-zone-entries} to define a object containing
21396 the list of entries more easily, that you can later pass to the @code{entries}
21397 field of the @code{zone-file}.
21398
21399 @item @code{origin} (default: @code{""})
21400 The name of your zone. This parameter cannot be empty.
21401
21402 @item @code{ns} (default: @code{"ns"})
21403 The domain of your primary authoritative DNS server. The name is relative to
21404 the origin, unless it ends with a dot. It is mandatory that this primary
21405 DNS server corresponds to an NS record in the zone and that it is associated
21406 to an IP address in the list of entries.
21407
21408 @item @code{mail} (default: @code{"hostmaster"})
21409 An email address people can contact you at, as the owner of the zone. This
21410 is translated as @code{<mail>@@<origin>}.
21411
21412 @item @code{serial} (default: @code{1})
21413 The serial number of the zone. As this is used to keep track of changes by
21414 both slaves and resolvers, it is mandatory that it @emph{never} decreases.
21415 Always increment it when you make a change in your zone.
21416
21417 @item @code{refresh} (default: @code{(* 2 24 3600)})
21418 The frequency at which slaves will do a zone transfer. This value is a number
21419 of seconds. It can be computed by multiplications or with
21420 @code{(string->duration)}.
21421
21422 @item @code{retry} (default: @code{(* 15 60)})
21423 The period after which a slave will retry to contact its master when it fails
21424 to do so a first time.
21425
21426 @item @code{expiry} (default: @code{(* 14 24 3600)})
21427 Default TTL of records. Existing records are considered correct for at most
21428 this amount of time. After this period, resolvers will invalidate their cache
21429 and check again that it still exists.
21430
21431 @item @code{nx} (default: @code{3600})
21432 Default TTL of inexistant records. This delay is usually short because you want
21433 your new domains to reach everyone quickly.
21434
21435 @end table
21436 @end deftp
21437
21438 @deftp {Data Type} knot-remote-configuration
21439 Data type representing a remote configuration.
21440 This type has the following parameters:
21441
21442 @table @asis
21443 @item @code{id} (default: @code{""})
21444 An identifier for other configuration fields to refer to this remote. IDs must
21445 be unique and must not be empty.
21446
21447 @item @code{address} (default: @code{'()})
21448 An ordered list of destination IP addresses. Addresses are tried in sequence.
21449 An optional port can be given with the @@ separator. For instance:
21450 @code{(list "1.2.3.4" "2.3.4.5@@53")}. Default port is 53.
21451
21452 @item @code{via} (default: @code{'()})
21453 An ordered list of source IP addresses. An empty list will have Knot choose
21454 an appropriate source IP. An optional port can be given with the @@ separator.
21455 The default is to choose at random.
21456
21457 @item @code{key} (default: @code{#f})
21458 A reference to a key, that is a string containing the identifier of a key
21459 defined in a @code{knot-key-configuration} field.
21460
21461 @end table
21462 @end deftp
21463
21464 @deftp {Data Type} knot-keystore-configuration
21465 Data type representing a keystore to hold dnssec keys.
21466 This type has the following parameters:
21467
21468 @table @asis
21469 @item @code{id} (default: @code{""})
21470 The id of the keystore. It must not be empty.
21471
21472 @item @code{backend} (default: @code{'pem})
21473 The backend to store the keys in. Can be @code{'pem} or @code{'pkcs11}.
21474
21475 @item @code{config} (default: @code{"/var/lib/knot/keys/keys"})
21476 The configuration string of the backend. An example for the PKCS#11 is:
21477 @code{"pkcs11:token=knot;pin-value=1234 /gnu/store/.../lib/pkcs11/libsofthsm2.so"}.
21478 For the pem backend, the string represents a path in the file system.
21479
21480 @end table
21481 @end deftp
21482
21483 @deftp {Data Type} knot-policy-configuration
21484 Data type representing a dnssec policy. Knot DNS is able to automatically
21485 sign your zones. It can either generate and manage your keys automatically or
21486 use keys that you generate.
21487
21488 Dnssec is usually implemented using two keys: a Key Signing Key (KSK) that is
21489 used to sign the second, and a Zone Signing Key (ZSK) that is used to sign the
21490 zone. In order to be trusted, the KSK needs to be present in the parent zone
21491 (usually a top-level domain). If your registrar supports dnssec, you will
21492 have to send them your KSK's hash so they can add a DS record in their zone.
21493 This is not automated and need to be done each time you change your KSK.
21494
21495 The policy also defines the lifetime of keys. Usually, ZSK can be changed
21496 easily and use weaker cryptographic functions (they use lower parameters) in
21497 order to sign records quickly, so they are changed often. The KSK however
21498 requires manual interaction with the registrar, so they are changed less often
21499 and use stronger parameters because they sign only one record.
21500
21501 This type has the following parameters:
21502
21503 @table @asis
21504 @item @code{id} (default: @code{""})
21505 The id of the policy. It must not be empty.
21506
21507 @item @code{keystore} (default: @code{"default"})
21508 A reference to a keystore, that is a string containing the identifier of a
21509 keystore defined in a @code{knot-keystore-configuration} field. The
21510 @code{"default"} identifier means the default keystore (a kasp database that
21511 was setup by this service).
21512
21513 @item @code{manual?} (default: @code{#f})
21514 Whether the key management is manual or automatic.
21515
21516 @item @code{single-type-signing?} (default: @code{#f})
21517 When @code{#t}, use the Single-Type Signing Scheme.
21518
21519 @item @code{algorithm} (default: @code{"ecdsap256sha256"})
21520 An algorithm of signing keys and issued signatures.
21521
21522 @item @code{ksk-size} (default: @code{256})
21523 The length of the KSK. Note that this value is correct for the default
21524 algorithm, but would be unsecure for other algorithms.
21525
21526 @item @code{zsk-size} (default: @code{256})
21527 The length of the ZSK. Note that this value is correct for the default
21528 algorithm, but would be unsecure for other algorithms.
21529
21530 @item @code{dnskey-ttl} (default: @code{'default})
21531 The TTL value for DNSKEY records added into zone apex. The special
21532 @code{'default} value means same as the zone SOA TTL.
21533
21534 @item @code{zsk-lifetime} (default: @code{(* 30 24 3600)})
21535 The period between ZSK publication and the next rollover initiation.
21536
21537 @item @code{propagation-delay} (default: @code{(* 24 3600)})
21538 An extra delay added for each key rollover step. This value should be high
21539 enough to cover propagation of data from the master server to all slaves.
21540
21541 @item @code{rrsig-lifetime} (default: @code{(* 14 24 3600)})
21542 A validity period of newly issued signatures.
21543
21544 @item @code{rrsig-refresh} (default: @code{(* 7 24 3600)})
21545 A period how long before a signature expiration the signature will be refreshed.
21546
21547 @item @code{nsec3?} (default: @code{#f})
21548 When @code{#t}, NSEC3 will be used instead of NSEC.
21549
21550 @item @code{nsec3-iterations} (default: @code{5})
21551 The number of additional times the hashing is performed.
21552
21553 @item @code{nsec3-salt-length} (default: @code{8})
21554 The length of a salt field in octets, which is appended to the original owner
21555 name before hashing.
21556
21557 @item @code{nsec3-salt-lifetime} (default: @code{(* 30 24 3600)})
21558 The validity period of newly issued salt field.
21559
21560 @end table
21561 @end deftp
21562
21563 @deftp {Data Type} knot-zone-configuration
21564 Data type representing a zone served by Knot.
21565 This type has the following parameters:
21566
21567 @table @asis
21568 @item @code{domain} (default: @code{""})
21569 The domain served by this configuration. It must not be empty.
21570
21571 @item @code{file} (default: @code{""})
21572 The file where this zone is saved. This parameter is ignored by master zones.
21573 Empty means default location that depends on the domain name.
21574
21575 @item @code{zone} (default: @code{(zone-file)})
21576 The content of the zone file. This parameter is ignored by slave zones. It
21577 must contain a zone-file record.
21578
21579 @item @code{master} (default: @code{'()})
21580 A list of master remotes. When empty, this zone is a master. When set, this
21581 zone is a slave. This is a list of remotes identifiers.
21582
21583 @item @code{ddns-master} (default: @code{#f})
21584 The main master. When empty, it defaults to the first master in the list of
21585 masters.
21586
21587 @item @code{notify} (default: @code{'()})
21588 A list of slave remote identifiers.
21589
21590 @item @code{acl} (default: @code{'()})
21591 A list of acl identifiers.
21592
21593 @item @code{semantic-checks?} (default: @code{#f})
21594 When set, this adds more semantic checks to the zone.
21595
21596 @item @code{disable-any?} (default: @code{#f})
21597 When set, this forbids queries of the ANY type.
21598
21599 @item @code{zonefile-sync} (default: @code{0})
21600 The delay between a modification in memory and on disk. 0 means immediate
21601 synchronization.
21602
21603 @item @code{zonefile-load} (default: @code{#f})
21604 The way the zone file contents are applied during zone load. Possible values
21605 are:
21606
21607 @itemize
21608 @item @code{#f} for using the default value from Knot,
21609 @item @code{'none} for not using the zone file at all,
21610 @item @code{'difference} for computing the difference between already available
21611 contents and zone contents and applying it to the current zone contents,
21612 @item @code{'difference-no-serial} for the same as @code{'difference}, but
21613 ignoring the SOA serial in the zone file, while the server takes care of it
21614 automatically.
21615 @item @code{'whole} for loading zone contents from the zone file.
21616 @end itemize
21617
21618 @item @code{journal-content} (default: @code{#f})
21619 The way the journal is used to store zone and its changes. Possible values
21620 are @code{'none} to not use it at all, @code{'changes} to store changes and
21621 @code{'all} to store contents. @code{#f} does not set this option, so the
21622 default value from Knot is used.
21623
21624 @item @code{max-journal-usage} (default: @code{#f})
21625 The maximum size for the journal on disk. @code{#f} does not set this option,
21626 so the default value from Knot is used.
21627
21628 @item @code{max-journal-depth} (default: @code{#f})
21629 The maximum size of the history. @code{#f} does not set this option, so the
21630 default value from Knot is used.
21631
21632 @item @code{max-zone-size} (default: @code{#f})
21633 The maximum size of the zone file. This limit is enforced for incoming
21634 transfer and updates. @code{#f} does not set this option, so the default
21635 value from Knot is used.
21636
21637 @item @code{dnssec-policy} (default: @code{#f})
21638 A reference to a @code{knot-policy-configuration} record, or the special
21639 name @code{"default"}. If the value is @code{#f}, there is no dnssec signing
21640 on this zone.
21641
21642 @item @code{serial-policy} (default: @code{'increment})
21643 A policy between @code{'increment} and @code{'unixtime}.
21644
21645 @end table
21646 @end deftp
21647
21648 @deftp {Data Type} knot-configuration
21649 Data type representing the Knot configuration.
21650 This type has the following parameters:
21651
21652 @table @asis
21653 @item @code{knot} (default: @code{knot})
21654 The Knot package.
21655
21656 @item @code{run-directory} (default: @code{"/var/run/knot"})
21657 The run directory. This directory will be used for pid file and sockets.
21658
21659 @item @code{includes} (default: @code{'()})
21660 A list of strings or file-like objects denoting other files that must be
21661 included at the top of the configuration file.
21662
21663 @cindex secrets, Knot service
21664 This can be used to manage secrets out-of-band. For example, secret
21665 keys may be stored in an out-of-band file not managed by Guix, and
21666 thus not visible in @file{/gnu/store}---e.g., you could store secret
21667 key configuration in @file{/etc/knot/secrets.conf} and add this file
21668 to the @code{includes} list.
21669
21670 One can generate a secret tsig key (for nsupdate and zone transfers with the
21671 keymgr command from the knot package. Note that the package is not automatically
21672 installed by the service. The following example shows how to generate a new
21673 tsig key:
21674
21675 @example
21676 keymgr -t mysecret > /etc/knot/secrets.conf
21677 chmod 600 /etc/knot/secrets.conf
21678 @end example
21679
21680 Also note that the generated key will be named @var{mysecret}, so it is the
21681 name that needs to be used in the @var{key} field of the
21682 @code{knot-acl-configuration} record and in other places that need to refer
21683 to that key.
21684
21685 It can also be used to add configuration not supported by this interface.
21686
21687 @item @code{listen-v4} (default: @code{"0.0.0.0"})
21688 An ip address on which to listen.
21689
21690 @item @code{listen-v6} (default: @code{"::"})
21691 An ip address on which to listen.
21692
21693 @item @code{listen-port} (default: @code{53})
21694 A port on which to listen.
21695
21696 @item @code{keys} (default: @code{'()})
21697 The list of knot-key-configuration used by this configuration.
21698
21699 @item @code{acls} (default: @code{'()})
21700 The list of knot-acl-configuration used by this configuration.
21701
21702 @item @code{remotes} (default: @code{'()})
21703 The list of knot-remote-configuration used by this configuration.
21704
21705 @item @code{zones} (default: @code{'()})
21706 The list of knot-zone-configuration used by this configuration.
21707
21708 @end table
21709 @end deftp
21710
21711 @subsubheading Knot Resolver Service
21712
21713 @deffn {Scheme Variable} knot-resolver-service-type
21714 This this the type of the knot resolver service, whose value should be
21715 an @code{knot-resolver-configuration} object as in this example:
21716
21717 @lisp
21718 (service knot-resolver-service-type
21719 (knot-resolver-configuration
21720 (kresd-config-file (plain-file "kresd.conf" "
21721 net.listen('192.168.0.1', 5353)
21722 user('knot-resolver', 'knot-resolver')
21723 modules = @{ 'hints > iterate', 'stats', 'predict' @}
21724 cache.size = 100 * MB
21725 "))))
21726 @end lisp
21727
21728 For more information, refer its @url{https://knot-resolver.readthedocs.org/en/stable/daemon.html#configuration, manual}.
21729 @end deffn
21730
21731 @deftp {Data Type} knot-resolver-configuration
21732 Data type representing the configuration of knot-resolver.
21733
21734 @table @asis
21735 @item @code{package} (default: @var{knot-resolver})
21736 Package object of the knot DNS resolver.
21737
21738 @item @code{kresd-config-file} (default: %kresd.conf)
21739 File-like object of the kresd configuration file to use, by default it
21740 will listen on @code{127.0.0.1} and @code{::1}.
21741
21742 @item @code{garbage-collection-interval} (default: 1000)
21743 Number of milliseconds for @code{kres-cache-gc} to periodically trim the cache.
21744
21745 @end table
21746 @end deftp
21747
21748
21749 @subsubheading Dnsmasq Service
21750
21751 @deffn {Scheme Variable} dnsmasq-service-type
21752 This is the type of the dnsmasq service, whose value should be an
21753 @code{dnsmasq-configuration} object as in this example:
21754
21755 @lisp
21756 (service dnsmasq-service-type
21757 (dnsmasq-configuration
21758 (no-resolv? #t)
21759 (servers '("192.168.1.1"))))
21760 @end lisp
21761 @end deffn
21762
21763 @deftp {Data Type} dnsmasq-configuration
21764 Data type representing the configuration of dnsmasq.
21765
21766 @table @asis
21767 @item @code{package} (default: @var{dnsmasq})
21768 Package object of the dnsmasq server.
21769
21770 @item @code{no-hosts?} (default: @code{#f})
21771 When true, don't read the hostnames in /etc/hosts.
21772
21773 @item @code{port} (default: @code{53})
21774 The port to listen on. Setting this to zero completely disables DNS
21775 responses, leaving only DHCP and/or TFTP functions.
21776
21777 @item @code{local-service?} (default: @code{#t})
21778 Accept DNS queries only from hosts whose address is on a local subnet,
21779 ie a subnet for which an interface exists on the server.
21780
21781 @item @code{listen-addresses} (default: @code{'()})
21782 Listen on the given IP addresses.
21783
21784 @item @code{resolv-file} (default: @code{"/etc/resolv.conf"})
21785 The file to read the IP address of the upstream nameservers from.
21786
21787 @item @code{no-resolv?} (default: @code{#f})
21788 When true, don't read @var{resolv-file}.
21789
21790 @item @code{servers} (default: @code{'()})
21791 Specify IP address of upstream servers directly.
21792
21793 @item @code{cache-size} (default: @code{150})
21794 Set the size of dnsmasq's cache. Setting the cache size to zero
21795 disables caching.
21796
21797 @item @code{negative-cache?} (default: @code{#t})
21798 When false, disable negative caching.
21799
21800 @end table
21801 @end deftp
21802
21803 @subsubheading ddclient Service
21804
21805 @cindex ddclient
21806 The ddclient service described below runs the ddclient daemon, which takes
21807 care of automatically updating DNS entries for service providers such as
21808 @uref{https://dyn.com/dns/, Dyn}.
21809
21810 The following example show instantiates the service with its default
21811 configuration:
21812
21813 @lisp
21814 (service ddclient-service-type)
21815 @end lisp
21816
21817 Note that ddclient needs to access credentials that are stored in a
21818 @dfn{secret file}, by default @file{/etc/ddclient/secrets} (see
21819 @code{secret-file} below.) You are expected to create this file manually, in
21820 an ``out-of-band'' fashion (you @emph{could} make this file part of the
21821 service configuration, for instance by using @code{plain-file}, but it will be
21822 world-readable @i{via} @file{/gnu/store}.) See the examples in the
21823 @file{share/ddclient} directory of the @code{ddclient} package.
21824
21825 @c %start of fragment
21826
21827 Available @code{ddclient-configuration} fields are:
21828
21829 @deftypevr {@code{ddclient-configuration} parameter} package ddclient
21830 The ddclient package.
21831
21832 @end deftypevr
21833
21834 @deftypevr {@code{ddclient-configuration} parameter} integer daemon
21835 The period after which ddclient will retry to check IP and domain name.
21836
21837 Defaults to @samp{300}.
21838
21839 @end deftypevr
21840
21841 @deftypevr {@code{ddclient-configuration} parameter} boolean syslog
21842 Use syslog for the output.
21843
21844 Defaults to @samp{#t}.
21845
21846 @end deftypevr
21847
21848 @deftypevr {@code{ddclient-configuration} parameter} string mail
21849 Mail to user.
21850
21851 Defaults to @samp{"root"}.
21852
21853 @end deftypevr
21854
21855 @deftypevr {@code{ddclient-configuration} parameter} string mail-failure
21856 Mail failed update to user.
21857
21858 Defaults to @samp{"root"}.
21859
21860 @end deftypevr
21861
21862 @deftypevr {@code{ddclient-configuration} parameter} string pid
21863 The ddclient PID file.
21864
21865 Defaults to @samp{"/var/run/ddclient/ddclient.pid"}.
21866
21867 @end deftypevr
21868
21869 @deftypevr {@code{ddclient-configuration} parameter} boolean ssl
21870 Enable SSL support.
21871
21872 Defaults to @samp{#t}.
21873
21874 @end deftypevr
21875
21876 @deftypevr {@code{ddclient-configuration} parameter} string user
21877 Specifies the user name or ID that is used when running ddclient
21878 program.
21879
21880 Defaults to @samp{"ddclient"}.
21881
21882 @end deftypevr
21883
21884 @deftypevr {@code{ddclient-configuration} parameter} string group
21885 Group of the user who will run the ddclient program.
21886
21887 Defaults to @samp{"ddclient"}.
21888
21889 @end deftypevr
21890
21891 @deftypevr {@code{ddclient-configuration} parameter} string secret-file
21892 Secret file which will be appended to @file{ddclient.conf} file. This
21893 file contains credentials for use by ddclient. You are expected to
21894 create it manually.
21895
21896 Defaults to @samp{"/etc/ddclient/secrets.conf"}.
21897
21898 @end deftypevr
21899
21900 @deftypevr {@code{ddclient-configuration} parameter} list extra-options
21901 Extra options will be appended to @file{ddclient.conf} file.
21902
21903 Defaults to @samp{()}.
21904
21905 @end deftypevr
21906
21907
21908 @c %end of fragment
21909
21910
21911 @node VPN Services
21912 @subsection VPN Services
21913 @cindex VPN (virtual private network)
21914 @cindex virtual private network (VPN)
21915
21916 The @code{(gnu services vpn)} module provides services related to
21917 @dfn{virtual private networks} (VPNs). It provides a @emph{client} service for
21918 your machine to connect to a VPN, and a @emph{server} service for your machine
21919 to host a VPN. Both services use @uref{https://openvpn.net/, OpenVPN}.
21920
21921 @deffn {Scheme Procedure} openvpn-client-service @
21922 [#:config (openvpn-client-configuration)]
21923
21924 Return a service that runs @command{openvpn}, a VPN daemon, as a client.
21925 @end deffn
21926
21927 @deffn {Scheme Procedure} openvpn-server-service @
21928 [#:config (openvpn-server-configuration)]
21929
21930 Return a service that runs @command{openvpn}, a VPN daemon, as a server.
21931
21932 Both can be run simultaneously.
21933 @end deffn
21934
21935 @c %automatically generated documentation
21936
21937 Available @code{openvpn-client-configuration} fields are:
21938
21939 @deftypevr {@code{openvpn-client-configuration} parameter} package openvpn
21940 The OpenVPN package.
21941
21942 @end deftypevr
21943
21944 @deftypevr {@code{openvpn-client-configuration} parameter} string pid-file
21945 The OpenVPN pid file.
21946
21947 Defaults to @samp{"/var/run/openvpn/openvpn.pid"}.
21948
21949 @end deftypevr
21950
21951 @deftypevr {@code{openvpn-client-configuration} parameter} proto proto
21952 The protocol (UDP or TCP) used to open a channel between clients and
21953 servers.
21954
21955 Defaults to @samp{udp}.
21956
21957 @end deftypevr
21958
21959 @deftypevr {@code{openvpn-client-configuration} parameter} dev dev
21960 The device type used to represent the VPN connection.
21961
21962 Defaults to @samp{tun}.
21963
21964 @end deftypevr
21965
21966 @deftypevr {@code{openvpn-client-configuration} parameter} string ca
21967 The certificate authority to check connections against.
21968
21969 Defaults to @samp{"/etc/openvpn/ca.crt"}.
21970
21971 @end deftypevr
21972
21973 @deftypevr {@code{openvpn-client-configuration} parameter} string cert
21974 The certificate of the machine the daemon is running on. It should be
21975 signed by the authority given in @code{ca}.
21976
21977 Defaults to @samp{"/etc/openvpn/client.crt"}.
21978
21979 @end deftypevr
21980
21981 @deftypevr {@code{openvpn-client-configuration} parameter} string key
21982 The key of the machine the daemon is running on. It must be the key whose
21983 certificate is @code{cert}.
21984
21985 Defaults to @samp{"/etc/openvpn/client.key"}.
21986
21987 @end deftypevr
21988
21989 @deftypevr {@code{openvpn-client-configuration} parameter} boolean comp-lzo?
21990 Whether to use the lzo compression algorithm.
21991
21992 Defaults to @samp{#t}.
21993
21994 @end deftypevr
21995
21996 @deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-key?
21997 Don't re-read key files across SIGUSR1 or --ping-restart.
21998
21999 Defaults to @samp{#t}.
22000
22001 @end deftypevr
22002
22003 @deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-tun?
22004 Don't close and reopen TUN/TAP device or run up/down scripts across
22005 SIGUSR1 or --ping-restart restarts.
22006
22007 Defaults to @samp{#t}.
22008
22009 @end deftypevr
22010
22011 @deftypevr {@code{openvpn-client-configuration} parameter} boolean fast-io?
22012 (Experimental) Optimize TUN/TAP/UDP I/O writes by avoiding a call to
22013 poll/epoll/select prior to the write operation.
22014
22015 Defaults to @samp{#f}.
22016 @end deftypevr
22017
22018 @deftypevr {@code{openvpn-client-configuration} parameter} number verbosity
22019 Verbosity level.
22020
22021 Defaults to @samp{3}.
22022
22023 @end deftypevr
22024
22025 @deftypevr {@code{openvpn-client-configuration} parameter} tls-auth-client tls-auth
22026 Add an additional layer of HMAC authentication on top of the TLS control
22027 channel to protect against DoS attacks.
22028
22029 Defaults to @samp{#f}.
22030
22031 @end deftypevr
22032
22033 @deftypevr {@code{openvpn-client-configuration} parameter} maybe-string auth-user-pass
22034 Authenticate with server using username/password. The option is a file
22035 containing username/password on 2 lines. Do not use a file-like object as it
22036 would be added to the store and readable by any user.
22037
22038 Defaults to @samp{'disabled}.
22039 @end deftypevr
22040
22041 @deftypevr {@code{openvpn-client-configuration} parameter} key-usage verify-key-usage?
22042 Whether to check the server certificate has server usage extension.
22043
22044 Defaults to @samp{#t}.
22045
22046 @end deftypevr
22047
22048 @deftypevr {@code{openvpn-client-configuration} parameter} bind bind?
22049 Bind to a specific local port number.
22050
22051 Defaults to @samp{#f}.
22052
22053 @end deftypevr
22054
22055 @deftypevr {@code{openvpn-client-configuration} parameter} resolv-retry resolv-retry?
22056 Retry resolving server address.
22057
22058 Defaults to @samp{#t}.
22059
22060 @end deftypevr
22061
22062 @deftypevr {@code{openvpn-client-configuration} parameter} openvpn-remote-list remote
22063 A list of remote servers to connect to.
22064
22065 Defaults to @samp{()}.
22066
22067 Available @code{openvpn-remote-configuration} fields are:
22068
22069 @deftypevr {@code{openvpn-remote-configuration} parameter} string name
22070 Server name.
22071
22072 Defaults to @samp{"my-server"}.
22073
22074 @end deftypevr
22075
22076 @deftypevr {@code{openvpn-remote-configuration} parameter} number port
22077 Port number the server listens to.
22078
22079 Defaults to @samp{1194}.
22080
22081 @end deftypevr
22082
22083 @end deftypevr
22084 @c %end of automatic openvpn-client documentation
22085
22086 @c %automatically generated documentation
22087
22088 Available @code{openvpn-server-configuration} fields are:
22089
22090 @deftypevr {@code{openvpn-server-configuration} parameter} package openvpn
22091 The OpenVPN package.
22092
22093 @end deftypevr
22094
22095 @deftypevr {@code{openvpn-server-configuration} parameter} string pid-file
22096 The OpenVPN pid file.
22097
22098 Defaults to @samp{"/var/run/openvpn/openvpn.pid"}.
22099
22100 @end deftypevr
22101
22102 @deftypevr {@code{openvpn-server-configuration} parameter} proto proto
22103 The protocol (UDP or TCP) used to open a channel between clients and
22104 servers.
22105
22106 Defaults to @samp{udp}.
22107
22108 @end deftypevr
22109
22110 @deftypevr {@code{openvpn-server-configuration} parameter} dev dev
22111 The device type used to represent the VPN connection.
22112
22113 Defaults to @samp{tun}.
22114
22115 @end deftypevr
22116
22117 @deftypevr {@code{openvpn-server-configuration} parameter} string ca
22118 The certificate authority to check connections against.
22119
22120 Defaults to @samp{"/etc/openvpn/ca.crt"}.
22121
22122 @end deftypevr
22123
22124 @deftypevr {@code{openvpn-server-configuration} parameter} string cert
22125 The certificate of the machine the daemon is running on. It should be
22126 signed by the authority given in @code{ca}.
22127
22128 Defaults to @samp{"/etc/openvpn/client.crt"}.
22129
22130 @end deftypevr
22131
22132 @deftypevr {@code{openvpn-server-configuration} parameter} string key
22133 The key of the machine the daemon is running on. It must be the key whose
22134 certificate is @code{cert}.
22135
22136 Defaults to @samp{"/etc/openvpn/client.key"}.
22137
22138 @end deftypevr
22139
22140 @deftypevr {@code{openvpn-server-configuration} parameter} boolean comp-lzo?
22141 Whether to use the lzo compression algorithm.
22142
22143 Defaults to @samp{#t}.
22144
22145 @end deftypevr
22146
22147 @deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-key?
22148 Don't re-read key files across SIGUSR1 or --ping-restart.
22149
22150 Defaults to @samp{#t}.
22151
22152 @end deftypevr
22153
22154 @deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-tun?
22155 Don't close and reopen TUN/TAP device or run up/down scripts across
22156 SIGUSR1 or --ping-restart restarts.
22157
22158 Defaults to @samp{#t}.
22159
22160 @end deftypevr
22161
22162 @deftypevr {@code{openvpn-server-configuration} parameter} boolean fast-io?
22163 (Experimental) Optimize TUN/TAP/UDP I/O writes by avoiding a call to
22164 poll/epoll/select prior to the write operation.
22165
22166 Defaults to @samp{#f}.
22167 @end deftypevr
22168
22169 @deftypevr {@code{openvpn-server-configuration} parameter} number verbosity
22170 Verbosity level.
22171
22172 Defaults to @samp{3}.
22173
22174 @end deftypevr
22175
22176 @deftypevr {@code{openvpn-server-configuration} parameter} tls-auth-server tls-auth
22177 Add an additional layer of HMAC authentication on top of the TLS control
22178 channel to protect against DoS attacks.
22179
22180 Defaults to @samp{#f}.
22181
22182 @end deftypevr
22183
22184 @deftypevr {@code{openvpn-server-configuration} parameter} number port
22185 Specifies the port number on which the server listens.
22186
22187 Defaults to @samp{1194}.
22188
22189 @end deftypevr
22190
22191 @deftypevr {@code{openvpn-server-configuration} parameter} ip-mask server
22192 An ip and mask specifying the subnet inside the virtual network.
22193
22194 Defaults to @samp{"10.8.0.0 255.255.255.0"}.
22195
22196 @end deftypevr
22197
22198 @deftypevr {@code{openvpn-server-configuration} parameter} cidr6 server-ipv6
22199 A CIDR notation specifying the IPv6 subnet inside the virtual network.
22200
22201 Defaults to @samp{#f}.
22202
22203 @end deftypevr
22204
22205 @deftypevr {@code{openvpn-server-configuration} parameter} string dh
22206 The Diffie-Hellman parameters file.
22207
22208 Defaults to @samp{"/etc/openvpn/dh2048.pem"}.
22209
22210 @end deftypevr
22211
22212 @deftypevr {@code{openvpn-server-configuration} parameter} string ifconfig-pool-persist
22213 The file that records client IPs.
22214
22215 Defaults to @samp{"/etc/openvpn/ipp.txt"}.
22216
22217 @end deftypevr
22218
22219 @deftypevr {@code{openvpn-server-configuration} parameter} gateway redirect-gateway?
22220 When true, the server will act as a gateway for its clients.
22221
22222 Defaults to @samp{#f}.
22223
22224 @end deftypevr
22225
22226 @deftypevr {@code{openvpn-server-configuration} parameter} boolean client-to-client?
22227 When true, clients are allowed to talk to each other inside the VPN.
22228
22229 Defaults to @samp{#f}.
22230
22231 @end deftypevr
22232
22233 @deftypevr {@code{openvpn-server-configuration} parameter} keepalive keepalive
22234 Causes ping-like messages to be sent back and forth over the link so
22235 that each side knows when the other side has gone down. @code{keepalive}
22236 requires a pair. The first element is the period of the ping sending,
22237 and the second element is the timeout before considering the other side
22238 down.
22239
22240 @end deftypevr
22241
22242 @deftypevr {@code{openvpn-server-configuration} parameter} number max-clients
22243 The maximum number of clients.
22244
22245 Defaults to @samp{100}.
22246
22247 @end deftypevr
22248
22249 @deftypevr {@code{openvpn-server-configuration} parameter} string status
22250 The status file. This file shows a small report on current connection.
22251 It is truncated and rewritten every minute.
22252
22253 Defaults to @samp{"/var/run/openvpn/status"}.
22254
22255 @end deftypevr
22256
22257 @deftypevr {@code{openvpn-server-configuration} parameter} openvpn-ccd-list client-config-dir
22258 The list of configuration for some clients.
22259
22260 Defaults to @samp{()}.
22261
22262 Available @code{openvpn-ccd-configuration} fields are:
22263
22264 @deftypevr {@code{openvpn-ccd-configuration} parameter} string name
22265 Client name.
22266
22267 Defaults to @samp{"client"}.
22268
22269 @end deftypevr
22270
22271 @deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask iroute
22272 Client own network
22273
22274 Defaults to @samp{#f}.
22275
22276 @end deftypevr
22277
22278 @deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask ifconfig-push
22279 Client VPN IP.
22280
22281 Defaults to @samp{#f}.
22282
22283 @end deftypevr
22284
22285 @end deftypevr
22286
22287
22288 @c %end of automatic openvpn-server documentation
22289
22290
22291 @node Network File System
22292 @subsection Network File System
22293 @cindex NFS
22294
22295 The @code{(gnu services nfs)} module provides the following services,
22296 which are most commonly used in relation to mounting or exporting
22297 directory trees as @dfn{network file systems} (NFS).
22298
22299 While it is possible to use the individual components that together make
22300 up a Network File System service, we recommended to configure an NFS
22301 server with the @code{nfs-service-type}.
22302
22303 @subsubheading NFS Service
22304 @cindex NFS, server
22305
22306 The NFS service takes care of setting up all NFS component services,
22307 kernel configuration file systems, and installs configuration files in
22308 the locations that NFS expects.
22309
22310 @defvr {Scheme Variable} nfs-service-type
22311 A service type for a complete NFS server.
22312 @end defvr
22313
22314 @deftp {Data Type} nfs-configuration
22315 This data type represents the configuration of the NFS service and all
22316 of its subsystems.
22317
22318 It has the following parameters:
22319 @table @asis
22320 @item @code{nfs-utils} (default: @code{nfs-utils})
22321 The nfs-utils package to use.
22322
22323 @item @code{nfs-versions} (default: @code{'("4.2" "4.1" "4.0")})
22324 If a list of string values is provided, the @command{rpc.nfsd} daemon
22325 will be limited to supporting the given versions of the NFS protocol.
22326
22327 @item @code{exports} (default: @code{'()})
22328 This is a list of directories the NFS server should export. Each entry
22329 is a list consisting of two elements: a directory name and a string
22330 containing all options. This is an example in which the directory
22331 @file{/export} is served to all NFS clients as a read-only share:
22332
22333 @lisp
22334 (nfs-configuration
22335 (exports
22336 '(("/export"
22337 "*(ro,insecure,no_subtree_check,crossmnt,fsid=0)"))))
22338 @end lisp
22339
22340 @item @code{rpcmountd-port} (default: @code{#f})
22341 The network port that the @command{rpc.mountd} daemon should use.
22342
22343 @item @code{rpcstatd-port} (default: @code{#f})
22344 The network port that the @command{rpc.statd} daemon should use.
22345
22346 @item @code{rpcbind} (default: @code{rpcbind})
22347 The rpcbind package to use.
22348
22349 @item @code{idmap-domain} (default: @code{"localdomain"})
22350 The local NFSv4 domain name.
22351
22352 @item @code{nfsd-port} (default: @code{2049})
22353 The network port that the @command{nfsd} daemon should use.
22354
22355 @item @code{nfsd-threads} (default: @code{8})
22356 The number of threads used by the @command{nfsd} daemon.
22357
22358 @item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
22359 The directory where the pipefs file system is mounted.
22360
22361 @item @code{debug} (default: @code{'()"})
22362 A list of subsystems for which debugging output should be enabled. This
22363 is a list of symbols. Any of these symbols are valid: @code{nfsd},
22364 @code{nfs}, @code{rpc}, @code{idmap}, @code{statd}, or @code{mountd}.
22365 @end table
22366 @end deftp
22367
22368 If you don't need a complete NFS service or prefer to build it yourself
22369 you can use the individual component services that are documented below.
22370
22371 @subsubheading RPC Bind Service
22372 @cindex rpcbind
22373
22374 The RPC Bind service provides a facility to map program numbers into
22375 universal addresses.
22376 Many NFS related services use this facility. Hence it is automatically
22377 started when a dependent service starts.
22378
22379 @defvr {Scheme Variable} rpcbind-service-type
22380 A service type for the RPC portmapper daemon.
22381 @end defvr
22382
22383
22384 @deftp {Data Type} rpcbind-configuration
22385 Data type representing the configuration of the RPC Bind Service.
22386 This type has the following parameters:
22387 @table @asis
22388 @item @code{rpcbind} (default: @code{rpcbind})
22389 The rpcbind package to use.
22390
22391 @item @code{warm-start?} (default: @code{#t})
22392 If this parameter is @code{#t}, then the daemon will read a
22393 state file on startup thus reloading state information saved by a previous
22394 instance.
22395 @end table
22396 @end deftp
22397
22398
22399 @subsubheading Pipefs Pseudo File System
22400 @cindex pipefs
22401 @cindex rpc_pipefs
22402
22403 The pipefs file system is used to transfer NFS related data
22404 between the kernel and user space programs.
22405
22406 @defvr {Scheme Variable} pipefs-service-type
22407 A service type for the pipefs pseudo file system.
22408 @end defvr
22409
22410 @deftp {Data Type} pipefs-configuration
22411 Data type representing the configuration of the pipefs pseudo file system service.
22412 This type has the following parameters:
22413 @table @asis
22414 @item @code{mount-point} (default: @code{"/var/lib/nfs/rpc_pipefs"})
22415 The directory to which the file system is to be attached.
22416 @end table
22417 @end deftp
22418
22419
22420 @subsubheading GSS Daemon Service
22421 @cindex GSSD
22422 @cindex GSS
22423 @cindex global security system
22424
22425 The @dfn{global security system} (GSS) daemon provides strong security for RPC
22426 based protocols.
22427 Before exchanging RPC requests an RPC client must establish a security
22428 context. Typically this is done using the Kerberos command @command{kinit}
22429 or automatically at login time using PAM services (@pxref{Kerberos Services}).
22430
22431 @defvr {Scheme Variable} gss-service-type
22432 A service type for the Global Security System (GSS) daemon.
22433 @end defvr
22434
22435 @deftp {Data Type} gss-configuration
22436 Data type representing the configuration of the GSS daemon service.
22437 This type has the following parameters:
22438 @table @asis
22439 @item @code{nfs-utils} (default: @code{nfs-utils})
22440 The package in which the @command{rpc.gssd} command is to be found.
22441
22442 @item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
22443 The directory where the pipefs file system is mounted.
22444
22445 @end table
22446 @end deftp
22447
22448
22449 @subsubheading IDMAP Daemon Service
22450 @cindex idmapd
22451 @cindex name mapper
22452
22453 The idmap daemon service provides mapping between user IDs and user names.
22454 Typically it is required in order to access file systems mounted via NFSv4.
22455
22456 @defvr {Scheme Variable} idmap-service-type
22457 A service type for the Identity Mapper (IDMAP) daemon.
22458 @end defvr
22459
22460 @deftp {Data Type} idmap-configuration
22461 Data type representing the configuration of the IDMAP daemon service.
22462 This type has the following parameters:
22463 @table @asis
22464 @item @code{nfs-utils} (default: @code{nfs-utils})
22465 The package in which the @command{rpc.idmapd} command is to be found.
22466
22467 @item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
22468 The directory where the pipefs file system is mounted.
22469
22470 @item @code{domain} (default: @code{#f})
22471 The local NFSv4 domain name.
22472 This must be a string or @code{#f}.
22473 If it is @code{#f} then the daemon will use the host's fully qualified domain name.
22474
22475 @item @code{verbosity} (default: @code{0})
22476 The verbosity level of the daemon.
22477
22478 @end table
22479 @end deftp
22480
22481 @node Continuous Integration
22482 @subsection Continuous Integration
22483
22484 @cindex continuous integration
22485 @uref{https://git.savannah.gnu.org/cgit/guix/guix-cuirass.git, Cuirass} is a
22486 continuous integration tool for Guix. It can be used both for development and
22487 for providing substitutes to others (@pxref{Substitutes}).
22488
22489 The @code{(gnu services cuirass)} module provides the following service.
22490
22491 @defvr {Scheme Procedure} cuirass-service-type
22492 The type of the Cuirass service. Its value must be a
22493 @code{cuirass-configuration} object, as described below.
22494 @end defvr
22495
22496 To add build jobs, you have to set the @code{specifications} field of the
22497 configuration. Here is an example of a service that polls the Guix repository
22498 and builds the packages from a manifest. Some of the packages are defined in
22499 the @code{"custom-packages"} input, which is the equivalent of
22500 @code{GUIX_PACKAGE_PATH}.
22501
22502 @lisp
22503 (define %cuirass-specs
22504 #~(list
22505 '((#:name . "my-manifest")
22506 (#:load-path-inputs . ("guix"))
22507 (#:package-path-inputs . ("custom-packages"))
22508 (#:proc-input . "guix")
22509 (#:proc-file . "build-aux/cuirass/gnu-system.scm")
22510 (#:proc . cuirass-jobs)
22511 (#:proc-args . ((subset . "manifests")
22512 (systems . ("x86_64-linux"))
22513 (manifests . (("config" . "guix/manifest.scm")))))
22514 (#:inputs . (((#:name . "guix")
22515 (#:url . "git://git.savannah.gnu.org/guix.git")
22516 (#:load-path . ".")
22517 (#:branch . "master")
22518 (#:no-compile? . #t))
22519 ((#:name . "config")
22520 (#:url . "https://git.example.org/config.git")
22521 (#:load-path . ".")
22522 (#:branch . "master")
22523 (#:no-compile? . #t))
22524 ((#:name . "custom-packages")
22525 (#:url . "https://git.example.org/custom-packages.git")
22526 (#:load-path . ".")
22527 (#:branch . "master")
22528 (#:no-compile? . #t)))))))
22529
22530 (service cuirass-service-type
22531 (cuirass-configuration
22532 (specifications %cuirass-specs)))
22533 @end lisp
22534
22535 While information related to build jobs is located directly in the
22536 specifications, global settings for the @command{cuirass} process are
22537 accessible in other @code{cuirass-configuration} fields.
22538
22539 @deftp {Data Type} cuirass-configuration
22540 Data type representing the configuration of Cuirass.
22541
22542 @table @asis
22543 @item @code{log-file} (default: @code{"/var/log/cuirass.log"})
22544 Location of the log file.
22545
22546 @item @code{web-log-file} (default: @code{"/var/log/cuirass-web.log"})
22547 Location of the log file used by the web interface.
22548
22549 @item @code{cache-directory} (default: @code{"/var/cache/cuirass"})
22550 Location of the repository cache.
22551
22552 @item @code{user} (default: @code{"cuirass"})
22553 Owner of the @code{cuirass} process.
22554
22555 @item @code{group} (default: @code{"cuirass"})
22556 Owner's group of the @code{cuirass} process.
22557
22558 @item @code{interval} (default: @code{60})
22559 Number of seconds between the poll of the repositories followed by the
22560 Cuirass jobs.
22561
22562 @item @code{database} (default: @code{"/var/lib/cuirass/cuirass.db"})
22563 Location of sqlite database which contains the build results and previously
22564 added specifications.
22565
22566 @item @code{ttl} (default: @code{(* 30 24 3600)})
22567 Specifies the time-to-live (TTL) in seconds of garbage collector roots that
22568 are registered for build results. This means that build results are protected
22569 from garbage collection for at least @var{ttl} seconds.
22570
22571 @item @code{port} (default: @code{8081})
22572 Port number used by the HTTP server.
22573
22574 @item @code{host} (default: @code{"localhost"})
22575 Listen on the network interface for @var{host}. The default is to
22576 accept connections from localhost.
22577
22578 @item @code{specifications} (default: @code{#~'()})
22579 A gexp (@pxref{G-Expressions}) that evaluates to a list of specifications,
22580 where a specification is an association list
22581 (@pxref{Associations Lists,,, guile, GNU Guile Reference Manual}) whose
22582 keys are keywords (@code{#:keyword-example}) as shown in the example
22583 above.
22584
22585 @item @code{use-substitutes?} (default: @code{#f})
22586 This allows using substitutes to avoid building every dependencies of a job
22587 from source.
22588
22589 @item @code{one-shot?} (default: @code{#f})
22590 Only evaluate specifications and build derivations once.
22591
22592 @item @code{fallback?} (default: @code{#f})
22593 When substituting a pre-built binary fails, fall back to building
22594 packages locally.
22595
22596 @item @code{extra-options} (default: @code{'()})
22597 Extra options to pass when running the Cuirass processes.
22598
22599 @item @code{cuirass} (default: @code{cuirass})
22600 The Cuirass package to use.
22601 @end table
22602 @end deftp
22603
22604 @node Power Management Services
22605 @subsection Power Management Services
22606
22607 @cindex tlp
22608 @cindex power management with TLP
22609 @subsubheading TLP daemon
22610
22611 The @code{(gnu services pm)} module provides a Guix service definition
22612 for the Linux power management tool TLP.
22613
22614 TLP enables various powersaving modes in userspace and kernel.
22615 Contrary to @code{upower-service}, it is not a passive,
22616 monitoring tool, as it will apply custom settings each time a new power
22617 source is detected. More information can be found at
22618 @uref{https://linrunner.de/en/tlp/tlp.html, TLP home page}.
22619
22620 @deffn {Scheme Variable} tlp-service-type
22621 The service type for the TLP tool. Its value should be a valid
22622 TLP configuration (see below). To use the default settings, simply
22623 write:
22624 @lisp
22625 (service tlp-service-type)
22626 @end lisp
22627 @end deffn
22628
22629 By default TLP does not need much configuration but most TLP parameters
22630 can be tweaked using @code{tlp-configuration}.
22631
22632 Each parameter definition is preceded by its type; for example,
22633 @samp{boolean foo} indicates that the @code{foo} parameter
22634 should be specified as a boolean. Types starting with
22635 @code{maybe-} denote parameters that won't show up in TLP config file
22636 when their value is @code{'disabled}.
22637
22638 @c The following documentation was initially generated by
22639 @c (generate-tlp-documentation) in (gnu services pm). Manually maintained
22640 @c documentation is better, so we shouldn't hesitate to edit below as
22641 @c needed. However if the change you want to make to this documentation
22642 @c can be done in an automated way, it's probably easier to change
22643 @c (generate-documentation) than to make it below and have to deal with
22644 @c the churn as TLP updates.
22645
22646 Available @code{tlp-configuration} fields are:
22647
22648 @deftypevr {@code{tlp-configuration} parameter} package tlp
22649 The TLP package.
22650
22651 @end deftypevr
22652
22653 @deftypevr {@code{tlp-configuration} parameter} boolean tlp-enable?
22654 Set to true if you wish to enable TLP.
22655
22656 Defaults to @samp{#t}.
22657
22658 @end deftypevr
22659
22660 @deftypevr {@code{tlp-configuration} parameter} string tlp-default-mode
22661 Default mode when no power supply can be detected. Alternatives are AC
22662 and BAT.
22663
22664 Defaults to @samp{"AC"}.
22665
22666 @end deftypevr
22667
22668 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-ac
22669 Number of seconds Linux kernel has to wait after the disk goes idle,
22670 before syncing on AC.
22671
22672 Defaults to @samp{0}.
22673
22674 @end deftypevr
22675
22676 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-bat
22677 Same as @code{disk-idle-ac} but on BAT mode.
22678
22679 Defaults to @samp{2}.
22680
22681 @end deftypevr
22682
22683 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-ac
22684 Dirty pages flushing periodicity, expressed in seconds.
22685
22686 Defaults to @samp{15}.
22687
22688 @end deftypevr
22689
22690 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-bat
22691 Same as @code{max-lost-work-secs-on-ac} but on BAT mode.
22692
22693 Defaults to @samp{60}.
22694
22695 @end deftypevr
22696
22697 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-ac
22698 CPU frequency scaling governor on AC mode. With intel_pstate driver,
22699 alternatives are powersave and performance. With acpi-cpufreq driver,
22700 alternatives are ondemand, powersave, performance and conservative.
22701
22702 Defaults to @samp{disabled}.
22703
22704 @end deftypevr
22705
22706 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-bat
22707 Same as @code{cpu-scaling-governor-on-ac} but on BAT mode.
22708
22709 Defaults to @samp{disabled}.
22710
22711 @end deftypevr
22712
22713 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-ac
22714 Set the min available frequency for the scaling governor on AC.
22715
22716 Defaults to @samp{disabled}.
22717
22718 @end deftypevr
22719
22720 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-ac
22721 Set the max available frequency for the scaling governor on AC.
22722
22723 Defaults to @samp{disabled}.
22724
22725 @end deftypevr
22726
22727 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-bat
22728 Set the min available frequency for the scaling governor on BAT.
22729
22730 Defaults to @samp{disabled}.
22731
22732 @end deftypevr
22733
22734 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-bat
22735 Set the max available frequency for the scaling governor on BAT.
22736
22737 Defaults to @samp{disabled}.
22738
22739 @end deftypevr
22740
22741 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-ac
22742 Limit the min P-state to control the power dissipation of the CPU, in AC
22743 mode. Values are stated as a percentage of the available performance.
22744
22745 Defaults to @samp{disabled}.
22746
22747 @end deftypevr
22748
22749 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-ac
22750 Limit the max P-state to control the power dissipation of the CPU, in AC
22751 mode. Values are stated as a percentage of the available performance.
22752
22753 Defaults to @samp{disabled}.
22754
22755 @end deftypevr
22756
22757 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-bat
22758 Same as @code{cpu-min-perf-on-ac} on BAT mode.
22759
22760 Defaults to @samp{disabled}.
22761
22762 @end deftypevr
22763
22764 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-bat
22765 Same as @code{cpu-max-perf-on-ac} on BAT mode.
22766
22767 Defaults to @samp{disabled}.
22768
22769 @end deftypevr
22770
22771 @deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-ac?
22772 Enable CPU turbo boost feature on AC mode.
22773
22774 Defaults to @samp{disabled}.
22775
22776 @end deftypevr
22777
22778 @deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-bat?
22779 Same as @code{cpu-boost-on-ac?} on BAT mode.
22780
22781 Defaults to @samp{disabled}.
22782
22783 @end deftypevr
22784
22785 @deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-ac?
22786 Allow Linux kernel to minimize the number of CPU cores/hyper-threads
22787 used under light load conditions.
22788
22789 Defaults to @samp{#f}.
22790
22791 @end deftypevr
22792
22793 @deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-bat?
22794 Same as @code{sched-powersave-on-ac?} but on BAT mode.
22795
22796 Defaults to @samp{#t}.
22797
22798 @end deftypevr
22799
22800 @deftypevr {@code{tlp-configuration} parameter} boolean nmi-watchdog?
22801 Enable Linux kernel NMI watchdog.
22802
22803 Defaults to @samp{#f}.
22804
22805 @end deftypevr
22806
22807 @deftypevr {@code{tlp-configuration} parameter} maybe-string phc-controls
22808 For Linux kernels with PHC patch applied, change CPU voltages. An
22809 example value would be @samp{"F:V F:V F:V F:V"}.
22810
22811 Defaults to @samp{disabled}.
22812
22813 @end deftypevr
22814
22815 @deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-ac
22816 Set CPU performance versus energy saving policy on AC. Alternatives are
22817 performance, normal, powersave.
22818
22819 Defaults to @samp{"performance"}.
22820
22821 @end deftypevr
22822
22823 @deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-bat
22824 Same as @code{energy-perf-policy-ac} but on BAT mode.
22825
22826 Defaults to @samp{"powersave"}.
22827
22828 @end deftypevr
22829
22830 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disks-devices
22831 Hard disk devices.
22832
22833 @end deftypevr
22834
22835 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-ac
22836 Hard disk advanced power management level.
22837
22838 @end deftypevr
22839
22840 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-bat
22841 Same as @code{disk-apm-bat} but on BAT mode.
22842
22843 @end deftypevr
22844
22845 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-ac
22846 Hard disk spin down timeout. One value has to be specified for each
22847 declared hard disk.
22848
22849 Defaults to @samp{disabled}.
22850
22851 @end deftypevr
22852
22853 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-bat
22854 Same as @code{disk-spindown-timeout-on-ac} but on BAT mode.
22855
22856 Defaults to @samp{disabled}.
22857
22858 @end deftypevr
22859
22860 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-iosched
22861 Select IO scheduler for disk devices. One value has to be specified for
22862 each declared hard disk. Example alternatives are cfq, deadline and
22863 noop.
22864
22865 Defaults to @samp{disabled}.
22866
22867 @end deftypevr
22868
22869 @deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-ac
22870 SATA aggressive link power management (ALPM) level. Alternatives are
22871 min_power, medium_power, max_performance.
22872
22873 Defaults to @samp{"max_performance"}.
22874
22875 @end deftypevr
22876
22877 @deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-bat
22878 Same as @code{sata-linkpwr-ac} but on BAT mode.
22879
22880 Defaults to @samp{"min_power"}.
22881
22882 @end deftypevr
22883
22884 @deftypevr {@code{tlp-configuration} parameter} maybe-string sata-linkpwr-blacklist
22885 Exclude specified SATA host devices for link power management.
22886
22887 Defaults to @samp{disabled}.
22888
22889 @end deftypevr
22890
22891 @deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-ac?
22892 Enable Runtime Power Management for AHCI controller and disks on AC
22893 mode.
22894
22895 Defaults to @samp{disabled}.
22896
22897 @end deftypevr
22898
22899 @deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-bat?
22900 Same as @code{ahci-runtime-pm-on-ac} on BAT mode.
22901
22902 Defaults to @samp{disabled}.
22903
22904 @end deftypevr
22905
22906 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer ahci-runtime-pm-timeout
22907 Seconds of inactivity before disk is suspended.
22908
22909 Defaults to @samp{15}.
22910
22911 @end deftypevr
22912
22913 @deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-ac
22914 PCI Express Active State Power Management level. Alternatives are
22915 default, performance, powersave.
22916
22917 Defaults to @samp{"performance"}.
22918
22919 @end deftypevr
22920
22921 @deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-bat
22922 Same as @code{pcie-aspm-ac} but on BAT mode.
22923
22924 Defaults to @samp{"powersave"}.
22925
22926 @end deftypevr
22927
22928 @deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-ac
22929 Radeon graphics clock speed level. Alternatives are low, mid, high,
22930 auto, default.
22931
22932 Defaults to @samp{"high"}.
22933
22934 @end deftypevr
22935
22936 @deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-bat
22937 Same as @code{radeon-power-ac} but on BAT mode.
22938
22939 Defaults to @samp{"low"}.
22940
22941 @end deftypevr
22942
22943 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-ac
22944 Radeon dynamic power management method (DPM). Alternatives are battery,
22945 performance.
22946
22947 Defaults to @samp{"performance"}.
22948
22949 @end deftypevr
22950
22951 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-bat
22952 Same as @code{radeon-dpm-state-ac} but on BAT mode.
22953
22954 Defaults to @samp{"battery"}.
22955
22956 @end deftypevr
22957
22958 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-ac
22959 Radeon DPM performance level. Alternatives are auto, low, high.
22960
22961 Defaults to @samp{"auto"}.
22962
22963 @end deftypevr
22964
22965 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-bat
22966 Same as @code{radeon-dpm-perf-ac} but on BAT mode.
22967
22968 Defaults to @samp{"auto"}.
22969
22970 @end deftypevr
22971
22972 @deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-ac?
22973 Wifi power saving mode.
22974
22975 Defaults to @samp{#f}.
22976
22977 @end deftypevr
22978
22979 @deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-bat?
22980 Same as @code{wifi-power-ac?} but on BAT mode.
22981
22982 Defaults to @samp{#t}.
22983
22984 @end deftypevr
22985
22986 @deftypevr {@code{tlp-configuration} parameter} y-n-boolean wol-disable?
22987 Disable wake on LAN.
22988
22989 Defaults to @samp{#t}.
22990
22991 @end deftypevr
22992
22993 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-ac
22994 Timeout duration in seconds before activating audio power saving on
22995 Intel HDA and AC97 devices. A value of 0 disables power saving.
22996
22997 Defaults to @samp{0}.
22998
22999 @end deftypevr
23000
23001 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-bat
23002 Same as @code{sound-powersave-ac} but on BAT mode.
23003
23004 Defaults to @samp{1}.
23005
23006 @end deftypevr
23007
23008 @deftypevr {@code{tlp-configuration} parameter} y-n-boolean sound-power-save-controller?
23009 Disable controller in powersaving mode on Intel HDA devices.
23010
23011 Defaults to @samp{#t}.
23012
23013 @end deftypevr
23014
23015 @deftypevr {@code{tlp-configuration} parameter} boolean bay-poweroff-on-bat?
23016 Enable optical drive in UltraBay/MediaBay on BAT mode. Drive can be
23017 powered on again by releasing (and reinserting) the eject lever or by
23018 pressing the disc eject button on newer models.
23019
23020 Defaults to @samp{#f}.
23021
23022 @end deftypevr
23023
23024 @deftypevr {@code{tlp-configuration} parameter} string bay-device
23025 Name of the optical drive device to power off.
23026
23027 Defaults to @samp{"sr0"}.
23028
23029 @end deftypevr
23030
23031 @deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-ac
23032 Runtime Power Management for PCI(e) bus devices. Alternatives are on
23033 and auto.
23034
23035 Defaults to @samp{"on"}.
23036
23037 @end deftypevr
23038
23039 @deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-bat
23040 Same as @code{runtime-pm-ac} but on BAT mode.
23041
23042 Defaults to @samp{"auto"}.
23043
23044 @end deftypevr
23045
23046 @deftypevr {@code{tlp-configuration} parameter} boolean runtime-pm-all?
23047 Runtime Power Management for all PCI(e) bus devices, except blacklisted
23048 ones.
23049
23050 Defaults to @samp{#t}.
23051
23052 @end deftypevr
23053
23054 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list runtime-pm-blacklist
23055 Exclude specified PCI(e) device addresses from Runtime Power Management.
23056
23057 Defaults to @samp{disabled}.
23058
23059 @end deftypevr
23060
23061 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list runtime-pm-driver-blacklist
23062 Exclude PCI(e) devices assigned to the specified drivers from Runtime
23063 Power Management.
23064
23065 @end deftypevr
23066
23067 @deftypevr {@code{tlp-configuration} parameter} boolean usb-autosuspend?
23068 Enable USB autosuspend feature.
23069
23070 Defaults to @samp{#t}.
23071
23072 @end deftypevr
23073
23074 @deftypevr {@code{tlp-configuration} parameter} maybe-string usb-blacklist
23075 Exclude specified devices from USB autosuspend.
23076
23077 Defaults to @samp{disabled}.
23078
23079 @end deftypevr
23080
23081 @deftypevr {@code{tlp-configuration} parameter} boolean usb-blacklist-wwan?
23082 Exclude WWAN devices from USB autosuspend.
23083
23084 Defaults to @samp{#t}.
23085
23086 @end deftypevr
23087
23088 @deftypevr {@code{tlp-configuration} parameter} maybe-string usb-whitelist
23089 Include specified devices into USB autosuspend, even if they are already
23090 excluded by the driver or via @code{usb-blacklist-wwan?}.
23091
23092 Defaults to @samp{disabled}.
23093
23094 @end deftypevr
23095
23096 @deftypevr {@code{tlp-configuration} parameter} maybe-boolean usb-autosuspend-disable-on-shutdown?
23097 Enable USB autosuspend before shutdown.
23098
23099 Defaults to @samp{disabled}.
23100
23101 @end deftypevr
23102
23103 @deftypevr {@code{tlp-configuration} parameter} boolean restore-device-state-on-startup?
23104 Restore radio device state (bluetooth, wifi, wwan) from previous
23105 shutdown on system startup.
23106
23107 Defaults to @samp{#f}.
23108
23109 @end deftypevr
23110
23111 @cindex thermald
23112 @cindex CPU frequency scaling with thermald
23113 @subsubheading Thermald daemon
23114
23115 The @code{(gnu services pm)} module provides an interface to
23116 thermald, a CPU frequency scaling service which helps prevent overheating.
23117
23118 @defvr {Scheme Variable} thermald-service-type
23119 This is the service type for
23120 @uref{https://01.org/linux-thermal-daemon/, thermald}, the Linux
23121 Thermal Daemon, which is responsible for controlling the thermal state
23122 of processors and preventing overheating.
23123 @end defvr
23124
23125 @deftp {Data Type} thermald-configuration
23126 Data type representing the configuration of @code{thermald-service-type}.
23127
23128 @table @asis
23129 @item @code{ignore-cpuid-check?} (default: @code{#f})
23130 Ignore cpuid check for supported CPU models.
23131
23132 @item @code{thermald} (default: @var{thermald})
23133 Package object of thermald.
23134
23135 @end table
23136 @end deftp
23137
23138 @node Audio Services
23139 @subsection Audio Services
23140
23141 The @code{(gnu services audio)} module provides a service to start MPD
23142 (the Music Player Daemon).
23143
23144 @cindex mpd
23145 @subsubheading Music Player Daemon
23146
23147 The Music Player Daemon (MPD) is a service that can play music while
23148 being controlled from the local machine or over the network by a variety
23149 of clients.
23150
23151 The following example shows how one might run @code{mpd} as user
23152 @code{"bob"} on port @code{6666}. It uses pulseaudio for output.
23153
23154 @lisp
23155 (service mpd-service-type
23156 (mpd-configuration
23157 (user "bob")
23158 (port "6666")))
23159 @end lisp
23160
23161 @defvr {Scheme Variable} mpd-service-type
23162 The service type for @command{mpd}
23163 @end defvr
23164
23165 @deftp {Data Type} mpd-configuration
23166 Data type representing the configuration of @command{mpd}.
23167
23168 @table @asis
23169 @item @code{user} (default: @code{"mpd"})
23170 The user to run mpd as.
23171
23172 @item @code{music-dir} (default: @code{"~/Music"})
23173 The directory to scan for music files.
23174
23175 @item @code{playlist-dir} (default: @code{"~/.mpd/playlists"})
23176 The directory to store playlists.
23177
23178 @item @code{db-file} (default: @code{"~/.mpd/tag_cache"})
23179 The location of the music database.
23180
23181 @item @code{state-file} (default: @code{"~/.mpd/state"})
23182 The location of the file that stores current MPD's state.
23183
23184 @item @code{sticker-file} (default: @code{"~/.mpd/sticker.sql"})
23185 The location of the sticker database.
23186
23187 @item @code{port} (default: @code{"6600"})
23188 The port to run mpd on.
23189
23190 @item @code{address} (default: @code{"any"})
23191 The address that mpd will bind to. To use a Unix domain socket,
23192 an absolute path can be specified here.
23193
23194 @item @code{outputs} (default: @code{"(list (mpd-output))"})
23195 The audio outputs that MPD can use. By default this is a single output using pulseaudio.
23196
23197 @end table
23198 @end deftp
23199
23200 @deftp {Data Type} mpd-output
23201 Data type representing an @command{mpd} audio output.
23202
23203 @table @asis
23204 @item @code{name} (default: @code{"MPD"})
23205 The name of the audio output.
23206
23207 @item @code{type} (default: @code{"pulse"})
23208 The type of audio output.
23209
23210 @item @code{enabled?} (default: @code{#t})
23211 Specifies whether this audio output is enabled when MPD is started. By
23212 default, all audio outputs are enabled. This is just the default
23213 setting when there is no state file; with a state file, the previous
23214 state is restored.
23215
23216 @item @code{tags?} (default: @code{#t})
23217 If set to @code{#f}, then MPD will not send tags to this output. This
23218 is only useful for output plugins that can receive tags, for example the
23219 @code{httpd} output plugin.
23220
23221 @item @code{always-on?} (default: @code{#f})
23222 If set to @code{#t}, then MPD attempts to keep this audio output always
23223 open. This may be useful for streaming servers, when you don’t want to
23224 disconnect all listeners even when playback is accidentally stopped.
23225
23226 @item @code{mixer-type}
23227 This field accepts a symbol that specifies which mixer should be used
23228 for this audio output: the @code{hardware} mixer, the @code{software}
23229 mixer, the @code{null} mixer (allows setting the volume, but with no
23230 effect; this can be used as a trick to implement an external mixer
23231 External Mixer) or no mixer (@code{none}).
23232
23233 @item @code{extra-options} (default: @code{'()"})
23234 An association list of option symbols to string values to be appended to
23235 the audio output configuration.
23236
23237 @end table
23238 @end deftp
23239
23240 The following example shows a configuration of @code{mpd} that provides
23241 an HTTP audio streaming output.
23242
23243 @lisp
23244 (service mpd-service-type
23245 (mpd-configuration
23246 (outputs
23247 (list (mpd-output
23248 (name "streaming")
23249 (type "httpd")
23250 (mixer-type 'null)
23251 (extra-options
23252 `((encoder . "vorbis")
23253 (port . "8080"))))))))
23254 @end lisp
23255
23256
23257 @node Virtualization Services
23258 @subsection Virtualization services
23259
23260 The @code{(gnu services virtualization)} module provides services for
23261 the libvirt and virtlog daemons, as well as other virtualization-related
23262 services.
23263
23264 @subsubheading Libvirt daemon
23265 @code{libvirtd} is the server side daemon component of the libvirt
23266 virtualization management system. This daemon runs on host servers
23267 and performs required management tasks for virtualized guests.
23268
23269 @deffn {Scheme Variable} libvirt-service-type
23270 This is the type of the @uref{https://libvirt.org, libvirt daemon}.
23271 Its value must be a @code{libvirt-configuration}.
23272
23273 @lisp
23274 (service libvirt-service-type
23275 (libvirt-configuration
23276 (unix-sock-group "libvirt")
23277 (tls-port "16555")))
23278 @end lisp
23279 @end deffn
23280
23281 @c Auto-generated with (generate-libvirt-documentation)
23282 Available @code{libvirt-configuration} fields are:
23283
23284 @deftypevr {@code{libvirt-configuration} parameter} package libvirt
23285 Libvirt package.
23286
23287 @end deftypevr
23288
23289 @deftypevr {@code{libvirt-configuration} parameter} boolean listen-tls?
23290 Flag listening for secure TLS connections on the public TCP/IP port.
23291 must set @code{listen} for this to have any effect.
23292
23293 It is necessary to setup a CA and issue server certificates before using
23294 this capability.
23295
23296 Defaults to @samp{#t}.
23297
23298 @end deftypevr
23299
23300 @deftypevr {@code{libvirt-configuration} parameter} boolean listen-tcp?
23301 Listen for unencrypted TCP connections on the public TCP/IP port. must
23302 set @code{listen} for this to have any effect.
23303
23304 Using the TCP socket requires SASL authentication by default. Only SASL
23305 mechanisms which support data encryption are allowed. This is
23306 DIGEST_MD5 and GSSAPI (Kerberos5)
23307
23308 Defaults to @samp{#f}.
23309
23310 @end deftypevr
23311
23312 @deftypevr {@code{libvirt-configuration} parameter} string tls-port
23313 Port for accepting secure TLS connections This can be a port number, or
23314 service name
23315
23316 Defaults to @samp{"16514"}.
23317
23318 @end deftypevr
23319
23320 @deftypevr {@code{libvirt-configuration} parameter} string tcp-port
23321 Port for accepting insecure TCP connections This can be a port number,
23322 or service name
23323
23324 Defaults to @samp{"16509"}.
23325
23326 @end deftypevr
23327
23328 @deftypevr {@code{libvirt-configuration} parameter} string listen-addr
23329 IP address or hostname used for client connections.
23330
23331 Defaults to @samp{"0.0.0.0"}.
23332
23333 @end deftypevr
23334
23335 @deftypevr {@code{libvirt-configuration} parameter} boolean mdns-adv?
23336 Flag toggling mDNS advertisement of the libvirt service.
23337
23338 Alternatively can disable for all services on a host by stopping the
23339 Avahi daemon.
23340
23341 Defaults to @samp{#f}.
23342
23343 @end deftypevr
23344
23345 @deftypevr {@code{libvirt-configuration} parameter} string mdns-name
23346 Default mDNS advertisement name. This must be unique on the immediate
23347 broadcast network.
23348
23349 Defaults to @samp{"Virtualization Host <hostname>"}.
23350
23351 @end deftypevr
23352
23353 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-group
23354 UNIX domain socket group ownership. This can be used to allow a
23355 'trusted' set of users access to management capabilities without
23356 becoming root.
23357
23358 Defaults to @samp{"root"}.
23359
23360 @end deftypevr
23361
23362 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-ro-perms
23363 UNIX socket permissions for the R/O socket. This is used for monitoring
23364 VM status only.
23365
23366 Defaults to @samp{"0777"}.
23367
23368 @end deftypevr
23369
23370 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-rw-perms
23371 UNIX socket permissions for the R/W socket. Default allows only root.
23372 If PolicyKit is enabled on the socket, the default will change to allow
23373 everyone (eg, 0777)
23374
23375 Defaults to @samp{"0770"}.
23376
23377 @end deftypevr
23378
23379 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-admin-perms
23380 UNIX socket permissions for the admin socket. Default allows only owner
23381 (root), do not change it unless you are sure to whom you are exposing
23382 the access to.
23383
23384 Defaults to @samp{"0777"}.
23385
23386 @end deftypevr
23387
23388 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-dir
23389 The directory in which sockets will be found/created.
23390
23391 Defaults to @samp{"/var/run/libvirt"}.
23392
23393 @end deftypevr
23394
23395 @deftypevr {@code{libvirt-configuration} parameter} string auth-unix-ro
23396 Authentication scheme for UNIX read-only sockets. By default socket
23397 permissions allow anyone to connect
23398
23399 Defaults to @samp{"polkit"}.
23400
23401 @end deftypevr
23402
23403 @deftypevr {@code{libvirt-configuration} parameter} string auth-unix-rw
23404 Authentication scheme for UNIX read-write sockets. By default socket
23405 permissions only allow root. If PolicyKit support was compiled into
23406 libvirt, the default will be to use 'polkit' auth.
23407
23408 Defaults to @samp{"polkit"}.
23409
23410 @end deftypevr
23411
23412 @deftypevr {@code{libvirt-configuration} parameter} string auth-tcp
23413 Authentication scheme for TCP sockets. If you don't enable SASL, then
23414 all TCP traffic is cleartext. Don't do this outside of a dev/test
23415 scenario.
23416
23417 Defaults to @samp{"sasl"}.
23418
23419 @end deftypevr
23420
23421 @deftypevr {@code{libvirt-configuration} parameter} string auth-tls
23422 Authentication scheme for TLS sockets. TLS sockets already have
23423 encryption provided by the TLS layer, and limited authentication is done
23424 by certificates.
23425
23426 It is possible to make use of any SASL authentication mechanism as well,
23427 by using 'sasl' for this option
23428
23429 Defaults to @samp{"none"}.
23430
23431 @end deftypevr
23432
23433 @deftypevr {@code{libvirt-configuration} parameter} optional-list access-drivers
23434 API access control scheme.
23435
23436 By default an authenticated user is allowed access to all APIs. Access
23437 drivers can place restrictions on this.
23438
23439 Defaults to @samp{()}.
23440
23441 @end deftypevr
23442
23443 @deftypevr {@code{libvirt-configuration} parameter} string key-file
23444 Server key file path. If set to an empty string, then no private key is
23445 loaded.
23446
23447 Defaults to @samp{""}.
23448
23449 @end deftypevr
23450
23451 @deftypevr {@code{libvirt-configuration} parameter} string cert-file
23452 Server key file path. If set to an empty string, then no certificate is
23453 loaded.
23454
23455 Defaults to @samp{""}.
23456
23457 @end deftypevr
23458
23459 @deftypevr {@code{libvirt-configuration} parameter} string ca-file
23460 Server key file path. If set to an empty string, then no CA certificate
23461 is loaded.
23462
23463 Defaults to @samp{""}.
23464
23465 @end deftypevr
23466
23467 @deftypevr {@code{libvirt-configuration} parameter} string crl-file
23468 Certificate revocation list path. If set to an empty string, then no
23469 CRL is loaded.
23470
23471 Defaults to @samp{""}.
23472
23473 @end deftypevr
23474
23475 @deftypevr {@code{libvirt-configuration} parameter} boolean tls-no-sanity-cert
23476 Disable verification of our own server certificates.
23477
23478 When libvirtd starts it performs some sanity checks against its own
23479 certificates.
23480
23481 Defaults to @samp{#f}.
23482
23483 @end deftypevr
23484
23485 @deftypevr {@code{libvirt-configuration} parameter} boolean tls-no-verify-cert
23486 Disable verification of client certificates.
23487
23488 Client certificate verification is the primary authentication mechanism.
23489 Any client which does not present a certificate signed by the CA will be
23490 rejected.
23491
23492 Defaults to @samp{#f}.
23493
23494 @end deftypevr
23495
23496 @deftypevr {@code{libvirt-configuration} parameter} optional-list tls-allowed-dn-list
23497 Whitelist of allowed x509 Distinguished Name.
23498
23499 Defaults to @samp{()}.
23500
23501 @end deftypevr
23502
23503 @deftypevr {@code{libvirt-configuration} parameter} optional-list sasl-allowed-usernames
23504 Whitelist of allowed SASL usernames. The format for username depends on
23505 the SASL authentication mechanism.
23506
23507 Defaults to @samp{()}.
23508
23509 @end deftypevr
23510
23511 @deftypevr {@code{libvirt-configuration} parameter} string tls-priority
23512 Override the compile time default TLS priority string. The default is
23513 usually "NORMAL" unless overridden at build time. Only set this is it
23514 is desired for libvirt to deviate from the global default settings.
23515
23516 Defaults to @samp{"NORMAL"}.
23517
23518 @end deftypevr
23519
23520 @deftypevr {@code{libvirt-configuration} parameter} integer max-clients
23521 Maximum number of concurrent client connections to allow over all
23522 sockets combined.
23523
23524 Defaults to @samp{5000}.
23525
23526 @end deftypevr
23527
23528 @deftypevr {@code{libvirt-configuration} parameter} integer max-queued-clients
23529 Maximum length of queue of connections waiting to be accepted by the
23530 daemon. Note, that some protocols supporting retransmission may obey
23531 this so that a later reattempt at connection succeeds.
23532
23533 Defaults to @samp{1000}.
23534
23535 @end deftypevr
23536
23537 @deftypevr {@code{libvirt-configuration} parameter} integer max-anonymous-clients
23538 Maximum length of queue of accepted but not yet authenticated clients.
23539 Set this to zero to turn this feature off
23540
23541 Defaults to @samp{20}.
23542
23543 @end deftypevr
23544
23545 @deftypevr {@code{libvirt-configuration} parameter} integer min-workers
23546 Number of workers to start up initially.
23547
23548 Defaults to @samp{5}.
23549
23550 @end deftypevr
23551
23552 @deftypevr {@code{libvirt-configuration} parameter} integer max-workers
23553 Maximum number of worker threads.
23554
23555 If the number of active clients exceeds @code{min-workers}, then more
23556 threads are spawned, up to max_workers limit. Typically you'd want
23557 max_workers to equal maximum number of clients allowed.
23558
23559 Defaults to @samp{20}.
23560
23561 @end deftypevr
23562
23563 @deftypevr {@code{libvirt-configuration} parameter} integer prio-workers
23564 Number of priority workers. If all workers from above pool are stuck,
23565 some calls marked as high priority (notably domainDestroy) can be
23566 executed in this pool.
23567
23568 Defaults to @samp{5}.
23569
23570 @end deftypevr
23571
23572 @deftypevr {@code{libvirt-configuration} parameter} integer max-requests
23573 Total global limit on concurrent RPC calls.
23574
23575 Defaults to @samp{20}.
23576
23577 @end deftypevr
23578
23579 @deftypevr {@code{libvirt-configuration} parameter} integer max-client-requests
23580 Limit on concurrent requests from a single client connection. To avoid
23581 one client monopolizing the server this should be a small fraction of
23582 the global max_requests and max_workers parameter.
23583
23584 Defaults to @samp{5}.
23585
23586 @end deftypevr
23587
23588 @deftypevr {@code{libvirt-configuration} parameter} integer admin-min-workers
23589 Same as @code{min-workers} but for the admin interface.
23590
23591 Defaults to @samp{1}.
23592
23593 @end deftypevr
23594
23595 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-workers
23596 Same as @code{max-workers} but for the admin interface.
23597
23598 Defaults to @samp{5}.
23599
23600 @end deftypevr
23601
23602 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-clients
23603 Same as @code{max-clients} but for the admin interface.
23604
23605 Defaults to @samp{5}.
23606
23607 @end deftypevr
23608
23609 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-queued-clients
23610 Same as @code{max-queued-clients} but for the admin interface.
23611
23612 Defaults to @samp{5}.
23613
23614 @end deftypevr
23615
23616 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-client-requests
23617 Same as @code{max-client-requests} but for the admin interface.
23618
23619 Defaults to @samp{5}.
23620
23621 @end deftypevr
23622
23623 @deftypevr {@code{libvirt-configuration} parameter} integer log-level
23624 Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
23625
23626 Defaults to @samp{3}.
23627
23628 @end deftypevr
23629
23630 @deftypevr {@code{libvirt-configuration} parameter} string log-filters
23631 Logging filters.
23632
23633 A filter allows to select a different logging level for a given category
23634 of logs The format for a filter is one of:
23635
23636 @itemize @bullet
23637 @item
23638 x:name
23639
23640 @item
23641 x:+name
23642
23643 @end itemize
23644
23645 where @code{name} is a string which is matched against the category
23646 given in the @code{VIR_LOG_INIT()} at the top of each libvirt source
23647 file, e.g., "remote", "qemu", or "util.json" (the name in the filter can
23648 be a substring of the full category name, in order to match multiple
23649 similar categories), the optional "+" prefix tells libvirt to log stack
23650 trace for each message matching name, and @code{x} is the minimal level
23651 where matching messages should be logged:
23652
23653 @itemize @bullet
23654 @item
23655 1: DEBUG
23656
23657 @item
23658 2: INFO
23659
23660 @item
23661 3: WARNING
23662
23663 @item
23664 4: ERROR
23665
23666 @end itemize
23667
23668 Multiple filters can be defined in a single filters statement, they just
23669 need to be separated by spaces.
23670
23671 Defaults to @samp{"3:remote 4:event"}.
23672
23673 @end deftypevr
23674
23675 @deftypevr {@code{libvirt-configuration} parameter} string log-outputs
23676 Logging outputs.
23677
23678 An output is one of the places to save logging information. The format
23679 for an output can be:
23680
23681 @table @code
23682 @item x:stderr
23683 output goes to stderr
23684
23685 @item x:syslog:name
23686 use syslog for the output and use the given name as the ident
23687
23688 @item x:file:file_path
23689 output to a file, with the given filepath
23690
23691 @item x:journald
23692 output to journald logging system
23693
23694 @end table
23695
23696 In all case the x prefix is the minimal level, acting as a filter
23697
23698 @itemize @bullet
23699 @item
23700 1: DEBUG
23701
23702 @item
23703 2: INFO
23704
23705 @item
23706 3: WARNING
23707
23708 @item
23709 4: ERROR
23710
23711 @end itemize
23712
23713 Multiple outputs can be defined, they just need to be separated by
23714 spaces.
23715
23716 Defaults to @samp{"3:stderr"}.
23717
23718 @end deftypevr
23719
23720 @deftypevr {@code{libvirt-configuration} parameter} integer audit-level
23721 Allows usage of the auditing subsystem to be altered
23722
23723 @itemize @bullet
23724 @item
23725 0: disable all auditing
23726
23727 @item
23728 1: enable auditing, only if enabled on host
23729
23730 @item
23731 2: enable auditing, and exit if disabled on host.
23732
23733 @end itemize
23734
23735 Defaults to @samp{1}.
23736
23737 @end deftypevr
23738
23739 @deftypevr {@code{libvirt-configuration} parameter} boolean audit-logging
23740 Send audit messages via libvirt logging infrastructure.
23741
23742 Defaults to @samp{#f}.
23743
23744 @end deftypevr
23745
23746 @deftypevr {@code{libvirt-configuration} parameter} optional-string host-uuid
23747 Host UUID. UUID must not have all digits be the same.
23748
23749 Defaults to @samp{""}.
23750
23751 @end deftypevr
23752
23753 @deftypevr {@code{libvirt-configuration} parameter} string host-uuid-source
23754 Source to read host UUID.
23755
23756 @itemize @bullet
23757 @item
23758 @code{smbios}: fetch the UUID from @code{dmidecode -s system-uuid}
23759
23760 @item
23761 @code{machine-id}: fetch the UUID from @code{/etc/machine-id}
23762
23763 @end itemize
23764
23765 If @code{dmidecode} does not provide a valid UUID a temporary UUID will
23766 be generated.
23767
23768 Defaults to @samp{"smbios"}.
23769
23770 @end deftypevr
23771
23772 @deftypevr {@code{libvirt-configuration} parameter} integer keepalive-interval
23773 A keepalive message is sent to a client after @code{keepalive_interval}
23774 seconds of inactivity to check if the client is still responding. If
23775 set to -1, libvirtd will never send keepalive requests; however clients
23776 can still send them and the daemon will send responses.
23777
23778 Defaults to @samp{5}.
23779
23780 @end deftypevr
23781
23782 @deftypevr {@code{libvirt-configuration} parameter} integer keepalive-count
23783 Maximum number of keepalive messages that are allowed to be sent to the
23784 client without getting any response before the connection is considered
23785 broken.
23786
23787 In other words, the connection is automatically closed approximately
23788 after @code{keepalive_interval * (keepalive_count + 1)} seconds since
23789 the last message received from the client. When @code{keepalive-count}
23790 is set to 0, connections will be automatically closed after
23791 @code{keepalive-interval} seconds of inactivity without sending any
23792 keepalive messages.
23793
23794 Defaults to @samp{5}.
23795
23796 @end deftypevr
23797
23798 @deftypevr {@code{libvirt-configuration} parameter} integer admin-keepalive-interval
23799 Same as above but for admin interface.
23800
23801 Defaults to @samp{5}.
23802
23803 @end deftypevr
23804
23805 @deftypevr {@code{libvirt-configuration} parameter} integer admin-keepalive-count
23806 Same as above but for admin interface.
23807
23808 Defaults to @samp{5}.
23809
23810 @end deftypevr
23811
23812 @deftypevr {@code{libvirt-configuration} parameter} integer ovs-timeout
23813 Timeout for Open vSwitch calls.
23814
23815 The @code{ovs-vsctl} utility is used for the configuration and its
23816 timeout option is set by default to 5 seconds to avoid potential
23817 infinite waits blocking libvirt.
23818
23819 Defaults to @samp{5}.
23820
23821 @end deftypevr
23822
23823 @c %end of autogenerated docs
23824
23825 @subsubheading Virtlog daemon
23826 The virtlogd service is a server side daemon component of libvirt that is
23827 used to manage logs from virtual machine consoles.
23828
23829 This daemon is not used directly by libvirt client applications, rather it
23830 is called on their behalf by @code{libvirtd}. By maintaining the logs in a
23831 standalone daemon, the main @code{libvirtd} daemon can be restarted without
23832 risk of losing logs. The @code{virtlogd} daemon has the ability to re-exec()
23833 itself upon receiving @code{SIGUSR1}, to allow live upgrades without downtime.
23834
23835 @deffn {Scheme Variable} virtlog-service-type
23836 This is the type of the virtlog daemon.
23837 Its value must be a @code{virtlog-configuration}.
23838
23839 @lisp
23840 (service virtlog-service-type
23841 (virtlog-configuration
23842 (max-clients 1000)))
23843 @end lisp
23844 @end deffn
23845
23846 @deftypevr {@code{virtlog-configuration} parameter} integer log-level
23847 Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
23848
23849 Defaults to @samp{3}.
23850
23851 @end deftypevr
23852
23853 @deftypevr {@code{virtlog-configuration} parameter} string log-filters
23854 Logging filters.
23855
23856 A filter allows to select a different logging level for a given category
23857 of logs The format for a filter is one of:
23858
23859 @itemize @bullet
23860 @item
23861 x:name
23862
23863 @item
23864 x:+name
23865
23866 @end itemize
23867
23868 where @code{name} is a string which is matched against the category
23869 given in the @code{VIR_LOG_INIT()} at the top of each libvirt source
23870 file, e.g., "remote", "qemu", or "util.json" (the name in the filter can
23871 be a substring of the full category name, in order to match multiple
23872 similar categories), the optional "+" prefix tells libvirt to log stack
23873 trace for each message matching name, and @code{x} is the minimal level
23874 where matching messages should be logged:
23875
23876 @itemize @bullet
23877 @item
23878 1: DEBUG
23879
23880 @item
23881 2: INFO
23882
23883 @item
23884 3: WARNING
23885
23886 @item
23887 4: ERROR
23888
23889 @end itemize
23890
23891 Multiple filters can be defined in a single filters statement, they just
23892 need to be separated by spaces.
23893
23894 Defaults to @samp{"3:remote 4:event"}.
23895
23896 @end deftypevr
23897
23898 @deftypevr {@code{virtlog-configuration} parameter} string log-outputs
23899 Logging outputs.
23900
23901 An output is one of the places to save logging information The format
23902 for an output can be:
23903
23904 @table @code
23905 @item x:stderr
23906 output goes to stderr
23907
23908 @item x:syslog:name
23909 use syslog for the output and use the given name as the ident
23910
23911 @item x:file:file_path
23912 output to a file, with the given filepath
23913
23914 @item x:journald
23915 output to journald logging system
23916
23917 @end table
23918
23919 In all case the x prefix is the minimal level, acting as a filter
23920
23921 @itemize @bullet
23922 @item
23923 1: DEBUG
23924
23925 @item
23926 2: INFO
23927
23928 @item
23929 3: WARNING
23930
23931 @item
23932 4: ERROR
23933
23934 @end itemize
23935
23936 Multiple outputs can be defined, they just need to be separated by
23937 spaces.
23938
23939 Defaults to @samp{"3:stderr"}.
23940
23941 @end deftypevr
23942
23943 @deftypevr {@code{virtlog-configuration} parameter} integer max-clients
23944 Maximum number of concurrent client connections to allow over all
23945 sockets combined.
23946
23947 Defaults to @samp{1024}.
23948
23949 @end deftypevr
23950
23951 @deftypevr {@code{virtlog-configuration} parameter} integer max-size
23952 Maximum file size before rolling over.
23953
23954 Defaults to @samp{2MB}
23955
23956 @end deftypevr
23957
23958 @deftypevr {@code{virtlog-configuration} parameter} integer max-backups
23959 Maximum number of backup files to keep.
23960
23961 Defaults to @samp{3}
23962
23963 @end deftypevr
23964
23965 @subsubheading Transparent Emulation with QEMU
23966
23967 @cindex emulation
23968 @cindex @code{binfmt_misc}
23969 @code{qemu-binfmt-service-type} provides support for transparent
23970 emulation of program binaries built for different architectures---e.g.,
23971 it allows you to transparently execute an ARMv7 program on an x86_64
23972 machine. It achieves this by combining the @uref{https://www.qemu.org,
23973 QEMU} emulator and the @code{binfmt_misc} feature of the kernel Linux.
23974
23975 @defvr {Scheme Variable} qemu-binfmt-service-type
23976 This is the type of the QEMU/binfmt service for transparent emulation.
23977 Its value must be a @code{qemu-binfmt-configuration} object, which
23978 specifies the QEMU package to use as well as the architecture we want to
23979 emulated:
23980
23981 @lisp
23982 (service qemu-binfmt-service-type
23983 (qemu-binfmt-configuration
23984 (platforms (lookup-qemu-platforms "arm" "aarch64" "mips64el"))))
23985 @end lisp
23986
23987 In this example, we enable transparent emulation for the ARM and aarch64
23988 platforms. Running @code{herd stop qemu-binfmt} turns it off, and
23989 running @code{herd start qemu-binfmt} turns it back on (@pxref{Invoking
23990 herd, the @command{herd} command,, shepherd, The GNU Shepherd Manual}).
23991 @end defvr
23992
23993 @deftp {Data Type} qemu-binfmt-configuration
23994 This is the configuration for the @code{qemu-binfmt} service.
23995
23996 @table @asis
23997 @item @code{platforms} (default: @code{'()})
23998 The list of emulated QEMU platforms. Each item must be a @dfn{platform
23999 object} as returned by @code{lookup-qemu-platforms} (see below).
24000
24001 @item @code{guix-support?} (default: @code{#f})
24002 When it is true, QEMU and all its dependencies are added to the build
24003 environment of @command{guix-daemon} (@pxref{Invoking guix-daemon,
24004 @code{--chroot-directory} option}). This allows the @code{binfmt_misc}
24005 handlers to be used within the build environment, which in turn means
24006 that you can transparently build programs for another architecture.
24007
24008 For example, let's suppose you're on an x86_64 machine and you have this
24009 service:
24010
24011 @lisp
24012 (service qemu-binfmt-service-type
24013 (qemu-binfmt-configuration
24014 (platforms (lookup-qemu-platforms "arm"))
24015 (guix-support? #t)))
24016 @end lisp
24017
24018 You can run:
24019
24020 @example
24021 guix build -s armhf-linux inkscape
24022 @end example
24023
24024 @noindent
24025 and it will build Inkscape for ARMv7 @emph{as if it were a native
24026 build}, transparently using QEMU to emulate the ARMv7 CPU. Pretty handy
24027 if you'd like to test a package build for an architecture you don't have
24028 access to!
24029
24030 @item @code{qemu} (default: @code{qemu})
24031 The QEMU package to use.
24032 @end table
24033 @end deftp
24034
24035 @deffn {Scheme Procedure} lookup-qemu-platforms @var{platforms}@dots{}
24036 Return the list of QEMU platform objects corresponding to
24037 @var{platforms}@dots{}. @var{platforms} must be a list of strings
24038 corresponding to platform names, such as @code{"arm"}, @code{"sparc"},
24039 @code{"mips64el"}, and so on.
24040 @end deffn
24041
24042 @deffn {Scheme Procedure} qemu-platform? @var{obj}
24043 Return true if @var{obj} is a platform object.
24044 @end deffn
24045
24046 @deffn {Scheme Procedure} qemu-platform-name @var{platform}
24047 Return the name of @var{platform}---a string such as @code{"arm"}.
24048 @end deffn
24049
24050 @node Version Control Services
24051 @subsection Version Control Services
24052
24053 The @code{(gnu services version-control)} module provides a service to
24054 allow remote access to local Git repositories. There are three options:
24055 the @code{git-daemon-service}, which provides access to repositories via
24056 the @code{git://} unsecured TCP-based protocol, extending the
24057 @code{nginx} web server to proxy some requests to
24058 @code{git-http-backend}, or providing a web interface with
24059 @code{cgit-service-type}.
24060
24061 @deffn {Scheme Procedure} git-daemon-service [#:config (git-daemon-configuration)]
24062
24063 Return a service that runs @command{git daemon}, a simple TCP server to
24064 expose repositories over the Git protocol for anonymous access.
24065
24066 The optional @var{config} argument should be a
24067 @code{<git-daemon-configuration>} object, by default it allows read-only
24068 access to exported@footnote{By creating the magic file
24069 "git-daemon-export-ok" in the repository directory.} repositories under
24070 @file{/srv/git}.
24071
24072 @end deffn
24073
24074 @deftp {Data Type} git-daemon-configuration
24075 Data type representing the configuration for @code{git-daemon-service}.
24076
24077 @table @asis
24078 @item @code{package} (default: @var{git})
24079 Package object of the Git distributed version control system.
24080
24081 @item @code{export-all?} (default: @var{#f})
24082 Whether to allow access for all Git repositories, even if they do not
24083 have the @file{git-daemon-export-ok} file.
24084
24085 @item @code{base-path} (default: @file{/srv/git})
24086 Whether to remap all the path requests as relative to the given path.
24087 If you run git daemon with @var{(base-path "/srv/git")} on example.com,
24088 then if you later try to pull @code{git://example.com/hello.git}, git
24089 daemon will interpret the path as @code{/srv/git/hello.git}.
24090
24091 @item @code{user-path} (default: @var{#f})
24092 Whether to allow @code{~user} notation to be used in requests. When
24093 specified with empty string, requests to @code{git://host/~alice/foo} is
24094 taken as a request to access @code{foo} repository in the home directory
24095 of user @code{alice}. If @var{(user-path "path")} is specified, the
24096 same request is taken as a request to access @code{path/foo} repository
24097 in the home directory of user @code{alice}.
24098
24099 @item @code{listen} (default: @var{'()})
24100 Whether to listen on specific IP addresses or hostnames, defaults to
24101 all.
24102
24103 @item @code{port} (default: @var{#f})
24104 Whether to listen on an alternative port, which defaults to 9418.
24105
24106 @item @code{whitelist} (default: @var{'()})
24107 If not empty, only allow access to this list of directories.
24108
24109 @item @code{extra-options} (default: @var{'()})
24110 Extra options will be passed to @code{git daemon}, please run
24111 @command{man git-daemon} for more information.
24112
24113 @end table
24114 @end deftp
24115
24116 The @code{git://} protocol lacks authentication. When you pull from a
24117 repository fetched via @code{git://}, you don't know whether the data you
24118 receive was modified or is even coming from the specified host, and your
24119 connection is subject to eavesdropping. It's better to use an authenticated
24120 and encrypted transport, such as @code{https}. Although Git allows you
24121 to serve repositories using unsophisticated file-based web servers,
24122 there is a faster protocol implemented by the @code{git-http-backend}
24123 program. This program is the back-end of a proper Git web service. It
24124 is designed to sit behind a FastCGI proxy. @xref{Web Services}, for more
24125 on running the necessary @code{fcgiwrap} daemon.
24126
24127 Guix has a separate configuration data type for serving Git repositories
24128 over HTTP.
24129
24130 @deftp {Data Type} git-http-configuration
24131 Data type representing the configuration for @code{git-http-service}.
24132
24133 @table @asis
24134 @item @code{package} (default: @var{git})
24135 Package object of the Git distributed version control system.
24136
24137 @item @code{git-root} (default: @file{/srv/git})
24138 Directory containing the Git repositories to expose to the world.
24139
24140 @item @code{export-all?} (default: @var{#f})
24141 Whether to expose access for all Git repositories in @var{git-root},
24142 even if they do not have the @file{git-daemon-export-ok} file.
24143
24144 @item @code{uri-path} (default: @file{/git/})
24145 Path prefix for Git access. With the default @code{/git/} prefix, this
24146 will map @code{http://@var{server}/git/@var{repo}.git} to
24147 @code{/srv/git/@var{repo}.git}. Requests whose URI paths do not begin
24148 with this prefix are not passed on to this Git instance.
24149
24150 @item @code{fcgiwrap-socket} (default: @code{127.0.0.1:9000})
24151 The socket on which the @code{fcgiwrap} daemon is listening. @xref{Web
24152 Services}.
24153 @end table
24154 @end deftp
24155
24156 There is no @code{git-http-service-type}, currently; instead you can
24157 create an @code{nginx-location-configuration} from a
24158 @code{git-http-configuration} and then add that location to a web
24159 server.
24160
24161 @deffn {Scheme Procedure} git-http-nginx-location-configuration @
24162 [config=(git-http-configuration)]
24163 Compute an @code{nginx-location-configuration} that corresponds to the
24164 given Git http configuration. An example nginx service definition to
24165 serve the default @file{/srv/git} over HTTPS might be:
24166
24167 @lisp
24168 (service nginx-service-type
24169 (nginx-configuration
24170 (server-blocks
24171 (list
24172 (nginx-server-configuration
24173 (listen '("443 ssl"))
24174 (server-name "git.my-host.org")
24175 (ssl-certificate
24176 "/etc/letsencrypt/live/git.my-host.org/fullchain.pem")
24177 (ssl-certificate-key
24178 "/etc/letsencrypt/live/git.my-host.org/privkey.pem")
24179 (locations
24180 (list
24181 (git-http-nginx-location-configuration
24182 (git-http-configuration (uri-path "/"))))))))))
24183 @end lisp
24184
24185 This example assumes that you are using Let's Encrypt to get your TLS
24186 certificate. @xref{Certificate Services}. The default @code{certbot}
24187 service will redirect all HTTP traffic on @code{git.my-host.org} to
24188 HTTPS. You will also need to add an @code{fcgiwrap} proxy to your
24189 system services. @xref{Web Services}.
24190 @end deffn
24191
24192 @subsubheading Cgit Service
24193
24194 @cindex Cgit service
24195 @cindex Git, web interface
24196 @uref{https://git.zx2c4.com/cgit/, Cgit} is a web frontend for Git
24197 repositories written in C.
24198
24199 The following example will configure the service with default values.
24200 By default, Cgit can be accessed on port 80 (@code{http://localhost:80}).
24201
24202 @lisp
24203 (service cgit-service-type)
24204 @end lisp
24205
24206 The @code{file-object} type designates either a file-like object
24207 (@pxref{G-Expressions, file-like objects}) or a string.
24208
24209 @c %start of fragment
24210
24211 Available @code{cgit-configuration} fields are:
24212
24213 @deftypevr {@code{cgit-configuration} parameter} package package
24214 The CGIT package.
24215
24216 @end deftypevr
24217
24218 @deftypevr {@code{cgit-configuration} parameter} nginx-server-configuration-list nginx
24219 NGINX configuration.
24220
24221 @end deftypevr
24222
24223 @deftypevr {@code{cgit-configuration} parameter} file-object about-filter
24224 Specifies a command which will be invoked to format the content of about
24225 pages (both top-level and for each repository).
24226
24227 Defaults to @samp{""}.
24228
24229 @end deftypevr
24230
24231 @deftypevr {@code{cgit-configuration} parameter} string agefile
24232 Specifies a path, relative to each repository path, which can be used to
24233 specify the date and time of the youngest commit in the repository.
24234
24235 Defaults to @samp{""}.
24236
24237 @end deftypevr
24238
24239 @deftypevr {@code{cgit-configuration} parameter} file-object auth-filter
24240 Specifies a command that will be invoked for authenticating repository
24241 access.
24242
24243 Defaults to @samp{""}.
24244
24245 @end deftypevr
24246
24247 @deftypevr {@code{cgit-configuration} parameter} string branch-sort
24248 Flag which, when set to @samp{age}, enables date ordering in the branch
24249 ref list, and when set @samp{name} enables ordering by branch name.
24250
24251 Defaults to @samp{"name"}.
24252
24253 @end deftypevr
24254
24255 @deftypevr {@code{cgit-configuration} parameter} string cache-root
24256 Path used to store the cgit cache entries.
24257
24258 Defaults to @samp{"/var/cache/cgit"}.
24259
24260 @end deftypevr
24261
24262 @deftypevr {@code{cgit-configuration} parameter} integer cache-static-ttl
24263 Number which specifies the time-to-live, in minutes, for the cached
24264 version of repository pages accessed with a fixed SHA1.
24265
24266 Defaults to @samp{-1}.
24267
24268 @end deftypevr
24269
24270 @deftypevr {@code{cgit-configuration} parameter} integer cache-dynamic-ttl
24271 Number which specifies the time-to-live, in minutes, for the cached
24272 version of repository pages accessed without a fixed SHA1.
24273
24274 Defaults to @samp{5}.
24275
24276 @end deftypevr
24277
24278 @deftypevr {@code{cgit-configuration} parameter} integer cache-repo-ttl
24279 Number which specifies the time-to-live, in minutes, for the cached
24280 version of the repository summary page.
24281
24282 Defaults to @samp{5}.
24283
24284 @end deftypevr
24285
24286 @deftypevr {@code{cgit-configuration} parameter} integer cache-root-ttl
24287 Number which specifies the time-to-live, in minutes, for the cached
24288 version of the repository index page.
24289
24290 Defaults to @samp{5}.
24291
24292 @end deftypevr
24293
24294 @deftypevr {@code{cgit-configuration} parameter} integer cache-scanrc-ttl
24295 Number which specifies the time-to-live, in minutes, for the result of
24296 scanning a path for Git repositories.
24297
24298 Defaults to @samp{15}.
24299
24300 @end deftypevr
24301
24302 @deftypevr {@code{cgit-configuration} parameter} integer cache-about-ttl
24303 Number which specifies the time-to-live, in minutes, for the cached
24304 version of the repository about page.
24305
24306 Defaults to @samp{15}.
24307
24308 @end deftypevr
24309
24310 @deftypevr {@code{cgit-configuration} parameter} integer cache-snapshot-ttl
24311 Number which specifies the time-to-live, in minutes, for the cached
24312 version of snapshots.
24313
24314 Defaults to @samp{5}.
24315
24316 @end deftypevr
24317
24318 @deftypevr {@code{cgit-configuration} parameter} integer cache-size
24319 The maximum number of entries in the cgit cache. When set to @samp{0},
24320 caching is disabled.
24321
24322 Defaults to @samp{0}.
24323
24324 @end deftypevr
24325
24326 @deftypevr {@code{cgit-configuration} parameter} boolean case-sensitive-sort?
24327 Sort items in the repo list case sensitively.
24328
24329 Defaults to @samp{#t}.
24330
24331 @end deftypevr
24332
24333 @deftypevr {@code{cgit-configuration} parameter} list clone-prefix
24334 List of common prefixes which, when combined with a repository URL,
24335 generates valid clone URLs for the repository.
24336
24337 Defaults to @samp{()}.
24338
24339 @end deftypevr
24340
24341 @deftypevr {@code{cgit-configuration} parameter} list clone-url
24342 List of @code{clone-url} templates.
24343
24344 Defaults to @samp{()}.
24345
24346 @end deftypevr
24347
24348 @deftypevr {@code{cgit-configuration} parameter} file-object commit-filter
24349 Command which will be invoked to format commit messages.
24350
24351 Defaults to @samp{""}.
24352
24353 @end deftypevr
24354
24355 @deftypevr {@code{cgit-configuration} parameter} string commit-sort
24356 Flag which, when set to @samp{date}, enables strict date ordering in the
24357 commit log, and when set to @samp{topo} enables strict topological
24358 ordering.
24359
24360 Defaults to @samp{"git log"}.
24361
24362 @end deftypevr
24363
24364 @deftypevr {@code{cgit-configuration} parameter} file-object css
24365 URL which specifies the css document to include in all cgit pages.
24366
24367 Defaults to @samp{"/share/cgit/cgit.css"}.
24368
24369 @end deftypevr
24370
24371 @deftypevr {@code{cgit-configuration} parameter} file-object email-filter
24372 Specifies a command which will be invoked to format names and email
24373 address of committers, authors, and taggers, as represented in various
24374 places throughout the cgit interface.
24375
24376 Defaults to @samp{""}.
24377
24378 @end deftypevr
24379
24380 @deftypevr {@code{cgit-configuration} parameter} boolean embedded?
24381 Flag which, when set to @samp{#t}, will make cgit generate a HTML
24382 fragment suitable for embedding in other HTML pages.
24383
24384 Defaults to @samp{#f}.
24385
24386 @end deftypevr
24387
24388 @deftypevr {@code{cgit-configuration} parameter} boolean enable-commit-graph?
24389 Flag which, when set to @samp{#t}, will make cgit print an ASCII-art
24390 commit history graph to the left of the commit messages in the
24391 repository log page.
24392
24393 Defaults to @samp{#f}.
24394
24395 @end deftypevr
24396
24397 @deftypevr {@code{cgit-configuration} parameter} boolean enable-filter-overrides?
24398 Flag which, when set to @samp{#t}, allows all filter settings to be
24399 overridden in repository-specific cgitrc files.
24400
24401 Defaults to @samp{#f}.
24402
24403 @end deftypevr
24404
24405 @deftypevr {@code{cgit-configuration} parameter} boolean enable-follow-links?
24406 Flag which, when set to @samp{#t}, allows users to follow a file in the
24407 log view.
24408
24409 Defaults to @samp{#f}.
24410
24411 @end deftypevr
24412
24413 @deftypevr {@code{cgit-configuration} parameter} boolean enable-http-clone?
24414 If set to @samp{#t}, cgit will act as an dumb HTTP endpoint for Git
24415 clones.
24416
24417 Defaults to @samp{#t}.
24418
24419 @end deftypevr
24420
24421 @deftypevr {@code{cgit-configuration} parameter} boolean enable-index-links?
24422 Flag which, when set to @samp{#t}, will make cgit generate extra links
24423 "summary", "commit", "tree" for each repo in the repository index.
24424
24425 Defaults to @samp{#f}.
24426
24427 @end deftypevr
24428
24429 @deftypevr {@code{cgit-configuration} parameter} boolean enable-index-owner?
24430 Flag which, when set to @samp{#t}, will make cgit display the owner of
24431 each repo in the repository index.
24432
24433 Defaults to @samp{#t}.
24434
24435 @end deftypevr
24436
24437 @deftypevr {@code{cgit-configuration} parameter} boolean enable-log-filecount?
24438 Flag which, when set to @samp{#t}, will make cgit print the number of
24439 modified files for each commit on the repository log page.
24440
24441 Defaults to @samp{#f}.
24442
24443 @end deftypevr
24444
24445 @deftypevr {@code{cgit-configuration} parameter} boolean enable-log-linecount?
24446 Flag which, when set to @samp{#t}, will make cgit print the number of
24447 added and removed lines for each commit on the repository log page.
24448
24449 Defaults to @samp{#f}.
24450
24451 @end deftypevr
24452
24453 @deftypevr {@code{cgit-configuration} parameter} boolean enable-remote-branches?
24454 Flag which, when set to @code{#t}, will make cgit display remote
24455 branches in the summary and refs views.
24456
24457 Defaults to @samp{#f}.
24458
24459 @end deftypevr
24460
24461 @deftypevr {@code{cgit-configuration} parameter} boolean enable-subject-links?
24462 Flag which, when set to @code{1}, will make cgit use the subject of the
24463 parent commit as link text when generating links to parent commits in
24464 commit view.
24465
24466 Defaults to @samp{#f}.
24467
24468 @end deftypevr
24469
24470 @deftypevr {@code{cgit-configuration} parameter} boolean enable-html-serving?
24471 Flag which, when set to @samp{#t}, will make cgit use the subject of the
24472 parent commit as link text when generating links to parent commits in
24473 commit view.
24474
24475 Defaults to @samp{#f}.
24476
24477 @end deftypevr
24478
24479 @deftypevr {@code{cgit-configuration} parameter} boolean enable-tree-linenumbers?
24480 Flag which, when set to @samp{#t}, will make cgit generate linenumber
24481 links for plaintext blobs printed in the tree view.
24482
24483 Defaults to @samp{#t}.
24484
24485 @end deftypevr
24486
24487 @deftypevr {@code{cgit-configuration} parameter} boolean enable-git-config?
24488 Flag which, when set to @samp{#f}, will allow cgit to use Git config to
24489 set any repo specific settings.
24490
24491 Defaults to @samp{#f}.
24492
24493 @end deftypevr
24494
24495 @deftypevr {@code{cgit-configuration} parameter} file-object favicon
24496 URL used as link to a shortcut icon for cgit.
24497
24498 Defaults to @samp{"/favicon.ico"}.
24499
24500 @end deftypevr
24501
24502 @deftypevr {@code{cgit-configuration} parameter} string footer
24503 The content of the file specified with this option will be included
24504 verbatim at the bottom of all pages (i.e.@: it replaces the standard
24505 "generated by..."@: message).
24506
24507 Defaults to @samp{""}.
24508
24509 @end deftypevr
24510
24511 @deftypevr {@code{cgit-configuration} parameter} string head-include
24512 The content of the file specified with this option will be included
24513 verbatim in the HTML HEAD section on all pages.
24514
24515 Defaults to @samp{""}.
24516
24517 @end deftypevr
24518
24519 @deftypevr {@code{cgit-configuration} parameter} string header
24520 The content of the file specified with this option will be included
24521 verbatim at the top of all pages.
24522
24523 Defaults to @samp{""}.
24524
24525 @end deftypevr
24526
24527 @deftypevr {@code{cgit-configuration} parameter} file-object include
24528 Name of a configfile to include before the rest of the current config-
24529 file is parsed.
24530
24531 Defaults to @samp{""}.
24532
24533 @end deftypevr
24534
24535 @deftypevr {@code{cgit-configuration} parameter} string index-header
24536 The content of the file specified with this option will be included
24537 verbatim above the repository index.
24538
24539 Defaults to @samp{""}.
24540
24541 @end deftypevr
24542
24543 @deftypevr {@code{cgit-configuration} parameter} string index-info
24544 The content of the file specified with this option will be included
24545 verbatim below the heading on the repository index page.
24546
24547 Defaults to @samp{""}.
24548
24549 @end deftypevr
24550
24551 @deftypevr {@code{cgit-configuration} parameter} boolean local-time?
24552 Flag which, if set to @samp{#t}, makes cgit print commit and tag times
24553 in the servers timezone.
24554
24555 Defaults to @samp{#f}.
24556
24557 @end deftypevr
24558
24559 @deftypevr {@code{cgit-configuration} parameter} file-object logo
24560 URL which specifies the source of an image which will be used as a logo
24561 on all cgit pages.
24562
24563 Defaults to @samp{"/share/cgit/cgit.png"}.
24564
24565 @end deftypevr
24566
24567 @deftypevr {@code{cgit-configuration} parameter} string logo-link
24568 URL loaded when clicking on the cgit logo image.
24569
24570 Defaults to @samp{""}.
24571
24572 @end deftypevr
24573
24574 @deftypevr {@code{cgit-configuration} parameter} file-object owner-filter
24575 Command which will be invoked to format the Owner column of the main
24576 page.
24577
24578 Defaults to @samp{""}.
24579
24580 @end deftypevr
24581
24582 @deftypevr {@code{cgit-configuration} parameter} integer max-atom-items
24583 Number of items to display in atom feeds view.
24584
24585 Defaults to @samp{10}.
24586
24587 @end deftypevr
24588
24589 @deftypevr {@code{cgit-configuration} parameter} integer max-commit-count
24590 Number of entries to list per page in "log" view.
24591
24592 Defaults to @samp{50}.
24593
24594 @end deftypevr
24595
24596 @deftypevr {@code{cgit-configuration} parameter} integer max-message-length
24597 Number of commit message characters to display in "log" view.
24598
24599 Defaults to @samp{80}.
24600
24601 @end deftypevr
24602
24603 @deftypevr {@code{cgit-configuration} parameter} integer max-repo-count
24604 Specifies the number of entries to list per page on the repository index
24605 page.
24606
24607 Defaults to @samp{50}.
24608
24609 @end deftypevr
24610
24611 @deftypevr {@code{cgit-configuration} parameter} integer max-repodesc-length
24612 Specifies the maximum number of repo description characters to display
24613 on the repository index page.
24614
24615 Defaults to @samp{80}.
24616
24617 @end deftypevr
24618
24619 @deftypevr {@code{cgit-configuration} parameter} integer max-blob-size
24620 Specifies the maximum size of a blob to display HTML for in KBytes.
24621
24622 Defaults to @samp{0}.
24623
24624 @end deftypevr
24625
24626 @deftypevr {@code{cgit-configuration} parameter} string max-stats
24627 Maximum statistics period. Valid values are @samp{week},@samp{month},
24628 @samp{quarter} and @samp{year}.
24629
24630 Defaults to @samp{""}.
24631
24632 @end deftypevr
24633
24634 @deftypevr {@code{cgit-configuration} parameter} mimetype-alist mimetype
24635 Mimetype for the specified filename extension.
24636
24637 Defaults to @samp{((gif "image/gif") (html "text/html") (jpg
24638 "image/jpeg") (jpeg "image/jpeg") (pdf "application/pdf") (png
24639 "image/png") (svg "image/svg+xml"))}.
24640
24641 @end deftypevr
24642
24643 @deftypevr {@code{cgit-configuration} parameter} file-object mimetype-file
24644 Specifies the file to use for automatic mimetype lookup.
24645
24646 Defaults to @samp{""}.
24647
24648 @end deftypevr
24649
24650 @deftypevr {@code{cgit-configuration} parameter} string module-link
24651 Text which will be used as the formatstring for a hyperlink when a
24652 submodule is printed in a directory listing.
24653
24654 Defaults to @samp{""}.
24655
24656 @end deftypevr
24657
24658 @deftypevr {@code{cgit-configuration} parameter} boolean nocache?
24659 If set to the value @samp{#t} caching will be disabled.
24660
24661 Defaults to @samp{#f}.
24662
24663 @end deftypevr
24664
24665 @deftypevr {@code{cgit-configuration} parameter} boolean noplainemail?
24666 If set to @samp{#t} showing full author email addresses will be
24667 disabled.
24668
24669 Defaults to @samp{#f}.
24670
24671 @end deftypevr
24672
24673 @deftypevr {@code{cgit-configuration} parameter} boolean noheader?
24674 Flag which, when set to @samp{#t}, will make cgit omit the standard
24675 header on all pages.
24676
24677 Defaults to @samp{#f}.
24678
24679 @end deftypevr
24680
24681 @deftypevr {@code{cgit-configuration} parameter} project-list project-list
24682 A list of subdirectories inside of @code{repository-directory}, relative
24683 to it, that should loaded as Git repositories. An empty list means that
24684 all subdirectories will be loaded.
24685
24686 Defaults to @samp{()}.
24687
24688 @end deftypevr
24689
24690 @deftypevr {@code{cgit-configuration} parameter} file-object readme
24691 Text which will be used as default value for @code{cgit-repo-readme}.
24692
24693 Defaults to @samp{""}.
24694
24695 @end deftypevr
24696
24697 @deftypevr {@code{cgit-configuration} parameter} boolean remove-suffix?
24698 If set to @code{#t} and @code{repository-directory} is enabled, if any
24699 repositories are found with a suffix of @code{.git}, this suffix will be
24700 removed for the URL and name.
24701
24702 Defaults to @samp{#f}.
24703
24704 @end deftypevr
24705
24706 @deftypevr {@code{cgit-configuration} parameter} integer renamelimit
24707 Maximum number of files to consider when detecting renames.
24708
24709 Defaults to @samp{-1}.
24710
24711 @end deftypevr
24712
24713 @deftypevr {@code{cgit-configuration} parameter} string repository-sort
24714 The way in which repositories in each section are sorted.
24715
24716 Defaults to @samp{""}.
24717
24718 @end deftypevr
24719
24720 @deftypevr {@code{cgit-configuration} parameter} robots-list robots
24721 Text used as content for the @code{robots} meta-tag.
24722
24723 Defaults to @samp{("noindex" "nofollow")}.
24724
24725 @end deftypevr
24726
24727 @deftypevr {@code{cgit-configuration} parameter} string root-desc
24728 Text printed below the heading on the repository index page.
24729
24730 Defaults to @samp{"a fast webinterface for the git dscm"}.
24731
24732 @end deftypevr
24733
24734 @deftypevr {@code{cgit-configuration} parameter} string root-readme
24735 The content of the file specified with this option will be included
24736 verbatim below the "about" link on the repository index page.
24737
24738 Defaults to @samp{""}.
24739
24740 @end deftypevr
24741
24742 @deftypevr {@code{cgit-configuration} parameter} string root-title
24743 Text printed as heading on the repository index page.
24744
24745 Defaults to @samp{""}.
24746
24747 @end deftypevr
24748
24749 @deftypevr {@code{cgit-configuration} parameter} boolean scan-hidden-path
24750 If set to @samp{#t} and repository-directory is enabled,
24751 repository-directory will recurse into directories whose name starts
24752 with a period. Otherwise, repository-directory will stay away from such
24753 directories, considered as "hidden". Note that this does not apply to
24754 the ".git" directory in non-bare repos.
24755
24756 Defaults to @samp{#f}.
24757
24758 @end deftypevr
24759
24760 @deftypevr {@code{cgit-configuration} parameter} list snapshots
24761 Text which specifies the default set of snapshot formats that cgit
24762 generates links for.
24763
24764 Defaults to @samp{()}.
24765
24766 @end deftypevr
24767
24768 @deftypevr {@code{cgit-configuration} parameter} repository-directory repository-directory
24769 Name of the directory to scan for repositories (represents
24770 @code{scan-path}).
24771
24772 Defaults to @samp{"/srv/git"}.
24773
24774 @end deftypevr
24775
24776 @deftypevr {@code{cgit-configuration} parameter} string section
24777 The name of the current repository section - all repositories defined
24778 after this option will inherit the current section name.
24779
24780 Defaults to @samp{""}.
24781
24782 @end deftypevr
24783
24784 @deftypevr {@code{cgit-configuration} parameter} string section-sort
24785 Flag which, when set to @samp{1}, will sort the sections on the
24786 repository listing by name.
24787
24788 Defaults to @samp{""}.
24789
24790 @end deftypevr
24791
24792 @deftypevr {@code{cgit-configuration} parameter} integer section-from-path
24793 A number which, if defined prior to repository-directory, specifies how
24794 many path elements from each repo path to use as a default section name.
24795
24796 Defaults to @samp{0}.
24797
24798 @end deftypevr
24799
24800 @deftypevr {@code{cgit-configuration} parameter} boolean side-by-side-diffs?
24801 If set to @samp{#t} shows side-by-side diffs instead of unidiffs per
24802 default.
24803
24804 Defaults to @samp{#f}.
24805
24806 @end deftypevr
24807
24808 @deftypevr {@code{cgit-configuration} parameter} file-object source-filter
24809 Specifies a command which will be invoked to format plaintext blobs in
24810 the tree view.
24811
24812 Defaults to @samp{""}.
24813
24814 @end deftypevr
24815
24816 @deftypevr {@code{cgit-configuration} parameter} integer summary-branches
24817 Specifies the number of branches to display in the repository "summary"
24818 view.
24819
24820 Defaults to @samp{10}.
24821
24822 @end deftypevr
24823
24824 @deftypevr {@code{cgit-configuration} parameter} integer summary-log
24825 Specifies the number of log entries to display in the repository
24826 "summary" view.
24827
24828 Defaults to @samp{10}.
24829
24830 @end deftypevr
24831
24832 @deftypevr {@code{cgit-configuration} parameter} integer summary-tags
24833 Specifies the number of tags to display in the repository "summary"
24834 view.
24835
24836 Defaults to @samp{10}.
24837
24838 @end deftypevr
24839
24840 @deftypevr {@code{cgit-configuration} parameter} string strict-export
24841 Filename which, if specified, needs to be present within the repository
24842 for cgit to allow access to that repository.
24843
24844 Defaults to @samp{""}.
24845
24846 @end deftypevr
24847
24848 @deftypevr {@code{cgit-configuration} parameter} string virtual-root
24849 URL which, if specified, will be used as root for all cgit links.
24850
24851 Defaults to @samp{"/"}.
24852
24853 @end deftypevr
24854
24855 @deftypevr {@code{cgit-configuration} parameter} repository-cgit-configuration-list repositories
24856 A list of @dfn{cgit-repo} records to use with config.
24857
24858 Defaults to @samp{()}.
24859
24860 Available @code{repository-cgit-configuration} fields are:
24861
24862 @deftypevr {@code{repository-cgit-configuration} parameter} repo-list snapshots
24863 A mask of snapshot formats for this repo that cgit generates links for,
24864 restricted by the global @code{snapshots} setting.
24865
24866 Defaults to @samp{()}.
24867
24868 @end deftypevr
24869
24870 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object source-filter
24871 Override the default @code{source-filter}.
24872
24873 Defaults to @samp{""}.
24874
24875 @end deftypevr
24876
24877 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string url
24878 The relative URL used to access the repository.
24879
24880 Defaults to @samp{""}.
24881
24882 @end deftypevr
24883
24884 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object about-filter
24885 Override the default @code{about-filter}.
24886
24887 Defaults to @samp{""}.
24888
24889 @end deftypevr
24890
24891 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string branch-sort
24892 Flag which, when set to @samp{age}, enables date ordering in the branch
24893 ref list, and when set to @samp{name} enables ordering by branch name.
24894
24895 Defaults to @samp{""}.
24896
24897 @end deftypevr
24898
24899 @deftypevr {@code{repository-cgit-configuration} parameter} repo-list clone-url
24900 A list of URLs which can be used to clone repo.
24901
24902 Defaults to @samp{()}.
24903
24904 @end deftypevr
24905
24906 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object commit-filter
24907 Override the default @code{commit-filter}.
24908
24909 Defaults to @samp{""}.
24910
24911 @end deftypevr
24912
24913 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string commit-sort
24914 Flag which, when set to @samp{date}, enables strict date ordering in the
24915 commit log, and when set to @samp{topo} enables strict topological
24916 ordering.
24917
24918 Defaults to @samp{""}.
24919
24920 @end deftypevr
24921
24922 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string defbranch
24923 The name of the default branch for this repository. If no such branch
24924 exists in the repository, the first branch name (when sorted) is used as
24925 default instead. By default branch pointed to by HEAD, or "master" if
24926 there is no suitable HEAD.
24927
24928 Defaults to @samp{""}.
24929
24930 @end deftypevr
24931
24932 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string desc
24933 The value to show as repository description.
24934
24935 Defaults to @samp{""}.
24936
24937 @end deftypevr
24938
24939 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string homepage
24940 The value to show as repository homepage.
24941
24942 Defaults to @samp{""}.
24943
24944 @end deftypevr
24945
24946 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object email-filter
24947 Override the default @code{email-filter}.
24948
24949 Defaults to @samp{""}.
24950
24951 @end deftypevr
24952
24953 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-commit-graph?
24954 A flag which can be used to disable the global setting
24955 @code{enable-commit-graph?}.
24956
24957 Defaults to @samp{disabled}.
24958
24959 @end deftypevr
24960
24961 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-log-filecount?
24962 A flag which can be used to disable the global setting
24963 @code{enable-log-filecount?}.
24964
24965 Defaults to @samp{disabled}.
24966
24967 @end deftypevr
24968
24969 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-log-linecount?
24970 A flag which can be used to disable the global setting
24971 @code{enable-log-linecount?}.
24972
24973 Defaults to @samp{disabled}.
24974
24975 @end deftypevr
24976
24977 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-remote-branches?
24978 Flag which, when set to @code{#t}, will make cgit display remote
24979 branches in the summary and refs views.
24980
24981 Defaults to @samp{disabled}.
24982
24983 @end deftypevr
24984
24985 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-subject-links?
24986 A flag which can be used to override the global setting
24987 @code{enable-subject-links?}.
24988
24989 Defaults to @samp{disabled}.
24990
24991 @end deftypevr
24992
24993 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-html-serving?
24994 A flag which can be used to override the global setting
24995 @code{enable-html-serving?}.
24996
24997 Defaults to @samp{disabled}.
24998
24999 @end deftypevr
25000
25001 @deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean hide?
25002 Flag which, when set to @code{#t}, hides the repository from the
25003 repository index.
25004
25005 Defaults to @samp{#f}.
25006
25007 @end deftypevr
25008
25009 @deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean ignore?
25010 Flag which, when set to @samp{#t}, ignores the repository.
25011
25012 Defaults to @samp{#f}.
25013
25014 @end deftypevr
25015
25016 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object logo
25017 URL which specifies the source of an image which will be used as a logo
25018 on this repo’s pages.
25019
25020 Defaults to @samp{""}.
25021
25022 @end deftypevr
25023
25024 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string logo-link
25025 URL loaded when clicking on the cgit logo image.
25026
25027 Defaults to @samp{""}.
25028
25029 @end deftypevr
25030
25031 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object owner-filter
25032 Override the default @code{owner-filter}.
25033
25034 Defaults to @samp{""}.
25035
25036 @end deftypevr
25037
25038 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string module-link
25039 Text which will be used as the formatstring for a hyperlink when a
25040 submodule is printed in a directory listing. The arguments for the
25041 formatstring are the path and SHA1 of the submodule commit.
25042
25043 Defaults to @samp{""}.
25044
25045 @end deftypevr
25046
25047 @deftypevr {@code{repository-cgit-configuration} parameter} module-link-path module-link-path
25048 Text which will be used as the formatstring for a hyperlink when a
25049 submodule with the specified subdirectory path is printed in a directory
25050 listing.
25051
25052 Defaults to @samp{()}.
25053
25054 @end deftypevr
25055
25056 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string max-stats
25057 Override the default maximum statistics period.
25058
25059 Defaults to @samp{""}.
25060
25061 @end deftypevr
25062
25063 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string name
25064 The value to show as repository name.
25065
25066 Defaults to @samp{""}.
25067
25068 @end deftypevr
25069
25070 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string owner
25071 A value used to identify the owner of the repository.
25072
25073 Defaults to @samp{""}.
25074
25075 @end deftypevr
25076
25077 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string path
25078 An absolute path to the repository directory.
25079
25080 Defaults to @samp{""}.
25081
25082 @end deftypevr
25083
25084 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string readme
25085 A path (relative to repo) which specifies a file to include verbatim as
25086 the "About" page for this repo.
25087
25088 Defaults to @samp{""}.
25089
25090 @end deftypevr
25091
25092 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string section
25093 The name of the current repository section - all repositories defined
25094 after this option will inherit the current section name.
25095
25096 Defaults to @samp{""}.
25097
25098 @end deftypevr
25099
25100 @deftypevr {@code{repository-cgit-configuration} parameter} repo-list extra-options
25101 Extra options will be appended to cgitrc file.
25102
25103 Defaults to @samp{()}.
25104
25105 @end deftypevr
25106
25107 @end deftypevr
25108
25109 @deftypevr {@code{cgit-configuration} parameter} list extra-options
25110 Extra options will be appended to cgitrc file.
25111
25112 Defaults to @samp{()}.
25113
25114 @end deftypevr
25115
25116
25117 @c %end of fragment
25118
25119 However, it could be that you just want to get a @code{cgitrc} up and
25120 running. In that case, you can pass an @code{opaque-cgit-configuration}
25121 as a record to @code{cgit-service-type}. As its name indicates, an
25122 opaque configuration does not have easy reflective capabilities.
25123
25124 Available @code{opaque-cgit-configuration} fields are:
25125
25126 @deftypevr {@code{opaque-cgit-configuration} parameter} package cgit
25127 The cgit package.
25128 @end deftypevr
25129
25130 @deftypevr {@code{opaque-cgit-configuration} parameter} string string
25131 The contents of the @code{cgitrc}, as a string.
25132 @end deftypevr
25133
25134 For example, if your @code{cgitrc} is just the empty string, you
25135 could instantiate a cgit service like this:
25136
25137 @lisp
25138 (service cgit-service-type
25139 (opaque-cgit-configuration
25140 (cgitrc "")))
25141 @end lisp
25142
25143 @subsubheading Gitolite Service
25144
25145 @cindex Gitolite service
25146 @cindex Git, hosting
25147 @uref{https://gitolite.com/gitolite/, Gitolite} is a tool for hosting Git
25148 repositories on a central server.
25149
25150 Gitolite can handle multiple repositories and users, and supports flexible
25151 configuration of the permissions for the users on the repositories.
25152
25153 The following example will configure Gitolite using the default @code{git}
25154 user, and the provided SSH public key.
25155
25156 @lisp
25157 (service gitolite-service-type
25158 (gitolite-configuration
25159 (admin-pubkey (plain-file
25160 "yourname.pub"
25161 "ssh-rsa AAAA... guix@@example.com"))))
25162 @end lisp
25163
25164 Gitolite is configured through a special admin repository which you can clone,
25165 for example, if you setup Gitolite on @code{example.com}, you would run the
25166 following command to clone the admin repository.
25167
25168 @example
25169 git clone git@@example.com:gitolite-admin
25170 @end example
25171
25172 When the Gitolite service is activated, the provided @code{admin-pubkey} will
25173 be inserted in to the @file{keydir} directory in the gitolite-admin
25174 repository. If this results in a change in the repository, it will be
25175 committed using the message ``gitolite setup by GNU Guix''.
25176
25177 @deftp {Data Type} gitolite-configuration
25178 Data type representing the configuration for @code{gitolite-service-type}.
25179
25180 @table @asis
25181 @item @code{package} (default: @var{gitolite})
25182 Gitolite package to use.
25183
25184 @item @code{user} (default: @var{git})
25185 User to use for Gitolite. This will be user that you use when accessing
25186 Gitolite over SSH.
25187
25188 @item @code{group} (default: @var{git})
25189 Group to use for Gitolite.
25190
25191 @item @code{home-directory} (default: @var{"/var/lib/gitolite"})
25192 Directory in which to store the Gitolite configuration and repositories.
25193
25194 @item @code{rc-file} (default: @var{(gitolite-rc-file)})
25195 A ``file-like'' object (@pxref{G-Expressions, file-like objects}),
25196 representing the configuration for Gitolite.
25197
25198 @item @code{admin-pubkey} (default: @var{#f})
25199 A ``file-like'' object (@pxref{G-Expressions, file-like objects}) used to
25200 setup Gitolite. This will be inserted in to the @file{keydir} directory
25201 within the gitolite-admin repository.
25202
25203 To specify the SSH key as a string, use the @code{plain-file} function.
25204
25205 @lisp
25206 (plain-file "yourname.pub" "ssh-rsa AAAA... guix@@example.com")
25207 @end lisp
25208
25209 @end table
25210 @end deftp
25211
25212 @deftp {Data Type} gitolite-rc-file
25213 Data type representing the Gitolite RC file.
25214
25215 @table @asis
25216 @item @code{umask} (default: @code{#o0077})
25217 This controls the permissions Gitolite sets on the repositories and their
25218 contents.
25219
25220 A value like @code{#o0027} will give read access to the group used by Gitolite
25221 (by default: @code{git}). This is necessary when using Gitolite with software
25222 like cgit or gitweb.
25223
25224 @item @code{git-config-keys} (default: @code{""})
25225 Gitolite allows you to set git config values using the "config" keyword. This
25226 setting allows control over the config keys to accept.
25227
25228 @item @code{roles} (default: @code{'(("READERS" . 1) ("WRITERS" . ))})
25229 Set the role names allowed to be used by users running the perms command.
25230
25231 @item @code{enable} (default: @code{'("help" "desc" "info" "perms" "writable" "ssh-authkeys" "git-config" "daemon" "gitweb")})
25232 This setting controls the commands and features to enable within Gitolite.
25233
25234 @end table
25235 @end deftp
25236
25237
25238 @node Game Services
25239 @subsection Game Services
25240
25241 @subsubheading The Battle for Wesnoth Service
25242 @cindex wesnothd
25243 @uref{https://wesnoth.org, The Battle for Wesnoth} is a fantasy, turn
25244 based tactical strategy game, with several single player campaigns, and
25245 multiplayer games (both networked and local).
25246
25247 @defvar {Scheme Variable} wesnothd-service-type
25248 Service type for the wesnothd service. Its value must be a
25249 @code{wesnothd-configuration} object. To run wesnothd in the default
25250 configuration, instantiate it as:
25251
25252 @lisp
25253 (service wesnothd-service-type)
25254 @end lisp
25255 @end defvar
25256
25257 @deftp {Data Type} wesnothd-configuration
25258 Data type representing the configuration of @command{wesnothd}.
25259
25260 @table @asis
25261 @item @code{package} (default: @code{wesnoth-server})
25262 The wesnoth server package to use.
25263
25264 @item @code{port} (default: @code{15000})
25265 The port to bind the server to.
25266 @end table
25267 @end deftp
25268
25269
25270 @node PAM Mount Service
25271 @subsection PAM Mount Service
25272 @cindex pam-mount
25273
25274 The @code{(gnu services pam-mount)} module provides a service allowing
25275 users to mount volumes when they log in. It should be able to mount any
25276 volume format supported by the system.
25277
25278 @defvar {Scheme Variable} pam-mount-service-type
25279 Service type for PAM Mount support.
25280 @end defvar
25281
25282 @deftp {Data Type} pam-mount-configuration
25283 Data type representing the configuration of PAM Mount.
25284
25285 It takes the following parameters:
25286
25287 @table @asis
25288 @item @code{rules}
25289 The configuration rules that will be used to generate
25290 @file{/etc/security/pam_mount.conf.xml}.
25291
25292 The configuration rules are SXML elements (@pxref{SXML,,, guile, GNU
25293 Guile Reference Manual}), and the the default ones don't mount anything
25294 for anyone at login:
25295
25296 @lisp
25297 `((debug (@@ (enable "0")))
25298 (mntoptions (@@ (allow ,(string-join
25299 '("nosuid" "nodev" "loop"
25300 "encryption" "fsck" "nonempty"
25301 "allow_root" "allow_other")
25302 ","))))
25303 (mntoptions (@@ (require "nosuid,nodev")))
25304 (logout (@@ (wait "0")
25305 (hup "0")
25306 (term "no")
25307 (kill "no")))
25308 (mkmountpoint (@@ (enable "1")
25309 (remove "true"))))
25310 @end lisp
25311
25312 Some @code{volume} elements must be added to automatically mount volumes
25313 at login. Here's an example allowing the user @code{alice} to mount her
25314 encrypted @code{HOME} directory and allowing the user @code{bob} to mount
25315 the partition where he stores his data:
25316
25317 @lisp
25318 (define pam-mount-rules
25319 `((debug (@@ (enable "0")))
25320 (volume (@@ (user "alice")
25321 (fstype "crypt")
25322 (path "/dev/sda2")
25323 (mountpoint "/home/alice")))
25324 (volume (@@ (user "bob")
25325 (fstype "auto")
25326 (path "/dev/sdb3")
25327 (mountpoint "/home/bob/data")
25328 (options "defaults,autodefrag,compress")))
25329 (mntoptions (@@ (allow ,(string-join
25330 '("nosuid" "nodev" "loop"
25331 "encryption" "fsck" "nonempty"
25332 "allow_root" "allow_other")
25333 ","))))
25334 (mntoptions (@@ (require "nosuid,nodev")))
25335 (logout (@@ (wait "0")
25336 (hup "0")
25337 (term "no")
25338 (kill "no")))
25339 (mkmountpoint (@@ (enable "1")
25340 (remove "true")))))
25341
25342 (service pam-mount-service-type
25343 (pam-mount-configuration
25344 (rules pam-mount-rules)))
25345 @end lisp
25346
25347 The complete list of possible options can be found in the man page for
25348 @uref{http://pam-mount.sourceforge.net/pam_mount.conf.5.html, pam_mount.conf}.
25349 @end table
25350 @end deftp
25351
25352
25353 @node Guix Services
25354 @subsection Guix Services
25355
25356 @subsubheading Guix Data Service
25357 The @uref{http://data.guix.gnu.org,Guix Data Service} processes, stores
25358 and provides data about GNU Guix. This includes information about
25359 packages, derivations and lint warnings.
25360
25361 The data is stored in a PostgreSQL database, and available through a web
25362 interface.
25363
25364 @defvar {Scheme Variable} guix-data-service-type
25365 Service type for the Guix Data Service. Its value must be a
25366 @code{guix-data-service-configuration} object. The service optionally
25367 extends the getmail service, as the guix-commits mailing list is used to
25368 find out about changes in the Guix git repository.
25369 @end defvar
25370
25371 @deftp {Data Type} guix-data-service-configuration
25372 Data type representing the configuration of the Guix Data Service.
25373
25374 @table @asis
25375 @item @code{package} (default: @code{guix-data-service})
25376 The Guix Data Service package to use.
25377
25378 @item @code{user} (default: @code{"guix-data-service"})
25379 The system user to run the service as.
25380
25381 @item @code{group} (default: @code{"guix-data-service"})
25382 The system group to run the service as.
25383
25384 @item @code{port} (default: @code{8765})
25385 The port to bind the web service to.
25386
25387 @item @code{host} (default: @code{"127.0.0.1"})
25388 The host to bind the web service to.
25389
25390 @item @code{getmail-idle-mailboxes} (default: @code{#f})
25391 If set, this is the list of mailboxes that the getmail service will be
25392 configured to listen to.
25393
25394 @item @code{commits-getmail-retriever-configuration} (default: @code{#f})
25395 If set, this is the @code{getmail-retriever-configuration} object with
25396 which to configure getmail to fetch mail from the guix-commits mailing
25397 list.
25398
25399 @item @code{extra-options} (default: @var{'()})
25400 Extra command line options for @code{guix-data-service}.
25401
25402 @item @code{extra-process-jobs-options} (default: @var{'()})
25403 Extra command line options for @code{guix-data-service-process-jobs}.
25404
25405 @end table
25406 @end deftp
25407
25408 @node Linux Services
25409 @subsubheading Linux Services
25410
25411 @cindex oom
25412 @cindex out of memory killer
25413 @cindex earlyoom
25414 @cindex early out of memory daemon
25415 @subsection Early OOM Service
25416
25417 @uref{https://github.com/rfjakob/earlyoom,Early OOM}, also known as
25418 Earlyoom, is a minimalist out of memory (OOM) daemon that runs in user
25419 space and provides a more responsive and configurable alternative to the
25420 in-kernel OOM killer. It is useful to prevent the system from becoming
25421 unresponsive when it runs out of memory.
25422
25423 @deffn {Scheme Variable} earlyoom-service-type
25424 The service type for running @command{earlyoom}, the Early OOM daemon.
25425 Its value must be a @code{earlyoom-configuration} object, described
25426 below. The service can be instantiated in its default configuration
25427 with:
25428
25429 @lisp
25430 (service earlyoom-service-type)
25431 @end lisp
25432 @end deffn
25433
25434 @deftp {Data Type} earlyoom-configuration
25435 This is the configuration record for the @code{earlyoom-service-type}.
25436
25437 @table @asis
25438 @item @code{earlyoom} (default: @var{earlyoom})
25439 The Earlyoom package to use.
25440
25441 @item @code{minimum-available-memory} (default: @code{10})
25442 The threshold for the minimum @emph{available} memory, in percentages.
25443
25444 @item @code{minimum-free-swap} (default: @code{10})
25445 The threshold for the minimum free swap memory, in percentages.
25446
25447 @item @code{prefer-regexp} (default: @code{#f})
25448 A regular expression (as a string) to match the names of the processes
25449 that should be preferably killed.
25450
25451 @item @code{avoid-regexp} (default: @code{#f})
25452 A regular expression (as a string) to match the names of the processes
25453 that should @emph{not} be killed.
25454
25455 @item @code{memory-report-interval} (default: @code{0})
25456 The interval in seconds at which a memory report is printed. It is
25457 disabled by default.
25458
25459 @item @code{ignore-positive-oom-score-adj?} (default: @code{#f})
25460 A boolean indicating whether the positive adjustments set in
25461 @file{/proc/*/oom_score_adj}.
25462
25463 @item @code{show-debug-messages?} (default: @code{#f})
25464 A boolean indicating whether debug messages should be printed. The logs
25465 are saved at @file{/var/log/earlyoom.log}.
25466
25467 @item @code{send-notification-command} (default: @code{#f})
25468 This can be used to provide a custom command used for sending
25469 notifications.
25470 @end table
25471 @end deftp
25472
25473 @cindex modprobe
25474 @cindex kernel module loader
25475 @subsubsection Kernel Module Loader Service
25476
25477 The kernel module loader service allows one to load loadable kernel
25478 modules at boot. This is especially useful for modules that don't
25479 autoload and need to be manually loaded, as it's the case with
25480 @code{ddcci}.
25481
25482 @deffn {Scheme Variable} kernel-module-loader-service-type
25483 The service type for loading loadable kernel modules at boot with
25484 @command{modprobe}. Its value must be a list of strings representing
25485 module names. For example loading the drivers provided by
25486 @code{ddcci-driver-linux}, in debugging mode by passing some module
25487 parameters, can be done as follow:
25488
25489 @lisp
25490 (use-modules (gnu) (gnu services))
25491 (use-package-modules linux)
25492 (use-service-modules linux)
25493
25494 (define ddcci-config
25495 (plain-file "ddcci.conf"
25496 "options ddcci dyndbg delay=120"))
25497
25498 (operating-system
25499 ...
25500 (services (cons* (service kernel-module-loader-service-type
25501 '("ddcci" "ddcci_backlight"))
25502 (simple-service 'ddcci-config etc-service-type
25503 (list `("modprobe.d/ddcci.conf"
25504 ,ddcci-config)))
25505 %base-services))
25506 (kernel-loadable-modules (list ddcci-driver-linux)))
25507 @end lisp
25508 @end deffn
25509
25510 @node Miscellaneous Services
25511 @subsection Miscellaneous Services
25512
25513 @cindex fingerprint
25514 @subsubheading Fingerprint Service
25515
25516 The @code{(gnu services authentication)} module provides a DBus service to
25517 read and identify fingerprints via a fingerprint sensor.
25518
25519 @defvr {Scheme Variable} fprintd-service-type
25520 The service type for @command{fprintd}, which provides the fingerprint
25521 reading capability.
25522
25523 @lisp
25524 (service fprintd-service-type)
25525 @end lisp
25526 @end defvr
25527
25528 @cindex sysctl
25529 @subsubheading System Control Service
25530
25531 The @code{(gnu services sysctl)} provides a service to configure kernel
25532 parameters at boot.
25533
25534 @defvr {Scheme Variable} sysctl-service-type
25535 The service type for @command{sysctl}, which modifies kernel parameters
25536 under @file{/proc/sys/}. To enable IPv4 forwarding, it can be
25537 instantiated as:
25538
25539 @lisp
25540 (service sysctl-service-type
25541 (sysctl-configuration
25542 (settings '(("net.ipv4.ip_forward" . "1")))))
25543 @end lisp
25544 @end defvr
25545
25546 @deftp {Data Type} sysctl-configuration
25547 The data type representing the configuration of @command{sysctl}.
25548
25549 @table @asis
25550 @item @code{sysctl} (default: @code{(file-append procps "/sbin/sysctl"})
25551 The @command{sysctl} executable to use.
25552
25553 @item @code{settings} (default: @code{'()})
25554 An association list specifies kernel parameters and their values.
25555 @end table
25556 @end deftp
25557
25558 @cindex pcscd
25559 @subsubheading PC/SC Smart Card Daemon Service
25560
25561 The @code{(gnu services security-token)} module provides the following service
25562 to run @command{pcscd}, the PC/SC Smart Card Daemon. @command{pcscd} is the
25563 daemon program for pcsc-lite and the MuscleCard framework. It is a resource
25564 manager that coordinates communications with smart card readers, smart cards
25565 and cryptographic tokens that are connected to the system.
25566
25567 @defvr {Scheme Variable} pcscd-service-type
25568 Service type for the @command{pcscd} service. Its value must be a
25569 @code{pcscd-configuration} object. To run pcscd in the default
25570 configuration, instantiate it as:
25571
25572 @lisp
25573 (service pcscd-service-type)
25574 @end lisp
25575 @end defvr
25576
25577 @deftp {Data Type} pcscd-configuration
25578 The data type representing the configuration of @command{pcscd}.
25579
25580 @table @asis
25581 @item @code{pcsc-lite} (default: @code{pcsc-lite})
25582 The pcsc-lite package that provides pcscd.
25583 @item @code{usb-drivers} (default: @code{(list ccid)})
25584 List of packages that provide USB drivers to pcscd. Drivers are expected to be
25585 under @file{pcsc/drivers} in the store directory of the package.
25586 @end table
25587 @end deftp
25588
25589 @cindex lirc
25590 @subsubheading Lirc Service
25591
25592 The @code{(gnu services lirc)} module provides the following service.
25593
25594 @deffn {Scheme Procedure} lirc-service [#:lirc lirc] @
25595 [#:device #f] [#:driver #f] [#:config-file #f] @
25596 [#:extra-options '()]
25597 Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
25598 decodes infrared signals from remote controls.
25599
25600 Optionally, @var{device}, @var{driver} and @var{config-file}
25601 (configuration file name) may be specified. See @command{lircd} manual
25602 for details.
25603
25604 Finally, @var{extra-options} is a list of additional command-line options
25605 passed to @command{lircd}.
25606 @end deffn
25607
25608 @cindex spice
25609 @subsubheading Spice Service
25610
25611 The @code{(gnu services spice)} module provides the following service.
25612
25613 @deffn {Scheme Procedure} spice-vdagent-service [#:spice-vdagent]
25614 Returns a service that runs @url{https://www.spice-space.org,VDAGENT}, a daemon
25615 that enables sharing the clipboard with a vm and setting the guest display
25616 resolution when the graphical console window resizes.
25617 @end deffn
25618
25619 @cindex inputattach
25620 @subsubheading inputattach Service
25621
25622 @cindex tablet input, for Xorg
25623 @cindex touchscreen input, for Xorg
25624 The @uref{https://linuxwacom.github.io/, inputattach} service allows you to
25625 use input devices such as Wacom tablets, touchscreens, or joysticks with the
25626 Xorg display server.
25627
25628 @deffn {Scheme Variable} inputattach-service-type
25629 Type of a service that runs @command{inputattach} on a device and
25630 dispatches events from it.
25631 @end deffn
25632
25633 @deftp {Data Type} inputattach-configuration
25634 @table @asis
25635 @item @code{device-type} (default: @code{"wacom"})
25636 The type of device to connect to. Run @command{inputattach --help}, from the
25637 @code{inputattach} package, to see the list of supported device types.
25638
25639 @item @code{device} (default: @code{"/dev/ttyS0"})
25640 The device file to connect to the device.
25641
25642 @item @code{baud-rate} (default: @code{#f})
25643 Baud rate to use for the serial connection.
25644 Should be a number or @code{#f}.
25645
25646 @item @code{log-file} (default: @code{#f})
25647 If true, this must be the name of a file to log messages to.
25648 @end table
25649 @end deftp
25650
25651 @subsection Dictionary Services
25652 @cindex dictionary
25653 The @code{(gnu services dict)} module provides the following service:
25654
25655 @defvr {Scheme Variable} dicod-service-type
25656 This is the type of the service that runs the @command{dicod} daemon, an
25657 implementation of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
25658 @end defvr
25659
25660 @deffn {Scheme Procedure} dicod-service [#:config (dicod-configuration)]
25661 Return a service that runs the @command{dicod} daemon, an implementation
25662 of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
25663
25664 The optional @var{config} argument specifies the configuration for
25665 @command{dicod}, which should be a @code{<dicod-configuration>} object, by
25666 default it serves the GNU Collaborative International Dictionary of English.
25667
25668 You can add @command{open localhost} to your @file{~/.dico} file to make
25669 @code{localhost} the default server for @command{dico} client
25670 (@pxref{Initialization File,,, dico, GNU Dico Manual}).
25671 @end deffn
25672
25673 @deftp {Data Type} dicod-configuration
25674 Data type representing the configuration of dicod.
25675
25676 @table @asis
25677 @item @code{dico} (default: @var{dico})
25678 Package object of the GNU Dico dictionary server.
25679
25680 @item @code{interfaces} (default: @var{'("localhost")})
25681 This is the list of IP addresses and ports and possibly socket file
25682 names to listen to (@pxref{Server Settings, @code{listen} directive,,
25683 dico, GNU Dico Manual}).
25684
25685 @item @code{handlers} (default: @var{'()})
25686 List of @code{<dicod-handler>} objects denoting handlers (module instances).
25687
25688 @item @code{databases} (default: @var{(list %dicod-database:gcide)})
25689 List of @code{<dicod-database>} objects denoting dictionaries to be served.
25690 @end table
25691 @end deftp
25692
25693 @deftp {Data Type} dicod-handler
25694 Data type representing a dictionary handler (module instance).
25695
25696 @table @asis
25697 @item @code{name}
25698 Name of the handler (module instance).
25699
25700 @item @code{module} (default: @var{#f})
25701 Name of the dicod module of the handler (instance). If it is @code{#f},
25702 the module has the same name as the handler.
25703 (@pxref{Modules,,, dico, GNU Dico Manual}).
25704
25705 @item @code{options}
25706 List of strings or gexps representing the arguments for the module handler
25707 @end table
25708 @end deftp
25709
25710 @deftp {Data Type} dicod-database
25711 Data type representing a dictionary database.
25712
25713 @table @asis
25714 @item @code{name}
25715 Name of the database, will be used in DICT commands.
25716
25717 @item @code{handler}
25718 Name of the dicod handler (module instance) used by this database
25719 (@pxref{Handlers,,, dico, GNU Dico Manual}).
25720
25721 @item @code{complex?} (default: @var{#f})
25722 Whether the database configuration complex. The complex configuration
25723 will need a corresponding @code{<dicod-handler>} object, otherwise not.
25724
25725 @item @code{options}
25726 List of strings or gexps representing the arguments for the database
25727 (@pxref{Databases,,, dico, GNU Dico Manual}).
25728 @end table
25729 @end deftp
25730
25731 @defvr {Scheme Variable} %dicod-database:gcide
25732 A @code{<dicod-database>} object serving the GNU Collaborative International
25733 Dictionary of English using the @code{gcide} package.
25734 @end defvr
25735
25736 The following is an example @code{dicod-service} configuration.
25737
25738 @lisp
25739 (dicod-service #:config
25740 (dicod-configuration
25741 (handlers (list (dicod-handler
25742 (name "wordnet")
25743 (module "dictorg")
25744 (options
25745 (list #~(string-append "dbdir=" #$wordnet))))))
25746 (databases (list (dicod-database
25747 (name "wordnet")
25748 (complex? #t)
25749 (handler "wordnet")
25750 (options '("database=wn")))
25751 %dicod-database:gcide))))
25752 @end lisp
25753
25754 @cindex Docker
25755 @subsubheading Docker Service
25756
25757 The @code{(gnu services docker)} module provides the following services.
25758
25759 @defvr {Scheme Variable} docker-service-type
25760
25761 This is the type of the service that runs @url{https://www.docker.com,Docker},
25762 a daemon that can execute application bundles (sometimes referred to as
25763 ``containers'') in isolated environments.
25764
25765 @end defvr
25766
25767 @deftp {Data Type} docker-configuration
25768 This is the data type representing the configuration of Docker and Containerd.
25769
25770 @table @asis
25771
25772 @item @code{package} (default: @code{docker})
25773 The Docker package to use.
25774
25775 @item @code{containerd} (default: @var{containerd})
25776 The Containerd package to use.
25777
25778 @end table
25779 @end deftp
25780
25781 @cindex Audit
25782 @subsubheading Auditd Service
25783
25784 The @code{(gnu services auditd)} module provides the following service.
25785
25786 @defvr {Scheme Variable} auditd-service-type
25787
25788 This is the type of the service that runs
25789 @url{https://people.redhat.com/sgrubb/audit/,auditd},
25790 a daemon that tracks security-relevant information on your system.
25791
25792 Examples of things that can be tracked:
25793
25794 @enumerate
25795 @item
25796 File accesses
25797 @item
25798 System calls
25799 @item
25800 Invoked commands
25801 @item
25802 Failed login attempts
25803 @item
25804 Firewall filtering
25805 @item
25806 Network access
25807 @end enumerate
25808
25809 @command{auditctl} from the @code{audit} package can be used in order
25810 to add or remove events to be tracked (until the next reboot).
25811 In order to permanently track events, put the command line arguments
25812 of auditctl into @file{/etc/audit/audit.rules}.
25813 @command{aureport} from the @code{audit} package can be used in order
25814 to view a report of all recorded events.
25815 The audit daemon usually logs into the directory @file{/var/log/audit}.
25816
25817 @end defvr
25818
25819 @deftp {Data Type} auditd-configuration
25820 This is the data type representing the configuration of auditd.
25821
25822 @table @asis
25823
25824 @item @code{audit} (default: @code{audit})
25825 The audit package to use.
25826
25827 @end table
25828 @end deftp
25829
25830 @defvr {Scheme Variable} singularity-service-type
25831 This is the type of the service that allows you to run
25832 @url{https://www.sylabs.io/singularity/, Singularity}, a Docker-style tool to
25833 create and run application bundles (aka. ``containers''). The value for this
25834 service is the Singularity package to use.
25835
25836 The service does not install a daemon; instead, it installs helper programs as
25837 setuid-root (@pxref{Setuid Programs}) such that unprivileged users can invoke
25838 @command{singularity run} and similar commands.
25839 @end defvr
25840
25841 @cindex Nix
25842 @subsubheading Nix service
25843
25844 The @code{(gnu services nix)} module provides the following service.
25845
25846 @defvr {Scheme Variable} nix-service-type
25847
25848 This is the type of the service that runs build daemon of the
25849 @url{https://nixos.org/nix/, Nix} package manager. Here is an example showing
25850 how to use it:
25851
25852 @lisp
25853 (use-modules (gnu))
25854 (use-service-modules nix)
25855 (use-package-modules package-management)
25856
25857 (operating-system
25858 ;; @dots{}
25859 (packages (append (list nix)
25860 %base-packages))
25861
25862 (services (append (list (service nix-service-type))
25863 %base-services)))
25864 @end lisp
25865
25866 After @command{guix system reconfigure} configure Nix for your user:
25867
25868 @itemize
25869 @item Add a Nix channel and update it. See
25870 @url{https://nixos.org/nix/manual/, Nix Package Manager Guide}.
25871
25872 @item Create a symlink to your profile and activate Nix profile:
25873 @end itemize
25874
25875 @example
25876 $ ln -s "/nix/var/nix/profiles/per-user/$USER/profile" ~/.nix-profile
25877 $ source /run/current-system/profile/etc/profile.d/nix.sh
25878 @end example
25879
25880 @end defvr
25881
25882 @node Setuid Programs
25883 @section Setuid Programs
25884
25885 @cindex setuid programs
25886 Some programs need to run with ``root'' privileges, even when they are
25887 launched by unprivileged users. A notorious example is the
25888 @command{passwd} program, which users can run to change their
25889 password, and which needs to access the @file{/etc/passwd} and
25890 @file{/etc/shadow} files---something normally restricted to root, for
25891 obvious security reasons. To address that, these executables are
25892 @dfn{setuid-root}, meaning that they always run with root privileges
25893 (@pxref{How Change Persona,,, libc, The GNU C Library Reference Manual},
25894 for more info about the setuid mechanism.)
25895
25896 The store itself @emph{cannot} contain setuid programs: that would be a
25897 security issue since any user on the system can write derivations that
25898 populate the store (@pxref{The Store}). Thus, a different mechanism is
25899 used: instead of changing the setuid bit directly on files that are in
25900 the store, we let the system administrator @emph{declare} which programs
25901 should be setuid root.
25902
25903 The @code{setuid-programs} field of an @code{operating-system}
25904 declaration contains a list of G-expressions denoting the names of
25905 programs to be setuid-root (@pxref{Using the Configuration System}).
25906 For instance, the @command{passwd} program, which is part of the Shadow
25907 package, can be designated by this G-expression (@pxref{G-Expressions}):
25908
25909 @example
25910 #~(string-append #$shadow "/bin/passwd")
25911 @end example
25912
25913 A default set of setuid programs is defined by the
25914 @code{%setuid-programs} variable of the @code{(gnu system)} module.
25915
25916 @defvr {Scheme Variable} %setuid-programs
25917 A list of G-expressions denoting common programs that are setuid-root.
25918
25919 The list includes commands such as @command{passwd}, @command{ping},
25920 @command{su}, and @command{sudo}.
25921 @end defvr
25922
25923 Under the hood, the actual setuid programs are created in the
25924 @file{/run/setuid-programs} directory at system activation time. The
25925 files in this directory refer to the ``real'' binaries, which are in the
25926 store.
25927
25928 @node X.509 Certificates
25929 @section X.509 Certificates
25930
25931 @cindex HTTPS, certificates
25932 @cindex X.509 certificates
25933 @cindex TLS
25934 Web servers available over HTTPS (that is, HTTP over the transport-layer
25935 security mechanism, TLS) send client programs an @dfn{X.509 certificate}
25936 that the client can then use to @emph{authenticate} the server. To do
25937 that, clients verify that the server's certificate is signed by a
25938 so-called @dfn{certificate authority} (CA). But to verify the CA's
25939 signature, clients must have first acquired the CA's certificate.
25940
25941 Web browsers such as GNU@tie{}IceCat include their own set of CA
25942 certificates, such that they are able to verify CA signatures
25943 out-of-the-box.
25944
25945 However, most other programs that can talk HTTPS---@command{wget},
25946 @command{git}, @command{w3m}, etc.---need to be told where CA
25947 certificates can be found.
25948
25949 @cindex @code{nss-certs}
25950 In Guix, this is done by adding a package that provides certificates
25951 to the @code{packages} field of the @code{operating-system} declaration
25952 (@pxref{operating-system Reference}). Guix includes one such package,
25953 @code{nss-certs}, which is a set of CA certificates provided as part of
25954 Mozilla's Network Security Services.
25955
25956 Note that it is @emph{not} part of @code{%base-packages}, so you need to
25957 explicitly add it. The @file{/etc/ssl/certs} directory, which is where
25958 most applications and libraries look for certificates by default, points
25959 to the certificates installed globally.
25960
25961 Unprivileged users, including users of Guix on a foreign distro,
25962 can also install their own certificate package in
25963 their profile. A number of environment variables need to be defined so
25964 that applications and libraries know where to find them. Namely, the
25965 OpenSSL library honors the @code{SSL_CERT_DIR} and @code{SSL_CERT_FILE}
25966 variables. Some applications add their own environment variables; for
25967 instance, the Git version control system honors the certificate bundle
25968 pointed to by the @code{GIT_SSL_CAINFO} environment variable. Thus, you
25969 would typically run something like:
25970
25971 @example
25972 $ guix install nss-certs
25973 $ export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs"
25974 $ export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
25975 $ export GIT_SSL_CAINFO="$SSL_CERT_FILE"
25976 @end example
25977
25978 As another example, R requires the @code{CURL_CA_BUNDLE} environment
25979 variable to point to a certificate bundle, so you would have to run
25980 something like this:
25981
25982 @example
25983 $ guix install nss-certs
25984 $ export CURL_CA_BUNDLE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
25985 @end example
25986
25987 For other applications you may want to look up the required environment
25988 variable in the relevant documentation.
25989
25990
25991 @node Name Service Switch
25992 @section Name Service Switch
25993
25994 @cindex name service switch
25995 @cindex NSS
25996 The @code{(gnu system nss)} module provides bindings to the
25997 configuration file of the libc @dfn{name service switch} or @dfn{NSS}
25998 (@pxref{NSS Configuration File,,, libc, The GNU C Library Reference
25999 Manual}). In a nutshell, the NSS is a mechanism that allows libc to be
26000 extended with new ``name'' lookup methods for system databases, which
26001 includes host names, service names, user accounts, and more (@pxref{Name
26002 Service Switch, System Databases and Name Service Switch,, libc, The GNU
26003 C Library Reference Manual}).
26004
26005 The NSS configuration specifies, for each system database, which lookup
26006 method is to be used, and how the various methods are chained
26007 together---for instance, under which circumstances NSS should try the
26008 next method in the list. The NSS configuration is given in the
26009 @code{name-service-switch} field of @code{operating-system} declarations
26010 (@pxref{operating-system Reference, @code{name-service-switch}}).
26011
26012 @cindex nss-mdns
26013 @cindex .local, host name lookup
26014 As an example, the declaration below configures the NSS to use the
26015 @uref{https://0pointer.de/lennart/projects/nss-mdns/, @code{nss-mdns}
26016 back-end}, which supports host name lookups over multicast DNS (mDNS)
26017 for host names ending in @code{.local}:
26018
26019 @lisp
26020 (name-service-switch
26021 (hosts (list %files ;first, check /etc/hosts
26022
26023 ;; If the above did not succeed, try
26024 ;; with 'mdns_minimal'.
26025 (name-service
26026 (name "mdns_minimal")
26027
26028 ;; 'mdns_minimal' is authoritative for
26029 ;; '.local'. When it returns "not found",
26030 ;; no need to try the next methods.
26031 (reaction (lookup-specification
26032 (not-found => return))))
26033
26034 ;; Then fall back to DNS.
26035 (name-service
26036 (name "dns"))
26037
26038 ;; Finally, try with the "full" 'mdns'.
26039 (name-service
26040 (name "mdns")))))
26041 @end lisp
26042
26043 Do not worry: the @code{%mdns-host-lookup-nss} variable (see below)
26044 contains this configuration, so you will not have to type it if all you
26045 want is to have @code{.local} host lookup working.
26046
26047 Note that, in this case, in addition to setting the
26048 @code{name-service-switch} of the @code{operating-system} declaration,
26049 you also need to use @code{avahi-service-type} (@pxref{Networking Services,
26050 @code{avahi-service-type}}), or @code{%desktop-services}, which includes it
26051 (@pxref{Desktop Services}). Doing this makes @code{nss-mdns} accessible
26052 to the name service cache daemon (@pxref{Base Services,
26053 @code{nscd-service}}).
26054
26055 For convenience, the following variables provide typical NSS
26056 configurations.
26057
26058 @defvr {Scheme Variable} %default-nss
26059 This is the default name service switch configuration, a
26060 @code{name-service-switch} object.
26061 @end defvr
26062
26063 @defvr {Scheme Variable} %mdns-host-lookup-nss
26064 This is the name service switch configuration with support for host name
26065 lookup over multicast DNS (mDNS) for host names ending in @code{.local}.
26066 @end defvr
26067
26068 The reference for name service switch configuration is given below. It
26069 is a direct mapping of the configuration file format of the C library , so
26070 please refer to the C library manual for more information (@pxref{NSS
26071 Configuration File,,, libc, The GNU C Library Reference Manual}).
26072 Compared to the configuration file format of libc NSS, it has the advantage
26073 not only of adding this warm parenthetic feel that we like, but also
26074 static checks: you will know about syntax errors and typos as soon as you
26075 run @command{guix system}.
26076
26077 @deftp {Data Type} name-service-switch
26078
26079 This is the data type representation the configuration of libc's name
26080 service switch (NSS). Each field below represents one of the supported
26081 system databases.
26082
26083 @table @code
26084 @item aliases
26085 @itemx ethers
26086 @itemx group
26087 @itemx gshadow
26088 @itemx hosts
26089 @itemx initgroups
26090 @itemx netgroup
26091 @itemx networks
26092 @itemx password
26093 @itemx public-key
26094 @itemx rpc
26095 @itemx services
26096 @itemx shadow
26097 The system databases handled by the NSS. Each of these fields must be a
26098 list of @code{<name-service>} objects (see below).
26099 @end table
26100 @end deftp
26101
26102 @deftp {Data Type} name-service
26103
26104 This is the data type representing an actual name service and the
26105 associated lookup action.
26106
26107 @table @code
26108 @item name
26109 A string denoting the name service (@pxref{Services in the NSS
26110 configuration,,, libc, The GNU C Library Reference Manual}).
26111
26112 Note that name services listed here must be visible to nscd. This is
26113 achieved by passing the @code{#:name-services} argument to
26114 @code{nscd-service} the list of packages providing the needed name
26115 services (@pxref{Base Services, @code{nscd-service}}).
26116
26117 @item reaction
26118 An action specified using the @code{lookup-specification} macro
26119 (@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
26120 Reference Manual}). For example:
26121
26122 @lisp
26123 (lookup-specification (unavailable => continue)
26124 (success => return))
26125 @end lisp
26126 @end table
26127 @end deftp
26128
26129 @node Initial RAM Disk
26130 @section Initial RAM Disk
26131
26132 @cindex initrd
26133 @cindex initial RAM disk
26134 For bootstrapping purposes, the Linux-Libre kernel is passed an
26135 @dfn{initial RAM disk}, or @dfn{initrd}. An initrd contains a temporary
26136 root file system as well as an initialization script. The latter is
26137 responsible for mounting the real root file system, and for loading any
26138 kernel modules that may be needed to achieve that.
26139
26140 The @code{initrd-modules} field of an @code{operating-system}
26141 declaration allows you to specify Linux-libre kernel modules that must
26142 be available in the initrd. In particular, this is where you would list
26143 modules needed to actually drive the hard disk where your root partition
26144 is---although the default value of @code{initrd-modules} should cover
26145 most use cases. For example, assuming you need the @code{megaraid_sas}
26146 module in addition to the default modules to be able to access your root
26147 file system, you would write:
26148
26149 @lisp
26150 (operating-system
26151 ;; @dots{}
26152 (initrd-modules (cons "megaraid_sas" %base-initrd-modules)))
26153 @end lisp
26154
26155 @defvr {Scheme Variable} %base-initrd-modules
26156 This is the list of kernel modules included in the initrd by default.
26157 @end defvr
26158
26159 Furthermore, if you need lower-level customization, the @code{initrd}
26160 field of an @code{operating-system} declaration allows
26161 you to specify which initrd you would like to use. The @code{(gnu
26162 system linux-initrd)} module provides three ways to build an initrd: the
26163 high-level @code{base-initrd} procedure and the low-level
26164 @code{raw-initrd} and @code{expression->initrd} procedures.
26165
26166 The @code{base-initrd} procedure is intended to cover most common uses.
26167 For example, if you want to add a bunch of kernel modules to be loaded
26168 at boot time, you can define the @code{initrd} field of the operating
26169 system declaration like this:
26170
26171 @lisp
26172 (initrd (lambda (file-systems . rest)
26173 ;; Create a standard initrd but set up networking
26174 ;; with the parameters QEMU expects by default.
26175 (apply base-initrd file-systems
26176 #:qemu-networking? #t
26177 rest)))
26178 @end lisp
26179
26180 The @code{base-initrd} procedure also handles common use cases that
26181 involves using the system as a QEMU guest, or as a ``live'' system with
26182 volatile root file system.
26183
26184 The @code{base-initrd} procedure is built from @code{raw-initrd} procedure.
26185 Unlike @code{base-initrd}, @code{raw-initrd} doesn't do anything high-level,
26186 such as trying to guess which kernel modules and packages should be included
26187 to the initrd. An example use of @code{raw-initrd} is when a user has
26188 a custom Linux kernel configuration and default kernel modules included by
26189 @code{base-initrd} are not available.
26190
26191 The initial RAM disk produced by @code{base-initrd} or @code{raw-initrd}
26192 honors several options passed on the Linux kernel command line
26193 (that is, arguments passed @i{via} the @code{linux} command of GRUB, or the
26194 @code{-append} option of QEMU), notably:
26195
26196 @table @code
26197 @item --load=@var{boot}
26198 Tell the initial RAM disk to load @var{boot}, a file containing a Scheme
26199 program, once it has mounted the root file system.
26200
26201 Guix uses this option to yield control to a boot program that runs the
26202 service activation programs and then spawns the GNU@tie{}Shepherd, the
26203 initialization system.
26204
26205 @item --root=@var{root}
26206 Mount @var{root} as the root file system. @var{root} can be a
26207 device name like @code{/dev/sda1}, a file system label, or a file system
26208 UUID.
26209
26210 @item --system=@var{system}
26211 Have @file{/run/booted-system} and @file{/run/current-system} point to
26212 @var{system}.
26213
26214 @item modprobe.blacklist=@var{modules}@dots{}
26215 @cindex module, black-listing
26216 @cindex black list, of kernel modules
26217 Instruct the initial RAM disk as well as the @command{modprobe} command
26218 (from the kmod package) to refuse to load @var{modules}. @var{modules}
26219 must be a comma-separated list of module names---e.g.,
26220 @code{usbkbd,9pnet}.
26221
26222 @item --repl
26223 Start a read-eval-print loop (REPL) from the initial RAM disk before it
26224 tries to load kernel modules and to mount the root file system. Our
26225 marketing team calls it @dfn{boot-to-Guile}. The Schemer in you will
26226 love it. @xref{Using Guile Interactively,,, guile, GNU Guile Reference
26227 Manual}, for more information on Guile's REPL.
26228
26229 @end table
26230
26231 Now that you know all the features that initial RAM disks produced by
26232 @code{base-initrd} and @code{raw-initrd} provide,
26233 here is how to use it and customize it further.
26234
26235 @cindex initrd
26236 @cindex initial RAM disk
26237 @deffn {Scheme Procedure} raw-initrd @var{file-systems} @
26238 [#:linux-modules '()] [#:mapped-devices '()] @
26239 [#:keyboard-layout #f] @
26240 [#:helper-packages '()] [#:qemu-networking? #f] [#:volatile-root? #f]
26241 Return a derivation that builds a raw initrd. @var{file-systems} is
26242 a list of file systems to be mounted by the initrd, possibly in addition to
26243 the root file system specified on the kernel command line via @code{--root}.
26244 @var{linux-modules} is a list of kernel modules to be loaded at boot time.
26245 @var{mapped-devices} is a list of device mappings to realize before
26246 @var{file-systems} are mounted (@pxref{Mapped Devices}).
26247 @var{helper-packages} is a list of packages to be copied in the initrd. It may
26248 include @code{e2fsck/static} or other packages needed by the initrd to check
26249 the root file system.
26250
26251 When true, @var{keyboard-layout} is a @code{<keyboard-layout>} record denoting
26252 the desired console keyboard layout. This is done before @var{mapped-devices}
26253 are set up and before @var{file-systems} are mounted such that, should the
26254 user need to enter a passphrase or use the REPL, this happens using the
26255 intended keyboard layout.
26256
26257 When @var{qemu-networking?} is true, set up networking with the standard QEMU
26258 parameters. When @var{virtio?} is true, load additional modules so that the
26259 initrd can be used as a QEMU guest with para-virtualized I/O drivers.
26260
26261 When @var{volatile-root?} is true, the root file system is writable but any changes
26262 to it are lost.
26263 @end deffn
26264
26265 @deffn {Scheme Procedure} base-initrd @var{file-systems} @
26266 [#:mapped-devices '()] [#:keyboard-layout #f] @
26267 [#:qemu-networking? #f] [#:volatile-root? #f] @
26268 [#:linux-modules '()]
26269 Return as a file-like object a generic initrd, with kernel
26270 modules taken from @var{linux}. @var{file-systems} is a list of file-systems to be
26271 mounted by the initrd, possibly in addition to the root file system specified
26272 on the kernel command line via @code{--root}. @var{mapped-devices} is a list of device
26273 mappings to realize before @var{file-systems} are mounted.
26274
26275 When true, @var{keyboard-layout} is a @code{<keyboard-layout>} record denoting
26276 the desired console keyboard layout. This is done before @var{mapped-devices}
26277 are set up and before @var{file-systems} are mounted such that, should the
26278 user need to enter a passphrase or use the REPL, this happens using the
26279 intended keyboard layout.
26280
26281 @var{qemu-networking?} and @var{volatile-root?} behaves as in @code{raw-initrd}.
26282
26283 The initrd is automatically populated with all the kernel modules necessary
26284 for @var{file-systems} and for the given options. Additional kernel
26285 modules can be listed in @var{linux-modules}. They will be added to the initrd, and
26286 loaded at boot time in the order in which they appear.
26287 @end deffn
26288
26289 Needless to say, the initrds we produce and use embed a
26290 statically-linked Guile, and the initialization program is a Guile
26291 program. That gives a lot of flexibility. The
26292 @code{expression->initrd} procedure builds such an initrd, given the
26293 program to run in that initrd.
26294
26295 @deffn {Scheme Procedure} expression->initrd @var{exp} @
26296 [#:guile %guile-static-stripped] [#:name "guile-initrd"]
26297 Return as a file-like object a Linux initrd (a gzipped cpio archive)
26298 containing @var{guile} and that evaluates @var{exp}, a G-expression,
26299 upon booting. All the derivations referenced by @var{exp} are
26300 automatically copied to the initrd.
26301 @end deffn
26302
26303 @node Bootloader Configuration
26304 @section Bootloader Configuration
26305
26306 @cindex bootloader
26307 @cindex boot loader
26308
26309 The operating system supports multiple bootloaders. The bootloader is
26310 configured using @code{bootloader-configuration} declaration. All the
26311 fields of this structure are bootloader agnostic except for one field,
26312 @code{bootloader} that indicates the bootloader to be configured and
26313 installed.
26314
26315 Some of the bootloaders do not honor every field of
26316 @code{bootloader-configuration}. For instance, the extlinux
26317 bootloader does not support themes and thus ignores the @code{theme}
26318 field.
26319
26320 @deftp {Data Type} bootloader-configuration
26321 The type of a bootloader configuration declaration.
26322
26323 @table @asis
26324
26325 @item @code{bootloader}
26326 @cindex EFI, bootloader
26327 @cindex UEFI, bootloader
26328 @cindex BIOS, bootloader
26329 The bootloader to use, as a @code{bootloader} object. For now
26330 @code{grub-bootloader}, @code{grub-efi-bootloader},
26331 @code{extlinux-bootloader} and @code{u-boot-bootloader} are supported.
26332
26333 @vindex grub-efi-bootloader
26334 @code{grub-efi-bootloader} allows to boot on modern systems using the
26335 @dfn{Unified Extensible Firmware Interface} (UEFI). This is what you should
26336 use if the installation image contains a @file{/sys/firmware/efi} directory
26337 when you boot it on your system.
26338
26339 @vindex grub-bootloader
26340 @code{grub-bootloader} allows you to boot in particular Intel-based machines
26341 in ``legacy'' BIOS mode.
26342
26343 @cindex ARM, bootloaders
26344 @cindex AArch64, bootloaders
26345 Available bootloaders are described in @code{(gnu bootloader @dots{})}
26346 modules. In particular, @code{(gnu bootloader u-boot)} contains definitions
26347 of bootloaders for a wide range of ARM and AArch64 systems, using the
26348 @uref{https://www.denx.de/wiki/U-Boot/, U-Boot bootloader}.
26349
26350 @item @code{target}
26351 This is a string denoting the target onto which to install the
26352 bootloader.
26353
26354 The interpretation depends on the bootloader in question. For
26355 @code{grub-bootloader}, for example, it should be a device name understood by
26356 the bootloader @command{installer} command, such as @code{/dev/sda} or
26357 @code{(hd0)} (@pxref{Invoking grub-install,,, grub, GNU GRUB Manual}). For
26358 @code{grub-efi-bootloader}, it should be the mount point of the EFI file
26359 system, usually @file{/boot/efi}.
26360
26361 @item @code{menu-entries} (default: @code{()})
26362 A possibly empty list of @code{menu-entry} objects (see below), denoting
26363 entries to appear in the bootloader menu, in addition to the current
26364 system entry and the entry pointing to previous system generations.
26365
26366 @item @code{default-entry} (default: @code{0})
26367 The index of the default boot menu entry. Index 0 is for the entry of the
26368 current system.
26369
26370 @item @code{timeout} (default: @code{5})
26371 The number of seconds to wait for keyboard input before booting. Set to
26372 0 to boot immediately, and to -1 to wait indefinitely.
26373
26374 @cindex keyboard layout, for the bootloader
26375 @item @code{keyboard-layout} (default: @code{#f})
26376 If this is @code{#f}, the bootloader's menu (if any) uses the default keyboard
26377 layout, usually US@tie{}English (``qwerty'').
26378
26379 Otherwise, this must be a @code{keyboard-layout} object (@pxref{Keyboard
26380 Layout}).
26381
26382 @quotation Note
26383 This option is currently ignored by bootloaders other than @code{grub} and
26384 @code{grub-efi}.
26385 @end quotation
26386
26387 @item @code{theme} (default: @var{#f})
26388 The bootloader theme object describing the theme to use. If no theme
26389 is provided, some bootloaders might use a default theme, that's true
26390 for GRUB.
26391
26392 @item @code{terminal-outputs} (default: @code{'(gfxterm)})
26393 The output terminals used for the bootloader boot menu, as a list of
26394 symbols. GRUB accepts the values: @code{console}, @code{serial},
26395 @code{serial_@{0-3@}}, @code{gfxterm}, @code{vga_text},
26396 @code{mda_text}, @code{morse}, and @code{pkmodem}. This field
26397 corresponds to the GRUB variable @code{GRUB_TERMINAL_OUTPUT} (@pxref{Simple
26398 configuration,,, grub,GNU GRUB manual}).
26399
26400 @item @code{terminal-inputs} (default: @code{'()})
26401 The input terminals used for the bootloader boot menu, as a list of
26402 symbols. For GRUB, the default is the native platform terminal as
26403 determined at run-time. GRUB accepts the values: @code{console},
26404 @code{serial}, @code{serial_@{0-3@}}, @code{at_keyboard}, and
26405 @code{usb_keyboard}. This field corresponds to the GRUB variable
26406 @code{GRUB_TERMINAL_INPUT} (@pxref{Simple configuration,,, grub,GNU GRUB
26407 manual}).
26408
26409 @item @code{serial-unit} (default: @code{#f})
26410 The serial unit used by the bootloader, as an integer from 0 to 3.
26411 For GRUB, it is chosen at run-time; currently GRUB chooses 0, which
26412 corresponds to COM1 (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
26413
26414 @item @code{serial-speed} (default: @code{#f})
26415 The speed of the serial interface, as an integer. For GRUB, the
26416 default value is chosen at run-time; currently GRUB chooses
26417 9600@tie{}bps (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
26418 @end table
26419
26420 @end deftp
26421
26422 @cindex dual boot
26423 @cindex boot menu
26424 Should you want to list additional boot menu entries @i{via} the
26425 @code{menu-entries} field above, you will need to create them with the
26426 @code{menu-entry} form. For example, imagine you want to be able to
26427 boot another distro (hard to imagine!), you can define a menu entry
26428 along these lines:
26429
26430 @lisp
26431 (menu-entry
26432 (label "The Other Distro")
26433 (linux "/boot/old/vmlinux-2.6.32")
26434 (linux-arguments '("root=/dev/sda2"))
26435 (initrd "/boot/old/initrd"))
26436 @end lisp
26437
26438 Details below.
26439
26440 @deftp {Data Type} menu-entry
26441 The type of an entry in the bootloader menu.
26442
26443 @table @asis
26444
26445 @item @code{label}
26446 The label to show in the menu---e.g., @code{"GNU"}.
26447
26448 @item @code{linux}
26449 The Linux kernel image to boot, for example:
26450
26451 @lisp
26452 (file-append linux-libre "/bzImage")
26453 @end lisp
26454
26455 For GRUB, it is also possible to specify a device explicitly in the
26456 file path using GRUB's device naming convention (@pxref{Naming
26457 convention,,, grub, GNU GRUB manual}), for example:
26458
26459 @example
26460 "(hd0,msdos1)/boot/vmlinuz"
26461 @end example
26462
26463 If the device is specified explicitly as above, then the @code{device}
26464 field is ignored entirely.
26465
26466 @item @code{linux-arguments} (default: @code{()})
26467 The list of extra Linux kernel command-line arguments---e.g.,
26468 @code{("console=ttyS0")}.
26469
26470 @item @code{initrd}
26471 A G-Expression or string denoting the file name of the initial RAM disk
26472 to use (@pxref{G-Expressions}).
26473 @item @code{device} (default: @code{#f})
26474 The device where the kernel and initrd are to be found---i.e., for GRUB,
26475 @dfn{root} for this menu entry (@pxref{root,,, grub, GNU GRUB manual}).
26476
26477 This may be a file system label (a string), a file system UUID (a
26478 bytevector, @pxref{File Systems}), or @code{#f}, in which case
26479 the bootloader will search the device containing the file specified by
26480 the @code{linux} field (@pxref{search,,, grub, GNU GRUB manual}). It
26481 must @emph{not} be an OS device name such as @file{/dev/sda1}.
26482
26483 @end table
26484 @end deftp
26485
26486 @cindex HDPI
26487 @cindex HiDPI
26488 @cindex resolution
26489 @c FIXME: Write documentation once it's stable.
26490 For now only GRUB has theme support. GRUB themes are created using
26491 the @code{grub-theme} form, which is not fully documented yet.
26492
26493 @deftp {Data Type} grub-theme
26494 Data type representing the configuration of the GRUB theme.
26495
26496 @table @asis
26497 @item @code{gfxmode} (default: @code{'("auto")})
26498 The GRUB @code{gfxmode} to set (a list of screen resolution strings, see
26499 @pxref{gfxmode,,, grub, GNU GRUB manual}).
26500 @end table
26501 @end deftp
26502
26503 @defvr {Scheme Variable} %default-theme
26504 This is the default GRUB theme used by the operating system if no
26505 @code{theme} field is specified in @code{bootloader-configuration}
26506 record.
26507
26508 It comes with a fancy background image displaying the GNU and Guix
26509 logos.
26510 @end defvr
26511
26512 For example, to override the default resolution, you may use something
26513 like
26514
26515 @lisp
26516 (bootloader
26517 (grub-configuration
26518 ;; @dots{}
26519 (theme (grub-theme
26520 (inherit %default-theme)
26521 (gfxmode '("1024x786x32" "auto"))))))
26522 @end lisp
26523
26524 @node Invoking guix system
26525 @section Invoking @code{guix system}
26526
26527 Once you have written an operating system declaration as seen in the
26528 previous section, it can be @dfn{instantiated} using the @command{guix
26529 system} command. The synopsis is:
26530
26531 @example
26532 guix system @var{options}@dots{} @var{action} @var{file}
26533 @end example
26534
26535 @var{file} must be the name of a file containing an
26536 @code{operating-system} declaration. @var{action} specifies how the
26537 operating system is instantiated. Currently the following values are
26538 supported:
26539
26540 @table @code
26541 @item search
26542 Display available service type definitions that match the given regular
26543 expressions, sorted by relevance:
26544
26545 @cindex HDPI
26546 @cindex HiDPI
26547 @cindex resolution
26548 @example
26549 $ guix system search console
26550 name: console-fonts
26551 location: gnu/services/base.scm:806:2
26552 extends: shepherd-root
26553 description: Install the given fonts on the specified ttys (fonts are per
26554 + virtual console on GNU/Linux). The value of this service is a list of
26555 + tty/font pairs. The font can be the name of a font provided by the `kbd'
26556 + package or any valid argument to `setfont', as in this example:
26557 +
26558 + '(("tty1" . "LatGrkCyr-8x16")
26559 + ("tty2" . (file-append
26560 + font-tamzen
26561 + "/share/kbd/consolefonts/TamzenForPowerline10x20.psf"))
26562 + ("tty3" . (file-append
26563 + font-terminus
26564 + "/share/consolefonts/ter-132n"))) ; for HDPI
26565 relevance: 9
26566
26567 name: mingetty
26568 location: gnu/services/base.scm:1190:2
26569 extends: shepherd-root
26570 description: Provide console login using the `mingetty' program.
26571 relevance: 2
26572
26573 name: login
26574 location: gnu/services/base.scm:860:2
26575 extends: pam
26576 description: Provide a console log-in service as specified by its
26577 + configuration value, a `login-configuration' object.
26578 relevance: 2
26579
26580 @dots{}
26581 @end example
26582
26583 As for @command{guix package --search}, the result is written in
26584 @code{recutils} format, which makes it easy to filter the output
26585 (@pxref{Top, GNU recutils databases,, recutils, GNU recutils manual}).
26586
26587 @item reconfigure
26588 Build the operating system described in @var{file}, activate it, and
26589 switch to it@footnote{This action (and the related actions
26590 @code{switch-generation} and @code{roll-back}) are usable only on
26591 systems already running Guix System.}.
26592
26593 @quotation Note
26594 @c The paragraph below refers to the problem discussed at
26595 @c <https://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
26596 It is highly recommended to run @command{guix pull} once before you run
26597 @command{guix system reconfigure} for the first time (@pxref{Invoking
26598 guix pull}). Failing to do that you would see an older version of Guix
26599 once @command{reconfigure} has completed.
26600 @end quotation
26601
26602 This effects all the configuration specified in @var{file}: user
26603 accounts, system services, global package list, setuid programs, etc.
26604 The command starts system services specified in @var{file} that are not
26605 currently running; if a service is currently running this command will
26606 arrange for it to be upgraded the next time it is stopped (e.g.@: by
26607 @code{herd stop X} or @code{herd restart X}).
26608
26609 This command creates a new generation whose number is one greater than
26610 the current generation (as reported by @command{guix system
26611 list-generations}). If that generation already exists, it will be
26612 overwritten. This behavior mirrors that of @command{guix package}
26613 (@pxref{Invoking guix package}).
26614
26615 It also adds a bootloader menu entry for the new OS configuration,
26616 ---unless @option{--no-bootloader} is passed. For GRUB, it moves
26617 entries for older configurations to a submenu, allowing you to choose
26618 an older system generation at boot time should you need it.
26619
26620 @cindex provenance tracking, of the operating system
26621 Upon completion, the new system is deployed under
26622 @file{/run/current-system}. This directory contains @dfn{provenance
26623 meta-data}: the list of channels in use (@pxref{Channels}) and
26624 @var{file} itself, when available. This information is useful should
26625 you later want to inspect how this particular generation was built.
26626
26627 In fact, assuming @var{file} is self-contained, you can later rebuild
26628 generation @var{n} of your operating system with:
26629
26630 @example
26631 guix time-machine \
26632 -C /var/guix/profiles/system-@var{n}-link/channels.scm -- \
26633 system reconfigure \
26634 /var/guix/profiles/system-@var{n}-link/configuration.scm
26635 @end example
26636
26637 You can think of it as some sort of built-in version control! Your
26638 system is not just a binary artifact: @emph{it carries its own source}.
26639 @xref{Service Reference, @code{provenance-service-type}}, for more
26640 information on provenance tracking.
26641
26642 @item switch-generation
26643 @cindex generations
26644 Switch to an existing system generation. This action atomically
26645 switches the system profile to the specified system generation. It
26646 also rearranges the system's existing bootloader menu entries. It
26647 makes the menu entry for the specified system generation the default,
26648 and it moves the entries for the other generations to a submenu, if
26649 supported by the bootloader being used. The next time the system
26650 boots, it will use the specified system generation.
26651
26652 The bootloader itself is not being reinstalled when using this
26653 command. Thus, the installed bootloader is used with an updated
26654 configuration file.
26655
26656 The target generation can be specified explicitly by its generation
26657 number. For example, the following invocation would switch to system
26658 generation 7:
26659
26660 @example
26661 guix system switch-generation 7
26662 @end example
26663
26664 The target generation can also be specified relative to the current
26665 generation with the form @code{+N} or @code{-N}, where @code{+3} means
26666 ``3 generations ahead of the current generation,'' and @code{-1} means
26667 ``1 generation prior to the current generation.'' When specifying a
26668 negative value such as @code{-1}, you must precede it with @code{--} to
26669 prevent it from being parsed as an option. For example:
26670
26671 @example
26672 guix system switch-generation -- -1
26673 @end example
26674
26675 Currently, the effect of invoking this action is @emph{only} to switch
26676 the system profile to an existing generation and rearrange the
26677 bootloader menu entries. To actually start using the target system
26678 generation, you must reboot after running this action. In the future,
26679 it will be updated to do the same things as @command{reconfigure},
26680 like activating and deactivating services.
26681
26682 This action will fail if the specified generation does not exist.
26683
26684 @item roll-back
26685 @cindex rolling back
26686 Switch to the preceding system generation. The next time the system
26687 boots, it will use the preceding system generation. This is the inverse
26688 of @command{reconfigure}, and it is exactly the same as invoking
26689 @command{switch-generation} with an argument of @code{-1}.
26690
26691 Currently, as with @command{switch-generation}, you must reboot after
26692 running this action to actually start using the preceding system
26693 generation.
26694
26695 @item delete-generations
26696 @cindex deleting system generations
26697 @cindex saving space
26698 Delete system generations, making them candidates for garbage collection
26699 (@pxref{Invoking guix gc}, for information on how to run the ``garbage
26700 collector'').
26701
26702 This works in the same way as @command{guix package --delete-generations}
26703 (@pxref{Invoking guix package, @code{--delete-generations}}). With no
26704 arguments, all system generations but the current one are deleted:
26705
26706 @example
26707 guix system delete-generations
26708 @end example
26709
26710 You can also select the generations you want to delete. The example below
26711 deletes all the system generations that are more than two month old:
26712
26713 @example
26714 guix system delete-generations 2m
26715 @end example
26716
26717 Running this command automatically reinstalls the bootloader with an updated
26718 list of menu entries---e.g., the ``old generations'' sub-menu in GRUB no
26719 longer lists the generations that have been deleted.
26720
26721 @item build
26722 Build the derivation of the operating system, which includes all the
26723 configuration files and programs needed to boot and run the system.
26724 This action does not actually install anything.
26725
26726 @item init
26727 Populate the given directory with all the files necessary to run the
26728 operating system specified in @var{file}. This is useful for first-time
26729 installations of Guix System. For instance:
26730
26731 @example
26732 guix system init my-os-config.scm /mnt
26733 @end example
26734
26735 copies to @file{/mnt} all the store items required by the configuration
26736 specified in @file{my-os-config.scm}. This includes configuration
26737 files, packages, and so on. It also creates other essential files
26738 needed for the system to operate correctly---e.g., the @file{/etc},
26739 @file{/var}, and @file{/run} directories, and the @file{/bin/sh} file.
26740
26741 This command also installs bootloader on the target specified in
26742 @file{my-os-config}, unless the @option{--no-bootloader} option was
26743 passed.
26744
26745 @item vm
26746 @cindex virtual machine
26747 @cindex VM
26748 @anchor{guix system vm}
26749 Build a virtual machine that contains the operating system declared in
26750 @var{file}, and return a script to run that virtual machine (VM).
26751
26752 @quotation Note
26753 The @code{vm} action and others below
26754 can use KVM support in the Linux-libre kernel. Specifically, if the
26755 machine has hardware virtualization support, the corresponding
26756 KVM kernel module should be loaded, and the @file{/dev/kvm} device node
26757 must exist and be readable and writable by the user and by the
26758 build users of the daemon (@pxref{Build Environment Setup}).
26759 @end quotation
26760
26761 Arguments given to the script are passed to QEMU as in the example
26762 below, which enables networking and requests 1@tie{}GiB of RAM for the
26763 emulated machine:
26764
26765 @example
26766 $ /gnu/store/@dots{}-run-vm.sh -m 1024 -smp 2 -net user,model=virtio-net-pci
26767 @end example
26768
26769 The VM shares its store with the host system.
26770
26771 Additional file systems can be shared between the host and the VM using
26772 the @code{--share} and @code{--expose} command-line options: the former
26773 specifies a directory to be shared with write access, while the latter
26774 provides read-only access to the shared directory.
26775
26776 The example below creates a VM in which the user's home directory is
26777 accessible read-only, and where the @file{/exchange} directory is a
26778 read-write mapping of @file{$HOME/tmp} on the host:
26779
26780 @example
26781 guix system vm my-config.scm \
26782 --expose=$HOME --share=$HOME/tmp=/exchange
26783 @end example
26784
26785 On GNU/Linux, the default is to boot directly to the kernel; this has
26786 the advantage of requiring only a very tiny root disk image since the
26787 store of the host can then be mounted.
26788
26789 The @code{--full-boot} option forces a complete boot sequence, starting
26790 with the bootloader. This requires more disk space since a root image
26791 containing at least the kernel, initrd, and bootloader data files must
26792 be created. The @code{--image-size} option can be used to specify the
26793 size of the image.
26794
26795 @cindex System images, creation in various formats
26796 @cindex Creating system images in various formats
26797 @item vm-image
26798 @itemx disk-image
26799 @itemx docker-image
26800 Return a virtual machine, disk image, or Docker image of the operating
26801 system declared in @var{file} that stands alone. By default,
26802 @command{guix system} estimates the size of the image needed to store
26803 the system, but you can use the @option{--image-size} option to specify
26804 a value. Docker images are built to contain exactly what they need, so
26805 the @option{--image-size} option is ignored in the case of
26806 @code{docker-image}.
26807
26808 You can specify the root file system type by using the
26809 @option{--file-system-type} option. It defaults to @code{ext4}.
26810
26811 When using @code{vm-image}, the returned image is in qcow2 format, which
26812 the QEMU emulator can efficiently use. @xref{Running Guix in a VM},
26813 for more information on how to run the image in a virtual machine.
26814
26815 When using @code{disk-image}, a raw disk image is produced; it can be
26816 copied as is to a USB stick, for instance. Assuming @code{/dev/sdc} is
26817 the device corresponding to a USB stick, one can copy the image to it
26818 using the following command:
26819
26820 @example
26821 # dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
26822 @end example
26823
26824 When using @code{docker-image}, a Docker image is produced. Guix builds
26825 the image from scratch, not from a pre-existing Docker base image. As a
26826 result, it contains @emph{exactly} what you define in the operating
26827 system configuration file. You can then load the image and launch a
26828 Docker container using commands like the following:
26829
26830 @example
26831 image_id="`docker load < guix-system-docker-image.tar.gz`"
26832 container_id="`docker create $image_id`"
26833 docker start $container_id
26834 @end example
26835
26836 This command starts a new Docker container from the specified image. It
26837 will boot the Guix system in the usual manner, which means it will
26838 start any services you have defined in the operating system
26839 configuration. You can get an interactive shell running in the container
26840 using @command{docker exec}:
26841
26842 @example
26843 docker exec -ti $container_id /run/current-system/profile/bin/bash --login
26844 @end example
26845
26846 Depending on what you run in the Docker container, it
26847 may be necessary to give the container additional permissions. For
26848 example, if you intend to build software using Guix inside of the Docker
26849 container, you may need to pass the @option{--privileged} option to
26850 @code{docker create}.
26851
26852 @item container
26853 Return a script to run the operating system declared in @var{file}
26854 within a container. Containers are a set of lightweight isolation
26855 mechanisms provided by the kernel Linux-libre. Containers are
26856 substantially less resource-demanding than full virtual machines since
26857 the kernel, shared objects, and other resources can be shared with the
26858 host system; this also means they provide thinner isolation.
26859
26860 Currently, the script must be run as root in order to support more than
26861 a single user and group. The container shares its store with the host
26862 system.
26863
26864 As with the @code{vm} action (@pxref{guix system vm}), additional file
26865 systems to be shared between the host and container can be specified
26866 using the @option{--share} and @option{--expose} options:
26867
26868 @example
26869 guix system container my-config.scm \
26870 --expose=$HOME --share=$HOME/tmp=/exchange
26871 @end example
26872
26873 @quotation Note
26874 This option requires Linux-libre 3.19 or newer.
26875 @end quotation
26876
26877 @end table
26878
26879 @var{options} can contain any of the common build options (@pxref{Common
26880 Build Options}). In addition, @var{options} can contain one of the
26881 following:
26882
26883 @table @option
26884 @item --expression=@var{expr}
26885 @itemx -e @var{expr}
26886 Consider the operating-system @var{expr} evaluates to.
26887 This is an alternative to specifying a file which evaluates to an
26888 operating system.
26889 This is used to generate the Guix system installer @pxref{Building the
26890 Installation Image}).
26891
26892 @item --system=@var{system}
26893 @itemx -s @var{system}
26894 Attempt to build for @var{system} instead of the host system type.
26895 This works as per @command{guix build} (@pxref{Invoking guix build}).
26896
26897 @item --derivation
26898 @itemx -d
26899 Return the derivation file name of the given operating system without
26900 building anything.
26901
26902 @cindex provenance tracking, of the operating system
26903 @item --save-provenance
26904 As discussed above, @command{guix system init} and @command{guix system
26905 reconfigure} always save provenance information @i{via} a dedicated
26906 service (@pxref{Service Reference, @code{provenance-service-type}}).
26907 However, other commands don't do that by default. If you wish to, say,
26908 create a virtual machine image that contains provenance information, you
26909 can run:
26910
26911 @example
26912 guix system vm-image --save-provenance config.scm
26913 @end example
26914
26915 That way, the resulting image will effectively ``embed its own source''
26916 in the form of meta-data in @file{/run/current-system}. With that
26917 information, one can rebuild the image to make sure it really contains
26918 what it pretends to contain; or they could use that to derive a variant
26919 of the image.
26920
26921 @item --file-system-type=@var{type}
26922 @itemx -t @var{type}
26923 For the @code{disk-image} action, create a file system of the given
26924 @var{type} on the image.
26925
26926 When this option is omitted, @command{guix system} uses @code{ext4}.
26927
26928 @cindex ISO-9660 format
26929 @cindex CD image format
26930 @cindex DVD image format
26931 @code{--file-system-type=iso9660} produces an ISO-9660 image, suitable
26932 for burning on CDs and DVDs.
26933
26934 @item --image-size=@var{size}
26935 For the @code{vm-image} and @code{disk-image} actions, create an image
26936 of the given @var{size}. @var{size} may be a number of bytes, or it may
26937 include a unit as a suffix (@pxref{Block size, size specifications,,
26938 coreutils, GNU Coreutils}).
26939
26940 When this option is omitted, @command{guix system} computes an estimate
26941 of the image size as a function of the size of the system declared in
26942 @var{file}.
26943
26944 @item --network
26945 @itemx -N
26946 For the @code{container} action, allow containers to access the host network,
26947 that is, do not create a network namespace.
26948
26949 @item --root=@var{file}
26950 @itemx -r @var{file}
26951 Make @var{file} a symlink to the result, and register it as a garbage
26952 collector root.
26953
26954 @item --skip-checks
26955 Skip pre-installation safety checks.
26956
26957 By default, @command{guix system init} and @command{guix system
26958 reconfigure} perform safety checks: they make sure the file systems that
26959 appear in the @code{operating-system} declaration actually exist
26960 (@pxref{File Systems}), and that any Linux kernel modules that may be
26961 needed at boot time are listed in @code{initrd-modules} (@pxref{Initial
26962 RAM Disk}). Passing this option skips these tests altogether.
26963
26964 @cindex on-error
26965 @cindex on-error strategy
26966 @cindex error strategy
26967 @item --on-error=@var{strategy}
26968 Apply @var{strategy} when an error occurs when reading @var{file}.
26969 @var{strategy} may be one of the following:
26970
26971 @table @code
26972 @item nothing-special
26973 Report the error concisely and exit. This is the default strategy.
26974
26975 @item backtrace
26976 Likewise, but also display a backtrace.
26977
26978 @item debug
26979 Report the error and enter Guile's debugger. From there, you can run
26980 commands such as @code{,bt} to get a backtrace, @code{,locals} to
26981 display local variable values, and more generally inspect the state of the
26982 program. @xref{Debug Commands,,, guile, GNU Guile Reference Manual}, for
26983 a list of available debugging commands.
26984 @end table
26985 @end table
26986
26987 Once you have built, configured, re-configured, and re-re-configured
26988 your Guix installation, you may find it useful to list the operating
26989 system generations available on disk---and that you can choose from the
26990 bootloader boot menu:
26991
26992 @table @code
26993
26994 @item describe
26995 Describe the current system generation: its file name, the kernel and
26996 bootloader used, etc., as well as provenance information when available.
26997
26998 @item list-generations
26999 List a summary of each generation of the operating system available on
27000 disk, in a human-readable way. This is similar to the
27001 @option{--list-generations} option of @command{guix package}
27002 (@pxref{Invoking guix package}).
27003
27004 Optionally, one can specify a pattern, with the same syntax that is used
27005 in @command{guix package --list-generations}, to restrict the list of
27006 generations displayed. For instance, the following command displays
27007 generations that are up to 10 days old:
27008
27009 @example
27010 $ guix system list-generations 10d
27011 @end example
27012
27013 @end table
27014
27015 The @command{guix system} command has even more to offer! The following
27016 sub-commands allow you to visualize how your system services relate to
27017 each other:
27018
27019 @anchor{system-extension-graph}
27020 @table @code
27021
27022 @item extension-graph
27023 Emit in Dot/Graphviz format to standard output the @dfn{service
27024 extension graph} of the operating system defined in @var{file}
27025 (@pxref{Service Composition}, for more information on service
27026 extensions.)
27027
27028 The command:
27029
27030 @example
27031 $ guix system extension-graph @var{file} | dot -Tpdf > services.pdf
27032 @end example
27033
27034 produces a PDF file showing the extension relations among services.
27035
27036 @anchor{system-shepherd-graph}
27037 @item shepherd-graph
27038 Emit in Dot/Graphviz format to standard output the @dfn{dependency
27039 graph} of shepherd services of the operating system defined in
27040 @var{file}. @xref{Shepherd Services}, for more information and for an
27041 example graph.
27042
27043 @end table
27044
27045 @node Invoking guix deploy
27046 @section Invoking @code{guix deploy}
27047
27048 We've already seen @code{operating-system} declarations used to manage a
27049 machine's configuration locally. Suppose you need to configure multiple
27050 machines, though---perhaps you're managing a service on the web that's
27051 comprised of several servers. @command{guix deploy} enables you to use those
27052 same @code{operating-system} declarations to manage multiple remote hosts at
27053 once as a logical ``deployment''.
27054
27055 @quotation Note
27056 The functionality described in this section is still under development
27057 and is subject to change. Get in touch with us on
27058 @email{guix-devel@@gnu.org}!
27059 @end quotation
27060
27061 @example
27062 guix deploy @var{file}
27063 @end example
27064
27065 Such an invocation will deploy the machines that the code within @var{file}
27066 evaluates to. As an example, @var{file} might contain a definition like this:
27067
27068 @lisp
27069 ;; This is a Guix deployment of a "bare bones" setup, with
27070 ;; no X11 display server, to a machine with an SSH daemon
27071 ;; listening on localhost:2222. A configuration such as this
27072 ;; may be appropriate for virtual machine with ports
27073 ;; forwarded to the host's loopback interface.
27074
27075 (use-service-modules networking ssh)
27076 (use-package-modules bootloaders)
27077
27078 (define %system
27079 (operating-system
27080 (host-name "gnu-deployed")
27081 (timezone "Etc/UTC")
27082 (bootloader (bootloader-configuration
27083 (bootloader grub-bootloader)
27084 (target "/dev/vda")
27085 (terminal-outputs '(console))))
27086 (file-systems (cons (file-system
27087 (mount-point "/")
27088 (device "/dev/vda1")
27089 (type "ext4"))
27090 %base-file-systems))
27091 (services
27092 (append (list (service dhcp-client-service-type)
27093 (service openssh-service-type
27094 (openssh-configuration
27095 (permit-root-login #t)
27096 (allow-empty-passwords? #t))))
27097 %base-services))))
27098
27099 (list (machine
27100 (operating-system %system)
27101 (environment managed-host-environment-type)
27102 (configuration (machine-ssh-configuration
27103 (host-name "localhost")
27104 (system "x86_64-linux")
27105 (user "alice")
27106 (identity "./id_rsa")
27107 (port 2222)))))
27108 @end lisp
27109
27110 The file should evaluate to a list of @var{machine} objects. This example,
27111 upon being deployed, will create a new generation on the remote system
27112 realizing the @code{operating-system} declaration @code{%system}.
27113 @code{environment} and @code{configuration} specify how the machine should be
27114 provisioned---that is, how the computing resources should be created and
27115 managed. The above example does not create any resources, as a
27116 @code{'managed-host} is a machine that is already running the Guix system and
27117 available over the network. This is a particularly simple case; a more
27118 complex deployment may involve, for example, starting virtual machines through
27119 a Virtual Private Server (VPS) provider. In such a case, a different
27120 @var{environment} type would be used.
27121
27122 Do note that you first need to generate a key pair on the coordinator machine
27123 to allow the daemon to export signed archives of files from the store
27124 (@pxref{Invoking guix archive}).
27125
27126 @example
27127 # guix archive --generate-key
27128 @end example
27129
27130 @noindent
27131 Each target machine must authorize the key of the master machine so that it
27132 accepts store items it receives from the coordinator:
27133
27134 @example
27135 # guix archive --authorize < coordinator-public-key.txt
27136 @end example
27137
27138 @code{user}, in this example, specifies the name of the user account to log in
27139 as to perform the deployment. Its default value is @code{root}, but root
27140 login over SSH may be forbidden in some cases. To work around this,
27141 @command{guix deploy} can log in as an unprivileged user and employ
27142 @code{sudo} to escalate privileges. This will only work if @code{sudo} is
27143 currently installed on the remote and can be invoked non-interactively as
27144 @code{user}. That is, the line in @code{sudoers} granting @code{user} the
27145 ability to use @code{sudo} must contain the @code{NOPASSWD} tag. This can
27146 be accomplished with the following operating system configuration snippet:
27147
27148 @lisp
27149 (use-modules ...
27150 (gnu system)) ;for %sudoers-specification
27151
27152 (define %user "username")
27153
27154 (operating-system
27155 ...
27156 (sudoers-file
27157 (plain-file "sudoers"
27158 (string-append (plain-file-content %sudoers-specification)
27159 (format #f "~a ALL = NOPASSWD: ALL~%"
27160 %user)))))
27161
27162 @end lisp
27163
27164 For more information regarding the format of the @file{sudoers} file,
27165 consult @command{man sudoers}.
27166
27167 @deftp {Data Type} machine
27168 This is the data type representing a single machine in a heterogeneous Guix
27169 deployment.
27170
27171 @table @asis
27172 @item @code{operating-system}
27173 The object of the operating system configuration to deploy.
27174
27175 @item @code{environment}
27176 An @code{environment-type} describing how the machine should be provisioned.
27177
27178 @item @code{configuration} (default: @code{#f})
27179 An object describing the configuration for the machine's @code{environment}.
27180 If the @code{environment} has a default configuration, @code{#f} may be used.
27181 If @code{#f} is used for an environment with no default configuration,
27182 however, an error will be thrown.
27183 @end table
27184 @end deftp
27185
27186 @deftp {Data Type} machine-ssh-configuration
27187 This is the data type representing the SSH client parameters for a machine
27188 with an @code{environment} of @code{managed-host-environment-type}.
27189
27190 @table @asis
27191 @item @code{host-name}
27192 @item @code{build-locally?} (default: @code{#t})
27193 If false, system derivations will be built on the machine being deployed to.
27194 @item @code{system}
27195 The system type describing the architecture of the machine being deployed
27196 to---e.g., @code{"x86_64-linux"}.
27197 @item @code{authorize?} (default: @code{#t})
27198 If true, the coordinator's signing key will be added to the remote's ACL
27199 keyring.
27200 @item @code{port} (default: @code{22})
27201 @item @code{user} (default: @code{"root"})
27202 @item @code{identity} (default: @code{#f})
27203 If specified, the path to the SSH private key to use to authenticate with the
27204 remote host.
27205
27206 @item @code{host-key} (default: @code{#f})
27207 This should be the SSH host key of the machine, which looks like this:
27208
27209 @example
27210 ssh-ed25519 AAAAC3Nz@dots{} root@@example.org
27211 @end example
27212
27213 When @code{host-key} is @code{#f}, the server is authenticated against
27214 the @file{~/.ssh/known_hosts} file, just like the OpenSSH @command{ssh}
27215 client does.
27216
27217 @end table
27218 @end deftp
27219
27220 @deftp {Data Type} digital-ocean-configuration
27221 This is the data type describing the Droplet that should be created for a
27222 machine with an @code{environment} of @code{digital-ocean-environment-type}.
27223
27224 @table @asis
27225 @item @code{ssh-key}
27226 The path to the SSH private key to use to authenticate with the remote
27227 host. In the future, this field may not exist.
27228 @item @code{tags}
27229 A list of string ``tags'' that uniquely identify the machine. Must be given
27230 such that no two machines in the deployment have the same set of tags.
27231 @item @code{region}
27232 A Digital Ocean region slug, such as @code{"nyc3"}.
27233 @item @code{size}
27234 A Digital Ocean size slug, such as @code{"s-1vcpu-1gb"}
27235 @item @code{enable-ipv6?}
27236 Whether or not the droplet should be created with IPv6 networking.
27237 @end table
27238 @end deftp
27239
27240 @node Running Guix in a VM
27241 @section Running Guix in a Virtual Machine
27242
27243 @cindex virtual machine
27244 To run Guix in a virtual machine (VM), one can use the pre-built Guix VM image
27245 distributed at
27246 @url{@value{BASE-URL}/guix-system-vm-image-@value{VERSION}.x86_64-linux.xz}.
27247 This image is a compressed image in QCOW format. You will first need to
27248 decompress with @command{xz -d}, and then you can pass it to an emulator such
27249 as QEMU (see below for details).
27250
27251 This image boots the Xfce graphical environment and it contains some
27252 commonly-used tools. You can install more software in the image by running
27253 @command{guix package} in a terminal (@pxref{Invoking guix package}). You can
27254 also reconfigure the system based on its initial configuration file available
27255 as @file{/run/current-system/configuration.scm} (@pxref{Using the
27256 Configuration System}).
27257
27258 Instead of using this pre-built image, one can also build their own virtual
27259 machine image using @command{guix system vm-image} (@pxref{Invoking guix
27260 system}). The returned image is in qcow2 format, which the
27261 @uref{https://qemu.org/, QEMU emulator} can efficiently use.
27262
27263 @cindex QEMU
27264 If you built your own image, you must copy it out of the store
27265 (@pxref{The Store}) and give yourself permission to write to the copy
27266 before you can use it. When invoking QEMU, you must choose a system
27267 emulator that is suitable for your hardware platform. Here is a minimal
27268 QEMU invocation that will boot the result of @command{guix system
27269 vm-image} on x86_64 hardware:
27270
27271 @example
27272 $ qemu-system-x86_64 \
27273 -nic user,model=virtio-net-pci \
27274 -enable-kvm -m 1024 \
27275 -device virtio-blk,drive=myhd \
27276 -drive if=none,file=/tmp/qemu-image,id=myhd
27277 @end example
27278
27279 Here is what each of these options means:
27280
27281 @table @code
27282 @item qemu-system-x86_64
27283 This specifies the hardware platform to emulate. This should match the
27284 host.
27285
27286 @item -nic user,model=virtio-net-pci
27287 Enable the unprivileged user-mode network stack. The guest OS can
27288 access the host but not vice versa. This is the simplest way to get the
27289 guest OS online. @code{model} specifies which network device to emulate:
27290 @code{virtio-net-pci} is a special device made for virtualized operating
27291 systems and recommended for most uses. Assuming your hardware platform is
27292 x86_64, you can get a list of available NIC models by running
27293 @command{qemu-system-x86_64 -nic model=help}.
27294
27295 @item -enable-kvm
27296 If your system has hardware virtualization extensions, enabling the
27297 virtual machine support (KVM) of the Linux kernel will make things run
27298 faster.
27299
27300 @c To run Xfce + 'guix pull', we need at least 1G of RAM.
27301 @item -m 1024
27302 RAM available to the guest OS, in mebibytes. Defaults to 128@tie{}MiB,
27303 which may be insufficient for some operations.
27304
27305 @item -device virtio-blk,drive=myhd
27306 Create a @code{virtio-blk} drive called ``myhd''. @code{virtio-blk} is a
27307 ``paravirtualization'' mechanism for block devices that allows QEMU to achieve
27308 better performance than if it were emulating a complete disk drive. See the
27309 QEMU and KVM documentation for more info.
27310
27311 @item -drive if=none,file=/tmp/qemu-image,id=myhd
27312 Use our QCOW image, the @file{/tmp/qemu-image} file, as the backing store the
27313 the ``myhd'' drive.
27314 @end table
27315
27316 The default @command{run-vm.sh} script that is returned by an invocation of
27317 @command{guix system vm} does not add a @command{-nic user} flag by default.
27318 To get network access from within the vm add the @code{(dhcp-client-service)}
27319 to your system definition and start the VM using
27320 @command{`guix system vm config.scm` -nic user}. An important caveat of using
27321 @command{-nic user} for networking is that @command{ping} will not work, because
27322 it uses the ICMP protocol. You'll have to use a different command to check for
27323 network connectivity, for example @command{guix download}.
27324
27325 @subsection Connecting Through SSH
27326
27327 @cindex SSH
27328 @cindex SSH server
27329 To enable SSH inside a VM you need to add an SSH server like
27330 @code{openssh-service-type} to your VM (@pxref{Networking Services,
27331 @code{openssh-service-type}}). In addition you need to forward the SSH port,
27332 22 by default, to the host. You can do this with
27333
27334 @example
27335 `guix system vm config.scm` -nic user,model=virtio-net-pci,hostfwd=tcp::10022-:22
27336 @end example
27337
27338 To connect to the VM you can run
27339
27340 @example
27341 ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022
27342 @end example
27343
27344 The @command{-p} tells @command{ssh} the port you want to connect to.
27345 @command{-o UserKnownHostsFile=/dev/null} prevents @command{ssh} from complaining
27346 every time you modify your @command{config.scm} file and the
27347 @command{-o StrictHostKeyChecking=no} prevents you from having to allow a
27348 connection to an unknown host every time you connect.
27349
27350 @subsection Using @command{virt-viewer} with Spice
27351
27352 As an alternative to the default @command{qemu} graphical client you can
27353 use the @command{remote-viewer} from the @command{virt-viewer} package. To
27354 connect pass the @command{-spice port=5930,disable-ticketing} flag to
27355 @command{qemu}. See previous section for further information on how to do this.
27356
27357 Spice also allows you to do some nice stuff like share your clipboard with your
27358 VM. To enable that you'll also have to pass the following flags to @command{qemu}:
27359
27360 @example
27361 -device virtio-serial-pci,id=virtio-serial0,max_ports=16,bus=pci.0,addr=0x5
27362 -chardev spicevmc,name=vdagent,id=vdagent
27363 -device virtserialport,nr=1,bus=virtio-serial0.0,chardev=vdagent,
27364 name=com.redhat.spice.0
27365 @end example
27366
27367 You'll also need to add the @code{(spice-vdagent-service)} to your
27368 system definition (@pxref{Miscellaneous Services, Spice service}).
27369
27370 @node Defining Services
27371 @section Defining Services
27372
27373 The previous sections show the available services and how one can combine
27374 them in an @code{operating-system} declaration. But how do we define
27375 them in the first place? And what is a service anyway?
27376
27377 @menu
27378 * Service Composition:: The model for composing services.
27379 * Service Types and Services:: Types and services.
27380 * Service Reference:: API reference.
27381 * Shepherd Services:: A particular type of service.
27382 @end menu
27383
27384 @node Service Composition
27385 @subsection Service Composition
27386
27387 @cindex services
27388 @cindex daemons
27389 Here we define a @dfn{service} as, broadly, something that extends the
27390 functionality of the operating system. Often a service is a process---a
27391 @dfn{daemon}---started when the system boots: a secure shell server, a
27392 Web server, the Guix build daemon, etc. Sometimes a service is a daemon
27393 whose execution can be triggered by another daemon---e.g., an FTP server
27394 started by @command{inetd} or a D-Bus service activated by
27395 @command{dbus-daemon}. Occasionally, a service does not map to a
27396 daemon. For instance, the ``account'' service collects user accounts
27397 and makes sure they exist when the system runs; the ``udev'' service
27398 collects device management rules and makes them available to the eudev
27399 daemon; the @file{/etc} service populates the @file{/etc} directory
27400 of the system.
27401
27402 @cindex service extensions
27403 Guix system services are connected by @dfn{extensions}. For instance, the
27404 secure shell service @emph{extends} the Shepherd---the
27405 initialization system, running as PID@tie{}1---by giving it the command
27406 lines to start and stop the secure shell daemon (@pxref{Networking
27407 Services, @code{openssh-service-type}}); the UPower service extends the D-Bus
27408 service by passing it its @file{.service} specification, and extends the
27409 udev service by passing it device management rules (@pxref{Desktop
27410 Services, @code{upower-service}}); the Guix daemon service extends the
27411 Shepherd by passing it the command lines to start and stop the daemon,
27412 and extends the account service by passing it a list of required build
27413 user accounts (@pxref{Base Services}).
27414
27415 All in all, services and their ``extends'' relations form a directed
27416 acyclic graph (DAG). If we represent services as boxes and extensions
27417 as arrows, a typical system might provide something like this:
27418
27419 @image{images/service-graph,,5in,Typical service extension graph.}
27420
27421 @cindex system service
27422 At the bottom, we see the @dfn{system service}, which produces the
27423 directory containing everything to run and boot the system, as returned
27424 by the @command{guix system build} command. @xref{Service Reference},
27425 to learn about the other service types shown here.
27426 @xref{system-extension-graph, the @command{guix system extension-graph}
27427 command}, for information on how to generate this representation for a
27428 particular operating system definition.
27429
27430 @cindex service types
27431 Technically, developers can define @dfn{service types} to express these
27432 relations. There can be any number of services of a given type on the
27433 system---for instance, a system running two instances of the GNU secure
27434 shell server (lsh) has two instances of @code{lsh-service-type}, with
27435 different parameters.
27436
27437 The following section describes the programming interface for service
27438 types and services.
27439
27440 @node Service Types and Services
27441 @subsection Service Types and Services
27442
27443 A @dfn{service type} is a node in the DAG described above. Let us start
27444 with a simple example, the service type for the Guix build daemon
27445 (@pxref{Invoking guix-daemon}):
27446
27447 @lisp
27448 (define guix-service-type
27449 (service-type
27450 (name 'guix)
27451 (extensions
27452 (list (service-extension shepherd-root-service-type guix-shepherd-service)
27453 (service-extension account-service-type guix-accounts)
27454 (service-extension activation-service-type guix-activation)))
27455 (default-value (guix-configuration))))
27456 @end lisp
27457
27458 @noindent
27459 It defines three things:
27460
27461 @enumerate
27462 @item
27463 A name, whose sole purpose is to make inspection and debugging easier.
27464
27465 @item
27466 A list of @dfn{service extensions}, where each extension designates the
27467 target service type and a procedure that, given the parameters of the
27468 service, returns a list of objects to extend the service of that type.
27469
27470 Every service type has at least one service extension. The only
27471 exception is the @dfn{boot service type}, which is the ultimate service.
27472
27473 @item
27474 Optionally, a default value for instances of this type.
27475 @end enumerate
27476
27477 In this example, @code{guix-service-type} extends three services:
27478
27479 @table @code
27480 @item shepherd-root-service-type
27481 The @code{guix-shepherd-service} procedure defines how the Shepherd
27482 service is extended. Namely, it returns a @code{<shepherd-service>}
27483 object that defines how @command{guix-daemon} is started and stopped
27484 (@pxref{Shepherd Services}).
27485
27486 @item account-service-type
27487 This extension for this service is computed by @code{guix-accounts},
27488 which returns a list of @code{user-group} and @code{user-account}
27489 objects representing the build user accounts (@pxref{Invoking
27490 guix-daemon}).
27491
27492 @item activation-service-type
27493 Here @code{guix-activation} is a procedure that returns a gexp, which is
27494 a code snippet to run at ``activation time''---e.g., when the service is
27495 booted.
27496 @end table
27497
27498 A service of this type is instantiated like this:
27499
27500 @lisp
27501 (service guix-service-type
27502 (guix-configuration
27503 (build-accounts 5)
27504 (use-substitutes? #f)))
27505 @end lisp
27506
27507 The second argument to the @code{service} form is a value representing
27508 the parameters of this specific service instance.
27509 @xref{guix-configuration-type, @code{guix-configuration}}, for
27510 information about the @code{guix-configuration} data type. When the
27511 value is omitted, the default value specified by
27512 @code{guix-service-type} is used:
27513
27514 @lisp
27515 (service guix-service-type)
27516 @end lisp
27517
27518 @code{guix-service-type} is quite simple because it extends other
27519 services but is not extensible itself.
27520
27521 @c @subsubsubsection Extensible Service Types
27522
27523 The service type for an @emph{extensible} service looks like this:
27524
27525 @lisp
27526 (define udev-service-type
27527 (service-type (name 'udev)
27528 (extensions
27529 (list (service-extension shepherd-root-service-type
27530 udev-shepherd-service)))
27531
27532 (compose concatenate) ;concatenate the list of rules
27533 (extend (lambda (config rules)
27534 (match config
27535 (($ <udev-configuration> udev initial-rules)
27536 (udev-configuration
27537 (udev udev) ;the udev package to use
27538 (rules (append initial-rules rules)))))))))
27539 @end lisp
27540
27541 This is the service type for the
27542 @uref{https://wiki.gentoo.org/wiki/Project:Eudev, eudev device
27543 management daemon}. Compared to the previous example, in addition to an
27544 extension of @code{shepherd-root-service-type}, we see two new fields:
27545
27546 @table @code
27547 @item compose
27548 This is the procedure to @dfn{compose} the list of extensions to
27549 services of this type.
27550
27551 Services can extend the udev service by passing it lists of rules; we
27552 compose those extensions simply by concatenating them.
27553
27554 @item extend
27555 This procedure defines how the value of the service is @dfn{extended} with
27556 the composition of the extensions.
27557
27558 Udev extensions are composed into a list of rules, but the udev service
27559 value is itself a @code{<udev-configuration>} record. So here, we
27560 extend that record by appending the list of rules it contains to the
27561 list of contributed rules.
27562
27563 @item description
27564 This is a string giving an overview of the service type. The string can
27565 contain Texinfo markup (@pxref{Overview,,, texinfo, GNU Texinfo}). The
27566 @command{guix system search} command searches these strings and displays
27567 them (@pxref{Invoking guix system}).
27568 @end table
27569
27570 There can be only one instance of an extensible service type such as
27571 @code{udev-service-type}. If there were more, the
27572 @code{service-extension} specifications would be ambiguous.
27573
27574 Still here? The next section provides a reference of the programming
27575 interface for services.
27576
27577 @node Service Reference
27578 @subsection Service Reference
27579
27580 We have seen an overview of service types (@pxref{Service Types and
27581 Services}). This section provides a reference on how to manipulate
27582 services and service types. This interface is provided by the
27583 @code{(gnu services)} module.
27584
27585 @deffn {Scheme Procedure} service @var{type} [@var{value}]
27586 Return a new service of @var{type}, a @code{<service-type>} object (see
27587 below.) @var{value} can be any object; it represents the parameters of
27588 this particular service instance.
27589
27590 When @var{value} is omitted, the default value specified by @var{type}
27591 is used; if @var{type} does not specify a default value, an error is
27592 raised.
27593
27594 For instance, this:
27595
27596 @lisp
27597 (service openssh-service-type)
27598 @end lisp
27599
27600 @noindent
27601 is equivalent to this:
27602
27603 @lisp
27604 (service openssh-service-type
27605 (openssh-configuration))
27606 @end lisp
27607
27608 In both cases the result is an instance of @code{openssh-service-type}
27609 with the default configuration.
27610 @end deffn
27611
27612 @deffn {Scheme Procedure} service? @var{obj}
27613 Return true if @var{obj} is a service.
27614 @end deffn
27615
27616 @deffn {Scheme Procedure} service-kind @var{service}
27617 Return the type of @var{service}---i.e., a @code{<service-type>} object.
27618 @end deffn
27619
27620 @deffn {Scheme Procedure} service-value @var{service}
27621 Return the value associated with @var{service}. It represents its
27622 parameters.
27623 @end deffn
27624
27625 Here is an example of how a service is created and manipulated:
27626
27627 @lisp
27628 (define s
27629 (service nginx-service-type
27630 (nginx-configuration
27631 (nginx nginx)
27632 (log-directory log-directory)
27633 (run-directory run-directory)
27634 (file config-file))))
27635
27636 (service? s)
27637 @result{} #t
27638
27639 (eq? (service-kind s) nginx-service-type)
27640 @result{} #t
27641 @end lisp
27642
27643 The @code{modify-services} form provides a handy way to change the
27644 parameters of some of the services of a list such as
27645 @code{%base-services} (@pxref{Base Services, @code{%base-services}}). It
27646 evaluates to a list of services. Of course, you could always use
27647 standard list combinators such as @code{map} and @code{fold} to do that
27648 (@pxref{SRFI-1, List Library,, guile, GNU Guile Reference Manual});
27649 @code{modify-services} simply provides a more concise form for this
27650 common pattern.
27651
27652 @deffn {Scheme Syntax} modify-services @var{services} @
27653 (@var{type} @var{variable} => @var{body}) @dots{}
27654
27655 Modify the services listed in @var{services} according to the given
27656 clauses. Each clause has the form:
27657
27658 @example
27659 (@var{type} @var{variable} => @var{body})
27660 @end example
27661
27662 where @var{type} is a service type---e.g.,
27663 @code{guix-service-type}---and @var{variable} is an identifier that is
27664 bound within the @var{body} to the service parameters---e.g., a
27665 @code{guix-configuration} instance---of the original service of that
27666 @var{type}.
27667
27668 The @var{body} should evaluate to the new service parameters, which will
27669 be used to configure the new service. This new service will replace the
27670 original in the resulting list. Because a service's service parameters
27671 are created using @code{define-record-type*}, you can write a succinct
27672 @var{body} that evaluates to the new service parameters by using the
27673 @code{inherit} feature that @code{define-record-type*} provides.
27674
27675 @xref{Using the Configuration System}, for example usage.
27676
27677 @end deffn
27678
27679 Next comes the programming interface for service types. This is
27680 something you want to know when writing new service definitions, but not
27681 necessarily when simply looking for ways to customize your
27682 @code{operating-system} declaration.
27683
27684 @deftp {Data Type} service-type
27685 @cindex service type
27686 This is the representation of a @dfn{service type} (@pxref{Service Types
27687 and Services}).
27688
27689 @table @asis
27690 @item @code{name}
27691 This is a symbol, used only to simplify inspection and debugging.
27692
27693 @item @code{extensions}
27694 A non-empty list of @code{<service-extension>} objects (see below).
27695
27696 @item @code{compose} (default: @code{#f})
27697 If this is @code{#f}, then the service type denotes services that cannot
27698 be extended---i.e., services that do not receive ``values'' from other
27699 services.
27700
27701 Otherwise, it must be a one-argument procedure. The procedure is called
27702 by @code{fold-services} and is passed a list of values collected from
27703 extensions. It may return any single value.
27704
27705 @item @code{extend} (default: @code{#f})
27706 If this is @code{#f}, services of this type cannot be extended.
27707
27708 Otherwise, it must be a two-argument procedure: @code{fold-services}
27709 calls it, passing it the initial value of the service as the first
27710 argument and the result of applying @code{compose} to the extension
27711 values as the second argument. It must return a value that is a valid
27712 parameter value for the service instance.
27713 @end table
27714
27715 @xref{Service Types and Services}, for examples.
27716 @end deftp
27717
27718 @deffn {Scheme Procedure} service-extension @var{target-type} @
27719 @var{compute}
27720 Return a new extension for services of type @var{target-type}.
27721 @var{compute} must be a one-argument procedure: @code{fold-services}
27722 calls it, passing it the value associated with the service that provides
27723 the extension; it must return a valid value for the target service.
27724 @end deffn
27725
27726 @deffn {Scheme Procedure} service-extension? @var{obj}
27727 Return true if @var{obj} is a service extension.
27728 @end deffn
27729
27730 Occasionally, you might want to simply extend an existing service. This
27731 involves creating a new service type and specifying the extension of
27732 interest, which can be verbose; the @code{simple-service} procedure
27733 provides a shorthand for this.
27734
27735 @deffn {Scheme Procedure} simple-service @var{name} @var{target} @var{value}
27736 Return a service that extends @var{target} with @var{value}. This works
27737 by creating a singleton service type @var{name}, of which the returned
27738 service is an instance.
27739
27740 For example, this extends mcron (@pxref{Scheduled Job Execution}) with
27741 an additional job:
27742
27743 @lisp
27744 (simple-service 'my-mcron-job mcron-service-type
27745 #~(job '(next-hour (3)) "guix gc -F 2G"))
27746 @end lisp
27747 @end deffn
27748
27749 At the core of the service abstraction lies the @code{fold-services}
27750 procedure, which is responsible for ``compiling'' a list of services
27751 down to a single directory that contains everything needed to boot and
27752 run the system---the directory shown by the @command{guix system build}
27753 command (@pxref{Invoking guix system}). In essence, it propagates
27754 service extensions down the service graph, updating each node parameters
27755 on the way, until it reaches the root node.
27756
27757 @deffn {Scheme Procedure} fold-services @var{services} @
27758 [#:target-type @var{system-service-type}]
27759 Fold @var{services} by propagating their extensions down to the root of
27760 type @var{target-type}; return the root service adjusted accordingly.
27761 @end deffn
27762
27763 Lastly, the @code{(gnu services)} module also defines several essential
27764 service types, some of which are listed below.
27765
27766 @defvr {Scheme Variable} system-service-type
27767 This is the root of the service graph. It produces the system directory
27768 as returned by the @command{guix system build} command.
27769 @end defvr
27770
27771 @defvr {Scheme Variable} boot-service-type
27772 The type of the ``boot service'', which produces the @dfn{boot script}.
27773 The boot script is what the initial RAM disk runs when booting.
27774 @end defvr
27775
27776 @defvr {Scheme Variable} etc-service-type
27777 The type of the @file{/etc} service. This service is used to create
27778 files under @file{/etc} and can be extended by
27779 passing it name/file tuples such as:
27780
27781 @lisp
27782 (list `("issue" ,(plain-file "issue" "Welcome!\n")))
27783 @end lisp
27784
27785 In this example, the effect would be to add an @file{/etc/issue} file
27786 pointing to the given file.
27787 @end defvr
27788
27789 @defvr {Scheme Variable} setuid-program-service-type
27790 Type for the ``setuid-program service''. This service collects lists of
27791 executable file names, passed as gexps, and adds them to the set of
27792 setuid-root programs on the system (@pxref{Setuid Programs}).
27793 @end defvr
27794
27795 @defvr {Scheme Variable} profile-service-type
27796 Type of the service that populates the @dfn{system profile}---i.e., the
27797 programs under @file{/run/current-system/profile}. Other services can
27798 extend it by passing it lists of packages to add to the system profile.
27799 @end defvr
27800
27801 @cindex provenance tracking, of the operating system
27802 @defvr {Scheme Variable} provenance-service-type
27803 This is the type of the service that records @dfn{provenance meta-data}
27804 in the system itself. It creates several files under
27805 @file{/run/current-system}:
27806
27807 @table @file
27808 @item channels.scm
27809 This is a ``channel file'' that can be passed to @command{guix pull -C}
27810 or @command{guix time-machine -C}, and which describes the channels used
27811 to build the system, if that information was available
27812 (@pxref{Channels}).
27813
27814 @item configuration.scm
27815 This is the file that was passed as the value for this
27816 @code{provenance-service-type} service. By default, @command{guix
27817 system reconfigure} automatically passes the OS configuration file it
27818 received on the command line.
27819
27820 @item provenance
27821 This contains the same information as the two other files but in a
27822 format that is more readily processable.
27823 @end table
27824
27825 In general, these two pieces of information (channels and configuration
27826 file) are enough to reproduce the operating system ``from source''.
27827
27828 @quotation Caveats
27829 This information is necessary to rebuild your operating system, but it
27830 is not always sufficient. In particular, @file{configuration.scm}
27831 itself is insufficient if it is not self-contained---if it refers to
27832 external Guile modules or to extra files. If you want
27833 @file{configuration.scm} to be self-contained, we recommend that modules
27834 or files it refers to be part of a channel.
27835
27836 Besides, provenance meta-data is ``silent'' in the sense that it does
27837 not change the bits contained in your system, @emph{except for the
27838 meta-data bits themselves}. Two different OS configurations or sets of
27839 channels can lead to the same system, bit-for-bit; when
27840 @code{provenance-service-type} is used, these two systems will have
27841 different meta-data and thus different store file names, which makes
27842 comparison less trivial.
27843 @end quotation
27844
27845 This service is automatically added to your operating system
27846 configuration when you use @command{guix system reconfigure},
27847 @command{guix system init}, or @command{guix deploy}.
27848 @end defvr
27849
27850 @node Shepherd Services
27851 @subsection Shepherd Services
27852
27853 @cindex shepherd services
27854 @cindex PID 1
27855 @cindex init system
27856 The @code{(gnu services shepherd)} module provides a way to define
27857 services managed by the GNU@tie{}Shepherd, which is the
27858 initialization system---the first process that is started when the
27859 system boots, also known as PID@tie{}1
27860 (@pxref{Introduction,,, shepherd, The GNU Shepherd Manual}).
27861
27862 Services in the Shepherd can depend on each other. For instance, the
27863 SSH daemon may need to be started after the syslog daemon has been
27864 started, which in turn can only happen once all the file systems have
27865 been mounted. The simple operating system defined earlier (@pxref{Using
27866 the Configuration System}) results in a service graph like this:
27867
27868 @image{images/shepherd-graph,,5in,Typical shepherd service graph.}
27869
27870 You can actually generate such a graph for any operating system
27871 definition using the @command{guix system shepherd-graph} command
27872 (@pxref{system-shepherd-graph, @command{guix system shepherd-graph}}).
27873
27874 The @code{%shepherd-root-service} is a service object representing
27875 PID@tie{}1, of type @code{shepherd-root-service-type}; it can be extended
27876 by passing it lists of @code{<shepherd-service>} objects.
27877
27878 @deftp {Data Type} shepherd-service
27879 The data type representing a service managed by the Shepherd.
27880
27881 @table @asis
27882 @item @code{provision}
27883 This is a list of symbols denoting what the service provides.
27884
27885 These are the names that may be passed to @command{herd start},
27886 @command{herd status}, and similar commands (@pxref{Invoking herd,,,
27887 shepherd, The GNU Shepherd Manual}). @xref{Slots of services, the
27888 @code{provides} slot,, shepherd, The GNU Shepherd Manual}, for details.
27889
27890 @item @code{requirement} (default: @code{'()})
27891 List of symbols denoting the Shepherd services this one depends on.
27892
27893 @cindex one-shot services, for the Shepherd
27894 @item @code{one-shot?} (default: @code{#f})
27895 Whether this service is @dfn{one-shot}. One-shot services stop immediately
27896 after their @code{start} action has completed. @xref{Slots of services,,,
27897 shepherd, The GNU Shepherd Manual}, for more info.
27898
27899 @item @code{respawn?} (default: @code{#t})
27900 Whether to restart the service when it stops, for instance when the
27901 underlying process dies.
27902
27903 @item @code{start}
27904 @itemx @code{stop} (default: @code{#~(const #f)})
27905 The @code{start} and @code{stop} fields refer to the Shepherd's
27906 facilities to start and stop processes (@pxref{Service De- and
27907 Constructors,,, shepherd, The GNU Shepherd Manual}). They are given as
27908 G-expressions that get expanded in the Shepherd configuration file
27909 (@pxref{G-Expressions}).
27910
27911 @item @code{actions} (default: @code{'()})
27912 @cindex actions, of Shepherd services
27913 This is a list of @code{shepherd-action} objects (see below) defining
27914 @dfn{actions} supported by the service, in addition to the standard
27915 @code{start} and @code{stop} actions. Actions listed here become available as
27916 @command{herd} sub-commands:
27917
27918 @example
27919 herd @var{action} @var{service} [@var{arguments}@dots{}]
27920 @end example
27921
27922 @item @code{auto-start?} (default: @code{#t})
27923 Whether this service should be started automatically by the Shepherd. If it
27924 is @code{#f} the service has to be started manually with @code{herd start}.
27925
27926 @item @code{documentation}
27927 A documentation string, as shown when running:
27928
27929 @example
27930 herd doc @var{service-name}
27931 @end example
27932
27933 where @var{service-name} is one of the symbols in @code{provision}
27934 (@pxref{Invoking herd,,, shepherd, The GNU Shepherd Manual}).
27935
27936 @item @code{modules} (default: @code{%default-modules})
27937 This is the list of modules that must be in scope when @code{start} and
27938 @code{stop} are evaluated.
27939
27940 @end table
27941 @end deftp
27942
27943 @deftp {Data Type} shepherd-action
27944 This is the data type that defines additional actions implemented by a
27945 Shepherd service (see above).
27946
27947 @table @code
27948 @item name
27949 Symbol naming the action.
27950
27951 @item documentation
27952 This is a documentation string for the action. It can be viewed by running:
27953
27954 @example
27955 herd doc @var{service} action @var{action}
27956 @end example
27957
27958 @item procedure
27959 This should be a gexp that evaluates to a procedure of at least one argument,
27960 which is the ``running value'' of the service (@pxref{Slots of services,,,
27961 shepherd, The GNU Shepherd Manual}).
27962 @end table
27963
27964 The following example defines an action called @code{say-hello} that kindly
27965 greets the user:
27966
27967 @lisp
27968 (shepherd-action
27969 (name 'say-hello)
27970 (documentation "Say hi!")
27971 (procedure #~(lambda (running . args)
27972 (format #t "Hello, friend! arguments: ~s\n"
27973 args)
27974 #t)))
27975 @end lisp
27976
27977 Assuming this action is added to the @code{example} service, then you can do:
27978
27979 @example
27980 # herd say-hello example
27981 Hello, friend! arguments: ()
27982 # herd say-hello example a b c
27983 Hello, friend! arguments: ("a" "b" "c")
27984 @end example
27985
27986 This, as you can see, is a fairly sophisticated way to say hello.
27987 @xref{Service Convenience,,, shepherd, The GNU Shepherd Manual}, for more
27988 info on actions.
27989 @end deftp
27990
27991 @defvr {Scheme Variable} shepherd-root-service-type
27992 The service type for the Shepherd ``root service''---i.e., PID@tie{}1.
27993
27994 This is the service type that extensions target when they want to create
27995 shepherd services (@pxref{Service Types and Services}, for an example).
27996 Each extension must pass a list of @code{<shepherd-service>}.
27997 @end defvr
27998
27999 @defvr {Scheme Variable} %shepherd-root-service
28000 This service represents PID@tie{}1.
28001 @end defvr
28002
28003
28004 @node Documentation
28005 @chapter Documentation
28006
28007 @cindex documentation, searching for
28008 @cindex searching for documentation
28009 @cindex Info, documentation format
28010 @cindex man pages
28011 @cindex manual pages
28012 In most cases packages installed with Guix come with documentation.
28013 There are two main documentation formats: ``Info'', a browseable
28014 hypertext format used for GNU software, and ``manual pages'' (or ``man
28015 pages''), the linear documentation format traditionally found on Unix.
28016 Info manuals are accessed with the @command{info} command or with Emacs,
28017 and man pages are accessed using @command{man}.
28018
28019 You can look for documentation of software installed on your system by
28020 keyword. For example, the following command searches for information
28021 about ``TLS'' in Info manuals:
28022
28023 @example
28024 $ info -k TLS
28025 "(emacs)Network Security" -- STARTTLS
28026 "(emacs)Network Security" -- TLS
28027 "(gnutls)Core TLS API" -- gnutls_certificate_set_verify_flags
28028 "(gnutls)Core TLS API" -- gnutls_certificate_set_verify_function
28029 @dots{}
28030 @end example
28031
28032 @noindent
28033 The command below searches for the same keyword in man pages:
28034
28035 @example
28036 $ man -k TLS
28037 SSL (7) - OpenSSL SSL/TLS library
28038 certtool (1) - GnuTLS certificate tool
28039 @dots {}
28040 @end example
28041
28042 These searches are purely local to your computer so you have the
28043 guarantee that documentation you find corresponds to what you have
28044 actually installed, you can access it off-line, and your privacy is
28045 respected.
28046
28047 Once you have these results, you can view the relevant documentation by
28048 running, say:
28049
28050 @example
28051 $ info "(gnutls)Core TLS API"
28052 @end example
28053
28054 @noindent
28055 or:
28056
28057 @example
28058 $ man certtool
28059 @end example
28060
28061 Info manuals contain sections and indices as well as hyperlinks like
28062 those found in Web pages. The @command{info} reader (@pxref{Top, Info
28063 reader,, info-stnd, Stand-alone GNU Info}) and its Emacs counterpart
28064 (@pxref{Misc Help,,, emacs, The GNU Emacs Manual}) provide intuitive key
28065 bindings to navigate manuals. @xref{Getting Started,,, info, Info: An
28066 Introduction}, for an introduction to Info navigation.
28067
28068 @node Installing Debugging Files
28069 @chapter Installing Debugging Files
28070
28071 @cindex debugging files
28072 Program binaries, as produced by the GCC compilers for instance, are
28073 typically written in the ELF format, with a section containing
28074 @dfn{debugging information}. Debugging information is what allows the
28075 debugger, GDB, to map binary code to source code; it is required to
28076 debug a compiled program in good conditions.
28077
28078 The problem with debugging information is that is takes up a fair amount
28079 of disk space. For example, debugging information for the GNU C Library
28080 weighs in at more than 60 MiB. Thus, as a user, keeping all the
28081 debugging info of all the installed programs is usually not an option.
28082 Yet, space savings should not come at the cost of an impediment to
28083 debugging---especially in the GNU system, which should make it easier
28084 for users to exert their computing freedom (@pxref{GNU Distribution}).
28085
28086 Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a
28087 mechanism that allows users to get the best of both worlds: debugging
28088 information can be stripped from the binaries and stored in separate
28089 files. GDB is then able to load debugging information from those files,
28090 when they are available (@pxref{Separate Debug Files,,, gdb, Debugging
28091 with GDB}).
28092
28093 The GNU distribution takes advantage of this by storing debugging
28094 information in the @code{lib/debug} sub-directory of a separate package
28095 output unimaginatively called @code{debug} (@pxref{Packages with
28096 Multiple Outputs}). Users can choose to install the @code{debug} output
28097 of a package when they need it. For instance, the following command
28098 installs the debugging information for the GNU C Library and for GNU
28099 Guile:
28100
28101 @example
28102 guix install glibc:debug guile:debug
28103 @end example
28104
28105 GDB must then be told to look for debug files in the user's profile, by
28106 setting the @code{debug-file-directory} variable (consider setting it
28107 from the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with
28108 GDB}):
28109
28110 @example
28111 (gdb) set debug-file-directory ~/.guix-profile/lib/debug
28112 @end example
28113
28114 From there on, GDB will pick up debugging information from the
28115 @code{.debug} files under @file{~/.guix-profile/lib/debug}.
28116
28117 In addition, you will most likely want GDB to be able to show the source
28118 code being debugged. To do that, you will have to unpack the source
28119 code of the package of interest (obtained with @code{guix build
28120 --source}, @pxref{Invoking guix build}), and to point GDB to that source
28121 directory using the @code{directory} command (@pxref{Source Path,
28122 @code{directory},, gdb, Debugging with GDB}).
28123
28124 @c XXX: keep me up-to-date
28125 The @code{debug} output mechanism in Guix is implemented by the
28126 @code{gnu-build-system} (@pxref{Build Systems}). Currently, it is
28127 opt-in---debugging information is available only for the packages
28128 with definitions explicitly declaring a @code{debug} output. This may be
28129 changed to opt-out in the future if our build farm servers can handle
28130 the load. To check whether a package has a @code{debug} output, use
28131 @command{guix package --list-available} (@pxref{Invoking guix package}).
28132
28133
28134 @node Security Updates
28135 @chapter Security Updates
28136
28137 @cindex security updates
28138 @cindex security vulnerabilities
28139 Occasionally, important security vulnerabilities are discovered in software
28140 packages and must be patched. Guix developers try hard to keep track of
28141 known vulnerabilities and to apply fixes as soon as possible in the
28142 @code{master} branch of Guix (we do not yet provide a ``stable'' branch
28143 containing only security updates.) The @command{guix lint} tool helps
28144 developers find out about vulnerable versions of software packages in the
28145 distribution:
28146
28147 @smallexample
28148 $ guix lint -c cve
28149 gnu/packages/base.scm:652:2: glibc@@2.21: probably vulnerable to CVE-2015-1781, CVE-2015-7547
28150 gnu/packages/gcc.scm:334:2: gcc@@4.9.3: probably vulnerable to CVE-2015-5276
28151 gnu/packages/image.scm:312:2: openjpeg@@2.1.0: probably vulnerable to CVE-2016-1923, CVE-2016-1924
28152 @dots{}
28153 @end smallexample
28154
28155 @xref{Invoking guix lint}, for more information.
28156
28157 Guix follows a functional
28158 package management discipline (@pxref{Introduction}), which implies
28159 that, when a package is changed, @emph{every package that depends on it}
28160 must be rebuilt. This can significantly slow down the deployment of
28161 fixes in core packages such as libc or Bash, since basically the whole
28162 distribution would need to be rebuilt. Using pre-built binaries helps
28163 (@pxref{Substitutes}), but deployment may still take more time than
28164 desired.
28165
28166 @cindex grafts
28167 To address this, Guix implements @dfn{grafts}, a mechanism that allows
28168 for fast deployment of critical updates without the costs associated
28169 with a whole-distribution rebuild. The idea is to rebuild only the
28170 package that needs to be patched, and then to ``graft'' it onto packages
28171 explicitly installed by the user and that were previously referring to
28172 the original package. The cost of grafting is typically very low, and
28173 order of magnitudes lower than a full rebuild of the dependency chain.
28174
28175 @cindex replacements of packages, for grafts
28176 For instance, suppose a security update needs to be applied to Bash.
28177 Guix developers will provide a package definition for the ``fixed''
28178 Bash, say @code{bash-fixed}, in the usual way (@pxref{Defining
28179 Packages}). Then, the original package definition is augmented with a
28180 @code{replacement} field pointing to the package containing the bug fix:
28181
28182 @lisp
28183 (define bash
28184 (package
28185 (name "bash")
28186 ;; @dots{}
28187 (replacement bash-fixed)))
28188 @end lisp
28189
28190 From there on, any package depending directly or indirectly on Bash---as
28191 reported by @command{guix gc --requisites} (@pxref{Invoking guix
28192 gc})---that is installed is automatically ``rewritten'' to refer to
28193 @code{bash-fixed} instead of @code{bash}. This grafting process takes
28194 time proportional to the size of the package, usually less than a
28195 minute for an ``average'' package on a recent machine. Grafting is
28196 recursive: when an indirect dependency requires grafting, then grafting
28197 ``propagates'' up to the package that the user is installing.
28198
28199 Currently, the length of the name and version of the graft and that of
28200 the package it replaces (@code{bash-fixed} and @code{bash} in the example
28201 above) must be equal. This restriction mostly comes from the fact that
28202 grafting works by patching files, including binary files, directly.
28203 Other restrictions may apply: for instance, when adding a graft to a
28204 package providing a shared library, the original shared library and its
28205 replacement must have the same @code{SONAME} and be binary-compatible.
28206
28207 The @option{--no-grafts} command-line option allows you to forcefully
28208 avoid grafting (@pxref{Common Build Options, @option{--no-grafts}}).
28209 Thus, the command:
28210
28211 @example
28212 guix build bash --no-grafts
28213 @end example
28214
28215 @noindent
28216 returns the store file name of the original Bash, whereas:
28217
28218 @example
28219 guix build bash
28220 @end example
28221
28222 @noindent
28223 returns the store file name of the ``fixed'', replacement Bash. This
28224 allows you to distinguish between the two variants of Bash.
28225
28226 To verify which Bash your whole profile refers to, you can run
28227 (@pxref{Invoking guix gc}):
28228
28229 @example
28230 guix gc -R `readlink -f ~/.guix-profile` | grep bash
28231 @end example
28232
28233 @noindent
28234 @dots{} and compare the store file names that you get with those above.
28235 Likewise for a complete Guix system generation:
28236
28237 @example
28238 guix gc -R `guix system build my-config.scm` | grep bash
28239 @end example
28240
28241 Lastly, to check which Bash running processes are using, you can use the
28242 @command{lsof} command:
28243
28244 @example
28245 lsof | grep /gnu/store/.*bash
28246 @end example
28247
28248
28249 @node Bootstrapping
28250 @chapter Bootstrapping
28251
28252 @c Adapted from the ELS 2013 paper.
28253
28254 @cindex bootstrapping
28255
28256 Bootstrapping in our context refers to how the distribution gets built
28257 ``from nothing''. Remember that the build environment of a derivation
28258 contains nothing but its declared inputs (@pxref{Introduction}). So
28259 there's an obvious chicken-and-egg problem: how does the first package
28260 get built? How does the first compiler get compiled? Note that this is
28261 a question of interest only to the curious hacker, not to the regular
28262 user, so you can shamelessly skip this section if you consider yourself
28263 a ``regular user''.
28264
28265 @cindex bootstrap binaries
28266 The GNU system is primarily made of C code, with libc at its core. The
28267 GNU build system itself assumes the availability of a Bourne shell and
28268 command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
28269 `grep'. Furthermore, build programs---programs that run
28270 @code{./configure}, @code{make}, etc.---are written in Guile Scheme
28271 (@pxref{Derivations}). Consequently, to be able to build anything at
28272 all, from scratch, Guix relies on pre-built binaries of Guile, GCC,
28273 Binutils, libc, and the other packages mentioned above---the
28274 @dfn{bootstrap binaries}.
28275
28276 These bootstrap binaries are ``taken for granted'', though we can also
28277 re-create them if needed (more on that later).
28278
28279 For @code{i686-linux} and @code{x86_64-linux} the Guix bootstrap process is
28280 more elaborate, @pxref{Reduced Binary Seed Bootstrap}.
28281
28282 @menu
28283 * Reduced Binary Seed Bootstrap:: A Bootstrap worthy of GNU.
28284 * Preparing to Use the Bootstrap Binaries:: Building that what matters most.
28285 @end menu
28286
28287 @node Reduced Binary Seed Bootstrap
28288 @section The Reduced Binary Seed Bootstrap
28289
28290 Guix---like other GNU/Linux distributions---is traditionally bootstrapped from
28291 a set of bootstrap binaries: Bourne shell, command-line tools provided by GNU
28292 Coreutils, Awk, Findutils, `sed', and `grep' and Guile, GCC, Binutils, and the
28293 GNU C Library (@pxref{Bootstrapping}). Usually, these bootstrap binaries are
28294 ``taken for granted.''
28295
28296 Taking these binaries for granted means that we consider them to be a correct
28297 and trustworthy `seed' for building the complete system. Therein lies a
28298 problem: the current combined size of these bootstrap binaries is about 250MB
28299 (@pxref{Bootstrappable Builds,,, mes, GNU Mes}). Auditing or even inspecting
28300 these is next to impossible.
28301
28302 For @code{i686-linux} and @code{x86_64-linux}, Guix now features a ``Reduced
28303 Binary Seed'' bootstrap @footnote{We would like to say: ``Full Source
28304 Bootstrap'' and while we are working towards that goal it would be hyperbole
28305 to use that term for what we do now.}.
28306
28307 The Reduced Binary Seed bootstrap removes the most critical tools---from a
28308 trust perspective---from the bootstrap binaries: GCC, Binutils and the GNU C
28309 Library are replaced by: @code{bootstrap-mescc-tools} (a tiny assembler and
28310 linker) and @code{bootstrap-mes} (a small Scheme Interpreter and a C compiler
28311 written in Scheme and the Mes C Library, built for TinyCC and for GCC). Using
28312 these new binary seeds and a new set of
28313 @c
28314 packages@footnote{@c
28315 nyacc-boot,
28316 mes-boot,
28317 tcc-boot0,
28318 tcc-boot,
28319 make-mesboot0,
28320 diffutils-mesboot,
28321 binutils-mesboot0,
28322 gcc-core-mesboot,
28323 mesboot-headers,
28324 glibc-mesboot0,
28325 gcc-mesboot0,
28326 binutils-mesboot,
28327 make-mesboot,
28328 gcc-mesboot1,
28329 gcc-mesboot1-wrapper,
28330 glibc-headers-mesboot,
28331 glibc-mesboot,
28332 gcc-mesboot,
28333 and
28334 gcc-mesboot-wrapper.
28335 }
28336 @c
28337 the ``missing'' Binutils, GCC, and the GNU C Library are built from source.
28338 From here on the more traditional bootstrap process resumes. This approach
28339 has reduced the bootstrap binaries in size to about 130MB. Work is ongoing to
28340 reduce this further. If you are interested, join us on @code{#bootstrappable}
28341 on the Freenode IRC network.
28342
28343 @c ./pre-inst-env guix graph --type=bag -e '(begin (use-modules (guix packages)) (%current-system "i686-linux") (@@ (gnu packages commencement) gcc-mesboot))' > doc/images/gcc-mesboot-bag-graph.dot
28344 @c dot -T png doc/images/gcc-mesboot-bag-graph.dot > doc/images/gcc-mesboot-bag-graph.png
28345
28346 Below is the generated dependency graph for @code{gcc-mesboot}, the bootstrap
28347 compiler used to build the rest of GuixSD.
28348
28349 @image{images/gcc-mesboot-bag-graph,6in,,Dependency graph of the gcc-mesboot}
28350
28351 @node Preparing to Use the Bootstrap Binaries
28352 @section Preparing to Use the Bootstrap Binaries
28353
28354 @c As of Emacs 24.3, Info-mode displays the image, but since it's a
28355 @c large image, it's hard to scroll. Oh well.
28356 @image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap derivations}
28357
28358 The figure above shows the very beginning of the dependency graph of the
28359 distribution, corresponding to the package definitions of the @code{(gnu
28360 packages bootstrap)} module. A similar figure can be generated with
28361 @command{guix graph} (@pxref{Invoking guix graph}), along the lines of:
28362
28363 @example
28364 guix graph -t derivation \
28365 -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
28366 | dot -Tps > gcc.ps
28367 @end example
28368
28369 or, for the Reduced Binary Seed bootstrap
28370
28371 @example
28372 guix graph -t derivation \
28373 -e '(@@@@ (gnu packages bootstrap) %bootstrap-mes)' \
28374 | dot -Tps > mes.ps
28375 @end example
28376
28377 At this level of detail, things are
28378 slightly complex. First, Guile itself consists of an ELF executable,
28379 along with many source and compiled Scheme files that are dynamically
28380 loaded when it runs. This gets stored in the @file{guile-2.0.7.tar.xz}
28381 tarball shown in this graph. This tarball is part of Guix's ``source''
28382 distribution, and gets inserted into the store with @code{add-to-store}
28383 (@pxref{The Store}).
28384
28385 But how do we write a derivation that unpacks this tarball and adds it
28386 to the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
28387 derivation---the first one that gets built---uses @code{bash} as its
28388 builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
28389 @code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar},
28390 @file{xz}, and @file{mkdir} are statically-linked binaries, also part of
28391 the Guix source distribution, whose sole purpose is to allow the Guile
28392 tarball to be unpacked.
28393
28394 Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning
28395 Guile that can be used to run subsequent build programs. Its first task
28396 is to download tarballs containing the other pre-built binaries---this
28397 is what the @code{.tar.xz.drv} derivations do. Guix modules such as
28398 @code{ftp-client.scm} are used for this purpose. The
28399 @code{module-import.drv} derivations import those modules in a directory
28400 in the store, using the original layout. The
28401 @code{module-import-compiled.drv} derivations compile those modules, and
28402 write them in an output directory with the right layout. This
28403 corresponds to the @code{#:modules} argument of
28404 @code{build-expression->derivation} (@pxref{Derivations}).
28405
28406 Finally, the various tarballs are unpacked by the derivations
28407 @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv}, or
28408 @code{bootstrap-mes-0.drv} and @code{bootstrap-mescc-tools-0.drv}, at which
28409 point we have a working C tool chain.
28410
28411 @unnumberedsec Building the Build Tools
28412
28413 Bootstrapping is complete when we have a full tool chain that does not
28414 depend on the pre-built bootstrap tools discussed above. This
28415 no-dependency requirement is verified by checking whether the files of
28416 the final tool chain contain references to the @file{/gnu/store}
28417 directories of the bootstrap inputs. The process that leads to this
28418 ``final'' tool chain is described by the package definitions found in
28419 the @code{(gnu packages commencement)} module.
28420
28421 The @command{guix graph} command allows us to ``zoom out'' compared to
28422 the graph above, by looking at the level of package objects instead of
28423 individual derivations---remember that a package may translate to
28424 several derivations, typically one derivation to download its source,
28425 one to build the Guile modules it needs, and one to actually build the
28426 package from source. The command:
28427
28428 @example
28429 guix graph -t bag \
28430 -e '(@@@@ (gnu packages commencement)
28431 glibc-final-with-bootstrap-bash)' | dot -Tps > t.ps
28432 @end example
28433
28434 @noindent
28435 produces the dependency graph leading to the ``final'' C
28436 library@footnote{You may notice the @code{glibc-intermediate} label,
28437 suggesting that it is not @emph{quite} final, but as a good
28438 approximation, we will consider it final.}, depicted below.
28439
28440 @image{images/bootstrap-packages,6in,,Dependency graph of the early packages}
28441
28442 @c See <https://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
28443 The first tool that gets built with the bootstrap binaries is
28444 GNU@tie{}Make---noted @code{make-boot0} above---which is a prerequisite
28445 for all the following packages. From there Findutils and Diffutils get
28446 built.
28447
28448 Then come the first-stage Binutils and GCC, built as pseudo cross
28449 tools---i.e., with @code{--target} equal to @code{--host}. They are
28450 used to build libc. Thanks to this cross-build trick, this libc is
28451 guaranteed not to hold any reference to the initial tool chain.
28452
28453 From there the final Binutils and GCC (not shown above) are built.
28454 GCC uses @code{ld}
28455 from the final Binutils, and links programs against the just-built libc.
28456 This tool chain is used to build the other packages used by Guix and by
28457 the GNU Build System: Guile, Bash, Coreutils, etc.
28458
28459 And voilà! At this point we have the complete set of build tools that
28460 the GNU Build System expects. These are in the @code{%final-inputs}
28461 variable of the @code{(gnu packages commencement)} module, and are
28462 implicitly used by any package that uses @code{gnu-build-system}
28463 (@pxref{Build Systems, @code{gnu-build-system}}).
28464
28465
28466 @unnumberedsec Building the Bootstrap Binaries
28467
28468 @cindex bootstrap binaries
28469 Because the final tool chain does not depend on the bootstrap binaries,
28470 those rarely need to be updated. Nevertheless, it is useful to have an
28471 automated way to produce them, should an update occur, and this is what
28472 the @code{(gnu packages make-bootstrap)} module provides.
28473
28474 The following command builds the tarballs containing the bootstrap binaries
28475 (Binutils, GCC, glibc, for the traditional bootstrap and linux-libre-headers,
28476 bootstrap-mescc-tools, bootstrap-mes for the Reduced Binary Seed bootstrap,
28477 and Guile, and a tarball containing a mixture of Coreutils and other basic
28478 command-line tools):
28479
28480 @example
28481 guix build bootstrap-tarballs
28482 @end example
28483
28484 The generated tarballs are those that should be referred to in the
28485 @code{(gnu packages bootstrap)} module mentioned at the beginning of
28486 this section.
28487
28488 Still here? Then perhaps by now you've started to wonder: when do we
28489 reach a fixed point? That is an interesting question! The answer is
28490 unknown, but if you would like to investigate further (and have
28491 significant computational and storage resources to do so), then let us
28492 know.
28493
28494 @unnumberedsec Reducing the Set of Bootstrap Binaries
28495
28496 Our traditional bootstrap includes GCC, GNU Libc, Guile, etc. That's a lot of
28497 binary code! Why is that a problem? It's a problem because these big chunks
28498 of binary code are practically non-auditable, which makes it hard to establish
28499 what source code produced them. Every unauditable binary also leaves us
28500 vulnerable to compiler backdoors as described by Ken Thompson in the 1984
28501 paper @emph{Reflections on Trusting Trust}.
28502
28503 This is mitigated by the fact that our bootstrap binaries were generated
28504 from an earlier Guix revision. Nevertheless it lacks the level of
28505 transparency that we get in the rest of the package dependency graph,
28506 where Guix always gives us a source-to-binary mapping. Thus, our goal
28507 is to reduce the set of bootstrap binaries to the bare minimum.
28508
28509 The @uref{https://bootstrappable.org, Bootstrappable.org web site} lists
28510 on-going projects to do that. One of these is about replacing the
28511 bootstrap GCC with a sequence of assemblers, interpreters, and compilers
28512 of increasing complexity, which could be built from source starting from
28513 a simple and auditable assembler.
28514
28515 Our first major achievement is the replacement of of GCC, the GNU C Library
28516 and Binutils by MesCC-Tools (a simple hex linker and macro assembler) and Mes
28517 (@pxref{Top, GNU Mes Reference Manual,, mes, GNU Mes}, a Scheme interpreter
28518 and C compiler in Scheme). Neither MesCC-Tools nor Mes can be fully
28519 bootstrapped yet and thus we inject them as binary seeds. We call this the
28520 Reduced Binary Seed bootstrap, as it has halved the size of our bootstrap
28521 binaries! Also, it has eliminated the C compiler binary; i686-linux and
28522 x86_64-linux Guix packages are now bootstrapped without any binary C compiler.
28523
28524 Work is ongoing to make MesCC-Tools and Mes fully bootstrappable and we are
28525 also looking at any other bootstrap binaries. Your help is welcome!
28526
28527 @node Porting
28528 @chapter Porting to a New Platform
28529
28530 As discussed above, the GNU distribution is self-contained, and
28531 self-containment is achieved by relying on pre-built ``bootstrap
28532 binaries'' (@pxref{Bootstrapping}). These binaries are specific to an
28533 operating system kernel, CPU architecture, and application binary
28534 interface (ABI). Thus, to port the distribution to a platform that is
28535 not yet supported, one must build those bootstrap binaries, and update
28536 the @code{(gnu packages bootstrap)} module to use them on that platform.
28537
28538 Fortunately, Guix can @emph{cross compile} those bootstrap binaries.
28539 When everything goes well, and assuming the GNU tool chain supports the
28540 target platform, this can be as simple as running a command like this
28541 one:
28542
28543 @example
28544 guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
28545 @end example
28546
28547 For this to work, the @code{glibc-dynamic-linker} procedure in
28548 @code{(gnu packages bootstrap)} must be augmented to return the right
28549 file name for libc's dynamic linker on that platform; likewise,
28550 @code{system->linux-architecture} in @code{(gnu packages linux)} must be
28551 taught about the new platform.
28552
28553 Once these are built, the @code{(gnu packages bootstrap)} module needs
28554 to be updated to refer to these binaries on the target platform. That
28555 is, the hashes and URLs of the bootstrap tarballs for the new platform
28556 must be added alongside those of the currently supported platforms. The
28557 bootstrap Guile tarball is treated specially: it is expected to be
28558 available locally, and @file{gnu/local.mk} has rules to download it for
28559 the supported architectures; a rule for the new platform must be added
28560 as well.
28561
28562 In practice, there may be some complications. First, it may be that the
28563 extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
28564 above) is not recognized by all the GNU tools. Typically, glibc
28565 recognizes some of these, whereas GCC uses an extra @code{--with-abi}
28566 configure flag (see @code{gcc.scm} for examples of how to handle this).
28567 Second, some of the required packages could fail to build for that
28568 platform. Lastly, the generated binaries could be broken for some
28569 reason.
28570
28571 @c *********************************************************************
28572 @include contributing.texi
28573
28574 @c *********************************************************************
28575 @node Acknowledgments
28576 @chapter Acknowledgments
28577
28578 Guix is based on the @uref{https://nixos.org/nix/, Nix package manager},
28579 which was designed and
28580 implemented by Eelco Dolstra, with contributions from other people (see
28581 the @file{nix/AUTHORS} file in Guix.) Nix pioneered functional package
28582 management, and promoted unprecedented features, such as transactional
28583 package upgrades and rollbacks, per-user profiles, and referentially
28584 transparent build processes. Without this work, Guix would not exist.
28585
28586 The Nix-based software distributions, Nixpkgs and NixOS, have also been
28587 an inspiration for Guix.
28588
28589 GNU@tie{}Guix itself is a collective work with contributions from a
28590 number of people. See the @file{AUTHORS} file in Guix for more
28591 information on these fine people. The @file{THANKS} file lists people
28592 who have helped by reporting bugs, taking care of the infrastructure,
28593 providing artwork and themes, making suggestions, and more---thank you!
28594
28595
28596 @c *********************************************************************
28597 @node GNU Free Documentation License
28598 @appendix GNU Free Documentation License
28599 @cindex license, GNU Free Documentation License
28600 @include fdl-1.3.texi
28601
28602 @c *********************************************************************
28603 @node Concept Index
28604 @unnumbered Concept Index
28605 @printindex cp
28606
28607 @node Programming Index
28608 @unnumbered Programming Index
28609 @syncodeindex tp fn
28610 @syncodeindex vr fn
28611 @printindex fn
28612
28613 @bye
28614
28615 @c Local Variables:
28616 @c ispell-local-dictionary: "american";
28617 @c End: