doc: Fix typo.
[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
81 Permission is granted to copy, distribute and/or modify this document
82 under the terms of the GNU Free Documentation License, Version 1.3 or
83 any later version published by the Free Software Foundation; with no
84 Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
85 copy of the license is included in the section entitled ``GNU Free
86 Documentation License''.
87 @end copying
88
89 @dircategory System administration
90 @direntry
91 * Guix: (guix). Manage installed software and system configuration.
92 * guix package: (guix)Invoking guix package. Installing, removing, and upgrading packages.
93 * guix gc: (guix)Invoking guix gc. Reclaiming unused disk space.
94 * guix pull: (guix)Invoking guix pull. Update the list of available packages.
95 * guix system: (guix)Invoking guix system. Manage the operating system configuration.
96 * guix deploy: (guix)Invoking guix deploy. Manage operating system configurations for remote hosts.
97 @end direntry
98
99 @dircategory Software development
100 @direntry
101 * guix environment: (guix)Invoking guix environment. Building development environments with Guix.
102 * guix build: (guix)Invoking guix build. Building packages.
103 * guix pack: (guix)Invoking guix pack. Creating binary bundles.
104 @end direntry
105
106 @titlepage
107 @title GNU Guix Reference Manual
108 @subtitle Using the GNU Guix Functional Package Manager
109 @author The GNU Guix Developers
110
111 @page
112 @vskip 0pt plus 1filll
113 Edition @value{EDITION} @*
114 @value{UPDATED} @*
115
116 @insertcopying
117 @end titlepage
118
119 @contents
120
121 @c *********************************************************************
122 @node Top
123 @top GNU Guix
124
125 This document describes GNU Guix version @value{VERSION}, a functional
126 package management tool written for the GNU system.
127
128 @c TRANSLATORS: You can replace the following paragraph with information on
129 @c how to join your own translation team and how to report issues with the
130 @c translation.
131 This manual is also available in Simplified Chinese (@pxref{Top,,, guix.zh_CN,
132 GNU Guix参考手册}), French (@pxref{Top,,, guix.fr, Manuel de référence de GNU
133 Guix}), German (@pxref{Top,,, guix.de, Referenzhandbuch zu GNU Guix}),
134 Spanish (@pxref{Top,,, guix.es, Manual de referencia de GNU Guix}), and
135 Russian (@pxref{Top,,, guix.ru, Руководство GNU Guix}). If you
136 would like to translate it in your native language, consider joining the
137 @uref{https://translationproject.org/domain/guix-manual.html, Translation
138 Project}.
139
140 @menu
141 * Introduction:: What is Guix about?
142 * Installation:: Installing Guix.
143 * System Installation:: Installing the whole operating system.
144 * Package Management:: Package installation, upgrade, etc.
145 * Development:: Guix-aided software development.
146 * Programming Interface:: Using Guix in Scheme.
147 * Utilities:: Package management commands.
148 * System Configuration:: Configuring the operating system.
149 * Documentation:: Browsing software user manuals.
150 * Installing Debugging Files:: Feeding the debugger.
151 * Security Updates:: Deploying security fixes quickly.
152 * Bootstrapping:: GNU/Linux built from scratch.
153 * Porting:: Targeting another platform or kernel.
154 * Contributing:: Your help needed!
155
156 * Acknowledgments:: Thanks!
157 * GNU Free Documentation License:: The license of this manual.
158 * Concept Index:: Concepts.
159 * Programming Index:: Data types, functions, and variables.
160
161 @detailmenu
162 --- The Detailed Node Listing ---
163
164 Introduction
165
166 * Managing Software the Guix Way:: What's special.
167 * GNU Distribution:: The packages and tools.
168
169 Installation
170
171 * Binary Installation:: Getting Guix running in no time!
172 * Requirements:: Software needed to build and run Guix.
173 * Running the Test Suite:: Testing Guix.
174 * Setting Up the Daemon:: Preparing the build daemon's environment.
175 * Invoking guix-daemon:: Running the build daemon.
176 * Application Setup:: Application-specific setup.
177
178 Setting Up the Daemon
179
180 * Build Environment Setup:: Preparing the isolated build environment.
181 * Daemon Offload Setup:: Offloading builds to remote machines.
182 * SELinux Support:: Using an SELinux policy for the daemon.
183
184 System Installation
185
186 * Limitations:: What you can expect.
187 * Hardware Considerations:: Supported hardware.
188 * USB Stick and DVD Installation:: Preparing the installation medium.
189 * Preparing for Installation:: Networking, partitioning, etc.
190 * Guided Graphical Installation:: Easy graphical installation.
191 * Manual Installation:: Manual installation for wizards.
192 * After System Installation:: When installation succeeded.
193 * Installing Guix in a VM:: Guix System playground.
194 * Building the Installation Image:: How this comes to be.
195
196 Manual Installation
197
198 * Keyboard Layout and Networking and Partitioning:: Initial setup.
199 * Proceeding with the Installation:: Installing.
200
201 Package Management
202
203 * Features:: How Guix will make your life brighter.
204 * Invoking guix package:: Package installation, removal, etc.
205 * Substitutes:: Downloading pre-built binaries.
206 * Packages with Multiple Outputs:: Single source package, multiple outputs.
207 * Invoking guix gc:: Running the garbage collector.
208 * Invoking guix pull:: Fetching the latest Guix and distribution.
209 * Channels:: Customizing the package collection.
210 * Invoking guix time-machine:: Running an older revision of Guix.
211 * Inferiors:: Interacting with another revision of Guix.
212 * Invoking guix describe:: Display information about your Guix revision.
213 * Invoking guix archive:: Exporting and importing store files.
214
215 Substitutes
216
217 * Official Substitute Server:: One particular source of substitutes.
218 * Substitute Server Authorization:: How to enable or disable substitutes.
219 * Substitute Authentication:: How Guix verifies substitutes.
220 * Proxy Settings:: How to get substitutes via proxy.
221 * Substitution Failure:: What happens when substitution fails.
222 * On Trusting Binaries:: How can you trust that binary blob?
223
224 Development
225
226 * Invoking guix environment:: Setting up development environments.
227 * Invoking guix pack:: Creating software bundles.
228
229 Programming Interface
230
231 * Package Modules:: Packages from the programmer's viewpoint.
232 * Defining Packages:: Defining new packages.
233 * Build Systems:: Specifying how packages are built.
234 * The Store:: Manipulating the package store.
235 * Derivations:: Low-level interface to package derivations.
236 * The Store Monad:: Purely functional interface to the store.
237 * G-Expressions:: Manipulating build expressions.
238 * Invoking guix repl:: Fiddling with Guix interactively.
239
240 Defining Packages
241
242 * package Reference:: The package data type.
243 * origin Reference:: The origin data type.
244
245 Utilities
246
247 * Invoking guix build:: Building packages from the command line.
248 * Invoking guix edit:: Editing package definitions.
249 * Invoking guix download:: Downloading a file and printing its hash.
250 * Invoking guix hash:: Computing the cryptographic hash of a file.
251 * Invoking guix import:: Importing package definitions.
252 * Invoking guix refresh:: Updating package definitions.
253 * Invoking guix lint:: Finding errors in package definitions.
254 * Invoking guix size:: Profiling disk usage.
255 * Invoking guix graph:: Visualizing the graph of packages.
256 * Invoking guix publish:: Sharing substitutes.
257 * Invoking guix challenge:: Challenging substitute servers.
258 * Invoking guix copy:: Copying to and from a remote store.
259 * Invoking guix container:: Process isolation.
260 * Invoking guix weather:: Assessing substitute availability.
261 * Invoking guix processes:: Listing client processes.
262
263 Invoking @command{guix build}
264
265 * Common Build Options:: Build options for most commands.
266 * Package Transformation Options:: Creating variants of packages.
267 * Additional Build Options:: Options specific to 'guix build'.
268 * Debugging Build Failures:: Real life packaging experience.
269
270 System Configuration
271
272 * Using the Configuration System:: Customizing your GNU system.
273 * operating-system Reference:: Detail of operating-system declarations.
274 * File Systems:: Configuring file system mounts.
275 * Mapped Devices:: Block device extra processing.
276 * User Accounts:: Specifying user accounts.
277 * Keyboard Layout:: How the system interprets key strokes.
278 * Locales:: Language and cultural convention settings.
279 * Services:: Specifying system services.
280 * Setuid Programs:: Programs running with root privileges.
281 * X.509 Certificates:: Authenticating HTTPS servers.
282 * Name Service Switch:: Configuring libc's name service switch.
283 * Initial RAM Disk:: Linux-Libre bootstrapping.
284 * Bootloader Configuration:: Configuring the boot loader.
285 * Invoking guix system:: Instantiating a system configuration.
286 * Invoking guix deploy:: Deploying a system configuration to a remote host.
287 * Running Guix in a VM:: How to run Guix System in a virtual machine.
288 * Defining Services:: Adding new service definitions.
289
290 Services
291
292 * Base Services:: Essential system services.
293 * Scheduled Job Execution:: The mcron service.
294 * Log Rotation:: The rottlog service.
295 * Networking Services:: Network setup, SSH daemon, etc.
296 * X Window:: Graphical display.
297 * Printing Services:: Local and remote printer support.
298 * Desktop Services:: D-Bus and desktop services.
299 * Sound Services:: ALSA and Pulseaudio services.
300 * Database Services:: SQL databases, key-value stores, etc.
301 * Mail Services:: IMAP, POP3, SMTP, and all that.
302 * Messaging Services:: Messaging services.
303 * Telephony Services:: Telephony services.
304 * Monitoring Services:: Monitoring services.
305 * Kerberos Services:: Kerberos services.
306 * Web Services:: Web servers.
307 * Certificate Services:: TLS certificates via Let's Encrypt.
308 * DNS Services:: DNS daemons.
309 * VPN Services:: VPN daemons.
310 * Network File System:: NFS related services.
311 * Continuous Integration:: The Cuirass service.
312 * Power Management Services:: Extending battery life.
313 * Audio Services:: The MPD.
314 * Virtualization Services:: Virtualization services.
315 * Version Control Services:: Providing remote access to Git repositories.
316 * Game Services:: Game servers.
317 * PAM Mount Service:: Service to mount volumes when logging in.
318 * Linux Services:: Services tied to the Linux kernel.
319 * Miscellaneous Services:: Other services.
320
321 Defining Services
322
323 * Service Composition:: The model for composing services.
324 * Service Types and Services:: Types and services.
325 * Service Reference:: API reference.
326 * Shepherd Services:: A particular type of service.
327
328 @end detailmenu
329 @end menu
330
331 @c *********************************************************************
332 @node Introduction
333 @chapter Introduction
334
335 @cindex purpose
336 GNU Guix@footnote{``Guix'' is pronounced like ``geeks'', or ``ɡiːks''
337 using the international phonetic alphabet (IPA).} is a package
338 management tool for and distribution of the GNU system.
339 Guix makes it easy for unprivileged
340 users to install, upgrade, or remove software packages, to roll back to a
341 previous package set, to build packages from source, and generally
342 assists with the creation and maintenance of software environments.
343
344 @cindex Guix System
345 @cindex GuixSD, now Guix System
346 @cindex Guix System Distribution, now Guix System
347 You can install GNU@tie{}Guix on top of an existing GNU/Linux system where it
348 complements the available tools without interference (@pxref{Installation}),
349 or you can use it as a standalone operating system distribution,
350 @dfn{Guix@tie{}System}@footnote{We used to refer to Guix System as ``Guix
351 System Distribution'' or ``GuixSD''. We now consider it makes more sense to
352 group everything under the ``Guix'' banner since, after all, Guix System is
353 readily available through the @command{guix system} command, even if you're
354 using a different distro underneath!}. @xref{GNU Distribution}.
355
356 @menu
357 * Managing Software the Guix Way:: What's special.
358 * GNU Distribution:: The packages and tools.
359 @end menu
360
361 @node Managing Software the Guix Way
362 @section Managing Software the Guix Way
363
364 @cindex user interfaces
365 Guix provides a command-line package management interface
366 (@pxref{Package Management}), tools to help with software development
367 (@pxref{Development}), command-line utilities for more advanced usage,
368 (@pxref{Utilities}), as well as Scheme programming interfaces
369 (@pxref{Programming Interface}).
370 @cindex build daemon
371 Its @dfn{build daemon} is responsible for building packages on behalf of
372 users (@pxref{Setting Up the Daemon}) and for downloading pre-built
373 binaries from authorized sources (@pxref{Substitutes}).
374
375 @cindex extensibility of the distribution
376 @cindex customization, of packages
377 Guix includes package definitions for many GNU and non-GNU packages, all
378 of which @uref{https://www.gnu.org/philosophy/free-sw.html, respect the
379 user's computing freedom}. It is @emph{extensible}: users can write
380 their own package definitions (@pxref{Defining Packages}) and make them
381 available as independent package modules (@pxref{Package Modules}). It
382 is also @emph{customizable}: users can @emph{derive} specialized package
383 definitions from existing ones, including from the command line
384 (@pxref{Package Transformation Options}).
385
386 @cindex functional package management
387 @cindex isolation
388 Under the hood, Guix implements the @dfn{functional package management}
389 discipline pioneered by Nix (@pxref{Acknowledgments}).
390 In Guix, the package build and installation process is seen
391 as a @emph{function}, in the mathematical sense. That function takes inputs,
392 such as build scripts, a compiler, and libraries, and
393 returns an installed package. As a pure function, its result depends
394 solely on its inputs---for instance, it cannot refer to software or
395 scripts that were not explicitly passed as inputs. A build function
396 always produces the same result when passed a given set of inputs. It
397 cannot alter the environment of the running system in
398 any way; for instance, it cannot create, modify, or delete files outside
399 of its build and installation directories. This is achieved by running
400 build processes in isolated environments (or @dfn{containers}), where only their
401 explicit inputs are visible.
402
403 @cindex store
404 The result of package build functions is @dfn{cached} in the file
405 system, in a special directory called @dfn{the store} (@pxref{The
406 Store}). Each package is installed in a directory of its own in the
407 store---by default under @file{/gnu/store}. The directory name contains
408 a hash of all the inputs used to build that package; thus, changing an
409 input yields a different directory name.
410
411 This approach is the foundation for the salient features of Guix: support
412 for transactional package upgrade and rollback, per-user installation, and
413 garbage collection of packages (@pxref{Features}).
414
415
416 @node GNU Distribution
417 @section GNU Distribution
418
419 @cindex Guix System
420 Guix comes with a distribution of the GNU system consisting entirely of
421 free software@footnote{The term ``free'' here refers to the
422 @url{https://www.gnu.org/philosophy/free-sw.html,freedom provided to
423 users of that software}.}. The
424 distribution can be installed on its own (@pxref{System Installation}),
425 but it is also possible to install Guix as a package manager on top of
426 an installed GNU/Linux system (@pxref{Installation}). When we need to
427 distinguish between the two, we refer to the standalone distribution as
428 Guix@tie{}System.
429
430 The distribution provides core GNU packages such as GNU libc, GCC, and
431 Binutils, as well as many GNU and non-GNU applications. The complete
432 list of available packages can be browsed
433 @url{https://www.gnu.org/software/guix/packages,on-line} or by
434 running @command{guix package} (@pxref{Invoking guix package}):
435
436 @example
437 guix package --list-available
438 @end example
439
440 Our goal is to provide a practical 100% free software distribution of
441 Linux-based and other variants of GNU, with a focus on the promotion and
442 tight integration of GNU components, and an emphasis on programs and
443 tools that help users exert that freedom.
444
445 Packages are currently available on the following platforms:
446
447 @table @code
448
449 @item x86_64-linux
450 Intel/AMD @code{x86_64} architecture, Linux-Libre kernel;
451
452 @item i686-linux
453 Intel 32-bit architecture (IA32), Linux-Libre kernel;
454
455 @item armhf-linux
456 ARMv7-A architecture with hard float, Thumb-2 and NEON,
457 using the EABI hard-float application binary interface (ABI),
458 and Linux-Libre kernel.
459
460 @item aarch64-linux
461 little-endian 64-bit ARMv8-A processors, Linux-Libre kernel.
462
463 @item mips64el-linux
464 little-endian 64-bit MIPS processors, specifically the Loongson series,
465 n32 ABI, and Linux-Libre kernel. This configuration is no longer fully
466 supported; in particular, the project's build farms no longer provide
467 substitutes for this architecture.
468
469 @end table
470
471 With Guix@tie{}System, you @emph{declare} all aspects of the operating system
472 configuration and Guix takes care of instantiating the configuration in a
473 transactional, reproducible, and stateless fashion (@pxref{System
474 Configuration}). Guix System uses the Linux-libre kernel, the Shepherd
475 initialization system (@pxref{Introduction,,, shepherd, The GNU Shepherd
476 Manual}), the well-known GNU utilities and tool chain, as well as the
477 graphical environment or system services of your choice.
478
479 Guix System is available on all the above platforms except
480 @code{mips64el-linux}.
481
482 @noindent
483 For information on porting to other architectures or kernels,
484 @pxref{Porting}.
485
486 Building this distribution is a cooperative effort, and you are invited
487 to join! @xref{Contributing}, for information about how you can help.
488
489
490 @c *********************************************************************
491 @node Installation
492 @chapter Installation
493
494 @cindex installing Guix
495
496 @quotation Note
497 We recommend the use of this
498 @uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh,
499 shell installer script} to install Guix on top of a running GNU/Linux system,
500 thereafter called a @dfn{foreign distro}.@footnote{This section is concerned
501 with the installation of the package manager, which can be done on top of a
502 running GNU/Linux system. If, instead, you want to install the complete GNU
503 operating system, @pxref{System Installation}.} The script automates the
504 download, installation, and initial configuration of Guix. It should be run
505 as the root user.
506 @end quotation
507
508 @cindex foreign distro
509 @cindex directories related to foreign distro
510 When installed on a foreign distro, GNU@tie{}Guix complements the available
511 tools without interference. Its data lives exclusively in two directories,
512 usually @file{/gnu/store} and @file{/var/guix}; other files on your system,
513 such as @file{/etc}, are left untouched.
514
515 Once installed, Guix can be updated by running @command{guix pull}
516 (@pxref{Invoking guix pull}).
517
518 If you prefer to perform the installation steps manually or want to tweak
519 them, you may find the following subsections useful. They describe the
520 software requirements of Guix, as well as how to install it manually and get
521 ready to use it.
522
523 @menu
524 * Binary Installation:: Getting Guix running in no time!
525 * Requirements:: Software needed to build and run Guix.
526 * Running the Test Suite:: Testing Guix.
527 * Setting Up the Daemon:: Preparing the build daemon's environment.
528 * Invoking guix-daemon:: Running the build daemon.
529 * Application Setup:: Application-specific setup.
530 * Upgrading Guix:: Upgrading Guix and its build daemon.
531 @end menu
532
533 @node Binary Installation
534 @section Binary Installation
535
536 @cindex installing Guix from binaries
537 @cindex installer script
538 This section describes how to install Guix on an arbitrary system from a
539 self-contained tarball providing binaries for Guix and for all its
540 dependencies. This is often quicker than installing from source, which
541 is described in the next sections. The only requirement is to have
542 GNU@tie{}tar and Xz.
543
544 @c Note duplicated from the ``Installation'' node.
545 @quotation Note
546 We recommend the use of this
547 @uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh,
548 shell installer script}. The script automates the download, installation, and
549 initial configuration steps described below. It should be run as the root
550 user.
551 @end quotation
552
553 Installing goes along these lines:
554
555 @enumerate
556 @item
557 @cindex downloading Guix binary
558 Download the binary tarball from
559 @indicateurl{@value{BASE-URL}/guix-binary-@value{VERSION}.@var{system}.tar.xz},
560 where @var{system} is @code{x86_64-linux} for an @code{x86_64} machine
561 already running the kernel Linux, and so on.
562
563 @c The following is somewhat duplicated in ``System Installation''.
564 Make sure to download the associated @file{.sig} file and to verify the
565 authenticity of the tarball against it, along these lines:
566
567 @example
568 $ wget @value{BASE-URL}/guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
569 $ gpg --verify guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
570 @end example
571
572 If that command fails because you do not have the required public key,
573 then run this command to import it:
574
575 @example
576 $ wget @value{OPENPGP-SIGNING-KEY-URL} \
577 -qO - | gpg --import -
578 @end example
579
580 @noindent
581 and rerun the @code{gpg --verify} command.
582
583 Take note that a warning like ``This key is not certified with a trusted
584 signature!'' is normal.
585
586 @c end authentication part
587
588 @item
589 Now, you need to become the @code{root} user. Depending on your distribution,
590 you may have to run @code{su -} or @code{sudo -i}. As @code{root}, run:
591
592 @example
593 # cd /tmp
594 # tar --warning=no-timestamp -xf \
595 /path/to/guix-binary-@value{VERSION}.@var{system}.tar.xz
596 # mv var/guix /var/ && mv gnu /
597 @end example
598
599 This creates @file{/gnu/store} (@pxref{The Store}) and @file{/var/guix}.
600 The latter contains a ready-to-use profile for @code{root} (see next
601 step.)
602
603 Do @emph{not} unpack the tarball on a working Guix system since that
604 would overwrite its own essential files.
605
606 The @code{--warning=no-timestamp} option makes sure GNU@tie{}tar does
607 not emit warnings about ``implausibly old time stamps'' (such
608 warnings were triggered by GNU@tie{}tar 1.26 and older; recent
609 versions are fine.)
610 They stem from the fact that all the
611 files in the archive have their modification time set to zero (which
612 means January 1st, 1970.) This is done on purpose to make sure the
613 archive content is independent of its creation time, thus making it
614 reproducible.
615
616 @item
617 Make the profile available under @file{~root/.config/guix/current}, which is
618 where @command{guix pull} will install updates (@pxref{Invoking guix pull}):
619
620 @example
621 # mkdir -p ~root/.config/guix
622 # ln -sf /var/guix/profiles/per-user/root/current-guix \
623 ~root/.config/guix/current
624 @end example
625
626 Source @file{etc/profile} to augment @code{PATH} and other relevant
627 environment variables:
628
629 @example
630 # GUIX_PROFILE="`echo ~root`/.config/guix/current" ; \
631 source $GUIX_PROFILE/etc/profile
632 @end example
633
634 @item
635 Create the group and user accounts for build users as explained below
636 (@pxref{Build Environment Setup}).
637
638 @item
639 Run the daemon, and set it to automatically start on boot.
640
641 If your host distro uses the systemd init system, this can be achieved
642 with these commands:
643
644 @c Versions of systemd that supported symlinked service files are not
645 @c yet widely deployed, so we should suggest that users copy the service
646 @c files into place.
647 @c
648 @c See this thread for more information:
649 @c https://lists.gnu.org/archive/html/guix-devel/2017-01/msg01199.html
650
651 @example
652 # cp ~root/.config/guix/current/lib/systemd/system/guix-daemon.service \
653 /etc/systemd/system/
654 # systemctl start guix-daemon && systemctl enable guix-daemon
655 @end example
656
657 If your host distro uses the Upstart init system:
658
659 @example
660 # initctl reload-configuration
661 # cp ~root/.config/guix/current/lib/upstart/system/guix-daemon.conf \
662 /etc/init/
663 # start guix-daemon
664 @end example
665
666 Otherwise, you can still start the daemon manually with:
667
668 @example
669 # ~root/.config/guix/current/bin/guix-daemon \
670 --build-users-group=guixbuild
671 @end example
672
673 @item
674 Make the @command{guix} command available to other users on the machine,
675 for instance with:
676
677 @example
678 # mkdir -p /usr/local/bin
679 # cd /usr/local/bin
680 # ln -s /var/guix/profiles/per-user/root/current-guix/bin/guix
681 @end example
682
683 It is also a good idea to make the Info version of this manual available
684 there:
685
686 @example
687 # mkdir -p /usr/local/share/info
688 # cd /usr/local/share/info
689 # for i in /var/guix/profiles/per-user/root/current-guix/share/info/* ;
690 do ln -s $i ; done
691 @end example
692
693 That way, assuming @file{/usr/local/share/info} is in the search path,
694 running @command{info guix} will open this manual (@pxref{Other Info
695 Directories,,, texinfo, GNU Texinfo}, for more details on changing the
696 Info search path.)
697
698 @item
699 @cindex substitutes, authorization thereof
700 To use substitutes from @code{@value{SUBSTITUTE-SERVER}} or one of its mirrors
701 (@pxref{Substitutes}), authorize them:
702
703 @example
704 # guix archive --authorize < \
705 ~root/.config/guix/current/share/guix/@value{SUBSTITUTE-SERVER}.pub
706 @end example
707
708 @item
709 Each user may need to perform a few additional steps to make their Guix
710 environment ready for use, @pxref{Application Setup}.
711 @end enumerate
712
713 Voilà, the installation is complete!
714
715 You can confirm that Guix is working by installing a sample package into
716 the root profile:
717
718 @example
719 # guix install hello
720 @end example
721
722 The binary installation tarball can be (re)produced and verified simply
723 by running the following command in the Guix source tree:
724
725 @example
726 make guix-binary.@var{system}.tar.xz
727 @end example
728
729 @noindent
730 ...@: which, in turn, runs:
731
732 @example
733 guix pack -s @var{system} --localstatedir \
734 --profile-name=current-guix guix
735 @end example
736
737 @xref{Invoking guix pack}, for more info on this handy tool.
738
739 @node Requirements
740 @section Requirements
741
742 This section lists requirements when building Guix from source. The
743 build procedure for Guix is the same as for other GNU software, and is
744 not covered here. Please see the files @file{README} and @file{INSTALL}
745 in the Guix source tree for additional details.
746
747 @cindex official website
748 GNU Guix is available for download from its website at
749 @url{https://www.gnu.org/software/guix/}.
750
751 GNU Guix depends on the following packages:
752
753 @itemize
754 @item @url{https://gnu.org/software/guile/, GNU Guile}, version 3.0.x or
755 2.2.x;
756 @item @url{https://notabug.org/cwebber/guile-gcrypt, Guile-Gcrypt}, version
757 0.1.0 or later;
758 @item
759 @uref{https://gnutls.org/, GnuTLS}, specifically its Guile bindings
760 (@pxref{Guile Preparations, how to install the GnuTLS bindings for
761 Guile,, gnutls-guile, GnuTLS-Guile});
762 @item
763 @uref{https://notabug.org/guile-sqlite3/guile-sqlite3, Guile-SQLite3}, version 0.1.0
764 or later;
765 @item
766 @c FIXME: Specify a version number once a release has been made.
767 @uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, from August
768 2017 or later;
769 @item @uref{https://savannah.nongnu.org/projects/guile-json/, Guile-JSON} 3.x;
770 @item @url{https://zlib.net, zlib};
771 @item @url{https://www.gnu.org/software/make/, GNU Make}.
772 @end itemize
773
774 The following dependencies are optional:
775
776 @itemize
777 @item
778 @c Note: We need at least 0.12.0 for 'userauth-gssapi!'.
779 Support for build offloading (@pxref{Daemon Offload Setup}) and
780 @command{guix copy} (@pxref{Invoking guix copy}) depends on
781 @uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH},
782 version 0.12.0 or later.
783
784 @item
785 When @url{https://www.nongnu.org/lzip/lzlib.html, lzlib} is available, lzlib
786 substitutes can be used and @command{guix publish} can compress substitutes
787 with lzlib.
788
789 @item
790 When @url{http://www.bzip.org, libbz2} is available,
791 @command{guix-daemon} can use it to compress build logs.
792 @end itemize
793
794 Unless @code{--disable-daemon} was passed to @command{configure}, the
795 following packages are also needed:
796
797 @itemize
798 @item @url{https://gnupg.org/, GNU libgcrypt};
799 @item @url{https://sqlite.org, SQLite 3};
800 @item @url{https://gcc.gnu.org, GCC's g++}, with support for the
801 C++11 standard.
802 @end itemize
803
804 @cindex state directory
805 When configuring Guix on a system that already has a Guix installation,
806 be sure to specify the same state directory as the existing installation
807 using the @code{--localstatedir} option of the @command{configure}
808 script (@pxref{Directory Variables, @code{localstatedir},, standards,
809 GNU Coding Standards}). Usually, this @var{localstatedir} option is
810 set to the value @file{/var}. The @command{configure} script protects
811 against unintended misconfiguration of @var{localstatedir} so you do not
812 inadvertently corrupt your store (@pxref{The Store}).
813
814 @node Running the Test Suite
815 @section Running the Test Suite
816
817 @cindex test suite
818 After a successful @command{configure} and @code{make} run, it is a good
819 idea to run the test suite. It can help catch issues with the setup or
820 environment, or bugs in Guix itself---and really, reporting test
821 failures is a good way to help improve the software. To run the test
822 suite, type:
823
824 @example
825 make check
826 @end example
827
828 Test cases can run in parallel: you can use the @code{-j} option of
829 GNU@tie{}make to speed things up. The first run may take a few minutes
830 on a recent machine; subsequent runs will be faster because the store
831 that is created for test purposes will already have various things in
832 cache.
833
834 It is also possible to run a subset of the tests by defining the
835 @code{TESTS} makefile variable as in this example:
836
837 @example
838 make check TESTS="tests/store.scm tests/cpio.scm"
839 @end example
840
841 By default, tests results are displayed at a file level. In order to
842 see the details of every individual test cases, it is possible to define
843 the @code{SCM_LOG_DRIVER_FLAGS} makefile variable as in this example:
844
845 @example
846 make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no"
847 @end example
848
849 Upon failure, please email @email{bug-guix@@gnu.org} and attach the
850 @file{test-suite.log} file. Please specify the Guix version being used
851 as well as version numbers of the dependencies (@pxref{Requirements}) in
852 your message.
853
854 Guix also comes with a whole-system test suite that tests complete
855 Guix System instances. It can only run on systems where
856 Guix is already installed, using:
857
858 @example
859 make check-system
860 @end example
861
862 @noindent
863 or, again, by defining @code{TESTS} to select a subset of tests to run:
864
865 @example
866 make check-system TESTS="basic mcron"
867 @end example
868
869 These system tests are defined in the @code{(gnu tests @dots{})}
870 modules. They work by running the operating systems under test with
871 lightweight instrumentation in a virtual machine (VM). They can be
872 computationally intensive or rather cheap, depending on whether
873 substitutes are available for their dependencies (@pxref{Substitutes}).
874 Some of them require a lot of storage space to hold VM images.
875
876 Again in case of test failures, please send @email{bug-guix@@gnu.org}
877 all the details.
878
879 @node Setting Up the Daemon
880 @section Setting Up the Daemon
881
882 @cindex daemon
883 Operations such as building a package or running the garbage collector
884 are all performed by a specialized process, the @dfn{build daemon}, on
885 behalf of clients. Only the daemon may access the store and its
886 associated database. Thus, any operation that manipulates the store
887 goes through the daemon. For instance, command-line tools such as
888 @command{guix package} and @command{guix build} communicate with the
889 daemon (@i{via} remote procedure calls) to instruct it what to do.
890
891 The following sections explain how to prepare the build daemon's
892 environment. See also @ref{Substitutes}, for information on how to allow
893 the daemon to download pre-built binaries.
894
895 @menu
896 * Build Environment Setup:: Preparing the isolated build environment.
897 * Daemon Offload Setup:: Offloading builds to remote machines.
898 * SELinux Support:: Using an SELinux policy for the daemon.
899 @end menu
900
901 @node Build Environment Setup
902 @subsection Build Environment Setup
903
904 @cindex build environment
905 In a standard multi-user setup, Guix and its daemon---the
906 @command{guix-daemon} program---are installed by the system
907 administrator; @file{/gnu/store} is owned by @code{root} and
908 @command{guix-daemon} runs as @code{root}. Unprivileged users may use
909 Guix tools to build packages or otherwise access the store, and the
910 daemon will do it on their behalf, ensuring that the store is kept in a
911 consistent state, and allowing built packages to be shared among users.
912
913 @cindex build users
914 When @command{guix-daemon} runs as @code{root}, you may not want package
915 build processes themselves to run as @code{root} too, for obvious
916 security reasons. To avoid that, a special pool of @dfn{build users}
917 should be created for use by build processes started by the daemon.
918 These build users need not have a shell and a home directory: they will
919 just be used when the daemon drops @code{root} privileges in build
920 processes. Having several such users allows the daemon to launch
921 distinct build processes under separate UIDs, which guarantees that they
922 do not interfere with each other---an essential feature since builds are
923 regarded as pure functions (@pxref{Introduction}).
924
925 On a GNU/Linux system, a build user pool may be created like this (using
926 Bash syntax and the @code{shadow} commands):
927
928 @c See https://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
929 @c for why `-G' is needed.
930 @example
931 # groupadd --system guixbuild
932 # for i in `seq -w 1 10`;
933 do
934 useradd -g guixbuild -G guixbuild \
935 -d /var/empty -s `which nologin` \
936 -c "Guix build user $i" --system \
937 guixbuilder$i;
938 done
939 @end example
940
941 @noindent
942 The number of build users determines how many build jobs may run in
943 parallel, as specified by the @option{--max-jobs} option
944 (@pxref{Invoking guix-daemon, @option{--max-jobs}}). To use
945 @command{guix system vm} and related commands, you may need to add the
946 build users to the @code{kvm} group so they can access @file{/dev/kvm},
947 using @code{-G guixbuild,kvm} instead of @code{-G guixbuild}
948 (@pxref{Invoking guix system}).
949
950 The @code{guix-daemon} program may then be run as @code{root} with the
951 following command@footnote{If your machine uses the systemd init system,
952 dropping the @file{@var{prefix}/lib/systemd/system/guix-daemon.service}
953 file in @file{/etc/systemd/system} will ensure that
954 @command{guix-daemon} is automatically started. Similarly, if your
955 machine uses the Upstart init system, drop the
956 @file{@var{prefix}/lib/upstart/system/guix-daemon.conf}
957 file in @file{/etc/init}.}:
958
959 @example
960 # guix-daemon --build-users-group=guixbuild
961 @end example
962
963 @cindex chroot
964 @noindent
965 This way, the daemon starts build processes in a chroot, under one of
966 the @code{guixbuilder} users. On GNU/Linux, by default, the chroot
967 environment contains nothing but:
968
969 @c Keep this list in sync with libstore/build.cc! -----------------------
970 @itemize
971 @item
972 a minimal @code{/dev} directory, created mostly independently from the
973 host @code{/dev}@footnote{``Mostly'', because while the set of files
974 that appear in the chroot's @code{/dev} is fixed, most of these files
975 can only be created if the host has them.};
976
977 @item
978 the @code{/proc} directory; it only shows the processes of the container
979 since a separate PID name space is used;
980
981 @item
982 @file{/etc/passwd} with an entry for the current user and an entry for
983 user @file{nobody};
984
985 @item
986 @file{/etc/group} with an entry for the user's group;
987
988 @item
989 @file{/etc/hosts} with an entry that maps @code{localhost} to
990 @code{127.0.0.1};
991
992 @item
993 a writable @file{/tmp} directory.
994 @end itemize
995
996 You can influence the directory where the daemon stores build trees
997 @i{via} the @code{TMPDIR} environment variable. However, the build tree
998 within the chroot is always called @file{/tmp/guix-build-@var{name}.drv-0},
999 where @var{name} is the derivation name---e.g., @code{coreutils-8.24}.
1000 This way, the value of @code{TMPDIR} does not leak inside build
1001 environments, which avoids discrepancies in cases where build processes
1002 capture the name of their build tree.
1003
1004 @vindex http_proxy
1005 The daemon also honors the @code{http_proxy} environment variable for
1006 HTTP downloads it performs, be it for fixed-output derivations
1007 (@pxref{Derivations}) or for substitutes (@pxref{Substitutes}).
1008
1009 If you are installing Guix as an unprivileged user, it is still possible
1010 to run @command{guix-daemon} provided you pass @code{--disable-chroot}.
1011 However, build processes will not be isolated from one another, and not
1012 from the rest of the system. Thus, build processes may interfere with
1013 each other, and may access programs, libraries, and other files
1014 available on the system---making it much harder to view them as
1015 @emph{pure} functions.
1016
1017
1018 @node Daemon Offload Setup
1019 @subsection Using the Offload Facility
1020
1021 @cindex offloading
1022 @cindex build hook
1023 When desired, the build daemon can @dfn{offload} derivation builds to
1024 other machines running Guix, using the @code{offload} @dfn{build
1025 hook}@footnote{This feature is available only when
1026 @uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH} is
1027 present.}. When that
1028 feature is enabled, a list of user-specified build machines is read from
1029 @file{/etc/guix/machines.scm}; every time a build is requested, for
1030 instance via @code{guix build}, the daemon attempts to offload it to one
1031 of the machines that satisfy the constraints of the derivation, in
1032 particular its system type---e.g., @file{x86_64-linux}. Missing
1033 prerequisites for the build are copied over SSH to the target machine,
1034 which then proceeds with the build; upon success the output(s) of the
1035 build are copied back to the initial machine.
1036
1037 The @file{/etc/guix/machines.scm} file typically looks like this:
1038
1039 @lisp
1040 (list (build-machine
1041 (name "eightysix.example.org")
1042 (system "x86_64-linux")
1043 (host-key "ssh-ed25519 AAAAC3Nza@dots{}")
1044 (user "bob")
1045 (speed 2.)) ;incredibly fast!
1046
1047 (build-machine
1048 (name "meeps.example.org")
1049 (system "mips64el-linux")
1050 (host-key "ssh-rsa AAAAB3Nza@dots{}")
1051 (user "alice")
1052 (private-key
1053 (string-append (getenv "HOME")
1054 "/.ssh/identity-for-guix"))))
1055 @end lisp
1056
1057 @noindent
1058 In the example above we specify a list of two build machines, one for
1059 the @code{x86_64} architecture and one for the @code{mips64el}
1060 architecture.
1061
1062 In fact, this file is---not surprisingly!---a Scheme file that is
1063 evaluated when the @code{offload} hook is started. Its return value
1064 must be a list of @code{build-machine} objects. While this example
1065 shows a fixed list of build machines, one could imagine, say, using
1066 DNS-SD to return a list of potential build machines discovered in the
1067 local network (@pxref{Introduction, Guile-Avahi,, guile-avahi, Using
1068 Avahi in Guile Scheme Programs}). The @code{build-machine} data type is
1069 detailed below.
1070
1071 @deftp {Data Type} build-machine
1072 This data type represents build machines to which the daemon may offload
1073 builds. The important fields are:
1074
1075 @table @code
1076
1077 @item name
1078 The host name of the remote machine.
1079
1080 @item system
1081 The system type of the remote machine---e.g., @code{"x86_64-linux"}.
1082
1083 @item user
1084 The user account to use when connecting to the remote machine over SSH.
1085 Note that the SSH key pair must @emph{not} be passphrase-protected, to
1086 allow non-interactive logins.
1087
1088 @item host-key
1089 This must be the machine's SSH @dfn{public host key} in OpenSSH format.
1090 This is used to authenticate the machine when we connect to it. It is a
1091 long string that looks like this:
1092
1093 @example
1094 ssh-ed25519 AAAAC3NzaC@dots{}mde+UhL hint@@example.org
1095 @end example
1096
1097 If the machine is running the OpenSSH daemon, @command{sshd}, the host
1098 key can be found in a file such as
1099 @file{/etc/ssh/ssh_host_ed25519_key.pub}.
1100
1101 If the machine is running the SSH daemon of GNU@tie{}lsh,
1102 @command{lshd}, the host key is in @file{/etc/lsh/host-key.pub} or a
1103 similar file. It can be converted to the OpenSSH format using
1104 @command{lsh-export-key} (@pxref{Converting keys,,, lsh, LSH Manual}):
1105
1106 @example
1107 $ lsh-export-key --openssh < /etc/lsh/host-key.pub
1108 ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV@dots{}
1109 @end example
1110
1111 @end table
1112
1113 A number of optional fields may be specified:
1114
1115 @table @asis
1116
1117 @item @code{port} (default: @code{22})
1118 Port number of SSH server on the machine.
1119
1120 @item @code{private-key} (default: @file{~root/.ssh/id_rsa})
1121 The SSH private key file to use when connecting to the machine, in
1122 OpenSSH format. This key must not be protected with a passphrase.
1123
1124 Note that the default value is the private key @emph{of the root
1125 account}. Make sure it exists if you use the default.
1126
1127 @item @code{compression} (default: @code{"zlib@@openssh.com,zlib"})
1128 @itemx @code{compression-level} (default: @code{3})
1129 The SSH-level compression methods and compression level requested.
1130
1131 Note that offloading relies on SSH compression to reduce bandwidth usage
1132 when transferring files to and from build machines.
1133
1134 @item @code{daemon-socket} (default: @code{"/var/guix/daemon-socket/socket"})
1135 File name of the Unix-domain socket @command{guix-daemon} is listening
1136 to on that machine.
1137
1138 @item @code{parallel-builds} (default: @code{1})
1139 The number of builds that may run in parallel on the machine.
1140
1141 @item @code{speed} (default: @code{1.0})
1142 A ``relative speed factor''. The offload scheduler will tend to prefer
1143 machines with a higher speed factor.
1144
1145 @item @code{features} (default: @code{'()})
1146 A list of strings denoting specific features supported by the machine.
1147 An example is @code{"kvm"} for machines that have the KVM Linux modules
1148 and corresponding hardware support. Derivations can request features by
1149 name, and they will be scheduled on matching build machines.
1150
1151 @end table
1152 @end deftp
1153
1154 The @command{guix} command must be in the search path on the build
1155 machines. You can check whether this is the case by running:
1156
1157 @example
1158 ssh build-machine guix repl --version
1159 @end example
1160
1161 There is one last thing to do once @file{machines.scm} is in place. As
1162 explained above, when offloading, files are transferred back and forth
1163 between the machine stores. For this to work, you first need to
1164 generate a key pair on each machine to allow the daemon to export signed
1165 archives of files from the store (@pxref{Invoking guix archive}):
1166
1167 @example
1168 # guix archive --generate-key
1169 @end example
1170
1171 @noindent
1172 Each build machine must authorize the key of the master machine so that
1173 it accepts store items it receives from the master:
1174
1175 @example
1176 # guix archive --authorize < master-public-key.txt
1177 @end example
1178
1179 @noindent
1180 Likewise, the master machine must authorize the key of each build machine.
1181
1182 All the fuss with keys is here to express pairwise mutual trust
1183 relations between the master and the build machines. Concretely, when
1184 the master receives files from a build machine (and @i{vice versa}), its
1185 build daemon can make sure they are genuine, have not been tampered
1186 with, and that they are signed by an authorized key.
1187
1188 @cindex offload test
1189 To test whether your setup is operational, run this command on the
1190 master node:
1191
1192 @example
1193 # guix offload test
1194 @end example
1195
1196 This will attempt to connect to each of the build machines specified in
1197 @file{/etc/guix/machines.scm}, make sure Guile and the Guix modules are
1198 available on each machine, attempt to export to the machine and import
1199 from it, and report any error in the process.
1200
1201 If you want to test a different machine file, just specify it on the
1202 command line:
1203
1204 @example
1205 # guix offload test machines-qualif.scm
1206 @end example
1207
1208 Last, you can test the subset of the machines whose name matches a
1209 regular expression like this:
1210
1211 @example
1212 # guix offload test machines.scm '\.gnu\.org$'
1213 @end example
1214
1215 @cindex offload status
1216 To display the current load of all build hosts, run this command on the
1217 main node:
1218
1219 @example
1220 # guix offload status
1221 @end example
1222
1223
1224 @node SELinux Support
1225 @subsection SELinux Support
1226
1227 @cindex SELinux, daemon policy
1228 @cindex mandatory access control, SELinux
1229 @cindex security, guix-daemon
1230 Guix includes an SELinux policy file at @file{etc/guix-daemon.cil} that
1231 can be installed on a system where SELinux is enabled, in order to label
1232 Guix files and to specify the expected behavior of the daemon. Since
1233 Guix System does not provide an SELinux base policy, the daemon policy cannot
1234 be used on Guix System.
1235
1236 @subsubsection Installing the SELinux policy
1237 @cindex SELinux, policy installation
1238 To install the policy run this command as root:
1239
1240 @example
1241 semodule -i etc/guix-daemon.cil
1242 @end example
1243
1244 Then relabel the file system with @code{restorecon} or by a different
1245 mechanism provided by your system.
1246
1247 Once the policy is installed, the file system has been relabeled, and
1248 the daemon has been restarted, it should be running in the
1249 @code{guix_daemon_t} context. You can confirm this with the following
1250 command:
1251
1252 @example
1253 ps -Zax | grep guix-daemon
1254 @end example
1255
1256 Monitor the SELinux log files as you run a command like @code{guix build
1257 hello} to convince yourself that SELinux permits all necessary
1258 operations.
1259
1260 @subsubsection Limitations
1261 @cindex SELinux, limitations
1262
1263 This policy is not perfect. Here is a list of limitations or quirks
1264 that should be considered when deploying the provided SELinux policy for
1265 the Guix daemon.
1266
1267 @enumerate
1268 @item
1269 @code{guix_daemon_socket_t} isn’t actually used. None of the socket
1270 operations involve contexts that have anything to do with
1271 @code{guix_daemon_socket_t}. It doesn’t hurt to have this unused label,
1272 but it would be preferrable to define socket rules for only this label.
1273
1274 @item
1275 @code{guix gc} cannot access arbitrary links to profiles. By design,
1276 the file label of the destination of a symlink is independent of the
1277 file label of the link itself. Although all profiles under
1278 $localstatedir are labelled, the links to these profiles inherit the
1279 label of the directory they are in. For links in the user’s home
1280 directory this will be @code{user_home_t}. But for links from the root
1281 user’s home directory, or @file{/tmp}, or the HTTP server’s working
1282 directory, etc, this won’t work. @code{guix gc} would be prevented from
1283 reading and following these links.
1284
1285 @item
1286 The daemon’s feature to listen for TCP connections might no longer work.
1287 This might require extra rules, because SELinux treats network sockets
1288 differently from files.
1289
1290 @item
1291 Currently all files with a name matching the regular expression
1292 @code{/gnu/store/.+-(guix-.+|profile)/bin/guix-daemon} are assigned the
1293 label @code{guix_daemon_exec_t}; this means that @emph{any} file with
1294 that name in any profile would be permitted to run in the
1295 @code{guix_daemon_t} domain. This is not ideal. An attacker could
1296 build a package that provides this executable and convince a user to
1297 install and run it, which lifts it into the @code{guix_daemon_t} domain.
1298 At that point SELinux could not prevent it from accessing files that are
1299 allowed for processes in that domain.
1300
1301 We could generate a much more restrictive policy at installation time,
1302 so that only the @emph{exact} file name of the currently installed
1303 @code{guix-daemon} executable would be labelled with
1304 @code{guix_daemon_exec_t}, instead of using a broad regular expression.
1305 The downside is that root would have to install or upgrade the policy at
1306 installation time whenever the Guix package that provides the
1307 effectively running @code{guix-daemon} executable is upgraded.
1308 @end enumerate
1309
1310 @node Invoking guix-daemon
1311 @section Invoking @command{guix-daemon}
1312
1313 The @command{guix-daemon} program implements all the functionality to
1314 access the store. This includes launching build processes, running the
1315 garbage collector, querying the availability of a build result, etc. It
1316 is normally run as @code{root} like this:
1317
1318 @example
1319 # guix-daemon --build-users-group=guixbuild
1320 @end example
1321
1322 @noindent
1323 For details on how to set it up, @pxref{Setting Up the Daemon}.
1324
1325 @cindex chroot
1326 @cindex container, build environment
1327 @cindex build environment
1328 @cindex reproducible builds
1329 By default, @command{guix-daemon} launches build processes under
1330 different UIDs, taken from the build group specified with
1331 @code{--build-users-group}. In addition, each build process is run in a
1332 chroot environment that only contains the subset of the store that the
1333 build process depends on, as specified by its derivation
1334 (@pxref{Programming Interface, derivation}), plus a set of specific
1335 system directories. By default, the latter contains @file{/dev} and
1336 @file{/dev/pts}. Furthermore, on GNU/Linux, the build environment is a
1337 @dfn{container}: in addition to having its own file system tree, it has
1338 a separate mount name space, its own PID name space, network name space,
1339 etc. This helps achieve reproducible builds (@pxref{Features}).
1340
1341 When the daemon performs a build on behalf of the user, it creates a
1342 build directory under @file{/tmp} or under the directory specified by
1343 its @code{TMPDIR} environment variable. This directory is shared with
1344 the container for the duration of the build, though within the container,
1345 the build tree is always called @file{/tmp/guix-build-@var{name}.drv-0}.
1346
1347 The build directory is automatically deleted upon completion, unless the
1348 build failed and the client specified @option{--keep-failed}
1349 (@pxref{Invoking guix build, @option{--keep-failed}}).
1350
1351 The daemon listens for connections and spawns one sub-process for each session
1352 started by a client (one of the @command{guix} sub-commands.) The
1353 @command{guix processes} command allows you to get an overview of the activity
1354 on your system by viewing each of the active sessions and clients.
1355 @xref{Invoking guix processes}, for more information.
1356
1357 The following command-line options are supported:
1358
1359 @table @code
1360 @item --build-users-group=@var{group}
1361 Take users from @var{group} to run build processes (@pxref{Setting Up
1362 the Daemon, build users}).
1363
1364 @item --no-substitutes
1365 @cindex substitutes
1366 Do not use substitutes for build products. That is, always build things
1367 locally instead of allowing downloads of pre-built binaries
1368 (@pxref{Substitutes}).
1369
1370 When the daemon runs with @code{--no-substitutes}, clients can still
1371 explicitly enable substitution @i{via} the @code{set-build-options}
1372 remote procedure call (@pxref{The Store}).
1373
1374 @item --substitute-urls=@var{urls}
1375 @anchor{daemon-substitute-urls}
1376 Consider @var{urls} the default whitespace-separated list of substitute
1377 source URLs. When this option is omitted,
1378 @indicateurl{https://@value{SUBSTITUTE-SERVER}} is used.
1379
1380 This means that substitutes may be downloaded from @var{urls}, as long
1381 as they are signed by a trusted signature (@pxref{Substitutes}).
1382
1383 @cindex offloading
1384 @item --no-offload
1385 Do not use offload builds to other machines (@pxref{Daemon Offload
1386 Setup}). That is, always build things locally instead of offloading
1387 builds to remote machines.
1388
1389 @item --cache-failures
1390 Cache build failures. By default, only successful builds are cached.
1391
1392 When this option is used, @command{guix gc --list-failures} can be used
1393 to query the set of store items marked as failed; @command{guix gc
1394 --clear-failures} removes store items from the set of cached failures.
1395 @xref{Invoking guix gc}.
1396
1397 @item --cores=@var{n}
1398 @itemx -c @var{n}
1399 Use @var{n} CPU cores to build each derivation; @code{0} means as many
1400 as available.
1401
1402 The default value is @code{0}, but it may be overridden by clients, such
1403 as the @code{--cores} option of @command{guix build} (@pxref{Invoking
1404 guix build}).
1405
1406 The effect is to define the @code{NIX_BUILD_CORES} environment variable
1407 in the build process, which can then use it to exploit internal
1408 parallelism---for instance, by running @code{make -j$NIX_BUILD_CORES}.
1409
1410 @item --max-jobs=@var{n}
1411 @itemx -M @var{n}
1412 Allow at most @var{n} build jobs in parallel. The default value is
1413 @code{1}. Setting it to @code{0} means that no builds will be performed
1414 locally; instead, the daemon will offload builds (@pxref{Daemon Offload
1415 Setup}), or simply fail.
1416
1417 @item --max-silent-time=@var{seconds}
1418 When the build or substitution process remains silent for more than
1419 @var{seconds}, terminate it and report a build failure.
1420
1421 The default value is @code{0}, which disables the timeout.
1422
1423 The value specified here can be overridden by clients (@pxref{Common
1424 Build Options, @code{--max-silent-time}}).
1425
1426 @item --timeout=@var{seconds}
1427 Likewise, when the build or substitution process lasts for more than
1428 @var{seconds}, terminate it and report a build failure.
1429
1430 The default value is @code{0}, which disables the timeout.
1431
1432 The value specified here can be overridden by clients (@pxref{Common
1433 Build Options, @code{--timeout}}).
1434
1435 @item --rounds=@var{N}
1436 Build each derivation @var{n} times in a row, and raise an error if
1437 consecutive build results are not bit-for-bit identical. Note that this
1438 setting can be overridden by clients such as @command{guix build}
1439 (@pxref{Invoking guix build}).
1440
1441 When used in conjunction with @option{--keep-failed}, the differing
1442 output is kept in the store, under @file{/gnu/store/@dots{}-check}.
1443 This makes it easy to look for differences between the two results.
1444
1445 @item --debug
1446 Produce debugging output.
1447
1448 This is useful to debug daemon start-up issues, but then it may be
1449 overridden by clients, for example the @code{--verbosity} option of
1450 @command{guix build} (@pxref{Invoking guix build}).
1451
1452 @item --chroot-directory=@var{dir}
1453 Add @var{dir} to the build chroot.
1454
1455 Doing this may change the result of build processes---for instance if
1456 they use optional dependencies found in @var{dir} when it is available,
1457 and not otherwise. For that reason, it is not recommended to do so.
1458 Instead, make sure that each derivation declares all the inputs that it
1459 needs.
1460
1461 @item --disable-chroot
1462 Disable chroot builds.
1463
1464 Using this option is not recommended since, again, it would allow build
1465 processes to gain access to undeclared dependencies. It is necessary,
1466 though, when @command{guix-daemon} is running under an unprivileged user
1467 account.
1468
1469 @item --log-compression=@var{type}
1470 Compress build logs according to @var{type}, one of @code{gzip},
1471 @code{bzip2}, or @code{none}.
1472
1473 Unless @code{--lose-logs} is used, all the build logs are kept in the
1474 @var{localstatedir}. To save space, the daemon automatically compresses
1475 them with bzip2 by default.
1476
1477 @item --disable-deduplication
1478 @cindex deduplication
1479 Disable automatic file ``deduplication'' in the store.
1480
1481 By default, files added to the store are automatically ``deduplicated'':
1482 if a newly added file is identical to another one found in the store,
1483 the daemon makes the new file a hard link to the other file. This can
1484 noticeably reduce disk usage, at the expense of slightly increased
1485 input/output load at the end of a build process. This option disables
1486 this optimization.
1487
1488 @item --gc-keep-outputs[=yes|no]
1489 Tell whether the garbage collector (GC) must keep outputs of live
1490 derivations.
1491
1492 @cindex GC roots
1493 @cindex garbage collector roots
1494 When set to ``yes'', the GC will keep the outputs of any live derivation
1495 available in the store---the @code{.drv} files. The default is ``no'',
1496 meaning that derivation outputs are kept only if they are reachable from a GC
1497 root. @xref{Invoking guix gc}, for more on GC roots.
1498
1499 @item --gc-keep-derivations[=yes|no]
1500 Tell whether the garbage collector (GC) must keep derivations
1501 corresponding to live outputs.
1502
1503 When set to ``yes'', as is the case by default, the GC keeps
1504 derivations---i.e., @code{.drv} files---as long as at least one of their
1505 outputs is live. This allows users to keep track of the origins of
1506 items in their store. Setting it to ``no'' saves a bit of disk space.
1507
1508 In this way, setting @code{--gc-keep-derivations} to ``yes'' causes liveness
1509 to flow from outputs to derivations, and setting @code{--gc-keep-outputs} to
1510 ``yes'' causes liveness to flow from derivations to outputs. When both are
1511 set to ``yes'', the effect is to keep all the build prerequisites (the
1512 sources, compiler, libraries, and other build-time tools) of live objects in
1513 the store, regardless of whether these prerequisites are reachable from a GC
1514 root. This is convenient for developers since it saves rebuilds or downloads.
1515
1516 @item --impersonate-linux-2.6
1517 On Linux-based systems, impersonate Linux 2.6. This means that the
1518 kernel's @code{uname} system call will report 2.6 as the release number.
1519
1520 This might be helpful to build programs that (usually wrongfully) depend
1521 on the kernel version number.
1522
1523 @item --lose-logs
1524 Do not keep build logs. By default they are kept under
1525 @code{@var{localstatedir}/guix/log}.
1526
1527 @item --system=@var{system}
1528 Assume @var{system} as the current system type. By default it is the
1529 architecture/kernel pair found at configure time, such as
1530 @code{x86_64-linux}.
1531
1532 @item --listen=@var{endpoint}
1533 Listen for connections on @var{endpoint}. @var{endpoint} is interpreted
1534 as the file name of a Unix-domain socket if it starts with
1535 @code{/} (slash sign). Otherwise, @var{endpoint} is interpreted as a
1536 host name or host name and port to listen to. Here are a few examples:
1537
1538 @table @code
1539 @item --listen=/gnu/var/daemon
1540 Listen for connections on the @file{/gnu/var/daemon} Unix-domain socket,
1541 creating it if needed.
1542
1543 @item --listen=localhost
1544 @cindex daemon, remote access
1545 @cindex remote access to the daemon
1546 @cindex daemon, cluster setup
1547 @cindex clusters, daemon setup
1548 Listen for TCP connections on the network interface corresponding to
1549 @code{localhost}, on port 44146.
1550
1551 @item --listen=128.0.0.42:1234
1552 Listen for TCP connections on the network interface corresponding to
1553 @code{128.0.0.42}, on port 1234.
1554 @end table
1555
1556 This option can be repeated multiple times, in which case
1557 @command{guix-daemon} accepts connections on all the specified
1558 endpoints. Users can tell client commands what endpoint to connect to
1559 by setting the @code{GUIX_DAEMON_SOCKET} environment variable
1560 (@pxref{The Store, @code{GUIX_DAEMON_SOCKET}}).
1561
1562 @quotation Note
1563 The daemon protocol is @emph{unauthenticated and unencrypted}. Using
1564 @code{--listen=@var{host}} is suitable on local networks, such as
1565 clusters, where only trusted nodes may connect to the build daemon. In
1566 other cases where remote access to the daemon is needed, we recommend
1567 using Unix-domain sockets along with SSH.
1568 @end quotation
1569
1570 When @code{--listen} is omitted, @command{guix-daemon} listens for
1571 connections on the Unix-domain socket located at
1572 @file{@var{localstatedir}/guix/daemon-socket/socket}.
1573 @end table
1574
1575
1576 @node Application Setup
1577 @section Application Setup
1578
1579 @cindex foreign distro
1580 When using Guix on top of GNU/Linux distribution other than Guix System---a
1581 so-called @dfn{foreign distro}---a few additional steps are needed to
1582 get everything in place. Here are some of them.
1583
1584 @subsection Locales
1585
1586 @anchor{locales-and-locpath}
1587 @cindex locales, when not on Guix System
1588 @vindex LOCPATH
1589 @vindex GUIX_LOCPATH
1590 Packages installed @i{via} Guix will not use the locale data of the
1591 host system. Instead, you must first install one of the locale packages
1592 available with Guix and then define the @code{GUIX_LOCPATH} environment
1593 variable:
1594
1595 @example
1596 $ guix install glibc-locales
1597 $ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
1598 @end example
1599
1600 Note that the @code{glibc-locales} package contains data for all the
1601 locales supported by the GNU@tie{}libc and weighs in at around
1602 917@tie{}MiB. Alternatively, the @code{glibc-utf8-locales} is smaller but
1603 limited to a few UTF-8 locales.
1604
1605 The @code{GUIX_LOCPATH} variable plays a role similar to @code{LOCPATH}
1606 (@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library Reference
1607 Manual}). There are two important differences though:
1608
1609 @enumerate
1610 @item
1611 @code{GUIX_LOCPATH} is honored only by the libc in Guix, and not by the libc
1612 provided by foreign distros. Thus, using @code{GUIX_LOCPATH} allows you
1613 to make sure the programs of the foreign distro will not end up loading
1614 incompatible locale data.
1615
1616 @item
1617 libc suffixes each entry of @code{GUIX_LOCPATH} with @code{/X.Y}, where
1618 @code{X.Y} is the libc version---e.g., @code{2.22}. This means that,
1619 should your Guix profile contain a mixture of programs linked against
1620 different libc version, each libc version will only try to load locale
1621 data in the right format.
1622 @end enumerate
1623
1624 This is important because the locale data format used by different libc
1625 versions may be incompatible.
1626
1627 @subsection Name Service Switch
1628
1629 @cindex name service switch, glibc
1630 @cindex NSS (name service switch), glibc
1631 @cindex nscd (name service caching daemon)
1632 @cindex name service caching daemon (nscd)
1633 When using Guix on a foreign distro, we @emph{strongly recommend} that
1634 the system run the GNU C library's @dfn{name service cache daemon},
1635 @command{nscd}, which should be listening on the
1636 @file{/var/run/nscd/socket} socket. Failing to do that, applications
1637 installed with Guix may fail to look up host names or user accounts, or
1638 may even crash. The next paragraphs explain why.
1639
1640 @cindex @file{nsswitch.conf}
1641 The GNU C library implements a @dfn{name service switch} (NSS), which is
1642 an extensible mechanism for ``name lookups'' in general: host name
1643 resolution, user accounts, and more (@pxref{Name Service Switch,,, libc,
1644 The GNU C Library Reference Manual}).
1645
1646 @cindex Network information service (NIS)
1647 @cindex NIS (Network information service)
1648 Being extensible, the NSS supports @dfn{plugins}, which provide new name
1649 lookup implementations: for example, the @code{nss-mdns} plugin allow
1650 resolution of @code{.local} host names, the @code{nis} plugin allows
1651 user account lookup using the Network information service (NIS), and so
1652 on. These extra ``lookup services'' are configured system-wide in
1653 @file{/etc/nsswitch.conf}, and all the programs running on the system
1654 honor those settings (@pxref{NSS Configuration File,,, libc, The GNU C
1655 Reference Manual}).
1656
1657 When they perform a name lookup---for instance by calling the
1658 @code{getaddrinfo} function in C---applications first try to connect to
1659 the nscd; on success, nscd performs name lookups on their behalf. If
1660 the nscd is not running, then they perform the name lookup by
1661 themselves, by loading the name lookup services into their own address
1662 space and running it. These name lookup services---the
1663 @file{libnss_*.so} files---are @code{dlopen}'d, but they may come from
1664 the host system's C library, rather than from the C library the
1665 application is linked against (the C library coming from Guix).
1666
1667 And this is where the problem is: if your application is linked against
1668 Guix's C library (say, glibc 2.24) and tries to load NSS plugins from
1669 another C library (say, @code{libnss_mdns.so} for glibc 2.22), it will
1670 likely crash or have its name lookups fail unexpectedly.
1671
1672 Running @command{nscd} on the system, among other advantages, eliminates
1673 this binary incompatibility problem because those @code{libnss_*.so}
1674 files are loaded in the @command{nscd} process, not in applications
1675 themselves.
1676
1677 @subsection X11 Fonts
1678
1679 @cindex fonts
1680 The majority of graphical applications use Fontconfig to locate and
1681 load fonts and perform X11-client-side rendering. The @code{fontconfig}
1682 package in Guix looks for fonts in @file{$HOME/.guix-profile}
1683 by default. Thus, to allow graphical applications installed with Guix
1684 to display fonts, you have to install fonts with Guix as well.
1685 Essential font packages include @code{gs-fonts}, @code{font-dejavu}, and
1686 @code{font-gnu-freefont-ttf}.
1687
1688 @cindex @code{fc-cache}
1689 @cindex font cache
1690 Once you have installed or removed fonts, or when you notice an
1691 application that does not find fonts, you may need to install Fontconfig
1692 and to force an update of its font cache by running:
1693
1694 @example
1695 guix install fontconfig
1696 fc-cache -rv
1697 @end example
1698
1699 To display text written in Chinese languages, Japanese, or Korean in
1700 graphical applications, consider installing
1701 @code{font-adobe-source-han-sans} or @code{font-wqy-zenhei}. The former
1702 has multiple outputs, one per language family (@pxref{Packages with
1703 Multiple Outputs}). For instance, the following command installs fonts
1704 for Chinese languages:
1705
1706 @example
1707 guix install font-adobe-source-han-sans:cn
1708 @end example
1709
1710 @cindex @code{xterm}
1711 Older programs such as @command{xterm} do not use Fontconfig and instead
1712 rely on server-side font rendering. Such programs require to specify a
1713 full name of a font using XLFD (X Logical Font Description), like this:
1714
1715 @example
1716 -*-dejavu sans-medium-r-normal-*-*-100-*-*-*-*-*-1
1717 @end example
1718
1719 To be able to use such full names for the TrueType fonts installed in
1720 your Guix profile, you need to extend the font path of the X server:
1721
1722 @c Note: 'xset' does not accept symlinks so the trick below arranges to
1723 @c get at the real directory. See <https://bugs.gnu.org/30655>.
1724 @example
1725 xset +fp $(dirname $(readlink -f ~/.guix-profile/share/fonts/truetype/fonts.dir))
1726 @end example
1727
1728 @cindex @code{xlsfonts}
1729 After that, you can run @code{xlsfonts} (from @code{xlsfonts} package)
1730 to make sure your TrueType fonts are listed there.
1731
1732
1733 @subsection X.509 Certificates
1734
1735 @cindex @code{nss-certs}
1736 The @code{nss-certs} package provides X.509 certificates, which allow
1737 programs to authenticate Web servers accessed over HTTPS.
1738
1739 When using Guix on a foreign distro, you can install this package and
1740 define the relevant environment variables so that packages know where to
1741 look for certificates. @xref{X.509 Certificates}, for detailed
1742 information.
1743
1744 @subsection Emacs Packages
1745
1746 @cindex @code{emacs}
1747 When you install Emacs packages with Guix, the Elisp files are placed
1748 under the @file{share/emacs/site-lisp/} directory of the profile in
1749 which they are installed. The Elisp libraries are made available to
1750 Emacs through the @code{EMACSLOADPATH} environment variable, which is
1751 set when installing Emacs itself.
1752
1753 Additionally, autoload definitions are automatically evaluated at the
1754 initialization of Emacs, by the Guix-specific
1755 @code{guix-emacs-autoload-packages} procedure. If, for some reason, you
1756 want to avoid auto-loading the Emacs packages installed with Guix, you
1757 can do so by running Emacs with the @code{--no-site-file} option
1758 (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
1759
1760 @subsection The GCC toolchain
1761
1762 @cindex GCC
1763 @cindex ld-wrapper
1764
1765 Guix offers individual compiler packages such as @code{gcc} but if you
1766 are in need of a complete toolchain for compiling and linking source
1767 code what you really want is the @code{gcc-toolchain} package. This
1768 package provides a complete GCC toolchain for C/C++ development,
1769 including GCC itself, the GNU C Library (headers and binaries, plus
1770 debugging symbols in the @code{debug} output), Binutils, and a linker
1771 wrapper.
1772
1773 The wrapper's purpose is to inspect the @code{-L} and @code{-l} switches
1774 passed to the linker, add corresponding @code{-rpath} arguments, and
1775 invoke the actual linker with this new set of arguments. You can instruct the
1776 wrapper to refuse to link against libraries not in the store by setting the
1777 @code{GUIX_LD_WRAPPER_ALLOW_IMPURITIES} environment variable to @code{no}.
1778
1779 @node Upgrading Guix
1780 @section Upgrading Guix
1781
1782 @cindex Upgrading Guix, on a foreign distro
1783
1784 To upgrade Guix, run:
1785
1786 @example
1787 guix pull
1788 @end example
1789
1790 @xref{Invoking guix pull}, for more information.
1791
1792 @cindex upgrading Guix for the root user, on a foreign distro
1793 @cindex upgrading the Guix daemon, on a foreign distro
1794 @cindex @command{guix pull} for the root user, on a foreign distro
1795
1796 On a foreign distro, you can upgrade the build daemon by running:
1797
1798 @example
1799 sudo -i guix pull
1800 @end example
1801
1802 @noindent
1803 followed by (assuming your distro uses the systemd service management
1804 tool):
1805
1806 @example
1807 systemctl restart guix-daemon.service
1808 @end example
1809
1810 On Guix System, upgrading the daemon is achieved by reconfiguring the
1811 system (@pxref{Invoking guix system, @code{guix system reconfigure}}).
1812
1813 @c TODO What else?
1814
1815 @c *********************************************************************
1816 @node System Installation
1817 @chapter System Installation
1818
1819 @cindex installing Guix System
1820 @cindex Guix System, installation
1821 This section explains how to install Guix System
1822 on a machine. Guix, as a package manager, can
1823 also be installed on top of a running GNU/Linux system,
1824 @pxref{Installation}.
1825
1826 @ifinfo
1827 @quotation Note
1828 @c This paragraph is for people reading this from tty2 of the
1829 @c installation image.
1830 You are reading this documentation with an Info reader. For details on
1831 how to use it, hit the @key{RET} key (``return'' or ``enter'') on the
1832 link that follows: @pxref{Top, Info reader,, info-stnd, Stand-alone GNU
1833 Info}. Hit @kbd{l} afterwards to come back here.
1834
1835 Alternately, run @command{info info} in another tty to keep the manual
1836 available.
1837 @end quotation
1838 @end ifinfo
1839
1840 @menu
1841 * Limitations:: What you can expect.
1842 * Hardware Considerations:: Supported hardware.
1843 * USB Stick and DVD Installation:: Preparing the installation medium.
1844 * Preparing for Installation:: Networking, partitioning, etc.
1845 * Guided Graphical Installation:: Easy graphical installation.
1846 * Manual Installation:: Manual installation for wizards.
1847 * After System Installation:: When installation succeeded.
1848 * Installing Guix in a VM:: Guix System playground.
1849 * Building the Installation Image:: How this comes to be.
1850 @end menu
1851
1852 @node Limitations
1853 @section Limitations
1854
1855 We consider Guix System to be ready for a wide range of ``desktop'' and server
1856 use cases. The reliability guarantees it provides---transactional upgrades
1857 and rollbacks, reproducibility---make it a solid foundation.
1858
1859 Nevertheless, before you proceed with the installation, be aware of the
1860 following noteworthy limitations applicable to version @value{VERSION}:
1861
1862 @itemize
1863 @item
1864 Support for the Logical Volume Manager (LVM) is missing.
1865
1866 @item
1867 More and more system services are provided (@pxref{Services}), but some
1868 may be missing.
1869
1870 @item
1871 GNOME, Xfce, LXDE, and Enlightenment are available (@pxref{Desktop Services}),
1872 as well as a number of X11 window managers. However, KDE is currently
1873 missing.
1874 @end itemize
1875
1876 More than a disclaimer, this is an invitation to report issues (and success
1877 stories!), and to join us in improving it. @xref{Contributing}, for more
1878 info.
1879
1880
1881 @node Hardware Considerations
1882 @section Hardware Considerations
1883
1884 @cindex hardware support on Guix System
1885 GNU@tie{}Guix focuses on respecting the user's computing freedom. It
1886 builds around the kernel Linux-libre, which means that only hardware for
1887 which free software drivers and firmware exist is supported. Nowadays,
1888 a wide range of off-the-shelf hardware is supported on
1889 GNU/Linux-libre---from keyboards to graphics cards to scanners and
1890 Ethernet controllers. Unfortunately, there are still areas where
1891 hardware vendors deny users control over their own computing, and such
1892 hardware is not supported on Guix System.
1893
1894 @cindex WiFi, hardware support
1895 One of the main areas where free drivers or firmware are lacking is WiFi
1896 devices. WiFi devices known to work include those using Atheros chips
1897 (AR9271 and AR7010), which corresponds to the @code{ath9k} Linux-libre
1898 driver, and those using Broadcom/AirForce chips (BCM43xx with
1899 Wireless-Core Revision 5), which corresponds to the @code{b43-open}
1900 Linux-libre driver. Free firmware exists for both and is available
1901 out-of-the-box on Guix System, as part of @code{%base-firmware}
1902 (@pxref{operating-system Reference, @code{firmware}}).
1903
1904 @cindex RYF, Respects Your Freedom
1905 The @uref{https://www.fsf.org/, Free Software Foundation} runs
1906 @uref{https://www.fsf.org/ryf, @dfn{Respects Your Freedom}} (RYF), a
1907 certification program for hardware products that respect your freedom
1908 and your privacy and ensure that you have control over your device. We
1909 encourage you to check the list of RYF-certified devices.
1910
1911 Another useful resource is the @uref{https://www.h-node.org/, H-Node}
1912 web site. It contains a catalog of hardware devices with information
1913 about their support in GNU/Linux.
1914
1915
1916 @node USB Stick and DVD Installation
1917 @section USB Stick and DVD Installation
1918
1919 An ISO-9660 installation image that can be written to a USB stick or
1920 burnt to a DVD can be downloaded from
1921 @indicateurl{@value{BASE-URL}/guix-system-install-@value{VERSION}.@var{system}.iso.xz},
1922 where @var{system} is one of:
1923
1924 @table @code
1925 @item x86_64-linux
1926 for a GNU/Linux system on Intel/AMD-compatible 64-bit CPUs;
1927
1928 @item i686-linux
1929 for a 32-bit GNU/Linux system on Intel-compatible CPUs.
1930 @end table
1931
1932 @c start duplication of authentication part from ``Binary Installation''
1933 Make sure to download the associated @file{.sig} file and to verify the
1934 authenticity of the image against it, along these lines:
1935
1936 @example
1937 $ wget @value{BASE-URL}/guix-system-install-@value{VERSION}.@var{system}.iso.xz.sig
1938 $ gpg --verify guix-system-install-@value{VERSION}.@var{system}.iso.xz.sig
1939 @end example
1940
1941 If that command fails because you do not have the required public key,
1942 then run this command to import it:
1943
1944 @example
1945 $ wget @value{OPENPGP-SIGNING-KEY-URL} \
1946 -qO - | gpg --import -
1947 @end example
1948
1949 @noindent
1950 and rerun the @code{gpg --verify} command.
1951
1952 Take note that a warning like ``This key is not certified with a trusted
1953 signature!'' is normal.
1954
1955 @c end duplication
1956
1957 This image contains the tools necessary for an installation.
1958 It is meant to be copied @emph{as is} to a large-enough USB stick or DVD.
1959
1960 @unnumberedsubsec Copying to a USB Stick
1961
1962 To copy the image to a USB stick, follow these steps:
1963
1964 @enumerate
1965 @item
1966 Decompress the image using the @command{xz} command:
1967
1968 @example
1969 xz -d guix-system-install-@value{VERSION}.@var{system}.iso.xz
1970 @end example
1971
1972 @item
1973 Insert a USB stick of 1@tie{}GiB or more into your machine, and determine
1974 its device name. Assuming that the USB stick is known as @file{/dev/sdX},
1975 copy the image with:
1976
1977 @example
1978 dd if=guix-system-install-@value{VERSION}.@var{system}.iso of=/dev/sdX
1979 sync
1980 @end example
1981
1982 Access to @file{/dev/sdX} usually requires root privileges.
1983 @end enumerate
1984
1985 @unnumberedsubsec Burning on a DVD
1986
1987 To copy the image to a DVD, follow these steps:
1988
1989 @enumerate
1990 @item
1991 Decompress the image using the @command{xz} command:
1992
1993 @example
1994 xz -d guix-system-install-@value{VERSION}.@var{system}.iso.xz
1995 @end example
1996
1997 @item
1998 Insert a blank DVD into your machine, and determine
1999 its device name. Assuming that the DVD drive is known as @file{/dev/srX},
2000 copy the image with:
2001
2002 @example
2003 growisofs -dvd-compat -Z /dev/srX=guix-system-install-@value{VERSION}.@var{system}.iso
2004 @end example
2005
2006 Access to @file{/dev/srX} usually requires root privileges.
2007 @end enumerate
2008
2009 @unnumberedsubsec Booting
2010
2011 Once this is done, you should be able to reboot the system and boot from
2012 the USB stick or DVD. The latter usually requires you to get in the
2013 BIOS or UEFI boot menu, where you can choose to boot from the USB stick.
2014 In order to boot from Libreboot, switch to the command mode by pressing
2015 the @kbd{c} key and type @command{search_grub usb}.
2016
2017 @xref{Installing Guix in a VM}, if, instead, you would like to install
2018 Guix System in a virtual machine (VM).
2019
2020
2021 @node Preparing for Installation
2022 @section Preparing for Installation
2023
2024 Once you have booted, you can use the guided graphical installer, which makes
2025 it easy to get started (@pxref{Guided Graphical Installation}). Alternately,
2026 if you are already familiar with GNU/Linux and if you want more control than
2027 what the graphical installer provides, you can choose the ``manual''
2028 installation process (@pxref{Manual Installation}).
2029
2030 The graphical installer is available on TTY1. You can obtain root shells on
2031 TTYs 3 to 6 by hitting @kbd{ctrl-alt-f3}, @kbd{ctrl-alt-f4}, etc. TTY2 shows
2032 this documentation and you can reach it with @kbd{ctrl-alt-f2}. Documentation
2033 is browsable using the Info reader commands (@pxref{Top,,, info-stnd,
2034 Stand-alone GNU Info}). The installation system runs the GPM mouse daemon,
2035 which allows you to select text with the left mouse button and to paste it
2036 with the middle button.
2037
2038 @quotation Note
2039 Installation requires access to the Internet so that any missing
2040 dependencies of your system configuration can be downloaded. See the
2041 ``Networking'' section below.
2042 @end quotation
2043
2044 @node Guided Graphical Installation
2045 @section Guided Graphical Installation
2046
2047 The graphical installer is a text-based user interface. It will guide you,
2048 with dialog boxes, through the steps needed to install GNU@tie{}Guix System.
2049
2050 The first dialog boxes allow you to set up the system as you use it during the
2051 installation: you can choose the language, keyboard layout, and set up
2052 networking, which will be used during the installation. The image below shows
2053 the networking dialog.
2054
2055 @image{images/installer-network,5in,, networking setup with the graphical installer}
2056
2057 Later steps allow you to partition your hard disk, as shown in the image
2058 below, to choose whether or not to use encrypted file systems, to enter the
2059 host name and root password, and to create an additional account, among other
2060 things.
2061
2062 @image{images/installer-partitions,5in,, partitioning with the graphical installer}
2063
2064 Note that, at any time, the installer allows you to exit the current
2065 installation step and resume at a previous step, as show in the image below.
2066
2067 @image{images/installer-resume,5in,, resuming the installation process}
2068
2069 Once you're done, the installer produces an operating system configuration and
2070 displays it (@pxref{Using the Configuration System}). At that point you can
2071 hit ``OK'' and installation will proceed. On success, you can reboot into the
2072 new system and enjoy. @xref{After System Installation}, for what's next!
2073
2074
2075 @node Manual Installation
2076 @section Manual Installation
2077
2078 This section describes how you would ``manually'' install GNU@tie{}Guix System
2079 on your machine. This option requires familiarity with GNU/Linux, with the
2080 shell, and with common administration tools. If you think this is not for
2081 you, consider using the guided graphical installer (@pxref{Guided Graphical
2082 Installation}).
2083
2084 The installation system provides root shells on TTYs 3 to 6; press
2085 @kbd{ctrl-alt-f3}, @kbd{ctrl-alt-f4}, and so on to reach them. It includes
2086 many common tools needed to install the system. But it is also a full-blown
2087 Guix System, which means that you can install additional packages, should you
2088 need it, using @command{guix package} (@pxref{Invoking guix package}).
2089
2090 @menu
2091 * Keyboard Layout and Networking and Partitioning:: Initial setup.
2092 * Proceeding with the Installation:: Installing.
2093 @end menu
2094
2095 @node Keyboard Layout and Networking and Partitioning
2096 @subsection Keyboard Layout, Networking, and Partitioning
2097
2098 Before you can install the system, you may want to adjust the keyboard layout,
2099 set up networking, and partition your target hard disk. This section will
2100 guide you through this.
2101
2102 @subsubsection Keyboard Layout
2103
2104 @cindex keyboard layout
2105 The installation image uses the US qwerty keyboard layout. If you want
2106 to change it, you can use the @command{loadkeys} command. For example,
2107 the following command selects the Dvorak keyboard layout:
2108
2109 @example
2110 loadkeys dvorak
2111 @end example
2112
2113 See the files under @file{/run/current-system/profile/share/keymaps} for
2114 a list of available keyboard layouts. Run @command{man loadkeys} for
2115 more information.
2116
2117 @subsubsection Networking
2118
2119 Run the following command to see what your network interfaces are called:
2120
2121 @example
2122 ifconfig -a
2123 @end example
2124
2125 @noindent
2126 @dots{} or, using the GNU/Linux-specific @command{ip} command:
2127
2128 @example
2129 ip address
2130 @end example
2131
2132 @c https://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
2133 Wired interfaces have a name starting with @samp{e}; for example, the
2134 interface corresponding to the first on-board Ethernet controller is
2135 called @samp{eno1}. Wireless interfaces have a name starting with
2136 @samp{w}, like @samp{w1p2s0}.
2137
2138 @table @asis
2139 @item Wired connection
2140 To configure a wired network run the following command, substituting
2141 @var{interface} with the name of the wired interface you want to use.
2142
2143 @example
2144 ifconfig @var{interface} up
2145 @end example
2146
2147 @noindent
2148 @dots{} or, using the GNU/Linux-specific @command{ip} command:
2149
2150 @example
2151 ip link set @var{interface} up
2152 @end example
2153
2154 @item Wireless connection
2155 @cindex wireless
2156 @cindex WiFi
2157 To configure wireless networking, you can create a configuration file
2158 for the @command{wpa_supplicant} configuration tool (its location is not
2159 important) using one of the available text editors such as
2160 @command{nano}:
2161
2162 @example
2163 nano wpa_supplicant.conf
2164 @end example
2165
2166 As an example, the following stanza can go to this file and will work
2167 for many wireless networks, provided you give the actual SSID and
2168 passphrase for the network you are connecting to:
2169
2170 @example
2171 network=@{
2172 ssid="@var{my-ssid}"
2173 key_mgmt=WPA-PSK
2174 psk="the network's secret passphrase"
2175 @}
2176 @end example
2177
2178 Start the wireless service and run it in the background with the
2179 following command (substitute @var{interface} with the name of the
2180 network interface you want to use):
2181
2182 @example
2183 wpa_supplicant -c wpa_supplicant.conf -i @var{interface} -B
2184 @end example
2185
2186 Run @command{man wpa_supplicant} for more information.
2187 @end table
2188
2189 @cindex DHCP
2190 At this point, you need to acquire an IP address. On a network where IP
2191 addresses are automatically assigned @i{via} DHCP, you can run:
2192
2193 @example
2194 dhclient -v @var{interface}
2195 @end example
2196
2197 Try to ping a server to see if networking is up and running:
2198
2199 @example
2200 ping -c 3 gnu.org
2201 @end example
2202
2203 Setting up network access is almost always a requirement because the
2204 image does not contain all the software and tools that may be needed.
2205
2206 @cindex proxy, during system installation
2207 If you need HTTP and HTTPS access to go through a proxy, run the
2208 following command:
2209
2210 @example
2211 herd set-http-proxy guix-daemon @var{URL}
2212 @end example
2213
2214 @noindent
2215 where @var{URL} is the proxy URL, for example
2216 @code{http://example.org:8118}.
2217
2218 @cindex installing over SSH
2219 If you want to, you can continue the installation remotely by starting
2220 an SSH server:
2221
2222 @example
2223 herd start ssh-daemon
2224 @end example
2225
2226 Make sure to either set a password with @command{passwd}, or configure
2227 OpenSSH public key authentication before logging in.
2228
2229 @subsubsection Disk Partitioning
2230
2231 Unless this has already been done, the next step is to partition, and
2232 then format the target partition(s).
2233
2234 The installation image includes several partitioning tools, including
2235 Parted (@pxref{Overview,,, parted, GNU Parted User Manual}),
2236 @command{fdisk}, and @command{cfdisk}. Run it and set up your disk with
2237 the partition layout you want:
2238
2239 @example
2240 cfdisk
2241 @end example
2242
2243 If your disk uses the GUID Partition Table (GPT) format and you plan to
2244 install BIOS-based GRUB (which is the default), make sure a BIOS Boot
2245 Partition is available (@pxref{BIOS installation,,, grub, GNU GRUB
2246 manual}).
2247
2248 @cindex EFI, installation
2249 @cindex UEFI, installation
2250 @cindex ESP, EFI system partition
2251 If you instead wish to use EFI-based GRUB, a FAT32 @dfn{EFI System Partition}
2252 (ESP) is required. This partition can be mounted at @file{/boot/efi} for
2253 instance and must have the @code{esp} flag set. E.g., for @command{parted}:
2254
2255 @example
2256 parted /dev/sda set 1 esp on
2257 @end example
2258
2259 @quotation Note
2260 @vindex grub-bootloader
2261 @vindex grub-efi-bootloader
2262 Unsure whether to use EFI- or BIOS-based GRUB? If the directory
2263 @file{/sys/firmware/efi} exists in the installation image, then you should
2264 probably perform an EFI installation, using @code{grub-efi-bootloader}.
2265 Otherwise you should use the BIOS-based GRUB, known as
2266 @code{grub-bootloader}. @xref{Bootloader Configuration}, for more info on
2267 bootloaders.
2268 @end quotation
2269
2270 Once you are done partitioning the target hard disk drive, you have to
2271 create a file system on the relevant partition(s)@footnote{Currently
2272 Guix System only supports ext4, btrfs, and JFS file systems. In particular,
2273 code that reads file system UUIDs and labels only works for these file system
2274 types.}. For the ESP, if you have one and assuming it is
2275 @file{/dev/sda1}, run:
2276
2277 @example
2278 mkfs.fat -F32 /dev/sda1
2279 @end example
2280
2281 Preferably, assign file systems a label so that you can easily and
2282 reliably refer to them in @code{file-system} declarations (@pxref{File
2283 Systems}). This is typically done using the @code{-L} option of
2284 @command{mkfs.ext4} and related commands. So, assuming the target root
2285 partition lives at @file{/dev/sda2}, a file system with the label
2286 @code{my-root} can be created with:
2287
2288 @example
2289 mkfs.ext4 -L my-root /dev/sda2
2290 @end example
2291
2292 @cindex encrypted disk
2293 If you are instead planning to encrypt the root partition, you can use
2294 the Cryptsetup/LUKS utilities to do that (see @inlinefmtifelse{html,
2295 @uref{https://linux.die.net/man/8/cryptsetup, @code{man cryptsetup}},
2296 @code{man cryptsetup}} for more information.) Assuming you want to
2297 store the root partition on @file{/dev/sda2}, the command sequence would
2298 be along these lines:
2299
2300 @example
2301 cryptsetup luksFormat /dev/sda2
2302 cryptsetup open --type luks /dev/sda2 my-partition
2303 mkfs.ext4 -L my-root /dev/mapper/my-partition
2304 @end example
2305
2306 Once that is done, mount the target file system under @file{/mnt}
2307 with a command like (again, assuming @code{my-root} is the label of the
2308 root file system):
2309
2310 @example
2311 mount LABEL=my-root /mnt
2312 @end example
2313
2314 Also mount any other file systems you would like to use on the target
2315 system relative to this path. If you have opted for @file{/boot/efi} as an
2316 EFI mount point for example, mount it at @file{/mnt/boot/efi} now so it is
2317 found by @code{guix system init} afterwards.
2318
2319 Finally, if you plan to use one or more swap partitions (@pxref{Memory
2320 Concepts, swap space,, libc, The GNU C Library Reference Manual}), make
2321 sure to initialize them with @command{mkswap}. Assuming you have one
2322 swap partition on @file{/dev/sda3}, you would run:
2323
2324 @example
2325 mkswap /dev/sda3
2326 swapon /dev/sda3
2327 @end example
2328
2329 Alternatively, you may use a swap file. For example, assuming that in
2330 the new system you want to use the file @file{/swapfile} as a swap file,
2331 you would run@footnote{This example will work for many types of file
2332 systems (e.g., ext4). However, for copy-on-write file systems (e.g.,
2333 btrfs), the required steps may be different. For details, see the
2334 manual pages for @command{mkswap} and @command{swapon}.}:
2335
2336 @example
2337 # This is 10 GiB of swap space. Adjust "count" to change the size.
2338 dd if=/dev/zero of=/mnt/swapfile bs=1MiB count=10240
2339 # For security, make the file readable and writable only by root.
2340 chmod 600 /mnt/swapfile
2341 mkswap /mnt/swapfile
2342 swapon /mnt/swapfile
2343 @end example
2344
2345 Note that if you have encrypted the root partition and created a swap
2346 file in its file system as described above, then the encryption also
2347 protects the swap file, just like any other file in that file system.
2348
2349 @node Proceeding with the Installation
2350 @subsection Proceeding with the Installation
2351
2352 With the target partitions ready and the target root mounted on
2353 @file{/mnt}, we're ready to go. First, run:
2354
2355 @example
2356 herd start cow-store /mnt
2357 @end example
2358
2359 This makes @file{/gnu/store} copy-on-write, such that packages added to it
2360 during the installation phase are written to the target disk on @file{/mnt}
2361 rather than kept in memory. This is necessary because the first phase of
2362 the @command{guix system init} command (see below) entails downloads or
2363 builds to @file{/gnu/store} which, initially, is an in-memory file system.
2364
2365 Next, you have to edit a file and
2366 provide the declaration of the operating system to be installed. To
2367 that end, the installation system comes with three text editors. We
2368 recommend GNU nano (@pxref{Top,,, nano, GNU nano Manual}), which
2369 supports syntax highlighting and parentheses matching; other editors
2370 include GNU Zile (an Emacs clone), and
2371 nvi (a clone of the original BSD @command{vi} editor).
2372 We strongly recommend storing that file on the target root file system, say,
2373 as @file{/mnt/etc/config.scm}. Failing to do that, you will have lost your
2374 configuration file once you have rebooted into the newly-installed system.
2375
2376 @xref{Using the Configuration System}, for an overview of the
2377 configuration file. The example configurations discussed in that
2378 section are available under @file{/etc/configuration} in the
2379 installation image. Thus, to get started with a system configuration
2380 providing a graphical display server (a ``desktop'' system), you can run
2381 something along these lines:
2382
2383 @example
2384 # mkdir /mnt/etc
2385 # cp /etc/configuration/desktop.scm /mnt/etc/config.scm
2386 # nano /mnt/etc/config.scm
2387 @end example
2388
2389 You should pay attention to what your configuration file contains, and
2390 in particular:
2391
2392 @itemize
2393 @item
2394 Make sure the @code{bootloader-configuration} form refers to the target
2395 you want to install GRUB on. It should mention @code{grub-bootloader} if
2396 you are installing GRUB in the legacy way, or @code{grub-efi-bootloader}
2397 for newer UEFI systems. For legacy systems, the @code{target} field
2398 names a device, like @code{/dev/sda}; for UEFI systems it names a path
2399 to a mounted EFI partition, like @code{/boot/efi}; do make sure the path is
2400 currently mounted and a @code{file-system} entry is specified in your
2401 configuration.
2402
2403 @item
2404 Be sure that your file system labels match the value of their respective
2405 @code{device} fields in your @code{file-system} configuration, assuming
2406 your @code{file-system} configuration uses the @code{file-system-label}
2407 procedure in its @code{device} field.
2408
2409 @item
2410 If there are encrypted or RAID partitions, make sure to add a
2411 @code{mapped-devices} field to describe them (@pxref{Mapped Devices}).
2412 @end itemize
2413
2414 Once you are done preparing the configuration file, the new system must
2415 be initialized (remember that the target root file system is mounted
2416 under @file{/mnt}):
2417
2418 @example
2419 guix system init /mnt/etc/config.scm /mnt
2420 @end example
2421
2422 @noindent
2423 This copies all the necessary files and installs GRUB on
2424 @file{/dev/sdX}, unless you pass the @option{--no-bootloader} option. For
2425 more information, @pxref{Invoking guix system}. This command may trigger
2426 downloads or builds of missing packages, which can take some time.
2427
2428 Once that command has completed---and hopefully succeeded!---you can run
2429 @command{reboot} and boot into the new system. The @code{root} password
2430 in the new system is initially empty; other users' passwords need to be
2431 initialized by running the @command{passwd} command as @code{root},
2432 unless your configuration specifies otherwise
2433 (@pxref{user-account-password, user account passwords}).
2434 @xref{After System Installation}, for what's next!
2435
2436
2437 @node After System Installation
2438 @section After System Installation
2439
2440 Success, you've now booted into Guix System! From then on, you can update the
2441 system whenever you want by running, say:
2442
2443 @example
2444 guix pull
2445 sudo guix system reconfigure /etc/config.scm
2446 @end example
2447
2448 @noindent
2449 This builds a new system generation with the latest packages and services
2450 (@pxref{Invoking guix system}). We recommend doing that regularly so that
2451 your system includes the latest security updates (@pxref{Security Updates}).
2452
2453 @c See <https://lists.gnu.org/archive/html/guix-devel/2019-01/msg00268.html>.
2454 @quotation Note
2455 @cindex sudo vs. @command{guix pull}
2456 Note that @command{sudo guix} runs your user's @command{guix} command and
2457 @emph{not} root's, because @command{sudo} leaves @code{PATH} unchanged. To
2458 explicitly run root's @command{guix}, type @command{sudo -i guix @dots{}}.
2459
2460 The difference matters here, because @command{guix pull} updates
2461 the @command{guix} command and package definitions only for the user it is ran
2462 as. This means that if you choose to use @command{guix system reconfigure} in
2463 root's login shell, you'll need to @command{guix pull} separately.
2464 @end quotation
2465
2466 Join us on @code{#guix} on the Freenode IRC network or on
2467 @email{guix-devel@@gnu.org} to share your experience!
2468
2469
2470 @node Installing Guix in a VM
2471 @section Installing Guix in a Virtual Machine
2472
2473 @cindex virtual machine, Guix System installation
2474 @cindex virtual private server (VPS)
2475 @cindex VPS (virtual private server)
2476 If you'd like to install Guix System in a virtual machine (VM) or on a
2477 virtual private server (VPS) rather than on your beloved machine, this
2478 section is for you.
2479
2480 To boot a @uref{https://qemu.org/,QEMU} VM for installing Guix System in a
2481 disk image, follow these steps:
2482
2483 @enumerate
2484 @item
2485 First, retrieve and decompress the Guix system installation image as
2486 described previously (@pxref{USB Stick and DVD Installation}).
2487
2488 @item
2489 Create a disk image that will hold the installed system. To make a
2490 qcow2-formatted disk image, use the @command{qemu-img} command:
2491
2492 @example
2493 qemu-img create -f qcow2 guix-system.img 50G
2494 @end example
2495
2496 The resulting file will be much smaller than 50 GB (typically less than
2497 1 MB), but it will grow as the virtualized storage device is filled up.
2498
2499 @item
2500 Boot the USB installation image in an VM:
2501
2502 @example
2503 qemu-system-x86_64 -m 1024 -smp 1 -enable-kvm \
2504 -nic user,model=virtio-net-pci -boot menu=on,order=d \
2505 -drive file=guix-system.img \
2506 -drive media=cdrom,file=guix-system-install-@value{VERSION}.@var{system}.iso
2507 @end example
2508
2509 @code{-enable-kvm} is optional, but significantly improves performance,
2510 @pxref{Running Guix in a VM}.
2511
2512 @item
2513 You're now root in the VM, proceed with the installation process.
2514 @xref{Preparing for Installation}, and follow the instructions.
2515 @end enumerate
2516
2517 Once installation is complete, you can boot the system that's on your
2518 @file{guix-system.img} image. @xref{Running Guix in a VM}, for how to do
2519 that.
2520
2521 @node Building the Installation Image
2522 @section Building the Installation Image
2523
2524 @cindex installation image
2525 The installation image described above was built using the @command{guix
2526 system} command, specifically:
2527
2528 @example
2529 guix system disk-image --file-system-type=iso9660 \
2530 gnu/system/install.scm
2531 @end example
2532
2533 Have a look at @file{gnu/system/install.scm} in the source tree,
2534 and see also @ref{Invoking guix system} for more information
2535 about the installation image.
2536
2537 @section Building the Installation Image for ARM Boards
2538
2539 Many ARM boards require a specific variant of the
2540 @uref{https://www.denx.de/wiki/U-Boot/, U-Boot} bootloader.
2541
2542 If you build a disk image and the bootloader is not available otherwise
2543 (on another boot drive etc), it's advisable to build an image that
2544 includes the bootloader, specifically:
2545
2546 @example
2547 guix system disk-image --system=armhf-linux -e '((@@ (gnu system install) os-with-u-boot) (@@ (gnu system install) installation-os) "A20-OLinuXino-Lime2")'
2548 @end example
2549
2550 @code{A20-OLinuXino-Lime2} is the name of the board. If you specify an invalid
2551 board, a list of possible boards will be printed.
2552
2553 @c *********************************************************************
2554 @node Package Management
2555 @chapter Package Management
2556
2557 @cindex packages
2558 The purpose of GNU Guix is to allow users to easily install, upgrade, and
2559 remove software packages, without having to know about their build
2560 procedures or dependencies. Guix also goes beyond this obvious set of
2561 features.
2562
2563 This chapter describes the main features of Guix, as well as the
2564 package management tools it provides. Along with the command-line
2565 interface described below (@pxref{Invoking guix package, @code{guix
2566 package}}), you may also use the Emacs-Guix interface (@pxref{Top,,,
2567 emacs-guix, The Emacs-Guix Reference Manual}), after installing
2568 @code{emacs-guix} package (run @kbd{M-x guix-help} command to start
2569 with it):
2570
2571 @example
2572 guix install emacs-guix
2573 @end example
2574
2575 @menu
2576 * Features:: How Guix will make your life brighter.
2577 * Invoking guix package:: Package installation, removal, etc.
2578 * Substitutes:: Downloading pre-built binaries.
2579 * Packages with Multiple Outputs:: Single source package, multiple outputs.
2580 * Invoking guix gc:: Running the garbage collector.
2581 * Invoking guix pull:: Fetching the latest Guix and distribution.
2582 * Channels:: Customizing the package collection.
2583 * Invoking guix time-machine:: Running an older revision of Guix.
2584 * Inferiors:: Interacting with another revision of Guix.
2585 * Invoking guix describe:: Display information about your Guix revision.
2586 * Invoking guix archive:: Exporting and importing store files.
2587 @end menu
2588
2589 @node Features
2590 @section Features
2591
2592 When using Guix, each package ends up in the @dfn{package store}, in its
2593 own directory---something that resembles
2594 @file{/gnu/store/xxx-package-1.2}, where @code{xxx} is a base32 string.
2595
2596 Instead of referring to these directories, users have their own
2597 @dfn{profile}, which points to the packages that they actually want to
2598 use. These profiles are stored within each user's home directory, at
2599 @code{$HOME/.guix-profile}.
2600
2601 For example, @code{alice} installs GCC 4.7.2. As a result,
2602 @file{/home/alice/.guix-profile/bin/gcc} points to
2603 @file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Now, on the same machine,
2604 @code{bob} had already installed GCC 4.8.0. The profile of @code{bob}
2605 simply continues to point to
2606 @file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc}---i.e., both versions of GCC
2607 coexist on the same system without any interference.
2608
2609 The @command{guix package} command is the central tool to manage
2610 packages (@pxref{Invoking guix package}). It operates on the per-user
2611 profiles, and can be used @emph{with normal user privileges}.
2612
2613 @cindex transactions
2614 The command provides the obvious install, remove, and upgrade
2615 operations. Each invocation is actually a @emph{transaction}: either
2616 the specified operation succeeds, or nothing happens. Thus, if the
2617 @command{guix package} process is terminated during the transaction,
2618 or if a power outage occurs during the transaction, then the user's
2619 profile remains in its previous state, and remains usable.
2620
2621 In addition, any package transaction may be @emph{rolled back}. So, if,
2622 for example, an upgrade installs a new version of a package that turns
2623 out to have a serious bug, users may roll back to the previous instance
2624 of their profile, which was known to work well. Similarly, the global
2625 system configuration on Guix is subject to
2626 transactional upgrades and roll-back
2627 (@pxref{Using the Configuration System}).
2628
2629 All packages in the package store may be @emph{garbage-collected}.
2630 Guix can determine which packages are still referenced by user
2631 profiles, and remove those that are provably no longer referenced
2632 (@pxref{Invoking guix gc}). Users may also explicitly remove old
2633 generations of their profile so that the packages they refer to can be
2634 collected.
2635
2636 @cindex reproducibility
2637 @cindex reproducible builds
2638 Guix takes a @dfn{purely functional} approach to package
2639 management, as described in the introduction (@pxref{Introduction}).
2640 Each @file{/gnu/store} package directory name contains a hash of all the
2641 inputs that were used to build that package---compiler, libraries, build
2642 scripts, etc. This direct correspondence allows users to make sure a
2643 given package installation matches the current state of their
2644 distribution. It also helps maximize @dfn{build reproducibility}:
2645 thanks to the isolated build environments that are used, a given build
2646 is likely to yield bit-identical files when performed on different
2647 machines (@pxref{Invoking guix-daemon, container}).
2648
2649 @cindex substitutes
2650 This foundation allows Guix to support @dfn{transparent binary/source
2651 deployment}. When a pre-built binary for a @file{/gnu/store} item is
2652 available from an external source---a @dfn{substitute}, Guix just
2653 downloads it and unpacks it;
2654 otherwise, it builds the package from source, locally
2655 (@pxref{Substitutes}). Because build results are usually bit-for-bit
2656 reproducible, users do not have to trust servers that provide
2657 substitutes: they can force a local build and @emph{challenge} providers
2658 (@pxref{Invoking guix challenge}).
2659
2660 Control over the build environment is a feature that is also useful for
2661 developers. The @command{guix environment} command allows developers of
2662 a package to quickly set up the right development environment for their
2663 package, without having to manually install the dependencies of the
2664 package into their profile (@pxref{Invoking guix environment}).
2665
2666 @cindex replication, of software environments
2667 @cindex provenance tracking, of software artifacts
2668 All of Guix and its package definitions is version-controlled, and
2669 @command{guix pull} allows you to ``travel in time'' on the history of Guix
2670 itself (@pxref{Invoking guix pull}). This makes it possible to replicate a
2671 Guix instance on a different machine or at a later point in time, which in
2672 turn allows you to @emph{replicate complete software environments}, while
2673 retaining precise @dfn{provenance tracking} of the software.
2674
2675 @node Invoking guix package
2676 @section Invoking @command{guix package}
2677
2678 @cindex installing packages
2679 @cindex removing packages
2680 @cindex package installation
2681 @cindex package removal
2682 The @command{guix package} command is the tool that allows users to
2683 install, upgrade, and remove packages, as well as rolling back to
2684 previous configurations. It operates only on the user's own profile,
2685 and works with normal user privileges (@pxref{Features}). Its syntax
2686 is:
2687
2688 @example
2689 guix package @var{options}
2690 @end example
2691
2692 @cindex transactions
2693 Primarily, @var{options} specifies the operations to be performed during
2694 the transaction. Upon completion, a new profile is created, but
2695 previous @dfn{generations} of the profile remain available, should the user
2696 want to roll back.
2697
2698 For example, to remove @code{lua} and install @code{guile} and
2699 @code{guile-cairo} in a single transaction:
2700
2701 @example
2702 guix package -r lua -i guile guile-cairo
2703 @end example
2704
2705 @cindex aliases, for @command{guix package}
2706 For your convenience, we also provide the following aliases:
2707
2708 @itemize
2709 @item
2710 @command{guix search} is an alias for @command{guix package -s},
2711 @item
2712 @command{guix install} is an alias for @command{guix package -i},
2713 @item
2714 @command{guix remove} is an alias for @command{guix package -r},
2715 @item
2716 @command{guix upgrade} is an alias for @command{guix package -u},
2717 @item
2718 and @command{guix show} is an alias for @command{guix package --show=}.
2719 @end itemize
2720
2721 These aliases are less expressive than @command{guix package} and provide
2722 fewer options, so in some cases you'll probably want to use @command{guix
2723 package} directly.
2724
2725 @command{guix package} also supports a @dfn{declarative approach}
2726 whereby the user specifies the exact set of packages to be available and
2727 passes it @i{via} the @option{--manifest} option
2728 (@pxref{profile-manifest, @option{--manifest}}).
2729
2730 @cindex profile
2731 For each user, a symlink to the user's default profile is automatically
2732 created in @file{$HOME/.guix-profile}. This symlink always points to the
2733 current generation of the user's default profile. Thus, users can add
2734 @file{$HOME/.guix-profile/bin} to their @code{PATH} environment
2735 variable, and so on.
2736 @cindex search paths
2737 If you are not using Guix System, consider adding the
2738 following lines to your @file{~/.bash_profile} (@pxref{Bash Startup
2739 Files,,, bash, The GNU Bash Reference Manual}) so that newly-spawned
2740 shells get all the right environment variable definitions:
2741
2742 @example
2743 GUIX_PROFILE="$HOME/.guix-profile" ; \
2744 source "$HOME/.guix-profile/etc/profile"
2745 @end example
2746
2747 In a multi-user setup, user profiles are stored in a place registered as
2748 a @dfn{garbage-collector root}, which @file{$HOME/.guix-profile} points
2749 to (@pxref{Invoking guix gc}). That directory is normally
2750 @code{@var{localstatedir}/guix/profiles/per-user/@var{user}}, where
2751 @var{localstatedir} is the value passed to @code{configure} as
2752 @code{--localstatedir}, and @var{user} is the user name. The
2753 @file{per-user} directory is created when @command{guix-daemon} is
2754 started, and the @var{user} sub-directory is created by @command{guix
2755 package}.
2756
2757 The @var{options} can be among the following:
2758
2759 @table @code
2760
2761 @item --install=@var{package} @dots{}
2762 @itemx -i @var{package} @dots{}
2763 Install the specified @var{package}s.
2764
2765 Each @var{package} may specify either a simple package name, such as
2766 @code{guile}, or a package name followed by an at-sign and version number,
2767 such as @code{guile@@1.8.8} or simply @code{guile@@1.8} (in the latter
2768 case, the newest version prefixed by @code{1.8} is selected.)
2769
2770 If no version number is specified, the
2771 newest available version will be selected. In addition, @var{package}
2772 may contain a colon, followed by the name of one of the outputs of the
2773 package, as in @code{gcc:doc} or @code{binutils@@2.22:lib}
2774 (@pxref{Packages with Multiple Outputs}). Packages with a corresponding
2775 name (and optionally version) are searched for among the GNU
2776 distribution modules (@pxref{Package Modules}).
2777
2778 @cindex propagated inputs
2779 Sometimes packages have @dfn{propagated inputs}: these are dependencies
2780 that automatically get installed along with the required package
2781 (@pxref{package-propagated-inputs, @code{propagated-inputs} in
2782 @code{package} objects}, for information about propagated inputs in
2783 package definitions).
2784
2785 @anchor{package-cmd-propagated-inputs}
2786 An example is the GNU MPC library: its C header files refer to those of
2787 the GNU MPFR library, which in turn refer to those of the GMP library.
2788 Thus, when installing MPC, the MPFR and GMP libraries also get installed
2789 in the profile; removing MPC also removes MPFR and GMP---unless they had
2790 also been explicitly installed by the user.
2791
2792 Besides, packages sometimes rely on the definition of environment
2793 variables for their search paths (see explanation of
2794 @code{--search-paths} below). Any missing or possibly incorrect
2795 environment variable definitions are reported here.
2796
2797 @item --install-from-expression=@var{exp}
2798 @itemx -e @var{exp}
2799 Install the package @var{exp} evaluates to.
2800
2801 @var{exp} must be a Scheme expression that evaluates to a
2802 @code{<package>} object. This option is notably useful to disambiguate
2803 between same-named variants of a package, with expressions such as
2804 @code{(@@ (gnu packages base) guile-final)}.
2805
2806 Note that this option installs the first output of the specified
2807 package, which may be insufficient when needing a specific output of a
2808 multiple-output package.
2809
2810 @item --install-from-file=@var{file}
2811 @itemx -f @var{file}
2812 Install the package that the code within @var{file} evaluates to.
2813
2814 As an example, @var{file} might contain a definition like this
2815 (@pxref{Defining Packages}):
2816
2817 @lisp
2818 @include package-hello.scm
2819 @end lisp
2820
2821 Developers may find it useful to include such a @file{guix.scm} file
2822 in the root of their project source tree that can be used to test
2823 development snapshots and create reproducible development environments
2824 (@pxref{Invoking guix environment}).
2825
2826 @item --remove=@var{package} @dots{}
2827 @itemx -r @var{package} @dots{}
2828 Remove the specified @var{package}s.
2829
2830 As for @code{--install}, each @var{package} may specify a version number
2831 and/or output name in addition to the package name. For instance,
2832 @code{-r glibc:debug} would remove the @code{debug} output of
2833 @code{glibc}.
2834
2835 @item --upgrade[=@var{regexp} @dots{}]
2836 @itemx -u [@var{regexp} @dots{}]
2837 @cindex upgrading packages
2838 Upgrade all the installed packages. If one or more @var{regexp}s are
2839 specified, upgrade only installed packages whose name matches a
2840 @var{regexp}. Also see the @code{--do-not-upgrade} option below.
2841
2842 Note that this upgrades package to the latest version of packages found
2843 in the distribution currently installed. To update your distribution,
2844 you should regularly run @command{guix pull} (@pxref{Invoking guix
2845 pull}).
2846
2847 @item --do-not-upgrade[=@var{regexp} @dots{}]
2848 When used together with the @code{--upgrade} option, do @emph{not}
2849 upgrade any packages whose name matches a @var{regexp}. For example, to
2850 upgrade all packages in the current profile except those containing the
2851 substring ``emacs'':
2852
2853 @example
2854 $ guix package --upgrade . --do-not-upgrade emacs
2855 @end example
2856
2857 @item @anchor{profile-manifest}--manifest=@var{file}
2858 @itemx -m @var{file}
2859 @cindex profile declaration
2860 @cindex profile manifest
2861 Create a new generation of the profile from the manifest object
2862 returned by the Scheme code in @var{file}. This option can be repeated
2863 several times, in which case the manifests are concatenated.
2864
2865 This allows you to @emph{declare} the profile's contents rather than
2866 constructing it through a sequence of @code{--install} and similar
2867 commands. The advantage is that @var{file} can be put under version
2868 control, copied to different machines to reproduce the same profile, and
2869 so on.
2870
2871 @c FIXME: Add reference to (guix profile) documentation when available.
2872 @var{file} must return a @dfn{manifest} object, which is roughly a list
2873 of packages:
2874
2875 @findex packages->manifest
2876 @lisp
2877 (use-package-modules guile emacs)
2878
2879 (packages->manifest
2880 (list emacs
2881 guile-2.0
2882 ;; Use a specific package output.
2883 (list guile-2.0 "debug")))
2884 @end lisp
2885
2886 @findex specifications->manifest
2887 In this example we have to know which modules define the @code{emacs}
2888 and @code{guile-2.0} variables to provide the right
2889 @code{use-package-modules} line, which can be cumbersome. We can
2890 instead provide regular package specifications and let
2891 @code{specifications->manifest} look up the corresponding package
2892 objects, like this:
2893
2894 @lisp
2895 (specifications->manifest
2896 '("emacs" "guile@@2.2" "guile@@2.2:debug"))
2897 @end lisp
2898
2899 @item --roll-back
2900 @cindex rolling back
2901 @cindex undoing transactions
2902 @cindex transactions, undoing
2903 Roll back to the previous @dfn{generation} of the profile---i.e., undo
2904 the last transaction.
2905
2906 When combined with options such as @code{--install}, roll back occurs
2907 before any other actions.
2908
2909 When rolling back from the first generation that actually contains
2910 installed packages, the profile is made to point to the @dfn{zeroth
2911 generation}, which contains no files apart from its own metadata.
2912
2913 After having rolled back, installing, removing, or upgrading packages
2914 overwrites previous future generations. Thus, the history of the
2915 generations in a profile is always linear.
2916
2917 @item --switch-generation=@var{pattern}
2918 @itemx -S @var{pattern}
2919 @cindex generations
2920 Switch to a particular generation defined by @var{pattern}.
2921
2922 @var{pattern} may be either a generation number or a number prefixed
2923 with ``+'' or ``-''. The latter means: move forward/backward by a
2924 specified number of generations. For example, if you want to return to
2925 the latest generation after @code{--roll-back}, use
2926 @code{--switch-generation=+1}.
2927
2928 The difference between @code{--roll-back} and
2929 @code{--switch-generation=-1} is that @code{--switch-generation} will
2930 not make a zeroth generation, so if a specified generation does not
2931 exist, the current generation will not be changed.
2932
2933 @item --search-paths[=@var{kind}]
2934 @cindex search paths
2935 Report environment variable definitions, in Bash syntax, that may be
2936 needed in order to use the set of installed packages. These environment
2937 variables are used to specify @dfn{search paths} for files used by some
2938 of the installed packages.
2939
2940 For example, GCC needs the @code{CPATH} and @code{LIBRARY_PATH}
2941 environment variables to be defined so it can look for headers and
2942 libraries in the user's profile (@pxref{Environment Variables,,, gcc,
2943 Using the GNU Compiler Collection (GCC)}). If GCC and, say, the C
2944 library are installed in the profile, then @code{--search-paths} will
2945 suggest setting these variables to @code{@var{profile}/include} and
2946 @code{@var{profile}/lib}, respectively.
2947
2948 The typical use case is to define these environment variables in the
2949 shell:
2950
2951 @example
2952 $ eval `guix package --search-paths`
2953 @end example
2954
2955 @var{kind} may be one of @code{exact}, @code{prefix}, or @code{suffix},
2956 meaning that the returned environment variable definitions will either
2957 be exact settings, or prefixes or suffixes of the current value of these
2958 variables. When omitted, @var{kind} defaults to @code{exact}.
2959
2960 This option can also be used to compute the @emph{combined} search paths
2961 of several profiles. Consider this example:
2962
2963 @example
2964 $ guix package -p foo -i guile
2965 $ guix package -p bar -i guile-json
2966 $ guix package -p foo -p bar --search-paths
2967 @end example
2968
2969 The last command above reports about the @code{GUILE_LOAD_PATH}
2970 variable, even though, taken individually, neither @file{foo} nor
2971 @file{bar} would lead to that recommendation.
2972
2973
2974 @item --profile=@var{profile}
2975 @itemx -p @var{profile}
2976 Use @var{profile} instead of the user's default profile.
2977
2978 @var{profile} must be the name of a file that will be created upon
2979 completion. Concretely, @var{profile} will be a mere symbolic link
2980 (``symlink'') pointing to the actual profile where packages are
2981 installed:
2982
2983 @example
2984 $ guix install hello -p ~/code/my-profile
2985 @dots{}
2986 $ ~/code/my-profile/bin/hello
2987 Hello, world!
2988 @end example
2989
2990 All it takes to get rid of the profile is to remove this symlink and its
2991 siblings that point to specific generations:
2992
2993 @example
2994 $ rm ~/code/my-profile ~/code/my-profile-*-link
2995 @end example
2996
2997 @item --list-profiles
2998 List all the user's profiles:
2999
3000 @example
3001 $ guix package --list-profiles
3002 /home/charlie/.guix-profile
3003 /home/charlie/code/my-profile
3004 /home/charlie/code/devel-profile
3005 /home/charlie/tmp/test
3006 @end example
3007
3008 When running as root, list all the profiles of all the users.
3009
3010 @cindex collisions, in a profile
3011 @cindex colliding packages in profiles
3012 @cindex profile collisions
3013 @item --allow-collisions
3014 Allow colliding packages in the new profile. Use at your own risk!
3015
3016 By default, @command{guix package} reports as an error @dfn{collisions}
3017 in the profile. Collisions happen when two or more different versions
3018 or variants of a given package end up in the profile.
3019
3020 @item --bootstrap
3021 Use the bootstrap Guile to build the profile. This option is only
3022 useful to distribution developers.
3023
3024 @end table
3025
3026 In addition to these actions, @command{guix package} supports the
3027 following options to query the current state of a profile, or the
3028 availability of packages:
3029
3030 @table @option
3031
3032 @item --search=@var{regexp}
3033 @itemx -s @var{regexp}
3034 @cindex searching for packages
3035 List the available packages whose name, synopsis, or description matches
3036 @var{regexp} (in a case-insensitive fashion), sorted by relevance.
3037 Print all the metadata of matching packages in
3038 @code{recutils} format (@pxref{Top, GNU recutils databases,, recutils,
3039 GNU recutils manual}).
3040
3041 This allows specific fields to be extracted using the @command{recsel}
3042 command, for instance:
3043
3044 @example
3045 $ guix package -s malloc | recsel -p name,version,relevance
3046 name: jemalloc
3047 version: 4.5.0
3048 relevance: 6
3049
3050 name: glibc
3051 version: 2.25
3052 relevance: 1
3053
3054 name: libgc
3055 version: 7.6.0
3056 relevance: 1
3057 @end example
3058
3059 Similarly, to show the name of all the packages available under the
3060 terms of the GNU@tie{}LGPL version 3:
3061
3062 @example
3063 $ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
3064 name: elfutils
3065
3066 name: gmp
3067 @dots{}
3068 @end example
3069
3070 It is also possible to refine search results using several @code{-s} flags to
3071 @command{guix package}, or several arguments to @command{guix search}. For
3072 example, the following command returns a list of board games (this time using
3073 the @command{guix search} alias):
3074
3075 @example
3076 $ guix search '\<board\>' game | recsel -p name
3077 name: gnubg
3078 @dots{}
3079 @end example
3080
3081 If we were to omit @code{-s game}, we would also get software packages
3082 that deal with printed circuit boards; removing the angle brackets
3083 around @code{board} would further add packages that have to do with
3084 keyboards.
3085
3086 And now for a more elaborate example. The following command searches
3087 for cryptographic libraries, filters out Haskell, Perl, Python, and Ruby
3088 libraries, and prints the name and synopsis of the matching packages:
3089
3090 @example
3091 $ guix search crypto library | \
3092 recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
3093 @end example
3094
3095 @noindent
3096 @xref{Selection Expressions,,, recutils, GNU recutils manual}, for more
3097 information on @dfn{selection expressions} for @code{recsel -e}.
3098
3099 @item --show=@var{package}
3100 Show details about @var{package}, taken from the list of available packages, in
3101 @code{recutils} format (@pxref{Top, GNU recutils databases,, recutils, GNU
3102 recutils manual}).
3103
3104 @example
3105 $ guix package --show=python | recsel -p name,version
3106 name: python
3107 version: 2.7.6
3108
3109 name: python
3110 version: 3.3.5
3111 @end example
3112
3113 You may also specify the full name of a package to only get details about a
3114 specific version of it (this time using the @command{guix show} alias):
3115 @example
3116 $ guix show python@@3.4 | recsel -p name,version
3117 name: python
3118 version: 3.4.3
3119 @end example
3120
3121
3122
3123 @item --list-installed[=@var{regexp}]
3124 @itemx -I [@var{regexp}]
3125 List the currently installed packages in the specified profile, with the
3126 most recently installed packages shown last. When @var{regexp} is
3127 specified, list only installed packages whose name matches @var{regexp}.
3128
3129 For each installed package, print the following items, separated by
3130 tabs: the package name, its version string, the part of the package that
3131 is installed (for instance, @code{out} for the default output,
3132 @code{include} for its headers, etc.), and the path of this package in
3133 the store.
3134
3135 @item --list-available[=@var{regexp}]
3136 @itemx -A [@var{regexp}]
3137 List packages currently available in the distribution for this system
3138 (@pxref{GNU Distribution}). When @var{regexp} is specified, list only
3139 available packages whose name matches @var{regexp}.
3140
3141 For each package, print the following items separated by tabs: its name,
3142 its version string, the parts of the package (@pxref{Packages with
3143 Multiple Outputs}), and the source location of its definition.
3144
3145 @item --list-generations[=@var{pattern}]
3146 @itemx -l [@var{pattern}]
3147 @cindex generations
3148 Return a list of generations along with their creation dates; for each
3149 generation, show the installed packages, with the most recently
3150 installed packages shown last. Note that the zeroth generation is never
3151 shown.
3152
3153 For each installed package, print the following items, separated by
3154 tabs: the name of a package, its version string, the part of the package
3155 that is installed (@pxref{Packages with Multiple Outputs}), and the
3156 location of this package in the store.
3157
3158 When @var{pattern} is used, the command returns only matching
3159 generations. Valid patterns include:
3160
3161 @itemize
3162 @item @emph{Integers and comma-separated integers}. Both patterns denote
3163 generation numbers. For instance, @code{--list-generations=1} returns
3164 the first one.
3165
3166 And @code{--list-generations=1,8,2} outputs three generations in the
3167 specified order. Neither spaces nor trailing commas are allowed.
3168
3169 @item @emph{Ranges}. @code{--list-generations=2..9} prints the
3170 specified generations and everything in between. Note that the start of
3171 a range must be smaller than its end.
3172
3173 It is also possible to omit the endpoint. For example,
3174 @code{--list-generations=2..}, returns all generations starting from the
3175 second one.
3176
3177 @item @emph{Durations}. You can also get the last @emph{N}@tie{}days, weeks,
3178 or months by passing an integer along with the first letter of the
3179 duration. For example, @code{--list-generations=20d} lists generations
3180 that are up to 20 days old.
3181 @end itemize
3182
3183 @item --delete-generations[=@var{pattern}]
3184 @itemx -d [@var{pattern}]
3185 When @var{pattern} is omitted, delete all generations except the current
3186 one.
3187
3188 This command accepts the same patterns as @option{--list-generations}.
3189 When @var{pattern} is specified, delete the matching generations. When
3190 @var{pattern} specifies a duration, generations @emph{older} than the
3191 specified duration match. For instance, @code{--delete-generations=1m}
3192 deletes generations that are more than one month old.
3193
3194 If the current generation matches, it is @emph{not} deleted. Also, the
3195 zeroth generation is never deleted.
3196
3197 Note that deleting generations prevents rolling back to them.
3198 Consequently, this command must be used with care.
3199
3200 @end table
3201
3202 Finally, since @command{guix package} may actually start build
3203 processes, it supports all the common build options (@pxref{Common Build
3204 Options}). It also supports package transformation options, such as
3205 @option{--with-source} (@pxref{Package Transformation Options}).
3206 However, note that package transformations are lost when upgrading; to
3207 preserve transformations across upgrades, you should define your own
3208 package variant in a Guile module and add it to @code{GUIX_PACKAGE_PATH}
3209 (@pxref{Defining Packages}).
3210
3211 @node Substitutes
3212 @section Substitutes
3213
3214 @cindex substitutes
3215 @cindex pre-built binaries
3216 Guix supports transparent source/binary deployment, which means that it
3217 can either build things locally, or download pre-built items from a
3218 server, or both. We call these pre-built items @dfn{substitutes}---they
3219 are substitutes for local build results. In many cases, downloading a
3220 substitute is much faster than building things locally.
3221
3222 Substitutes can be anything resulting from a derivation build
3223 (@pxref{Derivations}). Of course, in the common case, they are
3224 pre-built package binaries, but source tarballs, for instance, which
3225 also result from derivation builds, can be available as substitutes.
3226
3227 @menu
3228 * Official Substitute Server:: One particular source of substitutes.
3229 * Substitute Server Authorization:: How to enable or disable substitutes.
3230 * Substitute Authentication:: How Guix verifies substitutes.
3231 * Proxy Settings:: How to get substitutes via proxy.
3232 * Substitution Failure:: What happens when substitution fails.
3233 * On Trusting Binaries:: How can you trust that binary blob?
3234 @end menu
3235
3236 @node Official Substitute Server
3237 @subsection Official Substitute Server
3238
3239 @cindex build farm
3240 The @code{@value{SUBSTITUTE-SERVER}} server is a front-end to an official build farm
3241 that builds packages from Guix continuously for some
3242 architectures, and makes them available as substitutes. This is the
3243 default source of substitutes; it can be overridden by passing the
3244 @option{--substitute-urls} option either to @command{guix-daemon}
3245 (@pxref{daemon-substitute-urls,, @code{guix-daemon --substitute-urls}})
3246 or to client tools such as @command{guix package}
3247 (@pxref{client-substitute-urls,, client @option{--substitute-urls}
3248 option}).
3249
3250 Substitute URLs can be either HTTP or HTTPS.
3251 HTTPS is recommended because communications are encrypted; conversely,
3252 using HTTP makes all communications visible to an eavesdropper, who
3253 could use the information gathered to determine, for instance, whether
3254 your system has unpatched security vulnerabilities.
3255
3256 Substitutes from the official build farm are enabled by default when
3257 using Guix System (@pxref{GNU Distribution}). However,
3258 they are disabled by default when using Guix on a foreign distribution,
3259 unless you have explicitly enabled them via one of the recommended
3260 installation steps (@pxref{Installation}). The following paragraphs
3261 describe how to enable or disable substitutes for the official build
3262 farm; the same procedure can also be used to enable substitutes for any
3263 other substitute server.
3264
3265 @node Substitute Server Authorization
3266 @subsection Substitute Server Authorization
3267
3268 @cindex security
3269 @cindex substitutes, authorization thereof
3270 @cindex access control list (ACL), for substitutes
3271 @cindex ACL (access control list), for substitutes
3272 To allow Guix to download substitutes from @code{@value{SUBSTITUTE-SERVER}} or a
3273 mirror thereof, you
3274 must add its public key to the access control list (ACL) of archive
3275 imports, using the @command{guix archive} command (@pxref{Invoking guix
3276 archive}). Doing so implies that you trust @code{@value{SUBSTITUTE-SERVER}} to not
3277 be compromised and to serve genuine substitutes.
3278
3279 The public key for @code{@value{SUBSTITUTE-SERVER}} is installed along with Guix, in
3280 @code{@var{prefix}/share/guix/@value{SUBSTITUTE-SERVER}.pub}, where @var{prefix} is
3281 the installation prefix of Guix. If you installed Guix from source,
3282 make sure you checked the GPG signature of
3283 @file{guix-@value{VERSION}.tar.gz}, which contains this public key file.
3284 Then, you can run something like this:
3285
3286 @example
3287 # guix archive --authorize < @var{prefix}/share/guix/@value{SUBSTITUTE-SERVER}.pub
3288 @end example
3289
3290 Once this is in place, the output of a command like @code{guix build}
3291 should change from something like:
3292
3293 @example
3294 $ guix build emacs --dry-run
3295 The following derivations would be built:
3296 /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
3297 /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
3298 /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
3299 /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
3300 @dots{}
3301 @end example
3302
3303 @noindent
3304 to something like:
3305
3306 @example
3307 $ guix build emacs --dry-run
3308 112.3 MB would be downloaded:
3309 /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
3310 /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
3311 /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
3312 /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
3313 @dots{}
3314 @end example
3315
3316 @noindent
3317 The text changed from ``The following derivations would be built'' to
3318 ``112.3 MB would be downloaded''. This indicates that substitutes from
3319 @code{@value{SUBSTITUTE-SERVER}} are usable and will be downloaded, when
3320 possible, for future builds.
3321
3322 @cindex substitutes, how to disable
3323 The substitute mechanism can be disabled globally by running
3324 @code{guix-daemon} with @code{--no-substitutes} (@pxref{Invoking
3325 guix-daemon}). It can also be disabled temporarily by passing the
3326 @code{--no-substitutes} option to @command{guix package}, @command{guix
3327 build}, and other command-line tools.
3328
3329 @node Substitute Authentication
3330 @subsection Substitute Authentication
3331
3332 @cindex digital signatures
3333 Guix detects and raises an error when attempting to use a substitute
3334 that has been tampered with. Likewise, it ignores substitutes that are
3335 not signed, or that are not signed by one of the keys listed in the ACL.
3336
3337 There is one exception though: if an unauthorized server provides
3338 substitutes that are @emph{bit-for-bit identical} to those provided by
3339 an authorized server, then the unauthorized server becomes eligible for
3340 downloads. For example, assume we have chosen two substitute servers
3341 with this option:
3342
3343 @example
3344 --substitute-urls="https://a.example.org https://b.example.org"
3345 @end example
3346
3347 @noindent
3348 @cindex reproducible builds
3349 If the ACL contains only the key for @code{b.example.org}, and if
3350 @code{a.example.org} happens to serve the @emph{exact same} substitutes,
3351 then Guix will download substitutes from @code{a.example.org} because it
3352 comes first in the list and can be considered a mirror of
3353 @code{b.example.org}. In practice, independent build machines usually
3354 produce the same binaries, thanks to bit-reproducible builds (see
3355 below).
3356
3357 When using HTTPS, the server's X.509 certificate is @emph{not} validated
3358 (in other words, the server is not authenticated), contrary to what
3359 HTTPS clients such as Web browsers usually do. This is because Guix
3360 authenticates substitute information itself, as explained above, which
3361 is what we care about (whereas X.509 certificates are about
3362 authenticating bindings between domain names and public keys.)
3363
3364 @node Proxy Settings
3365 @subsection Proxy Settings
3366
3367 @vindex http_proxy
3368 Substitutes are downloaded over HTTP or HTTPS.
3369 The @code{http_proxy} environment
3370 variable can be set in the environment of @command{guix-daemon} and is
3371 honored for downloads of substitutes. Note that the value of
3372 @code{http_proxy} in the environment where @command{guix build},
3373 @command{guix package}, and other client commands are run has
3374 @emph{absolutely no effect}.
3375
3376 @node Substitution Failure
3377 @subsection Substitution Failure
3378
3379 Even when a substitute for a derivation is available, sometimes the
3380 substitution attempt will fail. This can happen for a variety of
3381 reasons: the substitute server might be offline, the substitute may
3382 recently have been deleted, the connection might have been interrupted,
3383 etc.
3384
3385 When substitutes are enabled and a substitute for a derivation is
3386 available, but the substitution attempt fails, Guix will attempt to
3387 build the derivation locally depending on whether or not
3388 @code{--fallback} was given (@pxref{fallback-option,, common build
3389 option @code{--fallback}}). Specifically, if @code{--fallback} was
3390 omitted, then no local build will be performed, and the derivation is
3391 considered to have failed. However, if @code{--fallback} was given,
3392 then Guix will attempt to build the derivation locally, and the success
3393 or failure of the derivation depends on the success or failure of the
3394 local build. Note that when substitutes are disabled or no substitute
3395 is available for the derivation in question, a local build will
3396 @emph{always} be performed, regardless of whether or not
3397 @code{--fallback} was given.
3398
3399 To get an idea of how many substitutes are available right now, you can
3400 try running the @command{guix weather} command (@pxref{Invoking guix
3401 weather}). This command provides statistics on the substitutes provided
3402 by a server.
3403
3404 @node On Trusting Binaries
3405 @subsection On Trusting Binaries
3406
3407 @cindex trust, of pre-built binaries
3408 Today, each individual's control over their own computing is at the
3409 mercy of institutions, corporations, and groups with enough power and
3410 determination to subvert the computing infrastructure and exploit its
3411 weaknesses. While using @code{@value{SUBSTITUTE-SERVER}} substitutes can be
3412 convenient, we encourage users to also build on their own, or even run
3413 their own build farm, such that @code{@value{SUBSTITUTE-SERVER}} is less of an
3414 interesting target. One way to help is by publishing the software you
3415 build using @command{guix publish} so that others have one more choice
3416 of server to download substitutes from (@pxref{Invoking guix publish}).
3417
3418 Guix has the foundations to maximize build reproducibility
3419 (@pxref{Features}). In most cases, independent builds of a given
3420 package or derivation should yield bit-identical results. Thus, through
3421 a diverse set of independent package builds, we can strengthen the
3422 integrity of our systems. The @command{guix challenge} command aims to
3423 help users assess substitute servers, and to assist developers in
3424 finding out about non-deterministic package builds (@pxref{Invoking guix
3425 challenge}). Similarly, the @option{--check} option of @command{guix
3426 build} allows users to check whether previously-installed substitutes
3427 are genuine by rebuilding them locally (@pxref{build-check,
3428 @command{guix build --check}}).
3429
3430 In the future, we want Guix to have support to publish and retrieve
3431 binaries to/from other users, in a peer-to-peer fashion. If you would
3432 like to discuss this project, join us on @email{guix-devel@@gnu.org}.
3433
3434 @node Packages with Multiple Outputs
3435 @section Packages with Multiple Outputs
3436
3437 @cindex multiple-output packages
3438 @cindex package outputs
3439 @cindex outputs
3440
3441 Often, packages defined in Guix have a single @dfn{output}---i.e., the
3442 source package leads to exactly one directory in the store. When running
3443 @command{guix install glibc}, one installs the default output of the
3444 GNU libc package; the default output is called @code{out}, but its name
3445 can be omitted as shown in this command. In this particular case, the
3446 default output of @code{glibc} contains all the C header files, shared
3447 libraries, static libraries, Info documentation, and other supporting
3448 files.
3449
3450 Sometimes it is more appropriate to separate the various types of files
3451 produced from a single source package into separate outputs. For
3452 instance, the GLib C library (used by GTK+ and related packages)
3453 installs more than 20 MiB of reference documentation as HTML pages.
3454 To save space for users who do not need it, the documentation goes to a
3455 separate output, called @code{doc}. To install the main GLib output,
3456 which contains everything but the documentation, one would run:
3457
3458 @example
3459 guix install glib
3460 @end example
3461
3462 @cindex documentation
3463 The command to install its documentation is:
3464
3465 @example
3466 guix install glib:doc
3467 @end example
3468
3469 Some packages install programs with different ``dependency footprints''.
3470 For instance, the WordNet package installs both command-line tools and
3471 graphical user interfaces (GUIs). The former depend solely on the C
3472 library, whereas the latter depend on Tcl/Tk and the underlying X
3473 libraries. In this case, we leave the command-line tools in the default
3474 output, whereas the GUIs are in a separate output. This allows users
3475 who do not need the GUIs to save space. The @command{guix size} command
3476 can help find out about such situations (@pxref{Invoking guix size}).
3477 @command{guix graph} can also be helpful (@pxref{Invoking guix graph}).
3478
3479 There are several such multiple-output packages in the GNU distribution.
3480 Other conventional output names include @code{lib} for libraries and
3481 possibly header files, @code{bin} for stand-alone programs, and
3482 @code{debug} for debugging information (@pxref{Installing Debugging
3483 Files}). The outputs of a packages are listed in the third column of
3484 the output of @command{guix package --list-available} (@pxref{Invoking
3485 guix package}).
3486
3487
3488 @node Invoking guix gc
3489 @section Invoking @command{guix gc}
3490
3491 @cindex garbage collector
3492 @cindex disk space
3493 Packages that are installed, but not used, may be @dfn{garbage-collected}.
3494 The @command{guix gc} command allows users to explicitly run the garbage
3495 collector to reclaim space from the @file{/gnu/store} directory. It is
3496 the @emph{only} way to remove files from @file{/gnu/store}---removing
3497 files or directories manually may break it beyond repair!
3498
3499 @cindex GC roots
3500 @cindex garbage collector roots
3501 The garbage collector has a set of known @dfn{roots}: any file under
3502 @file{/gnu/store} reachable from a root is considered @dfn{live} and
3503 cannot be deleted; any other file is considered @dfn{dead} and may be
3504 deleted. The set of garbage collector roots (``GC roots'' for short)
3505 includes default user profiles; by default, the symlinks under
3506 @file{/var/guix/gcroots} represent these GC roots. New GC roots can be
3507 added with @command{guix build --root}, for example (@pxref{Invoking
3508 guix build}). The @command{guix gc --list-roots} command lists them.
3509
3510 Prior to running @code{guix gc --collect-garbage} to make space, it is
3511 often useful to remove old generations from user profiles; that way, old
3512 package builds referenced by those generations can be reclaimed. This
3513 is achieved by running @code{guix package --delete-generations}
3514 (@pxref{Invoking guix package}).
3515
3516 Our recommendation is to run a garbage collection periodically, or when
3517 you are short on disk space. For instance, to guarantee that at least
3518 5@tie{}GB are available on your disk, simply run:
3519
3520 @example
3521 guix gc -F 5G
3522 @end example
3523
3524 It is perfectly safe to run as a non-interactive periodic job
3525 (@pxref{Scheduled Job Execution}, for how to set up such a job).
3526 Running @command{guix gc} with no arguments will collect as
3527 much garbage as it can, but that is often inconvenient: you may find
3528 yourself having to rebuild or re-download software that is ``dead'' from
3529 the GC viewpoint but that is necessary to build other pieces of
3530 software---e.g., the compiler tool chain.
3531
3532 The @command{guix gc} command has three modes of operation: it can be
3533 used to garbage-collect any dead files (the default), to delete specific
3534 files (the @code{--delete} option), to print garbage-collector
3535 information, or for more advanced queries. The garbage collection
3536 options are as follows:
3537
3538 @table @code
3539 @item --collect-garbage[=@var{min}]
3540 @itemx -C [@var{min}]
3541 Collect garbage---i.e., unreachable @file{/gnu/store} files and
3542 sub-directories. This is the default operation when no option is
3543 specified.
3544
3545 When @var{min} is given, stop once @var{min} bytes have been collected.
3546 @var{min} may be a number of bytes, or it may include a unit as a
3547 suffix, such as @code{MiB} for mebibytes and @code{GB} for gigabytes
3548 (@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
3549
3550 When @var{min} is omitted, collect all the garbage.
3551
3552 @item --free-space=@var{free}
3553 @itemx -F @var{free}
3554 Collect garbage until @var{free} space is available under
3555 @file{/gnu/store}, if possible; @var{free} denotes storage space, such
3556 as @code{500MiB}, as described above.
3557
3558 When @var{free} or more is already available in @file{/gnu/store}, do
3559 nothing and exit immediately.
3560
3561 @item --delete-generations[=@var{duration}]
3562 @itemx -d [@var{duration}]
3563 Before starting the garbage collection process, delete all the generations
3564 older than @var{duration}, for all the user profiles; when run as root, this
3565 applies to all the profiles @emph{of all the users}.
3566
3567 For example, this command deletes all the generations of all your profiles
3568 that are older than 2 months (except generations that are current), and then
3569 proceeds to free space until at least 10 GiB are available:
3570
3571 @example
3572 guix gc -d 2m -F 10G
3573 @end example
3574
3575 @item --delete
3576 @itemx -D
3577 Attempt to delete all the store files and directories specified as
3578 arguments. This fails if some of the files are not in the store, or if
3579 they are still live.
3580
3581 @item --list-failures
3582 List store items corresponding to cached build failures.
3583
3584 This prints nothing unless the daemon was started with
3585 @option{--cache-failures} (@pxref{Invoking guix-daemon,
3586 @option{--cache-failures}}).
3587
3588 @item --list-roots
3589 List the GC roots owned by the user; when run as root, list @emph{all} the GC
3590 roots.
3591
3592 @item --list-busy
3593 List store items in use by currently running processes. These store
3594 items are effectively considered GC roots: they cannot be deleted.
3595
3596 @item --clear-failures
3597 Remove the specified store items from the failed-build cache.
3598
3599 Again, this option only makes sense when the daemon is started with
3600 @option{--cache-failures}. Otherwise, it does nothing.
3601
3602 @item --list-dead
3603 Show the list of dead files and directories still present in the
3604 store---i.e., files and directories no longer reachable from any root.
3605
3606 @item --list-live
3607 Show the list of live store files and directories.
3608
3609 @end table
3610
3611 In addition, the references among existing store files can be queried:
3612
3613 @table @code
3614
3615 @item --references
3616 @itemx --referrers
3617 @cindex package dependencies
3618 List the references (respectively, the referrers) of store files given
3619 as arguments.
3620
3621 @item --requisites
3622 @itemx -R
3623 @cindex closure
3624 List the requisites of the store files passed as arguments. Requisites
3625 include the store files themselves, their references, and the references
3626 of these, recursively. In other words, the returned list is the
3627 @dfn{transitive closure} of the store files.
3628
3629 @xref{Invoking guix size}, for a tool to profile the size of the closure
3630 of an element. @xref{Invoking guix graph}, for a tool to visualize
3631 the graph of references.
3632
3633 @item --derivers
3634 @cindex derivation
3635 Return the derivation(s) leading to the given store items
3636 (@pxref{Derivations}).
3637
3638 For example, this command:
3639
3640 @example
3641 guix gc --derivers `guix package -I ^emacs$ | cut -f4`
3642 @end example
3643
3644 @noindent
3645 returns the @file{.drv} file(s) leading to the @code{emacs} package
3646 installed in your profile.
3647
3648 Note that there may be zero matching @file{.drv} files, for instance
3649 because these files have been garbage-collected. There can also be more
3650 than one matching @file{.drv} due to fixed-output derivations.
3651 @end table
3652
3653 Lastly, the following options allow you to check the integrity of the
3654 store and to control disk usage.
3655
3656 @table @option
3657
3658 @item --verify[=@var{options}]
3659 @cindex integrity, of the store
3660 @cindex integrity checking
3661 Verify the integrity of the store.
3662
3663 By default, make sure that all the store items marked as valid in the
3664 database of the daemon actually exist in @file{/gnu/store}.
3665
3666 When provided, @var{options} must be a comma-separated list containing one
3667 or more of @code{contents} and @code{repair}.
3668
3669 When passing @option{--verify=contents}, the daemon computes the
3670 content hash of each store item and compares it against its hash in the
3671 database. Hash mismatches are reported as data corruptions. Because it
3672 traverses @emph{all the files in the store}, this command can take a
3673 long time, especially on systems with a slow disk drive.
3674
3675 @cindex repairing the store
3676 @cindex corruption, recovering from
3677 Using @option{--verify=repair} or @option{--verify=contents,repair}
3678 causes the daemon to try to repair corrupt store items by fetching
3679 substitutes for them (@pxref{Substitutes}). Because repairing is not
3680 atomic, and thus potentially dangerous, it is available only to the
3681 system administrator. A lightweight alternative, when you know exactly
3682 which items in the store are corrupt, is @command{guix build --repair}
3683 (@pxref{Invoking guix build}).
3684
3685 @item --optimize
3686 @cindex deduplication
3687 Optimize the store by hard-linking identical files---this is
3688 @dfn{deduplication}.
3689
3690 The daemon performs deduplication after each successful build or archive
3691 import, unless it was started with @code{--disable-deduplication}
3692 (@pxref{Invoking guix-daemon, @code{--disable-deduplication}}). Thus,
3693 this option is primarily useful when the daemon was running with
3694 @code{--disable-deduplication}.
3695
3696 @end table
3697
3698 @node Invoking guix pull
3699 @section Invoking @command{guix pull}
3700
3701 @cindex upgrading Guix
3702 @cindex updating Guix
3703 @cindex @command{guix pull}
3704 @cindex pull
3705 Packages are installed or upgraded to the latest version available in
3706 the distribution currently available on your local machine. To update
3707 that distribution, along with the Guix tools, you must run @command{guix
3708 pull}: the command downloads the latest Guix source code and package
3709 descriptions, and deploys it. Source code is downloaded from a
3710 @uref{https://git-scm.com, Git} repository, by default the official
3711 GNU@tie{}Guix repository, though this can be customized.
3712
3713 Specifically, @command{guix pull} downloads code from the @dfn{channels}
3714 (@pxref{Channels}) specified by one of the followings, in this order:
3715
3716 @enumerate
3717 @item
3718 the @option{--channels} option;
3719 @item
3720 the user's @file{~/.config/guix/channels.scm} file;
3721 @item
3722 the system-wide @file{/etc/guix/channels.scm} file;
3723 @item
3724 the built-in default channels specified in the @code{%default-channels}
3725 variable.
3726 @end enumerate
3727
3728 On completion, @command{guix package} will use packages and package
3729 versions from this just-retrieved copy of Guix. Not only that, but all
3730 the Guix commands and Scheme modules will also be taken from that latest
3731 version. New @command{guix} sub-commands added by the update also
3732 become available.
3733
3734 Any user can update their Guix copy using @command{guix pull}, and the
3735 effect is limited to the user who ran @command{guix pull}. For
3736 instance, when user @code{root} runs @command{guix pull}, this has no
3737 effect on the version of Guix that user @code{alice} sees, and vice
3738 versa.
3739
3740 The result of running @command{guix pull} is a @dfn{profile} available
3741 under @file{~/.config/guix/current} containing the latest Guix. Thus,
3742 make sure to add it to the beginning of your search path so that you use
3743 the latest version, and similarly for the Info manual
3744 (@pxref{Documentation}):
3745
3746 @example
3747 export PATH="$HOME/.config/guix/current/bin:$PATH"
3748 export INFOPATH="$HOME/.config/guix/current/share/info:$INFOPATH"
3749 @end example
3750
3751 The @code{--list-generations} or @code{-l} option lists past generations
3752 produced by @command{guix pull}, along with details about their provenance:
3753
3754 @example
3755 $ guix pull -l
3756 Generation 1 Jun 10 2018 00:18:18
3757 guix 65956ad
3758 repository URL: https://git.savannah.gnu.org/git/guix.git
3759 branch: origin/master
3760 commit: 65956ad3526ba09e1f7a40722c96c6ef7c0936fe
3761
3762 Generation 2 Jun 11 2018 11:02:49
3763 guix e0cc7f6
3764 repository URL: https://git.savannah.gnu.org/git/guix.git
3765 branch: origin/master
3766 commit: e0cc7f669bec22c37481dd03a7941c7d11a64f1d
3767 2 new packages: keepalived, libnfnetlink
3768 6 packages upgraded: emacs-nix-mode@@2.0.4,
3769 guile2.0-guix@@0.14.0-12.77a1aac, guix@@0.14.0-12.77a1aac,
3770 heimdal@@7.5.0, milkytracker@@1.02.00, nix@@2.0.4
3771
3772 Generation 3 Jun 13 2018 23:31:07 (current)
3773 guix 844cc1c
3774 repository URL: https://git.savannah.gnu.org/git/guix.git
3775 branch: origin/master
3776 commit: 844cc1c8f394f03b404c5bb3aee086922373490c
3777 28 new packages: emacs-helm-ls-git, emacs-helm-mu, @dots{}
3778 69 packages upgraded: borg@@1.1.6, cheese@@3.28.0, @dots{}
3779 @end example
3780
3781 @xref{Invoking guix describe, @command{guix describe}}, for other ways to
3782 describe the current status of Guix.
3783
3784 This @code{~/.config/guix/current} profile works exactly like the profiles
3785 created by @command{guix package} (@pxref{Invoking guix package}). That
3786 is, you can list generations, roll back to the previous
3787 generation---i.e., the previous Guix---and so on:
3788
3789 @example
3790 $ guix pull --roll-back
3791 switched from generation 3 to 2
3792 $ guix pull --delete-generations=1
3793 deleting /var/guix/profiles/per-user/charlie/current-guix-1-link
3794 @end example
3795
3796 You can also use @command{guix package} (@pxref{Invoking guix package})
3797 to manage the profile by naming it explicitly:
3798 @example
3799 $ guix package -p ~/.config/guix/current --roll-back
3800 switched from generation 3 to 2
3801 $ guix package -p ~/.config/guix/current --delete-generations=1
3802 deleting /var/guix/profiles/per-user/charlie/current-guix-1-link
3803 @end example
3804
3805 The @command{guix pull} command is usually invoked with no arguments,
3806 but it supports the following options:
3807
3808 @table @code
3809 @item --url=@var{url}
3810 @itemx --commit=@var{commit}
3811 @itemx --branch=@var{branch}
3812 Download code for the @code{guix} channel from the specified @var{url}, at the
3813 given @var{commit} (a valid Git commit ID represented as a hexadecimal
3814 string), or @var{branch}.
3815
3816 @cindex @file{channels.scm}, configuration file
3817 @cindex configuration file for channels
3818 These options are provided for convenience, but you can also specify your
3819 configuration in the @file{~/.config/guix/channels.scm} file or using the
3820 @option{--channels} option (see below).
3821
3822 @item --channels=@var{file}
3823 @itemx -C @var{file}
3824 Read the list of channels from @var{file} instead of
3825 @file{~/.config/guix/channels.scm} or @file{/etc/guix/channels.scm}.
3826 @var{file} must contain Scheme code that
3827 evaluates to a list of channel objects. @xref{Channels}, for more
3828 information.
3829
3830 @cindex channel news
3831 @item --news
3832 @itemx -N
3833 Display the list of packages added or upgraded since the previous
3834 generation, as well as, occasionally, news written by channel authors
3835 for their users (@pxref{Channels, Writing Channel News}).
3836
3837 The package information is the same as displayed upon @command{guix
3838 pull} completion, but without ellipses; it is also similar to the output
3839 of @command{guix pull -l} for the last generation (see below).
3840
3841 @item --list-generations[=@var{pattern}]
3842 @itemx -l [@var{pattern}]
3843 List all the generations of @file{~/.config/guix/current} or, if @var{pattern}
3844 is provided, the subset of generations that match @var{pattern}.
3845 The syntax of @var{pattern} is the same as with @code{guix package
3846 --list-generations} (@pxref{Invoking guix package}).
3847
3848 @item --roll-back
3849 @cindex rolling back
3850 @cindex undoing transactions
3851 @cindex transactions, undoing
3852 Roll back to the previous @dfn{generation} of @file{~/.config/guix/current}---i.e.,
3853 undo the last transaction.
3854
3855 @item --switch-generation=@var{pattern}
3856 @itemx -S @var{pattern}
3857 @cindex generations
3858 Switch to a particular generation defined by @var{pattern}.
3859
3860 @var{pattern} may be either a generation number or a number prefixed
3861 with ``+'' or ``-''. The latter means: move forward/backward by a
3862 specified number of generations. For example, if you want to return to
3863 the latest generation after @code{--roll-back}, use
3864 @code{--switch-generation=+1}.
3865
3866 @item --delete-generations[=@var{pattern}]
3867 @itemx -d [@var{pattern}]
3868 When @var{pattern} is omitted, delete all generations except the current
3869 one.
3870
3871 This command accepts the same patterns as @option{--list-generations}.
3872 When @var{pattern} is specified, delete the matching generations. When
3873 @var{pattern} specifies a duration, generations @emph{older} than the
3874 specified duration match. For instance, @code{--delete-generations=1m}
3875 deletes generations that are more than one month old.
3876
3877 If the current generation matches, it is @emph{not} deleted.
3878
3879 Note that deleting generations prevents rolling back to them.
3880 Consequently, this command must be used with care.
3881
3882 @xref{Invoking guix describe}, for a way to display information about the
3883 current generation only.
3884
3885 @item --profile=@var{profile}
3886 @itemx -p @var{profile}
3887 Use @var{profile} instead of @file{~/.config/guix/current}.
3888
3889 @item --dry-run
3890 @itemx -n
3891 Show which channel commit(s) would be used and what would be built or
3892 substituted but do not actually do it.
3893
3894 @item --system=@var{system}
3895 @itemx -s @var{system}
3896 Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
3897 the system type of the build host.
3898
3899 @item --verbose
3900 Produce verbose output, writing build logs to the standard error output.
3901
3902 @item --bootstrap
3903 Use the bootstrap Guile to build the latest Guix. This option is only
3904 useful to Guix developers.
3905 @end table
3906
3907 The @dfn{channel} mechanism allows you to instruct @command{guix pull} which
3908 repository and branch to pull from, as well as @emph{additional} repositories
3909 containing package modules that should be deployed. @xref{Channels}, for more
3910 information.
3911
3912 In addition, @command{guix pull} supports all the common build options
3913 (@pxref{Common Build Options}).
3914
3915 @node Channels
3916 @section Channels
3917
3918 @cindex channels
3919 @cindex @file{channels.scm}, configuration file
3920 @cindex configuration file for channels
3921 @cindex @command{guix pull}, configuration file
3922 @cindex configuration of @command{guix pull}
3923 Guix and its package collection are updated by running @command{guix pull}
3924 (@pxref{Invoking guix pull}). By default @command{guix pull} downloads and
3925 deploys Guix itself from the official GNU@tie{}Guix repository. This can be
3926 customized by defining @dfn{channels} in the
3927 @file{~/.config/guix/channels.scm} file. A channel specifies a URL and branch
3928 of a Git repository to be deployed, and @command{guix pull} can be instructed
3929 to pull from one or more channels. In other words, channels can be used to
3930 @emph{customize} and to @emph{extend} Guix, as we will see below.
3931
3932 @subsection Using a Custom Guix Channel
3933
3934 The channel called @code{guix} specifies where Guix itself---its command-line
3935 tools as well as its package collection---should be downloaded. For instance,
3936 suppose you want to update from your own copy of the Guix repository at
3937 @code{example.org}, and specifically the @code{super-hacks} branch, you can
3938 write in @code{~/.config/guix/channels.scm} this specification:
3939
3940 @lisp
3941 ;; Tell 'guix pull' to use my own repo.
3942 (list (channel
3943 (name 'guix)
3944 (url "https://example.org/my-guix.git")
3945 (branch "super-hacks")))
3946 @end lisp
3947
3948 @noindent
3949 From there on, @command{guix pull} will fetch code from the @code{super-hacks}
3950 branch of the repository at @code{example.org}.
3951
3952 @subsection Specifying Additional Channels
3953
3954 @cindex extending the package collection (channels)
3955 @cindex personal packages (channels)
3956 @cindex channels, for personal packages
3957 You can also specify @emph{additional channels} to pull from. Let's say you
3958 have a bunch of custom package variants or personal packages that you think
3959 would make little sense to contribute to the Guix project, but would like to
3960 have these packages transparently available to you at the command line. You
3961 would first write modules containing those package definitions (@pxref{Package
3962 Modules}), maintain them in a Git repository, and then you and anyone else can
3963 use it as an additional channel to get packages from. Neat, no?
3964
3965 @c What follows stems from discussions at
3966 @c <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22629#134> as well as
3967 @c earlier discussions on guix-devel@gnu.org.
3968 @quotation Warning
3969 Before you, dear user, shout---``woow this is @emph{soooo coool}!''---and
3970 publish your personal channel to the world, we would like to share a few words
3971 of caution:
3972
3973 @itemize
3974 @item
3975 Before publishing a channel, please consider contributing your package
3976 definitions to Guix proper (@pxref{Contributing}). Guix as a project is open
3977 to free software of all sorts, and packages in Guix proper are readily
3978 available to all Guix users and benefit from the project's quality assurance
3979 process.
3980
3981 @item
3982 When you maintain package definitions outside Guix, we, Guix developers,
3983 consider that @emph{the compatibility burden is on you}. Remember that
3984 package modules and package definitions are just Scheme code that uses various
3985 programming interfaces (APIs). We want to remain free to change these APIs to
3986 keep improving Guix, possibly in ways that break your channel. We never
3987 change APIs gratuitously, but we will @emph{not} commit to freezing APIs
3988 either.
3989
3990 @item
3991 Corollary: if you're using an external channel and that channel breaks, please
3992 @emph{report the issue to the channel authors}, not to the Guix project.
3993 @end itemize
3994
3995 You've been warned! Having said this, we believe external channels are a
3996 practical way to exert your freedom to augment Guix' package collection and to
3997 share your improvements, which are basic tenets of
3998 @uref{https://www.gnu.org/philosophy/free-sw.html, free software}. Please
3999 email us at @email{guix-devel@@gnu.org} if you'd like to discuss this.
4000 @end quotation
4001
4002 To use a channel, write @code{~/.config/guix/channels.scm} to instruct
4003 @command{guix pull} to pull from it @emph{in addition} to the default Guix
4004 channel(s):
4005
4006 @vindex %default-channels
4007 @lisp
4008 ;; Add my personal packages to those Guix provides.
4009 (cons (channel
4010 (name 'my-personal-packages)
4011 (url "https://example.org/personal-packages.git"))
4012 %default-channels)
4013 @end lisp
4014
4015 @noindent
4016 Note that the snippet above is (as always!)@: Scheme code; we use @code{cons} to
4017 add a channel the list of channels that the variable @code{%default-channels}
4018 is bound to (@pxref{Pairs, @code{cons} and lists,, guile, GNU Guile Reference
4019 Manual}). With this file in place, @command{guix pull} builds not only Guix
4020 but also the package modules from your own repository. The result in
4021 @file{~/.config/guix/current} is the union of Guix with your own package
4022 modules:
4023
4024 @example
4025 $ guix pull --list-generations
4026 @dots{}
4027 Generation 19 Aug 27 2018 16:20:48
4028 guix d894ab8
4029 repository URL: https://git.savannah.gnu.org/git/guix.git
4030 branch: master
4031 commit: d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300
4032 my-personal-packages dd3df5e
4033 repository URL: https://example.org/personal-packages.git
4034 branch: master
4035 commit: dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb
4036 11 new packages: my-gimp, my-emacs-with-cool-features, @dots{}
4037 4 packages upgraded: emacs-racket-mode@@0.0.2-2.1b78827, @dots{}
4038 @end example
4039
4040 @noindent
4041 The output of @command{guix pull} above shows that Generation@tie{}19 includes
4042 both Guix and packages from the @code{my-personal-packages} channel. Among
4043 the new and upgraded packages that are listed, some like @code{my-gimp} and
4044 @code{my-emacs-with-cool-features} might come from
4045 @code{my-personal-packages}, while others come from the Guix default channel.
4046
4047 To create a channel, create a Git repository containing your own package
4048 modules and make it available. The repository can contain anything, but a
4049 useful channel will contain Guile modules that export packages. Once you
4050 start using a channel, Guix will behave as if the root directory of that
4051 channel's Git repository has been added to the Guile load path (@pxref{Load
4052 Paths,,, guile, GNU Guile Reference Manual}). For example, if your channel
4053 contains a file at @file{my-packages/my-tools.scm} that defines a Guile
4054 module, then the module will be available under the name @code{(my-packages
4055 my-tools)}, and you will be able to use it like any other module
4056 (@pxref{Modules,,, guile, GNU Guile Reference Manual}).
4057
4058 @cindex dependencies, channels
4059 @cindex meta-data, channels
4060 @subsection Declaring Channel Dependencies
4061
4062 Channel authors may decide to augment a package collection provided by other
4063 channels. They can declare their channel to be dependent on other channels in
4064 a meta-data file @file{.guix-channel}, which is to be placed in the root of
4065 the channel repository.
4066
4067 The meta-data file should contain a simple S-expression like this:
4068
4069 @lisp
4070 (channel
4071 (version 0)
4072 (dependencies
4073 (channel
4074 (name some-collection)
4075 (url "https://example.org/first-collection.git"))
4076 (channel
4077 (name some-other-collection)
4078 (url "https://example.org/second-collection.git")
4079 (branch "testing"))))
4080 @end lisp
4081
4082 In the above example this channel is declared to depend on two other channels,
4083 which will both be fetched automatically. The modules provided by the channel
4084 will be compiled in an environment where the modules of all these declared
4085 channels are available.
4086
4087 For the sake of reliability and maintainability, you should avoid dependencies
4088 on channels that you don't control, and you should aim to keep the number of
4089 dependencies to a minimum.
4090
4091 @cindex subdirectory, channels
4092 @subsection Package Modules in a Sub-directory
4093
4094 As a channel author, you may want to keep your channel modules in a
4095 sub-directory. If your modules are in the sub-directory @file{guix}, you must
4096 add a meta-data file @file{.guix-channel} that contains:
4097
4098 @lisp
4099 (channel
4100 (version 0)
4101 (directory "guix"))
4102 @end lisp
4103
4104 @cindex news, for channels
4105 @subsection Writing Channel News
4106
4107 Channel authors may occasionally want to communicate to their users
4108 information about important changes in the channel. You'd send them all
4109 an email, but that's not convenient.
4110
4111 Instead, channels can provide a @dfn{news file}; when the channel users
4112 run @command{guix pull}, that news file is automatically read and
4113 @command{guix pull --news} can display the announcements that correspond
4114 to the new commits that have been pulled, if any.
4115
4116 To do that, channel authors must first declare the name of the news file
4117 in their @file{.guix-channel} file:
4118
4119 @lisp
4120 (channel
4121 (version 0)
4122 (news-file "etc/news.txt"))
4123 @end lisp
4124
4125 The news file itself, @file{etc/news.txt} in this example, must look
4126 something like this:
4127
4128 @lisp
4129 (channel-news
4130 (version 0)
4131 (entry (tag "the-bug-fix")
4132 (title (en "Fixed terrible bug")
4133 (fr "Oh la la"))
4134 (body (en "@@emph@{Good news@}! It's fixed!")
4135 (eo "Certe ĝi pli bone funkcias nun!")))
4136 (entry (commit "bdcabe815cd28144a2d2b4bc3c5057b051fa9906")
4137 (title (en "Added a great package")
4138 (ca "Què vol dir guix?"))
4139 (body (en "Don't miss the @@code@{hello@} package!"))))
4140 @end lisp
4141
4142 The file consists of a list of @dfn{news entries}. Each entry is
4143 associated with a commit or tag: it describes changes made in this
4144 commit, possibly in preceding commits as well. Users see entries only
4145 the first time they obtain the commit the entry refers to.
4146
4147 The @code{title} field should be a one-line summary while @code{body}
4148 can be arbitrarily long, and both can contain Texinfo markup
4149 (@pxref{Overview,,, texinfo, GNU Texinfo}). Both the title and body are
4150 a list of language tag/message tuples, which allows @command{guix pull}
4151 to display news in the language that corresponds to the user's locale.
4152
4153 If you want to translate news using a gettext-based workflow, you can
4154 extract translatable strings with @command{xgettext} (@pxref{xgettext
4155 Invocation,,, gettext, GNU Gettext Utilities}). For example, assuming
4156 you write news entries in English first, the command below creates a PO
4157 file containing the strings to translate:
4158
4159 @example
4160 xgettext -o news.po -l scheme -ken etc/news.scm
4161 @end example
4162
4163 To sum up, yes, you could use your channel as a blog. But beware, this
4164 is @emph{not quite} what your users might expect.
4165
4166 @subsection Replicating Guix
4167
4168 @cindex pinning, channels
4169 @cindex replicating Guix
4170 @cindex reproducibility, of Guix
4171 The @command{guix pull --list-generations} output above shows precisely which
4172 commits were used to build this instance of Guix. We can thus replicate it,
4173 say, on another machine, by providing a channel specification in
4174 @file{~/.config/guix/channels.scm} that is ``pinned'' to these commits:
4175
4176 @lisp
4177 ;; Deploy specific commits of my channels of interest.
4178 (list (channel
4179 (name 'guix)
4180 (url "https://git.savannah.gnu.org/git/guix.git")
4181 (commit "d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300"))
4182 (channel
4183 (name 'my-personal-packages)
4184 (url "https://example.org/personal-packages.git")
4185 (commit "dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb")))
4186 @end lisp
4187
4188 The @command{guix describe --format=channels} command can even generate this
4189 list of channels directly (@pxref{Invoking guix describe}). The resulting
4190 file can be used with the -C options of @command{guix pull}
4191 (@pxref{Invoking guix pull}) or @command{guix time-machine}
4192 (@pxref{Invoking guix time-machine}).
4193
4194 At this point the two machines run the @emph{exact same Guix}, with access to
4195 the @emph{exact same packages}. The output of @command{guix build gimp} on
4196 one machine will be exactly the same, bit for bit, as the output of the same
4197 command on the other machine. It also means both machines have access to all
4198 the source code of Guix and, transitively, to all the source code of every
4199 package it defines.
4200
4201 This gives you super powers, allowing you to track the provenance of binary
4202 artifacts with very fine grain, and to reproduce software environments at
4203 will---some sort of ``meta reproducibility'' capabilities, if you will.
4204 @xref{Inferiors}, for another way to take advantage of these super powers.
4205
4206 @node Invoking guix time-machine
4207 @section Invoking @command{guix time-machine}
4208
4209 @cindex @command{guix time-machine}
4210 @cindex pinning, channels
4211 @cindex replicating Guix
4212 @cindex reproducibility, of Guix
4213
4214 The @command{guix time-machine} command provides access to other
4215 revisions of Guix, for example to install older versions of packages,
4216 or to reproduce a computation in an identical environment. The revision
4217 of Guix to be used is defined by a commit or by a channel
4218 description file created by @command{guix describe}
4219 (@pxref{Invoking guix describe}).
4220
4221 The general syntax is:
4222
4223 @example
4224 guix time-machine @var{options}@dots{} -- @var{command} @var {arg}@dots{}
4225 @end example
4226
4227 where @var{command} and @var{arg}@dots{} are passed unmodified to the
4228 @command{guix} command of the specified revision. The @var{options} that define
4229 this revision are the same as for @command{guix pull} (@pxref{Invoking guix pull}):
4230
4231 @table @code
4232 @item --url=@var{url}
4233 @itemx --commit=@var{commit}
4234 @itemx --branch=@var{branch}
4235 Use the @code{guix} channel from the specified @var{url}, at the
4236 given @var{commit} (a valid Git commit ID represented as a hexadecimal
4237 string), or @var{branch}.
4238
4239 @item --channels=@var{file}
4240 @itemx -C @var{file}
4241 Read the list of channels from @var{file}. @var{file} must contain
4242 Scheme code that evaluates to a list of channel objects.
4243 @xref{Channels} for more information.
4244 @end table
4245
4246 As for @command{guix pull}, the absence of any options means that the
4247 the latest commit on the master branch will be used. The command
4248
4249 @example
4250 guix time-machine -- build hello
4251 @end example
4252
4253 will thus build the package @code{hello} as defined in the master branch,
4254 which is in general a newer revision of Guix than you have installed.
4255 Time travel works in both directions!
4256
4257 Note that @command{guix time-machine} can trigger builds of channels and
4258 their dependencies, and these are controlled by the standard build
4259 options (@pxref{Common Build Options}).
4260
4261 @node Inferiors
4262 @section Inferiors
4263
4264 @c TODO: Remove this once we're more confident about API stability.
4265 @quotation Note
4266 The functionality described here is a ``technology preview'' as of version
4267 @value{VERSION}. As such, the interface is subject to change.
4268 @end quotation
4269
4270 @cindex inferiors
4271 @cindex composition of Guix revisions
4272 Sometimes you might need to mix packages from the revision of Guix you're
4273 currently running with packages available in a different revision of Guix.
4274 Guix @dfn{inferiors} allow you to achieve that by composing different Guix
4275 revisions in arbitrary ways.
4276
4277 @cindex inferior packages
4278 Technically, an ``inferior'' is essentially a separate Guix process connected
4279 to your main Guix process through a REPL (@pxref{Invoking guix repl}). The
4280 @code{(guix inferior)} module allows you to create inferiors and to
4281 communicate with them. It also provides a high-level interface to browse and
4282 manipulate the packages that an inferior provides---@dfn{inferior packages}.
4283
4284 When combined with channels (@pxref{Channels}), inferiors provide a simple way
4285 to interact with a separate revision of Guix. For example, let's assume you
4286 want to install in your profile the current @code{guile} package, along with
4287 the @code{guile-json} as it existed in an older revision of Guix---perhaps
4288 because the newer @code{guile-json} has an incompatible API and you want to
4289 run your code against the old API@. To do that, you could write a manifest for
4290 use by @code{guix package --manifest} (@pxref{Invoking guix package}); in that
4291 manifest, you would create an inferior for that old Guix revision you care
4292 about, and you would look up the @code{guile-json} package in the inferior:
4293
4294 @lisp
4295 (use-modules (guix inferior) (guix channels)
4296 (srfi srfi-1)) ;for 'first'
4297
4298 (define channels
4299 ;; This is the old revision from which we want to
4300 ;; extract guile-json.
4301 (list (channel
4302 (name 'guix)
4303 (url "https://git.savannah.gnu.org/git/guix.git")
4304 (commit
4305 "65956ad3526ba09e1f7a40722c96c6ef7c0936fe"))))
4306
4307 (define inferior
4308 ;; An inferior representing the above revision.
4309 (inferior-for-channels channels))
4310
4311 ;; Now create a manifest with the current "guile" package
4312 ;; and the old "guile-json" package.
4313 (packages->manifest
4314 (list (first (lookup-inferior-packages inferior "guile-json"))
4315 (specification->package "guile")))
4316 @end lisp
4317
4318 On its first run, @command{guix package --manifest} might have to build the
4319 channel you specified before it can create the inferior; subsequent runs will
4320 be much faster because the Guix revision will be cached.
4321
4322 The @code{(guix inferior)} module provides the following procedures to open an
4323 inferior:
4324
4325 @deffn {Scheme Procedure} inferior-for-channels @var{channels} @
4326 [#:cache-directory] [#:ttl]
4327 Return an inferior for @var{channels}, a list of channels. Use the cache at
4328 @var{cache-directory}, where entries can be reclaimed after @var{ttl} seconds.
4329 This procedure opens a new connection to the build daemon.
4330
4331 As a side effect, this procedure may build or substitute binaries for
4332 @var{channels}, which can take time.
4333 @end deffn
4334
4335 @deffn {Scheme Procedure} open-inferior @var{directory} @
4336 [#:command "bin/guix"]
4337 Open the inferior Guix in @var{directory}, running
4338 @code{@var{directory}/@var{command} repl} or equivalent. Return @code{#f} if
4339 the inferior could not be launched.
4340 @end deffn
4341
4342 @cindex inferior packages
4343 The procedures listed below allow you to obtain and manipulate inferior
4344 packages.
4345
4346 @deffn {Scheme Procedure} inferior-packages @var{inferior}
4347 Return the list of packages known to @var{inferior}.
4348 @end deffn
4349
4350 @deffn {Scheme Procedure} lookup-inferior-packages @var{inferior} @var{name} @
4351 [@var{version}]
4352 Return the sorted list of inferior packages matching @var{name} in
4353 @var{inferior}, with highest version numbers first. If @var{version} is true,
4354 return only packages with a version number prefixed by @var{version}.
4355 @end deffn
4356
4357 @deffn {Scheme Procedure} inferior-package? @var{obj}
4358 Return true if @var{obj} is an inferior package.
4359 @end deffn
4360
4361 @deffn {Scheme Procedure} inferior-package-name @var{package}
4362 @deffnx {Scheme Procedure} inferior-package-version @var{package}
4363 @deffnx {Scheme Procedure} inferior-package-synopsis @var{package}
4364 @deffnx {Scheme Procedure} inferior-package-description @var{package}
4365 @deffnx {Scheme Procedure} inferior-package-home-page @var{package}
4366 @deffnx {Scheme Procedure} inferior-package-location @var{package}
4367 @deffnx {Scheme Procedure} inferior-package-inputs @var{package}
4368 @deffnx {Scheme Procedure} inferior-package-native-inputs @var{package}
4369 @deffnx {Scheme Procedure} inferior-package-propagated-inputs @var{package}
4370 @deffnx {Scheme Procedure} inferior-package-transitive-propagated-inputs @var{package}
4371 @deffnx {Scheme Procedure} inferior-package-native-search-paths @var{package}
4372 @deffnx {Scheme Procedure} inferior-package-transitive-native-search-paths @var{package}
4373 @deffnx {Scheme Procedure} inferior-package-search-paths @var{package}
4374 These procedures are the counterpart of package record accessors
4375 (@pxref{package Reference}). Most of them work by querying the inferior
4376 @var{package} comes from, so the inferior must still be live when you call
4377 these procedures.
4378 @end deffn
4379
4380 Inferior packages can be used transparently like any other package or
4381 file-like object in G-expressions (@pxref{G-Expressions}). They are also
4382 transparently handled by the @code{packages->manifest} procedure, which is
4383 commonly use in manifests (@pxref{Invoking guix package, the
4384 @option{--manifest} option of @command{guix package}}). Thus you can insert
4385 an inferior package pretty much anywhere you would insert a regular package:
4386 in manifests, in the @code{packages} field of your @code{operating-system}
4387 declaration, and so on.
4388
4389 @node Invoking guix describe
4390 @section Invoking @command{guix describe}
4391
4392 @cindex reproducibility
4393 @cindex replicating Guix
4394 Often you may want to answer questions like: ``Which revision of Guix am I
4395 using?'' or ``Which channels am I using?'' This is useful information in many
4396 situations: if you want to @emph{replicate} an environment on a different
4397 machine or user account, if you want to report a bug or to determine what
4398 change in the channels you are using caused it, or if you want to record your
4399 system state for reproducibility purposes. The @command{guix describe}
4400 command answers these questions.
4401
4402 When run from a @command{guix pull}ed @command{guix}, @command{guix describe}
4403 displays the channel(s) that it was built from, including their repository URL
4404 and commit IDs (@pxref{Channels}):
4405
4406 @example
4407 $ guix describe
4408 Generation 10 Sep 03 2018 17:32:44 (current)
4409 guix e0fa68c
4410 repository URL: https://git.savannah.gnu.org/git/guix.git
4411 branch: master
4412 commit: e0fa68c7718fffd33d81af415279d6ddb518f727
4413 @end example
4414
4415 If you're familiar with the Git version control system, this is similar in
4416 spirit to @command{git describe}; the output is also similar to that of
4417 @command{guix pull --list-generations}, but limited to the current generation
4418 (@pxref{Invoking guix pull, the @option{--list-generations} option}). Because
4419 the Git commit ID shown above unambiguously refers to a snapshot of Guix, this
4420 information is all it takes to describe the revision of Guix you're using, and
4421 also to replicate it.
4422
4423 To make it easier to replicate Guix, @command{guix describe} can also be asked
4424 to return a list of channels instead of the human-readable description above:
4425
4426 @example
4427 $ guix describe -f channels
4428 (list (channel
4429 (name 'guix)
4430 (url "https://git.savannah.gnu.org/git/guix.git")
4431 (commit
4432 "e0fa68c7718fffd33d81af415279d6ddb518f727")))
4433 @end example
4434
4435 @noindent
4436 You can save this to a file and feed it to @command{guix pull -C} on some
4437 other machine or at a later point in time, which will instantiate @emph{this
4438 exact Guix revision} (@pxref{Invoking guix pull, the @option{-C} option}).
4439 From there on, since you're able to deploy the same revision of Guix, you can
4440 just as well @emph{replicate a complete software environment}. We humbly
4441 think that this is @emph{awesome}, and we hope you'll like it too!
4442
4443 The details of the options supported by @command{guix describe} are as
4444 follows:
4445
4446 @table @code
4447 @item --format=@var{format}
4448 @itemx -f @var{format}
4449 Produce output in the specified @var{format}, one of:
4450
4451 @table @code
4452 @item human
4453 produce human-readable output;
4454 @item channels
4455 produce a list of channel specifications that can be passed to @command{guix
4456 pull -C} or installed as @file{~/.config/guix/channels.scm} (@pxref{Invoking
4457 guix pull});
4458 @item json
4459 @cindex JSON
4460 produce a list of channel specifications in JSON format;
4461 @item recutils
4462 produce a list of channel specifications in Recutils format.
4463 @end table
4464
4465 @item --profile=@var{profile}
4466 @itemx -p @var{profile}
4467 Display information about @var{profile}.
4468 @end table
4469
4470 @node Invoking guix archive
4471 @section Invoking @command{guix archive}
4472
4473 @cindex @command{guix archive}
4474 @cindex archive
4475 The @command{guix archive} command allows users to @dfn{export} files
4476 from the store into a single archive, and to later @dfn{import} them on
4477 a machine that runs Guix.
4478 In particular, it allows store files to be transferred from one machine
4479 to the store on another machine.
4480
4481 @quotation Note
4482 If you're looking for a way to produce archives in a format suitable for
4483 tools other than Guix, @pxref{Invoking guix pack}.
4484 @end quotation
4485
4486 @cindex exporting store items
4487 To export store files as an archive to standard output, run:
4488
4489 @example
4490 guix archive --export @var{options} @var{specifications}...
4491 @end example
4492
4493 @var{specifications} may be either store file names or package
4494 specifications, as for @command{guix package} (@pxref{Invoking guix
4495 package}). For instance, the following command creates an archive
4496 containing the @code{gui} output of the @code{git} package and the main
4497 output of @code{emacs}:
4498
4499 @example
4500 guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
4501 @end example
4502
4503 If the specified packages are not built yet, @command{guix archive}
4504 automatically builds them. The build process may be controlled with the
4505 common build options (@pxref{Common Build Options}).
4506
4507 To transfer the @code{emacs} package to a machine connected over SSH,
4508 one would run:
4509
4510 @example
4511 guix archive --export -r emacs | ssh the-machine guix archive --import
4512 @end example
4513
4514 @noindent
4515 Similarly, a complete user profile may be transferred from one machine
4516 to another like this:
4517
4518 @example
4519 guix archive --export -r $(readlink -f ~/.guix-profile) | \
4520 ssh the-machine guix archive --import
4521 @end example
4522
4523 @noindent
4524 However, note that, in both examples, all of @code{emacs} and the
4525 profile as well as all of their dependencies are transferred (due to
4526 @code{-r}), regardless of what is already available in the store on the
4527 target machine. The @code{--missing} option can help figure out which
4528 items are missing from the target store. The @command{guix copy}
4529 command simplifies and optimizes this whole process, so this is probably
4530 what you should use in this case (@pxref{Invoking guix copy}).
4531
4532 @cindex nar, archive format
4533 @cindex normalized archive (nar)
4534 Archives are stored in the ``normalized archive'' or ``nar'' format, which is
4535 comparable in spirit to `tar', but with differences
4536 that make it more appropriate for our purposes. First, rather than
4537 recording all Unix metadata for each file, the nar format only mentions
4538 the file type (regular, directory, or symbolic link); Unix permissions
4539 and owner/group are dismissed. Second, the order in which directory
4540 entries are stored always follows the order of file names according to
4541 the C locale collation order. This makes archive production fully
4542 deterministic.
4543
4544 When exporting, the daemon digitally signs the contents of the archive,
4545 and that digital signature is appended. When importing, the daemon
4546 verifies the signature and rejects the import in case of an invalid
4547 signature or if the signing key is not authorized.
4548 @c FIXME: Add xref to daemon doc about signatures.
4549
4550 The main options are:
4551
4552 @table @code
4553 @item --export
4554 Export the specified store files or packages (see below.) Write the
4555 resulting archive to the standard output.
4556
4557 Dependencies are @emph{not} included in the output, unless
4558 @code{--recursive} is passed.
4559
4560 @item -r
4561 @itemx --recursive
4562 When combined with @code{--export}, this instructs @command{guix
4563 archive} to include dependencies of the given items in the archive.
4564 Thus, the resulting archive is self-contained: it contains the closure
4565 of the exported store items.
4566
4567 @item --import
4568 Read an archive from the standard input, and import the files listed
4569 therein into the store. Abort if the archive has an invalid digital
4570 signature, or if it is signed by a public key not among the authorized
4571 keys (see @code{--authorize} below.)
4572
4573 @item --missing
4574 Read a list of store file names from the standard input, one per line,
4575 and write on the standard output the subset of these files missing from
4576 the store.
4577
4578 @item --generate-key[=@var{parameters}]
4579 @cindex signing, archives
4580 Generate a new key pair for the daemon. This is a prerequisite before
4581 archives can be exported with @code{--export}. Note that this operation
4582 usually takes time, because it needs to gather enough entropy to
4583 generate the key pair.
4584
4585 The generated key pair is typically stored under @file{/etc/guix}, in
4586 @file{signing-key.pub} (public key) and @file{signing-key.sec} (private
4587 key, which must be kept secret.) When @var{parameters} is omitted,
4588 an ECDSA key using the Ed25519 curve is generated, or, for Libgcrypt
4589 versions before 1.6.0, it is a 4096-bit RSA key.
4590 Alternatively, @var{parameters} can specify
4591 @code{genkey} parameters suitable for Libgcrypt (@pxref{General
4592 public-key related Functions, @code{gcry_pk_genkey},, gcrypt, The
4593 Libgcrypt Reference Manual}).
4594
4595 @item --authorize
4596 @cindex authorizing, archives
4597 Authorize imports signed by the public key passed on standard input.
4598 The public key must be in ``s-expression advanced format''---i.e., the
4599 same format as the @file{signing-key.pub} file.
4600
4601 The list of authorized keys is kept in the human-editable file
4602 @file{/etc/guix/acl}. The file contains
4603 @url{https://people.csail.mit.edu/rivest/Sexp.txt, ``advanced-format
4604 s-expressions''} and is structured as an access-control list in the
4605 @url{https://theworld.com/~cme/spki.txt, Simple Public-Key Infrastructure
4606 (SPKI)}.
4607
4608 @item --extract=@var{directory}
4609 @itemx -x @var{directory}
4610 Read a single-item archive as served by substitute servers
4611 (@pxref{Substitutes}) and extract it to @var{directory}. This is a
4612 low-level operation needed in only very narrow use cases; see below.
4613
4614 For example, the following command extracts the substitute for Emacs
4615 served by @code{@value{SUBSTITUTE-SERVER}} to @file{/tmp/emacs}:
4616
4617 @example
4618 $ wget -O - \
4619 https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-emacs-24.5 \
4620 | bunzip2 | guix archive -x /tmp/emacs
4621 @end example
4622
4623 Single-item archives are different from multiple-item archives produced
4624 by @command{guix archive --export}; they contain a single store item,
4625 and they do @emph{not} embed a signature. Thus this operation does
4626 @emph{no} signature verification and its output should be considered
4627 unsafe.
4628
4629 The primary purpose of this operation is to facilitate inspection of
4630 archive contents coming from possibly untrusted substitute servers.
4631
4632 @item --list
4633 @itemx -t
4634 Read a single-item archive as served by substitute servers
4635 (@pxref{Substitutes}) and print the list of files it contains, as in
4636 this example:
4637
4638 @example
4639 $ wget -O - \
4640 https://@value{SUBSTITUTE-SERVER}/nar/lzip/@dots{}-emacs-26.3 \
4641 | lzip -d | guix archive -t
4642 @end example
4643
4644 @end table
4645
4646
4647 @c *********************************************************************
4648 @node Development
4649 @chapter Development
4650
4651 @cindex software development
4652 If you are a software developer, Guix provides tools that you should find
4653 helpful---independently of the language you're developing in. This is what
4654 this chapter is about.
4655
4656 The @command{guix environment} command provides a convenient way to set up
4657 @dfn{development environments} containing all the dependencies and tools
4658 necessary to work on the software package of your choice. The @command{guix
4659 pack} command allows you to create @dfn{application bundles} that can be
4660 easily distributed to users who do not run Guix.
4661
4662 @menu
4663 * Invoking guix environment:: Setting up development environments.
4664 * Invoking guix pack:: Creating software bundles.
4665 @end menu
4666
4667 @node Invoking guix environment
4668 @section Invoking @command{guix environment}
4669
4670 @cindex reproducible build environments
4671 @cindex development environments
4672 @cindex @command{guix environment}
4673 @cindex environment, package build environment
4674 The purpose of @command{guix environment} is to assist hackers in
4675 creating reproducible development environments without polluting their
4676 package profile. The @command{guix environment} tool takes one or more
4677 packages, builds all of their inputs, and creates a shell
4678 environment to use them.
4679
4680 The general syntax is:
4681
4682 @example
4683 guix environment @var{options} @var{package}@dots{}
4684 @end example
4685
4686 The following example spawns a new shell set up for the development of
4687 GNU@tie{}Guile:
4688
4689 @example
4690 guix environment guile
4691 @end example
4692
4693 If the needed dependencies are not built yet, @command{guix environment}
4694 automatically builds them. The environment of the new shell is an augmented
4695 version of the environment that @command{guix environment} was run in.
4696 It contains the necessary search paths for building the given package
4697 added to the existing environment variables. To create a ``pure''
4698 environment, in which the original environment variables have been unset,
4699 use the @code{--pure} option@footnote{Users sometimes wrongfully augment
4700 environment variables such as @code{PATH} in their @file{~/.bashrc}
4701 file. As a consequence, when @code{guix environment} launches it, Bash
4702 may read @file{~/.bashrc}, thereby introducing ``impurities'' in these
4703 environment variables. It is an error to define such environment
4704 variables in @file{.bashrc}; instead, they should be defined in
4705 @file{.bash_profile}, which is sourced only by log-in shells.
4706 @xref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}, for
4707 details on Bash start-up files.}.
4708
4709 @vindex GUIX_ENVIRONMENT
4710 @command{guix environment} defines the @code{GUIX_ENVIRONMENT}
4711 variable in the shell it spawns; its value is the file name of the
4712 profile of this environment. This allows users to, say, define a
4713 specific prompt for development environments in their @file{.bashrc}
4714 (@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}):
4715
4716 @example
4717 if [ -n "$GUIX_ENVIRONMENT" ]
4718 then
4719 export PS1="\u@@\h \w [dev]\$ "
4720 fi
4721 @end example
4722
4723 @noindent
4724 ...@: or to browse the profile:
4725
4726 @example
4727 $ ls "$GUIX_ENVIRONMENT/bin"
4728 @end example
4729
4730 Additionally, more than one package may be specified, in which case the
4731 union of the inputs for the given packages are used. For example, the
4732 command below spawns a shell where all of the dependencies of both Guile
4733 and Emacs are available:
4734
4735 @example
4736 guix environment guile emacs
4737 @end example
4738
4739 Sometimes an interactive shell session is not desired. An arbitrary
4740 command may be invoked by placing the @code{--} token to separate the
4741 command from the rest of the arguments:
4742
4743 @example
4744 guix environment guile -- make -j4
4745 @end example
4746
4747 In other situations, it is more convenient to specify the list of
4748 packages needed in the environment. For example, the following command
4749 runs @command{python} from an environment containing Python@tie{}2.7 and
4750 NumPy:
4751
4752 @example
4753 guix environment --ad-hoc python2-numpy python-2.7 -- python
4754 @end example
4755
4756 Furthermore, one might want the dependencies of a package and also some
4757 additional packages that are not build-time or runtime dependencies, but
4758 are useful when developing nonetheless. Because of this, the
4759 @code{--ad-hoc} flag is positional. Packages appearing before
4760 @code{--ad-hoc} are interpreted as packages whose dependencies will be
4761 added to the environment. Packages appearing after are interpreted as
4762 packages that will be added to the environment directly. For example,
4763 the following command creates a Guix development environment that
4764 additionally includes Git and strace:
4765
4766 @example
4767 guix environment --pure guix --ad-hoc git strace
4768 @end example
4769
4770 Sometimes it is desirable to isolate the environment as much as
4771 possible, for maximal purity and reproducibility. In particular, when
4772 using Guix on a host distro that is not Guix System, it is desirable to
4773 prevent access to @file{/usr/bin} and other system-wide resources from
4774 the development environment. For example, the following command spawns
4775 a Guile REPL in a ``container'' where only the store and the current
4776 working directory are mounted:
4777
4778 @example
4779 guix environment --ad-hoc --container guile -- guile
4780 @end example
4781
4782 @quotation Note
4783 The @code{--container} option requires Linux-libre 3.19 or newer.
4784 @end quotation
4785
4786 The available options are summarized below.
4787
4788 @table @code
4789 @item --root=@var{file}
4790 @itemx -r @var{file}
4791 @cindex persistent environment
4792 @cindex garbage collector root, for environments
4793 Make @var{file} a symlink to the profile for this environment, and
4794 register it as a garbage collector root.
4795
4796 This is useful if you want to protect your environment from garbage
4797 collection, to make it ``persistent''.
4798
4799 When this option is omitted, the environment is protected from garbage
4800 collection only for the duration of the @command{guix environment}
4801 session. This means that next time you recreate the same environment,
4802 you could have to rebuild or re-download packages. @xref{Invoking guix
4803 gc}, for more on GC roots.
4804
4805 @item --expression=@var{expr}
4806 @itemx -e @var{expr}
4807 Create an environment for the package or list of packages that
4808 @var{expr} evaluates to.
4809
4810 For example, running:
4811
4812 @example
4813 guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
4814 @end example
4815
4816 starts a shell with the environment for this specific variant of the
4817 PETSc package.
4818
4819 Running:
4820
4821 @example
4822 guix environment --ad-hoc -e '(@@ (gnu) %base-packages)'
4823 @end example
4824
4825 starts a shell with all the base system packages available.
4826
4827 The above commands only use the default output of the given packages.
4828 To select other outputs, two element tuples can be specified:
4829
4830 @example
4831 guix environment --ad-hoc -e '(list (@@ (gnu packages bash) bash) "include")'
4832 @end example
4833
4834 @item --load=@var{file}
4835 @itemx -l @var{file}
4836 Create an environment for the package or list of packages that the code
4837 within @var{file} evaluates to.
4838
4839 As an example, @var{file} might contain a definition like this
4840 (@pxref{Defining Packages}):
4841
4842 @lisp
4843 @verbatiminclude environment-gdb.scm
4844 @end lisp
4845
4846 @item --manifest=@var{file}
4847 @itemx -m @var{file}
4848 Create an environment for the packages contained in the manifest object
4849 returned by the Scheme code in @var{file}. This option can be repeated
4850 several times, in which case the manifests are concatenated.
4851
4852 This is similar to the same-named option in @command{guix package}
4853 (@pxref{profile-manifest, @option{--manifest}}) and uses the same
4854 manifest files.
4855
4856 @item --ad-hoc
4857 Include all specified packages in the resulting environment, as if an
4858 @i{ad hoc} package were defined with them as inputs. This option is
4859 useful for quickly creating an environment without having to write a
4860 package expression to contain the desired inputs.
4861
4862 For instance, the command:
4863
4864 @example
4865 guix environment --ad-hoc guile guile-sdl -- guile
4866 @end example
4867
4868 runs @command{guile} in an environment where Guile and Guile-SDL are
4869 available.
4870
4871 Note that this example implicitly asks for the default output of
4872 @code{guile} and @code{guile-sdl}, but it is possible to ask for a
4873 specific output---e.g., @code{glib:bin} asks for the @code{bin} output
4874 of @code{glib} (@pxref{Packages with Multiple Outputs}).
4875
4876 This option may be composed with the default behavior of @command{guix
4877 environment}. Packages appearing before @code{--ad-hoc} are interpreted
4878 as packages whose dependencies will be added to the environment, the
4879 default behavior. Packages appearing after are interpreted as packages
4880 that will be added to the environment directly.
4881
4882 @item --pure
4883 Unset existing environment variables when building the new environment, except
4884 those specified with @option{--preserve} (see below.) This has the effect of
4885 creating an environment in which search paths only contain package inputs.
4886
4887 @item --preserve=@var{regexp}
4888 @itemx -E @var{regexp}
4889 When used alongside @option{--pure}, preserve the environment variables
4890 matching @var{regexp}---in other words, put them on a ``white list'' of
4891 environment variables that must be preserved. This option can be repeated
4892 several times.
4893
4894 @example
4895 guix environment --pure --preserve=^SLURM --ad-hoc openmpi @dots{} \
4896 -- mpirun @dots{}
4897 @end example
4898
4899 This example runs @command{mpirun} in a context where the only environment
4900 variables defined are @code{PATH}, environment variables whose name starts
4901 with @code{SLURM}, as well as the usual ``precious'' variables (@code{HOME},
4902 @code{USER}, etc.)
4903
4904 @item --search-paths
4905 Display the environment variable definitions that make up the
4906 environment.
4907
4908 @item --system=@var{system}
4909 @itemx -s @var{system}
4910 Attempt to build for @var{system}---e.g., @code{i686-linux}.
4911
4912 @item --container
4913 @itemx -C
4914 @cindex container
4915 Run @var{command} within an isolated container. The current working
4916 directory outside the container is mapped inside the container.
4917 Additionally, unless overridden with @code{--user}, a dummy home
4918 directory is created that matches the current user's home directory, and
4919 @file{/etc/passwd} is configured accordingly.
4920
4921 The spawned process runs as the current user outside the container. Inside
4922 the container, it has the same UID and GID as the current user, unless
4923 @option{--user} is passed (see below.)
4924
4925 @item --network
4926 @itemx -N
4927 For containers, share the network namespace with the host system.
4928 Containers created without this flag only have access to the loopback
4929 device.
4930
4931 @item --link-profile
4932 @itemx -P
4933 For containers, link the environment profile to
4934 @file{~/.guix-profile} within the container. This is equivalent to
4935 running the command @command{ln -s $GUIX_ENVIRONMENT ~/.guix-profile}
4936 within the container. Linking will fail and abort the environment if
4937 the directory already exists, which will certainly be the case if
4938 @command{guix environment} was invoked in the user's home directory.
4939
4940 Certain packages are configured to look in
4941 @code{~/.guix-profile} for configuration files and data;@footnote{For
4942 example, the @code{fontconfig} package inspects
4943 @file{~/.guix-profile/share/fonts} for additional fonts.}
4944 @code{--link-profile} allows these programs to behave as expected within
4945 the environment.
4946
4947 @item --user=@var{user}
4948 @itemx -u @var{user}
4949 For containers, use the username @var{user} in place of the current
4950 user. The generated @file{/etc/passwd} entry within the container will
4951 contain the name @var{user}, the home directory will be
4952 @file{/home/@var{user}}, and no user GECOS data will be copied. Furthermore,
4953 the UID and GID inside the container are 1000. @var{user}
4954 need not exist on the system.
4955
4956 Additionally, any shared or exposed path (see @code{--share} and
4957 @code{--expose} respectively) whose target is within the current user's
4958 home directory will be remapped relative to @file{/home/USER}; this
4959 includes the automatic mapping of the current working directory.
4960
4961 @example
4962 # will expose paths as /home/foo/wd, /home/foo/test, and /home/foo/target
4963 cd $HOME/wd
4964 guix environment --container --user=foo \
4965 --expose=$HOME/test \
4966 --expose=/tmp/target=$HOME/target
4967 @end example
4968
4969 While this will limit the leaking of user identity through home paths
4970 and each of the user fields, this is only one useful component of a
4971 broader privacy/anonymity solution---not one in and of itself.
4972
4973 @item --no-cwd
4974 For containers, the default behavior is to share the current working
4975 directory with the isolated container and immediately change to that
4976 directory within the container. If this is undesirable, @code{--no-cwd}
4977 will cause the current working directory to @emph{not} be automatically
4978 shared and will change to the user's home directory within the container
4979 instead. See also @code{--user}.
4980
4981 @item --expose=@var{source}[=@var{target}]
4982 @itemx --share=@var{source}[=@var{target}]
4983 For containers, @code{--expose} (resp. @code{--share}) exposes the file
4984 system @var{source} from the host system as the read-only
4985 (resp. writable) file system @var{target} within the container. If
4986 @var{target} is not specified, @var{source} is used as the target mount
4987 point in the container.
4988
4989 The example below spawns a Guile REPL in a container in which the user's
4990 home directory is accessible read-only via the @file{/exchange}
4991 directory:
4992
4993 @example
4994 guix environment --container --expose=$HOME=/exchange --ad-hoc guile -- guile
4995 @end example
4996
4997 @end table
4998
4999 @command{guix environment}
5000 also supports all of the common build options that @command{guix
5001 build} supports (@pxref{Common Build Options}) as well as package
5002 transformation options (@pxref{Package Transformation Options}).
5003
5004 @node Invoking guix pack
5005 @section Invoking @command{guix pack}
5006
5007 Occasionally you want to pass software to people who are not (yet!)
5008 lucky enough to be using Guix. You'd tell them to run @command{guix
5009 package -i @var{something}}, but that's not possible in this case. This
5010 is where @command{guix pack} comes in.
5011
5012 @quotation Note
5013 If you are looking for ways to exchange binaries among machines that
5014 already run Guix, @pxref{Invoking guix copy}, @ref{Invoking guix
5015 publish}, and @ref{Invoking guix archive}.
5016 @end quotation
5017
5018 @cindex pack
5019 @cindex bundle
5020 @cindex application bundle
5021 @cindex software bundle
5022 The @command{guix pack} command creates a shrink-wrapped @dfn{pack} or
5023 @dfn{software bundle}: it creates a tarball or some other archive
5024 containing the binaries of the software you're interested in, and all
5025 its dependencies. The resulting archive can be used on any machine that
5026 does not have Guix, and people can run the exact same binaries as those
5027 you have with Guix. The pack itself is created in a bit-reproducible
5028 fashion, so anyone can verify that it really contains the build results
5029 that you pretend to be shipping.
5030
5031 For example, to create a bundle containing Guile, Emacs, Geiser, and all
5032 their dependencies, you can run:
5033
5034 @example
5035 $ guix pack guile emacs geiser
5036 @dots{}
5037 /gnu/store/@dots{}-pack.tar.gz
5038 @end example
5039
5040 The result here is a tarball containing a @file{/gnu/store} directory
5041 with all the relevant packages. The resulting tarball contains a
5042 @dfn{profile} with the three packages of interest; the profile is the
5043 same as would be created by @command{guix package -i}. It is this
5044 mechanism that is used to create Guix's own standalone binary tarball
5045 (@pxref{Binary Installation}).
5046
5047 Users of this pack would have to run
5048 @file{/gnu/store/@dots{}-profile/bin/guile} to run Guile, which you may
5049 find inconvenient. To work around it, you can create, say, a
5050 @file{/opt/gnu/bin} symlink to the profile:
5051
5052 @example
5053 guix pack -S /opt/gnu/bin=bin guile emacs geiser
5054 @end example
5055
5056 @noindent
5057 That way, users can happily type @file{/opt/gnu/bin/guile} and enjoy.
5058
5059 @cindex relocatable binaries, with @command{guix pack}
5060 What if the recipient of your pack does not have root privileges on
5061 their machine, and thus cannot unpack it in the root file system? In
5062 that case, you will want to use the @code{--relocatable} option (see
5063 below). This option produces @dfn{relocatable binaries}, meaning they
5064 they can be placed anywhere in the file system hierarchy: in the example
5065 above, users can unpack your tarball in their home directory and
5066 directly run @file{./opt/gnu/bin/guile}.
5067
5068 @cindex Docker, build an image with guix pack
5069 Alternatively, you can produce a pack in the Docker image format using
5070 the following command:
5071
5072 @example
5073 guix pack -f docker -S /bin=bin guile guile-readline
5074 @end example
5075
5076 @noindent
5077 The result is a tarball that can be passed to the @command{docker load}
5078 command, followed by @code{docker run}:
5079
5080 @example
5081 docker load < @var{file}
5082 docker run -ti guile-guile-readline /bin/guile
5083 @end example
5084
5085 @noindent
5086 where @var{file} is the image returned by @var{guix pack}, and
5087 @code{guile-guile-readline} is its ``image tag''. See the
5088 @uref{https://docs.docker.com/engine/reference/commandline/load/, Docker
5089 documentation} for more information.
5090
5091 @cindex Singularity, build an image with guix pack
5092 @cindex SquashFS, build an image with guix pack
5093 Yet another option is to produce a SquashFS image with the following
5094 command:
5095
5096 @example
5097 guix pack -f squashfs bash guile emacs geiser
5098 @end example
5099
5100 @noindent
5101 The result is a SquashFS file system image that can either be mounted or
5102 directly be used as a file system container image with the
5103 @uref{https://singularity.lbl.gov, Singularity container execution
5104 environment}, using commands like @command{singularity shell} or
5105 @command{singularity exec}.
5106
5107 Several command-line options allow you to customize your pack:
5108
5109 @table @code
5110 @item --format=@var{format}
5111 @itemx -f @var{format}
5112 Produce a pack in the given @var{format}.
5113
5114 The available formats are:
5115
5116 @table @code
5117 @item tarball
5118 This is the default format. It produces a tarball containing all the
5119 specified binaries and symlinks.
5120
5121 @item docker
5122 This produces a tarball that follows the
5123 @uref{https://github.com/docker/docker/blob/master/image/spec/v1.2.md,
5124 Docker Image Specification}. The ``repository name'' as it appears in
5125 the output of the @command{docker images} command is computed from
5126 package names passed on the command line or in the manifest file.
5127
5128 @item squashfs
5129 This produces a SquashFS image containing all the specified binaries and
5130 symlinks, as well as empty mount points for virtual file systems like
5131 procfs.
5132
5133 @quotation Note
5134 Singularity @emph{requires} you to provide @file{/bin/sh} in the image.
5135 For that reason, @command{guix pack -f squashfs} always implies @code{-S
5136 /bin=bin}. Thus, your @command{guix pack} invocation must always start
5137 with something like:
5138
5139 @example
5140 guix pack -f squashfs bash @dots{}
5141 @end example
5142
5143 If you forget the @code{bash} (or similar) package, @command{singularity
5144 run} and @command{singularity exec} will fail with an unhelpful ``no
5145 such file or directory'' message.
5146 @end quotation
5147 @end table
5148
5149 @cindex relocatable binaries
5150 @item --relocatable
5151 @itemx -R
5152 Produce @dfn{relocatable binaries}---i.e., binaries that can be placed
5153 anywhere in the file system hierarchy and run from there.
5154
5155 When this option is passed once, the resulting binaries require support for
5156 @dfn{user namespaces} in the kernel Linux; when passed
5157 @emph{twice}@footnote{Here's a trick to memorize it: @code{-RR}, which adds
5158 PRoot support, can be thought of as the abbreviation of ``Really
5159 Relocatable''. Neat, isn't it?}, relocatable binaries fall to back to PRoot
5160 if user namespaces are unavailable, and essentially work anywhere---see below
5161 for the implications.
5162
5163 For example, if you create a pack containing Bash with:
5164
5165 @example
5166 guix pack -RR -S /mybin=bin bash
5167 @end example
5168
5169 @noindent
5170 ...@: you can copy that pack to a machine that lacks Guix, and from your
5171 home directory as a normal user, run:
5172
5173 @example
5174 tar xf pack.tar.gz
5175 ./mybin/sh
5176 @end example
5177
5178 @noindent
5179 In that shell, if you type @code{ls /gnu/store}, you'll notice that
5180 @file{/gnu/store} shows up and contains all the dependencies of
5181 @code{bash}, even though the machine actually lacks @file{/gnu/store}
5182 altogether! That is probably the simplest way to deploy Guix-built
5183 software on a non-Guix machine.
5184
5185 @quotation Note
5186 By default, relocatable binaries rely on the @dfn{user namespace} feature of
5187 the kernel Linux, which allows unprivileged users to mount or change root.
5188 Old versions of Linux did not support it, and some GNU/Linux distributions
5189 turn it off.
5190
5191 To produce relocatable binaries that work even in the absence of user
5192 namespaces, pass @option{--relocatable} or @option{-R} @emph{twice}. In that
5193 case, binaries will try user namespace support and fall back to PRoot if user
5194 namespaces are not supported.
5195
5196 The @uref{https://proot-me.github.io/, PRoot} program provides the necessary
5197 support for file system virtualization. It achieves that by using the
5198 @code{ptrace} system call on the running program. This approach has the
5199 advantage to work without requiring special kernel support, but it incurs
5200 run-time overhead every time a system call is made.
5201 @end quotation
5202
5203 @cindex entry point, for Docker images
5204 @item --entry-point=@var{command}
5205 Use @var{command} as the @dfn{entry point} of the resulting pack, if the pack
5206 format supports it---currently @code{docker} and @code{squashfs} (Singularity)
5207 support it. @var{command} must be relative to the profile contained in the
5208 pack.
5209
5210 The entry point specifies the command that tools like @code{docker run} or
5211 @code{singularity run} automatically start by default. For example, you can
5212 do:
5213
5214 @example
5215 guix pack -f docker --entry-point=bin/guile guile
5216 @end example
5217
5218 The resulting pack can easily be loaded and @code{docker run} with no extra
5219 arguments will spawn @code{bin/guile}:
5220
5221 @example
5222 docker load -i pack.tar.gz
5223 docker run @var{image-id}
5224 @end example
5225
5226 @item --expression=@var{expr}
5227 @itemx -e @var{expr}
5228 Consider the package @var{expr} evaluates to.
5229
5230 This has the same purpose as the same-named option in @command{guix
5231 build} (@pxref{Additional Build Options, @code{--expression} in
5232 @command{guix build}}).
5233
5234 @item --manifest=@var{file}
5235 @itemx -m @var{file}
5236 Use the packages contained in the manifest object returned by the Scheme
5237 code in @var{file}. This option can be repeated several times, in which
5238 case the manifests are concatenated.
5239
5240 This has a similar purpose as the same-named option in @command{guix
5241 package} (@pxref{profile-manifest, @option{--manifest}}) and uses the
5242 same manifest files. It allows you to define a collection of packages
5243 once and use it both for creating profiles and for creating archives
5244 for use on machines that do not have Guix installed. Note that you can
5245 specify @emph{either} a manifest file @emph{or} a list of packages,
5246 but not both.
5247
5248 @item --system=@var{system}
5249 @itemx -s @var{system}
5250 Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
5251 the system type of the build host.
5252
5253 @item --target=@var{triplet}
5254 @cindex cross-compilation
5255 Cross-build for @var{triplet}, which must be a valid GNU triplet, such
5256 as @code{"mips64el-linux-gnu"} (@pxref{Specifying target triplets, GNU
5257 configuration triplets,, autoconf, Autoconf}).
5258
5259 @item --compression=@var{tool}
5260 @itemx -C @var{tool}
5261 Compress the resulting tarball using @var{tool}---one of @code{gzip},
5262 @code{bzip2}, @code{xz}, @code{lzip}, or @code{none} for no compression.
5263
5264 @item --symlink=@var{spec}
5265 @itemx -S @var{spec}
5266 Add the symlinks specified by @var{spec} to the pack. This option can
5267 appear several times.
5268
5269 @var{spec} has the form @code{@var{source}=@var{target}}, where
5270 @var{source} is the symlink that will be created and @var{target} is the
5271 symlink target.
5272
5273 For instance, @code{-S /opt/gnu/bin=bin} creates a @file{/opt/gnu/bin}
5274 symlink pointing to the @file{bin} sub-directory of the profile.
5275
5276 @item --save-provenance
5277 Save provenance information for the packages passed on the command line.
5278 Provenance information includes the URL and commit of the channels in use
5279 (@pxref{Channels}).
5280
5281 Provenance information is saved in the
5282 @file{/gnu/store/@dots{}-profile/manifest} file in the pack, along with the
5283 usual package metadata---the name and version of each package, their
5284 propagated inputs, and so on. It is useful information to the recipient of
5285 the pack, who then knows how the pack was (supposedly) obtained.
5286
5287 This option is not enabled by default because, like timestamps, provenance
5288 information contributes nothing to the build process. In other words, there
5289 is an infinity of channel URLs and commit IDs that can lead to the same pack.
5290 Recording such ``silent'' metadata in the output thus potentially breaks the
5291 source-to-binary bitwise reproducibility property.
5292
5293 @item --root=@var{file}
5294 @itemx -r @var{file}
5295 @cindex garbage collector root, for packs
5296 Make @var{file} a symlink to the resulting pack, and register it as a garbage
5297 collector root.
5298
5299 @item --localstatedir
5300 @itemx --profile-name=@var{name}
5301 Include the ``local state directory'', @file{/var/guix}, in the resulting
5302 pack, and notably the @file{/var/guix/profiles/per-user/root/@var{name}}
5303 profile---by default @var{name} is @code{guix-profile}, which corresponds to
5304 @file{~root/.guix-profile}.
5305
5306 @file{/var/guix} contains the store database (@pxref{The Store}) as well
5307 as garbage-collector roots (@pxref{Invoking guix gc}). Providing it in
5308 the pack means that the store is ``complete'' and manageable by Guix;
5309 not providing it pack means that the store is ``dead'': items cannot be
5310 added to it or removed from it after extraction of the pack.
5311
5312 One use case for this is the Guix self-contained binary tarball
5313 (@pxref{Binary Installation}).
5314
5315 @item --derivation
5316 @itemx -d
5317 Print the name of the derivation that builds the pack.
5318
5319 @item --bootstrap
5320 Use the bootstrap binaries to build the pack. This option is only
5321 useful to Guix developers.
5322 @end table
5323
5324 In addition, @command{guix pack} supports all the common build options
5325 (@pxref{Common Build Options}) and all the package transformation
5326 options (@pxref{Package Transformation Options}).
5327
5328
5329 @c *********************************************************************
5330 @node Programming Interface
5331 @chapter Programming Interface
5332
5333 GNU Guix provides several Scheme programming interfaces (APIs) to
5334 define, build, and query packages. The first interface allows users to
5335 write high-level package definitions. These definitions refer to
5336 familiar packaging concepts, such as the name and version of a package,
5337 its build system, and its dependencies. These definitions can then be
5338 turned into concrete build actions.
5339
5340 Build actions are performed by the Guix daemon, on behalf of users. In a
5341 standard setup, the daemon has write access to the store---the
5342 @file{/gnu/store} directory---whereas users do not. The recommended
5343 setup also has the daemon perform builds in chroots, under a specific
5344 build users, to minimize interference with the rest of the system.
5345
5346 @cindex derivation
5347 Lower-level APIs are available to interact with the daemon and the
5348 store. To instruct the daemon to perform a build action, users actually
5349 provide it with a @dfn{derivation}. A derivation is a low-level
5350 representation of the build actions to be taken, and the environment in
5351 which they should occur---derivations are to package definitions what
5352 assembly is to C programs. The term ``derivation'' comes from the fact
5353 that build results @emph{derive} from them.
5354
5355 This chapter describes all these APIs in turn, starting from high-level
5356 package definitions.
5357
5358 @menu
5359 * Package Modules:: Packages from the programmer's viewpoint.
5360 * Defining Packages:: Defining new packages.
5361 * Build Systems:: Specifying how packages are built.
5362 * The Store:: Manipulating the package store.
5363 * Derivations:: Low-level interface to package derivations.
5364 * The Store Monad:: Purely functional interface to the store.
5365 * G-Expressions:: Manipulating build expressions.
5366 * Invoking guix repl:: Fiddling with Guix interactively.
5367 @end menu
5368
5369 @node Package Modules
5370 @section Package Modules
5371
5372 From a programming viewpoint, the package definitions of the
5373 GNU distribution are provided by Guile modules in the @code{(gnu packages
5374 @dots{})} name space@footnote{Note that packages under the @code{(gnu
5375 packages @dots{})} module name space are not necessarily ``GNU
5376 packages''. This module naming scheme follows the usual Guile module
5377 naming convention: @code{gnu} means that these modules are distributed
5378 as part of the GNU system, and @code{packages} identifies modules that
5379 define packages.} (@pxref{Modules, Guile modules,, guile, GNU Guile
5380 Reference Manual}). For instance, the @code{(gnu packages emacs)}
5381 module exports a variable named @code{emacs}, which is bound to a
5382 @code{<package>} object (@pxref{Defining Packages}).
5383
5384 The @code{(gnu packages @dots{})} module name space is
5385 automatically scanned for packages by the command-line tools. For
5386 instance, when running @code{guix install emacs}, all the @code{(gnu
5387 packages @dots{})} modules are scanned until one that exports a package
5388 object whose name is @code{emacs} is found. This package search
5389 facility is implemented in the @code{(gnu packages)} module.
5390
5391 @cindex customization, of packages
5392 @cindex package module search path
5393 Users can store package definitions in modules with different
5394 names---e.g., @code{(my-packages emacs)}@footnote{Note that the file
5395 name and module name must match. For instance, the @code{(my-packages
5396 emacs)} module must be stored in a @file{my-packages/emacs.scm} file
5397 relative to the load path specified with @option{--load-path} or
5398 @code{GUIX_PACKAGE_PATH}. @xref{Modules and the File System,,,
5399 guile, GNU Guile Reference Manual}, for details.}. There are two ways to make
5400 these package definitions visible to the user interfaces:
5401
5402 @enumerate
5403 @item
5404 By adding the directory containing your package modules to the search path
5405 with the @code{-L} flag of @command{guix package} and other commands
5406 (@pxref{Common Build Options}), or by setting the @code{GUIX_PACKAGE_PATH}
5407 environment variable described below.
5408
5409 @item
5410 By defining a @dfn{channel} and configuring @command{guix pull} so that it
5411 pulls from it. A channel is essentially a Git repository containing package
5412 modules. @xref{Channels}, for more information on how to define and use
5413 channels.
5414 @end enumerate
5415
5416 @code{GUIX_PACKAGE_PATH} works similarly to other search path variables:
5417
5418 @defvr {Environment Variable} GUIX_PACKAGE_PATH
5419 This is a colon-separated list of directories to search for additional
5420 package modules. Directories listed in this variable take precedence
5421 over the own modules of the distribution.
5422 @end defvr
5423
5424 The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}:
5425 each package is built based solely on other packages in the
5426 distribution. The root of this dependency graph is a small set of
5427 @dfn{bootstrap binaries}, provided by the @code{(gnu packages
5428 bootstrap)} module. For more information on bootstrapping,
5429 @pxref{Bootstrapping}.
5430
5431 @node Defining Packages
5432 @section Defining Packages
5433
5434 The high-level interface to package definitions is implemented in the
5435 @code{(guix packages)} and @code{(guix build-system)} modules. As an
5436 example, the package definition, or @dfn{recipe}, for the GNU Hello
5437 package looks like this:
5438
5439 @lisp
5440 (define-module (gnu packages hello)
5441 #:use-module (guix packages)
5442 #:use-module (guix download)
5443 #:use-module (guix build-system gnu)
5444 #:use-module (guix licenses)
5445 #:use-module (gnu packages gawk))
5446
5447 (define-public hello
5448 (package
5449 (name "hello")
5450 (version "2.10")
5451 (source (origin
5452 (method url-fetch)
5453 (uri (string-append "mirror://gnu/hello/hello-" version
5454 ".tar.gz"))
5455 (sha256
5456 (base32
5457 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
5458 (build-system gnu-build-system)
5459 (arguments '(#:configure-flags '("--enable-silent-rules")))
5460 (inputs `(("gawk" ,gawk)))
5461 (synopsis "Hello, GNU world: An example GNU package")
5462 (description "Guess what GNU Hello prints!")
5463 (home-page "https://www.gnu.org/software/hello/")
5464 (license gpl3+)))
5465 @end lisp
5466
5467 @noindent
5468 Without being a Scheme expert, the reader may have guessed the meaning
5469 of the various fields here. This expression binds the variable
5470 @code{hello} to a @code{<package>} object, which is essentially a record
5471 (@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}).
5472 This package object can be inspected using procedures found in the
5473 @code{(guix packages)} module; for instance, @code{(package-name hello)}
5474 returns---surprise!---@code{"hello"}.
5475
5476 With luck, you may be able to import part or all of the definition of
5477 the package you are interested in from another repository, using the
5478 @code{guix import} command (@pxref{Invoking guix import}).
5479
5480 In the example above, @var{hello} is defined in a module of its own,
5481 @code{(gnu packages hello)}. Technically, this is not strictly
5482 necessary, but it is convenient to do so: all the packages defined in
5483 modules under @code{(gnu packages @dots{})} are automatically known to
5484 the command-line tools (@pxref{Package Modules}).
5485
5486 There are a few points worth noting in the above package definition:
5487
5488 @itemize
5489 @item
5490 The @code{source} field of the package is an @code{<origin>} object
5491 (@pxref{origin Reference}, for the complete reference).
5492 Here, the @code{url-fetch} method from @code{(guix download)} is used,
5493 meaning that the source is a file to be downloaded over FTP or HTTP.
5494
5495 The @code{mirror://gnu} prefix instructs @code{url-fetch} to use one of
5496 the GNU mirrors defined in @code{(guix download)}.
5497
5498 The @code{sha256} field specifies the expected SHA256 hash of the file
5499 being downloaded. It is mandatory, and allows Guix to check the
5500 integrity of the file. The @code{(base32 @dots{})} form introduces the
5501 base32 representation of the hash. You can obtain this information with
5502 @code{guix download} (@pxref{Invoking guix download}) and @code{guix
5503 hash} (@pxref{Invoking guix hash}).
5504
5505 @cindex patches
5506 When needed, the @code{origin} form can also have a @code{patches} field
5507 listing patches to be applied, and a @code{snippet} field giving a
5508 Scheme expression to modify the source code.
5509
5510 @item
5511 @cindex GNU Build System
5512 The @code{build-system} field specifies the procedure to build the
5513 package (@pxref{Build Systems}). Here, @var{gnu-build-system}
5514 represents the familiar GNU Build System, where packages may be
5515 configured, built, and installed with the usual @code{./configure &&
5516 make && make check && make install} command sequence.
5517
5518 @item
5519 The @code{arguments} field specifies options for the build system
5520 (@pxref{Build Systems}). Here it is interpreted by
5521 @var{gnu-build-system} as a request run @file{configure} with the
5522 @code{--enable-silent-rules} flag.
5523
5524 @cindex quote
5525 @cindex quoting
5526 @findex '
5527 @findex quote
5528 What about these quote (@code{'}) characters? They are Scheme syntax to
5529 introduce a literal list; @code{'} is synonymous with @code{quote}.
5530 @xref{Expression Syntax, quoting,, guile, GNU Guile Reference Manual},
5531 for details. Here the value of the @code{arguments} field is a list of
5532 arguments passed to the build system down the road, as with @code{apply}
5533 (@pxref{Fly Evaluation, @code{apply},, guile, GNU Guile Reference
5534 Manual}).
5535
5536 The hash-colon (@code{#:}) sequence defines a Scheme @dfn{keyword}
5537 (@pxref{Keywords,,, guile, GNU Guile Reference Manual}), and
5538 @code{#:configure-flags} is a keyword used to pass a keyword argument
5539 to the build system (@pxref{Coding With Keywords,,, guile, GNU Guile
5540 Reference Manual}).
5541
5542 @item
5543 The @code{inputs} field specifies inputs to the build process---i.e.,
5544 build-time or run-time dependencies of the package. Here, we define an
5545 input called @code{"gawk"} whose value is that of the @var{gawk}
5546 variable; @var{gawk} is itself bound to a @code{<package>} object.
5547
5548 @cindex backquote (quasiquote)
5549 @findex `
5550 @findex quasiquote
5551 @cindex comma (unquote)
5552 @findex ,
5553 @findex unquote
5554 @findex ,@@
5555 @findex unquote-splicing
5556 Again, @code{`} (a backquote, synonymous with @code{quasiquote}) allows
5557 us to introduce a literal list in the @code{inputs} field, while
5558 @code{,} (a comma, synonymous with @code{unquote}) allows us to insert a
5559 value in that list (@pxref{Expression Syntax, unquote,, guile, GNU Guile
5560 Reference Manual}).
5561
5562 Note that GCC, Coreutils, Bash, and other essential tools do not need to
5563 be specified as inputs here. Instead, @var{gnu-build-system} takes care
5564 of ensuring that they are present (@pxref{Build Systems}).
5565
5566 However, any other dependencies need to be specified in the
5567 @code{inputs} field. Any dependency not specified here will simply be
5568 unavailable to the build process, possibly leading to a build failure.
5569 @end itemize
5570
5571 @xref{package Reference}, for a full description of possible fields.
5572
5573 Once a package definition is in place, the
5574 package may actually be built using the @code{guix build} command-line
5575 tool (@pxref{Invoking guix build}), troubleshooting any build failures
5576 you encounter (@pxref{Debugging Build Failures}). You can easily jump back to the
5577 package definition using the @command{guix edit} command
5578 (@pxref{Invoking guix edit}).
5579 @xref{Packaging Guidelines}, for
5580 more information on how to test package definitions, and
5581 @ref{Invoking guix lint}, for information on how to check a definition
5582 for style conformance.
5583 @vindex GUIX_PACKAGE_PATH
5584 Lastly, @pxref{Channels}, for information
5585 on how to extend the distribution by adding your own package definitions
5586 in a ``channel''.
5587
5588 Finally, updating the package definition to a new upstream version
5589 can be partly automated by the @command{guix refresh} command
5590 (@pxref{Invoking guix refresh}).
5591
5592 Behind the scenes, a derivation corresponding to the @code{<package>}
5593 object is first computed by the @code{package-derivation} procedure.
5594 That derivation is stored in a @code{.drv} file under @file{/gnu/store}.
5595 The build actions it prescribes may then be realized by using the
5596 @code{build-derivations} procedure (@pxref{The Store}).
5597
5598 @deffn {Scheme Procedure} package-derivation @var{store} @var{package} [@var{system}]
5599 Return the @code{<derivation>} object of @var{package} for @var{system}
5600 (@pxref{Derivations}).
5601
5602 @var{package} must be a valid @code{<package>} object, and @var{system}
5603 must be a string denoting the target system type---e.g.,
5604 @code{"x86_64-linux"} for an x86_64 Linux-based GNU system. @var{store}
5605 must be a connection to the daemon, which operates on the store
5606 (@pxref{The Store}).
5607 @end deffn
5608
5609 @noindent
5610 @cindex cross-compilation
5611 Similarly, it is possible to compute a derivation that cross-builds a
5612 package for some other system:
5613
5614 @deffn {Scheme Procedure} package-cross-derivation @var{store} @
5615 @var{package} @var{target} [@var{system}]
5616 Return the @code{<derivation>} object of @var{package} cross-built from
5617 @var{system} to @var{target}.
5618
5619 @var{target} must be a valid GNU triplet denoting the target hardware
5620 and operating system, such as @code{"mips64el-linux-gnu"}
5621 (@pxref{Specifying Target Triplets,,, autoconf, Autoconf}).
5622 @end deffn
5623
5624 @cindex package transformations
5625 @cindex input rewriting
5626 @cindex dependency tree rewriting
5627 Packages can be manipulated in arbitrary ways. An example of a useful
5628 transformation is @dfn{input rewriting}, whereby the dependency tree of
5629 a package is rewritten by replacing specific inputs by others:
5630
5631 @deffn {Scheme Procedure} package-input-rewriting @var{replacements} @
5632 [@var{rewrite-name}]
5633 Return a procedure that, when passed a package, replaces its direct and
5634 indirect dependencies (but not its implicit inputs) according to
5635 @var{replacements}. @var{replacements} is a list of package pairs; the
5636 first element of each pair is the package to replace, and the second one
5637 is the replacement.
5638
5639 Optionally, @var{rewrite-name} is a one-argument procedure that takes
5640 the name of a package and returns its new name after rewrite.
5641 @end deffn
5642
5643 @noindent
5644 Consider this example:
5645
5646 @lisp
5647 (define libressl-instead-of-openssl
5648 ;; This is a procedure to replace OPENSSL by LIBRESSL,
5649 ;; recursively.
5650 (package-input-rewriting `((,openssl . ,libressl))))
5651
5652 (define git-with-libressl
5653 (libressl-instead-of-openssl git))
5654 @end lisp
5655
5656 @noindent
5657 Here we first define a rewriting procedure that replaces @var{openssl}
5658 with @var{libressl}. Then we use it to define a @dfn{variant} of the
5659 @var{git} package that uses @var{libressl} instead of @var{openssl}.
5660 This is exactly what the @option{--with-input} command-line option does
5661 (@pxref{Package Transformation Options, @option{--with-input}}).
5662
5663 The following variant of @code{package-input-rewriting} can match packages to
5664 be replaced by name rather than by identity.
5665
5666 @deffn {Scheme Procedure} package-input-rewriting/spec @var{replacements}
5667 Return a procedure that, given a package, applies the given @var{replacements} to
5668 all the package graph (excluding implicit inputs). @var{replacements} is a list of
5669 spec/procedures pair; each spec is a package specification such as @code{"gcc"} or
5670 @code{"guile@@2"}, and each procedure takes a matching package and returns a
5671 replacement for that package.
5672 @end deffn
5673
5674 The example above could be rewritten this way:
5675
5676 @lisp
5677 (define libressl-instead-of-openssl
5678 ;; Replace all the packages called "openssl" with LibreSSL.
5679 (package-input-rewriting/spec `(("openssl" . ,(const libressl)))))
5680 @end lisp
5681
5682 The key difference here is that, this time, packages are matched by spec and
5683 not by identity. In other words, any package in the graph that is called
5684 @code{openssl} will be replaced.
5685
5686 A more generic procedure to rewrite a package dependency graph is
5687 @code{package-mapping}: it supports arbitrary changes to nodes in the
5688 graph.
5689
5690 @deffn {Scheme Procedure} package-mapping @var{proc} [@var{cut?}]
5691 Return a procedure that, given a package, applies @var{proc} to all the packages
5692 depended on and returns the resulting package. The procedure stops recursion
5693 when @var{cut?} returns true for a given package.
5694 @end deffn
5695
5696 @menu
5697 * package Reference:: The package data type.
5698 * origin Reference:: The origin data type.
5699 @end menu
5700
5701
5702 @node package Reference
5703 @subsection @code{package} Reference
5704
5705 This section summarizes all the options available in @code{package}
5706 declarations (@pxref{Defining Packages}).
5707
5708 @deftp {Data Type} package
5709 This is the data type representing a package recipe.
5710
5711 @table @asis
5712 @item @code{name}
5713 The name of the package, as a string.
5714
5715 @item @code{version}
5716 The version of the package, as a string.
5717
5718 @item @code{source}
5719 An object telling how the source code for the package should be
5720 acquired. Most of the time, this is an @code{origin} object, which
5721 denotes a file fetched from the Internet (@pxref{origin Reference}). It
5722 can also be any other ``file-like'' object such as a @code{local-file},
5723 which denotes a file from the local file system (@pxref{G-Expressions,
5724 @code{local-file}}).
5725
5726 @item @code{build-system}
5727 The build system that should be used to build the package (@pxref{Build
5728 Systems}).
5729
5730 @item @code{arguments} (default: @code{'()})
5731 The arguments that should be passed to the build system. This is a
5732 list, typically containing sequential keyword-value pairs.
5733
5734 @item @code{inputs} (default: @code{'()})
5735 @itemx @code{native-inputs} (default: @code{'()})
5736 @itemx @code{propagated-inputs} (default: @code{'()})
5737 @cindex inputs, of packages
5738 These fields list dependencies of the package. Each one is a list of
5739 tuples, where each tuple has a label for the input (a string) as its
5740 first element, a package, origin, or derivation as its second element,
5741 and optionally the name of the output thereof that should be used, which
5742 defaults to @code{"out"} (@pxref{Packages with Multiple Outputs}, for
5743 more on package outputs). For example, the list below specifies three
5744 inputs:
5745
5746 @lisp
5747 `(("libffi" ,libffi)
5748 ("libunistring" ,libunistring)
5749 ("glib:bin" ,glib "bin")) ;the "bin" output of Glib
5750 @end lisp
5751
5752 @cindex cross compilation, package dependencies
5753 The distinction between @code{native-inputs} and @code{inputs} is
5754 necessary when considering cross-compilation. When cross-compiling,
5755 dependencies listed in @code{inputs} are built for the @emph{target}
5756 architecture; conversely, dependencies listed in @code{native-inputs}
5757 are built for the architecture of the @emph{build} machine.
5758
5759 @code{native-inputs} is typically used to list tools needed at
5760 build time, but not at run time, such as Autoconf, Automake, pkg-config,
5761 Gettext, or Bison. @command{guix lint} can report likely mistakes in
5762 this area (@pxref{Invoking guix lint}).
5763
5764 @anchor{package-propagated-inputs}
5765 Lastly, @code{propagated-inputs} is similar to @code{inputs}, but the
5766 specified packages will be automatically installed alongside the package
5767 they belong to (@pxref{package-cmd-propagated-inputs, @command{guix
5768 package}}, for information on how @command{guix package} deals with
5769 propagated inputs.)
5770
5771 For example this is necessary when a C/C++ library needs headers of
5772 another library to compile, or when a pkg-config file refers to another
5773 one @i{via} its @code{Requires} field.
5774
5775 Another example where @code{propagated-inputs} is useful is for languages
5776 that lack a facility to record the run-time search path akin to the
5777 @code{RUNPATH} of ELF files; this includes Guile, Python, Perl, and
5778 more. To ensure that libraries written in those languages can find
5779 library code they depend on at run time, run-time dependencies must be
5780 listed in @code{propagated-inputs} rather than @code{inputs}.
5781
5782 @item @code{outputs} (default: @code{'("out")})
5783 The list of output names of the package. @xref{Packages with Multiple
5784 Outputs}, for typical uses of additional outputs.
5785
5786 @item @code{native-search-paths} (default: @code{'()})
5787 @itemx @code{search-paths} (default: @code{'()})
5788 A list of @code{search-path-specification} objects describing
5789 search-path environment variables honored by the package.
5790
5791 @item @code{replacement} (default: @code{#f})
5792 This must be either @code{#f} or a package object that will be used as a
5793 @dfn{replacement} for this package. @xref{Security Updates, grafts},
5794 for details.
5795
5796 @item @code{synopsis}
5797 A one-line description of the package.
5798
5799 @item @code{description}
5800 A more elaborate description of the package.
5801
5802 @item @code{license}
5803 @cindex license, of packages
5804 The license of the package; a value from @code{(guix licenses)},
5805 or a list of such values.
5806
5807 @item @code{home-page}
5808 The URL to the home-page of the package, as a string.
5809
5810 @item @code{supported-systems} (default: @var{%supported-systems})
5811 The list of systems supported by the package, as strings of the form
5812 @code{architecture-kernel}, for example @code{"x86_64-linux"}.
5813
5814 @item @code{location} (default: source location of the @code{package} form)
5815 The source location of the package. It is useful to override this when
5816 inheriting from another package, in which case this field is not
5817 automatically corrected.
5818 @end table
5819 @end deftp
5820
5821 @deffn {Scheme Syntax} this-package
5822 When used in the @emph{lexical scope} of a package field definition, this
5823 identifier resolves to the package being defined.
5824
5825 The example below shows how to add a package as a native input of itself when
5826 cross-compiling:
5827
5828 @lisp
5829 (package
5830 (name "guile")
5831 ;; ...
5832
5833 ;; When cross-compiled, Guile, for example, depends on
5834 ;; a native version of itself. Add it here.
5835 (native-inputs (if (%current-target-system)
5836 `(("self" ,this-package))
5837 '())))
5838 @end lisp
5839
5840 It is an error to refer to @code{this-package} outside a package definition.
5841 @end deffn
5842
5843 @node origin Reference
5844 @subsection @code{origin} Reference
5845
5846 This section summarizes all the options available in @code{origin}
5847 declarations (@pxref{Defining Packages}).
5848
5849 @deftp {Data Type} origin
5850 This is the data type representing a source code origin.
5851
5852 @table @asis
5853 @item @code{uri}
5854 An object containing the URI of the source. The object type depends on
5855 the @code{method} (see below). For example, when using the
5856 @var{url-fetch} method of @code{(guix download)}, the valid @code{uri}
5857 values are: a URL represented as a string, or a list thereof.
5858
5859 @item @code{method}
5860 A procedure that handles the URI.
5861
5862 Examples include:
5863
5864 @table @asis
5865 @item @var{url-fetch} from @code{(guix download)}
5866 download a file from the HTTP, HTTPS, or FTP URL specified in the
5867 @code{uri} field;
5868
5869 @vindex git-fetch
5870 @item @var{git-fetch} from @code{(guix git-download)}
5871 clone the Git version control repository, and check out the revision
5872 specified in the @code{uri} field as a @code{git-reference} object; a
5873 @code{git-reference} looks like this:
5874
5875 @lisp
5876 (git-reference
5877 (url "https://git.savannah.gnu.org/git/hello.git")
5878 (commit "v2.10"))
5879 @end lisp
5880 @end table
5881
5882 @item @code{sha256}
5883 A bytevector containing the SHA-256 hash of the source. Typically the
5884 @code{base32} form is used here to generate the bytevector from a
5885 base-32 string.
5886
5887 You can obtain this information using @code{guix download}
5888 (@pxref{Invoking guix download}) or @code{guix hash} (@pxref{Invoking
5889 guix hash}).
5890
5891 @item @code{file-name} (default: @code{#f})
5892 The file name under which the source code should be saved. When this is
5893 @code{#f}, a sensible default value will be used in most cases. In case
5894 the source is fetched from a URL, the file name from the URL will be
5895 used. For version control checkouts, it is recommended to provide the
5896 file name explicitly because the default is not very descriptive.
5897
5898 @item @code{patches} (default: @code{'()})
5899 A list of file names, origins, or file-like objects (@pxref{G-Expressions,
5900 file-like objects}) pointing to patches to be applied to the source.
5901
5902 This list of patches must be unconditional. In particular, it cannot
5903 depend on the value of @code{%current-system} or
5904 @code{%current-target-system}.
5905
5906 @item @code{snippet} (default: @code{#f})
5907 A G-expression (@pxref{G-Expressions}) or S-expression that will be run
5908 in the source directory. This is a convenient way to modify the source,
5909 sometimes more convenient than a patch.
5910
5911 @item @code{patch-flags} (default: @code{'("-p1")})
5912 A list of command-line flags that should be passed to the @code{patch}
5913 command.
5914
5915 @item @code{patch-inputs} (default: @code{#f})
5916 Input packages or derivations to the patching process. When this is
5917 @code{#f}, the usual set of inputs necessary for patching are provided,
5918 such as GNU@tie{}Patch.
5919
5920 @item @code{modules} (default: @code{'()})
5921 A list of Guile modules that should be loaded during the patching
5922 process and while running the code in the @code{snippet} field.
5923
5924 @item @code{patch-guile} (default: @code{#f})
5925 The Guile package that should be used in the patching process. When
5926 this is @code{#f}, a sensible default is used.
5927 @end table
5928 @end deftp
5929
5930
5931 @node Build Systems
5932 @section Build Systems
5933
5934 @cindex build system
5935 Each package definition specifies a @dfn{build system} and arguments for
5936 that build system (@pxref{Defining Packages}). This @code{build-system}
5937 field represents the build procedure of the package, as well as implicit
5938 dependencies of that build procedure.
5939
5940 Build systems are @code{<build-system>} objects. The interface to
5941 create and manipulate them is provided by the @code{(guix build-system)}
5942 module, and actual build systems are exported by specific modules.
5943
5944 @cindex bag (low-level package representation)
5945 Under the hood, build systems first compile package objects to
5946 @dfn{bags}. A @dfn{bag} is like a package, but with less
5947 ornamentation---in other words, a bag is a lower-level representation of
5948 a package, which includes all the inputs of that package, including some
5949 that were implicitly added by the build system. This intermediate
5950 representation is then compiled to a derivation (@pxref{Derivations}).
5951
5952 Build systems accept an optional list of @dfn{arguments}. In package
5953 definitions, these are passed @i{via} the @code{arguments} field
5954 (@pxref{Defining Packages}). They are typically keyword arguments
5955 (@pxref{Optional Arguments, keyword arguments in Guile,, guile, GNU
5956 Guile Reference Manual}). The value of these arguments is usually
5957 evaluated in the @dfn{build stratum}---i.e., by a Guile process launched
5958 by the daemon (@pxref{Derivations}).
5959
5960 The main build system is @code{gnu-build-system}, which implements the
5961 standard build procedure for GNU and many other packages. It
5962 is provided by the @code{(guix build-system gnu)} module.
5963
5964 @defvr {Scheme Variable} gnu-build-system
5965 @code{gnu-build-system} represents the GNU Build System, and variants
5966 thereof (@pxref{Configuration, configuration and makefile conventions,,
5967 standards, GNU Coding Standards}).
5968
5969 @cindex build phases
5970 In a nutshell, packages using it are configured, built, and installed with
5971 the usual @code{./configure && make && make check && make install}
5972 command sequence. In practice, a few additional steps are often needed.
5973 All these steps are split up in separate @dfn{phases},
5974 notably@footnote{Please see the @code{(guix build gnu-build-system)}
5975 modules for more details about the build phases.}:
5976
5977 @table @code
5978 @item unpack
5979 Unpack the source tarball, and change the current directory to the
5980 extracted source tree. If the source is actually a directory, copy it
5981 to the build tree, and enter that directory.
5982
5983 @item patch-source-shebangs
5984 Patch shebangs encountered in source files so they refer to the right
5985 store file names. For instance, this changes @code{#!/bin/sh} to
5986 @code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
5987
5988 @item configure
5989 Run the @file{configure} script with a number of default options, such
5990 as @code{--prefix=/gnu/store/@dots{}}, as well as the options specified
5991 by the @code{#:configure-flags} argument.
5992
5993 @item build
5994 Run @code{make} with the list of flags specified with
5995 @code{#:make-flags}. If the @code{#:parallel-build?} argument is true
5996 (the default), build with @code{make -j}.
5997
5998 @item check
5999 Run @code{make check}, or some other target specified with
6000 @code{#:test-target}, unless @code{#:tests? #f} is passed. If the
6001 @code{#:parallel-tests?} argument is true (the default), run @code{make
6002 check -j}.
6003
6004 @item install
6005 Run @code{make install} with the flags listed in @code{#:make-flags}.
6006
6007 @item patch-shebangs
6008 Patch shebangs on the installed executable files.
6009
6010 @item strip
6011 Strip debugging symbols from ELF files (unless @code{#:strip-binaries?}
6012 is false), copying them to the @code{debug} output when available
6013 (@pxref{Installing Debugging Files}).
6014 @end table
6015
6016 @vindex %standard-phases
6017 The build-side module @code{(guix build gnu-build-system)} defines
6018 @code{%standard-phases} as the default list of build phases.
6019 @code{%standard-phases} is a list of symbol/procedure pairs, where the
6020 procedure implements the actual phase.
6021
6022 The list of phases used for a particular package can be changed with the
6023 @code{#:phases} parameter. For instance, passing:
6024
6025 @example
6026 #:phases (modify-phases %standard-phases (delete 'configure))
6027 @end example
6028
6029 means that all the phases described above will be used, except the
6030 @code{configure} phase.
6031
6032 In addition, this build system ensures that the ``standard'' environment
6033 for GNU packages is available. This includes tools such as GCC, libc,
6034 Coreutils, Bash, Make, Diffutils, grep, and sed (see the @code{(guix
6035 build-system gnu)} module for a complete list). We call these the
6036 @dfn{implicit inputs} of a package, because package definitions do not
6037 have to mention them.
6038 @end defvr
6039
6040 Other @code{<build-system>} objects are defined to support other
6041 conventions and tools used by free software packages. They inherit most
6042 of @code{gnu-build-system}, and differ mainly in the set of inputs
6043 implicitly added to the build process, and in the list of phases
6044 executed. Some of these build systems are listed below.
6045
6046 @defvr {Scheme Variable} ant-build-system
6047 This variable is exported by @code{(guix build-system ant)}. It
6048 implements the build procedure for Java packages that can be built with
6049 @url{https://ant.apache.org/, Ant build tool}.
6050
6051 It adds both @code{ant} and the @dfn{Java Development Kit} (JDK) as
6052 provided by the @code{icedtea} package to the set of inputs. Different
6053 packages can be specified with the @code{#:ant} and @code{#:jdk}
6054 parameters, respectively.
6055
6056 When the original package does not provide a suitable Ant build file,
6057 the parameter @code{#:jar-name} can be used to generate a minimal Ant
6058 build file @file{build.xml} with tasks to build the specified jar
6059 archive. In this case the parameter @code{#:source-dir} can be used to
6060 specify the source sub-directory, defaulting to ``src''.
6061
6062 The @code{#:main-class} parameter can be used with the minimal ant
6063 buildfile to specify the main class of the resulting jar. This makes the
6064 jar file executable. The @code{#:test-include} parameter can be used to
6065 specify the list of junit tests to run. It defaults to
6066 @code{(list "**/*Test.java")}. The @code{#:test-exclude} can be used to
6067 disable some tests. It defaults to @code{(list "**/Abstract*.java")},
6068 because abstract classes cannot be run as tests.
6069
6070 The parameter @code{#:build-target} can be used to specify the Ant task
6071 that should be run during the @code{build} phase. By default the
6072 ``jar'' task will be run.
6073
6074 @end defvr
6075
6076 @defvr {Scheme Variable} android-ndk-build-system
6077 @cindex Android distribution
6078 @cindex Android NDK build system
6079 This variable is exported by @code{(guix build-system android-ndk)}. It
6080 implements a build procedure for Android NDK (native development kit)
6081 packages using a Guix-specific build process.
6082
6083 The build system assumes that packages install their public interface
6084 (header) files to the subdirectory "include" of the "out" output and
6085 their libraries to the subdirectory "lib" of the "out" output.
6086
6087 It's also assumed that the union of all the dependencies of a package
6088 has no conflicting files.
6089
6090 For the time being, cross-compilation is not supported - so right now
6091 the libraries and header files are assumed to be host tools.
6092
6093 @end defvr
6094
6095 @defvr {Scheme Variable} asdf-build-system/source
6096 @defvrx {Scheme Variable} asdf-build-system/sbcl
6097 @defvrx {Scheme Variable} asdf-build-system/ecl
6098
6099 These variables, exported by @code{(guix build-system asdf)}, implement
6100 build procedures for Common Lisp packages using
6101 @url{https://common-lisp.net/project/asdf/, ``ASDF''}. ASDF is a system
6102 definition facility for Common Lisp programs and libraries.
6103
6104 The @code{asdf-build-system/source} system installs the packages in
6105 source form, and can be loaded using any common lisp implementation, via
6106 ASDF. The others, such as @code{asdf-build-system/sbcl}, install binary
6107 systems in the format which a particular implementation understands.
6108 These build systems can also be used to produce executable programs, or
6109 lisp images which contain a set of packages pre-loaded.
6110
6111 The build system uses naming conventions. For binary packages, the
6112 package name should be prefixed with the lisp implementation, such as
6113 @code{sbcl-} for @code{asdf-build-system/sbcl}.
6114
6115 Additionally, the corresponding source package should be labeled using
6116 the same convention as python packages (see @ref{Python Modules}), using
6117 the @code{cl-} prefix.
6118
6119 For binary packages, each system should be defined as a Guix package.
6120 If one package @code{origin} contains several systems, package variants
6121 can be created in order to build all the systems. Source packages,
6122 which use @code{asdf-build-system/source}, may contain several systems.
6123
6124 In order to create executable programs and images, the build-side
6125 procedures @code{build-program} and @code{build-image} can be used.
6126 They should be called in a build phase after the @code{create-symlinks}
6127 phase, so that the system which was just built can be used within the
6128 resulting image. @code{build-program} requires a list of Common Lisp
6129 expressions to be passed as the @code{#:entry-program} argument.
6130
6131 If the system is not defined within its own @code{.asd} file of the same
6132 name, then the @code{#:asd-file} parameter should be used to specify
6133 which file the system is defined in. Furthermore, if the package
6134 defines a system for its tests in a separate file, it will be loaded
6135 before the tests are run if it is specified by the
6136 @code{#:test-asd-file} parameter. If it is not set, the files
6137 @code{<system>-tests.asd}, @code{<system>-test.asd}, @code{tests.asd},
6138 and @code{test.asd} will be tried if they exist.
6139
6140 If for some reason the package must be named in a different way than the
6141 naming conventions suggest, the @code{#:asd-system-name} parameter can
6142 be used to specify the name of the system.
6143
6144 @end defvr
6145
6146 @defvr {Scheme Variable} cargo-build-system
6147 @cindex Rust programming language
6148 @cindex Cargo (Rust build system)
6149 This variable is exported by @code{(guix build-system cargo)}. It
6150 supports builds of packages using Cargo, the build tool of the
6151 @uref{https://www.rust-lang.org, Rust programming language}.
6152
6153 It adds @code{rustc} and @code{cargo} to the set of inputs.
6154 A different Rust package can be specified with the @code{#:rust} parameter.
6155
6156 Regular cargo dependencies should be added to the package definition via the
6157 @code{#:cargo-inputs} parameter as a list of name and spec pairs, where the
6158 spec can be a package or a source definition. Note that the spec must
6159 evaluate to a path to a gzipped tarball which includes a @code{Cargo.toml}
6160 file at its root, or it will be ignored. Similarly, cargo dev-dependencies
6161 should be added to the package definition via the
6162 @code{#:cargo-development-inputs} parameter.
6163
6164 In its @code{configure} phase, this build system will make any source inputs
6165 specified in the @code{#:cargo-inputs} and @code{#:cargo-development-inputs}
6166 parameters available to cargo. It will also remove an included
6167 @code{Cargo.lock} file to be recreated by @code{cargo} during the
6168 @code{build} phase. The @code{install} phase installs any crate the binaries
6169 if they are defined by the crate.
6170 @end defvr
6171
6172
6173 @defvr {Scheme Variable} copy-build-system
6174 @cindex (copy build system)
6175 This variable is exported by @code{(guix build-system copy)}. It
6176 supports builds of simple packages that don't require much compiling,
6177 mostly just moving files around.
6178
6179 It adds much of the @code{gnu-build-system} packages to the set of
6180 inputs. Because of this, the @code{copy-build-system} does not require
6181 all the boilerplate code often needed for the
6182 @code{trivial-build-system}.
6183
6184 To further simplify the file installation process, an
6185 @code{#:install-plan} argument is exposed to let the packager specify
6186 which files go where. The install plan is a list of @code{(@var{source}
6187 @var{target} [@var{filters}])}. @var{filters} are optional.
6188
6189 @itemize
6190 @item When @var{source} matches a file or directory without trailing slash, install it to @var{target}.
6191 @itemize
6192 @item If @var{target} has a trailing slash, install @var{source} basename beneath @var{target}.
6193 @item Otherwise install @var{source} as @var{target}.
6194 @end itemize
6195
6196 @item When @var{source} is a directory with a trailing slash, or when @var{filters} are used,
6197 the trailing slash of @var{target} is implied with the same meaning
6198 as above.
6199 @itemize
6200 @item Without @var{filters}, install the full @var{source} @emph{content} to @var{target}.
6201 @item With @var{filters} among @code{#:include}, @code{#:include-regexp}, @code{#:exclude},
6202 @code{#:exclude-regexp}, only select files are installed depending on
6203 the filters. Each filters is specified by a list of strings.
6204 @itemize
6205 @item With @code{#:include}, install all the files which the path suffix matches
6206 at least one of the elements in the given list.
6207 @item With @code{#:include-regexp}, install all the files which the
6208 subpaths match at least one of the regular expressions in the given
6209 list.
6210 @item The @code{#:exclude} and @code{#:exclude-regexp} filters
6211 are the complement of their inclusion counterpart. Without @code{#:include} flags,
6212 install all files but those matching the exclusion filters.
6213 If both inclusions and exclusions are specified, the exclusions are done
6214 on top of the inclusions.
6215 @end itemize
6216 @end itemize
6217 In all cases, the paths relative to @var{source} are preserved within
6218 @var{target}.
6219 @end itemize
6220
6221 Examples:
6222
6223 @itemize
6224 @item @code{("foo/bar" "share/my-app/")}: Install @file{bar} to @file{share/my-app/bar}.
6225 @item @code{("foo/bar" "share/my-app/baz")}: Install @file{bar} to @file{share/my-app/baz}.
6226 @item @code{("foo/" "share/my-app")}: Install the content of @file{foo} inside @file{share/my-app},
6227 e.g., install @file{foo/sub/file} to @file{share/my-app/sub/file}.
6228 @item @code{("foo/" "share/my-app" #:include ("sub/file"))}: Install only @file{foo/sub/file} to
6229 @file{share/my-app/sub/file}.
6230 @item @code{("foo/sub" "share/my-app" #:include ("file"))}: Install @file{foo/sub/file} to
6231 @file{share/my-app/file}.
6232 @end itemize
6233 @end defvr
6234
6235
6236 @cindex Clojure (programming language)
6237 @cindex simple Clojure build system
6238 @defvr {Scheme Variable} clojure-build-system
6239 This variable is exported by @code{(guix build-system clojure)}. It implements
6240 a simple build procedure for @uref{https://clojure.org/, Clojure} packages
6241 using plain old @code{compile} in Clojure. Cross-compilation is not supported
6242 yet.
6243
6244 It adds @code{clojure}, @code{icedtea} and @code{zip} to the set of inputs.
6245 Different packages can be specified with the @code{#:clojure}, @code{#:jdk} and
6246 @code{#:zip} parameters, respectively.
6247
6248 A list of source directories, test directories and jar names can be specified
6249 with the @code{#:source-dirs}, @code{#:test-dirs} and @code{#:jar-names}
6250 parameters, respectively. Compile directory and main class can be specified
6251 with the @code{#:compile-dir} and @code{#:main-class} parameters, respectively.
6252 Other parameters are documented below.
6253
6254 This build system is an extension of @code{ant-build-system}, but with the
6255 following phases changed:
6256
6257 @table @code
6258
6259 @item build
6260 This phase calls @code{compile} in Clojure to compile source files and runs
6261 @command{jar} to create jars from both source files and compiled files
6262 according to the include list and exclude list specified in
6263 @code{#:aot-include} and @code{#:aot-exclude}, respectively. The exclude list
6264 has priority over the include list. These lists consist of symbols
6265 representing Clojure libraries or the special keyword @code{#:all} representing
6266 all Clojure libraries found under the source directories. The parameter
6267 @code{#:omit-source?} decides if source should be included into the jars.
6268
6269 @item check
6270 This phase runs tests according to the include list and exclude list specified
6271 in @code{#:test-include} and @code{#:test-exclude}, respectively. Their
6272 meanings are analogous to that of @code{#:aot-include} and
6273 @code{#:aot-exclude}, except that the special keyword @code{#:all} now
6274 stands for all Clojure libraries found under the test directories. The
6275 parameter @code{#:tests?} decides if tests should be run.
6276
6277 @item install
6278 This phase installs all jars built previously.
6279 @end table
6280
6281 Apart from the above, this build system also contains an additional phase:
6282
6283 @table @code
6284
6285 @item install-doc
6286 This phase installs all top-level files with base name matching
6287 @code{%doc-regex}. A different regex can be specified with the
6288 @code{#:doc-regex} parameter. All files (recursively) inside the documentation
6289 directories specified in @code{#:doc-dirs} are installed as well.
6290 @end table
6291 @end defvr
6292
6293 @defvr {Scheme Variable} cmake-build-system
6294 This variable is exported by @code{(guix build-system cmake)}. It
6295 implements the build procedure for packages using the
6296 @url{https://www.cmake.org, CMake build tool}.
6297
6298 It automatically adds the @code{cmake} package to the set of inputs.
6299 Which package is used can be specified with the @code{#:cmake}
6300 parameter.
6301
6302 The @code{#:configure-flags} parameter is taken as a list of flags
6303 passed to the @command{cmake} command. The @code{#:build-type}
6304 parameter specifies in abstract terms the flags passed to the compiler;
6305 it defaults to @code{"RelWithDebInfo"} (short for ``release mode with
6306 debugging information''), which roughly means that code is compiled with
6307 @code{-O2 -g}, as is the case for Autoconf-based packages by default.
6308 @end defvr
6309
6310 @defvr {Scheme Variable} dune-build-system
6311 This variable is exported by @code{(guix build-system dune)}. It
6312 supports builds of packages using @uref{https://dune.build/, Dune}, a build
6313 tool for the OCaml programming language. It is implemented as an extension
6314 of the @code{ocaml-build-system} which is described below. As such, the
6315 @code{#:ocaml} and @code{#:findlib} parameters can be passed to this build
6316 system.
6317
6318 It automatically adds the @code{dune} package to the set of inputs.
6319 Which package is used can be specified with the @code{#:dune}
6320 parameter.
6321
6322 There is no @code{configure} phase because dune packages typically don't
6323 need to be configured. The @code{#:build-flags} parameter is taken as a
6324 list of flags passed to the @code{dune} command during the build.
6325
6326 The @code{#:jbuild?} parameter can be passed to use the @code{jbuild}
6327 command instead of the more recent @code{dune} command while building
6328 a package. Its default value is @code{#f}.
6329
6330 The @code{#:package} parameter can be passed to specify a package name, which
6331 is useful when a package contains multiple packages and you want to build
6332 only one of them. This is equivalent to passing the @code{-p} argument to
6333 @code{dune}.
6334 @end defvr
6335
6336 @defvr {Scheme Variable} go-build-system
6337 This variable is exported by @code{(guix build-system go)}. It
6338 implements a build procedure for Go packages using the standard
6339 @url{https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies,
6340 Go build mechanisms}.
6341
6342 The user is expected to provide a value for the key @code{#:import-path}
6343 and, in some cases, @code{#:unpack-path}. The
6344 @url{https://golang.org/doc/code.html#ImportPaths, import path}
6345 corresponds to the file system path expected by the package's build
6346 scripts and any referring packages, and provides a unique way to
6347 refer to a Go package. It is typically based on a combination of the
6348 package source code's remote URI and file system hierarchy structure. In
6349 some cases, you will need to unpack the package's source code to a
6350 different directory structure than the one indicated by the import path,
6351 and @code{#:unpack-path} should be used in such cases.
6352
6353 Packages that provide Go libraries should install their source code into
6354 the built output. The key @code{#:install-source?}, which defaults to
6355 @code{#t}, controls whether or not the source code is installed. It can
6356 be set to @code{#f} for packages that only provide executable files.
6357 @end defvr
6358
6359 @defvr {Scheme Variable} glib-or-gtk-build-system
6360 This variable is exported by @code{(guix build-system glib-or-gtk)}. It
6361 is intended for use with packages making use of GLib or GTK+.
6362
6363 This build system adds the following two phases to the ones defined by
6364 @code{gnu-build-system}:
6365
6366 @table @code
6367 @item glib-or-gtk-wrap
6368 The phase @code{glib-or-gtk-wrap} ensures that programs in
6369 @file{bin/} are able to find GLib ``schemas'' and
6370 @uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, GTK+
6371 modules}. This is achieved by wrapping the programs in launch scripts
6372 that appropriately set the @code{XDG_DATA_DIRS} and @code{GTK_PATH}
6373 environment variables.
6374
6375 It is possible to exclude specific package outputs from that wrapping
6376 process by listing their names in the
6377 @code{#:glib-or-gtk-wrap-excluded-outputs} parameter. This is useful
6378 when an output is known not to contain any GLib or GTK+ binaries, and
6379 where wrapping would gratuitously add a dependency of that output on
6380 GLib and GTK+.
6381
6382 @item glib-or-gtk-compile-schemas
6383 The phase @code{glib-or-gtk-compile-schemas} makes sure that all
6384 @uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
6385 GSettings schemas} of GLib are compiled. Compilation is performed by the
6386 @command{glib-compile-schemas} program. It is provided by the package
6387 @code{glib:bin} which is automatically imported by the build system.
6388 The @code{glib} package providing @command{glib-compile-schemas} can be
6389 specified with the @code{#:glib} parameter.
6390 @end table
6391
6392 Both phases are executed after the @code{install} phase.
6393 @end defvr
6394
6395 @defvr {Scheme Variable} guile-build-system
6396 This build system is for Guile packages that consist exclusively of Scheme
6397 code and that are so lean that they don't even have a makefile, let alone a
6398 @file{configure} script. It compiles Scheme code using @command{guild
6399 compile} (@pxref{Compilation,,, guile, GNU Guile Reference Manual}) and
6400 installs the @file{.scm} and @file{.go} files in the right place. It also
6401 installs documentation.
6402
6403 This build system supports cross-compilation by using the @code{--target}
6404 option of @command{guild compile}.
6405
6406 Packages built with @code{guile-build-system} must provide a Guile package in
6407 their @code{native-inputs} field.
6408 @end defvr
6409
6410 @defvr {Scheme Variable} julia-build-system
6411 This variable is exported by @code{(guix build-system julia)}. It implements
6412 the build procedure used by @uref{https://julialang.org/, julia} packages,
6413 which essentially is similar to running @command{julia -e 'using Pkg;
6414 Pkg.add(package)'} in an environment where @code{JULIA_LOAD_PATH} contains the
6415 paths to all Julia package inputs. Tests are run not run.
6416
6417 Julia packages require the source @code{file-name} to be the real name of the
6418 package, correctly capitalized.
6419
6420 For packages requiring shared library dependencies, you may need to write the
6421 @file{/deps/deps.jl} file manually. It's usually a line of @code{const
6422 variable = /gnu/store/library.so} for each dependency, plus a void function
6423 @code{check_deps() = nothing}.
6424
6425 Some older packages that aren't using @file{Package.toml} yet, will require
6426 this file to be created, too. The function @code{julia-create-package-toml}
6427 helps creating the file. You need to pass the outputs and the source of the
6428 package, it's name (the same as the @code{file-name} parameter), the package
6429 uuid, the package version, and a list of dependencies specified by their name
6430 and their uuid.
6431 @end defvr
6432
6433 @defvr {Scheme Variable} minify-build-system
6434 This variable is exported by @code{(guix build-system minify)}. It
6435 implements a minification procedure for simple JavaScript packages.
6436
6437 It adds @code{uglify-js} to the set of inputs and uses it to compress
6438 all JavaScript files in the @file{src} directory. A different minifier
6439 package can be specified with the @code{#:uglify-js} parameter, but it
6440 is expected that the package writes the minified code to the standard
6441 output.
6442
6443 When the input JavaScript files are not all located in the @file{src}
6444 directory, the parameter @code{#:javascript-files} can be used to
6445 specify a list of file names to feed to the minifier.
6446 @end defvr
6447
6448 @defvr {Scheme Variable} ocaml-build-system
6449 This variable is exported by @code{(guix build-system ocaml)}. It implements
6450 a build procedure for @uref{https://ocaml.org, OCaml} packages, which consists
6451 of choosing the correct set of commands to run for each package. OCaml
6452 packages can expect many different commands to be run. This build system will
6453 try some of them.
6454
6455 When the package has a @file{setup.ml} file present at the top-level, it will
6456 run @code{ocaml setup.ml -configure}, @code{ocaml setup.ml -build} and
6457 @code{ocaml setup.ml -install}. The build system will assume that this file
6458 was generated by @uref{http://oasis.forge.ocamlcore.org/, OASIS} and will take
6459 care of setting the prefix and enabling tests if they are not disabled. You
6460 can pass configure and build flags with the @code{#:configure-flags} and
6461 @code{#:build-flags}. The @code{#:test-flags} key can be passed to change the
6462 set of flags used to enable tests. The @code{#:use-make?} key can be used to
6463 bypass this system in the build and install phases.
6464
6465 When the package has a @file{configure} file, it is assumed that it is a
6466 hand-made configure script that requires a different argument format than
6467 in the @code{gnu-build-system}. You can add more flags with the
6468 @code{#:configure-flags} key.
6469
6470 When the package has a @file{Makefile} file (or @code{#:use-make?} is
6471 @code{#t}), it will be used and more flags can be passed to the build and
6472 install phases with the @code{#:make-flags} key.
6473
6474 Finally, some packages do not have these files and use a somewhat standard
6475 location for its build system. In that case, the build system will run
6476 @code{ocaml pkg/pkg.ml} or @code{ocaml pkg/build.ml} and take care of
6477 providing the path to the required findlib module. Additional flags can
6478 be passed via the @code{#:build-flags} key. Install is taken care of by
6479 @command{opam-installer}. In this case, the @code{opam} package must
6480 be added to the @code{native-inputs} field of the package definition.
6481
6482 Note that most OCaml packages assume they will be installed in the same
6483 directory as OCaml, which is not what we want in guix. In particular, they
6484 will install @file{.so} files in their module's directory, which is usually
6485 fine because it is in the OCaml compiler directory. In guix though, these
6486 libraries cannot be found and we use @code{CAML_LD_LIBRARY_PATH}. This
6487 variable points to @file{lib/ocaml/site-lib/stubslibs} and this is where
6488 @file{.so} libraries should be installed.
6489 @end defvr
6490
6491 @defvr {Scheme Variable} python-build-system
6492 This variable is exported by @code{(guix build-system python)}. It
6493 implements the more or less standard build procedure used by Python
6494 packages, which consists in running @code{python setup.py build} and
6495 then @code{python setup.py install --prefix=/gnu/store/@dots{}}.
6496
6497 For packages that install stand-alone Python programs under @code{bin/},
6498 it takes care of wrapping these programs so that their @code{PYTHONPATH}
6499 environment variable points to all the Python libraries they depend on.
6500
6501 Which Python package is used to perform the build can be specified with
6502 the @code{#:python} parameter. This is a useful way to force a package
6503 to be built for a specific version of the Python interpreter, which
6504 might be necessary if the package is only compatible with a single
6505 interpreter version.
6506
6507 By default guix calls @code{setup.py} under control of
6508 @code{setuptools}, much like @command{pip} does. Some packages are not
6509 compatible with setuptools (and pip), thus you can disable this by
6510 setting the @code{#:use-setuptools?} parameter to @code{#f}.
6511 @end defvr
6512
6513 @defvr {Scheme Variable} perl-build-system
6514 This variable is exported by @code{(guix build-system perl)}. It
6515 implements the standard build procedure for Perl packages, which either
6516 consists in running @code{perl Build.PL --prefix=/gnu/store/@dots{}},
6517 followed by @code{Build} and @code{Build install}; or in running
6518 @code{perl Makefile.PL PREFIX=/gnu/store/@dots{}}, followed by
6519 @code{make} and @code{make install}, depending on which of
6520 @code{Build.PL} or @code{Makefile.PL} is present in the package
6521 distribution. Preference is given to the former if both @code{Build.PL}
6522 and @code{Makefile.PL} exist in the package distribution. This
6523 preference can be reversed by specifying @code{#t} for the
6524 @code{#:make-maker?} parameter.
6525
6526 The initial @code{perl Makefile.PL} or @code{perl Build.PL} invocation
6527 passes flags specified by the @code{#:make-maker-flags} or
6528 @code{#:module-build-flags} parameter, respectively.
6529
6530 Which Perl package is used can be specified with @code{#:perl}.
6531 @end defvr
6532
6533 @defvr {Scheme Variable} qt-build-system
6534 This variable is exported by @code{(guix build-system qt)}. It
6535 is intended for use with applications using Qt or KDE.
6536
6537 This build system adds the following two phases to the ones defined by
6538 @code{cmake-build-system}:
6539
6540 @table @code
6541 @item check-setup
6542 The phase @code{check-setup} prepares the environment for running
6543 the checks as commonly used by Qt test programs.
6544 For now this only sets some environment variables:
6545 @code{QT_QPA_PLATFORM=offscreen},
6546 @code{DBUS_FATAL_WARNINGS=0} and
6547 @code{CTEST_OUTPUT_ON_FAILURE=1}.
6548
6549 This phase is added before the @code{check} phase.
6550 It's a separate phase to ease adjusting if necessary.
6551
6552 @item qt-wrap
6553 The phase @code{qt-wrap}
6554 searches for Qt5 plugin paths, QML paths and some XDG in the inputs
6555 and output. In case some path is found, all programs in the output's
6556 @file{bin/}, @file{sbin/}, @file{libexec/} and @file{lib/libexec/} directories
6557 are wrapped in scripts defining the necessary environment variables.
6558
6559 It is possible to exclude specific package outputs from that wrapping process
6560 by listing their names in the @code{#:qt-wrap-excluded-outputs} parameter.
6561 This is useful when an output is known not to contain any Qt binaries, and
6562 where wrapping would gratuitously add a dependency of that output on Qt, KDE,
6563 or such.
6564
6565 This phase is added after the @code{install} phase.
6566 @end table
6567 @end defvr
6568
6569 @defvr {Scheme Variable} r-build-system
6570 This variable is exported by @code{(guix build-system r)}. It
6571 implements the build procedure used by @uref{https://r-project.org, R}
6572 packages, which essentially is little more than running @code{R CMD
6573 INSTALL --library=/gnu/store/@dots{}} in an environment where
6574 @code{R_LIBS_SITE} contains the paths to all R package inputs. Tests
6575 are run after installation using the R function
6576 @code{tools::testInstalledPackage}.
6577 @end defvr
6578
6579 @defvr {Scheme Variable} rakudo-build-system
6580 This variable is exported by @code{(guix build-system rakudo)}. It
6581 implements the build procedure used by @uref{https://rakudo.org/,
6582 Rakudo} for @uref{https://perl6.org/, Perl6} packages. It installs the
6583 package to @code{/gnu/store/@dots{}/NAME-VERSION/share/perl6} and
6584 installs the binaries, library files and the resources, as well as wrap
6585 the files under the @code{bin/} directory. Tests can be skipped by
6586 passing @code{#f} to the @code{tests?} parameter.
6587
6588 Which rakudo package is used can be specified with @code{rakudo}.
6589 Which perl6-tap-harness package used for the tests can be specified with
6590 @code{#:prove6} or removed by passing @code{#f} to the
6591 @code{with-prove6?} parameter.
6592 Which perl6-zef package used for tests and installing can be specified
6593 with @code{#:zef} or removed by passing @code{#f} to the
6594 @code{with-zef?} parameter.
6595 @end defvr
6596
6597 @defvr {Scheme Variable} texlive-build-system
6598 This variable is exported by @code{(guix build-system texlive)}. It is
6599 used to build TeX packages in batch mode with a specified engine. The
6600 build system sets the @code{TEXINPUTS} variable to find all TeX source
6601 files in the inputs.
6602
6603 By default it runs @code{luatex} on all files ending on @code{ins}. A
6604 different engine and format can be specified with the
6605 @code{#:tex-format} argument. Different build targets can be specified
6606 with the @code{#:build-targets} argument, which expects a list of file
6607 names. The build system adds only @code{texlive-bin} and
6608 @code{texlive-latex-base} (both from @code{(gnu packages tex}) to the
6609 inputs. Both can be overridden with the arguments @code{#:texlive-bin}
6610 and @code{#:texlive-latex-base}, respectively.
6611
6612 The @code{#:tex-directory} parameter tells the build system where to
6613 install the built files under the texmf tree.
6614 @end defvr
6615
6616 @defvr {Scheme Variable} ruby-build-system
6617 This variable is exported by @code{(guix build-system ruby)}. It
6618 implements the RubyGems build procedure used by Ruby packages, which
6619 involves running @code{gem build} followed by @code{gem install}.
6620
6621 The @code{source} field of a package that uses this build system
6622 typically references a gem archive, since this is the format that Ruby
6623 developers use when releasing their software. The build system unpacks
6624 the gem archive, potentially patches the source, runs the test suite,
6625 repackages the gem, and installs it. Additionally, directories and
6626 tarballs may be referenced to allow building unreleased gems from Git or
6627 a traditional source release tarball.
6628
6629 Which Ruby package is used can be specified with the @code{#:ruby}
6630 parameter. A list of additional flags to be passed to the @command{gem}
6631 command can be specified with the @code{#:gem-flags} parameter.
6632 @end defvr
6633
6634 @defvr {Scheme Variable} waf-build-system
6635 This variable is exported by @code{(guix build-system waf)}. It
6636 implements a build procedure around the @code{waf} script. The common
6637 phases---@code{configure}, @code{build}, and @code{install}---are
6638 implemented by passing their names as arguments to the @code{waf}
6639 script.
6640
6641 The @code{waf} script is executed by the Python interpreter. Which
6642 Python package is used to run the script can be specified with the
6643 @code{#:python} parameter.
6644 @end defvr
6645
6646 @defvr {Scheme Variable} scons-build-system
6647 This variable is exported by @code{(guix build-system scons)}. It
6648 implements the build procedure used by the SCons software construction
6649 tool. This build system runs @code{scons} to build the package,
6650 @code{scons test} to run tests, and then @code{scons install} to install
6651 the package.
6652
6653 Additional flags to be passed to @code{scons} can be specified with the
6654 @code{#:scons-flags} parameter. The default build and install targets
6655 can be overridden with @code{#:build-targets} and
6656 @code{#:install-targets} respectively. The version of Python used to
6657 run SCons can be specified by selecting the appropriate SCons package
6658 with the @code{#:scons} parameter.
6659 @end defvr
6660
6661 @defvr {Scheme Variable} haskell-build-system
6662 This variable is exported by @code{(guix build-system haskell)}. It
6663 implements the Cabal build procedure used by Haskell packages, which
6664 involves running @code{runhaskell Setup.hs configure
6665 --prefix=/gnu/store/@dots{}} and @code{runhaskell Setup.hs build}.
6666 Instead of installing the package by running @code{runhaskell Setup.hs
6667 install}, to avoid trying to register libraries in the read-only
6668 compiler store directory, the build system uses @code{runhaskell
6669 Setup.hs copy}, followed by @code{runhaskell Setup.hs register}. In
6670 addition, the build system generates the package documentation by
6671 running @code{runhaskell Setup.hs haddock}, unless @code{#:haddock? #f}
6672 is passed. Optional Haddock parameters can be passed with the help of
6673 the @code{#:haddock-flags} parameter. If the file @code{Setup.hs} is
6674 not found, the build system looks for @code{Setup.lhs} instead.
6675
6676 Which Haskell compiler is used can be specified with the @code{#:haskell}
6677 parameter which defaults to @code{ghc}.
6678 @end defvr
6679
6680 @defvr {Scheme Variable} dub-build-system
6681 This variable is exported by @code{(guix build-system dub)}. It
6682 implements the Dub build procedure used by D packages, which
6683 involves running @code{dub build} and @code{dub run}.
6684 Installation is done by copying the files manually.
6685
6686 Which D compiler is used can be specified with the @code{#:ldc}
6687 parameter which defaults to @code{ldc}.
6688 @end defvr
6689
6690 @defvr {Scheme Variable} emacs-build-system
6691 This variable is exported by @code{(guix build-system emacs)}. It
6692 implements an installation procedure similar to the packaging system
6693 of Emacs itself (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
6694
6695 It first creates the @code{@code{package}-autoloads.el} file, then it
6696 byte compiles all Emacs Lisp files. Differently from the Emacs
6697 packaging system, the Info documentation files are moved to the standard
6698 documentation directory and the @file{dir} file is deleted. The Elisp
6699 package files are installed directly under @file{share/emacs/site-lisp}.
6700 @end defvr
6701
6702 @defvr {Scheme Variable} font-build-system
6703 This variable is exported by @code{(guix build-system font)}. It
6704 implements an installation procedure for font packages where upstream
6705 provides pre-compiled TrueType, OpenType, etc.@: font files that merely
6706 need to be copied into place. It copies font files to standard
6707 locations in the output directory.
6708 @end defvr
6709
6710 @defvr {Scheme Variable} meson-build-system
6711 This variable is exported by @code{(guix build-system meson)}. It
6712 implements the build procedure for packages that use
6713 @url{https://mesonbuild.com, Meson} as their build system.
6714
6715 It adds both Meson and @uref{https://ninja-build.org/, Ninja} to the set
6716 of inputs, and they can be changed with the parameters @code{#:meson}
6717 and @code{#:ninja} if needed. The default Meson is
6718 @code{meson-for-build}, which is special because it doesn't clear the
6719 @code{RUNPATH} of binaries and libraries when they are installed.
6720
6721 This build system is an extension of @code{gnu-build-system}, but with the
6722 following phases changed to some specific for Meson:
6723
6724 @table @code
6725
6726 @item configure
6727 The phase runs @code{meson} with the flags specified in
6728 @code{#:configure-flags}. The flag @code{--build-type} is always set to
6729 @code{plain} unless something else is specified in @code{#:build-type}.
6730
6731 @item build
6732 The phase runs @code{ninja} to build the package in parallel by default, but
6733 this can be changed with @code{#:parallel-build?}.
6734
6735 @item check
6736 The phase runs @code{ninja} with the target specified in @code{#:test-target},
6737 which is @code{"test"} by default.
6738
6739 @item install
6740 The phase runs @code{ninja install} and can not be changed.
6741 @end table
6742
6743 Apart from that, the build system also adds the following phases:
6744
6745 @table @code
6746
6747 @item fix-runpath
6748 This phase ensures that all binaries can find the libraries they need.
6749 It searches for required libraries in subdirectories of the package being
6750 built, and adds those to @code{RUNPATH} where needed. It also removes
6751 references to libraries left over from the build phase by
6752 @code{meson-for-build}, such as test dependencies, that aren't actually
6753 required for the program to run.
6754
6755 @item glib-or-gtk-wrap
6756 This phase is the phase provided by @code{glib-or-gtk-build-system}, and it
6757 is not enabled by default. It can be enabled with @code{#:glib-or-gtk?}.
6758
6759 @item glib-or-gtk-compile-schemas
6760 This phase is the phase provided by @code{glib-or-gtk-build-system}, and it
6761 is not enabled by default. It can be enabled with @code{#:glib-or-gtk?}.
6762 @end table
6763 @end defvr
6764
6765 @defvr {Scheme Variable} linux-module-build-system
6766 @code{linux-module-build-system} allows building Linux kernel modules.
6767
6768 @cindex build phases
6769 This build system is an extension of @code{gnu-build-system}, but with the
6770 following phases changed:
6771
6772 @table @code
6773
6774 @item configure
6775 This phase configures the environment so that the Linux kernel's Makefile
6776 can be used to build the external kernel module.
6777
6778 @item build
6779 This phase uses the Linux kernel's Makefile in order to build the external
6780 kernel module.
6781
6782 @item install
6783 This phase uses the Linux kernel's Makefile in order to install the external
6784 kernel module.
6785 @end table
6786
6787 It is possible and useful to specify the Linux kernel to use for building
6788 the module (in the "arguments" form of a package using the
6789 linux-module-build-system, use the key #:linux to specify it).
6790 @end defvr
6791
6792 @defvr {Scheme Variable} node-build-system
6793 This variable is exported by @code{(guix build-system node)}. It
6794 implements the build procedure used by @uref{https://nodejs.org,
6795 Node.js}, which implements an approximation of the @code{npm install}
6796 command, followed by an @code{npm test} command.
6797
6798 Which Node.js package is used to interpret the @code{npm} commands can
6799 be specified with the @code{#:node} parameter which defaults to
6800 @code{node}.
6801 @end defvr
6802
6803 Lastly, for packages that do not need anything as sophisticated, a
6804 ``trivial'' build system is provided. It is trivial in the sense that
6805 it provides basically no support: it does not pull any implicit inputs,
6806 and does not have a notion of build phases.
6807
6808 @defvr {Scheme Variable} trivial-build-system
6809 This variable is exported by @code{(guix build-system trivial)}.
6810
6811 This build system requires a @code{#:builder} argument. This argument
6812 must be a Scheme expression that builds the package output(s)---as
6813 with @code{build-expression->derivation} (@pxref{Derivations,
6814 @code{build-expression->derivation}}).
6815 @end defvr
6816
6817 @node The Store
6818 @section The Store
6819
6820 @cindex store
6821 @cindex store items
6822 @cindex store paths
6823
6824 Conceptually, the @dfn{store} is the place where derivations that have
6825 been built successfully are stored---by default, @file{/gnu/store}.
6826 Sub-directories in the store are referred to as @dfn{store items} or
6827 sometimes @dfn{store paths}. The store has an associated database that
6828 contains information such as the store paths referred to by each store
6829 path, and the list of @emph{valid} store items---results of successful
6830 builds. This database resides in @file{@var{localstatedir}/guix/db},
6831 where @var{localstatedir} is the state directory specified @i{via}
6832 @option{--localstatedir} at configure time, usually @file{/var}.
6833
6834 The store is @emph{always} accessed by the daemon on behalf of its clients
6835 (@pxref{Invoking guix-daemon}). To manipulate the store, clients
6836 connect to the daemon over a Unix-domain socket, send requests to it,
6837 and read the result---these are remote procedure calls, or RPCs.
6838
6839 @quotation Note
6840 Users must @emph{never} modify files under @file{/gnu/store} directly.
6841 This would lead to inconsistencies and break the immutability
6842 assumptions of Guix's functional model (@pxref{Introduction}).
6843
6844 @xref{Invoking guix gc, @command{guix gc --verify}}, for information on
6845 how to check the integrity of the store and attempt recovery from
6846 accidental modifications.
6847 @end quotation
6848
6849 The @code{(guix store)} module provides procedures to connect to the
6850 daemon, and to perform RPCs. These are described below. By default,
6851 @code{open-connection}, and thus all the @command{guix} commands,
6852 connect to the local daemon or to the URI specified by the
6853 @code{GUIX_DAEMON_SOCKET} environment variable.
6854
6855 @defvr {Environment Variable} GUIX_DAEMON_SOCKET
6856 When set, the value of this variable should be a file name or a URI
6857 designating the daemon endpoint. When it is a file name, it denotes a
6858 Unix-domain socket to connect to. In addition to file names, the
6859 supported URI schemes are:
6860
6861 @table @code
6862 @item file
6863 @itemx unix
6864 These are for Unix-domain sockets.
6865 @code{file:///var/guix/daemon-socket/socket} is equivalent to
6866 @file{/var/guix/daemon-socket/socket}.
6867
6868 @item guix
6869 @cindex daemon, remote access
6870 @cindex remote access to the daemon
6871 @cindex daemon, cluster setup
6872 @cindex clusters, daemon setup
6873 These URIs denote connections over TCP/IP, without encryption nor
6874 authentication of the remote host. The URI must specify the host name
6875 and optionally a port number (by default port 44146 is used):
6876
6877 @example
6878 guix://master.guix.example.org:1234
6879 @end example
6880
6881 This setup is suitable on local networks, such as clusters, where only
6882 trusted nodes may connect to the build daemon at
6883 @code{master.guix.example.org}.
6884
6885 The @code{--listen} option of @command{guix-daemon} can be used to
6886 instruct it to listen for TCP connections (@pxref{Invoking guix-daemon,
6887 @code{--listen}}).
6888
6889 @item ssh
6890 @cindex SSH access to build daemons
6891 These URIs allow you to connect to a remote daemon over SSH. This
6892 feature requires Guile-SSH (@pxref{Requirements}) and a working
6893 @code{guile} binary in @code{PATH} on the destination machine. It
6894 supports public key and GSSAPI authentication. A typical URL might look
6895 like this:
6896
6897 @example
6898 ssh://charlie@@guix.example.org:22
6899 @end example
6900
6901 As for @command{guix copy}, the usual OpenSSH client configuration files
6902 are honored (@pxref{Invoking guix copy}).
6903 @end table
6904
6905 Additional URI schemes may be supported in the future.
6906
6907 @c XXX: Remove this note when the protocol incurs fewer round trips
6908 @c and when (guix derivations) no longer relies on file system access.
6909 @quotation Note
6910 The ability to connect to remote build daemons is considered
6911 experimental as of @value{VERSION}. Please get in touch with us to
6912 share any problems or suggestions you may have (@pxref{Contributing}).
6913 @end quotation
6914 @end defvr
6915
6916 @deffn {Scheme Procedure} open-connection [@var{uri}] [#:reserve-space? #t]
6917 Connect to the daemon over the Unix-domain socket at @var{uri} (a string). When
6918 @var{reserve-space?} is true, instruct it to reserve a little bit of
6919 extra space on the file system so that the garbage collector can still
6920 operate should the disk become full. Return a server object.
6921
6922 @var{file} defaults to @code{%default-socket-path}, which is the normal
6923 location given the options that were passed to @command{configure}.
6924 @end deffn
6925
6926 @deffn {Scheme Procedure} close-connection @var{server}
6927 Close the connection to @var{server}.
6928 @end deffn
6929
6930 @defvr {Scheme Variable} current-build-output-port
6931 This variable is bound to a SRFI-39 parameter, which refers to the port
6932 where build and error logs sent by the daemon should be written.
6933 @end defvr
6934
6935 Procedures that make RPCs all take a server object as their first
6936 argument.
6937
6938 @deffn {Scheme Procedure} valid-path? @var{server} @var{path}
6939 @cindex invalid store items
6940 Return @code{#t} when @var{path} designates a valid store item and
6941 @code{#f} otherwise (an invalid item may exist on disk but still be
6942 invalid, for instance because it is the result of an aborted or failed
6943 build.)
6944
6945 A @code{&store-protocol-error} condition is raised if @var{path} is not
6946 prefixed by the store directory (@file{/gnu/store}).
6947 @end deffn
6948
6949 @deffn {Scheme Procedure} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
6950 Add @var{text} under file @var{name} in the store, and return its store
6951 path. @var{references} is the list of store paths referred to by the
6952 resulting store path.
6953 @end deffn
6954
6955 @deffn {Scheme Procedure} build-derivations @var{store} @var{derivations} @
6956 [@var{mode}]
6957 Build @var{derivations}, a list of @code{<derivation>} objects, @file{.drv}
6958 file names, or derivation/output pairs, using the specified
6959 @var{mode}---@code{(build-mode normal)} by default.
6960 @end deffn
6961
6962 Note that the @code{(guix monads)} module provides a monad as well as
6963 monadic versions of the above procedures, with the goal of making it
6964 more convenient to work with code that accesses the store (@pxref{The
6965 Store Monad}).
6966
6967 @c FIXME
6968 @i{This section is currently incomplete.}
6969
6970 @node Derivations
6971 @section Derivations
6972
6973 @cindex derivations
6974 Low-level build actions and the environment in which they are performed
6975 are represented by @dfn{derivations}. A derivation contains the
6976 following pieces of information:
6977
6978 @itemize
6979 @item
6980 The outputs of the derivation---derivations produce at least one file or
6981 directory in the store, but may produce more.
6982
6983 @item
6984 @cindex build-time dependencies
6985 @cindex dependencies, build-time
6986 The inputs of the derivations---i.e., its build-time dependencies---which may
6987 be other derivations or plain files in the store (patches, build scripts,
6988 etc.)
6989
6990 @item
6991 The system type targeted by the derivation---e.g., @code{x86_64-linux}.
6992
6993 @item
6994 The file name of a build script in the store, along with the arguments
6995 to be passed.
6996
6997 @item
6998 A list of environment variables to be defined.
6999
7000 @end itemize
7001
7002 @cindex derivation path
7003 Derivations allow clients of the daemon to communicate build actions to
7004 the store. They exist in two forms: as an in-memory representation,
7005 both on the client- and daemon-side, and as files in the store whose
7006 name end in @code{.drv}---these files are referred to as @dfn{derivation
7007 paths}. Derivations paths can be passed to the @code{build-derivations}
7008 procedure to perform the build actions they prescribe (@pxref{The
7009 Store}).
7010
7011 @cindex fixed-output derivations
7012 Operations such as file downloads and version-control checkouts for
7013 which the expected content hash is known in advance are modeled as
7014 @dfn{fixed-output derivations}. Unlike regular derivations, the outputs
7015 of a fixed-output derivation are independent of its inputs---e.g., a
7016 source code download produces the same result regardless of the download
7017 method and tools being used.
7018
7019 @cindex references
7020 @cindex run-time dependencies
7021 @cindex dependencies, run-time
7022 The outputs of derivations---i.e., the build results---have a set of
7023 @dfn{references}, as reported by the @code{references} RPC or the
7024 @command{guix gc --references} command (@pxref{Invoking guix gc}). References
7025 are the set of run-time dependencies of the build results. References are a
7026 subset of the inputs of the derivation; this subset is automatically computed
7027 by the build daemon by scanning all the files in the outputs.
7028
7029 The @code{(guix derivations)} module provides a representation of
7030 derivations as Scheme objects, along with procedures to create and
7031 otherwise manipulate derivations. The lowest-level primitive to create
7032 a derivation is the @code{derivation} procedure:
7033
7034 @deffn {Scheme Procedure} derivation @var{store} @var{name} @var{builder} @
7035 @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
7036 [#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
7037 [#:system (%current-system)] [#:references-graphs #f] @
7038 [#:allowed-references #f] [#:disallowed-references #f] @
7039 [#:leaked-env-vars #f] [#:local-build? #f] @
7040 [#:substitutable? #t] [#:properties '()]
7041 Build a derivation with the given arguments, and return the resulting
7042 @code{<derivation>} object.
7043
7044 When @var{hash} and @var{hash-algo} are given, a
7045 @dfn{fixed-output derivation} is created---i.e., one whose result is
7046 known in advance, such as a file download. If, in addition,
7047 @var{recursive?} is true, then that fixed output may be an executable
7048 file or a directory and @var{hash} must be the hash of an archive
7049 containing this output.
7050
7051 When @var{references-graphs} is true, it must be a list of file
7052 name/store path pairs. In that case, the reference graph of each store
7053 path is exported in the build environment in the corresponding file, in
7054 a simple text format.
7055
7056 When @var{allowed-references} is true, it must be a list of store items
7057 or outputs that the derivation's output may refer to. Likewise,
7058 @var{disallowed-references}, if true, must be a list of things the
7059 outputs may @emph{not} refer to.
7060
7061 When @var{leaked-env-vars} is true, it must be a list of strings
7062 denoting environment variables that are allowed to ``leak'' from the
7063 daemon's environment to the build environment. This is only applicable
7064 to fixed-output derivations---i.e., when @var{hash} is true. The main
7065 use is to allow variables such as @code{http_proxy} to be passed to
7066 derivations that download files.
7067
7068 When @var{local-build?} is true, declare that the derivation is not a
7069 good candidate for offloading and should rather be built locally
7070 (@pxref{Daemon Offload Setup}). This is the case for small derivations
7071 where the costs of data transfers would outweigh the benefits.
7072
7073 When @var{substitutable?} is false, declare that substitutes of the
7074 derivation's output should not be used (@pxref{Substitutes}). This is
7075 useful, for instance, when building packages that capture details of the
7076 host CPU instruction set.
7077
7078 @var{properties} must be an association list describing ``properties'' of the
7079 derivation. It is kept as-is, uninterpreted, in the derivation.
7080 @end deffn
7081
7082 @noindent
7083 Here's an example with a shell script as its builder, assuming
7084 @var{store} is an open connection to the daemon, and @var{bash} points
7085 to a Bash executable in the store:
7086
7087 @lisp
7088 (use-modules (guix utils)
7089 (guix store)
7090 (guix derivations))
7091
7092 (let ((builder ; add the Bash script to the store
7093 (add-text-to-store store "my-builder.sh"
7094 "echo hello world > $out\n" '())))
7095 (derivation store "foo"
7096 bash `("-e" ,builder)
7097 #:inputs `((,bash) (,builder))
7098 #:env-vars '(("HOME" . "/homeless"))))
7099 @result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
7100 @end lisp
7101
7102 As can be guessed, this primitive is cumbersome to use directly. A
7103 better approach is to write build scripts in Scheme, of course! The
7104 best course of action for that is to write the build code as a
7105 ``G-expression'', and to pass it to @code{gexp->derivation}. For more
7106 information, @pxref{G-Expressions}.
7107
7108 Once upon a time, @code{gexp->derivation} did not exist and constructing
7109 derivations with build code written in Scheme was achieved with
7110 @code{build-expression->derivation}, documented below. This procedure
7111 is now deprecated in favor of the much nicer @code{gexp->derivation}.
7112
7113 @deffn {Scheme Procedure} build-expression->derivation @var{store} @
7114 @var{name} @var{exp} @
7115 [#:system (%current-system)] [#:inputs '()] @
7116 [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
7117 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
7118 [#:references-graphs #f] [#:allowed-references #f] @
7119 [#:disallowed-references #f] @
7120 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
7121 Return a derivation that executes Scheme expression @var{exp} as a
7122 builder for derivation @var{name}. @var{inputs} must be a list of
7123 @code{(name drv-path sub-drv)} tuples; when @var{sub-drv} is omitted,
7124 @code{"out"} is assumed. @var{modules} is a list of names of Guile
7125 modules from the current search path to be copied in the store,
7126 compiled, and made available in the load path during the execution of
7127 @var{exp}---e.g., @code{((guix build utils) (guix build
7128 gnu-build-system))}.
7129
7130 @var{exp} is evaluated in an environment where @code{%outputs} is bound
7131 to a list of output/path pairs, and where @code{%build-inputs} is bound
7132 to a list of string/output-path pairs made from @var{inputs}.
7133 Optionally, @var{env-vars} is a list of string pairs specifying the name
7134 and value of environment variables visible to the builder. The builder
7135 terminates by passing the result of @var{exp} to @code{exit}; thus, when
7136 @var{exp} returns @code{#f}, the build is considered to have failed.
7137
7138 @var{exp} is built using @var{guile-for-build} (a derivation). When
7139 @var{guile-for-build} is omitted or is @code{#f}, the value of the
7140 @code{%guile-for-build} fluid is used instead.
7141
7142 See the @code{derivation} procedure for the meaning of
7143 @var{references-graphs}, @var{allowed-references},
7144 @var{disallowed-references}, @var{local-build?}, and
7145 @var{substitutable?}.
7146 @end deffn
7147
7148 @noindent
7149 Here's an example of a single-output derivation that creates a directory
7150 containing one file:
7151
7152 @lisp
7153 (let ((builder '(let ((out (assoc-ref %outputs "out")))
7154 (mkdir out) ; create /gnu/store/@dots{}-goo
7155 (call-with-output-file (string-append out "/test")
7156 (lambda (p)
7157 (display '(hello guix) p))))))
7158 (build-expression->derivation store "goo" builder))
7159
7160 @result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
7161 @end lisp
7162
7163
7164 @node The Store Monad
7165 @section The Store Monad
7166
7167 @cindex monad
7168
7169 The procedures that operate on the store described in the previous
7170 sections all take an open connection to the build daemon as their first
7171 argument. Although the underlying model is functional, they either have
7172 side effects or depend on the current state of the store.
7173
7174 The former is inconvenient: the connection to the build daemon has to be
7175 carried around in all those functions, making it impossible to compose
7176 functions that do not take that parameter with functions that do. The
7177 latter can be problematic: since store operations have side effects
7178 and/or depend on external state, they have to be properly sequenced.
7179
7180 @cindex monadic values
7181 @cindex monadic functions
7182 This is where the @code{(guix monads)} module comes in. This module
7183 provides a framework for working with @dfn{monads}, and a particularly
7184 useful monad for our uses, the @dfn{store monad}. Monads are a
7185 construct that allows two things: associating ``context'' with values
7186 (in our case, the context is the store), and building sequences of
7187 computations (here computations include accesses to the store). Values
7188 in a monad---values that carry this additional context---are called
7189 @dfn{monadic values}; procedures that return such values are called
7190 @dfn{monadic procedures}.
7191
7192 Consider this ``normal'' procedure:
7193
7194 @lisp
7195 (define (sh-symlink store)
7196 ;; Return a derivation that symlinks the 'bash' executable.
7197 (let* ((drv (package-derivation store bash))
7198 (out (derivation->output-path drv))
7199 (sh (string-append out "/bin/bash")))
7200 (build-expression->derivation store "sh"
7201 `(symlink ,sh %output))))
7202 @end lisp
7203
7204 Using @code{(guix monads)} and @code{(guix gexp)}, it may be rewritten
7205 as a monadic function:
7206
7207 @lisp
7208 (define (sh-symlink)
7209 ;; Same, but return a monadic value.
7210 (mlet %store-monad ((drv (package->derivation bash)))
7211 (gexp->derivation "sh"
7212 #~(symlink (string-append #$drv "/bin/bash")
7213 #$output))))
7214 @end lisp
7215
7216 There are several things to note in the second version: the @code{store}
7217 parameter is now implicit and is ``threaded'' in the calls to the
7218 @code{package->derivation} and @code{gexp->derivation} monadic
7219 procedures, and the monadic value returned by @code{package->derivation}
7220 is @dfn{bound} using @code{mlet} instead of plain @code{let}.
7221
7222 As it turns out, the call to @code{package->derivation} can even be
7223 omitted since it will take place implicitly, as we will see later
7224 (@pxref{G-Expressions}):
7225
7226 @lisp
7227 (define (sh-symlink)
7228 (gexp->derivation "sh"
7229 #~(symlink (string-append #$bash "/bin/bash")
7230 #$output)))
7231 @end lisp
7232
7233 @c See
7234 @c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
7235 @c for the funny quote.
7236 Calling the monadic @code{sh-symlink} has no effect. As someone once
7237 said, ``you exit a monad like you exit a building on fire: by running''.
7238 So, to exit the monad and get the desired effect, one must use
7239 @code{run-with-store}:
7240
7241 @lisp
7242 (run-with-store (open-connection) (sh-symlink))
7243 @result{} /gnu/store/...-sh-symlink
7244 @end lisp
7245
7246 Note that the @code{(guix monad-repl)} module extends the Guile REPL with
7247 new ``meta-commands'' to make it easier to deal with monadic procedures:
7248 @code{run-in-store}, and @code{enter-store-monad}. The former is used
7249 to ``run'' a single monadic value through the store:
7250
7251 @example
7252 scheme@@(guile-user)> ,run-in-store (package->derivation hello)
7253 $1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
7254 @end example
7255
7256 The latter enters a recursive REPL, where all the return values are
7257 automatically run through the store:
7258
7259 @example
7260 scheme@@(guile-user)> ,enter-store-monad
7261 store-monad@@(guile-user) [1]> (package->derivation hello)
7262 $2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
7263 store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
7264 $3 = "/gnu/store/@dots{}-foo"
7265 store-monad@@(guile-user) [1]> ,q
7266 scheme@@(guile-user)>
7267 @end example
7268
7269 @noindent
7270 Note that non-monadic values cannot be returned in the
7271 @code{store-monad} REPL.
7272
7273 The main syntactic forms to deal with monads in general are provided by
7274 the @code{(guix monads)} module and are described below.
7275
7276 @deffn {Scheme Syntax} with-monad @var{monad} @var{body} ...
7277 Evaluate any @code{>>=} or @code{return} forms in @var{body} as being
7278 in @var{monad}.
7279 @end deffn
7280
7281 @deffn {Scheme Syntax} return @var{val}
7282 Return a monadic value that encapsulates @var{val}.
7283 @end deffn
7284
7285 @deffn {Scheme Syntax} >>= @var{mval} @var{mproc} ...
7286 @dfn{Bind} monadic value @var{mval}, passing its ``contents'' to monadic
7287 procedures @var{mproc}@dots{}@footnote{This operation is commonly
7288 referred to as ``bind'', but that name denotes an unrelated procedure in
7289 Guile. Thus we use this somewhat cryptic symbol inherited from the
7290 Haskell language.}. There can be one @var{mproc} or several of them, as
7291 in this example:
7292
7293 @lisp
7294 (run-with-state
7295 (with-monad %state-monad
7296 (>>= (return 1)
7297 (lambda (x) (return (+ 1 x)))
7298 (lambda (x) (return (* 2 x)))))
7299 'some-state)
7300
7301 @result{} 4
7302 @result{} some-state
7303 @end lisp
7304 @end deffn
7305
7306 @deffn {Scheme Syntax} mlet @var{monad} ((@var{var} @var{mval}) ...) @
7307 @var{body} ...
7308 @deffnx {Scheme Syntax} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
7309 @var{body} ...
7310 Bind the variables @var{var} to the monadic values @var{mval} in
7311 @var{body}, which is a sequence of expressions. As with the bind
7312 operator, this can be thought of as ``unpacking'' the raw, non-monadic
7313 value ``contained'' in @var{mval} and making @var{var} refer to that
7314 raw, non-monadic value within the scope of the @var{body}. The form
7315 (@var{var} -> @var{val}) binds @var{var} to the ``normal'' value
7316 @var{val}, as per @code{let}. The binding operations occur in sequence
7317 from left to right. The last expression of @var{body} must be a monadic
7318 expression, and its result will become the result of the @code{mlet} or
7319 @code{mlet*} when run in the @var{monad}.
7320
7321 @code{mlet*} is to @code{mlet} what @code{let*} is to @code{let}
7322 (@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
7323 @end deffn
7324
7325 @deffn {Scheme System} mbegin @var{monad} @var{mexp} ...
7326 Bind @var{mexp} and the following monadic expressions in sequence,
7327 returning the result of the last expression. Every expression in the
7328 sequence must be a monadic expression.
7329
7330 This is akin to @code{mlet}, except that the return values of the
7331 monadic expressions are ignored. In that sense, it is analogous to
7332 @code{begin}, but applied to monadic expressions.
7333 @end deffn
7334
7335 @deffn {Scheme System} mwhen @var{condition} @var{mexp0} @var{mexp*} ...
7336 When @var{condition} is true, evaluate the sequence of monadic
7337 expressions @var{mexp0}..@var{mexp*} as in an @code{mbegin}. When
7338 @var{condition} is false, return @code{*unspecified*} in the current
7339 monad. Every expression in the sequence must be a monadic expression.
7340 @end deffn
7341
7342 @deffn {Scheme System} munless @var{condition} @var{mexp0} @var{mexp*} ...
7343 When @var{condition} is false, evaluate the sequence of monadic
7344 expressions @var{mexp0}..@var{mexp*} as in an @code{mbegin}. When
7345 @var{condition} is true, return @code{*unspecified*} in the current
7346 monad. Every expression in the sequence must be a monadic expression.
7347 @end deffn
7348
7349 @cindex state monad
7350 The @code{(guix monads)} module provides the @dfn{state monad}, which
7351 allows an additional value---the state---to be @emph{threaded} through
7352 monadic procedure calls.
7353
7354 @defvr {Scheme Variable} %state-monad
7355 The state monad. Procedures in the state monad can access and change
7356 the state that is threaded.
7357
7358 Consider the example below. The @code{square} procedure returns a value
7359 in the state monad. It returns the square of its argument, but also
7360 increments the current state value:
7361
7362 @lisp
7363 (define (square x)
7364 (mlet %state-monad ((count (current-state)))
7365 (mbegin %state-monad
7366 (set-current-state (+ 1 count))
7367 (return (* x x)))))
7368
7369 (run-with-state (sequence %state-monad (map square (iota 3))) 0)
7370 @result{} (0 1 4)
7371 @result{} 3
7372 @end lisp
7373
7374 When ``run'' through @var{%state-monad}, we obtain that additional state
7375 value, which is the number of @code{square} calls.
7376 @end defvr
7377
7378 @deffn {Monadic Procedure} current-state
7379 Return the current state as a monadic value.
7380 @end deffn
7381
7382 @deffn {Monadic Procedure} set-current-state @var{value}
7383 Set the current state to @var{value} and return the previous state as a
7384 monadic value.
7385 @end deffn
7386
7387 @deffn {Monadic Procedure} state-push @var{value}
7388 Push @var{value} to the current state, which is assumed to be a list,
7389 and return the previous state as a monadic value.
7390 @end deffn
7391
7392 @deffn {Monadic Procedure} state-pop
7393 Pop a value from the current state and return it as a monadic value.
7394 The state is assumed to be a list.
7395 @end deffn
7396
7397 @deffn {Scheme Procedure} run-with-state @var{mval} [@var{state}]
7398 Run monadic value @var{mval} starting with @var{state} as the initial
7399 state. Return two values: the resulting value, and the resulting state.
7400 @end deffn
7401
7402 The main interface to the store monad, provided by the @code{(guix
7403 store)} module, is as follows.
7404
7405 @defvr {Scheme Variable} %store-monad
7406 The store monad---an alias for @var{%state-monad}.
7407
7408 Values in the store monad encapsulate accesses to the store. When its
7409 effect is needed, a value of the store monad must be ``evaluated'' by
7410 passing it to the @code{run-with-store} procedure (see below.)
7411 @end defvr
7412
7413 @deffn {Scheme Procedure} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
7414 Run @var{mval}, a monadic value in the store monad, in @var{store}, an
7415 open store connection.
7416 @end deffn
7417
7418 @deffn {Monadic Procedure} text-file @var{name} @var{text} [@var{references}]
7419 Return as a monadic value the absolute file name in the store of the file
7420 containing @var{text}, a string. @var{references} is a list of store items that the
7421 resulting text file refers to; it defaults to the empty list.
7422 @end deffn
7423
7424 @deffn {Monadic Procedure} binary-file @var{name} @var{data} [@var{references}]
7425 Return as a monadic value the absolute file name in the store of the file
7426 containing @var{data}, a bytevector. @var{references} is a list of store
7427 items that the resulting binary file refers to; it defaults to the empty list.
7428 @end deffn
7429
7430 @deffn {Monadic Procedure} interned-file @var{file} [@var{name}] @
7431 [#:recursive? #t] [#:select? (const #t)]
7432 Return the name of @var{file} once interned in the store. Use
7433 @var{name} as its store name, or the basename of @var{file} if
7434 @var{name} is omitted.
7435
7436 When @var{recursive?} is true, the contents of @var{file} are added
7437 recursively; if @var{file} designates a flat file and @var{recursive?}
7438 is true, its contents are added, and its permission bits are kept.
7439
7440 When @var{recursive?} is true, call @code{(@var{select?} @var{file}
7441 @var{stat})} for each directory entry, where @var{file} is the entry's
7442 absolute file name and @var{stat} is the result of @code{lstat}; exclude
7443 entries for which @var{select?} does not return true.
7444
7445 The example below adds a file to the store, under two different names:
7446
7447 @lisp
7448 (run-with-store (open-connection)
7449 (mlet %store-monad ((a (interned-file "README"))
7450 (b (interned-file "README" "LEGU-MIN")))
7451 (return (list a b))))
7452
7453 @result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
7454 @end lisp
7455
7456 @end deffn
7457
7458 The @code{(guix packages)} module exports the following package-related
7459 monadic procedures:
7460
7461 @deffn {Monadic Procedure} package-file @var{package} [@var{file}] @
7462 [#:system (%current-system)] [#:target #f] @
7463 [#:output "out"]
7464 Return as a monadic
7465 value in the absolute file name of @var{file} within the @var{output}
7466 directory of @var{package}. When @var{file} is omitted, return the name
7467 of the @var{output} directory of @var{package}. When @var{target} is
7468 true, use it as a cross-compilation target triplet.
7469 @end deffn
7470
7471 @deffn {Monadic Procedure} package->derivation @var{package} [@var{system}]
7472 @deffnx {Monadic Procedure} package->cross-derivation @var{package} @
7473 @var{target} [@var{system}]
7474 Monadic version of @code{package-derivation} and
7475 @code{package-cross-derivation} (@pxref{Defining Packages}).
7476 @end deffn
7477
7478
7479 @node G-Expressions
7480 @section G-Expressions
7481
7482 @cindex G-expression
7483 @cindex build code quoting
7484 So we have ``derivations'', which represent a sequence of build actions
7485 to be performed to produce an item in the store (@pxref{Derivations}).
7486 These build actions are performed when asking the daemon to actually
7487 build the derivations; they are run by the daemon in a container
7488 (@pxref{Invoking guix-daemon}).
7489
7490 @cindex strata of code
7491 It should come as no surprise that we like to write these build actions
7492 in Scheme. When we do that, we end up with two @dfn{strata} of Scheme
7493 code@footnote{The term @dfn{stratum} in this context was coined by
7494 Manuel Serrano et al.@: in the context of their work on Hop. Oleg
7495 Kiselyov, who has written insightful
7496 @url{http://okmij.org/ftp/meta-programming/#meta-scheme, essays and code
7497 on this topic}, refers to this kind of code generation as
7498 @dfn{staging}.}: the ``host code''---code that defines packages, talks
7499 to the daemon, etc.---and the ``build code''---code that actually
7500 performs build actions, such as making directories, invoking
7501 @command{make}, etc.
7502
7503 To describe a derivation and its build actions, one typically needs to
7504 embed build code inside host code. It boils down to manipulating build
7505 code as data, and the homoiconicity of Scheme---code has a direct
7506 representation as data---comes in handy for that. But we need more than
7507 the normal @code{quasiquote} mechanism in Scheme to construct build
7508 expressions.
7509
7510 The @code{(guix gexp)} module implements @dfn{G-expressions}, a form of
7511 S-expressions adapted to build expressions. G-expressions, or
7512 @dfn{gexps}, consist essentially of three syntactic forms: @code{gexp},
7513 @code{ungexp}, and @code{ungexp-splicing} (or simply: @code{#~},
7514 @code{#$}, and @code{#$@@}), which are comparable to
7515 @code{quasiquote}, @code{unquote}, and @code{unquote-splicing},
7516 respectively (@pxref{Expression Syntax, @code{quasiquote},, guile,
7517 GNU Guile Reference Manual}). However, there are major differences:
7518
7519 @itemize
7520 @item
7521 Gexps are meant to be written to a file and run or manipulated by other
7522 processes.
7523
7524 @item
7525 When a high-level object such as a package or derivation is unquoted
7526 inside a gexp, the result is as if its output file name had been
7527 introduced.
7528
7529 @item
7530 Gexps carry information about the packages or derivations they refer to,
7531 and these dependencies are automatically added as inputs to the build
7532 processes that use them.
7533 @end itemize
7534
7535 @cindex lowering, of high-level objects in gexps
7536 This mechanism is not limited to package and derivation
7537 objects: @dfn{compilers} able to ``lower'' other high-level objects to
7538 derivations or files in the store can be defined,
7539 such that these objects can also be inserted
7540 into gexps. For example, a useful type of high-level objects that can be
7541 inserted in a gexp is ``file-like objects'', which make it easy to
7542 add files to the store and to refer to them in
7543 derivations and such (see @code{local-file} and @code{plain-file}
7544 below.)
7545
7546 To illustrate the idea, here is an example of a gexp:
7547
7548 @lisp
7549 (define build-exp
7550 #~(begin
7551 (mkdir #$output)
7552 (chdir #$output)
7553 (symlink (string-append #$coreutils "/bin/ls")
7554 "list-files")))
7555 @end lisp
7556
7557 This gexp can be passed to @code{gexp->derivation}; we obtain a
7558 derivation that builds a directory containing exactly one symlink to
7559 @file{/gnu/store/@dots{}-coreutils-8.22/bin/ls}:
7560
7561 @lisp
7562 (gexp->derivation "the-thing" build-exp)
7563 @end lisp
7564
7565 As one would expect, the @code{"/gnu/store/@dots{}-coreutils-8.22"} string is
7566 substituted to the reference to the @var{coreutils} package in the
7567 actual build code, and @var{coreutils} is automatically made an input to
7568 the derivation. Likewise, @code{#$output} (equivalent to @code{(ungexp
7569 output)}) is replaced by a string containing the directory name of the
7570 output of the derivation.
7571
7572 @cindex cross compilation
7573 In a cross-compilation context, it is useful to distinguish between
7574 references to the @emph{native} build of a package---that can run on the
7575 host---versus references to cross builds of a package. To that end, the
7576 @code{#+} plays the same role as @code{#$}, but is a reference to a
7577 native package build:
7578
7579 @lisp
7580 (gexp->derivation "vi"
7581 #~(begin
7582 (mkdir #$output)
7583 (mkdir (string-append #$output "/bin"))
7584 (system* (string-append #+coreutils "/bin/ln")
7585 "-s"
7586 (string-append #$emacs "/bin/emacs")
7587 (string-append #$output "/bin/vi")))
7588 #:target "mips64el-linux-gnu")
7589 @end lisp
7590
7591 @noindent
7592 In the example above, the native build of @var{coreutils} is used, so
7593 that @command{ln} can actually run on the host; but then the
7594 cross-compiled build of @var{emacs} is referenced.
7595
7596 @cindex imported modules, for gexps
7597 @findex with-imported-modules
7598 Another gexp feature is @dfn{imported modules}: sometimes you want to be
7599 able to use certain Guile modules from the ``host environment'' in the
7600 gexp, so those modules should be imported in the ``build environment''.
7601 The @code{with-imported-modules} form allows you to express that:
7602
7603 @lisp
7604 (let ((build (with-imported-modules '((guix build utils))
7605 #~(begin
7606 (use-modules (guix build utils))
7607 (mkdir-p (string-append #$output "/bin"))))))
7608 (gexp->derivation "empty-dir"
7609 #~(begin
7610 #$build
7611 (display "success!\n")
7612 #t)))
7613 @end lisp
7614
7615 @noindent
7616 In this example, the @code{(guix build utils)} module is automatically
7617 pulled into the isolated build environment of our gexp, such that
7618 @code{(use-modules (guix build utils))} works as expected.
7619
7620 @cindex module closure
7621 @findex source-module-closure
7622 Usually you want the @emph{closure} of the module to be imported---i.e.,
7623 the module itself and all the modules it depends on---rather than just
7624 the module; failing to do that, attempts to use the module will fail
7625 because of missing dependent modules. The @code{source-module-closure}
7626 procedure computes the closure of a module by looking at its source file
7627 headers, which comes in handy in this case:
7628
7629 @lisp
7630 (use-modules (guix modules)) ;for 'source-module-closure'
7631
7632 (with-imported-modules (source-module-closure
7633 '((guix build utils)
7634 (gnu build vm)))
7635 (gexp->derivation "something-with-vms"
7636 #~(begin
7637 (use-modules (guix build utils)
7638 (gnu build vm))
7639 @dots{})))
7640 @end lisp
7641
7642 @cindex extensions, for gexps
7643 @findex with-extensions
7644 In the same vein, sometimes you want to import not just pure-Scheme
7645 modules, but also ``extensions'' such as Guile bindings to C libraries
7646 or other ``full-blown'' packages. Say you need the @code{guile-json}
7647 package available on the build side, here's how you would do it:
7648
7649 @lisp
7650 (use-modules (gnu packages guile)) ;for 'guile-json'
7651
7652 (with-extensions (list guile-json)
7653 (gexp->derivation "something-with-json"
7654 #~(begin
7655 (use-modules (json))
7656 @dots{})))
7657 @end lisp
7658
7659 The syntactic form to construct gexps is summarized below.
7660
7661 @deffn {Scheme Syntax} #~@var{exp}
7662 @deffnx {Scheme Syntax} (gexp @var{exp})
7663 Return a G-expression containing @var{exp}. @var{exp} may contain one
7664 or more of the following forms:
7665
7666 @table @code
7667 @item #$@var{obj}
7668 @itemx (ungexp @var{obj})
7669 Introduce a reference to @var{obj}. @var{obj} may have one of the
7670 supported types, for example a package or a
7671 derivation, in which case the @code{ungexp} form is replaced by its
7672 output file name---e.g., @code{"/gnu/store/@dots{}-coreutils-8.22}.
7673
7674 If @var{obj} is a list, it is traversed and references to supported
7675 objects are substituted similarly.
7676
7677 If @var{obj} is another gexp, its contents are inserted and its
7678 dependencies are added to those of the containing gexp.
7679
7680 If @var{obj} is another kind of object, it is inserted as is.
7681
7682 @item #$@var{obj}:@var{output}
7683 @itemx (ungexp @var{obj} @var{output})
7684 This is like the form above, but referring explicitly to the
7685 @var{output} of @var{obj}---this is useful when @var{obj} produces
7686 multiple outputs (@pxref{Packages with Multiple Outputs}).
7687
7688 @item #+@var{obj}
7689 @itemx #+@var{obj}:output
7690 @itemx (ungexp-native @var{obj})
7691 @itemx (ungexp-native @var{obj} @var{output})
7692 Same as @code{ungexp}, but produces a reference to the @emph{native}
7693 build of @var{obj} when used in a cross compilation context.
7694
7695 @item #$output[:@var{output}]
7696 @itemx (ungexp output [@var{output}])
7697 Insert a reference to derivation output @var{output}, or to the main
7698 output when @var{output} is omitted.
7699
7700 This only makes sense for gexps passed to @code{gexp->derivation}.
7701
7702 @item #$@@@var{lst}
7703 @itemx (ungexp-splicing @var{lst})
7704 Like the above, but splices the contents of @var{lst} inside the
7705 containing list.
7706
7707 @item #+@@@var{lst}
7708 @itemx (ungexp-native-splicing @var{lst})
7709 Like the above, but refers to native builds of the objects listed in
7710 @var{lst}.
7711
7712 @end table
7713
7714 G-expressions created by @code{gexp} or @code{#~} are run-time objects
7715 of the @code{gexp?} type (see below.)
7716 @end deffn
7717
7718 @deffn {Scheme Syntax} with-imported-modules @var{modules} @var{body}@dots{}
7719 Mark the gexps defined in @var{body}@dots{} as requiring @var{modules}
7720 in their execution environment.
7721
7722 Each item in @var{modules} can be the name of a module, such as
7723 @code{(guix build utils)}, or it can be a module name, followed by an
7724 arrow, followed by a file-like object:
7725
7726 @lisp
7727 `((guix build utils)
7728 (guix gcrypt)
7729 ((guix config) => ,(scheme-file "config.scm"
7730 #~(define-module @dots{}))))
7731 @end lisp
7732
7733 @noindent
7734 In the example above, the first two modules are taken from the search
7735 path, and the last one is created from the given file-like object.
7736
7737 This form has @emph{lexical} scope: it has an effect on the gexps
7738 directly defined in @var{body}@dots{}, but not on those defined, say, in
7739 procedures called from @var{body}@dots{}.
7740 @end deffn
7741
7742 @deffn {Scheme Syntax} with-extensions @var{extensions} @var{body}@dots{}
7743 Mark the gexps defined in @var{body}@dots{} as requiring
7744 @var{extensions} in their build and execution environment.
7745 @var{extensions} is typically a list of package objects such as those
7746 defined in the @code{(gnu packages guile)} module.
7747
7748 Concretely, the packages listed in @var{extensions} are added to the
7749 load path while compiling imported modules in @var{body}@dots{}; they
7750 are also added to the load path of the gexp returned by
7751 @var{body}@dots{}.
7752 @end deffn
7753
7754 @deffn {Scheme Procedure} gexp? @var{obj}
7755 Return @code{#t} if @var{obj} is a G-expression.
7756 @end deffn
7757
7758 G-expressions are meant to be written to disk, either as code building
7759 some derivation, or as plain files in the store. The monadic procedures
7760 below allow you to do that (@pxref{The Store Monad}, for more
7761 information about monads.)
7762
7763 @deffn {Monadic Procedure} gexp->derivation @var{name} @var{exp} @
7764 [#:system (%current-system)] [#:target #f] [#:graft? #t] @
7765 [#:hash #f] [#:hash-algo #f] @
7766 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
7767 [#:module-path @var{%load-path}] @
7768 [#:effective-version "2.2"] @
7769 [#:references-graphs #f] [#:allowed-references #f] @
7770 [#:disallowed-references #f] @
7771 [#:leaked-env-vars #f] @
7772 [#:script-name (string-append @var{name} "-builder")] @
7773 [#:deprecation-warnings #f] @
7774 [#:local-build? #f] [#:substitutable? #t] @
7775 [#:properties '()] [#:guile-for-build #f]
7776 Return a derivation @var{name} that runs @var{exp} (a gexp) with
7777 @var{guile-for-build} (a derivation) on @var{system}; @var{exp} is
7778 stored in a file called @var{script-name}. When @var{target} is true,
7779 it is used as the cross-compilation target triplet for packages referred
7780 to by @var{exp}.
7781
7782 @var{modules} is deprecated in favor of @code{with-imported-modules}.
7783 Its meaning is to
7784 make @var{modules} available in the evaluation context of @var{exp};
7785 @var{modules} is a list of names of Guile modules searched in
7786 @var{module-path} to be copied in the store, compiled, and made available in
7787 the load path during the execution of @var{exp}---e.g., @code{((guix
7788 build utils) (guix build gnu-build-system))}.
7789
7790 @var{effective-version} determines the string to use when adding extensions of
7791 @var{exp} (see @code{with-extensions}) to the search path---e.g., @code{"2.2"}.
7792
7793 @var{graft?} determines whether packages referred to by @var{exp} should be grafted when
7794 applicable.
7795
7796 When @var{references-graphs} is true, it must be a list of tuples of one of the
7797 following forms:
7798
7799 @example
7800 (@var{file-name} @var{package})
7801 (@var{file-name} @var{package} @var{output})
7802 (@var{file-name} @var{derivation})
7803 (@var{file-name} @var{derivation} @var{output})
7804 (@var{file-name} @var{store-item})
7805 @end example
7806
7807 The right-hand-side of each element of @var{references-graphs} is automatically made
7808 an input of the build process of @var{exp}. In the build environment, each
7809 @var{file-name} contains the reference graph of the corresponding item, in a simple
7810 text format.
7811
7812 @var{allowed-references} must be either @code{#f} or a list of output names and packages.
7813 In the latter case, the list denotes store items that the result is allowed to
7814 refer to. Any reference to another store item will lead to a build error.
7815 Similarly for @var{disallowed-references}, which can list items that must not be
7816 referenced by the outputs.
7817
7818 @var{deprecation-warnings} determines whether to show deprecation warnings while
7819 compiling modules. It can be @code{#f}, @code{#t}, or @code{'detailed}.
7820
7821 The other arguments are as for @code{derivation} (@pxref{Derivations}).
7822 @end deffn
7823
7824 @cindex file-like objects
7825 The @code{local-file}, @code{plain-file}, @code{computed-file},
7826 @code{program-file}, and @code{scheme-file} procedures below return
7827 @dfn{file-like objects}. That is, when unquoted in a G-expression,
7828 these objects lead to a file in the store. Consider this G-expression:
7829
7830 @lisp
7831 #~(system* #$(file-append glibc "/sbin/nscd") "-f"
7832 #$(local-file "/tmp/my-nscd.conf"))
7833 @end lisp
7834
7835 The effect here is to ``intern'' @file{/tmp/my-nscd.conf} by copying it
7836 to the store. Once expanded, for instance @i{via}
7837 @code{gexp->derivation}, the G-expression refers to that copy under
7838 @file{/gnu/store}; thus, modifying or removing the file in @file{/tmp}
7839 does not have any effect on what the G-expression does.
7840 @code{plain-file} can be used similarly; it differs in that the file
7841 content is directly passed as a string.
7842
7843 @deffn {Scheme Procedure} local-file @var{file} [@var{name}] @
7844 [#:recursive? #f] [#:select? (const #t)]
7845 Return an object representing local file @var{file} to add to the store;
7846 this object can be used in a gexp. If @var{file} is a literal string
7847 denoting a relative file name, it is looked up relative to the source
7848 file where it appears; if @var{file} is not a literal string, it is
7849 looked up relative to the current working directory at run time.
7850 @var{file} will be added to the store under @var{name}--by default the
7851 base name of @var{file}.
7852
7853 When @var{recursive?} is true, the contents of @var{file} are added recursively; if @var{file}
7854 designates a flat file and @var{recursive?} is true, its contents are added, and its
7855 permission bits are kept.
7856
7857 When @var{recursive?} is true, call @code{(@var{select?} @var{file}
7858 @var{stat})} for each directory entry, where @var{file} is the entry's
7859 absolute file name and @var{stat} is the result of @code{lstat}; exclude
7860 entries for which @var{select?} does not return true.
7861
7862 This is the declarative counterpart of the @code{interned-file} monadic
7863 procedure (@pxref{The Store Monad, @code{interned-file}}).
7864 @end deffn
7865
7866 @deffn {Scheme Procedure} plain-file @var{name} @var{content}
7867 Return an object representing a text file called @var{name} with the given
7868 @var{content} (a string or a bytevector) to be added to the store.
7869
7870 This is the declarative counterpart of @code{text-file}.
7871 @end deffn
7872
7873 @deffn {Scheme Procedure} computed-file @var{name} @var{gexp} @
7874 [#:options '(#:local-build? #t)]
7875 Return an object representing the store item @var{name}, a file or
7876 directory computed by @var{gexp}. @var{options}
7877 is a list of additional arguments to pass to @code{gexp->derivation}.
7878
7879 This is the declarative counterpart of @code{gexp->derivation}.
7880 @end deffn
7881
7882 @deffn {Monadic Procedure} gexp->script @var{name} @var{exp} @
7883 [#:guile (default-guile)] [#:module-path %load-path] @
7884 [#:system (%current-system)] [#:target #f]
7885 Return an executable script @var{name} that runs @var{exp} using
7886 @var{guile}, with @var{exp}'s imported modules in its search path.
7887 Look up @var{exp}'s modules in @var{module-path}.
7888
7889 The example below builds a script that simply invokes the @command{ls}
7890 command:
7891
7892 @lisp
7893 (use-modules (guix gexp) (gnu packages base))
7894
7895 (gexp->script "list-files"
7896 #~(execl #$(file-append coreutils "/bin/ls")
7897 "ls"))
7898 @end lisp
7899
7900 When ``running'' it through the store (@pxref{The Store Monad,
7901 @code{run-with-store}}), we obtain a derivation that produces an
7902 executable file @file{/gnu/store/@dots{}-list-files} along these lines:
7903
7904 @example
7905 #!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
7906 !#
7907 (execl "/gnu/store/@dots{}-coreutils-8.22"/bin/ls" "ls")
7908 @end example
7909 @end deffn
7910
7911 @deffn {Scheme Procedure} program-file @var{name} @var{exp} @
7912 [#:guile #f] [#:module-path %load-path]
7913 Return an object representing the executable store item @var{name} that
7914 runs @var{gexp}. @var{guile} is the Guile package used to execute that
7915 script. Imported modules of @var{gexp} are looked up in @var{module-path}.
7916
7917 This is the declarative counterpart of @code{gexp->script}.
7918 @end deffn
7919
7920 @deffn {Monadic Procedure} gexp->file @var{name} @var{exp} @
7921 [#:set-load-path? #t] [#:module-path %load-path] @
7922 [#:splice? #f] @
7923 [#:guile (default-guile)]
7924 Return a derivation that builds a file @var{name} containing @var{exp}.
7925 When @var{splice?} is true, @var{exp} is considered to be a list of
7926 expressions that will be spliced in the resulting file.
7927
7928 When @var{set-load-path?} is true, emit code in the resulting file to
7929 set @code{%load-path} and @code{%load-compiled-path} to honor
7930 @var{exp}'s imported modules. Look up @var{exp}'s modules in
7931 @var{module-path}.
7932
7933 The resulting file holds references to all the dependencies of @var{exp}
7934 or a subset thereof.
7935 @end deffn
7936
7937 @deffn {Scheme Procedure} scheme-file @var{name} @var{exp} [#:splice? #f]
7938 Return an object representing the Scheme file @var{name} that contains
7939 @var{exp}.
7940
7941 This is the declarative counterpart of @code{gexp->file}.
7942 @end deffn
7943
7944 @deffn {Monadic Procedure} text-file* @var{name} @var{text} @dots{}
7945 Return as a monadic value a derivation that builds a text file
7946 containing all of @var{text}. @var{text} may list, in addition to
7947 strings, objects of any type that can be used in a gexp: packages,
7948 derivations, local file objects, etc. The resulting store file holds
7949 references to all these.
7950
7951 This variant should be preferred over @code{text-file} anytime the file
7952 to create will reference items from the store. This is typically the
7953 case when building a configuration file that embeds store file names,
7954 like this:
7955
7956 @lisp
7957 (define (profile.sh)
7958 ;; Return the name of a shell script in the store that
7959 ;; initializes the 'PATH' environment variable.
7960 (text-file* "profile.sh"
7961 "export PATH=" coreutils "/bin:"
7962 grep "/bin:" sed "/bin\n"))
7963 @end lisp
7964
7965 In this example, the resulting @file{/gnu/store/@dots{}-profile.sh} file
7966 will reference @var{coreutils}, @var{grep}, and @var{sed}, thereby
7967 preventing them from being garbage-collected during its lifetime.
7968 @end deffn
7969
7970 @deffn {Scheme Procedure} mixed-text-file @var{name} @var{text} @dots{}
7971 Return an object representing store file @var{name} containing
7972 @var{text}. @var{text} is a sequence of strings and file-like objects,
7973 as in:
7974
7975 @lisp
7976 (mixed-text-file "profile"
7977 "export PATH=" coreutils "/bin:" grep "/bin")
7978 @end lisp
7979
7980 This is the declarative counterpart of @code{text-file*}.
7981 @end deffn
7982
7983 @deffn {Scheme Procedure} file-union @var{name} @var{files}
7984 Return a @code{<computed-file>} that builds a directory containing all of @var{files}.
7985 Each item in @var{files} must be a two-element list where the first element is the
7986 file name to use in the new directory, and the second element is a gexp
7987 denoting the target file. Here's an example:
7988
7989 @lisp
7990 (file-union "etc"
7991 `(("hosts" ,(plain-file "hosts"
7992 "127.0.0.1 localhost"))
7993 ("bashrc" ,(plain-file "bashrc"
7994 "alias ls='ls --color=auto'"))))
7995 @end lisp
7996
7997 This yields an @code{etc} directory containing these two files.
7998 @end deffn
7999
8000 @deffn {Scheme Procedure} directory-union @var{name} @var{things}
8001 Return a directory that is the union of @var{things}, where @var{things} is a list of
8002 file-like objects denoting directories. For example:
8003
8004 @lisp
8005 (directory-union "guile+emacs" (list guile emacs))
8006 @end lisp
8007
8008 yields a directory that is the union of the @code{guile} and @code{emacs} packages.
8009 @end deffn
8010
8011 @deffn {Scheme Procedure} file-append @var{obj} @var{suffix} @dots{}
8012 Return a file-like object that expands to the concatenation of @var{obj}
8013 and @var{suffix}, where @var{obj} is a lowerable object and each
8014 @var{suffix} is a string.
8015
8016 As an example, consider this gexp:
8017
8018 @lisp
8019 (gexp->script "run-uname"
8020 #~(system* #$(file-append coreutils
8021 "/bin/uname")))
8022 @end lisp
8023
8024 The same effect could be achieved with:
8025
8026 @lisp
8027 (gexp->script "run-uname"
8028 #~(system* (string-append #$coreutils
8029 "/bin/uname")))
8030 @end lisp
8031
8032 There is one difference though: in the @code{file-append} case, the
8033 resulting script contains the absolute file name as a string, whereas in
8034 the second case, the resulting script contains a @code{(string-append
8035 @dots{})} expression to construct the file name @emph{at run time}.
8036 @end deffn
8037
8038 @deffn {Scheme Syntax} with-parameters ((@var{parameter} @var{value}) @dots{}) @var{exp}
8039 This macro is similar to the @code{parameterize} form for
8040 dynamically-bound @dfn{parameters} (@pxref{Parameters,,, guile, GNU
8041 Guile Reference Manual}). The key difference is that it takes effect
8042 when the file-like object returned by @var{exp} is lowered to a
8043 derivation or store item.
8044
8045 A typical use of @code{with-parameters} is to force the system in effect
8046 for a given object:
8047
8048 @lisp
8049 (with-parameters ((%current-system "i686-linux"))
8050 coreutils)
8051 @end lisp
8052
8053 The example above returns an object that corresponds to the i686 build
8054 of Coreutils, regardless of the current value of @code{%current-system}.
8055 @end deffn
8056
8057
8058 Of course, in addition to gexps embedded in ``host'' code, there are
8059 also modules containing build tools. To make it clear that they are
8060 meant to be used in the build stratum, these modules are kept in the
8061 @code{(guix build @dots{})} name space.
8062
8063 @cindex lowering, of high-level objects in gexps
8064 Internally, high-level objects are @dfn{lowered}, using their compiler,
8065 to either derivations or store items. For instance, lowering a package
8066 yields a derivation, and lowering a @code{plain-file} yields a store
8067 item. This is achieved using the @code{lower-object} monadic procedure.
8068
8069 @deffn {Monadic Procedure} lower-object @var{obj} [@var{system}] @
8070 [#:target #f]
8071 Return as a value in @var{%store-monad} the derivation or store item
8072 corresponding to @var{obj} for @var{system}, cross-compiling for
8073 @var{target} if @var{target} is true. @var{obj} must be an object that
8074 has an associated gexp compiler, such as a @code{<package>}.
8075 @end deffn
8076
8077 @node Invoking guix repl
8078 @section Invoking @command{guix repl}
8079
8080 @cindex REPL, read-eval-print loop
8081 The @command{guix repl} command spawns a Guile @dfn{read-eval-print loop}
8082 (REPL) for interactive programming (@pxref{Using Guile Interactively,,, guile,
8083 GNU Guile Reference Manual}). Compared to just launching the @command{guile}
8084 command, @command{guix repl} guarantees that all the Guix modules and all its
8085 dependencies are available in the search path. You can use it this way:
8086
8087 @example
8088 $ guix repl
8089 scheme@@(guile-user)> ,use (gnu packages base)
8090 scheme@@(guile-user)> coreutils
8091 $1 = #<package coreutils@@8.29 gnu/packages/base.scm:327 3e28300>
8092 @end example
8093
8094 @cindex inferiors
8095 In addition, @command{guix repl} implements a simple machine-readable REPL
8096 protocol for use by @code{(guix inferior)}, a facility to interact with
8097 @dfn{inferiors}, separate processes running a potentially different revision
8098 of Guix.
8099
8100 The available options are as follows:
8101
8102 @table @code
8103 @item --type=@var{type}
8104 @itemx -t @var{type}
8105 Start a REPL of the given @var{TYPE}, which can be one of the following:
8106
8107 @table @code
8108 @item guile
8109 This is default, and it spawns a standard full-featured Guile REPL.
8110 @item machine
8111 Spawn a REPL that uses the machine-readable protocol. This is the protocol
8112 that the @code{(guix inferior)} module speaks.
8113 @end table
8114
8115 @item --listen=@var{endpoint}
8116 By default, @command{guix repl} reads from standard input and writes to
8117 standard output. When this option is passed, it will instead listen for
8118 connections on @var{endpoint}. Here are examples of valid options:
8119
8120 @table @code
8121 @item --listen=tcp:37146
8122 Accept connections on localhost on port 37146.
8123
8124 @item --listen=unix:/tmp/socket
8125 Accept connections on the Unix-domain socket @file{/tmp/socket}.
8126 @end table
8127
8128 @item --load-path=@var{directory}
8129 @itemx -L @var{directory}
8130 Add @var{directory} to the front of the package module search path
8131 (@pxref{Package Modules}).
8132
8133 This allows users to define their own packages and make them visible to
8134 the command-line tool.
8135
8136 @item -q
8137 Inhibit loading of the @file{~/.guile} file. By default, that
8138 configuration file is loaded when spawning a @code{guile} REPL.
8139 @end table
8140
8141 @c *********************************************************************
8142 @node Utilities
8143 @chapter Utilities
8144
8145 This section describes Guix command-line utilities. Some of them are
8146 primarily targeted at developers and users who write new package
8147 definitions, while others are more generally useful. They complement
8148 the Scheme programming interface of Guix in a convenient way.
8149
8150 @menu
8151 * Invoking guix build:: Building packages from the command line.
8152 * Invoking guix edit:: Editing package definitions.
8153 * Invoking guix download:: Downloading a file and printing its hash.
8154 * Invoking guix hash:: Computing the cryptographic hash of a file.
8155 * Invoking guix import:: Importing package definitions.
8156 * Invoking guix refresh:: Updating package definitions.
8157 * Invoking guix lint:: Finding errors in package definitions.
8158 * Invoking guix size:: Profiling disk usage.
8159 * Invoking guix graph:: Visualizing the graph of packages.
8160 * Invoking guix publish:: Sharing substitutes.
8161 * Invoking guix challenge:: Challenging substitute servers.
8162 * Invoking guix copy:: Copying to and from a remote store.
8163 * Invoking guix container:: Process isolation.
8164 * Invoking guix weather:: Assessing substitute availability.
8165 * Invoking guix processes:: Listing client processes.
8166 @end menu
8167
8168 @node Invoking guix build
8169 @section Invoking @command{guix build}
8170
8171 @cindex package building
8172 @cindex @command{guix build}
8173 The @command{guix build} command builds packages or derivations and
8174 their dependencies, and prints the resulting store paths. Note that it
8175 does not modify the user's profile---this is the job of the
8176 @command{guix package} command (@pxref{Invoking guix package}). Thus,
8177 it is mainly useful for distribution developers.
8178
8179 The general syntax is:
8180
8181 @example
8182 guix build @var{options} @var{package-or-derivation}@dots{}
8183 @end example
8184
8185 As an example, the following command builds the latest versions of Emacs
8186 and of Guile, displays their build logs, and finally displays the
8187 resulting directories:
8188
8189 @example
8190 guix build emacs guile
8191 @end example
8192
8193 Similarly, the following command builds all the available packages:
8194
8195 @example
8196 guix build --quiet --keep-going \
8197 `guix package -A | cut -f1,2 --output-delimiter=@@`
8198 @end example
8199
8200 @var{package-or-derivation} may be either the name of a package found in
8201 the software distribution such as @code{coreutils} or
8202 @code{coreutils@@8.20}, or a derivation such as
8203 @file{/gnu/store/@dots{}-coreutils-8.19.drv}. In the former case, a
8204 package with the corresponding name (and optionally version) is searched
8205 for among the GNU distribution modules (@pxref{Package Modules}).
8206
8207 Alternatively, the @code{--expression} option may be used to specify a
8208 Scheme expression that evaluates to a package; this is useful when
8209 disambiguating among several same-named packages or package variants is
8210 needed.
8211
8212 There may be zero or more @var{options}. The available options are
8213 described in the subsections below.
8214
8215 @menu
8216 * Common Build Options:: Build options for most commands.
8217 * Package Transformation Options:: Creating variants of packages.
8218 * Additional Build Options:: Options specific to 'guix build'.
8219 * Debugging Build Failures:: Real life packaging experience.
8220 @end menu
8221
8222 @node Common Build Options
8223 @subsection Common Build Options
8224
8225 A number of options that control the build process are common to
8226 @command{guix build} and other commands that can spawn builds, such as
8227 @command{guix package} or @command{guix archive}. These are the
8228 following:
8229
8230 @table @code
8231
8232 @item --load-path=@var{directory}
8233 @itemx -L @var{directory}
8234 Add @var{directory} to the front of the package module search path
8235 (@pxref{Package Modules}).
8236
8237 This allows users to define their own packages and make them visible to
8238 the command-line tools.
8239
8240 @item --keep-failed
8241 @itemx -K
8242 Keep the build tree of failed builds. Thus, if a build fails, its build
8243 tree is kept under @file{/tmp}, in a directory whose name is shown at
8244 the end of the build log. This is useful when debugging build issues.
8245 @xref{Debugging Build Failures}, for tips and tricks on how to debug
8246 build issues.
8247
8248 This option implies @option{--no-offload}, and it has no effect when
8249 connecting to a remote daemon with a @code{guix://} URI (@pxref{The
8250 Store, the @code{GUIX_DAEMON_SOCKET} variable}).
8251
8252 @item --keep-going
8253 @itemx -k
8254 Keep going when some of the derivations fail to build; return only once
8255 all the builds have either completed or failed.
8256
8257 The default behavior is to stop as soon as one of the specified
8258 derivations has failed.
8259
8260 @item --dry-run
8261 @itemx -n
8262 Do not build the derivations.
8263
8264 @anchor{fallback-option}
8265 @item --fallback
8266 When substituting a pre-built binary fails, fall back to building
8267 packages locally (@pxref{Substitution Failure}).
8268
8269 @item --substitute-urls=@var{urls}
8270 @anchor{client-substitute-urls}
8271 Consider @var{urls} the whitespace-separated list of substitute source
8272 URLs, overriding the default list of URLs of @command{guix-daemon}
8273 (@pxref{daemon-substitute-urls,, @command{guix-daemon} URLs}).
8274
8275 This means that substitutes may be downloaded from @var{urls}, provided
8276 they are signed by a key authorized by the system administrator
8277 (@pxref{Substitutes}).
8278
8279 When @var{urls} is the empty string, substitutes are effectively
8280 disabled.
8281
8282 @item --no-substitutes
8283 Do not use substitutes for build products. That is, always build things
8284 locally instead of allowing downloads of pre-built binaries
8285 (@pxref{Substitutes}).
8286
8287 @item --no-grafts
8288 Do not ``graft'' packages. In practice, this means that package updates
8289 available as grafts are not applied. @xref{Security Updates}, for more
8290 information on grafts.
8291
8292 @item --rounds=@var{n}
8293 Build each derivation @var{n} times in a row, and raise an error if
8294 consecutive build results are not bit-for-bit identical.
8295
8296 This is a useful way to detect non-deterministic builds processes.
8297 Non-deterministic build processes are a problem because they make it
8298 practically impossible for users to @emph{verify} whether third-party
8299 binaries are genuine. @xref{Invoking guix challenge}, for more.
8300
8301 Note that, currently, the differing build results are not kept around,
8302 so you will have to manually investigate in case of an error---e.g., by
8303 stashing one of the build results with @code{guix archive --export}
8304 (@pxref{Invoking guix archive}), then rebuilding, and finally comparing
8305 the two results.
8306
8307 @item --no-offload
8308 Do not use offload builds to other machines (@pxref{Daemon Offload
8309 Setup}). That is, always build things locally instead of offloading
8310 builds to remote machines.
8311
8312 @item --max-silent-time=@var{seconds}
8313 When the build or substitution process remains silent for more than
8314 @var{seconds}, terminate it and report a build failure.
8315
8316 By default, the daemon's setting is honored (@pxref{Invoking
8317 guix-daemon, @code{--max-silent-time}}).
8318
8319 @item --timeout=@var{seconds}
8320 Likewise, when the build or substitution process lasts for more than
8321 @var{seconds}, terminate it and report a build failure.
8322
8323 By default, the daemon's setting is honored (@pxref{Invoking
8324 guix-daemon, @code{--timeout}}).
8325
8326 @c Note: This option is actually not part of %standard-build-options but
8327 @c most programs honor it.
8328 @cindex verbosity, of the command-line tools
8329 @cindex build logs, verbosity
8330 @item -v @var{level}
8331 @itemx --verbosity=@var{level}
8332 Use the given verbosity @var{level}, an integer. Choosing 0 means that no
8333 output is produced, 1 is for quiet output, and 2 shows all the build log
8334 output on standard error.
8335
8336 @item --cores=@var{n}
8337 @itemx -c @var{n}
8338 Allow the use of up to @var{n} CPU cores for the build. The special
8339 value @code{0} means to use as many CPU cores as available.
8340
8341 @item --max-jobs=@var{n}
8342 @itemx -M @var{n}
8343 Allow at most @var{n} build jobs in parallel. @xref{Invoking
8344 guix-daemon, @code{--max-jobs}}, for details about this option and the
8345 equivalent @command{guix-daemon} option.
8346
8347 @item --debug=@var{level}
8348 Produce debugging output coming from the build daemon. @var{level} must be an
8349 integer between 0 and 5; higher means more verbose output. Setting a level of
8350 4 or more may be helpful when debugging setup issues with the build daemon.
8351
8352 @end table
8353
8354 Behind the scenes, @command{guix build} is essentially an interface to
8355 the @code{package-derivation} procedure of the @code{(guix packages)}
8356 module, and to the @code{build-derivations} procedure of the @code{(guix
8357 derivations)} module.
8358
8359 In addition to options explicitly passed on the command line,
8360 @command{guix build} and other @command{guix} commands that support
8361 building honor the @code{GUIX_BUILD_OPTIONS} environment variable.
8362
8363 @defvr {Environment Variable} GUIX_BUILD_OPTIONS
8364 Users can define this variable to a list of command line options that
8365 will automatically be used by @command{guix build} and other
8366 @command{guix} commands that can perform builds, as in the example
8367 below:
8368
8369 @example
8370 $ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
8371 @end example
8372
8373 These options are parsed independently, and the result is appended to
8374 the parsed command-line options.
8375 @end defvr
8376
8377
8378 @node Package Transformation Options
8379 @subsection Package Transformation Options
8380
8381 @cindex package variants
8382 Another set of command-line options supported by @command{guix build}
8383 and also @command{guix package} are @dfn{package transformation
8384 options}. These are options that make it possible to define @dfn{package
8385 variants}---for instance, packages built from different source code.
8386 This is a convenient way to create customized packages on the fly
8387 without having to type in the definitions of package variants
8388 (@pxref{Defining Packages}).
8389
8390 @table @code
8391
8392 @item --with-source=@var{source}
8393 @itemx --with-source=@var{package}=@var{source}
8394 @itemx --with-source=@var{package}@@@var{version}=@var{source}
8395 Use @var{source} as the source of @var{package}, and @var{version} as
8396 its version number.
8397 @var{source} must be a file name or a URL, as for @command{guix
8398 download} (@pxref{Invoking guix download}).
8399
8400 When @var{package} is omitted,
8401 it is taken to be the package name specified on the
8402 command line that matches the base of @var{source}---e.g.,
8403 if @var{source} is @code{/src/guile-2.0.10.tar.gz}, the corresponding
8404 package is @code{guile}.
8405
8406 Likewise, when @var{version} is omitted, the version string is inferred from
8407 @var{source}; in the previous example, it is @code{2.0.10}.
8408
8409 This option allows users to try out versions of packages other than the
8410 one provided by the distribution. The example below downloads
8411 @file{ed-1.7.tar.gz} from a GNU mirror and uses that as the source for
8412 the @code{ed} package:
8413
8414 @example
8415 guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
8416 @end example
8417
8418 As a developer, @code{--with-source} makes it easy to test release
8419 candidates:
8420
8421 @example
8422 guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
8423 @end example
8424
8425 @dots{} or to build from a checkout in a pristine environment:
8426
8427 @example
8428 $ git clone git://git.sv.gnu.org/guix.git
8429 $ guix build guix --with-source=guix@@1.0=./guix
8430 @end example
8431
8432 @item --with-input=@var{package}=@var{replacement}
8433 Replace dependency on @var{package} by a dependency on
8434 @var{replacement}. @var{package} must be a package name, and
8435 @var{replacement} must be a package specification such as @code{guile}
8436 or @code{guile@@1.8}.
8437
8438 For instance, the following command builds Guix, but replaces its
8439 dependency on the current stable version of Guile with a dependency on
8440 the legacy version of Guile, @code{guile@@2.0}:
8441
8442 @example
8443 guix build --with-input=guile=guile@@2.0 guix
8444 @end example
8445
8446 This is a recursive, deep replacement. So in this example, both
8447 @code{guix} and its dependency @code{guile-json} (which also depends on
8448 @code{guile}) get rebuilt against @code{guile@@2.0}.
8449
8450 This is implemented using the @code{package-input-rewriting} Scheme
8451 procedure (@pxref{Defining Packages, @code{package-input-rewriting}}).
8452
8453 @item --with-graft=@var{package}=@var{replacement}
8454 This is similar to @code{--with-input} but with an important difference:
8455 instead of rebuilding the whole dependency chain, @var{replacement} is
8456 built and then @dfn{grafted} onto the binaries that were initially
8457 referring to @var{package}. @xref{Security Updates}, for more
8458 information on grafts.
8459
8460 For example, the command below grafts version 3.5.4 of GnuTLS onto Wget
8461 and all its dependencies, replacing references to the version of GnuTLS
8462 they currently refer to:
8463
8464 @example
8465 guix build --with-graft=gnutls=gnutls@@3.5.4 wget
8466 @end example
8467
8468 This has the advantage of being much faster than rebuilding everything.
8469 But there is a caveat: it works if and only if @var{package} and
8470 @var{replacement} are strictly compatible---for example, if they provide
8471 a library, the application binary interface (ABI) of those libraries
8472 must be compatible. If @var{replacement} is somehow incompatible with
8473 @var{package}, then the resulting package may be unusable. Use with
8474 care!
8475
8476 @item --with-git-url=@var{package}=@var{url}
8477 @cindex Git, using the latest commit
8478 @cindex latest commit, building
8479 Build @var{package} from the latest commit of the @code{master} branch of the
8480 Git repository at @var{url}. Git sub-modules of the repository are fetched,
8481 recursively.
8482
8483 For example, the following command builds the NumPy Python library against the
8484 latest commit of the master branch of Python itself:
8485
8486 @example
8487 guix build python-numpy \
8488 --with-git-url=python=https://github.com/python/cpython
8489 @end example
8490
8491 This option can also be combined with @code{--with-branch} or
8492 @code{--with-commit} (see below).
8493
8494 @cindex continuous integration
8495 Obviously, since it uses the latest commit of the given branch, the result of
8496 such a command varies over time. Nevertheless it is a convenient way to
8497 rebuild entire software stacks against the latest commit of one or more
8498 packages. This is particularly useful in the context of continuous
8499 integration (CI).
8500
8501 Checkouts are kept in a cache under @file{~/.cache/guix/checkouts} to speed up
8502 consecutive accesses to the same repository. You may want to clean it up once
8503 in a while to save disk space.
8504
8505 @item --with-branch=@var{package}=@var{branch}
8506 Build @var{package} from the latest commit of @var{branch}. If the
8507 @code{source} field of @var{package} is an origin with the @code{git-fetch}
8508 method (@pxref{origin Reference}) or a @code{git-checkout} object, the
8509 repository URL is taken from that @code{source}. Otherwise you have to use
8510 @code{--with-git-url} to specify the URL of the Git repository.
8511
8512 For instance, the following command builds @code{guile-sqlite3} from the
8513 latest commit of its @code{master} branch, and then builds @code{guix} (which
8514 depends on it) and @code{cuirass} (which depends on @code{guix}) against this
8515 specific @code{guile-sqlite3} build:
8516
8517 @example
8518 guix build --with-branch=guile-sqlite3=master cuirass
8519 @end example
8520
8521 @item --with-commit=@var{package}=@var{commit}
8522 This is similar to @code{--with-branch}, except that it builds from
8523 @var{commit} rather than the tip of a branch. @var{commit} must be a valid
8524 Git commit SHA1 identifier or a tag.
8525 @end table
8526
8527 @node Additional Build Options
8528 @subsection Additional Build Options
8529
8530 The command-line options presented below are specific to @command{guix
8531 build}.
8532
8533 @table @code
8534
8535 @item --quiet
8536 @itemx -q
8537 Build quietly, without displaying the build log; this is equivalent to
8538 @code{--verbosity=0}. Upon completion, the build log is kept in @file{/var}
8539 (or similar) and can always be retrieved using the @option{--log-file} option.
8540
8541 @item --file=@var{file}
8542 @itemx -f @var{file}
8543 Build the package, derivation, or other file-like object that the code within
8544 @var{file} evaluates to (@pxref{G-Expressions, file-like objects}).
8545
8546 As an example, @var{file} might contain a package definition like this
8547 (@pxref{Defining Packages}):
8548
8549 @lisp
8550 @include package-hello.scm
8551 @end lisp
8552
8553 @item --manifest=@var{manifest}
8554 @itemx -m @var{manifest}
8555 Build all packages listed in the given @var{manifest}
8556 (@pxref{profile-manifest, @option{--manifest}}).
8557
8558 @item --expression=@var{expr}
8559 @itemx -e @var{expr}
8560 Build the package or derivation @var{expr} evaluates to.
8561
8562 For example, @var{expr} may be @code{(@@ (gnu packages guile)
8563 guile-1.8)}, which unambiguously designates this specific variant of
8564 version 1.8 of Guile.
8565
8566 Alternatively, @var{expr} may be a G-expression, in which case it is used
8567 as a build program passed to @code{gexp->derivation}
8568 (@pxref{G-Expressions}).
8569
8570 Lastly, @var{expr} may refer to a zero-argument monadic procedure
8571 (@pxref{The Store Monad}). The procedure must return a derivation as a
8572 monadic value, which is then passed through @code{run-with-store}.
8573
8574 @item --source
8575 @itemx -S
8576 Build the source derivations of the packages, rather than the packages
8577 themselves.
8578
8579 For instance, @code{guix build -S gcc} returns something like
8580 @file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, which is the GCC
8581 source tarball.
8582
8583 The returned source tarball is the result of applying any patches and
8584 code snippets specified in the package @code{origin} (@pxref{Defining
8585 Packages}).
8586
8587 Note that @command{guix build -S} compiles the sources only of the
8588 specified packages. They do not include the sources of statically
8589 linked dependencies and by themselves are insufficient for reproducing
8590 the packages.
8591
8592 @item --sources
8593 Fetch and return the source of @var{package-or-derivation} and all their
8594 dependencies, recursively. This is a handy way to obtain a local copy
8595 of all the source code needed to build @var{packages}, allowing you to
8596 eventually build them even without network access. It is an extension
8597 of the @code{--source} option and can accept one of the following
8598 optional argument values:
8599
8600 @table @code
8601 @item package
8602 This value causes the @code{--sources} option to behave in the same way
8603 as the @code{--source} option.
8604
8605 @item all
8606 Build the source derivations of all packages, including any source that
8607 might be listed as @code{inputs}. This is the default value.
8608
8609 @example
8610 $ guix build --sources tzdata
8611 The following derivations will be built:
8612 /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
8613 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
8614 @end example
8615
8616 @item transitive
8617 Build the source derivations of all packages, as well of all transitive
8618 inputs to the packages. This can be used e.g.@: to
8619 prefetch package source for later offline building.
8620
8621 @example
8622 $ guix build --sources=transitive tzdata
8623 The following derivations will be built:
8624 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
8625 /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
8626 /gnu/store/@dots{}-grep-2.21.tar.xz.drv
8627 /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
8628 /gnu/store/@dots{}-make-4.1.tar.xz.drv
8629 /gnu/store/@dots{}-bash-4.3.tar.xz.drv
8630 @dots{}
8631 @end example
8632
8633 @end table
8634
8635 @item --system=@var{system}
8636 @itemx -s @var{system}
8637 Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
8638 the system type of the build host. The @command{guix build} command allows
8639 you to repeat this option several times, in which case it builds for all the
8640 specified systems; other commands ignore extraneous @option{-s} options.
8641
8642 @quotation Note
8643 The @code{--system} flag is for @emph{native} compilation and must not
8644 be confused with cross-compilation. See @code{--target} below for
8645 information on cross-compilation.
8646 @end quotation
8647
8648 An example use of this is on Linux-based systems, which can emulate
8649 different personalities. For instance, passing
8650 @code{--system=i686-linux} on an @code{x86_64-linux} system or
8651 @code{--system=armhf-linux} on an @code{aarch64-linux} system allows you
8652 to build packages in a complete 32-bit environment.
8653
8654 @quotation Note
8655 Building for an @code{armhf-linux} system is unconditionally enabled on
8656 @code{aarch64-linux} machines, although certain aarch64 chipsets do not
8657 allow for this functionality, notably the ThunderX.
8658 @end quotation
8659
8660 Similarly, when transparent emulation with QEMU and @code{binfmt_misc}
8661 is enabled (@pxref{Virtualization Services,
8662 @code{qemu-binfmt-service-type}}), you can build for any system for
8663 which a QEMU @code{binfmt_misc} handler is installed.
8664
8665 Builds for a system other than that of the machine you are using can
8666 also be offloaded to a remote machine of the right architecture.
8667 @xref{Daemon Offload Setup}, for more information on offloading.
8668
8669 @item --target=@var{triplet}
8670 @cindex cross-compilation
8671 Cross-build for @var{triplet}, which must be a valid GNU triplet, such
8672 as @code{"mips64el-linux-gnu"} (@pxref{Specifying Target Triplets, GNU
8673 configuration triplets,, autoconf, Autoconf}).
8674
8675 @anchor{build-check}
8676 @item --check
8677 @cindex determinism, checking
8678 @cindex reproducibility, checking
8679 Rebuild @var{package-or-derivation}, which are already available in the
8680 store, and raise an error if the build results are not bit-for-bit
8681 identical.
8682
8683 This mechanism allows you to check whether previously installed
8684 substitutes are genuine (@pxref{Substitutes}), or whether the build result
8685 of a package is deterministic. @xref{Invoking guix challenge}, for more
8686 background information and tools.
8687
8688 When used in conjunction with @option{--keep-failed}, the differing
8689 output is kept in the store, under @file{/gnu/store/@dots{}-check}.
8690 This makes it easy to look for differences between the two results.
8691
8692 @item --repair
8693 @cindex repairing store items
8694 @cindex corruption, recovering from
8695 Attempt to repair the specified store items, if they are corrupt, by
8696 re-downloading or rebuilding them.
8697
8698 This operation is not atomic and thus restricted to @code{root}.
8699
8700 @item --derivations
8701 @itemx -d
8702 Return the derivation paths, not the output paths, of the given
8703 packages.
8704
8705 @item --root=@var{file}
8706 @itemx -r @var{file}
8707 @cindex GC roots, adding
8708 @cindex garbage collector roots, adding
8709 Make @var{file} a symlink to the result, and register it as a garbage
8710 collector root.
8711
8712 Consequently, the results of this @command{guix build} invocation are
8713 protected from garbage collection until @var{file} is removed. When
8714 that option is omitted, build results are eligible for garbage
8715 collection as soon as the build completes. @xref{Invoking guix gc}, for
8716 more on GC roots.
8717
8718 @item --log-file
8719 @cindex build logs, access
8720 Return the build log file names or URLs for the given
8721 @var{package-or-derivation}, or raise an error if build logs are
8722 missing.
8723
8724 This works regardless of how packages or derivations are specified. For
8725 instance, the following invocations are equivalent:
8726
8727 @example
8728 guix build --log-file `guix build -d guile`
8729 guix build --log-file `guix build guile`
8730 guix build --log-file guile
8731 guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
8732 @end example
8733
8734 If a log is unavailable locally, and unless @code{--no-substitutes} is
8735 passed, the command looks for a corresponding log on one of the
8736 substitute servers (as specified with @code{--substitute-urls}.)
8737
8738 So for instance, imagine you want to see the build log of GDB on MIPS,
8739 but you are actually on an @code{x86_64} machine:
8740
8741 @example
8742 $ guix build --log-file gdb -s mips64el-linux
8743 https://@value{SUBSTITUTE-SERVER}/log/@dots{}-gdb-7.10
8744 @end example
8745
8746 You can freely access a huge library of build logs!
8747 @end table
8748
8749 @node Debugging Build Failures
8750 @subsection Debugging Build Failures
8751
8752 @cindex build failures, debugging
8753 When defining a new package (@pxref{Defining Packages}), you will
8754 probably find yourself spending some time debugging and tweaking the
8755 build until it succeeds. To do that, you need to operate the build
8756 commands yourself in an environment as close as possible to the one the
8757 build daemon uses.
8758
8759 To that end, the first thing to do is to use the @option{--keep-failed}
8760 or @option{-K} option of @command{guix build}, which will keep the
8761 failed build tree in @file{/tmp} or whatever directory you specified as
8762 @code{TMPDIR} (@pxref{Invoking guix build, @code{--keep-failed}}).
8763
8764 From there on, you can @command{cd} to the failed build tree and source
8765 the @file{environment-variables} file, which contains all the
8766 environment variable definitions that were in place when the build
8767 failed. So let's say you're debugging a build failure in package
8768 @code{foo}; a typical session would look like this:
8769
8770 @example
8771 $ guix build foo -K
8772 @dots{} @i{build fails}
8773 $ cd /tmp/guix-build-foo.drv-0
8774 $ source ./environment-variables
8775 $ cd foo-1.2
8776 @end example
8777
8778 Now, you can invoke commands as if you were the daemon (almost) and
8779 troubleshoot your build process.
8780
8781 Sometimes it happens that, for example, a package's tests pass when you
8782 run them manually but they fail when the daemon runs them. This can
8783 happen because the daemon runs builds in containers where, unlike in our
8784 environment above, network access is missing, @file{/bin/sh} does not
8785 exist, etc. (@pxref{Build Environment Setup}).
8786
8787 In such cases, you may need to run inspect the build process from within
8788 a container similar to the one the build daemon creates:
8789
8790 @example
8791 $ guix build -K foo
8792 @dots{}
8793 $ cd /tmp/guix-build-foo.drv-0
8794 $ guix environment --no-grafts -C foo --ad-hoc strace gdb
8795 [env]# source ./environment-variables
8796 [env]# cd foo-1.2
8797 @end example
8798
8799 Here, @command{guix environment -C} creates a container and spawns a new
8800 shell in it (@pxref{Invoking guix environment}). The @command{--ad-hoc
8801 strace gdb} part adds the @command{strace} and @command{gdb} commands to
8802 the container, which would may find handy while debugging. The
8803 @option{--no-grafts} option makes sure we get the exact same
8804 environment, with ungrafted packages (@pxref{Security Updates}, for more
8805 info on grafts).
8806
8807 To get closer to a container like that used by the build daemon, we can
8808 remove @file{/bin/sh}:
8809
8810 @example
8811 [env]# rm /bin/sh
8812 @end example
8813
8814 (Don't worry, this is harmless: this is all happening in the throw-away
8815 container created by @command{guix environment}.)
8816
8817 The @command{strace} command is probably not in the search path, but we
8818 can run:
8819
8820 @example
8821 [env]# $GUIX_ENVIRONMENT/bin/strace -f -o log make check
8822 @end example
8823
8824 In this way, not only you will have reproduced the environment variables
8825 the daemon uses, you will also be running the build process in a container
8826 similar to the one the daemon uses.
8827
8828
8829 @node Invoking guix edit
8830 @section Invoking @command{guix edit}
8831
8832 @cindex @command{guix edit}
8833 @cindex package definition, editing
8834 So many packages, so many source files! The @command{guix edit} command
8835 facilitates the life of users and packagers by pointing their editor at
8836 the source file containing the definition of the specified packages.
8837 For instance:
8838
8839 @example
8840 guix edit gcc@@4.9 vim
8841 @end example
8842
8843 @noindent
8844 launches the program specified in the @code{VISUAL} or in the
8845 @code{EDITOR} environment variable to view the recipe of GCC@tie{}4.9.3
8846 and that of Vim.
8847
8848 If you are using a Guix Git checkout (@pxref{Building from Git}), or
8849 have created your own packages on @code{GUIX_PACKAGE_PATH}
8850 (@pxref{Package Modules}), you will be able to edit the package
8851 recipes. In other cases, you will be able to examine the read-only recipes
8852 for packages currently in the store.
8853
8854 Instead of @code{GUIX_PACKAGE_PATH}, the command-line option
8855 @code{--load-path=@var{directory}} (or in short @code{-L
8856 @var{directory}}) allows you to add @var{directory} to the front of the
8857 package module search path and so make your own packages visible.
8858
8859 @node Invoking guix download
8860 @section Invoking @command{guix download}
8861
8862 @cindex @command{guix download}
8863 @cindex downloading package sources
8864 When writing a package definition, developers typically need to download
8865 a source tarball, compute its SHA256 hash, and write that
8866 hash in the package definition (@pxref{Defining Packages}). The
8867 @command{guix download} tool helps with this task: it downloads a file
8868 from the given URI, adds it to the store, and prints both its file name
8869 in the store and its SHA256 hash.
8870
8871 The fact that the downloaded file is added to the store saves bandwidth:
8872 when the developer eventually tries to build the newly defined package
8873 with @command{guix build}, the source tarball will not have to be
8874 downloaded again because it is already in the store. It is also a
8875 convenient way to temporarily stash files, which may be deleted
8876 eventually (@pxref{Invoking guix gc}).
8877
8878 The @command{guix download} command supports the same URIs as used in
8879 package definitions. In particular, it supports @code{mirror://} URIs.
8880 @code{https} URIs (HTTP over TLS) are supported @emph{provided} the
8881 Guile bindings for GnuTLS are available in the user's environment; when
8882 they are not available, an error is raised. @xref{Guile Preparations,
8883 how to install the GnuTLS bindings for Guile,, gnutls-guile,
8884 GnuTLS-Guile}, for more information.
8885
8886 @command{guix download} verifies HTTPS server certificates by loading
8887 the certificates of X.509 authorities from the directory pointed to by
8888 the @code{SSL_CERT_DIR} environment variable (@pxref{X.509
8889 Certificates}), unless @option{--no-check-certificate} is used.
8890
8891 The following options are available:
8892
8893 @table @code
8894 @item --format=@var{fmt}
8895 @itemx -f @var{fmt}
8896 Write the hash in the format specified by @var{fmt}. For more
8897 information on the valid values for @var{fmt}, @pxref{Invoking guix hash}.
8898
8899 @item --no-check-certificate
8900 Do not validate the X.509 certificates of HTTPS servers.
8901
8902 When using this option, you have @emph{absolutely no guarantee} that you
8903 are communicating with the authentic server responsible for the given
8904 URL, which makes you vulnerable to ``man-in-the-middle'' attacks.
8905
8906 @item --output=@var{file}
8907 @itemx -o @var{file}
8908 Save the downloaded file to @var{file} instead of adding it to the
8909 store.
8910 @end table
8911
8912 @node Invoking guix hash
8913 @section Invoking @command{guix hash}
8914
8915 @cindex @command{guix hash}
8916 The @command{guix hash} command computes the SHA256 hash of a file.
8917 It is primarily a convenience tool for anyone contributing to the
8918 distribution: it computes the cryptographic hash of a file, which can be
8919 used in the definition of a package (@pxref{Defining Packages}).
8920
8921 The general syntax is:
8922
8923 @example
8924 guix hash @var{option} @var{file}
8925 @end example
8926
8927 When @var{file} is @code{-} (a hyphen), @command{guix hash} computes the
8928 hash of data read from standard input. @command{guix hash} has the
8929 following options:
8930
8931 @table @code
8932
8933 @item --format=@var{fmt}
8934 @itemx -f @var{fmt}
8935 Write the hash in the format specified by @var{fmt}.
8936
8937 Supported formats: @code{nix-base32}, @code{base32}, @code{base16}
8938 (@code{hex} and @code{hexadecimal} can be used as well).
8939
8940 If the @option{--format} option is not specified, @command{guix hash}
8941 will output the hash in @code{nix-base32}. This representation is used
8942 in the definitions of packages.
8943
8944 @item --recursive
8945 @itemx -r
8946 Compute the hash on @var{file} recursively.
8947
8948 In this case, the hash is computed on an archive containing @var{file},
8949 including its children if it is a directory. Some of the metadata of
8950 @var{file} is part of the archive; for instance, when @var{file} is a
8951 regular file, the hash is different depending on whether @var{file} is
8952 executable or not. Metadata such as time stamps has no impact on the
8953 hash (@pxref{Invoking guix archive}).
8954 @c FIXME: Replace xref above with xref to an ``Archive'' section when
8955 @c it exists.
8956
8957 @item --exclude-vcs
8958 @itemx -x
8959 When combined with @option{--recursive}, exclude version control system
8960 directories (@file{.bzr}, @file{.git}, @file{.hg}, etc.)
8961
8962 @vindex git-fetch
8963 As an example, here is how you would compute the hash of a Git checkout,
8964 which is useful when using the @code{git-fetch} method (@pxref{origin
8965 Reference}):
8966
8967 @example
8968 $ git clone http://example.org/foo.git
8969 $ cd foo
8970 $ guix hash -rx .
8971 @end example
8972 @end table
8973
8974 @node Invoking guix import
8975 @section Invoking @command{guix import}
8976
8977 @cindex importing packages
8978 @cindex package import
8979 @cindex package conversion
8980 @cindex Invoking @command{guix import}
8981 The @command{guix import} command is useful for people who would like to
8982 add a package to the distribution with as little work as
8983 possible---a legitimate demand. The command knows of a few
8984 repositories from which it can ``import'' package metadata. The result
8985 is a package definition, or a template thereof, in the format we know
8986 (@pxref{Defining Packages}).
8987
8988 The general syntax is:
8989
8990 @example
8991 guix import @var{importer} @var{options}@dots{}
8992 @end example
8993
8994 @var{importer} specifies the source from which to import package
8995 metadata, and @var{options} specifies a package identifier and other
8996 options specific to @var{importer}.
8997
8998 Some of the importers rely on the ability to run the @command{gpgv} command.
8999 For these, GnuPG must be installed and in @code{$PATH}; run @code{guix install
9000 gnupg} if needed.
9001
9002 Currently, the available ``importers'' are:
9003
9004 @table @code
9005 @item gnu
9006 Import metadata for the given GNU package. This provides a template
9007 for the latest version of that GNU package, including the hash of its
9008 source tarball, and its canonical synopsis and description.
9009
9010 Additional information such as the package dependencies and its
9011 license needs to be figured out manually.
9012
9013 For example, the following command returns a package definition for
9014 GNU@tie{}Hello:
9015
9016 @example
9017 guix import gnu hello
9018 @end example
9019
9020 Specific command-line options are:
9021
9022 @table @code
9023 @item --key-download=@var{policy}
9024 As for @code{guix refresh}, specify the policy to handle missing OpenPGP
9025 keys when verifying the package signature. @xref{Invoking guix
9026 refresh, @code{--key-download}}.
9027 @end table
9028
9029 @item pypi
9030 @cindex pypi
9031 Import metadata from the @uref{https://pypi.python.org/, Python Package
9032 Index}. Information is taken from the JSON-formatted description
9033 available at @code{pypi.python.org} and usually includes all the relevant
9034 information, including package dependencies. For maximum efficiency, it
9035 is recommended to install the @command{unzip} utility, so that the
9036 importer can unzip Python wheels and gather data from them.
9037
9038 The command below imports metadata for the @code{itsdangerous} Python
9039 package:
9040
9041 @example
9042 guix import pypi itsdangerous
9043 @end example
9044
9045 @table @code
9046 @item --recursive
9047 @itemx -r
9048 Traverse the dependency graph of the given upstream package recursively
9049 and generate package expressions for all those packages that are not yet
9050 in Guix.
9051 @end table
9052
9053 @item gem
9054 @cindex gem
9055 Import metadata from @uref{https://rubygems.org/, RubyGems}. Information
9056 is taken from the JSON-formatted description available at
9057 @code{rubygems.org} and includes most relevant information, including
9058 runtime dependencies. There are some caveats, however. The metadata
9059 doesn't distinguish between synopses and descriptions, so the same string
9060 is used for both fields. Additionally, the details of non-Ruby
9061 dependencies required to build native extensions is unavailable and left
9062 as an exercise to the packager.
9063
9064 The command below imports metadata for the @code{rails} Ruby package:
9065
9066 @example
9067 guix import gem rails
9068 @end example
9069
9070 @table @code
9071 @item --recursive
9072 @itemx -r
9073 Traverse the dependency graph of the given upstream package recursively
9074 and generate package expressions for all those packages that are not yet
9075 in Guix.
9076 @end table
9077
9078 @item cpan
9079 @cindex CPAN
9080 Import metadata from @uref{https://www.metacpan.org/, MetaCPAN}.
9081 Information is taken from the JSON-formatted metadata provided through
9082 @uref{https://fastapi.metacpan.org/, MetaCPAN's API} and includes most
9083 relevant information, such as module dependencies. License information
9084 should be checked closely. If Perl is available in the store, then the
9085 @code{corelist} utility will be used to filter core modules out of the
9086 list of dependencies.
9087
9088 The command command below imports metadata for the @code{Acme::Boolean}
9089 Perl module:
9090
9091 @example
9092 guix import cpan Acme::Boolean
9093 @end example
9094
9095 @item cran
9096 @cindex CRAN
9097 @cindex Bioconductor
9098 Import metadata from @uref{https://cran.r-project.org/, CRAN}, the
9099 central repository for the @uref{https://r-project.org, GNU@tie{}R
9100 statistical and graphical environment}.
9101
9102 Information is extracted from the @code{DESCRIPTION} file of the package.
9103
9104 The command command below imports metadata for the @code{Cairo}
9105 R package:
9106
9107 @example
9108 guix import cran Cairo
9109 @end example
9110
9111 When @code{--recursive} is added, the importer will traverse the
9112 dependency graph of the given upstream package recursively and generate
9113 package expressions for all those packages that are not yet in Guix.
9114
9115 When @code{--archive=bioconductor} is added, metadata is imported from
9116 @uref{https://www.bioconductor.org/, Bioconductor}, a repository of R
9117 packages for for the analysis and comprehension of high-throughput
9118 genomic data in bioinformatics.
9119
9120 Information is extracted from the @code{DESCRIPTION} file contained in the
9121 package archive.
9122
9123 The command below imports metadata for the @code{GenomicRanges}
9124 R package:
9125
9126 @example
9127 guix import cran --archive=bioconductor GenomicRanges
9128 @end example
9129
9130 Finally, you can also import R packages that have not yet been published on
9131 CRAN or Bioconductor as long as they are in a git repository. Use
9132 @code{--archive=git} followed by the URL of the git repository:
9133
9134 @example
9135 guix import cran --archive=git https://github.com/immunogenomics/harmony
9136 @end example
9137
9138 @item texlive
9139 @cindex TeX Live
9140 @cindex CTAN
9141 Import metadata from @uref{https://www.ctan.org/, CTAN}, the
9142 comprehensive TeX archive network for TeX packages that are part of the
9143 @uref{https://www.tug.org/texlive/, TeX Live distribution}.
9144
9145 Information about the package is obtained through the XML API provided
9146 by CTAN, while the source code is downloaded from the SVN repository of
9147 the Tex Live project. This is done because the CTAN does not keep
9148 versioned archives.
9149
9150 The command command below imports metadata for the @code{fontspec}
9151 TeX package:
9152
9153 @example
9154 guix import texlive fontspec
9155 @end example
9156
9157 When @code{--archive=DIRECTORY} is added, the source code is downloaded
9158 not from the @file{latex} sub-directory of the @file{texmf-dist/source}
9159 tree in the TeX Live SVN repository, but from the specified sibling
9160 directory under the same root.
9161
9162 The command below imports metadata for the @code{ifxetex} package from
9163 CTAN while fetching the sources from the directory
9164 @file{texmf/source/generic}:
9165
9166 @example
9167 guix import texlive --archive=generic ifxetex
9168 @end example
9169
9170 @item json
9171 @cindex JSON, import
9172 Import package metadata from a local JSON file. Consider the following
9173 example package definition in JSON format:
9174
9175 @example
9176 @{
9177 "name": "hello",
9178 "version": "2.10",
9179 "source": "mirror://gnu/hello/hello-2.10.tar.gz",
9180 "build-system": "gnu",
9181 "home-page": "https://www.gnu.org/software/hello/",
9182 "synopsis": "Hello, GNU world: An example GNU package",
9183 "description": "GNU Hello prints a greeting.",
9184 "license": "GPL-3.0+",
9185 "native-inputs": ["gettext"]
9186 @}
9187 @end example
9188
9189 The field names are the same as for the @code{<package>} record
9190 (@xref{Defining Packages}). References to other packages are provided
9191 as JSON lists of quoted package specification strings such as
9192 @code{guile} or @code{guile@@2.0}.
9193
9194 The importer also supports a more explicit source definition using the
9195 common fields for @code{<origin>} records:
9196
9197 @example
9198 @{
9199 @dots{}
9200 "source": @{
9201 "method": "url-fetch",
9202 "uri": "mirror://gnu/hello/hello-2.10.tar.gz",
9203 "sha256": @{
9204 "base32": "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"
9205 @}
9206 @}
9207 @dots{}
9208 @}
9209 @end example
9210
9211 The command below reads metadata from the JSON file @code{hello.json}
9212 and outputs a package expression:
9213
9214 @example
9215 guix import json hello.json
9216 @end example
9217
9218 @item nix
9219 Import metadata from a local copy of the source of the
9220 @uref{https://nixos.org/nixpkgs/, Nixpkgs distribution}@footnote{This
9221 relies on the @command{nix-instantiate} command of
9222 @uref{https://nixos.org/nix/, Nix}.}. Package definitions in Nixpkgs are
9223 typically written in a mixture of Nix-language and Bash code. This
9224 command only imports the high-level package structure that is written in
9225 the Nix language. It normally includes all the basic fields of a
9226 package definition.
9227
9228 When importing a GNU package, the synopsis and descriptions are replaced
9229 by their canonical upstream variant.
9230
9231 Usually, you will first need to do:
9232
9233 @example
9234 export NIX_REMOTE=daemon
9235 @end example
9236
9237 @noindent
9238 so that @command{nix-instantiate} does not try to open the Nix database.
9239
9240 As an example, the command below imports the package definition of
9241 LibreOffice (more precisely, it imports the definition of the package
9242 bound to the @code{libreoffice} top-level attribute):
9243
9244 @example
9245 guix import nix ~/path/to/nixpkgs libreoffice
9246 @end example
9247
9248 @item hackage
9249 @cindex hackage
9250 Import metadata from the Haskell community's central package archive
9251 @uref{https://hackage.haskell.org/, Hackage}. Information is taken from
9252 Cabal files and includes all the relevant information, including package
9253 dependencies.
9254
9255 Specific command-line options are:
9256
9257 @table @code
9258 @item --stdin
9259 @itemx -s
9260 Read a Cabal file from standard input.
9261 @item --no-test-dependencies
9262 @itemx -t
9263 Do not include dependencies required only by the test suites.
9264 @item --cabal-environment=@var{alist}
9265 @itemx -e @var{alist}
9266 @var{alist} is a Scheme alist defining the environment in which the
9267 Cabal conditionals are evaluated. The accepted keys are: @code{os},
9268 @code{arch}, @code{impl} and a string representing the name of a flag.
9269 The value associated with a flag has to be either the symbol
9270 @code{true} or @code{false}. The value associated with other keys
9271 has to conform to the Cabal file format definition. The default value
9272 associated with the keys @code{os}, @code{arch} and @code{impl} is
9273 @samp{linux}, @samp{x86_64} and @samp{ghc}, respectively.
9274 @item --recursive
9275 @itemx -r
9276 Traverse the dependency graph of the given upstream package recursively
9277 and generate package expressions for all those packages that are not yet
9278 in Guix.
9279 @end table
9280
9281 The command below imports metadata for the latest version of the
9282 @code{HTTP} Haskell package without including test dependencies and
9283 specifying the value of the flag @samp{network-uri} as @code{false}:
9284
9285 @example
9286 guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
9287 @end example
9288
9289 A specific package version may optionally be specified by following the
9290 package name by an at-sign and a version number as in the following example:
9291
9292 @example
9293 guix import hackage mtl@@2.1.3.1
9294 @end example
9295
9296 @item stackage
9297 @cindex stackage
9298 The @code{stackage} importer is a wrapper around the @code{hackage} one.
9299 It takes a package name, looks up the package version included in a
9300 long-term support (LTS) @uref{https://www.stackage.org, Stackage}
9301 release and uses the @code{hackage} importer to retrieve its metadata.
9302 Note that it is up to you to select an LTS release compatible with the
9303 GHC compiler used by Guix.
9304
9305 Specific command-line options are:
9306
9307 @table @code
9308 @item --no-test-dependencies
9309 @itemx -t
9310 Do not include dependencies required only by the test suites.
9311 @item --lts-version=@var{version}
9312 @itemx -l @var{version}
9313 @var{version} is the desired LTS release version. If omitted the latest
9314 release is used.
9315 @item --recursive
9316 @itemx -r
9317 Traverse the dependency graph of the given upstream package recursively
9318 and generate package expressions for all those packages that are not yet
9319 in Guix.
9320 @end table
9321
9322 The command below imports metadata for the @code{HTTP} Haskell package
9323 included in the LTS Stackage release version 7.18:
9324
9325 @example
9326 guix import stackage --lts-version=7.18 HTTP
9327 @end example
9328
9329 @item elpa
9330 @cindex elpa
9331 Import metadata from an Emacs Lisp Package Archive (ELPA) package
9332 repository (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
9333
9334 Specific command-line options are:
9335
9336 @table @code
9337 @item --archive=@var{repo}
9338 @itemx -a @var{repo}
9339 @var{repo} identifies the archive repository from which to retrieve the
9340 information. Currently the supported repositories and their identifiers
9341 are:
9342 @itemize -
9343 @item
9344 @uref{https://elpa.gnu.org/packages, GNU}, selected by the @code{gnu}
9345 identifier. This is the default.
9346
9347 Packages from @code{elpa.gnu.org} are signed with one of the keys
9348 contained in the GnuPG keyring at
9349 @file{share/emacs/25.1/etc/package-keyring.gpg} (or similar) in the
9350 @code{emacs} package (@pxref{Package Installation, ELPA package
9351 signatures,, emacs, The GNU Emacs Manual}).
9352
9353 @item
9354 @uref{https://stable.melpa.org/packages, MELPA-Stable}, selected by the
9355 @code{melpa-stable} identifier.
9356
9357 @item
9358 @uref{https://melpa.org/packages, MELPA}, selected by the @code{melpa}
9359 identifier.
9360 @end itemize
9361
9362 @item --recursive
9363 @itemx -r
9364 Traverse the dependency graph of the given upstream package recursively
9365 and generate package expressions for all those packages that are not yet
9366 in Guix.
9367 @end table
9368
9369 @item crate
9370 @cindex crate
9371 Import metadata from the crates.io Rust package repository
9372 @uref{https://crates.io, crates.io}, as in this example:
9373
9374 @example
9375 guix import crate blake2-rfc
9376 @end example
9377
9378 The crate importer also allows you to specify a version string:
9379
9380 @example
9381 guix import crate constant-time-eq@@0.1.0
9382 @end example
9383
9384 Additional options include:
9385
9386 @table @code
9387 @item --recursive
9388 @itemx -r
9389 Traverse the dependency graph of the given upstream package recursively
9390 and generate package expressions for all those packages that are not yet
9391 in Guix.
9392 @end table
9393
9394 @item opam
9395 @cindex OPAM
9396 @cindex OCaml
9397 Import metadata from the @uref{https://opam.ocaml.org/, OPAM} package
9398 repository used by the OCaml community.
9399 @end table
9400
9401 The structure of the @command{guix import} code is modular. It would be
9402 useful to have more importers for other package formats, and your help
9403 is welcome here (@pxref{Contributing}).
9404
9405 @node Invoking guix refresh
9406 @section Invoking @command{guix refresh}
9407
9408 @cindex @command {guix refresh}
9409 The primary audience of the @command{guix refresh} command is developers
9410 of the GNU software distribution. By default, it reports any packages
9411 provided by the distribution that are outdated compared to the latest
9412 upstream version, like this:
9413
9414 @example
9415 $ guix refresh
9416 gnu/packages/gettext.scm:29:13: gettext would be upgraded from 0.18.1.1 to 0.18.2.1
9417 gnu/packages/glib.scm:77:12: glib would be upgraded from 2.34.3 to 2.37.0
9418 @end example
9419
9420 Alternately, one can specify packages to consider, in which case a
9421 warning is emitted for packages that lack an updater:
9422
9423 @example
9424 $ guix refresh coreutils guile guile-ssh
9425 gnu/packages/ssh.scm:205:2: warning: no updater for guile-ssh
9426 gnu/packages/guile.scm:136:12: guile would be upgraded from 2.0.12 to 2.0.13
9427 @end example
9428
9429 @command{guix refresh} browses the upstream repository of each package and determines
9430 the highest version number of the releases therein. The command
9431 knows how to update specific types of packages: GNU packages, ELPA
9432 packages, etc.---see the documentation for @option{--type} below. There
9433 are many packages, though, for which it lacks a method to determine
9434 whether a new upstream release is available. However, the mechanism is
9435 extensible, so feel free to get in touch with us to add a new method!
9436
9437 @table @code
9438
9439 @item --recursive
9440 Consider the packages specified, and all the packages upon which they depend.
9441
9442 @example
9443 $ guix refresh --recursive coreutils
9444 gnu/packages/acl.scm:35:2: warning: no updater for acl
9445 gnu/packages/m4.scm:30:12: info: 1.4.18 is already the latest version of m4
9446 gnu/packages/xml.scm:68:2: warning: no updater for expat
9447 gnu/packages/multiprecision.scm:40:12: info: 6.1.2 is already the latest version of gmp
9448 @dots{}
9449 @end example
9450
9451 @end table
9452
9453 Sometimes the upstream name differs from the package name used in Guix,
9454 and @command{guix refresh} needs a little help. Most updaters honor the
9455 @code{upstream-name} property in package definitions, which can be used
9456 to that effect:
9457
9458 @lisp
9459 (define-public network-manager
9460 (package
9461 (name "network-manager")
9462 ;; @dots{}
9463 (properties '((upstream-name . "NetworkManager")))))
9464 @end lisp
9465
9466 When passed @code{--update}, it modifies distribution source files to
9467 update the version numbers and source tarball hashes of those package
9468 recipes (@pxref{Defining Packages}). This is achieved by downloading
9469 each package's latest source tarball and its associated OpenPGP
9470 signature, authenticating the downloaded tarball against its signature
9471 using @command{gpgv}, and finally computing its hash---note that GnuPG must be
9472 installed and in @code{$PATH}; run @code{guix install gnupg} if needed.
9473
9474 When the public
9475 key used to sign the tarball is missing from the user's keyring, an
9476 attempt is made to automatically retrieve it from a public key server;
9477 when this is successful, the key is added to the user's keyring; otherwise,
9478 @command{guix refresh} reports an error.
9479
9480 The following options are supported:
9481
9482 @table @code
9483
9484 @item --expression=@var{expr}
9485 @itemx -e @var{expr}
9486 Consider the package @var{expr} evaluates to.
9487
9488 This is useful to precisely refer to a package, as in this example:
9489
9490 @example
9491 guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
9492 @end example
9493
9494 This command lists the dependents of the ``final'' libc (essentially all
9495 the packages.)
9496
9497 @item --update
9498 @itemx -u
9499 Update distribution source files (package recipes) in place. This is
9500 usually run from a checkout of the Guix source tree (@pxref{Running
9501 Guix Before It Is Installed}):
9502
9503 @example
9504 $ ./pre-inst-env guix refresh -s non-core -u
9505 @end example
9506
9507 @xref{Defining Packages}, for more information on package definitions.
9508
9509 @item --select=[@var{subset}]
9510 @itemx -s @var{subset}
9511 Select all the packages in @var{subset}, one of @code{core} or
9512 @code{non-core}.
9513
9514 The @code{core} subset refers to all the packages at the core of the
9515 distribution---i.e., packages that are used to build ``everything
9516 else''. This includes GCC, libc, Binutils, Bash, etc. Usually,
9517 changing one of these packages in the distribution entails a rebuild of
9518 all the others. Thus, such updates are an inconvenience to users in
9519 terms of build time or bandwidth used to achieve the upgrade.
9520
9521 The @code{non-core} subset refers to the remaining packages. It is
9522 typically useful in cases where an update of the core packages would be
9523 inconvenient.
9524
9525 @item --manifest=@var{file}
9526 @itemx -m @var{file}
9527 Select all the packages from the manifest in @var{file}. This is useful to
9528 check if any packages of the user manifest can be updated.
9529
9530 @item --type=@var{updater}
9531 @itemx -t @var{updater}
9532 Select only packages handled by @var{updater} (may be a comma-separated
9533 list of updaters). Currently, @var{updater} may be one of:
9534
9535 @table @code
9536 @item gnu
9537 the updater for GNU packages;
9538 @item gnome
9539 the updater for GNOME packages;
9540 @item kde
9541 the updater for KDE packages;
9542 @item xorg
9543 the updater for X.org packages;
9544 @item kernel.org
9545 the updater for packages hosted on kernel.org;
9546 @item elpa
9547 the updater for @uref{https://elpa.gnu.org/, ELPA} packages;
9548 @item cran
9549 the updater for @uref{https://cran.r-project.org/, CRAN} packages;
9550 @item bioconductor
9551 the updater for @uref{https://www.bioconductor.org/, Bioconductor} R packages;
9552 @item cpan
9553 the updater for @uref{https://www.cpan.org/, CPAN} packages;
9554 @item pypi
9555 the updater for @uref{https://pypi.python.org, PyPI} packages.
9556 @item gem
9557 the updater for @uref{https://rubygems.org, RubyGems} packages.
9558 @item github
9559 the updater for @uref{https://github.com, GitHub} packages.
9560 @item hackage
9561 the updater for @uref{https://hackage.haskell.org, Hackage} packages.
9562 @item stackage
9563 the updater for @uref{https://www.stackage.org, Stackage} packages.
9564 @item crate
9565 the updater for @uref{https://crates.io, Crates} packages.
9566 @item launchpad
9567 the updater for @uref{https://launchpad.net, Launchpad} packages.
9568 @end table
9569
9570 For instance, the following command only checks for updates of Emacs
9571 packages hosted at @code{elpa.gnu.org} and for updates of CRAN packages:
9572
9573 @example
9574 $ guix refresh --type=elpa,cran
9575 gnu/packages/statistics.scm:819:13: r-testthat would be upgraded from 0.10.0 to 0.11.0
9576 gnu/packages/emacs.scm:856:13: emacs-auctex would be upgraded from 11.88.6 to 11.88.9
9577 @end example
9578
9579 @end table
9580
9581 In addition, @command{guix refresh} can be passed one or more package
9582 names, as in this example:
9583
9584 @example
9585 $ ./pre-inst-env guix refresh -u emacs idutils gcc@@4.8
9586 @end example
9587
9588 @noindent
9589 The command above specifically updates the @code{emacs} and
9590 @code{idutils} packages. The @code{--select} option would have no
9591 effect in this case.
9592
9593 When considering whether to upgrade a package, it is sometimes
9594 convenient to know which packages would be affected by the upgrade and
9595 should be checked for compatibility. For this the following option may
9596 be used when passing @command{guix refresh} one or more package names:
9597
9598 @table @code
9599
9600 @item --list-updaters
9601 @itemx -L
9602 List available updaters and exit (see @option{--type} above.)
9603
9604 For each updater, display the fraction of packages it covers; at the
9605 end, display the fraction of packages covered by all these updaters.
9606
9607 @item --list-dependent
9608 @itemx -l
9609 List top-level dependent packages that would need to be rebuilt as a
9610 result of upgrading one or more packages.
9611
9612 @xref{Invoking guix graph, the @code{reverse-package} type of
9613 @command{guix graph}}, for information on how to visualize the list of
9614 dependents of a package.
9615
9616 @end table
9617
9618 Be aware that the @code{--list-dependent} option only
9619 @emph{approximates} the rebuilds that would be required as a result of
9620 an upgrade. More rebuilds might be required under some circumstances.
9621
9622 @example
9623 $ guix refresh --list-dependent flex
9624 Building the following 120 packages would ensure 213 dependent packages are rebuilt:
9625 hop@@2.4.0 geiser@@0.4 notmuch@@0.18 mu@@0.9.9.5 cflow@@1.4 idutils@@4.6 @dots{}
9626 @end example
9627
9628 The command above lists a set of packages that could be built to check
9629 for compatibility with an upgraded @code{flex} package.
9630
9631 @table @code
9632
9633 @item --list-transitive
9634 List all the packages which one or more packages depend upon.
9635
9636 @example
9637 $ guix refresh --list-transitive flex
9638 flex@@2.6.4 depends on the following 25 packages: perl@@5.28.0 help2man@@1.47.6
9639 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{}
9640 @end example
9641
9642 @end table
9643
9644 The command above lists a set of packages which, when changed, would cause
9645 @code{flex} to be rebuilt.
9646
9647 The following options can be used to customize GnuPG operation:
9648
9649 @table @code
9650
9651 @item --gpg=@var{command}
9652 Use @var{command} as the GnuPG 2.x command. @var{command} is searched
9653 for in @code{$PATH}.
9654
9655 @item --keyring=@var{file}
9656 Use @var{file} as the keyring for upstream keys. @var{file} must be in the
9657 @dfn{keybox format}. Keybox files usually have a name ending in @file{.kbx}
9658 and the GNU@tie{}Privacy Guard (GPG) can manipulate these files
9659 (@pxref{kbxutil, @command{kbxutil},, gnupg, Using the GNU Privacy Guard}, for
9660 information on a tool to manipulate keybox files).
9661
9662 When this option is omitted, @command{guix refresh} uses
9663 @file{~/.config/guix/upstream/trustedkeys.kbx} as the keyring for upstream
9664 signing keys. OpenPGP signatures are checked against keys from this keyring;
9665 missing keys are downloaded to this keyring as well (see
9666 @option{--key-download} below.)
9667
9668 You can export keys from your default GPG keyring into a keybox file using
9669 commands like this one:
9670
9671 @example
9672 gpg --export rms@@gnu.org | kbxutil --import-openpgp >> mykeyring.kbx
9673 @end example
9674
9675 Likewise, you can fetch keys to a specific keybox file like this:
9676
9677 @example
9678 gpg --no-default-keyring --keyring mykeyring.kbx \
9679 --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
9680 @end example
9681
9682 @ref{GPG Configuration Options, @option{--keyring},, gnupg, Using the GNU
9683 Privacy Guard}, for more information on GPG's @option{--keyring} option.
9684
9685 @item --key-download=@var{policy}
9686 Handle missing OpenPGP keys according to @var{policy}, which may be one
9687 of:
9688
9689 @table @code
9690 @item always
9691 Always download missing OpenPGP keys from the key server, and add them
9692 to the user's GnuPG keyring.
9693
9694 @item never
9695 Never try to download missing OpenPGP keys. Instead just bail out.
9696
9697 @item interactive
9698 When a package signed with an unknown OpenPGP key is encountered, ask
9699 the user whether to download it or not. This is the default behavior.
9700 @end table
9701
9702 @item --key-server=@var{host}
9703 Use @var{host} as the OpenPGP key server when importing a public key.
9704
9705 @item --load-path=@var{directory}
9706 Add @var{directory} to the front of the package module search path
9707 (@pxref{Package Modules}).
9708
9709 This allows users to define their own packages and make them visible to
9710 the command-line tools.
9711
9712 @end table
9713
9714 The @code{github} updater uses the
9715 @uref{https://developer.github.com/v3/, GitHub API} to query for new
9716 releases. When used repeatedly e.g.@: when refreshing all packages,
9717 GitHub will eventually refuse to answer any further API requests. By
9718 default 60 API requests per hour are allowed, and a full refresh on all
9719 GitHub packages in Guix requires more than this. Authentication with
9720 GitHub through the use of an API token alleviates these limits. To use
9721 an API token, set the environment variable @code{GUIX_GITHUB_TOKEN} to a
9722 token procured from @uref{https://github.com/settings/tokens} or
9723 otherwise.
9724
9725
9726 @node Invoking guix lint
9727 @section Invoking @command{guix lint}
9728
9729 @cindex @command{guix lint}
9730 @cindex package, checking for errors
9731 The @command{guix lint} command is meant to help package developers avoid
9732 common errors and use a consistent style. It runs a number of checks on
9733 a given set of packages in order to find common mistakes in their
9734 definitions. Available @dfn{checkers} include (see
9735 @code{--list-checkers} for a complete list):
9736
9737 @table @code
9738 @item synopsis
9739 @itemx description
9740 Validate certain typographical and stylistic rules about package
9741 descriptions and synopses.
9742
9743 @item inputs-should-be-native
9744 Identify inputs that should most likely be native inputs.
9745
9746 @item source
9747 @itemx home-page
9748 @itemx mirror-url
9749 @itemx github-url
9750 @itemx source-file-name
9751 Probe @code{home-page} and @code{source} URLs and report those that are
9752 invalid. Suggest a @code{mirror://} URL when applicable. If the
9753 @code{source} URL redirects to a GitHub URL, recommend usage of the GitHub
9754 URL. Check that the source file name is meaningful, e.g.@: is not just a
9755 version number or ``git-checkout'', without a declared @code{file-name}
9756 (@pxref{origin Reference}).
9757
9758 @item source-unstable-tarball
9759 Parse the @code{source} URL to determine if a tarball from GitHub is
9760 autogenerated or if it is a release tarball. Unfortunately GitHub's
9761 autogenerated tarballs are sometimes regenerated.
9762
9763 @item archival
9764 @cindex Software Heritage, source code archive
9765 @cindex archival of source code, Software Heritage
9766 Checks whether the package's source code is archived at
9767 @uref{https://www.softwareheritage.org, Software Heritage}.
9768
9769 When the source code that is not archived comes from a version-control system
9770 (VCS)---e.g., it's obtained with @code{git-fetch}, send Software Heritage a
9771 ``save'' request so that it eventually archives it. This ensures that the
9772 source will remain available in the long term, and that Guix can fall back to
9773 Software Heritage should the source code disappear from its original host.
9774 The status of recent ``save'' requests can be
9775 @uref{https://archive.softwareheritage.org/save/#requests, viewed on-line}.
9776
9777 When source code is a tarball obtained with @code{url-fetch}, simply print a
9778 message when it is not archived. As of this writing, Software Heritage does
9779 not allow requests to save arbitrary tarballs; we are working on ways to
9780 ensure that non-VCS source code is also archived.
9781
9782 Software Heritage
9783 @uref{https://archive.softwareheritage.org/api/#rate-limiting, limits the
9784 request rate per IP address}. When the limit is reached, @command{guix lint}
9785 prints a message and the @code{archival} checker stops doing anything until
9786 that limit has been reset.
9787
9788 @item cve
9789 @cindex security vulnerabilities
9790 @cindex CVE, Common Vulnerabilities and Exposures
9791 Report known vulnerabilities found in the Common Vulnerabilities and
9792 Exposures (CVE) databases of the current and past year
9793 @uref{https://nvd.nist.gov/vuln/data-feeds, published by the US
9794 NIST}.
9795
9796 To view information about a particular vulnerability, visit pages such as:
9797
9798 @itemize
9799 @item
9800 @indicateurl{https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-YYYY-ABCD}
9801 @item
9802 @indicateurl{https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-YYYY-ABCD}
9803 @end itemize
9804
9805 @noindent
9806 where @code{CVE-YYYY-ABCD} is the CVE identifier---e.g.,
9807 @code{CVE-2015-7554}.
9808
9809 Package developers can specify in package recipes the
9810 @uref{https://nvd.nist.gov/products/cpe,Common Platform Enumeration (CPE)}
9811 name and version of the package when they differ from the name or version
9812 that Guix uses, as in this example:
9813
9814 @lisp
9815 (package
9816 (name "grub")
9817 ;; @dots{}
9818 ;; CPE calls this package "grub2".
9819 (properties '((cpe-name . "grub2")
9820 (cpe-version . "2.3"))))
9821 @end lisp
9822
9823 @c See <https://www.openwall.com/lists/oss-security/2017/03/15/3>.
9824 Some entries in the CVE database do not specify which version of a
9825 package they apply to, and would thus ``stick around'' forever. Package
9826 developers who found CVE alerts and verified they can be ignored can
9827 declare them as in this example:
9828
9829 @lisp
9830 (package
9831 (name "t1lib")
9832 ;; @dots{}
9833 ;; These CVEs no longer apply and can be safely ignored.
9834 (properties `((lint-hidden-cve . ("CVE-2011-0433"
9835 "CVE-2011-1553"
9836 "CVE-2011-1554"
9837 "CVE-2011-5244")))))
9838 @end lisp
9839
9840 @item formatting
9841 Warn about obvious source code formatting issues: trailing white space,
9842 use of tabulations, etc.
9843 @end table
9844
9845 The general syntax is:
9846
9847 @example
9848 guix lint @var{options} @var{package}@dots{}
9849 @end example
9850
9851 If no package is given on the command line, then all packages are checked.
9852 The @var{options} may be zero or more of the following:
9853
9854 @table @code
9855 @item --list-checkers
9856 @itemx -l
9857 List and describe all the available checkers that will be run on packages
9858 and exit.
9859
9860 @item --checkers
9861 @itemx -c
9862 Only enable the checkers specified in a comma-separated list using the
9863 names returned by @code{--list-checkers}.
9864
9865 @item --load-path=@var{directory}
9866 @itemx -L @var{directory}
9867 Add @var{directory} to the front of the package module search path
9868 (@pxref{Package Modules}).
9869
9870 This allows users to define their own packages and make them visible to
9871 the command-line tools.
9872
9873 @end table
9874
9875 @node Invoking guix size
9876 @section Invoking @command{guix size}
9877
9878 @cindex size
9879 @cindex package size
9880 @cindex closure
9881 @cindex @command{guix size}
9882 The @command{guix size} command helps package developers profile the
9883 disk usage of packages. It is easy to overlook the impact of an
9884 additional dependency added to a package, or the impact of using a
9885 single output for a package that could easily be split (@pxref{Packages
9886 with Multiple Outputs}). Such are the typical issues that
9887 @command{guix size} can highlight.
9888
9889 The command can be passed one or more package specifications
9890 such as @code{gcc@@4.8}
9891 or @code{guile:debug}, or a file name in the store. Consider this
9892 example:
9893
9894 @example
9895 $ guix size coreutils
9896 store item total self
9897 /gnu/store/@dots{}-gcc-5.5.0-lib 60.4 30.1 38.1%
9898 /gnu/store/@dots{}-glibc-2.27 30.3 28.8 36.6%
9899 /gnu/store/@dots{}-coreutils-8.28 78.9 15.0 19.0%
9900 /gnu/store/@dots{}-gmp-6.1.2 63.1 2.7 3.4%
9901 /gnu/store/@dots{}-bash-static-4.4.12 1.5 1.5 1.9%
9902 /gnu/store/@dots{}-acl-2.2.52 61.1 0.4 0.5%
9903 /gnu/store/@dots{}-attr-2.4.47 60.6 0.2 0.3%
9904 /gnu/store/@dots{}-libcap-2.25 60.5 0.2 0.2%
9905 total: 78.9 MiB
9906 @end example
9907
9908 @cindex closure
9909 The store items listed here constitute the @dfn{transitive closure} of
9910 Coreutils---i.e., Coreutils and all its dependencies, recursively---as
9911 would be returned by:
9912
9913 @example
9914 $ guix gc -R /gnu/store/@dots{}-coreutils-8.23
9915 @end example
9916
9917 Here the output shows three columns next to store items. The first column,
9918 labeled ``total'', shows the size in mebibytes (MiB) of the closure of
9919 the store item---that is, its own size plus the size of all its
9920 dependencies. The next column, labeled ``self'', shows the size of the
9921 item itself. The last column shows the ratio of the size of the item
9922 itself to the space occupied by all the items listed here.
9923
9924 In this example, we see that the closure of Coreutils weighs in at
9925 79@tie{}MiB, most of which is taken by libc and GCC's run-time support
9926 libraries. (That libc and GCC's libraries represent a large fraction of
9927 the closure is not a problem @i{per se} because they are always available
9928 on the system anyway.)
9929
9930 When the package(s) passed to @command{guix size} are available in the
9931 store@footnote{More precisely, @command{guix size} looks for the
9932 @emph{ungrafted} variant of the given package(s), as returned by
9933 @code{guix build @var{package} --no-grafts}. @xref{Security Updates},
9934 for information on grafts.}, @command{guix size} queries the daemon to determine its
9935 dependencies, and measures its size in the store, similar to @command{du
9936 -ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
9937 Coreutils}).
9938
9939 When the given packages are @emph{not} in the store, @command{guix size}
9940 reports information based on the available substitutes
9941 (@pxref{Substitutes}). This makes it possible it to profile disk usage of
9942 store items that are not even on disk, only available remotely.
9943
9944 You can also specify several package names:
9945
9946 @example
9947 $ guix size coreutils grep sed bash
9948 store item total self
9949 /gnu/store/@dots{}-coreutils-8.24 77.8 13.8 13.4%
9950 /gnu/store/@dots{}-grep-2.22 73.1 0.8 0.8%
9951 /gnu/store/@dots{}-bash-4.3.42 72.3 4.7 4.6%
9952 /gnu/store/@dots{}-readline-6.3 67.6 1.2 1.2%
9953 @dots{}
9954 total: 102.3 MiB
9955 @end example
9956
9957 @noindent
9958 In this example we see that the combination of the four packages takes
9959 102.3@tie{}MiB in total, which is much less than the sum of each closure
9960 since they have a lot of dependencies in common.
9961
9962 The available options are:
9963
9964 @table @option
9965
9966 @item --substitute-urls=@var{urls}
9967 Use substitute information from @var{urls}.
9968 @xref{client-substitute-urls, the same option for @code{guix build}}.
9969
9970 @item --sort=@var{key}
9971 Sort lines according to @var{key}, one of the following options:
9972
9973 @table @code
9974 @item self
9975 the size of each item (the default);
9976 @item closure
9977 the total size of the item's closure.
9978 @end table
9979
9980 @item --map-file=@var{file}
9981 Write a graphical map of disk usage in PNG format to @var{file}.
9982
9983 For the example above, the map looks like this:
9984
9985 @image{images/coreutils-size-map,5in,, map of Coreutils disk usage
9986 produced by @command{guix size}}
9987
9988 This option requires that
9989 @uref{https://wingolog.org/software/guile-charting/, Guile-Charting} be
9990 installed and visible in Guile's module search path. When that is not
9991 the case, @command{guix size} fails as it tries to load it.
9992
9993 @item --system=@var{system}
9994 @itemx -s @var{system}
9995 Consider packages for @var{system}---e.g., @code{x86_64-linux}.
9996
9997 @item --load-path=@var{directory}
9998 @itemx -L @var{directory}
9999 Add @var{directory} to the front of the package module search path
10000 (@pxref{Package Modules}).
10001
10002 This allows users to define their own packages and make them visible to
10003 the command-line tools.
10004 @end table
10005
10006 @node Invoking guix graph
10007 @section Invoking @command{guix graph}
10008
10009 @cindex DAG
10010 @cindex @command{guix graph}
10011 @cindex package dependencies
10012 Packages and their dependencies form a @dfn{graph}, specifically a
10013 directed acyclic graph (DAG). It can quickly become difficult to have a
10014 mental model of the package DAG, so the @command{guix graph} command
10015 provides a visual representation of the DAG. By default,
10016 @command{guix graph} emits a DAG representation in the input format of
10017 @uref{https://www.graphviz.org/, Graphviz}, so its output can be passed
10018 directly to the @command{dot} command of Graphviz. It can also emit an
10019 HTML page with embedded JavaScript code to display a ``chord diagram''
10020 in a Web browser, using the @uref{https://d3js.org/, d3.js} library, or
10021 emit Cypher queries to construct a graph in a graph database supporting
10022 the @uref{https://www.opencypher.org/, openCypher} query language.
10023 The general syntax is:
10024
10025 @example
10026 guix graph @var{options} @var{package}@dots{}
10027 @end example
10028
10029 For example, the following command generates a PDF file representing the
10030 package DAG for the GNU@tie{}Core Utilities, showing its build-time
10031 dependencies:
10032
10033 @example
10034 guix graph coreutils | dot -Tpdf > dag.pdf
10035 @end example
10036
10037 The output looks like this:
10038
10039 @image{images/coreutils-graph,2in,,Dependency graph of the GNU Coreutils}
10040
10041 Nice little graph, no?
10042
10043 But there is more than one graph! The one above is concise: it is the
10044 graph of package objects, omitting implicit inputs such as GCC, libc,
10045 grep, etc. It is often useful to have such a concise graph, but
10046 sometimes one may want to see more details. @command{guix graph} supports
10047 several types of graphs, allowing you to choose the level of detail:
10048
10049 @table @code
10050 @item package
10051 This is the default type used in the example above. It shows the DAG of
10052 package objects, excluding implicit dependencies. It is concise, but
10053 filters out many details.
10054
10055 @item reverse-package
10056 This shows the @emph{reverse} DAG of packages. For example:
10057
10058 @example
10059 guix graph --type=reverse-package ocaml
10060 @end example
10061
10062 ...@: yields the graph of packages that @emph{explicitly} depend on OCaml (if
10063 you are also interested in cases where OCaml is an implicit dependency, see
10064 @code{reverse-bag} below.)
10065
10066 Note that for core packages this can yield huge graphs. If all you want
10067 is to know the number of packages that depend on a given package, use
10068 @command{guix refresh --list-dependent} (@pxref{Invoking guix refresh,
10069 @option{--list-dependent}}).
10070
10071 @item bag-emerged
10072 This is the package DAG, @emph{including} implicit inputs.
10073
10074 For instance, the following command:
10075
10076 @example
10077 guix graph --type=bag-emerged coreutils | dot -Tpdf > dag.pdf
10078 @end example
10079
10080 ...@: yields this bigger graph:
10081
10082 @image{images/coreutils-bag-graph,,5in,Detailed dependency graph of the GNU Coreutils}
10083
10084 At the bottom of the graph, we see all the implicit inputs of
10085 @var{gnu-build-system} (@pxref{Build Systems, @code{gnu-build-system}}).
10086
10087 Now, note that the dependencies of these implicit inputs---that is, the
10088 @dfn{bootstrap dependencies} (@pxref{Bootstrapping})---are not shown
10089 here, for conciseness.
10090
10091 @item bag
10092 Similar to @code{bag-emerged}, but this time including all the bootstrap
10093 dependencies.
10094
10095 @item bag-with-origins
10096 Similar to @code{bag}, but also showing origins and their dependencies.
10097
10098 @item reverse-bag
10099 This shows the @emph{reverse} DAG of packages. Unlike @code{reverse-package},
10100 it also takes implicit dependencies into account. For example:
10101
10102 @example
10103 guix graph -t reverse-bag dune
10104 @end example
10105
10106 @noindent
10107 ...@: yields the graph of all packages that depend on Dune, directly or
10108 indirectly. Since Dune is an @emph{implicit} dependency of many packages
10109 @i{via} @code{dune-build-system}, this shows a large number of packages,
10110 whereas @code{reverse-package} would show very few if any.
10111
10112 @item derivation
10113 This is the most detailed representation: It shows the DAG of
10114 derivations (@pxref{Derivations}) and plain store items. Compared to
10115 the above representation, many additional nodes are visible, including
10116 build scripts, patches, Guile modules, etc.
10117
10118 For this type of graph, it is also possible to pass a @file{.drv} file
10119 name instead of a package name, as in:
10120
10121 @example
10122 guix graph -t derivation `guix system build -d my-config.scm`
10123 @end example
10124
10125 @item module
10126 This is the graph of @dfn{package modules} (@pxref{Package Modules}).
10127 For example, the following command shows the graph for the package
10128 module that defines the @code{guile} package:
10129
10130 @example
10131 guix graph -t module guile | dot -Tpdf > module-graph.pdf
10132 @end example
10133 @end table
10134
10135 All the types above correspond to @emph{build-time dependencies}. The
10136 following graph type represents the @emph{run-time dependencies}:
10137
10138 @table @code
10139 @item references
10140 This is the graph of @dfn{references} of a package output, as returned
10141 by @command{guix gc --references} (@pxref{Invoking guix gc}).
10142
10143 If the given package output is not available in the store, @command{guix
10144 graph} attempts to obtain dependency information from substitutes.
10145
10146 Here you can also pass a store file name instead of a package name. For
10147 example, the command below produces the reference graph of your profile
10148 (which can be big!):
10149
10150 @example
10151 guix graph -t references `readlink -f ~/.guix-profile`
10152 @end example
10153
10154 @item referrers
10155 This is the graph of the @dfn{referrers} of a store item, as returned by
10156 @command{guix gc --referrers} (@pxref{Invoking guix gc}).
10157
10158 This relies exclusively on local information from your store. For
10159 instance, let us suppose that the current Inkscape is available in 10
10160 profiles on your machine; @command{guix graph -t referrers inkscape}
10161 will show a graph rooted at Inkscape and with those 10 profiles linked
10162 to it.
10163
10164 It can help determine what is preventing a store item from being garbage
10165 collected.
10166
10167 @end table
10168
10169 The available options are the following:
10170
10171 @table @option
10172 @item --type=@var{type}
10173 @itemx -t @var{type}
10174 Produce a graph output of @var{type}, where @var{type} must be one of
10175 the values listed above.
10176
10177 @item --list-types
10178 List the supported graph types.
10179
10180 @item --backend=@var{backend}
10181 @itemx -b @var{backend}
10182 Produce a graph using the selected @var{backend}.
10183
10184 @item --list-backends
10185 List the supported graph backends.
10186
10187 Currently, the available backends are Graphviz and d3.js.
10188
10189 @item --expression=@var{expr}
10190 @itemx -e @var{expr}
10191 Consider the package @var{expr} evaluates to.
10192
10193 This is useful to precisely refer to a package, as in this example:
10194
10195 @example
10196 guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
10197 @end example
10198
10199 @item --system=@var{system}
10200 @itemx -s @var{system}
10201 Display the graph for @var{system}---e.g., @code{i686-linux}.
10202
10203 The package dependency graph is largely architecture-independent, but there
10204 are some architecture-dependent bits that this option allows you to visualize.
10205
10206 @item --load-path=@var{directory}
10207 @itemx -L @var{directory}
10208 Add @var{directory} to the front of the package module search path
10209 (@pxref{Package Modules}).
10210
10211 This allows users to define their own packages and make them visible to
10212 the command-line tools.
10213 @end table
10214
10215 On top of that, @command{guix graph} supports all the usual package
10216 transformation options (@pxref{Package Transformation Options}). This
10217 makes it easy to view the effect of a graph-rewriting transformation
10218 such as @option{--with-input}. For example, the command below outputs
10219 the graph of @code{git} once @code{openssl} has been replaced by
10220 @code{libressl} everywhere in the graph:
10221
10222 @example
10223 guix graph git --with-input=openssl=libressl
10224 @end example
10225
10226 So many possibilities, so much fun!
10227
10228 @node Invoking guix publish
10229 @section Invoking @command{guix publish}
10230
10231 @cindex @command{guix publish}
10232 The purpose of @command{guix publish} is to enable users to easily share
10233 their store with others, who can then use it as a substitute server
10234 (@pxref{Substitutes}).
10235
10236 When @command{guix publish} runs, it spawns an HTTP server which allows
10237 anyone with network access to obtain substitutes from it. This means
10238 that any machine running Guix can also act as if it were a build farm,
10239 since the HTTP interface is compatible with Cuirass, the software behind
10240 the @code{@value{SUBSTITUTE-SERVER}} build farm.
10241
10242 For security, each substitute is signed, allowing recipients to check
10243 their authenticity and integrity (@pxref{Substitutes}). Because
10244 @command{guix publish} uses the signing key of the system, which is only
10245 readable by the system administrator, it must be started as root; the
10246 @code{--user} option makes it drop root privileges early on.
10247
10248 The signing key pair must be generated before @command{guix publish} is
10249 launched, using @command{guix archive --generate-key} (@pxref{Invoking
10250 guix archive}).
10251
10252 The general syntax is:
10253
10254 @example
10255 guix publish @var{options}@dots{}
10256 @end example
10257
10258 Running @command{guix publish} without any additional arguments will
10259 spawn an HTTP server on port 8080:
10260
10261 @example
10262 guix publish
10263 @end example
10264
10265 Once a publishing server has been authorized (@pxref{Invoking guix
10266 archive}), the daemon may download substitutes from it:
10267
10268 @example
10269 guix-daemon --substitute-urls=http://example.org:8080
10270 @end example
10271
10272 By default, @command{guix publish} compresses archives on the fly as it
10273 serves them. This ``on-the-fly'' mode is convenient in that it requires
10274 no setup and is immediately available. However, when serving lots of
10275 clients, we recommend using the @option{--cache} option, which enables
10276 caching of the archives before they are sent to clients---see below for
10277 details. The @command{guix weather} command provides a handy way to
10278 check what a server provides (@pxref{Invoking guix weather}).
10279
10280 As a bonus, @command{guix publish} also serves as a content-addressed
10281 mirror for source files referenced in @code{origin} records
10282 (@pxref{origin Reference}). For instance, assuming @command{guix
10283 publish} is running on @code{example.org}, the following URL returns the
10284 raw @file{hello-2.10.tar.gz} file with the given SHA256 hash
10285 (represented in @code{nix-base32} format, @pxref{Invoking guix hash}):
10286
10287 @example
10288 http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1@dots{}ndq1i
10289 @end example
10290
10291 Obviously, these URLs only work for files that are in the store; in
10292 other cases, they return 404 (``Not Found'').
10293
10294 @cindex build logs, publication
10295 Build logs are available from @code{/log} URLs like:
10296
10297 @example
10298 http://example.org/log/gwspk@dots{}-guile-2.2.3
10299 @end example
10300
10301 @noindent
10302 When @command{guix-daemon} is configured to save compressed build logs,
10303 as is the case by default (@pxref{Invoking guix-daemon}), @code{/log}
10304 URLs return the compressed log as-is, with an appropriate
10305 @code{Content-Type} and/or @code{Content-Encoding} header. We recommend
10306 running @command{guix-daemon} with @code{--log-compression=gzip} since
10307 Web browsers can automatically decompress it, which is not the case with
10308 bzip2 compression.
10309
10310 The following options are available:
10311
10312 @table @code
10313 @item --port=@var{port}
10314 @itemx -p @var{port}
10315 Listen for HTTP requests on @var{port}.
10316
10317 @item --listen=@var{host}
10318 Listen on the network interface for @var{host}. The default is to
10319 accept connections from any interface.
10320
10321 @item --user=@var{user}
10322 @itemx -u @var{user}
10323 Change privileges to @var{user} as soon as possible---i.e., once the
10324 server socket is open and the signing key has been read.
10325
10326 @item --compression[=@var{method}[:@var{level}]]
10327 @itemx -C [@var{method}[:@var{level}]]
10328 Compress data using the given @var{method} and @var{level}. @var{method} is
10329 one of @code{lzip} and @code{gzip}; when @var{method} is omitted, @code{gzip}
10330 is used.
10331
10332 When @var{level} is zero, disable compression. The range 1 to 9 corresponds
10333 to different compression levels: 1 is the fastest, and 9 is the best
10334 (CPU-intensive). The default is 3.
10335
10336 Usually, @code{lzip} compresses noticeably better than @code{gzip} for a small
10337 increase in CPU usage; see
10338 @uref{https://nongnu.org/lzip/lzip_benchmark.html,benchmarks on the lzip Web
10339 page}.
10340
10341 Unless @option{--cache} is used, compression occurs on the fly and
10342 the compressed streams are not
10343 cached. Thus, to reduce load on the machine that runs @command{guix
10344 publish}, it may be a good idea to choose a low compression level, to
10345 run @command{guix publish} behind a caching proxy, or to use
10346 @option{--cache}. Using @option{--cache} has the advantage that it
10347 allows @command{guix publish} to add @code{Content-Length} HTTP header
10348 to its responses.
10349
10350 This option can be repeated, in which case every substitute gets compressed
10351 using all the selected methods, and all of them are advertised. This is
10352 useful when users may not support all the compression methods: they can select
10353 the one they support.
10354
10355 @item --cache=@var{directory}
10356 @itemx -c @var{directory}
10357 Cache archives and meta-data (@code{.narinfo} URLs) to @var{directory}
10358 and only serve archives that are in cache.
10359
10360 When this option is omitted, archives and meta-data are created
10361 on-the-fly. This can reduce the available bandwidth, especially when
10362 compression is enabled, since this may become CPU-bound. Another
10363 drawback of the default mode is that the length of archives is not known
10364 in advance, so @command{guix publish} does not add a
10365 @code{Content-Length} HTTP header to its responses, which in turn
10366 prevents clients from knowing the amount of data being downloaded.
10367
10368 Conversely, when @option{--cache} is used, the first request for a store
10369 item (@i{via} a @code{.narinfo} URL) returns 404 and triggers a
10370 background process to @dfn{bake} the archive---computing its
10371 @code{.narinfo} and compressing the archive, if needed. Once the
10372 archive is cached in @var{directory}, subsequent requests succeed and
10373 are served directly from the cache, which guarantees that clients get
10374 the best possible bandwidth.
10375
10376 The ``baking'' process is performed by worker threads. By default, one
10377 thread per CPU core is created, but this can be customized. See
10378 @option{--workers} below.
10379
10380 When @option{--ttl} is used, cached entries are automatically deleted
10381 when they have expired.
10382
10383 @item --workers=@var{N}
10384 When @option{--cache} is used, request the allocation of @var{N} worker
10385 threads to ``bake'' archives.
10386
10387 @item --ttl=@var{ttl}
10388 Produce @code{Cache-Control} HTTP headers that advertise a time-to-live
10389 (TTL) of @var{ttl}. @var{ttl} must denote a duration: @code{5d} means 5
10390 days, @code{1m} means 1 month, and so on.
10391
10392 This allows the user's Guix to keep substitute information in cache for
10393 @var{ttl}. However, note that @code{guix publish} does not itself
10394 guarantee that the store items it provides will indeed remain available
10395 for as long as @var{ttl}.
10396
10397 Additionally, when @option{--cache} is used, cached entries that have
10398 not been accessed for @var{ttl} and that no longer have a corresponding
10399 item in the store, may be deleted.
10400
10401 @item --nar-path=@var{path}
10402 Use @var{path} as the prefix for the URLs of ``nar'' files
10403 (@pxref{Invoking guix archive, normalized archives}).
10404
10405 By default, nars are served at a URL such as
10406 @code{/nar/gzip/@dots{}-coreutils-8.25}. This option allows you to
10407 change the @code{/nar} part to @var{path}.
10408
10409 @item --public-key=@var{file}
10410 @itemx --private-key=@var{file}
10411 Use the specific @var{file}s as the public/private key pair used to sign
10412 the store items being published.
10413
10414 The files must correspond to the same key pair (the private key is used
10415 for signing and the public key is merely advertised in the signature
10416 metadata). They must contain keys in the canonical s-expression format
10417 as produced by @command{guix archive --generate-key} (@pxref{Invoking
10418 guix archive}). By default, @file{/etc/guix/signing-key.pub} and
10419 @file{/etc/guix/signing-key.sec} are used.
10420
10421 @item --repl[=@var{port}]
10422 @itemx -r [@var{port}]
10423 Spawn a Guile REPL server (@pxref{REPL Servers,,, guile, GNU Guile
10424 Reference Manual}) on @var{port} (37146 by default). This is used
10425 primarily for debugging a running @command{guix publish} server.
10426 @end table
10427
10428 Enabling @command{guix publish} on Guix System is a one-liner: just
10429 instantiate a @code{guix-publish-service-type} service in the @code{services} field
10430 of the @code{operating-system} declaration (@pxref{guix-publish-service-type,
10431 @code{guix-publish-service-type}}).
10432
10433 If you are instead running Guix on a ``foreign distro'', follow these
10434 instructions:
10435
10436 @itemize
10437 @item
10438 If your host distro uses the systemd init system:
10439
10440 @example
10441 # ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \
10442 /etc/systemd/system/
10443 # systemctl start guix-publish && systemctl enable guix-publish
10444 @end example
10445
10446 @item
10447 If your host distro uses the Upstart init system:
10448
10449 @example
10450 # ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/
10451 # start guix-publish
10452 @end example
10453
10454 @item
10455 Otherwise, proceed similarly with your distro's init system.
10456 @end itemize
10457
10458 @node Invoking guix challenge
10459 @section Invoking @command{guix challenge}
10460
10461 @cindex reproducible builds
10462 @cindex verifiable builds
10463 @cindex @command{guix challenge}
10464 @cindex challenge
10465 Do the binaries provided by this server really correspond to the source
10466 code it claims to build? Is a package build process deterministic?
10467 These are the questions the @command{guix challenge} command attempts to
10468 answer.
10469
10470 The former is obviously an important question: Before using a substitute
10471 server (@pxref{Substitutes}), one had better @emph{verify} that it
10472 provides the right binaries, and thus @emph{challenge} it. The latter
10473 is what enables the former: If package builds are deterministic, then
10474 independent builds of the package should yield the exact same result,
10475 bit for bit; if a server provides a binary different from the one
10476 obtained locally, it may be either corrupt or malicious.
10477
10478 We know that the hash that shows up in @file{/gnu/store} file names is
10479 the hash of all the inputs of the process that built the file or
10480 directory---compilers, libraries, build scripts,
10481 etc. (@pxref{Introduction}). Assuming deterministic build processes,
10482 one store file name should map to exactly one build output.
10483 @command{guix challenge} checks whether there is, indeed, a single
10484 mapping by comparing the build outputs of several independent builds of
10485 any given store item.
10486
10487 The command output looks like this:
10488
10489 @smallexample
10490 $ guix challenge --substitute-urls="https://@value{SUBSTITUTE-SERVER} https://guix.example.org"
10491 updating list of substitutes from 'https://@value{SUBSTITUTE-SERVER}'... 100.0%
10492 updating list of substitutes from 'https://guix.example.org'... 100.0%
10493 /gnu/store/@dots{}-openssl-1.0.2d contents differ:
10494 local hash: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
10495 https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-openssl-1.0.2d: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
10496 https://guix.example.org/nar/@dots{}-openssl-1.0.2d: 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim
10497 differing files:
10498 /lib/libcrypto.so.1.1
10499 /lib/libssl.so.1.1
10500
10501 /gnu/store/@dots{}-git-2.5.0 contents differ:
10502 local hash: 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha
10503 https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-git-2.5.0: 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f
10504 https://guix.example.org/nar/@dots{}-git-2.5.0: 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73
10505 differing file:
10506 /libexec/git-core/git-fsck
10507
10508 /gnu/store/@dots{}-pius-2.1.1 contents differ:
10509 local hash: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
10510 https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-pius-2.1.1: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
10511 https://guix.example.org/nar/@dots{}-pius-2.1.1: 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs
10512 differing file:
10513 /share/man/man1/pius.1.gz
10514
10515 @dots{}
10516
10517 6,406 store items were analyzed:
10518 - 4,749 (74.1%) were identical
10519 - 525 (8.2%) differed
10520 - 1,132 (17.7%) were inconclusive
10521 @end smallexample
10522
10523 @noindent
10524 In this example, @command{guix challenge} first scans the store to
10525 determine the set of locally-built derivations---as opposed to store
10526 items that were downloaded from a substitute server---and then queries
10527 all the substitute servers. It then reports those store items for which
10528 the servers obtained a result different from the local build.
10529
10530 @cindex non-determinism, in package builds
10531 As an example, @code{guix.example.org} always gets a different answer.
10532 Conversely, @code{@value{SUBSTITUTE-SERVER}} agrees with local builds, except in the
10533 case of Git. This might indicate that the build process of Git is
10534 non-deterministic, meaning that its output varies as a function of
10535 various things that Guix does not fully control, in spite of building
10536 packages in isolated environments (@pxref{Features}). Most common
10537 sources of non-determinism include the addition of timestamps in build
10538 results, the inclusion of random numbers, and directory listings sorted
10539 by inode number. See @uref{https://reproducible-builds.org/docs/}, for
10540 more information.
10541
10542 To find out what is wrong with this Git binary, the easiest approach is
10543 to run:
10544
10545 @example
10546 guix challenge git \
10547 --diff=diffoscope \
10548 --substitute-urls="https://@value{SUBSTITUTE-SERVER} https://guix.example.org"
10549 @end example
10550
10551 This automatically invokes @command{diffoscope}, which displays detailed
10552 information about files that differ.
10553
10554 Alternately, we can do something along these lines (@pxref{Invoking guix
10555 archive}):
10556
10557 @example
10558 $ wget -q -O - https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-git-2.5.0 \
10559 | guix archive -x /tmp/git
10560 $ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git
10561 @end example
10562
10563 This command shows the difference between the files resulting from the
10564 local build, and the files resulting from the build on
10565 @code{@value{SUBSTITUTE-SERVER}} (@pxref{Overview, Comparing and Merging Files,,
10566 diffutils, Comparing and Merging Files}). The @command{diff} command
10567 works great for text files. When binary files differ, a better option
10568 is @uref{https://diffoscope.org/, Diffoscope}, a tool that helps
10569 visualize differences for all kinds of files.
10570
10571 Once you have done that work, you can tell whether the differences are due
10572 to a non-deterministic build process or to a malicious server. We try
10573 hard to remove sources of non-determinism in packages to make it easier
10574 to verify substitutes, but of course, this is a process that
10575 involves not just Guix, but a large part of the free software community.
10576 In the meantime, @command{guix challenge} is one tool to help address
10577 the problem.
10578
10579 If you are writing packages for Guix, you are encouraged to check
10580 whether @code{@value{SUBSTITUTE-SERVER}} and other substitute servers obtain the
10581 same build result as you did with:
10582
10583 @example
10584 $ guix challenge @var{package}
10585 @end example
10586
10587 @noindent
10588 where @var{package} is a package specification such as
10589 @code{guile@@2.0} or @code{glibc:debug}.
10590
10591 The general syntax is:
10592
10593 @example
10594 guix challenge @var{options} [@var{packages}@dots{}]
10595 @end example
10596
10597 When a difference is found between the hash of a locally-built item and
10598 that of a server-provided substitute, or among substitutes provided by
10599 different servers, the command displays it as in the example above and
10600 its exit code is 2 (other non-zero exit codes denote other kinds of
10601 errors.)
10602
10603 The one option that matters is:
10604
10605 @table @code
10606
10607 @item --substitute-urls=@var{urls}
10608 Consider @var{urls} the whitespace-separated list of substitute source
10609 URLs to compare to.
10610
10611 @item --diff=@var{mode}
10612 Upon mismatches, show differences according to @var{mode}, one of:
10613
10614 @table @asis
10615 @item @code{simple} (the default)
10616 Show the list of files that differ.
10617
10618 @item @code{diffoscope}
10619 @itemx @var{command}
10620 Invoke @uref{https://diffoscope.org/, Diffoscope}, passing it
10621 two directories whose contents do not match.
10622
10623 When @var{command} is an absolute file name, run @var{command} instead
10624 of Diffoscope.
10625
10626 @item @code{none}
10627 Do not show further details about the differences.
10628 @end table
10629
10630 Thus, unless @code{--diff=none} is passed, @command{guix challenge}
10631 downloads the store items from the given substitute servers so that it
10632 can compare them.
10633
10634 @item --verbose
10635 @itemx -v
10636 Show details about matches (identical contents) in addition to
10637 information about mismatches.
10638
10639 @end table
10640
10641 @node Invoking guix copy
10642 @section Invoking @command{guix copy}
10643
10644 @cindex copy, of store items, over SSH
10645 @cindex SSH, copy of store items
10646 @cindex sharing store items across machines
10647 @cindex transferring store items across machines
10648 The @command{guix copy} command copies items from the store of one
10649 machine to that of another machine over a secure shell (SSH)
10650 connection@footnote{This command is available only when Guile-SSH was
10651 found. @xref{Requirements}, for details.}. For example, the following
10652 command copies the @code{coreutils} package, the user's profile, and all
10653 their dependencies over to @var{host}, logged in as @var{user}:
10654
10655 @example
10656 guix copy --to=@var{user}@@@var{host} \
10657 coreutils `readlink -f ~/.guix-profile`
10658 @end example
10659
10660 If some of the items to be copied are already present on @var{host},
10661 they are not actually sent.
10662
10663 The command below retrieves @code{libreoffice} and @code{gimp} from
10664 @var{host}, assuming they are available there:
10665
10666 @example
10667 guix copy --from=@var{host} libreoffice gimp
10668 @end example
10669
10670 The SSH connection is established using the Guile-SSH client, which is
10671 compatible with OpenSSH: it honors @file{~/.ssh/known_hosts} and
10672 @file{~/.ssh/config}, and uses the SSH agent for authentication.
10673
10674 The key used to sign items that are sent must be accepted by the remote
10675 machine. Likewise, the key used by the remote machine to sign items you
10676 are retrieving must be in @file{/etc/guix/acl} so it is accepted by your
10677 own daemon. @xref{Invoking guix archive}, for more information about
10678 store item authentication.
10679
10680 The general syntax is:
10681
10682 @example
10683 guix copy [--to=@var{spec}|--from=@var{spec}] @var{items}@dots{}
10684 @end example
10685
10686 You must always specify one of the following options:
10687
10688 @table @code
10689 @item --to=@var{spec}
10690 @itemx --from=@var{spec}
10691 Specify the host to send to or receive from. @var{spec} must be an SSH
10692 spec such as @code{example.org}, @code{charlie@@example.org}, or
10693 @code{charlie@@example.org:2222}.
10694 @end table
10695
10696 The @var{items} can be either package names, such as @code{gimp}, or
10697 store items, such as @file{/gnu/store/@dots{}-idutils-4.6}.
10698
10699 When specifying the name of a package to send, it is first built if
10700 needed, unless @option{--dry-run} was specified. Common build options
10701 are supported (@pxref{Common Build Options}).
10702
10703
10704 @node Invoking guix container
10705 @section Invoking @command{guix container}
10706 @cindex container
10707 @cindex @command{guix container}
10708 @quotation Note
10709 As of version @value{VERSION}, this tool is experimental. The interface
10710 is subject to radical change in the future.
10711 @end quotation
10712
10713 The purpose of @command{guix container} is to manipulate processes
10714 running within an isolated environment, commonly known as a
10715 ``container'', typically created by the @command{guix environment}
10716 (@pxref{Invoking guix environment}) and @command{guix system container}
10717 (@pxref{Invoking guix system}) commands.
10718
10719 The general syntax is:
10720
10721 @example
10722 guix container @var{action} @var{options}@dots{}
10723 @end example
10724
10725 @var{action} specifies the operation to perform with a container, and
10726 @var{options} specifies the context-specific arguments for the action.
10727
10728 The following actions are available:
10729
10730 @table @code
10731 @item exec
10732 Execute a command within the context of a running container.
10733
10734 The syntax is:
10735
10736 @example
10737 guix container exec @var{pid} @var{program} @var{arguments}@dots{}
10738 @end example
10739
10740 @var{pid} specifies the process ID of the running container.
10741 @var{program} specifies an executable file name within the root file
10742 system of the container. @var{arguments} are the additional options that
10743 will be passed to @var{program}.
10744
10745 The following command launches an interactive login shell inside a
10746 Guix system container, started by @command{guix system container}, and whose
10747 process ID is 9001:
10748
10749 @example
10750 guix container exec 9001 /run/current-system/profile/bin/bash --login
10751 @end example
10752
10753 Note that the @var{pid} cannot be the parent process of a container. It
10754 must be PID 1 of the container or one of its child processes.
10755
10756 @end table
10757
10758 @node Invoking guix weather
10759 @section Invoking @command{guix weather}
10760
10761 Occasionally you're grumpy because substitutes are lacking and you end
10762 up building packages by yourself (@pxref{Substitutes}). The
10763 @command{guix weather} command reports on substitute availability on the
10764 specified servers so you can have an idea of whether you'll be grumpy
10765 today. It can sometimes be useful info as a user, but it is primarily
10766 useful to people running @command{guix publish} (@pxref{Invoking guix
10767 publish}).
10768
10769 @cindex statistics, for substitutes
10770 @cindex availability of substitutes
10771 @cindex substitute availability
10772 @cindex weather, substitute availability
10773 Here's a sample run:
10774
10775 @example
10776 $ guix weather --substitute-urls=https://guix.example.org
10777 computing 5,872 package derivations for x86_64-linux...
10778 looking for 6,128 store items on https://guix.example.org..
10779 updating list of substitutes from 'https://guix.example.org'... 100.0%
10780 https://guix.example.org
10781 43.4% substitutes available (2,658 out of 6,128)
10782 7,032.5 MiB of nars (compressed)
10783 19,824.2 MiB on disk (uncompressed)
10784 0.030 seconds per request (182.9 seconds in total)
10785 33.5 requests per second
10786
10787 9.8% (342 out of 3,470) of the missing items are queued
10788 867 queued builds
10789 x86_64-linux: 518 (59.7%)
10790 i686-linux: 221 (25.5%)
10791 aarch64-linux: 128 (14.8%)
10792 build rate: 23.41 builds per hour
10793 x86_64-linux: 11.16 builds per hour
10794 i686-linux: 6.03 builds per hour
10795 aarch64-linux: 6.41 builds per hour
10796 @end example
10797
10798 @cindex continuous integration, statistics
10799 As you can see, it reports the fraction of all the packages for which
10800 substitutes are available on the server---regardless of whether
10801 substitutes are enabled, and regardless of whether this server's signing
10802 key is authorized. It also reports the size of the compressed archives
10803 (``nars'') provided by the server, the size the corresponding store
10804 items occupy in the store (assuming deduplication is turned off), and
10805 the server's throughput. The second part gives continuous integration
10806 (CI) statistics, if the server supports it. In addition, using the
10807 @option{--coverage} option, @command{guix weather} can list ``important''
10808 package substitutes missing on the server (see below).
10809
10810 To achieve that, @command{guix weather} queries over HTTP(S) meta-data
10811 (@dfn{narinfos}) for all the relevant store items. Like @command{guix
10812 challenge}, it ignores signatures on those substitutes, which is
10813 innocuous since the command only gathers statistics and cannot install
10814 those substitutes.
10815
10816 The general syntax is:
10817
10818 @example
10819 guix weather @var{options}@dots{} [@var{packages}@dots{}]
10820 @end example
10821
10822 When @var{packages} is omitted, @command{guix weather} checks the availability
10823 of substitutes for @emph{all} the packages, or for those specified with
10824 @option{--manifest}; otherwise it only considers the specified packages. It
10825 is also possible to query specific system types with @option{--system}.
10826 @command{guix weather} exits with a non-zero code when the fraction of
10827 available substitutes is below 100%.
10828
10829 The available options are listed below.
10830
10831 @table @code
10832 @item --substitute-urls=@var{urls}
10833 @var{urls} is the space-separated list of substitute server URLs to
10834 query. When this option is omitted, the default set of substitute
10835 servers is queried.
10836
10837 @item --system=@var{system}
10838 @itemx -s @var{system}
10839 Query substitutes for @var{system}---e.g., @code{aarch64-linux}. This
10840 option can be repeated, in which case @command{guix weather} will query
10841 substitutes for several system types.
10842
10843 @item --manifest=@var{file}
10844 Instead of querying substitutes for all the packages, only ask for those
10845 specified in @var{file}. @var{file} must contain a @dfn{manifest}, as
10846 with the @code{-m} option of @command{guix package} (@pxref{Invoking
10847 guix package}).
10848
10849 This option can be repeated several times, in which case the manifests
10850 are concatenated.
10851
10852 @item --coverage[=@var{count}]
10853 @itemx -c [@var{count}]
10854 Report on substitute coverage for packages: list packages with at least
10855 @var{count} dependents (zero by default) for which substitutes are
10856 unavailable. Dependent packages themselves are not listed: if @var{b} depends
10857 on @var{a} and @var{a} has no substitutes, only @var{a} is listed, even though
10858 @var{b} usually lacks substitutes as well. The result looks like this:
10859
10860 @example
10861 $ guix weather --substitute-urls=@value{SUBSTITUTE-URL} -c 10
10862 computing 8,983 package derivations for x86_64-linux...
10863 looking for 9,343 store items on @value{SUBSTITUTE-URL}...
10864 updating substitutes from '@value{SUBSTITUTE-URL}'... 100.0%
10865 @value{SUBSTITUTE-URL}
10866 64.7% substitutes available (6,047 out of 9,343)
10867 @dots{}
10868 2502 packages are missing from '@value{SUBSTITUTE-URL}' for 'x86_64-linux', among which:
10869 58 kcoreaddons@@5.49.0 /gnu/store/@dots{}-kcoreaddons-5.49.0
10870 46 qgpgme@@1.11.1 /gnu/store/@dots{}-qgpgme-1.11.1
10871 37 perl-http-cookiejar@@0.008 /gnu/store/@dots{}-perl-http-cookiejar-0.008
10872 @dots{}
10873 @end example
10874
10875 What this example shows is that @code{kcoreaddons} and presumably the 58
10876 packages that depend on it have no substitutes at @code{ci.guix.info};
10877 likewise for @code{qgpgme} and the 46 packages that depend on it.
10878
10879 If you are a Guix developer, or if you are taking care of this build farm,
10880 you'll probably want to have a closer look at these packages: they may simply
10881 fail to build.
10882
10883 @item --display-missing
10884 Display the list of store items for which substitutes are missing.
10885 @end table
10886
10887 @node Invoking guix processes
10888 @section Invoking @command{guix processes}
10889
10890 The @command{guix processes} command can be useful to developers and system
10891 administrators, especially on multi-user machines and on build farms: it lists
10892 the current sessions (connections to the daemon), as well as information about
10893 the processes involved@footnote{Remote sessions, when @command{guix-daemon} is
10894 started with @option{--listen} specifying a TCP endpoint, are @emph{not}
10895 listed.}. Here's an example of the information it returns:
10896
10897 @example
10898 $ sudo guix processes
10899 SessionPID: 19002
10900 ClientPID: 19090
10901 ClientCommand: guix environment --ad-hoc python
10902
10903 SessionPID: 19402
10904 ClientPID: 19367
10905 ClientCommand: guix publish -u guix-publish -p 3000 -C 9 @dots{}
10906
10907 SessionPID: 19444
10908 ClientPID: 19419
10909 ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
10910 LockHeld: /gnu/store/@dots{}-perl-ipc-cmd-0.96.lock
10911 LockHeld: /gnu/store/@dots{}-python-six-bootstrap-1.11.0.lock
10912 LockHeld: /gnu/store/@dots{}-libjpeg-turbo-2.0.0.lock
10913 ChildProcess: 20495: guix offload x86_64-linux 7200 1 28800
10914 ChildProcess: 27733: guix offload x86_64-linux 7200 1 28800
10915 ChildProcess: 27793: guix offload x86_64-linux 7200 1 28800
10916 @end example
10917
10918 In this example we see that @command{guix-daemon} has three clients:
10919 @command{guix environment}, @command{guix publish}, and the Cuirass continuous
10920 integration tool; their process identifier (PID) is given by the
10921 @code{ClientPID} field. The @code{SessionPID} field gives the PID of the
10922 @command{guix-daemon} sub-process of this particular session.
10923
10924 The @code{LockHeld} fields show which store items are currently locked by this
10925 session, which corresponds to store items being built or substituted (the
10926 @code{LockHeld} field is not displayed when @command{guix processes} is not
10927 running as root.) Last, by looking at the @code{ChildProcess} field, we
10928 understand that these three builds are being offloaded (@pxref{Daemon Offload
10929 Setup}).
10930
10931 The output is in Recutils format so we can use the handy @command{recsel}
10932 command to select sessions of interest (@pxref{Selection Expressions,,,
10933 recutils, GNU recutils manual}). As an example, the command shows the command
10934 line and PID of the client that triggered the build of a Perl package:
10935
10936 @example
10937 $ sudo guix processes | \
10938 recsel -p ClientPID,ClientCommand -e 'LockHeld ~ "perl"'
10939 ClientPID: 19419
10940 ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
10941 @end example
10942
10943 @node System Configuration
10944 @chapter System Configuration
10945
10946 @cindex system configuration
10947 Guix System supports a consistent whole-system configuration
10948 mechanism. By that we mean that all aspects of the global system
10949 configuration---such as the available system services, timezone and
10950 locale settings, user accounts---are declared in a single place. Such
10951 a @dfn{system configuration} can be @dfn{instantiated}---i.e., effected.
10952
10953 One of the advantages of putting all the system configuration under the
10954 control of Guix is that it supports transactional system upgrades, and
10955 makes it possible to roll back to a previous system instantiation,
10956 should something go wrong with the new one (@pxref{Features}). Another
10957 advantage is that it makes it easy to replicate the exact same configuration
10958 across different machines, or at different points in time, without
10959 having to resort to additional administration tools layered on top of
10960 the own tools of the system.
10961 @c Yes, we're talking of Puppet, Chef, & co. here. ↑
10962
10963 This section describes this mechanism. First we focus on the system
10964 administrator's viewpoint---explaining how the system is configured and
10965 instantiated. Then we show how this mechanism can be extended, for
10966 instance to support new system services.
10967
10968 @menu
10969 * Using the Configuration System:: Customizing your GNU system.
10970 * operating-system Reference:: Detail of operating-system declarations.
10971 * File Systems:: Configuring file system mounts.
10972 * Mapped Devices:: Block device extra processing.
10973 * User Accounts:: Specifying user accounts.
10974 * Keyboard Layout:: How the system interprets key strokes.
10975 * Locales:: Language and cultural convention settings.
10976 * Services:: Specifying system services.
10977 * Setuid Programs:: Programs running with root privileges.
10978 * X.509 Certificates:: Authenticating HTTPS servers.
10979 * Name Service Switch:: Configuring libc's name service switch.
10980 * Initial RAM Disk:: Linux-Libre bootstrapping.
10981 * Bootloader Configuration:: Configuring the boot loader.
10982 * Invoking guix system:: Instantiating a system configuration.
10983 * Invoking guix deploy:: Deploying a system configuration to a remote host.
10984 * Running Guix in a VM:: How to run Guix System in a virtual machine.
10985 * Defining Services:: Adding new service definitions.
10986 @end menu
10987
10988 @node Using the Configuration System
10989 @section Using the Configuration System
10990
10991 The operating system is configured by providing an
10992 @code{operating-system} declaration in a file that can then be passed to
10993 the @command{guix system} command (@pxref{Invoking guix system}). A
10994 simple setup, with the default system services, the default Linux-Libre
10995 kernel, initial RAM disk, and boot loader looks like this:
10996
10997 @findex operating-system
10998 @lisp
10999 @include os-config-bare-bones.texi
11000 @end lisp
11001
11002 This example should be self-describing. Some of the fields defined
11003 above, such as @code{host-name} and @code{bootloader}, are mandatory.
11004 Others, such as @code{packages} and @code{services}, can be omitted, in
11005 which case they get a default value.
11006
11007 Below we discuss the effect of some of the most important fields
11008 (@pxref{operating-system Reference}, for details about all the available
11009 fields), and how to @dfn{instantiate} the operating system using
11010 @command{guix system}.
11011
11012 @unnumberedsubsec Bootloader
11013
11014 @cindex legacy boot, on Intel machines
11015 @cindex BIOS boot, on Intel machines
11016 @cindex UEFI boot
11017 @cindex EFI boot
11018 The @code{bootloader} field describes the method that will be used to boot
11019 your system. Machines based on Intel processors can boot in ``legacy'' BIOS
11020 mode, as in the example above. However, more recent machines rely instead on
11021 the @dfn{Unified Extensible Firmware Interface} (UEFI) to boot. In that case,
11022 the @code{bootloader} field should contain something along these lines:
11023
11024 @lisp
11025 (bootloader-configuration
11026 (bootloader grub-efi-bootloader)
11027 (target "/boot/efi"))
11028 @end lisp
11029
11030 @xref{Bootloader Configuration}, for more information on the available
11031 configuration options.
11032
11033 @unnumberedsubsec Globally-Visible Packages
11034
11035 @vindex %base-packages
11036 The @code{packages} field lists packages that will be globally visible
11037 on the system, for all user accounts---i.e., in every user's @code{PATH}
11038 environment variable---in addition to the per-user profiles
11039 (@pxref{Invoking guix package}). The @code{%base-packages} variable
11040 provides all the tools one would expect for basic user and administrator
11041 tasks---including the GNU Core Utilities, the GNU Networking Utilities,
11042 the GNU Zile lightweight text editor, @command{find}, @command{grep},
11043 etc. The example above adds GNU@tie{}Screen to those,
11044 taken from the @code{(gnu packages screen)}
11045 module (@pxref{Package Modules}). The
11046 @code{(list package output)} syntax can be used to add a specific output
11047 of a package:
11048
11049 @lisp
11050 (use-modules (gnu packages))
11051 (use-modules (gnu packages dns))
11052
11053 (operating-system
11054 ;; ...
11055 (packages (cons (list bind "utils")
11056 %base-packages)))
11057 @end lisp
11058
11059 @findex specification->package
11060 Referring to packages by variable name, like @code{bind} above, has
11061 the advantage of being unambiguous; it also allows typos and such to be
11062 diagnosed right away as ``unbound variables''. The downside is that one
11063 needs to know which module defines which package, and to augment the
11064 @code{use-package-modules} line accordingly. To avoid that, one can use
11065 the @code{specification->package} procedure of the @code{(gnu packages)}
11066 module, which returns the best package for a given name or name and
11067 version:
11068
11069 @lisp
11070 (use-modules (gnu packages))
11071
11072 (operating-system
11073 ;; ...
11074 (packages (append (map specification->package
11075 '("tcpdump" "htop" "gnupg@@2.0"))
11076 %base-packages)))
11077 @end lisp
11078
11079 @unnumberedsubsec System Services
11080
11081 @cindex services
11082 @vindex %base-services
11083 The @code{services} field lists @dfn{system services} to be made
11084 available when the system starts (@pxref{Services}).
11085 The @code{operating-system} declaration above specifies that, in
11086 addition to the basic services, we want the OpenSSH secure shell
11087 daemon listening on port 2222 (@pxref{Networking Services,
11088 @code{openssh-service-type}}). Under the hood,
11089 @code{openssh-service-type} arranges so that @command{sshd} is started with the
11090 right command-line options, possibly with supporting configuration files
11091 generated as needed (@pxref{Defining Services}).
11092
11093 @cindex customization, of services
11094 @findex modify-services
11095 Occasionally, instead of using the base services as is, you will want to
11096 customize them. To do this, use @code{modify-services} (@pxref{Service
11097 Reference, @code{modify-services}}) to modify the list.
11098
11099 For example, suppose you want to modify @code{guix-daemon} and Mingetty
11100 (the console log-in) in the @code{%base-services} list (@pxref{Base
11101 Services, @code{%base-services}}). To do that, you can write the
11102 following in your operating system declaration:
11103
11104 @lisp
11105 (define %my-services
11106 ;; My very own list of services.
11107 (modify-services %base-services
11108 (guix-service-type config =>
11109 (guix-configuration
11110 (inherit config)
11111 (use-substitutes? #f)
11112 (extra-options '("--gc-keep-derivations"))))
11113 (mingetty-service-type config =>
11114 (mingetty-configuration
11115 (inherit config)))))
11116
11117 (operating-system
11118 ;; @dots{}
11119 (services %my-services))
11120 @end lisp
11121
11122 This changes the configuration---i.e., the service parameters---of the
11123 @code{guix-service-type} instance, and that of all the
11124 @code{mingetty-service-type} instances in the @code{%base-services} list.
11125 Observe how this is accomplished: first, we arrange for the original
11126 configuration to be bound to the identifier @code{config} in the
11127 @var{body}, and then we write the @var{body} so that it evaluates to the
11128 desired configuration. In particular, notice how we use @code{inherit}
11129 to create a new configuration which has the same values as the old
11130 configuration, but with a few modifications.
11131
11132 @cindex encrypted disk
11133 The configuration for a typical ``desktop'' usage, with an encrypted
11134 root partition, the X11 display
11135 server, GNOME and Xfce (users can choose which of these desktop
11136 environments to use at the log-in screen by pressing @kbd{F1}), network
11137 management, power management, and more, would look like this:
11138
11139 @lisp
11140 @include os-config-desktop.texi
11141 @end lisp
11142
11143 A graphical system with a choice of lightweight window managers
11144 instead of full-blown desktop environments would look like this:
11145
11146 @lisp
11147 @include os-config-lightweight-desktop.texi
11148 @end lisp
11149
11150 This example refers to the @file{/boot/efi} file system by its UUID,
11151 @code{1234-ABCD}. Replace this UUID with the right UUID on your system,
11152 as returned by the @command{blkid} command.
11153
11154 @xref{Desktop Services}, for the exact list of services provided by
11155 @code{%desktop-services}. @xref{X.509 Certificates}, for background
11156 information about the @code{nss-certs} package that is used here.
11157
11158 Again, @code{%desktop-services} is just a list of service objects. If
11159 you want to remove services from there, you can do so using the
11160 procedures for list filtering (@pxref{SRFI-1 Filtering and
11161 Partitioning,,, guile, GNU Guile Reference Manual}). For instance, the
11162 following expression returns a list that contains all the services in
11163 @code{%desktop-services} minus the Avahi service:
11164
11165 @lisp
11166 (remove (lambda (service)
11167 (eq? (service-kind service) avahi-service-type))
11168 %desktop-services)
11169 @end lisp
11170
11171 @unnumberedsubsec Instantiating the System
11172
11173 Assuming the @code{operating-system} declaration
11174 is stored in the @file{my-system-config.scm}
11175 file, the @command{guix system reconfigure my-system-config.scm} command
11176 instantiates that configuration, and makes it the default GRUB boot
11177 entry (@pxref{Invoking guix system}).
11178
11179 The normal way to change the system configuration is by updating this
11180 file and re-running @command{guix system reconfigure}. One should never
11181 have to touch files in @file{/etc} or to run commands that modify the
11182 system state such as @command{useradd} or @command{grub-install}. In
11183 fact, you must avoid that since that would not only void your warranty
11184 but also prevent you from rolling back to previous versions of your
11185 system, should you ever need to.
11186
11187 @cindex roll-back, of the operating system
11188 Speaking of roll-back, each time you run @command{guix system
11189 reconfigure}, a new @dfn{generation} of the system is created---without
11190 modifying or deleting previous generations. Old system generations get
11191 an entry in the bootloader boot menu, allowing you to boot them in case
11192 something went wrong with the latest generation. Reassuring, no? The
11193 @command{guix system list-generations} command lists the system
11194 generations available on disk. It is also possible to roll back the
11195 system via the commands @command{guix system roll-back} and
11196 @command{guix system switch-generation}.
11197
11198 Although the @command{guix system reconfigure} command will not modify
11199 previous generations, you must take care when the current generation is not
11200 the latest (e.g., after invoking @command{guix system roll-back}), since
11201 the operation might overwrite a later generation (@pxref{Invoking guix
11202 system}).
11203
11204 @unnumberedsubsec The Programming Interface
11205
11206 At the Scheme level, the bulk of an @code{operating-system} declaration
11207 is instantiated with the following monadic procedure (@pxref{The Store
11208 Monad}):
11209
11210 @deffn {Monadic Procedure} operating-system-derivation os
11211 Return a derivation that builds @var{os}, an @code{operating-system}
11212 object (@pxref{Derivations}).
11213
11214 The output of the derivation is a single directory that refers to all
11215 the packages, configuration files, and other supporting files needed to
11216 instantiate @var{os}.
11217 @end deffn
11218
11219 This procedure is provided by the @code{(gnu system)} module. Along
11220 with @code{(gnu services)} (@pxref{Services}), this module contains the
11221 guts of Guix System. Make sure to visit it!
11222
11223
11224 @node operating-system Reference
11225 @section @code{operating-system} Reference
11226
11227 This section summarizes all the options available in
11228 @code{operating-system} declarations (@pxref{Using the Configuration
11229 System}).
11230
11231 @deftp {Data Type} operating-system
11232 This is the data type representing an operating system configuration.
11233 By that, we mean all the global system configuration, not per-user
11234 configuration (@pxref{Using the Configuration System}).
11235
11236 @table @asis
11237 @item @code{kernel} (default: @var{linux-libre})
11238 The package object of the operating system kernel to use@footnote{Currently
11239 only the Linux-libre kernel is supported. In the future, it will be
11240 possible to use the GNU@tie{}Hurd.}.
11241
11242 @item @code{kernel-loadable-modules} (default: '())
11243 A list of objects (usually packages) to collect loadable kernel modules
11244 from--e.g. @code{(list ddcci-driver-linux)}.
11245
11246 @item @code{kernel-arguments} (default: @code{'("quiet")})
11247 List of strings or gexps representing additional arguments to pass on
11248 the command-line of the kernel---e.g., @code{("console=ttyS0")}.
11249
11250 @item @code{bootloader}
11251 The system bootloader configuration object. @xref{Bootloader Configuration}.
11252
11253 @item @code{label}
11254 This is the label (a string) as it appears in the bootloader's menu entry.
11255 The default label includes the kernel name and version.
11256
11257 @item @code{keyboard-layout} (default: @code{#f})
11258 This field specifies the keyboard layout to use in the console. It can be
11259 either @code{#f}, in which case the default keyboard layout is used (usually
11260 US English), or a @code{<keyboard-layout>} record.
11261
11262 This keyboard layout is in effect as soon as the kernel has booted. For
11263 instance, it is the keyboard layout in effect when you type a passphrase if
11264 your root file system is on a @code{luks-device-mapping} mapped device
11265 (@pxref{Mapped Devices}).
11266
11267 @quotation Note
11268 This does @emph{not} specify the keyboard layout used by the bootloader, nor
11269 that used by the graphical display server. @xref{Bootloader Configuration},
11270 for information on how to specify the bootloader's keyboard layout. @xref{X
11271 Window}, for information on how to specify the keyboard layout used by the X
11272 Window System.
11273 @end quotation
11274
11275 @item @code{initrd-modules} (default: @code{%base-initrd-modules})
11276 @cindex initrd
11277 @cindex initial RAM disk
11278 The list of Linux kernel modules that need to be available in the
11279 initial RAM disk. @xref{Initial RAM Disk}.
11280
11281 @item @code{initrd} (default: @code{base-initrd})
11282 A procedure that returns an initial RAM disk for the Linux
11283 kernel. This field is provided to support low-level customization and
11284 should rarely be needed for casual use. @xref{Initial RAM Disk}.
11285
11286 @item @code{firmware} (default: @code{%base-firmware})
11287 @cindex firmware
11288 List of firmware packages loadable by the operating system kernel.
11289
11290 The default includes firmware needed for Atheros- and Broadcom-based
11291 WiFi devices (Linux-libre modules @code{ath9k} and @code{b43-open},
11292 respectively). @xref{Hardware Considerations}, for more info on
11293 supported hardware.
11294
11295 @item @code{host-name}
11296 The host name.
11297
11298 @item @code{hosts-file}
11299 @cindex hosts file
11300 A file-like object (@pxref{G-Expressions, file-like objects}) for use as
11301 @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library
11302 Reference Manual}). The default is a file with entries for
11303 @code{localhost} and @var{host-name}.
11304
11305 @item @code{mapped-devices} (default: @code{'()})
11306 A list of mapped devices. @xref{Mapped Devices}.
11307
11308 @item @code{file-systems}
11309 A list of file systems. @xref{File Systems}.
11310
11311 @item @code{swap-devices} (default: @code{'()})
11312 @cindex swap devices
11313 A list of strings identifying devices or files to be used for ``swap
11314 space'' (@pxref{Memory Concepts,,, libc, The GNU C Library Reference
11315 Manual}). For example, @code{'("/dev/sda3")} or @code{'("/swapfile")}.
11316 It is possible to specify a swap file in a file system on a mapped
11317 device, provided that the necessary device mapping and file system are
11318 also specified. @xref{Mapped Devices} and @ref{File Systems}.
11319
11320 @item @code{users} (default: @code{%base-user-accounts})
11321 @itemx @code{groups} (default: @code{%base-groups})
11322 List of user accounts and groups. @xref{User Accounts}.
11323
11324 If the @code{users} list lacks a user account with UID@tie{}0, a
11325 ``root'' account with UID@tie{}0 is automatically added.
11326
11327 @item @code{skeletons} (default: @code{(default-skeletons)})
11328 A list target file name/file-like object tuples (@pxref{G-Expressions,
11329 file-like objects}). These are the skeleton files that will be added to
11330 the home directory of newly-created user accounts.
11331
11332 For instance, a valid value may look like this:
11333
11334 @lisp
11335 `((".bashrc" ,(plain-file "bashrc" "echo Hello\n"))
11336 (".guile" ,(plain-file "guile"
11337 "(use-modules (ice-9 readline))
11338 (activate-readline)")))
11339 @end lisp
11340
11341 @item @code{issue} (default: @code{%default-issue})
11342 A string denoting the contents of the @file{/etc/issue} file, which is
11343 displayed when users log in on a text console.
11344
11345 @item @code{packages} (default: @code{%base-packages})
11346 The set of packages installed in the global profile, which is accessible
11347 at @file{/run/current-system/profile}.
11348
11349 The default set includes core utilities and it is good practice to
11350 install non-core utilities in user profiles (@pxref{Invoking guix
11351 package}).
11352
11353 @item @code{timezone}
11354 A timezone identifying string---e.g., @code{"Europe/Paris"}.
11355
11356 You can run the @command{tzselect} command to find out which timezone
11357 string corresponds to your region. Choosing an invalid timezone name
11358 causes @command{guix system} to fail.
11359
11360 @item @code{locale} (default: @code{"en_US.utf8"})
11361 The name of the default locale (@pxref{Locale Names,,, libc, The GNU C
11362 Library Reference Manual}). @xref{Locales}, for more information.
11363
11364 @item @code{locale-definitions} (default: @code{%default-locale-definitions})
11365 The list of locale definitions to be compiled and that may be used at
11366 run time. @xref{Locales}.
11367
11368 @item @code{locale-libcs} (default: @code{(list @var{glibc})})
11369 The list of GNU@tie{}libc packages whose locale data and tools are used
11370 to build the locale definitions. @xref{Locales}, for compatibility
11371 considerations that justify this option.
11372
11373 @item @code{name-service-switch} (default: @code{%default-nss})
11374 Configuration of the libc name service switch (NSS)---a
11375 @code{<name-service-switch>} object. @xref{Name Service Switch}, for
11376 details.
11377
11378 @item @code{services} (default: @code{%base-services})
11379 A list of service objects denoting system services. @xref{Services}.
11380
11381 @cindex essential services
11382 @item @code{essential-services} (default: ...)
11383 The list of ``essential services''---i.e., things like instances of
11384 @code{system-service-type} and @code{host-name-service-type} (@pxref{Service
11385 Reference}), which are derived from the operating system definition itself.
11386 As a user you should @emph{never} need to touch this field.
11387
11388 @item @code{pam-services} (default: @code{(base-pam-services)})
11389 @cindex PAM
11390 @cindex pluggable authentication modules
11391 Linux @dfn{pluggable authentication module} (PAM) services.
11392 @c FIXME: Add xref to PAM services section.
11393
11394 @item @code{setuid-programs} (default: @var{%setuid-programs})
11395 List of string-valued G-expressions denoting setuid programs.
11396 @xref{Setuid Programs}.
11397
11398 @item @code{sudoers-file} (default: @var{%sudoers-specification})
11399 @cindex sudoers file
11400 The contents of the @file{/etc/sudoers} file as a file-like object
11401 (@pxref{G-Expressions, @code{local-file} and @code{plain-file}}).
11402
11403 This file specifies which users can use the @command{sudo} command, what
11404 they are allowed to do, and what privileges they may gain. The default
11405 is that only @code{root} and members of the @code{wheel} group may use
11406 @code{sudo}.
11407
11408 @end table
11409
11410 @deffn {Scheme Syntax} this-operating-system
11411 When used in the @emph{lexical scope} of an operating system field definition,
11412 this identifier resolves to the operating system being defined.
11413
11414 The example below shows how to refer to the operating system being defined in
11415 the definition of the @code{label} field:
11416
11417 @lisp
11418 (use-modules (gnu) (guix))
11419
11420 (operating-system
11421 ;; ...
11422 (label (package-full-name
11423 (operating-system-kernel this-operating-system))))
11424 @end lisp
11425
11426 It is an error to refer to @code{this-operating-system} outside an operating
11427 system definition.
11428 @end deffn
11429
11430 @end deftp
11431
11432 @node File Systems
11433 @section File Systems
11434
11435 The list of file systems to be mounted is specified in the
11436 @code{file-systems} field of the operating system declaration
11437 (@pxref{Using the Configuration System}). Each file system is declared
11438 using the @code{file-system} form, like this:
11439
11440 @lisp
11441 (file-system
11442 (mount-point "/home")
11443 (device "/dev/sda3")
11444 (type "ext4"))
11445 @end lisp
11446
11447 As usual, some of the fields are mandatory---those shown in the example
11448 above---while others can be omitted. These are described below.
11449
11450 @deftp {Data Type} file-system
11451 Objects of this type represent file systems to be mounted. They
11452 contain the following members:
11453
11454 @table @asis
11455 @item @code{type}
11456 This is a string specifying the type of the file system---e.g.,
11457 @code{"ext4"}.
11458
11459 @item @code{mount-point}
11460 This designates the place where the file system is to be mounted.
11461
11462 @item @code{device}
11463 This names the ``source'' of the file system. It can be one of three
11464 things: a file system label, a file system UUID, or the name of a
11465 @file{/dev} node. Labels and UUIDs offer a way to refer to file
11466 systems without having to hard-code their actual device
11467 name@footnote{Note that, while it is tempting to use
11468 @file{/dev/disk/by-uuid} and similar device names to achieve the same
11469 result, this is not recommended: These special device nodes are created
11470 by the udev daemon and may be unavailable at the time the device is
11471 mounted.}.
11472
11473 @findex file-system-label
11474 File system labels are created using the @code{file-system-label}
11475 procedure, UUIDs are created using @code{uuid}, and @file{/dev} node are
11476 plain strings. Here's an example of a file system referred to by its
11477 label, as shown by the @command{e2label} command:
11478
11479 @lisp
11480 (file-system
11481 (mount-point "/home")
11482 (type "ext4")
11483 (device (file-system-label "my-home")))
11484 @end lisp
11485
11486 @findex uuid
11487 UUIDs are converted from their string representation (as shown by the
11488 @command{tune2fs -l} command) using the @code{uuid} form@footnote{The
11489 @code{uuid} form expects 16-byte UUIDs as defined in
11490 @uref{https://tools.ietf.org/html/rfc4122, RFC@tie{}4122}. This is the
11491 form of UUID used by the ext2 family of file systems and others, but it
11492 is different from ``UUIDs'' found in FAT file systems, for instance.},
11493 like this:
11494
11495 @lisp
11496 (file-system
11497 (mount-point "/home")
11498 (type "ext4")
11499 (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
11500 @end lisp
11501
11502 When the source of a file system is a mapped device (@pxref{Mapped
11503 Devices}), its @code{device} field @emph{must} refer to the mapped
11504 device name---e.g., @file{"/dev/mapper/root-partition"}.
11505 This is required so that
11506 the system knows that mounting the file system depends on having the
11507 corresponding device mapping established.
11508
11509 @item @code{flags} (default: @code{'()})
11510 This is a list of symbols denoting mount flags. Recognized flags
11511 include @code{read-only}, @code{bind-mount}, @code{no-dev} (disallow
11512 access to special files), @code{no-suid} (ignore setuid and setgid
11513 bits), @code{no-atime} (do not update file access times),
11514 @code{strict-atime} (update file access time), @code{lazy-time} (only
11515 update time on the in-memory version of the file inode), and
11516 @code{no-exec} (disallow program execution).
11517 @xref{Mount-Unmount-Remount,,, libc, The GNU C Library Reference
11518 Manual}, for more information on these flags.
11519
11520 @item @code{options} (default: @code{#f})
11521 This is either @code{#f}, or a string denoting mount options passed to the
11522 file system driver. @xref{Mount-Unmount-Remount,,, libc, The GNU C Library
11523 Reference Manual}, for details and run @command{man 8 mount} for options for
11524 various file systems.
11525
11526 @item @code{mount?} (default: @code{#t})
11527 This value indicates whether to automatically mount the file system when
11528 the system is brought up. When set to @code{#f}, the file system gets
11529 an entry in @file{/etc/fstab} (read by the @command{mount} command) but
11530 is not automatically mounted.
11531
11532 @item @code{needed-for-boot?} (default: @code{#f})
11533 This Boolean value indicates whether the file system is needed when
11534 booting. If that is true, then the file system is mounted when the
11535 initial RAM disk (initrd) is loaded. This is always the case, for
11536 instance, for the root file system.
11537
11538 @item @code{check?} (default: @code{#t})
11539 This Boolean indicates whether the file system needs to be checked for
11540 errors before being mounted.
11541
11542 @item @code{create-mount-point?} (default: @code{#f})
11543 When true, the mount point is created if it does not exist yet.
11544
11545 @item @code{dependencies} (default: @code{'()})
11546 This is a list of @code{<file-system>} or @code{<mapped-device>} objects
11547 representing file systems that must be mounted or mapped devices that
11548 must be opened before (and unmounted or closed after) this one.
11549
11550 As an example, consider a hierarchy of mounts: @file{/sys/fs/cgroup} is
11551 a dependency of @file{/sys/fs/cgroup/cpu} and
11552 @file{/sys/fs/cgroup/memory}.
11553
11554 Another example is a file system that depends on a mapped device, for
11555 example for an encrypted partition (@pxref{Mapped Devices}).
11556 @end table
11557 @end deftp
11558
11559 The @code{(gnu system file-systems)} exports the following useful
11560 variables.
11561
11562 @defvr {Scheme Variable} %base-file-systems
11563 These are essential file systems that are required on normal systems,
11564 such as @var{%pseudo-terminal-file-system} and @var{%immutable-store} (see
11565 below.) Operating system declarations should always contain at least
11566 these.
11567 @end defvr
11568
11569 @defvr {Scheme Variable} %pseudo-terminal-file-system
11570 This is the file system to be mounted as @file{/dev/pts}. It supports
11571 @dfn{pseudo-terminals} created @i{via} @code{openpty} and similar
11572 functions (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference
11573 Manual}). Pseudo-terminals are used by terminal emulators such as
11574 @command{xterm}.
11575 @end defvr
11576
11577 @defvr {Scheme Variable} %shared-memory-file-system
11578 This file system is mounted as @file{/dev/shm} and is used to support
11579 memory sharing across processes (@pxref{Memory-mapped I/O,
11580 @code{shm_open},, libc, The GNU C Library Reference Manual}).
11581 @end defvr
11582
11583 @defvr {Scheme Variable} %immutable-store
11584 This file system performs a read-only ``bind mount'' of
11585 @file{/gnu/store}, making it read-only for all the users including
11586 @code{root}. This prevents against accidental modification by software
11587 running as @code{root} or by system administrators.
11588
11589 The daemon itself is still able to write to the store: it remounts it
11590 read-write in its own ``name space.''
11591 @end defvr
11592
11593 @defvr {Scheme Variable} %binary-format-file-system
11594 The @code{binfmt_misc} file system, which allows handling of arbitrary
11595 executable file types to be delegated to user space. This requires the
11596 @code{binfmt.ko} kernel module to be loaded.
11597 @end defvr
11598
11599 @defvr {Scheme Variable} %fuse-control-file-system
11600 The @code{fusectl} file system, which allows unprivileged users to mount
11601 and unmount user-space FUSE file systems. This requires the
11602 @code{fuse.ko} kernel module to be loaded.
11603 @end defvr
11604
11605 @node Mapped Devices
11606 @section Mapped Devices
11607
11608 @cindex device mapping
11609 @cindex mapped devices
11610 The Linux kernel has a notion of @dfn{device mapping}: a block device,
11611 such as a hard disk partition, can be @dfn{mapped} into another device,
11612 usually in @code{/dev/mapper/},
11613 with additional processing over the data that flows through
11614 it@footnote{Note that the GNU@tie{}Hurd makes no difference between the
11615 concept of a ``mapped device'' and that of a file system: both boil down
11616 to @emph{translating} input/output operations made on a file to
11617 operations on its backing store. Thus, the Hurd implements mapped
11618 devices, like file systems, using the generic @dfn{translator} mechanism
11619 (@pxref{Translators,,, hurd, The GNU Hurd Reference Manual}).}. A
11620 typical example is encryption device mapping: all writes to the mapped
11621 device are encrypted, and all reads are deciphered, transparently.
11622 Guix extends this notion by considering any device or set of devices that
11623 are @dfn{transformed} in some way to create a new device; for instance,
11624 RAID devices are obtained by @dfn{assembling} several other devices, such
11625 as hard disks or partitions, into a new one that behaves as one partition.
11626 Other examples, not yet implemented, are LVM logical volumes.
11627
11628 Mapped devices are declared using the @code{mapped-device} form,
11629 defined as follows; for examples, see below.
11630
11631 @deftp {Data Type} mapped-device
11632 Objects of this type represent device mappings that will be made when
11633 the system boots up.
11634
11635 @table @code
11636 @item source
11637 This is either a string specifying the name of the block device to be mapped,
11638 such as @code{"/dev/sda3"}, or a list of such strings when several devices
11639 need to be assembled for creating a new one.
11640
11641 @item target
11642 This string specifies the name of the resulting mapped device. For
11643 kernel mappers such as encrypted devices of type @code{luks-device-mapping},
11644 specifying @code{"my-partition"} leads to the creation of
11645 the @code{"/dev/mapper/my-partition"} device.
11646 For RAID devices of type @code{raid-device-mapping}, the full device name
11647 such as @code{"/dev/md0"} needs to be given.
11648
11649 @item type
11650 This must be a @code{mapped-device-kind} object, which specifies how
11651 @var{source} is mapped to @var{target}.
11652 @end table
11653 @end deftp
11654
11655 @defvr {Scheme Variable} luks-device-mapping
11656 This defines LUKS block device encryption using the @command{cryptsetup}
11657 command from the package with the same name. It relies on the
11658 @code{dm-crypt} Linux kernel module.
11659 @end defvr
11660
11661 @defvr {Scheme Variable} raid-device-mapping
11662 This defines a RAID device, which is assembled using the @code{mdadm}
11663 command from the package with the same name. It requires a Linux kernel
11664 module for the appropriate RAID level to be loaded, such as @code{raid456}
11665 for RAID-4, RAID-5 or RAID-6, or @code{raid10} for RAID-10.
11666 @end defvr
11667
11668 @cindex disk encryption
11669 @cindex LUKS
11670 The following example specifies a mapping from @file{/dev/sda3} to
11671 @file{/dev/mapper/home} using LUKS---the
11672 @url{https://gitlab.com/cryptsetup/cryptsetup,Linux Unified Key Setup}, a
11673 standard mechanism for disk encryption.
11674 The @file{/dev/mapper/home}
11675 device can then be used as the @code{device} of a @code{file-system}
11676 declaration (@pxref{File Systems}).
11677
11678 @lisp
11679 (mapped-device
11680 (source "/dev/sda3")
11681 (target "home")
11682 (type luks-device-mapping))
11683 @end lisp
11684
11685 Alternatively, to become independent of device numbering, one may obtain
11686 the LUKS UUID (@dfn{unique identifier}) of the source device by a
11687 command like:
11688
11689 @example
11690 cryptsetup luksUUID /dev/sda3
11691 @end example
11692
11693 and use it as follows:
11694
11695 @lisp
11696 (mapped-device
11697 (source (uuid "cb67fc72-0d54-4c88-9d4b-b225f30b0f44"))
11698 (target "home")
11699 (type luks-device-mapping))
11700 @end lisp
11701
11702 @cindex swap encryption
11703 It is also desirable to encrypt swap space, since swap space may contain
11704 sensitive data. One way to accomplish that is to use a swap file in a
11705 file system on a device mapped via LUKS encryption. In this way, the
11706 swap file is encrypted because the entire device is encrypted.
11707 @xref{Preparing for Installation,,Disk Partitioning}, for an example.
11708
11709 A RAID device formed of the partitions @file{/dev/sda1} and @file{/dev/sdb1}
11710 may be declared as follows:
11711
11712 @lisp
11713 (mapped-device
11714 (source (list "/dev/sda1" "/dev/sdb1"))
11715 (target "/dev/md0")
11716 (type raid-device-mapping))
11717 @end lisp
11718
11719 The @file{/dev/md0} device can then be used as the @code{device} of a
11720 @code{file-system} declaration (@pxref{File Systems}).
11721 Note that the RAID level need not be given; it is chosen during the
11722 initial creation and formatting of the RAID device and is determined
11723 automatically later.
11724
11725
11726 @node User Accounts
11727 @section User Accounts
11728
11729 @cindex users
11730 @cindex accounts
11731 @cindex user accounts
11732 User accounts and groups are entirely managed through the
11733 @code{operating-system} declaration. They are specified with the
11734 @code{user-account} and @code{user-group} forms:
11735
11736 @lisp
11737 (user-account
11738 (name "alice")
11739 (group "users")
11740 (supplementary-groups '("wheel" ;allow use of sudo, etc.
11741 "audio" ;sound card
11742 "video" ;video devices such as webcams
11743 "cdrom")) ;the good ol' CD-ROM
11744 (comment "Bob's sister")
11745 (home-directory "/home/alice"))
11746 @end lisp
11747
11748 When booting or upon completion of @command{guix system reconfigure},
11749 the system ensures that only the user accounts and groups specified in
11750 the @code{operating-system} declaration exist, and with the specified
11751 properties. Thus, account or group creations or modifications made by
11752 directly invoking commands such as @command{useradd} are lost upon
11753 reconfiguration or reboot. This ensures that the system remains exactly
11754 as declared.
11755
11756 @deftp {Data Type} user-account
11757 Objects of this type represent user accounts. The following members may
11758 be specified:
11759
11760 @table @asis
11761 @item @code{name}
11762 The name of the user account.
11763
11764 @item @code{group}
11765 @cindex groups
11766 This is the name (a string) or identifier (a number) of the user group
11767 this account belongs to.
11768
11769 @item @code{supplementary-groups} (default: @code{'()})
11770 Optionally, this can be defined as a list of group names that this
11771 account belongs to.
11772
11773 @item @code{uid} (default: @code{#f})
11774 This is the user ID for this account (a number), or @code{#f}. In the
11775 latter case, a number is automatically chosen by the system when the
11776 account is created.
11777
11778 @item @code{comment} (default: @code{""})
11779 A comment about the account, such as the account owner's full name.
11780
11781 @item @code{home-directory}
11782 This is the name of the home directory for the account.
11783
11784 @item @code{create-home-directory?} (default: @code{#t})
11785 Indicates whether the home directory of this account should be created
11786 if it does not exist yet.
11787
11788 @item @code{shell} (default: Bash)
11789 This is a G-expression denoting the file name of a program to be used as
11790 the shell (@pxref{G-Expressions}).
11791
11792 @item @code{system?} (default: @code{#f})
11793 This Boolean value indicates whether the account is a ``system''
11794 account. System accounts are sometimes treated specially; for instance,
11795 graphical login managers do not list them.
11796
11797 @anchor{user-account-password}
11798 @cindex password, for user accounts
11799 @item @code{password} (default: @code{#f})
11800 You would normally leave this field to @code{#f}, initialize user
11801 passwords as @code{root} with the @command{passwd} command, and then let
11802 users change it with @command{passwd}. Passwords set with
11803 @command{passwd} are of course preserved across reboot and
11804 reconfiguration.
11805
11806 If you @emph{do} want to set an initial password for an account, then
11807 this field must contain the encrypted password, as a string. You can use the
11808 @code{crypt} procedure for this purpose:
11809
11810 @lisp
11811 (user-account
11812 (name "charlie")
11813 (group "users")
11814
11815 ;; Specify a SHA-512-hashed initial password.
11816 (password (crypt "InitialPassword!" "$6$abc")))
11817 @end lisp
11818
11819 @quotation Note
11820 The hash of this initial password will be available in a file in
11821 @file{/gnu/store}, readable by all the users, so this method must be used with
11822 care.
11823 @end quotation
11824
11825 @xref{Passphrase Storage,,, libc, The GNU C Library Reference Manual}, for
11826 more information on password encryption, and @ref{Encryption,,, guile, GNU
11827 Guile Reference Manual}, for information on Guile's @code{crypt} procedure.
11828
11829 @end table
11830 @end deftp
11831
11832 @cindex groups
11833 User group declarations are even simpler:
11834
11835 @lisp
11836 (user-group (name "students"))
11837 @end lisp
11838
11839 @deftp {Data Type} user-group
11840 This type is for, well, user groups. There are just a few fields:
11841
11842 @table @asis
11843 @item @code{name}
11844 The name of the group.
11845
11846 @item @code{id} (default: @code{#f})
11847 The group identifier (a number). If @code{#f}, a new number is
11848 automatically allocated when the group is created.
11849
11850 @item @code{system?} (default: @code{#f})
11851 This Boolean value indicates whether the group is a ``system'' group.
11852 System groups have low numerical IDs.
11853
11854 @item @code{password} (default: @code{#f})
11855 What, user groups can have a password? Well, apparently yes. Unless
11856 @code{#f}, this field specifies the password of the group.
11857
11858 @end table
11859 @end deftp
11860
11861 For convenience, a variable lists all the basic user groups one may
11862 expect:
11863
11864 @defvr {Scheme Variable} %base-groups
11865 This is the list of basic user groups that users and/or packages expect
11866 to be present on the system. This includes groups such as ``root'',
11867 ``wheel'', and ``users'', as well as groups used to control access to
11868 specific devices such as ``audio'', ``disk'', and ``cdrom''.
11869 @end defvr
11870
11871 @defvr {Scheme Variable} %base-user-accounts
11872 This is the list of basic system accounts that programs may expect to
11873 find on a GNU/Linux system, such as the ``nobody'' account.
11874
11875 Note that the ``root'' account is not included here. It is a
11876 special-case and is automatically added whether or not it is specified.
11877 @end defvr
11878
11879 @node Keyboard Layout
11880 @section Keyboard Layout
11881
11882 @cindex keyboard layout
11883 @cindex keymap
11884 To specify what each key of your keyboard does, you need to tell the operating
11885 system what @dfn{keyboard layout} you want to use. The default, when nothing
11886 is specified, is the US English QWERTY layout for 105-key PC keyboards.
11887 However, German speakers will usually prefer the German QWERTZ layout, French
11888 speakers will want the AZERTY layout, and so on; hackers might prefer Dvorak
11889 or bépo, and they might even want to further customize the effect of some of
11890 the keys. This section explains how to get that done.
11891
11892 @cindex keyboard layout, definition
11893 There are three components that will want to know about your keyboard layout:
11894
11895 @itemize
11896 @item
11897 The @emph{bootloader} may want to know what keyboard layout you want to use
11898 (@pxref{Bootloader Configuration, @code{keyboard-layout}}). This is useful if
11899 you want, for instance, to make sure that you can type the passphrase of your
11900 encrypted root partition using the right layout.
11901
11902 @item
11903 The @emph{operating system kernel}, Linux, will need that so that the console
11904 is properly configured (@pxref{operating-system Reference,
11905 @code{keyboard-layout}}).
11906
11907 @item
11908 The @emph{graphical display server}, usually Xorg, also has its own idea of
11909 the keyboard layout (@pxref{X Window, @code{keyboard-layout}}).
11910 @end itemize
11911
11912 Guix allows you to configure all three separately but, fortunately, it allows
11913 you to share the same keyboard layout for all three components.
11914
11915 @cindex XKB, keyboard layouts
11916 Keyboard layouts are represented by records created by the
11917 @code{keyboard-layout} procedure of @code{(gnu system keyboard)}. Following
11918 the X Keyboard extension (XKB), each layout has four attributes: a name (often
11919 a language code such as ``fi'' for Finnish or ``jp'' for Japanese), an
11920 optional variant name, an optional keyboard model name, and a possibly empty
11921 list of additional options. In most cases the layout name is all you care
11922 about. Here are a few example:
11923
11924 @lisp
11925 ;; The German QWERTZ layout. Here we assume a standard
11926 ;; "pc105" keyboard model.
11927 (keyboard-layout "de")
11928
11929 ;; The bépo variant of the French layout.
11930 (keyboard-layout "fr" "bepo")
11931
11932 ;; The Catalan layout.
11933 (keyboard-layout "es" "cat")
11934
11935 ;; Arabic layout with "Alt-Shift" to switch to US layout.
11936 (keyboard-layout "ar,us" #:options '("grp:alt_shift_toggle"))
11937
11938 ;; The Latin American Spanish layout. In addition, the
11939 ;; "Caps Lock" key is used as an additional "Ctrl" key,
11940 ;; and the "Menu" key is used as a "Compose" key to enter
11941 ;; accented letters.
11942 (keyboard-layout "latam"
11943 #:options '("ctrl:nocaps" "compose:menu"))
11944
11945 ;; The Russian layout for a ThinkPad keyboard.
11946 (keyboard-layout "ru" #:model "thinkpad")
11947
11948 ;; The "US international" layout, which is the US layout plus
11949 ;; dead keys to enter accented characters. This is for an
11950 ;; Apple MacBook keyboard.
11951 (keyboard-layout "us" "intl" #:model "macbook78")
11952 @end lisp
11953
11954 See the @file{share/X11/xkb} directory of the @code{xkeyboard-config} package
11955 for a complete list of supported layouts, variants, and models.
11956
11957 @cindex keyboard layout, configuration
11958 Let's say you want your system to use the Turkish keyboard layout throughout
11959 your system---bootloader, console, and Xorg. Here's what your system
11960 configuration would look like:
11961
11962 @findex set-xorg-configuration
11963 @lisp
11964 ;; Using the Turkish layout for the bootloader, the console,
11965 ;; and for Xorg.
11966
11967 (operating-system
11968 ;; ...
11969 (keyboard-layout (keyboard-layout "tr")) ;for the console
11970 (bootloader (bootloader-configuration
11971 (bootloader grub-efi-bootloader)
11972 (target "/boot/efi")
11973 (keyboard-layout keyboard-layout))) ;for GRUB
11974 (services (cons (set-xorg-configuration
11975 (xorg-configuration ;for Xorg
11976 (keyboard-layout keyboard-layout)))
11977 %desktop-services)))
11978 @end lisp
11979
11980 In the example above, for GRUB and for Xorg, we just refer to the
11981 @code{keyboard-layout} field defined above, but we could just as well refer to
11982 a different layout. The @code{set-xorg-configuration} procedure communicates
11983 the desired Xorg configuration to the graphical log-in manager, by default
11984 GDM.
11985
11986 We've discussed how to specify the @emph{default} keyboard layout of your
11987 system when it starts, but you can also adjust it at run time:
11988
11989 @itemize
11990 @item
11991 If you're using GNOME, its settings panel has a ``Region & Language'' entry
11992 where you can select one or more keyboard layouts.
11993
11994 @item
11995 Under Xorg, the @command{setxkbmap} command (from the same-named package)
11996 allows you to change the current layout. For example, this is how you would
11997 change the layout to US Dvorak:
11998
11999 @example
12000 setxkbmap us dvorak
12001 @end example
12002
12003 @item
12004 The @code{loadkeys} command changes the keyboard layout in effect in the Linux
12005 console. However, note that @code{loadkeys} does @emph{not} use the XKB
12006 keyboard layout categorization described above. The command below loads the
12007 French bépo layout:
12008
12009 @example
12010 loadkeys fr-bepo
12011 @end example
12012 @end itemize
12013
12014 @node Locales
12015 @section Locales
12016
12017 @cindex locale
12018 A @dfn{locale} defines cultural conventions for a particular language
12019 and region of the world (@pxref{Locales,,, libc, The GNU C Library
12020 Reference Manual}). Each locale has a name that typically has the form
12021 @code{@var{language}_@var{territory}.@var{codeset}}---e.g.,
12022 @code{fr_LU.utf8} designates the locale for the French language, with
12023 cultural conventions from Luxembourg, and using the UTF-8 encoding.
12024
12025 @cindex locale definition
12026 Usually, you will want to specify the default locale for the machine
12027 using the @code{locale} field of the @code{operating-system} declaration
12028 (@pxref{operating-system Reference, @code{locale}}).
12029
12030 The selected locale is automatically added to the @dfn{locale
12031 definitions} known to the system if needed, with its codeset inferred
12032 from its name---e.g., @code{bo_CN.utf8} will be assumed to use the
12033 @code{UTF-8} codeset. Additional locale definitions can be specified in
12034 the @code{locale-definitions} slot of @code{operating-system}---this is
12035 useful, for instance, if the codeset could not be inferred from the
12036 locale name. The default set of locale definitions includes some widely
12037 used locales, but not all the available locales, in order to save space.
12038
12039 For instance, to add the North Frisian locale for Germany, the value of
12040 that field may be:
12041
12042 @lisp
12043 (cons (locale-definition
12044 (name "fy_DE.utf8") (source "fy_DE"))
12045 %default-locale-definitions)
12046 @end lisp
12047
12048 Likewise, to save space, one might want @code{locale-definitions} to
12049 list only the locales that are actually used, as in:
12050
12051 @lisp
12052 (list (locale-definition
12053 (name "ja_JP.eucjp") (source "ja_JP")
12054 (charset "EUC-JP")))
12055 @end lisp
12056
12057 @vindex LOCPATH
12058 The compiled locale definitions are available at
12059 @file{/run/current-system/locale/X.Y}, where @code{X.Y} is the libc
12060 version, which is the default location where the GNU@tie{}libc provided
12061 by Guix looks for locale data. This can be overridden using the
12062 @code{LOCPATH} environment variable (@pxref{locales-and-locpath,
12063 @code{LOCPATH} and locale packages}).
12064
12065 The @code{locale-definition} form is provided by the @code{(gnu system
12066 locale)} module. Details are given below.
12067
12068 @deftp {Data Type} locale-definition
12069 This is the data type of a locale definition.
12070
12071 @table @asis
12072
12073 @item @code{name}
12074 The name of the locale. @xref{Locale Names,,, libc, The GNU C Library
12075 Reference Manual}, for more information on locale names.
12076
12077 @item @code{source}
12078 The name of the source for that locale. This is typically the
12079 @code{@var{language}_@var{territory}} part of the locale name.
12080
12081 @item @code{charset} (default: @code{"UTF-8"})
12082 The ``character set'' or ``code set'' for that locale,
12083 @uref{https://www.iana.org/assignments/character-sets, as defined by
12084 IANA}.
12085
12086 @end table
12087 @end deftp
12088
12089 @defvr {Scheme Variable} %default-locale-definitions
12090 A list of commonly used UTF-8 locales, used as the default
12091 value of the @code{locale-definitions} field of @code{operating-system}
12092 declarations.
12093
12094 @cindex locale name
12095 @cindex normalized codeset in locale names
12096 These locale definitions use the @dfn{normalized codeset} for the part
12097 that follows the dot in the name (@pxref{Using gettextized software,
12098 normalized codeset,, libc, The GNU C Library Reference Manual}). So for
12099 instance it has @code{uk_UA.utf8} but @emph{not}, say,
12100 @code{uk_UA.UTF-8}.
12101 @end defvr
12102
12103 @subsection Locale Data Compatibility Considerations
12104
12105 @cindex incompatibility, of locale data
12106 @code{operating-system} declarations provide a @code{locale-libcs} field
12107 to specify the GNU@tie{}libc packages that are used to compile locale
12108 declarations (@pxref{operating-system Reference}). ``Why would I
12109 care?'', you may ask. Well, it turns out that the binary format of
12110 locale data is occasionally incompatible from one libc version to
12111 another.
12112
12113 @c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
12114 @c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
12115 For instance, a program linked against libc version 2.21 is unable to
12116 read locale data produced with libc 2.22; worse, that program
12117 @emph{aborts} instead of simply ignoring the incompatible locale
12118 data@footnote{Versions 2.23 and later of GNU@tie{}libc will simply skip
12119 the incompatible locale data, which is already an improvement.}.
12120 Similarly, a program linked against libc 2.22 can read most, but not
12121 all, of the locale data from libc 2.21 (specifically, @code{LC_COLLATE}
12122 data is incompatible); thus calls to @code{setlocale} may fail, but
12123 programs will not abort.
12124
12125 The ``problem'' with Guix is that users have a lot of freedom: They can
12126 choose whether and when to upgrade software in their profiles, and might
12127 be using a libc version different from the one the system administrator
12128 used to build the system-wide locale data.
12129
12130 Fortunately, unprivileged users can also install their own locale data
12131 and define @var{GUIX_LOCPATH} accordingly (@pxref{locales-and-locpath,
12132 @code{GUIX_LOCPATH} and locale packages}).
12133
12134 Still, it is best if the system-wide locale data at
12135 @file{/run/current-system/locale} is built for all the libc versions
12136 actually in use on the system, so that all the programs can access
12137 it---this is especially crucial on a multi-user system. To do that, the
12138 administrator can specify several libc packages in the
12139 @code{locale-libcs} field of @code{operating-system}:
12140
12141 @lisp
12142 (use-package-modules base)
12143
12144 (operating-system
12145 ;; @dots{}
12146 (locale-libcs (list glibc-2.21 (canonical-package glibc))))
12147 @end lisp
12148
12149 This example would lead to a system containing locale definitions for
12150 both libc 2.21 and the current version of libc in
12151 @file{/run/current-system/locale}.
12152
12153
12154 @node Services
12155 @section Services
12156
12157 @cindex system services
12158 An important part of preparing an @code{operating-system} declaration is
12159 listing @dfn{system services} and their configuration (@pxref{Using the
12160 Configuration System}). System services are typically daemons launched
12161 when the system boots, or other actions needed at that time---e.g.,
12162 configuring network access.
12163
12164 Guix has a broad definition of ``service'' (@pxref{Service
12165 Composition}), but many services are managed by the GNU@tie{}Shepherd
12166 (@pxref{Shepherd Services}). On a running system, the @command{herd}
12167 command allows you to list the available services, show their status,
12168 start and stop them, or do other specific operations (@pxref{Jump
12169 Start,,, shepherd, The GNU Shepherd Manual}). For example:
12170
12171 @example
12172 # herd status
12173 @end example
12174
12175 The above command, run as @code{root}, lists the currently defined
12176 services. The @command{herd doc} command shows a synopsis of the given
12177 service and its associated actions:
12178
12179 @example
12180 # herd doc nscd
12181 Run libc's name service cache daemon (nscd).
12182
12183 # herd doc nscd action invalidate
12184 invalidate: Invalidate the given cache--e.g., 'hosts' for host name lookups.
12185 @end example
12186
12187 The @command{start}, @command{stop}, and @command{restart} sub-commands
12188 have the effect you would expect. For instance, the commands below stop
12189 the nscd service and restart the Xorg display server:
12190
12191 @example
12192 # herd stop nscd
12193 Service nscd has been stopped.
12194 # herd restart xorg-server
12195 Service xorg-server has been stopped.
12196 Service xorg-server has been started.
12197 @end example
12198
12199 The following sections document the available services, starting with
12200 the core services, that may be used in an @code{operating-system}
12201 declaration.
12202
12203 @menu
12204 * Base Services:: Essential system services.
12205 * Scheduled Job Execution:: The mcron service.
12206 * Log Rotation:: The rottlog service.
12207 * Networking Services:: Network setup, SSH daemon, etc.
12208 * X Window:: Graphical display.
12209 * Printing Services:: Local and remote printer support.
12210 * Desktop Services:: D-Bus and desktop services.
12211 * Sound Services:: ALSA and Pulseaudio services.
12212 * Database Services:: SQL databases, key-value stores, etc.
12213 * Mail Services:: IMAP, POP3, SMTP, and all that.
12214 * Messaging Services:: Messaging services.
12215 * Telephony Services:: Telephony services.
12216 * Monitoring Services:: Monitoring services.
12217 * Kerberos Services:: Kerberos services.
12218 * LDAP Services:: LDAP services.
12219 * Web Services:: Web servers.
12220 * Certificate Services:: TLS certificates via Let's Encrypt.
12221 * DNS Services:: DNS daemons.
12222 * VPN Services:: VPN daemons.
12223 * Network File System:: NFS related services.
12224 * Continuous Integration:: The Cuirass service.
12225 * Power Management Services:: Extending battery life.
12226 * Audio Services:: The MPD.
12227 * Virtualization Services:: Virtualization services.
12228 * Version Control Services:: Providing remote access to Git repositories.
12229 * Game Services:: Game servers.
12230 * PAM Mount Service:: Service to mount volumes when logging in.
12231 * Guix Services:: Services relating specifically to Guix.
12232 * Linux Services:: Services tied to the Linux kernel.
12233 * Miscellaneous Services:: Other services.
12234 @end menu
12235
12236 @node Base Services
12237 @subsection Base Services
12238
12239 The @code{(gnu services base)} module provides definitions for the basic
12240 services that one expects from the system. The services exported by
12241 this module are listed below.
12242
12243 @defvr {Scheme Variable} %base-services
12244 This variable contains a list of basic services (@pxref{Service Types
12245 and Services}, for more information on service objects) one would
12246 expect from the system: a login service (mingetty) on each tty, syslogd,
12247 the libc name service cache daemon (nscd), the udev device manager, and
12248 more.
12249
12250 This is the default value of the @code{services} field of
12251 @code{operating-system} declarations. Usually, when customizing a
12252 system, you will want to append services to @code{%base-services}, like
12253 this:
12254
12255 @lisp
12256 (append (list (service avahi-service-type)
12257 (service openssh-service-type))
12258 %base-services)
12259 @end lisp
12260 @end defvr
12261
12262 @defvr {Scheme Variable} special-files-service-type
12263 This is the service that sets up ``special files'' such as
12264 @file{/bin/sh}; an instance of it is part of @code{%base-services}.
12265
12266 The value associated with @code{special-files-service-type} services
12267 must be a list of tuples where the first element is the ``special file''
12268 and the second element is its target. By default it is:
12269
12270 @cindex @file{/bin/sh}
12271 @cindex @file{sh}, in @file{/bin}
12272 @lisp
12273 `(("/bin/sh" ,(file-append bash "/bin/sh")))
12274 @end lisp
12275
12276 @cindex @file{/usr/bin/env}
12277 @cindex @file{env}, in @file{/usr/bin}
12278 If you want to add, say, @code{/usr/bin/env} to your system, you can
12279 change it to:
12280
12281 @lisp
12282 `(("/bin/sh" ,(file-append bash "/bin/sh"))
12283 ("/usr/bin/env" ,(file-append coreutils "/bin/env")))
12284 @end lisp
12285
12286 Since this is part of @code{%base-services}, you can use
12287 @code{modify-services} to customize the set of special files
12288 (@pxref{Service Reference, @code{modify-services}}). But the simple way
12289 to add a special file is @i{via} the @code{extra-special-file} procedure
12290 (see below.)
12291 @end defvr
12292
12293 @deffn {Scheme Procedure} extra-special-file @var{file} @var{target}
12294 Use @var{target} as the ``special file'' @var{file}.
12295
12296 For example, adding the following lines to the @code{services} field of
12297 your operating system declaration leads to a @file{/usr/bin/env}
12298 symlink:
12299
12300 @lisp
12301 (extra-special-file "/usr/bin/env"
12302 (file-append coreutils "/bin/env"))
12303 @end lisp
12304 @end deffn
12305
12306 @deffn {Scheme Procedure} host-name-service @var{name}
12307 Return a service that sets the host name to @var{name}.
12308 @end deffn
12309
12310 @defvr {Scheme Variable} console-font-service-type
12311 Install the given fonts on the specified ttys (fonts are per
12312 virtual console on the kernel Linux). The value of this service is a list of
12313 tty/font pairs. The font can be the name of a font provided by the @code{kbd}
12314 package or any valid argument to @command{setfont}, as in this example:
12315
12316 @lisp
12317 `(("tty1" . "LatGrkCyr-8x16")
12318 ("tty2" . ,(file-append
12319 font-tamzen
12320 "/share/kbd/consolefonts/TamzenForPowerline10x20.psf"))
12321 ("tty3" . ,(file-append
12322 font-terminus
12323 "/share/consolefonts/ter-132n"))) ; for HDPI
12324 @end lisp
12325 @end defvr
12326
12327 @deffn {Scheme Procedure} login-service @var{config}
12328 Return a service to run login according to @var{config}, a
12329 @code{<login-configuration>} object, which specifies the message of the day,
12330 among other things.
12331 @end deffn
12332
12333 @deftp {Data Type} login-configuration
12334 This is the data type representing the configuration of login.
12335
12336 @table @asis
12337
12338 @item @code{motd}
12339 @cindex message of the day
12340 A file-like object containing the ``message of the day''.
12341
12342 @item @code{allow-empty-passwords?} (default: @code{#t})
12343 Allow empty passwords by default so that first-time users can log in when
12344 the 'root' account has just been created.
12345
12346 @end table
12347 @end deftp
12348
12349 @deffn {Scheme Procedure} mingetty-service @var{config}
12350 Return a service to run mingetty according to @var{config}, a
12351 @code{<mingetty-configuration>} object, which specifies the tty to run, among
12352 other things.
12353 @end deffn
12354
12355 @deftp {Data Type} mingetty-configuration
12356 This is the data type representing the configuration of Mingetty, which
12357 provides the default implementation of virtual console log-in.
12358
12359 @table @asis
12360
12361 @item @code{tty}
12362 The name of the console this Mingetty runs on---e.g., @code{"tty1"}.
12363
12364 @item @code{auto-login} (default: @code{#f})
12365 When true, this field must be a string denoting the user name under
12366 which the system automatically logs in. When it is @code{#f}, a
12367 user name and password must be entered to log in.
12368
12369 @item @code{login-program} (default: @code{#f})
12370 This must be either @code{#f}, in which case the default log-in program
12371 is used (@command{login} from the Shadow tool suite), or a gexp denoting
12372 the name of the log-in program.
12373
12374 @item @code{login-pause?} (default: @code{#f})
12375 When set to @code{#t} in conjunction with @var{auto-login}, the user
12376 will have to press a key before the log-in shell is launched.
12377
12378 @item @code{mingetty} (default: @var{mingetty})
12379 The Mingetty package to use.
12380
12381 @end table
12382 @end deftp
12383
12384 @deffn {Scheme Procedure} agetty-service @var{config}
12385 Return a service to run agetty according to @var{config}, an
12386 @code{<agetty-configuration>} object, which specifies the tty to run,
12387 among other things.
12388 @end deffn
12389
12390 @deftp {Data Type} agetty-configuration
12391 This is the data type representing the configuration of agetty, which
12392 implements virtual and serial console log-in. See the @code{agetty(8)}
12393 man page for more information.
12394
12395 @table @asis
12396
12397 @item @code{tty}
12398 The name of the console this agetty runs on, as a string---e.g.,
12399 @code{"ttyS0"}. This argument is optional, it will default to
12400 a reasonable default serial port used by the kernel Linux.
12401
12402 For this, if there is a value for an option @code{agetty.tty} in the kernel
12403 command line, agetty will extract the device name of the serial port
12404 from it and use that.
12405
12406 If not and if there is a value for an option @code{console} with a tty in
12407 the Linux command line, agetty will extract the device name of the
12408 serial port from it and use that.
12409
12410 In both cases, agetty will leave the other serial device settings
12411 (baud rate etc.)@: alone---in the hope that Linux pinned them to the
12412 correct values.
12413
12414 @item @code{baud-rate} (default: @code{#f})
12415 A string containing a comma-separated list of one or more baud rates, in
12416 descending order.
12417
12418 @item @code{term} (default: @code{#f})
12419 A string containing the value used for the @code{TERM} environment
12420 variable.
12421
12422 @item @code{eight-bits?} (default: @code{#f})
12423 When @code{#t}, the tty is assumed to be 8-bit clean, and parity detection is
12424 disabled.
12425
12426 @item @code{auto-login} (default: @code{#f})
12427 When passed a login name, as a string, the specified user will be logged
12428 in automatically without prompting for their login name or password.
12429
12430 @item @code{no-reset?} (default: @code{#f})
12431 When @code{#t}, don't reset terminal cflags (control modes).
12432
12433 @item @code{host} (default: @code{#f})
12434 This accepts a string containing the "login_host", which will be written
12435 into the @file{/var/run/utmpx} file.
12436
12437 @item @code{remote?} (default: @code{#f})
12438 When set to @code{#t} in conjunction with @var{host}, this will add an
12439 @code{-r} fakehost option to the command line of the login program
12440 specified in @var{login-program}.
12441
12442 @item @code{flow-control?} (default: @code{#f})
12443 When set to @code{#t}, enable hardware (RTS/CTS) flow control.
12444
12445 @item @code{no-issue?} (default: @code{#f})
12446 When set to @code{#t}, the contents of the @file{/etc/issue} file will
12447 not be displayed before presenting the login prompt.
12448
12449 @item @code{init-string} (default: @code{#f})
12450 This accepts a string that will be sent to the tty or modem before
12451 sending anything else. It can be used to initialize a modem.
12452
12453 @item @code{no-clear?} (default: @code{#f})
12454 When set to @code{#t}, agetty will not clear the screen before showing
12455 the login prompt.
12456
12457 @item @code{login-program} (default: (file-append shadow "/bin/login"))
12458 This must be either a gexp denoting the name of a log-in program, or
12459 unset, in which case the default value is the @command{login} from the
12460 Shadow tool suite.
12461
12462 @item @code{local-line} (default: @code{#f})
12463 Control the CLOCAL line flag. This accepts one of three symbols as
12464 arguments, @code{'auto}, @code{'always}, or @code{'never}. If @code{#f},
12465 the default value chosen by agetty is @code{'auto}.
12466
12467 @item @code{extract-baud?} (default: @code{#f})
12468 When set to @code{#t}, instruct agetty to try to extract the baud rate
12469 from the status messages produced by certain types of modems.
12470
12471 @item @code{skip-login?} (default: @code{#f})
12472 When set to @code{#t}, do not prompt the user for a login name. This
12473 can be used with @var{login-program} field to use non-standard login
12474 systems.
12475
12476 @item @code{no-newline?} (default: @code{#f})
12477 When set to @code{#t}, do not print a newline before printing the
12478 @file{/etc/issue} file.
12479
12480 @c Is this dangerous only when used with login-program, or always?
12481 @item @code{login-options} (default: @code{#f})
12482 This option accepts a string containing options that are passed to the
12483 login program. When used with the @var{login-program}, be aware that a
12484 malicious user could try to enter a login name containing embedded
12485 options that could be parsed by the login program.
12486
12487 @item @code{login-pause} (default: @code{#f})
12488 When set to @code{#t}, wait for any key before showing the login prompt.
12489 This can be used in conjunction with @var{auto-login} to save memory by
12490 lazily spawning shells.
12491
12492 @item @code{chroot} (default: @code{#f})
12493 Change root to the specified directory. This option accepts a directory
12494 path as a string.
12495
12496 @item @code{hangup?} (default: @code{#f})
12497 Use the Linux system call @code{vhangup} to do a virtual hangup of the
12498 specified terminal.
12499
12500 @item @code{keep-baud?} (default: @code{#f})
12501 When set to @code{#t}, try to keep the existing baud rate. The baud
12502 rates from @var{baud-rate} are used when agetty receives a @key{BREAK}
12503 character.
12504
12505 @item @code{timeout} (default: @code{#f})
12506 When set to an integer value, terminate if no user name could be read
12507 within @var{timeout} seconds.
12508
12509 @item @code{detect-case?} (default: @code{#f})
12510 When set to @code{#t}, turn on support for detecting an uppercase-only
12511 terminal. This setting will detect a login name containing only
12512 uppercase letters as indicating an uppercase-only terminal and turn on
12513 some upper-to-lower case conversions. Note that this will not support
12514 Unicode characters.
12515
12516 @item @code{wait-cr?} (default: @code{#f})
12517 When set to @code{#t}, wait for the user or modem to send a
12518 carriage-return or linefeed character before displaying
12519 @file{/etc/issue} or login prompt. This is typically used with the
12520 @var{init-string} option.
12521
12522 @item @code{no-hints?} (default: @code{#f})
12523 When set to @code{#t}, do not print hints about Num, Caps, and Scroll
12524 locks.
12525
12526 @item @code{no-hostname?} (default: @code{#f})
12527 By default, the hostname is printed. When this option is set to
12528 @code{#t}, no hostname will be shown at all.
12529
12530 @item @code{long-hostname?} (default: @code{#f})
12531 By default, the hostname is only printed until the first dot. When this
12532 option is set to @code{#t}, the fully qualified hostname by
12533 @code{gethostname} or @code{getaddrinfo} is shown.
12534
12535 @item @code{erase-characters} (default: @code{#f})
12536 This option accepts a string of additional characters that should be
12537 interpreted as backspace when the user types their login name.
12538
12539 @item @code{kill-characters} (default: @code{#f})
12540 This option accepts a string that should be interpreted to mean "ignore
12541 all previous characters" (also called a "kill" character) when the user
12542 types their login name.
12543
12544 @item @code{chdir} (default: @code{#f})
12545 This option accepts, as a string, a directory path that will be changed
12546 to before login.
12547
12548 @item @code{delay} (default: @code{#f})
12549 This options accepts, as an integer, the number of seconds to sleep
12550 before opening the tty and displaying the login prompt.
12551
12552 @item @code{nice} (default: @code{#f})
12553 This option accepts, as an integer, the nice value with which to run the
12554 @command{login} program.
12555
12556 @item @code{extra-options} (default: @code{'()})
12557 This option provides an "escape hatch" for the user to provide arbitrary
12558 command-line arguments to @command{agetty} as a list of strings.
12559
12560 @end table
12561 @end deftp
12562
12563 @deffn {Scheme Procedure} kmscon-service-type @var{config}
12564 Return a service to run @uref{https://www.freedesktop.org/wiki/Software/kmscon,kmscon}
12565 according to @var{config}, a @code{<kmscon-configuration>} object, which
12566 specifies the tty to run, among other things.
12567 @end deffn
12568
12569 @deftp {Data Type} kmscon-configuration
12570 This is the data type representing the configuration of Kmscon, which
12571 implements virtual console log-in.
12572
12573 @table @asis
12574
12575 @item @code{virtual-terminal}
12576 The name of the console this Kmscon runs on---e.g., @code{"tty1"}.
12577
12578 @item @code{login-program} (default: @code{#~(string-append #$shadow "/bin/login")})
12579 A gexp denoting the name of the log-in program. The default log-in program is
12580 @command{login} from the Shadow tool suite.
12581
12582 @item @code{login-arguments} (default: @code{'("-p")})
12583 A list of arguments to pass to @command{login}.
12584
12585 @item @code{auto-login} (default: @code{#f})
12586 When passed a login name, as a string, the specified user will be logged
12587 in automatically without prompting for their login name or password.
12588
12589 @item @code{hardware-acceleration?} (default: #f)
12590 Whether to use hardware acceleration.
12591
12592 @item @code{kmscon} (default: @var{kmscon})
12593 The Kmscon package to use.
12594
12595 @end table
12596 @end deftp
12597
12598 @cindex name service cache daemon
12599 @cindex nscd
12600 @deffn {Scheme Procedure} nscd-service [@var{config}] [#:glibc glibc] @
12601 [#:name-services '()]
12602 Return a service that runs the libc name service cache daemon (nscd) with the
12603 given @var{config}---an @code{<nscd-configuration>} object. @xref{Name
12604 Service Switch}, for an example.
12605
12606 For convenience, the Shepherd service for nscd provides the following actions:
12607
12608 @table @code
12609 @item invalidate
12610 @cindex cache invalidation, nscd
12611 @cindex nscd, cache invalidation
12612 This invalidate the given cache. For instance, running:
12613
12614 @example
12615 herd invalidate nscd hosts
12616 @end example
12617
12618 @noindent
12619 invalidates the host name lookup cache of nscd.
12620
12621 @item statistics
12622 Running @command{herd statistics nscd} displays information about nscd usage
12623 and caches.
12624 @end table
12625
12626 @end deffn
12627
12628 @defvr {Scheme Variable} %nscd-default-configuration
12629 This is the default @code{<nscd-configuration>} value (see below) used
12630 by @code{nscd-service}. It uses the caches defined by
12631 @var{%nscd-default-caches}; see below.
12632 @end defvr
12633
12634 @deftp {Data Type} nscd-configuration
12635 This is the data type representing the name service cache daemon (nscd)
12636 configuration.
12637
12638 @table @asis
12639
12640 @item @code{name-services} (default: @code{'()})
12641 List of packages denoting @dfn{name services} that must be visible to
12642 the nscd---e.g., @code{(list @var{nss-mdns})}.
12643
12644 @item @code{glibc} (default: @var{glibc})
12645 Package object denoting the GNU C Library providing the @command{nscd}
12646 command.
12647
12648 @item @code{log-file} (default: @code{"/var/log/nscd.log"})
12649 Name of the nscd log file. This is where debugging output goes when
12650 @code{debug-level} is strictly positive.
12651
12652 @item @code{debug-level} (default: @code{0})
12653 Integer denoting the debugging levels. Higher numbers mean that more
12654 debugging output is logged.
12655
12656 @item @code{caches} (default: @var{%nscd-default-caches})
12657 List of @code{<nscd-cache>} objects denoting things to be cached; see
12658 below.
12659
12660 @end table
12661 @end deftp
12662
12663 @deftp {Data Type} nscd-cache
12664 Data type representing a cache database of nscd and its parameters.
12665
12666 @table @asis
12667
12668 @item @code{database}
12669 This is a symbol representing the name of the database to be cached.
12670 Valid values are @code{passwd}, @code{group}, @code{hosts}, and
12671 @code{services}, which designate the corresponding NSS database
12672 (@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
12673
12674 @item @code{positive-time-to-live}
12675 @itemx @code{negative-time-to-live} (default: @code{20})
12676 A number representing the number of seconds during which a positive or
12677 negative lookup result remains in cache.
12678
12679 @item @code{check-files?} (default: @code{#t})
12680 Whether to check for updates of the files corresponding to
12681 @var{database}.
12682
12683 For instance, when @var{database} is @code{hosts}, setting this flag
12684 instructs nscd to check for updates in @file{/etc/hosts} and to take
12685 them into account.
12686
12687 @item @code{persistent?} (default: @code{#t})
12688 Whether the cache should be stored persistently on disk.
12689
12690 @item @code{shared?} (default: @code{#t})
12691 Whether the cache should be shared among users.
12692
12693 @item @code{max-database-size} (default: 32@tie{}MiB)
12694 Maximum size in bytes of the database cache.
12695
12696 @c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
12697 @c settings, so leave them out.
12698
12699 @end table
12700 @end deftp
12701
12702 @defvr {Scheme Variable} %nscd-default-caches
12703 List of @code{<nscd-cache>} objects used by default by
12704 @code{nscd-configuration} (see above).
12705
12706 It enables persistent and aggressive caching of service and host name
12707 lookups. The latter provides better host name lookup performance,
12708 resilience in the face of unreliable name servers, and also better
12709 privacy---often the result of host name lookups is in local cache, so
12710 external name servers do not even need to be queried.
12711 @end defvr
12712
12713 @anchor{syslog-configuration-type}
12714 @cindex syslog
12715 @cindex logging
12716 @deftp {Data Type} syslog-configuration
12717 This data type represents the configuration of the syslog daemon.
12718
12719 @table @asis
12720 @item @code{syslogd} (default: @code{#~(string-append #$inetutils "/libexec/syslogd")})
12721 The syslog daemon to use.
12722
12723 @item @code{config-file} (default: @code{%default-syslog.conf})
12724 The syslog configuration file to use.
12725
12726 @end table
12727 @end deftp
12728
12729 @anchor{syslog-service}
12730 @cindex syslog
12731 @deffn {Scheme Procedure} syslog-service @var{config}
12732 Return a service that runs a syslog daemon according to @var{config}.
12733
12734 @xref{syslogd invocation,,, inetutils, GNU Inetutils}, for more
12735 information on the configuration file syntax.
12736 @end deffn
12737
12738 @defvr {Scheme Variable} guix-service-type
12739 This is the type of the service that runs the build daemon,
12740 @command{guix-daemon} (@pxref{Invoking guix-daemon}). Its value must be a
12741 @code{guix-configuration} record as described below.
12742 @end defvr
12743
12744 @anchor{guix-configuration-type}
12745 @deftp {Data Type} guix-configuration
12746 This data type represents the configuration of the Guix build daemon.
12747 @xref{Invoking guix-daemon}, for more information.
12748
12749 @table @asis
12750 @item @code{guix} (default: @var{guix})
12751 The Guix package to use.
12752
12753 @item @code{build-group} (default: @code{"guixbuild"})
12754 Name of the group for build user accounts.
12755
12756 @item @code{build-accounts} (default: @code{10})
12757 Number of build user accounts to create.
12758
12759 @item @code{authorize-key?} (default: @code{#t})
12760 @cindex substitutes, authorization thereof
12761 Whether to authorize the substitute keys listed in
12762 @code{authorized-keys}---by default that of @code{@value{SUBSTITUTE-SERVER}}
12763 (@pxref{Substitutes}).
12764
12765 @vindex %default-authorized-guix-keys
12766 @item @code{authorized-keys} (default: @code{%default-authorized-guix-keys})
12767 The list of authorized key files for archive imports, as a list of
12768 string-valued gexps (@pxref{Invoking guix archive}). By default, it
12769 contains that of @code{@value{SUBSTITUTE-SERVER}} (@pxref{Substitutes}).
12770
12771 @item @code{use-substitutes?} (default: @code{#t})
12772 Whether to use substitutes.
12773
12774 @item @code{substitute-urls} (default: @code{%default-substitute-urls})
12775 The list of URLs where to look for substitutes by default.
12776
12777 @item @code{max-silent-time} (default: @code{0})
12778 @itemx @code{timeout} (default: @code{0})
12779 The number of seconds of silence and the number of seconds of activity,
12780 respectively, after which a build process times out. A value of zero
12781 disables the timeout.
12782
12783 @item @code{log-compression} (default: @code{'bzip2})
12784 The type of compression used for build logs---one of @code{gzip},
12785 @code{bzip2}, or @code{none}.
12786
12787 @item @code{extra-options} (default: @code{'()})
12788 List of extra command-line options for @command{guix-daemon}.
12789
12790 @item @code{log-file} (default: @code{"/var/log/guix-daemon.log"})
12791 File where @command{guix-daemon}'s standard output and standard error
12792 are written.
12793
12794 @cindex HTTP proxy, for @code{guix-daemon}
12795 @cindex proxy, for @code{guix-daemon} HTTP access
12796 @item @code{http-proxy} (default: @code{#f})
12797 The URL of the HTTP and HTTPS proxy used for downloading fixed-output
12798 derivations and substitutes.
12799
12800 It is also possible to change the daemon's proxy at run time through the
12801 @code{set-http-proxy} action, which restarts it:
12802
12803 @example
12804 herd set-http-proxy guix-daemon http://localhost:8118
12805 @end example
12806
12807 To clear the proxy settings, run:
12808
12809 @example
12810 herd set-http-proxy guix-daemon
12811 @end example
12812
12813 @item @code{tmpdir} (default: @code{#f})
12814 A directory path where the @command{guix-daemon} will perform builds.
12815
12816 @end table
12817 @end deftp
12818
12819 @deffn {Scheme Procedure} udev-service [#:udev @var{eudev} #:rules @code{'()}]
12820 Run @var{udev}, which populates the @file{/dev} directory dynamically.
12821 udev rules can be provided as a list of files through the @var{rules}
12822 variable. The procedures @code{udev-rule} and @code{file->udev-rule} from
12823 @code{(gnu services base)} simplify the creation of such rule files.
12824 @end deffn
12825
12826 @deffn {Scheme Procedure} udev-rule [@var{file-name} @var{contents}]
12827 Return a udev-rule file named @var{file-name} containing the rules
12828 defined by the @var{contents} literal.
12829
12830 In the following example, a rule for a USB device is defined to be
12831 stored in the file @file{90-usb-thing.rules}. The rule runs a script
12832 upon detecting a USB device with a given product identifier.
12833
12834 @lisp
12835 (define %example-udev-rule
12836 (udev-rule
12837 "90-usb-thing.rules"
12838 (string-append "ACTION==\"add\", SUBSYSTEM==\"usb\", "
12839 "ATTR@{product@}==\"Example\", "
12840 "RUN+=\"/path/to/script\"")))
12841 @end lisp
12842
12843 The @command{herd rules udev} command, as root, returns the name of the
12844 directory containing all the active udev rules.
12845 @end deffn
12846
12847 Here we show how the default @var{udev-service} can be extended with it.
12848
12849 @lisp
12850 (operating-system
12851 ;; @dots{}
12852 (services
12853 (modify-services %desktop-services
12854 (udev-service-type config =>
12855 (udev-configuration (inherit config)
12856 (rules (append (udev-configuration-rules config)
12857 (list %example-udev-rule))))))))
12858 @end lisp
12859
12860 @deffn {Scheme Procedure} file->udev-rule [@var{file-name} @var{file}]
12861 Return a udev file named @var{file-name} containing the rules defined
12862 within @var{file}, a file-like object.
12863
12864 The following example showcases how we can use an existing rule file.
12865
12866 @lisp
12867 (use-modules (guix download) ;for url-fetch
12868 (guix packages) ;for origin
12869 @dots{})
12870
12871 (define %android-udev-rules
12872 (file->udev-rule
12873 "51-android-udev.rules"
12874 (let ((version "20170910"))
12875 (origin
12876 (method url-fetch)
12877 (uri (string-append "https://raw.githubusercontent.com/M0Rf30/"
12878 "android-udev-rules/" version "/51-android.rules"))
12879 (sha256
12880 (base32 "0lmmagpyb6xsq6zcr2w1cyx9qmjqmajkvrdbhjx32gqf1d9is003"))))))
12881 @end lisp
12882 @end deffn
12883
12884 Additionally, Guix package definitions can be included in @var{rules} in
12885 order to extend the udev rules with the definitions found under their
12886 @file{lib/udev/rules.d} sub-directory. In lieu of the previous
12887 @var{file->udev-rule} example, we could have used the
12888 @var{android-udev-rules} package which exists in Guix in the @code{(gnu
12889 packages android)} module.
12890
12891 The following example shows how to use the @var{android-udev-rules}
12892 package so that the Android tool @command{adb} can detect devices
12893 without root privileges. It also details how to create the
12894 @code{adbusers} group, which is required for the proper functioning of
12895 the rules defined within the @var{android-udev-rules} package. To
12896 create such a group, we must define it both as part of the
12897 @var{supplementary-groups} of our @var{user-account} declaration, as
12898 well as in the @var{groups} field of the @var{operating-system} record.
12899
12900 @lisp
12901 (use-modules (gnu packages android) ;for android-udev-rules
12902 (gnu system shadow) ;for user-group
12903 @dots{})
12904
12905 (operating-system
12906 ;; @dots{}
12907 (users (cons (user-account
12908 ;; @dots{}
12909 (supplementary-groups
12910 '("adbusers" ;for adb
12911 "wheel" "netdev" "audio" "video")))))
12912
12913 (groups (cons (user-group (system? #t) (name "adbusers"))
12914 %base-groups))
12915
12916 ;; @dots{}
12917
12918 (services
12919 (modify-services %desktop-services
12920 (udev-service-type
12921 config =>
12922 (udev-configuration (inherit config)
12923 (rules (cons android-udev-rules
12924 (udev-configuration-rules config))))))))
12925 @end lisp
12926
12927 @defvr {Scheme Variable} urandom-seed-service-type
12928 Save some entropy in @var{%random-seed-file} to seed @file{/dev/urandom}
12929 when rebooting. It also tries to seed @file{/dev/urandom} from
12930 @file{/dev/hwrng} while booting, if @file{/dev/hwrng} exists and is
12931 readable.
12932 @end defvr
12933
12934 @defvr {Scheme Variable} %random-seed-file
12935 This is the name of the file where some random bytes are saved by
12936 @var{urandom-seed-service} to seed @file{/dev/urandom} when rebooting.
12937 It defaults to @file{/var/lib/random-seed}.
12938 @end defvr
12939
12940 @cindex mouse
12941 @cindex gpm
12942 @defvr {Scheme Variable} gpm-service-type
12943 This is the type of the service that runs GPM, the @dfn{general-purpose
12944 mouse daemon}, which provides mouse support to the Linux console. GPM
12945 allows users to use the mouse in the console, notably to select, copy,
12946 and paste text.
12947
12948 The value for services of this type must be a @code{gpm-configuration}
12949 (see below). This service is not part of @code{%base-services}.
12950 @end defvr
12951
12952 @deftp {Data Type} gpm-configuration
12953 Data type representing the configuration of GPM.
12954
12955 @table @asis
12956 @item @code{options} (default: @code{%default-gpm-options})
12957 Command-line options passed to @command{gpm}. The default set of
12958 options instruct @command{gpm} to listen to mouse events on
12959 @file{/dev/input/mice}. @xref{Command Line,,, gpm, gpm manual}, for
12960 more information.
12961
12962 @item @code{gpm} (default: @code{gpm})
12963 The GPM package to use.
12964
12965 @end table
12966 @end deftp
12967
12968 @anchor{guix-publish-service-type}
12969 @deffn {Scheme Variable} guix-publish-service-type
12970 This is the service type for @command{guix publish} (@pxref{Invoking
12971 guix publish}). Its value must be a @code{guix-publish-configuration}
12972 object, as described below.
12973
12974 This assumes that @file{/etc/guix} already contains a signing key pair as
12975 created by @command{guix archive --generate-key} (@pxref{Invoking guix
12976 archive}). If that is not the case, the service will fail to start.
12977 @end deffn
12978
12979 @deftp {Data Type} guix-publish-configuration
12980 Data type representing the configuration of the @code{guix publish}
12981 service.
12982
12983 @table @asis
12984 @item @code{guix} (default: @code{guix})
12985 The Guix package to use.
12986
12987 @item @code{port} (default: @code{80})
12988 The TCP port to listen for connections.
12989
12990 @item @code{host} (default: @code{"localhost"})
12991 The host (and thus, network interface) to listen to. Use
12992 @code{"0.0.0.0"} to listen on all the network interfaces.
12993
12994 @item @code{compression} (default: @code{'(("gzip" 3))})
12995 This is a list of compression method/level tuple used when compressing
12996 substitutes. For example, to compress all substitutes with @emph{both} lzip
12997 at level 7 and gzip at level 9, write:
12998
12999 @lisp
13000 '(("lzip" 7) ("gzip" 9))
13001 @end lisp
13002
13003 Level 9 achieves the best compression ratio at the expense of increased CPU
13004 usage, whereas level 1 achieves fast compression.
13005
13006 An empty list disables compression altogether.
13007
13008 @item @code{nar-path} (default: @code{"nar"})
13009 The URL path at which ``nars'' can be fetched. @xref{Invoking guix
13010 publish, @code{--nar-path}}, for details.
13011
13012 @item @code{cache} (default: @code{#f})
13013 When it is @code{#f}, disable caching and instead generate archives on
13014 demand. Otherwise, this should be the name of a directory---e.g.,
13015 @code{"/var/cache/guix/publish"}---where @command{guix publish} caches
13016 archives and meta-data ready to be sent. @xref{Invoking guix publish,
13017 @option{--cache}}, for more information on the tradeoffs involved.
13018
13019 @item @code{workers} (default: @code{#f})
13020 When it is an integer, this is the number of worker threads used for
13021 caching; when @code{#f}, the number of processors is used.
13022 @xref{Invoking guix publish, @option{--workers}}, for more information.
13023
13024 @item @code{ttl} (default: @code{#f})
13025 When it is an integer, this denotes the @dfn{time-to-live} in seconds
13026 of the published archives. @xref{Invoking guix publish, @option{--ttl}},
13027 for more information.
13028 @end table
13029 @end deftp
13030
13031 @anchor{rngd-service}
13032 @deffn {Scheme Procedure} rngd-service [#:rng-tools @var{rng-tools}] @
13033 [#:device "/dev/hwrng"]
13034 Return a service that runs the @command{rngd} program from @var{rng-tools}
13035 to add @var{device} to the kernel's entropy pool. The service will fail if
13036 @var{device} does not exist.
13037 @end deffn
13038
13039 @anchor{pam-limits-service}
13040 @cindex session limits
13041 @cindex ulimit
13042 @cindex priority
13043 @cindex realtime
13044 @cindex jackd
13045 @deffn {Scheme Procedure} pam-limits-service [#:limits @code{'()}]
13046
13047 Return a service that installs a configuration file for the
13048 @uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html,
13049 @code{pam_limits} module}. The procedure optionally takes a list of
13050 @code{pam-limits-entry} values, which can be used to specify
13051 @code{ulimit} limits and nice priority limits to user sessions.
13052
13053 The following limits definition sets two hard and soft limits for all
13054 login sessions of users in the @code{realtime} group:
13055
13056 @lisp
13057 (pam-limits-service
13058 (list
13059 (pam-limits-entry "@@realtime" 'both 'rtprio 99)
13060 (pam-limits-entry "@@realtime" 'both 'memlock 'unlimited)))
13061 @end lisp
13062
13063 The first entry increases the maximum realtime priority for
13064 non-privileged processes; the second entry lifts any restriction of the
13065 maximum address space that can be locked in memory. These settings are
13066 commonly used for real-time audio systems.
13067 @end deffn
13068
13069 @node Scheduled Job Execution
13070 @subsection Scheduled Job Execution
13071
13072 @cindex cron
13073 @cindex mcron
13074 @cindex scheduling jobs
13075 The @code{(gnu services mcron)} module provides an interface to
13076 GNU@tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
13077 mcron, GNU@tie{}mcron}). GNU@tie{}mcron is similar to the traditional
13078 Unix @command{cron} daemon; the main difference is that it is
13079 implemented in Guile Scheme, which provides a lot of flexibility when
13080 specifying the scheduling of jobs and their actions.
13081
13082 The example below defines an operating system that runs the
13083 @command{updatedb} (@pxref{Invoking updatedb,,, find, Finding Files})
13084 and the @command{guix gc} commands (@pxref{Invoking guix gc}) daily, as
13085 well as the @command{mkid} command on behalf of an unprivileged user
13086 (@pxref{mkid invocation,,, idutils, ID Database Utilities}). It uses
13087 gexps to introduce job definitions that are passed to mcron
13088 (@pxref{G-Expressions}).
13089
13090 @lisp
13091 (use-modules (guix) (gnu) (gnu services mcron))
13092 (use-package-modules base idutils)
13093
13094 (define updatedb-job
13095 ;; Run 'updatedb' at 3AM every day. Here we write the
13096 ;; job's action as a Scheme procedure.
13097 #~(job '(next-hour '(3))
13098 (lambda ()
13099 (execl (string-append #$findutils "/bin/updatedb")
13100 "updatedb"
13101 "--prunepaths=/tmp /var/tmp /gnu/store"))))
13102
13103 (define garbage-collector-job
13104 ;; Collect garbage 5 minutes after midnight every day.
13105 ;; The job's action is a shell command.
13106 #~(job "5 0 * * *" ;Vixie cron syntax
13107 "guix gc -F 1G"))
13108
13109 (define idutils-job
13110 ;; Update the index database as user "charlie" at 12:15PM
13111 ;; and 19:15PM. This runs from the user's home directory.
13112 #~(job '(next-minute-from (next-hour '(12 19)) '(15))
13113 (string-append #$idutils "/bin/mkid src")
13114 #:user "charlie"))
13115
13116 (operating-system
13117 ;; @dots{}
13118 (services (cons (service mcron-service-type
13119 (mcron-configuration
13120 (jobs (list garbage-collector-job
13121 updatedb-job
13122 idutils-job))))
13123 %base-services)))
13124 @end lisp
13125
13126 For more complex jobs defined in Scheme where you need control over the top
13127 level, for instance to introduce a @code{use-modules} form, you can move your
13128 code to a separate program using the @code{program-file} procedure of the
13129 @code{(guix gexp)} module (@pxref{G-Expressions}). The example below
13130 illustrates that.
13131
13132 @lisp
13133 (define %battery-alert-job
13134 ;; Beep when the battery percentage falls below %MIN-LEVEL.
13135 #~(job
13136 '(next-minute (range 0 60 1))
13137 #$(program-file
13138 "battery-alert.scm"
13139 (with-imported-modules (source-module-closure
13140 '((guix build utils)))
13141 #~(begin
13142 (define %min-level 20)
13143 (use-modules (guix build utils)
13144 (ice-9 popen)
13145 (ice-9 regex)
13146 (ice-9 textual-ports)
13147 (srfi srfi-2))
13148 (setenv "LC_ALL" "C") ;ensure English output
13149 (and-let* ((input-pipe (open-pipe*
13150 OPEN_READ
13151 #$(file-append acpi "/bin/acpi")))
13152 (output (get-string-all input-pipe))
13153 (m (string-match "Discharging, ([0-9]+)%" output))
13154 (level (string->number (match:substring m 1)))
13155 ((< level %min-level)))
13156 (format #t "warning: Battery level is low (~a%)~%" level)
13157 (invoke #$(file-append beep "/bin/beep") "-r5")))))))
13158 @end lisp
13159
13160 @xref{Guile Syntax, mcron job specifications,, mcron, GNU@tie{}mcron},
13161 for more information on mcron job specifications. Below is the
13162 reference of the mcron service.
13163
13164 On a running system, you can use the @code{schedule} action of the service to
13165 visualize the mcron jobs that will be executed next:
13166
13167 @example
13168 # herd schedule mcron
13169 @end example
13170
13171 @noindent
13172 The example above lists the next five tasks that will be executed, but you can
13173 also specify the number of tasks to display:
13174
13175 @example
13176 # herd schedule mcron 10
13177 @end example
13178
13179 @defvr {Scheme Variable} mcron-service-type
13180 This is the type of the @code{mcron} service, whose value is an
13181 @code{mcron-configuration} object.
13182
13183 This service type can be the target of a service extension that provides
13184 it additional job specifications (@pxref{Service Composition}). In
13185 other words, it is possible to define services that provide additional
13186 mcron jobs to run.
13187 @end defvr
13188
13189 @deftp {Data Type} mcron-configuration
13190 Data type representing the configuration of mcron.
13191
13192 @table @asis
13193 @item @code{mcron} (default: @var{mcron})
13194 The mcron package to use.
13195
13196 @item @code{jobs}
13197 This is a list of gexps (@pxref{G-Expressions}), where each gexp
13198 corresponds to an mcron job specification (@pxref{Syntax, mcron job
13199 specifications,, mcron, GNU@tie{}mcron}).
13200 @end table
13201 @end deftp
13202
13203
13204 @node Log Rotation
13205 @subsection Log Rotation
13206
13207 @cindex rottlog
13208 @cindex log rotation
13209 @cindex logging
13210 Log files such as those found in @file{/var/log} tend to grow endlessly,
13211 so it's a good idea to @dfn{rotate} them once in a while---i.e., archive
13212 their contents in separate files, possibly compressed. The @code{(gnu
13213 services admin)} module provides an interface to GNU@tie{}Rot[t]log, a
13214 log rotation tool (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}).
13215
13216 This service is part of @code{%base-services}, and thus enabled by
13217 default, with the default settings, for commonly encountered log files.
13218 The example below shows how to extend it with an additional
13219 @dfn{rotation}, should you need to do that (usually, services that
13220 produce log files already take care of that):
13221
13222 @lisp
13223 (use-modules (guix) (gnu))
13224 (use-service-modules admin)
13225
13226 (define my-log-files
13227 ;; Log files that I want to rotate.
13228 '("/var/log/something.log" "/var/log/another.log"))
13229
13230 (operating-system
13231 ;; @dots{}
13232 (services (cons (simple-service 'rotate-my-stuff
13233 rottlog-service-type
13234 (list (log-rotation
13235 (frequency 'daily)
13236 (files my-log-files))))
13237 %base-services)))
13238 @end lisp
13239
13240 @defvr {Scheme Variable} rottlog-service-type
13241 This is the type of the Rottlog service, whose value is a
13242 @code{rottlog-configuration} object.
13243
13244 Other services can extend this one with new @code{log-rotation} objects
13245 (see below), thereby augmenting the set of files to be rotated.
13246
13247 This service type can define mcron jobs (@pxref{Scheduled Job
13248 Execution}) to run the rottlog service.
13249 @end defvr
13250
13251 @deftp {Data Type} rottlog-configuration
13252 Data type representing the configuration of rottlog.
13253
13254 @table @asis
13255 @item @code{rottlog} (default: @code{rottlog})
13256 The Rottlog package to use.
13257
13258 @item @code{rc-file} (default: @code{(file-append rottlog "/etc/rc")})
13259 The Rottlog configuration file to use (@pxref{Mandatory RC Variables,,,
13260 rottlog, GNU Rot[t]log Manual}).
13261
13262 @item @code{rotations} (default: @code{%default-rotations})
13263 A list of @code{log-rotation} objects as defined below.
13264
13265 @item @code{jobs}
13266 This is a list of gexps where each gexp corresponds to an mcron job
13267 specification (@pxref{Scheduled Job Execution}).
13268 @end table
13269 @end deftp
13270
13271 @deftp {Data Type} log-rotation
13272 Data type representing the rotation of a group of log files.
13273
13274 Taking an example from the Rottlog manual (@pxref{Period Related File
13275 Examples,,, rottlog, GNU Rot[t]log Manual}), a log rotation might be
13276 defined like this:
13277
13278 @lisp
13279 (log-rotation
13280 (frequency 'daily)
13281 (files '("/var/log/apache/*"))
13282 (options '("storedir apache-archives"
13283 "rotate 6"
13284 "notifempty"
13285 "nocompress")))
13286 @end lisp
13287
13288 The list of fields is as follows:
13289
13290 @table @asis
13291 @item @code{frequency} (default: @code{'weekly})
13292 The log rotation frequency, a symbol.
13293
13294 @item @code{files}
13295 The list of files or file glob patterns to rotate.
13296
13297 @item @code{options} (default: @code{'()})
13298 The list of rottlog options for this rotation (@pxref{Configuration
13299 parameters,,, rottlog, GNU Rot[t]lg Manual}).
13300
13301 @item @code{post-rotate} (default: @code{#f})
13302 Either @code{#f} or a gexp to execute once the rotation has completed.
13303 @end table
13304 @end deftp
13305
13306 @defvr {Scheme Variable} %default-rotations
13307 Specifies weekly rotation of @var{%rotated-files} and of
13308 @file{/var/log/guix-daemon.log}.
13309 @end defvr
13310
13311 @defvr {Scheme Variable} %rotated-files
13312 The list of syslog-controlled files to be rotated. By default it is:
13313 @code{'("/var/log/messages" "/var/log/secure" "/var/log/debug" \
13314 "/var/log/maillog")}.
13315 @end defvr
13316
13317 @node Networking Services
13318 @subsection Networking Services
13319
13320 The @code{(gnu services networking)} module provides services to configure
13321 the network interface.
13322
13323 @cindex DHCP, networking service
13324 @defvr {Scheme Variable} dhcp-client-service-type
13325 This is the type of services that run @var{dhcp}, a Dynamic Host Configuration
13326 Protocol (DHCP) client, on all the non-loopback network interfaces. Its value
13327 is the DHCP client package to use, @code{isc-dhcp} by default.
13328 @end defvr
13329
13330 @deffn {Scheme Procedure} dhcpd-service-type
13331 This type defines a service that runs a DHCP daemon. To create a
13332 service of this type, you must supply a @code{<dhcpd-configuration>}.
13333 For example:
13334
13335 @lisp
13336 (service dhcpd-service-type
13337 (dhcpd-configuration
13338 (config-file (local-file "my-dhcpd.conf"))
13339 (interfaces '("enp0s25"))))
13340 @end lisp
13341 @end deffn
13342
13343 @deftp {Data Type} dhcpd-configuration
13344 @table @asis
13345 @item @code{package} (default: @code{isc-dhcp})
13346 The package that provides the DHCP daemon. This package is expected to
13347 provide the daemon at @file{sbin/dhcpd} relative to its output
13348 directory. The default package is the
13349 @uref{https://www.isc.org/products/DHCP, ISC's DHCP server}.
13350 @item @code{config-file} (default: @code{#f})
13351 The configuration file to use. This is required. It will be passed to
13352 @code{dhcpd} via its @code{-cf} option. This may be any ``file-like''
13353 object (@pxref{G-Expressions, file-like objects}). See @code{man
13354 dhcpd.conf} for details on the configuration file syntax.
13355 @item @code{version} (default: @code{"4"})
13356 The DHCP version to use. The ISC DHCP server supports the values ``4'',
13357 ``6'', and ``4o6''. These correspond to the @code{dhcpd} program
13358 options @code{-4}, @code{-6}, and @code{-4o6}. See @code{man dhcpd} for
13359 details.
13360 @item @code{run-directory} (default: @code{"/run/dhcpd"})
13361 The run directory to use. At service activation time, this directory
13362 will be created if it does not exist.
13363 @item @code{pid-file} (default: @code{"/run/dhcpd/dhcpd.pid"})
13364 The PID file to use. This corresponds to the @code{-pf} option of
13365 @code{dhcpd}. See @code{man dhcpd} for details.
13366 @item @code{interfaces} (default: @code{'()})
13367 The names of the network interfaces on which dhcpd should listen for
13368 broadcasts. If this list is not empty, then its elements (which must be
13369 strings) will be appended to the @code{dhcpd} invocation when starting
13370 the daemon. It may not be necessary to explicitly specify any
13371 interfaces here; see @code{man dhcpd} for details.
13372 @end table
13373 @end deftp
13374
13375 @defvr {Scheme Variable} static-networking-service-type
13376 This is the type for statically-configured network interfaces.
13377 @c TODO Document <static-networking> data structures.
13378 @end defvr
13379
13380 @deffn {Scheme Procedure} static-networking-service @var{interface} @var{ip} @
13381 [#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}] @
13382 [#:requirement @code{'(udev)}]
13383 Return a service that starts @var{interface} with address @var{ip}. If
13384 @var{netmask} is true, use it as the network mask. If @var{gateway} is true,
13385 it must be a string specifying the default network gateway. @var{requirement}
13386 can be used to declare a dependency on another service before configuring the
13387 interface.
13388
13389 This procedure can be called several times, one for each network
13390 interface of interest. Behind the scenes what it does is extend
13391 @code{static-networking-service-type} with additional network interfaces
13392 to handle.
13393
13394 For example:
13395
13396 @lisp
13397 (static-networking-service "eno1" "192.168.1.82"
13398 #:gateway "192.168.1.2"
13399 #:name-servers '("192.168.1.2"))
13400 @end lisp
13401 @end deffn
13402
13403 @cindex wicd
13404 @cindex wireless
13405 @cindex WiFi
13406 @cindex network management
13407 @deffn {Scheme Procedure} wicd-service [#:wicd @var{wicd}]
13408 Return a service that runs @url{https://launchpad.net/wicd,Wicd}, a network
13409 management daemon that aims to simplify wired and wireless networking.
13410
13411 This service adds the @var{wicd} package to the global profile, providing
13412 several commands to interact with the daemon and configure networking:
13413 @command{wicd-client}, a graphical user interface, and the @command{wicd-cli}
13414 and @command{wicd-curses} user interfaces.
13415 @end deffn
13416
13417 @cindex ModemManager
13418
13419 @defvr {Scheme Variable} modem-manager-service-type
13420 This is the service type for the
13421 @uref{https://wiki.gnome.org/Projects/ModemManager, ModemManager}
13422 service. The value for this service type is a
13423 @code{modem-manager-configuration} record.
13424
13425 This service is part of @code{%desktop-services} (@pxref{Desktop
13426 Services}).
13427 @end defvr
13428
13429 @deftp {Data Type} modem-manager-configuration
13430 Data type representing the configuration of ModemManager.
13431
13432 @table @asis
13433 @item @code{modem-manager} (default: @code{modem-manager})
13434 The ModemManager package to use.
13435
13436 @end table
13437 @end deftp
13438
13439 @cindex USB_ModeSwitch
13440 @cindex Modeswitching
13441
13442 @defvr {Scheme Variable} usb-modeswitch-service-type
13443 This is the service type for the
13444 @uref{https://www.draisberghof.de/usb_modeswitch/, USB_ModeSwitch} service. The
13445 value for this service type is a @code{usb-modeswitch-configuration} record.
13446
13447 When plugged in, some USB modems (and other USB devices) initially present
13448 themselves as a read-only storage medium and not as a modem. They need to be
13449 @dfn{modeswitched} before they are usable. The USB_ModeSwitch service type
13450 installs udev rules to automatically modeswitch these devices when they are
13451 plugged in.
13452
13453 This service is part of @code{%desktop-services} (@pxref{Desktop
13454 Services}).
13455 @end defvr
13456
13457 @deftp {Data Type} usb-modeswitch-configuration
13458 Data type representing the configuration of USB_ModeSwitch.
13459
13460 @table @asis
13461 @item @code{usb-modeswitch} (default: @code{usb-modeswitch})
13462 The USB_ModeSwitch package providing the binaries for modeswitching.
13463
13464 @item @code{usb-modeswitch-data} (default: @code{usb-modeswitch-data})
13465 The package providing the device data and udev rules file used by
13466 USB_ModeSwitch.
13467
13468 @item @code{config-file} (default: @code{#~(string-append #$usb-modeswitch:dispatcher "/etc/usb_modeswitch.conf")})
13469 Which config file to use for the USB_ModeSwitch dispatcher. By default the
13470 config file shipped with USB_ModeSwitch is used which disables logging to
13471 @file{/var/log} among other default settings. If set to @code{#f}, no config
13472 file is used.
13473
13474 @end table
13475 @end deftp
13476
13477 @cindex NetworkManager
13478
13479 @defvr {Scheme Variable} network-manager-service-type
13480 This is the service type for the
13481 @uref{https://wiki.gnome.org/Projects/NetworkManager, NetworkManager}
13482 service. The value for this service type is a
13483 @code{network-manager-configuration} record.
13484
13485 This service is part of @code{%desktop-services} (@pxref{Desktop
13486 Services}).
13487 @end defvr
13488
13489 @deftp {Data Type} network-manager-configuration
13490 Data type representing the configuration of NetworkManager.
13491
13492 @table @asis
13493 @item @code{network-manager} (default: @code{network-manager})
13494 The NetworkManager package to use.
13495
13496 @item @code{dns} (default: @code{"default"})
13497 Processing mode for DNS, which affects how NetworkManager uses the
13498 @code{resolv.conf} configuration file.
13499
13500 @table @samp
13501 @item default
13502 NetworkManager will update @code{resolv.conf} to reflect the nameservers
13503 provided by currently active connections.
13504
13505 @item dnsmasq
13506 NetworkManager will run @code{dnsmasq} as a local caching nameserver, using a
13507 @dfn{conditional forwarding} configuration if you are connected to a VPN, and
13508 then update @code{resolv.conf} to point to the local nameserver.
13509
13510 With this setting, you can share your network connection. For example when
13511 you want to share your network connection to another laptop @i{via} an
13512 Ethernet cable, you can open @command{nm-connection-editor} and configure the
13513 Wired connection's method for IPv4 and IPv6 to be ``Shared to other computers''
13514 and reestablish the connection (or reboot).
13515
13516 You can also set up a @dfn{host-to-guest connection} to QEMU VMs
13517 (@pxref{Installing Guix in a VM}). With a host-to-guest connection, you can
13518 e.g.@: access a Web server running on the VM (@pxref{Web Services}) from a Web
13519 browser on your host system, or connect to the VM @i{via} SSH
13520 (@pxref{Networking Services, @code{openssh-service-type}}). To set up a
13521 host-to-guest connection, run this command once:
13522
13523 @example
13524 nmcli connection add type tun \
13525 connection.interface-name tap0 \
13526 tun.mode tap tun.owner $(id -u) \
13527 ipv4.method shared \
13528 ipv4.addresses 172.28.112.1/24
13529 @end example
13530
13531 Then each time you launch your QEMU VM (@pxref{Running Guix in a VM}), pass
13532 @option{-nic tap,ifname=tap0,script=no,downscript=no} to
13533 @command{qemu-system-...}.
13534
13535 @item none
13536 NetworkManager will not modify @code{resolv.conf}.
13537 @end table
13538
13539 @item @code{vpn-plugins} (default: @code{'()})
13540 This is the list of available plugins for virtual private networks
13541 (VPNs). An example of this is the @code{network-manager-openvpn}
13542 package, which allows NetworkManager to manage VPNs @i{via} OpenVPN.
13543
13544 @end table
13545 @end deftp
13546
13547 @cindex Connman
13548 @deffn {Scheme Variable} connman-service-type
13549 This is the service type to run @url{https://01.org/connman,Connman},
13550 a network connection manager.
13551
13552 Its value must be an
13553 @code{connman-configuration} record as in this example:
13554
13555 @lisp
13556 (service connman-service-type
13557 (connman-configuration
13558 (disable-vpn? #t)))
13559 @end lisp
13560
13561 See below for details about @code{connman-configuration}.
13562 @end deffn
13563
13564 @deftp {Data Type} connman-configuration
13565 Data Type representing the configuration of connman.
13566
13567 @table @asis
13568 @item @code{connman} (default: @var{connman})
13569 The connman package to use.
13570
13571 @item @code{disable-vpn?} (default: @code{#f})
13572 When true, disable connman's vpn plugin.
13573 @end table
13574 @end deftp
13575
13576 @cindex WPA Supplicant
13577 @defvr {Scheme Variable} wpa-supplicant-service-type
13578 This is the service type to run @url{https://w1.fi/wpa_supplicant/,WPA
13579 supplicant}, an authentication daemon required to authenticate against
13580 encrypted WiFi or ethernet networks.
13581 @end defvr
13582
13583 @deftp {Data Type} wpa-supplicant-configuration
13584 Data type representing the configuration of WPA Supplicant.
13585
13586 It takes the following parameters:
13587
13588 @table @asis
13589 @item @code{wpa-supplicant} (default: @code{wpa-supplicant})
13590 The WPA Supplicant package to use.
13591
13592 @item @code{dbus?} (default: @code{#t})
13593 Whether to listen for requests on D-Bus.
13594
13595 @item @code{pid-file} (default: @code{"/var/run/wpa_supplicant.pid"})
13596 Where to store the PID file.
13597
13598 @item @code{interface} (default: @code{#f})
13599 If this is set, it must specify the name of a network interface that
13600 WPA supplicant will control.
13601
13602 @item @code{config-file} (default: @code{#f})
13603 Optional configuration file to use.
13604
13605 @item @code{extra-options} (default: @code{'()})
13606 List of additional command-line arguments to pass to the daemon.
13607 @end table
13608 @end deftp
13609
13610 @cindex iptables
13611 @defvr {Scheme Variable} iptables-service-type
13612 This is the service type to set up an iptables configuration. iptables is a
13613 packet filtering framework supported by the Linux kernel. This service
13614 supports configuring iptables for both IPv4 and IPv6. A simple example
13615 configuration rejecting all incoming connections except those to the ssh port
13616 22 is shown below.
13617
13618 @lisp
13619 (service iptables-service-type
13620 (iptables-configuration
13621 (ipv4-rules (plain-file "iptables.rules" "*filter
13622 :INPUT ACCEPT
13623 :FORWARD ACCEPT
13624 :OUTPUT ACCEPT
13625 -A INPUT -p tcp --dport 22 -j ACCEPT
13626 -A INPUT -j REJECT --reject-with icmp-port-unreachable
13627 COMMIT
13628 "))
13629 (ipv6-rules (plain-file "ip6tables.rules" "*filter
13630 :INPUT ACCEPT
13631 :FORWARD ACCEPT
13632 :OUTPUT ACCEPT
13633 -A INPUT -p tcp --dport 22 -j ACCEPT
13634 -A INPUT -j REJECT --reject-with icmp6-port-unreachable
13635 COMMIT
13636 "))))
13637 @end lisp
13638 @end defvr
13639
13640 @deftp {Data Type} iptables-configuration
13641 The data type representing the configuration of iptables.
13642
13643 @table @asis
13644 @item @code{iptables} (default: @code{iptables})
13645 The iptables package that provides @code{iptables-restore} and
13646 @code{ip6tables-restore}.
13647 @item @code{ipv4-rules} (default: @code{%iptables-accept-all-rules})
13648 The iptables rules to use. It will be passed to @code{iptables-restore}.
13649 This may be any ``file-like'' object (@pxref{G-Expressions, file-like
13650 objects}).
13651 @item @code{ipv6-rules} (default: @code{%iptables-accept-all-rules})
13652 The ip6tables rules to use. It will be passed to @code{ip6tables-restore}.
13653 This may be any ``file-like'' object (@pxref{G-Expressions, file-like
13654 objects}).
13655 @end table
13656 @end deftp
13657
13658 @cindex nftables
13659 @defvr {Scheme Variable} nftables-service-type
13660 This is the service type to set up a nftables configuration. nftables is a
13661 netfilter project that aims to replace the existing iptables, ip6tables,
13662 arptables and ebtables framework. It provides a new packet filtering
13663 framework, a new user-space utility @command{nft}, and a compatibility layer
13664 for iptables. This service comes with a default ruleset
13665 @code{%default-nftables-ruleset} that rejecting all incomming connections
13666 except those to the ssh port 22. To use it, simply write:
13667
13668 @lisp
13669 (service nftables-service-type)
13670 @end lisp
13671 @end defvr
13672
13673 @deftp {Data Type} nftables-configuration
13674 The data type representing the configuration of nftables.
13675
13676 @table @asis
13677 @item @code{package} (default: @code{nftables})
13678 The nftables package that provides @command{nft}.
13679 @item @code{ruleset} (default: @code{%default-nftables-ruleset})
13680 The nftables ruleset to use. This may be any ``file-like'' object
13681 (@pxref{G-Expressions, file-like objects}).
13682 @end table
13683 @end deftp
13684
13685 @cindex NTP (Network Time Protocol), service
13686 @cindex ntpd, service for the Network Time Protocol daemon
13687 @cindex real time clock
13688 @defvr {Scheme Variable} ntp-service-type
13689 This is the type of the service running the @uref{https://www.ntp.org,
13690 Network Time Protocol (NTP)} daemon, @command{ntpd}. The daemon will keep the
13691 system clock synchronized with that of the specified NTP servers.
13692
13693 The value of this service is an @code{ntpd-configuration} object, as described
13694 below.
13695 @end defvr
13696
13697 @deftp {Data Type} ntp-configuration
13698 This is the data type for the NTP service configuration.
13699
13700 @table @asis
13701 @item @code{servers} (default: @code{%ntp-servers})
13702 This is the list of servers (@code{<ntp-server>} records) with which
13703 @command{ntpd} will be synchronized. See the @code{ntp-server} data type
13704 definition below.
13705
13706 @item @code{allow-large-adjustment?} (default: @code{#t})
13707 This determines whether @command{ntpd} is allowed to make an initial
13708 adjustment of more than 1,000 seconds.
13709
13710 @item @code{ntp} (default: @code{ntp})
13711 The NTP package to use.
13712 @end table
13713 @end deftp
13714
13715 @defvr {Scheme Variable} %ntp-servers
13716 List of host names used as the default NTP servers. These are servers of the
13717 @uref{https://www.ntppool.org/en/, NTP Pool Project}.
13718 @end defvr
13719
13720 @deftp {Data Type} ntp-server
13721 The data type representing the configuration of a NTP server.
13722
13723 @table @asis
13724 @item @code{type} (default: @code{'server})
13725 The type of the NTP server, given as a symbol. One of @code{'pool},
13726 @code{'server}, @code{'peer}, @code{'broadcast} or @code{'manycastclient}.
13727
13728 @item @code{address}
13729 The address of the server, as a string.
13730
13731 @item @code{options}
13732 NTPD options to use with that specific server, given as a list of option names
13733 and/or of option names and values tuples. The following example define a server
13734 to use with the options @option{iburst} and @option{prefer}, as well as
13735 @option{version} 3 and a @option{maxpoll} time of 16 seconds.
13736
13737 @example
13738 (ntp-server
13739 (type 'server)
13740 (address "some.ntp.server.org")
13741 (options `(iburst (version 3) (maxpoll 16) prefer))))
13742 @end example
13743 @end table
13744 @end deftp
13745
13746 @cindex OpenNTPD
13747 @deffn {Scheme Procedure} openntpd-service-type
13748 Run the @command{ntpd}, the Network Time Protocol (NTP) daemon, as implemented
13749 by @uref{http://www.openntpd.org, OpenNTPD}. The daemon will keep the system
13750 clock synchronized with that of the given servers.
13751
13752 @lisp
13753 (service
13754 openntpd-service-type
13755 (openntpd-configuration
13756 (listen-on '("127.0.0.1" "::1"))
13757 (sensor '("udcf0 correction 70000"))
13758 (constraint-from '("www.gnu.org"))
13759 (constraints-from '("https://www.google.com/"))
13760 (allow-large-adjustment? #t)))
13761
13762 @end lisp
13763 @end deffn
13764
13765 @defvr {Scheme Variable} %openntpd-servers
13766 This variable is a list of the server addresses defined in
13767 @var{%ntp-servers}.
13768 @end defvr
13769
13770 @deftp {Data Type} openntpd-configuration
13771 @table @asis
13772 @item @code{openntpd} (default: @code{(file-append openntpd "/sbin/ntpd")})
13773 The openntpd executable to use.
13774 @item @code{listen-on} (default: @code{'("127.0.0.1" "::1")})
13775 A list of local IP addresses or hostnames the ntpd daemon should listen on.
13776 @item @code{query-from} (default: @code{'()})
13777 A list of local IP address the ntpd daemon should use for outgoing queries.
13778 @item @code{sensor} (default: @code{'()})
13779 Specify a list of timedelta sensor devices ntpd should use. @code{ntpd}
13780 will listen to each sensor that actually exists and ignore non-existent ones.
13781 See @uref{https://man.openbsd.org/ntpd.conf, upstream documentation} for more
13782 information.
13783 @item @code{server} (default: @code{'()})
13784 Specify a list of IP addresses or hostnames of NTP servers to synchronize to.
13785 @item @code{servers} (default: @var{%openntp-servers})
13786 Specify a list of IP addresses or hostnames of NTP pools to synchronize to.
13787 @item @code{constraint-from} (default: @code{'()})
13788 @code{ntpd} can be configured to query the ‘Date’ from trusted HTTPS servers via TLS.
13789 This time information is not used for precision but acts as an authenticated
13790 constraint, thereby reducing the impact of unauthenticated NTP
13791 man-in-the-middle attacks.
13792 Specify a list of URLs, IP addresses or hostnames of HTTPS servers to provide
13793 a constraint.
13794 @item @code{constraints-from} (default: @code{'()})
13795 As with constraint from, specify a list of URLs, IP addresses or hostnames of
13796 HTTPS servers to provide a constraint. Should the hostname resolve to multiple
13797 IP addresses, @code{ntpd} will calculate a median constraint from all of them.
13798 @item @code{allow-large-adjustment?} (default: @code{#f})
13799 Determines if @code{ntpd} is allowed to make an initial adjustment of more
13800 than 180 seconds.
13801 @end table
13802 @end deftp
13803
13804 @cindex inetd
13805 @deffn {Scheme variable} inetd-service-type
13806 This service runs the @command{inetd} (@pxref{inetd invocation,,,
13807 inetutils, GNU Inetutils}) daemon. @command{inetd} listens for
13808 connections on internet sockets, and lazily starts the specified server
13809 program when a connection is made on one of these sockets.
13810
13811 The value of this service is an @code{inetd-configuration} object. The
13812 following example configures the @command{inetd} daemon to provide the
13813 built-in @command{echo} service, as well as an smtp service which
13814 forwards smtp traffic over ssh to a server @code{smtp-server} behind a
13815 gateway @code{hostname}:
13816
13817 @lisp
13818 (service
13819 inetd-service-type
13820 (inetd-configuration
13821 (entries (list
13822 (inetd-entry
13823 (name "echo")
13824 (socket-type 'stream)
13825 (protocol "tcp")
13826 (wait? #f)
13827 (user "root"))
13828 (inetd-entry
13829 (node "127.0.0.1")
13830 (name "smtp")
13831 (socket-type 'stream)
13832 (protocol "tcp")
13833 (wait? #f)
13834 (user "root")
13835 (program (file-append openssh "/bin/ssh"))
13836 (arguments
13837 '("ssh" "-qT" "-i" "/path/to/ssh_key"
13838 "-W" "smtp-server:25" "user@@hostname")))))))
13839 @end lisp
13840
13841 See below for more details about @code{inetd-configuration}.
13842 @end deffn
13843
13844 @deftp {Data Type} inetd-configuration
13845 Data type representing the configuration of @command{inetd}.
13846
13847 @table @asis
13848 @item @code{program} (default: @code{(file-append inetutils "/libexec/inetd")})
13849 The @command{inetd} executable to use.
13850
13851 @item @code{entries} (default: @code{'()})
13852 A list of @command{inetd} service entries. Each entry should be created
13853 by the @code{inetd-entry} constructor.
13854 @end table
13855 @end deftp
13856
13857 @deftp {Data Type} inetd-entry
13858 Data type representing an entry in the @command{inetd} configuration.
13859 Each entry corresponds to a socket where @command{inetd} will listen for
13860 requests.
13861
13862 @table @asis
13863 @item @code{node} (default: @code{#f})
13864 Optional string, a comma-separated list of local addresses
13865 @command{inetd} should use when listening for this service.
13866 @xref{Configuration file,,, inetutils, GNU Inetutils} for a complete
13867 description of all options.
13868 @item @code{name}
13869 A string, the name must correspond to an entry in @code{/etc/services}.
13870 @item @code{socket-type}
13871 One of @code{'stream}, @code{'dgram}, @code{'raw}, @code{'rdm} or
13872 @code{'seqpacket}.
13873 @item @code{protocol}
13874 A string, must correspond to an entry in @code{/etc/protocols}.
13875 @item @code{wait?} (default: @code{#t})
13876 Whether @command{inetd} should wait for the server to exit before
13877 listening to new service requests.
13878 @item @code{user}
13879 A string containing the user (and, optionally, group) name of the user
13880 as whom the server should run. The group name can be specified in a
13881 suffix, separated by a colon or period, i.e.@: @code{"user"},
13882 @code{"user:group"} or @code{"user.group"}.
13883 @item @code{program} (default: @code{"internal"})
13884 The server program which will serve the requests, or @code{"internal"}
13885 if @command{inetd} should use a built-in service.
13886 @item @code{arguments} (default: @code{'()})
13887 A list strings or file-like objects, which are the server program's
13888 arguments, starting with the zeroth argument, i.e.@: the name of the
13889 program itself. For @command{inetd}'s internal services, this entry
13890 must be @code{'()} or @code{'("internal")}.
13891 @end table
13892
13893 @xref{Configuration file,,, inetutils, GNU Inetutils} for a more
13894 detailed discussion of each configuration field.
13895 @end deftp
13896
13897 @cindex Tor
13898 @defvr {Scheme Variable} tor-service-type
13899 This is the type for a service that runs the @uref{https://torproject.org,
13900 Tor} anonymous networking daemon. The service is configured using a
13901 @code{<tor-configuration>} record. By default, the Tor daemon runs as the
13902 @code{tor} unprivileged user, which is a member of the @code{tor} group.
13903
13904 @end defvr
13905
13906 @deftp {Data Type} tor-configuration
13907 @table @asis
13908 @item @code{tor} (default: @code{tor})
13909 The package that provides the Tor daemon. This package is expected to provide
13910 the daemon at @file{bin/tor} relative to its output directory. The default
13911 package is the @uref{https://www.torproject.org, Tor Project's}
13912 implementation.
13913
13914 @item @code{config-file} (default: @code{(plain-file "empty" "")})
13915 The configuration file to use. It will be appended to a default configuration
13916 file, and the final configuration file will be passed to @code{tor} via its
13917 @code{-f} option. This may be any ``file-like'' object (@pxref{G-Expressions,
13918 file-like objects}). See @code{man tor} for details on the configuration file
13919 syntax.
13920
13921 @item @code{hidden-services} (default: @code{'()})
13922 The list of @code{<hidden-service>} records to use. For any hidden service
13923 you include in this list, appropriate configuration to enable the hidden
13924 service will be automatically added to the default configuration file. You
13925 may conveniently create @code{<hidden-service>} records using the
13926 @code{tor-hidden-service} procedure described below.
13927
13928 @item @code{socks-socket-type} (default: @code{'tcp})
13929 The default socket type that Tor should use for its SOCKS socket. This must
13930 be either @code{'tcp} or @code{'unix}. If it is @code{'tcp}, then by default
13931 Tor will listen on TCP port 9050 on the loopback interface (i.e., localhost).
13932 If it is @code{'unix}, then Tor will listen on the UNIX domain socket
13933 @file{/var/run/tor/socks-sock}, which will be made writable by members of the
13934 @code{tor} group.
13935
13936 If you want to customize the SOCKS socket in more detail, leave
13937 @code{socks-socket-type} at its default value of @code{'tcp} and use
13938 @code{config-file} to override the default by providing your own
13939 @code{SocksPort} option.
13940 @end table
13941 @end deftp
13942
13943 @cindex hidden service
13944 @deffn {Scheme Procedure} tor-hidden-service @var{name} @var{mapping}
13945 Define a new Tor @dfn{hidden service} called @var{name} and implementing
13946 @var{mapping}. @var{mapping} is a list of port/host tuples, such as:
13947
13948 @example
13949 '((22 "127.0.0.1:22")
13950 (80 "127.0.0.1:8080"))
13951 @end example
13952
13953 In this example, port 22 of the hidden service is mapped to local port 22, and
13954 port 80 is mapped to local port 8080.
13955
13956 This creates a @file{/var/lib/tor/hidden-services/@var{name}} directory, where
13957 the @file{hostname} file contains the @code{.onion} host name for the hidden
13958 service.
13959
13960 See @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, the Tor
13961 project's documentation} for more information.
13962 @end deffn
13963
13964 The @code{(gnu services rsync)} module provides the following services:
13965
13966 You might want an rsync daemon if you have files that you want available
13967 so anyone (or just yourself) can download existing files or upload new
13968 files.
13969
13970 @deffn {Scheme Variable} rsync-service-type
13971 This is the service type for the @uref{https://rsync.samba.org, rsync} daemon,
13972 The value for this service type is a
13973 @command{rsync-configuration} record as in this example:
13974
13975 @lisp
13976 (service rsync-service-type)
13977 @end lisp
13978
13979 See below for details about @code{rsync-configuration}.
13980 @end deffn
13981
13982 @deftp {Data Type} rsync-configuration
13983 Data type representing the configuration for @code{rsync-service}.
13984
13985 @table @asis
13986 @item @code{package} (default: @var{rsync})
13987 @code{rsync} package to use.
13988
13989 @item @code{port-number} (default: @code{873})
13990 TCP port on which @command{rsync} listens for incoming connections. If port
13991 is less than @code{1024} @command{rsync} needs to be started as the
13992 @code{root} user and group.
13993
13994 @item @code{pid-file} (default: @code{"/var/run/rsyncd/rsyncd.pid"})
13995 Name of the file where @command{rsync} writes its PID.
13996
13997 @item @code{lock-file} (default: @code{"/var/run/rsyncd/rsyncd.lock"})
13998 Name of the file where @command{rsync} writes its lock file.
13999
14000 @item @code{log-file} (default: @code{"/var/log/rsyncd.log"})
14001 Name of the file where @command{rsync} writes its log file.
14002
14003 @item @code{use-chroot?} (default: @var{#t})
14004 Whether to use chroot for @command{rsync} shared directory.
14005
14006 @item @code{share-path} (default: @file{/srv/rsync})
14007 Location of the @command{rsync} shared directory.
14008
14009 @item @code{share-comment} (default: @code{"Rsync share"})
14010 Comment of the @command{rsync} shared directory.
14011
14012 @item @code{read-only?} (default: @var{#f})
14013 Read-write permissions to shared directory.
14014
14015 @item @code{timeout} (default: @code{300})
14016 I/O timeout in seconds.
14017
14018 @item @code{user} (default: @var{"root"})
14019 Owner of the @code{rsync} process.
14020
14021 @item @code{group} (default: @var{"root"})
14022 Group of the @code{rsync} process.
14023
14024 @item @code{uid} (default: @var{"rsyncd"})
14025 User name or user ID that file transfers to and from that module should take
14026 place as when the daemon was run as @code{root}.
14027
14028 @item @code{gid} (default: @var{"rsyncd"})
14029 Group name or group ID that will be used when accessing the module.
14030
14031 @end table
14032 @end deftp
14033
14034 Furthermore, @code{(gnu services ssh)} provides the following services.
14035 @cindex SSH
14036 @cindex SSH server
14037
14038 @deffn {Scheme Procedure} lsh-service [#:host-key "/etc/lsh/host-key"] @
14039 [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
14040 [#:allow-empty-passwords? #f] [#:root-login? #f] @
14041 [#:syslog-output? #t] [#:x11-forwarding? #t] @
14042 [#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
14043 [#:public-key-authentication? #t] [#:initialize? #t]
14044 Run the @command{lshd} program from @var{lsh} to listen on port @var{port-number}.
14045 @var{host-key} must designate a file containing the host key, and readable
14046 only by root.
14047
14048 When @var{daemonic?} is true, @command{lshd} will detach from the
14049 controlling terminal and log its output to syslogd, unless one sets
14050 @var{syslog-output?} to false. Obviously, it also makes lsh-service
14051 depend on existence of syslogd service. When @var{pid-file?} is true,
14052 @command{lshd} writes its PID to the file called @var{pid-file}.
14053
14054 When @var{initialize?} is true, automatically create the seed and host key
14055 upon service activation if they do not exist yet. This may take long and
14056 require interaction.
14057
14058 When @var{initialize?} is false, it is up to the user to initialize the
14059 randomness generator (@pxref{lsh-make-seed,,, lsh, LSH Manual}), and to create
14060 a key pair with the private key stored in file @var{host-key} (@pxref{lshd
14061 basics,,, lsh, LSH Manual}).
14062
14063 When @var{interfaces} is empty, lshd listens for connections on all the
14064 network interfaces; otherwise, @var{interfaces} must be a list of host names
14065 or addresses.
14066
14067 @var{allow-empty-passwords?} specifies whether to accept log-ins with empty
14068 passwords, and @var{root-login?} specifies whether to accept log-ins as
14069 root.
14070
14071 The other options should be self-descriptive.
14072 @end deffn
14073
14074 @cindex SSH
14075 @cindex SSH server
14076 @deffn {Scheme Variable} openssh-service-type
14077 This is the type for the @uref{http://www.openssh.org, OpenSSH} secure
14078 shell daemon, @command{sshd}. Its value must be an
14079 @code{openssh-configuration} record as in this example:
14080
14081 @lisp
14082 (service openssh-service-type
14083 (openssh-configuration
14084 (x11-forwarding? #t)
14085 (permit-root-login 'without-password)
14086 (authorized-keys
14087 `(("alice" ,(local-file "alice.pub"))
14088 ("bob" ,(local-file "bob.pub"))))))
14089 @end lisp
14090
14091 See below for details about @code{openssh-configuration}.
14092
14093 This service can be extended with extra authorized keys, as in this
14094 example:
14095
14096 @lisp
14097 (service-extension openssh-service-type
14098 (const `(("charlie"
14099 ,(local-file "charlie.pub")))))
14100 @end lisp
14101 @end deffn
14102
14103 @deftp {Data Type} openssh-configuration
14104 This is the configuration record for OpenSSH's @command{sshd}.
14105
14106 @table @asis
14107 @item @code{pid-file} (default: @code{"/var/run/sshd.pid"})
14108 Name of the file where @command{sshd} writes its PID.
14109
14110 @item @code{port-number} (default: @code{22})
14111 TCP port on which @command{sshd} listens for incoming connections.
14112
14113 @item @code{permit-root-login} (default: @code{#f})
14114 This field determines whether and when to allow logins as root. If
14115 @code{#f}, root logins are disallowed; if @code{#t}, they are allowed.
14116 If it's the symbol @code{'without-password}, then root logins are
14117 permitted but not with password-based authentication.
14118
14119 @item @code{allow-empty-passwords?} (default: @code{#f})
14120 When true, users with empty passwords may log in. When false, they may
14121 not.
14122
14123 @item @code{password-authentication?} (default: @code{#t})
14124 When true, users may log in with their password. When false, they have
14125 other authentication methods.
14126
14127 @item @code{public-key-authentication?} (default: @code{#t})
14128 When true, users may log in using public key authentication. When
14129 false, users have to use other authentication method.
14130
14131 Authorized public keys are stored in @file{~/.ssh/authorized_keys}.
14132 This is used only by protocol version 2.
14133
14134 @item @code{x11-forwarding?} (default: @code{#f})
14135 When true, forwarding of X11 graphical client connections is
14136 enabled---in other words, @command{ssh} options @option{-X} and
14137 @option{-Y} will work.
14138
14139 @item @code{allow-agent-forwarding?} (default: @code{#t})
14140 Whether to allow agent forwarding.
14141
14142 @item @code{allow-tcp-forwarding?} (default: @code{#t})
14143 Whether to allow TCP forwarding.
14144
14145 @item @code{gateway-ports?} (default: @code{#f})
14146 Whether to allow gateway ports.
14147
14148 @item @code{challenge-response-authentication?} (default: @code{#f})
14149 Specifies whether challenge response authentication is allowed (e.g.@: via
14150 PAM).
14151
14152 @item @code{use-pam?} (default: @code{#t})
14153 Enables the Pluggable Authentication Module interface. If set to
14154 @code{#t}, this will enable PAM authentication using
14155 @code{challenge-response-authentication?} and
14156 @code{password-authentication?}, in addition to PAM account and session
14157 module processing for all authentication types.
14158
14159 Because PAM challenge response authentication usually serves an
14160 equivalent role to password authentication, you should disable either
14161 @code{challenge-response-authentication?} or
14162 @code{password-authentication?}.
14163
14164 @item @code{print-last-log?} (default: @code{#t})
14165 Specifies whether @command{sshd} should print the date and time of the
14166 last user login when a user logs in interactively.
14167
14168 @item @code{subsystems} (default: @code{'(("sftp" "internal-sftp"))})
14169 Configures external subsystems (e.g.@: file transfer daemon).
14170
14171 This is a list of two-element lists, each of which containing the
14172 subsystem name and a command (with optional arguments) to execute upon
14173 subsystem request.
14174
14175 The command @command{internal-sftp} implements an in-process SFTP
14176 server. Alternately, one can specify the @command{sftp-server} command:
14177 @lisp
14178 (service openssh-service-type
14179 (openssh-configuration
14180 (subsystems
14181 `(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))
14182 @end lisp
14183
14184 @item @code{accepted-environment} (default: @code{'()})
14185 List of strings describing which environment variables may be exported.
14186
14187 Each string gets on its own line. See the @code{AcceptEnv} option in
14188 @code{man sshd_config}.
14189
14190 This example allows ssh-clients to export the @code{COLORTERM} variable.
14191 It is set by terminal emulators, which support colors. You can use it in
14192 your shell's resource file to enable colors for the prompt and commands
14193 if this variable is set.
14194
14195 @lisp
14196 (service openssh-service-type
14197 (openssh-configuration
14198 (accepted-environment '("COLORTERM"))))
14199 @end lisp
14200
14201 @item @code{authorized-keys} (default: @code{'()})
14202 @cindex authorized keys, SSH
14203 @cindex SSH authorized keys
14204 This is the list of authorized keys. Each element of the list is a user
14205 name followed by one or more file-like objects that represent SSH public
14206 keys. For example:
14207
14208 @lisp
14209 (openssh-configuration
14210 (authorized-keys
14211 `(("rekado" ,(local-file "rekado.pub"))
14212 ("chris" ,(local-file "chris.pub"))
14213 ("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))
14214 @end lisp
14215
14216 @noindent
14217 registers the specified public keys for user accounts @code{rekado},
14218 @code{chris}, and @code{root}.
14219
14220 Additional authorized keys can be specified @i{via}
14221 @code{service-extension}.
14222
14223 Note that this does @emph{not} interfere with the use of
14224 @file{~/.ssh/authorized_keys}.
14225
14226 @item @code{log-level} (default: @code{'info})
14227 This is a symbol specifying the logging level: @code{quiet}, @code{fatal},
14228 @code{error}, @code{info}, @code{verbose}, @code{debug}, etc. See the man
14229 page for @file{sshd_config} for the full list of level names.
14230
14231 @item @code{extra-content} (default: @code{""})
14232 This field can be used to append arbitrary text to the configuration file. It
14233 is especially useful for elaborate configurations that cannot be expressed
14234 otherwise. This configuration, for example, would generally disable root
14235 logins, but permit them from one specific IP address:
14236
14237 @lisp
14238 (openssh-configuration
14239 (extra-content "\
14240 Match Address 192.168.0.1
14241 PermitRootLogin yes"))
14242 @end lisp
14243
14244 @end table
14245 @end deftp
14246
14247 @deffn {Scheme Procedure} dropbear-service [@var{config}]
14248 Run the @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,Dropbear SSH
14249 daemon} with the given @var{config}, a @code{<dropbear-configuration>}
14250 object.
14251
14252 For example, to specify a Dropbear service listening on port 1234, add
14253 this call to the operating system's @code{services} field:
14254
14255 @lisp
14256 (dropbear-service (dropbear-configuration
14257 (port-number 1234)))
14258 @end lisp
14259 @end deffn
14260
14261 @deftp {Data Type} dropbear-configuration
14262 This data type represents the configuration of a Dropbear SSH daemon.
14263
14264 @table @asis
14265 @item @code{dropbear} (default: @var{dropbear})
14266 The Dropbear package to use.
14267
14268 @item @code{port-number} (default: 22)
14269 The TCP port where the daemon waits for incoming connections.
14270
14271 @item @code{syslog-output?} (default: @code{#t})
14272 Whether to enable syslog output.
14273
14274 @item @code{pid-file} (default: @code{"/var/run/dropbear.pid"})
14275 File name of the daemon's PID file.
14276
14277 @item @code{root-login?} (default: @code{#f})
14278 Whether to allow @code{root} logins.
14279
14280 @item @code{allow-empty-passwords?} (default: @code{#f})
14281 Whether to allow empty passwords.
14282
14283 @item @code{password-authentication?} (default: @code{#t})
14284 Whether to enable password-based authentication.
14285 @end table
14286 @end deftp
14287
14288 @defvr {Scheme Variable} %facebook-host-aliases
14289 This variable contains a string for use in @file{/etc/hosts}
14290 (@pxref{Host Names,,, libc, The GNU C Library Reference Manual}). Each
14291 line contains a entry that maps a known server name of the Facebook
14292 on-line service---e.g., @code{www.facebook.com}---to the local
14293 host---@code{127.0.0.1} or its IPv6 equivalent, @code{::1}.
14294
14295 This variable is typically used in the @code{hosts-file} field of an
14296 @code{operating-system} declaration (@pxref{operating-system Reference,
14297 @file{/etc/hosts}}):
14298
14299 @lisp
14300 (use-modules (gnu) (guix))
14301
14302 (operating-system
14303 (host-name "mymachine")
14304 ;; ...
14305 (hosts-file
14306 ;; Create a /etc/hosts file with aliases for "localhost"
14307 ;; and "mymachine", as well as for Facebook servers.
14308 (plain-file "hosts"
14309 (string-append (local-host-aliases host-name)
14310 %facebook-host-aliases))))
14311 @end lisp
14312
14313 This mechanism can prevent programs running locally, such as Web
14314 browsers, from accessing Facebook.
14315 @end defvr
14316
14317 The @code{(gnu services avahi)} provides the following definition.
14318
14319 @defvr {Scheme Variable} avahi-service-type
14320 This is the service that runs @command{avahi-daemon}, a system-wide
14321 mDNS/DNS-SD responder that allows for service discovery and
14322 ``zero-configuration'' host name lookups (see @uref{https://avahi.org/}).
14323 Its value must be a @code{zero-configuration} record---see below.
14324
14325 This service extends the name service cache daemon (nscd) so that it can
14326 resolve @code{.local} host names using
14327 @uref{https://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. @xref{Name
14328 Service Switch}, for information on host name resolution.
14329
14330 Additionally, add the @var{avahi} package to the system profile so that
14331 commands such as @command{avahi-browse} are directly usable.
14332 @end defvr
14333
14334 @deftp {Data Type} avahi-configuration
14335 Data type representation the configuration for Avahi.
14336
14337 @table @asis
14338
14339 @item @code{host-name} (default: @code{#f})
14340 If different from @code{#f}, use that as the host name to
14341 publish for this machine; otherwise, use the machine's actual host name.
14342
14343 @item @code{publish?} (default: @code{#t})
14344 When true, allow host names and services to be published (broadcast) over the
14345 network.
14346
14347 @item @code{publish-workstation?} (default: @code{#t})
14348 When true, @command{avahi-daemon} publishes the machine's host name and IP
14349 address via mDNS on the local network. To view the host names published on
14350 your local network, you can run:
14351
14352 @example
14353 avahi-browse _workstation._tcp
14354 @end example
14355
14356 @item @code{wide-area?} (default: @code{#f})
14357 When true, DNS-SD over unicast DNS is enabled.
14358
14359 @item @code{ipv4?} (default: @code{#t})
14360 @itemx @code{ipv6?} (default: @code{#t})
14361 These fields determine whether to use IPv4/IPv6 sockets.
14362
14363 @item @code{domains-to-browse} (default: @code{'()})
14364 This is a list of domains to browse.
14365 @end table
14366 @end deftp
14367
14368 @deffn {Scheme Variable} openvswitch-service-type
14369 This is the type of the @uref{https://www.openvswitch.org, Open vSwitch}
14370 service, whose value should be an @code{openvswitch-configuration}
14371 object.
14372 @end deffn
14373
14374 @deftp {Data Type} openvswitch-configuration
14375 Data type representing the configuration of Open vSwitch, a multilayer
14376 virtual switch which is designed to enable massive network automation
14377 through programmatic extension.
14378
14379 @table @asis
14380 @item @code{package} (default: @var{openvswitch})
14381 Package object of the Open vSwitch.
14382
14383 @end table
14384 @end deftp
14385
14386 @defvr {Scheme Variable} pagekite-service-type
14387 This is the service type for the @uref{https://pagekite.net, PageKite} service,
14388 a tunneling solution for making localhost servers publicly visible, even from
14389 behind restrictive firewalls or NAT without forwarded ports. The value for
14390 this service type is a @code{pagekite-configuration} record.
14391
14392 Here's an example exposing the local HTTP and SSH daemons:
14393
14394 @lisp
14395 (service pagekite-service-type
14396 (pagekite-configuration
14397 (kites '("http:@@kitename:localhost:80:@@kitesecret"
14398 "raw/22:@@kitename:localhost:22:@@kitesecret"))
14399 (extra-file "/etc/pagekite.rc")))
14400 @end lisp
14401 @end defvr
14402
14403 @deftp {Data Type} pagekite-configuration
14404 Data type representing the configuration of PageKite.
14405
14406 @table @asis
14407 @item @code{package} (default: @var{pagekite})
14408 Package object of PageKite.
14409
14410 @item @code{kitename} (default: @code{#f})
14411 PageKite name for authenticating to the frontend server.
14412
14413 @item @code{kitesecret} (default: @code{#f})
14414 Shared secret for authenticating to the frontend server. You should probably
14415 put this inside @code{extra-file} instead.
14416
14417 @item @code{frontend} (default: @code{#f})
14418 Connect to the named PageKite frontend server instead of the
14419 @uref{https://pagekite.net,,pagekite.net} service.
14420
14421 @item @code{kites} (default: @code{'("http:@@kitename:localhost:80:@@kitesecret")})
14422 List of service kites to use. Exposes HTTP on port 80 by default. The format
14423 is @code{proto:kitename:host:port:secret}.
14424
14425 @item @code{extra-file} (default: @code{#f})
14426 Extra configuration file to read, which you are expected to create manually.
14427 Use this to add additional options and manage shared secrets out-of-band.
14428
14429 @end table
14430 @end deftp
14431
14432 @node X Window
14433 @subsection X Window
14434
14435 @cindex X11
14436 @cindex X Window System
14437 @cindex login manager
14438 Support for the X Window graphical display system---specifically
14439 Xorg---is provided by the @code{(gnu services xorg)} module. Note that
14440 there is no @code{xorg-service} procedure. Instead, the X server is
14441 started by the @dfn{login manager}, by default the GNOME Display Manager (GDM).
14442
14443 @cindex GDM
14444 @cindex GNOME, login manager
14445 GDM of course allows users to log in into window managers and desktop
14446 environments other than GNOME; for those using GNOME, GDM is required for
14447 features such as automatic screen locking.
14448
14449 @cindex window manager
14450 To use X11, you must install at least one @dfn{window manager}---for
14451 example the @code{windowmaker} or @code{openbox} packages---preferably
14452 by adding it to the @code{packages} field of your operating system
14453 definition (@pxref{operating-system Reference, system-wide packages}).
14454
14455 @defvr {Scheme Variable} gdm-service-type
14456 This is the type for the @uref{https://wiki.gnome.org/Projects/GDM/, GNOME
14457 Desktop Manager} (GDM), a program that manages graphical display servers and
14458 handles graphical user logins. Its value must be a @code{gdm-configuration}
14459 (see below.)
14460
14461 @cindex session types (X11)
14462 @cindex X11 session types
14463 GDM looks for @dfn{session types} described by the @file{.desktop} files in
14464 @file{/run/current-system/profile/share/xsessions} and allows users to choose
14465 a session from the log-in screen. Packages such as @code{gnome}, @code{xfce},
14466 and @code{i3} provide @file{.desktop} files; adding them to the system-wide
14467 set of packages automatically makes them available at the log-in screen.
14468
14469 In addition, @file{~/.xsession} files are honored. When available,
14470 @file{~/.xsession} must be an executable that starts a window manager
14471 and/or other X clients.
14472 @end defvr
14473
14474 @deftp {Data Type} gdm-configuration
14475 @table @asis
14476 @item @code{auto-login?} (default: @code{#f})
14477 @itemx @code{default-user} (default: @code{#f})
14478 When @code{auto-login?} is false, GDM presents a log-in screen.
14479
14480 When @code{auto-login?} is true, GDM logs in directly as
14481 @code{default-user}.
14482
14483 @item @code{debug?} (default: @code{#f})
14484 When true, GDM writes debug messages to its log.
14485
14486 @item @code{gnome-shell-assets} (default: ...)
14487 List of GNOME Shell assets needed by GDM: icon theme, fonts, etc.
14488
14489 @item @code{xorg-configuration} (default: @code{(xorg-configuration)})
14490 Configuration of the Xorg graphical server.
14491
14492 @item @code{xsession} (default: @code{(xinitrc)})
14493 Script to run before starting a X session.
14494
14495 @item @code{dbus-daemon} (default: @code{dbus-daemon-wrapper})
14496 File name of the @code{dbus-daemon} executable.
14497
14498 @item @code{gdm} (default: @code{gdm})
14499 The GDM package to use.
14500 @end table
14501 @end deftp
14502
14503 @defvr {Scheme Variable} slim-service-type
14504 This is the type for the SLiM graphical login manager for X11.
14505
14506 Like GDM, SLiM looks for session types described by @file{.desktop} files and
14507 allows users to choose a session from the log-in screen using @kbd{F1}. It
14508 also honors @file{~/.xsession} files.
14509
14510 Unlike GDM, SLiM does not spawn the user session on a different VT after
14511 logging in, which means that you can only start one graphical session. If you
14512 want to be able to run multiple graphical sessions at the same time you have
14513 to add multiple SLiM services to your system services. The following example
14514 shows how to replace the default GDM service with two SLiM services on tty7
14515 and tty8.
14516
14517 @lisp
14518 (use-modules (gnu services)
14519 (gnu services desktop)
14520 (gnu services xorg)
14521 (srfi srfi-1)) ;for 'remove'
14522
14523 (operating-system
14524 ;; ...
14525 (services (cons* (service slim-service-type (slim-configuration
14526 (display ":0")
14527 (vt "vt7")))
14528 (service slim-service-type (slim-configuration
14529 (display ":1")
14530 (vt "vt8")))
14531 (remove (lambda (service)
14532 (eq? (service-kind service) gdm-service-type))
14533 %desktop-services))))
14534 @end lisp
14535
14536 @end defvr
14537
14538 @deftp {Data Type} slim-configuration
14539 Data type representing the configuration of @code{slim-service-type}.
14540
14541 @table @asis
14542 @item @code{allow-empty-passwords?} (default: @code{#t})
14543 Whether to allow logins with empty passwords.
14544
14545 @item @code{auto-login?} (default: @code{#f})
14546 @itemx @code{default-user} (default: @code{""})
14547 When @code{auto-login?} is false, SLiM presents a log-in screen.
14548
14549 When @code{auto-login?} is true, SLiM logs in directly as
14550 @code{default-user}.
14551
14552 @item @code{theme} (default: @code{%default-slim-theme})
14553 @itemx @code{theme-name} (default: @code{%default-slim-theme-name})
14554 The graphical theme to use and its name.
14555
14556 @item @code{auto-login-session} (default: @code{#f})
14557 If true, this must be the name of the executable to start as the default
14558 session---e.g., @code{(file-append windowmaker "/bin/windowmaker")}.
14559
14560 If false, a session described by one of the available @file{.desktop}
14561 files in @code{/run/current-system/profile} and @code{~/.guix-profile}
14562 will be used.
14563
14564 @quotation Note
14565 You must install at least one window manager in the system profile or in
14566 your user profile. Failing to do that, if @code{auto-login-session} is
14567 false, you will be unable to log in.
14568 @end quotation
14569
14570 @item @code{xorg-configuration} (default @code{(xorg-configuration)})
14571 Configuration of the Xorg graphical server.
14572
14573 @item @code{display} (default @code{":0"})
14574 The display on which to start the Xorg graphical server.
14575
14576 @item @code{vt} (default @code{"vt7"})
14577 The VT on which to start the Xorg graphical server.
14578
14579 @item @code{xauth} (default: @code{xauth})
14580 The XAuth package to use.
14581
14582 @item @code{shepherd} (default: @code{shepherd})
14583 The Shepherd package used when invoking @command{halt} and
14584 @command{reboot}.
14585
14586 @item @code{sessreg} (default: @code{sessreg})
14587 The sessreg package used in order to register the session.
14588
14589 @item @code{slim} (default: @code{slim})
14590 The SLiM package to use.
14591 @end table
14592 @end deftp
14593
14594 @defvr {Scheme Variable} %default-theme
14595 @defvrx {Scheme Variable} %default-theme-name
14596 The default SLiM theme and its name.
14597 @end defvr
14598
14599
14600 @deftp {Data Type} sddm-configuration
14601 This is the data type representing the sddm service configuration.
14602
14603 @table @asis
14604 @item @code{display-server} (default: "x11")
14605 Select display server to use for the greeter. Valid values are "x11"
14606 or "wayland".
14607
14608 @item @code{numlock} (default: "on")
14609 Valid values are "on", "off" or "none".
14610
14611 @item @code{halt-command} (default @code{#~(string-apppend #$shepherd "/sbin/halt")})
14612 Command to run when halting.
14613
14614 @item @code{reboot-command} (default @code{#~(string-append #$shepherd "/sbin/reboot")})
14615 Command to run when rebooting.
14616
14617 @item @code{theme} (default "maldives")
14618 Theme to use. Default themes provided by SDDM are "elarun", "maldives" or "maya".
14619
14620 @item @code{themes-directory} (default "/run/current-system/profile/share/sddm/themes")
14621 Directory to look for themes.
14622
14623 @item @code{faces-directory} (default "/run/current-system/profile/share/sddm/faces")
14624 Directory to look for faces.
14625
14626 @item @code{default-path} (default "/run/current-system/profile/bin")
14627 Default PATH to use.
14628
14629 @item @code{minimum-uid} (default: 1000)
14630 Minimum UID displayed in SDDM and allowed for log-in.
14631
14632 @item @code{maximum-uid} (default: 2000)
14633 Maximum UID to display in SDDM.
14634
14635 @item @code{remember-last-user?} (default #t)
14636 Remember last user.
14637
14638 @item @code{remember-last-session?} (default #t)
14639 Remember last session.
14640
14641 @item @code{hide-users} (default "")
14642 Usernames to hide from SDDM greeter.
14643
14644 @item @code{hide-shells} (default @code{#~(string-append #$shadow "/sbin/nologin")})
14645 Users with shells listed will be hidden from the SDDM greeter.
14646
14647 @item @code{session-command} (default @code{#~(string-append #$sddm "/share/sddm/scripts/wayland-session")})
14648 Script to run before starting a wayland session.
14649
14650 @item @code{sessions-directory} (default "/run/current-system/profile/share/wayland-sessions")
14651 Directory to look for desktop files starting wayland sessions.
14652
14653 @item @code{xorg-configuration} (default @code{(xorg-configuration)})
14654 Configuration of the Xorg graphical server.
14655
14656 @item @code{xauth-path} (default @code{#~(string-append #$xauth "/bin/xauth")})
14657 Path to xauth.
14658
14659 @item @code{xephyr-path} (default @code{#~(string-append #$xorg-server "/bin/Xephyr")})
14660 Path to Xephyr.
14661
14662 @item @code{xdisplay-start} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xsetup")})
14663 Script to run after starting xorg-server.
14664
14665 @item @code{xdisplay-stop} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xstop")})
14666 Script to run before stopping xorg-server.
14667
14668 @item @code{xsession-command} (default: @code{xinitrc})
14669 Script to run before starting a X session.
14670
14671 @item @code{xsessions-directory} (default: "/run/current-system/profile/share/xsessions")
14672 Directory to look for desktop files starting X sessions.
14673
14674 @item @code{minimum-vt} (default: 7)
14675 Minimum VT to use.
14676
14677 @item @code{auto-login-user} (default "")
14678 User to use for auto-login.
14679
14680 @item @code{auto-login-session} (default "")
14681 Desktop file to use for auto-login.
14682
14683 @item @code{relogin?} (default #f)
14684 Relogin after logout.
14685
14686 @end table
14687 @end deftp
14688
14689 @cindex login manager
14690 @cindex X11 login
14691 @defvr {Scheme Variable} sddm-service-type
14692 This is the type of the service to run the
14693 @uref{https://github.com/sddm/sddm,SDDM display manager}. Its value
14694 must be a @code{sddm-configuration} record (see below).
14695
14696 Here's an example use:
14697
14698 @lisp
14699 (service sddm-service-type
14700 (sddm-configuration
14701 (auto-login-user "alice")
14702 (auto-login-session "xfce.desktop")))
14703 @end lisp
14704 @end defvr
14705
14706 @deftp {Data Type} sddm-configuration
14707 This data type represents the configuration of the SDDM login manager.
14708 The available fields are:
14709
14710 @table @asis
14711 @item @code{sddm} (default: @code{sddm})
14712 The SDDM package to use.
14713
14714 @item @code{display-server} (default: @code{"x11"})
14715 This must be either @code{"x11"} or @code{"wayland"}.
14716
14717 @c FIXME: Add more fields.
14718
14719 @item @code{auto-login-user} (default: @code{""})
14720 If non-empty, this is the user account under which to log in
14721 automatically.
14722
14723 @item @code{auto-login-session} (default: @code{""})
14724 If non-empty, this is the @file{.desktop} file name to use as the
14725 auto-login session.
14726 @end table
14727 @end deftp
14728
14729 @cindex Xorg, configuration
14730 @deftp {Data Type} xorg-configuration
14731 This data type represents the configuration of the Xorg graphical display
14732 server. Note that there is not Xorg service; instead, the X server is started
14733 by a ``display manager'' such as GDM, SDDM, and SLiM. Thus, the configuration
14734 of these display managers aggregates an @code{xorg-configuration} record.
14735
14736 @table @asis
14737 @item @code{modules} (default: @code{%default-xorg-modules})
14738 This is a list of @dfn{module packages} loaded by the Xorg
14739 server---e.g., @code{xf86-video-vesa}, @code{xf86-input-keyboard}, and so on.
14740
14741 @item @code{fonts} (default: @code{%default-xorg-fonts})
14742 This is a list of font directories to add to the server's @dfn{font path}.
14743
14744 @item @code{drivers} (default: @code{'()})
14745 This must be either the empty list, in which case Xorg chooses a graphics
14746 driver automatically, or a list of driver names that will be tried in this
14747 order---e.g., @code{("modesetting" "vesa")}.
14748
14749 @item @code{resolutions} (default: @code{'()})
14750 When @code{resolutions} is the empty list, Xorg chooses an appropriate screen
14751 resolution. Otherwise, it must be a list of resolutions---e.g., @code{((1024
14752 768) (640 480))}.
14753
14754 @cindex keyboard layout, for Xorg
14755 @cindex keymap, for Xorg
14756 @item @code{keyboard-layout} (default: @code{#f})
14757 If this is @code{#f}, Xorg uses the default keyboard layout---usually US
14758 English (``qwerty'') for a 105-key PC keyboard.
14759
14760 Otherwise this must be a @code{keyboard-layout} object specifying the keyboard
14761 layout in use when Xorg is running. @xref{Keyboard Layout}, for more
14762 information on how to specify the keyboard layout.
14763
14764 @item @code{extra-config} (default: @code{'()})
14765 This is a list of strings or objects appended to the configuration file. It
14766 is used to pass extra text to be added verbatim to the configuration file.
14767
14768 @item @code{server} (default: @code{xorg-server})
14769 This is the package providing the Xorg server.
14770
14771 @item @code{server-arguments} (default: @code{%default-xorg-server-arguments})
14772 This is the list of command-line arguments to pass to the X server. The
14773 default is @code{-nolisten tcp}.
14774 @end table
14775 @end deftp
14776
14777 @deffn {Scheme Procedure} set-xorg-configuration @var{config} @
14778 [@var{login-manager-service-type}]
14779 Tell the log-in manager (of type @var{login-manager-service-type}) to use
14780 @var{config}, an @code{<xorg-configuration>} record.
14781
14782 Since the Xorg configuration is embedded in the log-in manager's
14783 configuration---e.g., @code{gdm-configuration}---this procedure provides a
14784 shorthand to set the Xorg configuration.
14785 @end deffn
14786
14787 @deffn {Scheme Procedure} xorg-start-command [@var{config}]
14788 Return a @code{startx} script in which the modules, fonts, etc. specified
14789 in @var{config}, are available. The result should be used in place of
14790 @code{startx}.
14791
14792 Usually the X server is started by a login manager.
14793 @end deffn
14794
14795
14796 @deffn {Scheme Procedure} screen-locker-service @var{package} [@var{program}]
14797 Add @var{package}, a package for a screen locker or screen saver whose
14798 command is @var{program}, to the set of setuid programs and add a PAM entry
14799 for it. For example:
14800
14801 @lisp
14802 (screen-locker-service xlockmore "xlock")
14803 @end lisp
14804
14805 makes the good ol' XlockMore usable.
14806 @end deffn
14807
14808
14809 @node Printing Services
14810 @subsection Printing Services
14811
14812 @cindex printer support with CUPS
14813 The @code{(gnu services cups)} module provides a Guix service definition
14814 for the CUPS printing service. To add printer support to a Guix
14815 system, add a @code{cups-service} to the operating system definition:
14816
14817 @deffn {Scheme Variable} cups-service-type
14818 The service type for the CUPS print server. Its value should be a valid
14819 CUPS configuration (see below). To use the default settings, simply
14820 write:
14821 @lisp
14822 (service cups-service-type)
14823 @end lisp
14824 @end deffn
14825
14826 The CUPS configuration controls the basic things about your CUPS
14827 installation: what interfaces it listens on, what to do if a print job
14828 fails, how much logging to do, and so on. To actually add a printer,
14829 you have to visit the @url{http://localhost:631} URL, or use a tool such
14830 as GNOME's printer configuration services. By default, configuring a
14831 CUPS service will generate a self-signed certificate if needed, for
14832 secure connections to the print server.
14833
14834 Suppose you want to enable the Web interface of CUPS and also add
14835 support for Epson printers @i{via} the @code{escpr} package and for HP
14836 printers @i{via} the @code{hplip-minimal} package. You can do that directly,
14837 like this (you need to use the @code{(gnu packages cups)} module):
14838
14839 @lisp
14840 (service cups-service-type
14841 (cups-configuration
14842 (web-interface? #t)
14843 (extensions
14844 (list cups-filters escpr hplip-minimal))))
14845 @end lisp
14846
14847 Note: If you wish to use the Qt5 based GUI which comes with the hplip
14848 package then it is suggested that you install the @code{hplip} package,
14849 either in your OS configuration file or as your user.
14850
14851 The available configuration parameters follow. Each parameter
14852 definition is preceded by its type; for example, @samp{string-list foo}
14853 indicates that the @code{foo} parameter should be specified as a list of
14854 strings. There is also a way to specify the configuration as a string,
14855 if you have an old @code{cupsd.conf} file that you want to port over
14856 from some other system; see the end for more details.
14857
14858 @c The following documentation was initially generated by
14859 @c (generate-documentation) in (gnu services cups). Manually maintained
14860 @c documentation is better, so we shouldn't hesitate to edit below as
14861 @c needed. However if the change you want to make to this documentation
14862 @c can be done in an automated way, it's probably easier to change
14863 @c (generate-documentation) than to make it below and have to deal with
14864 @c the churn as CUPS updates.
14865
14866
14867 Available @code{cups-configuration} fields are:
14868
14869 @deftypevr {@code{cups-configuration} parameter} package cups
14870 The CUPS package.
14871 @end deftypevr
14872
14873 @deftypevr {@code{cups-configuration} parameter} package-list extensions
14874 Drivers and other extensions to the CUPS package.
14875 @end deftypevr
14876
14877 @deftypevr {@code{cups-configuration} parameter} files-configuration files-configuration
14878 Configuration of where to write logs, what directories to use for print
14879 spools, and related privileged configuration parameters.
14880
14881 Available @code{files-configuration} fields are:
14882
14883 @deftypevr {@code{files-configuration} parameter} log-location access-log
14884 Defines the access log filename. Specifying a blank filename disables
14885 access log generation. The value @code{stderr} causes log entries to be
14886 sent to the standard error file when the scheduler is running in the
14887 foreground, or to the system log daemon when run in the background. The
14888 value @code{syslog} causes log entries to be sent to the system log
14889 daemon. The server name may be included in filenames using the string
14890 @code{%s}, as in @code{/var/log/cups/%s-access_log}.
14891
14892 Defaults to @samp{"/var/log/cups/access_log"}.
14893 @end deftypevr
14894
14895 @deftypevr {@code{files-configuration} parameter} file-name cache-dir
14896 Where CUPS should cache data.
14897
14898 Defaults to @samp{"/var/cache/cups"}.
14899 @end deftypevr
14900
14901 @deftypevr {@code{files-configuration} parameter} string config-file-perm
14902 Specifies the permissions for all configuration files that the scheduler
14903 writes.
14904
14905 Note that the permissions for the printers.conf file are currently
14906 masked to only allow access from the scheduler user (typically root).
14907 This is done because printer device URIs sometimes contain sensitive
14908 authentication information that should not be generally known on the
14909 system. There is no way to disable this security feature.
14910
14911 Defaults to @samp{"0640"}.
14912 @end deftypevr
14913
14914 @deftypevr {@code{files-configuration} parameter} log-location error-log
14915 Defines the error log filename. Specifying a blank filename disables
14916 error log generation. The value @code{stderr} causes log entries to be
14917 sent to the standard error file when the scheduler is running in the
14918 foreground, or to the system log daemon when run in the background. The
14919 value @code{syslog} causes log entries to be sent to the system log
14920 daemon. The server name may be included in filenames using the string
14921 @code{%s}, as in @code{/var/log/cups/%s-error_log}.
14922
14923 Defaults to @samp{"/var/log/cups/error_log"}.
14924 @end deftypevr
14925
14926 @deftypevr {@code{files-configuration} parameter} string fatal-errors
14927 Specifies which errors are fatal, causing the scheduler to exit. The
14928 kind strings are:
14929
14930 @table @code
14931 @item none
14932 No errors are fatal.
14933
14934 @item all
14935 All of the errors below are fatal.
14936
14937 @item browse
14938 Browsing initialization errors are fatal, for example failed connections
14939 to the DNS-SD daemon.
14940
14941 @item config
14942 Configuration file syntax errors are fatal.
14943
14944 @item listen
14945 Listen or Port errors are fatal, except for IPv6 failures on the
14946 loopback or @code{any} addresses.
14947
14948 @item log
14949 Log file creation or write errors are fatal.
14950
14951 @item permissions
14952 Bad startup file permissions are fatal, for example shared TLS
14953 certificate and key files with world-read permissions.
14954 @end table
14955
14956 Defaults to @samp{"all -browse"}.
14957 @end deftypevr
14958
14959 @deftypevr {@code{files-configuration} parameter} boolean file-device?
14960 Specifies whether the file pseudo-device can be used for new printer
14961 queues. The URI @uref{file:///dev/null} is always allowed.
14962
14963 Defaults to @samp{#f}.
14964 @end deftypevr
14965
14966 @deftypevr {@code{files-configuration} parameter} string group
14967 Specifies the group name or ID that will be used when executing external
14968 programs.
14969
14970 Defaults to @samp{"lp"}.
14971 @end deftypevr
14972
14973 @deftypevr {@code{files-configuration} parameter} string log-file-perm
14974 Specifies the permissions for all log files that the scheduler writes.
14975
14976 Defaults to @samp{"0644"}.
14977 @end deftypevr
14978
14979 @deftypevr {@code{files-configuration} parameter} log-location page-log
14980 Defines the page log filename. Specifying a blank filename disables
14981 page log generation. The value @code{stderr} causes log entries to be
14982 sent to the standard error file when the scheduler is running in the
14983 foreground, or to the system log daemon when run in the background. The
14984 value @code{syslog} causes log entries to be sent to the system log
14985 daemon. The server name may be included in filenames using the string
14986 @code{%s}, as in @code{/var/log/cups/%s-page_log}.
14987
14988 Defaults to @samp{"/var/log/cups/page_log"}.
14989 @end deftypevr
14990
14991 @deftypevr {@code{files-configuration} parameter} string remote-root
14992 Specifies the username that is associated with unauthenticated accesses
14993 by clients claiming to be the root user. The default is @code{remroot}.
14994
14995 Defaults to @samp{"remroot"}.
14996 @end deftypevr
14997
14998 @deftypevr {@code{files-configuration} parameter} file-name request-root
14999 Specifies the directory that contains print jobs and other HTTP request
15000 data.
15001
15002 Defaults to @samp{"/var/spool/cups"}.
15003 @end deftypevr
15004
15005 @deftypevr {@code{files-configuration} parameter} sandboxing sandboxing
15006 Specifies the level of security sandboxing that is applied to print
15007 filters, backends, and other child processes of the scheduler; either
15008 @code{relaxed} or @code{strict}. This directive is currently only
15009 used/supported on macOS.
15010
15011 Defaults to @samp{strict}.
15012 @end deftypevr
15013
15014 @deftypevr {@code{files-configuration} parameter} file-name server-keychain
15015 Specifies the location of TLS certificates and private keys. CUPS will
15016 look for public and private keys in this directory: a @code{.crt} files
15017 for PEM-encoded certificates and corresponding @code{.key} files for
15018 PEM-encoded private keys.
15019
15020 Defaults to @samp{"/etc/cups/ssl"}.
15021 @end deftypevr
15022
15023 @deftypevr {@code{files-configuration} parameter} file-name server-root
15024 Specifies the directory containing the server configuration files.
15025
15026 Defaults to @samp{"/etc/cups"}.
15027 @end deftypevr
15028
15029 @deftypevr {@code{files-configuration} parameter} boolean sync-on-close?
15030 Specifies whether the scheduler calls fsync(2) after writing
15031 configuration or state files.
15032
15033 Defaults to @samp{#f}.
15034 @end deftypevr
15035
15036 @deftypevr {@code{files-configuration} parameter} space-separated-string-list system-group
15037 Specifies the group(s) to use for @code{@@SYSTEM} group authentication.
15038 @end deftypevr
15039
15040 @deftypevr {@code{files-configuration} parameter} file-name temp-dir
15041 Specifies the directory where temporary files are stored.
15042
15043 Defaults to @samp{"/var/spool/cups/tmp"}.
15044 @end deftypevr
15045
15046 @deftypevr {@code{files-configuration} parameter} string user
15047 Specifies the user name or ID that is used when running external
15048 programs.
15049
15050 Defaults to @samp{"lp"}.
15051 @end deftypevr
15052
15053 @deftypevr {@code{files-configuration} parameter} string set-env
15054 Set the specified environment variable to be passed to child processes.
15055
15056 Defaults to @samp{"variable value"}.
15057 @end deftypevr
15058 @end deftypevr
15059
15060 @deftypevr {@code{cups-configuration} parameter} access-log-level access-log-level
15061 Specifies the logging level for the AccessLog file. The @code{config}
15062 level logs when printers and classes are added, deleted, or modified and
15063 when configuration files are accessed or updated. The @code{actions}
15064 level logs when print jobs are submitted, held, released, modified, or
15065 canceled, and any of the conditions for @code{config}. The @code{all}
15066 level logs all requests.
15067
15068 Defaults to @samp{actions}.
15069 @end deftypevr
15070
15071 @deftypevr {@code{cups-configuration} parameter} boolean auto-purge-jobs?
15072 Specifies whether to purge job history data automatically when it is no
15073 longer required for quotas.
15074
15075 Defaults to @samp{#f}.
15076 @end deftypevr
15077
15078 @deftypevr {@code{cups-configuration} parameter} comma-separated-string-list browse-dns-sd-sub-types
15079 Specifies a list of DNS-SD sub-types to advertise for each shared printer.
15080 For example, @samp{"_cups" "_print"} will tell network clients that both
15081 CUPS sharing and IPP Everywhere are supported.
15082
15083 Defaults to @samp{"_cups"}.
15084 @end deftypevr
15085
15086 @deftypevr {@code{cups-configuration} parameter} browse-local-protocols browse-local-protocols
15087 Specifies which protocols to use for local printer sharing.
15088
15089 Defaults to @samp{dnssd}.
15090 @end deftypevr
15091
15092 @deftypevr {@code{cups-configuration} parameter} boolean browse-web-if?
15093 Specifies whether the CUPS web interface is advertised.
15094
15095 Defaults to @samp{#f}.
15096 @end deftypevr
15097
15098 @deftypevr {@code{cups-configuration} parameter} boolean browsing?
15099 Specifies whether shared printers are advertised.
15100
15101 Defaults to @samp{#f}.
15102 @end deftypevr
15103
15104 @deftypevr {@code{cups-configuration} parameter} string classification
15105 Specifies the security classification of the server. Any valid banner
15106 name can be used, including "classified", "confidential", "secret",
15107 "topsecret", and "unclassified", or the banner can be omitted to disable
15108 secure printing functions.
15109
15110 Defaults to @samp{""}.
15111 @end deftypevr
15112
15113 @deftypevr {@code{cups-configuration} parameter} boolean classify-override?
15114 Specifies whether users may override the classification (cover page) of
15115 individual print jobs using the @code{job-sheets} option.
15116
15117 Defaults to @samp{#f}.
15118 @end deftypevr
15119
15120 @deftypevr {@code{cups-configuration} parameter} default-auth-type default-auth-type
15121 Specifies the default type of authentication to use.
15122
15123 Defaults to @samp{Basic}.
15124 @end deftypevr
15125
15126 @deftypevr {@code{cups-configuration} parameter} default-encryption default-encryption
15127 Specifies whether encryption will be used for authenticated requests.
15128
15129 Defaults to @samp{Required}.
15130 @end deftypevr
15131
15132 @deftypevr {@code{cups-configuration} parameter} string default-language
15133 Specifies the default language to use for text and web content.
15134
15135 Defaults to @samp{"en"}.
15136 @end deftypevr
15137
15138 @deftypevr {@code{cups-configuration} parameter} string default-paper-size
15139 Specifies the default paper size for new print queues. @samp{"Auto"}
15140 uses a locale-specific default, while @samp{"None"} specifies there is
15141 no default paper size. Specific size names are typically
15142 @samp{"Letter"} or @samp{"A4"}.
15143
15144 Defaults to @samp{"Auto"}.
15145 @end deftypevr
15146
15147 @deftypevr {@code{cups-configuration} parameter} string default-policy
15148 Specifies the default access policy to use.
15149
15150 Defaults to @samp{"default"}.
15151 @end deftypevr
15152
15153 @deftypevr {@code{cups-configuration} parameter} boolean default-shared?
15154 Specifies whether local printers are shared by default.
15155
15156 Defaults to @samp{#t}.
15157 @end deftypevr
15158
15159 @deftypevr {@code{cups-configuration} parameter} non-negative-integer dirty-clean-interval
15160 Specifies the delay for updating of configuration and state files, in
15161 seconds. A value of 0 causes the update to happen as soon as possible,
15162 typically within a few milliseconds.
15163
15164 Defaults to @samp{30}.
15165 @end deftypevr
15166
15167 @deftypevr {@code{cups-configuration} parameter} error-policy error-policy
15168 Specifies what to do when an error occurs. Possible values are
15169 @code{abort-job}, which will discard the failed print job;
15170 @code{retry-job}, which will retry the job at a later time;
15171 @code{retry-current-job}, which retries the failed job immediately; and
15172 @code{stop-printer}, which stops the printer.
15173
15174 Defaults to @samp{stop-printer}.
15175 @end deftypevr
15176
15177 @deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-limit
15178 Specifies the maximum cost of filters that are run concurrently, which
15179 can be used to minimize disk, memory, and CPU resource problems. A
15180 limit of 0 disables filter limiting. An average print to a
15181 non-PostScript printer needs a filter limit of about 200. A PostScript
15182 printer needs about half that (100). Setting the limit below these
15183 thresholds will effectively limit the scheduler to printing a single job
15184 at any time.
15185
15186 Defaults to @samp{0}.
15187 @end deftypevr
15188
15189 @deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-nice
15190 Specifies the scheduling priority of filters that are run to print a
15191 job. The nice value ranges from 0, the highest priority, to 19, the
15192 lowest priority.
15193
15194 Defaults to @samp{0}.
15195 @end deftypevr
15196
15197 @deftypevr {@code{cups-configuration} parameter} host-name-lookups host-name-lookups
15198 Specifies whether to do reverse lookups on connecting clients. The
15199 @code{double} setting causes @code{cupsd} to verify that the hostname
15200 resolved from the address matches one of the addresses returned for that
15201 hostname. Double lookups also prevent clients with unregistered
15202 addresses from connecting to your server. Only set this option to
15203 @code{#t} or @code{double} if absolutely required.
15204
15205 Defaults to @samp{#f}.
15206 @end deftypevr
15207
15208 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-kill-delay
15209 Specifies the number of seconds to wait before killing the filters and
15210 backend associated with a canceled or held job.
15211
15212 Defaults to @samp{30}.
15213 @end deftypevr
15214
15215 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-interval
15216 Specifies the interval between retries of jobs in seconds. This is
15217 typically used for fax queues but can also be used with normal print
15218 queues whose error policy is @code{retry-job} or
15219 @code{retry-current-job}.
15220
15221 Defaults to @samp{30}.
15222 @end deftypevr
15223
15224 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-limit
15225 Specifies the number of retries that are done for jobs. This is
15226 typically used for fax queues but can also be used with normal print
15227 queues whose error policy is @code{retry-job} or
15228 @code{retry-current-job}.
15229
15230 Defaults to @samp{5}.
15231 @end deftypevr
15232
15233 @deftypevr {@code{cups-configuration} parameter} boolean keep-alive?
15234 Specifies whether to support HTTP keep-alive connections.
15235
15236 Defaults to @samp{#t}.
15237 @end deftypevr
15238
15239 @deftypevr {@code{cups-configuration} parameter} non-negative-integer keep-alive-timeout
15240 Specifies how long an idle client connection remains open, in seconds.
15241
15242 Defaults to @samp{30}.
15243 @end deftypevr
15244
15245 @deftypevr {@code{cups-configuration} parameter} non-negative-integer limit-request-body
15246 Specifies the maximum size of print files, IPP requests, and HTML form
15247 data. A limit of 0 disables the limit check.
15248
15249 Defaults to @samp{0}.
15250 @end deftypevr
15251
15252 @deftypevr {@code{cups-configuration} parameter} multiline-string-list listen
15253 Listens on the specified interfaces for connections. Valid values are
15254 of the form @var{address}:@var{port}, where @var{address} is either an
15255 IPv6 address enclosed in brackets, an IPv4 address, or @code{*} to
15256 indicate all addresses. Values can also be file names of local UNIX
15257 domain sockets. The Listen directive is similar to the Port directive
15258 but allows you to restrict access to specific interfaces or networks.
15259 @end deftypevr
15260
15261 @deftypevr {@code{cups-configuration} parameter} non-negative-integer listen-back-log
15262 Specifies the number of pending connections that will be allowed. This
15263 normally only affects very busy servers that have reached the MaxClients
15264 limit, but can also be triggered by large numbers of simultaneous
15265 connections. When the limit is reached, the operating system will
15266 refuse additional connections until the scheduler can accept the pending
15267 ones.
15268
15269 Defaults to @samp{128}.
15270 @end deftypevr
15271
15272 @deftypevr {@code{cups-configuration} parameter} location-access-control-list location-access-controls
15273 Specifies a set of additional access controls.
15274
15275 Available @code{location-access-controls} fields are:
15276
15277 @deftypevr {@code{location-access-controls} parameter} file-name path
15278 Specifies the URI path to which the access control applies.
15279 @end deftypevr
15280
15281 @deftypevr {@code{location-access-controls} parameter} access-control-list access-controls
15282 Access controls for all access to this path, in the same format as the
15283 @code{access-controls} of @code{operation-access-control}.
15284
15285 Defaults to @samp{()}.
15286 @end deftypevr
15287
15288 @deftypevr {@code{location-access-controls} parameter} method-access-control-list method-access-controls
15289 Access controls for method-specific access to this path.
15290
15291 Defaults to @samp{()}.
15292
15293 Available @code{method-access-controls} fields are:
15294
15295 @deftypevr {@code{method-access-controls} parameter} boolean reverse?
15296 If @code{#t}, apply access controls to all methods except the listed
15297 methods. Otherwise apply to only the listed methods.
15298
15299 Defaults to @samp{#f}.
15300 @end deftypevr
15301
15302 @deftypevr {@code{method-access-controls} parameter} method-list methods
15303 Methods to which this access control applies.
15304
15305 Defaults to @samp{()}.
15306 @end deftypevr
15307
15308 @deftypevr {@code{method-access-controls} parameter} access-control-list access-controls
15309 Access control directives, as a list of strings. Each string should be
15310 one directive, such as "Order allow,deny".
15311
15312 Defaults to @samp{()}.
15313 @end deftypevr
15314 @end deftypevr
15315 @end deftypevr
15316
15317 @deftypevr {@code{cups-configuration} parameter} non-negative-integer log-debug-history
15318 Specifies the number of debugging messages that are retained for logging
15319 if an error occurs in a print job. Debug messages are logged regardless
15320 of the LogLevel setting.
15321
15322 Defaults to @samp{100}.
15323 @end deftypevr
15324
15325 @deftypevr {@code{cups-configuration} parameter} log-level log-level
15326 Specifies the level of logging for the ErrorLog file. The value
15327 @code{none} stops all logging while @code{debug2} logs everything.
15328
15329 Defaults to @samp{info}.
15330 @end deftypevr
15331
15332 @deftypevr {@code{cups-configuration} parameter} log-time-format log-time-format
15333 Specifies the format of the date and time in the log files. The value
15334 @code{standard} logs whole seconds while @code{usecs} logs microseconds.
15335
15336 Defaults to @samp{standard}.
15337 @end deftypevr
15338
15339 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients
15340 Specifies the maximum number of simultaneous clients that are allowed by
15341 the scheduler.
15342
15343 Defaults to @samp{100}.
15344 @end deftypevr
15345
15346 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients-per-host
15347 Specifies the maximum number of simultaneous clients that are allowed
15348 from a single address.
15349
15350 Defaults to @samp{100}.
15351 @end deftypevr
15352
15353 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-copies
15354 Specifies the maximum number of copies that a user can print of each
15355 job.
15356
15357 Defaults to @samp{9999}.
15358 @end deftypevr
15359
15360 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-hold-time
15361 Specifies the maximum time a job may remain in the @code{indefinite}
15362 hold state before it is canceled. A value of 0 disables cancellation of
15363 held jobs.
15364
15365 Defaults to @samp{0}.
15366 @end deftypevr
15367
15368 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs
15369 Specifies the maximum number of simultaneous jobs that are allowed. Set
15370 to 0 to allow an unlimited number of jobs.
15371
15372 Defaults to @samp{500}.
15373 @end deftypevr
15374
15375 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-printer
15376 Specifies the maximum number of simultaneous jobs that are allowed per
15377 printer. A value of 0 allows up to MaxJobs jobs per printer.
15378
15379 Defaults to @samp{0}.
15380 @end deftypevr
15381
15382 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-user
15383 Specifies the maximum number of simultaneous jobs that are allowed per
15384 user. A value of 0 allows up to MaxJobs jobs per user.
15385
15386 Defaults to @samp{0}.
15387 @end deftypevr
15388
15389 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-job-time
15390 Specifies the maximum time a job may take to print before it is
15391 canceled, in seconds. Set to 0 to disable cancellation of "stuck" jobs.
15392
15393 Defaults to @samp{10800}.
15394 @end deftypevr
15395
15396 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-log-size
15397 Specifies the maximum size of the log files before they are rotated, in
15398 bytes. The value 0 disables log rotation.
15399
15400 Defaults to @samp{1048576}.
15401 @end deftypevr
15402
15403 @deftypevr {@code{cups-configuration} parameter} non-negative-integer multiple-operation-timeout
15404 Specifies the maximum amount of time to allow between files in a
15405 multiple file print job, in seconds.
15406
15407 Defaults to @samp{300}.
15408 @end deftypevr
15409
15410 @deftypevr {@code{cups-configuration} parameter} string page-log-format
15411 Specifies the format of PageLog lines. Sequences beginning with percent
15412 (@samp{%}) characters are replaced with the corresponding information,
15413 while all other characters are copied literally. The following percent
15414 sequences are recognized:
15415
15416 @table @samp
15417 @item %%
15418 insert a single percent character
15419
15420 @item %@{name@}
15421 insert the value of the specified IPP attribute
15422
15423 @item %C
15424 insert the number of copies for the current page
15425
15426 @item %P
15427 insert the current page number
15428
15429 @item %T
15430 insert the current date and time in common log format
15431
15432 @item %j
15433 insert the job ID
15434
15435 @item %p
15436 insert the printer name
15437
15438 @item %u
15439 insert the username
15440 @end table
15441
15442 A value of the empty string disables page logging. The string @code{%p
15443 %u %j %T %P %C %@{job-billing@} %@{job-originating-host-name@}
15444 %@{job-name@} %@{media@} %@{sides@}} creates a page log with the
15445 standard items.
15446
15447 Defaults to @samp{""}.
15448 @end deftypevr
15449
15450 @deftypevr {@code{cups-configuration} parameter} environment-variables environment-variables
15451 Passes the specified environment variable(s) to child processes; a list
15452 of strings.
15453
15454 Defaults to @samp{()}.
15455 @end deftypevr
15456
15457 @deftypevr {@code{cups-configuration} parameter} policy-configuration-list policies
15458 Specifies named access control policies.
15459
15460 Available @code{policy-configuration} fields are:
15461
15462 @deftypevr {@code{policy-configuration} parameter} string name
15463 Name of the policy.
15464 @end deftypevr
15465
15466 @deftypevr {@code{policy-configuration} parameter} string job-private-access
15467 Specifies an access list for a job's private values. @code{@@ACL} maps
15468 to the printer's requesting-user-name-allowed or
15469 requesting-user-name-denied values. @code{@@OWNER} maps to the job's
15470 owner. @code{@@SYSTEM} maps to the groups listed for the
15471 @code{system-group} field of the @code{files-config} configuration,
15472 which is reified into the @code{cups-files.conf(5)} file. Other
15473 possible elements of the access list include specific user names, and
15474 @code{@@@var{group}} to indicate members of a specific group. The
15475 access list may also be simply @code{all} or @code{default}.
15476
15477 Defaults to @samp{"@@OWNER @@SYSTEM"}.
15478 @end deftypevr
15479
15480 @deftypevr {@code{policy-configuration} parameter} string job-private-values
15481 Specifies the list of job values to make private, or @code{all},
15482 @code{default}, or @code{none}.
15483
15484 Defaults to @samp{"job-name job-originating-host-name
15485 job-originating-user-name phone"}.
15486 @end deftypevr
15487
15488 @deftypevr {@code{policy-configuration} parameter} string subscription-private-access
15489 Specifies an access list for a subscription's private values.
15490 @code{@@ACL} maps to the printer's requesting-user-name-allowed or
15491 requesting-user-name-denied values. @code{@@OWNER} maps to the job's
15492 owner. @code{@@SYSTEM} maps to the groups listed for the
15493 @code{system-group} field of the @code{files-config} configuration,
15494 which is reified into the @code{cups-files.conf(5)} file. Other
15495 possible elements of the access list include specific user names, and
15496 @code{@@@var{group}} to indicate members of a specific group. The
15497 access list may also be simply @code{all} or @code{default}.
15498
15499 Defaults to @samp{"@@OWNER @@SYSTEM"}.
15500 @end deftypevr
15501
15502 @deftypevr {@code{policy-configuration} parameter} string subscription-private-values
15503 Specifies the list of job values to make private, or @code{all},
15504 @code{default}, or @code{none}.
15505
15506 Defaults to @samp{"notify-events notify-pull-method notify-recipient-uri
15507 notify-subscriber-user-name notify-user-data"}.
15508 @end deftypevr
15509
15510 @deftypevr {@code{policy-configuration} parameter} operation-access-control-list access-controls
15511 Access control by IPP operation.
15512
15513 Defaults to @samp{()}.
15514 @end deftypevr
15515 @end deftypevr
15516
15517 @deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-files
15518 Specifies whether job files (documents) are preserved after a job is
15519 printed. If a numeric value is specified, job files are preserved for
15520 the indicated number of seconds after printing. Otherwise a boolean
15521 value applies indefinitely.
15522
15523 Defaults to @samp{86400}.
15524 @end deftypevr
15525
15526 @deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-history
15527 Specifies whether the job history is preserved after a job is printed.
15528 If a numeric value is specified, the job history is preserved for the
15529 indicated number of seconds after printing. If @code{#t}, the job
15530 history is preserved until the MaxJobs limit is reached.
15531
15532 Defaults to @samp{#t}.
15533 @end deftypevr
15534
15535 @deftypevr {@code{cups-configuration} parameter} non-negative-integer reload-timeout
15536 Specifies the amount of time to wait for job completion before
15537 restarting the scheduler.
15538
15539 Defaults to @samp{30}.
15540 @end deftypevr
15541
15542 @deftypevr {@code{cups-configuration} parameter} string rip-cache
15543 Specifies the maximum amount of memory to use when converting documents
15544 into bitmaps for a printer.
15545
15546 Defaults to @samp{"128m"}.
15547 @end deftypevr
15548
15549 @deftypevr {@code{cups-configuration} parameter} string server-admin
15550 Specifies the email address of the server administrator.
15551
15552 Defaults to @samp{"root@@localhost.localdomain"}.
15553 @end deftypevr
15554
15555 @deftypevr {@code{cups-configuration} parameter} host-name-list-or-* server-alias
15556 The ServerAlias directive is used for HTTP Host header validation when
15557 clients connect to the scheduler from external interfaces. Using the
15558 special name @code{*} can expose your system to known browser-based DNS
15559 rebinding attacks, even when accessing sites through a firewall. If the
15560 auto-discovery of alternate names does not work, we recommend listing
15561 each alternate name with a ServerAlias directive instead of using
15562 @code{*}.
15563
15564 Defaults to @samp{*}.
15565 @end deftypevr
15566
15567 @deftypevr {@code{cups-configuration} parameter} string server-name
15568 Specifies the fully-qualified host name of the server.
15569
15570 Defaults to @samp{"localhost"}.
15571 @end deftypevr
15572
15573 @deftypevr {@code{cups-configuration} parameter} server-tokens server-tokens
15574 Specifies what information is included in the Server header of HTTP
15575 responses. @code{None} disables the Server header. @code{ProductOnly}
15576 reports @code{CUPS}. @code{Major} reports @code{CUPS 2}. @code{Minor}
15577 reports @code{CUPS 2.0}. @code{Minimal} reports @code{CUPS 2.0.0}.
15578 @code{OS} reports @code{CUPS 2.0.0 (@var{uname})} where @var{uname} is
15579 the output of the @code{uname} command. @code{Full} reports @code{CUPS
15580 2.0.0 (@var{uname}) IPP/2.0}.
15581
15582 Defaults to @samp{Minimal}.
15583 @end deftypevr
15584
15585 @deftypevr {@code{cups-configuration} parameter} multiline-string-list ssl-listen
15586 Listens on the specified interfaces for encrypted connections. Valid
15587 values are of the form @var{address}:@var{port}, where @var{address} is
15588 either an IPv6 address enclosed in brackets, an IPv4 address, or
15589 @code{*} to indicate all addresses.
15590
15591 Defaults to @samp{()}.
15592 @end deftypevr
15593
15594 @deftypevr {@code{cups-configuration} parameter} ssl-options ssl-options
15595 Sets encryption options. By default, CUPS only supports encryption
15596 using TLS v1.0 or higher using known secure cipher suites. Security is
15597 reduced when @code{Allow} options are used, and enhanced when @code{Deny}
15598 options are used. The @code{AllowRC4} option enables the 128-bit RC4 cipher
15599 suites, which are required for some older clients. The @code{AllowSSL3} option
15600 enables SSL v3.0, which is required for some older clients that do not support
15601 TLS v1.0. The @code{DenyCBC} option disables all CBC cipher suites. The
15602 @code{DenyTLS1.0} option disables TLS v1.0 support - this sets the minimum
15603 protocol version to TLS v1.1.
15604
15605 Defaults to @samp{()}.
15606 @end deftypevr
15607
15608 @deftypevr {@code{cups-configuration} parameter} boolean strict-conformance?
15609 Specifies whether the scheduler requires clients to strictly adhere to
15610 the IPP specifications.
15611
15612 Defaults to @samp{#f}.
15613 @end deftypevr
15614
15615 @deftypevr {@code{cups-configuration} parameter} non-negative-integer timeout
15616 Specifies the HTTP request timeout, in seconds.
15617
15618 Defaults to @samp{300}.
15619
15620 @end deftypevr
15621
15622 @deftypevr {@code{cups-configuration} parameter} boolean web-interface?
15623 Specifies whether the web interface is enabled.
15624
15625 Defaults to @samp{#f}.
15626 @end deftypevr
15627
15628 At this point you're probably thinking ``oh dear, Guix manual, I like
15629 you but you can stop already with the configuration options''. Indeed.
15630 However, one more point: it could be that you have an existing
15631 @code{cupsd.conf} that you want to use. In that case, you can pass an
15632 @code{opaque-cups-configuration} as the configuration of a
15633 @code{cups-service-type}.
15634
15635 Available @code{opaque-cups-configuration} fields are:
15636
15637 @deftypevr {@code{opaque-cups-configuration} parameter} package cups
15638 The CUPS package.
15639 @end deftypevr
15640
15641 @deftypevr {@code{opaque-cups-configuration} parameter} string cupsd.conf
15642 The contents of the @code{cupsd.conf}, as a string.
15643 @end deftypevr
15644
15645 @deftypevr {@code{opaque-cups-configuration} parameter} string cups-files.conf
15646 The contents of the @code{cups-files.conf} file, as a string.
15647 @end deftypevr
15648
15649 For example, if your @code{cupsd.conf} and @code{cups-files.conf} are in
15650 strings of the same name, you could instantiate a CUPS service like
15651 this:
15652
15653 @lisp
15654 (service cups-service-type
15655 (opaque-cups-configuration
15656 (cupsd.conf cupsd.conf)
15657 (cups-files.conf cups-files.conf)))
15658 @end lisp
15659
15660
15661 @node Desktop Services
15662 @subsection Desktop Services
15663
15664 The @code{(gnu services desktop)} module provides services that are
15665 usually useful in the context of a ``desktop'' setup---that is, on a
15666 machine running a graphical display server, possibly with graphical user
15667 interfaces, etc. It also defines services that provide specific desktop
15668 environments like GNOME, Xfce or MATE.
15669
15670 To simplify things, the module defines a variable containing the set of
15671 services that users typically expect on a machine with a graphical
15672 environment and networking:
15673
15674 @defvr {Scheme Variable} %desktop-services
15675 This is a list of services that builds upon @code{%base-services} and
15676 adds or adjusts services for a typical ``desktop'' setup.
15677
15678 In particular, it adds a graphical login manager (@pxref{X Window,
15679 @code{gdm-service-type}}), screen lockers, a network management tool
15680 (@pxref{Networking Services, @code{network-manager-service-type}}) with modem
15681 support (@pxref{Networking Services, @code{modem-manager-service-type}}),
15682 energy and color management services, the @code{elogind} login and seat
15683 manager, the Polkit privilege service, the GeoClue location service, the
15684 AccountsService daemon that allows authorized users change system passwords,
15685 an NTP client (@pxref{Networking Services}), the Avahi daemon, and has the
15686 name service switch service configured to be able to use @code{nss-mdns}
15687 (@pxref{Name Service Switch, mDNS}).
15688 @end defvr
15689
15690 The @code{%desktop-services} variable can be used as the @code{services}
15691 field of an @code{operating-system} declaration (@pxref{operating-system
15692 Reference, @code{services}}).
15693
15694 Additionally, the @code{gnome-desktop-service-type},
15695 @code{xfce-desktop-service}, @code{mate-desktop-service-type} and
15696 @code{enlightenment-desktop-service-type} procedures can add GNOME, Xfce, MATE
15697 and/or Enlightenment to a system. To ``add GNOME'' means that system-level
15698 services like the backlight adjustment helpers and the power management
15699 utilities are added to the system, extending @code{polkit} and @code{dbus}
15700 appropriately, allowing GNOME to operate with elevated privileges on a
15701 limited number of special-purpose system interfaces. Additionally,
15702 adding a service made by @code{gnome-desktop-service-type} adds the GNOME
15703 metapackage to the system profile. Likewise, adding the Xfce service
15704 not only adds the @code{xfce} metapackage to the system profile, but it
15705 also gives the Thunar file manager the ability to open a ``root-mode''
15706 file management window, if the user authenticates using the
15707 administrator's password via the standard polkit graphical interface.
15708 To ``add MATE'' means that @code{polkit} and @code{dbus} are extended
15709 appropriately, allowing MATE to operate with elevated privileges on a
15710 limited number of special-purpose system interfaces. Additionally,
15711 adding a service of type @code{mate-desktop-service-type} adds the MATE
15712 metapackage to the system profile. ``Adding Enlightenment'' means that
15713 @code{dbus} is extended appropriately, and several of Enlightenment's binaries
15714 are set as setuid, allowing Enlightenment's screen locker and other
15715 functionality to work as expected.
15716
15717 The desktop environments in Guix use the Xorg display server by
15718 default. If you'd like to use the newer display server protocol
15719 called Wayland, you need to use the @code{sddm-service} instead of
15720 GDM as the graphical login manager. You should then
15721 select the ``GNOME (Wayland)'' session in SDDM. Alternatively you can
15722 also try starting GNOME on Wayland manually from a TTY with the
15723 command ``XDG_SESSION_TYPE=wayland exec dbus-run-session
15724 gnome-session``. Currently only GNOME has support for Wayland.
15725
15726 @defvr {Scheme Variable} gnome-desktop-service-type
15727 This is the type of the service that adds the @uref{https://www.gnome.org,
15728 GNOME} desktop environment. Its value is a @code{gnome-desktop-configuration}
15729 object (see below.)
15730
15731 This service adds the @code{gnome} package to the system profile, and extends
15732 polkit with the actions from @code{gnome-settings-daemon}.
15733 @end defvr
15734
15735 @deftp {Data Type} gnome-desktop-configuration
15736 Configuration record for the GNOME desktop environment.
15737
15738 @table @asis
15739 @item @code{gnome} (default: @code{gnome})
15740 The GNOME package to use.
15741 @end table
15742 @end deftp
15743
15744 @defvr {Scheme Variable} xfce-desktop-service-type
15745 This is the type of a service to run the @uref{Xfce, https://xfce.org/}
15746 desktop environment. Its value is an @code{xfce-desktop-configuration} object
15747 (see below.)
15748
15749 This service adds the @code{xfce} package to the system profile, and
15750 extends polkit with the ability for @code{thunar} to manipulate the file
15751 system as root from within a user session, after the user has authenticated
15752 with the administrator's password.
15753 @end defvr
15754
15755 @deftp {Data Type} xfce-desktop-configuration
15756 Configuration record for the Xfce desktop environment.
15757
15758 @table @asis
15759 @item @code{xfce} (default: @code{xfce})
15760 The Xfce package to use.
15761 @end table
15762 @end deftp
15763
15764 @deffn {Scheme Variable} mate-desktop-service-type
15765 This is the type of the service that runs the @uref{https://mate-desktop.org/,
15766 MATE desktop environment}. Its value is a @code{mate-desktop-configuration}
15767 object (see below.)
15768
15769 This service adds the @code{mate} package to the system
15770 profile, and extends polkit with the actions from
15771 @code{mate-settings-daemon}.
15772 @end deffn
15773
15774 @deftp {Data Type} mate-desktop-configuration
15775 Configuration record for the MATE desktop environment.
15776
15777 @table @asis
15778 @item @code{mate} (default: @code{mate})
15779 The MATE package to use.
15780 @end table
15781 @end deftp
15782
15783 @deffn {Scheme Variable} enlightenment-desktop-service-type
15784 Return a service that adds the @code{enlightenment} package to the system
15785 profile, and extends dbus with actions from @code{efl}.
15786 @end deffn
15787
15788 @deftp {Data Type} enlightenment-desktop-service-configuration
15789 @table @asis
15790 @item @code{enlightenment} (default: @code{enlightenment})
15791 The enlightenment package to use.
15792 @end table
15793 @end deftp
15794
15795 Because the GNOME, Xfce and MATE desktop services pull in so many packages,
15796 the default @code{%desktop-services} variable doesn't include any of
15797 them by default. To add GNOME, Xfce or MATE, just @code{cons} them onto
15798 @code{%desktop-services} in the @code{services} field of your
15799 @code{operating-system}:
15800
15801 @lisp
15802 (use-modules (gnu))
15803 (use-service-modules desktop)
15804 (operating-system
15805 ...
15806 ;; cons* adds items to the list given as its last argument.
15807 (services (cons* (service gnome-desktop-service-type)
15808 (service xfce-desktop-service)
15809 %desktop-services))
15810 ...)
15811 @end lisp
15812
15813 These desktop environments will then be available as options in the
15814 graphical login window.
15815
15816 The actual service definitions included in @code{%desktop-services} and
15817 provided by @code{(gnu services dbus)} and @code{(gnu services desktop)}
15818 are described below.
15819
15820 @deffn {Scheme Procedure} dbus-service [#:dbus @var{dbus}] [#:services '()]
15821 Return a service that runs the ``system bus'', using @var{dbus}, with
15822 support for @var{services}.
15823
15824 @uref{https://dbus.freedesktop.org/, D-Bus} is an inter-process communication
15825 facility. Its system bus is used to allow system services to communicate
15826 and to be notified of system-wide events.
15827
15828 @var{services} must be a list of packages that provide an
15829 @file{etc/dbus-1/system.d} directory containing additional D-Bus configuration
15830 and policy files. For example, to allow avahi-daemon to use the system bus,
15831 @var{services} must be equal to @code{(list avahi)}.
15832 @end deffn
15833
15834 @deffn {Scheme Procedure} elogind-service [#:config @var{config}]
15835 Return a service that runs the @code{elogind} login and
15836 seat management daemon. @uref{https://github.com/elogind/elogind,
15837 Elogind} exposes a D-Bus interface that can be used to know which users
15838 are logged in, know what kind of sessions they have open, suspend the
15839 system, inhibit system suspend, reboot the system, and other tasks.
15840
15841 Elogind handles most system-level power events for a computer, for
15842 example suspending the system when a lid is closed, or shutting it down
15843 when the power button is pressed.
15844
15845 The @var{config} keyword argument specifies the configuration for
15846 elogind, and should be the result of an @code{(elogind-configuration
15847 (@var{parameter} @var{value})...)} invocation. Available parameters and
15848 their default values are:
15849
15850 @table @code
15851 @item kill-user-processes?
15852 @code{#f}
15853 @item kill-only-users
15854 @code{()}
15855 @item kill-exclude-users
15856 @code{("root")}
15857 @item inhibit-delay-max-seconds
15858 @code{5}
15859 @item handle-power-key
15860 @code{poweroff}
15861 @item handle-suspend-key
15862 @code{suspend}
15863 @item handle-hibernate-key
15864 @code{hibernate}
15865 @item handle-lid-switch
15866 @code{suspend}
15867 @item handle-lid-switch-docked
15868 @code{ignore}
15869 @item power-key-ignore-inhibited?
15870 @code{#f}
15871 @item suspend-key-ignore-inhibited?
15872 @code{#f}
15873 @item hibernate-key-ignore-inhibited?
15874 @code{#f}
15875 @item lid-switch-ignore-inhibited?
15876 @code{#t}
15877 @item holdoff-timeout-seconds
15878 @code{30}
15879 @item idle-action
15880 @code{ignore}
15881 @item idle-action-seconds
15882 @code{(* 30 60)}
15883 @item runtime-directory-size-percent
15884 @code{10}
15885 @item runtime-directory-size
15886 @code{#f}
15887 @item remove-ipc?
15888 @code{#t}
15889 @item suspend-state
15890 @code{("mem" "standby" "freeze")}
15891 @item suspend-mode
15892 @code{()}
15893 @item hibernate-state
15894 @code{("disk")}
15895 @item hibernate-mode
15896 @code{("platform" "shutdown")}
15897 @item hybrid-sleep-state
15898 @code{("disk")}
15899 @item hybrid-sleep-mode
15900 @code{("suspend" "platform" "shutdown")}
15901 @end table
15902 @end deffn
15903
15904 @deffn {Scheme Procedure} accountsservice-service @
15905 [#:accountsservice @var{accountsservice}]
15906 Return a service that runs AccountsService, a system service that can
15907 list available accounts, change their passwords, and so on.
15908 AccountsService integrates with PolicyKit to enable unprivileged users
15909 to acquire the capability to modify their system configuration.
15910 @uref{https://www.freedesktop.org/wiki/Software/AccountsService/, the
15911 accountsservice web site} for more information.
15912
15913 The @var{accountsservice} keyword argument is the @code{accountsservice}
15914 package to expose as a service.
15915 @end deffn
15916
15917 @deffn {Scheme Procedure} polkit-service @
15918 [#:polkit @var{polkit}]
15919 Return a service that runs the
15920 @uref{https://www.freedesktop.org/wiki/Software/polkit/, Polkit privilege
15921 management service}, which allows system administrators to grant access to
15922 privileged operations in a structured way. By querying the Polkit service, a
15923 privileged system component can know when it should grant additional
15924 capabilities to ordinary users. For example, an ordinary user can be granted
15925 the capability to suspend the system if the user is logged in locally.
15926 @end deffn
15927
15928 @defvr {Scheme Variable} polkit-wheel-service
15929 Service that adds the @code{wheel} group as admins to the Polkit
15930 service. This makes it so that users in the @code{wheel} group are queried
15931 for their own passwords when performing administrative actions instead of
15932 @code{root}'s, similar to the behaviour used by @code{sudo}.
15933 @end defvr
15934
15935 @defvr {Scheme Variable} upower-service-type
15936 Service that runs @uref{https://upower.freedesktop.org/, @command{upowerd}}, a
15937 system-wide monitor for power consumption and battery levels, with the given
15938 configuration settings.
15939
15940 It implements the @code{org.freedesktop.UPower} D-Bus interface, and is
15941 notably used by GNOME.
15942 @end defvr
15943
15944 @deftp {Data Type} upower-configuration
15945 Data type representation the configuration for UPower.
15946
15947 @table @asis
15948
15949 @item @code{upower} (default: @var{upower})
15950 Package to use for @code{upower}.
15951
15952 @item @code{watts-up-pro?} (default: @code{#f})
15953 Enable the Watts Up Pro device.
15954
15955 @item @code{poll-batteries?} (default: @code{#t})
15956 Enable polling the kernel for battery level changes.
15957
15958 @item @code{ignore-lid?} (default: @code{#f})
15959 Ignore the lid state, this can be useful if it's incorrect on a device.
15960
15961 @item @code{use-percentage-for-policy?} (default: @code{#f})
15962 Whether battery percentage based policy should be used. The default is to use
15963 the time left, change to @code{#t} to use the percentage.
15964
15965 @item @code{percentage-low} (default: @code{10})
15966 When @code{use-percentage-for-policy?} is @code{#t}, this sets the percentage
15967 at which the battery is considered low.
15968
15969 @item @code{percentage-critical} (default: @code{3})
15970 When @code{use-percentage-for-policy?} is @code{#t}, this sets the percentage
15971 at which the battery is considered critical.
15972
15973 @item @code{percentage-action} (default: @code{2})
15974 When @code{use-percentage-for-policy?} is @code{#t}, this sets the percentage
15975 at which action will be taken.
15976
15977 @item @code{time-low} (default: @code{1200})
15978 When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining in
15979 seconds at which the battery is considered low.
15980
15981 @item @code{time-critical} (default: @code{300})
15982 When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining in
15983 seconds at which the battery is considered critical.
15984
15985 @item @code{time-action} (default: @code{120})
15986 When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining in
15987 seconds at which action will be taken.
15988
15989 @item @code{critical-power-action} (default: @code{'hybrid-sleep})
15990 The action taken when @code{percentage-action} or @code{time-action} is
15991 reached (depending on the configuration of @code{use-percentage-for-policy?}).
15992
15993 Possible values are:
15994
15995 @itemize @bullet
15996 @item
15997 @code{'power-off}
15998
15999 @item
16000 @code{'hibernate}
16001
16002 @item
16003 @code{'hybrid-sleep}.
16004 @end itemize
16005
16006 @end table
16007 @end deftp
16008
16009 @deffn {Scheme Procedure} udisks-service [#:udisks @var{udisks}]
16010 Return a service for @uref{https://udisks.freedesktop.org/docs/latest/,
16011 UDisks}, a @dfn{disk management} daemon that provides user interfaces with
16012 notifications and ways to mount/unmount disks. Programs that talk to UDisks
16013 include the @command{udisksctl} command, part of UDisks, and GNOME Disks.
16014 @end deffn
16015
16016 @deffn {Scheme Variable} colord-service-type
16017 This is the type of the service that runs @command{colord}, a system
16018 service with a D-Bus
16019 interface to manage the color profiles of input and output devices such as
16020 screens and scanners. It is notably used by the GNOME Color Manager graphical
16021 tool. See @uref{https://www.freedesktop.org/software/colord/, the colord web
16022 site} for more information.
16023 @end deffn
16024
16025 @deffn {Scheme Procedure} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()]
16026 Return a configuration allowing an application to access GeoClue
16027 location data. @var{name} is the Desktop ID of the application, without
16028 the @code{.desktop} part. If @var{allowed?} is true, the application
16029 will have access to location information by default. The boolean
16030 @var{system?} value indicates whether an application is a system component
16031 or not. Finally @var{users} is a list of UIDs of all users for which
16032 this application is allowed location info access. An empty users list
16033 means that all users are allowed.
16034 @end deffn
16035
16036 @cindex scanner access
16037 @deffn {Scheme Procedure} sane-service-type
16038 This service provides access to scanners @i{via}
16039 @uref{http://www.sane-project.org, SANE} by installing the necessary udev
16040 rules.
16041 @end deffn
16042
16043 @defvr {Scheme Variable} %standard-geoclue-applications
16044 The standard list of well-known GeoClue application configurations,
16045 granting authority to the GNOME date-and-time utility to ask for the
16046 current location in order to set the time zone, and allowing the
16047 IceCat and Epiphany web browsers to request location information.
16048 IceCat and Epiphany both query the user before allowing a web page to
16049 know the user's location.
16050 @end defvr
16051
16052 @deffn {Scheme Procedure} geoclue-service [#:colord @var{colord}] @
16053 [#:whitelist '()] @
16054 [#:wifi-geolocation-url "https://location.services.mozilla.com/v1/geolocate?key=geoclue"] @
16055 [#:submit-data? #f]
16056 [#:wifi-submission-url "https://location.services.mozilla.com/v1/submit?key=geoclue"] @
16057 [#:submission-nick "geoclue"] @
16058 [#:applications %standard-geoclue-applications]
16059 Return a service that runs the GeoClue location service. This service
16060 provides a D-Bus interface to allow applications to request access to a
16061 user's physical location, and optionally to add information to online
16062 location databases. See
16063 @uref{https://wiki.freedesktop.org/www/Software/GeoClue/, the GeoClue
16064 web site} for more information.
16065 @end deffn
16066
16067 @deffn {Scheme Procedure} bluetooth-service [#:bluez @var{bluez}] @
16068 [@w{#:auto-enable? #f}]
16069 Return a service that runs the @command{bluetoothd} daemon, which
16070 manages all the Bluetooth devices and provides a number of D-Bus
16071 interfaces. When AUTO-ENABLE? is true, the bluetooth controller is
16072 powered automatically at boot, which can be useful when using a
16073 bluetooth keyboard or mouse.
16074
16075 Users need to be in the @code{lp} group to access the D-Bus service.
16076 @end deffn
16077
16078 @defvr {Scheme Variable} gnome-keyring-service-type
16079 This is the type of the service that adds the
16080 @uref{https://wiki.gnome.org/Projects/GnomeKeyring, GNOME Keyring}. Its
16081 value is a @code{gnome-keyring-configuration} object (see below.)
16082
16083 This service adds the @code{gnome-keyring} package to the system profile
16084 and extends PAM with entries using @code{pam_gnome_keyring.so}, unlocking
16085 a user's login keyring when they log in or setting its password with passwd.
16086 @end defvr
16087
16088 @deftp {Data Type} gnome-keyring-configuration
16089 Configuration record for the GNOME Keyring service.
16090
16091 @table @asis
16092 @item @code{keyring} (default: @code{gnome-keyring})
16093 The GNOME keyring package to use.
16094
16095 @item @code{pam-services}
16096 A list of @code{(@var{service} . @var{kind})} pairs denoting PAM
16097 services to extend, where @var{service} is the name of an existing
16098 service to extend and @var{kind} is one of @code{login} or
16099 @code{passwd}.
16100
16101 If @code{login} is given, it adds an optional
16102 @code{pam_gnome_keyring.so} to the auth block without arguments and to
16103 the session block with @code{auto_start}. If @code{passwd} is given, it
16104 adds an optional @code{pam_gnome_keyring.so} to the password block
16105 without arguments.
16106
16107 By default, this field contains ``gdm-password'' with the value @code{login}
16108 and ``passwd'' is with the value @code{passwd}.
16109 @end table
16110 @end deftp
16111
16112
16113 @node Sound Services
16114 @subsection Sound Services
16115
16116 @cindex sound support
16117 @cindex ALSA
16118 @cindex PulseAudio, sound support
16119
16120 The @code{(gnu services sound)} module provides a service to configure the
16121 Advanced Linux Sound Architecture (ALSA) system, which makes PulseAudio the
16122 preferred ALSA output driver.
16123
16124 @deffn {Scheme Variable} alsa-service-type
16125 This is the type for the @uref{https://alsa-project.org/, Advanced Linux Sound
16126 Architecture} (ALSA) system, which generates the @file{/etc/asound.conf}
16127 configuration file. The value for this type is a @command{alsa-configuration}
16128 record as in this example:
16129
16130 @lisp
16131 (service alsa-service-type)
16132 @end lisp
16133
16134 See below for details about @code{alsa-configuration}.
16135 @end deffn
16136
16137 @deftp {Data Type} alsa-configuration
16138 Data type representing the configuration for @code{alsa-service}.
16139
16140 @table @asis
16141 @item @code{alsa-plugins} (default: @var{alsa-plugins})
16142 @code{alsa-plugins} package to use.
16143
16144 @item @code{pulseaudio?} (default: @var{#t})
16145 Whether ALSA applications should transparently be made to use the
16146 @uref{https://www.pulseaudio.org/, PulseAudio} sound server.
16147
16148 Using PulseAudio allows you to run several sound-producing applications
16149 at the same time and to individual control them @i{via}
16150 @command{pavucontrol}, among other things.
16151
16152 @item @code{extra-options} (default: @var{""})
16153 String to append to the @file{/etc/asound.conf} file.
16154
16155 @end table
16156 @end deftp
16157
16158 Individual users who want to override the system configuration of ALSA can do
16159 it with the @file{~/.asoundrc} file:
16160
16161 @example
16162 # In guix, we have to specify the absolute path for plugins.
16163 pcm_type.jack @{
16164 lib "/home/alice/.guix-profile/lib/alsa-lib/libasound_module_pcm_jack.so"
16165 @}
16166
16167 # Routing ALSA to jack:
16168 # <http://jackaudio.org/faq/routing_alsa.html>.
16169 pcm.rawjack @{
16170 type jack
16171 playback_ports @{
16172 0 system:playback_1
16173 1 system:playback_2
16174 @}
16175
16176 capture_ports @{
16177 0 system:capture_1
16178 1 system:capture_2
16179 @}
16180 @}
16181
16182 pcm.!default @{
16183 type plug
16184 slave @{
16185 pcm "rawjack"
16186 @}
16187 @}
16188 @end example
16189
16190 See @uref{https://www.alsa-project.org/main/index.php/Asoundrc} for the
16191 details.
16192
16193 @deffn {Scheme Variable} pulseaudio-service-type
16194 This is the type for the @uref{https://www.pulseaudio.org/, PulseAudio}
16195 sound server. It exists to allow system overrides of the default settings
16196 via @code{pulseaudio-configuration}, see below.
16197
16198 @quotation Warning
16199 This service on its own does not ensure, that the @code{pulseaudio} package
16200 exists on your machine. It merely adds configuration files for it, as
16201 detailed below. In the (admittedly unlikely) case, that you find yourself
16202 without a @code{pulseaudio} package, consider enabling it through the
16203 @code{alsa-service-type} above.
16204 @end quotation
16205 @end deffn
16206
16207 @deftp {Data Type} pulseaudio-configuration
16208 Data type representing the configuration for @code{pulseaudio-service}.
16209
16210 @table @asis
16211 @item @var{client-conf} (default: @code{'()})
16212 List of settings to set in @file{client.conf}.
16213 Accepts a list of strings or a symbol-value pairs. A string will be
16214 inserted as-is with a newline added. A pair will be formatted as
16215 ``key = value'', again with a newline added.
16216
16217 @item @var{daemon-conf} (default: @code{'((flat-volumes . no))})
16218 List of settings to set in @file{daemon.conf}, formatted just like
16219 @var{client-conf}.
16220
16221 @item @var{script-file} (default: @code{(file-append pulseaudio "/etc/pulse/default.pa")})
16222 Script file to use as as @file{default.pa}.
16223
16224 @item @var{system-script-file} (default: @code{(file-append pulseaudio "/etc/pulse/system.pa")})
16225 Script file to use as as @file{system.pa}.
16226 @end table
16227 @end deftp
16228
16229 @deffn {Scheme Variable} ladspa-service-type
16230 This service sets the @var{LADSPA_PATH} variable, so that programs, which
16231 respect it, e.g. PulseAudio, can load LADSPA plugins.
16232
16233 The following example will setup the service to enable modules from the
16234 @code{swh-plugins} package:
16235
16236 @lisp
16237 (service ladspa-service-type
16238 (ladspa-configuration (plugins (list swh-plugins))))
16239 @end lisp
16240
16241 See @uref{http://plugin.org.uk/ladspa-swh/docs/ladspa-swh.html} for the
16242 details.
16243
16244 @end deffn
16245
16246 @node Database Services
16247 @subsection Database Services
16248
16249 @cindex database
16250 @cindex SQL
16251 The @code{(gnu services databases)} module provides the following services.
16252
16253 @deffn {Scheme Procedure} postgresql-service [#:postgresql postgresql] @
16254 [#:config-file] [#:data-directory ``/var/lib/postgresql/data''] @
16255 [#:port 5432] [#:locale ``en_US.utf8''] [#:extension-packages '()]
16256 Return a service that runs @var{postgresql}, the PostgreSQL database
16257 server.
16258
16259 The PostgreSQL daemon loads its runtime configuration from @var{config-file},
16260 creates a database cluster with @var{locale} as the default
16261 locale, stored in @var{data-directory}. It then listens on @var{port}.
16262
16263 @cindex postgresql extension-packages
16264 Additional extensions are loaded from packages listed in
16265 @var{extension-packages}. Extensions are available at runtime. For instance,
16266 to create a geographic database using the @code{postgis} extension, a user can
16267 configure the postgresql-service as in this example:
16268
16269 @cindex postgis
16270 @lisp
16271 (use-package-modules databases geo)
16272
16273 (operating-system
16274 ...
16275 ;; postgresql is required to run `psql' but postgis is not required for
16276 ;; proper operation.
16277 (packages (cons* postgresql %base-packages))
16278 (services
16279 (cons*
16280 (postgresql-service #:extension-packages (list postgis))
16281 %base-services)))
16282 @end lisp
16283
16284 Then the extension becomes visible and you can initialise an empty geographic
16285 database in this way:
16286
16287 @example
16288 psql -U postgres
16289 > create database postgistest;
16290 > \connect postgistest;
16291 > create extension postgis;
16292 > create extension postgis_topology;
16293 @end example
16294
16295 There is no need to add this field for contrib extensions such as hstore or
16296 dblink as they are already loadable by postgresql. This field is only
16297 required to add extensions provided by other packages.
16298 @end deffn
16299
16300 @deffn {Scheme Procedure} mysql-service [#:config (mysql-configuration)]
16301 Return a service that runs @command{mysqld}, the MySQL or MariaDB
16302 database server.
16303
16304 The optional @var{config} argument specifies the configuration for
16305 @command{mysqld}, which should be a @code{<mysql-configuration>} object.
16306 @end deffn
16307
16308 @deftp {Data Type} mysql-configuration
16309 Data type representing the configuration of @var{mysql-service}.
16310
16311 @table @asis
16312 @item @code{mysql} (default: @var{mariadb})
16313 Package object of the MySQL database server, can be either @var{mariadb}
16314 or @var{mysql}.
16315
16316 For MySQL, a temporary root password will be displayed at activation time.
16317 For MariaDB, the root password is empty.
16318
16319 @item @code{port} (default: @code{3306})
16320 TCP port on which the database server listens for incoming connections.
16321 @end table
16322 @end deftp
16323
16324 @defvr {Scheme Variable} memcached-service-type
16325 This is the service type for the @uref{https://memcached.org/,
16326 Memcached} service, which provides a distributed in memory cache. The
16327 value for the service type is a @code{memcached-configuration} object.
16328 @end defvr
16329
16330 @lisp
16331 (service memcached-service-type)
16332 @end lisp
16333
16334 @deftp {Data Type} memcached-configuration
16335 Data type representing the configuration of memcached.
16336
16337 @table @asis
16338 @item @code{memcached} (default: @code{memcached})
16339 The Memcached package to use.
16340
16341 @item @code{interfaces} (default: @code{'("0.0.0.0")})
16342 Network interfaces on which to listen.
16343
16344 @item @code{tcp-port} (default: @code{11211})
16345 Port on which to accept connections on,
16346
16347 @item @code{udp-port} (default: @code{11211})
16348 Port on which to accept UDP connections on, a value of 0 will disable
16349 listening on a UDP socket.
16350
16351 @item @code{additional-options} (default: @code{'()})
16352 Additional command line options to pass to @code{memcached}.
16353 @end table
16354 @end deftp
16355
16356 @defvr {Scheme Variable} mongodb-service-type
16357 This is the service type for @uref{https://www.mongodb.com/, MongoDB}.
16358 The value for the service type is a @code{mongodb-configuration} object.
16359 @end defvr
16360
16361 @lisp
16362 (service mongodb-service-type)
16363 @end lisp
16364
16365 @deftp {Data Type} mongodb-configuration
16366 Data type representing the configuration of mongodb.
16367
16368 @table @asis
16369 @item @code{mongodb} (default: @code{mongodb})
16370 The MongoDB package to use.
16371
16372 @item @code{config-file} (default: @code{%default-mongodb-configuration-file})
16373 The configuration file for MongoDB.
16374
16375 @item @code{data-directory} (default: @code{"/var/lib/mongodb"})
16376 This value is used to create the directory, so that it exists and is
16377 owned by the mongodb user. It should match the data-directory which
16378 MongoDB is configured to use through the configuration file.
16379 @end table
16380 @end deftp
16381
16382 @defvr {Scheme Variable} redis-service-type
16383 This is the service type for the @uref{https://redis.io/, Redis}
16384 key/value store, whose value is a @code{redis-configuration} object.
16385 @end defvr
16386
16387 @deftp {Data Type} redis-configuration
16388 Data type representing the configuration of redis.
16389
16390 @table @asis
16391 @item @code{redis} (default: @code{redis})
16392 The Redis package to use.
16393
16394 @item @code{bind} (default: @code{"127.0.0.1"})
16395 Network interface on which to listen.
16396
16397 @item @code{port} (default: @code{6379})
16398 Port on which to accept connections on, a value of 0 will disable
16399 listening on a TCP socket.
16400
16401 @item @code{working-directory} (default: @code{"/var/lib/redis"})
16402 Directory in which to store the database and related files.
16403 @end table
16404 @end deftp
16405
16406 @node Mail Services
16407 @subsection Mail Services
16408
16409 @cindex mail
16410 @cindex email
16411 The @code{(gnu services mail)} module provides Guix service definitions
16412 for email services: IMAP, POP3, and LMTP servers, as well as mail
16413 transport agents (MTAs). Lots of acronyms! These services are detailed
16414 in the subsections below.
16415
16416 @subsubheading Dovecot Service
16417
16418 @deffn {Scheme Procedure} dovecot-service [#:config (dovecot-configuration)]
16419 Return a service that runs the Dovecot IMAP/POP3/LMTP mail server.
16420 @end deffn
16421
16422 By default, Dovecot does not need much configuration; the default
16423 configuration object created by @code{(dovecot-configuration)} will
16424 suffice if your mail is delivered to @code{~/Maildir}. A self-signed
16425 certificate will be generated for TLS-protected connections, though
16426 Dovecot will also listen on cleartext ports by default. There are a
16427 number of options, though, which mail administrators might need to change,
16428 and as is the case with other services, Guix allows the system
16429 administrator to specify these parameters via a uniform Scheme interface.
16430
16431 For example, to specify that mail is located at @code{maildir~/.mail},
16432 one would instantiate the Dovecot service like this:
16433
16434 @lisp
16435 (dovecot-service #:config
16436 (dovecot-configuration
16437 (mail-location "maildir:~/.mail")))
16438 @end lisp
16439
16440 The available configuration parameters follow. Each parameter
16441 definition is preceded by its type; for example, @samp{string-list foo}
16442 indicates that the @code{foo} parameter should be specified as a list of
16443 strings. There is also a way to specify the configuration as a string,
16444 if you have an old @code{dovecot.conf} file that you want to port over
16445 from some other system; see the end for more details.
16446
16447 @c The following documentation was initially generated by
16448 @c (generate-documentation) in (gnu services mail). Manually maintained
16449 @c documentation is better, so we shouldn't hesitate to edit below as
16450 @c needed. However if the change you want to make to this documentation
16451 @c can be done in an automated way, it's probably easier to change
16452 @c (generate-documentation) than to make it below and have to deal with
16453 @c the churn as dovecot updates.
16454
16455 Available @code{dovecot-configuration} fields are:
16456
16457 @deftypevr {@code{dovecot-configuration} parameter} package dovecot
16458 The dovecot package.
16459 @end deftypevr
16460
16461 @deftypevr {@code{dovecot-configuration} parameter} comma-separated-string-list listen
16462 A list of IPs or hosts where to listen for connections. @samp{*}
16463 listens on all IPv4 interfaces, @samp{::} listens on all IPv6
16464 interfaces. If you want to specify non-default ports or anything more
16465 complex, customize the address and port fields of the
16466 @samp{inet-listener} of the specific services you are interested in.
16467 @end deftypevr
16468
16469 @deftypevr {@code{dovecot-configuration} parameter} protocol-configuration-list protocols
16470 List of protocols we want to serve. Available protocols include
16471 @samp{imap}, @samp{pop3}, and @samp{lmtp}.
16472
16473 Available @code{protocol-configuration} fields are:
16474
16475 @deftypevr {@code{protocol-configuration} parameter} string name
16476 The name of the protocol.
16477 @end deftypevr
16478
16479 @deftypevr {@code{protocol-configuration} parameter} string auth-socket-path
16480 UNIX socket path to the master authentication server to find users.
16481 This is used by imap (for shared users) and lda.
16482 It defaults to @samp{"/var/run/dovecot/auth-userdb"}.
16483 @end deftypevr
16484
16485 @deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins
16486 Space separated list of plugins to load.
16487 @end deftypevr
16488
16489 @deftypevr {@code{protocol-configuration} parameter} non-negative-integer mail-max-userip-connections
16490 Maximum number of IMAP connections allowed for a user from each IP
16491 address. NOTE: The username is compared case-sensitively.
16492 Defaults to @samp{10}.
16493 @end deftypevr
16494
16495 @end deftypevr
16496
16497 @deftypevr {@code{dovecot-configuration} parameter} service-configuration-list services
16498 List of services to enable. Available services include @samp{imap},
16499 @samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}, and
16500 @samp{lmtp}.
16501
16502 Available @code{service-configuration} fields are:
16503
16504 @deftypevr {@code{service-configuration} parameter} string kind
16505 The service kind. Valid values include @code{director},
16506 @code{imap-login}, @code{pop3-login}, @code{lmtp}, @code{imap},
16507 @code{pop3}, @code{auth}, @code{auth-worker}, @code{dict},
16508 @code{tcpwrap}, @code{quota-warning}, or anything else.
16509 @end deftypevr
16510
16511 @deftypevr {@code{service-configuration} parameter} listener-configuration-list listeners
16512 Listeners for the service. A listener is either a
16513 @code{unix-listener-configuration}, a @code{fifo-listener-configuration}, or
16514 an @code{inet-listener-configuration}.
16515 Defaults to @samp{()}.
16516
16517 Available @code{unix-listener-configuration} fields are:
16518
16519 @deftypevr {@code{unix-listener-configuration} parameter} string path
16520 Path to the file, relative to @code{base-dir} field. This is also used as
16521 the section name.
16522 @end deftypevr
16523
16524 @deftypevr {@code{unix-listener-configuration} parameter} string mode
16525 The access mode for the socket.
16526 Defaults to @samp{"0600"}.
16527 @end deftypevr
16528
16529 @deftypevr {@code{unix-listener-configuration} parameter} string user
16530 The user to own the socket.
16531 Defaults to @samp{""}.
16532 @end deftypevr
16533
16534 @deftypevr {@code{unix-listener-configuration} parameter} string group
16535 The group to own the socket.
16536 Defaults to @samp{""}.
16537 @end deftypevr
16538
16539
16540 Available @code{fifo-listener-configuration} fields are:
16541
16542 @deftypevr {@code{fifo-listener-configuration} parameter} string path
16543 Path to the file, relative to @code{base-dir} field. This is also used as
16544 the section name.
16545 @end deftypevr
16546
16547 @deftypevr {@code{fifo-listener-configuration} parameter} string mode
16548 The access mode for the socket.
16549 Defaults to @samp{"0600"}.
16550 @end deftypevr
16551
16552 @deftypevr {@code{fifo-listener-configuration} parameter} string user
16553 The user to own the socket.
16554 Defaults to @samp{""}.
16555 @end deftypevr
16556
16557 @deftypevr {@code{fifo-listener-configuration} parameter} string group
16558 The group to own the socket.
16559 Defaults to @samp{""}.
16560 @end deftypevr
16561
16562
16563 Available @code{inet-listener-configuration} fields are:
16564
16565 @deftypevr {@code{inet-listener-configuration} parameter} string protocol
16566 The protocol to listen for.
16567 @end deftypevr
16568
16569 @deftypevr {@code{inet-listener-configuration} parameter} string address
16570 The address on which to listen, or empty for all addresses.
16571 Defaults to @samp{""}.
16572 @end deftypevr
16573
16574 @deftypevr {@code{inet-listener-configuration} parameter} non-negative-integer port
16575 The port on which to listen.
16576 @end deftypevr
16577
16578 @deftypevr {@code{inet-listener-configuration} parameter} boolean ssl?
16579 Whether to use SSL for this service; @samp{yes}, @samp{no}, or
16580 @samp{required}.
16581 Defaults to @samp{#t}.
16582 @end deftypevr
16583
16584 @end deftypevr
16585
16586 @deftypevr {@code{service-configuration} parameter} non-negative-integer client-limit
16587 Maximum number of simultaneous client connections per process. Once
16588 this number of connections is received, the next incoming connection
16589 will prompt Dovecot to spawn another process. If set to 0,
16590 @code{default-client-limit} is used instead.
16591
16592 Defaults to @samp{0}.
16593
16594 @end deftypevr
16595
16596 @deftypevr {@code{service-configuration} parameter} non-negative-integer service-count
16597 Number of connections to handle before starting a new process.
16598 Typically the only useful values are 0 (unlimited) or 1. 1 is more
16599 secure, but 0 is faster. <doc/wiki/LoginProcess.txt>.
16600 Defaults to @samp{1}.
16601
16602 @end deftypevr
16603
16604 @deftypevr {@code{service-configuration} parameter} non-negative-integer process-limit
16605 Maximum number of processes that can exist for this service. If set to
16606 0, @code{default-process-limit} is used instead.
16607
16608 Defaults to @samp{0}.
16609
16610 @end deftypevr
16611
16612 @deftypevr {@code{service-configuration} parameter} non-negative-integer process-min-avail
16613 Number of processes to always keep waiting for more connections.
16614 Defaults to @samp{0}.
16615 @end deftypevr
16616
16617 @deftypevr {@code{service-configuration} parameter} non-negative-integer vsz-limit
16618 If you set @samp{service-count 0}, you probably need to grow
16619 this.
16620 Defaults to @samp{256000000}.
16621 @end deftypevr
16622
16623 @end deftypevr
16624
16625 @deftypevr {@code{dovecot-configuration} parameter} dict-configuration dict
16626 Dict configuration, as created by the @code{dict-configuration}
16627 constructor.
16628
16629 Available @code{dict-configuration} fields are:
16630
16631 @deftypevr {@code{dict-configuration} parameter} free-form-fields entries
16632 A list of key-value pairs that this dict should hold.
16633 Defaults to @samp{()}.
16634 @end deftypevr
16635
16636 @end deftypevr
16637
16638 @deftypevr {@code{dovecot-configuration} parameter} passdb-configuration-list passdbs
16639 A list of passdb configurations, each one created by the
16640 @code{passdb-configuration} constructor.
16641
16642 Available @code{passdb-configuration} fields are:
16643
16644 @deftypevr {@code{passdb-configuration} parameter} string driver
16645 The driver that the passdb should use. Valid values include
16646 @samp{pam}, @samp{passwd}, @samp{shadow}, @samp{bsdauth}, and
16647 @samp{static}.
16648 Defaults to @samp{"pam"}.
16649 @end deftypevr
16650
16651 @deftypevr {@code{passdb-configuration} parameter} space-separated-string-list args
16652 Space separated list of arguments to the passdb driver.
16653 Defaults to @samp{""}.
16654 @end deftypevr
16655
16656 @end deftypevr
16657
16658 @deftypevr {@code{dovecot-configuration} parameter} userdb-configuration-list userdbs
16659 List of userdb configurations, each one created by the
16660 @code{userdb-configuration} constructor.
16661
16662 Available @code{userdb-configuration} fields are:
16663
16664 @deftypevr {@code{userdb-configuration} parameter} string driver
16665 The driver that the userdb should use. Valid values include
16666 @samp{passwd} and @samp{static}.
16667 Defaults to @samp{"passwd"}.
16668 @end deftypevr
16669
16670 @deftypevr {@code{userdb-configuration} parameter} space-separated-string-list args
16671 Space separated list of arguments to the userdb driver.
16672 Defaults to @samp{""}.
16673 @end deftypevr
16674
16675 @deftypevr {@code{userdb-configuration} parameter} free-form-args override-fields
16676 Override fields from passwd.
16677 Defaults to @samp{()}.
16678 @end deftypevr
16679
16680 @end deftypevr
16681
16682 @deftypevr {@code{dovecot-configuration} parameter} plugin-configuration plugin-configuration
16683 Plug-in configuration, created by the @code{plugin-configuration}
16684 constructor.
16685 @end deftypevr
16686
16687 @deftypevr {@code{dovecot-configuration} parameter} list-of-namespace-configuration namespaces
16688 List of namespaces. Each item in the list is created by the
16689 @code{namespace-configuration} constructor.
16690
16691 Available @code{namespace-configuration} fields are:
16692
16693 @deftypevr {@code{namespace-configuration} parameter} string name
16694 Name for this namespace.
16695 @end deftypevr
16696
16697 @deftypevr {@code{namespace-configuration} parameter} string type
16698 Namespace type: @samp{private}, @samp{shared} or @samp{public}.
16699 Defaults to @samp{"private"}.
16700 @end deftypevr
16701
16702 @deftypevr {@code{namespace-configuration} parameter} string separator
16703 Hierarchy separator to use. You should use the same separator for
16704 all namespaces or some clients get confused. @samp{/} is usually a good
16705 one. The default however depends on the underlying mail storage
16706 format.
16707 Defaults to @samp{""}.
16708 @end deftypevr
16709
16710 @deftypevr {@code{namespace-configuration} parameter} string prefix
16711 Prefix required to access this namespace. This needs to be
16712 different for all namespaces. For example @samp{Public/}.
16713 Defaults to @samp{""}.
16714 @end deftypevr
16715
16716 @deftypevr {@code{namespace-configuration} parameter} string location
16717 Physical location of the mailbox. This is in the same format as
16718 mail_location, which is also the default for it.
16719 Defaults to @samp{""}.
16720 @end deftypevr
16721
16722 @deftypevr {@code{namespace-configuration} parameter} boolean inbox?
16723 There can be only one INBOX, and this setting defines which
16724 namespace has it.
16725 Defaults to @samp{#f}.
16726 @end deftypevr
16727
16728 @deftypevr {@code{namespace-configuration} parameter} boolean hidden?
16729 If namespace is hidden, it's not advertised to clients via NAMESPACE
16730 extension. You'll most likely also want to set @samp{list? #f}. This is mostly
16731 useful when converting from another server with different namespaces
16732 which you want to deprecate but still keep working. For example you can
16733 create hidden namespaces with prefixes @samp{~/mail/}, @samp{~%u/mail/}
16734 and @samp{mail/}.
16735 Defaults to @samp{#f}.
16736 @end deftypevr
16737
16738 @deftypevr {@code{namespace-configuration} parameter} boolean list?
16739 Show the mailboxes under this namespace with the LIST command. This
16740 makes the namespace visible for clients that do not support the NAMESPACE
16741 extension. The special @code{children} value lists child mailboxes, but
16742 hides the namespace prefix.
16743 Defaults to @samp{#t}.
16744 @end deftypevr
16745
16746 @deftypevr {@code{namespace-configuration} parameter} boolean subscriptions?
16747 Namespace handles its own subscriptions. If set to @code{#f}, the
16748 parent namespace handles them. The empty prefix should always have this
16749 as @code{#t}).
16750 Defaults to @samp{#t}.
16751 @end deftypevr
16752
16753 @deftypevr {@code{namespace-configuration} parameter} mailbox-configuration-list mailboxes
16754 List of predefined mailboxes in this namespace.
16755 Defaults to @samp{()}.
16756
16757 Available @code{mailbox-configuration} fields are:
16758
16759 @deftypevr {@code{mailbox-configuration} parameter} string name
16760 Name for this mailbox.
16761 @end deftypevr
16762
16763 @deftypevr {@code{mailbox-configuration} parameter} string auto
16764 @samp{create} will automatically create this mailbox.
16765 @samp{subscribe} will both create and subscribe to the mailbox.
16766 Defaults to @samp{"no"}.
16767 @end deftypevr
16768
16769 @deftypevr {@code{mailbox-configuration} parameter} space-separated-string-list special-use
16770 List of IMAP @code{SPECIAL-USE} attributes as specified by RFC 6154.
16771 Valid values are @code{\All}, @code{\Archive}, @code{\Drafts},
16772 @code{\Flagged}, @code{\Junk}, @code{\Sent}, and @code{\Trash}.
16773 Defaults to @samp{()}.
16774 @end deftypevr
16775
16776 @end deftypevr
16777
16778 @end deftypevr
16779
16780 @deftypevr {@code{dovecot-configuration} parameter} file-name base-dir
16781 Base directory where to store runtime data.
16782 Defaults to @samp{"/var/run/dovecot/"}.
16783 @end deftypevr
16784
16785 @deftypevr {@code{dovecot-configuration} parameter} string login-greeting
16786 Greeting message for clients.
16787 Defaults to @samp{"Dovecot ready."}.
16788 @end deftypevr
16789
16790 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-trusted-networks
16791 List of trusted network ranges. Connections from these IPs are
16792 allowed to override their IP addresses and ports (for logging and for
16793 authentication checks). @samp{disable-plaintext-auth} is also ignored
16794 for these networks. Typically you would specify your IMAP proxy servers
16795 here.
16796 Defaults to @samp{()}.
16797 @end deftypevr
16798
16799 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-access-sockets
16800 List of login access check sockets (e.g.@: tcpwrap).
16801 Defaults to @samp{()}.
16802 @end deftypevr
16803
16804 @deftypevr {@code{dovecot-configuration} parameter} boolean verbose-proctitle?
16805 Show more verbose process titles (in ps). Currently shows user name
16806 and IP address. Useful for seeing who is actually using the IMAP
16807 processes (e.g.@: shared mailboxes or if the same uid is used for multiple
16808 accounts).
16809 Defaults to @samp{#f}.
16810 @end deftypevr
16811
16812 @deftypevr {@code{dovecot-configuration} parameter} boolean shutdown-clients?
16813 Should all processes be killed when Dovecot master process shuts down.
16814 Setting this to @code{#f} means that Dovecot can be upgraded without
16815 forcing existing client connections to close (although that could also
16816 be a problem if the upgrade is e.g.@: due to a security fix).
16817 Defaults to @samp{#t}.
16818 @end deftypevr
16819
16820 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer doveadm-worker-count
16821 If non-zero, run mail commands via this many connections to doveadm
16822 server, instead of running them directly in the same process.
16823 Defaults to @samp{0}.
16824 @end deftypevr
16825
16826 @deftypevr {@code{dovecot-configuration} parameter} string doveadm-socket-path
16827 UNIX socket or host:port used for connecting to doveadm server.
16828 Defaults to @samp{"doveadm-server"}.
16829 @end deftypevr
16830
16831 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list import-environment
16832 List of environment variables that are preserved on Dovecot startup
16833 and passed down to all of its child processes. You can also give
16834 key=value pairs to always set specific settings.
16835 @end deftypevr
16836
16837 @deftypevr {@code{dovecot-configuration} parameter} boolean disable-plaintext-auth?
16838 Disable LOGIN command and all other plaintext authentications unless
16839 SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
16840 matches the local IP (i.e.@: you're connecting from the same computer),
16841 the connection is considered secure and plaintext authentication is
16842 allowed. See also ssl=required setting.
16843 Defaults to @samp{#t}.
16844 @end deftypevr
16845
16846 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-cache-size
16847 Authentication cache size (e.g.@: @samp{#e10e6}). 0 means it's disabled.
16848 Note that bsdauth, PAM and vpopmail require @samp{cache-key} to be set
16849 for caching to be used.
16850 Defaults to @samp{0}.
16851 @end deftypevr
16852
16853 @deftypevr {@code{dovecot-configuration} parameter} string auth-cache-ttl
16854 Time to live for cached data. After TTL expires the cached record
16855 is no longer used, *except* if the main database lookup returns internal
16856 failure. We also try to handle password changes automatically: If
16857 user's previous authentication was successful, but this one wasn't, the
16858 cache isn't used. For now this works only with plaintext
16859 authentication.
16860 Defaults to @samp{"1 hour"}.
16861 @end deftypevr
16862
16863 @deftypevr {@code{dovecot-configuration} parameter} string auth-cache-negative-ttl
16864 TTL for negative hits (user not found, password mismatch).
16865 0 disables caching them completely.
16866 Defaults to @samp{"1 hour"}.
16867 @end deftypevr
16868
16869 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-realms
16870 List of realms for SASL authentication mechanisms that need them.
16871 You can leave it empty if you don't want to support multiple realms.
16872 Many clients simply use the first one listed here, so keep the default
16873 realm first.
16874 Defaults to @samp{()}.
16875 @end deftypevr
16876
16877 @deftypevr {@code{dovecot-configuration} parameter} string auth-default-realm
16878 Default realm/domain to use if none was specified. This is used for
16879 both SASL realms and appending @@domain to username in plaintext
16880 logins.
16881 Defaults to @samp{""}.
16882 @end deftypevr
16883
16884 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-chars
16885 List of allowed characters in username. If the user-given username
16886 contains a character not listed in here, the login automatically fails.
16887 This is just an extra check to make sure user can't exploit any
16888 potential quote escaping vulnerabilities with SQL/LDAP databases. If
16889 you want to allow all characters, set this value to empty.
16890 Defaults to @samp{"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@@"}.
16891 @end deftypevr
16892
16893 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-translation
16894 Username character translations before it's looked up from
16895 databases. The value contains series of from -> to characters. For
16896 example @samp{#@@/@@} means that @samp{#} and @samp{/} characters are
16897 translated to @samp{@@}.
16898 Defaults to @samp{""}.
16899 @end deftypevr
16900
16901 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-format
16902 Username formatting before it's looked up from databases. You can
16903 use the standard variables here, e.g.@: %Lu would lowercase the username,
16904 %n would drop away the domain if it was given, or @samp{%n-AT-%d} would
16905 change the @samp{@@} into @samp{-AT-}. This translation is done after
16906 @samp{auth-username-translation} changes.
16907 Defaults to @samp{"%Lu"}.
16908 @end deftypevr
16909
16910 @deftypevr {@code{dovecot-configuration} parameter} string auth-master-user-separator
16911 If you want to allow master users to log in by specifying the master
16912 username within the normal username string (i.e.@: not using SASL
16913 mechanism's support for it), you can specify the separator character
16914 here. The format is then <username><separator><master username>.
16915 UW-IMAP uses @samp{*} as the separator, so that could be a good
16916 choice.
16917 Defaults to @samp{""}.
16918 @end deftypevr
16919
16920 @deftypevr {@code{dovecot-configuration} parameter} string auth-anonymous-username
16921 Username to use for users logging in with ANONYMOUS SASL
16922 mechanism.
16923 Defaults to @samp{"anonymous"}.
16924 @end deftypevr
16925
16926 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-worker-max-count
16927 Maximum number of dovecot-auth worker processes. They're used to
16928 execute blocking passdb and userdb queries (e.g.@: MySQL and PAM).
16929 They're automatically created and destroyed as needed.
16930 Defaults to @samp{30}.
16931 @end deftypevr
16932
16933 @deftypevr {@code{dovecot-configuration} parameter} string auth-gssapi-hostname
16934 Host name to use in GSSAPI principal names. The default is to use
16935 the name returned by gethostname(). Use @samp{$ALL} (with quotes) to
16936 allow all keytab entries.
16937 Defaults to @samp{""}.
16938 @end deftypevr
16939
16940 @deftypevr {@code{dovecot-configuration} parameter} string auth-krb5-keytab
16941 Kerberos keytab to use for the GSSAPI mechanism. Will use the
16942 system default (usually @file{/etc/krb5.keytab}) if not specified. You may
16943 need to change the auth service to run as root to be able to read this
16944 file.
16945 Defaults to @samp{""}.
16946 @end deftypevr
16947
16948 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-use-winbind?
16949 Do NTLM and GSS-SPNEGO authentication using Samba's winbind daemon
16950 and @samp{ntlm-auth} helper.
16951 <doc/wiki/Authentication/Mechanisms/Winbind.txt>.
16952 Defaults to @samp{#f}.
16953 @end deftypevr
16954
16955 @deftypevr {@code{dovecot-configuration} parameter} file-name auth-winbind-helper-path
16956 Path for Samba's @samp{ntlm-auth} helper binary.
16957 Defaults to @samp{"/usr/bin/ntlm_auth"}.
16958 @end deftypevr
16959
16960 @deftypevr {@code{dovecot-configuration} parameter} string auth-failure-delay
16961 Time to delay before replying to failed authentications.
16962 Defaults to @samp{"2 secs"}.
16963 @end deftypevr
16964
16965 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-require-client-cert?
16966 Require a valid SSL client certificate or the authentication
16967 fails.
16968 Defaults to @samp{#f}.
16969 @end deftypevr
16970
16971 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-username-from-cert?
16972 Take the username from client's SSL certificate, using
16973 @code{X509_NAME_get_text_by_NID()} which returns the subject's DN's
16974 CommonName.
16975 Defaults to @samp{#f}.
16976 @end deftypevr
16977
16978 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-mechanisms
16979 List of wanted authentication mechanisms. Supported mechanisms are:
16980 @samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
16981 @samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
16982 @samp{otp}, @samp{skey}, and @samp{gss-spnego}. NOTE: See also
16983 @samp{disable-plaintext-auth} setting.
16984 @end deftypevr
16985
16986 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-servers
16987 List of IPs or hostnames to all director servers, including ourself.
16988 Ports can be specified as ip:port. The default port is the same as what
16989 director service's @samp{inet-listener} is using.
16990 Defaults to @samp{()}.
16991 @end deftypevr
16992
16993 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-mail-servers
16994 List of IPs or hostnames to all backend mail servers. Ranges are
16995 allowed too, like 10.0.0.10-10.0.0.30.
16996 Defaults to @samp{()}.
16997 @end deftypevr
16998
16999 @deftypevr {@code{dovecot-configuration} parameter} string director-user-expire
17000 How long to redirect users to a specific server after it no longer
17001 has any connections.
17002 Defaults to @samp{"15 min"}.
17003 @end deftypevr
17004
17005 @deftypevr {@code{dovecot-configuration} parameter} string director-username-hash
17006 How the username is translated before being hashed. Useful values
17007 include %Ln if user can log in with or without @@domain, %Ld if mailboxes
17008 are shared within domain.
17009 Defaults to @samp{"%Lu"}.
17010 @end deftypevr
17011
17012 @deftypevr {@code{dovecot-configuration} parameter} string log-path
17013 Log file to use for error messages. @samp{syslog} logs to syslog,
17014 @samp{/dev/stderr} logs to stderr.
17015 Defaults to @samp{"syslog"}.
17016 @end deftypevr
17017
17018 @deftypevr {@code{dovecot-configuration} parameter} string info-log-path
17019 Log file to use for informational messages. Defaults to
17020 @samp{log-path}.
17021 Defaults to @samp{""}.
17022 @end deftypevr
17023
17024 @deftypevr {@code{dovecot-configuration} parameter} string debug-log-path
17025 Log file to use for debug messages. Defaults to
17026 @samp{info-log-path}.
17027 Defaults to @samp{""}.
17028 @end deftypevr
17029
17030 @deftypevr {@code{dovecot-configuration} parameter} string syslog-facility
17031 Syslog facility to use if you're logging to syslog. Usually if you
17032 don't want to use @samp{mail}, you'll use local0..local7. Also other
17033 standard facilities are supported.
17034 Defaults to @samp{"mail"}.
17035 @end deftypevr
17036
17037 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose?
17038 Log unsuccessful authentication attempts and the reasons why they
17039 failed.
17040 Defaults to @samp{#f}.
17041 @end deftypevr
17042
17043 @deftypevr {@code{dovecot-configuration} parameter} string auth-verbose-passwords
17044 In case of password mismatches, log the attempted password. Valid
17045 values are no, plain and sha1. sha1 can be useful for detecting brute
17046 force password attempts vs. user simply trying the same password over
17047 and over again. You can also truncate the value to n chars by appending
17048 ":n" (e.g.@: sha1:6).
17049 Defaults to @samp{"no"}.
17050 @end deftypevr
17051
17052 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug?
17053 Even more verbose logging for debugging purposes. Shows for example
17054 SQL queries.
17055 Defaults to @samp{#f}.
17056 @end deftypevr
17057
17058 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug-passwords?
17059 In case of password mismatches, log the passwords and used scheme so
17060 the problem can be debugged. Enabling this also enables
17061 @samp{auth-debug}.
17062 Defaults to @samp{#f}.
17063 @end deftypevr
17064
17065 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-debug?
17066 Enable mail process debugging. This can help you figure out why
17067 Dovecot isn't finding your mails.
17068 Defaults to @samp{#f}.
17069 @end deftypevr
17070
17071 @deftypevr {@code{dovecot-configuration} parameter} boolean verbose-ssl?
17072 Show protocol level SSL errors.
17073 Defaults to @samp{#f}.
17074 @end deftypevr
17075
17076 @deftypevr {@code{dovecot-configuration} parameter} string log-timestamp
17077 Prefix for each line written to log file. % codes are in
17078 strftime(3) format.
17079 Defaults to @samp{"\"%b %d %H:%M:%S \""}.
17080 @end deftypevr
17081
17082 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-log-format-elements
17083 List of elements we want to log. The elements which have a
17084 non-empty variable value are joined together to form a comma-separated
17085 string.
17086 @end deftypevr
17087
17088 @deftypevr {@code{dovecot-configuration} parameter} string login-log-format
17089 Login log format. %s contains @samp{login-log-format-elements}
17090 string, %$ contains the data we want to log.
17091 Defaults to @samp{"%$: %s"}.
17092 @end deftypevr
17093
17094 @deftypevr {@code{dovecot-configuration} parameter} string mail-log-prefix
17095 Log prefix for mail processes. See doc/wiki/Variables.txt for list
17096 of possible variables you can use.
17097 Defaults to @samp{"\"%s(%u)<%@{pid@}><%@{session@}>: \""}.
17098 @end deftypevr
17099
17100 @deftypevr {@code{dovecot-configuration} parameter} string deliver-log-format
17101 Format to use for logging mail deliveries. You can use variables:
17102 @table @code
17103 @item %$
17104 Delivery status message (e.g.@: @samp{saved to INBOX})
17105 @item %m
17106 Message-ID
17107 @item %s
17108 Subject
17109 @item %f
17110 From address
17111 @item %p
17112 Physical size
17113 @item %w
17114 Virtual size.
17115 @end table
17116 Defaults to @samp{"msgid=%m: %$"}.
17117 @end deftypevr
17118
17119 @deftypevr {@code{dovecot-configuration} parameter} string mail-location
17120 Location for users' mailboxes. The default is empty, which means
17121 that Dovecot tries to find the mailboxes automatically. This won't work
17122 if the user doesn't yet have any mail, so you should explicitly tell
17123 Dovecot the full location.
17124
17125 If you're using mbox, giving a path to the INBOX
17126 file (e.g.@: /var/mail/%u) isn't enough. You'll also need to tell Dovecot
17127 where the other mailboxes are kept. This is called the "root mail
17128 directory", and it must be the first path given in the
17129 @samp{mail-location} setting.
17130
17131 There are a few special variables you can use, eg.:
17132
17133 @table @samp
17134 @item %u
17135 username
17136 @item %n
17137 user part in user@@domain, same as %u if there's no domain
17138 @item %d
17139 domain part in user@@domain, empty if there's no domain
17140 @item %h
17141 home director
17142 @end table
17143
17144 See doc/wiki/Variables.txt for full list. Some examples:
17145 @table @samp
17146 @item maildir:~/Maildir
17147 @item mbox:~/mail:INBOX=/var/mail/%u
17148 @item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
17149 @end table
17150 Defaults to @samp{""}.
17151 @end deftypevr
17152
17153 @deftypevr {@code{dovecot-configuration} parameter} string mail-uid
17154 System user and group used to access mails. If you use multiple,
17155 userdb can override these by returning uid or gid fields. You can use
17156 either numbers or names. <doc/wiki/UserIds.txt>.
17157 Defaults to @samp{""}.
17158 @end deftypevr
17159
17160 @deftypevr {@code{dovecot-configuration} parameter} string mail-gid
17161
17162 Defaults to @samp{""}.
17163 @end deftypevr
17164
17165 @deftypevr {@code{dovecot-configuration} parameter} string mail-privileged-group
17166 Group to enable temporarily for privileged operations. Currently
17167 this is used only with INBOX when either its initial creation or
17168 dotlocking fails. Typically this is set to "mail" to give access to
17169 /var/mail.
17170 Defaults to @samp{""}.
17171 @end deftypevr
17172
17173 @deftypevr {@code{dovecot-configuration} parameter} string mail-access-groups
17174 Grant access to these supplementary groups for mail processes.
17175 Typically these are used to set up access to shared mailboxes. Note
17176 that it may be dangerous to set these if users can create
17177 symlinks (e.g.@: if "mail" group is set here, ln -s /var/mail ~/mail/var
17178 could allow a user to delete others' mailboxes, or ln -s
17179 /secret/shared/box ~/mail/mybox would allow reading it).
17180 Defaults to @samp{""}.
17181 @end deftypevr
17182
17183 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-full-filesystem-access?
17184 Allow full file system access to clients. There's no access checks
17185 other than what the operating system does for the active UID/GID. It
17186 works with both maildir and mboxes, allowing you to prefix mailboxes
17187 names with e.g.@: /path/ or ~user/.
17188 Defaults to @samp{#f}.
17189 @end deftypevr
17190
17191 @deftypevr {@code{dovecot-configuration} parameter} boolean mmap-disable?
17192 Don't use mmap() at all. This is required if you store indexes to
17193 shared file systems (NFS or clustered file system).
17194 Defaults to @samp{#f}.
17195 @end deftypevr
17196
17197 @deftypevr {@code{dovecot-configuration} parameter} boolean dotlock-use-excl?
17198 Rely on @samp{O_EXCL} to work when creating dotlock files. NFS
17199 supports @samp{O_EXCL} since version 3, so this should be safe to use
17200 nowadays by default.
17201 Defaults to @samp{#t}.
17202 @end deftypevr
17203
17204 @deftypevr {@code{dovecot-configuration} parameter} string mail-fsync
17205 When to use fsync() or fdatasync() calls:
17206 @table @code
17207 @item optimized
17208 Whenever necessary to avoid losing important data
17209 @item always
17210 Useful with e.g.@: NFS when write()s are delayed
17211 @item never
17212 Never use it (best performance, but crashes can lose data).
17213 @end table
17214 Defaults to @samp{"optimized"}.
17215 @end deftypevr
17216
17217 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-storage?
17218 Mail storage exists in NFS. Set this to yes to make Dovecot flush
17219 NFS caches whenever needed. If you're using only a single mail server
17220 this isn't needed.
17221 Defaults to @samp{#f}.
17222 @end deftypevr
17223
17224 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-index?
17225 Mail index files also exist in NFS. Setting this to yes requires
17226 @samp{mmap-disable? #t} and @samp{fsync-disable? #f}.
17227 Defaults to @samp{#f}.
17228 @end deftypevr
17229
17230 @deftypevr {@code{dovecot-configuration} parameter} string lock-method
17231 Locking method for index files. Alternatives are fcntl, flock and
17232 dotlock. Dotlocking uses some tricks which may create more disk I/O
17233 than other locking methods. NFS users: flock doesn't work, remember to
17234 change @samp{mmap-disable}.
17235 Defaults to @samp{"fcntl"}.
17236 @end deftypevr
17237
17238 @deftypevr {@code{dovecot-configuration} parameter} file-name mail-temp-dir
17239 Directory in which LDA/LMTP temporarily stores incoming mails >128
17240 kB.
17241 Defaults to @samp{"/tmp"}.
17242 @end deftypevr
17243
17244 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-uid
17245 Valid UID range for users. This is mostly to make sure that users can't
17246 log in as daemons or other system users. Note that denying root logins is
17247 hardcoded to dovecot binary and can't be done even if @samp{first-valid-uid}
17248 is set to 0.
17249 Defaults to @samp{500}.
17250 @end deftypevr
17251
17252 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-uid
17253
17254 Defaults to @samp{0}.
17255 @end deftypevr
17256
17257 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-gid
17258 Valid GID range for users. Users having non-valid GID as primary group ID
17259 aren't allowed to log in. If user belongs to supplementary groups with
17260 non-valid GIDs, those groups are not set.
17261 Defaults to @samp{1}.
17262 @end deftypevr
17263
17264 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-gid
17265
17266 Defaults to @samp{0}.
17267 @end deftypevr
17268
17269 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-max-keyword-length
17270 Maximum allowed length for mail keyword name. It's only forced when
17271 trying to create new keywords.
17272 Defaults to @samp{50}.
17273 @end deftypevr
17274
17275 @deftypevr {@code{dovecot-configuration} parameter} colon-separated-file-name-list valid-chroot-dirs
17276 List of directories under which chrooting is allowed for mail
17277 processes (i.e.@: /var/mail will allow chrooting to /var/mail/foo/bar
17278 too). This setting doesn't affect @samp{login-chroot}
17279 @samp{mail-chroot} or auth chroot settings. If this setting is empty,
17280 "/./" in home dirs are ignored. WARNING: Never add directories here
17281 which local users can modify, that may lead to root exploit. Usually
17282 this should be done only if you don't allow shell access for users.
17283 <doc/wiki/Chrooting.txt>.
17284 Defaults to @samp{()}.
17285 @end deftypevr
17286
17287 @deftypevr {@code{dovecot-configuration} parameter} string mail-chroot
17288 Default chroot directory for mail processes. This can be overridden
17289 for specific users in user database by giving /./ in user's home
17290 directory (e.g.@: /home/./user chroots into /home). Note that usually
17291 there is no real need to do chrooting, Dovecot doesn't allow users to
17292 access files outside their mail directory anyway. If your home
17293 directories are prefixed with the chroot directory, append "/."@: to
17294 @samp{mail-chroot}. <doc/wiki/Chrooting.txt>.
17295 Defaults to @samp{""}.
17296 @end deftypevr
17297
17298 @deftypevr {@code{dovecot-configuration} parameter} file-name auth-socket-path
17299 UNIX socket path to master authentication server to find users.
17300 This is used by imap (for shared users) and lda.
17301 Defaults to @samp{"/var/run/dovecot/auth-userdb"}.
17302 @end deftypevr
17303
17304 @deftypevr {@code{dovecot-configuration} parameter} file-name mail-plugin-dir
17305 Directory where to look up mail plugins.
17306 Defaults to @samp{"/usr/lib/dovecot"}.
17307 @end deftypevr
17308
17309 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mail-plugins
17310 List of plugins to load for all services. Plugins specific to IMAP,
17311 LDA, etc.@: are added to this list in their own .conf files.
17312 Defaults to @samp{()}.
17313 @end deftypevr
17314
17315 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-cache-min-mail-count
17316 The minimum number of mails in a mailbox before updates are done to
17317 cache file. This allows optimizing Dovecot's behavior to do less disk
17318 writes at the cost of more disk reads.
17319 Defaults to @samp{0}.
17320 @end deftypevr
17321
17322 @deftypevr {@code{dovecot-configuration} parameter} string mailbox-idle-check-interval
17323 When IDLE command is running, mailbox is checked once in a while to
17324 see if there are any new mails or other changes. This setting defines
17325 the minimum time to wait between those checks. Dovecot can also use
17326 dnotify, inotify and kqueue to find out immediately when changes
17327 occur.
17328 Defaults to @samp{"30 secs"}.
17329 @end deftypevr
17330
17331 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-save-crlf?
17332 Save mails with CR+LF instead of plain LF. This makes sending those
17333 mails take less CPU, especially with sendfile() syscall with Linux and
17334 FreeBSD. But it also creates a bit more disk I/O which may just make it
17335 slower. Also note that if other software reads the mboxes/maildirs,
17336 they may handle the extra CRs wrong and cause problems.
17337 Defaults to @samp{#f}.
17338 @end deftypevr
17339
17340 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-stat-dirs?
17341 By default LIST command returns all entries in maildir beginning
17342 with a dot. Enabling this option makes Dovecot return only entries
17343 which are directories. This is done by stat()ing each entry, so it
17344 causes more disk I/O.
17345 (For systems setting struct @samp{dirent->d_type} this check is free
17346 and it's done always regardless of this setting).
17347 Defaults to @samp{#f}.
17348 @end deftypevr
17349
17350 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-copy-with-hardlinks?
17351 When copying a message, do it with hard links whenever possible.
17352 This makes the performance much better, and it's unlikely to have any
17353 side effects.
17354 Defaults to @samp{#t}.
17355 @end deftypevr
17356
17357 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-very-dirty-syncs?
17358 Assume Dovecot is the only MUA accessing Maildir: Scan cur/
17359 directory only when its mtime changes unexpectedly or when we can't find
17360 the mail otherwise.
17361 Defaults to @samp{#f}.
17362 @end deftypevr
17363
17364 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-read-locks
17365 Which locking methods to use for locking mbox. There are four
17366 available:
17367
17368 @table @code
17369 @item dotlock
17370 Create <mailbox>.lock file. This is the oldest and most NFS-safe
17371 solution. If you want to use /var/mail/ like directory, the users will
17372 need write access to that directory.
17373 @item dotlock-try
17374 Same as dotlock, but if it fails because of permissions or because there
17375 isn't enough disk space, just skip it.
17376 @item fcntl
17377 Use this if possible. Works with NFS too if lockd is used.
17378 @item flock
17379 May not exist in all systems. Doesn't work with NFS.
17380 @item lockf
17381 May not exist in all systems. Doesn't work with NFS.
17382 @end table
17383
17384 You can use multiple locking methods; if you do the order they're declared
17385 in is important to avoid deadlocks if other MTAs/MUAs are using multiple
17386 locking methods as well. Some operating systems don't allow using some of
17387 them simultaneously.
17388 @end deftypevr
17389
17390 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-write-locks
17391
17392 @end deftypevr
17393
17394 @deftypevr {@code{dovecot-configuration} parameter} string mbox-lock-timeout
17395 Maximum time to wait for lock (all of them) before aborting.
17396 Defaults to @samp{"5 mins"}.
17397 @end deftypevr
17398
17399 @deftypevr {@code{dovecot-configuration} parameter} string mbox-dotlock-change-timeout
17400 If dotlock exists but the mailbox isn't modified in any way,
17401 override the lock file after this much time.
17402 Defaults to @samp{"2 mins"}.
17403 @end deftypevr
17404
17405 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-dirty-syncs?
17406 When mbox changes unexpectedly we have to fully read it to find out
17407 what changed. If the mbox is large this can take a long time. Since
17408 the change is usually just a newly appended mail, it'd be faster to
17409 simply read the new mails. If this setting is enabled, Dovecot does
17410 this but still safely fallbacks to re-reading the whole mbox file
17411 whenever something in mbox isn't how it's expected to be. The only real
17412 downside to this setting is that if some other MUA changes message
17413 flags, Dovecot doesn't notice it immediately. Note that a full sync is
17414 done with SELECT, EXAMINE, EXPUNGE and CHECK commands.
17415 Defaults to @samp{#t}.
17416 @end deftypevr
17417
17418 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-very-dirty-syncs?
17419 Like @samp{mbox-dirty-syncs}, but don't do full syncs even with SELECT,
17420 EXAMINE, EXPUNGE or CHECK commands. If this is set,
17421 @samp{mbox-dirty-syncs} is ignored.
17422 Defaults to @samp{#f}.
17423 @end deftypevr
17424
17425 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-lazy-writes?
17426 Delay writing mbox headers until doing a full write sync (EXPUNGE
17427 and CHECK commands and when closing the mailbox). This is especially
17428 useful for POP3 where clients often delete all mails. The downside is
17429 that our changes aren't immediately visible to other MUAs.
17430 Defaults to @samp{#t}.
17431 @end deftypevr
17432
17433 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mbox-min-index-size
17434 If mbox size is smaller than this (e.g.@: 100k), don't write index
17435 files. If an index file already exists it's still read, just not
17436 updated.
17437 Defaults to @samp{0}.
17438 @end deftypevr
17439
17440 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mdbox-rotate-size
17441 Maximum dbox file size until it's rotated.
17442 Defaults to @samp{10000000}.
17443 @end deftypevr
17444
17445 @deftypevr {@code{dovecot-configuration} parameter} string mdbox-rotate-interval
17446 Maximum dbox file age until it's rotated. Typically in days. Day
17447 begins from midnight, so 1d = today, 2d = yesterday, etc. 0 = check
17448 disabled.
17449 Defaults to @samp{"1d"}.
17450 @end deftypevr
17451
17452 @deftypevr {@code{dovecot-configuration} parameter} boolean mdbox-preallocate-space?
17453 When creating new mdbox files, immediately preallocate their size to
17454 @samp{mdbox-rotate-size}. This setting currently works only in Linux
17455 with some file systems (ext4, xfs).
17456 Defaults to @samp{#f}.
17457 @end deftypevr
17458
17459 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-dir
17460 sdbox and mdbox support saving mail attachments to external files,
17461 which also allows single instance storage for them. Other backends
17462 don't support this for now.
17463
17464 WARNING: This feature hasn't been tested much yet. Use at your own risk.
17465
17466 Directory root where to store mail attachments. Disabled, if empty.
17467 Defaults to @samp{""}.
17468 @end deftypevr
17469
17470 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-attachment-min-size
17471 Attachments smaller than this aren't saved externally. It's also
17472 possible to write a plugin to disable saving specific attachments
17473 externally.
17474 Defaults to @samp{128000}.
17475 @end deftypevr
17476
17477 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-fs
17478 File system backend to use for saving attachments:
17479 @table @code
17480 @item posix
17481 No SiS done by Dovecot (but this might help FS's own deduplication)
17482 @item sis posix
17483 SiS with immediate byte-by-byte comparison during saving
17484 @item sis-queue posix
17485 SiS with delayed comparison and deduplication.
17486 @end table
17487 Defaults to @samp{"sis posix"}.
17488 @end deftypevr
17489
17490 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-hash
17491 Hash format to use in attachment filenames. You can add any text and
17492 variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}},
17493 @code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}. Variables can be
17494 truncated, e.g.@: @code{%@{sha256:80@}} returns only first 80 bits.
17495 Defaults to @samp{"%@{sha1@}"}.
17496 @end deftypevr
17497
17498 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-process-limit
17499
17500 Defaults to @samp{100}.
17501 @end deftypevr
17502
17503 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-client-limit
17504
17505 Defaults to @samp{1000}.
17506 @end deftypevr
17507
17508 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-vsz-limit
17509 Default VSZ (virtual memory size) limit for service processes.
17510 This is mainly intended to catch and kill processes that leak memory
17511 before they eat up everything.
17512 Defaults to @samp{256000000}.
17513 @end deftypevr
17514
17515 @deftypevr {@code{dovecot-configuration} parameter} string default-login-user
17516 Login user is internally used by login processes. This is the most
17517 untrusted user in Dovecot system. It shouldn't have access to anything
17518 at all.
17519 Defaults to @samp{"dovenull"}.
17520 @end deftypevr
17521
17522 @deftypevr {@code{dovecot-configuration} parameter} string default-internal-user
17523 Internal user is used by unprivileged processes. It should be
17524 separate from login user, so that login processes can't disturb other
17525 processes.
17526 Defaults to @samp{"dovecot"}.
17527 @end deftypevr
17528
17529 @deftypevr {@code{dovecot-configuration} parameter} string ssl?
17530 SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>.
17531 Defaults to @samp{"required"}.
17532 @end deftypevr
17533
17534 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cert
17535 PEM encoded X.509 SSL/TLS certificate (public key).
17536 Defaults to @samp{"</etc/dovecot/default.pem"}.
17537 @end deftypevr
17538
17539 @deftypevr {@code{dovecot-configuration} parameter} string ssl-key
17540 PEM encoded SSL/TLS private key. The key is opened before
17541 dropping root privileges, so keep the key file unreadable by anyone but
17542 root.
17543 Defaults to @samp{"</etc/dovecot/private/default.pem"}.
17544 @end deftypevr
17545
17546 @deftypevr {@code{dovecot-configuration} parameter} string ssl-key-password
17547 If key file is password protected, give the password here.
17548 Alternatively give it when starting dovecot with -p parameter. Since
17549 this file is often world-readable, you may want to place this setting
17550 instead to a different.
17551 Defaults to @samp{""}.
17552 @end deftypevr
17553
17554 @deftypevr {@code{dovecot-configuration} parameter} string ssl-ca
17555 PEM encoded trusted certificate authority. Set this only if you
17556 intend to use @samp{ssl-verify-client-cert? #t}. The file should
17557 contain the CA certificate(s) followed by the matching
17558 CRL(s). (e.g.@: @samp{ssl-ca </etc/ssl/certs/ca.pem}).
17559 Defaults to @samp{""}.
17560 @end deftypevr
17561
17562 @deftypevr {@code{dovecot-configuration} parameter} boolean ssl-require-crl?
17563 Require that CRL check succeeds for client certificates.
17564 Defaults to @samp{#t}.
17565 @end deftypevr
17566
17567 @deftypevr {@code{dovecot-configuration} parameter} boolean ssl-verify-client-cert?
17568 Request client to send a certificate. If you also want to require
17569 it, set @samp{auth-ssl-require-client-cert? #t} in auth section.
17570 Defaults to @samp{#f}.
17571 @end deftypevr
17572
17573 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cert-username-field
17574 Which field from certificate to use for username. commonName and
17575 x500UniqueIdentifier are the usual choices. You'll also need to set
17576 @samp{auth-ssl-username-from-cert? #t}.
17577 Defaults to @samp{"commonName"}.
17578 @end deftypevr
17579
17580 @deftypevr {@code{dovecot-configuration} parameter} string ssl-min-protocol
17581 Minimum SSL protocol version to accept.
17582 Defaults to @samp{"TLSv1"}.
17583 @end deftypevr
17584
17585 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cipher-list
17586 SSL ciphers to use.
17587 Defaults to @samp{"ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@@STRENGTH"}.
17588 @end deftypevr
17589
17590 @deftypevr {@code{dovecot-configuration} parameter} string ssl-crypto-device
17591 SSL crypto device to use, for valid values run "openssl engine".
17592 Defaults to @samp{""}.
17593 @end deftypevr
17594
17595 @deftypevr {@code{dovecot-configuration} parameter} string postmaster-address
17596 Address to use when sending rejection mails.
17597 %d expands to recipient domain.
17598 Defaults to @samp{"postmaster@@%d"}.
17599 @end deftypevr
17600
17601 @deftypevr {@code{dovecot-configuration} parameter} string hostname
17602 Hostname to use in various parts of sent mails (e.g.@: in Message-Id)
17603 and in LMTP replies. Default is the system's real hostname@@domain.
17604 Defaults to @samp{""}.
17605 @end deftypevr
17606
17607 @deftypevr {@code{dovecot-configuration} parameter} boolean quota-full-tempfail?
17608 If user is over quota, return with temporary failure instead of
17609 bouncing the mail.
17610 Defaults to @samp{#f}.
17611 @end deftypevr
17612
17613 @deftypevr {@code{dovecot-configuration} parameter} file-name sendmail-path
17614 Binary to use for sending mails.
17615 Defaults to @samp{"/usr/sbin/sendmail"}.
17616 @end deftypevr
17617
17618 @deftypevr {@code{dovecot-configuration} parameter} string submission-host
17619 If non-empty, send mails via this SMTP host[:port] instead of
17620 sendmail.
17621 Defaults to @samp{""}.
17622 @end deftypevr
17623
17624 @deftypevr {@code{dovecot-configuration} parameter} string rejection-subject
17625 Subject: header to use for rejection mails. You can use the same
17626 variables as for @samp{rejection-reason} below.
17627 Defaults to @samp{"Rejected: %s"}.
17628 @end deftypevr
17629
17630 @deftypevr {@code{dovecot-configuration} parameter} string rejection-reason
17631 Human readable error message for rejection mails. You can use
17632 variables:
17633
17634 @table @code
17635 @item %n
17636 CRLF
17637 @item %r
17638 reason
17639 @item %s
17640 original subject
17641 @item %t
17642 recipient
17643 @end table
17644 Defaults to @samp{"Your message to <%t> was automatically rejected:%n%r"}.
17645 @end deftypevr
17646
17647 @deftypevr {@code{dovecot-configuration} parameter} string recipient-delimiter
17648 Delimiter character between local-part and detail in email
17649 address.
17650 Defaults to @samp{"+"}.
17651 @end deftypevr
17652
17653 @deftypevr {@code{dovecot-configuration} parameter} string lda-original-recipient-header
17654 Header where the original recipient address (SMTP's RCPT TO:
17655 address) is taken from if not available elsewhere. With dovecot-lda -a
17656 parameter overrides this. A commonly used header for this is
17657 X-Original-To.
17658 Defaults to @samp{""}.
17659 @end deftypevr
17660
17661 @deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autocreate?
17662 Should saving a mail to a nonexistent mailbox automatically create
17663 it?.
17664 Defaults to @samp{#f}.
17665 @end deftypevr
17666
17667 @deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autosubscribe?
17668 Should automatically created mailboxes be also automatically
17669 subscribed?.
17670 Defaults to @samp{#f}.
17671 @end deftypevr
17672
17673 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer imap-max-line-length
17674 Maximum IMAP command line length. Some clients generate very long
17675 command lines with huge mailboxes, so you may need to raise this if you
17676 get "Too long argument" or "IMAP command line too large" errors
17677 often.
17678 Defaults to @samp{64000}.
17679 @end deftypevr
17680
17681 @deftypevr {@code{dovecot-configuration} parameter} string imap-logout-format
17682 IMAP logout format string:
17683 @table @code
17684 @item %i
17685 total number of bytes read from client
17686 @item %o
17687 total number of bytes sent to client.
17688 @end table
17689 See @file{doc/wiki/Variables.txt} for a list of all the variables you can use.
17690 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@}"}.
17691 @end deftypevr
17692
17693 @deftypevr {@code{dovecot-configuration} parameter} string imap-capability
17694 Override the IMAP CAPABILITY response. If the value begins with '+',
17695 add the given capabilities on top of the defaults (e.g.@: +XFOO XBAR).
17696 Defaults to @samp{""}.
17697 @end deftypevr
17698
17699 @deftypevr {@code{dovecot-configuration} parameter} string imap-idle-notify-interval
17700 How long to wait between "OK Still here" notifications when client
17701 is IDLEing.
17702 Defaults to @samp{"2 mins"}.
17703 @end deftypevr
17704
17705 @deftypevr {@code{dovecot-configuration} parameter} string imap-id-send
17706 ID field names and values to send to clients. Using * as the value
17707 makes Dovecot use the default value. The following fields have default
17708 values currently: name, version, os, os-version, support-url,
17709 support-email.
17710 Defaults to @samp{""}.
17711 @end deftypevr
17712
17713 @deftypevr {@code{dovecot-configuration} parameter} string imap-id-log
17714 ID fields sent by client to log. * means everything.
17715 Defaults to @samp{""}.
17716 @end deftypevr
17717
17718 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list imap-client-workarounds
17719 Workarounds for various client bugs:
17720
17721 @table @code
17722 @item delay-newmail
17723 Send EXISTS/RECENT new mail notifications only when replying to NOOP and
17724 CHECK commands. Some clients ignore them otherwise, for example OSX
17725 Mail (<v2.1). Outlook Express breaks more badly though, without this it
17726 may show user "Message no longer in server" errors. Note that OE6
17727 still breaks even with this workaround if synchronization is set to
17728 "Headers Only".
17729
17730 @item tb-extra-mailbox-sep
17731 Thunderbird gets somehow confused with LAYOUT=fs (mbox and dbox) and
17732 adds extra @samp{/} suffixes to mailbox names. This option causes Dovecot to
17733 ignore the extra @samp{/} instead of treating it as invalid mailbox name.
17734
17735 @item tb-lsub-flags
17736 Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g.@: mbox).
17737 This makes Thunderbird realize they aren't selectable and show them
17738 greyed out, instead of only later giving "not selectable" popup error.
17739 @end table
17740 Defaults to @samp{()}.
17741 @end deftypevr
17742
17743 @deftypevr {@code{dovecot-configuration} parameter} string imap-urlauth-host
17744 Host allowed in URLAUTH URLs sent by client. "*" allows all.
17745 Defaults to @samp{""}.
17746 @end deftypevr
17747
17748
17749 Whew! Lots of configuration options. The nice thing about it though is
17750 that Guix has a complete interface to Dovecot's configuration
17751 language. This allows not only a nice way to declare configurations,
17752 but also offers reflective capabilities as well: users can write code to
17753 inspect and transform configurations from within Scheme.
17754
17755 However, it could be that you just want to get a @code{dovecot.conf} up
17756 and running. In that case, you can pass an
17757 @code{opaque-dovecot-configuration} as the @code{#:config} parameter to
17758 @code{dovecot-service}. As its name indicates, an opaque configuration
17759 does not have easy reflective capabilities.
17760
17761 Available @code{opaque-dovecot-configuration} fields are:
17762
17763 @deftypevr {@code{opaque-dovecot-configuration} parameter} package dovecot
17764 The dovecot package.
17765 @end deftypevr
17766
17767 @deftypevr {@code{opaque-dovecot-configuration} parameter} string string
17768 The contents of the @code{dovecot.conf}, as a string.
17769 @end deftypevr
17770
17771 For example, if your @code{dovecot.conf} is just the empty string, you
17772 could instantiate a dovecot service like this:
17773
17774 @lisp
17775 (dovecot-service #:config
17776 (opaque-dovecot-configuration
17777 (string "")))
17778 @end lisp
17779
17780 @subsubheading OpenSMTPD Service
17781
17782 @deffn {Scheme Variable} opensmtpd-service-type
17783 This is the type of the @uref{https://www.opensmtpd.org, OpenSMTPD}
17784 service, whose value should be an @code{opensmtpd-configuration} object
17785 as in this example:
17786
17787 @lisp
17788 (service opensmtpd-service-type
17789 (opensmtpd-configuration
17790 (config-file (local-file "./my-smtpd.conf"))))
17791 @end lisp
17792 @end deffn
17793
17794 @deftp {Data Type} opensmtpd-configuration
17795 Data type representing the configuration of opensmtpd.
17796
17797 @table @asis
17798 @item @code{package} (default: @var{opensmtpd})
17799 Package object of the OpenSMTPD SMTP server.
17800
17801 @item @code{config-file} (default: @code{%default-opensmtpd-file})
17802 File-like object of the OpenSMTPD configuration file to use. By default
17803 it listens on the loopback network interface, and allows for mail from
17804 users and daemons on the local machine, as well as permitting email to
17805 remote servers. Run @command{man smtpd.conf} for more information.
17806
17807 @end table
17808 @end deftp
17809
17810 @subsubheading Exim Service
17811
17812 @cindex mail transfer agent (MTA)
17813 @cindex MTA (mail transfer agent)
17814 @cindex SMTP
17815
17816 @deffn {Scheme Variable} exim-service-type
17817 This is the type of the @uref{https://exim.org, Exim} mail transfer
17818 agent (MTA), whose value should be an @code{exim-configuration} object
17819 as in this example:
17820
17821 @lisp
17822 (service exim-service-type
17823 (exim-configuration
17824 (config-file (local-file "./my-exim.conf"))))
17825 @end lisp
17826 @end deffn
17827
17828 In order to use an @code{exim-service-type} service you must also have a
17829 @code{mail-aliases-service-type} service present in your
17830 @code{operating-system} (even if it has no aliases).
17831
17832 @deftp {Data Type} exim-configuration
17833 Data type representing the configuration of exim.
17834
17835 @table @asis
17836 @item @code{package} (default: @var{exim})
17837 Package object of the Exim server.
17838
17839 @item @code{config-file} (default: @code{#f})
17840 File-like object of the Exim configuration file to use. If its value is
17841 @code{#f} then use the default configuration file from the package
17842 provided in @code{package}. The resulting configuration file is loaded
17843 after setting the @code{exim_user} and @code{exim_group} configuration
17844 variables.
17845
17846 @end table
17847 @end deftp
17848
17849 @subsubheading Getmail service
17850
17851 @cindex IMAP
17852 @cindex POP
17853
17854 @deffn {Scheme Variable} getmail-service-type
17855 This is the type of the @uref{http://pyropus.ca/software/getmail/, Getmail}
17856 mail retriever, whose value should be an @code{getmail-configuration}.
17857 @end deffn
17858
17859 Available @code{getmail-configuration} fields are:
17860
17861 @deftypevr {@code{getmail-configuration} parameter} symbol name
17862 A symbol to identify the getmail service.
17863
17864 Defaults to @samp{"unset"}.
17865
17866 @end deftypevr
17867
17868 @deftypevr {@code{getmail-configuration} parameter} package package
17869 The getmail package to use.
17870
17871 @end deftypevr
17872
17873 @deftypevr {@code{getmail-configuration} parameter} string user
17874 The user to run getmail as.
17875
17876 Defaults to @samp{"getmail"}.
17877
17878 @end deftypevr
17879
17880 @deftypevr {@code{getmail-configuration} parameter} string group
17881 The group to run getmail as.
17882
17883 Defaults to @samp{"getmail"}.
17884
17885 @end deftypevr
17886
17887 @deftypevr {@code{getmail-configuration} parameter} string directory
17888 The getmail directory to use.
17889
17890 Defaults to @samp{"/var/lib/getmail/default"}.
17891
17892 @end deftypevr
17893
17894 @deftypevr {@code{getmail-configuration} parameter} getmail-configuration-file rcfile
17895 The getmail configuration file to use.
17896
17897 Available @code{getmail-configuration-file} fields are:
17898
17899 @deftypevr {@code{getmail-configuration-file} parameter} getmail-retriever-configuration retriever
17900 What mail account to retrieve mail from, and how to access that account.
17901
17902 Available @code{getmail-retriever-configuration} fields are:
17903
17904 @deftypevr {@code{getmail-retriever-configuration} parameter} string type
17905 The type of mail retriever to use. Valid values include @samp{passwd}
17906 and @samp{static}.
17907
17908 Defaults to @samp{"SimpleIMAPSSLRetriever"}.
17909
17910 @end deftypevr
17911
17912 @deftypevr {@code{getmail-retriever-configuration} parameter} string server
17913 Username to login to the mail server with.
17914
17915 Defaults to @samp{unset}.
17916
17917 @end deftypevr
17918
17919 @deftypevr {@code{getmail-retriever-configuration} parameter} string username
17920 Username to login to the mail server with.
17921
17922 Defaults to @samp{unset}.
17923
17924 @end deftypevr
17925
17926 @deftypevr {@code{getmail-retriever-configuration} parameter} non-negative-integer port
17927 Port number to connect to.
17928
17929 Defaults to @samp{#f}.
17930
17931 @end deftypevr
17932
17933 @deftypevr {@code{getmail-retriever-configuration} parameter} string password
17934 Override fields from passwd.
17935
17936 Defaults to @samp{""}.
17937
17938 @end deftypevr
17939
17940 @deftypevr {@code{getmail-retriever-configuration} parameter} list password-command
17941 Override fields from passwd.
17942
17943 Defaults to @samp{()}.
17944
17945 @end deftypevr
17946
17947 @deftypevr {@code{getmail-retriever-configuration} parameter} string keyfile
17948 PEM-formatted key file to use for the TLS negotiation.
17949
17950 Defaults to @samp{""}.
17951
17952 @end deftypevr
17953
17954 @deftypevr {@code{getmail-retriever-configuration} parameter} string certfile
17955 PEM-formatted certificate file to use for the TLS negotiation.
17956
17957 Defaults to @samp{""}.
17958
17959 @end deftypevr
17960
17961 @deftypevr {@code{getmail-retriever-configuration} parameter} string ca-certs
17962 CA certificates to use.
17963
17964 Defaults to @samp{""}.
17965
17966 @end deftypevr
17967
17968 @deftypevr {@code{getmail-retriever-configuration} parameter} parameter-alist extra-parameters
17969 Extra retriever parameters.
17970
17971 Defaults to @samp{()}.
17972
17973 @end deftypevr
17974
17975 @end deftypevr
17976
17977 @deftypevr {@code{getmail-configuration-file} parameter} getmail-destination-configuration destination
17978 What to do with retrieved messages.
17979
17980 Available @code{getmail-destination-configuration} fields are:
17981
17982 @deftypevr {@code{getmail-destination-configuration} parameter} string type
17983 The type of mail destination. Valid values include @samp{Maildir},
17984 @samp{Mboxrd} and @samp{MDA_external}.
17985
17986 Defaults to @samp{unset}.
17987
17988 @end deftypevr
17989
17990 @deftypevr {@code{getmail-destination-configuration} parameter} string-or-filelike path
17991 The path option for the mail destination. The behaviour depends on the
17992 chosen type.
17993
17994 Defaults to @samp{""}.
17995
17996 @end deftypevr
17997
17998 @deftypevr {@code{getmail-destination-configuration} parameter} parameter-alist extra-parameters
17999 Extra destination parameters
18000
18001 Defaults to @samp{()}.
18002
18003 @end deftypevr
18004
18005 @end deftypevr
18006
18007 @deftypevr {@code{getmail-configuration-file} parameter} getmail-options-configuration options
18008 Configure getmail.
18009
18010 Available @code{getmail-options-configuration} fields are:
18011
18012 @deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer verbose
18013 If set to @samp{0}, getmail will only print warnings and errors. A
18014 value of @samp{1} means that messages will be printed about retrieving
18015 and deleting messages. If set to @samp{2}, getmail will print messages
18016 about each of it's actions.
18017
18018 Defaults to @samp{1}.
18019
18020 @end deftypevr
18021
18022 @deftypevr {@code{getmail-options-configuration} parameter} boolean read-all
18023 If true, getmail will retrieve all available messages. Otherwise it
18024 will only retrieve messages it hasn't seen previously.
18025
18026 Defaults to @samp{#t}.
18027
18028 @end deftypevr
18029
18030 @deftypevr {@code{getmail-options-configuration} parameter} boolean delete
18031 If set to true, messages will be deleted from the server after
18032 retrieving and successfully delivering them. Otherwise, messages will
18033 be left on the server.
18034
18035 Defaults to @samp{#f}.
18036
18037 @end deftypevr
18038
18039 @deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer delete-after
18040 Getmail will delete messages this number of days after seeing them, if
18041 they have been delivered. This means messages will be left on the
18042 server this number of days after delivering them. A value of @samp{0}
18043 disabled this feature.
18044
18045 Defaults to @samp{0}.
18046
18047 @end deftypevr
18048
18049 @deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer delete-bigger-than
18050 Delete messages larger than this of bytes after retrieving them, even if
18051 the delete and delete-after options are disabled. A value of @samp{0}
18052 disables this feature.
18053
18054 Defaults to @samp{0}.
18055
18056 @end deftypevr
18057
18058 @deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer max-bytes-per-session
18059 Retrieve messages totalling up to this number of bytes before closing
18060 the session with the server. A value of @samp{0} disables this feature.
18061
18062 Defaults to @samp{0}.
18063
18064 @end deftypevr
18065
18066 @deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer max-message-size
18067 Don't retrieve messages larger than this number of bytes. A value of
18068 @samp{0} disables this feature.
18069
18070 Defaults to @samp{0}.
18071
18072 @end deftypevr
18073
18074 @deftypevr {@code{getmail-options-configuration} parameter} boolean delivered-to
18075 If true, getmail will add a Delivered-To header to messages.
18076
18077 Defaults to @samp{#t}.
18078
18079 @end deftypevr
18080
18081 @deftypevr {@code{getmail-options-configuration} parameter} boolean received
18082 If set, getmail adds a Received header to the messages.
18083
18084 Defaults to @samp{#t}.
18085
18086 @end deftypevr
18087
18088 @deftypevr {@code{getmail-options-configuration} parameter} string message-log
18089 Getmail will record a log of its actions to the named file. A value of
18090 @samp{""} disables this feature.
18091
18092 Defaults to @samp{""}.
18093
18094 @end deftypevr
18095
18096 @deftypevr {@code{getmail-options-configuration} parameter} boolean message-log-syslog
18097 If true, getmail will record a log of its actions using the system
18098 logger.
18099
18100 Defaults to @samp{#f}.
18101
18102 @end deftypevr
18103
18104 @deftypevr {@code{getmail-options-configuration} parameter} boolean message-log-verbose
18105 If true, getmail will log information about messages not retrieved and
18106 the reason for not retrieving them, as well as starting and ending
18107 information lines.
18108
18109 Defaults to @samp{#f}.
18110
18111 @end deftypevr
18112
18113 @deftypevr {@code{getmail-options-configuration} parameter} parameter-alist extra-parameters
18114 Extra options to include.
18115
18116 Defaults to @samp{()}.
18117
18118 @end deftypevr
18119
18120 @end deftypevr
18121
18122 @end deftypevr
18123
18124 @deftypevr {@code{getmail-configuration} parameter} list idle
18125 A list of mailboxes that getmail should wait on the server for new mail
18126 notifications. This depends on the server supporting the IDLE
18127 extension.
18128
18129 Defaults to @samp{()}.
18130
18131 @end deftypevr
18132
18133 @deftypevr {@code{getmail-configuration} parameter} list environment-variables
18134 Environment variables to set for getmail.
18135
18136 Defaults to @samp{()}.
18137
18138 @end deftypevr
18139
18140 @subsubheading Mail Aliases Service
18141
18142 @cindex email aliases
18143 @cindex aliases, for email addresses
18144
18145 @deffn {Scheme Variable} mail-aliases-service-type
18146 This is the type of the service which provides @code{/etc/aliases},
18147 specifying how to deliver mail to users on this system.
18148
18149 @lisp
18150 (service mail-aliases-service-type
18151 '(("postmaster" "bob")
18152 ("bob" "bob@@example.com" "bob@@example2.com")))
18153 @end lisp
18154 @end deffn
18155
18156 The configuration for a @code{mail-aliases-service-type} service is an
18157 association list denoting how to deliver mail that comes to this
18158 system. Each entry is of the form @code{(alias addresses ...)}, with
18159 @code{alias} specifying the local alias and @code{addresses} specifying
18160 where to deliver this user's mail.
18161
18162 The aliases aren't required to exist as users on the local system. In
18163 the above example, there doesn't need to be a @code{postmaster} entry in
18164 the @code{operating-system}'s @code{user-accounts} in order to deliver
18165 the @code{postmaster} mail to @code{bob} (which subsequently would
18166 deliver mail to @code{bob@@example.com} and @code{bob@@example2.com}).
18167
18168 @subsubheading GNU Mailutils IMAP4 Daemon
18169 @cindex GNU Mailutils IMAP4 Daemon
18170
18171 @deffn {Scheme Variable} imap4d-service-type
18172 This is the type of the GNU Mailutils IMAP4 Daemon (@pxref{imap4d,,,
18173 mailutils, GNU Mailutils Manual}), whose value should be an
18174 @code{imap4d-configuration} object as in this example:
18175
18176 @lisp
18177 (service imap4d-service-type
18178 (imap4d-configuration
18179 (config-file (local-file "imap4d.conf"))))
18180 @end lisp
18181 @end deffn
18182
18183 @deftp {Data Type} imap4d-configuration
18184 Data type representing the configuration of @command{imap4d}.
18185
18186 @table @asis
18187 @item @code{package} (default: @code{mailutils})
18188 The package that provides @command{imap4d}.
18189
18190 @item @code{config-file} (default: @code{%default-imap4d-config-file})
18191 File-like object of the configuration file to use, by default it will listen
18192 on TCP port 143 of @code{localhost}. @xref{Conf-imap4d,,, mailutils, GNU
18193 Mailutils Manual}, for details.
18194
18195 @end table
18196 @end deftp
18197
18198 @node Messaging Services
18199 @subsection Messaging Services
18200
18201 @cindex messaging
18202 @cindex jabber
18203 @cindex XMPP
18204 The @code{(gnu services messaging)} module provides Guix service
18205 definitions for messaging services: currently only Prosody is supported.
18206
18207 @subsubheading Prosody Service
18208
18209 @deffn {Scheme Variable} prosody-service-type
18210 This is the type for the @uref{https://prosody.im, Prosody XMPP
18211 communication server}. Its value must be a @code{prosody-configuration}
18212 record as in this example:
18213
18214 @lisp
18215 (service prosody-service-type
18216 (prosody-configuration
18217 (modules-enabled (cons* "groups" "mam" %default-modules-enabled))
18218 (int-components
18219 (list
18220 (int-component-configuration
18221 (hostname "conference.example.net")
18222 (plugin "muc")
18223 (mod-muc (mod-muc-configuration)))))
18224 (virtualhosts
18225 (list
18226 (virtualhost-configuration
18227 (domain "example.net"))))))
18228 @end lisp
18229
18230 See below for details about @code{prosody-configuration}.
18231
18232 @end deffn
18233
18234 By default, Prosody does not need much configuration. Only one
18235 @code{virtualhosts} field is needed: it specifies the domain you wish
18236 Prosody to serve.
18237
18238 You can perform various sanity checks on the generated configuration
18239 with the @code{prosodyctl check} command.
18240
18241 Prosodyctl will also help you to import certificates from the
18242 @code{letsencrypt} directory so that the @code{prosody} user can access
18243 them. See @url{https://prosody.im/doc/letsencrypt}.
18244
18245 @example
18246 prosodyctl --root cert import /etc/letsencrypt/live
18247 @end example
18248
18249 The available configuration parameters follow. Each parameter
18250 definition is preceded by its type; for example, @samp{string-list foo}
18251 indicates that the @code{foo} parameter should be specified as a list of
18252 strings. Types starting with @code{maybe-} denote parameters that won't
18253 show up in @code{prosody.cfg.lua} when their value is @code{'disabled}.
18254
18255 There is also a way to specify the configuration as a string, if you
18256 have an old @code{prosody.cfg.lua} file that you want to port over from
18257 some other system; see the end for more details.
18258
18259 The @code{file-object} type designates either a file-like object
18260 (@pxref{G-Expressions, file-like objects}) or a file name.
18261
18262 @c The following documentation was initially generated by
18263 @c (generate-documentation) in (gnu services messaging). Manually maintained
18264 @c documentation is better, so we shouldn't hesitate to edit below as
18265 @c needed. However if the change you want to make to this documentation
18266 @c can be done in an automated way, it's probably easier to change
18267 @c (generate-documentation) than to make it below and have to deal with
18268 @c the churn as Prosody updates.
18269
18270 Available @code{prosody-configuration} fields are:
18271
18272 @deftypevr {@code{prosody-configuration} parameter} package prosody
18273 The Prosody package.
18274 @end deftypevr
18275
18276 @deftypevr {@code{prosody-configuration} parameter} file-name data-path
18277 Location of the Prosody data storage directory. See
18278 @url{https://prosody.im/doc/configure}.
18279 Defaults to @samp{"/var/lib/prosody"}.
18280 @end deftypevr
18281
18282 @deftypevr {@code{prosody-configuration} parameter} file-object-list plugin-paths
18283 Additional plugin directories. They are searched in all the specified
18284 paths in order. See @url{https://prosody.im/doc/plugins_directory}.
18285 Defaults to @samp{()}.
18286 @end deftypevr
18287
18288 @deftypevr {@code{prosody-configuration} parameter} file-name certificates
18289 Every virtual host and component needs a certificate so that clients and
18290 servers can securely verify its identity. Prosody will automatically load
18291 certificates/keys from the directory specified here.
18292 Defaults to @samp{"/etc/prosody/certs"}.
18293 @end deftypevr
18294
18295 @deftypevr {@code{prosody-configuration} parameter} string-list admins
18296 This is a list of accounts that are admins for the server. Note that you
18297 must create the accounts separately. See @url{https://prosody.im/doc/admins} and
18298 @url{https://prosody.im/doc/creating_accounts}.
18299 Example: @code{(admins '("user1@@example.com" "user2@@example.net"))}
18300 Defaults to @samp{()}.
18301 @end deftypevr
18302
18303 @deftypevr {@code{prosody-configuration} parameter} boolean use-libevent?
18304 Enable use of libevent for better performance under high load. See
18305 @url{https://prosody.im/doc/libevent}.
18306 Defaults to @samp{#f}.
18307 @end deftypevr
18308
18309 @deftypevr {@code{prosody-configuration} parameter} module-list modules-enabled
18310 This is the list of modules Prosody will load on startup. It looks for
18311 @code{mod_modulename.lua} in the plugins folder, so make sure that exists too.
18312 Documentation on modules can be found at:
18313 @url{https://prosody.im/doc/modules}.
18314 Defaults to @samp{("roster" "saslauth" "tls" "dialback" "disco" "carbons" "private" "blocklist" "vcard" "version" "uptime" "time" "ping" "pep" "register" "admin_adhoc")}.
18315 @end deftypevr
18316
18317 @deftypevr {@code{prosody-configuration} parameter} string-list modules-disabled
18318 @samp{"offline"}, @samp{"c2s"} and @samp{"s2s"} are auto-loaded, but
18319 should you want to disable them then add them to this list.
18320 Defaults to @samp{()}.
18321 @end deftypevr
18322
18323 @deftypevr {@code{prosody-configuration} parameter} file-object groups-file
18324 Path to a text file where the shared groups are defined. If this path is
18325 empty then @samp{mod_groups} does nothing. See
18326 @url{https://prosody.im/doc/modules/mod_groups}.
18327 Defaults to @samp{"/var/lib/prosody/sharedgroups.txt"}.
18328 @end deftypevr
18329
18330 @deftypevr {@code{prosody-configuration} parameter} boolean allow-registration?
18331 Disable account creation by default, for security. See
18332 @url{https://prosody.im/doc/creating_accounts}.
18333 Defaults to @samp{#f}.
18334 @end deftypevr
18335
18336 @deftypevr {@code{prosody-configuration} parameter} maybe-ssl-configuration ssl
18337 These are the SSL/TLS-related settings. Most of them are disabled so to
18338 use Prosody's defaults. If you do not completely understand these options, do
18339 not add them to your config, it is easy to lower the security of your server
18340 using them. See @url{https://prosody.im/doc/advanced_ssl_config}.
18341
18342 Available @code{ssl-configuration} fields are:
18343
18344 @deftypevr {@code{ssl-configuration} parameter} maybe-string protocol
18345 This determines what handshake to use.
18346 @end deftypevr
18347
18348 @deftypevr {@code{ssl-configuration} parameter} maybe-file-name key
18349 Path to your private key file.
18350 @end deftypevr
18351
18352 @deftypevr {@code{ssl-configuration} parameter} maybe-file-name certificate
18353 Path to your certificate file.
18354 @end deftypevr
18355
18356 @deftypevr {@code{ssl-configuration} parameter} file-object capath
18357 Path to directory containing root certificates that you wish Prosody to
18358 trust when verifying the certificates of remote servers.
18359 Defaults to @samp{"/etc/ssl/certs"}.
18360 @end deftypevr
18361
18362 @deftypevr {@code{ssl-configuration} parameter} maybe-file-object cafile
18363 Path to a file containing root certificates that you wish Prosody to trust.
18364 Similar to @code{capath} but with all certificates concatenated together.
18365 @end deftypevr
18366
18367 @deftypevr {@code{ssl-configuration} parameter} maybe-string-list verify
18368 A list of verification options (these mostly map to OpenSSL's
18369 @code{set_verify()} flags).
18370 @end deftypevr
18371
18372 @deftypevr {@code{ssl-configuration} parameter} maybe-string-list options
18373 A list of general options relating to SSL/TLS. These map to OpenSSL's
18374 @code{set_options()}. For a full list of options available in LuaSec, see the
18375 LuaSec source.
18376 @end deftypevr
18377
18378 @deftypevr {@code{ssl-configuration} parameter} maybe-non-negative-integer depth
18379 How long a chain of certificate authorities to check when looking for a
18380 trusted root certificate.
18381 @end deftypevr
18382
18383 @deftypevr {@code{ssl-configuration} parameter} maybe-string ciphers
18384 An OpenSSL cipher string. This selects what ciphers Prosody will offer to
18385 clients, and in what order.
18386 @end deftypevr
18387
18388 @deftypevr {@code{ssl-configuration} parameter} maybe-file-name dhparam
18389 A path to a file containing parameters for Diffie-Hellman key exchange. You
18390 can create such a file with:
18391 @code{openssl dhparam -out /etc/prosody/certs/dh-2048.pem 2048}
18392 @end deftypevr
18393
18394 @deftypevr {@code{ssl-configuration} parameter} maybe-string curve
18395 Curve for Elliptic curve Diffie-Hellman. Prosody's default is
18396 @samp{"secp384r1"}.
18397 @end deftypevr
18398
18399 @deftypevr {@code{ssl-configuration} parameter} maybe-string-list verifyext
18400 A list of "extra" verification options.
18401 @end deftypevr
18402
18403 @deftypevr {@code{ssl-configuration} parameter} maybe-string password
18404 Password for encrypted private keys.
18405 @end deftypevr
18406
18407 @end deftypevr
18408
18409 @deftypevr {@code{prosody-configuration} parameter} boolean c2s-require-encryption?
18410 Whether to force all client-to-server connections to be encrypted or not.
18411 See @url{https://prosody.im/doc/modules/mod_tls}.
18412 Defaults to @samp{#f}.
18413 @end deftypevr
18414
18415 @deftypevr {@code{prosody-configuration} parameter} string-list disable-sasl-mechanisms
18416 Set of mechanisms that will never be offered. See
18417 @url{https://prosody.im/doc/modules/mod_saslauth}.
18418 Defaults to @samp{("DIGEST-MD5")}.
18419 @end deftypevr
18420
18421 @deftypevr {@code{prosody-configuration} parameter} boolean s2s-require-encryption?
18422 Whether to force all server-to-server connections to be encrypted or not.
18423 See @url{https://prosody.im/doc/modules/mod_tls}.
18424 Defaults to @samp{#f}.
18425 @end deftypevr
18426
18427 @deftypevr {@code{prosody-configuration} parameter} boolean s2s-secure-auth?
18428 Whether to require encryption and certificate authentication. This
18429 provides ideal security, but requires servers you communicate with to support
18430 encryption AND present valid, trusted certificates. See
18431 @url{https://prosody.im/doc/s2s#security}.
18432 Defaults to @samp{#f}.
18433 @end deftypevr
18434
18435 @deftypevr {@code{prosody-configuration} parameter} string-list s2s-insecure-domains
18436 Many servers don't support encryption or have invalid or self-signed
18437 certificates. You can list domains here that will not be required to
18438 authenticate using certificates. They will be authenticated using DNS. See
18439 @url{https://prosody.im/doc/s2s#security}.
18440 Defaults to @samp{()}.
18441 @end deftypevr
18442
18443 @deftypevr {@code{prosody-configuration} parameter} string-list s2s-secure-domains
18444 Even if you leave @code{s2s-secure-auth?} disabled, you can still require
18445 valid certificates for some domains by specifying a list here. See
18446 @url{https://prosody.im/doc/s2s#security}.
18447 Defaults to @samp{()}.
18448 @end deftypevr
18449
18450 @deftypevr {@code{prosody-configuration} parameter} string authentication
18451 Select the authentication backend to use. The default provider stores
18452 passwords in plaintext and uses Prosody's configured data storage to store the
18453 authentication data. If you do not trust your server please see
18454 @url{https://prosody.im/doc/modules/mod_auth_internal_hashed} for information
18455 about using the hashed backend. See also
18456 @url{https://prosody.im/doc/authentication}
18457 Defaults to @samp{"internal_plain"}.
18458 @end deftypevr
18459
18460 @deftypevr {@code{prosody-configuration} parameter} maybe-string log
18461 Set logging options. Advanced logging configuration is not yet supported
18462 by the Prosody service. See @url{https://prosody.im/doc/logging}.
18463 Defaults to @samp{"*syslog"}.
18464 @end deftypevr
18465
18466 @deftypevr {@code{prosody-configuration} parameter} file-name pidfile
18467 File to write pid in. See @url{https://prosody.im/doc/modules/mod_posix}.
18468 Defaults to @samp{"/var/run/prosody/prosody.pid"}.
18469 @end deftypevr
18470
18471 @deftypevr {@code{prosody-configuration} parameter} maybe-non-negative-integer http-max-content-size
18472 Maximum allowed size of the HTTP body (in bytes).
18473 @end deftypevr
18474
18475 @deftypevr {@code{prosody-configuration} parameter} maybe-string http-external-url
18476 Some modules expose their own URL in various ways. This URL is built
18477 from the protocol, host and port used. If Prosody sits behind a proxy, the
18478 public URL will be @code{http-external-url} instead. See
18479 @url{https://prosody.im/doc/http#external_url}.
18480 @end deftypevr
18481
18482 @deftypevr {@code{prosody-configuration} parameter} virtualhost-configuration-list virtualhosts
18483 A host in Prosody is a domain on which user accounts can be created. For
18484 example if you want your users to have addresses like
18485 @samp{"john.smith@@example.com"} then you need to add a host
18486 @samp{"example.com"}. All options in this list will apply only to this host.
18487
18488 Note: the name "virtual" host is used in configuration to avoid confusion with
18489 the actual physical host that Prosody is installed on. A single Prosody
18490 instance can serve many domains, each one defined as a VirtualHost entry in
18491 Prosody's configuration. Conversely a server that hosts a single domain would
18492 have just one VirtualHost entry.
18493
18494 See @url{https://prosody.im/doc/configure#virtual_host_settings}.
18495
18496 Available @code{virtualhost-configuration} fields are:
18497
18498 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:
18499 @deftypevr {@code{virtualhost-configuration} parameter} string domain
18500 Domain you wish Prosody to serve.
18501 @end deftypevr
18502
18503 @end deftypevr
18504
18505 @deftypevr {@code{prosody-configuration} parameter} int-component-configuration-list int-components
18506 Components are extra services on a server which are available to clients,
18507 usually on a subdomain of the main server (such as
18508 @samp{"mycomponent.example.com"}). Example components might be chatroom
18509 servers, user directories, or gateways to other protocols.
18510
18511 Internal components are implemented with Prosody-specific plugins. To add an
18512 internal component, you simply fill the hostname field, and the plugin you wish
18513 to use for the component.
18514
18515 See @url{https://prosody.im/doc/components}.
18516 Defaults to @samp{()}.
18517
18518 Available @code{int-component-configuration} fields are:
18519
18520 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:
18521 @deftypevr {@code{int-component-configuration} parameter} string hostname
18522 Hostname of the component.
18523 @end deftypevr
18524
18525 @deftypevr {@code{int-component-configuration} parameter} string plugin
18526 Plugin you wish to use for the component.
18527 @end deftypevr
18528
18529 @deftypevr {@code{int-component-configuration} parameter} maybe-mod-muc-configuration mod-muc
18530 Multi-user chat (MUC) is Prosody's module for allowing you to create
18531 hosted chatrooms/conferences for XMPP users.
18532
18533 General information on setting up and using multi-user chatrooms can be found
18534 in the "Chatrooms" documentation (@url{https://prosody.im/doc/chatrooms}),
18535 which you should read if you are new to XMPP chatrooms.
18536
18537 See also @url{https://prosody.im/doc/modules/mod_muc}.
18538
18539 Available @code{mod-muc-configuration} fields are:
18540
18541 @deftypevr {@code{mod-muc-configuration} parameter} string name
18542 The name to return in service discovery responses.
18543 Defaults to @samp{"Prosody Chatrooms"}.
18544 @end deftypevr
18545
18546 @deftypevr {@code{mod-muc-configuration} parameter} string-or-boolean restrict-room-creation
18547 If @samp{#t}, this will only allow admins to create new chatrooms.
18548 Otherwise anyone can create a room. The value @samp{"local"} restricts room
18549 creation to users on the service's parent domain. E.g.@: @samp{user@@example.com}
18550 can create rooms on @samp{rooms.example.com}. The value @samp{"admin"}
18551 restricts to service administrators only.
18552 Defaults to @samp{#f}.
18553 @end deftypevr
18554
18555 @deftypevr {@code{mod-muc-configuration} parameter} non-negative-integer max-history-messages
18556 Maximum number of history messages that will be sent to the member that has
18557 just joined the room.
18558 Defaults to @samp{20}.
18559 @end deftypevr
18560
18561 @end deftypevr
18562
18563 @end deftypevr
18564
18565 @deftypevr {@code{prosody-configuration} parameter} ext-component-configuration-list ext-components
18566 External components use XEP-0114, which most standalone components
18567 support. To add an external component, you simply fill the hostname field. See
18568 @url{https://prosody.im/doc/components}.
18569 Defaults to @samp{()}.
18570
18571 Available @code{ext-component-configuration} fields are:
18572
18573 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:
18574 @deftypevr {@code{ext-component-configuration} parameter} string component-secret
18575 Password which the component will use to log in.
18576 @end deftypevr
18577
18578 @deftypevr {@code{ext-component-configuration} parameter} string hostname
18579 Hostname of the component.
18580 @end deftypevr
18581
18582 @end deftypevr
18583
18584 @deftypevr {@code{prosody-configuration} parameter} non-negative-integer-list component-ports
18585 Port(s) Prosody listens on for component connections.
18586 Defaults to @samp{(5347)}.
18587 @end deftypevr
18588
18589 @deftypevr {@code{prosody-configuration} parameter} string component-interface
18590 Interface Prosody listens on for component connections.
18591 Defaults to @samp{"127.0.0.1"}.
18592 @end deftypevr
18593
18594 @deftypevr {@code{prosody-configuration} parameter} maybe-raw-content raw-content
18595 Raw content that will be added to the configuration file.
18596 @end deftypevr
18597
18598 It could be that you just want to get a @code{prosody.cfg.lua}
18599 up and running. In that case, you can pass an
18600 @code{opaque-prosody-configuration} record as the value of
18601 @code{prosody-service-type}. As its name indicates, an opaque configuration
18602 does not have easy reflective capabilities.
18603 Available @code{opaque-prosody-configuration} fields are:
18604
18605 @deftypevr {@code{opaque-prosody-configuration} parameter} package prosody
18606 The prosody package.
18607 @end deftypevr
18608
18609 @deftypevr {@code{opaque-prosody-configuration} parameter} string prosody.cfg.lua
18610 The contents of the @code{prosody.cfg.lua} to use.
18611 @end deftypevr
18612
18613 For example, if your @code{prosody.cfg.lua} is just the empty
18614 string, you could instantiate a prosody service like this:
18615
18616 @lisp
18617 (service prosody-service-type
18618 (opaque-prosody-configuration
18619 (prosody.cfg.lua "")))
18620 @end lisp
18621
18622 @c end of Prosody auto-generated documentation
18623
18624 @subsubheading BitlBee Service
18625
18626 @cindex IRC (Internet Relay Chat)
18627 @cindex IRC gateway
18628 @url{https://bitlbee.org,BitlBee} is a gateway that provides an IRC
18629 interface to a variety of messaging protocols such as XMPP.
18630
18631 @defvr {Scheme Variable} bitlbee-service-type
18632 This is the service type for the @url{https://bitlbee.org,BitlBee} IRC
18633 gateway daemon. Its value is a @code{bitlbee-configuration} (see
18634 below).
18635
18636 To have BitlBee listen on port 6667 on localhost, add this line to your
18637 services:
18638
18639 @lisp
18640 (service bitlbee-service-type)
18641 @end lisp
18642 @end defvr
18643
18644 @deftp {Data Type} bitlbee-configuration
18645 This is the configuration for BitlBee, with the following fields:
18646
18647 @table @asis
18648 @item @code{interface} (default: @code{"127.0.0.1"})
18649 @itemx @code{port} (default: @code{6667})
18650 Listen on the network interface corresponding to the IP address
18651 specified in @var{interface}, on @var{port}.
18652
18653 When @var{interface} is @code{127.0.0.1}, only local clients can
18654 connect; when it is @code{0.0.0.0}, connections can come from any
18655 networking interface.
18656
18657 @item @code{bitlbee} (default: @code{bitlbee})
18658 The BitlBee package to use.
18659
18660 @item @code{plugins} (default: @code{'()})
18661 List of plugin packages to use---e.g., @code{bitlbee-discord}.
18662
18663 @item @code{extra-settings} (default: @code{""})
18664 Configuration snippet added as-is to the BitlBee configuration file.
18665 @end table
18666 @end deftp
18667
18668 @subsubheading Quassel Service
18669
18670 @cindex IRC (Internet Relay Chat)
18671 @url{https://quassel-irc.org/,Quassel} is a distributed IRC client,
18672 meaning that one or more clients can attach to and detach from the
18673 central core.
18674
18675 @defvr {Scheme Variable} quassel-service-type
18676 This is the service type for the @url{https://quassel-irc.org/,Quassel}
18677 IRC backend daemon. Its value is a @code{quassel-configuration}
18678 (see below).
18679 @end defvr
18680
18681 @deftp {Data Type} quassel-configuration
18682 This is the configuration for Quassel, with the following fields:
18683
18684 @table @asis
18685 @item @code{quassel} (default: @code{quassel})
18686 The Quassel package to use.
18687
18688 @item @code{interface} (default: @code{"::,0.0.0.0"})
18689 @item @code{port} (default: @code{4242})
18690 Listen on the network interface(s) corresponding to the IPv4 or IPv6
18691 interfaces specified in the comma delimited @var{interface}, on
18692 @var{port}.
18693
18694 @item @code{loglevel} (default: @code{"Info"})
18695 The level of logging desired. Accepted values are Debug, Info, Warning
18696 and Error.
18697 @end table
18698 @end deftp
18699
18700 @node Telephony Services
18701 @subsection Telephony Services
18702
18703 @cindex Murmur (VoIP server)
18704 @cindex VoIP server
18705 This section describes how to set up and run a Murmur server. Murmur is
18706 the server of the @uref{https://mumble.info, Mumble} voice-over-IP
18707 (VoIP) suite.
18708
18709 @deftp {Data Type} murmur-configuration
18710 The service type for the Murmur server. An example configuration can
18711 look like this:
18712
18713 @lisp
18714 (service murmur-service-type
18715 (murmur-configuration
18716 (welcome-text
18717 "Welcome to this Mumble server running on Guix!")
18718 (cert-required? #t) ;disallow text password logins
18719 (ssl-cert "/etc/letsencrypt/live/mumble.example.com/fullchain.pem")
18720 (ssl-key "/etc/letsencrypt/live/mumble.example.com/privkey.pem")))
18721 @end lisp
18722
18723 After reconfiguring your system, you can manually set the murmur @code{SuperUser}
18724 password with the command that is printed during the activation phase.
18725
18726 It is recommended to register a normal Mumble user account
18727 and grant it admin or moderator rights.
18728 You can use the @code{mumble} client to
18729 login as new normal user, register yourself, and log out.
18730 For the next step login with the name @code{SuperUser} use
18731 the @code{SuperUser} password that you set previously,
18732 and grant your newly registered mumble user administrator or moderator
18733 rights and create some channels.
18734
18735 Available @code{murmur-configuration} fields are:
18736
18737 @table @asis
18738 @item @code{package} (default: @code{mumble})
18739 Package that contains @code{bin/murmurd}.
18740
18741 @item @code{user} (default: @code{"murmur"})
18742 User who will run the Murmur server.
18743
18744 @item @code{group} (default: @code{"murmur"})
18745 Group of the user who will run the murmur server.
18746
18747 @item @code{port} (default: @code{64738})
18748 Port on which the server will listen.
18749
18750 @item @code{welcome-text} (default: @code{""})
18751 Welcome text sent to clients when they connect.
18752
18753 @item @code{server-password} (default: @code{""})
18754 Password the clients have to enter in order to connect.
18755
18756 @item @code{max-users} (default: @code{100})
18757 Maximum of users that can be connected to the server at once.
18758
18759 @item @code{max-user-bandwidth} (default: @code{#f})
18760 Maximum voice traffic a user can send per second.
18761
18762 @item @code{database-file} (default: @code{"/var/lib/murmur/db.sqlite"})
18763 File name of the sqlite database.
18764 The service's user will become the owner of the directory.
18765
18766 @item @code{log-file} (default: @code{"/var/log/murmur/murmur.log"})
18767 File name of the log file.
18768 The service's user will become the owner of the directory.
18769
18770 @item @code{autoban-attempts} (default: @code{10})
18771 Maximum number of logins a user can make in @code{autoban-timeframe}
18772 without getting auto banned for @code{autoban-time}.
18773
18774 @item @code{autoban-timeframe} (default: @code{120})
18775 Timeframe for autoban in seconds.
18776
18777 @item @code{autoban-time} (default: @code{300})
18778 Amount of time in seconds for which a client gets banned
18779 when violating the autoban limits.
18780
18781 @item @code{opus-threshold} (default: @code{100})
18782 Percentage of clients that need to support opus
18783 before switching over to opus audio codec.
18784
18785 @item @code{channel-nesting-limit} (default: @code{10})
18786 How deep channels can be nested at maximum.
18787
18788 @item @code{channelname-regex} (default: @code{#f})
18789 A string in form of a Qt regular expression that channel names must conform to.
18790
18791 @item @code{username-regex} (default: @code{#f})
18792 A string in form of a Qt regular expression that user names must conform to.
18793
18794 @item @code{text-message-length} (default: @code{5000})
18795 Maximum size in bytes that a user can send in one text chat message.
18796
18797 @item @code{image-message-length} (default: @code{(* 128 1024)})
18798 Maximum size in bytes that a user can send in one image message.
18799
18800 @item @code{cert-required?} (default: @code{#f})
18801 If it is set to @code{#t} clients that use weak password authentication
18802 will not be accepted. Users must have completed the certificate wizard to join.
18803
18804 @item @code{remember-channel?} (default: @code{#f})
18805 Should murmur remember the last channel each user was in when they disconnected
18806 and put them into the remembered channel when they rejoin.
18807
18808 @item @code{allow-html?} (default: @code{#f})
18809 Should html be allowed in text messages, user comments, and channel descriptions.
18810
18811 @item @code{allow-ping?} (default: @code{#f})
18812 Setting to true exposes the current user count, the maximum user count, and
18813 the server's maximum bandwidth per client to unauthenticated users. In the
18814 Mumble client, this information is shown in the Connect dialog.
18815
18816 Disabling this setting will prevent public listing of the server.
18817
18818 @item @code{bonjour?} (default: @code{#f})
18819 Should the server advertise itself in the local network through the bonjour protocol.
18820
18821 @item @code{send-version?} (default: @code{#f})
18822 Should the murmur server version be exposed in ping requests.
18823
18824 @item @code{log-days} (default: @code{31})
18825 Murmur also stores logs in the database, which are accessible via RPC.
18826 The default is 31 days of months, but you can set this setting to 0 to keep logs forever,
18827 or -1 to disable logging to the database.
18828
18829 @item @code{obfuscate-ips?} (default: @code{#t})
18830 Should logged ips be obfuscated to protect the privacy of users.
18831
18832 @item @code{ssl-cert} (default: @code{#f})
18833 File name of the SSL/TLS certificate used for encrypted connections.
18834
18835 @lisp
18836 (ssl-cert "/etc/letsencrypt/live/example.com/fullchain.pem")
18837 @end lisp
18838 @item @code{ssl-key} (default: @code{#f})
18839 Filepath to the ssl private key used for encrypted connections.
18840 @lisp
18841 (ssl-key "/etc/letsencrypt/live/example.com/privkey.pem")
18842 @end lisp
18843
18844 @item @code{ssl-dh-params} (default: @code{#f})
18845 File name of a PEM-encoded file with Diffie-Hellman parameters
18846 for the SSL/TLS encryption. Alternatively you set it to
18847 @code{"@@ffdhe2048"}, @code{"@@ffdhe3072"}, @code{"@@ffdhe4096"}, @code{"@@ffdhe6144"}
18848 or @code{"@@ffdhe8192"} to use bundled parameters from RFC 7919.
18849
18850 @item @code{ssl-ciphers} (default: @code{#f})
18851 The @code{ssl-ciphers} option chooses the cipher suites to make available for use
18852 in SSL/TLS.
18853
18854 This option is specified using
18855 @uref{https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT,
18856 OpenSSL cipher list notation}.
18857
18858 It is recommended that you try your cipher string using 'openssl ciphers <string>'
18859 before setting it here, to get a feel for which cipher suites you will get.
18860 After setting this option, it is recommend that you inspect your Murmur log
18861 to ensure that Murmur is using the cipher suites that you expected it to.
18862
18863 Note: Changing this option may impact the backwards compatibility of your
18864 Murmur server, and can remove the ability for older Mumble clients to be able
18865 to connect to it.
18866
18867 @item @code{public-registration} (default: @code{#f})
18868 Must be a @code{<murmur-public-registration-configuration>} record or @code{#f}.
18869
18870 You can optionally register your server in the public server list that the
18871 @code{mumble} client shows on startup.
18872 You cannot register your server if you have set a @code{server-password},
18873 or set @code{allow-ping} to @code{#f}.
18874
18875 It might take a few hours until it shows up in the public list.
18876
18877 @item @code{file} (default: @code{#f})
18878 Optional alternative override for this configuration.
18879 @end table
18880 @end deftp
18881
18882 @deftp {Data Type} murmur-public-registration-configuration
18883 Configuration for public registration of a murmur service.
18884
18885 @table @asis
18886 @item @code{name}
18887 This is a display name for your server. Not to be confused with the hostname.
18888
18889 @item @code{password}
18890 A password to identify your registration.
18891 Subsequent updates will need the same password. Don't lose your password.
18892
18893 @item @code{url}
18894 This should be a @code{http://} or @code{https://} link to your web
18895 site.
18896
18897 @item @code{hostname} (default: @code{#f})
18898 By default your server will be listed by its IP address.
18899 If it is set your server will be linked by this host name instead.
18900 @end table
18901 @end deftp
18902
18903
18904
18905 @node Monitoring Services
18906 @subsection Monitoring Services
18907
18908 @subsubheading Tailon Service
18909
18910 @uref{https://tailon.readthedocs.io/, Tailon} is a web application for
18911 viewing and searching log files.
18912
18913 The following example will configure the service with default values.
18914 By default, Tailon can be accessed on port 8080 (@code{http://localhost:8080}).
18915
18916 @lisp
18917 (service tailon-service-type)
18918 @end lisp
18919
18920 The following example customises more of the Tailon configuration,
18921 adding @command{sed} to the list of allowed commands.
18922
18923 @lisp
18924 (service tailon-service-type
18925 (tailon-configuration
18926 (config-file
18927 (tailon-configuration-file
18928 (allowed-commands '("tail" "grep" "awk" "sed"))))))
18929 @end lisp
18930
18931
18932 @deftp {Data Type} tailon-configuration
18933 Data type representing the configuration of Tailon.
18934 This type has the following parameters:
18935
18936 @table @asis
18937 @item @code{config-file} (default: @code{(tailon-configuration-file)})
18938 The configuration file to use for Tailon. This can be set to a
18939 @dfn{tailon-configuration-file} record value, or any gexp
18940 (@pxref{G-Expressions}).
18941
18942 For example, to instead use a local file, the @code{local-file} function
18943 can be used:
18944
18945 @lisp
18946 (service tailon-service-type
18947 (tailon-configuration
18948 (config-file (local-file "./my-tailon.conf"))))
18949 @end lisp
18950
18951 @item @code{package} (default: @code{tailon})
18952 The tailon package to use.
18953
18954 @end table
18955 @end deftp
18956
18957 @deftp {Data Type} tailon-configuration-file
18958 Data type representing the configuration options for Tailon.
18959 This type has the following parameters:
18960
18961 @table @asis
18962 @item @code{files} (default: @code{(list "/var/log")})
18963 List of files to display. The list can include strings for a single file
18964 or directory, or a list, where the first item is the name of a
18965 subsection, and the remaining items are the files or directories in that
18966 subsection.
18967
18968 @item @code{bind} (default: @code{"localhost:8080"})
18969 Address and port to which Tailon should bind on.
18970
18971 @item @code{relative-root} (default: @code{#f})
18972 URL path to use for Tailon, set to @code{#f} to not use a path.
18973
18974 @item @code{allow-transfers?} (default: @code{#t})
18975 Allow downloading the log files in the web interface.
18976
18977 @item @code{follow-names?} (default: @code{#t})
18978 Allow tailing of not-yet existent files.
18979
18980 @item @code{tail-lines} (default: @code{200})
18981 Number of lines to read initially from each file.
18982
18983 @item @code{allowed-commands} (default: @code{(list "tail" "grep" "awk")})
18984 Commands to allow running. By default, @code{sed} is disabled.
18985
18986 @item @code{debug?} (default: @code{#f})
18987 Set @code{debug?} to @code{#t} to show debug messages.
18988
18989 @item @code{wrap-lines} (default: @code{#t})
18990 Initial line wrapping state in the web interface. Set to @code{#t} to
18991 initially wrap lines (the default), or to @code{#f} to initially not
18992 wrap lines.
18993
18994 @item @code{http-auth} (default: @code{#f})
18995 HTTP authentication type to use. Set to @code{#f} to disable
18996 authentication (the default). Supported values are @code{"digest"} or
18997 @code{"basic"}.
18998
18999 @item @code{users} (default: @code{#f})
19000 If HTTP authentication is enabled (see @code{http-auth}), access will be
19001 restricted to the credentials provided here. To configure users, use a
19002 list of pairs, where the first element of the pair is the username, and
19003 the 2nd element of the pair is the password.
19004
19005 @lisp
19006 (tailon-configuration-file
19007 (http-auth "basic")
19008 (users '(("user1" . "password1")
19009 ("user2" . "password2"))))
19010 @end lisp
19011
19012 @end table
19013 @end deftp
19014
19015
19016 @subsubheading Darkstat Service
19017 @cindex darkstat
19018 Darkstat is a packet sniffer that captures network traffic, calculates
19019 statistics about usage, and serves reports over HTTP.
19020
19021 @defvar {Scheme Variable} darkstat-service-type
19022 This is the service type for the
19023 @uref{https://unix4lyfe.org/darkstat/, darkstat}
19024 service, its value must be a @code{darkstat-configuration} record as in
19025 this example:
19026
19027 @lisp
19028 (service darkstat-service-type
19029 (darkstat-configuration
19030 (interface "eno1")))
19031 @end lisp
19032 @end defvar
19033
19034 @deftp {Data Type} darkstat-configuration
19035 Data type representing the configuration of @command{darkstat}.
19036
19037 @table @asis
19038 @item @code{package} (default: @code{darkstat})
19039 The darkstat package to use.
19040
19041 @item @code{interface}
19042 Capture traffic on the specified network interface.
19043
19044 @item @code{port} (default: @code{"667"})
19045 Bind the web interface to the specified port.
19046
19047 @item @code{bind-address} (default: @code{"127.0.0.1"})
19048 Bind the web interface to the specified address.
19049
19050 @item @code{base} (default: @code{"/"})
19051 Specify the path of the base URL. This can be useful if
19052 @command{darkstat} is accessed via a reverse proxy.
19053
19054 @end table
19055 @end deftp
19056
19057 @subsubheading Prometheus Node Exporter Service
19058
19059 @cindex prometheus-node-exporter
19060 The Prometheus ``node exporter'' makes hardware and operating system statistics
19061 provided by the Linux kernel available for the Prometheus monitoring system.
19062 This service should be deployed on all physical nodes and virtual machines,
19063 where monitoring these statistics is desirable.
19064
19065 @defvar {Scheme variable} prometheus-node-exporter-service-type
19066 This is the service type for the
19067 @uref{https://github.com/prometheus/node_exporter/, prometheus-node-exporter}
19068 service, its value must be a @code{prometheus-node-exporter-configuration}
19069 record as in this example:
19070
19071 @lisp
19072 (service prometheus-node-exporter-service-type
19073 (prometheus-node-exporter-configuration
19074 (web-listen-address ":9100")))
19075 @end lisp
19076 @end defvar
19077
19078 @deftp {Data Type} prometheus-node-exporter-configuration
19079 Data type representing the configuration of @command{node_exporter}.
19080
19081 @table @asis
19082 @item @code{package} (default: @code{go-github-com-prometheus-node-exporter})
19083 The prometheus-node-exporter package to use.
19084
19085 @item @code{web-listen-address} (default: @code{":9100"})
19086 Bind the web interface to the specified address.
19087
19088 @end table
19089 @end deftp
19090
19091 @subsubheading Zabbix server
19092 @cindex zabbix zabbix-server
19093 Zabbix provides monitoring metrics, among others network utilization, CPU load
19094 and disk space consumption:
19095
19096 @itemize
19097 @item High performance, high capacity (able to monitor hundreds of thousands of devices).
19098 @item Auto-discovery of servers and network devices and interfaces.
19099 @item Low-level discovery, allows to automatically start monitoring new items, file systems or network interfaces among others.
19100 @item Distributed monitoring with centralized web administration.
19101 @item Native high performance agents.
19102 @item SLA, and ITIL KPI metrics on reporting.
19103 @item High-level (business) view of monitored resources through user-defined visual console screens and dashboards.
19104 @item Remote command execution through Zabbix proxies.
19105 @end itemize
19106
19107 @c %start of fragment
19108
19109 Available @code{zabbix-server-configuration} fields are:
19110
19111 @deftypevr {@code{zabbix-server-configuration} parameter} package zabbix-server
19112 The zabbix-server package.
19113
19114 @end deftypevr
19115
19116 @deftypevr {@code{zabbix-server-configuration} parameter} string user
19117 User who will run the Zabbix server.
19118
19119 Defaults to @samp{"zabbix"}.
19120
19121 @end deftypevr
19122
19123 @deftypevr {@code{zabbix-server-configuration} parameter} group group
19124 Group who will run the Zabbix server.
19125
19126 Defaults to @samp{"zabbix"}.
19127
19128 @end deftypevr
19129
19130 @deftypevr {@code{zabbix-server-configuration} parameter} string db-host
19131 Database host name.
19132
19133 Defaults to @samp{"127.0.0.1"}.
19134
19135 @end deftypevr
19136
19137 @deftypevr {@code{zabbix-server-configuration} parameter} string db-name
19138 Database name.
19139
19140 Defaults to @samp{"zabbix"}.
19141
19142 @end deftypevr
19143
19144 @deftypevr {@code{zabbix-server-configuration} parameter} string db-user
19145 Database user.
19146
19147 Defaults to @samp{"zabbix"}.
19148
19149 @end deftypevr
19150
19151 @deftypevr {@code{zabbix-server-configuration} parameter} string db-password
19152 Database password. Please, use @code{include-files} with
19153 @code{DBPassword=SECRET} inside a specified file instead.
19154
19155 Defaults to @samp{""}.
19156
19157 @end deftypevr
19158
19159 @deftypevr {@code{zabbix-server-configuration} parameter} number db-port
19160 Database port.
19161
19162 Defaults to @samp{5432}.
19163
19164 @end deftypevr
19165
19166 @deftypevr {@code{zabbix-server-configuration} parameter} string log-type
19167 Specifies where log messages are written to:
19168
19169 @itemize @bullet
19170 @item
19171 @code{system} - syslog.
19172
19173 @item
19174 @code{file} - file specified with @code{log-file} parameter.
19175
19176 @item
19177 @code{console} - standard output.
19178
19179 @end itemize
19180
19181 Defaults to @samp{""}.
19182
19183 @end deftypevr
19184
19185 @deftypevr {@code{zabbix-server-configuration} parameter} string log-file
19186 Log file name for @code{log-type} @code{file} parameter.
19187
19188 Defaults to @samp{"/var/log/zabbix/server.log"}.
19189
19190 @end deftypevr
19191
19192 @deftypevr {@code{zabbix-server-configuration} parameter} string pid-file
19193 Name of PID file.
19194
19195 Defaults to @samp{"/var/run/zabbix/zabbix_server.pid"}.
19196
19197 @end deftypevr
19198
19199 @deftypevr {@code{zabbix-server-configuration} parameter} string ssl-ca-location
19200 The location of certificate authority (CA) files for SSL server
19201 certificate verification.
19202
19203 Defaults to @samp{"/etc/ssl/certs/ca-certificates.crt"}.
19204
19205 @end deftypevr
19206
19207 @deftypevr {@code{zabbix-server-configuration} parameter} string ssl-cert-location
19208 Location of SSL client certificates.
19209
19210 Defaults to @samp{"/etc/ssl/certs"}.
19211
19212 @end deftypevr
19213
19214 @deftypevr {@code{zabbix-server-configuration} parameter} string extra-options
19215 Extra options will be appended to Zabbix server configuration file.
19216
19217 Defaults to @samp{""}.
19218
19219 @end deftypevr
19220
19221 @deftypevr {@code{zabbix-server-configuration} parameter} include-files include-files
19222 You may include individual files or all files in a directory in the
19223 configuration file.
19224
19225 Defaults to @samp{()}.
19226
19227 @end deftypevr
19228
19229 @c %end of fragment
19230
19231 @subsubheading Zabbix agent
19232 @cindex zabbix zabbix-agent
19233
19234 Zabbix agent gathers information for Zabbix server.
19235
19236 @c %start of fragment
19237
19238 Available @code{zabbix-agent-configuration} fields are:
19239
19240 @deftypevr {@code{zabbix-agent-configuration} parameter} package zabbix-agent
19241 The zabbix-agent package.
19242
19243 @end deftypevr
19244
19245 @deftypevr {@code{zabbix-agent-configuration} parameter} string user
19246 User who will run the Zabbix agent.
19247
19248 Defaults to @samp{"zabbix"}.
19249
19250 @end deftypevr
19251
19252 @deftypevr {@code{zabbix-agent-configuration} parameter} group group
19253 Group who will run the Zabbix agent.
19254
19255 Defaults to @samp{"zabbix"}.
19256
19257 @end deftypevr
19258
19259 @deftypevr {@code{zabbix-agent-configuration} parameter} string hostname
19260 Unique, case sensitive hostname which is required for active checks and
19261 must match hostname as configured on the server.
19262
19263 Defaults to @samp{"Zabbix server"}.
19264
19265 @end deftypevr
19266
19267 @deftypevr {@code{zabbix-agent-configuration} parameter} string log-type
19268 Specifies where log messages are written to:
19269
19270 @itemize @bullet
19271 @item
19272 @code{system} - syslog.
19273
19274 @item
19275 @code{file} - file specified with @code{log-file} parameter.
19276
19277 @item
19278 @code{console} - standard output.
19279
19280 @end itemize
19281
19282 Defaults to @samp{""}.
19283
19284 @end deftypevr
19285
19286 @deftypevr {@code{zabbix-agent-configuration} parameter} string log-file
19287 Log file name for @code{log-type} @code{file} parameter.
19288
19289 Defaults to @samp{"/var/log/zabbix/agent.log"}.
19290
19291 @end deftypevr
19292
19293 @deftypevr {@code{zabbix-agent-configuration} parameter} string pid-file
19294 Name of PID file.
19295
19296 Defaults to @samp{"/var/run/zabbix/zabbix_agent.pid"}.
19297
19298 @end deftypevr
19299
19300 @deftypevr {@code{zabbix-agent-configuration} parameter} list server
19301 List of IP addresses, optionally in CIDR notation, or hostnames of
19302 Zabbix servers and Zabbix proxies. Incoming connections will be
19303 accepted only from the hosts listed here.
19304
19305 Defaults to @samp{("127.0.0.1")}.
19306
19307 @end deftypevr
19308
19309 @deftypevr {@code{zabbix-agent-configuration} parameter} list server-active
19310 List of IP:port (or hostname:port) pairs of Zabbix servers and Zabbix
19311 proxies for active checks. If port is not specified, default port is
19312 used. If this parameter is not specified, active checks are disabled.
19313
19314 Defaults to @samp{("127.0.0.1")}.
19315
19316 @end deftypevr
19317
19318 @deftypevr {@code{zabbix-agent-configuration} parameter} string extra-options
19319 Extra options will be appended to Zabbix server configuration file.
19320
19321 Defaults to @samp{""}.
19322
19323 @end deftypevr
19324
19325 @deftypevr {@code{zabbix-agent-configuration} parameter} include-files include-files
19326 You may include individual files or all files in a directory in the
19327 configuration file.
19328
19329 Defaults to @samp{()}.
19330
19331 @end deftypevr
19332
19333 @c %end of fragment
19334
19335 @subsubheading Zabbix front-end
19336 @cindex zabbix zabbix-front-end
19337
19338 This service provides a WEB interface to Zabbix server.
19339
19340 @c %start of fragment
19341
19342 Available @code{zabbix-front-end-configuration} fields are:
19343
19344 @deftypevr {@code{zabbix-front-end-configuration} parameter} nginx-server-configuration-list nginx
19345 NGINX configuration.
19346
19347 @end deftypevr
19348
19349 @deftypevr {@code{zabbix-front-end-configuration} parameter} string db-host
19350 Database host name.
19351
19352 Defaults to @samp{"localhost"}.
19353
19354 @end deftypevr
19355
19356 @deftypevr {@code{zabbix-front-end-configuration} parameter} number db-port
19357 Database port.
19358
19359 Defaults to @samp{5432}.
19360
19361 @end deftypevr
19362
19363 @deftypevr {@code{zabbix-front-end-configuration} parameter} string db-name
19364 Database name.
19365
19366 Defaults to @samp{"zabbix"}.
19367
19368 @end deftypevr
19369
19370 @deftypevr {@code{zabbix-front-end-configuration} parameter} string db-user
19371 Database user.
19372
19373 Defaults to @samp{"zabbix"}.
19374
19375 @end deftypevr
19376
19377 @deftypevr {@code{zabbix-front-end-configuration} parameter} string db-password
19378 Database password. Please, use @code{db-secret-file} instead.
19379
19380 Defaults to @samp{""}.
19381
19382 @end deftypevr
19383
19384 @deftypevr {@code{zabbix-front-end-configuration} parameter} string db-secret-file
19385 Secret file which will be appended to @file{zabbix.conf.php} file. This
19386 file contains credentials for use by Zabbix front-end. You are expected
19387 to create it manually.
19388
19389 Defaults to @samp{""}.
19390
19391 @end deftypevr
19392
19393 @deftypevr {@code{zabbix-front-end-configuration} parameter} string zabbix-host
19394 Zabbix server hostname.
19395
19396 Defaults to @samp{"localhost"}.
19397
19398 @end deftypevr
19399
19400 @deftypevr {@code{zabbix-front-end-configuration} parameter} number zabbix-port
19401 Zabbix server port.
19402
19403 Defaults to @samp{10051}.
19404
19405 @end deftypevr
19406
19407
19408 @c %end of fragment
19409
19410 @node Kerberos Services
19411 @subsection Kerberos Services
19412 @cindex Kerberos
19413
19414 The @code{(gnu services kerberos)} module provides services relating to
19415 the authentication protocol @dfn{Kerberos}.
19416
19417 @subsubheading Krb5 Service
19418
19419 Programs using a Kerberos client library normally
19420 expect a configuration file in @file{/etc/krb5.conf}.
19421 This service generates such a file from a definition provided in the
19422 operating system declaration.
19423 It does not cause any daemon to be started.
19424
19425 No ``keytab'' files are provided by this service---you must explicitly create them.
19426 This service is known to work with the MIT client library, @code{mit-krb5}.
19427 Other implementations have not been tested.
19428
19429 @defvr {Scheme Variable} krb5-service-type
19430 A service type for Kerberos 5 clients.
19431 @end defvr
19432
19433 @noindent
19434 Here is an example of its use:
19435 @lisp
19436 (service krb5-service-type
19437 (krb5-configuration
19438 (default-realm "EXAMPLE.COM")
19439 (allow-weak-crypto? #t)
19440 (realms (list
19441 (krb5-realm
19442 (name "EXAMPLE.COM")
19443 (admin-server "groucho.example.com")
19444 (kdc "karl.example.com"))
19445 (krb5-realm
19446 (name "ARGRX.EDU")
19447 (admin-server "kerb-admin.argrx.edu")
19448 (kdc "keys.argrx.edu"))))))
19449 @end lisp
19450
19451 @noindent
19452 This example provides a Kerberos@tie{}5 client configuration which:
19453 @itemize
19454 @item Recognizes two realms, @i{viz:} ``EXAMPLE.COM'' and ``ARGRX.EDU'', both
19455 of which have distinct administration servers and key distribution centers;
19456 @item Will default to the realm ``EXAMPLE.COM'' if the realm is not explicitly
19457 specified by clients;
19458 @item Accepts services which only support encryption types known to be weak.
19459 @end itemize
19460
19461 The @code{krb5-realm} and @code{krb5-configuration} types have many fields.
19462 Only the most commonly used ones are described here.
19463 For a full list, and more detailed explanation of each, see the MIT
19464 @uref{https://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html,,krb5.conf}
19465 documentation.
19466
19467
19468 @deftp {Data Type} krb5-realm
19469 @cindex realm, kerberos
19470 @table @asis
19471 @item @code{name}
19472 This field is a string identifying the name of the realm.
19473 A common convention is to use the fully qualified DNS name of your organization,
19474 converted to upper case.
19475
19476 @item @code{admin-server}
19477 This field is a string identifying the host where the administration server is
19478 running.
19479
19480 @item @code{kdc}
19481 This field is a string identifying the key distribution center
19482 for the realm.
19483 @end table
19484 @end deftp
19485
19486 @deftp {Data Type} krb5-configuration
19487
19488 @table @asis
19489 @item @code{allow-weak-crypto?} (default: @code{#f})
19490 If this flag is @code{#t} then services which only offer encryption algorithms
19491 known to be weak will be accepted.
19492
19493 @item @code{default-realm} (default: @code{#f})
19494 This field should be a string identifying the default Kerberos
19495 realm for the client.
19496 You should set this field to the name of your Kerberos realm.
19497 If this value is @code{#f}
19498 then a realm must be specified with every Kerberos principal when invoking programs
19499 such as @command{kinit}.
19500
19501 @item @code{realms}
19502 This should be a non-empty list of @code{krb5-realm} objects, which clients may
19503 access.
19504 Normally, one of them will have a @code{name} field matching the @code{default-realm}
19505 field.
19506 @end table
19507 @end deftp
19508
19509
19510 @subsubheading PAM krb5 Service
19511 @cindex pam-krb5
19512
19513 The @code{pam-krb5} service allows for login authentication and password
19514 management via Kerberos.
19515 You will need this service if you want PAM enabled applications to authenticate
19516 users using Kerberos.
19517
19518 @defvr {Scheme Variable} pam-krb5-service-type
19519 A service type for the Kerberos 5 PAM module.
19520 @end defvr
19521
19522 @deftp {Data Type} pam-krb5-configuration
19523 Data type representing the configuration of the Kerberos 5 PAM module.
19524 This type has the following parameters:
19525 @table @asis
19526 @item @code{pam-krb5} (default: @code{pam-krb5})
19527 The pam-krb5 package to use.
19528
19529 @item @code{minimum-uid} (default: @code{1000})
19530 The smallest user ID for which Kerberos authentications should be attempted.
19531 Local accounts with lower values will silently fail to authenticate.
19532 @end table
19533 @end deftp
19534
19535
19536 @node LDAP Services
19537 @subsection LDAP Services
19538 @cindex LDAP
19539 @cindex nslcd, LDAP service
19540
19541 The @code{(gnu services authentication)} module provides the
19542 @code{nslcd-service-type}, which can be used to authenticate against an LDAP
19543 server. In addition to configuring the service itself, you may want to add
19544 @code{ldap} as a name service to the Name Service Switch. @xref{Name Service
19545 Switch} for detailed information.
19546
19547 Here is a simple operating system declaration with a default configuration of
19548 the @code{nslcd-service-type} and a Name Service Switch configuration that
19549 consults the @code{ldap} name service last:
19550
19551 @lisp
19552 (use-service-modules authentication)
19553 (use-modules (gnu system nss))
19554 ...
19555 (operating-system
19556 ...
19557 (services
19558 (cons*
19559 (service nslcd-service-type)
19560 (service dhcp-client-service-type)
19561 %base-services))
19562 (name-service-switch
19563 (let ((services (list (name-service (name "db"))
19564 (name-service (name "files"))
19565 (name-service (name "ldap")))))
19566 (name-service-switch
19567 (inherit %mdns-host-lookup-nss)
19568 (password services)
19569 (shadow services)
19570 (group services)
19571 (netgroup services)
19572 (gshadow services)))))
19573 @end lisp
19574
19575 @c %start of generated documentation for nslcd-configuration
19576
19577 Available @code{nslcd-configuration} fields are:
19578
19579 @deftypevr {@code{nslcd-configuration} parameter} package nss-pam-ldapd
19580 The @code{nss-pam-ldapd} package to use.
19581
19582 @end deftypevr
19583
19584 @deftypevr {@code{nslcd-configuration} parameter} maybe-number threads
19585 The number of threads to start that can handle requests and perform LDAP
19586 queries. Each thread opens a separate connection to the LDAP server.
19587 The default is to start 5 threads.
19588
19589 Defaults to @samp{disabled}.
19590
19591 @end deftypevr
19592
19593 @deftypevr {@code{nslcd-configuration} parameter} string uid
19594 This specifies the user id with which the daemon should be run.
19595
19596 Defaults to @samp{"nslcd"}.
19597
19598 @end deftypevr
19599
19600 @deftypevr {@code{nslcd-configuration} parameter} string gid
19601 This specifies the group id with which the daemon should be run.
19602
19603 Defaults to @samp{"nslcd"}.
19604
19605 @end deftypevr
19606
19607 @deftypevr {@code{nslcd-configuration} parameter} log-option log
19608 This option controls the way logging is done via a list containing
19609 SCHEME and LEVEL. The SCHEME argument may either be the symbols "none"
19610 or "syslog", or an absolute file name. The LEVEL argument is optional
19611 and specifies the log level. The log level may be one of the following
19612 symbols: "crit", "error", "warning", "notice", "info" or "debug". All
19613 messages with the specified log level or higher are logged.
19614
19615 Defaults to @samp{("/var/log/nslcd" info)}.
19616
19617 @end deftypevr
19618
19619 @deftypevr {@code{nslcd-configuration} parameter} list uri
19620 The list of LDAP server URIs. Normally, only the first server will be
19621 used with the following servers as fall-back.
19622
19623 Defaults to @samp{("ldap://localhost:389/")}.
19624
19625 @end deftypevr
19626
19627 @deftypevr {@code{nslcd-configuration} parameter} maybe-string ldap-version
19628 The version of the LDAP protocol to use. The default is to use the
19629 maximum version supported by the LDAP library.
19630
19631 Defaults to @samp{disabled}.
19632
19633 @end deftypevr
19634
19635 @deftypevr {@code{nslcd-configuration} parameter} maybe-string binddn
19636 Specifies the distinguished name with which to bind to the directory
19637 server for lookups. The default is to bind anonymously.
19638
19639 Defaults to @samp{disabled}.
19640
19641 @end deftypevr
19642
19643 @deftypevr {@code{nslcd-configuration} parameter} maybe-string bindpw
19644 Specifies the credentials with which to bind. This option is only
19645 applicable when used with binddn.
19646
19647 Defaults to @samp{disabled}.
19648
19649 @end deftypevr
19650
19651 @deftypevr {@code{nslcd-configuration} parameter} maybe-string rootpwmoddn
19652 Specifies the distinguished name to use when the root user tries to
19653 modify a user's password using the PAM module.
19654
19655 Defaults to @samp{disabled}.
19656
19657 @end deftypevr
19658
19659 @deftypevr {@code{nslcd-configuration} parameter} maybe-string rootpwmodpw
19660 Specifies the credentials with which to bind if the root user tries to
19661 change a user's password. This option is only applicable when used with
19662 rootpwmoddn
19663
19664 Defaults to @samp{disabled}.
19665
19666 @end deftypevr
19667
19668 @deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-mech
19669 Specifies the SASL mechanism to be used when performing SASL
19670 authentication.
19671
19672 Defaults to @samp{disabled}.
19673
19674 @end deftypevr
19675
19676 @deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-realm
19677 Specifies the SASL realm to be used when performing SASL authentication.
19678
19679 Defaults to @samp{disabled}.
19680
19681 @end deftypevr
19682
19683 @deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-authcid
19684 Specifies the authentication identity to be used when performing SASL
19685 authentication.
19686
19687 Defaults to @samp{disabled}.
19688
19689 @end deftypevr
19690
19691 @deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-authzid
19692 Specifies the authorization identity to be used when performing SASL
19693 authentication.
19694
19695 Defaults to @samp{disabled}.
19696
19697 @end deftypevr
19698
19699 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean sasl-canonicalize?
19700 Determines whether the LDAP server host name should be canonicalised. If
19701 this is enabled the LDAP library will do a reverse host name lookup. By
19702 default, it is left up to the LDAP library whether this check is
19703 performed or not.
19704
19705 Defaults to @samp{disabled}.
19706
19707 @end deftypevr
19708
19709 @deftypevr {@code{nslcd-configuration} parameter} maybe-string krb5-ccname
19710 Set the name for the GSS-API Kerberos credentials cache.
19711
19712 Defaults to @samp{disabled}.
19713
19714 @end deftypevr
19715
19716 @deftypevr {@code{nslcd-configuration} parameter} string base
19717 The directory search base.
19718
19719 Defaults to @samp{"dc=example,dc=com"}.
19720
19721 @end deftypevr
19722
19723 @deftypevr {@code{nslcd-configuration} parameter} scope-option scope
19724 Specifies the search scope (subtree, onelevel, base or children). The
19725 default scope is subtree; base scope is almost never useful for name
19726 service lookups; children scope is not supported on all servers.
19727
19728 Defaults to @samp{(subtree)}.
19729
19730 @end deftypevr
19731
19732 @deftypevr {@code{nslcd-configuration} parameter} maybe-deref-option deref
19733 Specifies the policy for dereferencing aliases. The default policy is
19734 to never dereference aliases.
19735
19736 Defaults to @samp{disabled}.
19737
19738 @end deftypevr
19739
19740 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean referrals
19741 Specifies whether automatic referral chasing should be enabled. The
19742 default behaviour is to chase referrals.
19743
19744 Defaults to @samp{disabled}.
19745
19746 @end deftypevr
19747
19748 @deftypevr {@code{nslcd-configuration} parameter} list-of-map-entries maps
19749 This option allows for custom attributes to be looked up instead of the
19750 default RFC 2307 attributes. It is a list of maps, each consisting of
19751 the name of a map, the RFC 2307 attribute to match and the query
19752 expression for the attribute as it is available in the directory.
19753
19754 Defaults to @samp{()}.
19755
19756 @end deftypevr
19757
19758 @deftypevr {@code{nslcd-configuration} parameter} list-of-filter-entries filters
19759 A list of filters consisting of the name of a map to which the filter
19760 applies and an LDAP search filter expression.
19761
19762 Defaults to @samp{()}.
19763
19764 @end deftypevr
19765
19766 @deftypevr {@code{nslcd-configuration} parameter} maybe-number bind-timelimit
19767 Specifies the time limit in seconds to use when connecting to the
19768 directory server. The default value is 10 seconds.
19769
19770 Defaults to @samp{disabled}.
19771
19772 @end deftypevr
19773
19774 @deftypevr {@code{nslcd-configuration} parameter} maybe-number timelimit
19775 Specifies the time limit (in seconds) to wait for a response from the
19776 LDAP server. A value of zero, which is the default, is to wait
19777 indefinitely for searches to be completed.
19778
19779 Defaults to @samp{disabled}.
19780
19781 @end deftypevr
19782
19783 @deftypevr {@code{nslcd-configuration} parameter} maybe-number idle-timelimit
19784 Specifies the period if inactivity (in seconds) after which the con‐
19785 nection to the LDAP server will be closed. The default is not to time
19786 out connections.
19787
19788 Defaults to @samp{disabled}.
19789
19790 @end deftypevr
19791
19792 @deftypevr {@code{nslcd-configuration} parameter} maybe-number reconnect-sleeptime
19793 Specifies the number of seconds to sleep when connecting to all LDAP
19794 servers fails. By default one second is waited between the first
19795 failure and the first retry.
19796
19797 Defaults to @samp{disabled}.
19798
19799 @end deftypevr
19800
19801 @deftypevr {@code{nslcd-configuration} parameter} maybe-number reconnect-retrytime
19802 Specifies the time after which the LDAP server is considered to be
19803 permanently unavailable. Once this time is reached retries will be done
19804 only once per this time period. The default value is 10 seconds.
19805
19806 Defaults to @samp{disabled}.
19807
19808 @end deftypevr
19809
19810 @deftypevr {@code{nslcd-configuration} parameter} maybe-ssl-option ssl
19811 Specifies whether to use SSL/TLS or not (the default is not to). If
19812 'start-tls is specified then StartTLS is used rather than raw LDAP over
19813 SSL.
19814
19815 Defaults to @samp{disabled}.
19816
19817 @end deftypevr
19818
19819 @deftypevr {@code{nslcd-configuration} parameter} maybe-tls-reqcert-option tls-reqcert
19820 Specifies what checks to perform on a server-supplied certificate. The
19821 meaning of the values is described in the ldap.conf(5) manual page.
19822
19823 Defaults to @samp{disabled}.
19824
19825 @end deftypevr
19826
19827 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-cacertdir
19828 Specifies the directory containing X.509 certificates for peer authen‐
19829 tication. This parameter is ignored when using GnuTLS.
19830
19831 Defaults to @samp{disabled}.
19832
19833 @end deftypevr
19834
19835 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-cacertfile
19836 Specifies the path to the X.509 certificate for peer authentication.
19837
19838 Defaults to @samp{disabled}.
19839
19840 @end deftypevr
19841
19842 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-randfile
19843 Specifies the path to an entropy source. This parameter is ignored when
19844 using GnuTLS.
19845
19846 Defaults to @samp{disabled}.
19847
19848 @end deftypevr
19849
19850 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-ciphers
19851 Specifies the ciphers to use for TLS as a string.
19852
19853 Defaults to @samp{disabled}.
19854
19855 @end deftypevr
19856
19857 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-cert
19858 Specifies the path to the file containing the local certificate for
19859 client TLS authentication.
19860
19861 Defaults to @samp{disabled}.
19862
19863 @end deftypevr
19864
19865 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-key
19866 Specifies the path to the file containing the private key for client TLS
19867 authentication.
19868
19869 Defaults to @samp{disabled}.
19870
19871 @end deftypevr
19872
19873 @deftypevr {@code{nslcd-configuration} parameter} maybe-number pagesize
19874 Set this to a number greater than 0 to request paged results from the
19875 LDAP server in accordance with RFC2696. The default (0) is to not
19876 request paged results.
19877
19878 Defaults to @samp{disabled}.
19879
19880 @end deftypevr
19881
19882 @deftypevr {@code{nslcd-configuration} parameter} maybe-ignore-users-option nss-initgroups-ignoreusers
19883 This option prevents group membership lookups through LDAP for the
19884 specified users. Alternatively, the value 'all-local may be used. With
19885 that value nslcd builds a full list of non-LDAP users on startup.
19886
19887 Defaults to @samp{disabled}.
19888
19889 @end deftypevr
19890
19891 @deftypevr {@code{nslcd-configuration} parameter} maybe-number nss-min-uid
19892 This option ensures that LDAP users with a numeric user id lower than
19893 the specified value are ignored.
19894
19895 Defaults to @samp{disabled}.
19896
19897 @end deftypevr
19898
19899 @deftypevr {@code{nslcd-configuration} parameter} maybe-number nss-uid-offset
19900 This option specifies an offset that is added to all LDAP numeric user
19901 ids. This can be used to avoid user id collisions with local users.
19902
19903 Defaults to @samp{disabled}.
19904
19905 @end deftypevr
19906
19907 @deftypevr {@code{nslcd-configuration} parameter} maybe-number nss-gid-offset
19908 This option specifies an offset that is added to all LDAP numeric group
19909 ids. This can be used to avoid user id collisions with local groups.
19910
19911 Defaults to @samp{disabled}.
19912
19913 @end deftypevr
19914
19915 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean nss-nested-groups
19916 If this option is set, the member attribute of a group may point to
19917 another group. Members of nested groups are also returned in the higher
19918 level group and parent groups are returned when finding groups for a
19919 specific user. The default is not to perform extra searches for nested
19920 groups.
19921
19922 Defaults to @samp{disabled}.
19923
19924 @end deftypevr
19925
19926 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean nss-getgrent-skipmembers
19927 If this option is set, the group member list is not retrieved when
19928 looking up groups. Lookups for finding which groups a user belongs to
19929 will remain functional so the user will likely still get the correct
19930 groups assigned on login.
19931
19932 Defaults to @samp{disabled}.
19933
19934 @end deftypevr
19935
19936 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean nss-disable-enumeration
19937 If this option is set, functions which cause all user/group entries to
19938 be loaded from the directory will not succeed in doing so. This can
19939 dramatically reduce LDAP server load in situations where there are a
19940 great number of users and/or groups. This option is not recommended for
19941 most configurations.
19942
19943 Defaults to @samp{disabled}.
19944
19945 @end deftypevr
19946
19947 @deftypevr {@code{nslcd-configuration} parameter} maybe-string validnames
19948 This option can be used to specify how user and group names are verified
19949 within the system. This pattern is used to check all user and group
19950 names that are requested and returned from LDAP.
19951
19952 Defaults to @samp{disabled}.
19953
19954 @end deftypevr
19955
19956 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean ignorecase
19957 This specifies whether or not to perform searches using case-insensitive
19958 matching. Enabling this could open up the system to authorization
19959 bypass vulnerabilities and introduce nscd cache poisoning
19960 vulnerabilities which allow denial of service.
19961
19962 Defaults to @samp{disabled}.
19963
19964 @end deftypevr
19965
19966 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean pam-authc-ppolicy
19967 This option specifies whether password policy controls are requested and
19968 handled from the LDAP server when performing user authentication.
19969
19970 Defaults to @samp{disabled}.
19971
19972 @end deftypevr
19973
19974 @deftypevr {@code{nslcd-configuration} parameter} maybe-string pam-authc-search
19975 By default nslcd performs an LDAP search with the user's credentials
19976 after BIND (authentication) to ensure that the BIND operation was
19977 successful. The default search is a simple check to see if the user's
19978 DN exists. A search filter can be specified that will be used instead.
19979 It should return at least one entry.
19980
19981 Defaults to @samp{disabled}.
19982
19983 @end deftypevr
19984
19985 @deftypevr {@code{nslcd-configuration} parameter} maybe-string pam-authz-search
19986 This option allows flexible fine tuning of the authorisation check that
19987 should be performed. The search filter specified is executed and if any
19988 entries match, access is granted, otherwise access is denied.
19989
19990 Defaults to @samp{disabled}.
19991
19992 @end deftypevr
19993
19994 @deftypevr {@code{nslcd-configuration} parameter} maybe-string pam-password-prohibit-message
19995 If this option is set password modification using pam_ldap will be
19996 denied and the specified message will be presented to the user instead.
19997 The message can be used to direct the user to an alternative means of
19998 changing their password.
19999
20000 Defaults to @samp{disabled}.
20001
20002 @end deftypevr
20003
20004 @deftypevr {@code{nslcd-configuration} parameter} list pam-services
20005 List of pam service names for which LDAP authentication should suffice.
20006
20007 Defaults to @samp{()}.
20008
20009 @end deftypevr
20010
20011 @c %end of generated documentation for nslcd-configuration
20012
20013
20014 @node Web Services
20015 @subsection Web Services
20016
20017 @cindex web
20018 @cindex www
20019 @cindex HTTP
20020 The @code{(gnu services web)} module provides the Apache HTTP Server,
20021 the nginx web server, and also a fastcgi wrapper daemon.
20022
20023 @subsubheading Apache HTTP Server
20024
20025 @deffn {Scheme Variable} httpd-service-type
20026 Service type for the @uref{https://httpd.apache.org/,Apache HTTP} server
20027 (@dfn{httpd}). The value for this service type is a
20028 @code{httpd-configuration} record.
20029
20030 A simple example configuration is given below.
20031
20032 @lisp
20033 (service httpd-service-type
20034 (httpd-configuration
20035 (config
20036 (httpd-config-file
20037 (server-name "www.example.com")
20038 (document-root "/srv/http/www.example.com")))))
20039 @end lisp
20040
20041 Other services can also extend the @code{httpd-service-type} to add to
20042 the configuration.
20043
20044 @lisp
20045 (simple-service 'www.example.com-server httpd-service-type
20046 (list
20047 (httpd-virtualhost
20048 "*:80"
20049 (list (string-join '("ServerName www.example.com"
20050 "DocumentRoot /srv/http/www.example.com")
20051 "\n")))))
20052 @end lisp
20053 @end deffn
20054
20055 The details for the @code{httpd-configuration}, @code{httpd-module},
20056 @code{httpd-config-file} and @code{httpd-virtualhost} record types are
20057 given below.
20058
20059 @deffn {Data Type} httpd-configuration
20060 This data type represents the configuration for the httpd service.
20061
20062 @table @asis
20063 @item @code{package} (default: @code{httpd})
20064 The httpd package to use.
20065
20066 @item @code{pid-file} (default: @code{"/var/run/httpd"})
20067 The pid file used by the shepherd-service.
20068
20069 @item @code{config} (default: @code{(httpd-config-file)})
20070 The configuration file to use with the httpd service. The default value
20071 is a @code{httpd-config-file} record, but this can also be a different
20072 G-expression that generates a file, for example a @code{plain-file}. A
20073 file outside of the store can also be specified through a string.
20074
20075 @end table
20076 @end deffn
20077
20078 @deffn {Data Type} httpd-module
20079 This data type represents a module for the httpd service.
20080
20081 @table @asis
20082 @item @code{name}
20083 The name of the module.
20084
20085 @item @code{file}
20086 The file for the module. This can be relative to the httpd package being
20087 used, the absolute location of a file, or a G-expression for a file
20088 within the store, for example @code{(file-append mod-wsgi
20089 "/modules/mod_wsgi.so")}.
20090
20091 @end table
20092 @end deffn
20093
20094 @defvr {Scheme Variable} %default-httpd-modules
20095 A default list of @code{httpd-module} objects.
20096 @end defvr
20097
20098 @deffn {Data Type} httpd-config-file
20099 This data type represents a configuration file for the httpd service.
20100
20101 @table @asis
20102 @item @code{modules} (default: @code{%default-httpd-modules})
20103 The modules to load. Additional modules can be added here, or loaded by
20104 additional configuration.
20105
20106 For example, in order to handle requests for PHP files, you can use Apache’s
20107 @code{mod_proxy_fcgi} module along with @code{php-fpm-service-type}:
20108
20109 @lisp
20110 (service httpd-service-type
20111 (httpd-configuration
20112 (config
20113 (httpd-config-file
20114 (modules (cons*
20115 (httpd-module
20116 (name "proxy_module")
20117 (file "modules/mod_proxy.so"))
20118 (httpd-module
20119 (name "proxy_fcgi_module")
20120 (file "modules/mod_proxy_fcgi.so"))
20121 %default-httpd-modules))
20122 (extra-config (list "\
20123 <FilesMatch \\.php$>
20124 SetHandler \"proxy:unix:/var/run/php-fpm.sock|fcgi://localhost/\"
20125 </FilesMatch>"))))))
20126 (service php-fpm-service-type
20127 (php-fpm-configuration
20128 (socket "/var/run/php-fpm.sock")
20129 (socket-group "httpd")))
20130 @end lisp
20131
20132 @item @code{server-root} (default: @code{httpd})
20133 The @code{ServerRoot} in the configuration file, defaults to the httpd
20134 package. Directives including @code{Include} and @code{LoadModule} are
20135 taken as relative to the server root.
20136
20137 @item @code{server-name} (default: @code{#f})
20138 The @code{ServerName} in the configuration file, used to specify the
20139 request scheme, hostname and port that the server uses to identify
20140 itself.
20141
20142 This doesn't need to be set in the server config, and can be specified
20143 in virtual hosts. The default is @code{#f} to not specify a
20144 @code{ServerName}.
20145
20146 @item @code{document-root} (default: @code{"/srv/http"})
20147 The @code{DocumentRoot} from which files will be served.
20148
20149 @item @code{listen} (default: @code{'("80")})
20150 The list of values for the @code{Listen} directives in the config
20151 file. The value should be a list of strings, when each string can
20152 specify the port number to listen on, and optionally the IP address and
20153 protocol to use.
20154
20155 @item @code{pid-file} (default: @code{"/var/run/httpd"})
20156 The @code{PidFile} to use. This should match the @code{pid-file} set in
20157 the @code{httpd-configuration} so that the Shepherd service is
20158 configured correctly.
20159
20160 @item @code{error-log} (default: @code{"/var/log/httpd/error_log"})
20161 The @code{ErrorLog} to which the server will log errors.
20162
20163 @item @code{user} (default: @code{"httpd"})
20164 The @code{User} which the server will answer requests as.
20165
20166 @item @code{group} (default: @code{"httpd"})
20167 The @code{Group} which the server will answer requests as.
20168
20169 @item @code{extra-config} (default: @code{(list "TypesConfig etc/httpd/mime.types")})
20170 A flat list of strings and G-expressions which will be added to the end
20171 of the configuration file.
20172
20173 Any values which the service is extended with will be appended to this
20174 list.
20175
20176 @end table
20177 @end deffn
20178
20179 @deffn {Data Type} httpd-virtualhost
20180 This data type represents a virtualhost configuration block for the httpd service.
20181
20182 These should be added to the extra-config for the httpd-service.
20183
20184 @lisp
20185 (simple-service 'www.example.com-server httpd-service-type
20186 (list
20187 (httpd-virtualhost
20188 "*:80"
20189 (list (string-join '("ServerName www.example.com"
20190 "DocumentRoot /srv/http/www.example.com")
20191 "\n")))))
20192 @end lisp
20193
20194 @table @asis
20195 @item @code{addresses-and-ports}
20196 The addresses and ports for the @code{VirtualHost} directive.
20197
20198 @item @code{contents}
20199 The contents of the @code{VirtualHost} directive, this should be a list
20200 of strings and G-expressions.
20201
20202 @end table
20203 @end deffn
20204
20205 @subsubheading NGINX
20206
20207 @deffn {Scheme Variable} nginx-service-type
20208 Service type for the @uref{https://nginx.org/,NGinx} web server. The
20209 value for this service type is a @code{<nginx-configuration>} record.
20210
20211 A simple example configuration is given below.
20212
20213 @lisp
20214 (service nginx-service-type
20215 (nginx-configuration
20216 (server-blocks
20217 (list (nginx-server-configuration
20218 (server-name '("www.example.com"))
20219 (root "/srv/http/www.example.com"))))))
20220 @end lisp
20221
20222 In addition to adding server blocks to the service configuration
20223 directly, this service can be extended by other services to add server
20224 blocks, as in this example:
20225
20226 @lisp
20227 (simple-service 'my-extra-server nginx-service-type
20228 (list (nginx-server-configuration
20229 (root "/srv/http/extra-website")
20230 (try-files (list "$uri" "$uri/index.html")))))
20231 @end lisp
20232 @end deffn
20233
20234 At startup, @command{nginx} has not yet read its configuration file, so
20235 it uses a default file to log error messages. If it fails to load its
20236 configuration file, that is where error messages are logged. After the
20237 configuration file is loaded, the default error log file changes as per
20238 configuration. In our case, startup error messages can be found in
20239 @file{/var/run/nginx/logs/error.log}, and after configuration in
20240 @file{/var/log/nginx/error.log}. The second location can be changed
20241 with the @var{log-directory} configuration option.
20242
20243 @deffn {Data Type} nginx-configuration
20244 This data type represents the configuration for NGinx. Some
20245 configuration can be done through this and the other provided record
20246 types, or alternatively, a config file can be provided.
20247
20248 @table @asis
20249 @item @code{nginx} (default: @code{nginx})
20250 The nginx package to use.
20251
20252 @item @code{log-directory} (default: @code{"/var/log/nginx"})
20253 The directory to which NGinx will write log files.
20254
20255 @item @code{run-directory} (default: @code{"/var/run/nginx"})
20256 The directory in which NGinx will create a pid file, and write temporary
20257 files.
20258
20259 @item @code{server-blocks} (default: @code{'()})
20260 A list of @dfn{server blocks} to create in the generated configuration
20261 file, the elements should be of type
20262 @code{<nginx-server-configuration>}.
20263
20264 The following example would setup NGinx to serve @code{www.example.com}
20265 from the @code{/srv/http/www.example.com} directory, without using
20266 HTTPS.
20267 @lisp
20268 (service nginx-service-type
20269 (nginx-configuration
20270 (server-blocks
20271 (list (nginx-server-configuration
20272 (server-name '("www.example.com"))
20273 (root "/srv/http/www.example.com"))))))
20274 @end lisp
20275
20276 @item @code{upstream-blocks} (default: @code{'()})
20277 A list of @dfn{upstream blocks} to create in the generated configuration
20278 file, the elements should be of type
20279 @code{<nginx-upstream-configuration>}.
20280
20281 Configuring upstreams through the @code{upstream-blocks} can be useful
20282 when combined with @code{locations} in the
20283 @code{<nginx-server-configuration>} records. The following example
20284 creates a server configuration with one location configuration, that
20285 will proxy requests to a upstream configuration, which will handle
20286 requests with two servers.
20287
20288 @lisp
20289 (service
20290 nginx-service-type
20291 (nginx-configuration
20292 (server-blocks
20293 (list (nginx-server-configuration
20294 (server-name '("www.example.com"))
20295 (root "/srv/http/www.example.com")
20296 (locations
20297 (list
20298 (nginx-location-configuration
20299 (uri "/path1")
20300 (body '("proxy_pass http://server-proxy;"))))))))
20301 (upstream-blocks
20302 (list (nginx-upstream-configuration
20303 (name "server-proxy")
20304 (servers (list "server1.example.com"
20305 "server2.example.com")))))))
20306 @end lisp
20307
20308 @item @code{file} (default: @code{#f})
20309 If a configuration @var{file} is provided, this will be used, rather than
20310 generating a configuration file from the provided @code{log-directory},
20311 @code{run-directory}, @code{server-blocks} and @code{upstream-blocks}. For
20312 proper operation, these arguments should match what is in @var{file} to ensure
20313 that the directories are created when the service is activated.
20314
20315 This can be useful if you have an existing configuration file, or it's
20316 not possible to do what is required through the other parts of the
20317 nginx-configuration record.
20318
20319 @item @code{server-names-hash-bucket-size} (default: @code{#f})
20320 Bucket size for the server names hash tables, defaults to @code{#f} to
20321 use the size of the processors cache line.
20322
20323 @item @code{server-names-hash-bucket-max-size} (default: @code{#f})
20324 Maximum bucket size for the server names hash tables.
20325
20326 @item @code{modules} (default: @code{'()})
20327 List of nginx dynamic modules to load. This should be a list of file
20328 names of loadable modules, as in this example:
20329
20330 @lisp
20331 (modules
20332 (list
20333 (file-append nginx-accept-language-module "\
20334 /etc/nginx/modules/ngx_http_accept_language_module.so")))
20335 @end lisp
20336
20337 @item @code{global-directives} (default: @code{'((events . ()))})
20338 Association list of global directives for the top level of the nginx
20339 configuration. Values may themselves be association lists.
20340
20341 @lisp
20342 (global-directives
20343 `((worker_processes . 16)
20344 (pcre_jit . on)
20345 (events . ((worker_connections . 1024)))))
20346 @end lisp
20347
20348 @item @code{extra-content} (default: @code{""})
20349 Extra content for the @code{http} block. Should be string or a string
20350 valued G-expression.
20351
20352 @end table
20353 @end deffn
20354
20355 @deftp {Data Type} nginx-server-configuration
20356 Data type representing the configuration of an nginx server block.
20357 This type has the following parameters:
20358
20359 @table @asis
20360 @item @code{listen} (default: @code{'("80" "443 ssl")})
20361 Each @code{listen} directive sets the address and port for IP, or the
20362 path for a UNIX-domain socket on which the server will accept requests.
20363 Both address and port, or only address or only port can be specified.
20364 An address may also be a hostname, for example:
20365
20366 @lisp
20367 '("127.0.0.1:8000" "127.0.0.1" "8000" "*:8000" "localhost:8000")
20368 @end lisp
20369
20370 @item @code{server-name} (default: @code{(list 'default)})
20371 A list of server names this server represents. @code{'default} represents the
20372 default server for connections matching no other server.
20373
20374 @item @code{root} (default: @code{"/srv/http"})
20375 Root of the website nginx will serve.
20376
20377 @item @code{locations} (default: @code{'()})
20378 A list of @dfn{nginx-location-configuration} or
20379 @dfn{nginx-named-location-configuration} records to use within this
20380 server block.
20381
20382 @item @code{index} (default: @code{(list "index.html")})
20383 Index files to look for when clients ask for a directory. If it cannot be found,
20384 Nginx will send the list of files in the directory.
20385
20386 @item @code{try-files} (default: @code{'()})
20387 A list of files whose existence is checked in the specified order.
20388 @code{nginx} will use the first file it finds to process the request.
20389
20390 @item @code{ssl-certificate} (default: @code{#f})
20391 Where to find the certificate for secure connections. Set it to @code{#f} if
20392 you don't have a certificate or you don't want to use HTTPS.
20393
20394 @item @code{ssl-certificate-key} (default: @code{#f})
20395 Where to find the private key for secure connections. Set it to @code{#f} if
20396 you don't have a key or you don't want to use HTTPS.
20397
20398 @item @code{server-tokens?} (default: @code{#f})
20399 Whether the server should add its configuration to response.
20400
20401 @item @code{raw-content} (default: @code{'()})
20402 A list of raw lines added to the server block.
20403
20404 @end table
20405 @end deftp
20406
20407 @deftp {Data Type} nginx-upstream-configuration
20408 Data type representing the configuration of an nginx @code{upstream}
20409 block. This type has the following parameters:
20410
20411 @table @asis
20412 @item @code{name}
20413 Name for this group of servers.
20414
20415 @item @code{servers}
20416 Specify the addresses of the servers in the group. The address can be
20417 specified as a IP address (e.g.@: @samp{127.0.0.1}), domain name
20418 (e.g.@: @samp{backend1.example.com}) or a path to a UNIX socket using the
20419 prefix @samp{unix:}. For addresses using an IP address or domain name,
20420 the default port is 80, and a different port can be specified
20421 explicitly.
20422
20423 @end table
20424 @end deftp
20425
20426 @deftp {Data Type} nginx-location-configuration
20427 Data type representing the configuration of an nginx @code{location}
20428 block. This type has the following parameters:
20429
20430 @table @asis
20431 @item @code{uri}
20432 URI which this location block matches.
20433
20434 @anchor{nginx-location-configuration body}
20435 @item @code{body}
20436 Body of the location block, specified as a list of strings. This can contain
20437 many
20438 configuration directives. For example, to pass requests to a upstream
20439 server group defined using an @code{nginx-upstream-configuration} block,
20440 the following directive would be specified in the body @samp{(list "proxy_pass
20441 http://upstream-name;")}.
20442
20443 @end table
20444 @end deftp
20445
20446 @deftp {Data Type} nginx-named-location-configuration
20447 Data type representing the configuration of an nginx named location
20448 block. Named location blocks are used for request redirection, and not
20449 used for regular request processing. This type has the following
20450 parameters:
20451
20452 @table @asis
20453 @item @code{name}
20454 Name to identify this location block.
20455
20456 @item @code{body}
20457 @xref{nginx-location-configuration body}, as the body for named location
20458 blocks can be used in a similar way to the
20459 @code{nginx-location-configuration body}. One restriction is that the
20460 body of a named location block cannot contain location blocks.
20461
20462 @end table
20463 @end deftp
20464
20465 @subsubheading Varnish Cache
20466 @cindex Varnish
20467 Varnish is a fast cache server that sits in between web applications
20468 and end users. It proxies requests from clients and caches the
20469 accessed URLs such that multiple requests for the same resource only
20470 creates one request to the back-end.
20471
20472 @defvr {Scheme Variable} varnish-service-type
20473 Service type for the Varnish daemon.
20474 @end defvr
20475
20476 @deftp {Data Type} varnish-configuration
20477 Data type representing the @code{varnish} service configuration.
20478 This type has the following parameters:
20479
20480 @table @asis
20481 @item @code{package} (default: @code{varnish})
20482 The Varnish package to use.
20483
20484 @item @code{name} (default: @code{"default"})
20485 A name for this Varnish instance. Varnish will create a directory in
20486 @file{/var/varnish/} with this name and keep temporary files there. If
20487 the name starts with a forward slash, it is interpreted as an absolute
20488 directory name.
20489
20490 Pass the @code{-n} argument to other Varnish programs to connect to the
20491 named instance, e.g.@: @command{varnishncsa -n default}.
20492
20493 @item @code{backend} (default: @code{"localhost:8080"})
20494 The backend to use. This option has no effect if @code{vcl} is set.
20495
20496 @item @code{vcl} (default: #f)
20497 The @dfn{VCL} (Varnish Configuration Language) program to run. If this
20498 is @code{#f}, Varnish will proxy @code{backend} using the default
20499 configuration. Otherwise this must be a file-like object with valid
20500 VCL syntax.
20501
20502 @c Varnish does not support HTTPS, so keep this URL to avoid confusion.
20503 For example, to mirror @url{https://www.gnu.org,www.gnu.org} with VCL you
20504 can do something along these lines:
20505
20506 @lisp
20507 (define %gnu-mirror
20508 (plain-file "gnu.vcl"
20509 "vcl 4.1;
20510 backend gnu @{ .host = \"www.gnu.org\"; @}"))
20511
20512 (operating-system
20513 ;; @dots{}
20514 (services (cons (service varnish-service-type
20515 (varnish-configuration
20516 (listen '(":80"))
20517 (vcl %gnu-mirror)))
20518 %base-services)))
20519 @end lisp
20520
20521 The configuration of an already running Varnish instance can be inspected
20522 and changed using the @command{varnishadm} program.
20523
20524 Consult the @url{https://varnish-cache.org/docs/,Varnish User Guide} and
20525 @url{https://book.varnish-software.com/4.0/,Varnish Book} for
20526 comprehensive documentation on Varnish and its configuration language.
20527
20528 @item @code{listen} (default: @code{'("localhost:80")})
20529 List of addresses Varnish will listen on.
20530
20531 @item @code{storage} (default: @code{'("malloc,128m")})
20532 List of storage backends that will be available in VCL.
20533
20534 @item @code{parameters} (default: @code{'()})
20535 List of run-time parameters in the form @code{'(("parameter" . "value"))}.
20536
20537 @item @code{extra-options} (default: @code{'()})
20538 Additional arguments to pass to the @command{varnishd} process.
20539
20540 @end table
20541 @end deftp
20542
20543 @subsubheading Patchwork
20544 @cindex Patchwork
20545 Patchwork is a patch tracking system. It can collect patches sent to a
20546 mailing list, and display them in a web interface.
20547
20548 @defvr {Scheme Variable} patchwork-service-type
20549 Service type for Patchwork.
20550 @end defvr
20551
20552 The following example is an example of a minimal service for Patchwork, for
20553 the @code{patchwork.example.com} domain.
20554
20555 @lisp
20556 (service patchwork-service-type
20557 (patchwork-configuration
20558 (domain "patchwork.example.com")
20559 (settings-module
20560 (patchwork-settings-module
20561 (allowed-hosts (list domain))
20562 (default-from-email "patchwork@@patchwork.example.com")))
20563 (getmail-retriever-config
20564 (getmail-retriever-configuration
20565 (type "SimpleIMAPSSLRetriever")
20566 (server "imap.example.com")
20567 (port 993)
20568 (username "patchwork")
20569 (password-command
20570 (list (file-append coreutils "/bin/cat")
20571 "/etc/getmail-patchwork-imap-password"))
20572 (extra-parameters
20573 '((mailboxes . ("Patches"))))))))
20574
20575 @end lisp
20576
20577 There are three records for configuring the Patchwork service. The
20578 @code{<patchwork-configuration>} relates to the configuration for Patchwork
20579 within the HTTPD service.
20580
20581 The @code{settings-module} field within the @code{<patchwork-configuration>}
20582 record can be populated with the @code{<patchwork-settings-module>} record,
20583 which describes a settings module that is generated within the Guix store.
20584
20585 For the @code{database-configuration} field within the
20586 @code{<patchwork-settings-module>}, the
20587 @code{<patchwork-database-configuration>} must be used.
20588
20589 @deftp {Data Type} patchwork-configuration
20590 Data type representing the Patchwork service configuration. This type has the
20591 following parameters:
20592
20593 @table @asis
20594 @item @code{patchwork} (default: @code{patchwork})
20595 The Patchwork package to use.
20596
20597 @item @code{domain}
20598 The domain to use for Patchwork, this is used in the HTTPD service virtual
20599 host.
20600
20601 @item @code{settings-module}
20602 The settings module to use for Patchwork. As a Django application, Patchwork
20603 is configured with a Python module containing the settings. This can either be
20604 an instance of the @code{<patchwork-settings-module>} record, any other record
20605 that represents the settings in the store, or a directory outside of the
20606 store.
20607
20608 @item @code{static-path} (default: @code{"/static/"})
20609 The path under which the HTTPD service should serve the static files.
20610
20611 @item @code{getmail-retriever-config}
20612 The getmail-retriever-configuration record value to use with
20613 Patchwork. Getmail will be configured with this value, the messages will be
20614 delivered to Patchwork.
20615
20616 @end table
20617 @end deftp
20618
20619 @deftp {Data Type} patchwork-settings-module
20620 Data type representing a settings module for Patchwork. Some of these
20621 settings relate directly to Patchwork, but others relate to Django, the web
20622 framework used by Patchwork, or the Django Rest Framework library. This type
20623 has the following parameters:
20624
20625 @table @asis
20626 @item @code{database-configuration} (default: @code{(patchwork-database-configuration)})
20627 The database connection settings used for Patchwork. See the
20628 @code{<patchwork-database-configuration>} record type for more information.
20629
20630 @item @code{secret-key-file} (default: @code{"/etc/patchwork/django-secret-key"})
20631 Patchwork, as a Django web application uses a secret key for cryptographically
20632 signing values. This file should contain a unique unpredictable value.
20633
20634 If this file does not exist, it will be created and populated with a random
20635 value by the patchwork-setup shepherd service.
20636
20637 This setting relates to Django.
20638
20639 @item @code{allowed-hosts}
20640 A list of valid hosts for this Patchwork service. This should at least include
20641 the domain specified in the @code{<patchwork-configuration>} record.
20642
20643 This is a Django setting.
20644
20645 @item @code{default-from-email}
20646 The email address from which Patchwork should send email by default.
20647
20648 This is a Patchwork setting.
20649
20650 @item @code{static-url} (default: @code{#f})
20651 The URL to use when serving static assets. It can be part of a URL, or a full
20652 URL, but must end in a @code{/}.
20653
20654 If the default value is used, the @code{static-path} value from the
20655 @code{<patchwork-configuration>} record will be used.
20656
20657 This is a Django setting.
20658
20659 @item @code{admins} (default: @code{'()})
20660 Email addresses to send the details of errors that occur. Each value should
20661 be a list containing two elements, the name and then the email address.
20662
20663 This is a Django setting.
20664
20665 @item @code{debug?} (default: @code{#f})
20666 Whether to run Patchwork in debug mode. If set to @code{#t}, detailed error
20667 messages will be shown.
20668
20669 This is a Django setting.
20670
20671 @item @code{enable-rest-api?} (default: @code{#t})
20672 Whether to enable the Patchwork REST API.
20673
20674 This is a Patchwork setting.
20675
20676 @item @code{enable-xmlrpc?} (default: @code{#t})
20677 Whether to enable the XML RPC API.
20678
20679 This is a Patchwork setting.
20680
20681 @item @code{force-https-links?} (default: @code{#t})
20682 Whether to use HTTPS links on Patchwork pages.
20683
20684 This is a Patchwork setting.
20685
20686 @item @code{extra-settings} (default: @code{""})
20687 Extra code to place at the end of the Patchwork settings module.
20688
20689 @end table
20690 @end deftp
20691
20692 @deftp {Data Type} patchwork-database-configuration
20693 Data type representing the database configuration for Patchwork.
20694
20695 @table @asis
20696 @item @code{engine} (default: @code{"django.db.backends.postgresql_psycopg2"})
20697 The database engine to use.
20698
20699 @item @code{name} (default: @code{"patchwork"})
20700 The name of the database to use.
20701
20702 @item @code{user} (default: @code{"httpd"})
20703 The user to connect to the database as.
20704
20705 @item @code{password} (default: @code{""})
20706 The password to use when connecting to the database.
20707
20708 @item @code{host} (default: @code{""})
20709 The host to make the database connection to.
20710
20711 @item @code{port} (default: @code{""})
20712 The port on which to connect to the database.
20713
20714 @end table
20715 @end deftp
20716
20717 @subsubheading Mumi
20718
20719 @cindex Mumi, Debbugs Web interface
20720 @cindex Debbugs, Mumi Web interface
20721 @uref{https://git.elephly.net/gitweb.cgi?p=software/mumi.git, Mumi} is a
20722 Web interface to the Debbugs bug tracker, by default for
20723 @uref{https://bugs.gnu.org, the GNU instance}. Mumi is a Web server,
20724 but it also fetches and indexes mail retrieved from Debbugs.
20725
20726 @defvr {Scheme Variable} mumi-service-type
20727 This is the service type for Mumi.
20728 @end defvr
20729
20730 @deftp {Data Type} mumi-configuration
20731 Data type representing the Mumi service configuration. This type has the
20732 following fields:
20733
20734 @table @asis
20735 @item @code{mumi} (default: @code{mumi})
20736 The Mumi package to use.
20737
20738 @item @code{mailer?} (default: @code{#true})
20739 Whether to enable or disable the mailer component.
20740
20741 @item @code{mumi-configuration-sender}
20742 The email address used as the sender for comments.
20743
20744 @item @code{mumi-configuration-smtp}
20745 A URI to configure the SMTP settings for Mailutils. This could be
20746 something like @code{sendmail:///path/to/bin/msmtp} or any other URI
20747 supported by Mailutils. @xref{SMTP Mailboxes, SMTP Mailboxes,,
20748 mailutils, GNU@tie{}Mailutils}.
20749
20750 @end table
20751 @end deftp
20752
20753
20754 @subsubheading FastCGI
20755 @cindex fastcgi
20756 @cindex fcgiwrap
20757 FastCGI is an interface between the front-end and the back-end of a web
20758 service. It is a somewhat legacy facility; new web services should
20759 generally just talk HTTP between the front-end and the back-end.
20760 However there are a number of back-end services such as PHP or the
20761 optimized HTTP Git repository access that use FastCGI, so we have
20762 support for it in Guix.
20763
20764 To use FastCGI, you configure the front-end web server (e.g., nginx) to
20765 dispatch some subset of its requests to the fastcgi backend, which
20766 listens on a local TCP or UNIX socket. There is an intermediary
20767 @code{fcgiwrap} program that sits between the actual backend process and
20768 the web server. The front-end indicates which backend program to run,
20769 passing that information to the @code{fcgiwrap} process.
20770
20771 @defvr {Scheme Variable} fcgiwrap-service-type
20772 A service type for the @code{fcgiwrap} FastCGI proxy.
20773 @end defvr
20774
20775 @deftp {Data Type} fcgiwrap-configuration
20776 Data type representing the configuration of the @code{fcgiwrap} service.
20777 This type has the following parameters:
20778 @table @asis
20779 @item @code{package} (default: @code{fcgiwrap})
20780 The fcgiwrap package to use.
20781
20782 @item @code{socket} (default: @code{tcp:127.0.0.1:9000})
20783 The socket on which the @code{fcgiwrap} process should listen, as a
20784 string. Valid @var{socket} values include
20785 @code{unix:@var{/path/to/unix/socket}},
20786 @code{tcp:@var{dot.ted.qu.ad}:@var{port}} and
20787 @code{tcp6:[@var{ipv6_addr}]:port}.
20788
20789 @item @code{user} (default: @code{fcgiwrap})
20790 @itemx @code{group} (default: @code{fcgiwrap})
20791 The user and group names, as strings, under which to run the
20792 @code{fcgiwrap} process. The @code{fastcgi} service will ensure that if
20793 the user asks for the specific user or group names @code{fcgiwrap} that
20794 the corresponding user and/or group is present on the system.
20795
20796 It is possible to configure a FastCGI-backed web service to pass HTTP
20797 authentication information from the front-end to the back-end, and to
20798 allow @code{fcgiwrap} to run the back-end process as a corresponding
20799 local user. To enable this capability on the back-end, run
20800 @code{fcgiwrap} as the @code{root} user and group. Note that this
20801 capability also has to be configured on the front-end as well.
20802 @end table
20803 @end deftp
20804
20805 @cindex php-fpm
20806 PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation
20807 with some additional features useful for sites of any size.
20808
20809 These features include:
20810 @itemize @bullet
20811 @item Adaptive process spawning
20812 @item Basic statistics (similar to Apache's mod_status)
20813 @item Advanced process management with graceful stop/start
20814 @item Ability to start workers with different uid/gid/chroot/environment
20815 and different php.ini (replaces safe_mode)
20816 @item Stdout & stderr logging
20817 @item Emergency restart in case of accidental opcode cache destruction
20818 @item Accelerated upload support
20819 @item Support for a "slowlog"
20820 @item Enhancements to FastCGI, such as fastcgi_finish_request() -
20821 a special function to finish request & flush all data while continuing to do
20822 something time-consuming (video converting, stats processing, etc.)
20823 @end itemize
20824 ...@: and much more.
20825
20826 @defvr {Scheme Variable} php-fpm-service-type
20827 A Service type for @code{php-fpm}.
20828 @end defvr
20829
20830 @deftp {Data Type} php-fpm-configuration
20831 Data Type for php-fpm service configuration.
20832 @table @asis
20833 @item @code{php} (default: @code{php})
20834 The php package to use.
20835 @item @code{socket} (default: @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.sock")})
20836 The address on which to accept FastCGI requests. Valid syntaxes are:
20837 @table @asis
20838 @item @code{"ip.add.re.ss:port"}
20839 Listen on a TCP socket to a specific address on a specific port.
20840 @item @code{"port"}
20841 Listen on a TCP socket to all addresses on a specific port.
20842 @item @code{"/path/to/unix/socket"}
20843 Listen on a unix socket.
20844 @end table
20845
20846 @item @code{user} (default: @code{php-fpm})
20847 User who will own the php worker processes.
20848 @item @code{group} (default: @code{php-fpm})
20849 Group of the worker processes.
20850 @item @code{socket-user} (default: @code{php-fpm})
20851 User who can speak to the php-fpm socket.
20852 @item @code{socket-group} (default: @code{nginx})
20853 Group that can speak to the php-fpm socket.
20854 @item @code{pid-file} (default: @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.pid")})
20855 The process id of the php-fpm process is written to this file
20856 once the service has started.
20857 @item @code{log-file} (default: @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.log")})
20858 Log for the php-fpm master process.
20859 @item @code{process-manager} (default: @code{(php-fpm-dynamic-process-manager-configuration)})
20860 Detailed settings for the php-fpm process manager.
20861 Must be one of:
20862 @table @asis
20863 @item @code{<php-fpm-dynamic-process-manager-configuration>}
20864 @item @code{<php-fpm-static-process-manager-configuration>}
20865 @item @code{<php-fpm-on-demand-process-manager-configuration>}
20866 @end table
20867 @item @code{display-errors} (default @code{#f})
20868 Determines whether php errors and warning should be sent to clients
20869 and displayed in their browsers.
20870 This is useful for local php development, but a security risk for public sites,
20871 as error messages can reveal passwords and personal data.
20872 @item @code{timezone} (default @code{#f})
20873 Specifies @code{php_admin_value[date.timezone]} parameter.
20874 @item @code{workers-logfile} (default @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.www.log")})
20875 This file will log the @code{stderr} outputs of php worker processes.
20876 Can be set to @code{#f} to disable logging.
20877 @item @code{file} (default @code{#f})
20878 An optional override of the whole configuration.
20879 You can use the @code{mixed-text-file} function or an absolute filepath for it.
20880 @end table
20881 @end deftp
20882
20883 @deftp {Data type} php-fpm-dynamic-process-manager-configuration
20884 Data Type for the @code{dynamic} php-fpm process manager. With the
20885 @code{dynamic} process manager, spare worker processes are kept around
20886 based on it's configured limits.
20887 @table @asis
20888 @item @code{max-children} (default: @code{5})
20889 Maximum of worker processes.
20890 @item @code{start-servers} (default: @code{2})
20891 How many worker processes should be started on start-up.
20892 @item @code{min-spare-servers} (default: @code{1})
20893 How many spare worker processes should be kept around at minimum.
20894 @item @code{max-spare-servers} (default: @code{3})
20895 How many spare worker processes should be kept around at maximum.
20896 @end table
20897 @end deftp
20898
20899 @deftp {Data type} php-fpm-static-process-manager-configuration
20900 Data Type for the @code{static} php-fpm process manager. With the
20901 @code{static} process manager, an unchanging number of worker processes
20902 are created.
20903 @table @asis
20904 @item @code{max-children} (default: @code{5})
20905 Maximum of worker processes.
20906 @end table
20907 @end deftp
20908
20909 @deftp {Data type} php-fpm-on-demand-process-manager-configuration
20910 Data Type for the @code{on-demand} php-fpm process manager. With the
20911 @code{on-demand} process manager, worker processes are only created as
20912 requests arrive.
20913 @table @asis
20914 @item @code{max-children} (default: @code{5})
20915 Maximum of worker processes.
20916 @item @code{process-idle-timeout} (default: @code{10})
20917 The time in seconds after which a process with no requests is killed.
20918 @end table
20919 @end deftp
20920
20921
20922 @deffn {Scheme Procedure} nginx-php-location @
20923 [#:nginx-package nginx] @
20924 [socket (string-append "/var/run/php" @
20925 (version-major (package-version php)) @
20926 "-fpm.sock")]
20927 A helper function to quickly add php to an @code{nginx-server-configuration}.
20928 @end deffn
20929
20930 A simple services setup for nginx with php can look like this:
20931 @lisp
20932 (services (cons* (service dhcp-client-service-type)
20933 (service php-fpm-service-type)
20934 (service nginx-service-type
20935 (nginx-server-configuration
20936 (server-name '("example.com"))
20937 (root "/srv/http/")
20938 (locations
20939 (list (nginx-php-location)))
20940 (listen '("80"))
20941 (ssl-certificate #f)
20942 (ssl-certificate-key #f)))
20943 %base-services))
20944 @end lisp
20945
20946 @cindex cat-avatar-generator
20947 The cat avatar generator is a simple service to demonstrate the use of php-fpm
20948 in @code{Nginx}. It is used to generate cat avatar from a seed, for instance
20949 the hash of a user's email address.
20950
20951 @deffn {Scheme Procedure} cat-avatar-generator-service @
20952 [#:cache-dir "/var/cache/cat-avatar-generator"] @
20953 [#:package cat-avatar-generator] @
20954 [#:configuration (nginx-server-configuration)]
20955 Returns an nginx-server-configuration that inherits @code{configuration}. It
20956 extends the nginx configuration to add a server block that serves @code{package},
20957 a version of cat-avatar-generator. During execution, cat-avatar-generator will
20958 be able to use @code{cache-dir} as its cache directory.
20959 @end deffn
20960
20961 A simple setup for cat-avatar-generator can look like this:
20962 @lisp
20963 (services (cons* (cat-avatar-generator-service
20964 #:configuration
20965 (nginx-server-configuration
20966 (server-name '("example.com"))))
20967 ...
20968 %base-services))
20969 @end lisp
20970
20971 @subsubheading Hpcguix-web
20972
20973 @cindex hpcguix-web
20974 The @uref{https://github.com/UMCUGenetics/hpcguix-web/, hpcguix-web}
20975 program is a customizable web interface to browse Guix packages,
20976 initially designed for users of high-performance computing (HPC)
20977 clusters.
20978
20979 @defvr {Scheme Variable} hpcguix-web-service-type
20980 The service type for @code{hpcguix-web}.
20981 @end defvr
20982
20983 @deftp {Data Type} hpcguix-web-configuration
20984 Data type for the hpcguix-web service configuration.
20985
20986 @table @asis
20987 @item @code{specs}
20988 A gexp (@pxref{G-Expressions}) specifying the hpcguix-web service
20989 configuration. The main items available in this spec are:
20990
20991 @table @asis
20992 @item @code{title-prefix} (default: @code{"hpcguix | "})
20993 The page title prefix.
20994
20995 @item @code{guix-command} (default: @code{"guix"})
20996 The @command{guix} command.
20997
20998 @item @code{package-filter-proc} (default: @code{(const #t)})
20999 A procedure specifying how to filter packages that are displayed.
21000
21001 @item @code{package-page-extension-proc} (default: @code{(const '())})
21002 Extension package for @code{hpcguix-web}.
21003
21004 @item @code{menu} (default: @code{'()})
21005 Additional entry in page @code{menu}.
21006
21007 @item @code{channels} (default: @code{%default-channels})
21008 List of channels from which the package list is built (@pxref{Channels}).
21009
21010 @item @code{package-list-expiration} (default: @code{(* 12 3600)})
21011 The expiration time, in seconds, after which the package list is rebuilt from
21012 the latest instances of the given channels.
21013 @end table
21014
21015 See the hpcguix-web repository for a
21016 @uref{https://github.com/UMCUGenetics/hpcguix-web/blob/master/hpcweb-configuration.scm,
21017 complete example}.
21018
21019 @item @code{package} (default: @code{hpcguix-web})
21020 The hpcguix-web package to use.
21021 @end table
21022 @end deftp
21023
21024 A typical hpcguix-web service declaration looks like this:
21025
21026 @lisp
21027 (service hpcguix-web-service-type
21028 (hpcguix-web-configuration
21029 (specs
21030 #~(define site-config
21031 (hpcweb-configuration
21032 (title-prefix "Guix-HPC - ")
21033 (menu '(("/about" "ABOUT"))))))))
21034 @end lisp
21035
21036 @quotation Note
21037 The hpcguix-web service periodically updates the package list it publishes by
21038 pulling channels from Git. To that end, it needs to access X.509 certificates
21039 so that it can authenticate Git servers when communicating over HTTPS, and it
21040 assumes that @file{/etc/ssl/certs} contains those certificates.
21041
21042 Thus, make sure to add @code{nss-certs} or another certificate package to the
21043 @code{packages} field of your configuration. @ref{X.509 Certificates}, for
21044 more information on X.509 certificates.
21045 @end quotation
21046
21047 @node Certificate Services
21048 @subsection Certificate Services
21049
21050 @cindex Web
21051 @cindex HTTP, HTTPS
21052 @cindex Let's Encrypt
21053 @cindex TLS certificates
21054 The @code{(gnu services certbot)} module provides a service to
21055 automatically obtain a valid TLS certificate from the Let's Encrypt
21056 certificate authority. These certificates can then be used to serve
21057 content securely over HTTPS or other TLS-based protocols, with the
21058 knowledge that the client will be able to verify the server's
21059 authenticity.
21060
21061 @url{https://letsencrypt.org/, Let's Encrypt} provides the
21062 @code{certbot} tool to automate the certification process. This tool
21063 first securely generates a key on the server. It then makes a request
21064 to the Let's Encrypt certificate authority (CA) to sign the key. The CA
21065 checks that the request originates from the host in question by using a
21066 challenge-response protocol, requiring the server to provide its
21067 response over HTTP. If that protocol completes successfully, the CA
21068 signs the key, resulting in a certificate. That certificate is valid
21069 for a limited period of time, and therefore to continue to provide TLS
21070 services, the server needs to periodically ask the CA to renew its
21071 signature.
21072
21073 The certbot service automates this process: the initial key
21074 generation, the initial certification request to the Let's Encrypt
21075 service, the web server challenge/response integration, writing the
21076 certificate to disk, the automated periodic renewals, and the deployment
21077 tasks associated with the renewal (e.g.@: reloading services, copying keys
21078 with different permissions).
21079
21080 Certbot is run twice a day, at a random minute within the hour. It
21081 won't do anything until your certificates are due for renewal or
21082 revoked, but running it regularly would give your service a chance of
21083 staying online in case a Let's Encrypt-initiated revocation happened for
21084 some reason.
21085
21086 By using this service, you agree to the ACME Subscriber Agreement, which
21087 can be found there:
21088 @url{https://acme-v01.api.letsencrypt.org/directory}.
21089
21090 @defvr {Scheme Variable} certbot-service-type
21091 A service type for the @code{certbot} Let's Encrypt client. Its value
21092 must be a @code{certbot-configuration} record as in this example:
21093
21094 @lisp
21095 (define %nginx-deploy-hook
21096 (program-file
21097 "nginx-deploy-hook"
21098 #~(let ((pid (call-with-input-file "/var/run/nginx/pid" read)))
21099 (kill pid SIGHUP))))
21100
21101 (service certbot-service-type
21102 (certbot-configuration
21103 (email "foo@@example.net")
21104 (certificates
21105 (list
21106 (certificate-configuration
21107 (domains '("example.net" "www.example.net"))
21108 (deploy-hook %nginx-deploy-hook))
21109 (certificate-configuration
21110 (domains '("bar.example.net")))))))
21111 @end lisp
21112
21113 See below for details about @code{certbot-configuration}.
21114 @end defvr
21115
21116 @deftp {Data Type} certbot-configuration
21117 Data type representing the configuration of the @code{certbot} service.
21118 This type has the following parameters:
21119
21120 @table @asis
21121 @item @code{package} (default: @code{certbot})
21122 The certbot package to use.
21123
21124 @item @code{webroot} (default: @code{/var/www})
21125 The directory from which to serve the Let's Encrypt challenge/response
21126 files.
21127
21128 @item @code{certificates} (default: @code{()})
21129 A list of @code{certificates-configuration}s for which to generate
21130 certificates and request signatures. Each certificate has a @code{name}
21131 and several @code{domains}.
21132
21133 @item @code{email}
21134 Mandatory email used for registration, recovery contact, and important
21135 account notifications.
21136
21137 @item @code{server} (default: @code{#f})
21138 Optional URL of ACME server. Setting this overrides certbot's default,
21139 which is the Let's Encrypt server.
21140
21141 @item @code{rsa-key-size} (default: @code{2048})
21142 Size of the RSA key.
21143
21144 @item @code{default-location} (default: @i{see below})
21145 The default @code{nginx-location-configuration}. Because @code{certbot}
21146 needs to be able to serve challenges and responses, it needs to be able
21147 to run a web server. It does so by extending the @code{nginx} web
21148 service with an @code{nginx-server-configuration} listening on the
21149 @var{domains} on port 80, and which has a
21150 @code{nginx-location-configuration} for the @code{/.well-known/} URI
21151 path subspace used by Let's Encrypt. @xref{Web Services}, for more on
21152 these nginx configuration data types.
21153
21154 Requests to other URL paths will be matched by the
21155 @code{default-location}, which if present is added to all
21156 @code{nginx-server-configuration}s.
21157
21158 By default, the @code{default-location} will issue a redirect from
21159 @code{http://@var{domain}/...} to @code{https://@var{domain}/...}, leaving
21160 you to define what to serve on your site via @code{https}.
21161
21162 Pass @code{#f} to not issue a default location.
21163 @end table
21164 @end deftp
21165
21166 @deftp {Data Type} certificate-configuration
21167 Data type representing the configuration of a certificate.
21168 This type has the following parameters:
21169
21170 @table @asis
21171 @item @code{name} (default: @i{see below})
21172 This name is used by Certbot for housekeeping and in file paths; it
21173 doesn't affect the content of the certificate itself. To see
21174 certificate names, run @code{certbot certificates}.
21175
21176 Its default is the first provided domain.
21177
21178 @item @code{domains} (default: @code{()})
21179 The first domain provided will be the subject CN of the certificate, and
21180 all domains will be Subject Alternative Names on the certificate.
21181
21182 @item @code{challenge} (default: @code{#f})
21183 The challenge type that has to be run by certbot. If @code{#f} is specified,
21184 default to the HTTP challenge. If a value is specified, defaults to the
21185 manual plugin (see @code{authentication-hook}, @code{cleanup-hook} and
21186 the documentation at @url{https://certbot.eff.org/docs/using.html#hooks}),
21187 and gives Let's Encrypt permission to log the public IP address of the
21188 requesting machine.
21189
21190 @item @code{authentication-hook} (default: @code{#f})
21191 Command to be run in a shell once for each certificate challenge to be
21192 answered. For this command, the shell variable @code{$CERTBOT_DOMAIN}
21193 will contain the domain being authenticated, @code{$CERTBOT_VALIDATION}
21194 contains the validation string and @code{$CERTBOT_TOKEN} contains the
21195 file name of the resource requested when performing an HTTP-01 challenge.
21196
21197 @item @code{cleanup-hook} (default: @code{#f})
21198 Command to be run in a shell once for each certificate challenge that
21199 have been answered by the @code{auth-hook}. For this command, the shell
21200 variables available in the @code{auth-hook} script are still available, and
21201 additionally @code{$CERTBOT_AUTH_OUTPUT} will contain the standard output
21202 of the @code{auth-hook} script.
21203
21204 @item @code{deploy-hook} (default: @code{#f})
21205 Command to be run in a shell once for each successfully issued
21206 certificate. For this command, the shell variable
21207 @code{$RENEWED_LINEAGE} will point to the config live subdirectory (for
21208 example, @samp{"/etc/letsencrypt/live/example.com"}) containing the new
21209 certificates and keys; the shell variable @code{$RENEWED_DOMAINS} will
21210 contain a space-delimited list of renewed certificate domains (for
21211 example, @samp{"example.com www.example.com"}.
21212
21213 @end table
21214 @end deftp
21215
21216 For each @code{certificate-configuration}, the certificate is saved to
21217 @code{/etc/letsencrypt/live/@var{name}/fullchain.pem} and the key is
21218 saved to @code{/etc/letsencrypt/live/@var{name}/privkey.pem}.
21219 @node DNS Services
21220 @subsection DNS Services
21221 @cindex DNS (domain name system)
21222 @cindex domain name system (DNS)
21223
21224 The @code{(gnu services dns)} module provides services related to the
21225 @dfn{domain name system} (DNS). It provides a server service for hosting
21226 an @emph{authoritative} DNS server for multiple zones, slave or master.
21227 This service uses @uref{https://www.knot-dns.cz/, Knot DNS}. And also a
21228 caching and forwarding DNS server for the LAN, which uses
21229 @uref{http://www.thekelleys.org.uk/dnsmasq/doc.html, dnsmasq}.
21230
21231 @subsubheading Knot Service
21232
21233 An example configuration of an authoritative server for two zones, one master
21234 and one slave, is:
21235
21236 @lisp
21237 (define-zone-entries example.org.zone
21238 ;; Name TTL Class Type Data
21239 ("@@" "" "IN" "A" "127.0.0.1")
21240 ("@@" "" "IN" "NS" "ns")
21241 ("ns" "" "IN" "A" "127.0.0.1"))
21242
21243 (define master-zone
21244 (knot-zone-configuration
21245 (domain "example.org")
21246 (zone (zone-file
21247 (origin "example.org")
21248 (entries example.org.zone)))))
21249
21250 (define slave-zone
21251 (knot-zone-configuration
21252 (domain "plop.org")
21253 (dnssec-policy "default")
21254 (master (list "plop-master"))))
21255
21256 (define plop-master
21257 (knot-remote-configuration
21258 (id "plop-master")
21259 (address (list "208.76.58.171"))))
21260
21261 (operating-system
21262 ;; ...
21263 (services (cons* (service knot-service-type
21264 (knot-configuration
21265 (remotes (list plop-master))
21266 (zones (list master-zone slave-zone))))
21267 ;; ...
21268 %base-services)))
21269 @end lisp
21270
21271 @deffn {Scheme Variable} knot-service-type
21272 This is the type for the Knot DNS server.
21273
21274 Knot DNS is an authoritative DNS server, meaning that it can serve multiple
21275 zones, that is to say domain names you would buy from a registrar. This server
21276 is not a resolver, meaning that it can only resolve names for which it is
21277 authoritative. This server can be configured to serve zones as a master server
21278 or a slave server as a per-zone basis. Slave zones will get their data from
21279 masters, and will serve it as an authoritative server. From the point of view
21280 of a resolver, there is no difference between master and slave.
21281
21282 The following data types are used to configure the Knot DNS server:
21283 @end deffn
21284
21285 @deftp {Data Type} knot-key-configuration
21286 Data type representing a key.
21287 This type has the following parameters:
21288
21289 @table @asis
21290 @item @code{id} (default: @code{""})
21291 An identifier for other configuration fields to refer to this key. IDs must
21292 be unique and must not be empty.
21293
21294 @item @code{algorithm} (default: @code{#f})
21295 The algorithm to use. Choose between @code{#f}, @code{'hmac-md5},
21296 @code{'hmac-sha1}, @code{'hmac-sha224}, @code{'hmac-sha256}, @code{'hmac-sha384}
21297 and @code{'hmac-sha512}.
21298
21299 @item @code{secret} (default: @code{""})
21300 The secret key itself.
21301
21302 @end table
21303 @end deftp
21304
21305 @deftp {Data Type} knot-acl-configuration
21306 Data type representing an Access Control List (ACL) configuration.
21307 This type has the following parameters:
21308
21309 @table @asis
21310 @item @code{id} (default: @code{""})
21311 An identifier for ether configuration fields to refer to this key. IDs must be
21312 unique and must not be empty.
21313
21314 @item @code{address} (default: @code{'()})
21315 An ordered list of IP addresses, network subnets, or network ranges represented
21316 with strings. The query must match one of them. Empty value means that
21317 address match is not required.
21318
21319 @item @code{key} (default: @code{'()})
21320 An ordered list of references to keys represented with strings. The string
21321 must match a key ID defined in a @code{knot-key-configuration}. No key means
21322 that a key is not require to match that ACL.
21323
21324 @item @code{action} (default: @code{'()})
21325 An ordered list of actions that are permitted or forbidden by this ACL. Possible
21326 values are lists of zero or more elements from @code{'transfer}, @code{'notify}
21327 and @code{'update}.
21328
21329 @item @code{deny?} (default: @code{#f})
21330 When true, the ACL defines restrictions. Listed actions are forbidden. When
21331 false, listed actions are allowed.
21332
21333 @end table
21334 @end deftp
21335
21336 @deftp {Data Type} zone-entry
21337 Data type representing a record entry in a zone file.
21338 This type has the following parameters:
21339
21340 @table @asis
21341 @item @code{name} (default: @code{"@@"})
21342 The name of the record. @code{"@@"} refers to the origin of the zone. Names
21343 are relative to the origin of the zone. For example, in the @code{example.org}
21344 zone, @code{"ns.example.org"} actually refers to @code{ns.example.org.example.org}.
21345 Names ending with a dot are absolute, which means that @code{"ns.example.org."}
21346 refers to @code{ns.example.org}.
21347
21348 @item @code{ttl} (default: @code{""})
21349 The Time-To-Live (TTL) of this record. If not set, the default TTL is used.
21350
21351 @item @code{class} (default: @code{"IN"})
21352 The class of the record. Knot currently supports only @code{"IN"} and
21353 partially @code{"CH"}.
21354
21355 @item @code{type} (default: @code{"A"})
21356 The type of the record. Common types include A (IPv4 address), AAAA (IPv6
21357 address), NS (Name Server) and MX (Mail eXchange). Many other types are
21358 defined.
21359
21360 @item @code{data} (default: @code{""})
21361 The data contained in the record. For instance an IP address associated with
21362 an A record, or a domain name associated with an NS record. Remember that
21363 domain names are relative to the origin unless they end with a dot.
21364
21365 @end table
21366 @end deftp
21367
21368 @deftp {Data Type} zone-file
21369 Data type representing the content of a zone file.
21370 This type has the following parameters:
21371
21372 @table @asis
21373 @item @code{entries} (default: @code{'()})
21374 The list of entries. The SOA record is taken care of, so you don't need to
21375 put it in the list of entries. This list should probably contain an entry
21376 for your primary authoritative DNS server. Other than using a list of entries
21377 directly, you can use @code{define-zone-entries} to define a object containing
21378 the list of entries more easily, that you can later pass to the @code{entries}
21379 field of the @code{zone-file}.
21380
21381 @item @code{origin} (default: @code{""})
21382 The name of your zone. This parameter cannot be empty.
21383
21384 @item @code{ns} (default: @code{"ns"})
21385 The domain of your primary authoritative DNS server. The name is relative to
21386 the origin, unless it ends with a dot. It is mandatory that this primary
21387 DNS server corresponds to an NS record in the zone and that it is associated
21388 to an IP address in the list of entries.
21389
21390 @item @code{mail} (default: @code{"hostmaster"})
21391 An email address people can contact you at, as the owner of the zone. This
21392 is translated as @code{<mail>@@<origin>}.
21393
21394 @item @code{serial} (default: @code{1})
21395 The serial number of the zone. As this is used to keep track of changes by
21396 both slaves and resolvers, it is mandatory that it @emph{never} decreases.
21397 Always increment it when you make a change in your zone.
21398
21399 @item @code{refresh} (default: @code{(* 2 24 3600)})
21400 The frequency at which slaves will do a zone transfer. This value is a number
21401 of seconds. It can be computed by multiplications or with
21402 @code{(string->duration)}.
21403
21404 @item @code{retry} (default: @code{(* 15 60)})
21405 The period after which a slave will retry to contact its master when it fails
21406 to do so a first time.
21407
21408 @item @code{expiry} (default: @code{(* 14 24 3600)})
21409 Default TTL of records. Existing records are considered correct for at most
21410 this amount of time. After this period, resolvers will invalidate their cache
21411 and check again that it still exists.
21412
21413 @item @code{nx} (default: @code{3600})
21414 Default TTL of inexistant records. This delay is usually short because you want
21415 your new domains to reach everyone quickly.
21416
21417 @end table
21418 @end deftp
21419
21420 @deftp {Data Type} knot-remote-configuration
21421 Data type representing a remote configuration.
21422 This type has the following parameters:
21423
21424 @table @asis
21425 @item @code{id} (default: @code{""})
21426 An identifier for other configuration fields to refer to this remote. IDs must
21427 be unique and must not be empty.
21428
21429 @item @code{address} (default: @code{'()})
21430 An ordered list of destination IP addresses. Addresses are tried in sequence.
21431 An optional port can be given with the @@ separator. For instance:
21432 @code{(list "1.2.3.4" "2.3.4.5@@53")}. Default port is 53.
21433
21434 @item @code{via} (default: @code{'()})
21435 An ordered list of source IP addresses. An empty list will have Knot choose
21436 an appropriate source IP. An optional port can be given with the @@ separator.
21437 The default is to choose at random.
21438
21439 @item @code{key} (default: @code{#f})
21440 A reference to a key, that is a string containing the identifier of a key
21441 defined in a @code{knot-key-configuration} field.
21442
21443 @end table
21444 @end deftp
21445
21446 @deftp {Data Type} knot-keystore-configuration
21447 Data type representing a keystore to hold dnssec keys.
21448 This type has the following parameters:
21449
21450 @table @asis
21451 @item @code{id} (default: @code{""})
21452 The id of the keystore. It must not be empty.
21453
21454 @item @code{backend} (default: @code{'pem})
21455 The backend to store the keys in. Can be @code{'pem} or @code{'pkcs11}.
21456
21457 @item @code{config} (default: @code{"/var/lib/knot/keys/keys"})
21458 The configuration string of the backend. An example for the PKCS#11 is:
21459 @code{"pkcs11:token=knot;pin-value=1234 /gnu/store/.../lib/pkcs11/libsofthsm2.so"}.
21460 For the pem backend, the string represents a path in the file system.
21461
21462 @end table
21463 @end deftp
21464
21465 @deftp {Data Type} knot-policy-configuration
21466 Data type representing a dnssec policy. Knot DNS is able to automatically
21467 sign your zones. It can either generate and manage your keys automatically or
21468 use keys that you generate.
21469
21470 Dnssec is usually implemented using two keys: a Key Signing Key (KSK) that is
21471 used to sign the second, and a Zone Signing Key (ZSK) that is used to sign the
21472 zone. In order to be trusted, the KSK needs to be present in the parent zone
21473 (usually a top-level domain). If your registrar supports dnssec, you will
21474 have to send them your KSK's hash so they can add a DS record in their zone.
21475 This is not automated and need to be done each time you change your KSK.
21476
21477 The policy also defines the lifetime of keys. Usually, ZSK can be changed
21478 easily and use weaker cryptographic functions (they use lower parameters) in
21479 order to sign records quickly, so they are changed often. The KSK however
21480 requires manual interaction with the registrar, so they are changed less often
21481 and use stronger parameters because they sign only one record.
21482
21483 This type has the following parameters:
21484
21485 @table @asis
21486 @item @code{id} (default: @code{""})
21487 The id of the policy. It must not be empty.
21488
21489 @item @code{keystore} (default: @code{"default"})
21490 A reference to a keystore, that is a string containing the identifier of a
21491 keystore defined in a @code{knot-keystore-configuration} field. The
21492 @code{"default"} identifier means the default keystore (a kasp database that
21493 was setup by this service).
21494
21495 @item @code{manual?} (default: @code{#f})
21496 Whether the key management is manual or automatic.
21497
21498 @item @code{single-type-signing?} (default: @code{#f})
21499 When @code{#t}, use the Single-Type Signing Scheme.
21500
21501 @item @code{algorithm} (default: @code{"ecdsap256sha256"})
21502 An algorithm of signing keys and issued signatures.
21503
21504 @item @code{ksk-size} (default: @code{256})
21505 The length of the KSK. Note that this value is correct for the default
21506 algorithm, but would be unsecure for other algorithms.
21507
21508 @item @code{zsk-size} (default: @code{256})
21509 The length of the ZSK. Note that this value is correct for the default
21510 algorithm, but would be unsecure for other algorithms.
21511
21512 @item @code{dnskey-ttl} (default: @code{'default})
21513 The TTL value for DNSKEY records added into zone apex. The special
21514 @code{'default} value means same as the zone SOA TTL.
21515
21516 @item @code{zsk-lifetime} (default: @code{(* 30 24 3600)})
21517 The period between ZSK publication and the next rollover initiation.
21518
21519 @item @code{propagation-delay} (default: @code{(* 24 3600)})
21520 An extra delay added for each key rollover step. This value should be high
21521 enough to cover propagation of data from the master server to all slaves.
21522
21523 @item @code{rrsig-lifetime} (default: @code{(* 14 24 3600)})
21524 A validity period of newly issued signatures.
21525
21526 @item @code{rrsig-refresh} (default: @code{(* 7 24 3600)})
21527 A period how long before a signature expiration the signature will be refreshed.
21528
21529 @item @code{nsec3?} (default: @code{#f})
21530 When @code{#t}, NSEC3 will be used instead of NSEC.
21531
21532 @item @code{nsec3-iterations} (default: @code{5})
21533 The number of additional times the hashing is performed.
21534
21535 @item @code{nsec3-salt-length} (default: @code{8})
21536 The length of a salt field in octets, which is appended to the original owner
21537 name before hashing.
21538
21539 @item @code{nsec3-salt-lifetime} (default: @code{(* 30 24 3600)})
21540 The validity period of newly issued salt field.
21541
21542 @end table
21543 @end deftp
21544
21545 @deftp {Data Type} knot-zone-configuration
21546 Data type representing a zone served by Knot.
21547 This type has the following parameters:
21548
21549 @table @asis
21550 @item @code{domain} (default: @code{""})
21551 The domain served by this configuration. It must not be empty.
21552
21553 @item @code{file} (default: @code{""})
21554 The file where this zone is saved. This parameter is ignored by master zones.
21555 Empty means default location that depends on the domain name.
21556
21557 @item @code{zone} (default: @code{(zone-file)})
21558 The content of the zone file. This parameter is ignored by slave zones. It
21559 must contain a zone-file record.
21560
21561 @item @code{master} (default: @code{'()})
21562 A list of master remotes. When empty, this zone is a master. When set, this
21563 zone is a slave. This is a list of remotes identifiers.
21564
21565 @item @code{ddns-master} (default: @code{#f})
21566 The main master. When empty, it defaults to the first master in the list of
21567 masters.
21568
21569 @item @code{notify} (default: @code{'()})
21570 A list of slave remote identifiers.
21571
21572 @item @code{acl} (default: @code{'()})
21573 A list of acl identifiers.
21574
21575 @item @code{semantic-checks?} (default: @code{#f})
21576 When set, this adds more semantic checks to the zone.
21577
21578 @item @code{disable-any?} (default: @code{#f})
21579 When set, this forbids queries of the ANY type.
21580
21581 @item @code{zonefile-sync} (default: @code{0})
21582 The delay between a modification in memory and on disk. 0 means immediate
21583 synchronization.
21584
21585 @item @code{zonefile-load} (default: @code{#f})
21586 The way the zone file contents are applied during zone load. Possible values
21587 are:
21588
21589 @itemize
21590 @item @code{#f} for using the default value from Knot,
21591 @item @code{'none} for not using the zone file at all,
21592 @item @code{'difference} for computing the difference between already available
21593 contents and zone contents and applying it to the current zone contents,
21594 @item @code{'difference-no-serial} for the same as @code{'difference}, but
21595 ignoring the SOA serial in the zone file, while the server takes care of it
21596 automatically.
21597 @item @code{'whole} for loading zone contents from the zone file.
21598 @end itemize
21599
21600 @item @code{journal-content} (default: @code{#f})
21601 The way the journal is used to store zone and its changes. Possible values
21602 are @code{'none} to not use it at all, @code{'changes} to store changes and
21603 @code{'all} to store contents. @code{#f} does not set this option, so the
21604 default value from Knot is used.
21605
21606 @item @code{max-journal-usage} (default: @code{#f})
21607 The maximum size for the journal on disk. @code{#f} does not set this option,
21608 so the default value from Knot is used.
21609
21610 @item @code{max-journal-depth} (default: @code{#f})
21611 The maximum size of the history. @code{#f} does not set this option, so the
21612 default value from Knot is used.
21613
21614 @item @code{max-zone-size} (default: @code{#f})
21615 The maximum size of the zone file. This limit is enforced for incoming
21616 transfer and updates. @code{#f} does not set this option, so the default
21617 value from Knot is used.
21618
21619 @item @code{dnssec-policy} (default: @code{#f})
21620 A reference to a @code{knot-policy-configuration} record, or the special
21621 name @code{"default"}. If the value is @code{#f}, there is no dnssec signing
21622 on this zone.
21623
21624 @item @code{serial-policy} (default: @code{'increment})
21625 A policy between @code{'increment} and @code{'unixtime}.
21626
21627 @end table
21628 @end deftp
21629
21630 @deftp {Data Type} knot-configuration
21631 Data type representing the Knot configuration.
21632 This type has the following parameters:
21633
21634 @table @asis
21635 @item @code{knot} (default: @code{knot})
21636 The Knot package.
21637
21638 @item @code{run-directory} (default: @code{"/var/run/knot"})
21639 The run directory. This directory will be used for pid file and sockets.
21640
21641 @item @code{includes} (default: @code{'()})
21642 A list of strings or file-like objects denoting other files that must be
21643 included at the top of the configuration file.
21644
21645 @cindex secrets, Knot service
21646 This can be used to manage secrets out-of-band. For example, secret
21647 keys may be stored in an out-of-band file not managed by Guix, and
21648 thus not visible in @file{/gnu/store}---e.g., you could store secret
21649 key configuration in @file{/etc/knot/secrets.conf} and add this file
21650 to the @code{includes} list.
21651
21652 One can generate a secret tsig key (for nsupdate and zone transfers with the
21653 keymgr command from the knot package. Note that the package is not automatically
21654 installed by the service. The following example shows how to generate a new
21655 tsig key:
21656
21657 @example
21658 keymgr -t mysecret > /etc/knot/secrets.conf
21659 chmod 600 /etc/knot/secrets.conf
21660 @end example
21661
21662 Also note that the generated key will be named @var{mysecret}, so it is the
21663 name that needs to be used in the @var{key} field of the
21664 @code{knot-acl-configuration} record and in other places that need to refer
21665 to that key.
21666
21667 It can also be used to add configuration not supported by this interface.
21668
21669 @item @code{listen-v4} (default: @code{"0.0.0.0"})
21670 An ip address on which to listen.
21671
21672 @item @code{listen-v6} (default: @code{"::"})
21673 An ip address on which to listen.
21674
21675 @item @code{listen-port} (default: @code{53})
21676 A port on which to listen.
21677
21678 @item @code{keys} (default: @code{'()})
21679 The list of knot-key-configuration used by this configuration.
21680
21681 @item @code{acls} (default: @code{'()})
21682 The list of knot-acl-configuration used by this configuration.
21683
21684 @item @code{remotes} (default: @code{'()})
21685 The list of knot-remote-configuration used by this configuration.
21686
21687 @item @code{zones} (default: @code{'()})
21688 The list of knot-zone-configuration used by this configuration.
21689
21690 @end table
21691 @end deftp
21692
21693 @subsubheading Knot Resolver Service
21694
21695 @deffn {Scheme Variable} knot-resolver-service-type
21696 This this the type of the knot resolver service, whose value should be
21697 an @code{knot-resolver-configuration} object as in this example:
21698
21699 @lisp
21700 (service knot-resolver-service-type
21701 (knot-resolver-configuration
21702 (kresd-config-file (plain-file "kresd.conf" "
21703 net.listen('192.168.0.1', 5353)
21704 user('knot-resolver', 'knot-resolver')
21705 modules = @{ 'hints > iterate', 'stats', 'predict' @}
21706 cache.size = 100 * MB
21707 "))))
21708 @end lisp
21709
21710 For more information, refer its @url{https://knot-resolver.readthedocs.org/en/stable/daemon.html#configuration, manual}.
21711 @end deffn
21712
21713 @deftp {Data Type} knot-resolver-configuration
21714 Data type representing the configuration of knot-resolver.
21715
21716 @table @asis
21717 @item @code{package} (default: @var{knot-resolver})
21718 Package object of the knot DNS resolver.
21719
21720 @item @code{kresd-config-file} (default: %kresd.conf)
21721 File-like object of the kresd configuration file to use, by default it
21722 will listen on @code{127.0.0.1} and @code{::1}.
21723
21724 @item @code{garbage-collection-interval} (default: 1000)
21725 Number of milliseconds for @code{kres-cache-gc} to periodically trim the cache.
21726
21727 @end table
21728 @end deftp
21729
21730
21731 @subsubheading Dnsmasq Service
21732
21733 @deffn {Scheme Variable} dnsmasq-service-type
21734 This is the type of the dnsmasq service, whose value should be an
21735 @code{dnsmasq-configuration} object as in this example:
21736
21737 @lisp
21738 (service dnsmasq-service-type
21739 (dnsmasq-configuration
21740 (no-resolv? #t)
21741 (servers '("192.168.1.1"))))
21742 @end lisp
21743 @end deffn
21744
21745 @deftp {Data Type} dnsmasq-configuration
21746 Data type representing the configuration of dnsmasq.
21747
21748 @table @asis
21749 @item @code{package} (default: @var{dnsmasq})
21750 Package object of the dnsmasq server.
21751
21752 @item @code{no-hosts?} (default: @code{#f})
21753 When true, don't read the hostnames in /etc/hosts.
21754
21755 @item @code{port} (default: @code{53})
21756 The port to listen on. Setting this to zero completely disables DNS
21757 responses, leaving only DHCP and/or TFTP functions.
21758
21759 @item @code{local-service?} (default: @code{#t})
21760 Accept DNS queries only from hosts whose address is on a local subnet,
21761 ie a subnet for which an interface exists on the server.
21762
21763 @item @code{listen-addresses} (default: @code{'()})
21764 Listen on the given IP addresses.
21765
21766 @item @code{resolv-file} (default: @code{"/etc/resolv.conf"})
21767 The file to read the IP address of the upstream nameservers from.
21768
21769 @item @code{no-resolv?} (default: @code{#f})
21770 When true, don't read @var{resolv-file}.
21771
21772 @item @code{servers} (default: @code{'()})
21773 Specify IP address of upstream servers directly.
21774
21775 @item @code{cache-size} (default: @code{150})
21776 Set the size of dnsmasq's cache. Setting the cache size to zero
21777 disables caching.
21778
21779 @item @code{negative-cache?} (default: @code{#t})
21780 When false, disable negative caching.
21781
21782 @end table
21783 @end deftp
21784
21785 @subsubheading ddclient Service
21786
21787 @cindex ddclient
21788 The ddclient service described below runs the ddclient daemon, which takes
21789 care of automatically updating DNS entries for service providers such as
21790 @uref{https://dyn.com/dns/, Dyn}.
21791
21792 The following example show instantiates the service with its default
21793 configuration:
21794
21795 @lisp
21796 (service ddclient-service-type)
21797 @end lisp
21798
21799 Note that ddclient needs to access credentials that are stored in a
21800 @dfn{secret file}, by default @file{/etc/ddclient/secrets} (see
21801 @code{secret-file} below.) You are expected to create this file manually, in
21802 an ``out-of-band'' fashion (you @emph{could} make this file part of the
21803 service configuration, for instance by using @code{plain-file}, but it will be
21804 world-readable @i{via} @file{/gnu/store}.) See the examples in the
21805 @file{share/ddclient} directory of the @code{ddclient} package.
21806
21807 @c %start of fragment
21808
21809 Available @code{ddclient-configuration} fields are:
21810
21811 @deftypevr {@code{ddclient-configuration} parameter} package ddclient
21812 The ddclient package.
21813
21814 @end deftypevr
21815
21816 @deftypevr {@code{ddclient-configuration} parameter} integer daemon
21817 The period after which ddclient will retry to check IP and domain name.
21818
21819 Defaults to @samp{300}.
21820
21821 @end deftypevr
21822
21823 @deftypevr {@code{ddclient-configuration} parameter} boolean syslog
21824 Use syslog for the output.
21825
21826 Defaults to @samp{#t}.
21827
21828 @end deftypevr
21829
21830 @deftypevr {@code{ddclient-configuration} parameter} string mail
21831 Mail to user.
21832
21833 Defaults to @samp{"root"}.
21834
21835 @end deftypevr
21836
21837 @deftypevr {@code{ddclient-configuration} parameter} string mail-failure
21838 Mail failed update to user.
21839
21840 Defaults to @samp{"root"}.
21841
21842 @end deftypevr
21843
21844 @deftypevr {@code{ddclient-configuration} parameter} string pid
21845 The ddclient PID file.
21846
21847 Defaults to @samp{"/var/run/ddclient/ddclient.pid"}.
21848
21849 @end deftypevr
21850
21851 @deftypevr {@code{ddclient-configuration} parameter} boolean ssl
21852 Enable SSL support.
21853
21854 Defaults to @samp{#t}.
21855
21856 @end deftypevr
21857
21858 @deftypevr {@code{ddclient-configuration} parameter} string user
21859 Specifies the user name or ID that is used when running ddclient
21860 program.
21861
21862 Defaults to @samp{"ddclient"}.
21863
21864 @end deftypevr
21865
21866 @deftypevr {@code{ddclient-configuration} parameter} string group
21867 Group of the user who will run the ddclient program.
21868
21869 Defaults to @samp{"ddclient"}.
21870
21871 @end deftypevr
21872
21873 @deftypevr {@code{ddclient-configuration} parameter} string secret-file
21874 Secret file which will be appended to @file{ddclient.conf} file. This
21875 file contains credentials for use by ddclient. You are expected to
21876 create it manually.
21877
21878 Defaults to @samp{"/etc/ddclient/secrets.conf"}.
21879
21880 @end deftypevr
21881
21882 @deftypevr {@code{ddclient-configuration} parameter} list extra-options
21883 Extra options will be appended to @file{ddclient.conf} file.
21884
21885 Defaults to @samp{()}.
21886
21887 @end deftypevr
21888
21889
21890 @c %end of fragment
21891
21892
21893 @node VPN Services
21894 @subsection VPN Services
21895 @cindex VPN (virtual private network)
21896 @cindex virtual private network (VPN)
21897
21898 The @code{(gnu services vpn)} module provides services related to
21899 @dfn{virtual private networks} (VPNs). It provides a @emph{client} service for
21900 your machine to connect to a VPN, and a @emph{server} service for your machine
21901 to host a VPN. Both services use @uref{https://openvpn.net/, OpenVPN}.
21902
21903 @deffn {Scheme Procedure} openvpn-client-service @
21904 [#:config (openvpn-client-configuration)]
21905
21906 Return a service that runs @command{openvpn}, a VPN daemon, as a client.
21907 @end deffn
21908
21909 @deffn {Scheme Procedure} openvpn-server-service @
21910 [#:config (openvpn-server-configuration)]
21911
21912 Return a service that runs @command{openvpn}, a VPN daemon, as a server.
21913
21914 Both can be run simultaneously.
21915 @end deffn
21916
21917 @c %automatically generated documentation
21918
21919 Available @code{openvpn-client-configuration} fields are:
21920
21921 @deftypevr {@code{openvpn-client-configuration} parameter} package openvpn
21922 The OpenVPN package.
21923
21924 @end deftypevr
21925
21926 @deftypevr {@code{openvpn-client-configuration} parameter} string pid-file
21927 The OpenVPN pid file.
21928
21929 Defaults to @samp{"/var/run/openvpn/openvpn.pid"}.
21930
21931 @end deftypevr
21932
21933 @deftypevr {@code{openvpn-client-configuration} parameter} proto proto
21934 The protocol (UDP or TCP) used to open a channel between clients and
21935 servers.
21936
21937 Defaults to @samp{udp}.
21938
21939 @end deftypevr
21940
21941 @deftypevr {@code{openvpn-client-configuration} parameter} dev dev
21942 The device type used to represent the VPN connection.
21943
21944 Defaults to @samp{tun}.
21945
21946 @end deftypevr
21947
21948 @deftypevr {@code{openvpn-client-configuration} parameter} string ca
21949 The certificate authority to check connections against.
21950
21951 Defaults to @samp{"/etc/openvpn/ca.crt"}.
21952
21953 @end deftypevr
21954
21955 @deftypevr {@code{openvpn-client-configuration} parameter} string cert
21956 The certificate of the machine the daemon is running on. It should be
21957 signed by the authority given in @code{ca}.
21958
21959 Defaults to @samp{"/etc/openvpn/client.crt"}.
21960
21961 @end deftypevr
21962
21963 @deftypevr {@code{openvpn-client-configuration} parameter} string key
21964 The key of the machine the daemon is running on. It must be the key whose
21965 certificate is @code{cert}.
21966
21967 Defaults to @samp{"/etc/openvpn/client.key"}.
21968
21969 @end deftypevr
21970
21971 @deftypevr {@code{openvpn-client-configuration} parameter} boolean comp-lzo?
21972 Whether to use the lzo compression algorithm.
21973
21974 Defaults to @samp{#t}.
21975
21976 @end deftypevr
21977
21978 @deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-key?
21979 Don't re-read key files across SIGUSR1 or --ping-restart.
21980
21981 Defaults to @samp{#t}.
21982
21983 @end deftypevr
21984
21985 @deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-tun?
21986 Don't close and reopen TUN/TAP device or run up/down scripts across
21987 SIGUSR1 or --ping-restart restarts.
21988
21989 Defaults to @samp{#t}.
21990
21991 @end deftypevr
21992
21993 @deftypevr {@code{openvpn-client-configuration} parameter} boolean fast-io?
21994 (Experimental) Optimize TUN/TAP/UDP I/O writes by avoiding a call to
21995 poll/epoll/select prior to the write operation.
21996
21997 Defaults to @samp{#f}.
21998 @end deftypevr
21999
22000 @deftypevr {@code{openvpn-client-configuration} parameter} number verbosity
22001 Verbosity level.
22002
22003 Defaults to @samp{3}.
22004
22005 @end deftypevr
22006
22007 @deftypevr {@code{openvpn-client-configuration} parameter} tls-auth-client tls-auth
22008 Add an additional layer of HMAC authentication on top of the TLS control
22009 channel to protect against DoS attacks.
22010
22011 Defaults to @samp{#f}.
22012
22013 @end deftypevr
22014
22015 @deftypevr {@code{openvpn-client-configuration} parameter} maybe-string auth-user-pass
22016 Authenticate with server using username/password. The option is a file
22017 containing username/password on 2 lines. Do not use a file-like object as it
22018 would be added to the store and readable by any user.
22019
22020 Defaults to @samp{'disabled}.
22021 @end deftypevr
22022
22023 @deftypevr {@code{openvpn-client-configuration} parameter} key-usage verify-key-usage?
22024 Whether to check the server certificate has server usage extension.
22025
22026 Defaults to @samp{#t}.
22027
22028 @end deftypevr
22029
22030 @deftypevr {@code{openvpn-client-configuration} parameter} bind bind?
22031 Bind to a specific local port number.
22032
22033 Defaults to @samp{#f}.
22034
22035 @end deftypevr
22036
22037 @deftypevr {@code{openvpn-client-configuration} parameter} resolv-retry resolv-retry?
22038 Retry resolving server address.
22039
22040 Defaults to @samp{#t}.
22041
22042 @end deftypevr
22043
22044 @deftypevr {@code{openvpn-client-configuration} parameter} openvpn-remote-list remote
22045 A list of remote servers to connect to.
22046
22047 Defaults to @samp{()}.
22048
22049 Available @code{openvpn-remote-configuration} fields are:
22050
22051 @deftypevr {@code{openvpn-remote-configuration} parameter} string name
22052 Server name.
22053
22054 Defaults to @samp{"my-server"}.
22055
22056 @end deftypevr
22057
22058 @deftypevr {@code{openvpn-remote-configuration} parameter} number port
22059 Port number the server listens to.
22060
22061 Defaults to @samp{1194}.
22062
22063 @end deftypevr
22064
22065 @end deftypevr
22066 @c %end of automatic openvpn-client documentation
22067
22068 @c %automatically generated documentation
22069
22070 Available @code{openvpn-server-configuration} fields are:
22071
22072 @deftypevr {@code{openvpn-server-configuration} parameter} package openvpn
22073 The OpenVPN package.
22074
22075 @end deftypevr
22076
22077 @deftypevr {@code{openvpn-server-configuration} parameter} string pid-file
22078 The OpenVPN pid file.
22079
22080 Defaults to @samp{"/var/run/openvpn/openvpn.pid"}.
22081
22082 @end deftypevr
22083
22084 @deftypevr {@code{openvpn-server-configuration} parameter} proto proto
22085 The protocol (UDP or TCP) used to open a channel between clients and
22086 servers.
22087
22088 Defaults to @samp{udp}.
22089
22090 @end deftypevr
22091
22092 @deftypevr {@code{openvpn-server-configuration} parameter} dev dev
22093 The device type used to represent the VPN connection.
22094
22095 Defaults to @samp{tun}.
22096
22097 @end deftypevr
22098
22099 @deftypevr {@code{openvpn-server-configuration} parameter} string ca
22100 The certificate authority to check connections against.
22101
22102 Defaults to @samp{"/etc/openvpn/ca.crt"}.
22103
22104 @end deftypevr
22105
22106 @deftypevr {@code{openvpn-server-configuration} parameter} string cert
22107 The certificate of the machine the daemon is running on. It should be
22108 signed by the authority given in @code{ca}.
22109
22110 Defaults to @samp{"/etc/openvpn/client.crt"}.
22111
22112 @end deftypevr
22113
22114 @deftypevr {@code{openvpn-server-configuration} parameter} string key
22115 The key of the machine the daemon is running on. It must be the key whose
22116 certificate is @code{cert}.
22117
22118 Defaults to @samp{"/etc/openvpn/client.key"}.
22119
22120 @end deftypevr
22121
22122 @deftypevr {@code{openvpn-server-configuration} parameter} boolean comp-lzo?
22123 Whether to use the lzo compression algorithm.
22124
22125 Defaults to @samp{#t}.
22126
22127 @end deftypevr
22128
22129 @deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-key?
22130 Don't re-read key files across SIGUSR1 or --ping-restart.
22131
22132 Defaults to @samp{#t}.
22133
22134 @end deftypevr
22135
22136 @deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-tun?
22137 Don't close and reopen TUN/TAP device or run up/down scripts across
22138 SIGUSR1 or --ping-restart restarts.
22139
22140 Defaults to @samp{#t}.
22141
22142 @end deftypevr
22143
22144 @deftypevr {@code{openvpn-server-configuration} parameter} boolean fast-io?
22145 (Experimental) Optimize TUN/TAP/UDP I/O writes by avoiding a call to
22146 poll/epoll/select prior to the write operation.
22147
22148 Defaults to @samp{#f}.
22149 @end deftypevr
22150
22151 @deftypevr {@code{openvpn-server-configuration} parameter} number verbosity
22152 Verbosity level.
22153
22154 Defaults to @samp{3}.
22155
22156 @end deftypevr
22157
22158 @deftypevr {@code{openvpn-server-configuration} parameter} tls-auth-server tls-auth
22159 Add an additional layer of HMAC authentication on top of the TLS control
22160 channel to protect against DoS attacks.
22161
22162 Defaults to @samp{#f}.
22163
22164 @end deftypevr
22165
22166 @deftypevr {@code{openvpn-server-configuration} parameter} number port
22167 Specifies the port number on which the server listens.
22168
22169 Defaults to @samp{1194}.
22170
22171 @end deftypevr
22172
22173 @deftypevr {@code{openvpn-server-configuration} parameter} ip-mask server
22174 An ip and mask specifying the subnet inside the virtual network.
22175
22176 Defaults to @samp{"10.8.0.0 255.255.255.0"}.
22177
22178 @end deftypevr
22179
22180 @deftypevr {@code{openvpn-server-configuration} parameter} cidr6 server-ipv6
22181 A CIDR notation specifying the IPv6 subnet inside the virtual network.
22182
22183 Defaults to @samp{#f}.
22184
22185 @end deftypevr
22186
22187 @deftypevr {@code{openvpn-server-configuration} parameter} string dh
22188 The Diffie-Hellman parameters file.
22189
22190 Defaults to @samp{"/etc/openvpn/dh2048.pem"}.
22191
22192 @end deftypevr
22193
22194 @deftypevr {@code{openvpn-server-configuration} parameter} string ifconfig-pool-persist
22195 The file that records client IPs.
22196
22197 Defaults to @samp{"/etc/openvpn/ipp.txt"}.
22198
22199 @end deftypevr
22200
22201 @deftypevr {@code{openvpn-server-configuration} parameter} gateway redirect-gateway?
22202 When true, the server will act as a gateway for its clients.
22203
22204 Defaults to @samp{#f}.
22205
22206 @end deftypevr
22207
22208 @deftypevr {@code{openvpn-server-configuration} parameter} boolean client-to-client?
22209 When true, clients are allowed to talk to each other inside the VPN.
22210
22211 Defaults to @samp{#f}.
22212
22213 @end deftypevr
22214
22215 @deftypevr {@code{openvpn-server-configuration} parameter} keepalive keepalive
22216 Causes ping-like messages to be sent back and forth over the link so
22217 that each side knows when the other side has gone down. @code{keepalive}
22218 requires a pair. The first element is the period of the ping sending,
22219 and the second element is the timeout before considering the other side
22220 down.
22221
22222 @end deftypevr
22223
22224 @deftypevr {@code{openvpn-server-configuration} parameter} number max-clients
22225 The maximum number of clients.
22226
22227 Defaults to @samp{100}.
22228
22229 @end deftypevr
22230
22231 @deftypevr {@code{openvpn-server-configuration} parameter} string status
22232 The status file. This file shows a small report on current connection.
22233 It is truncated and rewritten every minute.
22234
22235 Defaults to @samp{"/var/run/openvpn/status"}.
22236
22237 @end deftypevr
22238
22239 @deftypevr {@code{openvpn-server-configuration} parameter} openvpn-ccd-list client-config-dir
22240 The list of configuration for some clients.
22241
22242 Defaults to @samp{()}.
22243
22244 Available @code{openvpn-ccd-configuration} fields are:
22245
22246 @deftypevr {@code{openvpn-ccd-configuration} parameter} string name
22247 Client name.
22248
22249 Defaults to @samp{"client"}.
22250
22251 @end deftypevr
22252
22253 @deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask iroute
22254 Client own network
22255
22256 Defaults to @samp{#f}.
22257
22258 @end deftypevr
22259
22260 @deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask ifconfig-push
22261 Client VPN IP.
22262
22263 Defaults to @samp{#f}.
22264
22265 @end deftypevr
22266
22267 @end deftypevr
22268
22269
22270 @c %end of automatic openvpn-server documentation
22271
22272
22273 @node Network File System
22274 @subsection Network File System
22275 @cindex NFS
22276
22277 The @code{(gnu services nfs)} module provides the following services,
22278 which are most commonly used in relation to mounting or exporting
22279 directory trees as @dfn{network file systems} (NFS).
22280
22281 While it is possible to use the individual components that together make
22282 up a Network File System service, we recommended to configure an NFS
22283 server with the @code{nfs-service-type}.
22284
22285 @subsubheading NFS Service
22286 @cindex NFS, server
22287
22288 The NFS service takes care of setting up all NFS component services,
22289 kernel configuration file systems, and installs configuration files in
22290 the locations that NFS expects.
22291
22292 @defvr {Scheme Variable} nfs-service-type
22293 A service type for a complete NFS server.
22294 @end defvr
22295
22296 @deftp {Data Type} nfs-configuration
22297 This data type represents the configuration of the NFS service and all
22298 of its subsystems.
22299
22300 It has the following parameters:
22301 @table @asis
22302 @item @code{nfs-utils} (default: @code{nfs-utils})
22303 The nfs-utils package to use.
22304
22305 @item @code{nfs-versions} (default: @code{'("4.2" "4.1" "4.0")})
22306 If a list of string values is provided, the @command{rpc.nfsd} daemon
22307 will be limited to supporting the given versions of the NFS protocol.
22308
22309 @item @code{exports} (default: @code{'()})
22310 This is a list of directories the NFS server should export. Each entry
22311 is a list consisting of two elements: a directory name and a string
22312 containing all options. This is an example in which the directory
22313 @file{/export} is served to all NFS clients as a read-only share:
22314
22315 @lisp
22316 (nfs-configuration
22317 (exports
22318 '(("/export"
22319 "*(ro,insecure,no_subtree_check,crossmnt,fsid=0)"))))
22320 @end lisp
22321
22322 @item @code{rpcmountd-port} (default: @code{#f})
22323 The network port that the @command{rpc.mountd} daemon should use.
22324
22325 @item @code{rpcstatd-port} (default: @code{#f})
22326 The network port that the @command{rpc.statd} daemon should use.
22327
22328 @item @code{rpcbind} (default: @code{rpcbind})
22329 The rpcbind package to use.
22330
22331 @item @code{idmap-domain} (default: @code{"localdomain"})
22332 The local NFSv4 domain name.
22333
22334 @item @code{nfsd-port} (default: @code{2049})
22335 The network port that the @command{nfsd} daemon should use.
22336
22337 @item @code{nfsd-threads} (default: @code{8})
22338 The number of threads used by the @command{nfsd} daemon.
22339
22340 @item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
22341 The directory where the pipefs file system is mounted.
22342
22343 @item @code{debug} (default: @code{'()"})
22344 A list of subsystems for which debugging output should be enabled. This
22345 is a list of symbols. Any of these symbols are valid: @code{nfsd},
22346 @code{nfs}, @code{rpc}, @code{idmap}, @code{statd}, or @code{mountd}.
22347 @end table
22348 @end deftp
22349
22350 If you don't need a complete NFS service or prefer to build it yourself
22351 you can use the individual component services that are documented below.
22352
22353 @subsubheading RPC Bind Service
22354 @cindex rpcbind
22355
22356 The RPC Bind service provides a facility to map program numbers into
22357 universal addresses.
22358 Many NFS related services use this facility. Hence it is automatically
22359 started when a dependent service starts.
22360
22361 @defvr {Scheme Variable} rpcbind-service-type
22362 A service type for the RPC portmapper daemon.
22363 @end defvr
22364
22365
22366 @deftp {Data Type} rpcbind-configuration
22367 Data type representing the configuration of the RPC Bind Service.
22368 This type has the following parameters:
22369 @table @asis
22370 @item @code{rpcbind} (default: @code{rpcbind})
22371 The rpcbind package to use.
22372
22373 @item @code{warm-start?} (default: @code{#t})
22374 If this parameter is @code{#t}, then the daemon will read a
22375 state file on startup thus reloading state information saved by a previous
22376 instance.
22377 @end table
22378 @end deftp
22379
22380
22381 @subsubheading Pipefs Pseudo File System
22382 @cindex pipefs
22383 @cindex rpc_pipefs
22384
22385 The pipefs file system is used to transfer NFS related data
22386 between the kernel and user space programs.
22387
22388 @defvr {Scheme Variable} pipefs-service-type
22389 A service type for the pipefs pseudo file system.
22390 @end defvr
22391
22392 @deftp {Data Type} pipefs-configuration
22393 Data type representing the configuration of the pipefs pseudo file system service.
22394 This type has the following parameters:
22395 @table @asis
22396 @item @code{mount-point} (default: @code{"/var/lib/nfs/rpc_pipefs"})
22397 The directory to which the file system is to be attached.
22398 @end table
22399 @end deftp
22400
22401
22402 @subsubheading GSS Daemon Service
22403 @cindex GSSD
22404 @cindex GSS
22405 @cindex global security system
22406
22407 The @dfn{global security system} (GSS) daemon provides strong security for RPC
22408 based protocols.
22409 Before exchanging RPC requests an RPC client must establish a security
22410 context. Typically this is done using the Kerberos command @command{kinit}
22411 or automatically at login time using PAM services (@pxref{Kerberos Services}).
22412
22413 @defvr {Scheme Variable} gss-service-type
22414 A service type for the Global Security System (GSS) daemon.
22415 @end defvr
22416
22417 @deftp {Data Type} gss-configuration
22418 Data type representing the configuration of the GSS daemon service.
22419 This type has the following parameters:
22420 @table @asis
22421 @item @code{nfs-utils} (default: @code{nfs-utils})
22422 The package in which the @command{rpc.gssd} command is to be found.
22423
22424 @item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
22425 The directory where the pipefs file system is mounted.
22426
22427 @end table
22428 @end deftp
22429
22430
22431 @subsubheading IDMAP Daemon Service
22432 @cindex idmapd
22433 @cindex name mapper
22434
22435 The idmap daemon service provides mapping between user IDs and user names.
22436 Typically it is required in order to access file systems mounted via NFSv4.
22437
22438 @defvr {Scheme Variable} idmap-service-type
22439 A service type for the Identity Mapper (IDMAP) daemon.
22440 @end defvr
22441
22442 @deftp {Data Type} idmap-configuration
22443 Data type representing the configuration of the IDMAP daemon service.
22444 This type has the following parameters:
22445 @table @asis
22446 @item @code{nfs-utils} (default: @code{nfs-utils})
22447 The package in which the @command{rpc.idmapd} command is to be found.
22448
22449 @item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
22450 The directory where the pipefs file system is mounted.
22451
22452 @item @code{domain} (default: @code{#f})
22453 The local NFSv4 domain name.
22454 This must be a string or @code{#f}.
22455 If it is @code{#f} then the daemon will use the host's fully qualified domain name.
22456
22457 @item @code{verbosity} (default: @code{0})
22458 The verbosity level of the daemon.
22459
22460 @end table
22461 @end deftp
22462
22463 @node Continuous Integration
22464 @subsection Continuous Integration
22465
22466 @cindex continuous integration
22467 @uref{https://git.savannah.gnu.org/cgit/guix/guix-cuirass.git, Cuirass} is a
22468 continuous integration tool for Guix. It can be used both for development and
22469 for providing substitutes to others (@pxref{Substitutes}).
22470
22471 The @code{(gnu services cuirass)} module provides the following service.
22472
22473 @defvr {Scheme Procedure} cuirass-service-type
22474 The type of the Cuirass service. Its value must be a
22475 @code{cuirass-configuration} object, as described below.
22476 @end defvr
22477
22478 To add build jobs, you have to set the @code{specifications} field of the
22479 configuration. Here is an example of a service that polls the Guix repository
22480 and builds the packages from a manifest. Some of the packages are defined in
22481 the @code{"custom-packages"} input, which is the equivalent of
22482 @code{GUIX_PACKAGE_PATH}.
22483
22484 @lisp
22485 (define %cuirass-specs
22486 #~(list
22487 '((#:name . "my-manifest")
22488 (#:load-path-inputs . ("guix"))
22489 (#:package-path-inputs . ("custom-packages"))
22490 (#:proc-input . "guix")
22491 (#:proc-file . "build-aux/cuirass/gnu-system.scm")
22492 (#:proc . cuirass-jobs)
22493 (#:proc-args . ((subset . "manifests")
22494 (systems . ("x86_64-linux"))
22495 (manifests . (("config" . "guix/manifest.scm")))))
22496 (#:inputs . (((#:name . "guix")
22497 (#:url . "git://git.savannah.gnu.org/guix.git")
22498 (#:load-path . ".")
22499 (#:branch . "master")
22500 (#:no-compile? . #t))
22501 ((#:name . "config")
22502 (#:url . "https://git.example.org/config.git")
22503 (#:load-path . ".")
22504 (#:branch . "master")
22505 (#:no-compile? . #t))
22506 ((#:name . "custom-packages")
22507 (#:url . "https://git.example.org/custom-packages.git")
22508 (#:load-path . ".")
22509 (#:branch . "master")
22510 (#:no-compile? . #t)))))))
22511
22512 (service cuirass-service-type
22513 (cuirass-configuration
22514 (specifications %cuirass-specs)))
22515 @end lisp
22516
22517 While information related to build jobs is located directly in the
22518 specifications, global settings for the @command{cuirass} process are
22519 accessible in other @code{cuirass-configuration} fields.
22520
22521 @deftp {Data Type} cuirass-configuration
22522 Data type representing the configuration of Cuirass.
22523
22524 @table @asis
22525 @item @code{log-file} (default: @code{"/var/log/cuirass.log"})
22526 Location of the log file.
22527
22528 @item @code{web-log-file} (default: @code{"/var/log/cuirass-web.log"})
22529 Location of the log file used by the web interface.
22530
22531 @item @code{cache-directory} (default: @code{"/var/cache/cuirass"})
22532 Location of the repository cache.
22533
22534 @item @code{user} (default: @code{"cuirass"})
22535 Owner of the @code{cuirass} process.
22536
22537 @item @code{group} (default: @code{"cuirass"})
22538 Owner's group of the @code{cuirass} process.
22539
22540 @item @code{interval} (default: @code{60})
22541 Number of seconds between the poll of the repositories followed by the
22542 Cuirass jobs.
22543
22544 @item @code{database} (default: @code{"/var/lib/cuirass/cuirass.db"})
22545 Location of sqlite database which contains the build results and previously
22546 added specifications.
22547
22548 @item @code{ttl} (default: @code{(* 30 24 3600)})
22549 Specifies the time-to-live (TTL) in seconds of garbage collector roots that
22550 are registered for build results. This means that build results are protected
22551 from garbage collection for at least @var{ttl} seconds.
22552
22553 @item @code{port} (default: @code{8081})
22554 Port number used by the HTTP server.
22555
22556 @item @code{host} (default: @code{"localhost"})
22557 Listen on the network interface for @var{host}. The default is to
22558 accept connections from localhost.
22559
22560 @item @code{specifications} (default: @code{#~'()})
22561 A gexp (@pxref{G-Expressions}) that evaluates to a list of specifications,
22562 where a specification is an association list
22563 (@pxref{Associations Lists,,, guile, GNU Guile Reference Manual}) whose
22564 keys are keywords (@code{#:keyword-example}) as shown in the example
22565 above.
22566
22567 @item @code{use-substitutes?} (default: @code{#f})
22568 This allows using substitutes to avoid building every dependencies of a job
22569 from source.
22570
22571 @item @code{one-shot?} (default: @code{#f})
22572 Only evaluate specifications and build derivations once.
22573
22574 @item @code{fallback?} (default: @code{#f})
22575 When substituting a pre-built binary fails, fall back to building
22576 packages locally.
22577
22578 @item @code{extra-options} (default: @code{'()})
22579 Extra options to pass when running the Cuirass processes.
22580
22581 @item @code{cuirass} (default: @code{cuirass})
22582 The Cuirass package to use.
22583 @end table
22584 @end deftp
22585
22586 @node Power Management Services
22587 @subsection Power Management Services
22588
22589 @cindex tlp
22590 @cindex power management with TLP
22591 @subsubheading TLP daemon
22592
22593 The @code{(gnu services pm)} module provides a Guix service definition
22594 for the Linux power management tool TLP.
22595
22596 TLP enables various powersaving modes in userspace and kernel.
22597 Contrary to @code{upower-service}, it is not a passive,
22598 monitoring tool, as it will apply custom settings each time a new power
22599 source is detected. More information can be found at
22600 @uref{https://linrunner.de/en/tlp/tlp.html, TLP home page}.
22601
22602 @deffn {Scheme Variable} tlp-service-type
22603 The service type for the TLP tool. Its value should be a valid
22604 TLP configuration (see below). To use the default settings, simply
22605 write:
22606 @lisp
22607 (service tlp-service-type)
22608 @end lisp
22609 @end deffn
22610
22611 By default TLP does not need much configuration but most TLP parameters
22612 can be tweaked using @code{tlp-configuration}.
22613
22614 Each parameter definition is preceded by its type; for example,
22615 @samp{boolean foo} indicates that the @code{foo} parameter
22616 should be specified as a boolean. Types starting with
22617 @code{maybe-} denote parameters that won't show up in TLP config file
22618 when their value is @code{'disabled}.
22619
22620 @c The following documentation was initially generated by
22621 @c (generate-tlp-documentation) in (gnu services pm). Manually maintained
22622 @c documentation is better, so we shouldn't hesitate to edit below as
22623 @c needed. However if the change you want to make to this documentation
22624 @c can be done in an automated way, it's probably easier to change
22625 @c (generate-documentation) than to make it below and have to deal with
22626 @c the churn as TLP updates.
22627
22628 Available @code{tlp-configuration} fields are:
22629
22630 @deftypevr {@code{tlp-configuration} parameter} package tlp
22631 The TLP package.
22632
22633 @end deftypevr
22634
22635 @deftypevr {@code{tlp-configuration} parameter} boolean tlp-enable?
22636 Set to true if you wish to enable TLP.
22637
22638 Defaults to @samp{#t}.
22639
22640 @end deftypevr
22641
22642 @deftypevr {@code{tlp-configuration} parameter} string tlp-default-mode
22643 Default mode when no power supply can be detected. Alternatives are AC
22644 and BAT.
22645
22646 Defaults to @samp{"AC"}.
22647
22648 @end deftypevr
22649
22650 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-ac
22651 Number of seconds Linux kernel has to wait after the disk goes idle,
22652 before syncing on AC.
22653
22654 Defaults to @samp{0}.
22655
22656 @end deftypevr
22657
22658 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-bat
22659 Same as @code{disk-idle-ac} but on BAT mode.
22660
22661 Defaults to @samp{2}.
22662
22663 @end deftypevr
22664
22665 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-ac
22666 Dirty pages flushing periodicity, expressed in seconds.
22667
22668 Defaults to @samp{15}.
22669
22670 @end deftypevr
22671
22672 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-bat
22673 Same as @code{max-lost-work-secs-on-ac} but on BAT mode.
22674
22675 Defaults to @samp{60}.
22676
22677 @end deftypevr
22678
22679 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-ac
22680 CPU frequency scaling governor on AC mode. With intel_pstate driver,
22681 alternatives are powersave and performance. With acpi-cpufreq driver,
22682 alternatives are ondemand, powersave, performance and conservative.
22683
22684 Defaults to @samp{disabled}.
22685
22686 @end deftypevr
22687
22688 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-bat
22689 Same as @code{cpu-scaling-governor-on-ac} but on BAT mode.
22690
22691 Defaults to @samp{disabled}.
22692
22693 @end deftypevr
22694
22695 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-ac
22696 Set the min available frequency for the scaling governor on AC.
22697
22698 Defaults to @samp{disabled}.
22699
22700 @end deftypevr
22701
22702 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-ac
22703 Set the max available frequency for the scaling governor on AC.
22704
22705 Defaults to @samp{disabled}.
22706
22707 @end deftypevr
22708
22709 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-bat
22710 Set the min available frequency for the scaling governor on BAT.
22711
22712 Defaults to @samp{disabled}.
22713
22714 @end deftypevr
22715
22716 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-bat
22717 Set the max available frequency for the scaling governor on BAT.
22718
22719 Defaults to @samp{disabled}.
22720
22721 @end deftypevr
22722
22723 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-ac
22724 Limit the min P-state to control the power dissipation of the CPU, in AC
22725 mode. Values are stated as a percentage of the available performance.
22726
22727 Defaults to @samp{disabled}.
22728
22729 @end deftypevr
22730
22731 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-ac
22732 Limit the max P-state to control the power dissipation of the CPU, in AC
22733 mode. Values are stated as a percentage of the available performance.
22734
22735 Defaults to @samp{disabled}.
22736
22737 @end deftypevr
22738
22739 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-bat
22740 Same as @code{cpu-min-perf-on-ac} on BAT mode.
22741
22742 Defaults to @samp{disabled}.
22743
22744 @end deftypevr
22745
22746 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-bat
22747 Same as @code{cpu-max-perf-on-ac} on BAT mode.
22748
22749 Defaults to @samp{disabled}.
22750
22751 @end deftypevr
22752
22753 @deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-ac?
22754 Enable CPU turbo boost feature on AC mode.
22755
22756 Defaults to @samp{disabled}.
22757
22758 @end deftypevr
22759
22760 @deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-bat?
22761 Same as @code{cpu-boost-on-ac?} on BAT mode.
22762
22763 Defaults to @samp{disabled}.
22764
22765 @end deftypevr
22766
22767 @deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-ac?
22768 Allow Linux kernel to minimize the number of CPU cores/hyper-threads
22769 used under light load conditions.
22770
22771 Defaults to @samp{#f}.
22772
22773 @end deftypevr
22774
22775 @deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-bat?
22776 Same as @code{sched-powersave-on-ac?} but on BAT mode.
22777
22778 Defaults to @samp{#t}.
22779
22780 @end deftypevr
22781
22782 @deftypevr {@code{tlp-configuration} parameter} boolean nmi-watchdog?
22783 Enable Linux kernel NMI watchdog.
22784
22785 Defaults to @samp{#f}.
22786
22787 @end deftypevr
22788
22789 @deftypevr {@code{tlp-configuration} parameter} maybe-string phc-controls
22790 For Linux kernels with PHC patch applied, change CPU voltages. An
22791 example value would be @samp{"F:V F:V F:V F:V"}.
22792
22793 Defaults to @samp{disabled}.
22794
22795 @end deftypevr
22796
22797 @deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-ac
22798 Set CPU performance versus energy saving policy on AC. Alternatives are
22799 performance, normal, powersave.
22800
22801 Defaults to @samp{"performance"}.
22802
22803 @end deftypevr
22804
22805 @deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-bat
22806 Same as @code{energy-perf-policy-ac} but on BAT mode.
22807
22808 Defaults to @samp{"powersave"}.
22809
22810 @end deftypevr
22811
22812 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disks-devices
22813 Hard disk devices.
22814
22815 @end deftypevr
22816
22817 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-ac
22818 Hard disk advanced power management level.
22819
22820 @end deftypevr
22821
22822 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-bat
22823 Same as @code{disk-apm-bat} but on BAT mode.
22824
22825 @end deftypevr
22826
22827 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-ac
22828 Hard disk spin down timeout. One value has to be specified for each
22829 declared hard disk.
22830
22831 Defaults to @samp{disabled}.
22832
22833 @end deftypevr
22834
22835 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-bat
22836 Same as @code{disk-spindown-timeout-on-ac} but on BAT mode.
22837
22838 Defaults to @samp{disabled}.
22839
22840 @end deftypevr
22841
22842 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-iosched
22843 Select IO scheduler for disk devices. One value has to be specified for
22844 each declared hard disk. Example alternatives are cfq, deadline and
22845 noop.
22846
22847 Defaults to @samp{disabled}.
22848
22849 @end deftypevr
22850
22851 @deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-ac
22852 SATA aggressive link power management (ALPM) level. Alternatives are
22853 min_power, medium_power, max_performance.
22854
22855 Defaults to @samp{"max_performance"}.
22856
22857 @end deftypevr
22858
22859 @deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-bat
22860 Same as @code{sata-linkpwr-ac} but on BAT mode.
22861
22862 Defaults to @samp{"min_power"}.
22863
22864 @end deftypevr
22865
22866 @deftypevr {@code{tlp-configuration} parameter} maybe-string sata-linkpwr-blacklist
22867 Exclude specified SATA host devices for link power management.
22868
22869 Defaults to @samp{disabled}.
22870
22871 @end deftypevr
22872
22873 @deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-ac?
22874 Enable Runtime Power Management for AHCI controller and disks on AC
22875 mode.
22876
22877 Defaults to @samp{disabled}.
22878
22879 @end deftypevr
22880
22881 @deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-bat?
22882 Same as @code{ahci-runtime-pm-on-ac} on BAT mode.
22883
22884 Defaults to @samp{disabled}.
22885
22886 @end deftypevr
22887
22888 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer ahci-runtime-pm-timeout
22889 Seconds of inactivity before disk is suspended.
22890
22891 Defaults to @samp{15}.
22892
22893 @end deftypevr
22894
22895 @deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-ac
22896 PCI Express Active State Power Management level. Alternatives are
22897 default, performance, powersave.
22898
22899 Defaults to @samp{"performance"}.
22900
22901 @end deftypevr
22902
22903 @deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-bat
22904 Same as @code{pcie-aspm-ac} but on BAT mode.
22905
22906 Defaults to @samp{"powersave"}.
22907
22908 @end deftypevr
22909
22910 @deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-ac
22911 Radeon graphics clock speed level. Alternatives are low, mid, high,
22912 auto, default.
22913
22914 Defaults to @samp{"high"}.
22915
22916 @end deftypevr
22917
22918 @deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-bat
22919 Same as @code{radeon-power-ac} but on BAT mode.
22920
22921 Defaults to @samp{"low"}.
22922
22923 @end deftypevr
22924
22925 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-ac
22926 Radeon dynamic power management method (DPM). Alternatives are battery,
22927 performance.
22928
22929 Defaults to @samp{"performance"}.
22930
22931 @end deftypevr
22932
22933 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-bat
22934 Same as @code{radeon-dpm-state-ac} but on BAT mode.
22935
22936 Defaults to @samp{"battery"}.
22937
22938 @end deftypevr
22939
22940 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-ac
22941 Radeon DPM performance level. Alternatives are auto, low, high.
22942
22943 Defaults to @samp{"auto"}.
22944
22945 @end deftypevr
22946
22947 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-bat
22948 Same as @code{radeon-dpm-perf-ac} but on BAT mode.
22949
22950 Defaults to @samp{"auto"}.
22951
22952 @end deftypevr
22953
22954 @deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-ac?
22955 Wifi power saving mode.
22956
22957 Defaults to @samp{#f}.
22958
22959 @end deftypevr
22960
22961 @deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-bat?
22962 Same as @code{wifi-power-ac?} but on BAT mode.
22963
22964 Defaults to @samp{#t}.
22965
22966 @end deftypevr
22967
22968 @deftypevr {@code{tlp-configuration} parameter} y-n-boolean wol-disable?
22969 Disable wake on LAN.
22970
22971 Defaults to @samp{#t}.
22972
22973 @end deftypevr
22974
22975 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-ac
22976 Timeout duration in seconds before activating audio power saving on
22977 Intel HDA and AC97 devices. A value of 0 disables power saving.
22978
22979 Defaults to @samp{0}.
22980
22981 @end deftypevr
22982
22983 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-bat
22984 Same as @code{sound-powersave-ac} but on BAT mode.
22985
22986 Defaults to @samp{1}.
22987
22988 @end deftypevr
22989
22990 @deftypevr {@code{tlp-configuration} parameter} y-n-boolean sound-power-save-controller?
22991 Disable controller in powersaving mode on Intel HDA devices.
22992
22993 Defaults to @samp{#t}.
22994
22995 @end deftypevr
22996
22997 @deftypevr {@code{tlp-configuration} parameter} boolean bay-poweroff-on-bat?
22998 Enable optical drive in UltraBay/MediaBay on BAT mode. Drive can be
22999 powered on again by releasing (and reinserting) the eject lever or by
23000 pressing the disc eject button on newer models.
23001
23002 Defaults to @samp{#f}.
23003
23004 @end deftypevr
23005
23006 @deftypevr {@code{tlp-configuration} parameter} string bay-device
23007 Name of the optical drive device to power off.
23008
23009 Defaults to @samp{"sr0"}.
23010
23011 @end deftypevr
23012
23013 @deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-ac
23014 Runtime Power Management for PCI(e) bus devices. Alternatives are on
23015 and auto.
23016
23017 Defaults to @samp{"on"}.
23018
23019 @end deftypevr
23020
23021 @deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-bat
23022 Same as @code{runtime-pm-ac} but on BAT mode.
23023
23024 Defaults to @samp{"auto"}.
23025
23026 @end deftypevr
23027
23028 @deftypevr {@code{tlp-configuration} parameter} boolean runtime-pm-all?
23029 Runtime Power Management for all PCI(e) bus devices, except blacklisted
23030 ones.
23031
23032 Defaults to @samp{#t}.
23033
23034 @end deftypevr
23035
23036 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list runtime-pm-blacklist
23037 Exclude specified PCI(e) device addresses from Runtime Power Management.
23038
23039 Defaults to @samp{disabled}.
23040
23041 @end deftypevr
23042
23043 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list runtime-pm-driver-blacklist
23044 Exclude PCI(e) devices assigned to the specified drivers from Runtime
23045 Power Management.
23046
23047 @end deftypevr
23048
23049 @deftypevr {@code{tlp-configuration} parameter} boolean usb-autosuspend?
23050 Enable USB autosuspend feature.
23051
23052 Defaults to @samp{#t}.
23053
23054 @end deftypevr
23055
23056 @deftypevr {@code{tlp-configuration} parameter} maybe-string usb-blacklist
23057 Exclude specified devices from USB autosuspend.
23058
23059 Defaults to @samp{disabled}.
23060
23061 @end deftypevr
23062
23063 @deftypevr {@code{tlp-configuration} parameter} boolean usb-blacklist-wwan?
23064 Exclude WWAN devices from USB autosuspend.
23065
23066 Defaults to @samp{#t}.
23067
23068 @end deftypevr
23069
23070 @deftypevr {@code{tlp-configuration} parameter} maybe-string usb-whitelist
23071 Include specified devices into USB autosuspend, even if they are already
23072 excluded by the driver or via @code{usb-blacklist-wwan?}.
23073
23074 Defaults to @samp{disabled}.
23075
23076 @end deftypevr
23077
23078 @deftypevr {@code{tlp-configuration} parameter} maybe-boolean usb-autosuspend-disable-on-shutdown?
23079 Enable USB autosuspend before shutdown.
23080
23081 Defaults to @samp{disabled}.
23082
23083 @end deftypevr
23084
23085 @deftypevr {@code{tlp-configuration} parameter} boolean restore-device-state-on-startup?
23086 Restore radio device state (bluetooth, wifi, wwan) from previous
23087 shutdown on system startup.
23088
23089 Defaults to @samp{#f}.
23090
23091 @end deftypevr
23092
23093 @cindex thermald
23094 @cindex CPU frequency scaling with thermald
23095 @subsubheading Thermald daemon
23096
23097 The @code{(gnu services pm)} module provides an interface to
23098 thermald, a CPU frequency scaling service which helps prevent overheating.
23099
23100 @defvr {Scheme Variable} thermald-service-type
23101 This is the service type for
23102 @uref{https://01.org/linux-thermal-daemon/, thermald}, the Linux
23103 Thermal Daemon, which is responsible for controlling the thermal state
23104 of processors and preventing overheating.
23105 @end defvr
23106
23107 @deftp {Data Type} thermald-configuration
23108 Data type representing the configuration of @code{thermald-service-type}.
23109
23110 @table @asis
23111 @item @code{ignore-cpuid-check?} (default: @code{#f})
23112 Ignore cpuid check for supported CPU models.
23113
23114 @item @code{thermald} (default: @var{thermald})
23115 Package object of thermald.
23116
23117 @end table
23118 @end deftp
23119
23120 @node Audio Services
23121 @subsection Audio Services
23122
23123 The @code{(gnu services audio)} module provides a service to start MPD
23124 (the Music Player Daemon).
23125
23126 @cindex mpd
23127 @subsubheading Music Player Daemon
23128
23129 The Music Player Daemon (MPD) is a service that can play music while
23130 being controlled from the local machine or over the network by a variety
23131 of clients.
23132
23133 The following example shows how one might run @code{mpd} as user
23134 @code{"bob"} on port @code{6666}. It uses pulseaudio for output.
23135
23136 @lisp
23137 (service mpd-service-type
23138 (mpd-configuration
23139 (user "bob")
23140 (port "6666")))
23141 @end lisp
23142
23143 @defvr {Scheme Variable} mpd-service-type
23144 The service type for @command{mpd}
23145 @end defvr
23146
23147 @deftp {Data Type} mpd-configuration
23148 Data type representing the configuration of @command{mpd}.
23149
23150 @table @asis
23151 @item @code{user} (default: @code{"mpd"})
23152 The user to run mpd as.
23153
23154 @item @code{music-dir} (default: @code{"~/Music"})
23155 The directory to scan for music files.
23156
23157 @item @code{playlist-dir} (default: @code{"~/.mpd/playlists"})
23158 The directory to store playlists.
23159
23160 @item @code{db-file} (default: @code{"~/.mpd/tag_cache"})
23161 The location of the music database.
23162
23163 @item @code{state-file} (default: @code{"~/.mpd/state"})
23164 The location of the file that stores current MPD's state.
23165
23166 @item @code{sticker-file} (default: @code{"~/.mpd/sticker.sql"})
23167 The location of the sticker database.
23168
23169 @item @code{port} (default: @code{"6600"})
23170 The port to run mpd on.
23171
23172 @item @code{address} (default: @code{"any"})
23173 The address that mpd will bind to. To use a Unix domain socket,
23174 an absolute path can be specified here.
23175
23176 @item @code{outputs} (default: @code{"(list (mpd-output))"})
23177 The audio outputs that MPD can use. By default this is a single output using pulseaudio.
23178
23179 @end table
23180 @end deftp
23181
23182 @deftp {Data Type} mpd-output
23183 Data type representing an @command{mpd} audio output.
23184
23185 @table @asis
23186 @item @code{name} (default: @code{"MPD"})
23187 The name of the audio output.
23188
23189 @item @code{type} (default: @code{"pulse"})
23190 The type of audio output.
23191
23192 @item @code{enabled?} (default: @code{#t})
23193 Specifies whether this audio output is enabled when MPD is started. By
23194 default, all audio outputs are enabled. This is just the default
23195 setting when there is no state file; with a state file, the previous
23196 state is restored.
23197
23198 @item @code{tags?} (default: @code{#t})
23199 If set to @code{#f}, then MPD will not send tags to this output. This
23200 is only useful for output plugins that can receive tags, for example the
23201 @code{httpd} output plugin.
23202
23203 @item @code{always-on?} (default: @code{#f})
23204 If set to @code{#t}, then MPD attempts to keep this audio output always
23205 open. This may be useful for streaming servers, when you don’t want to
23206 disconnect all listeners even when playback is accidentally stopped.
23207
23208 @item @code{mixer-type}
23209 This field accepts a symbol that specifies which mixer should be used
23210 for this audio output: the @code{hardware} mixer, the @code{software}
23211 mixer, the @code{null} mixer (allows setting the volume, but with no
23212 effect; this can be used as a trick to implement an external mixer
23213 External Mixer) or no mixer (@code{none}).
23214
23215 @item @code{extra-options} (default: @code{'()"})
23216 An association list of option symbols to string values to be appended to
23217 the audio output configuration.
23218
23219 @end table
23220 @end deftp
23221
23222 The following example shows a configuration of @code{mpd} that provides
23223 an HTTP audio streaming output.
23224
23225 @lisp
23226 (service mpd-service-type
23227 (mpd-configuration
23228 (outputs
23229 (list (mpd-output
23230 (name "streaming")
23231 (type "httpd")
23232 (mixer-type 'null)
23233 (extra-options
23234 `((encoder . "vorbis")
23235 (port . "8080"))))))))
23236 @end lisp
23237
23238
23239 @node Virtualization Services
23240 @subsection Virtualization services
23241
23242 The @code{(gnu services virtualization)} module provides services for
23243 the libvirt and virtlog daemons, as well as other virtualization-related
23244 services.
23245
23246 @subsubheading Libvirt daemon
23247 @code{libvirtd} is the server side daemon component of the libvirt
23248 virtualization management system. This daemon runs on host servers
23249 and performs required management tasks for virtualized guests.
23250
23251 @deffn {Scheme Variable} libvirt-service-type
23252 This is the type of the @uref{https://libvirt.org, libvirt daemon}.
23253 Its value must be a @code{libvirt-configuration}.
23254
23255 @lisp
23256 (service libvirt-service-type
23257 (libvirt-configuration
23258 (unix-sock-group "libvirt")
23259 (tls-port "16555")))
23260 @end lisp
23261 @end deffn
23262
23263 @c Auto-generated with (generate-libvirt-documentation)
23264 Available @code{libvirt-configuration} fields are:
23265
23266 @deftypevr {@code{libvirt-configuration} parameter} package libvirt
23267 Libvirt package.
23268
23269 @end deftypevr
23270
23271 @deftypevr {@code{libvirt-configuration} parameter} boolean listen-tls?
23272 Flag listening for secure TLS connections on the public TCP/IP port.
23273 must set @code{listen} for this to have any effect.
23274
23275 It is necessary to setup a CA and issue server certificates before using
23276 this capability.
23277
23278 Defaults to @samp{#t}.
23279
23280 @end deftypevr
23281
23282 @deftypevr {@code{libvirt-configuration} parameter} boolean listen-tcp?
23283 Listen for unencrypted TCP connections on the public TCP/IP port. must
23284 set @code{listen} for this to have any effect.
23285
23286 Using the TCP socket requires SASL authentication by default. Only SASL
23287 mechanisms which support data encryption are allowed. This is
23288 DIGEST_MD5 and GSSAPI (Kerberos5)
23289
23290 Defaults to @samp{#f}.
23291
23292 @end deftypevr
23293
23294 @deftypevr {@code{libvirt-configuration} parameter} string tls-port
23295 Port for accepting secure TLS connections This can be a port number, or
23296 service name
23297
23298 Defaults to @samp{"16514"}.
23299
23300 @end deftypevr
23301
23302 @deftypevr {@code{libvirt-configuration} parameter} string tcp-port
23303 Port for accepting insecure TCP connections This can be a port number,
23304 or service name
23305
23306 Defaults to @samp{"16509"}.
23307
23308 @end deftypevr
23309
23310 @deftypevr {@code{libvirt-configuration} parameter} string listen-addr
23311 IP address or hostname used for client connections.
23312
23313 Defaults to @samp{"0.0.0.0"}.
23314
23315 @end deftypevr
23316
23317 @deftypevr {@code{libvirt-configuration} parameter} boolean mdns-adv?
23318 Flag toggling mDNS advertisement of the libvirt service.
23319
23320 Alternatively can disable for all services on a host by stopping the
23321 Avahi daemon.
23322
23323 Defaults to @samp{#f}.
23324
23325 @end deftypevr
23326
23327 @deftypevr {@code{libvirt-configuration} parameter} string mdns-name
23328 Default mDNS advertisement name. This must be unique on the immediate
23329 broadcast network.
23330
23331 Defaults to @samp{"Virtualization Host <hostname>"}.
23332
23333 @end deftypevr
23334
23335 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-group
23336 UNIX domain socket group ownership. This can be used to allow a
23337 'trusted' set of users access to management capabilities without
23338 becoming root.
23339
23340 Defaults to @samp{"root"}.
23341
23342 @end deftypevr
23343
23344 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-ro-perms
23345 UNIX socket permissions for the R/O socket. This is used for monitoring
23346 VM status only.
23347
23348 Defaults to @samp{"0777"}.
23349
23350 @end deftypevr
23351
23352 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-rw-perms
23353 UNIX socket permissions for the R/W socket. Default allows only root.
23354 If PolicyKit is enabled on the socket, the default will change to allow
23355 everyone (eg, 0777)
23356
23357 Defaults to @samp{"0770"}.
23358
23359 @end deftypevr
23360
23361 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-admin-perms
23362 UNIX socket permissions for the admin socket. Default allows only owner
23363 (root), do not change it unless you are sure to whom you are exposing
23364 the access to.
23365
23366 Defaults to @samp{"0777"}.
23367
23368 @end deftypevr
23369
23370 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-dir
23371 The directory in which sockets will be found/created.
23372
23373 Defaults to @samp{"/var/run/libvirt"}.
23374
23375 @end deftypevr
23376
23377 @deftypevr {@code{libvirt-configuration} parameter} string auth-unix-ro
23378 Authentication scheme for UNIX read-only sockets. By default socket
23379 permissions allow anyone to connect
23380
23381 Defaults to @samp{"polkit"}.
23382
23383 @end deftypevr
23384
23385 @deftypevr {@code{libvirt-configuration} parameter} string auth-unix-rw
23386 Authentication scheme for UNIX read-write sockets. By default socket
23387 permissions only allow root. If PolicyKit support was compiled into
23388 libvirt, the default will be to use 'polkit' auth.
23389
23390 Defaults to @samp{"polkit"}.
23391
23392 @end deftypevr
23393
23394 @deftypevr {@code{libvirt-configuration} parameter} string auth-tcp
23395 Authentication scheme for TCP sockets. If you don't enable SASL, then
23396 all TCP traffic is cleartext. Don't do this outside of a dev/test
23397 scenario.
23398
23399 Defaults to @samp{"sasl"}.
23400
23401 @end deftypevr
23402
23403 @deftypevr {@code{libvirt-configuration} parameter} string auth-tls
23404 Authentication scheme for TLS sockets. TLS sockets already have
23405 encryption provided by the TLS layer, and limited authentication is done
23406 by certificates.
23407
23408 It is possible to make use of any SASL authentication mechanism as well,
23409 by using 'sasl' for this option
23410
23411 Defaults to @samp{"none"}.
23412
23413 @end deftypevr
23414
23415 @deftypevr {@code{libvirt-configuration} parameter} optional-list access-drivers
23416 API access control scheme.
23417
23418 By default an authenticated user is allowed access to all APIs. Access
23419 drivers can place restrictions on this.
23420
23421 Defaults to @samp{()}.
23422
23423 @end deftypevr
23424
23425 @deftypevr {@code{libvirt-configuration} parameter} string key-file
23426 Server key file path. If set to an empty string, then no private key is
23427 loaded.
23428
23429 Defaults to @samp{""}.
23430
23431 @end deftypevr
23432
23433 @deftypevr {@code{libvirt-configuration} parameter} string cert-file
23434 Server key file path. If set to an empty string, then no certificate is
23435 loaded.
23436
23437 Defaults to @samp{""}.
23438
23439 @end deftypevr
23440
23441 @deftypevr {@code{libvirt-configuration} parameter} string ca-file
23442 Server key file path. If set to an empty string, then no CA certificate
23443 is loaded.
23444
23445 Defaults to @samp{""}.
23446
23447 @end deftypevr
23448
23449 @deftypevr {@code{libvirt-configuration} parameter} string crl-file
23450 Certificate revocation list path. If set to an empty string, then no
23451 CRL is loaded.
23452
23453 Defaults to @samp{""}.
23454
23455 @end deftypevr
23456
23457 @deftypevr {@code{libvirt-configuration} parameter} boolean tls-no-sanity-cert
23458 Disable verification of our own server certificates.
23459
23460 When libvirtd starts it performs some sanity checks against its own
23461 certificates.
23462
23463 Defaults to @samp{#f}.
23464
23465 @end deftypevr
23466
23467 @deftypevr {@code{libvirt-configuration} parameter} boolean tls-no-verify-cert
23468 Disable verification of client certificates.
23469
23470 Client certificate verification is the primary authentication mechanism.
23471 Any client which does not present a certificate signed by the CA will be
23472 rejected.
23473
23474 Defaults to @samp{#f}.
23475
23476 @end deftypevr
23477
23478 @deftypevr {@code{libvirt-configuration} parameter} optional-list tls-allowed-dn-list
23479 Whitelist of allowed x509 Distinguished Name.
23480
23481 Defaults to @samp{()}.
23482
23483 @end deftypevr
23484
23485 @deftypevr {@code{libvirt-configuration} parameter} optional-list sasl-allowed-usernames
23486 Whitelist of allowed SASL usernames. The format for username depends on
23487 the SASL authentication mechanism.
23488
23489 Defaults to @samp{()}.
23490
23491 @end deftypevr
23492
23493 @deftypevr {@code{libvirt-configuration} parameter} string tls-priority
23494 Override the compile time default TLS priority string. The default is
23495 usually "NORMAL" unless overridden at build time. Only set this is it
23496 is desired for libvirt to deviate from the global default settings.
23497
23498 Defaults to @samp{"NORMAL"}.
23499
23500 @end deftypevr
23501
23502 @deftypevr {@code{libvirt-configuration} parameter} integer max-clients
23503 Maximum number of concurrent client connections to allow over all
23504 sockets combined.
23505
23506 Defaults to @samp{5000}.
23507
23508 @end deftypevr
23509
23510 @deftypevr {@code{libvirt-configuration} parameter} integer max-queued-clients
23511 Maximum length of queue of connections waiting to be accepted by the
23512 daemon. Note, that some protocols supporting retransmission may obey
23513 this so that a later reattempt at connection succeeds.
23514
23515 Defaults to @samp{1000}.
23516
23517 @end deftypevr
23518
23519 @deftypevr {@code{libvirt-configuration} parameter} integer max-anonymous-clients
23520 Maximum length of queue of accepted but not yet authenticated clients.
23521 Set this to zero to turn this feature off
23522
23523 Defaults to @samp{20}.
23524
23525 @end deftypevr
23526
23527 @deftypevr {@code{libvirt-configuration} parameter} integer min-workers
23528 Number of workers to start up initially.
23529
23530 Defaults to @samp{5}.
23531
23532 @end deftypevr
23533
23534 @deftypevr {@code{libvirt-configuration} parameter} integer max-workers
23535 Maximum number of worker threads.
23536
23537 If the number of active clients exceeds @code{min-workers}, then more
23538 threads are spawned, up to max_workers limit. Typically you'd want
23539 max_workers to equal maximum number of clients allowed.
23540
23541 Defaults to @samp{20}.
23542
23543 @end deftypevr
23544
23545 @deftypevr {@code{libvirt-configuration} parameter} integer prio-workers
23546 Number of priority workers. If all workers from above pool are stuck,
23547 some calls marked as high priority (notably domainDestroy) can be
23548 executed in this pool.
23549
23550 Defaults to @samp{5}.
23551
23552 @end deftypevr
23553
23554 @deftypevr {@code{libvirt-configuration} parameter} integer max-requests
23555 Total global limit on concurrent RPC calls.
23556
23557 Defaults to @samp{20}.
23558
23559 @end deftypevr
23560
23561 @deftypevr {@code{libvirt-configuration} parameter} integer max-client-requests
23562 Limit on concurrent requests from a single client connection. To avoid
23563 one client monopolizing the server this should be a small fraction of
23564 the global max_requests and max_workers parameter.
23565
23566 Defaults to @samp{5}.
23567
23568 @end deftypevr
23569
23570 @deftypevr {@code{libvirt-configuration} parameter} integer admin-min-workers
23571 Same as @code{min-workers} but for the admin interface.
23572
23573 Defaults to @samp{1}.
23574
23575 @end deftypevr
23576
23577 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-workers
23578 Same as @code{max-workers} but for the admin interface.
23579
23580 Defaults to @samp{5}.
23581
23582 @end deftypevr
23583
23584 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-clients
23585 Same as @code{max-clients} but for the admin interface.
23586
23587 Defaults to @samp{5}.
23588
23589 @end deftypevr
23590
23591 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-queued-clients
23592 Same as @code{max-queued-clients} but for the admin interface.
23593
23594 Defaults to @samp{5}.
23595
23596 @end deftypevr
23597
23598 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-client-requests
23599 Same as @code{max-client-requests} but for the admin interface.
23600
23601 Defaults to @samp{5}.
23602
23603 @end deftypevr
23604
23605 @deftypevr {@code{libvirt-configuration} parameter} integer log-level
23606 Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
23607
23608 Defaults to @samp{3}.
23609
23610 @end deftypevr
23611
23612 @deftypevr {@code{libvirt-configuration} parameter} string log-filters
23613 Logging filters.
23614
23615 A filter allows to select a different logging level for a given category
23616 of logs The format for a filter is one of:
23617
23618 @itemize @bullet
23619 @item
23620 x:name
23621
23622 @item
23623 x:+name
23624
23625 @end itemize
23626
23627 where @code{name} is a string which is matched against the category
23628 given in the @code{VIR_LOG_INIT()} at the top of each libvirt source
23629 file, e.g., "remote", "qemu", or "util.json" (the name in the filter can
23630 be a substring of the full category name, in order to match multiple
23631 similar categories), the optional "+" prefix tells libvirt to log stack
23632 trace for each message matching name, and @code{x} is the minimal level
23633 where matching messages should be logged:
23634
23635 @itemize @bullet
23636 @item
23637 1: DEBUG
23638
23639 @item
23640 2: INFO
23641
23642 @item
23643 3: WARNING
23644
23645 @item
23646 4: ERROR
23647
23648 @end itemize
23649
23650 Multiple filters can be defined in a single filters statement, they just
23651 need to be separated by spaces.
23652
23653 Defaults to @samp{"3:remote 4:event"}.
23654
23655 @end deftypevr
23656
23657 @deftypevr {@code{libvirt-configuration} parameter} string log-outputs
23658 Logging outputs.
23659
23660 An output is one of the places to save logging information. The format
23661 for an output can be:
23662
23663 @table @code
23664 @item x:stderr
23665 output goes to stderr
23666
23667 @item x:syslog:name
23668 use syslog for the output and use the given name as the ident
23669
23670 @item x:file:file_path
23671 output to a file, with the given filepath
23672
23673 @item x:journald
23674 output to journald logging system
23675
23676 @end table
23677
23678 In all case the x prefix is the minimal level, acting as a filter
23679
23680 @itemize @bullet
23681 @item
23682 1: DEBUG
23683
23684 @item
23685 2: INFO
23686
23687 @item
23688 3: WARNING
23689
23690 @item
23691 4: ERROR
23692
23693 @end itemize
23694
23695 Multiple outputs can be defined, they just need to be separated by
23696 spaces.
23697
23698 Defaults to @samp{"3:stderr"}.
23699
23700 @end deftypevr
23701
23702 @deftypevr {@code{libvirt-configuration} parameter} integer audit-level
23703 Allows usage of the auditing subsystem to be altered
23704
23705 @itemize @bullet
23706 @item
23707 0: disable all auditing
23708
23709 @item
23710 1: enable auditing, only if enabled on host
23711
23712 @item
23713 2: enable auditing, and exit if disabled on host.
23714
23715 @end itemize
23716
23717 Defaults to @samp{1}.
23718
23719 @end deftypevr
23720
23721 @deftypevr {@code{libvirt-configuration} parameter} boolean audit-logging
23722 Send audit messages via libvirt logging infrastructure.
23723
23724 Defaults to @samp{#f}.
23725
23726 @end deftypevr
23727
23728 @deftypevr {@code{libvirt-configuration} parameter} optional-string host-uuid
23729 Host UUID. UUID must not have all digits be the same.
23730
23731 Defaults to @samp{""}.
23732
23733 @end deftypevr
23734
23735 @deftypevr {@code{libvirt-configuration} parameter} string host-uuid-source
23736 Source to read host UUID.
23737
23738 @itemize @bullet
23739 @item
23740 @code{smbios}: fetch the UUID from @code{dmidecode -s system-uuid}
23741
23742 @item
23743 @code{machine-id}: fetch the UUID from @code{/etc/machine-id}
23744
23745 @end itemize
23746
23747 If @code{dmidecode} does not provide a valid UUID a temporary UUID will
23748 be generated.
23749
23750 Defaults to @samp{"smbios"}.
23751
23752 @end deftypevr
23753
23754 @deftypevr {@code{libvirt-configuration} parameter} integer keepalive-interval
23755 A keepalive message is sent to a client after @code{keepalive_interval}
23756 seconds of inactivity to check if the client is still responding. If
23757 set to -1, libvirtd will never send keepalive requests; however clients
23758 can still send them and the daemon will send responses.
23759
23760 Defaults to @samp{5}.
23761
23762 @end deftypevr
23763
23764 @deftypevr {@code{libvirt-configuration} parameter} integer keepalive-count
23765 Maximum number of keepalive messages that are allowed to be sent to the
23766 client without getting any response before the connection is considered
23767 broken.
23768
23769 In other words, the connection is automatically closed approximately
23770 after @code{keepalive_interval * (keepalive_count + 1)} seconds since
23771 the last message received from the client. When @code{keepalive-count}
23772 is set to 0, connections will be automatically closed after
23773 @code{keepalive-interval} seconds of inactivity without sending any
23774 keepalive messages.
23775
23776 Defaults to @samp{5}.
23777
23778 @end deftypevr
23779
23780 @deftypevr {@code{libvirt-configuration} parameter} integer admin-keepalive-interval
23781 Same as above but for admin interface.
23782
23783 Defaults to @samp{5}.
23784
23785 @end deftypevr
23786
23787 @deftypevr {@code{libvirt-configuration} parameter} integer admin-keepalive-count
23788 Same as above but for admin interface.
23789
23790 Defaults to @samp{5}.
23791
23792 @end deftypevr
23793
23794 @deftypevr {@code{libvirt-configuration} parameter} integer ovs-timeout
23795 Timeout for Open vSwitch calls.
23796
23797 The @code{ovs-vsctl} utility is used for the configuration and its
23798 timeout option is set by default to 5 seconds to avoid potential
23799 infinite waits blocking libvirt.
23800
23801 Defaults to @samp{5}.
23802
23803 @end deftypevr
23804
23805 @c %end of autogenerated docs
23806
23807 @subsubheading Virtlog daemon
23808 The virtlogd service is a server side daemon component of libvirt that is
23809 used to manage logs from virtual machine consoles.
23810
23811 This daemon is not used directly by libvirt client applications, rather it
23812 is called on their behalf by @code{libvirtd}. By maintaining the logs in a
23813 standalone daemon, the main @code{libvirtd} daemon can be restarted without
23814 risk of losing logs. The @code{virtlogd} daemon has the ability to re-exec()
23815 itself upon receiving @code{SIGUSR1}, to allow live upgrades without downtime.
23816
23817 @deffn {Scheme Variable} virtlog-service-type
23818 This is the type of the virtlog daemon.
23819 Its value must be a @code{virtlog-configuration}.
23820
23821 @lisp
23822 (service virtlog-service-type
23823 (virtlog-configuration
23824 (max-clients 1000)))
23825 @end lisp
23826 @end deffn
23827
23828 @deftypevr {@code{virtlog-configuration} parameter} integer log-level
23829 Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
23830
23831 Defaults to @samp{3}.
23832
23833 @end deftypevr
23834
23835 @deftypevr {@code{virtlog-configuration} parameter} string log-filters
23836 Logging filters.
23837
23838 A filter allows to select a different logging level for a given category
23839 of logs The format for a filter is one of:
23840
23841 @itemize @bullet
23842 @item
23843 x:name
23844
23845 @item
23846 x:+name
23847
23848 @end itemize
23849
23850 where @code{name} is a string which is matched against the category
23851 given in the @code{VIR_LOG_INIT()} at the top of each libvirt source
23852 file, e.g., "remote", "qemu", or "util.json" (the name in the filter can
23853 be a substring of the full category name, in order to match multiple
23854 similar categories), the optional "+" prefix tells libvirt to log stack
23855 trace for each message matching name, and @code{x} is the minimal level
23856 where matching messages should be logged:
23857
23858 @itemize @bullet
23859 @item
23860 1: DEBUG
23861
23862 @item
23863 2: INFO
23864
23865 @item
23866 3: WARNING
23867
23868 @item
23869 4: ERROR
23870
23871 @end itemize
23872
23873 Multiple filters can be defined in a single filters statement, they just
23874 need to be separated by spaces.
23875
23876 Defaults to @samp{"3:remote 4:event"}.
23877
23878 @end deftypevr
23879
23880 @deftypevr {@code{virtlog-configuration} parameter} string log-outputs
23881 Logging outputs.
23882
23883 An output is one of the places to save logging information The format
23884 for an output can be:
23885
23886 @table @code
23887 @item x:stderr
23888 output goes to stderr
23889
23890 @item x:syslog:name
23891 use syslog for the output and use the given name as the ident
23892
23893 @item x:file:file_path
23894 output to a file, with the given filepath
23895
23896 @item x:journald
23897 output to journald logging system
23898
23899 @end table
23900
23901 In all case the x prefix is the minimal level, acting as a filter
23902
23903 @itemize @bullet
23904 @item
23905 1: DEBUG
23906
23907 @item
23908 2: INFO
23909
23910 @item
23911 3: WARNING
23912
23913 @item
23914 4: ERROR
23915
23916 @end itemize
23917
23918 Multiple outputs can be defined, they just need to be separated by
23919 spaces.
23920
23921 Defaults to @samp{"3:stderr"}.
23922
23923 @end deftypevr
23924
23925 @deftypevr {@code{virtlog-configuration} parameter} integer max-clients
23926 Maximum number of concurrent client connections to allow over all
23927 sockets combined.
23928
23929 Defaults to @samp{1024}.
23930
23931 @end deftypevr
23932
23933 @deftypevr {@code{virtlog-configuration} parameter} integer max-size
23934 Maximum file size before rolling over.
23935
23936 Defaults to @samp{2MB}
23937
23938 @end deftypevr
23939
23940 @deftypevr {@code{virtlog-configuration} parameter} integer max-backups
23941 Maximum number of backup files to keep.
23942
23943 Defaults to @samp{3}
23944
23945 @end deftypevr
23946
23947 @subsubheading Transparent Emulation with QEMU
23948
23949 @cindex emulation
23950 @cindex @code{binfmt_misc}
23951 @code{qemu-binfmt-service-type} provides support for transparent
23952 emulation of program binaries built for different architectures---e.g.,
23953 it allows you to transparently execute an ARMv7 program on an x86_64
23954 machine. It achieves this by combining the @uref{https://www.qemu.org,
23955 QEMU} emulator and the @code{binfmt_misc} feature of the kernel Linux.
23956
23957 @defvr {Scheme Variable} qemu-binfmt-service-type
23958 This is the type of the QEMU/binfmt service for transparent emulation.
23959 Its value must be a @code{qemu-binfmt-configuration} object, which
23960 specifies the QEMU package to use as well as the architecture we want to
23961 emulated:
23962
23963 @lisp
23964 (service qemu-binfmt-service-type
23965 (qemu-binfmt-configuration
23966 (platforms (lookup-qemu-platforms "arm" "aarch64" "mips64el"))))
23967 @end lisp
23968
23969 In this example, we enable transparent emulation for the ARM and aarch64
23970 platforms. Running @code{herd stop qemu-binfmt} turns it off, and
23971 running @code{herd start qemu-binfmt} turns it back on (@pxref{Invoking
23972 herd, the @command{herd} command,, shepherd, The GNU Shepherd Manual}).
23973 @end defvr
23974
23975 @deftp {Data Type} qemu-binfmt-configuration
23976 This is the configuration for the @code{qemu-binfmt} service.
23977
23978 @table @asis
23979 @item @code{platforms} (default: @code{'()})
23980 The list of emulated QEMU platforms. Each item must be a @dfn{platform
23981 object} as returned by @code{lookup-qemu-platforms} (see below).
23982
23983 @item @code{guix-support?} (default: @code{#f})
23984 When it is true, QEMU and all its dependencies are added to the build
23985 environment of @command{guix-daemon} (@pxref{Invoking guix-daemon,
23986 @code{--chroot-directory} option}). This allows the @code{binfmt_misc}
23987 handlers to be used within the build environment, which in turn means
23988 that you can transparently build programs for another architecture.
23989
23990 For example, let's suppose you're on an x86_64 machine and you have this
23991 service:
23992
23993 @lisp
23994 (service qemu-binfmt-service-type
23995 (qemu-binfmt-configuration
23996 (platforms (lookup-qemu-platforms "arm"))
23997 (guix-support? #t)))
23998 @end lisp
23999
24000 You can run:
24001
24002 @example
24003 guix build -s armhf-linux inkscape
24004 @end example
24005
24006 @noindent
24007 and it will build Inkscape for ARMv7 @emph{as if it were a native
24008 build}, transparently using QEMU to emulate the ARMv7 CPU. Pretty handy
24009 if you'd like to test a package build for an architecture you don't have
24010 access to!
24011
24012 @item @code{qemu} (default: @code{qemu})
24013 The QEMU package to use.
24014 @end table
24015 @end deftp
24016
24017 @deffn {Scheme Procedure} lookup-qemu-platforms @var{platforms}@dots{}
24018 Return the list of QEMU platform objects corresponding to
24019 @var{platforms}@dots{}. @var{platforms} must be a list of strings
24020 corresponding to platform names, such as @code{"arm"}, @code{"sparc"},
24021 @code{"mips64el"}, and so on.
24022 @end deffn
24023
24024 @deffn {Scheme Procedure} qemu-platform? @var{obj}
24025 Return true if @var{obj} is a platform object.
24026 @end deffn
24027
24028 @deffn {Scheme Procedure} qemu-platform-name @var{platform}
24029 Return the name of @var{platform}---a string such as @code{"arm"}.
24030 @end deffn
24031
24032 @node Version Control Services
24033 @subsection Version Control Services
24034
24035 The @code{(gnu services version-control)} module provides a service to
24036 allow remote access to local Git repositories. There are three options:
24037 the @code{git-daemon-service}, which provides access to repositories via
24038 the @code{git://} unsecured TCP-based protocol, extending the
24039 @code{nginx} web server to proxy some requests to
24040 @code{git-http-backend}, or providing a web interface with
24041 @code{cgit-service-type}.
24042
24043 @deffn {Scheme Procedure} git-daemon-service [#:config (git-daemon-configuration)]
24044
24045 Return a service that runs @command{git daemon}, a simple TCP server to
24046 expose repositories over the Git protocol for anonymous access.
24047
24048 The optional @var{config} argument should be a
24049 @code{<git-daemon-configuration>} object, by default it allows read-only
24050 access to exported@footnote{By creating the magic file
24051 "git-daemon-export-ok" in the repository directory.} repositories under
24052 @file{/srv/git}.
24053
24054 @end deffn
24055
24056 @deftp {Data Type} git-daemon-configuration
24057 Data type representing the configuration for @code{git-daemon-service}.
24058
24059 @table @asis
24060 @item @code{package} (default: @var{git})
24061 Package object of the Git distributed version control system.
24062
24063 @item @code{export-all?} (default: @var{#f})
24064 Whether to allow access for all Git repositories, even if they do not
24065 have the @file{git-daemon-export-ok} file.
24066
24067 @item @code{base-path} (default: @file{/srv/git})
24068 Whether to remap all the path requests as relative to the given path.
24069 If you run git daemon with @var{(base-path "/srv/git")} on example.com,
24070 then if you later try to pull @code{git://example.com/hello.git}, git
24071 daemon will interpret the path as @code{/srv/git/hello.git}.
24072
24073 @item @code{user-path} (default: @var{#f})
24074 Whether to allow @code{~user} notation to be used in requests. When
24075 specified with empty string, requests to @code{git://host/~alice/foo} is
24076 taken as a request to access @code{foo} repository in the home directory
24077 of user @code{alice}. If @var{(user-path "path")} is specified, the
24078 same request is taken as a request to access @code{path/foo} repository
24079 in the home directory of user @code{alice}.
24080
24081 @item @code{listen} (default: @var{'()})
24082 Whether to listen on specific IP addresses or hostnames, defaults to
24083 all.
24084
24085 @item @code{port} (default: @var{#f})
24086 Whether to listen on an alternative port, which defaults to 9418.
24087
24088 @item @code{whitelist} (default: @var{'()})
24089 If not empty, only allow access to this list of directories.
24090
24091 @item @code{extra-options} (default: @var{'()})
24092 Extra options will be passed to @code{git daemon}, please run
24093 @command{man git-daemon} for more information.
24094
24095 @end table
24096 @end deftp
24097
24098 The @code{git://} protocol lacks authentication. When you pull from a
24099 repository fetched via @code{git://}, you don't know whether the data you
24100 receive was modified or is even coming from the specified host, and your
24101 connection is subject to eavesdropping. It's better to use an authenticated
24102 and encrypted transport, such as @code{https}. Although Git allows you
24103 to serve repositories using unsophisticated file-based web servers,
24104 there is a faster protocol implemented by the @code{git-http-backend}
24105 program. This program is the back-end of a proper Git web service. It
24106 is designed to sit behind a FastCGI proxy. @xref{Web Services}, for more
24107 on running the necessary @code{fcgiwrap} daemon.
24108
24109 Guix has a separate configuration data type for serving Git repositories
24110 over HTTP.
24111
24112 @deftp {Data Type} git-http-configuration
24113 Data type representing the configuration for @code{git-http-service}.
24114
24115 @table @asis
24116 @item @code{package} (default: @var{git})
24117 Package object of the Git distributed version control system.
24118
24119 @item @code{git-root} (default: @file{/srv/git})
24120 Directory containing the Git repositories to expose to the world.
24121
24122 @item @code{export-all?} (default: @var{#f})
24123 Whether to expose access for all Git repositories in @var{git-root},
24124 even if they do not have the @file{git-daemon-export-ok} file.
24125
24126 @item @code{uri-path} (default: @file{/git/})
24127 Path prefix for Git access. With the default @code{/git/} prefix, this
24128 will map @code{http://@var{server}/git/@var{repo}.git} to
24129 @code{/srv/git/@var{repo}.git}. Requests whose URI paths do not begin
24130 with this prefix are not passed on to this Git instance.
24131
24132 @item @code{fcgiwrap-socket} (default: @code{127.0.0.1:9000})
24133 The socket on which the @code{fcgiwrap} daemon is listening. @xref{Web
24134 Services}.
24135 @end table
24136 @end deftp
24137
24138 There is no @code{git-http-service-type}, currently; instead you can
24139 create an @code{nginx-location-configuration} from a
24140 @code{git-http-configuration} and then add that location to a web
24141 server.
24142
24143 @deffn {Scheme Procedure} git-http-nginx-location-configuration @
24144 [config=(git-http-configuration)]
24145 Compute an @code{nginx-location-configuration} that corresponds to the
24146 given Git http configuration. An example nginx service definition to
24147 serve the default @file{/srv/git} over HTTPS might be:
24148
24149 @lisp
24150 (service nginx-service-type
24151 (nginx-configuration
24152 (server-blocks
24153 (list
24154 (nginx-server-configuration
24155 (listen '("443 ssl"))
24156 (server-name "git.my-host.org")
24157 (ssl-certificate
24158 "/etc/letsencrypt/live/git.my-host.org/fullchain.pem")
24159 (ssl-certificate-key
24160 "/etc/letsencrypt/live/git.my-host.org/privkey.pem")
24161 (locations
24162 (list
24163 (git-http-nginx-location-configuration
24164 (git-http-configuration (uri-path "/"))))))))))
24165 @end lisp
24166
24167 This example assumes that you are using Let's Encrypt to get your TLS
24168 certificate. @xref{Certificate Services}. The default @code{certbot}
24169 service will redirect all HTTP traffic on @code{git.my-host.org} to
24170 HTTPS. You will also need to add an @code{fcgiwrap} proxy to your
24171 system services. @xref{Web Services}.
24172 @end deffn
24173
24174 @subsubheading Cgit Service
24175
24176 @cindex Cgit service
24177 @cindex Git, web interface
24178 @uref{https://git.zx2c4.com/cgit/, Cgit} is a web frontend for Git
24179 repositories written in C.
24180
24181 The following example will configure the service with default values.
24182 By default, Cgit can be accessed on port 80 (@code{http://localhost:80}).
24183
24184 @lisp
24185 (service cgit-service-type)
24186 @end lisp
24187
24188 The @code{file-object} type designates either a file-like object
24189 (@pxref{G-Expressions, file-like objects}) or a string.
24190
24191 @c %start of fragment
24192
24193 Available @code{cgit-configuration} fields are:
24194
24195 @deftypevr {@code{cgit-configuration} parameter} package package
24196 The CGIT package.
24197
24198 @end deftypevr
24199
24200 @deftypevr {@code{cgit-configuration} parameter} nginx-server-configuration-list nginx
24201 NGINX configuration.
24202
24203 @end deftypevr
24204
24205 @deftypevr {@code{cgit-configuration} parameter} file-object about-filter
24206 Specifies a command which will be invoked to format the content of about
24207 pages (both top-level and for each repository).
24208
24209 Defaults to @samp{""}.
24210
24211 @end deftypevr
24212
24213 @deftypevr {@code{cgit-configuration} parameter} string agefile
24214 Specifies a path, relative to each repository path, which can be used to
24215 specify the date and time of the youngest commit in the repository.
24216
24217 Defaults to @samp{""}.
24218
24219 @end deftypevr
24220
24221 @deftypevr {@code{cgit-configuration} parameter} file-object auth-filter
24222 Specifies a command that will be invoked for authenticating repository
24223 access.
24224
24225 Defaults to @samp{""}.
24226
24227 @end deftypevr
24228
24229 @deftypevr {@code{cgit-configuration} parameter} string branch-sort
24230 Flag which, when set to @samp{age}, enables date ordering in the branch
24231 ref list, and when set @samp{name} enables ordering by branch name.
24232
24233 Defaults to @samp{"name"}.
24234
24235 @end deftypevr
24236
24237 @deftypevr {@code{cgit-configuration} parameter} string cache-root
24238 Path used to store the cgit cache entries.
24239
24240 Defaults to @samp{"/var/cache/cgit"}.
24241
24242 @end deftypevr
24243
24244 @deftypevr {@code{cgit-configuration} parameter} integer cache-static-ttl
24245 Number which specifies the time-to-live, in minutes, for the cached
24246 version of repository pages accessed with a fixed SHA1.
24247
24248 Defaults to @samp{-1}.
24249
24250 @end deftypevr
24251
24252 @deftypevr {@code{cgit-configuration} parameter} integer cache-dynamic-ttl
24253 Number which specifies the time-to-live, in minutes, for the cached
24254 version of repository pages accessed without a fixed SHA1.
24255
24256 Defaults to @samp{5}.
24257
24258 @end deftypevr
24259
24260 @deftypevr {@code{cgit-configuration} parameter} integer cache-repo-ttl
24261 Number which specifies the time-to-live, in minutes, for the cached
24262 version of the repository summary page.
24263
24264 Defaults to @samp{5}.
24265
24266 @end deftypevr
24267
24268 @deftypevr {@code{cgit-configuration} parameter} integer cache-root-ttl
24269 Number which specifies the time-to-live, in minutes, for the cached
24270 version of the repository index page.
24271
24272 Defaults to @samp{5}.
24273
24274 @end deftypevr
24275
24276 @deftypevr {@code{cgit-configuration} parameter} integer cache-scanrc-ttl
24277 Number which specifies the time-to-live, in minutes, for the result of
24278 scanning a path for Git repositories.
24279
24280 Defaults to @samp{15}.
24281
24282 @end deftypevr
24283
24284 @deftypevr {@code{cgit-configuration} parameter} integer cache-about-ttl
24285 Number which specifies the time-to-live, in minutes, for the cached
24286 version of the repository about page.
24287
24288 Defaults to @samp{15}.
24289
24290 @end deftypevr
24291
24292 @deftypevr {@code{cgit-configuration} parameter} integer cache-snapshot-ttl
24293 Number which specifies the time-to-live, in minutes, for the cached
24294 version of snapshots.
24295
24296 Defaults to @samp{5}.
24297
24298 @end deftypevr
24299
24300 @deftypevr {@code{cgit-configuration} parameter} integer cache-size
24301 The maximum number of entries in the cgit cache. When set to @samp{0},
24302 caching is disabled.
24303
24304 Defaults to @samp{0}.
24305
24306 @end deftypevr
24307
24308 @deftypevr {@code{cgit-configuration} parameter} boolean case-sensitive-sort?
24309 Sort items in the repo list case sensitively.
24310
24311 Defaults to @samp{#t}.
24312
24313 @end deftypevr
24314
24315 @deftypevr {@code{cgit-configuration} parameter} list clone-prefix
24316 List of common prefixes which, when combined with a repository URL,
24317 generates valid clone URLs for the repository.
24318
24319 Defaults to @samp{()}.
24320
24321 @end deftypevr
24322
24323 @deftypevr {@code{cgit-configuration} parameter} list clone-url
24324 List of @code{clone-url} templates.
24325
24326 Defaults to @samp{()}.
24327
24328 @end deftypevr
24329
24330 @deftypevr {@code{cgit-configuration} parameter} file-object commit-filter
24331 Command which will be invoked to format commit messages.
24332
24333 Defaults to @samp{""}.
24334
24335 @end deftypevr
24336
24337 @deftypevr {@code{cgit-configuration} parameter} string commit-sort
24338 Flag which, when set to @samp{date}, enables strict date ordering in the
24339 commit log, and when set to @samp{topo} enables strict topological
24340 ordering.
24341
24342 Defaults to @samp{"git log"}.
24343
24344 @end deftypevr
24345
24346 @deftypevr {@code{cgit-configuration} parameter} file-object css
24347 URL which specifies the css document to include in all cgit pages.
24348
24349 Defaults to @samp{"/share/cgit/cgit.css"}.
24350
24351 @end deftypevr
24352
24353 @deftypevr {@code{cgit-configuration} parameter} file-object email-filter
24354 Specifies a command which will be invoked to format names and email
24355 address of committers, authors, and taggers, as represented in various
24356 places throughout the cgit interface.
24357
24358 Defaults to @samp{""}.
24359
24360 @end deftypevr
24361
24362 @deftypevr {@code{cgit-configuration} parameter} boolean embedded?
24363 Flag which, when set to @samp{#t}, will make cgit generate a HTML
24364 fragment suitable for embedding in other HTML pages.
24365
24366 Defaults to @samp{#f}.
24367
24368 @end deftypevr
24369
24370 @deftypevr {@code{cgit-configuration} parameter} boolean enable-commit-graph?
24371 Flag which, when set to @samp{#t}, will make cgit print an ASCII-art
24372 commit history graph to the left of the commit messages in the
24373 repository log page.
24374
24375 Defaults to @samp{#f}.
24376
24377 @end deftypevr
24378
24379 @deftypevr {@code{cgit-configuration} parameter} boolean enable-filter-overrides?
24380 Flag which, when set to @samp{#t}, allows all filter settings to be
24381 overridden in repository-specific cgitrc files.
24382
24383 Defaults to @samp{#f}.
24384
24385 @end deftypevr
24386
24387 @deftypevr {@code{cgit-configuration} parameter} boolean enable-follow-links?
24388 Flag which, when set to @samp{#t}, allows users to follow a file in the
24389 log view.
24390
24391 Defaults to @samp{#f}.
24392
24393 @end deftypevr
24394
24395 @deftypevr {@code{cgit-configuration} parameter} boolean enable-http-clone?
24396 If set to @samp{#t}, cgit will act as an dumb HTTP endpoint for Git
24397 clones.
24398
24399 Defaults to @samp{#t}.
24400
24401 @end deftypevr
24402
24403 @deftypevr {@code{cgit-configuration} parameter} boolean enable-index-links?
24404 Flag which, when set to @samp{#t}, will make cgit generate extra links
24405 "summary", "commit", "tree" for each repo in the repository index.
24406
24407 Defaults to @samp{#f}.
24408
24409 @end deftypevr
24410
24411 @deftypevr {@code{cgit-configuration} parameter} boolean enable-index-owner?
24412 Flag which, when set to @samp{#t}, will make cgit display the owner of
24413 each repo in the repository index.
24414
24415 Defaults to @samp{#t}.
24416
24417 @end deftypevr
24418
24419 @deftypevr {@code{cgit-configuration} parameter} boolean enable-log-filecount?
24420 Flag which, when set to @samp{#t}, will make cgit print the number of
24421 modified files for each commit on the repository log page.
24422
24423 Defaults to @samp{#f}.
24424
24425 @end deftypevr
24426
24427 @deftypevr {@code{cgit-configuration} parameter} boolean enable-log-linecount?
24428 Flag which, when set to @samp{#t}, will make cgit print the number of
24429 added and removed lines for each commit on the repository log page.
24430
24431 Defaults to @samp{#f}.
24432
24433 @end deftypevr
24434
24435 @deftypevr {@code{cgit-configuration} parameter} boolean enable-remote-branches?
24436 Flag which, when set to @code{#t}, will make cgit display remote
24437 branches in the summary and refs views.
24438
24439 Defaults to @samp{#f}.
24440
24441 @end deftypevr
24442
24443 @deftypevr {@code{cgit-configuration} parameter} boolean enable-subject-links?
24444 Flag which, when set to @code{1}, will make cgit use the subject of the
24445 parent commit as link text when generating links to parent commits in
24446 commit view.
24447
24448 Defaults to @samp{#f}.
24449
24450 @end deftypevr
24451
24452 @deftypevr {@code{cgit-configuration} parameter} boolean enable-html-serving?
24453 Flag which, when set to @samp{#t}, will make cgit use the subject of the
24454 parent commit as link text when generating links to parent commits in
24455 commit view.
24456
24457 Defaults to @samp{#f}.
24458
24459 @end deftypevr
24460
24461 @deftypevr {@code{cgit-configuration} parameter} boolean enable-tree-linenumbers?
24462 Flag which, when set to @samp{#t}, will make cgit generate linenumber
24463 links for plaintext blobs printed in the tree view.
24464
24465 Defaults to @samp{#t}.
24466
24467 @end deftypevr
24468
24469 @deftypevr {@code{cgit-configuration} parameter} boolean enable-git-config?
24470 Flag which, when set to @samp{#f}, will allow cgit to use Git config to
24471 set any repo specific settings.
24472
24473 Defaults to @samp{#f}.
24474
24475 @end deftypevr
24476
24477 @deftypevr {@code{cgit-configuration} parameter} file-object favicon
24478 URL used as link to a shortcut icon for cgit.
24479
24480 Defaults to @samp{"/favicon.ico"}.
24481
24482 @end deftypevr
24483
24484 @deftypevr {@code{cgit-configuration} parameter} string footer
24485 The content of the file specified with this option will be included
24486 verbatim at the bottom of all pages (i.e.@: it replaces the standard
24487 "generated by..."@: message).
24488
24489 Defaults to @samp{""}.
24490
24491 @end deftypevr
24492
24493 @deftypevr {@code{cgit-configuration} parameter} string head-include
24494 The content of the file specified with this option will be included
24495 verbatim in the HTML HEAD section on all pages.
24496
24497 Defaults to @samp{""}.
24498
24499 @end deftypevr
24500
24501 @deftypevr {@code{cgit-configuration} parameter} string header
24502 The content of the file specified with this option will be included
24503 verbatim at the top of all pages.
24504
24505 Defaults to @samp{""}.
24506
24507 @end deftypevr
24508
24509 @deftypevr {@code{cgit-configuration} parameter} file-object include
24510 Name of a configfile to include before the rest of the current config-
24511 file is parsed.
24512
24513 Defaults to @samp{""}.
24514
24515 @end deftypevr
24516
24517 @deftypevr {@code{cgit-configuration} parameter} string index-header
24518 The content of the file specified with this option will be included
24519 verbatim above the repository index.
24520
24521 Defaults to @samp{""}.
24522
24523 @end deftypevr
24524
24525 @deftypevr {@code{cgit-configuration} parameter} string index-info
24526 The content of the file specified with this option will be included
24527 verbatim below the heading on the repository index page.
24528
24529 Defaults to @samp{""}.
24530
24531 @end deftypevr
24532
24533 @deftypevr {@code{cgit-configuration} parameter} boolean local-time?
24534 Flag which, if set to @samp{#t}, makes cgit print commit and tag times
24535 in the servers timezone.
24536
24537 Defaults to @samp{#f}.
24538
24539 @end deftypevr
24540
24541 @deftypevr {@code{cgit-configuration} parameter} file-object logo
24542 URL which specifies the source of an image which will be used as a logo
24543 on all cgit pages.
24544
24545 Defaults to @samp{"/share/cgit/cgit.png"}.
24546
24547 @end deftypevr
24548
24549 @deftypevr {@code{cgit-configuration} parameter} string logo-link
24550 URL loaded when clicking on the cgit logo image.
24551
24552 Defaults to @samp{""}.
24553
24554 @end deftypevr
24555
24556 @deftypevr {@code{cgit-configuration} parameter} file-object owner-filter
24557 Command which will be invoked to format the Owner column of the main
24558 page.
24559
24560 Defaults to @samp{""}.
24561
24562 @end deftypevr
24563
24564 @deftypevr {@code{cgit-configuration} parameter} integer max-atom-items
24565 Number of items to display in atom feeds view.
24566
24567 Defaults to @samp{10}.
24568
24569 @end deftypevr
24570
24571 @deftypevr {@code{cgit-configuration} parameter} integer max-commit-count
24572 Number of entries to list per page in "log" view.
24573
24574 Defaults to @samp{50}.
24575
24576 @end deftypevr
24577
24578 @deftypevr {@code{cgit-configuration} parameter} integer max-message-length
24579 Number of commit message characters to display in "log" view.
24580
24581 Defaults to @samp{80}.
24582
24583 @end deftypevr
24584
24585 @deftypevr {@code{cgit-configuration} parameter} integer max-repo-count
24586 Specifies the number of entries to list per page on the repository index
24587 page.
24588
24589 Defaults to @samp{50}.
24590
24591 @end deftypevr
24592
24593 @deftypevr {@code{cgit-configuration} parameter} integer max-repodesc-length
24594 Specifies the maximum number of repo description characters to display
24595 on the repository index page.
24596
24597 Defaults to @samp{80}.
24598
24599 @end deftypevr
24600
24601 @deftypevr {@code{cgit-configuration} parameter} integer max-blob-size
24602 Specifies the maximum size of a blob to display HTML for in KBytes.
24603
24604 Defaults to @samp{0}.
24605
24606 @end deftypevr
24607
24608 @deftypevr {@code{cgit-configuration} parameter} string max-stats
24609 Maximum statistics period. Valid values are @samp{week},@samp{month},
24610 @samp{quarter} and @samp{year}.
24611
24612 Defaults to @samp{""}.
24613
24614 @end deftypevr
24615
24616 @deftypevr {@code{cgit-configuration} parameter} mimetype-alist mimetype
24617 Mimetype for the specified filename extension.
24618
24619 Defaults to @samp{((gif "image/gif") (html "text/html") (jpg
24620 "image/jpeg") (jpeg "image/jpeg") (pdf "application/pdf") (png
24621 "image/png") (svg "image/svg+xml"))}.
24622
24623 @end deftypevr
24624
24625 @deftypevr {@code{cgit-configuration} parameter} file-object mimetype-file
24626 Specifies the file to use for automatic mimetype lookup.
24627
24628 Defaults to @samp{""}.
24629
24630 @end deftypevr
24631
24632 @deftypevr {@code{cgit-configuration} parameter} string module-link
24633 Text which will be used as the formatstring for a hyperlink when a
24634 submodule is printed in a directory listing.
24635
24636 Defaults to @samp{""}.
24637
24638 @end deftypevr
24639
24640 @deftypevr {@code{cgit-configuration} parameter} boolean nocache?
24641 If set to the value @samp{#t} caching will be disabled.
24642
24643 Defaults to @samp{#f}.
24644
24645 @end deftypevr
24646
24647 @deftypevr {@code{cgit-configuration} parameter} boolean noplainemail?
24648 If set to @samp{#t} showing full author email addresses will be
24649 disabled.
24650
24651 Defaults to @samp{#f}.
24652
24653 @end deftypevr
24654
24655 @deftypevr {@code{cgit-configuration} parameter} boolean noheader?
24656 Flag which, when set to @samp{#t}, will make cgit omit the standard
24657 header on all pages.
24658
24659 Defaults to @samp{#f}.
24660
24661 @end deftypevr
24662
24663 @deftypevr {@code{cgit-configuration} parameter} project-list project-list
24664 A list of subdirectories inside of @code{repository-directory}, relative
24665 to it, that should loaded as Git repositories. An empty list means that
24666 all subdirectories will be loaded.
24667
24668 Defaults to @samp{()}.
24669
24670 @end deftypevr
24671
24672 @deftypevr {@code{cgit-configuration} parameter} file-object readme
24673 Text which will be used as default value for @code{cgit-repo-readme}.
24674
24675 Defaults to @samp{""}.
24676
24677 @end deftypevr
24678
24679 @deftypevr {@code{cgit-configuration} parameter} boolean remove-suffix?
24680 If set to @code{#t} and @code{repository-directory} is enabled, if any
24681 repositories are found with a suffix of @code{.git}, this suffix will be
24682 removed for the URL and name.
24683
24684 Defaults to @samp{#f}.
24685
24686 @end deftypevr
24687
24688 @deftypevr {@code{cgit-configuration} parameter} integer renamelimit
24689 Maximum number of files to consider when detecting renames.
24690
24691 Defaults to @samp{-1}.
24692
24693 @end deftypevr
24694
24695 @deftypevr {@code{cgit-configuration} parameter} string repository-sort
24696 The way in which repositories in each section are sorted.
24697
24698 Defaults to @samp{""}.
24699
24700 @end deftypevr
24701
24702 @deftypevr {@code{cgit-configuration} parameter} robots-list robots
24703 Text used as content for the @code{robots} meta-tag.
24704
24705 Defaults to @samp{("noindex" "nofollow")}.
24706
24707 @end deftypevr
24708
24709 @deftypevr {@code{cgit-configuration} parameter} string root-desc
24710 Text printed below the heading on the repository index page.
24711
24712 Defaults to @samp{"a fast webinterface for the git dscm"}.
24713
24714 @end deftypevr
24715
24716 @deftypevr {@code{cgit-configuration} parameter} string root-readme
24717 The content of the file specified with this option will be included
24718 verbatim below the "about" link on the repository index page.
24719
24720 Defaults to @samp{""}.
24721
24722 @end deftypevr
24723
24724 @deftypevr {@code{cgit-configuration} parameter} string root-title
24725 Text printed as heading on the repository index page.
24726
24727 Defaults to @samp{""}.
24728
24729 @end deftypevr
24730
24731 @deftypevr {@code{cgit-configuration} parameter} boolean scan-hidden-path
24732 If set to @samp{#t} and repository-directory is enabled,
24733 repository-directory will recurse into directories whose name starts
24734 with a period. Otherwise, repository-directory will stay away from such
24735 directories, considered as "hidden". Note that this does not apply to
24736 the ".git" directory in non-bare repos.
24737
24738 Defaults to @samp{#f}.
24739
24740 @end deftypevr
24741
24742 @deftypevr {@code{cgit-configuration} parameter} list snapshots
24743 Text which specifies the default set of snapshot formats that cgit
24744 generates links for.
24745
24746 Defaults to @samp{()}.
24747
24748 @end deftypevr
24749
24750 @deftypevr {@code{cgit-configuration} parameter} repository-directory repository-directory
24751 Name of the directory to scan for repositories (represents
24752 @code{scan-path}).
24753
24754 Defaults to @samp{"/srv/git"}.
24755
24756 @end deftypevr
24757
24758 @deftypevr {@code{cgit-configuration} parameter} string section
24759 The name of the current repository section - all repositories defined
24760 after this option will inherit the current section name.
24761
24762 Defaults to @samp{""}.
24763
24764 @end deftypevr
24765
24766 @deftypevr {@code{cgit-configuration} parameter} string section-sort
24767 Flag which, when set to @samp{1}, will sort the sections on the
24768 repository listing by name.
24769
24770 Defaults to @samp{""}.
24771
24772 @end deftypevr
24773
24774 @deftypevr {@code{cgit-configuration} parameter} integer section-from-path
24775 A number which, if defined prior to repository-directory, specifies how
24776 many path elements from each repo path to use as a default section name.
24777
24778 Defaults to @samp{0}.
24779
24780 @end deftypevr
24781
24782 @deftypevr {@code{cgit-configuration} parameter} boolean side-by-side-diffs?
24783 If set to @samp{#t} shows side-by-side diffs instead of unidiffs per
24784 default.
24785
24786 Defaults to @samp{#f}.
24787
24788 @end deftypevr
24789
24790 @deftypevr {@code{cgit-configuration} parameter} file-object source-filter
24791 Specifies a command which will be invoked to format plaintext blobs in
24792 the tree view.
24793
24794 Defaults to @samp{""}.
24795
24796 @end deftypevr
24797
24798 @deftypevr {@code{cgit-configuration} parameter} integer summary-branches
24799 Specifies the number of branches to display in the repository "summary"
24800 view.
24801
24802 Defaults to @samp{10}.
24803
24804 @end deftypevr
24805
24806 @deftypevr {@code{cgit-configuration} parameter} integer summary-log
24807 Specifies the number of log entries to display in the repository
24808 "summary" view.
24809
24810 Defaults to @samp{10}.
24811
24812 @end deftypevr
24813
24814 @deftypevr {@code{cgit-configuration} parameter} integer summary-tags
24815 Specifies the number of tags to display in the repository "summary"
24816 view.
24817
24818 Defaults to @samp{10}.
24819
24820 @end deftypevr
24821
24822 @deftypevr {@code{cgit-configuration} parameter} string strict-export
24823 Filename which, if specified, needs to be present within the repository
24824 for cgit to allow access to that repository.
24825
24826 Defaults to @samp{""}.
24827
24828 @end deftypevr
24829
24830 @deftypevr {@code{cgit-configuration} parameter} string virtual-root
24831 URL which, if specified, will be used as root for all cgit links.
24832
24833 Defaults to @samp{"/"}.
24834
24835 @end deftypevr
24836
24837 @deftypevr {@code{cgit-configuration} parameter} repository-cgit-configuration-list repositories
24838 A list of @dfn{cgit-repo} records to use with config.
24839
24840 Defaults to @samp{()}.
24841
24842 Available @code{repository-cgit-configuration} fields are:
24843
24844 @deftypevr {@code{repository-cgit-configuration} parameter} repo-list snapshots
24845 A mask of snapshot formats for this repo that cgit generates links for,
24846 restricted by the global @code{snapshots} setting.
24847
24848 Defaults to @samp{()}.
24849
24850 @end deftypevr
24851
24852 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object source-filter
24853 Override the default @code{source-filter}.
24854
24855 Defaults to @samp{""}.
24856
24857 @end deftypevr
24858
24859 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string url
24860 The relative URL used to access the repository.
24861
24862 Defaults to @samp{""}.
24863
24864 @end deftypevr
24865
24866 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object about-filter
24867 Override the default @code{about-filter}.
24868
24869 Defaults to @samp{""}.
24870
24871 @end deftypevr
24872
24873 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string branch-sort
24874 Flag which, when set to @samp{age}, enables date ordering in the branch
24875 ref list, and when set to @samp{name} enables ordering by branch name.
24876
24877 Defaults to @samp{""}.
24878
24879 @end deftypevr
24880
24881 @deftypevr {@code{repository-cgit-configuration} parameter} repo-list clone-url
24882 A list of URLs which can be used to clone repo.
24883
24884 Defaults to @samp{()}.
24885
24886 @end deftypevr
24887
24888 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object commit-filter
24889 Override the default @code{commit-filter}.
24890
24891 Defaults to @samp{""}.
24892
24893 @end deftypevr
24894
24895 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string commit-sort
24896 Flag which, when set to @samp{date}, enables strict date ordering in the
24897 commit log, and when set to @samp{topo} enables strict topological
24898 ordering.
24899
24900 Defaults to @samp{""}.
24901
24902 @end deftypevr
24903
24904 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string defbranch
24905 The name of the default branch for this repository. If no such branch
24906 exists in the repository, the first branch name (when sorted) is used as
24907 default instead. By default branch pointed to by HEAD, or "master" if
24908 there is no suitable HEAD.
24909
24910 Defaults to @samp{""}.
24911
24912 @end deftypevr
24913
24914 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string desc
24915 The value to show as repository description.
24916
24917 Defaults to @samp{""}.
24918
24919 @end deftypevr
24920
24921 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string homepage
24922 The value to show as repository homepage.
24923
24924 Defaults to @samp{""}.
24925
24926 @end deftypevr
24927
24928 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object email-filter
24929 Override the default @code{email-filter}.
24930
24931 Defaults to @samp{""}.
24932
24933 @end deftypevr
24934
24935 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-commit-graph?
24936 A flag which can be used to disable the global setting
24937 @code{enable-commit-graph?}.
24938
24939 Defaults to @samp{disabled}.
24940
24941 @end deftypevr
24942
24943 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-log-filecount?
24944 A flag which can be used to disable the global setting
24945 @code{enable-log-filecount?}.
24946
24947 Defaults to @samp{disabled}.
24948
24949 @end deftypevr
24950
24951 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-log-linecount?
24952 A flag which can be used to disable the global setting
24953 @code{enable-log-linecount?}.
24954
24955 Defaults to @samp{disabled}.
24956
24957 @end deftypevr
24958
24959 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-remote-branches?
24960 Flag which, when set to @code{#t}, will make cgit display remote
24961 branches in the summary and refs views.
24962
24963 Defaults to @samp{disabled}.
24964
24965 @end deftypevr
24966
24967 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-subject-links?
24968 A flag which can be used to override the global setting
24969 @code{enable-subject-links?}.
24970
24971 Defaults to @samp{disabled}.
24972
24973 @end deftypevr
24974
24975 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-html-serving?
24976 A flag which can be used to override the global setting
24977 @code{enable-html-serving?}.
24978
24979 Defaults to @samp{disabled}.
24980
24981 @end deftypevr
24982
24983 @deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean hide?
24984 Flag which, when set to @code{#t}, hides the repository from the
24985 repository index.
24986
24987 Defaults to @samp{#f}.
24988
24989 @end deftypevr
24990
24991 @deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean ignore?
24992 Flag which, when set to @samp{#t}, ignores the repository.
24993
24994 Defaults to @samp{#f}.
24995
24996 @end deftypevr
24997
24998 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object logo
24999 URL which specifies the source of an image which will be used as a logo
25000 on this repo’s pages.
25001
25002 Defaults to @samp{""}.
25003
25004 @end deftypevr
25005
25006 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string logo-link
25007 URL loaded when clicking on the cgit logo image.
25008
25009 Defaults to @samp{""}.
25010
25011 @end deftypevr
25012
25013 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object owner-filter
25014 Override the default @code{owner-filter}.
25015
25016 Defaults to @samp{""}.
25017
25018 @end deftypevr
25019
25020 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string module-link
25021 Text which will be used as the formatstring for a hyperlink when a
25022 submodule is printed in a directory listing. The arguments for the
25023 formatstring are the path and SHA1 of the submodule commit.
25024
25025 Defaults to @samp{""}.
25026
25027 @end deftypevr
25028
25029 @deftypevr {@code{repository-cgit-configuration} parameter} module-link-path module-link-path
25030 Text which will be used as the formatstring for a hyperlink when a
25031 submodule with the specified subdirectory path is printed in a directory
25032 listing.
25033
25034 Defaults to @samp{()}.
25035
25036 @end deftypevr
25037
25038 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string max-stats
25039 Override the default maximum statistics period.
25040
25041 Defaults to @samp{""}.
25042
25043 @end deftypevr
25044
25045 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string name
25046 The value to show as repository name.
25047
25048 Defaults to @samp{""}.
25049
25050 @end deftypevr
25051
25052 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string owner
25053 A value used to identify the owner of the repository.
25054
25055 Defaults to @samp{""}.
25056
25057 @end deftypevr
25058
25059 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string path
25060 An absolute path to the repository directory.
25061
25062 Defaults to @samp{""}.
25063
25064 @end deftypevr
25065
25066 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string readme
25067 A path (relative to repo) which specifies a file to include verbatim as
25068 the "About" page for this repo.
25069
25070 Defaults to @samp{""}.
25071
25072 @end deftypevr
25073
25074 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string section
25075 The name of the current repository section - all repositories defined
25076 after this option will inherit the current section name.
25077
25078 Defaults to @samp{""}.
25079
25080 @end deftypevr
25081
25082 @deftypevr {@code{repository-cgit-configuration} parameter} repo-list extra-options
25083 Extra options will be appended to cgitrc file.
25084
25085 Defaults to @samp{()}.
25086
25087 @end deftypevr
25088
25089 @end deftypevr
25090
25091 @deftypevr {@code{cgit-configuration} parameter} list extra-options
25092 Extra options will be appended to cgitrc file.
25093
25094 Defaults to @samp{()}.
25095
25096 @end deftypevr
25097
25098
25099 @c %end of fragment
25100
25101 However, it could be that you just want to get a @code{cgitrc} up and
25102 running. In that case, you can pass an @code{opaque-cgit-configuration}
25103 as a record to @code{cgit-service-type}. As its name indicates, an
25104 opaque configuration does not have easy reflective capabilities.
25105
25106 Available @code{opaque-cgit-configuration} fields are:
25107
25108 @deftypevr {@code{opaque-cgit-configuration} parameter} package cgit
25109 The cgit package.
25110 @end deftypevr
25111
25112 @deftypevr {@code{opaque-cgit-configuration} parameter} string string
25113 The contents of the @code{cgitrc}, as a string.
25114 @end deftypevr
25115
25116 For example, if your @code{cgitrc} is just the empty string, you
25117 could instantiate a cgit service like this:
25118
25119 @lisp
25120 (service cgit-service-type
25121 (opaque-cgit-configuration
25122 (cgitrc "")))
25123 @end lisp
25124
25125 @subsubheading Gitolite Service
25126
25127 @cindex Gitolite service
25128 @cindex Git, hosting
25129 @uref{https://gitolite.com/gitolite/, Gitolite} is a tool for hosting Git
25130 repositories on a central server.
25131
25132 Gitolite can handle multiple repositories and users, and supports flexible
25133 configuration of the permissions for the users on the repositories.
25134
25135 The following example will configure Gitolite using the default @code{git}
25136 user, and the provided SSH public key.
25137
25138 @lisp
25139 (service gitolite-service-type
25140 (gitolite-configuration
25141 (admin-pubkey (plain-file
25142 "yourname.pub"
25143 "ssh-rsa AAAA... guix@@example.com"))))
25144 @end lisp
25145
25146 Gitolite is configured through a special admin repository which you can clone,
25147 for example, if you setup Gitolite on @code{example.com}, you would run the
25148 following command to clone the admin repository.
25149
25150 @example
25151 git clone git@@example.com:gitolite-admin
25152 @end example
25153
25154 When the Gitolite service is activated, the provided @code{admin-pubkey} will
25155 be inserted in to the @file{keydir} directory in the gitolite-admin
25156 repository. If this results in a change in the repository, it will be
25157 committed using the message ``gitolite setup by GNU Guix''.
25158
25159 @deftp {Data Type} gitolite-configuration
25160 Data type representing the configuration for @code{gitolite-service-type}.
25161
25162 @table @asis
25163 @item @code{package} (default: @var{gitolite})
25164 Gitolite package to use.
25165
25166 @item @code{user} (default: @var{git})
25167 User to use for Gitolite. This will be user that you use when accessing
25168 Gitolite over SSH.
25169
25170 @item @code{group} (default: @var{git})
25171 Group to use for Gitolite.
25172
25173 @item @code{home-directory} (default: @var{"/var/lib/gitolite"})
25174 Directory in which to store the Gitolite configuration and repositories.
25175
25176 @item @code{rc-file} (default: @var{(gitolite-rc-file)})
25177 A ``file-like'' object (@pxref{G-Expressions, file-like objects}),
25178 representing the configuration for Gitolite.
25179
25180 @item @code{admin-pubkey} (default: @var{#f})
25181 A ``file-like'' object (@pxref{G-Expressions, file-like objects}) used to
25182 setup Gitolite. This will be inserted in to the @file{keydir} directory
25183 within the gitolite-admin repository.
25184
25185 To specify the SSH key as a string, use the @code{plain-file} function.
25186
25187 @lisp
25188 (plain-file "yourname.pub" "ssh-rsa AAAA... guix@@example.com")
25189 @end lisp
25190
25191 @end table
25192 @end deftp
25193
25194 @deftp {Data Type} gitolite-rc-file
25195 Data type representing the Gitolite RC file.
25196
25197 @table @asis
25198 @item @code{umask} (default: @code{#o0077})
25199 This controls the permissions Gitolite sets on the repositories and their
25200 contents.
25201
25202 A value like @code{#o0027} will give read access to the group used by Gitolite
25203 (by default: @code{git}). This is necessary when using Gitolite with software
25204 like cgit or gitweb.
25205
25206 @item @code{git-config-keys} (default: @code{""})
25207 Gitolite allows you to set git config values using the "config" keyword. This
25208 setting allows control over the config keys to accept.
25209
25210 @item @code{roles} (default: @code{'(("READERS" . 1) ("WRITERS" . ))})
25211 Set the role names allowed to be used by users running the perms command.
25212
25213 @item @code{enable} (default: @code{'("help" "desc" "info" "perms" "writable" "ssh-authkeys" "git-config" "daemon" "gitweb")})
25214 This setting controls the commands and features to enable within Gitolite.
25215
25216 @end table
25217 @end deftp
25218
25219
25220 @node Game Services
25221 @subsection Game Services
25222
25223 @subsubheading The Battle for Wesnoth Service
25224 @cindex wesnothd
25225 @uref{https://wesnoth.org, The Battle for Wesnoth} is a fantasy, turn
25226 based tactical strategy game, with several single player campaigns, and
25227 multiplayer games (both networked and local).
25228
25229 @defvar {Scheme Variable} wesnothd-service-type
25230 Service type for the wesnothd service. Its value must be a
25231 @code{wesnothd-configuration} object. To run wesnothd in the default
25232 configuration, instantiate it as:
25233
25234 @lisp
25235 (service wesnothd-service-type)
25236 @end lisp
25237 @end defvar
25238
25239 @deftp {Data Type} wesnothd-configuration
25240 Data type representing the configuration of @command{wesnothd}.
25241
25242 @table @asis
25243 @item @code{package} (default: @code{wesnoth-server})
25244 The wesnoth server package to use.
25245
25246 @item @code{port} (default: @code{15000})
25247 The port to bind the server to.
25248 @end table
25249 @end deftp
25250
25251
25252 @node PAM Mount Service
25253 @subsection PAM Mount Service
25254 @cindex pam-mount
25255
25256 The @code{(gnu services pam-mount)} module provides a service allowing
25257 users to mount volumes when they log in. It should be able to mount any
25258 volume format supported by the system.
25259
25260 @defvar {Scheme Variable} pam-mount-service-type
25261 Service type for PAM Mount support.
25262 @end defvar
25263
25264 @deftp {Data Type} pam-mount-configuration
25265 Data type representing the configuration of PAM Mount.
25266
25267 It takes the following parameters:
25268
25269 @table @asis
25270 @item @code{rules}
25271 The configuration rules that will be used to generate
25272 @file{/etc/security/pam_mount.conf.xml}.
25273
25274 The configuration rules are SXML elements (@pxref{SXML,,, guile, GNU
25275 Guile Reference Manual}), and the the default ones don't mount anything
25276 for anyone at login:
25277
25278 @lisp
25279 `((debug (@@ (enable "0")))
25280 (mntoptions (@@ (allow ,(string-join
25281 '("nosuid" "nodev" "loop"
25282 "encryption" "fsck" "nonempty"
25283 "allow_root" "allow_other")
25284 ","))))
25285 (mntoptions (@@ (require "nosuid,nodev")))
25286 (logout (@@ (wait "0")
25287 (hup "0")
25288 (term "no")
25289 (kill "no")))
25290 (mkmountpoint (@@ (enable "1")
25291 (remove "true"))))
25292 @end lisp
25293
25294 Some @code{volume} elements must be added to automatically mount volumes
25295 at login. Here's an example allowing the user @code{alice} to mount her
25296 encrypted @code{HOME} directory and allowing the user @code{bob} to mount
25297 the partition where he stores his data:
25298
25299 @lisp
25300 (define pam-mount-rules
25301 `((debug (@@ (enable "0")))
25302 (volume (@@ (user "alice")
25303 (fstype "crypt")
25304 (path "/dev/sda2")
25305 (mountpoint "/home/alice")))
25306 (volume (@@ (user "bob")
25307 (fstype "auto")
25308 (path "/dev/sdb3")
25309 (mountpoint "/home/bob/data")
25310 (options "defaults,autodefrag,compress")))
25311 (mntoptions (@@ (allow ,(string-join
25312 '("nosuid" "nodev" "loop"
25313 "encryption" "fsck" "nonempty"
25314 "allow_root" "allow_other")
25315 ","))))
25316 (mntoptions (@@ (require "nosuid,nodev")))
25317 (logout (@@ (wait "0")
25318 (hup "0")
25319 (term "no")
25320 (kill "no")))
25321 (mkmountpoint (@@ (enable "1")
25322 (remove "true")))))
25323
25324 (service pam-mount-service-type
25325 (pam-mount-configuration
25326 (rules pam-mount-rules)))
25327 @end lisp
25328
25329 The complete list of possible options can be found in the man page for
25330 @uref{http://pam-mount.sourceforge.net/pam_mount.conf.5.html, pam_mount.conf}.
25331 @end table
25332 @end deftp
25333
25334
25335 @node Guix Services
25336 @subsection Guix Services
25337
25338 @subsubheading Guix Data Service
25339 The @uref{http://data.guix.gnu.org,Guix Data Service} processes, stores
25340 and provides data about GNU Guix. This includes information about
25341 packages, derivations and lint warnings.
25342
25343 The data is stored in a PostgreSQL database, and available through a web
25344 interface.
25345
25346 @defvar {Scheme Variable} guix-data-service-type
25347 Service type for the Guix Data Service. Its value must be a
25348 @code{guix-data-service-configuration} object. The service optionally
25349 extends the getmail service, as the guix-commits mailing list is used to
25350 find out about changes in the Guix git repository.
25351 @end defvar
25352
25353 @deftp {Data Type} guix-data-service-configuration
25354 Data type representing the configuration of the Guix Data Service.
25355
25356 @table @asis
25357 @item @code{package} (default: @code{guix-data-service})
25358 The Guix Data Service package to use.
25359
25360 @item @code{user} (default: @code{"guix-data-service"})
25361 The system user to run the service as.
25362
25363 @item @code{group} (default: @code{"guix-data-service"})
25364 The system group to run the service as.
25365
25366 @item @code{port} (default: @code{8765})
25367 The port to bind the web service to.
25368
25369 @item @code{host} (default: @code{"127.0.0.1"})
25370 The host to bind the web service to.
25371
25372 @item @code{getmail-idle-mailboxes} (default: @code{#f})
25373 If set, this is the list of mailboxes that the getmail service will be
25374 configured to listen to.
25375
25376 @item @code{commits-getmail-retriever-configuration} (default: @code{#f})
25377 If set, this is the @code{getmail-retriever-configuration} object with
25378 which to configure getmail to fetch mail from the guix-commits mailing
25379 list.
25380
25381 @item @code{extra-options} (default: @var{'()})
25382 Extra command line options for @code{guix-data-service}.
25383
25384 @item @code{extra-process-jobs-options} (default: @var{'()})
25385 Extra command line options for @code{guix-data-service-process-jobs}.
25386
25387 @end table
25388 @end deftp
25389
25390 @node Linux Services
25391 @subsubheading Linux Services
25392
25393 @cindex oom
25394 @cindex out of memory killer
25395 @cindex earlyoom
25396 @cindex early out of memory daemon
25397 @subsection Early OOM Service
25398
25399 @uref{https://github.com/rfjakob/earlyoom,Early OOM}, also known as
25400 Earlyoom, is a minimalist out of memory (OOM) daemon that runs in user
25401 space and provides a more responsive and configurable alternative to the
25402 in-kernel OOM killer. It is useful to prevent the system from becoming
25403 unresponsive when it runs out of memory.
25404
25405 @deffn {Scheme Variable} earlyoom-service-type
25406 The service type for running @command{earlyoom}, the Early OOM daemon.
25407 Its value must be a @code{earlyoom-configuration} object, described
25408 below. The service can be instantiated in its default configuration
25409 with:
25410
25411 @lisp
25412 (service earlyoom-service-type)
25413 @end lisp
25414 @end deffn
25415
25416 @deftp {Data Type} earlyoom-configuration
25417 This is the configuration record for the @code{earlyoom-service-type}.
25418
25419 @table @asis
25420 @item @code{earlyoom} (default: @var{earlyoom})
25421 The Earlyoom package to use.
25422
25423 @item @code{minimum-available-memory} (default: @code{10})
25424 The threshold for the minimum @emph{available} memory, in percentages.
25425
25426 @item @code{minimum-free-swap} (default: @code{10})
25427 The threshold for the minimum free swap memory, in percentages.
25428
25429 @item @code{prefer-regexp} (default: @code{#f})
25430 A regular expression (as a string) to match the names of the processes
25431 that should be preferably killed.
25432
25433 @item @code{avoid-regexp} (default: @code{#f})
25434 A regular expression (as a string) to match the names of the processes
25435 that should @emph{not} be killed.
25436
25437 @item @code{memory-report-interval} (default: @code{0})
25438 The interval in seconds at which a memory report is printed. It is
25439 disabled by default.
25440
25441 @item @code{ignore-positive-oom-score-adj?} (default: @code{#f})
25442 A boolean indicating whether the positive adjustments set in
25443 @file{/proc/*/oom_score_adj}.
25444
25445 @item @code{show-debug-messages?} (default: @code{#f})
25446 A boolean indicating whether debug messages should be printed. The logs
25447 are saved at @file{/var/log/earlyoom.log}.
25448
25449 @item @code{send-notification-command} (default: @code{#f})
25450 This can be used to provide a custom command used for sending
25451 notifications.
25452 @end table
25453 @end deftp
25454
25455 @cindex modprobe
25456 @cindex kernel module loader
25457 @subsubsection Kernel Module Loader Service
25458
25459 The kernel module loader service allows one to load loadable kernel
25460 modules at boot. This is especially useful for modules that don't
25461 autoload and need to be manually loaded, as it's the case with
25462 @code{ddcci}.
25463
25464 @deffn {Scheme Variable} kernel-module-loader-service-type
25465 The service type for loading loadable kernel modules at boot with
25466 @command{modprobe}. Its value must be a list of strings representing
25467 module names. For example loading the drivers provided by
25468 @code{ddcci-driver-linux}, in debugging mode by passing some module
25469 parameters, can be done as follow:
25470
25471 @lisp
25472 (use-modules (gnu) (gnu services))
25473 (use-package-modules linux)
25474 (use-service-modules linux)
25475
25476 (define ddcci-config
25477 (plain-file "ddcci.conf"
25478 "options ddcci dyndbg delay=120"))
25479
25480 (operating-system
25481 ...
25482 (services (cons* (service kernel-module-loader-service-type
25483 '("ddcci" "ddcci_backlight"))
25484 (simple-service 'ddcci-config etc-service-type
25485 (list `("modprobe.d/ddcci.conf"
25486 ,ddcci-config)))
25487 %base-services))
25488 (kernel-loadable-modules (list ddcci-driver-linux)))
25489 @end lisp
25490 @end deffn
25491
25492 @node Miscellaneous Services
25493 @subsection Miscellaneous Services
25494
25495 @cindex fingerprint
25496 @subsubheading Fingerprint Service
25497
25498 The @code{(gnu services authentication)} module provides a DBus service to
25499 read and identify fingerprints via a fingerprint sensor.
25500
25501 @defvr {Scheme Variable} fprintd-service-type
25502 The service type for @command{fprintd}, which provides the fingerprint
25503 reading capability.
25504
25505 @lisp
25506 (service fprintd-service-type)
25507 @end lisp
25508 @end defvr
25509
25510 @cindex sysctl
25511 @subsubheading System Control Service
25512
25513 The @code{(gnu services sysctl)} provides a service to configure kernel
25514 parameters at boot.
25515
25516 @defvr {Scheme Variable} sysctl-service-type
25517 The service type for @command{sysctl}, which modifies kernel parameters
25518 under @file{/proc/sys/}. To enable IPv4 forwarding, it can be
25519 instantiated as:
25520
25521 @lisp
25522 (service sysctl-service-type
25523 (sysctl-configuration
25524 (settings '(("net.ipv4.ip_forward" . "1")))))
25525 @end lisp
25526 @end defvr
25527
25528 @deftp {Data Type} sysctl-configuration
25529 The data type representing the configuration of @command{sysctl}.
25530
25531 @table @asis
25532 @item @code{sysctl} (default: @code{(file-append procps "/sbin/sysctl"})
25533 The @command{sysctl} executable to use.
25534
25535 @item @code{settings} (default: @code{'()})
25536 An association list specifies kernel parameters and their values.
25537 @end table
25538 @end deftp
25539
25540 @cindex pcscd
25541 @subsubheading PC/SC Smart Card Daemon Service
25542
25543 The @code{(gnu services security-token)} module provides the following service
25544 to run @command{pcscd}, the PC/SC Smart Card Daemon. @command{pcscd} is the
25545 daemon program for pcsc-lite and the MuscleCard framework. It is a resource
25546 manager that coordinates communications with smart card readers, smart cards
25547 and cryptographic tokens that are connected to the system.
25548
25549 @defvr {Scheme Variable} pcscd-service-type
25550 Service type for the @command{pcscd} service. Its value must be a
25551 @code{pcscd-configuration} object. To run pcscd in the default
25552 configuration, instantiate it as:
25553
25554 @lisp
25555 (service pcscd-service-type)
25556 @end lisp
25557 @end defvr
25558
25559 @deftp {Data Type} pcscd-configuration
25560 The data type representing the configuration of @command{pcscd}.
25561
25562 @table @asis
25563 @item @code{pcsc-lite} (default: @code{pcsc-lite})
25564 The pcsc-lite package that provides pcscd.
25565 @item @code{usb-drivers} (default: @code{(list ccid)})
25566 List of packages that provide USB drivers to pcscd. Drivers are expected to be
25567 under @file{pcsc/drivers} in the store directory of the package.
25568 @end table
25569 @end deftp
25570
25571 @cindex lirc
25572 @subsubheading Lirc Service
25573
25574 The @code{(gnu services lirc)} module provides the following service.
25575
25576 @deffn {Scheme Procedure} lirc-service [#:lirc lirc] @
25577 [#:device #f] [#:driver #f] [#:config-file #f] @
25578 [#:extra-options '()]
25579 Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
25580 decodes infrared signals from remote controls.
25581
25582 Optionally, @var{device}, @var{driver} and @var{config-file}
25583 (configuration file name) may be specified. See @command{lircd} manual
25584 for details.
25585
25586 Finally, @var{extra-options} is a list of additional command-line options
25587 passed to @command{lircd}.
25588 @end deffn
25589
25590 @cindex spice
25591 @subsubheading Spice Service
25592
25593 The @code{(gnu services spice)} module provides the following service.
25594
25595 @deffn {Scheme Procedure} spice-vdagent-service [#:spice-vdagent]
25596 Returns a service that runs @url{https://www.spice-space.org,VDAGENT}, a daemon
25597 that enables sharing the clipboard with a vm and setting the guest display
25598 resolution when the graphical console window resizes.
25599 @end deffn
25600
25601 @cindex inputattach
25602 @subsubheading inputattach Service
25603
25604 @cindex tablet input, for Xorg
25605 @cindex touchscreen input, for Xorg
25606 The @uref{https://linuxwacom.github.io/, inputattach} service allows you to
25607 use input devices such as Wacom tablets, touchscreens, or joysticks with the
25608 Xorg display server.
25609
25610 @deffn {Scheme Variable} inputattach-service-type
25611 Type of a service that runs @command{inputattach} on a device and
25612 dispatches events from it.
25613 @end deffn
25614
25615 @deftp {Data Type} inputattach-configuration
25616 @table @asis
25617 @item @code{device-type} (default: @code{"wacom"})
25618 The type of device to connect to. Run @command{inputattach --help}, from the
25619 @code{inputattach} package, to see the list of supported device types.
25620
25621 @item @code{device} (default: @code{"/dev/ttyS0"})
25622 The device file to connect to the device.
25623
25624 @item @code{baud-rate} (default: @code{#f})
25625 Baud rate to use for the serial connection.
25626 Should be a number or @code{#f}.
25627
25628 @item @code{log-file} (default: @code{#f})
25629 If true, this must be the name of a file to log messages to.
25630 @end table
25631 @end deftp
25632
25633 @subsection Dictionary Services
25634 @cindex dictionary
25635 The @code{(gnu services dict)} module provides the following service:
25636
25637 @deffn {Scheme Procedure} dicod-service [#:config (dicod-configuration)]
25638 Return a service that runs the @command{dicod} daemon, an implementation
25639 of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
25640
25641 The optional @var{config} argument specifies the configuration for
25642 @command{dicod}, which should be a @code{<dicod-configuration>} object, by
25643 default it serves the GNU Collaborative International Dictionary of English.
25644
25645 You can add @command{open localhost} to your @file{~/.dico} file to make
25646 @code{localhost} the default server for @command{dico} client
25647 (@pxref{Initialization File,,, dico, GNU Dico Manual}).
25648 @end deffn
25649
25650 @deftp {Data Type} dicod-configuration
25651 Data type representing the configuration of dicod.
25652
25653 @table @asis
25654 @item @code{dico} (default: @var{dico})
25655 Package object of the GNU Dico dictionary server.
25656
25657 @item @code{interfaces} (default: @var{'("localhost")})
25658 This is the list of IP addresses and ports and possibly socket file
25659 names to listen to (@pxref{Server Settings, @code{listen} directive,,
25660 dico, GNU Dico Manual}).
25661
25662 @item @code{handlers} (default: @var{'()})
25663 List of @code{<dicod-handler>} objects denoting handlers (module instances).
25664
25665 @item @code{databases} (default: @var{(list %dicod-database:gcide)})
25666 List of @code{<dicod-database>} objects denoting dictionaries to be served.
25667 @end table
25668 @end deftp
25669
25670 @deftp {Data Type} dicod-handler
25671 Data type representing a dictionary handler (module instance).
25672
25673 @table @asis
25674 @item @code{name}
25675 Name of the handler (module instance).
25676
25677 @item @code{module} (default: @var{#f})
25678 Name of the dicod module of the handler (instance). If it is @code{#f},
25679 the module has the same name as the handler.
25680 (@pxref{Modules,,, dico, GNU Dico Manual}).
25681
25682 @item @code{options}
25683 List of strings or gexps representing the arguments for the module handler
25684 @end table
25685 @end deftp
25686
25687 @deftp {Data Type} dicod-database
25688 Data type representing a dictionary database.
25689
25690 @table @asis
25691 @item @code{name}
25692 Name of the database, will be used in DICT commands.
25693
25694 @item @code{handler}
25695 Name of the dicod handler (module instance) used by this database
25696 (@pxref{Handlers,,, dico, GNU Dico Manual}).
25697
25698 @item @code{complex?} (default: @var{#f})
25699 Whether the database configuration complex. The complex configuration
25700 will need a corresponding @code{<dicod-handler>} object, otherwise not.
25701
25702 @item @code{options}
25703 List of strings or gexps representing the arguments for the database
25704 (@pxref{Databases,,, dico, GNU Dico Manual}).
25705 @end table
25706 @end deftp
25707
25708 @defvr {Scheme Variable} %dicod-database:gcide
25709 A @code{<dicod-database>} object serving the GNU Collaborative International
25710 Dictionary of English using the @code{gcide} package.
25711 @end defvr
25712
25713 The following is an example @code{dicod-service} configuration.
25714
25715 @lisp
25716 (dicod-service #:config
25717 (dicod-configuration
25718 (handlers (list (dicod-handler
25719 (name "wordnet")
25720 (module "dictorg")
25721 (options
25722 (list #~(string-append "dbdir=" #$wordnet))))))
25723 (databases (list (dicod-database
25724 (name "wordnet")
25725 (complex? #t)
25726 (handler "wordnet")
25727 (options '("database=wn")))
25728 %dicod-database:gcide))))
25729 @end lisp
25730
25731 @cindex Docker
25732 @subsubheading Docker Service
25733
25734 The @code{(gnu services docker)} module provides the following services.
25735
25736 @defvr {Scheme Variable} docker-service-type
25737
25738 This is the type of the service that runs @url{https://www.docker.com,Docker},
25739 a daemon that can execute application bundles (sometimes referred to as
25740 ``containers'') in isolated environments.
25741
25742 @end defvr
25743
25744 @deftp {Data Type} docker-configuration
25745 This is the data type representing the configuration of Docker and Containerd.
25746
25747 @table @asis
25748
25749 @item @code{package} (default: @code{docker})
25750 The Docker package to use.
25751
25752 @item @code{containerd} (default: @var{containerd})
25753 The Containerd package to use.
25754
25755 @end table
25756 @end deftp
25757
25758 @cindex Audit
25759 @subsubheading Auditd Service
25760
25761 The @code{(gnu services auditd)} module provides the following service.
25762
25763 @defvr {Scheme Variable} auditd-service-type
25764
25765 This is the type of the service that runs
25766 @url{https://people.redhat.com/sgrubb/audit/,auditd},
25767 a daemon that tracks security-relevant information on your system.
25768
25769 Examples of things that can be tracked:
25770
25771 @enumerate
25772 @item
25773 File accesses
25774 @item
25775 System calls
25776 @item
25777 Invoked commands
25778 @item
25779 Failed login attempts
25780 @item
25781 Firewall filtering
25782 @item
25783 Network access
25784 @end enumerate
25785
25786 @command{auditctl} from the @code{audit} package can be used in order
25787 to add or remove events to be tracked (until the next reboot).
25788 In order to permanently track events, put the command line arguments
25789 of auditctl into @file{/etc/audit/audit.rules}.
25790 @command{aureport} from the @code{audit} package can be used in order
25791 to view a report of all recorded events.
25792 The audit daemon usually logs into the directory @file{/var/log/audit}.
25793
25794 @end defvr
25795
25796 @deftp {Data Type} auditd-configuration
25797 This is the data type representing the configuration of auditd.
25798
25799 @table @asis
25800
25801 @item @code{audit} (default: @code{audit})
25802 The audit package to use.
25803
25804 @end table
25805 @end deftp
25806
25807 @defvr {Scheme Variable} singularity-service-type
25808 This is the type of the service that allows you to run
25809 @url{https://www.sylabs.io/singularity/, Singularity}, a Docker-style tool to
25810 create and run application bundles (aka. ``containers''). The value for this
25811 service is the Singularity package to use.
25812
25813 The service does not install a daemon; instead, it installs helper programs as
25814 setuid-root (@pxref{Setuid Programs}) such that unprivileged users can invoke
25815 @command{singularity run} and similar commands.
25816 @end defvr
25817
25818 @cindex Nix
25819 @subsubheading Nix service
25820
25821 The @code{(gnu services nix)} module provides the following service.
25822
25823 @defvr {Scheme Variable} nix-service-type
25824
25825 This is the type of the service that runs build daemon of the
25826 @url{https://nixos.org/nix/, Nix} package manager. Here is an example showing
25827 how to use it:
25828
25829 @lisp
25830 (use-modules (gnu))
25831 (use-service-modules nix)
25832 (use-package-modules package-management)
25833
25834 (operating-system
25835 ;; @dots{}
25836 (packages (append (list nix)
25837 %base-packages))
25838
25839 (services (append (list (service nix-service-type))
25840 %base-services)))
25841 @end lisp
25842
25843 After @command{guix system reconfigure} configure Nix for your user:
25844
25845 @itemize
25846 @item Add a Nix channel and update it. See
25847 @url{https://nixos.org/nix/manual/, Nix Package Manager Guide}.
25848
25849 @item Create a symlink to your profile and activate Nix profile:
25850 @end itemize
25851
25852 @example
25853 $ ln -s "/nix/var/nix/profiles/per-user/$USER/profile" ~/.nix-profile
25854 $ source /run/current-system/profile/etc/profile.d/nix.sh
25855 @end example
25856
25857 @end defvr
25858
25859 @node Setuid Programs
25860 @section Setuid Programs
25861
25862 @cindex setuid programs
25863 Some programs need to run with ``root'' privileges, even when they are
25864 launched by unprivileged users. A notorious example is the
25865 @command{passwd} program, which users can run to change their
25866 password, and which needs to access the @file{/etc/passwd} and
25867 @file{/etc/shadow} files---something normally restricted to root, for
25868 obvious security reasons. To address that, these executables are
25869 @dfn{setuid-root}, meaning that they always run with root privileges
25870 (@pxref{How Change Persona,,, libc, The GNU C Library Reference Manual},
25871 for more info about the setuid mechanism.)
25872
25873 The store itself @emph{cannot} contain setuid programs: that would be a
25874 security issue since any user on the system can write derivations that
25875 populate the store (@pxref{The Store}). Thus, a different mechanism is
25876 used: instead of changing the setuid bit directly on files that are in
25877 the store, we let the system administrator @emph{declare} which programs
25878 should be setuid root.
25879
25880 The @code{setuid-programs} field of an @code{operating-system}
25881 declaration contains a list of G-expressions denoting the names of
25882 programs to be setuid-root (@pxref{Using the Configuration System}).
25883 For instance, the @command{passwd} program, which is part of the Shadow
25884 package, can be designated by this G-expression (@pxref{G-Expressions}):
25885
25886 @example
25887 #~(string-append #$shadow "/bin/passwd")
25888 @end example
25889
25890 A default set of setuid programs is defined by the
25891 @code{%setuid-programs} variable of the @code{(gnu system)} module.
25892
25893 @defvr {Scheme Variable} %setuid-programs
25894 A list of G-expressions denoting common programs that are setuid-root.
25895
25896 The list includes commands such as @command{passwd}, @command{ping},
25897 @command{su}, and @command{sudo}.
25898 @end defvr
25899
25900 Under the hood, the actual setuid programs are created in the
25901 @file{/run/setuid-programs} directory at system activation time. The
25902 files in this directory refer to the ``real'' binaries, which are in the
25903 store.
25904
25905 @node X.509 Certificates
25906 @section X.509 Certificates
25907
25908 @cindex HTTPS, certificates
25909 @cindex X.509 certificates
25910 @cindex TLS
25911 Web servers available over HTTPS (that is, HTTP over the transport-layer
25912 security mechanism, TLS) send client programs an @dfn{X.509 certificate}
25913 that the client can then use to @emph{authenticate} the server. To do
25914 that, clients verify that the server's certificate is signed by a
25915 so-called @dfn{certificate authority} (CA). But to verify the CA's
25916 signature, clients must have first acquired the CA's certificate.
25917
25918 Web browsers such as GNU@tie{}IceCat include their own set of CA
25919 certificates, such that they are able to verify CA signatures
25920 out-of-the-box.
25921
25922 However, most other programs that can talk HTTPS---@command{wget},
25923 @command{git}, @command{w3m}, etc.---need to be told where CA
25924 certificates can be found.
25925
25926 @cindex @code{nss-certs}
25927 In Guix, this is done by adding a package that provides certificates
25928 to the @code{packages} field of the @code{operating-system} declaration
25929 (@pxref{operating-system Reference}). Guix includes one such package,
25930 @code{nss-certs}, which is a set of CA certificates provided as part of
25931 Mozilla's Network Security Services.
25932
25933 Note that it is @emph{not} part of @code{%base-packages}, so you need to
25934 explicitly add it. The @file{/etc/ssl/certs} directory, which is where
25935 most applications and libraries look for certificates by default, points
25936 to the certificates installed globally.
25937
25938 Unprivileged users, including users of Guix on a foreign distro,
25939 can also install their own certificate package in
25940 their profile. A number of environment variables need to be defined so
25941 that applications and libraries know where to find them. Namely, the
25942 OpenSSL library honors the @code{SSL_CERT_DIR} and @code{SSL_CERT_FILE}
25943 variables. Some applications add their own environment variables; for
25944 instance, the Git version control system honors the certificate bundle
25945 pointed to by the @code{GIT_SSL_CAINFO} environment variable. Thus, you
25946 would typically run something like:
25947
25948 @example
25949 $ guix install nss-certs
25950 $ export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs"
25951 $ export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
25952 $ export GIT_SSL_CAINFO="$SSL_CERT_FILE"
25953 @end example
25954
25955 As another example, R requires the @code{CURL_CA_BUNDLE} environment
25956 variable to point to a certificate bundle, so you would have to run
25957 something like this:
25958
25959 @example
25960 $ guix install nss-certs
25961 $ export CURL_CA_BUNDLE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
25962 @end example
25963
25964 For other applications you may want to look up the required environment
25965 variable in the relevant documentation.
25966
25967
25968 @node Name Service Switch
25969 @section Name Service Switch
25970
25971 @cindex name service switch
25972 @cindex NSS
25973 The @code{(gnu system nss)} module provides bindings to the
25974 configuration file of the libc @dfn{name service switch} or @dfn{NSS}
25975 (@pxref{NSS Configuration File,,, libc, The GNU C Library Reference
25976 Manual}). In a nutshell, the NSS is a mechanism that allows libc to be
25977 extended with new ``name'' lookup methods for system databases, which
25978 includes host names, service names, user accounts, and more (@pxref{Name
25979 Service Switch, System Databases and Name Service Switch,, libc, The GNU
25980 C Library Reference Manual}).
25981
25982 The NSS configuration specifies, for each system database, which lookup
25983 method is to be used, and how the various methods are chained
25984 together---for instance, under which circumstances NSS should try the
25985 next method in the list. The NSS configuration is given in the
25986 @code{name-service-switch} field of @code{operating-system} declarations
25987 (@pxref{operating-system Reference, @code{name-service-switch}}).
25988
25989 @cindex nss-mdns
25990 @cindex .local, host name lookup
25991 As an example, the declaration below configures the NSS to use the
25992 @uref{https://0pointer.de/lennart/projects/nss-mdns/, @code{nss-mdns}
25993 back-end}, which supports host name lookups over multicast DNS (mDNS)
25994 for host names ending in @code{.local}:
25995
25996 @lisp
25997 (name-service-switch
25998 (hosts (list %files ;first, check /etc/hosts
25999
26000 ;; If the above did not succeed, try
26001 ;; with 'mdns_minimal'.
26002 (name-service
26003 (name "mdns_minimal")
26004
26005 ;; 'mdns_minimal' is authoritative for
26006 ;; '.local'. When it returns "not found",
26007 ;; no need to try the next methods.
26008 (reaction (lookup-specification
26009 (not-found => return))))
26010
26011 ;; Then fall back to DNS.
26012 (name-service
26013 (name "dns"))
26014
26015 ;; Finally, try with the "full" 'mdns'.
26016 (name-service
26017 (name "mdns")))))
26018 @end lisp
26019
26020 Do not worry: the @code{%mdns-host-lookup-nss} variable (see below)
26021 contains this configuration, so you will not have to type it if all you
26022 want is to have @code{.local} host lookup working.
26023
26024 Note that, in this case, in addition to setting the
26025 @code{name-service-switch} of the @code{operating-system} declaration,
26026 you also need to use @code{avahi-service-type} (@pxref{Networking Services,
26027 @code{avahi-service-type}}), or @code{%desktop-services}, which includes it
26028 (@pxref{Desktop Services}). Doing this makes @code{nss-mdns} accessible
26029 to the name service cache daemon (@pxref{Base Services,
26030 @code{nscd-service}}).
26031
26032 For convenience, the following variables provide typical NSS
26033 configurations.
26034
26035 @defvr {Scheme Variable} %default-nss
26036 This is the default name service switch configuration, a
26037 @code{name-service-switch} object.
26038 @end defvr
26039
26040 @defvr {Scheme Variable} %mdns-host-lookup-nss
26041 This is the name service switch configuration with support for host name
26042 lookup over multicast DNS (mDNS) for host names ending in @code{.local}.
26043 @end defvr
26044
26045 The reference for name service switch configuration is given below. It
26046 is a direct mapping of the configuration file format of the C library , so
26047 please refer to the C library manual for more information (@pxref{NSS
26048 Configuration File,,, libc, The GNU C Library Reference Manual}).
26049 Compared to the configuration file format of libc NSS, it has the advantage
26050 not only of adding this warm parenthetic feel that we like, but also
26051 static checks: you will know about syntax errors and typos as soon as you
26052 run @command{guix system}.
26053
26054 @deftp {Data Type} name-service-switch
26055
26056 This is the data type representation the configuration of libc's name
26057 service switch (NSS). Each field below represents one of the supported
26058 system databases.
26059
26060 @table @code
26061 @item aliases
26062 @itemx ethers
26063 @itemx group
26064 @itemx gshadow
26065 @itemx hosts
26066 @itemx initgroups
26067 @itemx netgroup
26068 @itemx networks
26069 @itemx password
26070 @itemx public-key
26071 @itemx rpc
26072 @itemx services
26073 @itemx shadow
26074 The system databases handled by the NSS. Each of these fields must be a
26075 list of @code{<name-service>} objects (see below).
26076 @end table
26077 @end deftp
26078
26079 @deftp {Data Type} name-service
26080
26081 This is the data type representing an actual name service and the
26082 associated lookup action.
26083
26084 @table @code
26085 @item name
26086 A string denoting the name service (@pxref{Services in the NSS
26087 configuration,,, libc, The GNU C Library Reference Manual}).
26088
26089 Note that name services listed here must be visible to nscd. This is
26090 achieved by passing the @code{#:name-services} argument to
26091 @code{nscd-service} the list of packages providing the needed name
26092 services (@pxref{Base Services, @code{nscd-service}}).
26093
26094 @item reaction
26095 An action specified using the @code{lookup-specification} macro
26096 (@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
26097 Reference Manual}). For example:
26098
26099 @lisp
26100 (lookup-specification (unavailable => continue)
26101 (success => return))
26102 @end lisp
26103 @end table
26104 @end deftp
26105
26106 @node Initial RAM Disk
26107 @section Initial RAM Disk
26108
26109 @cindex initrd
26110 @cindex initial RAM disk
26111 For bootstrapping purposes, the Linux-Libre kernel is passed an
26112 @dfn{initial RAM disk}, or @dfn{initrd}. An initrd contains a temporary
26113 root file system as well as an initialization script. The latter is
26114 responsible for mounting the real root file system, and for loading any
26115 kernel modules that may be needed to achieve that.
26116
26117 The @code{initrd-modules} field of an @code{operating-system}
26118 declaration allows you to specify Linux-libre kernel modules that must
26119 be available in the initrd. In particular, this is where you would list
26120 modules needed to actually drive the hard disk where your root partition
26121 is---although the default value of @code{initrd-modules} should cover
26122 most use cases. For example, assuming you need the @code{megaraid_sas}
26123 module in addition to the default modules to be able to access your root
26124 file system, you would write:
26125
26126 @lisp
26127 (operating-system
26128 ;; @dots{}
26129 (initrd-modules (cons "megaraid_sas" %base-initrd-modules)))
26130 @end lisp
26131
26132 @defvr {Scheme Variable} %base-initrd-modules
26133 This is the list of kernel modules included in the initrd by default.
26134 @end defvr
26135
26136 Furthermore, if you need lower-level customization, the @code{initrd}
26137 field of an @code{operating-system} declaration allows
26138 you to specify which initrd you would like to use. The @code{(gnu
26139 system linux-initrd)} module provides three ways to build an initrd: the
26140 high-level @code{base-initrd} procedure and the low-level
26141 @code{raw-initrd} and @code{expression->initrd} procedures.
26142
26143 The @code{base-initrd} procedure is intended to cover most common uses.
26144 For example, if you want to add a bunch of kernel modules to be loaded
26145 at boot time, you can define the @code{initrd} field of the operating
26146 system declaration like this:
26147
26148 @lisp
26149 (initrd (lambda (file-systems . rest)
26150 ;; Create a standard initrd but set up networking
26151 ;; with the parameters QEMU expects by default.
26152 (apply base-initrd file-systems
26153 #:qemu-networking? #t
26154 rest)))
26155 @end lisp
26156
26157 The @code{base-initrd} procedure also handles common use cases that
26158 involves using the system as a QEMU guest, or as a ``live'' system with
26159 volatile root file system.
26160
26161 The @code{base-initrd} procedure is built from @code{raw-initrd} procedure.
26162 Unlike @code{base-initrd}, @code{raw-initrd} doesn't do anything high-level,
26163 such as trying to guess which kernel modules and packages should be included
26164 to the initrd. An example use of @code{raw-initrd} is when a user has
26165 a custom Linux kernel configuration and default kernel modules included by
26166 @code{base-initrd} are not available.
26167
26168 The initial RAM disk produced by @code{base-initrd} or @code{raw-initrd}
26169 honors several options passed on the Linux kernel command line
26170 (that is, arguments passed @i{via} the @code{linux} command of GRUB, or the
26171 @code{-append} option of QEMU), notably:
26172
26173 @table @code
26174 @item --load=@var{boot}
26175 Tell the initial RAM disk to load @var{boot}, a file containing a Scheme
26176 program, once it has mounted the root file system.
26177
26178 Guix uses this option to yield control to a boot program that runs the
26179 service activation programs and then spawns the GNU@tie{}Shepherd, the
26180 initialization system.
26181
26182 @item --root=@var{root}
26183 Mount @var{root} as the root file system. @var{root} can be a
26184 device name like @code{/dev/sda1}, a file system label, or a file system
26185 UUID.
26186
26187 @item --system=@var{system}
26188 Have @file{/run/booted-system} and @file{/run/current-system} point to
26189 @var{system}.
26190
26191 @item modprobe.blacklist=@var{modules}@dots{}
26192 @cindex module, black-listing
26193 @cindex black list, of kernel modules
26194 Instruct the initial RAM disk as well as the @command{modprobe} command
26195 (from the kmod package) to refuse to load @var{modules}. @var{modules}
26196 must be a comma-separated list of module names---e.g.,
26197 @code{usbkbd,9pnet}.
26198
26199 @item --repl
26200 Start a read-eval-print loop (REPL) from the initial RAM disk before it
26201 tries to load kernel modules and to mount the root file system. Our
26202 marketing team calls it @dfn{boot-to-Guile}. The Schemer in you will
26203 love it. @xref{Using Guile Interactively,,, guile, GNU Guile Reference
26204 Manual}, for more information on Guile's REPL.
26205
26206 @end table
26207
26208 Now that you know all the features that initial RAM disks produced by
26209 @code{base-initrd} and @code{raw-initrd} provide,
26210 here is how to use it and customize it further.
26211
26212 @cindex initrd
26213 @cindex initial RAM disk
26214 @deffn {Scheme Procedure} raw-initrd @var{file-systems} @
26215 [#:linux-modules '()] [#:mapped-devices '()] @
26216 [#:keyboard-layout #f] @
26217 [#:helper-packages '()] [#:qemu-networking? #f] [#:volatile-root? #f]
26218 Return a derivation that builds a raw initrd. @var{file-systems} is
26219 a list of file systems to be mounted by the initrd, possibly in addition to
26220 the root file system specified on the kernel command line via @code{--root}.
26221 @var{linux-modules} is a list of kernel modules to be loaded at boot time.
26222 @var{mapped-devices} is a list of device mappings to realize before
26223 @var{file-systems} are mounted (@pxref{Mapped Devices}).
26224 @var{helper-packages} is a list of packages to be copied in the initrd. It may
26225 include @code{e2fsck/static} or other packages needed by the initrd to check
26226 the root file system.
26227
26228 When true, @var{keyboard-layout} is a @code{<keyboard-layout>} record denoting
26229 the desired console keyboard layout. This is done before @var{mapped-devices}
26230 are set up and before @var{file-systems} are mounted such that, should the
26231 user need to enter a passphrase or use the REPL, this happens using the
26232 intended keyboard layout.
26233
26234 When @var{qemu-networking?} is true, set up networking with the standard QEMU
26235 parameters. When @var{virtio?} is true, load additional modules so that the
26236 initrd can be used as a QEMU guest with para-virtualized I/O drivers.
26237
26238 When @var{volatile-root?} is true, the root file system is writable but any changes
26239 to it are lost.
26240 @end deffn
26241
26242 @deffn {Scheme Procedure} base-initrd @var{file-systems} @
26243 [#:mapped-devices '()] [#:keyboard-layout #f] @
26244 [#:qemu-networking? #f] [#:volatile-root? #f] @
26245 [#:linux-modules '()]
26246 Return as a file-like object a generic initrd, with kernel
26247 modules taken from @var{linux}. @var{file-systems} is a list of file-systems to be
26248 mounted by the initrd, possibly in addition to the root file system specified
26249 on the kernel command line via @code{--root}. @var{mapped-devices} is a list of device
26250 mappings to realize before @var{file-systems} are mounted.
26251
26252 When true, @var{keyboard-layout} is a @code{<keyboard-layout>} record denoting
26253 the desired console keyboard layout. This is done before @var{mapped-devices}
26254 are set up and before @var{file-systems} are mounted such that, should the
26255 user need to enter a passphrase or use the REPL, this happens using the
26256 intended keyboard layout.
26257
26258 @var{qemu-networking?} and @var{volatile-root?} behaves as in @code{raw-initrd}.
26259
26260 The initrd is automatically populated with all the kernel modules necessary
26261 for @var{file-systems} and for the given options. Additional kernel
26262 modules can be listed in @var{linux-modules}. They will be added to the initrd, and
26263 loaded at boot time in the order in which they appear.
26264 @end deffn
26265
26266 Needless to say, the initrds we produce and use embed a
26267 statically-linked Guile, and the initialization program is a Guile
26268 program. That gives a lot of flexibility. The
26269 @code{expression->initrd} procedure builds such an initrd, given the
26270 program to run in that initrd.
26271
26272 @deffn {Scheme Procedure} expression->initrd @var{exp} @
26273 [#:guile %guile-static-stripped] [#:name "guile-initrd"]
26274 Return as a file-like object a Linux initrd (a gzipped cpio archive)
26275 containing @var{guile} and that evaluates @var{exp}, a G-expression,
26276 upon booting. All the derivations referenced by @var{exp} are
26277 automatically copied to the initrd.
26278 @end deffn
26279
26280 @node Bootloader Configuration
26281 @section Bootloader Configuration
26282
26283 @cindex bootloader
26284 @cindex boot loader
26285
26286 The operating system supports multiple bootloaders. The bootloader is
26287 configured using @code{bootloader-configuration} declaration. All the
26288 fields of this structure are bootloader agnostic except for one field,
26289 @code{bootloader} that indicates the bootloader to be configured and
26290 installed.
26291
26292 Some of the bootloaders do not honor every field of
26293 @code{bootloader-configuration}. For instance, the extlinux
26294 bootloader does not support themes and thus ignores the @code{theme}
26295 field.
26296
26297 @deftp {Data Type} bootloader-configuration
26298 The type of a bootloader configuration declaration.
26299
26300 @table @asis
26301
26302 @item @code{bootloader}
26303 @cindex EFI, bootloader
26304 @cindex UEFI, bootloader
26305 @cindex BIOS, bootloader
26306 The bootloader to use, as a @code{bootloader} object. For now
26307 @code{grub-bootloader}, @code{grub-efi-bootloader},
26308 @code{extlinux-bootloader} and @code{u-boot-bootloader} are supported.
26309
26310 @vindex grub-efi-bootloader
26311 @code{grub-efi-bootloader} allows to boot on modern systems using the
26312 @dfn{Unified Extensible Firmware Interface} (UEFI). This is what you should
26313 use if the installation image contains a @file{/sys/firmware/efi} directory
26314 when you boot it on your system.
26315
26316 @vindex grub-bootloader
26317 @code{grub-bootloader} allows you to boot in particular Intel-based machines
26318 in ``legacy'' BIOS mode.
26319
26320 @cindex ARM, bootloaders
26321 @cindex AArch64, bootloaders
26322 Available bootloaders are described in @code{(gnu bootloader @dots{})}
26323 modules. In particular, @code{(gnu bootloader u-boot)} contains definitions
26324 of bootloaders for a wide range of ARM and AArch64 systems, using the
26325 @uref{https://www.denx.de/wiki/U-Boot/, U-Boot bootloader}.
26326
26327 @item @code{target}
26328 This is a string denoting the target onto which to install the
26329 bootloader.
26330
26331 The interpretation depends on the bootloader in question. For
26332 @code{grub-bootloader}, for example, it should be a device name understood by
26333 the bootloader @command{installer} command, such as @code{/dev/sda} or
26334 @code{(hd0)} (@pxref{Invoking grub-install,,, grub, GNU GRUB Manual}). For
26335 @code{grub-efi-bootloader}, it should be the mount point of the EFI file
26336 system, usually @file{/boot/efi}.
26337
26338 @item @code{menu-entries} (default: @code{()})
26339 A possibly empty list of @code{menu-entry} objects (see below), denoting
26340 entries to appear in the bootloader menu, in addition to the current
26341 system entry and the entry pointing to previous system generations.
26342
26343 @item @code{default-entry} (default: @code{0})
26344 The index of the default boot menu entry. Index 0 is for the entry of the
26345 current system.
26346
26347 @item @code{timeout} (default: @code{5})
26348 The number of seconds to wait for keyboard input before booting. Set to
26349 0 to boot immediately, and to -1 to wait indefinitely.
26350
26351 @cindex keyboard layout, for the bootloader
26352 @item @code{keyboard-layout} (default: @code{#f})
26353 If this is @code{#f}, the bootloader's menu (if any) uses the default keyboard
26354 layout, usually US@tie{}English (``qwerty'').
26355
26356 Otherwise, this must be a @code{keyboard-layout} object (@pxref{Keyboard
26357 Layout}).
26358
26359 @quotation Note
26360 This option is currently ignored by bootloaders other than @code{grub} and
26361 @code{grub-efi}.
26362 @end quotation
26363
26364 @item @code{theme} (default: @var{#f})
26365 The bootloader theme object describing the theme to use. If no theme
26366 is provided, some bootloaders might use a default theme, that's true
26367 for GRUB.
26368
26369 @item @code{terminal-outputs} (default: @code{'(gfxterm)})
26370 The output terminals used for the bootloader boot menu, as a list of
26371 symbols. GRUB accepts the values: @code{console}, @code{serial},
26372 @code{serial_@{0-3@}}, @code{gfxterm}, @code{vga_text},
26373 @code{mda_text}, @code{morse}, and @code{pkmodem}. This field
26374 corresponds to the GRUB variable @code{GRUB_TERMINAL_OUTPUT} (@pxref{Simple
26375 configuration,,, grub,GNU GRUB manual}).
26376
26377 @item @code{terminal-inputs} (default: @code{'()})
26378 The input terminals used for the bootloader boot menu, as a list of
26379 symbols. For GRUB, the default is the native platform terminal as
26380 determined at run-time. GRUB accepts the values: @code{console},
26381 @code{serial}, @code{serial_@{0-3@}}, @code{at_keyboard}, and
26382 @code{usb_keyboard}. This field corresponds to the GRUB variable
26383 @code{GRUB_TERMINAL_INPUT} (@pxref{Simple configuration,,, grub,GNU GRUB
26384 manual}).
26385
26386 @item @code{serial-unit} (default: @code{#f})
26387 The serial unit used by the bootloader, as an integer from 0 to 3.
26388 For GRUB, it is chosen at run-time; currently GRUB chooses 0, which
26389 corresponds to COM1 (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
26390
26391 @item @code{serial-speed} (default: @code{#f})
26392 The speed of the serial interface, as an integer. For GRUB, the
26393 default value is chosen at run-time; currently GRUB chooses
26394 9600@tie{}bps (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
26395 @end table
26396
26397 @end deftp
26398
26399 @cindex dual boot
26400 @cindex boot menu
26401 Should you want to list additional boot menu entries @i{via} the
26402 @code{menu-entries} field above, you will need to create them with the
26403 @code{menu-entry} form. For example, imagine you want to be able to
26404 boot another distro (hard to imagine!), you can define a menu entry
26405 along these lines:
26406
26407 @lisp
26408 (menu-entry
26409 (label "The Other Distro")
26410 (linux "/boot/old/vmlinux-2.6.32")
26411 (linux-arguments '("root=/dev/sda2"))
26412 (initrd "/boot/old/initrd"))
26413 @end lisp
26414
26415 Details below.
26416
26417 @deftp {Data Type} menu-entry
26418 The type of an entry in the bootloader menu.
26419
26420 @table @asis
26421
26422 @item @code{label}
26423 The label to show in the menu---e.g., @code{"GNU"}.
26424
26425 @item @code{linux}
26426 The Linux kernel image to boot, for example:
26427
26428 @lisp
26429 (file-append linux-libre "/bzImage")
26430 @end lisp
26431
26432 For GRUB, it is also possible to specify a device explicitly in the
26433 file path using GRUB's device naming convention (@pxref{Naming
26434 convention,,, grub, GNU GRUB manual}), for example:
26435
26436 @example
26437 "(hd0,msdos1)/boot/vmlinuz"
26438 @end example
26439
26440 If the device is specified explicitly as above, then the @code{device}
26441 field is ignored entirely.
26442
26443 @item @code{linux-arguments} (default: @code{()})
26444 The list of extra Linux kernel command-line arguments---e.g.,
26445 @code{("console=ttyS0")}.
26446
26447 @item @code{initrd}
26448 A G-Expression or string denoting the file name of the initial RAM disk
26449 to use (@pxref{G-Expressions}).
26450 @item @code{device} (default: @code{#f})
26451 The device where the kernel and initrd are to be found---i.e., for GRUB,
26452 @dfn{root} for this menu entry (@pxref{root,,, grub, GNU GRUB manual}).
26453
26454 This may be a file system label (a string), a file system UUID (a
26455 bytevector, @pxref{File Systems}), or @code{#f}, in which case
26456 the bootloader will search the device containing the file specified by
26457 the @code{linux} field (@pxref{search,,, grub, GNU GRUB manual}). It
26458 must @emph{not} be an OS device name such as @file{/dev/sda1}.
26459
26460 @end table
26461 @end deftp
26462
26463 @cindex HDPI
26464 @cindex HiDPI
26465 @cindex resolution
26466 @c FIXME: Write documentation once it's stable.
26467 For now only GRUB has theme support. GRUB themes are created using
26468 the @code{grub-theme} form, which is not fully documented yet.
26469
26470 @deftp {Data Type} grub-theme
26471 Data type representing the configuration of the GRUB theme.
26472
26473 @table @asis
26474 @item @code{gfxmode} (default: @code{'("auto")})
26475 The GRUB @code{gfxmode} to set (a list of screen resolution strings, see
26476 @pxref{gfxmode,,, grub, GNU GRUB manual}).
26477 @end table
26478 @end deftp
26479
26480 @defvr {Scheme Variable} %default-theme
26481 This is the default GRUB theme used by the operating system if no
26482 @code{theme} field is specified in @code{bootloader-configuration}
26483 record.
26484
26485 It comes with a fancy background image displaying the GNU and Guix
26486 logos.
26487 @end defvr
26488
26489 For example, to override the default resolution, you may use something
26490 like
26491
26492 @lisp
26493 (bootloader
26494 (grub-configuration
26495 ;; @dots{}
26496 (theme (grub-theme
26497 (inherit %default-theme)
26498 (gfxmode '("1024x786x32" "auto"))))))
26499 @end lisp
26500
26501 @node Invoking guix system
26502 @section Invoking @code{guix system}
26503
26504 Once you have written an operating system declaration as seen in the
26505 previous section, it can be @dfn{instantiated} using the @command{guix
26506 system} command. The synopsis is:
26507
26508 @example
26509 guix system @var{options}@dots{} @var{action} @var{file}
26510 @end example
26511
26512 @var{file} must be the name of a file containing an
26513 @code{operating-system} declaration. @var{action} specifies how the
26514 operating system is instantiated. Currently the following values are
26515 supported:
26516
26517 @table @code
26518 @item search
26519 Display available service type definitions that match the given regular
26520 expressions, sorted by relevance:
26521
26522 @cindex HDPI
26523 @cindex HiDPI
26524 @cindex resolution
26525 @example
26526 $ guix system search console
26527 name: console-fonts
26528 location: gnu/services/base.scm:806:2
26529 extends: shepherd-root
26530 description: Install the given fonts on the specified ttys (fonts are per
26531 + virtual console on GNU/Linux). The value of this service is a list of
26532 + tty/font pairs. The font can be the name of a font provided by the `kbd'
26533 + package or any valid argument to `setfont', as in this example:
26534 +
26535 + '(("tty1" . "LatGrkCyr-8x16")
26536 + ("tty2" . (file-append
26537 + font-tamzen
26538 + "/share/kbd/consolefonts/TamzenForPowerline10x20.psf"))
26539 + ("tty3" . (file-append
26540 + font-terminus
26541 + "/share/consolefonts/ter-132n"))) ; for HDPI
26542 relevance: 9
26543
26544 name: mingetty
26545 location: gnu/services/base.scm:1190:2
26546 extends: shepherd-root
26547 description: Provide console login using the `mingetty' program.
26548 relevance: 2
26549
26550 name: login
26551 location: gnu/services/base.scm:860:2
26552 extends: pam
26553 description: Provide a console log-in service as specified by its
26554 + configuration value, a `login-configuration' object.
26555 relevance: 2
26556
26557 @dots{}
26558 @end example
26559
26560 As for @command{guix package --search}, the result is written in
26561 @code{recutils} format, which makes it easy to filter the output
26562 (@pxref{Top, GNU recutils databases,, recutils, GNU recutils manual}).
26563
26564 @item reconfigure
26565 Build the operating system described in @var{file}, activate it, and
26566 switch to it@footnote{This action (and the related actions
26567 @code{switch-generation} and @code{roll-back}) are usable only on
26568 systems already running Guix System.}.
26569
26570 @quotation Note
26571 @c The paragraph below refers to the problem discussed at
26572 @c <https://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
26573 It is highly recommended to run @command{guix pull} once before you run
26574 @command{guix system reconfigure} for the first time (@pxref{Invoking
26575 guix pull}). Failing to do that you would see an older version of Guix
26576 once @command{reconfigure} has completed.
26577 @end quotation
26578
26579 This effects all the configuration specified in @var{file}: user
26580 accounts, system services, global package list, setuid programs, etc.
26581 The command starts system services specified in @var{file} that are not
26582 currently running; if a service is currently running this command will
26583 arrange for it to be upgraded the next time it is stopped (e.g.@: by
26584 @code{herd stop X} or @code{herd restart X}).
26585
26586 This command creates a new generation whose number is one greater than
26587 the current generation (as reported by @command{guix system
26588 list-generations}). If that generation already exists, it will be
26589 overwritten. This behavior mirrors that of @command{guix package}
26590 (@pxref{Invoking guix package}).
26591
26592 It also adds a bootloader menu entry for the new OS configuration,
26593 ---unless @option{--no-bootloader} is passed. For GRUB, it moves
26594 entries for older configurations to a submenu, allowing you to choose
26595 an older system generation at boot time should you need it.
26596
26597 @cindex provenance tracking, of the operating system
26598 Upon completion, the new system is deployed under
26599 @file{/run/current-system}. This directory contains @dfn{provenance
26600 meta-data}: the list of channels in use (@pxref{Channels}) and
26601 @var{file} itself, when available. This information is useful should
26602 you later want to inspect how this particular generation was built.
26603
26604 In fact, assuming @var{file} is self-contained, you can later rebuild
26605 generation @var{n} of your operating system with:
26606
26607 @example
26608 guix time-machine \
26609 -C /var/guix/profiles/system-@var{n}-link/channels.scm -- \
26610 system reconfigure \
26611 /var/guix/profiles/system-@var{n}-link/configuration.scm
26612 @end example
26613
26614 You can think of it as some sort of built-in version control! Your
26615 system is not just a binary artifact: @emph{it carries its own source}.
26616 @xref{Service Reference, @code{provenance-service-type}}, for more
26617 information on provenance tracking.
26618
26619 @item switch-generation
26620 @cindex generations
26621 Switch to an existing system generation. This action atomically
26622 switches the system profile to the specified system generation. It
26623 also rearranges the system's existing bootloader menu entries. It
26624 makes the menu entry for the specified system generation the default,
26625 and it moves the entries for the other generations to a submenu, if
26626 supported by the bootloader being used. The next time the system
26627 boots, it will use the specified system generation.
26628
26629 The bootloader itself is not being reinstalled when using this
26630 command. Thus, the installed bootloader is used with an updated
26631 configuration file.
26632
26633 The target generation can be specified explicitly by its generation
26634 number. For example, the following invocation would switch to system
26635 generation 7:
26636
26637 @example
26638 guix system switch-generation 7
26639 @end example
26640
26641 The target generation can also be specified relative to the current
26642 generation with the form @code{+N} or @code{-N}, where @code{+3} means
26643 ``3 generations ahead of the current generation,'' and @code{-1} means
26644 ``1 generation prior to the current generation.'' When specifying a
26645 negative value such as @code{-1}, you must precede it with @code{--} to
26646 prevent it from being parsed as an option. For example:
26647
26648 @example
26649 guix system switch-generation -- -1
26650 @end example
26651
26652 Currently, the effect of invoking this action is @emph{only} to switch
26653 the system profile to an existing generation and rearrange the
26654 bootloader menu entries. To actually start using the target system
26655 generation, you must reboot after running this action. In the future,
26656 it will be updated to do the same things as @command{reconfigure},
26657 like activating and deactivating services.
26658
26659 This action will fail if the specified generation does not exist.
26660
26661 @item roll-back
26662 @cindex rolling back
26663 Switch to the preceding system generation. The next time the system
26664 boots, it will use the preceding system generation. This is the inverse
26665 of @command{reconfigure}, and it is exactly the same as invoking
26666 @command{switch-generation} with an argument of @code{-1}.
26667
26668 Currently, as with @command{switch-generation}, you must reboot after
26669 running this action to actually start using the preceding system
26670 generation.
26671
26672 @item delete-generations
26673 @cindex deleting system generations
26674 @cindex saving space
26675 Delete system generations, making them candidates for garbage collection
26676 (@pxref{Invoking guix gc}, for information on how to run the ``garbage
26677 collector'').
26678
26679 This works in the same way as @command{guix package --delete-generations}
26680 (@pxref{Invoking guix package, @code{--delete-generations}}). With no
26681 arguments, all system generations but the current one are deleted:
26682
26683 @example
26684 guix system delete-generations
26685 @end example
26686
26687 You can also select the generations you want to delete. The example below
26688 deletes all the system generations that are more than two month old:
26689
26690 @example
26691 guix system delete-generations 2m
26692 @end example
26693
26694 Running this command automatically reinstalls the bootloader with an updated
26695 list of menu entries---e.g., the ``old generations'' sub-menu in GRUB no
26696 longer lists the generations that have been deleted.
26697
26698 @item build
26699 Build the derivation of the operating system, which includes all the
26700 configuration files and programs needed to boot and run the system.
26701 This action does not actually install anything.
26702
26703 @item init
26704 Populate the given directory with all the files necessary to run the
26705 operating system specified in @var{file}. This is useful for first-time
26706 installations of Guix System. For instance:
26707
26708 @example
26709 guix system init my-os-config.scm /mnt
26710 @end example
26711
26712 copies to @file{/mnt} all the store items required by the configuration
26713 specified in @file{my-os-config.scm}. This includes configuration
26714 files, packages, and so on. It also creates other essential files
26715 needed for the system to operate correctly---e.g., the @file{/etc},
26716 @file{/var}, and @file{/run} directories, and the @file{/bin/sh} file.
26717
26718 This command also installs bootloader on the target specified in
26719 @file{my-os-config}, unless the @option{--no-bootloader} option was
26720 passed.
26721
26722 @item vm
26723 @cindex virtual machine
26724 @cindex VM
26725 @anchor{guix system vm}
26726 Build a virtual machine that contains the operating system declared in
26727 @var{file}, and return a script to run that virtual machine (VM).
26728
26729 @quotation Note
26730 The @code{vm} action and others below
26731 can use KVM support in the Linux-libre kernel. Specifically, if the
26732 machine has hardware virtualization support, the corresponding
26733 KVM kernel module should be loaded, and the @file{/dev/kvm} device node
26734 must exist and be readable and writable by the user and by the
26735 build users of the daemon (@pxref{Build Environment Setup}).
26736 @end quotation
26737
26738 Arguments given to the script are passed to QEMU as in the example
26739 below, which enables networking and requests 1@tie{}GiB of RAM for the
26740 emulated machine:
26741
26742 @example
26743 $ /gnu/store/@dots{}-run-vm.sh -m 1024 -smp 2 -net user,model=virtio-net-pci
26744 @end example
26745
26746 The VM shares its store with the host system.
26747
26748 Additional file systems can be shared between the host and the VM using
26749 the @code{--share} and @code{--expose} command-line options: the former
26750 specifies a directory to be shared with write access, while the latter
26751 provides read-only access to the shared directory.
26752
26753 The example below creates a VM in which the user's home directory is
26754 accessible read-only, and where the @file{/exchange} directory is a
26755 read-write mapping of @file{$HOME/tmp} on the host:
26756
26757 @example
26758 guix system vm my-config.scm \
26759 --expose=$HOME --share=$HOME/tmp=/exchange
26760 @end example
26761
26762 On GNU/Linux, the default is to boot directly to the kernel; this has
26763 the advantage of requiring only a very tiny root disk image since the
26764 store of the host can then be mounted.
26765
26766 The @code{--full-boot} option forces a complete boot sequence, starting
26767 with the bootloader. This requires more disk space since a root image
26768 containing at least the kernel, initrd, and bootloader data files must
26769 be created. The @code{--image-size} option can be used to specify the
26770 size of the image.
26771
26772 @cindex System images, creation in various formats
26773 @cindex Creating system images in various formats
26774 @item vm-image
26775 @itemx disk-image
26776 @itemx docker-image
26777 Return a virtual machine, disk image, or Docker image of the operating
26778 system declared in @var{file} that stands alone. By default,
26779 @command{guix system} estimates the size of the image needed to store
26780 the system, but you can use the @option{--image-size} option to specify
26781 a value. Docker images are built to contain exactly what they need, so
26782 the @option{--image-size} option is ignored in the case of
26783 @code{docker-image}.
26784
26785 You can specify the root file system type by using the
26786 @option{--file-system-type} option. It defaults to @code{ext4}.
26787
26788 When using @code{vm-image}, the returned image is in qcow2 format, which
26789 the QEMU emulator can efficiently use. @xref{Running Guix in a VM},
26790 for more information on how to run the image in a virtual machine.
26791
26792 When using @code{disk-image}, a raw disk image is produced; it can be
26793 copied as is to a USB stick, for instance. Assuming @code{/dev/sdc} is
26794 the device corresponding to a USB stick, one can copy the image to it
26795 using the following command:
26796
26797 @example
26798 # dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
26799 @end example
26800
26801 When using @code{docker-image}, a Docker image is produced. Guix builds
26802 the image from scratch, not from a pre-existing Docker base image. As a
26803 result, it contains @emph{exactly} what you define in the operating
26804 system configuration file. You can then load the image and launch a
26805 Docker container using commands like the following:
26806
26807 @example
26808 image_id="`docker load < guix-system-docker-image.tar.gz`"
26809 container_id="`docker create $image_id`"
26810 docker start $container_id
26811 @end example
26812
26813 This command starts a new Docker container from the specified image. It
26814 will boot the Guix system in the usual manner, which means it will
26815 start any services you have defined in the operating system
26816 configuration. You can get an interactive shell running in the container
26817 using @command{docker exec}:
26818
26819 @example
26820 docker exec -ti $container_id /run/current-system/profile/bin/bash --login
26821 @end example
26822
26823 Depending on what you run in the Docker container, it
26824 may be necessary to give the container additional permissions. For
26825 example, if you intend to build software using Guix inside of the Docker
26826 container, you may need to pass the @option{--privileged} option to
26827 @code{docker create}.
26828
26829 @item container
26830 Return a script to run the operating system declared in @var{file}
26831 within a container. Containers are a set of lightweight isolation
26832 mechanisms provided by the kernel Linux-libre. Containers are
26833 substantially less resource-demanding than full virtual machines since
26834 the kernel, shared objects, and other resources can be shared with the
26835 host system; this also means they provide thinner isolation.
26836
26837 Currently, the script must be run as root in order to support more than
26838 a single user and group. The container shares its store with the host
26839 system.
26840
26841 As with the @code{vm} action (@pxref{guix system vm}), additional file
26842 systems to be shared between the host and container can be specified
26843 using the @option{--share} and @option{--expose} options:
26844
26845 @example
26846 guix system container my-config.scm \
26847 --expose=$HOME --share=$HOME/tmp=/exchange
26848 @end example
26849
26850 @quotation Note
26851 This option requires Linux-libre 3.19 or newer.
26852 @end quotation
26853
26854 @end table
26855
26856 @var{options} can contain any of the common build options (@pxref{Common
26857 Build Options}). In addition, @var{options} can contain one of the
26858 following:
26859
26860 @table @option
26861 @item --expression=@var{expr}
26862 @itemx -e @var{expr}
26863 Consider the operating-system @var{expr} evaluates to.
26864 This is an alternative to specifying a file which evaluates to an
26865 operating system.
26866 This is used to generate the Guix system installer @pxref{Building the
26867 Installation Image}).
26868
26869 @item --system=@var{system}
26870 @itemx -s @var{system}
26871 Attempt to build for @var{system} instead of the host system type.
26872 This works as per @command{guix build} (@pxref{Invoking guix build}).
26873
26874 @item --derivation
26875 @itemx -d
26876 Return the derivation file name of the given operating system without
26877 building anything.
26878
26879 @cindex provenance tracking, of the operating system
26880 @item --save-provenance
26881 As discussed above, @command{guix system init} and @command{guix system
26882 reconfigure} always save provenance information @i{via} a dedicated
26883 service (@pxref{Service Reference, @code{provenance-service-type}}).
26884 However, other commands don't do that by default. If you wish to, say,
26885 create a virtual machine image that contains provenance information, you
26886 can run:
26887
26888 @example
26889 guix system vm-image --save-provenance config.scm
26890 @end example
26891
26892 That way, the resulting image will effectively ``embed its own source''
26893 in the form of meta-data in @file{/run/current-system}. With that
26894 information, one can rebuild the image to make sure it really contains
26895 what it pretends to contain; or they could use that to derive a variant
26896 of the image.
26897
26898 @item --file-system-type=@var{type}
26899 @itemx -t @var{type}
26900 For the @code{disk-image} action, create a file system of the given
26901 @var{type} on the image.
26902
26903 When this option is omitted, @command{guix system} uses @code{ext4}.
26904
26905 @cindex ISO-9660 format
26906 @cindex CD image format
26907 @cindex DVD image format
26908 @code{--file-system-type=iso9660} produces an ISO-9660 image, suitable
26909 for burning on CDs and DVDs.
26910
26911 @item --image-size=@var{size}
26912 For the @code{vm-image} and @code{disk-image} actions, create an image
26913 of the given @var{size}. @var{size} may be a number of bytes, or it may
26914 include a unit as a suffix (@pxref{Block size, size specifications,,
26915 coreutils, GNU Coreutils}).
26916
26917 When this option is omitted, @command{guix system} computes an estimate
26918 of the image size as a function of the size of the system declared in
26919 @var{file}.
26920
26921 @item --network
26922 @itemx -N
26923 For the @code{container} action, allow containers to access the host network,
26924 that is, do not create a network namespace.
26925
26926 @item --root=@var{file}
26927 @itemx -r @var{file}
26928 Make @var{file} a symlink to the result, and register it as a garbage
26929 collector root.
26930
26931 @item --skip-checks
26932 Skip pre-installation safety checks.
26933
26934 By default, @command{guix system init} and @command{guix system
26935 reconfigure} perform safety checks: they make sure the file systems that
26936 appear in the @code{operating-system} declaration actually exist
26937 (@pxref{File Systems}), and that any Linux kernel modules that may be
26938 needed at boot time are listed in @code{initrd-modules} (@pxref{Initial
26939 RAM Disk}). Passing this option skips these tests altogether.
26940
26941 @cindex on-error
26942 @cindex on-error strategy
26943 @cindex error strategy
26944 @item --on-error=@var{strategy}
26945 Apply @var{strategy} when an error occurs when reading @var{file}.
26946 @var{strategy} may be one of the following:
26947
26948 @table @code
26949 @item nothing-special
26950 Report the error concisely and exit. This is the default strategy.
26951
26952 @item backtrace
26953 Likewise, but also display a backtrace.
26954
26955 @item debug
26956 Report the error and enter Guile's debugger. From there, you can run
26957 commands such as @code{,bt} to get a backtrace, @code{,locals} to
26958 display local variable values, and more generally inspect the state of the
26959 program. @xref{Debug Commands,,, guile, GNU Guile Reference Manual}, for
26960 a list of available debugging commands.
26961 @end table
26962 @end table
26963
26964 Once you have built, configured, re-configured, and re-re-configured
26965 your Guix installation, you may find it useful to list the operating
26966 system generations available on disk---and that you can choose from the
26967 bootloader boot menu:
26968
26969 @table @code
26970
26971 @item describe
26972 Describe the current system generation: its file name, the kernel and
26973 bootloader used, etc., as well as provenance information when available.
26974
26975 @item list-generations
26976 List a summary of each generation of the operating system available on
26977 disk, in a human-readable way. This is similar to the
26978 @option{--list-generations} option of @command{guix package}
26979 (@pxref{Invoking guix package}).
26980
26981 Optionally, one can specify a pattern, with the same syntax that is used
26982 in @command{guix package --list-generations}, to restrict the list of
26983 generations displayed. For instance, the following command displays
26984 generations that are up to 10 days old:
26985
26986 @example
26987 $ guix system list-generations 10d
26988 @end example
26989
26990 @end table
26991
26992 The @command{guix system} command has even more to offer! The following
26993 sub-commands allow you to visualize how your system services relate to
26994 each other:
26995
26996 @anchor{system-extension-graph}
26997 @table @code
26998
26999 @item extension-graph
27000 Emit in Dot/Graphviz format to standard output the @dfn{service
27001 extension graph} of the operating system defined in @var{file}
27002 (@pxref{Service Composition}, for more information on service
27003 extensions.)
27004
27005 The command:
27006
27007 @example
27008 $ guix system extension-graph @var{file} | dot -Tpdf > services.pdf
27009 @end example
27010
27011 produces a PDF file showing the extension relations among services.
27012
27013 @anchor{system-shepherd-graph}
27014 @item shepherd-graph
27015 Emit in Dot/Graphviz format to standard output the @dfn{dependency
27016 graph} of shepherd services of the operating system defined in
27017 @var{file}. @xref{Shepherd Services}, for more information and for an
27018 example graph.
27019
27020 @end table
27021
27022 @node Invoking guix deploy
27023 @section Invoking @code{guix deploy}
27024
27025 We've already seen @code{operating-system} declarations used to manage a
27026 machine's configuration locally. Suppose you need to configure multiple
27027 machines, though---perhaps you're managing a service on the web that's
27028 comprised of several servers. @command{guix deploy} enables you to use those
27029 same @code{operating-system} declarations to manage multiple remote hosts at
27030 once as a logical ``deployment''.
27031
27032 @quotation Note
27033 The functionality described in this section is still under development
27034 and is subject to change. Get in touch with us on
27035 @email{guix-devel@@gnu.org}!
27036 @end quotation
27037
27038 @example
27039 guix deploy @var{file}
27040 @end example
27041
27042 Such an invocation will deploy the machines that the code within @var{file}
27043 evaluates to. As an example, @var{file} might contain a definition like this:
27044
27045 @lisp
27046 ;; This is a Guix deployment of a "bare bones" setup, with
27047 ;; no X11 display server, to a machine with an SSH daemon
27048 ;; listening on localhost:2222. A configuration such as this
27049 ;; may be appropriate for virtual machine with ports
27050 ;; forwarded to the host's loopback interface.
27051
27052 (use-service-modules networking ssh)
27053 (use-package-modules bootloaders)
27054
27055 (define %system
27056 (operating-system
27057 (host-name "gnu-deployed")
27058 (timezone "Etc/UTC")
27059 (bootloader (bootloader-configuration
27060 (bootloader grub-bootloader)
27061 (target "/dev/vda")
27062 (terminal-outputs '(console))))
27063 (file-systems (cons (file-system
27064 (mount-point "/")
27065 (device "/dev/vda1")
27066 (type "ext4"))
27067 %base-file-systems))
27068 (services
27069 (append (list (service dhcp-client-service-type)
27070 (service openssh-service-type
27071 (openssh-configuration
27072 (permit-root-login #t)
27073 (allow-empty-passwords? #t))))
27074 %base-services))))
27075
27076 (list (machine
27077 (operating-system %system)
27078 (environment managed-host-environment-type)
27079 (configuration (machine-ssh-configuration
27080 (host-name "localhost")
27081 (system "x86_64-linux")
27082 (user "alice")
27083 (identity "./id_rsa")
27084 (port 2222)))))
27085 @end lisp
27086
27087 The file should evaluate to a list of @var{machine} objects. This example,
27088 upon being deployed, will create a new generation on the remote system
27089 realizing the @code{operating-system} declaration @var{%system}.
27090 @var{environment} and @var{configuration} specify how the machine should be
27091 provisioned---that is, how the computing resources should be created and
27092 managed. The above example does not create any resources, as a
27093 @code{'managed-host} is a machine that is already running the Guix system and
27094 available over the network. This is a particularly simple case; a more
27095 complex deployment may involve, for example, starting virtual machines through
27096 a Virtual Private Server (VPS) provider. In such a case, a different
27097 @var{environment} type would be used.
27098
27099 Do note that you first need to generate a key pair on the coordinator machine
27100 to allow the daemon to export signed archives of files from the store
27101 (@pxref{Invoking guix archive}).
27102
27103 @example
27104 # guix archive --generate-key
27105 @end example
27106
27107 @noindent
27108 Each target machine must authorize the key of the master machine so that it
27109 accepts store items it receives from the coordinator:
27110
27111 @example
27112 # guix archive --authorize < coordinator-public-key.txt
27113 @end example
27114
27115 @code{user}, in this example, specifies the name of the user account to log in
27116 as to perform the deployment. Its default value is @code{root}, but root
27117 login over SSH may be forbidden in some cases. To work around this,
27118 @command{guix deploy} can log in as an unprivileged user and employ
27119 @code{sudo} to escalate privileges. This will only work if @code{sudo} is
27120 currently installed on the remote and can be invoked non-interactively as
27121 @code{user}. That is, the line in @code{sudoers} granting @code{user} the
27122 ability to use @code{sudo} must contain the @code{NOPASSWD} tag. This can
27123 be accomplished with the following operating system configuration snippet:
27124
27125 @lisp
27126 (use-modules ...
27127 (gnu system)) ;for %sudoers-specification
27128
27129 (define %user "username")
27130
27131 (operating-system
27132 ...
27133 (sudoers-file
27134 (plain-file "sudoers"
27135 (string-append (plain-file-content %sudoers-specification)
27136 (format #f "~a ALL = NOPASSWD: ALL~%"
27137 %user)))))
27138
27139 @end lisp
27140
27141 For more information regarding the format of the @file{sudoers} file,
27142 consult @command{man sudoers}.
27143
27144 @deftp {Data Type} machine
27145 This is the data type representing a single machine in a heterogeneous Guix
27146 deployment.
27147
27148 @table @asis
27149 @item @code{operating-system}
27150 The object of the operating system configuration to deploy.
27151
27152 @item @code{environment}
27153 An @code{environment-type} describing how the machine should be provisioned.
27154
27155 @item @code{configuration} (default: @code{#f})
27156 An object describing the configuration for the machine's @code{environment}.
27157 If the @code{environment} has a default configuration, @code{#f} may be used.
27158 If @code{#f} is used for an environment with no default configuration,
27159 however, an error will be thrown.
27160 @end table
27161 @end deftp
27162
27163 @deftp {Data Type} machine-ssh-configuration
27164 This is the data type representing the SSH client parameters for a machine
27165 with an @code{environment} of @code{managed-host-environment-type}.
27166
27167 @table @asis
27168 @item @code{host-name}
27169 @item @code{build-locally?} (default: @code{#t})
27170 If false, system derivations will be built on the machine being deployed to.
27171 @item @code{system}
27172 The system type describing the architecture of the machine being deployed
27173 to---e.g., @code{"x86_64-linux"}.
27174 @item @code{authorize?} (default: @code{#t})
27175 If true, the coordinator's signing key will be added to the remote's ACL
27176 keyring.
27177 @item @code{port} (default: @code{22})
27178 @item @code{user} (default: @code{"root"})
27179 @item @code{identity} (default: @code{#f})
27180 If specified, the path to the SSH private key to use to authenticate with the
27181 remote host.
27182
27183 @item @code{host-key} (default: @code{#f})
27184 This should be the SSH host key of the machine, which looks like this:
27185
27186 @example
27187 ssh-ed25519 AAAAC3Nz@dots{} root@@example.org
27188 @end example
27189
27190 When @code{host-key} is @code{#f}, the server is authenticated against
27191 the @file{~/.ssh/known_hosts} file, just like the OpenSSH @command{ssh}
27192 client does.
27193
27194 @end table
27195 @end deftp
27196
27197 @deftp {Data Type} digital-ocean-configuration
27198 This is the data type describing the Droplet that should be created for a
27199 machine with an @code{environment} of @code{digital-ocean-environment-type}.
27200
27201 @table @asis
27202 @item @code{ssh-key}
27203 The path to the SSH private key to use to authenticate with the remote
27204 host. In the future, this field may not exist.
27205 @item @code{tags}
27206 A list of string ``tags'' that uniquely identify the machine. Must be given
27207 such that no two machines in the deployment have the same set of tags.
27208 @item @code{region}
27209 A Digital Ocean region slug, such as @code{"nyc3"}.
27210 @item @code{size}
27211 A Digital Ocean size slug, such as @code{"s-1vcpu-1gb"}
27212 @item @code{enable-ipv6?}
27213 Whether or not the droplet should be created with IPv6 networking.
27214 @end table
27215 @end deftp
27216
27217 @node Running Guix in a VM
27218 @section Running Guix in a Virtual Machine
27219
27220 @cindex virtual machine
27221 To run Guix in a virtual machine (VM), one can use the pre-built Guix VM image
27222 distributed at
27223 @url{@value{BASE-URL}/guix-system-vm-image-@value{VERSION}.x86_64-linux.xz}.
27224 This image is a compressed image in QCOW format. You will first need to
27225 decompress with @command{xz -d}, and then you can pass it to an emulator such
27226 as QEMU (see below for details).
27227
27228 This image boots the Xfce graphical environment and it contains some
27229 commonly-used tools. You can install more software in the image by running
27230 @command{guix package} in a terminal (@pxref{Invoking guix package}). You can
27231 also reconfigure the system based on its initial configuration file available
27232 as @file{/etc/config.scm} (@pxref{Using the Configuration System}).
27233
27234 Instead of using this pre-built image, one can also build their own virtual
27235 machine image using @command{guix system vm-image} (@pxref{Invoking guix
27236 system}). The returned image is in qcow2 format, which the
27237 @uref{https://qemu.org/, QEMU emulator} can efficiently use.
27238
27239 @cindex QEMU
27240 If you built your own image, you must copy it out of the store
27241 (@pxref{The Store}) and give yourself permission to write to the copy
27242 before you can use it. When invoking QEMU, you must choose a system
27243 emulator that is suitable for your hardware platform. Here is a minimal
27244 QEMU invocation that will boot the result of @command{guix system
27245 vm-image} on x86_64 hardware:
27246
27247 @example
27248 $ qemu-system-x86_64 \
27249 -nic user,model=virtio-net-pci \
27250 -enable-kvm -m 1024 \
27251 -device virtio-blk,drive=myhd \
27252 -drive if=none,file=/tmp/qemu-image,id=myhd
27253 @end example
27254
27255 Here is what each of these options means:
27256
27257 @table @code
27258 @item qemu-system-x86_64
27259 This specifies the hardware platform to emulate. This should match the
27260 host.
27261
27262 @item -nic user,model=virtio-net-pci
27263 Enable the unprivileged user-mode network stack. The guest OS can
27264 access the host but not vice versa. This is the simplest way to get the
27265 guest OS online. @code{model} specifies which network device to emulate:
27266 @code{virtio-net-pci} is a special device made for virtualized operating
27267 systems and recommended for most uses. Assuming your hardware platform is
27268 x86_64, you can get a list of available NIC models by running
27269 @command{qemu-system-x86_64 -nic model=help}.
27270
27271 @item -enable-kvm
27272 If your system has hardware virtualization extensions, enabling the
27273 virtual machine support (KVM) of the Linux kernel will make things run
27274 faster.
27275
27276 @c To run Xfce + 'guix pull', we need at least 1G of RAM.
27277 @item -m 1024
27278 RAM available to the guest OS, in mebibytes. Defaults to 128@tie{}MiB,
27279 which may be insufficient for some operations.
27280
27281 @item -device virtio-blk,drive=myhd
27282 Create a @code{virtio-blk} drive called ``myhd''. @code{virtio-blk} is a
27283 ``paravirtualization'' mechanism for block devices that allows QEMU to achieve
27284 better performance than if it were emulating a complete disk drive. See the
27285 QEMU and KVM documentation for more info.
27286
27287 @item -drive if=none,file=/tmp/qemu-image,id=myhd
27288 Use our QCOW image, the @file{/tmp/qemu-image} file, as the backing store the
27289 the ``myhd'' drive.
27290 @end table
27291
27292 The default @command{run-vm.sh} script that is returned by an invocation of
27293 @command{guix system vm} does not add a @command{-nic user} flag by default.
27294 To get network access from within the vm add the @code{(dhcp-client-service)}
27295 to your system definition and start the VM using
27296 @command{`guix system vm config.scm` -nic user}. An important caveat of using
27297 @command{-nic user} for networking is that @command{ping} will not work, because
27298 it uses the ICMP protocol. You'll have to use a different command to check for
27299 network connectivity, for example @command{guix download}.
27300
27301 @subsection Connecting Through SSH
27302
27303 @cindex SSH
27304 @cindex SSH server
27305 To enable SSH inside a VM you need to add an SSH server like
27306 @code{openssh-service-type} to your VM (@pxref{Networking Services,
27307 @code{openssh-service-type}}). In addition you need to forward the SSH port,
27308 22 by default, to the host. You can do this with
27309
27310 @example
27311 `guix system vm config.scm` -nic user,model=virtio-net-pci,hostfwd=tcp::10022-:22
27312 @end example
27313
27314 To connect to the VM you can run
27315
27316 @example
27317 ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022
27318 @end example
27319
27320 The @command{-p} tells @command{ssh} the port you want to connect to.
27321 @command{-o UserKnownHostsFile=/dev/null} prevents @command{ssh} from complaining
27322 every time you modify your @command{config.scm} file and the
27323 @command{-o StrictHostKeyChecking=no} prevents you from having to allow a
27324 connection to an unknown host every time you connect.
27325
27326 @subsection Using @command{virt-viewer} with Spice
27327
27328 As an alternative to the default @command{qemu} graphical client you can
27329 use the @command{remote-viewer} from the @command{virt-viewer} package. To
27330 connect pass the @command{-spice port=5930,disable-ticketing} flag to
27331 @command{qemu}. See previous section for further information on how to do this.
27332
27333 Spice also allows you to do some nice stuff like share your clipboard with your
27334 VM. To enable that you'll also have to pass the following flags to @command{qemu}:
27335
27336 @example
27337 -device virtio-serial-pci,id=virtio-serial0,max_ports=16,bus=pci.0,addr=0x5
27338 -chardev spicevmc,name=vdagent,id=vdagent
27339 -device virtserialport,nr=1,bus=virtio-serial0.0,chardev=vdagent,
27340 name=com.redhat.spice.0
27341 @end example
27342
27343 You'll also need to add the @pxref{Miscellaneous Services, Spice service}.
27344
27345 @node Defining Services
27346 @section Defining Services
27347
27348 The previous sections show the available services and how one can combine
27349 them in an @code{operating-system} declaration. But how do we define
27350 them in the first place? And what is a service anyway?
27351
27352 @menu
27353 * Service Composition:: The model for composing services.
27354 * Service Types and Services:: Types and services.
27355 * Service Reference:: API reference.
27356 * Shepherd Services:: A particular type of service.
27357 @end menu
27358
27359 @node Service Composition
27360 @subsection Service Composition
27361
27362 @cindex services
27363 @cindex daemons
27364 Here we define a @dfn{service} as, broadly, something that extends the
27365 functionality of the operating system. Often a service is a process---a
27366 @dfn{daemon}---started when the system boots: a secure shell server, a
27367 Web server, the Guix build daemon, etc. Sometimes a service is a daemon
27368 whose execution can be triggered by another daemon---e.g., an FTP server
27369 started by @command{inetd} or a D-Bus service activated by
27370 @command{dbus-daemon}. Occasionally, a service does not map to a
27371 daemon. For instance, the ``account'' service collects user accounts
27372 and makes sure they exist when the system runs; the ``udev'' service
27373 collects device management rules and makes them available to the eudev
27374 daemon; the @file{/etc} service populates the @file{/etc} directory
27375 of the system.
27376
27377 @cindex service extensions
27378 Guix system services are connected by @dfn{extensions}. For instance, the
27379 secure shell service @emph{extends} the Shepherd---the
27380 initialization system, running as PID@tie{}1---by giving it the command
27381 lines to start and stop the secure shell daemon (@pxref{Networking
27382 Services, @code{openssh-service-type}}); the UPower service extends the D-Bus
27383 service by passing it its @file{.service} specification, and extends the
27384 udev service by passing it device management rules (@pxref{Desktop
27385 Services, @code{upower-service}}); the Guix daemon service extends the
27386 Shepherd by passing it the command lines to start and stop the daemon,
27387 and extends the account service by passing it a list of required build
27388 user accounts (@pxref{Base Services}).
27389
27390 All in all, services and their ``extends'' relations form a directed
27391 acyclic graph (DAG). If we represent services as boxes and extensions
27392 as arrows, a typical system might provide something like this:
27393
27394 @image{images/service-graph,,5in,Typical service extension graph.}
27395
27396 @cindex system service
27397 At the bottom, we see the @dfn{system service}, which produces the
27398 directory containing everything to run and boot the system, as returned
27399 by the @command{guix system build} command. @xref{Service Reference},
27400 to learn about the other service types shown here.
27401 @xref{system-extension-graph, the @command{guix system extension-graph}
27402 command}, for information on how to generate this representation for a
27403 particular operating system definition.
27404
27405 @cindex service types
27406 Technically, developers can define @dfn{service types} to express these
27407 relations. There can be any number of services of a given type on the
27408 system---for instance, a system running two instances of the GNU secure
27409 shell server (lsh) has two instances of @code{lsh-service-type}, with
27410 different parameters.
27411
27412 The following section describes the programming interface for service
27413 types and services.
27414
27415 @node Service Types and Services
27416 @subsection Service Types and Services
27417
27418 A @dfn{service type} is a node in the DAG described above. Let us start
27419 with a simple example, the service type for the Guix build daemon
27420 (@pxref{Invoking guix-daemon}):
27421
27422 @lisp
27423 (define guix-service-type
27424 (service-type
27425 (name 'guix)
27426 (extensions
27427 (list (service-extension shepherd-root-service-type guix-shepherd-service)
27428 (service-extension account-service-type guix-accounts)
27429 (service-extension activation-service-type guix-activation)))
27430 (default-value (guix-configuration))))
27431 @end lisp
27432
27433 @noindent
27434 It defines three things:
27435
27436 @enumerate
27437 @item
27438 A name, whose sole purpose is to make inspection and debugging easier.
27439
27440 @item
27441 A list of @dfn{service extensions}, where each extension designates the
27442 target service type and a procedure that, given the parameters of the
27443 service, returns a list of objects to extend the service of that type.
27444
27445 Every service type has at least one service extension. The only
27446 exception is the @dfn{boot service type}, which is the ultimate service.
27447
27448 @item
27449 Optionally, a default value for instances of this type.
27450 @end enumerate
27451
27452 In this example, @code{guix-service-type} extends three services:
27453
27454 @table @code
27455 @item shepherd-root-service-type
27456 The @code{guix-shepherd-service} procedure defines how the Shepherd
27457 service is extended. Namely, it returns a @code{<shepherd-service>}
27458 object that defines how @command{guix-daemon} is started and stopped
27459 (@pxref{Shepherd Services}).
27460
27461 @item account-service-type
27462 This extension for this service is computed by @code{guix-accounts},
27463 which returns a list of @code{user-group} and @code{user-account}
27464 objects representing the build user accounts (@pxref{Invoking
27465 guix-daemon}).
27466
27467 @item activation-service-type
27468 Here @code{guix-activation} is a procedure that returns a gexp, which is
27469 a code snippet to run at ``activation time''---e.g., when the service is
27470 booted.
27471 @end table
27472
27473 A service of this type is instantiated like this:
27474
27475 @lisp
27476 (service guix-service-type
27477 (guix-configuration
27478 (build-accounts 5)
27479 (use-substitutes? #f)))
27480 @end lisp
27481
27482 The second argument to the @code{service} form is a value representing
27483 the parameters of this specific service instance.
27484 @xref{guix-configuration-type, @code{guix-configuration}}, for
27485 information about the @code{guix-configuration} data type. When the
27486 value is omitted, the default value specified by
27487 @code{guix-service-type} is used:
27488
27489 @lisp
27490 (service guix-service-type)
27491 @end lisp
27492
27493 @code{guix-service-type} is quite simple because it extends other
27494 services but is not extensible itself.
27495
27496 @c @subsubsubsection Extensible Service Types
27497
27498 The service type for an @emph{extensible} service looks like this:
27499
27500 @lisp
27501 (define udev-service-type
27502 (service-type (name 'udev)
27503 (extensions
27504 (list (service-extension shepherd-root-service-type
27505 udev-shepherd-service)))
27506
27507 (compose concatenate) ;concatenate the list of rules
27508 (extend (lambda (config rules)
27509 (match config
27510 (($ <udev-configuration> udev initial-rules)
27511 (udev-configuration
27512 (udev udev) ;the udev package to use
27513 (rules (append initial-rules rules)))))))))
27514 @end lisp
27515
27516 This is the service type for the
27517 @uref{https://wiki.gentoo.org/wiki/Project:Eudev, eudev device
27518 management daemon}. Compared to the previous example, in addition to an
27519 extension of @code{shepherd-root-service-type}, we see two new fields:
27520
27521 @table @code
27522 @item compose
27523 This is the procedure to @dfn{compose} the list of extensions to
27524 services of this type.
27525
27526 Services can extend the udev service by passing it lists of rules; we
27527 compose those extensions simply by concatenating them.
27528
27529 @item extend
27530 This procedure defines how the value of the service is @dfn{extended} with
27531 the composition of the extensions.
27532
27533 Udev extensions are composed into a list of rules, but the udev service
27534 value is itself a @code{<udev-configuration>} record. So here, we
27535 extend that record by appending the list of rules it contains to the
27536 list of contributed rules.
27537
27538 @item description
27539 This is a string giving an overview of the service type. The string can
27540 contain Texinfo markup (@pxref{Overview,,, texinfo, GNU Texinfo}). The
27541 @command{guix system search} command searches these strings and displays
27542 them (@pxref{Invoking guix system}).
27543 @end table
27544
27545 There can be only one instance of an extensible service type such as
27546 @code{udev-service-type}. If there were more, the
27547 @code{service-extension} specifications would be ambiguous.
27548
27549 Still here? The next section provides a reference of the programming
27550 interface for services.
27551
27552 @node Service Reference
27553 @subsection Service Reference
27554
27555 We have seen an overview of service types (@pxref{Service Types and
27556 Services}). This section provides a reference on how to manipulate
27557 services and service types. This interface is provided by the
27558 @code{(gnu services)} module.
27559
27560 @deffn {Scheme Procedure} service @var{type} [@var{value}]
27561 Return a new service of @var{type}, a @code{<service-type>} object (see
27562 below.) @var{value} can be any object; it represents the parameters of
27563 this particular service instance.
27564
27565 When @var{value} is omitted, the default value specified by @var{type}
27566 is used; if @var{type} does not specify a default value, an error is
27567 raised.
27568
27569 For instance, this:
27570
27571 @lisp
27572 (service openssh-service-type)
27573 @end lisp
27574
27575 @noindent
27576 is equivalent to this:
27577
27578 @lisp
27579 (service openssh-service-type
27580 (openssh-configuration))
27581 @end lisp
27582
27583 In both cases the result is an instance of @code{openssh-service-type}
27584 with the default configuration.
27585 @end deffn
27586
27587 @deffn {Scheme Procedure} service? @var{obj}
27588 Return true if @var{obj} is a service.
27589 @end deffn
27590
27591 @deffn {Scheme Procedure} service-kind @var{service}
27592 Return the type of @var{service}---i.e., a @code{<service-type>} object.
27593 @end deffn
27594
27595 @deffn {Scheme Procedure} service-value @var{service}
27596 Return the value associated with @var{service}. It represents its
27597 parameters.
27598 @end deffn
27599
27600 Here is an example of how a service is created and manipulated:
27601
27602 @lisp
27603 (define s
27604 (service nginx-service-type
27605 (nginx-configuration
27606 (nginx nginx)
27607 (log-directory log-directory)
27608 (run-directory run-directory)
27609 (file config-file))))
27610
27611 (service? s)
27612 @result{} #t
27613
27614 (eq? (service-kind s) nginx-service-type)
27615 @result{} #t
27616 @end lisp
27617
27618 The @code{modify-services} form provides a handy way to change the
27619 parameters of some of the services of a list such as
27620 @code{%base-services} (@pxref{Base Services, @code{%base-services}}). It
27621 evaluates to a list of services. Of course, you could always use
27622 standard list combinators such as @code{map} and @code{fold} to do that
27623 (@pxref{SRFI-1, List Library,, guile, GNU Guile Reference Manual});
27624 @code{modify-services} simply provides a more concise form for this
27625 common pattern.
27626
27627 @deffn {Scheme Syntax} modify-services @var{services} @
27628 (@var{type} @var{variable} => @var{body}) @dots{}
27629
27630 Modify the services listed in @var{services} according to the given
27631 clauses. Each clause has the form:
27632
27633 @example
27634 (@var{type} @var{variable} => @var{body})
27635 @end example
27636
27637 where @var{type} is a service type---e.g.,
27638 @code{guix-service-type}---and @var{variable} is an identifier that is
27639 bound within the @var{body} to the service parameters---e.g., a
27640 @code{guix-configuration} instance---of the original service of that
27641 @var{type}.
27642
27643 The @var{body} should evaluate to the new service parameters, which will
27644 be used to configure the new service. This new service will replace the
27645 original in the resulting list. Because a service's service parameters
27646 are created using @code{define-record-type*}, you can write a succinct
27647 @var{body} that evaluates to the new service parameters by using the
27648 @code{inherit} feature that @code{define-record-type*} provides.
27649
27650 @xref{Using the Configuration System}, for example usage.
27651
27652 @end deffn
27653
27654 Next comes the programming interface for service types. This is
27655 something you want to know when writing new service definitions, but not
27656 necessarily when simply looking for ways to customize your
27657 @code{operating-system} declaration.
27658
27659 @deftp {Data Type} service-type
27660 @cindex service type
27661 This is the representation of a @dfn{service type} (@pxref{Service Types
27662 and Services}).
27663
27664 @table @asis
27665 @item @code{name}
27666 This is a symbol, used only to simplify inspection and debugging.
27667
27668 @item @code{extensions}
27669 A non-empty list of @code{<service-extension>} objects (see below).
27670
27671 @item @code{compose} (default: @code{#f})
27672 If this is @code{#f}, then the service type denotes services that cannot
27673 be extended---i.e., services that do not receive ``values'' from other
27674 services.
27675
27676 Otherwise, it must be a one-argument procedure. The procedure is called
27677 by @code{fold-services} and is passed a list of values collected from
27678 extensions. It may return any single value.
27679
27680 @item @code{extend} (default: @code{#f})
27681 If this is @code{#f}, services of this type cannot be extended.
27682
27683 Otherwise, it must be a two-argument procedure: @code{fold-services}
27684 calls it, passing it the initial value of the service as the first
27685 argument and the result of applying @code{compose} to the extension
27686 values as the second argument. It must return a value that is a valid
27687 parameter value for the service instance.
27688 @end table
27689
27690 @xref{Service Types and Services}, for examples.
27691 @end deftp
27692
27693 @deffn {Scheme Procedure} service-extension @var{target-type} @
27694 @var{compute}
27695 Return a new extension for services of type @var{target-type}.
27696 @var{compute} must be a one-argument procedure: @code{fold-services}
27697 calls it, passing it the value associated with the service that provides
27698 the extension; it must return a valid value for the target service.
27699 @end deffn
27700
27701 @deffn {Scheme Procedure} service-extension? @var{obj}
27702 Return true if @var{obj} is a service extension.
27703 @end deffn
27704
27705 Occasionally, you might want to simply extend an existing service. This
27706 involves creating a new service type and specifying the extension of
27707 interest, which can be verbose; the @code{simple-service} procedure
27708 provides a shorthand for this.
27709
27710 @deffn {Scheme Procedure} simple-service @var{name} @var{target} @var{value}
27711 Return a service that extends @var{target} with @var{value}. This works
27712 by creating a singleton service type @var{name}, of which the returned
27713 service is an instance.
27714
27715 For example, this extends mcron (@pxref{Scheduled Job Execution}) with
27716 an additional job:
27717
27718 @lisp
27719 (simple-service 'my-mcron-job mcron-service-type
27720 #~(job '(next-hour (3)) "guix gc -F 2G"))
27721 @end lisp
27722 @end deffn
27723
27724 At the core of the service abstraction lies the @code{fold-services}
27725 procedure, which is responsible for ``compiling'' a list of services
27726 down to a single directory that contains everything needed to boot and
27727 run the system---the directory shown by the @command{guix system build}
27728 command (@pxref{Invoking guix system}). In essence, it propagates
27729 service extensions down the service graph, updating each node parameters
27730 on the way, until it reaches the root node.
27731
27732 @deffn {Scheme Procedure} fold-services @var{services} @
27733 [#:target-type @var{system-service-type}]
27734 Fold @var{services} by propagating their extensions down to the root of
27735 type @var{target-type}; return the root service adjusted accordingly.
27736 @end deffn
27737
27738 Lastly, the @code{(gnu services)} module also defines several essential
27739 service types, some of which are listed below.
27740
27741 @defvr {Scheme Variable} system-service-type
27742 This is the root of the service graph. It produces the system directory
27743 as returned by the @command{guix system build} command.
27744 @end defvr
27745
27746 @defvr {Scheme Variable} boot-service-type
27747 The type of the ``boot service'', which produces the @dfn{boot script}.
27748 The boot script is what the initial RAM disk runs when booting.
27749 @end defvr
27750
27751 @defvr {Scheme Variable} etc-service-type
27752 The type of the @file{/etc} service. This service is used to create
27753 files under @file{/etc} and can be extended by
27754 passing it name/file tuples such as:
27755
27756 @lisp
27757 (list `("issue" ,(plain-file "issue" "Welcome!\n")))
27758 @end lisp
27759
27760 In this example, the effect would be to add an @file{/etc/issue} file
27761 pointing to the given file.
27762 @end defvr
27763
27764 @defvr {Scheme Variable} setuid-program-service-type
27765 Type for the ``setuid-program service''. This service collects lists of
27766 executable file names, passed as gexps, and adds them to the set of
27767 setuid-root programs on the system (@pxref{Setuid Programs}).
27768 @end defvr
27769
27770 @defvr {Scheme Variable} profile-service-type
27771 Type of the service that populates the @dfn{system profile}---i.e., the
27772 programs under @file{/run/current-system/profile}. Other services can
27773 extend it by passing it lists of packages to add to the system profile.
27774 @end defvr
27775
27776 @cindex provenance tracking, of the operating system
27777 @defvr {Scheme Variable} provenance-service-type
27778 This is the type of the service that records @dfn{provenance meta-data}
27779 in the system itself. It creates several files under
27780 @file{/run/current-system}:
27781
27782 @table @file
27783 @item channels.scm
27784 This is a ``channel file'' that can be passed to @command{guix pull -C}
27785 or @command{guix time-machine -C}, and which describes the channels used
27786 to build the system, if that information was available
27787 (@pxref{Channels}).
27788
27789 @item configuration.scm
27790 This is the file that was passed as the value for this
27791 @code{provenance-service-type} service. By default, @command{guix
27792 system reconfigure} automatically passes the OS configuration file it
27793 received on the command line.
27794
27795 @item provenance
27796 This contains the same information as the two other files but in a
27797 format that is more readily processable.
27798 @end table
27799
27800 In general, these two pieces of information (channels and configuration
27801 file) are enough to reproduce the operating system ``from source''.
27802
27803 @quotation Caveats
27804 This information is necessary to rebuild your operating system, but it
27805 is not always sufficient. In particular, @file{configuration.scm}
27806 itself is insufficient if it is not self-contained---if it refers to
27807 external Guile modules or to extra files. If you want
27808 @file{configuration.scm} to be self-contained, we recommend that modules
27809 or files it refers to be part of a channel.
27810
27811 Besides, provenance meta-data is ``silent'' in the sense that it does
27812 not change the bits contained in your system, @emph{except for the
27813 meta-data bits themselves}. Two different OS configurations or sets of
27814 channels can lead to the same system, bit-for-bit; when
27815 @code{provenance-service-type} is used, these two systems will have
27816 different meta-data and thus different store file names, which makes
27817 comparison less trivial.
27818 @end quotation
27819
27820 This service is automatically added to your operating system
27821 configuration when you use @command{guix system reconfigure},
27822 @command{guix system init}, or @command{guix deploy}.
27823 @end defvr
27824
27825 @node Shepherd Services
27826 @subsection Shepherd Services
27827
27828 @cindex shepherd services
27829 @cindex PID 1
27830 @cindex init system
27831 The @code{(gnu services shepherd)} module provides a way to define
27832 services managed by the GNU@tie{}Shepherd, which is the
27833 initialization system---the first process that is started when the
27834 system boots, also known as PID@tie{}1
27835 (@pxref{Introduction,,, shepherd, The GNU Shepherd Manual}).
27836
27837 Services in the Shepherd can depend on each other. For instance, the
27838 SSH daemon may need to be started after the syslog daemon has been
27839 started, which in turn can only happen once all the file systems have
27840 been mounted. The simple operating system defined earlier (@pxref{Using
27841 the Configuration System}) results in a service graph like this:
27842
27843 @image{images/shepherd-graph,,5in,Typical shepherd service graph.}
27844
27845 You can actually generate such a graph for any operating system
27846 definition using the @command{guix system shepherd-graph} command
27847 (@pxref{system-shepherd-graph, @command{guix system shepherd-graph}}).
27848
27849 The @code{%shepherd-root-service} is a service object representing
27850 PID@tie{}1, of type @code{shepherd-root-service-type}; it can be extended
27851 by passing it lists of @code{<shepherd-service>} objects.
27852
27853 @deftp {Data Type} shepherd-service
27854 The data type representing a service managed by the Shepherd.
27855
27856 @table @asis
27857 @item @code{provision}
27858 This is a list of symbols denoting what the service provides.
27859
27860 These are the names that may be passed to @command{herd start},
27861 @command{herd status}, and similar commands (@pxref{Invoking herd,,,
27862 shepherd, The GNU Shepherd Manual}). @xref{Slots of services, the
27863 @code{provides} slot,, shepherd, The GNU Shepherd Manual}, for details.
27864
27865 @item @code{requirement} (default: @code{'()})
27866 List of symbols denoting the Shepherd services this one depends on.
27867
27868 @cindex one-shot services, for the Shepherd
27869 @item @code{one-shot?} (default: @code{#f})
27870 Whether this service is @dfn{one-shot}. One-shot services stop immediately
27871 after their @code{start} action has completed. @xref{Slots of services,,,
27872 shepherd, The GNU Shepherd Manual}, for more info.
27873
27874 @item @code{respawn?} (default: @code{#t})
27875 Whether to restart the service when it stops, for instance when the
27876 underlying process dies.
27877
27878 @item @code{start}
27879 @itemx @code{stop} (default: @code{#~(const #f)})
27880 The @code{start} and @code{stop} fields refer to the Shepherd's
27881 facilities to start and stop processes (@pxref{Service De- and
27882 Constructors,,, shepherd, The GNU Shepherd Manual}). They are given as
27883 G-expressions that get expanded in the Shepherd configuration file
27884 (@pxref{G-Expressions}).
27885
27886 @item @code{actions} (default: @code{'()})
27887 @cindex actions, of Shepherd services
27888 This is a list of @code{shepherd-action} objects (see below) defining
27889 @dfn{actions} supported by the service, in addition to the standard
27890 @code{start} and @code{stop} actions. Actions listed here become available as
27891 @command{herd} sub-commands:
27892
27893 @example
27894 herd @var{action} @var{service} [@var{arguments}@dots{}]
27895 @end example
27896
27897 @item @code{auto-start?} (default: @code{#t})
27898 Whether this service should be started automatically by the Shepherd. If it
27899 is @code{#f} the service has to be started manually with @code{herd start}.
27900
27901 @item @code{documentation}
27902 A documentation string, as shown when running:
27903
27904 @example
27905 herd doc @var{service-name}
27906 @end example
27907
27908 where @var{service-name} is one of the symbols in @code{provision}
27909 (@pxref{Invoking herd,,, shepherd, The GNU Shepherd Manual}).
27910
27911 @item @code{modules} (default: @code{%default-modules})
27912 This is the list of modules that must be in scope when @code{start} and
27913 @code{stop} are evaluated.
27914
27915 @end table
27916 @end deftp
27917
27918 @deftp {Data Type} shepherd-action
27919 This is the data type that defines additional actions implemented by a
27920 Shepherd service (see above).
27921
27922 @table @code
27923 @item name
27924 Symbol naming the action.
27925
27926 @item documentation
27927 This is a documentation string for the action. It can be viewed by running:
27928
27929 @example
27930 herd doc @var{service} action @var{action}
27931 @end example
27932
27933 @item procedure
27934 This should be a gexp that evaluates to a procedure of at least one argument,
27935 which is the ``running value'' of the service (@pxref{Slots of services,,,
27936 shepherd, The GNU Shepherd Manual}).
27937 @end table
27938
27939 The following example defines an action called @code{say-hello} that kindly
27940 greets the user:
27941
27942 @lisp
27943 (shepherd-action
27944 (name 'say-hello)
27945 (documentation "Say hi!")
27946 (procedure #~(lambda (running . args)
27947 (format #t "Hello, friend! arguments: ~s\n"
27948 args)
27949 #t)))
27950 @end lisp
27951
27952 Assuming this action is added to the @code{example} service, then you can do:
27953
27954 @example
27955 # herd say-hello example
27956 Hello, friend! arguments: ()
27957 # herd say-hello example a b c
27958 Hello, friend! arguments: ("a" "b" "c")
27959 @end example
27960
27961 This, as you can see, is a fairly sophisticated way to say hello.
27962 @xref{Service Convenience,,, shepherd, The GNU Shepherd Manual}, for more
27963 info on actions.
27964 @end deftp
27965
27966 @defvr {Scheme Variable} shepherd-root-service-type
27967 The service type for the Shepherd ``root service''---i.e., PID@tie{}1.
27968
27969 This is the service type that extensions target when they want to create
27970 shepherd services (@pxref{Service Types and Services}, for an example).
27971 Each extension must pass a list of @code{<shepherd-service>}.
27972 @end defvr
27973
27974 @defvr {Scheme Variable} %shepherd-root-service
27975 This service represents PID@tie{}1.
27976 @end defvr
27977
27978
27979 @node Documentation
27980 @chapter Documentation
27981
27982 @cindex documentation, searching for
27983 @cindex searching for documentation
27984 @cindex Info, documentation format
27985 @cindex man pages
27986 @cindex manual pages
27987 In most cases packages installed with Guix come with documentation.
27988 There are two main documentation formats: ``Info'', a browseable
27989 hypertext format used for GNU software, and ``manual pages'' (or ``man
27990 pages''), the linear documentation format traditionally found on Unix.
27991 Info manuals are accessed with the @command{info} command or with Emacs,
27992 and man pages are accessed using @command{man}.
27993
27994 You can look for documentation of software installed on your system by
27995 keyword. For example, the following command searches for information
27996 about ``TLS'' in Info manuals:
27997
27998 @example
27999 $ info -k TLS
28000 "(emacs)Network Security" -- STARTTLS
28001 "(emacs)Network Security" -- TLS
28002 "(gnutls)Core TLS API" -- gnutls_certificate_set_verify_flags
28003 "(gnutls)Core TLS API" -- gnutls_certificate_set_verify_function
28004 @dots{}
28005 @end example
28006
28007 @noindent
28008 The command below searches for the same keyword in man pages:
28009
28010 @example
28011 $ man -k TLS
28012 SSL (7) - OpenSSL SSL/TLS library
28013 certtool (1) - GnuTLS certificate tool
28014 @dots {}
28015 @end example
28016
28017 These searches are purely local to your computer so you have the
28018 guarantee that documentation you find corresponds to what you have
28019 actually installed, you can access it off-line, and your privacy is
28020 respected.
28021
28022 Once you have these results, you can view the relevant documentation by
28023 running, say:
28024
28025 @example
28026 $ info "(gnutls)Core TLS API"
28027 @end example
28028
28029 @noindent
28030 or:
28031
28032 @example
28033 $ man certtool
28034 @end example
28035
28036 Info manuals contain sections and indices as well as hyperlinks like
28037 those found in Web pages. The @command{info} reader (@pxref{Top, Info
28038 reader,, info-stnd, Stand-alone GNU Info}) and its Emacs counterpart
28039 (@pxref{Misc Help,,, emacs, The GNU Emacs Manual}) provide intuitive key
28040 bindings to navigate manuals. @xref{Getting Started,,, info, Info: An
28041 Introduction}, for an introduction to Info navigation.
28042
28043 @node Installing Debugging Files
28044 @chapter Installing Debugging Files
28045
28046 @cindex debugging files
28047 Program binaries, as produced by the GCC compilers for instance, are
28048 typically written in the ELF format, with a section containing
28049 @dfn{debugging information}. Debugging information is what allows the
28050 debugger, GDB, to map binary code to source code; it is required to
28051 debug a compiled program in good conditions.
28052
28053 The problem with debugging information is that is takes up a fair amount
28054 of disk space. For example, debugging information for the GNU C Library
28055 weighs in at more than 60 MiB. Thus, as a user, keeping all the
28056 debugging info of all the installed programs is usually not an option.
28057 Yet, space savings should not come at the cost of an impediment to
28058 debugging---especially in the GNU system, which should make it easier
28059 for users to exert their computing freedom (@pxref{GNU Distribution}).
28060
28061 Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a
28062 mechanism that allows users to get the best of both worlds: debugging
28063 information can be stripped from the binaries and stored in separate
28064 files. GDB is then able to load debugging information from those files,
28065 when they are available (@pxref{Separate Debug Files,,, gdb, Debugging
28066 with GDB}).
28067
28068 The GNU distribution takes advantage of this by storing debugging
28069 information in the @code{lib/debug} sub-directory of a separate package
28070 output unimaginatively called @code{debug} (@pxref{Packages with
28071 Multiple Outputs}). Users can choose to install the @code{debug} output
28072 of a package when they need it. For instance, the following command
28073 installs the debugging information for the GNU C Library and for GNU
28074 Guile:
28075
28076 @example
28077 guix install glibc:debug guile:debug
28078 @end example
28079
28080 GDB must then be told to look for debug files in the user's profile, by
28081 setting the @code{debug-file-directory} variable (consider setting it
28082 from the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with
28083 GDB}):
28084
28085 @example
28086 (gdb) set debug-file-directory ~/.guix-profile/lib/debug
28087 @end example
28088
28089 From there on, GDB will pick up debugging information from the
28090 @code{.debug} files under @file{~/.guix-profile/lib/debug}.
28091
28092 In addition, you will most likely want GDB to be able to show the source
28093 code being debugged. To do that, you will have to unpack the source
28094 code of the package of interest (obtained with @code{guix build
28095 --source}, @pxref{Invoking guix build}), and to point GDB to that source
28096 directory using the @code{directory} command (@pxref{Source Path,
28097 @code{directory},, gdb, Debugging with GDB}).
28098
28099 @c XXX: keep me up-to-date
28100 The @code{debug} output mechanism in Guix is implemented by the
28101 @code{gnu-build-system} (@pxref{Build Systems}). Currently, it is
28102 opt-in---debugging information is available only for the packages
28103 with definitions explicitly declaring a @code{debug} output. This may be
28104 changed to opt-out in the future if our build farm servers can handle
28105 the load. To check whether a package has a @code{debug} output, use
28106 @command{guix package --list-available} (@pxref{Invoking guix package}).
28107
28108
28109 @node Security Updates
28110 @chapter Security Updates
28111
28112 @cindex security updates
28113 @cindex security vulnerabilities
28114 Occasionally, important security vulnerabilities are discovered in software
28115 packages and must be patched. Guix developers try hard to keep track of
28116 known vulnerabilities and to apply fixes as soon as possible in the
28117 @code{master} branch of Guix (we do not yet provide a ``stable'' branch
28118 containing only security updates.) The @command{guix lint} tool helps
28119 developers find out about vulnerable versions of software packages in the
28120 distribution:
28121
28122 @smallexample
28123 $ guix lint -c cve
28124 gnu/packages/base.scm:652:2: glibc@@2.21: probably vulnerable to CVE-2015-1781, CVE-2015-7547
28125 gnu/packages/gcc.scm:334:2: gcc@@4.9.3: probably vulnerable to CVE-2015-5276
28126 gnu/packages/image.scm:312:2: openjpeg@@2.1.0: probably vulnerable to CVE-2016-1923, CVE-2016-1924
28127 @dots{}
28128 @end smallexample
28129
28130 @xref{Invoking guix lint}, for more information.
28131
28132 Guix follows a functional
28133 package management discipline (@pxref{Introduction}), which implies
28134 that, when a package is changed, @emph{every package that depends on it}
28135 must be rebuilt. This can significantly slow down the deployment of
28136 fixes in core packages such as libc or Bash, since basically the whole
28137 distribution would need to be rebuilt. Using pre-built binaries helps
28138 (@pxref{Substitutes}), but deployment may still take more time than
28139 desired.
28140
28141 @cindex grafts
28142 To address this, Guix implements @dfn{grafts}, a mechanism that allows
28143 for fast deployment of critical updates without the costs associated
28144 with a whole-distribution rebuild. The idea is to rebuild only the
28145 package that needs to be patched, and then to ``graft'' it onto packages
28146 explicitly installed by the user and that were previously referring to
28147 the original package. The cost of grafting is typically very low, and
28148 order of magnitudes lower than a full rebuild of the dependency chain.
28149
28150 @cindex replacements of packages, for grafts
28151 For instance, suppose a security update needs to be applied to Bash.
28152 Guix developers will provide a package definition for the ``fixed''
28153 Bash, say @code{bash-fixed}, in the usual way (@pxref{Defining
28154 Packages}). Then, the original package definition is augmented with a
28155 @code{replacement} field pointing to the package containing the bug fix:
28156
28157 @lisp
28158 (define bash
28159 (package
28160 (name "bash")
28161 ;; @dots{}
28162 (replacement bash-fixed)))
28163 @end lisp
28164
28165 From there on, any package depending directly or indirectly on Bash---as
28166 reported by @command{guix gc --requisites} (@pxref{Invoking guix
28167 gc})---that is installed is automatically ``rewritten'' to refer to
28168 @code{bash-fixed} instead of @code{bash}. This grafting process takes
28169 time proportional to the size of the package, usually less than a
28170 minute for an ``average'' package on a recent machine. Grafting is
28171 recursive: when an indirect dependency requires grafting, then grafting
28172 ``propagates'' up to the package that the user is installing.
28173
28174 Currently, the length of the name and version of the graft and that of
28175 the package it replaces (@code{bash-fixed} and @code{bash} in the example
28176 above) must be equal. This restriction mostly comes from the fact that
28177 grafting works by patching files, including binary files, directly.
28178 Other restrictions may apply: for instance, when adding a graft to a
28179 package providing a shared library, the original shared library and its
28180 replacement must have the same @code{SONAME} and be binary-compatible.
28181
28182 The @option{--no-grafts} command-line option allows you to forcefully
28183 avoid grafting (@pxref{Common Build Options, @option{--no-grafts}}).
28184 Thus, the command:
28185
28186 @example
28187 guix build bash --no-grafts
28188 @end example
28189
28190 @noindent
28191 returns the store file name of the original Bash, whereas:
28192
28193 @example
28194 guix build bash
28195 @end example
28196
28197 @noindent
28198 returns the store file name of the ``fixed'', replacement Bash. This
28199 allows you to distinguish between the two variants of Bash.
28200
28201 To verify which Bash your whole profile refers to, you can run
28202 (@pxref{Invoking guix gc}):
28203
28204 @example
28205 guix gc -R `readlink -f ~/.guix-profile` | grep bash
28206 @end example
28207
28208 @noindent
28209 @dots{} and compare the store file names that you get with those above.
28210 Likewise for a complete Guix system generation:
28211
28212 @example
28213 guix gc -R `guix system build my-config.scm` | grep bash
28214 @end example
28215
28216 Lastly, to check which Bash running processes are using, you can use the
28217 @command{lsof} command:
28218
28219 @example
28220 lsof | grep /gnu/store/.*bash
28221 @end example
28222
28223
28224 @node Bootstrapping
28225 @chapter Bootstrapping
28226
28227 @c Adapted from the ELS 2013 paper.
28228
28229 @cindex bootstrapping
28230
28231 Bootstrapping in our context refers to how the distribution gets built
28232 ``from nothing''. Remember that the build environment of a derivation
28233 contains nothing but its declared inputs (@pxref{Introduction}). So
28234 there's an obvious chicken-and-egg problem: how does the first package
28235 get built? How does the first compiler get compiled? Note that this is
28236 a question of interest only to the curious hacker, not to the regular
28237 user, so you can shamelessly skip this section if you consider yourself
28238 a ``regular user''.
28239
28240 @cindex bootstrap binaries
28241 The GNU system is primarily made of C code, with libc at its core. The
28242 GNU build system itself assumes the availability of a Bourne shell and
28243 command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
28244 `grep'. Furthermore, build programs---programs that run
28245 @code{./configure}, @code{make}, etc.---are written in Guile Scheme
28246 (@pxref{Derivations}). Consequently, to be able to build anything at
28247 all, from scratch, Guix relies on pre-built binaries of Guile, GCC,
28248 Binutils, libc, and the other packages mentioned above---the
28249 @dfn{bootstrap binaries}.
28250
28251 These bootstrap binaries are ``taken for granted'', though we can also
28252 re-create them if needed (more on that later).
28253
28254 For @code{i686-linux} and @code{x86_64-linux} the Guix bootstrap process is
28255 more elaborate, @pxref{Reduced Binary Seed Bootstrap}.
28256
28257 @menu
28258 * Reduced Binary Seed Bootstrap:: A Bootstrap worthy of GNU.
28259 * Preparing to Use the Bootstrap Binaries:: Building that what matters most.
28260 @end menu
28261
28262 @node Reduced Binary Seed Bootstrap
28263 @section The Reduced Binary Seed Bootstrap
28264
28265 Guix---like other GNU/Linux distributions---is traditionally bootstrapped from
28266 a set of bootstrap binaries: Bourne shell, command-line tools provided by GNU
28267 Coreutils, Awk, Findutils, `sed', and `grep' and Guile, GCC, Binutils, and the
28268 GNU C Library (@pxref{Bootstrapping}). Usually, these bootstrap binaries are
28269 ``taken for granted.''
28270
28271 Taking these binaries for granted means that we consider them to be a correct
28272 and trustworthy `seed' for building the complete system. Therein lies a
28273 problem: the current combined size of these bootstrap binaries is about 250MB
28274 (@pxref{Bootstrappable Builds,,, mes, GNU Mes}). Auditing or even inspecting
28275 these is next to impossible.
28276
28277 For @code{i686-linux} and @code{x86_64-linux}, Guix now features a ``Reduced
28278 Binary Seed'' bootstrap @footnote{We would like to say: ``Full Source
28279 Bootstrap'' and while we are working towards that goal it would be hyperbole
28280 to use that term for what we do now.}.
28281
28282 The Reduced Binary Seed bootstrap removes the most critical tools---from a
28283 trust perspective---from the bootstrap binaries: GCC, Binutils and the GNU C
28284 Library are replaced by: @code{bootstrap-mescc-tools} (a tiny assembler and
28285 linker) and @code{bootstrap-mes} (a small Scheme Interpreter and a C compiler
28286 written in Scheme and the Mes C Library, built for TinyCC and for GCC). Using
28287 these new binary seeds and a new set of
28288 @c
28289 packages@footnote{@c
28290 nyacc-boot,
28291 mes-boot,
28292 tcc-boot0,
28293 tcc-boot,
28294 make-mesboot0,
28295 diffutils-mesboot,
28296 binutils-mesboot0,
28297 gcc-core-mesboot,
28298 mesboot-headers,
28299 glibc-mesboot0,
28300 gcc-mesboot0,
28301 binutils-mesboot,
28302 make-mesboot,
28303 gcc-mesboot1,
28304 gcc-mesboot1-wrapper,
28305 glibc-headers-mesboot,
28306 glibc-mesboot,
28307 gcc-mesboot,
28308 and
28309 gcc-mesboot-wrapper.
28310 }
28311 @c
28312 the ``missing'' Binutils, GCC, and the GNU C Library are built from source.
28313 From here on the more traditional bootstrap process resumes. This approach
28314 has reduced the bootstrap binaries in size to about 130MB. Work is ongoing to
28315 reduce this further. If you are interested, join us on @code{#bootstrappable}
28316 on the Freenode IRC network.
28317
28318 @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
28319 @c dot -T png doc/images/gcc-mesboot-bag-graph.dot > doc/images/gcc-mesboot-bag-graph.png
28320
28321 Below is the generated dependency graph for @code{gcc-mesboot}, the bootstrap
28322 compiler used to build the rest of GuixSD.
28323
28324 @image{images/gcc-mesboot-bag-graph,6in,,Dependency graph of the gcc-mesboot}
28325
28326 @node Preparing to Use the Bootstrap Binaries
28327 @section Preparing to Use the Bootstrap Binaries
28328
28329 @c As of Emacs 24.3, Info-mode displays the image, but since it's a
28330 @c large image, it's hard to scroll. Oh well.
28331 @image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap derivations}
28332
28333 The figure above shows the very beginning of the dependency graph of the
28334 distribution, corresponding to the package definitions of the @code{(gnu
28335 packages bootstrap)} module. A similar figure can be generated with
28336 @command{guix graph} (@pxref{Invoking guix graph}), along the lines of:
28337
28338 @example
28339 guix graph -t derivation \
28340 -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
28341 | dot -Tps > gcc.ps
28342 @end example
28343
28344 or, for the Reduced Binary Seed bootstrap
28345
28346 @example
28347 guix graph -t derivation \
28348 -e '(@@@@ (gnu packages bootstrap) %bootstrap-mes)' \
28349 | dot -Tps > mes.ps
28350 @end example
28351
28352 At this level of detail, things are
28353 slightly complex. First, Guile itself consists of an ELF executable,
28354 along with many source and compiled Scheme files that are dynamically
28355 loaded when it runs. This gets stored in the @file{guile-2.0.7.tar.xz}
28356 tarball shown in this graph. This tarball is part of Guix's ``source''
28357 distribution, and gets inserted into the store with @code{add-to-store}
28358 (@pxref{The Store}).
28359
28360 But how do we write a derivation that unpacks this tarball and adds it
28361 to the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
28362 derivation---the first one that gets built---uses @code{bash} as its
28363 builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
28364 @code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar},
28365 @file{xz}, and @file{mkdir} are statically-linked binaries, also part of
28366 the Guix source distribution, whose sole purpose is to allow the Guile
28367 tarball to be unpacked.
28368
28369 Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning
28370 Guile that can be used to run subsequent build programs. Its first task
28371 is to download tarballs containing the other pre-built binaries---this
28372 is what the @code{.tar.xz.drv} derivations do. Guix modules such as
28373 @code{ftp-client.scm} are used for this purpose. The
28374 @code{module-import.drv} derivations import those modules in a directory
28375 in the store, using the original layout. The
28376 @code{module-import-compiled.drv} derivations compile those modules, and
28377 write them in an output directory with the right layout. This
28378 corresponds to the @code{#:modules} argument of
28379 @code{build-expression->derivation} (@pxref{Derivations}).
28380
28381 Finally, the various tarballs are unpacked by the derivations
28382 @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv}, or
28383 @code{bootstrap-mes-0.drv} and @code{bootstrap-mescc-tools-0.drv}, at which
28384 point we have a working C tool chain.
28385
28386 @unnumberedsec Building the Build Tools
28387
28388 Bootstrapping is complete when we have a full tool chain that does not
28389 depend on the pre-built bootstrap tools discussed above. This
28390 no-dependency requirement is verified by checking whether the files of
28391 the final tool chain contain references to the @file{/gnu/store}
28392 directories of the bootstrap inputs. The process that leads to this
28393 ``final'' tool chain is described by the package definitions found in
28394 the @code{(gnu packages commencement)} module.
28395
28396 The @command{guix graph} command allows us to ``zoom out'' compared to
28397 the graph above, by looking at the level of package objects instead of
28398 individual derivations---remember that a package may translate to
28399 several derivations, typically one derivation to download its source,
28400 one to build the Guile modules it needs, and one to actually build the
28401 package from source. The command:
28402
28403 @example
28404 guix graph -t bag \
28405 -e '(@@@@ (gnu packages commencement)
28406 glibc-final-with-bootstrap-bash)' | dot -Tps > t.ps
28407 @end example
28408
28409 @noindent
28410 produces the dependency graph leading to the ``final'' C
28411 library@footnote{You may notice the @code{glibc-intermediate} label,
28412 suggesting that it is not @emph{quite} final, but as a good
28413 approximation, we will consider it final.}, depicted below.
28414
28415 @image{images/bootstrap-packages,6in,,Dependency graph of the early packages}
28416
28417 @c See <https://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
28418 The first tool that gets built with the bootstrap binaries is
28419 GNU@tie{}Make---noted @code{make-boot0} above---which is a prerequisite
28420 for all the following packages. From there Findutils and Diffutils get
28421 built.
28422
28423 Then come the first-stage Binutils and GCC, built as pseudo cross
28424 tools---i.e., with @code{--target} equal to @code{--host}. They are
28425 used to build libc. Thanks to this cross-build trick, this libc is
28426 guaranteed not to hold any reference to the initial tool chain.
28427
28428 From there the final Binutils and GCC (not shown above) are built.
28429 GCC uses @code{ld}
28430 from the final Binutils, and links programs against the just-built libc.
28431 This tool chain is used to build the other packages used by Guix and by
28432 the GNU Build System: Guile, Bash, Coreutils, etc.
28433
28434 And voilà! At this point we have the complete set of build tools that
28435 the GNU Build System expects. These are in the @code{%final-inputs}
28436 variable of the @code{(gnu packages commencement)} module, and are
28437 implicitly used by any package that uses @code{gnu-build-system}
28438 (@pxref{Build Systems, @code{gnu-build-system}}).
28439
28440
28441 @unnumberedsec Building the Bootstrap Binaries
28442
28443 @cindex bootstrap binaries
28444 Because the final tool chain does not depend on the bootstrap binaries,
28445 those rarely need to be updated. Nevertheless, it is useful to have an
28446 automated way to produce them, should an update occur, and this is what
28447 the @code{(gnu packages make-bootstrap)} module provides.
28448
28449 The following command builds the tarballs containing the bootstrap binaries
28450 (Binutils, GCC, glibc, for the traditional bootstrap and linux-libre-headers,
28451 bootstrap-mescc-tools, bootstrap-mes for the Reduced Binary Seed bootstrap,
28452 and Guile, and a tarball containing a mixture of Coreutils and other basic
28453 command-line tools):
28454
28455 @example
28456 guix build bootstrap-tarballs
28457 @end example
28458
28459 The generated tarballs are those that should be referred to in the
28460 @code{(gnu packages bootstrap)} module mentioned at the beginning of
28461 this section.
28462
28463 Still here? Then perhaps by now you've started to wonder: when do we
28464 reach a fixed point? That is an interesting question! The answer is
28465 unknown, but if you would like to investigate further (and have
28466 significant computational and storage resources to do so), then let us
28467 know.
28468
28469 @unnumberedsec Reducing the Set of Bootstrap Binaries
28470
28471 Our traditional bootstrap includes GCC, GNU Libc, Guile, etc. That's a lot of
28472 binary code! Why is that a problem? It's a problem because these big chunks
28473 of binary code are practically non-auditable, which makes it hard to establish
28474 what source code produced them. Every unauditable binary also leaves us
28475 vulnerable to compiler backdoors as described by Ken Thompson in the 1984
28476 paper @emph{Reflections on Trusting Trust}.
28477
28478 This is mitigated by the fact that our bootstrap binaries were generated
28479 from an earlier Guix revision. Nevertheless it lacks the level of
28480 transparency that we get in the rest of the package dependency graph,
28481 where Guix always gives us a source-to-binary mapping. Thus, our goal
28482 is to reduce the set of bootstrap binaries to the bare minimum.
28483
28484 The @uref{https://bootstrappable.org, Bootstrappable.org web site} lists
28485 on-going projects to do that. One of these is about replacing the
28486 bootstrap GCC with a sequence of assemblers, interpreters, and compilers
28487 of increasing complexity, which could be built from source starting from
28488 a simple and auditable assembler.
28489
28490 Our first major achievement is the replacement of of GCC, the GNU C Library
28491 and Binutils by MesCC-Tools (a simple hex linker and macro assembler) and Mes
28492 (@pxref{Top, GNU Mes Reference Manual,, mes, GNU Mes}, a Scheme interpreter
28493 and C compiler in Scheme). Neither MesCC-Tools nor Mes can be fully
28494 bootstrapped yet and thus we inject them as binary seeds. We call this the
28495 Reduced Binary Seed bootstrap, as it has halved the size of our bootstrap
28496 binaries! Also, it has eliminated the C compiler binary; i686-linux and
28497 x86_64-linux Guix packages are now bootstrapped without any binary C compiler.
28498
28499 Work is ongoing to make MesCC-Tools and Mes fully bootstrappable and we are
28500 also looking at any other bootstrap binaries. Your help is welcome!
28501
28502 @node Porting
28503 @chapter Porting to a New Platform
28504
28505 As discussed above, the GNU distribution is self-contained, and
28506 self-containment is achieved by relying on pre-built ``bootstrap
28507 binaries'' (@pxref{Bootstrapping}). These binaries are specific to an
28508 operating system kernel, CPU architecture, and application binary
28509 interface (ABI). Thus, to port the distribution to a platform that is
28510 not yet supported, one must build those bootstrap binaries, and update
28511 the @code{(gnu packages bootstrap)} module to use them on that platform.
28512
28513 Fortunately, Guix can @emph{cross compile} those bootstrap binaries.
28514 When everything goes well, and assuming the GNU tool chain supports the
28515 target platform, this can be as simple as running a command like this
28516 one:
28517
28518 @example
28519 guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
28520 @end example
28521
28522 For this to work, the @code{glibc-dynamic-linker} procedure in
28523 @code{(gnu packages bootstrap)} must be augmented to return the right
28524 file name for libc's dynamic linker on that platform; likewise,
28525 @code{system->linux-architecture} in @code{(gnu packages linux)} must be
28526 taught about the new platform.
28527
28528 Once these are built, the @code{(gnu packages bootstrap)} module needs
28529 to be updated to refer to these binaries on the target platform. That
28530 is, the hashes and URLs of the bootstrap tarballs for the new platform
28531 must be added alongside those of the currently supported platforms. The
28532 bootstrap Guile tarball is treated specially: it is expected to be
28533 available locally, and @file{gnu/local.mk} has rules to download it for
28534 the supported architectures; a rule for the new platform must be added
28535 as well.
28536
28537 In practice, there may be some complications. First, it may be that the
28538 extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
28539 above) is not recognized by all the GNU tools. Typically, glibc
28540 recognizes some of these, whereas GCC uses an extra @code{--with-abi}
28541 configure flag (see @code{gcc.scm} for examples of how to handle this).
28542 Second, some of the required packages could fail to build for that
28543 platform. Lastly, the generated binaries could be broken for some
28544 reason.
28545
28546 @c *********************************************************************
28547 @include contributing.texi
28548
28549 @c *********************************************************************
28550 @node Acknowledgments
28551 @chapter Acknowledgments
28552
28553 Guix is based on the @uref{https://nixos.org/nix/, Nix package manager},
28554 which was designed and
28555 implemented by Eelco Dolstra, with contributions from other people (see
28556 the @file{nix/AUTHORS} file in Guix.) Nix pioneered functional package
28557 management, and promoted unprecedented features, such as transactional
28558 package upgrades and rollbacks, per-user profiles, and referentially
28559 transparent build processes. Without this work, Guix would not exist.
28560
28561 The Nix-based software distributions, Nixpkgs and NixOS, have also been
28562 an inspiration for Guix.
28563
28564 GNU@tie{}Guix itself is a collective work with contributions from a
28565 number of people. See the @file{AUTHORS} file in Guix for more
28566 information on these fine people. The @file{THANKS} file lists people
28567 who have helped by reporting bugs, taking care of the infrastructure,
28568 providing artwork and themes, making suggestions, and more---thank you!
28569
28570
28571 @c *********************************************************************
28572 @node GNU Free Documentation License
28573 @appendix GNU Free Documentation License
28574 @cindex license, GNU Free Documentation License
28575 @include fdl-1.3.texi
28576
28577 @c *********************************************************************
28578 @node Concept Index
28579 @unnumbered Concept Index
28580 @printindex cp
28581
28582 @node Programming Index
28583 @unnumbered Programming Index
28584 @syncodeindex tp fn
28585 @syncodeindex vr fn
28586 @printindex fn
28587
28588 @bye
28589
28590 @c Local Variables:
28591 @c ispell-local-dictionary: "american";
28592 @c End: