Fix some typos.
[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
15 @copying
16 Copyright @copyright{} 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès@*
17 Copyright @copyright{} 2013, 2014, 2016 Andreas Enge@*
18 Copyright @copyright{} 2013 Nikita Karetnikov@*
19 Copyright @copyright{} 2014, 2015, 2016 Alex Kost@*
20 Copyright @copyright{} 2015, 2016 Mathieu Lirzin@*
21 Copyright @copyright{} 2014 Pierre-Antoine Rault@*
22 Copyright @copyright{} 2015 Taylan Ulrich Bayırlı/Kammer@*
23 Copyright @copyright{} 2015, 2016, 2017 Leo Famulari@*
24 Copyright @copyright{} 2015, 2016, 2017, 2018 Ricardo Wurmus@*
25 Copyright @copyright{} 2016 Ben Woodcroft@*
26 Copyright @copyright{} 2016, 2017, 2018 Chris Marusich@*
27 Copyright @copyright{} 2016, 2017, 2018 Efraim Flashner@*
28 Copyright @copyright{} 2016 John Darrington@*
29 Copyright @copyright{} 2016, 2017 Nils Gillmann@*
30 Copyright @copyright{} 2016, 2017, 2018 Jan Nieuwenhuizen@*
31 Copyright @copyright{} 2016 Julien Lepiller@*
32 Copyright @copyright{} 2016 Alex ter Weele@*
33 Copyright @copyright{} 2017, 2018 Clément Lassieur@*
34 Copyright @copyright{} 2017 Mathieu Othacehe@*
35 Copyright @copyright{} 2017 Federico Beffa@*
36 Copyright @copyright{} 2017 Carlo Zancanaro@*
37 Copyright @copyright{} 2017 Thomas Danckaert@*
38 Copyright @copyright{} 2017 humanitiesNerd@*
39 Copyright @copyright{} 2017 Christopher Allan Webber@*
40 Copyright @copyright{} 2017, 2018 Marius Bakke@*
41 Copyright @copyright{} 2017 Hartmut Goebel@*
42 Copyright @copyright{} 2017 Maxim Cournoyer@*
43 Copyright @copyright{} 2017, 2018 Tobias Geerinckx-Rice@*
44 Copyright @copyright{} 2017 George Clemmer@*
45 Copyright @copyright{} 2017 Andy Wingo@*
46 Copyright @copyright{} 2017, 2018 Arun Isaac@*
47 Copyright @copyright{} 2017 nee@*
48 Copyright @copyright{} 2018 Rutger Helling@*
49 Copyright @copyright{} 2018 Oleg Pykhalov@*
50 Copyright @copyright{} 2018 Mike Gerwitz@*
51 Copyright @copyright{} 2018 Pierre-Antoine Rouby@*
52 Copyright @copyright{} 2018 Gábor Boskovits@*
53
54 Permission is granted to copy, distribute and/or modify this document
55 under the terms of the GNU Free Documentation License, Version 1.3 or
56 any later version published by the Free Software Foundation; with no
57 Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
58 copy of the license is included in the section entitled ``GNU Free
59 Documentation License''.
60 @end copying
61
62 @dircategory System administration
63 @direntry
64 * Guix: (guix). Manage installed software and system configuration.
65 * guix package: (guix)Invoking guix package. Installing, removing, and upgrading packages.
66 * guix gc: (guix)Invoking guix gc. Reclaiming unused disk space.
67 * guix pull: (guix)Invoking guix pull. Update the list of available packages.
68 * guix system: (guix)Invoking guix system. Manage the operating system configuration.
69 @end direntry
70
71 @dircategory Software development
72 @direntry
73 * guix environment: (guix)Invoking guix environment. Building development environments with Guix.
74 * guix build: (guix)Invoking guix build. Building packages.
75 * guix pack: (guix)Invoking guix pack. Creating binary bundles.
76 @end direntry
77
78 @titlepage
79 @title GNU Guix Reference Manual
80 @subtitle Using the GNU Guix Functional Package Manager
81 @author The GNU Guix Developers
82
83 @page
84 @vskip 0pt plus 1filll
85 Edition @value{EDITION} @*
86 @value{UPDATED} @*
87
88 @insertcopying
89 @end titlepage
90
91 @contents
92
93 @c *********************************************************************
94 @node Top
95 @top GNU Guix
96
97 This document describes GNU Guix version @value{VERSION}, a functional
98 package management tool written for the GNU system.
99
100 @c TRANSLATORS: You can replace the following paragraph with information on
101 @c how to join your own translation team and how to report issues with the
102 @c translation.
103 This manual is also available in French (@pxref{Top,,, guix.fr, Manuel de
104 référence de GNU Guix}). If you would like to translate it in your native
105 language, consider joining the
106 @uref{https://translationproject.org/domain/guix-manual.html, Translation
107 Project}.
108
109 @menu
110 * Introduction:: What is Guix about?
111 * Installation:: Installing Guix.
112 * Package Management:: Package installation, upgrade, etc.
113 * Programming Interface:: Using Guix in Scheme.
114 * Utilities:: Package management commands.
115 * GNU Distribution:: Software for your friendly GNU system.
116 * Contributing:: Your help needed!
117
118 * Acknowledgments:: Thanks!
119 * GNU Free Documentation License:: The license of this manual.
120 * Concept Index:: Concepts.
121 * Programming Index:: Data types, functions, and variables.
122
123 @detailmenu
124 --- The Detailed Node Listing ---
125
126 Installation
127
128 * Binary Installation:: Getting Guix running in no time!
129 * Requirements:: Software needed to build and run Guix.
130 * Running the Test Suite:: Testing Guix.
131 * Setting Up the Daemon:: Preparing the build daemon's environment.
132 * Invoking guix-daemon:: Running the build daemon.
133 * Application Setup:: Application-specific setup.
134
135 Setting Up the Daemon
136
137 * Build Environment Setup:: Preparing the isolated build environment.
138 * Daemon Offload Setup:: Offloading builds to remote machines.
139 * SELinux Support:: Using an SELinux policy for the daemon.
140
141 Package Management
142
143 * Features:: How Guix will make your life brighter.
144 * Invoking guix package:: Package installation, removal, etc.
145 * Substitutes:: Downloading pre-built binaries.
146 * Packages with Multiple Outputs:: Single source package, multiple outputs.
147 * Invoking guix gc:: Running the garbage collector.
148 * Invoking guix pull:: Fetching the latest Guix and distribution.
149 * Channels:: Customizing the package collection.
150 * Invoking guix pack:: Creating software bundles.
151 * Invoking guix archive:: Exporting and importing store files.
152
153 Substitutes
154
155 * Official Substitute Server:: One particular source of substitutes.
156 * Substitute Server Authorization:: How to enable or disable substitutes.
157 * Substitute Authentication:: How Guix verifies substitutes.
158 * Proxy Settings:: How to get substitutes via proxy.
159 * Substitution Failure:: What happens when substitution fails.
160 * On Trusting Binaries:: How can you trust that binary blob?
161
162 Programming Interface
163
164 * Defining Packages:: Defining new packages.
165 * Build Systems:: Specifying how packages are built.
166 * The Store:: Manipulating the package store.
167 * Derivations:: Low-level interface to package derivations.
168 * The Store Monad:: Purely functional interface to the store.
169 * G-Expressions:: Manipulating build expressions.
170 * Invoking guix repl:: Fiddling with Guix interactively.
171
172 Defining Packages
173
174 * package Reference:: The package data type.
175 * origin Reference:: The origin data type.
176
177 Utilities
178
179 * Invoking guix build:: Building packages from the command line.
180 * Invoking guix edit:: Editing package definitions.
181 * Invoking guix download:: Downloading a file and printing its hash.
182 * Invoking guix hash:: Computing the cryptographic hash of a file.
183 * Invoking guix import:: Importing package definitions.
184 * Invoking guix refresh:: Updating package definitions.
185 * Invoking guix lint:: Finding errors in package definitions.
186 * Invoking guix size:: Profiling disk usage.
187 * Invoking guix graph:: Visualizing the graph of packages.
188 * Invoking guix environment:: Setting up development environments.
189 * Invoking guix publish:: Sharing substitutes.
190 * Invoking guix challenge:: Challenging substitute servers.
191 * Invoking guix copy:: Copying to and from a remote store.
192 * Invoking guix container:: Process isolation.
193 * Invoking guix weather:: Assessing substitute availability.
194
195 Invoking @command{guix build}
196
197 * Common Build Options:: Build options for most commands.
198 * Package Transformation Options:: Creating variants of packages.
199 * Additional Build Options:: Options specific to 'guix build'.
200 * Debugging Build Failures:: Real life packaging experience.
201
202 GNU Distribution
203
204 * System Installation:: Installing the whole operating system.
205 * System Configuration:: Configuring the operating system.
206 * Documentation:: Browsing software user manuals.
207 * Installing Debugging Files:: Feeding the debugger.
208 * Security Updates:: Deploying security fixes quickly.
209 * Package Modules:: Packages from the programmer's viewpoint.
210 * Packaging Guidelines:: Growing the distribution.
211 * Bootstrapping:: GNU/Linux built from scratch.
212 * Porting:: Targeting another platform or kernel.
213
214 System Installation
215
216 * Limitations:: What you can expect.
217 * Hardware Considerations:: Supported hardware.
218 * USB Stick and DVD Installation:: Preparing the installation medium.
219 * Preparing for Installation:: Networking, partitioning, etc.
220 * Proceeding with the Installation:: The real thing.
221 * Installing GuixSD in a VM:: GuixSD playground.
222 * Building the Installation Image:: How this comes to be.
223
224 System Configuration
225
226 * Using the Configuration System:: Customizing your GNU system.
227 * operating-system Reference:: Detail of operating-system declarations.
228 * File Systems:: Configuring file system mounts.
229 * Mapped Devices:: Block device extra processing.
230 * User Accounts:: Specifying user accounts.
231 * Locales:: Language and cultural convention settings.
232 * Services:: Specifying system services.
233 * Setuid Programs:: Programs running with root privileges.
234 * X.509 Certificates:: Authenticating HTTPS servers.
235 * Name Service Switch:: Configuring libc's name service switch.
236 * Initial RAM Disk:: Linux-Libre bootstrapping.
237 * Bootloader Configuration:: Configuring the boot loader.
238 * Invoking guix system:: Instantiating a system configuration.
239 * Running GuixSD in a VM:: How to run GuixSD in a virtual machine.
240 * Defining Services:: Adding new service definitions.
241
242 Services
243
244 * Base Services:: Essential system services.
245 * Scheduled Job Execution:: The mcron service.
246 * Log Rotation:: The rottlog service.
247 * Networking Services:: Network setup, SSH daemon, etc.
248 * X Window:: Graphical display.
249 * Printing Services:: Local and remote printer support.
250 * Desktop Services:: D-Bus and desktop services.
251 * Sound Services:: ALSA and Pulseaudio services.
252 * Database Services:: SQL databases, key-value stores, etc.
253 * Mail Services:: IMAP, POP3, SMTP, and all that.
254 * Messaging Services:: Messaging services.
255 * Telephony Services:: Telephony services.
256 * Monitoring Services:: Monitoring services.
257 * Kerberos Services:: Kerberos services.
258 * Web Services:: Web servers.
259 * Certificate Services:: TLS certificates via Let's Encrypt.
260 * DNS Services:: DNS daemons.
261 * VPN Services:: VPN daemons.
262 * Network File System:: NFS related services.
263 * Continuous Integration:: The Cuirass service.
264 * Power Management Services:: Extending battery life.
265 * Audio Services:: The MPD.
266 * Virtualization Services:: Virtualization services.
267 * Version Control Services:: Providing remote access to Git repositories.
268 * Game Services:: Game servers.
269 * Miscellaneous Services:: Other services.
270
271 Defining Services
272
273 * Service Composition:: The model for composing services.
274 * Service Types and Services:: Types and services.
275 * Service Reference:: API reference.
276 * Shepherd Services:: A particular type of service.
277
278 Packaging Guidelines
279
280 * Software Freedom:: What may go into the distribution.
281 * Package Naming:: What's in a name?
282 * Version Numbers:: When the name is not enough.
283 * Synopses and Descriptions:: Helping users find the right package.
284 * Python Modules:: A touch of British comedy.
285 * Perl Modules:: Little pearls.
286 * Java Packages:: Coffee break.
287 * Fonts:: Fond of fonts.
288
289 Contributing
290
291 * Building from Git:: The latest and greatest.
292 * Running Guix Before It Is Installed:: Hacker tricks.
293 * The Perfect Setup:: The right tools.
294 * Coding Style:: Hygiene of the contributor.
295 * Submitting Patches:: Share your work.
296
297 Coding Style
298
299 * Programming Paradigm:: How to compose your elements.
300 * Modules:: Where to store your code?
301 * Data Types and Pattern Matching:: Implementing data structures.
302 * Formatting Code:: Writing conventions.
303
304 @end detailmenu
305 @end menu
306
307 @c *********************************************************************
308 @node Introduction
309 @chapter Introduction
310
311 @cindex purpose
312 GNU Guix@footnote{``Guix'' is pronounced like ``geeks'', or ``ɡiːks''
313 using the international phonetic alphabet (IPA).} is a package
314 management tool for the GNU system. Guix makes it easy for unprivileged
315 users to install, upgrade, or remove packages, to roll back to a
316 previous package set, to build packages from source, and generally
317 assists with the creation and maintenance of software environments.
318
319 @cindex user interfaces
320 Guix provides a command-line package management interface
321 (@pxref{Invoking guix package}), a set of command-line utilities
322 (@pxref{Utilities}), as well as Scheme programming interfaces
323 (@pxref{Programming Interface}).
324 @cindex build daemon
325 Its @dfn{build daemon} is responsible for building packages on behalf of
326 users (@pxref{Setting Up the Daemon}) and for downloading pre-built
327 binaries from authorized sources (@pxref{Substitutes}).
328
329 @cindex extensibility of the distribution
330 @cindex customization, of packages
331 Guix includes package definitions for many GNU and non-GNU packages, all
332 of which @uref{https://www.gnu.org/philosophy/free-sw.html, respect the
333 user's computing freedom}. It is @emph{extensible}: users can write
334 their own package definitions (@pxref{Defining Packages}) and make them
335 available as independent package modules (@pxref{Package Modules}). It
336 is also @emph{customizable}: users can @emph{derive} specialized package
337 definitions from existing ones, including from the command line
338 (@pxref{Package Transformation Options}).
339
340 @cindex Guix System Distribution
341 @cindex GuixSD
342 You can install GNU@tie{}Guix on top of an existing GNU/Linux system
343 where it complements the available tools without interference
344 (@pxref{Installation}), or you can use it as part of the standalone
345 @dfn{Guix System Distribution} or GuixSD (@pxref{GNU Distribution}).
346 With GNU@tie{}GuixSD, you @emph{declare} all aspects of the operating
347 system configuration and Guix takes care of instantiating the
348 configuration in a transactional, reproducible, and stateless fashion
349 (@pxref{System Configuration}).
350
351 @cindex functional package management
352 Under the hood, Guix implements the @dfn{functional package management}
353 discipline pioneered by Nix (@pxref{Acknowledgments}).
354 In Guix, the package build and installation process is seen
355 as a @emph{function}, in the mathematical sense. That function takes inputs,
356 such as build scripts, a compiler, and libraries, and
357 returns an installed package. As a pure function, its result depends
358 solely on its inputs---for instance, it cannot refer to software or
359 scripts that were not explicitly passed as inputs. A build function
360 always produces the same result when passed a given set of inputs. It
361 cannot alter the environment of the running system in
362 any way; for instance, it cannot create, modify, or delete files outside
363 of its build and installation directories. This is achieved by running
364 build processes in isolated environments (or @dfn{containers}), where only their
365 explicit inputs are visible.
366
367 @cindex store
368 The result of package build functions is @dfn{cached} in the file
369 system, in a special directory called @dfn{the store} (@pxref{The
370 Store}). Each package is installed in a directory of its own in the
371 store---by default under @file{/gnu/store}. The directory name contains
372 a hash of all the inputs used to build that package; thus, changing an
373 input yields a different directory name.
374
375 This approach is the foundation for the salient features of Guix: support
376 for transactional package upgrade and rollback, per-user installation, and
377 garbage collection of packages (@pxref{Features}).
378
379
380 @c *********************************************************************
381 @node Installation
382 @chapter Installation
383
384 @cindex installing Guix
385 GNU Guix is available for download from its website at
386 @url{http://www.gnu.org/software/guix/}. This section describes the
387 software requirements of Guix, as well as how to install it and get
388 ready to use it.
389
390 Note that this section is concerned with the installation of the package
391 manager, which can be done on top of a running GNU/Linux system. If,
392 instead, you want to install the complete GNU operating system,
393 @pxref{System Installation}.
394
395 @cindex foreign distro
396 When installed on a running GNU/Linux system---thereafter called a
397 @dfn{foreign distro}---GNU@tie{}Guix complements the available tools
398 without interference. Its data lives exclusively in two directories,
399 usually @file{/gnu/store} and @file{/var/guix}; other files on your
400 system, such as @file{/etc}, are left untouched.
401
402 Once installed, Guix can be updated by running @command{guix pull}
403 (@pxref{Invoking guix pull}).
404
405 @menu
406 * Binary Installation:: Getting Guix running in no time!
407 * Requirements:: Software needed to build and run Guix.
408 * Running the Test Suite:: Testing Guix.
409 * Setting Up the Daemon:: Preparing the build daemon's environment.
410 * Invoking guix-daemon:: Running the build daemon.
411 * Application Setup:: Application-specific setup.
412 @end menu
413
414 @node Binary Installation
415 @section Binary Installation
416
417 @cindex installing Guix from binaries
418 This section describes how to install Guix on an arbitrary system from a
419 self-contained tarball providing binaries for Guix and for all its
420 dependencies. This is often quicker than installing from source, which
421 is described in the next sections. The only requirement is to have
422 GNU@tie{}tar and Xz.
423
424 We provide a
425 @uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh,
426 shell installer script}, which automates the download, installation, and
427 initial configuration of Guix. It should be run as the root user.
428
429 Installing goes along these lines:
430
431 @enumerate
432 @item
433 @cindex downloading Guix binary
434 Download the binary tarball from
435 @indicateurl{https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz},
436 where @var{system} is @code{x86_64-linux} for an @code{x86_64} machine
437 already running the kernel Linux, and so on.
438
439 @c The following is somewhat duplicated in ``System Installation''.
440 Make sure to download the associated @file{.sig} file and to verify the
441 authenticity of the tarball against it, along these lines:
442
443 @example
444 $ wget https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
445 $ gpg --verify guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
446 @end example
447
448 If that command fails because you do not have the required public key,
449 then run this command to import it:
450
451 @example
452 $ gpg --keyserver pgp.mit.edu --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
453 @end example
454
455 @noindent
456 and rerun the @code{gpg --verify} command.
457 @c end authentication part
458
459 @item
460 Now, you need to become the @code{root} user. Depending on your distribution,
461 you may have to run @code{su -} or @code{sudo -i}. As @code{root}, run:
462
463 @example
464 # cd /tmp
465 # tar --warning=no-timestamp -xf \
466 guix-binary-@value{VERSION}.@var{system}.tar.xz
467 # mv var/guix /var/ && mv gnu /
468 @end example
469
470 This creates @file{/gnu/store} (@pxref{The Store}) and @file{/var/guix}.
471 The latter contains a ready-to-use profile for @code{root} (see next
472 step.)
473
474 Do @emph{not} unpack the tarball on a working Guix system since that
475 would overwrite its own essential files.
476
477 The @code{--warning=no-timestamp} option makes sure GNU@tie{}tar does
478 not emit warnings about ``implausibly old time stamps'' (such
479 warnings were triggered by GNU@tie{}tar 1.26 and older; recent
480 versions are fine.)
481 They stem from the fact that all the
482 files in the archive have their modification time set to zero (which
483 means January 1st, 1970.) This is done on purpose to make sure the
484 archive content is independent of its creation time, thus making it
485 reproducible.
486
487 @item
488 Make @code{root}'s profile available under @file{~root/.guix-profile}:
489
490 @example
491 # ln -sf /var/guix/profiles/per-user/root/guix-profile \
492 ~root/.guix-profile
493 @end example
494
495 Source @file{etc/profile} to augment @code{PATH} and other relevant
496 environment variables:
497
498 @example
499 # GUIX_PROFILE="`echo ~root`/.guix-profile" ; \
500 source $GUIX_PROFILE/etc/profile
501 @end example
502
503 @item
504 Create the group and user accounts for build users as explained below
505 (@pxref{Build Environment Setup}).
506
507 @item
508 Run the daemon, and set it to automatically start on boot.
509
510 If your host distro uses the systemd init system, this can be achieved
511 with these commands:
512
513 @c Versions of systemd that supported symlinked service files are not
514 @c yet widely deployed, so we should suggest that users copy the service
515 @c files into place.
516 @c
517 @c See this thread for more information:
518 @c http://lists.gnu.org/archive/html/guix-devel/2017-01/msg01199.html
519
520 @example
521 # cp ~root/.guix-profile/lib/systemd/system/guix-daemon.service \
522 /etc/systemd/system/
523 # systemctl start guix-daemon && systemctl enable guix-daemon
524 @end example
525
526 If your host distro uses the Upstart init system:
527
528 @example
529 # initctl reload-configuration
530 # cp ~root/.guix-profile/lib/upstart/system/guix-daemon.conf /etc/init/
531 # start guix-daemon
532 @end example
533
534 Otherwise, you can still start the daemon manually with:
535
536 @example
537 # ~root/.guix-profile/bin/guix-daemon --build-users-group=guixbuild
538 @end example
539
540 @item
541 Make the @command{guix} command available to other users on the machine,
542 for instance with:
543
544 @example
545 # mkdir -p /usr/local/bin
546 # cd /usr/local/bin
547 # ln -s /var/guix/profiles/per-user/root/guix-profile/bin/guix
548 @end example
549
550 It is also a good idea to make the Info version of this manual available
551 there:
552
553 @example
554 # mkdir -p /usr/local/share/info
555 # cd /usr/local/share/info
556 # for i in /var/guix/profiles/per-user/root/guix-profile/share/info/* ;
557 do ln -s $i ; done
558 @end example
559
560 That way, assuming @file{/usr/local/share/info} is in the search path,
561 running @command{info guix} will open this manual (@pxref{Other Info
562 Directories,,, texinfo, GNU Texinfo}, for more details on changing the
563 Info search path.)
564
565 @item
566 @cindex substitutes, authorization thereof
567 To use substitutes from @code{hydra.gnu.org} or one of its mirrors
568 (@pxref{Substitutes}), authorize them:
569
570 @example
571 # guix archive --authorize < ~root/.guix-profile/share/guix/hydra.gnu.org.pub
572 @end example
573
574 @item
575 Each user may need to perform a few additional steps to make their Guix
576 environment ready for use, @pxref{Application Setup}.
577 @end enumerate
578
579 Voilà, the installation is complete!
580
581 You can confirm that Guix is working by installing a sample package into
582 the root profile:
583
584 @example
585 # guix package -i hello
586 @end example
587
588 The @code{guix} package must remain available in @code{root}'s profile,
589 or it would become subject to garbage collection---in which case you
590 would find yourself badly handicapped by the lack of the @command{guix}
591 command. In other words, do not remove @code{guix} by running
592 @code{guix package -r guix}.
593
594 The binary installation tarball can be (re)produced and verified simply
595 by running the following command in the Guix source tree:
596
597 @example
598 make guix-binary.@var{system}.tar.xz
599 @end example
600
601 @noindent
602 ... which, in turn, runs:
603
604 @example
605 guix pack -s @var{system} --localstatedir guix
606 @end example
607
608 @xref{Invoking guix pack}, for more info on this handy tool.
609
610 @node Requirements
611 @section Requirements
612
613 This section lists requirements when building Guix from source. The
614 build procedure for Guix is the same as for other GNU software, and is
615 not covered here. Please see the files @file{README} and @file{INSTALL}
616 in the Guix source tree for additional details.
617
618 GNU Guix depends on the following packages:
619
620 @itemize
621 @item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.13 or
622 later, including 2.2.x;
623 @item @url{http://gnupg.org/, GNU libgcrypt};
624 @item
625 @uref{http://gnutls.org/, GnuTLS}, specifically its Guile bindings
626 (@pxref{Guile Preparations, how to install the GnuTLS bindings for
627 Guile,, gnutls-guile, GnuTLS-Guile});
628 @item
629 @uref{https://notabug.org/civodul/guile-sqlite3, Guile-SQLite3}, version 0.1.0
630 or later;
631 @item
632 @c FIXME: Specify a version number once a release has been made.
633 @uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, from August
634 2017 or later;
635 @item @url{http://zlib.net, zlib};
636 @item @url{http://www.gnu.org/software/make/, GNU Make}.
637 @end itemize
638
639 The following dependencies are optional:
640
641 @itemize
642 @item
643 Installing
644 @url{http://savannah.nongnu.org/projects/guile-json/, Guile-JSON} will
645 allow you to use the @command{guix import pypi} command (@pxref{Invoking
646 guix import}). It is of
647 interest primarily for developers and not for casual users.
648
649 @item
650 @c Note: We need at least 0.10.2 for 'channel-send-eof'.
651 Support for build offloading (@pxref{Daemon Offload Setup}) and
652 @command{guix copy} (@pxref{Invoking guix copy}) depends on
653 @uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH},
654 version 0.10.2 or later.
655
656 @item
657 When @url{http://www.bzip.org, libbz2} is available,
658 @command{guix-daemon} can use it to compress build logs.
659 @end itemize
660
661 Unless @code{--disable-daemon} was passed to @command{configure}, the
662 following packages are also needed:
663
664 @itemize
665 @item @url{http://sqlite.org, SQLite 3};
666 @item @url{http://gcc.gnu.org, GCC's g++}, with support for the
667 C++11 standard.
668 @end itemize
669
670 @cindex state directory
671 When configuring Guix on a system that already has a Guix installation,
672 be sure to specify the same state directory as the existing installation
673 using the @code{--localstatedir} option of the @command{configure}
674 script (@pxref{Directory Variables, @code{localstatedir},, standards,
675 GNU Coding Standards}). The @command{configure} script protects against
676 unintended misconfiguration of @var{localstatedir} so you do not
677 inadvertently corrupt your store (@pxref{The Store}).
678
679 @cindex Nix, compatibility
680 When a working installation of @url{http://nixos.org/nix/, the Nix package
681 manager} is available, you
682 can instead configure Guix with @code{--disable-daemon}. In that case,
683 Nix replaces the three dependencies above.
684
685 Guix is compatible with Nix, so it is possible to share the same store
686 between both. To do so, you must pass @command{configure} not only the
687 same @code{--with-store-dir} value, but also the same
688 @code{--localstatedir} value. The latter is essential because it
689 specifies where the database that stores metadata about the store is
690 located, among other things. The default values for Nix are
691 @code{--with-store-dir=/nix/store} and @code{--localstatedir=/nix/var}.
692 Note that @code{--disable-daemon} is not required if
693 your goal is to share the store with Nix.
694
695 @node Running the Test Suite
696 @section Running the Test Suite
697
698 @cindex test suite
699 After a successful @command{configure} and @code{make} run, it is a good
700 idea to run the test suite. It can help catch issues with the setup or
701 environment, or bugs in Guix itself---and really, reporting test
702 failures is a good way to help improve the software. To run the test
703 suite, type:
704
705 @example
706 make check
707 @end example
708
709 Test cases can run in parallel: you can use the @code{-j} option of
710 GNU@tie{}make to speed things up. The first run may take a few minutes
711 on a recent machine; subsequent runs will be faster because the store
712 that is created for test purposes will already have various things in
713 cache.
714
715 It is also possible to run a subset of the tests by defining the
716 @code{TESTS} makefile variable as in this example:
717
718 @example
719 make check TESTS="tests/store.scm tests/cpio.scm"
720 @end example
721
722 By default, tests results are displayed at a file level. In order to
723 see the details of every individual test cases, it is possible to define
724 the @code{SCM_LOG_DRIVER_FLAGS} makefile variable as in this example:
725
726 @example
727 make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no"
728 @end example
729
730 Upon failure, please email @email{bug-guix@@gnu.org} and attach the
731 @file{test-suite.log} file. Please specify the Guix version being used
732 as well as version numbers of the dependencies (@pxref{Requirements}) in
733 your message.
734
735 Guix also comes with a whole-system test suite that tests complete
736 GuixSD operating system instances. It can only run on systems where
737 Guix is already installed, using:
738
739 @example
740 make check-system
741 @end example
742
743 @noindent
744 or, again, by defining @code{TESTS} to select a subset of tests to run:
745
746 @example
747 make check-system TESTS="basic mcron"
748 @end example
749
750 These system tests are defined in the @code{(gnu tests @dots{})}
751 modules. They work by running the operating systems under test with
752 lightweight instrumentation in a virtual machine (VM). They can be
753 computationally intensive or rather cheap, depending on whether
754 substitutes are available for their dependencies (@pxref{Substitutes}).
755 Some of them require a lot of storage space to hold VM images.
756
757 Again in case of test failures, please send @email{bug-guix@@gnu.org}
758 all the details.
759
760 @node Setting Up the Daemon
761 @section Setting Up the Daemon
762
763 @cindex daemon
764 Operations such as building a package or running the garbage collector
765 are all performed by a specialized process, the @dfn{build daemon}, on
766 behalf of clients. Only the daemon may access the store and its
767 associated database. Thus, any operation that manipulates the store
768 goes through the daemon. For instance, command-line tools such as
769 @command{guix package} and @command{guix build} communicate with the
770 daemon (@i{via} remote procedure calls) to instruct it what to do.
771
772 The following sections explain how to prepare the build daemon's
773 environment. See also @ref{Substitutes}, for information on how to allow
774 the daemon to download pre-built binaries.
775
776 @menu
777 * Build Environment Setup:: Preparing the isolated build environment.
778 * Daemon Offload Setup:: Offloading builds to remote machines.
779 * SELinux Support:: Using an SELinux policy for the daemon.
780 @end menu
781
782 @node Build Environment Setup
783 @subsection Build Environment Setup
784
785 @cindex build environment
786 In a standard multi-user setup, Guix and its daemon---the
787 @command{guix-daemon} program---are installed by the system
788 administrator; @file{/gnu/store} is owned by @code{root} and
789 @command{guix-daemon} runs as @code{root}. Unprivileged users may use
790 Guix tools to build packages or otherwise access the store, and the
791 daemon will do it on their behalf, ensuring that the store is kept in a
792 consistent state, and allowing built packages to be shared among users.
793
794 @cindex build users
795 When @command{guix-daemon} runs as @code{root}, you may not want package
796 build processes themselves to run as @code{root} too, for obvious
797 security reasons. To avoid that, a special pool of @dfn{build users}
798 should be created for use by build processes started by the daemon.
799 These build users need not have a shell and a home directory: they will
800 just be used when the daemon drops @code{root} privileges in build
801 processes. Having several such users allows the daemon to launch
802 distinct build processes under separate UIDs, which guarantees that they
803 do not interfere with each other---an essential feature since builds are
804 regarded as pure functions (@pxref{Introduction}).
805
806 On a GNU/Linux system, a build user pool may be created like this (using
807 Bash syntax and the @code{shadow} commands):
808
809 @c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
810 @c for why `-G' is needed.
811 @example
812 # groupadd --system guixbuild
813 # for i in `seq -w 1 10`;
814 do
815 useradd -g guixbuild -G guixbuild \
816 -d /var/empty -s `which nologin` \
817 -c "Guix build user $i" --system \
818 guixbuilder$i;
819 done
820 @end example
821
822 @noindent
823 The number of build users determines how many build jobs may run in
824 parallel, as specified by the @option{--max-jobs} option
825 (@pxref{Invoking guix-daemon, @option{--max-jobs}}). To use
826 @command{guix system vm} and related commands, you may need to add the
827 build users to the @code{kvm} group so they can access @file{/dev/kvm},
828 using @code{-G guixbuild,kvm} instead of @code{-G guixbuild}
829 (@pxref{Invoking guix system}).
830
831 The @code{guix-daemon} program may then be run as @code{root} with the
832 following command@footnote{If your machine uses the systemd init system,
833 dropping the @file{@var{prefix}/lib/systemd/system/guix-daemon.service}
834 file in @file{/etc/systemd/system} will ensure that
835 @command{guix-daemon} is automatically started. Similarly, if your
836 machine uses the Upstart init system, drop the
837 @file{@var{prefix}/lib/upstart/system/guix-daemon.conf}
838 file in @file{/etc/init}.}:
839
840 @example
841 # guix-daemon --build-users-group=guixbuild
842 @end example
843
844 @cindex chroot
845 @noindent
846 This way, the daemon starts build processes in a chroot, under one of
847 the @code{guixbuilder} users. On GNU/Linux, by default, the chroot
848 environment contains nothing but:
849
850 @c Keep this list in sync with libstore/build.cc! -----------------------
851 @itemize
852 @item
853 a minimal @code{/dev} directory, created mostly independently from the
854 host @code{/dev}@footnote{``Mostly'', because while the set of files
855 that appear in the chroot's @code{/dev} is fixed, most of these files
856 can only be created if the host has them.};
857
858 @item
859 the @code{/proc} directory; it only shows the processes of the container
860 since a separate PID name space is used;
861
862 @item
863 @file{/etc/passwd} with an entry for the current user and an entry for
864 user @file{nobody};
865
866 @item
867 @file{/etc/group} with an entry for the user's group;
868
869 @item
870 @file{/etc/hosts} with an entry that maps @code{localhost} to
871 @code{127.0.0.1};
872
873 @item
874 a writable @file{/tmp} directory.
875 @end itemize
876
877 You can influence the directory where the daemon stores build trees
878 @i{via} the @code{TMPDIR} environment variable. However, the build tree
879 within the chroot is always called @file{/tmp/guix-build-@var{name}.drv-0},
880 where @var{name} is the derivation name---e.g., @code{coreutils-8.24}.
881 This way, the value of @code{TMPDIR} does not leak inside build
882 environments, which avoids discrepancies in cases where build processes
883 capture the name of their build tree.
884
885 @vindex http_proxy
886 The daemon also honors the @code{http_proxy} environment variable for
887 HTTP downloads it performs, be it for fixed-output derivations
888 (@pxref{Derivations}) or for substitutes (@pxref{Substitutes}).
889
890 If you are installing Guix as an unprivileged user, it is still possible
891 to run @command{guix-daemon} provided you pass @code{--disable-chroot}.
892 However, build processes will not be isolated from one another, and not
893 from the rest of the system. Thus, build processes may interfere with
894 each other, and may access programs, libraries, and other files
895 available on the system---making it much harder to view them as
896 @emph{pure} functions.
897
898
899 @node Daemon Offload Setup
900 @subsection Using the Offload Facility
901
902 @cindex offloading
903 @cindex build hook
904 When desired, the build daemon can @dfn{offload} derivation builds to
905 other machines running Guix, using the @code{offload} @dfn{build
906 hook}@footnote{This feature is available only when
907 @uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH} is
908 present.}. When that
909 feature is enabled, a list of user-specified build machines is read from
910 @file{/etc/guix/machines.scm}; every time a build is requested, for
911 instance via @code{guix build}, the daemon attempts to offload it to one
912 of the machines that satisfy the constraints of the derivation, in
913 particular its system type---e.g., @file{x86_64-linux}. Missing
914 prerequisites for the build are copied over SSH to the target machine,
915 which then proceeds with the build; upon success the output(s) of the
916 build are copied back to the initial machine.
917
918 The @file{/etc/guix/machines.scm} file typically looks like this:
919
920 @example
921 (list (build-machine
922 (name "eightysix.example.org")
923 (system "x86_64-linux")
924 (host-key "ssh-ed25519 AAAAC3Nza@dots{}")
925 (user "bob")
926 (speed 2.)) ;incredibly fast!
927
928 (build-machine
929 (name "meeps.example.org")
930 (system "mips64el-linux")
931 (host-key "ssh-rsa AAAAB3Nza@dots{}")
932 (user "alice")
933 (private-key
934 (string-append (getenv "HOME")
935 "/.ssh/identity-for-guix"))))
936 @end example
937
938 @noindent
939 In the example above we specify a list of two build machines, one for
940 the @code{x86_64} architecture and one for the @code{mips64el}
941 architecture.
942
943 In fact, this file is---not surprisingly!---a Scheme file that is
944 evaluated when the @code{offload} hook is started. Its return value
945 must be a list of @code{build-machine} objects. While this example
946 shows a fixed list of build machines, one could imagine, say, using
947 DNS-SD to return a list of potential build machines discovered in the
948 local network (@pxref{Introduction, Guile-Avahi,, guile-avahi, Using
949 Avahi in Guile Scheme Programs}). The @code{build-machine} data type is
950 detailed below.
951
952 @deftp {Data Type} build-machine
953 This data type represents build machines to which the daemon may offload
954 builds. The important fields are:
955
956 @table @code
957
958 @item name
959 The host name of the remote machine.
960
961 @item system
962 The system type of the remote machine---e.g., @code{"x86_64-linux"}.
963
964 @item user
965 The user account to use when connecting to the remote machine over SSH.
966 Note that the SSH key pair must @emph{not} be passphrase-protected, to
967 allow non-interactive logins.
968
969 @item host-key
970 This must be the machine's SSH @dfn{public host key} in OpenSSH format.
971 This is used to authenticate the machine when we connect to it. It is a
972 long string that looks like this:
973
974 @example
975 ssh-ed25519 AAAAC3NzaC@dots{}mde+UhL hint@@example.org
976 @end example
977
978 If the machine is running the OpenSSH daemon, @command{sshd}, the host
979 key can be found in a file such as
980 @file{/etc/ssh/ssh_host_ed25519_key.pub}.
981
982 If the machine is running the SSH daemon of GNU@tie{}lsh,
983 @command{lshd}, the host key is in @file{/etc/lsh/host-key.pub} or a
984 similar file. It can be converted to the OpenSSH format using
985 @command{lsh-export-key} (@pxref{Converting keys,,, lsh, LSH Manual}):
986
987 @example
988 $ lsh-export-key --openssh < /etc/lsh/host-key.pub
989 ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV@dots{}
990 @end example
991
992 @end table
993
994 A number of optional fields may be specified:
995
996 @table @asis
997
998 @item @code{port} (default: @code{22})
999 Port number of SSH server on the machine.
1000
1001 @item @code{private-key} (default: @file{~root/.ssh/id_rsa})
1002 The SSH private key file to use when connecting to the machine, in
1003 OpenSSH format. This key must not be protected with a passphrase.
1004
1005 Note that the default value is the private key @emph{of the root
1006 account}. Make sure it exists if you use the default.
1007
1008 @item @code{compression} (default: @code{"zlib@@openssh.com,zlib"})
1009 @itemx @code{compression-level} (default: @code{3})
1010 The SSH-level compression methods and compression level requested.
1011
1012 Note that offloading relies on SSH compression to reduce bandwidth usage
1013 when transferring files to and from build machines.
1014
1015 @item @code{daemon-socket} (default: @code{"/var/guix/daemon-socket/socket"})
1016 File name of the Unix-domain socket @command{guix-daemon} is listening
1017 to on that machine.
1018
1019 @item @code{parallel-builds} (default: @code{1})
1020 The number of builds that may run in parallel on the machine.
1021
1022 @item @code{speed} (default: @code{1.0})
1023 A ``relative speed factor''. The offload scheduler will tend to prefer
1024 machines with a higher speed factor.
1025
1026 @item @code{features} (default: @code{'()})
1027 A list of strings denoting specific features supported by the machine.
1028 An example is @code{"kvm"} for machines that have the KVM Linux modules
1029 and corresponding hardware support. Derivations can request features by
1030 name, and they will be scheduled on matching build machines.
1031
1032 @end table
1033 @end deftp
1034
1035 The @code{guile} command must be in the search path on the build
1036 machines. In addition, the Guix modules must be in
1037 @code{$GUILE_LOAD_PATH} on the build machine---you can check whether
1038 this is the case by running:
1039
1040 @example
1041 ssh build-machine guile -c "'(use-modules (guix config))'"
1042 @end example
1043
1044 There is one last thing to do once @file{machines.scm} is in place. As
1045 explained above, when offloading, files are transferred back and forth
1046 between the machine stores. For this to work, you first need to
1047 generate a key pair on each machine to allow the daemon to export signed
1048 archives of files from the store (@pxref{Invoking guix archive}):
1049
1050 @example
1051 # guix archive --generate-key
1052 @end example
1053
1054 @noindent
1055 Each build machine must authorize the key of the master machine so that
1056 it accepts store items it receives from the master:
1057
1058 @example
1059 # guix archive --authorize < master-public-key.txt
1060 @end example
1061
1062 @noindent
1063 Likewise, the master machine must authorize the key of each build machine.
1064
1065 All the fuss with keys is here to express pairwise mutual trust
1066 relations between the master and the build machines. Concretely, when
1067 the master receives files from a build machine (and @i{vice versa}), its
1068 build daemon can make sure they are genuine, have not been tampered
1069 with, and that they are signed by an authorized key.
1070
1071 @cindex offload test
1072 To test whether your setup is operational, run this command on the
1073 master node:
1074
1075 @example
1076 # guix offload test
1077 @end example
1078
1079 This will attempt to connect to each of the build machines specified in
1080 @file{/etc/guix/machines.scm}, make sure Guile and the Guix modules are
1081 available on each machine, attempt to export to the machine and import
1082 from it, and report any error in the process.
1083
1084 If you want to test a different machine file, just specify it on the
1085 command line:
1086
1087 @example
1088 # guix offload test machines-qualif.scm
1089 @end example
1090
1091 Last, you can test the subset of the machines whose name matches a
1092 regular expression like this:
1093
1094 @example
1095 # guix offload test machines.scm '\.gnu\.org$'
1096 @end example
1097
1098 @cindex offload status
1099 To display the current load of all build hosts, run this command on the
1100 main node:
1101
1102 @example
1103 # guix offload status
1104 @end example
1105
1106
1107 @node SELinux Support
1108 @subsection SELinux Support
1109
1110 @cindex SELinux, daemon policy
1111 @cindex mandatory access control, SELinux
1112 @cindex security, guix-daemon
1113 Guix includes an SELinux policy file at @file{etc/guix-daemon.cil} that
1114 can be installed on a system where SELinux is enabled, in order to label
1115 Guix files and to specify the expected behavior of the daemon. Since
1116 GuixSD does not provide an SELinux base policy, the daemon policy cannot
1117 be used on GuixSD.
1118
1119 @subsubsection Installing the SELinux policy
1120 @cindex SELinux, policy installation
1121 To install the policy run this command as root:
1122
1123 @example
1124 semodule -i etc/guix-daemon.cil
1125 @end example
1126
1127 Then relabel the file system with @code{restorecon} or by a different
1128 mechanism provided by your system.
1129
1130 Once the policy is installed, the file system has been relabeled, and
1131 the daemon has been restarted, it should be running in the
1132 @code{guix_daemon_t} context. You can confirm this with the following
1133 command:
1134
1135 @example
1136 ps -Zax | grep guix-daemon
1137 @end example
1138
1139 Monitor the SELinux log files as you run a command like @code{guix build
1140 hello} to convince yourself that SELinux permits all necessary
1141 operations.
1142
1143 @subsubsection Limitations
1144 @cindex SELinux, limitations
1145
1146 This policy is not perfect. Here is a list of limitations or quirks
1147 that should be considered when deploying the provided SELinux policy for
1148 the Guix daemon.
1149
1150 @enumerate
1151 @item
1152 @code{guix_daemon_socket_t} isn’t actually used. None of the socket
1153 operations involve contexts that have anything to do with
1154 @code{guix_daemon_socket_t}. It doesn’t hurt to have this unused label,
1155 but it would be preferrable to define socket rules for only this label.
1156
1157 @item
1158 @code{guix gc} cannot access arbitrary links to profiles. By design,
1159 the file label of the destination of a symlink is independent of the
1160 file label of the link itself. Although all profiles under
1161 $localstatedir are labelled, the links to these profiles inherit the
1162 label of the directory they are in. For links in the user’s home
1163 directory this will be @code{user_home_t}. But for links from the root
1164 user’s home directory, or @file{/tmp}, or the HTTP server’s working
1165 directory, etc, this won’t work. @code{guix gc} would be prevented from
1166 reading and following these links.
1167
1168 @item
1169 The daemon’s feature to listen for TCP connections might no longer work.
1170 This might require extra rules, because SELinux treats network sockets
1171 differently from files.
1172
1173 @item
1174 Currently all files with a name matching the regular expression
1175 @code{/gnu/store/.+-(guix-.+|profile)/bin/guix-daemon} are assigned the
1176 label @code{guix_daemon_exec_t}; this means that @emph{any} file with
1177 that name in any profile would be permitted to run in the
1178 @code{guix_daemon_t} domain. This is not ideal. An attacker could
1179 build a package that provides this executable and convince a user to
1180 install and run it, which lifts it into the @code{guix_daemon_t} domain.
1181 At that point SELinux could not prevent it from accessing files that are
1182 allowed for processes in that domain.
1183
1184 We could generate a much more restrictive policy at installation time,
1185 so that only the @emph{exact} file name of the currently installed
1186 @code{guix-daemon} executable would be labelled with
1187 @code{guix_daemon_exec_t}, instead of using a broad regular expression.
1188 The downside is that root would have to install or upgrade the policy at
1189 installation time whenever the Guix package that provides the
1190 effectively running @code{guix-daemon} executable is upgraded.
1191 @end enumerate
1192
1193 @node Invoking guix-daemon
1194 @section Invoking @command{guix-daemon}
1195
1196 The @command{guix-daemon} program implements all the functionality to
1197 access the store. This includes launching build processes, running the
1198 garbage collector, querying the availability of a build result, etc. It
1199 is normally run as @code{root} like this:
1200
1201 @example
1202 # guix-daemon --build-users-group=guixbuild
1203 @end example
1204
1205 @noindent
1206 For details on how to set it up, @pxref{Setting Up the Daemon}.
1207
1208 @cindex chroot
1209 @cindex container, build environment
1210 @cindex build environment
1211 @cindex reproducible builds
1212 By default, @command{guix-daemon} launches build processes under
1213 different UIDs, taken from the build group specified with
1214 @code{--build-users-group}. In addition, each build process is run in a
1215 chroot environment that only contains the subset of the store that the
1216 build process depends on, as specified by its derivation
1217 (@pxref{Programming Interface, derivation}), plus a set of specific
1218 system directories. By default, the latter contains @file{/dev} and
1219 @file{/dev/pts}. Furthermore, on GNU/Linux, the build environment is a
1220 @dfn{container}: in addition to having its own file system tree, it has
1221 a separate mount name space, its own PID name space, network name space,
1222 etc. This helps achieve reproducible builds (@pxref{Features}).
1223
1224 When the daemon performs a build on behalf of the user, it creates a
1225 build directory under @file{/tmp} or under the directory specified by
1226 its @code{TMPDIR} environment variable; this directory is shared with
1227 the container for the duration of the build. Be aware that using a
1228 directory other than @file{/tmp} can affect build results---for example,
1229 with a longer directory name, a build process that uses Unix-domain
1230 sockets might hit the name length limitation for @code{sun_path}, which
1231 it would otherwise not hit.
1232
1233 The build directory is automatically deleted upon completion, unless the
1234 build failed and the client specified @option{--keep-failed}
1235 (@pxref{Invoking guix build, @option{--keep-failed}}).
1236
1237 The following command-line options are supported:
1238
1239 @table @code
1240 @item --build-users-group=@var{group}
1241 Take users from @var{group} to run build processes (@pxref{Setting Up
1242 the Daemon, build users}).
1243
1244 @item --no-substitutes
1245 @cindex substitutes
1246 Do not use substitutes for build products. That is, always build things
1247 locally instead of allowing downloads of pre-built binaries
1248 (@pxref{Substitutes}).
1249
1250 When the daemon runs with @code{--no-substitutes}, clients can still
1251 explicitly enable substitution @i{via} the @code{set-build-options}
1252 remote procedure call (@pxref{The Store}).
1253
1254 @item --substitute-urls=@var{urls}
1255 @anchor{daemon-substitute-urls}
1256 Consider @var{urls} the default whitespace-separated list of substitute
1257 source URLs. When this option is omitted,
1258 @indicateurl{https://mirror.hydra.gnu.org https://hydra.gnu.org} is used
1259 (@code{mirror.hydra.gnu.org} is a mirror of @code{hydra.gnu.org}).
1260
1261 This means that substitutes may be downloaded from @var{urls}, as long
1262 as they are signed by a trusted signature (@pxref{Substitutes}).
1263
1264 @cindex build hook
1265 @item --no-build-hook
1266 Do not use the @dfn{build hook}.
1267
1268 The build hook is a helper program that the daemon can start and to
1269 which it submits build requests. This mechanism is used to offload
1270 builds to other machines (@pxref{Daemon Offload Setup}).
1271
1272 @item --cache-failures
1273 Cache build failures. By default, only successful builds are cached.
1274
1275 When this option is used, @command{guix gc --list-failures} can be used
1276 to query the set of store items marked as failed; @command{guix gc
1277 --clear-failures} removes store items from the set of cached failures.
1278 @xref{Invoking guix gc}.
1279
1280 @item --cores=@var{n}
1281 @itemx -c @var{n}
1282 Use @var{n} CPU cores to build each derivation; @code{0} means as many
1283 as available.
1284
1285 The default value is @code{0}, but it may be overridden by clients, such
1286 as the @code{--cores} option of @command{guix build} (@pxref{Invoking
1287 guix build}).
1288
1289 The effect is to define the @code{NIX_BUILD_CORES} environment variable
1290 in the build process, which can then use it to exploit internal
1291 parallelism---for instance, by running @code{make -j$NIX_BUILD_CORES}.
1292
1293 @item --max-jobs=@var{n}
1294 @itemx -M @var{n}
1295 Allow at most @var{n} build jobs in parallel. The default value is
1296 @code{1}. Setting it to @code{0} means that no builds will be performed
1297 locally; instead, the daemon will offload builds (@pxref{Daemon Offload
1298 Setup}), or simply fail.
1299
1300 @item --max-silent-time=@var{seconds}
1301 When the build or substitution process remains silent for more than
1302 @var{seconds}, terminate it and report a build failure.
1303
1304 The default value is @code{0}, which disables the timeout.
1305
1306 The value specified here can be overridden by clients (@pxref{Common
1307 Build Options, @code{--max-silent-time}}).
1308
1309 @item --timeout=@var{seconds}
1310 Likewise, when the build or substitution process lasts for more than
1311 @var{seconds}, terminate it and report a build failure.
1312
1313 The default value is @code{0}, which disables the timeout.
1314
1315 The value specified here can be overridden by clients (@pxref{Common
1316 Build Options, @code{--timeout}}).
1317
1318 @item --rounds=@var{N}
1319 Build each derivation @var{n} times in a row, and raise an error if
1320 consecutive build results are not bit-for-bit identical. Note that this
1321 setting can be overridden by clients such as @command{guix build}
1322 (@pxref{Invoking guix build}).
1323
1324 When used in conjunction with @option{--keep-failed}, the differing
1325 output is kept in the store, under @file{/gnu/store/@dots{}-check}.
1326 This makes it easy to look for differences between the two results.
1327
1328 @item --debug
1329 Produce debugging output.
1330
1331 This is useful to debug daemon start-up issues, but then it may be
1332 overridden by clients, for example the @code{--verbosity} option of
1333 @command{guix build} (@pxref{Invoking guix build}).
1334
1335 @item --chroot-directory=@var{dir}
1336 Add @var{dir} to the build chroot.
1337
1338 Doing this may change the result of build processes---for instance if
1339 they use optional dependencies found in @var{dir} when it is available,
1340 and not otherwise. For that reason, it is not recommended to do so.
1341 Instead, make sure that each derivation declares all the inputs that it
1342 needs.
1343
1344 @item --disable-chroot
1345 Disable chroot builds.
1346
1347 Using this option is not recommended since, again, it would allow build
1348 processes to gain access to undeclared dependencies. It is necessary,
1349 though, when @command{guix-daemon} is running under an unprivileged user
1350 account.
1351
1352 @item --log-compression=@var{type}
1353 Compress build logs according to @var{type}, one of @code{gzip},
1354 @code{bzip2}, or @code{none}.
1355
1356 Unless @code{--lose-logs} is used, all the build logs are kept in the
1357 @var{localstatedir}. To save space, the daemon automatically compresses
1358 them with bzip2 by default.
1359
1360 @item --disable-deduplication
1361 @cindex deduplication
1362 Disable automatic file ``deduplication'' in the store.
1363
1364 By default, files added to the store are automatically ``deduplicated'':
1365 if a newly added file is identical to another one found in the store,
1366 the daemon makes the new file a hard link to the other file. This can
1367 noticeably reduce disk usage, at the expense of slightly increased
1368 input/output load at the end of a build process. This option disables
1369 this optimization.
1370
1371 @item --gc-keep-outputs[=yes|no]
1372 Tell whether the garbage collector (GC) must keep outputs of live
1373 derivations.
1374
1375 @cindex GC roots
1376 @cindex garbage collector roots
1377 When set to ``yes'', the GC will keep the outputs of any live derivation
1378 available in the store---the @code{.drv} files. The default is ``no'',
1379 meaning that derivation outputs are kept only if they are reachable from a GC
1380 root. @xref{Invoking guix gc}, for more on GC roots.
1381
1382 @item --gc-keep-derivations[=yes|no]
1383 Tell whether the garbage collector (GC) must keep derivations
1384 corresponding to live outputs.
1385
1386 When set to ``yes'', as is the case by default, the GC keeps
1387 derivations---i.e., @code{.drv} files---as long as at least one of their
1388 outputs is live. This allows users to keep track of the origins of
1389 items in their store. Setting it to ``no'' saves a bit of disk space.
1390
1391 In this way, setting @code{--gc-keep-derivations} to ``yes'' causes liveness
1392 to flow from outputs to derivations, and setting @code{--gc-keep-outputs} to
1393 ``yes'' causes liveness to flow from derivations to outputs. When both are
1394 set to ``yes'', the effect is to keep all the build prerequisites (the
1395 sources, compiler, libraries, and other build-time tools) of live objects in
1396 the store, regardless of whether these prerequisites are reachable from a GC
1397 root. This is convenient for developers since it saves rebuilds or downloads.
1398
1399 @item --impersonate-linux-2.6
1400 On Linux-based systems, impersonate Linux 2.6. This means that the
1401 kernel's @code{uname} system call will report 2.6 as the release number.
1402
1403 This might be helpful to build programs that (usually wrongfully) depend
1404 on the kernel version number.
1405
1406 @item --lose-logs
1407 Do not keep build logs. By default they are kept under
1408 @code{@var{localstatedir}/guix/log}.
1409
1410 @item --system=@var{system}
1411 Assume @var{system} as the current system type. By default it is the
1412 architecture/kernel pair found at configure time, such as
1413 @code{x86_64-linux}.
1414
1415 @item --listen=@var{endpoint}
1416 Listen for connections on @var{endpoint}. @var{endpoint} is interpreted
1417 as the file name of a Unix-domain socket if it starts with
1418 @code{/} (slash sign). Otherwise, @var{endpoint} is interpreted as a
1419 host name or host name and port to listen to. Here are a few examples:
1420
1421 @table @code
1422 @item --listen=/gnu/var/daemon
1423 Listen for connections on the @file{/gnu/var/daemon} Unix-domain socket,
1424 creating it if needed.
1425
1426 @item --listen=localhost
1427 @cindex daemon, remote access
1428 @cindex remote access to the daemon
1429 @cindex daemon, cluster setup
1430 @cindex clusters, daemon setup
1431 Listen for TCP connections on the network interface corresponding to
1432 @code{localhost}, on port 44146.
1433
1434 @item --listen=128.0.0.42:1234
1435 Listen for TCP connections on the network interface corresponding to
1436 @code{128.0.0.42}, on port 1234.
1437 @end table
1438
1439 This option can be repeated multiple times, in which case
1440 @command{guix-daemon} accepts connections on all the specified
1441 endpoints. Users can tell client commands what endpoint to connect to
1442 by setting the @code{GUIX_DAEMON_SOCKET} environment variable
1443 (@pxref{The Store, @code{GUIX_DAEMON_SOCKET}}).
1444
1445 @quotation Note
1446 The daemon protocol is @emph{unauthenticated and unencrypted}. Using
1447 @code{--listen=@var{host}} is suitable on local networks, such as
1448 clusters, where only trusted nodes may connect to the build daemon. In
1449 other cases where remote access to the daemon is needed, we recommend
1450 using Unix-domain sockets along with SSH.
1451 @end quotation
1452
1453 When @code{--listen} is omitted, @command{guix-daemon} listens for
1454 connections on the Unix-domain socket located at
1455 @file{@var{localstatedir}/guix/daemon-socket/socket}.
1456 @end table
1457
1458
1459 @node Application Setup
1460 @section Application Setup
1461
1462 @cindex foreign distro
1463 When using Guix on top of GNU/Linux distribution other than GuixSD---a
1464 so-called @dfn{foreign distro}---a few additional steps are needed to
1465 get everything in place. Here are some of them.
1466
1467 @subsection Locales
1468
1469 @anchor{locales-and-locpath}
1470 @cindex locales, when not on GuixSD
1471 @vindex LOCPATH
1472 @vindex GUIX_LOCPATH
1473 Packages installed @i{via} Guix will not use the locale data of the
1474 host system. Instead, you must first install one of the locale packages
1475 available with Guix and then define the @code{GUIX_LOCPATH} environment
1476 variable:
1477
1478 @example
1479 $ guix package -i glibc-locales
1480 $ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
1481 @end example
1482
1483 Note that the @code{glibc-locales} package contains data for all the
1484 locales supported by the GNU@tie{}libc and weighs in at around
1485 110@tie{}MiB. Alternatively, the @code{glibc-utf8-locales} is smaller but
1486 limited to a few UTF-8 locales.
1487
1488 The @code{GUIX_LOCPATH} variable plays a role similar to @code{LOCPATH}
1489 (@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library Reference
1490 Manual}). There are two important differences though:
1491
1492 @enumerate
1493 @item
1494 @code{GUIX_LOCPATH} is honored only by the libc in Guix, and not by the libc
1495 provided by foreign distros. Thus, using @code{GUIX_LOCPATH} allows you
1496 to make sure the programs of the foreign distro will not end up loading
1497 incompatible locale data.
1498
1499 @item
1500 libc suffixes each entry of @code{GUIX_LOCPATH} with @code{/X.Y}, where
1501 @code{X.Y} is the libc version---e.g., @code{2.22}. This means that,
1502 should your Guix profile contain a mixture of programs linked against
1503 different libc version, each libc version will only try to load locale
1504 data in the right format.
1505 @end enumerate
1506
1507 This is important because the locale data format used by different libc
1508 versions may be incompatible.
1509
1510 @subsection Name Service Switch
1511
1512 @cindex name service switch, glibc
1513 @cindex NSS (name service switch), glibc
1514 @cindex nscd (name service caching daemon)
1515 @cindex name service caching daemon (nscd)
1516 When using Guix on a foreign distro, we @emph{strongly recommend} that
1517 the system run the GNU C library's @dfn{name service cache daemon},
1518 @command{nscd}, which should be listening on the
1519 @file{/var/run/nscd/socket} socket. Failing to do that, applications
1520 installed with Guix may fail to look up host names or user accounts, or
1521 may even crash. The next paragraphs explain why.
1522
1523 @cindex @file{nsswitch.conf}
1524 The GNU C library implements a @dfn{name service switch} (NSS), which is
1525 an extensible mechanism for ``name lookups'' in general: host name
1526 resolution, user accounts, and more (@pxref{Name Service Switch,,, libc,
1527 The GNU C Library Reference Manual}).
1528
1529 @cindex Network information service (NIS)
1530 @cindex NIS (Network information service)
1531 Being extensible, the NSS supports @dfn{plugins}, which provide new name
1532 lookup implementations: for example, the @code{nss-mdns} plugin allow
1533 resolution of @code{.local} host names, the @code{nis} plugin allows
1534 user account lookup using the Network information service (NIS), and so
1535 on. These extra ``lookup services'' are configured system-wide in
1536 @file{/etc/nsswitch.conf}, and all the programs running on the system
1537 honor those settings (@pxref{NSS Configuration File,,, libc, The GNU C
1538 Reference Manual}).
1539
1540 When they perform a name lookup---for instance by calling the
1541 @code{getaddrinfo} function in C---applications first try to connect to
1542 the nscd; on success, nscd performs name lookups on their behalf. If
1543 the nscd is not running, then they perform the name lookup by
1544 themselves, by loading the name lookup services into their own address
1545 space and running it. These name lookup services---the
1546 @file{libnss_*.so} files---are @code{dlopen}'d, but they may come from
1547 the host system's C library, rather than from the C library the
1548 application is linked against (the C library coming from Guix).
1549
1550 And this is where the problem is: if your application is linked against
1551 Guix's C library (say, glibc 2.24) and tries to load NSS plugins from
1552 another C library (say, @code{libnss_mdns.so} for glibc 2.22), it will
1553 likely crash or have its name lookups fail unexpectedly.
1554
1555 Running @command{nscd} on the system, among other advantages, eliminates
1556 this binary incompatibility problem because those @code{libnss_*.so}
1557 files are loaded in the @command{nscd} process, not in applications
1558 themselves.
1559
1560 @subsection X11 Fonts
1561
1562 @cindex fonts
1563 The majority of graphical applications use Fontconfig to locate and
1564 load fonts and perform X11-client-side rendering. The @code{fontconfig}
1565 package in Guix looks for fonts in @file{$HOME/.guix-profile}
1566 by default. Thus, to allow graphical applications installed with Guix
1567 to display fonts, you have to install fonts with Guix as well.
1568 Essential font packages include @code{gs-fonts}, @code{font-dejavu}, and
1569 @code{font-gnu-freefont-ttf}.
1570
1571 To display text written in Chinese languages, Japanese, or Korean in
1572 graphical applications, consider installing
1573 @code{font-adobe-source-han-sans} or @code{font-wqy-zenhei}. The former
1574 has multiple outputs, one per language family (@pxref{Packages with
1575 Multiple Outputs}). For instance, the following command installs fonts
1576 for Chinese languages:
1577
1578 @example
1579 guix package -i font-adobe-source-han-sans:cn
1580 @end example
1581
1582 @cindex @code{xterm}
1583 Older programs such as @command{xterm} do not use Fontconfig and instead
1584 rely on server-side font rendering. Such programs require to specify a
1585 full name of a font using XLFD (X Logical Font Description), like this:
1586
1587 @example
1588 -*-dejavu sans-medium-r-normal-*-*-100-*-*-*-*-*-1
1589 @end example
1590
1591 To be able to use such full names for the TrueType fonts installed in
1592 your Guix profile, you need to extend the font path of the X server:
1593
1594 @c Note: 'xset' does not accept symlinks so the trick below arranges to
1595 @c get at the real directory. See <https://bugs.gnu.org/30655>.
1596 @example
1597 xset +fp $(dirname $(readlink -f ~/.guix-profile/share/fonts/truetype/fonts.dir))
1598 @end example
1599
1600 @cindex @code{xlsfonts}
1601 After that, you can run @code{xlsfonts} (from @code{xlsfonts} package)
1602 to make sure your TrueType fonts are listed there.
1603
1604 @cindex @code{fc-cache}
1605 @cindex font cache
1606 After installing fonts you may have to refresh the font cache to use
1607 them in applications. The same applies when applications installed via
1608 Guix do not seem to find fonts. To force rebuilding of the font cache
1609 run @code{fc-cache -f}. The @code{fc-cache} command is provided by the
1610 @code{fontconfig} package.
1611
1612 @subsection X.509 Certificates
1613
1614 @cindex @code{nss-certs}
1615 The @code{nss-certs} package provides X.509 certificates, which allow
1616 programs to authenticate Web servers accessed over HTTPS.
1617
1618 When using Guix on a foreign distro, you can install this package and
1619 define the relevant environment variables so that packages know where to
1620 look for certificates. @xref{X.509 Certificates}, for detailed
1621 information.
1622
1623 @subsection Emacs Packages
1624
1625 @cindex @code{emacs}
1626 When you install Emacs packages with Guix, the elisp files may be placed
1627 either in @file{$HOME/.guix-profile/share/emacs/site-lisp/} or in
1628 sub-directories of
1629 @file{$HOME/.guix-profile/share/emacs/site-lisp/guix.d/}. The latter
1630 directory exists because potentially there may exist thousands of Emacs
1631 packages and storing all their files in a single directory may not be
1632 reliable (because of name conflicts). So we think using a separate
1633 directory for each package is a good idea. It is very similar to how
1634 the Emacs package system organizes the file structure (@pxref{Package
1635 Files,,, emacs, The GNU Emacs Manual}).
1636
1637 By default, Emacs (installed with Guix) ``knows'' where these packages
1638 are placed, so you do not need to perform any configuration. If, for
1639 some reason, you want to avoid auto-loading Emacs packages installed
1640 with Guix, you can do so by running Emacs with @code{--no-site-file}
1641 option (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
1642
1643 @subsection The GCC toolchain
1644
1645 @cindex GCC
1646 @cindex ld-wrapper
1647
1648 Guix offers individual compiler packages such as @code{gcc} but if you
1649 are in need of a complete toolchain for compiling and linking source
1650 code what you really want is the @code{gcc-toolchain} package. This
1651 package provides a complete GCC toolchain for C/C++ development,
1652 including GCC itself, the GNU C Library (headers and binaries, plus
1653 debugging symbols in the @code{debug} output), Binutils, and a linker
1654 wrapper.
1655
1656 @cindex attempt to use impure library, error message
1657
1658 The wrapper's purpose is to inspect the @code{-L} and @code{-l} switches
1659 passed to the linker, add corresponding @code{-rpath} arguments, and
1660 invoke the actual linker with this new set of arguments. By default,
1661 the linker wrapper refuses to link to libraries outside the store to
1662 ensure ``purity''. This can be annoying when using the toolchain to
1663 link with local libraries. To allow references to libraries outside the
1664 store you need to define the environment variable
1665 @code{GUIX_LD_WRAPPER_ALLOW_IMPURITIES}.
1666
1667 @c TODO What else?
1668
1669 @c *********************************************************************
1670 @node Package Management
1671 @chapter Package Management
1672
1673 @cindex packages
1674 The purpose of GNU Guix is to allow users to easily install, upgrade, and
1675 remove software packages, without having to know about their build
1676 procedures or dependencies. Guix also goes beyond this obvious set of
1677 features.
1678
1679 This chapter describes the main features of Guix, as well as the
1680 package management tools it provides. Along with the command-line
1681 interface described below (@pxref{Invoking guix package, @code{guix
1682 package}}), you may also use the Emacs-Guix interface (@pxref{Top,,,
1683 emacs-guix, The Emacs-Guix Reference Manual}), after installing
1684 @code{emacs-guix} package (run @kbd{M-x guix-help} command to start
1685 with it):
1686
1687 @example
1688 guix package -i emacs-guix
1689 @end example
1690
1691 @menu
1692 * Features:: How Guix will make your life brighter.
1693 * Invoking guix package:: Package installation, removal, etc.
1694 * Substitutes:: Downloading pre-built binaries.
1695 * Packages with Multiple Outputs:: Single source package, multiple outputs.
1696 * Invoking guix gc:: Running the garbage collector.
1697 * Invoking guix pull:: Fetching the latest Guix and distribution.
1698 * Channels:: Customizing the package collection.
1699 * Invoking guix pack:: Creating software bundles.
1700 * Invoking guix archive:: Exporting and importing store files.
1701 @end menu
1702
1703 @node Features
1704 @section Features
1705
1706 When using Guix, each package ends up in the @dfn{package store}, in its
1707 own directory---something that resembles
1708 @file{/gnu/store/xxx-package-1.2}, where @code{xxx} is a base32 string.
1709
1710 Instead of referring to these directories, users have their own
1711 @dfn{profile}, which points to the packages that they actually want to
1712 use. These profiles are stored within each user's home directory, at
1713 @code{$HOME/.guix-profile}.
1714
1715 For example, @code{alice} installs GCC 4.7.2. As a result,
1716 @file{/home/alice/.guix-profile/bin/gcc} points to
1717 @file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Now, on the same machine,
1718 @code{bob} had already installed GCC 4.8.0. The profile of @code{bob}
1719 simply continues to point to
1720 @file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc}---i.e., both versions of GCC
1721 coexist on the same system without any interference.
1722
1723 The @command{guix package} command is the central tool to manage
1724 packages (@pxref{Invoking guix package}). It operates on the per-user
1725 profiles, and can be used @emph{with normal user privileges}.
1726
1727 @cindex transactions
1728 The command provides the obvious install, remove, and upgrade
1729 operations. Each invocation is actually a @emph{transaction}: either
1730 the specified operation succeeds, or nothing happens. Thus, if the
1731 @command{guix package} process is terminated during the transaction,
1732 or if a power outage occurs during the transaction, then the user's
1733 profile remains in its previous state, and remains usable.
1734
1735 In addition, any package transaction may be @emph{rolled back}. So, if,
1736 for example, an upgrade installs a new version of a package that turns
1737 out to have a serious bug, users may roll back to the previous instance
1738 of their profile, which was known to work well. Similarly, the global
1739 system configuration on GuixSD is subject to
1740 transactional upgrades and roll-back
1741 (@pxref{Using the Configuration System}).
1742
1743 All packages in the package store may be @emph{garbage-collected}.
1744 Guix can determine which packages are still referenced by user
1745 profiles, and remove those that are provably no longer referenced
1746 (@pxref{Invoking guix gc}). Users may also explicitly remove old
1747 generations of their profile so that the packages they refer to can be
1748 collected.
1749
1750 @cindex reproducibility
1751 @cindex reproducible builds
1752 Finally, Guix takes a @dfn{purely functional} approach to package
1753 management, as described in the introduction (@pxref{Introduction}).
1754 Each @file{/gnu/store} package directory name contains a hash of all the
1755 inputs that were used to build that package---compiler, libraries, build
1756 scripts, etc. This direct correspondence allows users to make sure a
1757 given package installation matches the current state of their
1758 distribution. It also helps maximize @dfn{build reproducibility}:
1759 thanks to the isolated build environments that are used, a given build
1760 is likely to yield bit-identical files when performed on different
1761 machines (@pxref{Invoking guix-daemon, container}).
1762
1763 @cindex substitutes
1764 This foundation allows Guix to support @dfn{transparent binary/source
1765 deployment}. When a pre-built binary for a @file{/gnu/store} item is
1766 available from an external source---a @dfn{substitute}, Guix just
1767 downloads it and unpacks it;
1768 otherwise, it builds the package from source, locally
1769 (@pxref{Substitutes}). Because build results are usually bit-for-bit
1770 reproducible, users do not have to trust servers that provide
1771 substitutes: they can force a local build and @emph{challenge} providers
1772 (@pxref{Invoking guix challenge}).
1773
1774 Control over the build environment is a feature that is also useful for
1775 developers. The @command{guix environment} command allows developers of
1776 a package to quickly set up the right development environment for their
1777 package, without having to manually install the dependencies of the
1778 package into their profile (@pxref{Invoking guix environment}).
1779
1780 @node Invoking guix package
1781 @section Invoking @command{guix package}
1782
1783 @cindex installing packages
1784 @cindex removing packages
1785 @cindex package installation
1786 @cindex package removal
1787 The @command{guix package} command is the tool that allows users to
1788 install, upgrade, and remove packages, as well as rolling back to
1789 previous configurations. It operates only on the user's own profile,
1790 and works with normal user privileges (@pxref{Features}). Its syntax
1791 is:
1792
1793 @example
1794 guix package @var{options}
1795 @end example
1796 @cindex transactions
1797 Primarily, @var{options} specifies the operations to be performed during
1798 the transaction. Upon completion, a new profile is created, but
1799 previous @dfn{generations} of the profile remain available, should the user
1800 want to roll back.
1801
1802 For example, to remove @code{lua} and install @code{guile} and
1803 @code{guile-cairo} in a single transaction:
1804
1805 @example
1806 guix package -r lua -i guile guile-cairo
1807 @end example
1808
1809 @command{guix package} also supports a @dfn{declarative approach}
1810 whereby the user specifies the exact set of packages to be available and
1811 passes it @i{via} the @option{--manifest} option
1812 (@pxref{profile-manifest, @option{--manifest}}).
1813
1814 @cindex profile
1815 For each user, a symlink to the user's default profile is automatically
1816 created in @file{$HOME/.guix-profile}. This symlink always points to the
1817 current generation of the user's default profile. Thus, users can add
1818 @file{$HOME/.guix-profile/bin} to their @code{PATH} environment
1819 variable, and so on.
1820 @cindex search paths
1821 If you are not using the Guix System Distribution, consider adding the
1822 following lines to your @file{~/.bash_profile} (@pxref{Bash Startup
1823 Files,,, bash, The GNU Bash Reference Manual}) so that newly-spawned
1824 shells get all the right environment variable definitions:
1825
1826 @example
1827 GUIX_PROFILE="$HOME/.guix-profile" ; \
1828 source "$HOME/.guix-profile/etc/profile"
1829 @end example
1830
1831 In a multi-user setup, user profiles are stored in a place registered as
1832 a @dfn{garbage-collector root}, which @file{$HOME/.guix-profile} points
1833 to (@pxref{Invoking guix gc}). That directory is normally
1834 @code{@var{localstatedir}/guix/profiles/per-user/@var{user}}, where
1835 @var{localstatedir} is the value passed to @code{configure} as
1836 @code{--localstatedir}, and @var{user} is the user name. The
1837 @file{per-user} directory is created when @command{guix-daemon} is
1838 started, and the @var{user} sub-directory is created by @command{guix
1839 package}.
1840
1841 The @var{options} can be among the following:
1842
1843 @table @code
1844
1845 @item --install=@var{package} @dots{}
1846 @itemx -i @var{package} @dots{}
1847 Install the specified @var{package}s.
1848
1849 Each @var{package} may specify either a simple package name, such as
1850 @code{guile}, or a package name followed by an at-sign and version number,
1851 such as @code{guile@@1.8.8} or simply @code{guile@@1.8} (in the latter
1852 case, the newest version prefixed by @code{1.8} is selected.)
1853
1854 If no version number is specified, the
1855 newest available version will be selected. In addition, @var{package}
1856 may contain a colon, followed by the name of one of the outputs of the
1857 package, as in @code{gcc:doc} or @code{binutils@@2.22:lib}
1858 (@pxref{Packages with Multiple Outputs}). Packages with a corresponding
1859 name (and optionally version) are searched for among the GNU
1860 distribution modules (@pxref{Package Modules}).
1861
1862 @cindex propagated inputs
1863 Sometimes packages have @dfn{propagated inputs}: these are dependencies
1864 that automatically get installed along with the required package
1865 (@pxref{package-propagated-inputs, @code{propagated-inputs} in
1866 @code{package} objects}, for information about propagated inputs in
1867 package definitions).
1868
1869 @anchor{package-cmd-propagated-inputs}
1870 An example is the GNU MPC library: its C header files refer to those of
1871 the GNU MPFR library, which in turn refer to those of the GMP library.
1872 Thus, when installing MPC, the MPFR and GMP libraries also get installed
1873 in the profile; removing MPC also removes MPFR and GMP---unless they had
1874 also been explicitly installed by the user.
1875
1876 Besides, packages sometimes rely on the definition of environment
1877 variables for their search paths (see explanation of
1878 @code{--search-paths} below). Any missing or possibly incorrect
1879 environment variable definitions are reported here.
1880
1881 @item --install-from-expression=@var{exp}
1882 @itemx -e @var{exp}
1883 Install the package @var{exp} evaluates to.
1884
1885 @var{exp} must be a Scheme expression that evaluates to a
1886 @code{<package>} object. This option is notably useful to disambiguate
1887 between same-named variants of a package, with expressions such as
1888 @code{(@@ (gnu packages base) guile-final)}.
1889
1890 Note that this option installs the first output of the specified
1891 package, which may be insufficient when needing a specific output of a
1892 multiple-output package.
1893
1894 @item --install-from-file=@var{file}
1895 @itemx -f @var{file}
1896 Install the package that the code within @var{file} evaluates to.
1897
1898 As an example, @var{file} might contain a definition like this
1899 (@pxref{Defining Packages}):
1900
1901 @example
1902 @verbatiminclude package-hello.scm
1903 @end example
1904
1905 Developers may find it useful to include such a @file{guix.scm} file
1906 in the root of their project source tree that can be used to test
1907 development snapshots and create reproducible development environments
1908 (@pxref{Invoking guix environment}).
1909
1910 @item --remove=@var{package} @dots{}
1911 @itemx -r @var{package} @dots{}
1912 Remove the specified @var{package}s.
1913
1914 As for @code{--install}, each @var{package} may specify a version number
1915 and/or output name in addition to the package name. For instance,
1916 @code{-r glibc:debug} would remove the @code{debug} output of
1917 @code{glibc}.
1918
1919 @item --upgrade[=@var{regexp} @dots{}]
1920 @itemx -u [@var{regexp} @dots{}]
1921 @cindex upgrading packages
1922 Upgrade all the installed packages. If one or more @var{regexp}s are
1923 specified, upgrade only installed packages whose name matches a
1924 @var{regexp}. Also see the @code{--do-not-upgrade} option below.
1925
1926 Note that this upgrades package to the latest version of packages found
1927 in the distribution currently installed. To update your distribution,
1928 you should regularly run @command{guix pull} (@pxref{Invoking guix
1929 pull}).
1930
1931 @item --do-not-upgrade[=@var{regexp} @dots{}]
1932 When used together with the @code{--upgrade} option, do @emph{not}
1933 upgrade any packages whose name matches a @var{regexp}. For example, to
1934 upgrade all packages in the current profile except those containing the
1935 substring ``emacs'':
1936
1937 @example
1938 $ guix package --upgrade . --do-not-upgrade emacs
1939 @end example
1940
1941 @item @anchor{profile-manifest}--manifest=@var{file}
1942 @itemx -m @var{file}
1943 @cindex profile declaration
1944 @cindex profile manifest
1945 Create a new generation of the profile from the manifest object
1946 returned by the Scheme code in @var{file}.
1947
1948 This allows you to @emph{declare} the profile's contents rather than
1949 constructing it through a sequence of @code{--install} and similar
1950 commands. The advantage is that @var{file} can be put under version
1951 control, copied to different machines to reproduce the same profile, and
1952 so on.
1953
1954 @c FIXME: Add reference to (guix profile) documentation when available.
1955 @var{file} must return a @dfn{manifest} object, which is roughly a list
1956 of packages:
1957
1958 @findex packages->manifest
1959 @example
1960 (use-package-modules guile emacs)
1961
1962 (packages->manifest
1963 (list emacs
1964 guile-2.0
1965 ;; Use a specific package output.
1966 (list guile-2.0 "debug")))
1967 @end example
1968
1969 @findex specifications->manifest
1970 In this example we have to know which modules define the @code{emacs}
1971 and @code{guile-2.0} variables to provide the right
1972 @code{use-package-modules} line, which can be cumbersome. We can
1973 instead provide regular package specifications and let
1974 @code{specifications->manifest} look up the corresponding package
1975 objects, like this:
1976
1977 @example
1978 (specifications->manifest
1979 '("emacs" "guile@@2.2" "guile@@2.2:debug"))
1980 @end example
1981
1982 @item --roll-back
1983 @cindex rolling back
1984 @cindex undoing transactions
1985 @cindex transactions, undoing
1986 Roll back to the previous @dfn{generation} of the profile---i.e., undo
1987 the last transaction.
1988
1989 When combined with options such as @code{--install}, roll back occurs
1990 before any other actions.
1991
1992 When rolling back from the first generation that actually contains
1993 installed packages, the profile is made to point to the @dfn{zeroth
1994 generation}, which contains no files apart from its own metadata.
1995
1996 After having rolled back, installing, removing, or upgrading packages
1997 overwrites previous future generations. Thus, the history of the
1998 generations in a profile is always linear.
1999
2000 @item --switch-generation=@var{pattern}
2001 @itemx -S @var{pattern}
2002 @cindex generations
2003 Switch to a particular generation defined by @var{pattern}.
2004
2005 @var{pattern} may be either a generation number or a number prefixed
2006 with ``+'' or ``-''. The latter means: move forward/backward by a
2007 specified number of generations. For example, if you want to return to
2008 the latest generation after @code{--roll-back}, use
2009 @code{--switch-generation=+1}.
2010
2011 The difference between @code{--roll-back} and
2012 @code{--switch-generation=-1} is that @code{--switch-generation} will
2013 not make a zeroth generation, so if a specified generation does not
2014 exist, the current generation will not be changed.
2015
2016 @item --search-paths[=@var{kind}]
2017 @cindex search paths
2018 Report environment variable definitions, in Bash syntax, that may be
2019 needed in order to use the set of installed packages. These environment
2020 variables are used to specify @dfn{search paths} for files used by some
2021 of the installed packages.
2022
2023 For example, GCC needs the @code{CPATH} and @code{LIBRARY_PATH}
2024 environment variables to be defined so it can look for headers and
2025 libraries in the user's profile (@pxref{Environment Variables,,, gcc,
2026 Using the GNU Compiler Collection (GCC)}). If GCC and, say, the C
2027 library are installed in the profile, then @code{--search-paths} will
2028 suggest setting these variables to @code{@var{profile}/include} and
2029 @code{@var{profile}/lib}, respectively.
2030
2031 The typical use case is to define these environment variables in the
2032 shell:
2033
2034 @example
2035 $ eval `guix package --search-paths`
2036 @end example
2037
2038 @var{kind} may be one of @code{exact}, @code{prefix}, or @code{suffix},
2039 meaning that the returned environment variable definitions will either
2040 be exact settings, or prefixes or suffixes of the current value of these
2041 variables. When omitted, @var{kind} defaults to @code{exact}.
2042
2043 This option can also be used to compute the @emph{combined} search paths
2044 of several profiles. Consider this example:
2045
2046 @example
2047 $ guix package -p foo -i guile
2048 $ guix package -p bar -i guile-json
2049 $ guix package -p foo -p bar --search-paths
2050 @end example
2051
2052 The last command above reports about the @code{GUILE_LOAD_PATH}
2053 variable, even though, taken individually, neither @file{foo} nor
2054 @file{bar} would lead to that recommendation.
2055
2056
2057 @item --profile=@var{profile}
2058 @itemx -p @var{profile}
2059 Use @var{profile} instead of the user's default profile.
2060
2061 @cindex collisions, in a profile
2062 @cindex colliding packages in profiles
2063 @cindex profile collisions
2064 @item --allow-collisions
2065 Allow colliding packages in the new profile. Use at your own risk!
2066
2067 By default, @command{guix package} reports as an error @dfn{collisions}
2068 in the profile. Collisions happen when two or more different versions
2069 or variants of a given package end up in the profile.
2070
2071 @item --verbose
2072 Produce verbose output. In particular, emit the build log of the
2073 environment on the standard error port.
2074
2075 @item --bootstrap
2076 Use the bootstrap Guile to build the profile. This option is only
2077 useful to distribution developers.
2078
2079 @end table
2080
2081 In addition to these actions, @command{guix package} supports the
2082 following options to query the current state of a profile, or the
2083 availability of packages:
2084
2085 @table @option
2086
2087 @item --search=@var{regexp}
2088 @itemx -s @var{regexp}
2089 @cindex searching for packages
2090 List the available packages whose name, synopsis, or description matches
2091 @var{regexp}, sorted by relevance. Print all the metadata of matching packages in
2092 @code{recutils} format (@pxref{Top, GNU recutils databases,, recutils,
2093 GNU recutils manual}).
2094
2095 This allows specific fields to be extracted using the @command{recsel}
2096 command, for instance:
2097
2098 @example
2099 $ guix package -s malloc | recsel -p name,version,relevance
2100 name: jemalloc
2101 version: 4.5.0
2102 relevance: 6
2103
2104 name: glibc
2105 version: 2.25
2106 relevance: 1
2107
2108 name: libgc
2109 version: 7.6.0
2110 relevance: 1
2111 @end example
2112
2113 Similarly, to show the name of all the packages available under the
2114 terms of the GNU@tie{}LGPL version 3:
2115
2116 @example
2117 $ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
2118 name: elfutils
2119
2120 name: gmp
2121 @dots{}
2122 @end example
2123
2124 It is also possible to refine search results using several @code{-s}
2125 flags. For example, the following command returns a list of board
2126 games:
2127
2128 @example
2129 $ guix package -s '\<board\>' -s game | recsel -p name
2130 name: gnubg
2131 @dots{}
2132 @end example
2133
2134 If we were to omit @code{-s game}, we would also get software packages
2135 that deal with printed circuit boards; removing the angle brackets
2136 around @code{board} would further add packages that have to do with
2137 keyboards.
2138
2139 And now for a more elaborate example. The following command searches
2140 for cryptographic libraries, filters out Haskell, Perl, Python, and Ruby
2141 libraries, and prints the name and synopsis of the matching packages:
2142
2143 @example
2144 $ guix package -s crypto -s library | \
2145 recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
2146 @end example
2147
2148 @noindent
2149 @xref{Selection Expressions,,, recutils, GNU recutils manual}, for more
2150 information on @dfn{selection expressions} for @code{recsel -e}.
2151
2152 @item --show=@var{package}
2153 Show details about @var{package}, taken from the list of available packages, in
2154 @code{recutils} format (@pxref{Top, GNU recutils databases,, recutils, GNU
2155 recutils manual}).
2156
2157 @example
2158 $ guix package --show=python | recsel -p name,version
2159 name: python
2160 version: 2.7.6
2161
2162 name: python
2163 version: 3.3.5
2164 @end example
2165
2166 You may also specify the full name of a package to only get details about a
2167 specific version of it:
2168 @example
2169 $ guix package --show=python@@3.4 | recsel -p name,version
2170 name: python
2171 version: 3.4.3
2172 @end example
2173
2174
2175
2176 @item --list-installed[=@var{regexp}]
2177 @itemx -I [@var{regexp}]
2178 List the currently installed packages in the specified profile, with the
2179 most recently installed packages shown last. When @var{regexp} is
2180 specified, list only installed packages whose name matches @var{regexp}.
2181
2182 For each installed package, print the following items, separated by
2183 tabs: the package name, its version string, the part of the package that
2184 is installed (for instance, @code{out} for the default output,
2185 @code{include} for its headers, etc.), and the path of this package in
2186 the store.
2187
2188 @item --list-available[=@var{regexp}]
2189 @itemx -A [@var{regexp}]
2190 List packages currently available in the distribution for this system
2191 (@pxref{GNU Distribution}). When @var{regexp} is specified, list only
2192 installed packages whose name matches @var{regexp}.
2193
2194 For each package, print the following items separated by tabs: its name,
2195 its version string, the parts of the package (@pxref{Packages with
2196 Multiple Outputs}), and the source location of its definition.
2197
2198 @item --list-generations[=@var{pattern}]
2199 @itemx -l [@var{pattern}]
2200 @cindex generations
2201 Return a list of generations along with their creation dates; for each
2202 generation, show the installed packages, with the most recently
2203 installed packages shown last. Note that the zeroth generation is never
2204 shown.
2205
2206 For each installed package, print the following items, separated by
2207 tabs: the name of a package, its version string, the part of the package
2208 that is installed (@pxref{Packages with Multiple Outputs}), and the
2209 location of this package in the store.
2210
2211 When @var{pattern} is used, the command returns only matching
2212 generations. Valid patterns include:
2213
2214 @itemize
2215 @item @emph{Integers and comma-separated integers}. Both patterns denote
2216 generation numbers. For instance, @code{--list-generations=1} returns
2217 the first one.
2218
2219 And @code{--list-generations=1,8,2} outputs three generations in the
2220 specified order. Neither spaces nor trailing commas are allowed.
2221
2222 @item @emph{Ranges}. @code{--list-generations=2..9} prints the
2223 specified generations and everything in between. Note that the start of
2224 a range must be smaller than its end.
2225
2226 It is also possible to omit the endpoint. For example,
2227 @code{--list-generations=2..}, returns all generations starting from the
2228 second one.
2229
2230 @item @emph{Durations}. You can also get the last @emph{N}@tie{}days, weeks,
2231 or months by passing an integer along with the first letter of the
2232 duration. For example, @code{--list-generations=20d} lists generations
2233 that are up to 20 days old.
2234 @end itemize
2235
2236 @item --delete-generations[=@var{pattern}]
2237 @itemx -d [@var{pattern}]
2238 When @var{pattern} is omitted, delete all generations except the current
2239 one.
2240
2241 This command accepts the same patterns as @option{--list-generations}.
2242 When @var{pattern} is specified, delete the matching generations. When
2243 @var{pattern} specifies a duration, generations @emph{older} than the
2244 specified duration match. For instance, @code{--delete-generations=1m}
2245 deletes generations that are more than one month old.
2246
2247 If the current generation matches, it is @emph{not} deleted. Also, the
2248 zeroth generation is never deleted.
2249
2250 Note that deleting generations prevents rolling back to them.
2251 Consequently, this command must be used with care.
2252
2253 @end table
2254
2255 Finally, since @command{guix package} may actually start build
2256 processes, it supports all the common build options (@pxref{Common Build
2257 Options}). It also supports package transformation options, such as
2258 @option{--with-source} (@pxref{Package Transformation Options}).
2259 However, note that package transformations are lost when upgrading; to
2260 preserve transformations across upgrades, you should define your own
2261 package variant in a Guile module and add it to @code{GUIX_PACKAGE_PATH}
2262 (@pxref{Defining Packages}).
2263
2264 @node Substitutes
2265 @section Substitutes
2266
2267 @cindex substitutes
2268 @cindex pre-built binaries
2269 Guix supports transparent source/binary deployment, which means that it
2270 can either build things locally, or download pre-built items from a
2271 server, or both. We call these pre-built items @dfn{substitutes}---they
2272 are substitutes for local build results. In many cases, downloading a
2273 substitute is much faster than building things locally.
2274
2275 Substitutes can be anything resulting from a derivation build
2276 (@pxref{Derivations}). Of course, in the common case, they are
2277 pre-built package binaries, but source tarballs, for instance, which
2278 also result from derivation builds, can be available as substitutes.
2279
2280 @menu
2281 * Official Substitute Server:: One particular source of substitutes.
2282 * Substitute Server Authorization:: How to enable or disable substitutes.
2283 * Substitute Authentication:: How Guix verifies substitutes.
2284 * Proxy Settings:: How to get substitutes via proxy.
2285 * Substitution Failure:: What happens when substitution fails.
2286 * On Trusting Binaries:: How can you trust that binary blob?
2287 @end menu
2288
2289 @node Official Substitute Server
2290 @subsection Official Substitute Server
2291
2292 @cindex hydra
2293 @cindex build farm
2294 The @code{mirror.hydra.gnu.org} server is a front-end to an official build farm
2295 that builds packages from Guix continuously for some
2296 architectures, and makes them available as substitutes. This is the
2297 default source of substitutes; it can be overridden by passing the
2298 @option{--substitute-urls} option either to @command{guix-daemon}
2299 (@pxref{daemon-substitute-urls,, @code{guix-daemon --substitute-urls}})
2300 or to client tools such as @command{guix package}
2301 (@pxref{client-substitute-urls,, client @option{--substitute-urls}
2302 option}).
2303
2304 Substitute URLs can be either HTTP or HTTPS.
2305 HTTPS is recommended because communications are encrypted; conversely,
2306 using HTTP makes all communications visible to an eavesdropper, who
2307 could use the information gathered to determine, for instance, whether
2308 your system has unpatched security vulnerabilities.
2309
2310 Substitutes from the official build farm are enabled by default when
2311 using the Guix System Distribution (@pxref{GNU Distribution}). However,
2312 they are disabled by default when using Guix on a foreign distribution,
2313 unless you have explicitly enabled them via one of the recommended
2314 installation steps (@pxref{Installation}). The following paragraphs
2315 describe how to enable or disable substitutes for the official build
2316 farm; the same procedure can also be used to enable substitutes for any
2317 other substitute server.
2318
2319 @node Substitute Server Authorization
2320 @subsection Substitute Server Authorization
2321
2322 @cindex security
2323 @cindex substitutes, authorization thereof
2324 @cindex access control list (ACL), for substitutes
2325 @cindex ACL (access control list), for substitutes
2326 To allow Guix to download substitutes from @code{hydra.gnu.org} or a
2327 mirror thereof, you
2328 must add its public key to the access control list (ACL) of archive
2329 imports, using the @command{guix archive} command (@pxref{Invoking guix
2330 archive}). Doing so implies that you trust @code{hydra.gnu.org} to not
2331 be compromised and to serve genuine substitutes.
2332
2333 The public key for @code{hydra.gnu.org} is installed along with Guix, in
2334 @code{@var{prefix}/share/guix/hydra.gnu.org.pub}, where @var{prefix} is
2335 the installation prefix of Guix. If you installed Guix from source,
2336 make sure you checked the GPG signature of
2337 @file{guix-@value{VERSION}.tar.gz}, which contains this public key file.
2338 Then, you can run something like this:
2339
2340 @example
2341 # guix archive --authorize < @var{prefix}/share/guix/hydra.gnu.org.pub
2342 @end example
2343
2344 @quotation Note
2345 Similarly, the @file{berlin.guixsd.org.pub} file contains the public key
2346 for the project's new build farm, reachable at
2347 @indicateurl{https://berlin.guixsd.org}.
2348
2349 As of this writing @code{berlin.guixsd.org} is being upgraded so it can
2350 better scale up, but you might want to give it a try. It is backed by
2351 20 x86_64/i686 build nodes and may be able to provide substitutes more
2352 quickly than @code{mirror.hydra.gnu.org}.
2353 @end quotation
2354
2355 Once this is in place, the output of a command like @code{guix build}
2356 should change from something like:
2357
2358 @example
2359 $ guix build emacs --dry-run
2360 The following derivations would be built:
2361 /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
2362 /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
2363 /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
2364 /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
2365 @dots{}
2366 @end example
2367
2368 @noindent
2369 to something like:
2370
2371 @example
2372 $ guix build emacs --dry-run
2373 112.3 MB would be downloaded:
2374 /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
2375 /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
2376 /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
2377 /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
2378 @dots{}
2379 @end example
2380
2381 @noindent
2382 This indicates that substitutes from @code{hydra.gnu.org} are usable and
2383 will be downloaded, when possible, for future builds.
2384
2385 @cindex substitutes, how to disable
2386 The substitute mechanism can be disabled globally by running
2387 @code{guix-daemon} with @code{--no-substitutes} (@pxref{Invoking
2388 guix-daemon}). It can also be disabled temporarily by passing the
2389 @code{--no-substitutes} option to @command{guix package}, @command{guix
2390 build}, and other command-line tools.
2391
2392 @node Substitute Authentication
2393 @subsection Substitute Authentication
2394
2395 @cindex digital signatures
2396 Guix detects and raises an error when attempting to use a substitute
2397 that has been tampered with. Likewise, it ignores substitutes that are
2398 not signed, or that are not signed by one of the keys listed in the ACL.
2399
2400 There is one exception though: if an unauthorized server provides
2401 substitutes that are @emph{bit-for-bit identical} to those provided by
2402 an authorized server, then the unauthorized server becomes eligible for
2403 downloads. For example, assume we have chosen two substitute servers
2404 with this option:
2405
2406 @example
2407 --substitute-urls="https://a.example.org https://b.example.org"
2408 @end example
2409
2410 @noindent
2411 @cindex reproducible builds
2412 If the ACL contains only the key for @code{b.example.org}, and if
2413 @code{a.example.org} happens to serve the @emph{exact same} substitutes,
2414 then Guix will download substitutes from @code{a.example.org} because it
2415 comes first in the list and can be considered a mirror of
2416 @code{b.example.org}. In practice, independent build machines usually
2417 produce the same binaries, thanks to bit-reproducible builds (see
2418 below).
2419
2420 When using HTTPS, the server's X.509 certificate is @emph{not} validated
2421 (in other words, the server is not authenticated), contrary to what
2422 HTTPS clients such as Web browsers usually do. This is because Guix
2423 authenticates substitute information itself, as explained above, which
2424 is what we care about (whereas X.509 certificates are about
2425 authenticating bindings between domain names and public keys.)
2426
2427 @node Proxy Settings
2428 @subsection Proxy Settings
2429
2430 @vindex http_proxy
2431 Substitutes are downloaded over HTTP or HTTPS.
2432 The @code{http_proxy} environment
2433 variable can be set in the environment of @command{guix-daemon} and is
2434 honored for downloads of substitutes. Note that the value of
2435 @code{http_proxy} in the environment where @command{guix build},
2436 @command{guix package}, and other client commands are run has
2437 @emph{absolutely no effect}.
2438
2439 @node Substitution Failure
2440 @subsection Substitution Failure
2441
2442 Even when a substitute for a derivation is available, sometimes the
2443 substitution attempt will fail. This can happen for a variety of
2444 reasons: the substitute server might be offline, the substitute may
2445 recently have been deleted, the connection might have been interrupted,
2446 etc.
2447
2448 When substitutes are enabled and a substitute for a derivation is
2449 available, but the substitution attempt fails, Guix will attempt to
2450 build the derivation locally depending on whether or not
2451 @code{--fallback} was given (@pxref{fallback-option,, common build
2452 option @code{--fallback}}). Specifically, if @code{--fallback} was
2453 omitted, then no local build will be performed, and the derivation is
2454 considered to have failed. However, if @code{--fallback} was given,
2455 then Guix will attempt to build the derivation locally, and the success
2456 or failure of the derivation depends on the success or failure of the
2457 local build. Note that when substitutes are disabled or no substitute
2458 is available for the derivation in question, a local build will
2459 @emph{always} be performed, regardless of whether or not
2460 @code{--fallback} was given.
2461
2462 To get an idea of how many substitutes are available right now, you can
2463 try running the @command{guix weather} command (@pxref{Invoking guix
2464 weather}). This command provides statistics on the substitutes provided
2465 by a server.
2466
2467 @node On Trusting Binaries
2468 @subsection On Trusting Binaries
2469
2470 @cindex trust, of pre-built binaries
2471 Today, each individual's control over their own computing is at the
2472 mercy of institutions, corporations, and groups with enough power and
2473 determination to subvert the computing infrastructure and exploit its
2474 weaknesses. While using @code{hydra.gnu.org} substitutes can be
2475 convenient, we encourage users to also build on their own, or even run
2476 their own build farm, such that @code{hydra.gnu.org} is less of an
2477 interesting target. One way to help is by publishing the software you
2478 build using @command{guix publish} so that others have one more choice
2479 of server to download substitutes from (@pxref{Invoking guix publish}).
2480
2481 Guix has the foundations to maximize build reproducibility
2482 (@pxref{Features}). In most cases, independent builds of a given
2483 package or derivation should yield bit-identical results. Thus, through
2484 a diverse set of independent package builds, we can strengthen the
2485 integrity of our systems. The @command{guix challenge} command aims to
2486 help users assess substitute servers, and to assist developers in
2487 finding out about non-deterministic package builds (@pxref{Invoking guix
2488 challenge}). Similarly, the @option{--check} option of @command{guix
2489 build} allows users to check whether previously-installed substitutes
2490 are genuine by rebuilding them locally (@pxref{build-check,
2491 @command{guix build --check}}).
2492
2493 In the future, we want Guix to have support to publish and retrieve
2494 binaries to/from other users, in a peer-to-peer fashion. If you would
2495 like to discuss this project, join us on @email{guix-devel@@gnu.org}.
2496
2497 @node Packages with Multiple Outputs
2498 @section Packages with Multiple Outputs
2499
2500 @cindex multiple-output packages
2501 @cindex package outputs
2502 @cindex outputs
2503
2504 Often, packages defined in Guix have a single @dfn{output}---i.e., the
2505 source package leads to exactly one directory in the store. When running
2506 @command{guix package -i glibc}, one installs the default output of the
2507 GNU libc package; the default output is called @code{out}, but its name
2508 can be omitted as shown in this command. In this particular case, the
2509 default output of @code{glibc} contains all the C header files, shared
2510 libraries, static libraries, Info documentation, and other supporting
2511 files.
2512
2513 Sometimes it is more appropriate to separate the various types of files
2514 produced from a single source package into separate outputs. For
2515 instance, the GLib C library (used by GTK+ and related packages)
2516 installs more than 20 MiB of reference documentation as HTML pages.
2517 To save space for users who do not need it, the documentation goes to a
2518 separate output, called @code{doc}. To install the main GLib output,
2519 which contains everything but the documentation, one would run:
2520
2521 @example
2522 guix package -i glib
2523 @end example
2524
2525 @cindex documentation
2526 The command to install its documentation is:
2527
2528 @example
2529 guix package -i glib:doc
2530 @end example
2531
2532 Some packages install programs with different ``dependency footprints''.
2533 For instance, the WordNet package installs both command-line tools and
2534 graphical user interfaces (GUIs). The former depend solely on the C
2535 library, whereas the latter depend on Tcl/Tk and the underlying X
2536 libraries. In this case, we leave the command-line tools in the default
2537 output, whereas the GUIs are in a separate output. This allows users
2538 who do not need the GUIs to save space. The @command{guix size} command
2539 can help find out about such situations (@pxref{Invoking guix size}).
2540 @command{guix graph} can also be helpful (@pxref{Invoking guix graph}).
2541
2542 There are several such multiple-output packages in the GNU distribution.
2543 Other conventional output names include @code{lib} for libraries and
2544 possibly header files, @code{bin} for stand-alone programs, and
2545 @code{debug} for debugging information (@pxref{Installing Debugging
2546 Files}). The outputs of a packages are listed in the third column of
2547 the output of @command{guix package --list-available} (@pxref{Invoking
2548 guix package}).
2549
2550
2551 @node Invoking guix gc
2552 @section Invoking @command{guix gc}
2553
2554 @cindex garbage collector
2555 @cindex disk space
2556 Packages that are installed, but not used, may be @dfn{garbage-collected}.
2557 The @command{guix gc} command allows users to explicitly run the garbage
2558 collector to reclaim space from the @file{/gnu/store} directory. It is
2559 the @emph{only} way to remove files from @file{/gnu/store}---removing
2560 files or directories manually may break it beyond repair!
2561
2562 @cindex GC roots
2563 @cindex garbage collector roots
2564 The garbage collector has a set of known @dfn{roots}: any file under
2565 @file{/gnu/store} reachable from a root is considered @dfn{live} and
2566 cannot be deleted; any other file is considered @dfn{dead} and may be
2567 deleted. The set of garbage collector roots (``GC roots'' for short)
2568 includes default user profiles; by default, the symlinks under
2569 @file{/var/guix/gcroots} represent these GC roots. New GC roots can be
2570 added with @command{guix build --root}, for example (@pxref{Invoking
2571 guix build}).
2572
2573 Prior to running @code{guix gc --collect-garbage} to make space, it is
2574 often useful to remove old generations from user profiles; that way, old
2575 package builds referenced by those generations can be reclaimed. This
2576 is achieved by running @code{guix package --delete-generations}
2577 (@pxref{Invoking guix package}).
2578
2579 Our recommendation is to run a garbage collection periodically, or when
2580 you are short on disk space. For instance, to guarantee that at least
2581 5@tie{}GB are available on your disk, simply run:
2582
2583 @example
2584 guix gc -F 5G
2585 @end example
2586
2587 It is perfectly safe to run as a non-interactive periodic job
2588 (@pxref{Scheduled Job Execution}, for how to set up such a job on
2589 GuixSD). Running @command{guix gc} with no arguments will collect as
2590 much garbage as it can, but that is often inconvenient: you may find
2591 yourself having to rebuild or re-download software that is ``dead'' from
2592 the GC viewpoint but that is necessary to build other pieces of
2593 software---e.g., the compiler tool chain.
2594
2595 The @command{guix gc} command has three modes of operation: it can be
2596 used to garbage-collect any dead files (the default), to delete specific
2597 files (the @code{--delete} option), to print garbage-collector
2598 information, or for more advanced queries. The garbage collection
2599 options are as follows:
2600
2601 @table @code
2602 @item --collect-garbage[=@var{min}]
2603 @itemx -C [@var{min}]
2604 Collect garbage---i.e., unreachable @file{/gnu/store} files and
2605 sub-directories. This is the default operation when no option is
2606 specified.
2607
2608 When @var{min} is given, stop once @var{min} bytes have been collected.
2609 @var{min} may be a number of bytes, or it may include a unit as a
2610 suffix, such as @code{MiB} for mebibytes and @code{GB} for gigabytes
2611 (@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
2612
2613 When @var{min} is omitted, collect all the garbage.
2614
2615 @item --free-space=@var{free}
2616 @itemx -F @var{free}
2617 Collect garbage until @var{free} space is available under
2618 @file{/gnu/store}, if possible; @var{free} denotes storage space, such
2619 as @code{500MiB}, as described above.
2620
2621 When @var{free} or more is already available in @file{/gnu/store}, do
2622 nothing and exit immediately.
2623
2624 @item --delete
2625 @itemx -d
2626 Attempt to delete all the store files and directories specified as
2627 arguments. This fails if some of the files are not in the store, or if
2628 they are still live.
2629
2630 @item --list-failures
2631 List store items corresponding to cached build failures.
2632
2633 This prints nothing unless the daemon was started with
2634 @option{--cache-failures} (@pxref{Invoking guix-daemon,
2635 @option{--cache-failures}}).
2636
2637 @item --clear-failures
2638 Remove the specified store items from the failed-build cache.
2639
2640 Again, this option only makes sense when the daemon is started with
2641 @option{--cache-failures}. Otherwise, it does nothing.
2642
2643 @item --list-dead
2644 Show the list of dead files and directories still present in the
2645 store---i.e., files and directories no longer reachable from any root.
2646
2647 @item --list-live
2648 Show the list of live store files and directories.
2649
2650 @end table
2651
2652 In addition, the references among existing store files can be queried:
2653
2654 @table @code
2655
2656 @item --references
2657 @itemx --referrers
2658 @cindex package dependencies
2659 List the references (respectively, the referrers) of store files given
2660 as arguments.
2661
2662 @item --requisites
2663 @itemx -R
2664 @cindex closure
2665 List the requisites of the store files passed as arguments. Requisites
2666 include the store files themselves, their references, and the references
2667 of these, recursively. In other words, the returned list is the
2668 @dfn{transitive closure} of the store files.
2669
2670 @xref{Invoking guix size}, for a tool to profile the size of the closure
2671 of an element. @xref{Invoking guix graph}, for a tool to visualize
2672 the graph of references.
2673
2674 @item --derivers
2675 @cindex derivation
2676 Return the derivation(s) leading to the given store items
2677 (@pxref{Derivations}).
2678
2679 For example, this command:
2680
2681 @example
2682 guix gc --derivers `guix package -I ^emacs$ | cut -f4`
2683 @end example
2684
2685 @noindent
2686 returns the @file{.drv} file(s) leading to the @code{emacs} package
2687 installed in your profile.
2688
2689 Note that there may be zero matching @file{.drv} files, for instance
2690 because these files have been garbage-collected. There can also be more
2691 than one matching @file{.drv} due to fixed-output derivations.
2692 @end table
2693
2694 Lastly, the following options allow you to check the integrity of the
2695 store and to control disk usage.
2696
2697 @table @option
2698
2699 @item --verify[=@var{options}]
2700 @cindex integrity, of the store
2701 @cindex integrity checking
2702 Verify the integrity of the store.
2703
2704 By default, make sure that all the store items marked as valid in the
2705 database of the daemon actually exist in @file{/gnu/store}.
2706
2707 When provided, @var{options} must be a comma-separated list containing one
2708 or more of @code{contents} and @code{repair}.
2709
2710 When passing @option{--verify=contents}, the daemon computes the
2711 content hash of each store item and compares it against its hash in the
2712 database. Hash mismatches are reported as data corruptions. Because it
2713 traverses @emph{all the files in the store}, this command can take a
2714 long time, especially on systems with a slow disk drive.
2715
2716 @cindex repairing the store
2717 @cindex corruption, recovering from
2718 Using @option{--verify=repair} or @option{--verify=contents,repair}
2719 causes the daemon to try to repair corrupt store items by fetching
2720 substitutes for them (@pxref{Substitutes}). Because repairing is not
2721 atomic, and thus potentially dangerous, it is available only to the
2722 system administrator. A lightweight alternative, when you know exactly
2723 which items in the store are corrupt, is @command{guix build --repair}
2724 (@pxref{Invoking guix build}).
2725
2726 @item --optimize
2727 @cindex deduplication
2728 Optimize the store by hard-linking identical files---this is
2729 @dfn{deduplication}.
2730
2731 The daemon performs deduplication after each successful build or archive
2732 import, unless it was started with @code{--disable-deduplication}
2733 (@pxref{Invoking guix-daemon, @code{--disable-deduplication}}). Thus,
2734 this option is primarily useful when the daemon was running with
2735 @code{--disable-deduplication}.
2736
2737 @end table
2738
2739 @node Invoking guix pull
2740 @section Invoking @command{guix pull}
2741
2742 @cindex upgrading Guix
2743 @cindex updating Guix
2744 @cindex @command{guix pull}
2745 @cindex pull
2746 Packages are installed or upgraded to the latest version available in
2747 the distribution currently available on your local machine. To update
2748 that distribution, along with the Guix tools, you must run @command{guix
2749 pull}: the command downloads the latest Guix source code and package
2750 descriptions, and deploys it. Source code is downloaded from a
2751 @uref{https://git-scm.com, Git} repository, by default the official
2752 GNU@tie{}Guix repository, though this can be customized.
2753
2754 On completion, @command{guix package} will use packages and package
2755 versions from this just-retrieved copy of Guix. Not only that, but all
2756 the Guix commands and Scheme modules will also be taken from that latest
2757 version. New @command{guix} sub-commands added by the update also
2758 become available.
2759
2760 Any user can update their Guix copy using @command{guix pull}, and the
2761 effect is limited to the user who run @command{guix pull}. For
2762 instance, when user @code{root} runs @command{guix pull}, this has no
2763 effect on the version of Guix that user @code{alice} sees, and vice
2764 versa.
2765
2766 The result of running @command{guix pull} is a @dfn{profile} available
2767 under @file{~/.config/guix/current} containing the latest Guix. Thus,
2768 make sure to add it to the beginning of your search path so that you use
2769 the latest version, and similarly for the Info manual
2770 (@pxref{Documentation}):
2771
2772 @example
2773 export PATH="$HOME/.config/guix/current/bin:$PATH"
2774 export INFOPATH="$HOME/.config/guix/current/share/info:$INFOPATH"
2775 @end example
2776
2777 The @code{--list-generations} or @code{-l} option lists past generations
2778 produced by @command{guix pull}, along with details about their provenance:
2779
2780 @example
2781 $ guix pull -l
2782 Generation 1 Jun 10 2018 00:18:18
2783 guix 65956ad
2784 repository URL: https://git.savannah.gnu.org/git/guix.git
2785 branch: origin/master
2786 commit: 65956ad3526ba09e1f7a40722c96c6ef7c0936fe
2787
2788 Generation 2 Jun 11 2018 11:02:49
2789 guix e0cc7f6
2790 repository URL: https://git.savannah.gnu.org/git/guix.git
2791 branch: origin/master
2792 commit: e0cc7f669bec22c37481dd03a7941c7d11a64f1d
2793 2 new packages: keepalived, libnfnetlink
2794 6 packages upgraded: emacs-nix-mode@@2.0.4,
2795 guile2.0-guix@@0.14.0-12.77a1aac, guix@@0.14.0-12.77a1aac,
2796 heimdal@@7.5.0, milkytracker@@1.02.00, nix@@2.0.4
2797
2798 Generation 3 Jun 13 2018 23:31:07 (current)
2799 guix 844cc1c
2800 repository URL: https://git.savannah.gnu.org/git/guix.git
2801 branch: origin/master
2802 commit: 844cc1c8f394f03b404c5bb3aee086922373490c
2803 28 new packages: emacs-helm-ls-git, emacs-helm-mu, @dots{}
2804 69 packages upgraded: borg@@1.1.6, cheese@@3.28.0, @dots{}
2805 @end example
2806
2807 This @code{~/.config/guix/current} profile works like any other profile
2808 created by @command{guix package} (@pxref{Invoking guix package}). That
2809 is, you can list generations, roll back to the previous
2810 generation---i.e., the previous Guix---and so on:
2811
2812 @example
2813 $ guix package -p ~/.config/guix/current --roll-back
2814 switched from generation 3 to 2
2815 $ guix package -p ~/.config/guix/current --delete-generations=1
2816 deleting /home/charlie/.config/guix/current-1-link
2817 @end example
2818
2819 The @command{guix pull} command is usually invoked with no arguments,
2820 but it supports the following options:
2821
2822 @table @code
2823 @item --verbose
2824 Produce verbose output, writing build logs to the standard error output.
2825
2826 @item --url=@var{url}
2827 @itemx --commit=@var{commit}
2828 @itemx --branch=@var{branch}
2829 Download code from the specified @var{url}, at the given @var{commit} (a valid
2830 Git commit ID represented as a hexadecimal string), or @var{branch}.
2831
2832 @cindex @file{channels.scm}, configuration file
2833 @cindex configuration file for channels
2834 These options are provided for convenience, but you can also specify your
2835 configuration in the @file{~/.config/guix/channels.scm} file or using the
2836 @option{--channels} option (see below).
2837
2838 @item --channels=@var{file}
2839 @itemx -C @var{file}
2840 Read the list of channels from @var{file} instead of
2841 @file{~/.config/guix/channels.scm}. @var{file} must contain Scheme code that
2842 evaluates to a list of channel objects. @xref{Channels}, for more
2843 information.
2844
2845 @item --list-generations[=@var{pattern}]
2846 @itemx -l [@var{pattern}]
2847 List all the generations of @file{~/.config/guix/current} or, if @var{pattern}
2848 is provided, the subset of generations that match @var{pattern}.
2849 The syntax of @var{pattern} is the same as with @code{guix package
2850 --list-generations} (@pxref{Invoking guix package}).
2851
2852 @item --bootstrap
2853 Use the bootstrap Guile to build the latest Guix. This option is only
2854 useful to Guix developers.
2855 @end table
2856
2857 The @dfn{channel} mechanism allows you to instruct @command{guix pull} which
2858 repository and branch to pull from, as well as @emph{additional} repositories
2859 containing package modules that should be deployed. @xref{Channels}, for more
2860 information.
2861
2862 In addition, @command{guix pull} supports all the common build options
2863 (@pxref{Common Build Options}).
2864
2865 @node Channels
2866 @section Channels
2867
2868 @cindex channels
2869 @cindex @file{channels.scm}, configuration file
2870 @cindex configuration file for channels
2871 @cindex @command{guix pull}, configuration file
2872 @cindex configuration of @command{guix pull}
2873 Guix and its package collection are updated by running @command{guix pull}
2874 (@pxref{Invoking guix pull}). By default @command{guix pull} downloads and
2875 deploys Guix itself from the official GNU@tie{}Guix repository. This can be
2876 customized by defining @dfn{channels} in the
2877 @file{~/.config/guix/channels.scm} file. A channel specifies a URL and branch
2878 of a Git repository to be deployed, and @command{guix pull} can be instructed
2879 to pull from one or more channels. In other words, channels can be used to
2880 @emph{customize} and to @emph{extend} Guix, as we will see below.
2881
2882 @subsection Using a Custom Guix Channel
2883
2884 The channel called @code{guix} specifies where Guix itself---its command-line
2885 tools as well as its package collection---should be downloaded. For instance,
2886 suppose you want to update from your own copy of the Guix repository at
2887 @code{example.org}, and specifically the @code{super-hacks} branch, you can
2888 write in @code{~/.config/guix/channels.scm} this specification:
2889
2890 @lisp
2891 ;; Tell 'guix pull' to use my own repo.
2892 (list (channel
2893 (name 'guix)
2894 (url "https://example.org/my-guix.git")
2895 (branch "super-hacks")))
2896 @end lisp
2897
2898 @noindent
2899 From there on, @command{guix pull} will fetch code from the @code{super-hacks}
2900 branch of the repository at @code{example.org}.
2901
2902 @subsection Specifying Additional Channels
2903
2904 @cindex extending the package collection (channels)
2905 @cindex personal packages (channels)
2906 @cindex channels, for personal packages
2907 You can also specify @emph{additional channels} to pull from. Let's say you
2908 have a bunch of custom package variants or personal packages that you think
2909 would make little sense to contribute to the Guix project, but would like to
2910 have these packages transparently available to you at the command line. You
2911 would first write modules containing those package definitions (@pxref{Package
2912 Modules}), maintain them in a Git repository, and then you and anyone else can
2913 use it as an additional channel to get packages from. Neat, no?
2914
2915 @c What follows stems from discussions at
2916 @c <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22629#134> as well as
2917 @c earlier discussions on guix-devel@gnu.org.
2918 @quotation Warning
2919 Before you, dear user, shout---``woow this is @emph{soooo coool}!''---and
2920 publish your personal channel to the world, we would like to share a few words
2921 of caution:
2922
2923 @itemize
2924 @item
2925 Before publishing a channel, please consider contributing your package
2926 definitions to Guix proper (@pxref{Contributing}). Guix as a project is open
2927 to free software of all sorts, and packages in Guix proper are readily
2928 available to all Guix users and benefit from the project's quality assurance
2929 process.
2930
2931 @item
2932 When you maintain package definitions outside Guix, we, Guix developers,
2933 consider that @emph{the compatibility burden is on you}. Remember that
2934 package modules and package definitions are just Scheme code that uses various
2935 programming interfaces (APIs). We want to remain free to change these APIs to
2936 keep improving Guix, possibly in ways that break your channel. We never
2937 change APIs gratuitously, but we will @emph{not} commit to freezing APIs
2938 either.
2939
2940 @item
2941 Corollary: if you're using an external channel and that channel breaks, please
2942 @emph{report the issue to the channel authors}, not to the Guix project.
2943 @end itemize
2944
2945 You've been warned! Having said this, we believe external channels are a
2946 practical way to exert your freedom to augment Guix' package collection and to
2947 share your improvements, which are basic tenets of
2948 @uref{https://www.gnu.org/philosophy/free-sw.html, free software}. Please
2949 email us at @email{guix-devel@@gnu.org} if you'd like to discuss this.
2950 @end quotation
2951
2952 Once you have a Git repository containing your own package modules, you can
2953 write @code{~/.config/guix/channels.scm} to instruct @command{guix pull} to
2954 pull from your personal channel @emph{in addition} to the default Guix
2955 channel(s):
2956
2957 @vindex %default-channels
2958 @lisp
2959 ;; Add my personal packages to those Guix provides.
2960 (cons (channel
2961 (name 'my-personal-packages)
2962 (url "https://example.org/personal-packages.git"))
2963 %default-channels)
2964 @end lisp
2965
2966 @noindent
2967 Note that the snippet above is (as always!) Scheme code; we use @code{cons} to
2968 add a channel the list of channels that the variable @code{%default-channels}
2969 is bound to (@pxref{Pairs, @code{cons} and lists,, guile, GNU Guile Reference
2970 Manual}). With this file in place, @command{guix pull} builds not only Guix
2971 but also the package modules from your own repository. The result in
2972 @file{~/.config/guix/current} is the union of Guix with your own package
2973 modules:
2974
2975 @example
2976 $ guix pull --list-generations
2977 @dots{}
2978 Generation 19 Aug 27 2018 16:20:48
2979 guix d894ab8
2980 repository URL: https://git.savannah.gnu.org/git/guix.git
2981 branch: master
2982 commit: d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300
2983 my-personal-packages dd3df5e
2984 repository URL: https://example.org/personal-packages.git
2985 branch: master
2986 commit: dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb
2987 11 new packages: my-gimp, my-emacs-with-cool-features, @dots{}
2988 4 packages upgraded: emacs-racket-mode@@0.0.2-2.1b78827, @dots{}
2989 @end example
2990
2991 @noindent
2992 The output of @command{guix pull} above shows that Generation@tie{}19 includes
2993 both Guix and packages from the @code{my-personal-packages} channel. Among
2994 the new and upgraded packages that are listed, some like @code{my-gimp} and
2995 @code{my-emacs-with-cool-features} might come from
2996 @code{my-personal-packages}, while others come from the Guix default channel.
2997
2998 @subsection Replicating Guix
2999
3000 @cindex pinning, channels
3001 @cindex replicating Guix
3002 @cindex reproducibility, of Guix
3003 The @command{guix pull --list-generations} output above shows precisely which
3004 commits were used to build this instance of Guix. We can thus replicate it,
3005 say, on another machine, by providing a channel specification in
3006 @file{~/.config/guix/channels.scm} that is ``pinned'' to these commits:
3007
3008 @lisp
3009 ;; Deploy specific commits of my channels of interest.
3010 (list (channel
3011 (name 'guix)
3012 (url "https://git.savannah.gnu.org/git/guix.git")
3013 (commit "d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300"))
3014 (channel
3015 (name 'my-personal-packages)
3016 (url "https://example.org/personal-packages.git")
3017 (branch "dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb")))
3018 @end lisp
3019
3020 At this point the two machines run the @emph{exact same Guix}, with access to
3021 the @emph{exact same packages}. The output of @command{guix build gimp} on
3022 one machine will be exactly the same, bit for bit, as the output of the same
3023 command on the other machine. It also means both machines have access to all
3024 the source code of Guix and, transitively, to all the source code of every
3025 package it defines.
3026
3027 This gives you super powers, allowing you to track the provenance of binary
3028 artifacts with very fine grain, and to reproduce software environments at
3029 will---some sort of ``meta reproducibility'' capabilities, if you will.
3030
3031 @node Invoking guix pack
3032 @section Invoking @command{guix pack}
3033
3034 Occasionally you want to pass software to people who are not (yet!)
3035 lucky enough to be using Guix. You'd tell them to run @command{guix
3036 package -i @var{something}}, but that's not possible in this case. This
3037 is where @command{guix pack} comes in.
3038
3039 @quotation Note
3040 If you are looking for ways to exchange binaries among machines that
3041 already run Guix, @pxref{Invoking guix copy}, @ref{Invoking guix
3042 publish}, and @ref{Invoking guix archive}.
3043 @end quotation
3044
3045 @cindex pack
3046 @cindex bundle
3047 @cindex application bundle
3048 @cindex software bundle
3049 The @command{guix pack} command creates a shrink-wrapped @dfn{pack} or
3050 @dfn{software bundle}: it creates a tarball or some other archive
3051 containing the binaries of the software you're interested in, and all
3052 its dependencies. The resulting archive can be used on any machine that
3053 does not have Guix, and people can run the exact same binaries as those
3054 you have with Guix. The pack itself is created in a bit-reproducible
3055 fashion, so anyone can verify that it really contains the build results
3056 that you pretend to be shipping.
3057
3058 For example, to create a bundle containing Guile, Emacs, Geiser, and all
3059 their dependencies, you can run:
3060
3061 @example
3062 $ guix pack guile emacs geiser
3063 @dots{}
3064 /gnu/store/@dots{}-pack.tar.gz
3065 @end example
3066
3067 The result here is a tarball containing a @file{/gnu/store} directory
3068 with all the relevant packages. The resulting tarball contains a
3069 @dfn{profile} with the three packages of interest; the profile is the
3070 same as would be created by @command{guix package -i}. It is this
3071 mechanism that is used to create Guix's own standalone binary tarball
3072 (@pxref{Binary Installation}).
3073
3074 Users of this pack would have to run
3075 @file{/gnu/store/@dots{}-profile/bin/guile} to run Guile, which you may
3076 find inconvenient. To work around it, you can create, say, a
3077 @file{/opt/gnu/bin} symlink to the profile:
3078
3079 @example
3080 guix pack -S /opt/gnu/bin=bin guile emacs geiser
3081 @end example
3082
3083 @noindent
3084 That way, users can happily type @file{/opt/gnu/bin/guile} and enjoy.
3085
3086 @cindex relocatable binaries, with @command{guix pack}
3087 What if the recipient of your pack does not have root privileges on
3088 their machine, and thus cannot unpack it in the root file system? In
3089 that case, you will want to use the @code{--relocatable} option (see
3090 below). This option produces @dfn{relocatable binaries}, meaning they
3091 they can be placed anywhere in the file system hierarchy: in the example
3092 above, users can unpack your tarball in their home directory and
3093 directly run @file{./opt/gnu/bin/guile}.
3094
3095 @cindex Docker, build an image with guix pack
3096 Alternatively, you can produce a pack in the Docker image format using
3097 the following command:
3098
3099 @example
3100 guix pack -f docker guile emacs geiser
3101 @end example
3102
3103 @noindent
3104 The result is a tarball that can be passed to the @command{docker load}
3105 command. See the
3106 @uref{https://docs.docker.com/engine/reference/commandline/load/, Docker
3107 documentation} for more information.
3108
3109 @cindex Singularity, build an image with guix pack
3110 @cindex SquashFS, build an image with guix pack
3111 Yet another option is to produce a SquashFS image with the following
3112 command:
3113
3114 @example
3115 guix pack -f squashfs guile emacs geiser
3116 @end example
3117
3118 @noindent
3119 The result is a SquashFS file system image that can either be mounted or
3120 directly be used as a file system container image with the
3121 @uref{http://singularity.lbl.gov, Singularity container execution
3122 environment}, using commands like @command{singularity shell} or
3123 @command{singularity exec}.
3124
3125 Several command-line options allow you to customize your pack:
3126
3127 @table @code
3128 @item --format=@var{format}
3129 @itemx -f @var{format}
3130 Produce a pack in the given @var{format}.
3131
3132 The available formats are:
3133
3134 @table @code
3135 @item tarball
3136 This is the default format. It produces a tarball containing all the
3137 specified binaries and symlinks.
3138
3139 @item docker
3140 This produces a tarball that follows the
3141 @uref{https://github.com/docker/docker/blob/master/image/spec/v1.2.md,
3142 Docker Image Specification}.
3143
3144 @item squashfs
3145 This produces a SquashFS image containing all the specified binaries and
3146 symlinks, as well as empty mount points for virtual file systems like
3147 procfs.
3148 @end table
3149
3150 @item --relocatable
3151 @itemx -R
3152 Produce @dfn{relocatable binaries}---i.e., binaries that can be placed
3153 anywhere in the file system hierarchy and run from there. For example,
3154 if you create a pack containing Bash with:
3155
3156 @example
3157 guix pack -R -S /mybin=bin bash
3158 @end example
3159
3160 @noindent
3161 ... you can copy that pack to a machine that lacks Guix, and from your
3162 home directory as a normal user, run:
3163
3164 @example
3165 tar xf pack.tar.gz
3166 ./mybin/sh
3167 @end example
3168
3169 @noindent
3170 In that shell, if you type @code{ls /gnu/store}, you'll notice that
3171 @file{/gnu/store} shows up and contains all the dependencies of
3172 @code{bash}, even though the machine actually lacks @file{/gnu/store}
3173 altogether! That is probably the simplest way to deploy Guix-built
3174 software on a non-Guix machine.
3175
3176 There's a gotcha though: this technique relies on the @dfn{user
3177 namespace} feature of the kernel Linux, which allows unprivileged users
3178 to mount or change root. Old versions of Linux did not support it, and
3179 some GNU/Linux distributions turn it off; on these systems, programs
3180 from the pack @emph{will fail to run}, unless they are unpacked in the
3181 root file system.
3182
3183 @item --expression=@var{expr}
3184 @itemx -e @var{expr}
3185 Consider the package @var{expr} evaluates to.
3186
3187 This has the same purpose as the same-named option in @command{guix
3188 build} (@pxref{Additional Build Options, @code{--expression} in
3189 @command{guix build}}).
3190
3191 @item --manifest=@var{file}
3192 @itemx -m @var{file}
3193 Use the packages contained in the manifest object returned by the Scheme
3194 code in @var{file}.
3195
3196 This has a similar purpose as the same-named option in @command{guix
3197 package} (@pxref{profile-manifest, @option{--manifest}}) and uses the
3198 same manifest files. It allows you to define a collection of packages
3199 once and use it both for creating profiles and for creating archives
3200 for use on machines that do not have Guix installed. Note that you can
3201 specify @emph{either} a manifest file @emph{or} a list of packages,
3202 but not both.
3203
3204 @item --system=@var{system}
3205 @itemx -s @var{system}
3206 Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
3207 the system type of the build host.
3208
3209 @item --target=@var{triplet}
3210 @cindex cross-compilation
3211 Cross-build for @var{triplet}, which must be a valid GNU triplet, such
3212 as @code{"mips64el-linux-gnu"} (@pxref{Specifying target triplets, GNU
3213 configuration triplets,, autoconf, Autoconf}).
3214
3215 @item --compression=@var{tool}
3216 @itemx -C @var{tool}
3217 Compress the resulting tarball using @var{tool}---one of @code{gzip},
3218 @code{bzip2}, @code{xz}, @code{lzip}, or @code{none} for no compression.
3219
3220 @item --symlink=@var{spec}
3221 @itemx -S @var{spec}
3222 Add the symlinks specified by @var{spec} to the pack. This option can
3223 appear several times.
3224
3225 @var{spec} has the form @code{@var{source}=@var{target}}, where
3226 @var{source} is the symlink that will be created and @var{target} is the
3227 symlink target.
3228
3229 For instance, @code{-S /opt/gnu/bin=bin} creates a @file{/opt/gnu/bin}
3230 symlink pointing to the @file{bin} sub-directory of the profile.
3231
3232 @item --localstatedir
3233 Include the ``local state directory'', @file{/var/guix}, in the
3234 resulting pack.
3235
3236 @file{/var/guix} contains the store database (@pxref{The Store}) as well
3237 as garbage-collector roots (@pxref{Invoking guix gc}). Providing it in
3238 the pack means that the store is ``complete'' and manageable by Guix;
3239 not providing it pack means that the store is ``dead'': items cannot be
3240 added to it or removed from it after extraction of the pack.
3241
3242 One use case for this is the Guix self-contained binary tarball
3243 (@pxref{Binary Installation}).
3244
3245 @item --bootstrap
3246 Use the bootstrap binaries to build the pack. This option is only
3247 useful to Guix developers.
3248 @end table
3249
3250 In addition, @command{guix pack} supports all the common build options
3251 (@pxref{Common Build Options}) and all the package transformation
3252 options (@pxref{Package Transformation Options}).
3253
3254
3255 @node Invoking guix archive
3256 @section Invoking @command{guix archive}
3257
3258 @cindex @command{guix archive}
3259 @cindex archive
3260 The @command{guix archive} command allows users to @dfn{export} files
3261 from the store into a single archive, and to later @dfn{import} them on
3262 a machine that runs Guix.
3263 In particular, it allows store files to be transferred from one machine
3264 to the store on another machine.
3265
3266 @quotation Note
3267 If you're looking for a way to produce archives in a format suitable for
3268 tools other than Guix, @pxref{Invoking guix pack}.
3269 @end quotation
3270
3271 @cindex exporting store items
3272 To export store files as an archive to standard output, run:
3273
3274 @example
3275 guix archive --export @var{options} @var{specifications}...
3276 @end example
3277
3278 @var{specifications} may be either store file names or package
3279 specifications, as for @command{guix package} (@pxref{Invoking guix
3280 package}). For instance, the following command creates an archive
3281 containing the @code{gui} output of the @code{git} package and the main
3282 output of @code{emacs}:
3283
3284 @example
3285 guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
3286 @end example
3287
3288 If the specified packages are not built yet, @command{guix archive}
3289 automatically builds them. The build process may be controlled with the
3290 common build options (@pxref{Common Build Options}).
3291
3292 To transfer the @code{emacs} package to a machine connected over SSH,
3293 one would run:
3294
3295 @example
3296 guix archive --export -r emacs | ssh the-machine guix archive --import
3297 @end example
3298
3299 @noindent
3300 Similarly, a complete user profile may be transferred from one machine
3301 to another like this:
3302
3303 @example
3304 guix archive --export -r $(readlink -f ~/.guix-profile) | \
3305 ssh the-machine guix-archive --import
3306 @end example
3307
3308 @noindent
3309 However, note that, in both examples, all of @code{emacs} and the
3310 profile as well as all of their dependencies are transferred (due to
3311 @code{-r}), regardless of what is already available in the store on the
3312 target machine. The @code{--missing} option can help figure out which
3313 items are missing from the target store. The @command{guix copy}
3314 command simplifies and optimizes this whole process, so this is probably
3315 what you should use in this case (@pxref{Invoking guix copy}).
3316
3317 @cindex nar, archive format
3318 @cindex normalized archive (nar)
3319 Archives are stored in the ``normalized archive'' or ``nar'' format, which is
3320 comparable in spirit to `tar', but with differences
3321 that make it more appropriate for our purposes. First, rather than
3322 recording all Unix metadata for each file, the nar format only mentions
3323 the file type (regular, directory, or symbolic link); Unix permissions
3324 and owner/group are dismissed. Second, the order in which directory
3325 entries are stored always follows the order of file names according to
3326 the C locale collation order. This makes archive production fully
3327 deterministic.
3328
3329 When exporting, the daemon digitally signs the contents of the archive,
3330 and that digital signature is appended. When importing, the daemon
3331 verifies the signature and rejects the import in case of an invalid
3332 signature or if the signing key is not authorized.
3333 @c FIXME: Add xref to daemon doc about signatures.
3334
3335 The main options are:
3336
3337 @table @code
3338 @item --export
3339 Export the specified store files or packages (see below.) Write the
3340 resulting archive to the standard output.
3341
3342 Dependencies are @emph{not} included in the output, unless
3343 @code{--recursive} is passed.
3344
3345 @item -r
3346 @itemx --recursive
3347 When combined with @code{--export}, this instructs @command{guix
3348 archive} to include dependencies of the given items in the archive.
3349 Thus, the resulting archive is self-contained: it contains the closure
3350 of the exported store items.
3351
3352 @item --import
3353 Read an archive from the standard input, and import the files listed
3354 therein into the store. Abort if the archive has an invalid digital
3355 signature, or if it is signed by a public key not among the authorized
3356 keys (see @code{--authorize} below.)
3357
3358 @item --missing
3359 Read a list of store file names from the standard input, one per line,
3360 and write on the standard output the subset of these files missing from
3361 the store.
3362
3363 @item --generate-key[=@var{parameters}]
3364 @cindex signing, archives
3365 Generate a new key pair for the daemon. This is a prerequisite before
3366 archives can be exported with @code{--export}. Note that this operation
3367 usually takes time, because it needs to gather enough entropy to
3368 generate the key pair.
3369
3370 The generated key pair is typically stored under @file{/etc/guix}, in
3371 @file{signing-key.pub} (public key) and @file{signing-key.sec} (private
3372 key, which must be kept secret.) When @var{parameters} is omitted,
3373 an ECDSA key using the Ed25519 curve is generated, or, for Libgcrypt
3374 versions before 1.6.0, it is a 4096-bit RSA key.
3375 Alternatively, @var{parameters} can specify
3376 @code{genkey} parameters suitable for Libgcrypt (@pxref{General
3377 public-key related Functions, @code{gcry_pk_genkey},, gcrypt, The
3378 Libgcrypt Reference Manual}).
3379
3380 @item --authorize
3381 @cindex authorizing, archives
3382 Authorize imports signed by the public key passed on standard input.
3383 The public key must be in ``s-expression advanced format''---i.e., the
3384 same format as the @file{signing-key.pub} file.
3385
3386 The list of authorized keys is kept in the human-editable file
3387 @file{/etc/guix/acl}. The file contains
3388 @url{http://people.csail.mit.edu/rivest/Sexp.txt, ``advanced-format
3389 s-expressions''} and is structured as an access-control list in the
3390 @url{http://theworld.com/~cme/spki.txt, Simple Public-Key Infrastructure
3391 (SPKI)}.
3392
3393 @item --extract=@var{directory}
3394 @itemx -x @var{directory}
3395 Read a single-item archive as served by substitute servers
3396 (@pxref{Substitutes}) and extract it to @var{directory}. This is a
3397 low-level operation needed in only very narrow use cases; see below.
3398
3399 For example, the following command extracts the substitute for Emacs
3400 served by @code{hydra.gnu.org} to @file{/tmp/emacs}:
3401
3402 @example
3403 $ wget -O - \
3404 https://hydra.gnu.org/nar/@dots{}-emacs-24.5 \
3405 | bunzip2 | guix archive -x /tmp/emacs
3406 @end example
3407
3408 Single-item archives are different from multiple-item archives produced
3409 by @command{guix archive --export}; they contain a single store item,
3410 and they do @emph{not} embed a signature. Thus this operation does
3411 @emph{no} signature verification and its output should be considered
3412 unsafe.
3413
3414 The primary purpose of this operation is to facilitate inspection of
3415 archive contents coming from possibly untrusted substitute servers.
3416
3417 @end table
3418
3419 @c *********************************************************************
3420 @node Programming Interface
3421 @chapter Programming Interface
3422
3423 GNU Guix provides several Scheme programming interfaces (APIs) to
3424 define, build, and query packages. The first interface allows users to
3425 write high-level package definitions. These definitions refer to
3426 familiar packaging concepts, such as the name and version of a package,
3427 its build system, and its dependencies. These definitions can then be
3428 turned into concrete build actions.
3429
3430 Build actions are performed by the Guix daemon, on behalf of users. In a
3431 standard setup, the daemon has write access to the store---the
3432 @file{/gnu/store} directory---whereas users do not. The recommended
3433 setup also has the daemon perform builds in chroots, under a specific
3434 build users, to minimize interference with the rest of the system.
3435
3436 @cindex derivation
3437 Lower-level APIs are available to interact with the daemon and the
3438 store. To instruct the daemon to perform a build action, users actually
3439 provide it with a @dfn{derivation}. A derivation is a low-level
3440 representation of the build actions to be taken, and the environment in
3441 which they should occur---derivations are to package definitions what
3442 assembly is to C programs. The term ``derivation'' comes from the fact
3443 that build results @emph{derive} from them.
3444
3445 This chapter describes all these APIs in turn, starting from high-level
3446 package definitions.
3447
3448 @menu
3449 * Defining Packages:: Defining new packages.
3450 * Build Systems:: Specifying how packages are built.
3451 * The Store:: Manipulating the package store.
3452 * Derivations:: Low-level interface to package derivations.
3453 * The Store Monad:: Purely functional interface to the store.
3454 * G-Expressions:: Manipulating build expressions.
3455 * Invoking guix repl:: Fiddling with Guix interactively.
3456 @end menu
3457
3458 @node Defining Packages
3459 @section Defining Packages
3460
3461 The high-level interface to package definitions is implemented in the
3462 @code{(guix packages)} and @code{(guix build-system)} modules. As an
3463 example, the package definition, or @dfn{recipe}, for the GNU Hello
3464 package looks like this:
3465
3466 @example
3467 (define-module (gnu packages hello)
3468 #:use-module (guix packages)
3469 #:use-module (guix download)
3470 #:use-module (guix build-system gnu)
3471 #:use-module (guix licenses)
3472 #:use-module (gnu packages gawk))
3473
3474 (define-public hello
3475 (package
3476 (name "hello")
3477 (version "2.10")
3478 (source (origin
3479 (method url-fetch)
3480 (uri (string-append "mirror://gnu/hello/hello-" version
3481 ".tar.gz"))
3482 (sha256
3483 (base32
3484 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
3485 (build-system gnu-build-system)
3486 (arguments '(#:configure-flags '("--enable-silent-rules")))
3487 (inputs `(("gawk" ,gawk)))
3488 (synopsis "Hello, GNU world: An example GNU package")
3489 (description "Guess what GNU Hello prints!")
3490 (home-page "http://www.gnu.org/software/hello/")
3491 (license gpl3+)))
3492 @end example
3493
3494 @noindent
3495 Without being a Scheme expert, the reader may have guessed the meaning
3496 of the various fields here. This expression binds the variable
3497 @code{hello} to a @code{<package>} object, which is essentially a record
3498 (@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}).
3499 This package object can be inspected using procedures found in the
3500 @code{(guix packages)} module; for instance, @code{(package-name hello)}
3501 returns---surprise!---@code{"hello"}.
3502
3503 With luck, you may be able to import part or all of the definition of
3504 the package you are interested in from another repository, using the
3505 @code{guix import} command (@pxref{Invoking guix import}).
3506
3507 In the example above, @var{hello} is defined in a module of its own,
3508 @code{(gnu packages hello)}. Technically, this is not strictly
3509 necessary, but it is convenient to do so: all the packages defined in
3510 modules under @code{(gnu packages @dots{})} are automatically known to
3511 the command-line tools (@pxref{Package Modules}).
3512
3513 There are a few points worth noting in the above package definition:
3514
3515 @itemize
3516 @item
3517 The @code{source} field of the package is an @code{<origin>} object
3518 (@pxref{origin Reference}, for the complete reference).
3519 Here, the @code{url-fetch} method from @code{(guix download)} is used,
3520 meaning that the source is a file to be downloaded over FTP or HTTP.
3521
3522 The @code{mirror://gnu} prefix instructs @code{url-fetch} to use one of
3523 the GNU mirrors defined in @code{(guix download)}.
3524
3525 The @code{sha256} field specifies the expected SHA256 hash of the file
3526 being downloaded. It is mandatory, and allows Guix to check the
3527 integrity of the file. The @code{(base32 @dots{})} form introduces the
3528 base32 representation of the hash. You can obtain this information with
3529 @code{guix download} (@pxref{Invoking guix download}) and @code{guix
3530 hash} (@pxref{Invoking guix hash}).
3531
3532 @cindex patches
3533 When needed, the @code{origin} form can also have a @code{patches} field
3534 listing patches to be applied, and a @code{snippet} field giving a
3535 Scheme expression to modify the source code.
3536
3537 @item
3538 @cindex GNU Build System
3539 The @code{build-system} field specifies the procedure to build the
3540 package (@pxref{Build Systems}). Here, @var{gnu-build-system}
3541 represents the familiar GNU Build System, where packages may be
3542 configured, built, and installed with the usual @code{./configure &&
3543 make && make check && make install} command sequence.
3544
3545 @item
3546 The @code{arguments} field specifies options for the build system
3547 (@pxref{Build Systems}). Here it is interpreted by
3548 @var{gnu-build-system} as a request run @file{configure} with the
3549 @code{--enable-silent-rules} flag.
3550
3551 @cindex quote
3552 @cindex quoting
3553 @findex '
3554 @findex quote
3555 What about these quote (@code{'}) characters? They are Scheme syntax to
3556 introduce a literal list; @code{'} is synonymous with @code{quote}.
3557 @xref{Expression Syntax, quoting,, guile, GNU Guile Reference Manual},
3558 for details. Here the value of the @code{arguments} field is a list of
3559 arguments passed to the build system down the road, as with @code{apply}
3560 (@pxref{Fly Evaluation, @code{apply},, guile, GNU Guile Reference
3561 Manual}).
3562
3563 The hash-colon (@code{#:}) sequence defines a Scheme @dfn{keyword}
3564 (@pxref{Keywords,,, guile, GNU Guile Reference Manual}), and
3565 @code{#:configure-flags} is a keyword used to pass a keyword argument
3566 to the build system (@pxref{Coding With Keywords,,, guile, GNU Guile
3567 Reference Manual}).
3568
3569 @item
3570 The @code{inputs} field specifies inputs to the build process---i.e.,
3571 build-time or run-time dependencies of the package. Here, we define an
3572 input called @code{"gawk"} whose value is that of the @var{gawk}
3573 variable; @var{gawk} is itself bound to a @code{<package>} object.
3574
3575 @cindex backquote (quasiquote)
3576 @findex `
3577 @findex quasiquote
3578 @cindex comma (unquote)
3579 @findex ,
3580 @findex unquote
3581 @findex ,@@
3582 @findex unquote-splicing
3583 Again, @code{`} (a backquote, synonymous with @code{quasiquote}) allows
3584 us to introduce a literal list in the @code{inputs} field, while
3585 @code{,} (a comma, synonymous with @code{unquote}) allows us to insert a
3586 value in that list (@pxref{Expression Syntax, unquote,, guile, GNU Guile
3587 Reference Manual}).
3588
3589 Note that GCC, Coreutils, Bash, and other essential tools do not need to
3590 be specified as inputs here. Instead, @var{gnu-build-system} takes care
3591 of ensuring that they are present (@pxref{Build Systems}).
3592
3593 However, any other dependencies need to be specified in the
3594 @code{inputs} field. Any dependency not specified here will simply be
3595 unavailable to the build process, possibly leading to a build failure.
3596 @end itemize
3597
3598 @xref{package Reference}, for a full description of possible fields.
3599
3600 Once a package definition is in place, the
3601 package may actually be built using the @code{guix build} command-line
3602 tool (@pxref{Invoking guix build}), troubleshooting any build failures
3603 you encounter (@pxref{Debugging Build Failures}). You can easily jump back to the
3604 package definition using the @command{guix edit} command
3605 (@pxref{Invoking guix edit}).
3606 @xref{Packaging Guidelines}, for
3607 more information on how to test package definitions, and
3608 @ref{Invoking guix lint}, for information on how to check a definition
3609 for style conformance.
3610 @vindex GUIX_PACKAGE_PATH
3611 Lastly, @pxref{Channels}, for information
3612 on how to extend the distribution by adding your own package definitions
3613 in a ``channel''.
3614
3615 Finally, updating the package definition to a new upstream version
3616 can be partly automated by the @command{guix refresh} command
3617 (@pxref{Invoking guix refresh}).
3618
3619 Behind the scenes, a derivation corresponding to the @code{<package>}
3620 object is first computed by the @code{package-derivation} procedure.
3621 That derivation is stored in a @code{.drv} file under @file{/gnu/store}.
3622 The build actions it prescribes may then be realized by using the
3623 @code{build-derivations} procedure (@pxref{The Store}).
3624
3625 @deffn {Scheme Procedure} package-derivation @var{store} @var{package} [@var{system}]
3626 Return the @code{<derivation>} object of @var{package} for @var{system}
3627 (@pxref{Derivations}).
3628
3629 @var{package} must be a valid @code{<package>} object, and @var{system}
3630 must be a string denoting the target system type---e.g.,
3631 @code{"x86_64-linux"} for an x86_64 Linux-based GNU system. @var{store}
3632 must be a connection to the daemon, which operates on the store
3633 (@pxref{The Store}).
3634 @end deffn
3635
3636 @noindent
3637 @cindex cross-compilation
3638 Similarly, it is possible to compute a derivation that cross-builds a
3639 package for some other system:
3640
3641 @deffn {Scheme Procedure} package-cross-derivation @var{store} @
3642 @var{package} @var{target} [@var{system}]
3643 Return the @code{<derivation>} object of @var{package} cross-built from
3644 @var{system} to @var{target}.
3645
3646 @var{target} must be a valid GNU triplet denoting the target hardware
3647 and operating system, such as @code{"mips64el-linux-gnu"}
3648 (@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
3649 Configure and Build System}).
3650 @end deffn
3651
3652 @cindex package transformations
3653 @cindex input rewriting
3654 @cindex dependency tree rewriting
3655 Packages can be manipulated in arbitrary ways. An example of a useful
3656 transformation is @dfn{input rewriting}, whereby the dependency tree of
3657 a package is rewritten by replacing specific inputs by others:
3658
3659 @deffn {Scheme Procedure} package-input-rewriting @var{replacements} @
3660 [@var{rewrite-name}]
3661 Return a procedure that, when passed a package, replaces its direct and
3662 indirect dependencies (but not its implicit inputs) according to
3663 @var{replacements}. @var{replacements} is a list of package pairs; the
3664 first element of each pair is the package to replace, and the second one
3665 is the replacement.
3666
3667 Optionally, @var{rewrite-name} is a one-argument procedure that takes
3668 the name of a package and returns its new name after rewrite.
3669 @end deffn
3670
3671 @noindent
3672 Consider this example:
3673
3674 @example
3675 (define libressl-instead-of-openssl
3676 ;; This is a procedure to replace OPENSSL by LIBRESSL,
3677 ;; recursively.
3678 (package-input-rewriting `((,openssl . ,libressl))))
3679
3680 (define git-with-libressl
3681 (libressl-instead-of-openssl git))
3682 @end example
3683
3684 @noindent
3685 Here we first define a rewriting procedure that replaces @var{openssl}
3686 with @var{libressl}. Then we use it to define a @dfn{variant} of the
3687 @var{git} package that uses @var{libressl} instead of @var{openssl}.
3688 This is exactly what the @option{--with-input} command-line option does
3689 (@pxref{Package Transformation Options, @option{--with-input}}).
3690
3691 A more generic procedure to rewrite a package dependency graph is
3692 @code{package-mapping}: it supports arbitrary changes to nodes in the
3693 graph.
3694
3695 @deffn {Scheme Procedure} package-mapping @var{proc} [@var{cut?}]
3696 Return a procedure that, given a package, applies @var{proc} to all the packages
3697 depended on and returns the resulting package. The procedure stops recursion
3698 when @var{cut?} returns true for a given package.
3699 @end deffn
3700
3701 @menu
3702 * package Reference:: The package data type.
3703 * origin Reference:: The origin data type.
3704 @end menu
3705
3706
3707 @node package Reference
3708 @subsection @code{package} Reference
3709
3710 This section summarizes all the options available in @code{package}
3711 declarations (@pxref{Defining Packages}).
3712
3713 @deftp {Data Type} package
3714 This is the data type representing a package recipe.
3715
3716 @table @asis
3717 @item @code{name}
3718 The name of the package, as a string.
3719
3720 @item @code{version}
3721 The version of the package, as a string.
3722
3723 @item @code{source}
3724 An object telling how the source code for the package should be
3725 acquired. Most of the time, this is an @code{origin} object, which
3726 denotes a file fetched from the Internet (@pxref{origin Reference}). It
3727 can also be any other ``file-like'' object such as a @code{local-file},
3728 which denotes a file from the local file system (@pxref{G-Expressions,
3729 @code{local-file}}).
3730
3731 @item @code{build-system}
3732 The build system that should be used to build the package (@pxref{Build
3733 Systems}).
3734
3735 @item @code{arguments} (default: @code{'()})
3736 The arguments that should be passed to the build system. This is a
3737 list, typically containing sequential keyword-value pairs.
3738
3739 @item @code{inputs} (default: @code{'()})
3740 @itemx @code{native-inputs} (default: @code{'()})
3741 @itemx @code{propagated-inputs} (default: @code{'()})
3742 @cindex inputs, of packages
3743 These fields list dependencies of the package. Each one is a list of
3744 tuples, where each tuple has a label for the input (a string) as its
3745 first element, a package, origin, or derivation as its second element,
3746 and optionally the name of the output thereof that should be used, which
3747 defaults to @code{"out"} (@pxref{Packages with Multiple Outputs}, for
3748 more on package outputs). For example, the list below specifies three
3749 inputs:
3750
3751 @example
3752 `(("libffi" ,libffi)
3753 ("libunistring" ,libunistring)
3754 ("glib:bin" ,glib "bin")) ;the "bin" output of Glib
3755 @end example
3756
3757 @cindex cross compilation, package dependencies
3758 The distinction between @code{native-inputs} and @code{inputs} is
3759 necessary when considering cross-compilation. When cross-compiling,
3760 dependencies listed in @code{inputs} are built for the @emph{target}
3761 architecture; conversely, dependencies listed in @code{native-inputs}
3762 are built for the architecture of the @emph{build} machine.
3763
3764 @code{native-inputs} is typically used to list tools needed at
3765 build time, but not at run time, such as Autoconf, Automake, pkg-config,
3766 Gettext, or Bison. @command{guix lint} can report likely mistakes in
3767 this area (@pxref{Invoking guix lint}).
3768
3769 @anchor{package-propagated-inputs}
3770 Lastly, @code{propagated-inputs} is similar to @code{inputs}, but the
3771 specified packages will be automatically installed alongside the package
3772 they belong to (@pxref{package-cmd-propagated-inputs, @command{guix
3773 package}}, for information on how @command{guix package} deals with
3774 propagated inputs.)
3775
3776 For example this is necessary when a C/C++ library needs headers of
3777 another library to compile, or when a pkg-config file refers to another
3778 one @i{via} its @code{Requires} field.
3779
3780 Another example where @code{propagated-inputs} is useful is for languages
3781 that lack a facility to record the run-time search path akin to the
3782 @code{RUNPATH} of ELF files; this includes Guile, Python, Perl, and
3783 more. To ensure that libraries written in those languages can find
3784 library code they depend on at run time, run-time dependencies must be
3785 listed in @code{propagated-inputs} rather than @code{inputs}.
3786
3787 @item @code{self-native-input?} (default: @code{#f})
3788 This is a Boolean field telling whether the package should use itself as
3789 a native input when cross-compiling.
3790
3791 @item @code{outputs} (default: @code{'("out")})
3792 The list of output names of the package. @xref{Packages with Multiple
3793 Outputs}, for typical uses of additional outputs.
3794
3795 @item @code{native-search-paths} (default: @code{'()})
3796 @itemx @code{search-paths} (default: @code{'()})
3797 A list of @code{search-path-specification} objects describing
3798 search-path environment variables honored by the package.
3799
3800 @item @code{replacement} (default: @code{#f})
3801 This must be either @code{#f} or a package object that will be used as a
3802 @dfn{replacement} for this package. @xref{Security Updates, grafts},
3803 for details.
3804
3805 @item @code{synopsis}
3806 A one-line description of the package.
3807
3808 @item @code{description}
3809 A more elaborate description of the package.
3810
3811 @item @code{license}
3812 @cindex license, of packages
3813 The license of the package; a value from @code{(guix licenses)},
3814 or a list of such values.
3815
3816 @item @code{home-page}
3817 The URL to the home-page of the package, as a string.
3818
3819 @item @code{supported-systems} (default: @var{%supported-systems})
3820 The list of systems supported by the package, as strings of the form
3821 @code{architecture-kernel}, for example @code{"x86_64-linux"}.
3822
3823 @item @code{maintainers} (default: @code{'()})
3824 The list of maintainers of the package, as @code{maintainer} objects.
3825
3826 @item @code{location} (default: source location of the @code{package} form)
3827 The source location of the package. It is useful to override this when
3828 inheriting from another package, in which case this field is not
3829 automatically corrected.
3830 @end table
3831 @end deftp
3832
3833
3834 @node origin Reference
3835 @subsection @code{origin} Reference
3836
3837 This section summarizes all the options available in @code{origin}
3838 declarations (@pxref{Defining Packages}).
3839
3840 @deftp {Data Type} origin
3841 This is the data type representing a source code origin.
3842
3843 @table @asis
3844 @item @code{uri}
3845 An object containing the URI of the source. The object type depends on
3846 the @code{method} (see below). For example, when using the
3847 @var{url-fetch} method of @code{(guix download)}, the valid @code{uri}
3848 values are: a URL represented as a string, or a list thereof.
3849
3850 @item @code{method}
3851 A procedure that handles the URI.
3852
3853 Examples include:
3854
3855 @table @asis
3856 @item @var{url-fetch} from @code{(guix download)}
3857 download a file from the HTTP, HTTPS, or FTP URL specified in the
3858 @code{uri} field;
3859
3860 @vindex git-fetch
3861 @item @var{git-fetch} from @code{(guix git-download)}
3862 clone the Git version control repository, and check out the revision
3863 specified in the @code{uri} field as a @code{git-reference} object; a
3864 @code{git-reference} looks like this:
3865
3866 @example
3867 (git-reference
3868 (url "git://git.debian.org/git/pkg-shadow/shadow")
3869 (commit "v4.1.5.1"))
3870 @end example
3871 @end table
3872
3873 @item @code{sha256}
3874 A bytevector containing the SHA-256 hash of the source. Typically the
3875 @code{base32} form is used here to generate the bytevector from a
3876 base-32 string.
3877
3878 You can obtain this information using @code{guix download}
3879 (@pxref{Invoking guix download}) or @code{guix hash} (@pxref{Invoking
3880 guix hash}).
3881
3882 @item @code{file-name} (default: @code{#f})
3883 The file name under which the source code should be saved. When this is
3884 @code{#f}, a sensible default value will be used in most cases. In case
3885 the source is fetched from a URL, the file name from the URL will be
3886 used. For version control checkouts, it is recommended to provide the
3887 file name explicitly because the default is not very descriptive.
3888
3889 @item @code{patches} (default: @code{'()})
3890 A list of file names, origins, or file-like objects (@pxref{G-Expressions,
3891 file-like objects}) pointing to patches to be applied to the source.
3892
3893 This list of patches must be unconditional. In particular, it cannot
3894 depend on the value of @code{%current-system} or
3895 @code{%current-target-system}.
3896
3897 @item @code{snippet} (default: @code{#f})
3898 A G-expression (@pxref{G-Expressions}) or S-expression that will be run
3899 in the source directory. This is a convenient way to modify the source,
3900 sometimes more convenient than a patch.
3901
3902 @item @code{patch-flags} (default: @code{'("-p1")})
3903 A list of command-line flags that should be passed to the @code{patch}
3904 command.
3905
3906 @item @code{patch-inputs} (default: @code{#f})
3907 Input packages or derivations to the patching process. When this is
3908 @code{#f}, the usual set of inputs necessary for patching are provided,
3909 such as GNU@tie{}Patch.
3910
3911 @item @code{modules} (default: @code{'()})
3912 A list of Guile modules that should be loaded during the patching
3913 process and while running the code in the @code{snippet} field.
3914
3915 @item @code{patch-guile} (default: @code{#f})
3916 The Guile package that should be used in the patching process. When
3917 this is @code{#f}, a sensible default is used.
3918 @end table
3919 @end deftp
3920
3921
3922 @node Build Systems
3923 @section Build Systems
3924
3925 @cindex build system
3926 Each package definition specifies a @dfn{build system} and arguments for
3927 that build system (@pxref{Defining Packages}). This @code{build-system}
3928 field represents the build procedure of the package, as well as implicit
3929 dependencies of that build procedure.
3930
3931 Build systems are @code{<build-system>} objects. The interface to
3932 create and manipulate them is provided by the @code{(guix build-system)}
3933 module, and actual build systems are exported by specific modules.
3934
3935 @cindex bag (low-level package representation)
3936 Under the hood, build systems first compile package objects to
3937 @dfn{bags}. A @dfn{bag} is like a package, but with less
3938 ornamentation---in other words, a bag is a lower-level representation of
3939 a package, which includes all the inputs of that package, including some
3940 that were implicitly added by the build system. This intermediate
3941 representation is then compiled to a derivation (@pxref{Derivations}).
3942
3943 Build systems accept an optional list of @dfn{arguments}. In package
3944 definitions, these are passed @i{via} the @code{arguments} field
3945 (@pxref{Defining Packages}). They are typically keyword arguments
3946 (@pxref{Optional Arguments, keyword arguments in Guile,, guile, GNU
3947 Guile Reference Manual}). The value of these arguments is usually
3948 evaluated in the @dfn{build stratum}---i.e., by a Guile process launched
3949 by the daemon (@pxref{Derivations}).
3950
3951 The main build system is @var{gnu-build-system}, which implements the
3952 standard build procedure for GNU and many other packages. It
3953 is provided by the @code{(guix build-system gnu)} module.
3954
3955 @defvr {Scheme Variable} gnu-build-system
3956 @var{gnu-build-system} represents the GNU Build System, and variants
3957 thereof (@pxref{Configuration, configuration and makefile conventions,,
3958 standards, GNU Coding Standards}).
3959
3960 @cindex build phases
3961 In a nutshell, packages using it are configured, built, and installed with
3962 the usual @code{./configure && make && make check && make install}
3963 command sequence. In practice, a few additional steps are often needed.
3964 All these steps are split up in separate @dfn{phases},
3965 notably@footnote{Please see the @code{(guix build gnu-build-system)}
3966 modules for more details about the build phases.}:
3967
3968 @table @code
3969 @item unpack
3970 Unpack the source tarball, and change the current directory to the
3971 extracted source tree. If the source is actually a directory, copy it
3972 to the build tree, and enter that directory.
3973
3974 @item patch-source-shebangs
3975 Patch shebangs encountered in source files so they refer to the right
3976 store file names. For instance, this changes @code{#!/bin/sh} to
3977 @code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
3978
3979 @item configure
3980 Run the @file{configure} script with a number of default options, such
3981 as @code{--prefix=/gnu/store/@dots{}}, as well as the options specified
3982 by the @code{#:configure-flags} argument.
3983
3984 @item build
3985 Run @code{make} with the list of flags specified with
3986 @code{#:make-flags}. If the @code{#:parallel-build?} argument is true
3987 (the default), build with @code{make -j}.
3988
3989 @item check
3990 Run @code{make check}, or some other target specified with
3991 @code{#:test-target}, unless @code{#:tests? #f} is passed. If the
3992 @code{#:parallel-tests?} argument is true (the default), run @code{make
3993 check -j}.
3994
3995 @item install
3996 Run @code{make install} with the flags listed in @code{#:make-flags}.
3997
3998 @item patch-shebangs
3999 Patch shebangs on the installed executable files.
4000
4001 @item strip
4002 Strip debugging symbols from ELF files (unless @code{#:strip-binaries?}
4003 is false), copying them to the @code{debug} output when available
4004 (@pxref{Installing Debugging Files}).
4005 @end table
4006
4007 @vindex %standard-phases
4008 The build-side module @code{(guix build gnu-build-system)} defines
4009 @var{%standard-phases} as the default list of build phases.
4010 @var{%standard-phases} is a list of symbol/procedure pairs, where the
4011 procedure implements the actual phase.
4012
4013 The list of phases used for a particular package can be changed with the
4014 @code{#:phases} parameter. For instance, passing:
4015
4016 @example
4017 #:phases (modify-phases %standard-phases (delete 'configure))
4018 @end example
4019
4020 means that all the phases described above will be used, except the
4021 @code{configure} phase.
4022
4023 In addition, this build system ensures that the ``standard'' environment
4024 for GNU packages is available. This includes tools such as GCC, libc,
4025 Coreutils, Bash, Make, Diffutils, grep, and sed (see the @code{(guix
4026 build-system gnu)} module for a complete list). We call these the
4027 @dfn{implicit inputs} of a package, because package definitions do not
4028 have to mention them.
4029 @end defvr
4030
4031 Other @code{<build-system>} objects are defined to support other
4032 conventions and tools used by free software packages. They inherit most
4033 of @var{gnu-build-system}, and differ mainly in the set of inputs
4034 implicitly added to the build process, and in the list of phases
4035 executed. Some of these build systems are listed below.
4036
4037 @defvr {Scheme Variable} ant-build-system
4038 This variable is exported by @code{(guix build-system ant)}. It
4039 implements the build procedure for Java packages that can be built with
4040 @url{http://ant.apache.org/, Ant build tool}.
4041
4042 It adds both @code{ant} and the @dfn{Java Development Kit} (JDK) as
4043 provided by the @code{icedtea} package to the set of inputs. Different
4044 packages can be specified with the @code{#:ant} and @code{#:jdk}
4045 parameters, respectively.
4046
4047 When the original package does not provide a suitable Ant build file,
4048 the parameter @code{#:jar-name} can be used to generate a minimal Ant
4049 build file @file{build.xml} with tasks to build the specified jar
4050 archive. In this case the parameter @code{#:source-dir} can be used to
4051 specify the source sub-directory, defaulting to ``src''.
4052
4053 The @code{#:main-class} parameter can be used with the minimal ant
4054 buildfile to specify the main class of the resulting jar. This makes the
4055 jar file executable. The @code{#:test-include} parameter can be used to
4056 specify the list of junit tests to run. It defaults to
4057 @code{(list "**/*Test.java")}. The @code{#:test-exclude} can be used to
4058 disable some tests. It defaults to @code{(list "**/Abstract*.java")},
4059 because abstract classes cannot be run as tests.
4060
4061 The parameter @code{#:build-target} can be used to specify the Ant task
4062 that should be run during the @code{build} phase. By default the
4063 ``jar'' task will be run.
4064
4065 @end defvr
4066
4067 @defvr {Scheme Variable} android-ndk-build-system
4068 @cindex Android distribution
4069 @cindex Android NDK build system
4070 This variable is exported by @code{(guix build-system android-ndk)}. It
4071 implements a build procedure for Android NDK (native development kit)
4072 packages using a Guix-specific build process.
4073
4074 The build system assumes that packages install their public interface
4075 (header) files to the subdirectory "include" of the "out" output and
4076 their libraries to the subdirectory "lib" of the "out" output.
4077
4078 It's also assumed that the union of all the dependencies of a package
4079 has no conflicting files.
4080
4081 For the time being, cross-compilation is not supported - so right now
4082 the libraries and header files are assumed to be host tools.
4083
4084 @end defvr
4085
4086 @defvr {Scheme Variable} asdf-build-system/source
4087 @defvrx {Scheme Variable} asdf-build-system/sbcl
4088 @defvrx {Scheme Variable} asdf-build-system/ecl
4089
4090 These variables, exported by @code{(guix build-system asdf)}, implement
4091 build procedures for Common Lisp packages using
4092 @url{https://common-lisp.net/project/asdf/, ``ASDF''}. ASDF is a system
4093 definition facility for Common Lisp programs and libraries.
4094
4095 The @code{asdf-build-system/source} system installs the packages in
4096 source form, and can be loaded using any common lisp implementation, via
4097 ASDF. The others, such as @code{asdf-build-system/sbcl}, install binary
4098 systems in the format which a particular implementation understands.
4099 These build systems can also be used to produce executable programs, or
4100 lisp images which contain a set of packages pre-loaded.
4101
4102 The build system uses naming conventions. For binary packages, the
4103 package name should be prefixed with the lisp implementation, such as
4104 @code{sbcl-} for @code{asdf-build-system/sbcl}.
4105
4106 Additionally, the corresponding source package should be labeled using
4107 the same convention as python packages (see @ref{Python Modules}), using
4108 the @code{cl-} prefix.
4109
4110 For binary packages, each system should be defined as a Guix package.
4111 If one package @code{origin} contains several systems, package variants
4112 can be created in order to build all the systems. Source packages,
4113 which use @code{asdf-build-system/source}, may contain several systems.
4114
4115 In order to create executable programs and images, the build-side
4116 procedures @code{build-program} and @code{build-image} can be used.
4117 They should be called in a build phase after the @code{create-symlinks}
4118 phase, so that the system which was just built can be used within the
4119 resulting image. @code{build-program} requires a list of Common Lisp
4120 expressions to be passed as the @code{#:entry-program} argument.
4121
4122 If the system is not defined within its own @code{.asd} file of the same
4123 name, then the @code{#:asd-file} parameter should be used to specify
4124 which file the system is defined in. Furthermore, if the package
4125 defines a system for its tests in a separate file, it will be loaded
4126 before the tests are run if it is specified by the
4127 @code{#:test-asd-file} parameter. If it is not set, the files
4128 @code{<system>-tests.asd}, @code{<system>-test.asd}, @code{tests.asd},
4129 and @code{test.asd} will be tried if they exist.
4130
4131 If for some reason the package must be named in a different way than the
4132 naming conventions suggest, the @code{#:asd-system-name} parameter can
4133 be used to specify the name of the system.
4134
4135 @end defvr
4136
4137 @defvr {Scheme Variable} cargo-build-system
4138 @cindex Rust programming language
4139 @cindex Cargo (Rust build system)
4140 This variable is exported by @code{(guix build-system cargo)}. It
4141 supports builds of packages using Cargo, the build tool of the
4142 @uref{https://www.rust-lang.org, Rust programming language}.
4143
4144 In its @code{configure} phase, this build system replaces dependencies
4145 specified in the @file{Carto.toml} file with inputs to the Guix package.
4146 The @code{install} phase installs the binaries, and it also installs the
4147 source code and @file{Cargo.toml} file.
4148 @end defvr
4149
4150 @defvr {Scheme Variable} cmake-build-system
4151 This variable is exported by @code{(guix build-system cmake)}. It
4152 implements the build procedure for packages using the
4153 @url{http://www.cmake.org, CMake build tool}.
4154
4155 It automatically adds the @code{cmake} package to the set of inputs.
4156 Which package is used can be specified with the @code{#:cmake}
4157 parameter.
4158
4159 The @code{#:configure-flags} parameter is taken as a list of flags
4160 passed to the @command{cmake} command. The @code{#:build-type}
4161 parameter specifies in abstract terms the flags passed to the compiler;
4162 it defaults to @code{"RelWithDebInfo"} (short for ``release mode with
4163 debugging information''), which roughly means that code is compiled with
4164 @code{-O2 -g}, as is the case for Autoconf-based packages by default.
4165 @end defvr
4166
4167 @defvr {Scheme Variable} go-build-system
4168 This variable is exported by @code{(guix build-system go)}. It
4169 implements a build procedure for Go packages using the standard
4170 @url{https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies,
4171 Go build mechanisms}.
4172
4173 The user is expected to provide a value for the key @code{#:import-path}
4174 and, in some cases, @code{#:unpack-path}. The
4175 @url{https://golang.org/doc/code.html#ImportPaths, import path}
4176 corresponds to the file system path expected by the package's build
4177 scripts and any referring packages, and provides a unique way to
4178 refer to a Go package. It is typically based on a combination of the
4179 package source code's remote URI and file system hierarchy structure. In
4180 some cases, you will need to unpack the package's source code to a
4181 different directory structure than the one indicated by the import path,
4182 and @code{#:unpack-path} should be used in such cases.
4183
4184 Packages that provide Go libraries should be installed along with their
4185 source code. The key @code{#:install-source?}, which defaults to
4186 @code{#t}, controls whether or not the source code is installed. It can
4187 be set to @code{#f} for packages that only provide executable files.
4188 @end defvr
4189
4190 @defvr {Scheme Variable} glib-or-gtk-build-system
4191 This variable is exported by @code{(guix build-system glib-or-gtk)}. It
4192 is intended for use with packages making use of GLib or GTK+.
4193
4194 This build system adds the following two phases to the ones defined by
4195 @var{gnu-build-system}:
4196
4197 @table @code
4198 @item glib-or-gtk-wrap
4199 The phase @code{glib-or-gtk-wrap} ensures that programs in
4200 @file{bin/} are able to find GLib ``schemas'' and
4201 @uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, GTK+
4202 modules}. This is achieved by wrapping the programs in launch scripts
4203 that appropriately set the @code{XDG_DATA_DIRS} and @code{GTK_PATH}
4204 environment variables.
4205
4206 It is possible to exclude specific package outputs from that wrapping
4207 process by listing their names in the
4208 @code{#:glib-or-gtk-wrap-excluded-outputs} parameter. This is useful
4209 when an output is known not to contain any GLib or GTK+ binaries, and
4210 where wrapping would gratuitously add a dependency of that output on
4211 GLib and GTK+.
4212
4213 @item glib-or-gtk-compile-schemas
4214 The phase @code{glib-or-gtk-compile-schemas} makes sure that all
4215 @uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
4216 GSettings schemas} of GLib are compiled. Compilation is performed by the
4217 @command{glib-compile-schemas} program. It is provided by the package
4218 @code{glib:bin} which is automatically imported by the build system.
4219 The @code{glib} package providing @command{glib-compile-schemas} can be
4220 specified with the @code{#:glib} parameter.
4221 @end table
4222
4223 Both phases are executed after the @code{install} phase.
4224 @end defvr
4225
4226 @defvr {Scheme Variable} guile-build-system
4227 This build system is for Guile packages that consist exclusively of Scheme
4228 code and that are so lean that they don't even have a makefile, let alone a
4229 @file{configure} script. It compiles Scheme code using @command{guild
4230 compile} (@pxref{Compilation,,, guile, GNU Guile Reference Manual}) and
4231 installs the @file{.scm} and @file{.go} files in the right place. It also
4232 installs documentation.
4233
4234 This build system supports cross-compilation by using the @code{--target}
4235 option of @command{guild compile}.
4236
4237 Packages built with @code{guile-build-system} must provide a Guile package in
4238 their @code{native-inputs} field.
4239 @end defvr
4240
4241 @defvr {Scheme Variable} minify-build-system
4242 This variable is exported by @code{(guix build-system minify)}. It
4243 implements a minification procedure for simple JavaScript packages.
4244
4245 It adds @code{uglify-js} to the set of inputs and uses it to compress
4246 all JavaScript files in the @file{src} directory. A different minifier
4247 package can be specified with the @code{#:uglify-js} parameter, but it
4248 is expected that the package writes the minified code to the standard
4249 output.
4250
4251 When the input JavaScript files are not all located in the @file{src}
4252 directory, the parameter @code{#:javascript-files} can be used to
4253 specify a list of file names to feed to the minifier.
4254 @end defvr
4255
4256 @defvr {Scheme Variable} ocaml-build-system
4257 This variable is exported by @code{(guix build-system ocaml)}. It implements
4258 a build procedure for @uref{https://ocaml.org, OCaml} packages, which consists
4259 of choosing the correct set of commands to run for each package. OCaml
4260 packages can expect many different commands to be run. This build system will
4261 try some of them.
4262
4263 When the package has a @file{setup.ml} file present at the top-level, it will
4264 run @code{ocaml setup.ml -configure}, @code{ocaml setup.ml -build} and
4265 @code{ocaml setup.ml -install}. The build system will assume that this file
4266 was generated by @uref{http://oasis.forge.ocamlcore.org/, OASIS} and will take
4267 care of setting the prefix and enabling tests if they are not disabled. You
4268 can pass configure and build flags with the @code{#:configure-flags} and
4269 @code{#:build-flags}. The @code{#:test-flags} key can be passed to change the
4270 set of flags used to enable tests. The @code{#:use-make?} key can be used to
4271 bypass this system in the build and install phases.
4272
4273 When the package has a @file{configure} file, it is assumed that it is a
4274 hand-made configure script that requires a different argument format than
4275 in the @code{gnu-build-system}. You can add more flags with the
4276 @code{#:configure-flags} key.
4277
4278 When the package has a @file{Makefile} file (or @code{#:use-make?} is
4279 @code{#t}), it will be used and more flags can be passed to the build and
4280 install phases with the @code{#:make-flags} key.
4281
4282 Finally, some packages do not have these files and use a somewhat standard
4283 location for its build system. In that case, the build system will run
4284 @code{ocaml pkg/pkg.ml} or @code{ocaml pkg/build.ml} and take care of
4285 providing the path to the required findlib module. Additional flags can
4286 be passed via the @code{#:build-flags} key. Install is taken care of by
4287 @command{opam-installer}. In this case, the @code{opam} package must
4288 be added to the @code{native-inputs} field of the package definition.
4289
4290 Note that most OCaml packages assume they will be installed in the same
4291 directory as OCaml, which is not what we want in guix. In particular, they
4292 will install @file{.so} files in their module's directory, which is usually
4293 fine because it is in the OCaml compiler directory. In guix though, these
4294 libraries cannot be found and we use @code{CAML_LD_LIBRARY_PATH}. This
4295 variable points to @file{lib/ocaml/site-lib/stubslibs} and this is where
4296 @file{.so} libraries should be installed.
4297 @end defvr
4298
4299 @defvr {Scheme Variable} python-build-system
4300 This variable is exported by @code{(guix build-system python)}. It
4301 implements the more or less standard build procedure used by Python
4302 packages, which consists in running @code{python setup.py build} and
4303 then @code{python setup.py install --prefix=/gnu/store/@dots{}}.
4304
4305 For packages that install stand-alone Python programs under @code{bin/},
4306 it takes care of wrapping these programs so that their @code{PYTHONPATH}
4307 environment variable points to all the Python libraries they depend on.
4308
4309 Which Python package is used to perform the build can be specified with
4310 the @code{#:python} parameter. This is a useful way to force a package
4311 to be built for a specific version of the Python interpreter, which
4312 might be necessary if the package is only compatible with a single
4313 interpreter version.
4314
4315 By default guix calls @code{setup.py} under control of
4316 @code{setuptools}, much like @command{pip} does. Some packages are not
4317 compatible with setuptools (and pip), thus you can disable this by
4318 setting the @code{#:use-setuptools} parameter to @code{#f}.
4319 @end defvr
4320
4321 @defvr {Scheme Variable} perl-build-system
4322 This variable is exported by @code{(guix build-system perl)}. It
4323 implements the standard build procedure for Perl packages, which either
4324 consists in running @code{perl Build.PL --prefix=/gnu/store/@dots{}},
4325 followed by @code{Build} and @code{Build install}; or in running
4326 @code{perl Makefile.PL PREFIX=/gnu/store/@dots{}}, followed by
4327 @code{make} and @code{make install}, depending on which of
4328 @code{Build.PL} or @code{Makefile.PL} is present in the package
4329 distribution. Preference is given to the former if both @code{Build.PL}
4330 and @code{Makefile.PL} exist in the package distribution. This
4331 preference can be reversed by specifying @code{#t} for the
4332 @code{#:make-maker?} parameter.
4333
4334 The initial @code{perl Makefile.PL} or @code{perl Build.PL} invocation
4335 passes flags specified by the @code{#:make-maker-flags} or
4336 @code{#:module-build-flags} parameter, respectively.
4337
4338 Which Perl package is used can be specified with @code{#:perl}.
4339 @end defvr
4340
4341 @defvr {Scheme Variable} r-build-system
4342 This variable is exported by @code{(guix build-system r)}. It
4343 implements the build procedure used by @uref{http://r-project.org, R}
4344 packages, which essentially is little more than running @code{R CMD
4345 INSTALL --library=/gnu/store/@dots{}} in an environment where
4346 @code{R_LIBS_SITE} contains the paths to all R package inputs. Tests
4347 are run after installation using the R function
4348 @code{tools::testInstalledPackage}.
4349 @end defvr
4350
4351 @defvr {Scheme Variable} texlive-build-system
4352 This variable is exported by @code{(guix build-system texlive)}. It is
4353 used to build TeX packages in batch mode with a specified engine. The
4354 build system sets the @code{TEXINPUTS} variable to find all TeX source
4355 files in the inputs.
4356
4357 By default it runs @code{luatex} on all files ending on @code{ins}. A
4358 different engine and format can be specified with the
4359 @code{#:tex-format} argument. Different build targets can be specified
4360 with the @code{#:build-targets} argument, which expects a list of file
4361 names. The build system adds only @code{texlive-bin} and
4362 @code{texlive-latex-base} (both from @code{(gnu packages tex}) to the
4363 inputs. Both can be overridden with the arguments @code{#:texlive-bin}
4364 and @code{#:texlive-latex-base}, respectively.
4365
4366 The @code{#:tex-directory} parameter tells the build system where to
4367 install the built files under the texmf tree.
4368 @end defvr
4369
4370 @defvr {Scheme Variable} ruby-build-system
4371 This variable is exported by @code{(guix build-system ruby)}. It
4372 implements the RubyGems build procedure used by Ruby packages, which
4373 involves running @code{gem build} followed by @code{gem install}.
4374
4375 The @code{source} field of a package that uses this build system
4376 typically references a gem archive, since this is the format that Ruby
4377 developers use when releasing their software. The build system unpacks
4378 the gem archive, potentially patches the source, runs the test suite,
4379 repackages the gem, and installs it. Additionally, directories and
4380 tarballs may be referenced to allow building unreleased gems from Git or
4381 a traditional source release tarball.
4382
4383 Which Ruby package is used can be specified with the @code{#:ruby}
4384 parameter. A list of additional flags to be passed to the @command{gem}
4385 command can be specified with the @code{#:gem-flags} parameter.
4386 @end defvr
4387
4388 @defvr {Scheme Variable} waf-build-system
4389 This variable is exported by @code{(guix build-system waf)}. It
4390 implements a build procedure around the @code{waf} script. The common
4391 phases---@code{configure}, @code{build}, and @code{install}---are
4392 implemented by passing their names as arguments to the @code{waf}
4393 script.
4394
4395 The @code{waf} script is executed by the Python interpreter. Which
4396 Python package is used to run the script can be specified with the
4397 @code{#:python} parameter.
4398 @end defvr
4399
4400 @defvr {Scheme Variable} scons-build-system
4401 This variable is exported by @code{(guix build-system scons)}. It
4402 implements the build procedure used by the SCons software construction
4403 tool. This build system runs @code{scons} to build the package,
4404 @code{scons test} to run tests, and then @code{scons install} to install
4405 the package.
4406
4407 Additional flags to be passed to @code{scons} can be specified with the
4408 @code{#:scons-flags} parameter. The version of Python used to run SCons
4409 can be specified by selecting the appropriate SCons package with the
4410 @code{#:scons} parameter.
4411 @end defvr
4412
4413 @defvr {Scheme Variable} haskell-build-system
4414 This variable is exported by @code{(guix build-system haskell)}. It
4415 implements the Cabal build procedure used by Haskell packages, which
4416 involves running @code{runhaskell Setup.hs configure
4417 --prefix=/gnu/store/@dots{}} and @code{runhaskell Setup.hs build}.
4418 Instead of installing the package by running @code{runhaskell Setup.hs
4419 install}, to avoid trying to register libraries in the read-only
4420 compiler store directory, the build system uses @code{runhaskell
4421 Setup.hs copy}, followed by @code{runhaskell Setup.hs register}. In
4422 addition, the build system generates the package documentation by
4423 running @code{runhaskell Setup.hs haddock}, unless @code{#:haddock? #f}
4424 is passed. Optional Haddock parameters can be passed with the help of
4425 the @code{#:haddock-flags} parameter. If the file @code{Setup.hs} is
4426 not found, the build system looks for @code{Setup.lhs} instead.
4427
4428 Which Haskell compiler is used can be specified with the @code{#:haskell}
4429 parameter which defaults to @code{ghc}.
4430 @end defvr
4431
4432 @defvr {Scheme Variable} dub-build-system
4433 This variable is exported by @code{(guix build-system dub)}. It
4434 implements the Dub build procedure used by D packages, which
4435 involves running @code{dub build} and @code{dub run}.
4436 Installation is done by copying the files manually.
4437
4438 Which D compiler is used can be specified with the @code{#:ldc}
4439 parameter which defaults to @code{ldc}.
4440 @end defvr
4441
4442 @defvr {Scheme Variable} emacs-build-system
4443 This variable is exported by @code{(guix build-system emacs)}. It
4444 implements an installation procedure similar to the packaging system
4445 of Emacs itself (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
4446
4447 It first creates the @code{@var{package}-autoloads.el} file, then it
4448 byte compiles all Emacs Lisp files. Differently from the Emacs
4449 packaging system, the Info documentation files are moved to the standard
4450 documentation directory and the @file{dir} file is deleted. Each
4451 package is installed in its own directory under
4452 @file{share/emacs/site-lisp/guix.d}.
4453 @end defvr
4454
4455 @defvr {Scheme Variable} font-build-system
4456 This variable is exported by @code{(guix build-system font)}. It
4457 implements an installation procedure for font packages where upstream
4458 provides pre-compiled TrueType, OpenType, etc. font files that merely
4459 need to be copied into place. It copies font files to standard
4460 locations in the output directory.
4461 @end defvr
4462
4463 @defvr {Scheme Variable} meson-build-system
4464 This variable is exported by @code{(guix build-system meson)}. It
4465 implements the build procedure for packages that use
4466 @url{http://mesonbuild.com, Meson} as their build system.
4467
4468 It adds both Meson and @uref{https://ninja-build.org/, Ninja} to the set
4469 of inputs, and they can be changed with the parameters @code{#:meson}
4470 and @code{#:ninja} if needed. The default Meson is
4471 @code{meson-for-build}, which is special because it doesn't clear the
4472 @code{RUNPATH} of binaries and libraries when they are installed.
4473
4474 This build system is an extension of @var{gnu-build-system}, but with the
4475 following phases changed to some specific for Meson:
4476
4477 @table @code
4478
4479 @item configure
4480 The phase runs @code{meson} with the flags specified in
4481 @code{#:configure-flags}. The flag @code{--build-type} is always set to
4482 @code{plain} unless something else is specified in @code{#:build-type}.
4483
4484 @item build
4485 The phase runs @code{ninja} to build the package in parallel by default, but
4486 this can be changed with @code{#:parallel-build?}.
4487
4488 @item check
4489 The phase runs @code{ninja} with the target specified in @code{#:test-target},
4490 which is @code{"test"} by default.
4491
4492 @item install
4493 The phase runs @code{ninja install} and can not be changed.
4494 @end table
4495
4496 Apart from that, the build system also adds the following phases:
4497
4498 @table @code
4499
4500 @item fix-runpath
4501 This phase ensures that all binaries can find the libraries they need.
4502 It searches for required libraries in subdirectories of the package being
4503 built, and adds those to @code{RUNPATH} where needed. It also removes
4504 references to libraries left over from the build phase by
4505 @code{meson-for-build}, such as test dependencies, that aren't actually
4506 required for the program to run.
4507
4508 @item glib-or-gtk-wrap
4509 This phase is the phase provided by @code{glib-or-gtk-build-system}, and it
4510 is not enabled by default. It can be enabled with @code{#:glib-or-gtk?}.
4511
4512 @item glib-or-gtk-compile-schemas
4513 This phase is the phase provided by @code{glib-or-gtk-build-system}, and it
4514 is not enabled by default. It can be enabled with @code{#:glib-or-gtk?}.
4515 @end table
4516 @end defvr
4517
4518 Lastly, for packages that do not need anything as sophisticated, a
4519 ``trivial'' build system is provided. It is trivial in the sense that
4520 it provides basically no support: it does not pull any implicit inputs,
4521 and does not have a notion of build phases.
4522
4523 @defvr {Scheme Variable} trivial-build-system
4524 This variable is exported by @code{(guix build-system trivial)}.
4525
4526 This build system requires a @code{#:builder} argument. This argument
4527 must be a Scheme expression that builds the package output(s)---as
4528 with @code{build-expression->derivation} (@pxref{Derivations,
4529 @code{build-expression->derivation}}).
4530 @end defvr
4531
4532 @node The Store
4533 @section The Store
4534
4535 @cindex store
4536 @cindex store items
4537 @cindex store paths
4538
4539 Conceptually, the @dfn{store} is the place where derivations that have
4540 been built successfully are stored---by default, @file{/gnu/store}.
4541 Sub-directories in the store are referred to as @dfn{store items} or
4542 sometimes @dfn{store paths}. The store has an associated database that
4543 contains information such as the store paths referred to by each store
4544 path, and the list of @emph{valid} store items---results of successful
4545 builds. This database resides in @file{@var{localstatedir}/guix/db},
4546 where @var{localstatedir} is the state directory specified @i{via}
4547 @option{--localstatedir} at configure time, usually @file{/var}.
4548
4549 The store is @emph{always} accessed by the daemon on behalf of its clients
4550 (@pxref{Invoking guix-daemon}). To manipulate the store, clients
4551 connect to the daemon over a Unix-domain socket, send requests to it,
4552 and read the result---these are remote procedure calls, or RPCs.
4553
4554 @quotation Note
4555 Users must @emph{never} modify files under @file{/gnu/store} directly.
4556 This would lead to inconsistencies and break the immutability
4557 assumptions of Guix's functional model (@pxref{Introduction}).
4558
4559 @xref{Invoking guix gc, @command{guix gc --verify}}, for information on
4560 how to check the integrity of the store and attempt recovery from
4561 accidental modifications.
4562 @end quotation
4563
4564 The @code{(guix store)} module provides procedures to connect to the
4565 daemon, and to perform RPCs. These are described below. By default,
4566 @code{open-connection}, and thus all the @command{guix} commands,
4567 connect to the local daemon or to the URI specified by the
4568 @code{GUIX_DAEMON_SOCKET} environment variable.
4569
4570 @defvr {Environment Variable} GUIX_DAEMON_SOCKET
4571 When set, the value of this variable should be a file name or a URI
4572 designating the daemon endpoint. When it is a file name, it denotes a
4573 Unix-domain socket to connect to. In addition to file names, the
4574 supported URI schemes are:
4575
4576 @table @code
4577 @item file
4578 @itemx unix
4579 These are for Unix-domain sockets.
4580 @code{file:///var/guix/daemon-socket/socket} is equivalent to
4581 @file{/var/guix/daemon-socket/socket}.
4582
4583 @item guix
4584 @cindex daemon, remote access
4585 @cindex remote access to the daemon
4586 @cindex daemon, cluster setup
4587 @cindex clusters, daemon setup
4588 These URIs denote connections over TCP/IP, without encryption nor
4589 authentication of the remote host. The URI must specify the host name
4590 and optionally a port number (by default port 44146 is used):
4591
4592 @example
4593 guix://master.guix.example.org:1234
4594 @end example
4595
4596 This setup is suitable on local networks, such as clusters, where only
4597 trusted nodes may connect to the build daemon at
4598 @code{master.guix.example.org}.
4599
4600 The @code{--listen} option of @command{guix-daemon} can be used to
4601 instruct it to listen for TCP connections (@pxref{Invoking guix-daemon,
4602 @code{--listen}}).
4603
4604 @item ssh
4605 @cindex SSH access to build daemons
4606 These URIs allow you to connect to a remote daemon over
4607 SSH@footnote{This feature requires Guile-SSH (@pxref{Requirements}).}.
4608 A typical URL might look like this:
4609
4610 @example
4611 ssh://charlie@@guix.example.org:22
4612 @end example
4613
4614 As for @command{guix copy}, the usual OpenSSH client configuration files
4615 are honored (@pxref{Invoking guix copy}).
4616 @end table
4617
4618 Additional URI schemes may be supported in the future.
4619
4620 @c XXX: Remove this note when the protocol incurs fewer round trips
4621 @c and when (guix derivations) no longer relies on file system access.
4622 @quotation Note
4623 The ability to connect to remote build daemons is considered
4624 experimental as of @value{VERSION}. Please get in touch with us to
4625 share any problems or suggestions you may have (@pxref{Contributing}).
4626 @end quotation
4627 @end defvr
4628
4629 @deffn {Scheme Procedure} open-connection [@var{uri}] [#:reserve-space? #t]
4630 Connect to the daemon over the Unix-domain socket at @var{uri} (a string). When
4631 @var{reserve-space?} is true, instruct it to reserve a little bit of
4632 extra space on the file system so that the garbage collector can still
4633 operate should the disk become full. Return a server object.
4634
4635 @var{file} defaults to @var{%default-socket-path}, which is the normal
4636 location given the options that were passed to @command{configure}.
4637 @end deffn
4638
4639 @deffn {Scheme Procedure} close-connection @var{server}
4640 Close the connection to @var{server}.
4641 @end deffn
4642
4643 @defvr {Scheme Variable} current-build-output-port
4644 This variable is bound to a SRFI-39 parameter, which refers to the port
4645 where build and error logs sent by the daemon should be written.
4646 @end defvr
4647
4648 Procedures that make RPCs all take a server object as their first
4649 argument.
4650
4651 @deffn {Scheme Procedure} valid-path? @var{server} @var{path}
4652 @cindex invalid store items
4653 Return @code{#t} when @var{path} designates a valid store item and
4654 @code{#f} otherwise (an invalid item may exist on disk but still be
4655 invalid, for instance because it is the result of an aborted or failed
4656 build.)
4657
4658 A @code{&nix-protocol-error} condition is raised if @var{path} is not
4659 prefixed by the store directory (@file{/gnu/store}).
4660 @end deffn
4661
4662 @deffn {Scheme Procedure} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
4663 Add @var{text} under file @var{name} in the store, and return its store
4664 path. @var{references} is the list of store paths referred to by the
4665 resulting store path.
4666 @end deffn
4667
4668 @deffn {Scheme Procedure} build-derivations @var{server} @var{derivations}
4669 Build @var{derivations} (a list of @code{<derivation>} objects or
4670 derivation paths), and return when the worker is done building them.
4671 Return @code{#t} on success.
4672 @end deffn
4673
4674 Note that the @code{(guix monads)} module provides a monad as well as
4675 monadic versions of the above procedures, with the goal of making it
4676 more convenient to work with code that accesses the store (@pxref{The
4677 Store Monad}).
4678
4679 @c FIXME
4680 @i{This section is currently incomplete.}
4681
4682 @node Derivations
4683 @section Derivations
4684
4685 @cindex derivations
4686 Low-level build actions and the environment in which they are performed
4687 are represented by @dfn{derivations}. A derivation contains the
4688 following pieces of information:
4689
4690 @itemize
4691 @item
4692 The outputs of the derivation---derivations produce at least one file or
4693 directory in the store, but may produce more.
4694
4695 @item
4696 The inputs of the derivations, which may be other derivations or plain
4697 files in the store (patches, build scripts, etc.)
4698
4699 @item
4700 The system type targeted by the derivation---e.g., @code{x86_64-linux}.
4701
4702 @item
4703 The file name of a build script in the store, along with the arguments
4704 to be passed.
4705
4706 @item
4707 A list of environment variables to be defined.
4708
4709 @end itemize
4710
4711 @cindex derivation path
4712 Derivations allow clients of the daemon to communicate build actions to
4713 the store. They exist in two forms: as an in-memory representation,
4714 both on the client- and daemon-side, and as files in the store whose
4715 name end in @code{.drv}---these files are referred to as @dfn{derivation
4716 paths}. Derivations paths can be passed to the @code{build-derivations}
4717 procedure to perform the build actions they prescribe (@pxref{The
4718 Store}).
4719
4720 @cindex fixed-output derivations
4721 Operations such as file downloads and version-control checkouts for
4722 which the expected content hash is known in advance are modeled as
4723 @dfn{fixed-output derivations}. Unlike regular derivations, the outputs
4724 of a fixed-output derivation are independent of its inputs---e.g., a
4725 source code download produces the same result regardless of the download
4726 method and tools being used.
4727
4728 The @code{(guix derivations)} module provides a representation of
4729 derivations as Scheme objects, along with procedures to create and
4730 otherwise manipulate derivations. The lowest-level primitive to create
4731 a derivation is the @code{derivation} procedure:
4732
4733 @deffn {Scheme Procedure} derivation @var{store} @var{name} @var{builder} @
4734 @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
4735 [#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
4736 [#:system (%current-system)] [#:references-graphs #f] @
4737 [#:allowed-references #f] [#:disallowed-references #f] @
4738 [#:leaked-env-vars #f] [#:local-build? #f] @
4739 [#:substitutable? #t]
4740 Build a derivation with the given arguments, and return the resulting
4741 @code{<derivation>} object.
4742
4743 When @var{hash} and @var{hash-algo} are given, a
4744 @dfn{fixed-output derivation} is created---i.e., one whose result is
4745 known in advance, such as a file download. If, in addition,
4746 @var{recursive?} is true, then that fixed output may be an executable
4747 file or a directory and @var{hash} must be the hash of an archive
4748 containing this output.
4749
4750 When @var{references-graphs} is true, it must be a list of file
4751 name/store path pairs. In that case, the reference graph of each store
4752 path is exported in the build environment in the corresponding file, in
4753 a simple text format.
4754
4755 When @var{allowed-references} is true, it must be a list of store items
4756 or outputs that the derivation's output may refer to. Likewise,
4757 @var{disallowed-references}, if true, must be a list of things the
4758 outputs may @emph{not} refer to.
4759
4760 When @var{leaked-env-vars} is true, it must be a list of strings
4761 denoting environment variables that are allowed to ``leak'' from the
4762 daemon's environment to the build environment. This is only applicable
4763 to fixed-output derivations---i.e., when @var{hash} is true. The main
4764 use is to allow variables such as @code{http_proxy} to be passed to
4765 derivations that download files.
4766
4767 When @var{local-build?} is true, declare that the derivation is not a
4768 good candidate for offloading and should rather be built locally
4769 (@pxref{Daemon Offload Setup}). This is the case for small derivations
4770 where the costs of data transfers would outweigh the benefits.
4771
4772 When @var{substitutable?} is false, declare that substitutes of the
4773 derivation's output should not be used (@pxref{Substitutes}). This is
4774 useful, for instance, when building packages that capture details of the
4775 host CPU instruction set.
4776 @end deffn
4777
4778 @noindent
4779 Here's an example with a shell script as its builder, assuming
4780 @var{store} is an open connection to the daemon, and @var{bash} points
4781 to a Bash executable in the store:
4782
4783 @lisp
4784 (use-modules (guix utils)
4785 (guix store)
4786 (guix derivations))
4787
4788 (let ((builder ; add the Bash script to the store
4789 (add-text-to-store store "my-builder.sh"
4790 "echo hello world > $out\n" '())))
4791 (derivation store "foo"
4792 bash `("-e" ,builder)
4793 #:inputs `((,bash) (,builder))
4794 #:env-vars '(("HOME" . "/homeless"))))
4795 @result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
4796 @end lisp
4797
4798 As can be guessed, this primitive is cumbersome to use directly. A
4799 better approach is to write build scripts in Scheme, of course! The
4800 best course of action for that is to write the build code as a
4801 ``G-expression'', and to pass it to @code{gexp->derivation}. For more
4802 information, @pxref{G-Expressions}.
4803
4804 Once upon a time, @code{gexp->derivation} did not exist and constructing
4805 derivations with build code written in Scheme was achieved with
4806 @code{build-expression->derivation}, documented below. This procedure
4807 is now deprecated in favor of the much nicer @code{gexp->derivation}.
4808
4809 @deffn {Scheme Procedure} build-expression->derivation @var{store} @
4810 @var{name} @var{exp} @
4811 [#:system (%current-system)] [#:inputs '()] @
4812 [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
4813 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
4814 [#:references-graphs #f] [#:allowed-references #f] @
4815 [#:disallowed-references #f] @
4816 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
4817 Return a derivation that executes Scheme expression @var{exp} as a
4818 builder for derivation @var{name}. @var{inputs} must be a list of
4819 @code{(name drv-path sub-drv)} tuples; when @var{sub-drv} is omitted,
4820 @code{"out"} is assumed. @var{modules} is a list of names of Guile
4821 modules from the current search path to be copied in the store,
4822 compiled, and made available in the load path during the execution of
4823 @var{exp}---e.g., @code{((guix build utils) (guix build
4824 gnu-build-system))}.
4825
4826 @var{exp} is evaluated in an environment where @code{%outputs} is bound
4827 to a list of output/path pairs, and where @code{%build-inputs} is bound
4828 to a list of string/output-path pairs made from @var{inputs}.
4829 Optionally, @var{env-vars} is a list of string pairs specifying the name
4830 and value of environment variables visible to the builder. The builder
4831 terminates by passing the result of @var{exp} to @code{exit}; thus, when
4832 @var{exp} returns @code{#f}, the build is considered to have failed.
4833
4834 @var{exp} is built using @var{guile-for-build} (a derivation). When
4835 @var{guile-for-build} is omitted or is @code{#f}, the value of the
4836 @code{%guile-for-build} fluid is used instead.
4837
4838 See the @code{derivation} procedure for the meaning of
4839 @var{references-graphs}, @var{allowed-references},
4840 @var{disallowed-references}, @var{local-build?}, and
4841 @var{substitutable?}.
4842 @end deffn
4843
4844 @noindent
4845 Here's an example of a single-output derivation that creates a directory
4846 containing one file:
4847
4848 @lisp
4849 (let ((builder '(let ((out (assoc-ref %outputs "out")))
4850 (mkdir out) ; create /gnu/store/@dots{}-goo
4851 (call-with-output-file (string-append out "/test")
4852 (lambda (p)
4853 (display '(hello guix) p))))))
4854 (build-expression->derivation store "goo" builder))
4855
4856 @result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
4857 @end lisp
4858
4859
4860 @node The Store Monad
4861 @section The Store Monad
4862
4863 @cindex monad
4864
4865 The procedures that operate on the store described in the previous
4866 sections all take an open connection to the build daemon as their first
4867 argument. Although the underlying model is functional, they either have
4868 side effects or depend on the current state of the store.
4869
4870 The former is inconvenient: the connection to the build daemon has to be
4871 carried around in all those functions, making it impossible to compose
4872 functions that do not take that parameter with functions that do. The
4873 latter can be problematic: since store operations have side effects
4874 and/or depend on external state, they have to be properly sequenced.
4875
4876 @cindex monadic values
4877 @cindex monadic functions
4878 This is where the @code{(guix monads)} module comes in. This module
4879 provides a framework for working with @dfn{monads}, and a particularly
4880 useful monad for our uses, the @dfn{store monad}. Monads are a
4881 construct that allows two things: associating ``context'' with values
4882 (in our case, the context is the store), and building sequences of
4883 computations (here computations include accesses to the store). Values
4884 in a monad---values that carry this additional context---are called
4885 @dfn{monadic values}; procedures that return such values are called
4886 @dfn{monadic procedures}.
4887
4888 Consider this ``normal'' procedure:
4889
4890 @example
4891 (define (sh-symlink store)
4892 ;; Return a derivation that symlinks the 'bash' executable.
4893 (let* ((drv (package-derivation store bash))
4894 (out (derivation->output-path drv))
4895 (sh (string-append out "/bin/bash")))
4896 (build-expression->derivation store "sh"
4897 `(symlink ,sh %output))))
4898 @end example
4899
4900 Using @code{(guix monads)} and @code{(guix gexp)}, it may be rewritten
4901 as a monadic function:
4902
4903 @example
4904 (define (sh-symlink)
4905 ;; Same, but return a monadic value.
4906 (mlet %store-monad ((drv (package->derivation bash)))
4907 (gexp->derivation "sh"
4908 #~(symlink (string-append #$drv "/bin/bash")
4909 #$output))))
4910 @end example
4911
4912 There are several things to note in the second version: the @code{store}
4913 parameter is now implicit and is ``threaded'' in the calls to the
4914 @code{package->derivation} and @code{gexp->derivation} monadic
4915 procedures, and the monadic value returned by @code{package->derivation}
4916 is @dfn{bound} using @code{mlet} instead of plain @code{let}.
4917
4918 As it turns out, the call to @code{package->derivation} can even be
4919 omitted since it will take place implicitly, as we will see later
4920 (@pxref{G-Expressions}):
4921
4922 @example
4923 (define (sh-symlink)
4924 (gexp->derivation "sh"
4925 #~(symlink (string-append #$bash "/bin/bash")
4926 #$output)))
4927 @end example
4928
4929 @c See
4930 @c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
4931 @c for the funny quote.
4932 Calling the monadic @code{sh-symlink} has no effect. As someone once
4933 said, ``you exit a monad like you exit a building on fire: by running''.
4934 So, to exit the monad and get the desired effect, one must use
4935 @code{run-with-store}:
4936
4937 @example
4938 (run-with-store (open-connection) (sh-symlink))
4939 @result{} /gnu/store/...-sh-symlink
4940 @end example
4941
4942 Note that the @code{(guix monad-repl)} module extends the Guile REPL with
4943 new ``meta-commands'' to make it easier to deal with monadic procedures:
4944 @code{run-in-store}, and @code{enter-store-monad}. The former is used
4945 to ``run'' a single monadic value through the store:
4946
4947 @example
4948 scheme@@(guile-user)> ,run-in-store (package->derivation hello)
4949 $1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
4950 @end example
4951
4952 The latter enters a recursive REPL, where all the return values are
4953 automatically run through the store:
4954
4955 @example
4956 scheme@@(guile-user)> ,enter-store-monad
4957 store-monad@@(guile-user) [1]> (package->derivation hello)
4958 $2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
4959 store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
4960 $3 = "/gnu/store/@dots{}-foo"
4961 store-monad@@(guile-user) [1]> ,q
4962 scheme@@(guile-user)>
4963 @end example
4964
4965 @noindent
4966 Note that non-monadic values cannot be returned in the
4967 @code{store-monad} REPL.
4968
4969 The main syntactic forms to deal with monads in general are provided by
4970 the @code{(guix monads)} module and are described below.
4971
4972 @deffn {Scheme Syntax} with-monad @var{monad} @var{body} ...
4973 Evaluate any @code{>>=} or @code{return} forms in @var{body} as being
4974 in @var{monad}.
4975 @end deffn
4976
4977 @deffn {Scheme Syntax} return @var{val}
4978 Return a monadic value that encapsulates @var{val}.
4979 @end deffn
4980
4981 @deffn {Scheme Syntax} >>= @var{mval} @var{mproc} ...
4982 @dfn{Bind} monadic value @var{mval}, passing its ``contents'' to monadic
4983 procedures @var{mproc}@dots{}@footnote{This operation is commonly
4984 referred to as ``bind'', but that name denotes an unrelated procedure in
4985 Guile. Thus we use this somewhat cryptic symbol inherited from the
4986 Haskell language.}. There can be one @var{mproc} or several of them, as
4987 in this example:
4988
4989 @example
4990 (run-with-state
4991 (with-monad %state-monad
4992 (>>= (return 1)
4993 (lambda (x) (return (+ 1 x)))
4994 (lambda (x) (return (* 2 x)))))
4995 'some-state)
4996
4997 @result{} 4
4998 @result{} some-state
4999 @end example
5000 @end deffn
5001
5002 @deffn {Scheme Syntax} mlet @var{monad} ((@var{var} @var{mval}) ...) @
5003 @var{body} ...
5004 @deffnx {Scheme Syntax} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
5005 @var{body} ...
5006 Bind the variables @var{var} to the monadic values @var{mval} in
5007 @var{body}, which is a sequence of expressions. As with the bind
5008 operator, this can be thought of as ``unpacking'' the raw, non-monadic
5009 value ``contained'' in @var{mval} and making @var{var} refer to that
5010 raw, non-monadic value within the scope of the @var{body}. The form
5011 (@var{var} -> @var{val}) binds @var{var} to the ``normal'' value
5012 @var{val}, as per @code{let}. The binding operations occur in sequence
5013 from left to right. The last expression of @var{body} must be a monadic
5014 expression, and its result will become the result of the @code{mlet} or
5015 @code{mlet*} when run in the @var{monad}.
5016
5017 @code{mlet*} is to @code{mlet} what @code{let*} is to @code{let}
5018 (@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
5019 @end deffn
5020
5021 @deffn {Scheme System} mbegin @var{monad} @var{mexp} ...
5022 Bind @var{mexp} and the following monadic expressions in sequence,
5023 returning the result of the last expression. Every expression in the
5024 sequence must be a monadic expression.
5025
5026 This is akin to @code{mlet}, except that the return values of the
5027 monadic expressions are ignored. In that sense, it is analogous to
5028 @code{begin}, but applied to monadic expressions.
5029 @end deffn
5030
5031 @deffn {Scheme System} mwhen @var{condition} @var{mexp0} @var{mexp*} ...
5032 When @var{condition} is true, evaluate the sequence of monadic
5033 expressions @var{mexp0}..@var{mexp*} as in an @code{mbegin}. When
5034 @var{condition} is false, return @code{*unspecified*} in the current
5035 monad. Every expression in the sequence must be a monadic expression.
5036 @end deffn
5037
5038 @deffn {Scheme System} munless @var{condition} @var{mexp0} @var{mexp*} ...
5039 When @var{condition} is false, evaluate the sequence of monadic
5040 expressions @var{mexp0}..@var{mexp*} as in an @code{mbegin}. When
5041 @var{condition} is true, return @code{*unspecified*} in the current
5042 monad. Every expression in the sequence must be a monadic expression.
5043 @end deffn
5044
5045 @cindex state monad
5046 The @code{(guix monads)} module provides the @dfn{state monad}, which
5047 allows an additional value---the state---to be @emph{threaded} through
5048 monadic procedure calls.
5049
5050 @defvr {Scheme Variable} %state-monad
5051 The state monad. Procedures in the state monad can access and change
5052 the state that is threaded.
5053
5054 Consider the example below. The @code{square} procedure returns a value
5055 in the state monad. It returns the square of its argument, but also
5056 increments the current state value:
5057
5058 @example
5059 (define (square x)
5060 (mlet %state-monad ((count (current-state)))
5061 (mbegin %state-monad
5062 (set-current-state (+ 1 count))
5063 (return (* x x)))))
5064
5065 (run-with-state (sequence %state-monad (map square (iota 3))) 0)
5066 @result{} (0 1 4)
5067 @result{} 3
5068 @end example
5069
5070 When ``run'' through @var{%state-monad}, we obtain that additional state
5071 value, which is the number of @code{square} calls.
5072 @end defvr
5073
5074 @deffn {Monadic Procedure} current-state
5075 Return the current state as a monadic value.
5076 @end deffn
5077
5078 @deffn {Monadic Procedure} set-current-state @var{value}
5079 Set the current state to @var{value} and return the previous state as a
5080 monadic value.
5081 @end deffn
5082
5083 @deffn {Monadic Procedure} state-push @var{value}
5084 Push @var{value} to the current state, which is assumed to be a list,
5085 and return the previous state as a monadic value.
5086 @end deffn
5087
5088 @deffn {Monadic Procedure} state-pop
5089 Pop a value from the current state and return it as a monadic value.
5090 The state is assumed to be a list.
5091 @end deffn
5092
5093 @deffn {Scheme Procedure} run-with-state @var{mval} [@var{state}]
5094 Run monadic value @var{mval} starting with @var{state} as the initial
5095 state. Return two values: the resulting value, and the resulting state.
5096 @end deffn
5097
5098 The main interface to the store monad, provided by the @code{(guix
5099 store)} module, is as follows.
5100
5101 @defvr {Scheme Variable} %store-monad
5102 The store monad---an alias for @var{%state-monad}.
5103
5104 Values in the store monad encapsulate accesses to the store. When its
5105 effect is needed, a value of the store monad must be ``evaluated'' by
5106 passing it to the @code{run-with-store} procedure (see below.)
5107 @end defvr
5108
5109 @deffn {Scheme Procedure} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
5110 Run @var{mval}, a monadic value in the store monad, in @var{store}, an
5111 open store connection.
5112 @end deffn
5113
5114 @deffn {Monadic Procedure} text-file @var{name} @var{text} [@var{references}]
5115 Return as a monadic value the absolute file name in the store of the file
5116 containing @var{text}, a string. @var{references} is a list of store items that the
5117 resulting text file refers to; it defaults to the empty list.
5118 @end deffn
5119
5120 @deffn {Monadic Procedure} binary-file @var{name} @var{data} [@var{references}]
5121 Return as a monadic value the absolute file name in the store of the file
5122 containing @var{data}, a bytevector. @var{references} is a list of store
5123 items that the resulting binary file refers to; it defaults to the empty list.
5124 @end deffn
5125
5126 @deffn {Monadic Procedure} interned-file @var{file} [@var{name}] @
5127 [#:recursive? #t] [#:select? (const #t)]
5128 Return the name of @var{file} once interned in the store. Use
5129 @var{name} as its store name, or the basename of @var{file} if
5130 @var{name} is omitted.
5131
5132 When @var{recursive?} is true, the contents of @var{file} are added
5133 recursively; if @var{file} designates a flat file and @var{recursive?}
5134 is true, its contents are added, and its permission bits are kept.
5135
5136 When @var{recursive?} is true, call @code{(@var{select?} @var{file}
5137 @var{stat})} for each directory entry, where @var{file} is the entry's
5138 absolute file name and @var{stat} is the result of @code{lstat}; exclude
5139 entries for which @var{select?} does not return true.
5140
5141 The example below adds a file to the store, under two different names:
5142
5143 @example
5144 (run-with-store (open-connection)
5145 (mlet %store-monad ((a (interned-file "README"))
5146 (b (interned-file "README" "LEGU-MIN")))
5147 (return (list a b))))
5148
5149 @result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
5150 @end example
5151
5152 @end deffn
5153
5154 The @code{(guix packages)} module exports the following package-related
5155 monadic procedures:
5156
5157 @deffn {Monadic Procedure} package-file @var{package} [@var{file}] @
5158 [#:system (%current-system)] [#:target #f] @
5159 [#:output "out"]
5160 Return as a monadic
5161 value in the absolute file name of @var{file} within the @var{output}
5162 directory of @var{package}. When @var{file} is omitted, return the name
5163 of the @var{output} directory of @var{package}. When @var{target} is
5164 true, use it as a cross-compilation target triplet.
5165 @end deffn
5166
5167 @deffn {Monadic Procedure} package->derivation @var{package} [@var{system}]
5168 @deffnx {Monadic Procedure} package->cross-derivation @var{package} @
5169 @var{target} [@var{system}]
5170 Monadic version of @code{package-derivation} and
5171 @code{package-cross-derivation} (@pxref{Defining Packages}).
5172 @end deffn
5173
5174
5175 @node G-Expressions
5176 @section G-Expressions
5177
5178 @cindex G-expression
5179 @cindex build code quoting
5180 So we have ``derivations'', which represent a sequence of build actions
5181 to be performed to produce an item in the store (@pxref{Derivations}).
5182 These build actions are performed when asking the daemon to actually
5183 build the derivations; they are run by the daemon in a container
5184 (@pxref{Invoking guix-daemon}).
5185
5186 @cindex strata of code
5187 It should come as no surprise that we like to write these build actions
5188 in Scheme. When we do that, we end up with two @dfn{strata} of Scheme
5189 code@footnote{The term @dfn{stratum} in this context was coined by
5190 Manuel Serrano et al.@: in the context of their work on Hop. Oleg
5191 Kiselyov, who has written insightful
5192 @url{http://okmij.org/ftp/meta-programming/#meta-scheme, essays and code
5193 on this topic}, refers to this kind of code generation as
5194 @dfn{staging}.}: the ``host code''---code that defines packages, talks
5195 to the daemon, etc.---and the ``build code''---code that actually
5196 performs build actions, such as making directories, invoking
5197 @command{make}, etc.
5198
5199 To describe a derivation and its build actions, one typically needs to
5200 embed build code inside host code. It boils down to manipulating build
5201 code as data, and the homoiconicity of Scheme---code has a direct
5202 representation as data---comes in handy for that. But we need more than
5203 the normal @code{quasiquote} mechanism in Scheme to construct build
5204 expressions.
5205
5206 The @code{(guix gexp)} module implements @dfn{G-expressions}, a form of
5207 S-expressions adapted to build expressions. G-expressions, or
5208 @dfn{gexps}, consist essentially of three syntactic forms: @code{gexp},
5209 @code{ungexp}, and @code{ungexp-splicing} (or simply: @code{#~},
5210 @code{#$}, and @code{#$@@}), which are comparable to
5211 @code{quasiquote}, @code{unquote}, and @code{unquote-splicing},
5212 respectively (@pxref{Expression Syntax, @code{quasiquote},, guile,
5213 GNU Guile Reference Manual}). However, there are major differences:
5214
5215 @itemize
5216 @item
5217 Gexps are meant to be written to a file and run or manipulated by other
5218 processes.
5219
5220 @item
5221 When a high-level object such as a package or derivation is unquoted
5222 inside a gexp, the result is as if its output file name had been
5223 introduced.
5224
5225 @item
5226 Gexps carry information about the packages or derivations they refer to,
5227 and these dependencies are automatically added as inputs to the build
5228 processes that use them.
5229 @end itemize
5230
5231 @cindex lowering, of high-level objects in gexps
5232 This mechanism is not limited to package and derivation
5233 objects: @dfn{compilers} able to ``lower'' other high-level objects to
5234 derivations or files in the store can be defined,
5235 such that these objects can also be inserted
5236 into gexps. For example, a useful type of high-level objects that can be
5237 inserted in a gexp is ``file-like objects'', which make it easy to
5238 add files to the store and to refer to them in
5239 derivations and such (see @code{local-file} and @code{plain-file}
5240 below.)
5241
5242 To illustrate the idea, here is an example of a gexp:
5243
5244 @example
5245 (define build-exp
5246 #~(begin
5247 (mkdir #$output)
5248 (chdir #$output)
5249 (symlink (string-append #$coreutils "/bin/ls")
5250 "list-files")))
5251 @end example
5252
5253 This gexp can be passed to @code{gexp->derivation}; we obtain a
5254 derivation that builds a directory containing exactly one symlink to
5255 @file{/gnu/store/@dots{}-coreutils-8.22/bin/ls}:
5256
5257 @example
5258 (gexp->derivation "the-thing" build-exp)
5259 @end example
5260
5261 As one would expect, the @code{"/gnu/store/@dots{}-coreutils-8.22"} string is
5262 substituted to the reference to the @var{coreutils} package in the
5263 actual build code, and @var{coreutils} is automatically made an input to
5264 the derivation. Likewise, @code{#$output} (equivalent to @code{(ungexp
5265 output)}) is replaced by a string containing the directory name of the
5266 output of the derivation.
5267
5268 @cindex cross compilation
5269 In a cross-compilation context, it is useful to distinguish between
5270 references to the @emph{native} build of a package---that can run on the
5271 host---versus references to cross builds of a package. To that end, the
5272 @code{#+} plays the same role as @code{#$}, but is a reference to a
5273 native package build:
5274
5275 @example
5276 (gexp->derivation "vi"
5277 #~(begin
5278 (mkdir #$output)
5279 (system* (string-append #+coreutils "/bin/ln")
5280 "-s"
5281 (string-append #$emacs "/bin/emacs")
5282 (string-append #$output "/bin/vi")))
5283 #:target "mips64el-linux-gnu")
5284 @end example
5285
5286 @noindent
5287 In the example above, the native build of @var{coreutils} is used, so
5288 that @command{ln} can actually run on the host; but then the
5289 cross-compiled build of @var{emacs} is referenced.
5290
5291 @cindex imported modules, for gexps
5292 @findex with-imported-modules
5293 Another gexp feature is @dfn{imported modules}: sometimes you want to be
5294 able to use certain Guile modules from the ``host environment'' in the
5295 gexp, so those modules should be imported in the ``build environment''.
5296 The @code{with-imported-modules} form allows you to express that:
5297
5298 @example
5299 (let ((build (with-imported-modules '((guix build utils))
5300 #~(begin
5301 (use-modules (guix build utils))
5302 (mkdir-p (string-append #$output "/bin"))))))
5303 (gexp->derivation "empty-dir"
5304 #~(begin
5305 #$build
5306 (display "success!\n")
5307 #t)))
5308 @end example
5309
5310 @noindent
5311 In this example, the @code{(guix build utils)} module is automatically
5312 pulled into the isolated build environment of our gexp, such that
5313 @code{(use-modules (guix build utils))} works as expected.
5314
5315 @cindex module closure
5316 @findex source-module-closure
5317 Usually you want the @emph{closure} of the module to be imported---i.e.,
5318 the module itself and all the modules it depends on---rather than just
5319 the module; failing to do that, attempts to use the module will fail
5320 because of missing dependent modules. The @code{source-module-closure}
5321 procedure computes the closure of a module by looking at its source file
5322 headers, which comes in handy in this case:
5323
5324 @example
5325 (use-modules (guix modules)) ;for 'source-module-closure'
5326
5327 (with-imported-modules (source-module-closure
5328 '((guix build utils)
5329 (gnu build vm)))
5330 (gexp->derivation "something-with-vms"
5331 #~(begin
5332 (use-modules (guix build utils)
5333 (gnu build vm))
5334 @dots{})))
5335 @end example
5336
5337 @cindex extensions, for gexps
5338 @findex with-extensions
5339 In the same vein, sometimes you want to import not just pure-Scheme
5340 modules, but also ``extensions'' such as Guile bindings to C libraries
5341 or other ``full-blown'' packages. Say you need the @code{guile-json}
5342 package available on the build side, here's how you would do it:
5343
5344 @example
5345 (use-modules (gnu packages guile)) ;for 'guile-json'
5346
5347 (with-extensions (list guile-json)
5348 (gexp->derivation "something-with-json"
5349 #~(begin
5350 (use-modules (json))
5351 @dots{})))
5352 @end example
5353
5354 The syntactic form to construct gexps is summarized below.
5355
5356 @deffn {Scheme Syntax} #~@var{exp}
5357 @deffnx {Scheme Syntax} (gexp @var{exp})
5358 Return a G-expression containing @var{exp}. @var{exp} may contain one
5359 or more of the following forms:
5360
5361 @table @code
5362 @item #$@var{obj}
5363 @itemx (ungexp @var{obj})
5364 Introduce a reference to @var{obj}. @var{obj} may have one of the
5365 supported types, for example a package or a
5366 derivation, in which case the @code{ungexp} form is replaced by its
5367 output file name---e.g., @code{"/gnu/store/@dots{}-coreutils-8.22}.
5368
5369 If @var{obj} is a list, it is traversed and references to supported
5370 objects are substituted similarly.
5371
5372 If @var{obj} is another gexp, its contents are inserted and its
5373 dependencies are added to those of the containing gexp.
5374
5375 If @var{obj} is another kind of object, it is inserted as is.
5376
5377 @item #$@var{obj}:@var{output}
5378 @itemx (ungexp @var{obj} @var{output})
5379 This is like the form above, but referring explicitly to the
5380 @var{output} of @var{obj}---this is useful when @var{obj} produces
5381 multiple outputs (@pxref{Packages with Multiple Outputs}).
5382
5383 @item #+@var{obj}
5384 @itemx #+@var{obj}:output
5385 @itemx (ungexp-native @var{obj})
5386 @itemx (ungexp-native @var{obj} @var{output})
5387 Same as @code{ungexp}, but produces a reference to the @emph{native}
5388 build of @var{obj} when used in a cross compilation context.
5389
5390 @item #$output[:@var{output}]
5391 @itemx (ungexp output [@var{output}])
5392 Insert a reference to derivation output @var{output}, or to the main
5393 output when @var{output} is omitted.
5394
5395 This only makes sense for gexps passed to @code{gexp->derivation}.
5396
5397 @item #$@@@var{lst}
5398 @itemx (ungexp-splicing @var{lst})
5399 Like the above, but splices the contents of @var{lst} inside the
5400 containing list.
5401
5402 @item #+@@@var{lst}
5403 @itemx (ungexp-native-splicing @var{lst})
5404 Like the above, but refers to native builds of the objects listed in
5405 @var{lst}.
5406
5407 @end table
5408
5409 G-expressions created by @code{gexp} or @code{#~} are run-time objects
5410 of the @code{gexp?} type (see below.)
5411 @end deffn
5412
5413 @deffn {Scheme Syntax} with-imported-modules @var{modules} @var{body}@dots{}
5414 Mark the gexps defined in @var{body}@dots{} as requiring @var{modules}
5415 in their execution environment.
5416
5417 Each item in @var{modules} can be the name of a module, such as
5418 @code{(guix build utils)}, or it can be a module name, followed by an
5419 arrow, followed by a file-like object:
5420
5421 @example
5422 `((guix build utils)
5423 (guix gcrypt)
5424 ((guix config) => ,(scheme-file "config.scm"
5425 #~(define-module @dots{}))))
5426 @end example
5427
5428 @noindent
5429 In the example above, the first two modules are taken from the search
5430 path, and the last one is created from the given file-like object.
5431
5432 This form has @emph{lexical} scope: it has an effect on the gexps
5433 directly defined in @var{body}@dots{}, but not on those defined, say, in
5434 procedures called from @var{body}@dots{}.
5435 @end deffn
5436
5437 @deffn {Scheme Syntax} with-extensions @var{extensions} @var{body}@dots{}
5438 Mark the gexps defined in @var{body}@dots{} as requiring
5439 @var{extensions} in their build and execution environment.
5440 @var{extensions} is typically a list of package objects such as those
5441 defined in the @code{(gnu packages guile)} module.
5442
5443 Concretely, the packages listed in @var{extensions} are added to the
5444 load path while compiling imported modules in @var{body}@dots{}; they
5445 are also added to the load path of the gexp returned by
5446 @var{body}@dots{}.
5447 @end deffn
5448
5449 @deffn {Scheme Procedure} gexp? @var{obj}
5450 Return @code{#t} if @var{obj} is a G-expression.
5451 @end deffn
5452
5453 G-expressions are meant to be written to disk, either as code building
5454 some derivation, or as plain files in the store. The monadic procedures
5455 below allow you to do that (@pxref{The Store Monad}, for more
5456 information about monads.)
5457
5458 @deffn {Monadic Procedure} gexp->derivation @var{name} @var{exp} @
5459 [#:system (%current-system)] [#:target #f] [#:graft? #t] @
5460 [#:hash #f] [#:hash-algo #f] @
5461 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
5462 [#:module-path @var{%load-path}] @
5463 [#:effective-version "2.2"] @
5464 [#:references-graphs #f] [#:allowed-references #f] @
5465 [#:disallowed-references #f] @
5466 [#:leaked-env-vars #f] @
5467 [#:script-name (string-append @var{name} "-builder")] @
5468 [#:deprecation-warnings #f] @
5469 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
5470 Return a derivation @var{name} that runs @var{exp} (a gexp) with
5471 @var{guile-for-build} (a derivation) on @var{system}; @var{exp} is
5472 stored in a file called @var{script-name}. When @var{target} is true,
5473 it is used as the cross-compilation target triplet for packages referred
5474 to by @var{exp}.
5475
5476 @var{modules} is deprecated in favor of @code{with-imported-modules}.
5477 Its meaning is to
5478 make @var{modules} available in the evaluation context of @var{exp};
5479 @var{modules} is a list of names of Guile modules searched in
5480 @var{module-path} to be copied in the store, compiled, and made available in
5481 the load path during the execution of @var{exp}---e.g., @code{((guix
5482 build utils) (guix build gnu-build-system))}.
5483
5484 @var{effective-version} determines the string to use when adding extensions of
5485 @var{exp} (see @code{with-extensions}) to the search path---e.g., @code{"2.2"}.
5486
5487 @var{graft?} determines whether packages referred to by @var{exp} should be grafted when
5488 applicable.
5489
5490 When @var{references-graphs} is true, it must be a list of tuples of one of the
5491 following forms:
5492
5493 @example
5494 (@var{file-name} @var{package})
5495 (@var{file-name} @var{package} @var{output})
5496 (@var{file-name} @var{derivation})
5497 (@var{file-name} @var{derivation} @var{output})
5498 (@var{file-name} @var{store-item})
5499 @end example
5500
5501 The right-hand-side of each element of @var{references-graphs} is automatically made
5502 an input of the build process of @var{exp}. In the build environment, each
5503 @var{file-name} contains the reference graph of the corresponding item, in a simple
5504 text format.
5505
5506 @var{allowed-references} must be either @code{#f} or a list of output names and packages.
5507 In the latter case, the list denotes store items that the result is allowed to
5508 refer to. Any reference to another store item will lead to a build error.
5509 Similarly for @var{disallowed-references}, which can list items that must not be
5510 referenced by the outputs.
5511
5512 @var{deprecation-warnings} determines whether to show deprecation warnings while
5513 compiling modules. It can be @code{#f}, @code{#t}, or @code{'detailed}.
5514
5515 The other arguments are as for @code{derivation} (@pxref{Derivations}).
5516 @end deffn
5517
5518 @cindex file-like objects
5519 The @code{local-file}, @code{plain-file}, @code{computed-file},
5520 @code{program-file}, and @code{scheme-file} procedures below return
5521 @dfn{file-like objects}. That is, when unquoted in a G-expression,
5522 these objects lead to a file in the store. Consider this G-expression:
5523
5524 @example
5525 #~(system* #$(file-append glibc "/sbin/nscd") "-f"
5526 #$(local-file "/tmp/my-nscd.conf"))
5527 @end example
5528
5529 The effect here is to ``intern'' @file{/tmp/my-nscd.conf} by copying it
5530 to the store. Once expanded, for instance @i{via}
5531 @code{gexp->derivation}, the G-expression refers to that copy under
5532 @file{/gnu/store}; thus, modifying or removing the file in @file{/tmp}
5533 does not have any effect on what the G-expression does.
5534 @code{plain-file} can be used similarly; it differs in that the file
5535 content is directly passed as a string.
5536
5537 @deffn {Scheme Procedure} local-file @var{file} [@var{name}] @
5538 [#:recursive? #f] [#:select? (const #t)]
5539 Return an object representing local file @var{file} to add to the store; this
5540 object can be used in a gexp. If @var{file} is a relative file name, it is looked
5541 up relative to the source file where this form appears. @var{file} will be added to
5542 the store under @var{name}--by default the base name of @var{file}.
5543
5544 When @var{recursive?} is true, the contents of @var{file} are added recursively; if @var{file}
5545 designates a flat file and @var{recursive?} is true, its contents are added, and its
5546 permission bits are kept.
5547
5548 When @var{recursive?} is true, call @code{(@var{select?} @var{file}
5549 @var{stat})} for each directory entry, where @var{file} is the entry's
5550 absolute file name and @var{stat} is the result of @code{lstat}; exclude
5551 entries for which @var{select?} does not return true.
5552
5553 This is the declarative counterpart of the @code{interned-file} monadic
5554 procedure (@pxref{The Store Monad, @code{interned-file}}).
5555 @end deffn
5556
5557 @deffn {Scheme Procedure} plain-file @var{name} @var{content}
5558 Return an object representing a text file called @var{name} with the given
5559 @var{content} (a string or a bytevector) to be added to the store.
5560
5561 This is the declarative counterpart of @code{text-file}.
5562 @end deffn
5563
5564 @deffn {Scheme Procedure} computed-file @var{name} @var{gexp} @
5565 [#:options '(#:local-build? #t)]
5566 Return an object representing the store item @var{name}, a file or
5567 directory computed by @var{gexp}. @var{options}
5568 is a list of additional arguments to pass to @code{gexp->derivation}.
5569
5570 This is the declarative counterpart of @code{gexp->derivation}.
5571 @end deffn
5572
5573 @deffn {Monadic Procedure} gexp->script @var{name} @var{exp} @
5574 [#:guile (default-guile)] [#:module-path %load-path]
5575 Return an executable script @var{name} that runs @var{exp} using
5576 @var{guile}, with @var{exp}'s imported modules in its search path.
5577 Look up @var{exp}'s modules in @var{module-path}.
5578
5579 The example below builds a script that simply invokes the @command{ls}
5580 command:
5581
5582 @example
5583 (use-modules (guix gexp) (gnu packages base))
5584
5585 (gexp->script "list-files"
5586 #~(execl #$(file-append coreutils "/bin/ls")
5587 "ls"))
5588 @end example
5589
5590 When ``running'' it through the store (@pxref{The Store Monad,
5591 @code{run-with-store}}), we obtain a derivation that produces an
5592 executable file @file{/gnu/store/@dots{}-list-files} along these lines:
5593
5594 @example
5595 #!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
5596 !#
5597 (execl "/gnu/store/@dots{}-coreutils-8.22"/bin/ls" "ls")
5598 @end example
5599 @end deffn
5600
5601 @deffn {Scheme Procedure} program-file @var{name} @var{exp} @
5602 [#:guile #f] [#:module-path %load-path]
5603 Return an object representing the executable store item @var{name} that
5604 runs @var{gexp}. @var{guile} is the Guile package used to execute that
5605 script. Imported modules of @var{gexp} are looked up in @var{module-path}.
5606
5607 This is the declarative counterpart of @code{gexp->script}.
5608 @end deffn
5609
5610 @deffn {Monadic Procedure} gexp->file @var{name} @var{exp} @
5611 [#:set-load-path? #t] [#:module-path %load-path] @
5612 [#:splice? #f] @
5613 [#:guile (default-guile)]
5614 Return a derivation that builds a file @var{name} containing @var{exp}.
5615 When @var{splice?} is true, @var{exp} is considered to be a list of
5616 expressions that will be spliced in the resulting file.
5617
5618 When @var{set-load-path?} is true, emit code in the resulting file to
5619 set @code{%load-path} and @code{%load-compiled-path} to honor
5620 @var{exp}'s imported modules. Look up @var{exp}'s modules in
5621 @var{module-path}.
5622
5623 The resulting file holds references to all the dependencies of @var{exp}
5624 or a subset thereof.
5625 @end deffn
5626
5627 @deffn {Scheme Procedure} scheme-file @var{name} @var{exp} [#:splice? #f]
5628 Return an object representing the Scheme file @var{name} that contains
5629 @var{exp}.
5630
5631 This is the declarative counterpart of @code{gexp->file}.
5632 @end deffn
5633
5634 @deffn {Monadic Procedure} text-file* @var{name} @var{text} @dots{}
5635 Return as a monadic value a derivation that builds a text file
5636 containing all of @var{text}. @var{text} may list, in addition to
5637 strings, objects of any type that can be used in a gexp: packages,
5638 derivations, local file objects, etc. The resulting store file holds
5639 references to all these.
5640
5641 This variant should be preferred over @code{text-file} anytime the file
5642 to create will reference items from the store. This is typically the
5643 case when building a configuration file that embeds store file names,
5644 like this:
5645
5646 @example
5647 (define (profile.sh)
5648 ;; Return the name of a shell script in the store that
5649 ;; initializes the 'PATH' environment variable.
5650 (text-file* "profile.sh"
5651 "export PATH=" coreutils "/bin:"
5652 grep "/bin:" sed "/bin\n"))
5653 @end example
5654
5655 In this example, the resulting @file{/gnu/store/@dots{}-profile.sh} file
5656 will reference @var{coreutils}, @var{grep}, and @var{sed}, thereby
5657 preventing them from being garbage-collected during its lifetime.
5658 @end deffn
5659
5660 @deffn {Scheme Procedure} mixed-text-file @var{name} @var{text} @dots{}
5661 Return an object representing store file @var{name} containing
5662 @var{text}. @var{text} is a sequence of strings and file-like objects,
5663 as in:
5664
5665 @example
5666 (mixed-text-file "profile"
5667 "export PATH=" coreutils "/bin:" grep "/bin")
5668 @end example
5669
5670 This is the declarative counterpart of @code{text-file*}.
5671 @end deffn
5672
5673 @deffn {Scheme Procedure} file-union @var{name} @var{files}
5674 Return a @code{<computed-file>} that builds a directory containing all of @var{files}.
5675 Each item in @var{files} must be a two-element list where the first element is the
5676 file name to use in the new directory, and the second element is a gexp
5677 denoting the target file. Here's an example:
5678
5679 @example
5680 (file-union "etc"
5681 `(("hosts" ,(plain-file "hosts"
5682 "127.0.0.1 localhost"))
5683 ("bashrc" ,(plain-file "bashrc"
5684 "alias ls='ls --color=auto'"))))
5685 @end example
5686
5687 This yields an @code{etc} directory containing these two files.
5688 @end deffn
5689
5690 @deffn {Scheme Procedure} directory-union @var{name} @var{things}
5691 Return a directory that is the union of @var{things}, where @var{things} is a list of
5692 file-like objects denoting directories. For example:
5693
5694 @example
5695 (directory-union "guile+emacs" (list guile emacs))
5696 @end example
5697
5698 yields a directory that is the union of the @code{guile} and @code{emacs} packages.
5699 @end deffn
5700
5701 @deffn {Scheme Procedure} file-append @var{obj} @var{suffix} @dots{}
5702 Return a file-like object that expands to the concatenation of @var{obj}
5703 and @var{suffix}, where @var{obj} is a lowerable object and each
5704 @var{suffix} is a string.
5705
5706 As an example, consider this gexp:
5707
5708 @example
5709 (gexp->script "run-uname"
5710 #~(system* #$(file-append coreutils
5711 "/bin/uname")))
5712 @end example
5713
5714 The same effect could be achieved with:
5715
5716 @example
5717 (gexp->script "run-uname"
5718 #~(system* (string-append #$coreutils
5719 "/bin/uname")))
5720 @end example
5721
5722 There is one difference though: in the @code{file-append} case, the
5723 resulting script contains the absolute file name as a string, whereas in
5724 the second case, the resulting script contains a @code{(string-append
5725 @dots{})} expression to construct the file name @emph{at run time}.
5726 @end deffn
5727
5728
5729 Of course, in addition to gexps embedded in ``host'' code, there are
5730 also modules containing build tools. To make it clear that they are
5731 meant to be used in the build stratum, these modules are kept in the
5732 @code{(guix build @dots{})} name space.
5733
5734 @cindex lowering, of high-level objects in gexps
5735 Internally, high-level objects are @dfn{lowered}, using their compiler,
5736 to either derivations or store items. For instance, lowering a package
5737 yields a derivation, and lowering a @code{plain-file} yields a store
5738 item. This is achieved using the @code{lower-object} monadic procedure.
5739
5740 @deffn {Monadic Procedure} lower-object @var{obj} [@var{system}] @
5741 [#:target #f]
5742 Return as a value in @var{%store-monad} the derivation or store item
5743 corresponding to @var{obj} for @var{system}, cross-compiling for
5744 @var{target} if @var{target} is true. @var{obj} must be an object that
5745 has an associated gexp compiler, such as a @code{<package>}.
5746 @end deffn
5747
5748 @node Invoking guix repl
5749 @section Invoking @command{guix repl}
5750
5751 @cindex REPL, read-eval-print loop
5752 The @command{guix repl} command spawns a Guile @dfn{read-eval-print loop}
5753 (REPL) for interactive programming (@pxref{Using Guile Interactively,,, guile,
5754 GNU Guile Reference Manual}). Compared to just launching the @command{guile}
5755 command, @command{guix repl} guarantees that all the Guix modules and all its
5756 dependencies are available in the search path. You can use it this way:
5757
5758 @example
5759 $ guix repl
5760 scheme@@(guile-user)> ,use (gnu packages base)
5761 scheme@@(guile-user)> coreutils
5762 $1 = #<package coreutils@@8.29 gnu/packages/base.scm:327 3e28300>
5763 @end example
5764
5765 @cindex inferiors
5766 In addition, @command{guix repl} implements a simple machine-readable REPL
5767 protocol for use by @code{(guix inferior)}, a facility to interact with
5768 @dfn{inferiors}, separate processes running a potentially different revision
5769 of Guix.
5770
5771 The available options are as follows:
5772
5773 @table @code
5774 @item --type=@var{type}
5775 @itemx -t @var{type}
5776 Start a REPL of the given @var{TYPE}, which can be one of the following:
5777
5778 @table @code
5779 @item guile
5780 This is default, and it spawns a standard full-featured Guile REPL.
5781 @item machine
5782 Spawn a REPL that uses the machine-readable protocol. This is the protocol
5783 that the @code{(guix inferior)} module speaks.
5784 @end table
5785
5786 @item --listen=@var{endpoint}
5787 By default, @command{guix repl} reads from standard input and writes to
5788 standard output. When this option is passed, it will instead listen for
5789 connections on @var{endpoint}. Here are examples of valid options:
5790
5791 @table @code
5792 @item --listen=tcp:37146
5793 Accept connections on localhost on port 37146.
5794
5795 @item --listen=unix:/tmp/socket
5796 Accept connections on the Unix-domain socket @file{/tmp/socket}.
5797 @end table
5798 @end table
5799
5800 @c *********************************************************************
5801 @node Utilities
5802 @chapter Utilities
5803
5804 This section describes Guix command-line utilities. Some of them are
5805 primarily targeted at developers and users who write new package
5806 definitions, while others are more generally useful. They complement
5807 the Scheme programming interface of Guix in a convenient way.
5808
5809 @menu
5810 * Invoking guix build:: Building packages from the command line.
5811 * Invoking guix edit:: Editing package definitions.
5812 * Invoking guix download:: Downloading a file and printing its hash.
5813 * Invoking guix hash:: Computing the cryptographic hash of a file.
5814 * Invoking guix import:: Importing package definitions.
5815 * Invoking guix refresh:: Updating package definitions.
5816 * Invoking guix lint:: Finding errors in package definitions.
5817 * Invoking guix size:: Profiling disk usage.
5818 * Invoking guix graph:: Visualizing the graph of packages.
5819 * Invoking guix environment:: Setting up development environments.
5820 * Invoking guix publish:: Sharing substitutes.
5821 * Invoking guix challenge:: Challenging substitute servers.
5822 * Invoking guix copy:: Copying to and from a remote store.
5823 * Invoking guix container:: Process isolation.
5824 * Invoking guix weather:: Assessing substitute availability.
5825 @end menu
5826
5827 @node Invoking guix build
5828 @section Invoking @command{guix build}
5829
5830 @cindex package building
5831 @cindex @command{guix build}
5832 The @command{guix build} command builds packages or derivations and
5833 their dependencies, and prints the resulting store paths. Note that it
5834 does not modify the user's profile---this is the job of the
5835 @command{guix package} command (@pxref{Invoking guix package}). Thus,
5836 it is mainly useful for distribution developers.
5837
5838 The general syntax is:
5839
5840 @example
5841 guix build @var{options} @var{package-or-derivation}@dots{}
5842 @end example
5843
5844 As an example, the following command builds the latest versions of Emacs
5845 and of Guile, displays their build logs, and finally displays the
5846 resulting directories:
5847
5848 @example
5849 guix build emacs guile
5850 @end example
5851
5852 Similarly, the following command builds all the available packages:
5853
5854 @example
5855 guix build --quiet --keep-going \
5856 `guix package -A | cut -f1,2 --output-delimiter=@@`
5857 @end example
5858
5859 @var{package-or-derivation} may be either the name of a package found in
5860 the software distribution such as @code{coreutils} or
5861 @code{coreutils@@8.20}, or a derivation such as
5862 @file{/gnu/store/@dots{}-coreutils-8.19.drv}. In the former case, a
5863 package with the corresponding name (and optionally version) is searched
5864 for among the GNU distribution modules (@pxref{Package Modules}).
5865
5866 Alternatively, the @code{--expression} option may be used to specify a
5867 Scheme expression that evaluates to a package; this is useful when
5868 disambiguating among several same-named packages or package variants is
5869 needed.
5870
5871 There may be zero or more @var{options}. The available options are
5872 described in the subsections below.
5873
5874 @menu
5875 * Common Build Options:: Build options for most commands.
5876 * Package Transformation Options:: Creating variants of packages.
5877 * Additional Build Options:: Options specific to 'guix build'.
5878 * Debugging Build Failures:: Real life packaging experience.
5879 @end menu
5880
5881 @node Common Build Options
5882 @subsection Common Build Options
5883
5884 A number of options that control the build process are common to
5885 @command{guix build} and other commands that can spawn builds, such as
5886 @command{guix package} or @command{guix archive}. These are the
5887 following:
5888
5889 @table @code
5890
5891 @item --load-path=@var{directory}
5892 @itemx -L @var{directory}
5893 Add @var{directory} to the front of the package module search path
5894 (@pxref{Package Modules}).
5895
5896 This allows users to define their own packages and make them visible to
5897 the command-line tools.
5898
5899 @item --keep-failed
5900 @itemx -K
5901 Keep the build tree of failed builds. Thus, if a build fails, its build
5902 tree is kept under @file{/tmp}, in a directory whose name is shown at
5903 the end of the build log. This is useful when debugging build issues.
5904 @xref{Debugging Build Failures}, for tips and tricks on how to debug
5905 build issues.
5906
5907 @item --keep-going
5908 @itemx -k
5909 Keep going when some of the derivations fail to build; return only once
5910 all the builds have either completed or failed.
5911
5912 The default behavior is to stop as soon as one of the specified
5913 derivations has failed.
5914
5915 @item --dry-run
5916 @itemx -n
5917 Do not build the derivations.
5918
5919 @anchor{fallback-option}
5920 @item --fallback
5921 When substituting a pre-built binary fails, fall back to building
5922 packages locally (@pxref{Substitution Failure}).
5923
5924 @item --substitute-urls=@var{urls}
5925 @anchor{client-substitute-urls}
5926 Consider @var{urls} the whitespace-separated list of substitute source
5927 URLs, overriding the default list of URLs of @command{guix-daemon}
5928 (@pxref{daemon-substitute-urls,, @command{guix-daemon} URLs}).
5929
5930 This means that substitutes may be downloaded from @var{urls}, provided
5931 they are signed by a key authorized by the system administrator
5932 (@pxref{Substitutes}).
5933
5934 When @var{urls} is the empty string, substitutes are effectively
5935 disabled.
5936
5937 @item --no-substitutes
5938 Do not use substitutes for build products. That is, always build things
5939 locally instead of allowing downloads of pre-built binaries
5940 (@pxref{Substitutes}).
5941
5942 @item --no-grafts
5943 Do not ``graft'' packages. In practice, this means that package updates
5944 available as grafts are not applied. @xref{Security Updates}, for more
5945 information on grafts.
5946
5947 @item --rounds=@var{n}
5948 Build each derivation @var{n} times in a row, and raise an error if
5949 consecutive build results are not bit-for-bit identical.
5950
5951 This is a useful way to detect non-deterministic builds processes.
5952 Non-deterministic build processes are a problem because they make it
5953 practically impossible for users to @emph{verify} whether third-party
5954 binaries are genuine. @xref{Invoking guix challenge}, for more.
5955
5956 Note that, currently, the differing build results are not kept around,
5957 so you will have to manually investigate in case of an error---e.g., by
5958 stashing one of the build results with @code{guix archive --export}
5959 (@pxref{Invoking guix archive}), then rebuilding, and finally comparing
5960 the two results.
5961
5962 @item --no-build-hook
5963 Do not attempt to offload builds @i{via} the ``build hook'' of the daemon
5964 (@pxref{Daemon Offload Setup}). That is, always build things locally
5965 instead of offloading builds to remote machines.
5966
5967 @item --max-silent-time=@var{seconds}
5968 When the build or substitution process remains silent for more than
5969 @var{seconds}, terminate it and report a build failure.
5970
5971 By default, the daemon's setting is honored (@pxref{Invoking
5972 guix-daemon, @code{--max-silent-time}}).
5973
5974 @item --timeout=@var{seconds}
5975 Likewise, when the build or substitution process lasts for more than
5976 @var{seconds}, terminate it and report a build failure.
5977
5978 By default, the daemon's setting is honored (@pxref{Invoking
5979 guix-daemon, @code{--timeout}}).
5980
5981 @item --verbosity=@var{level}
5982 Use the given verbosity level. @var{level} must be an integer between 0
5983 and 5; higher means more verbose output. Setting a level of 4 or more
5984 may be helpful when debugging setup issues with the build daemon.
5985
5986 @item --cores=@var{n}
5987 @itemx -c @var{n}
5988 Allow the use of up to @var{n} CPU cores for the build. The special
5989 value @code{0} means to use as many CPU cores as available.
5990
5991 @item --max-jobs=@var{n}
5992 @itemx -M @var{n}
5993 Allow at most @var{n} build jobs in parallel. @xref{Invoking
5994 guix-daemon, @code{--max-jobs}}, for details about this option and the
5995 equivalent @command{guix-daemon} option.
5996
5997 @end table
5998
5999 Behind the scenes, @command{guix build} is essentially an interface to
6000 the @code{package-derivation} procedure of the @code{(guix packages)}
6001 module, and to the @code{build-derivations} procedure of the @code{(guix
6002 derivations)} module.
6003
6004 In addition to options explicitly passed on the command line,
6005 @command{guix build} and other @command{guix} commands that support
6006 building honor the @code{GUIX_BUILD_OPTIONS} environment variable.
6007
6008 @defvr {Environment Variable} GUIX_BUILD_OPTIONS
6009 Users can define this variable to a list of command line options that
6010 will automatically be used by @command{guix build} and other
6011 @command{guix} commands that can perform builds, as in the example
6012 below:
6013
6014 @example
6015 $ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
6016 @end example
6017
6018 These options are parsed independently, and the result is appended to
6019 the parsed command-line options.
6020 @end defvr
6021
6022
6023 @node Package Transformation Options
6024 @subsection Package Transformation Options
6025
6026 @cindex package variants
6027 Another set of command-line options supported by @command{guix build}
6028 and also @command{guix package} are @dfn{package transformation
6029 options}. These are options that make it possible to define @dfn{package
6030 variants}---for instance, packages built from different source code.
6031 This is a convenient way to create customized packages on the fly
6032 without having to type in the definitions of package variants
6033 (@pxref{Defining Packages}).
6034
6035 @table @code
6036
6037 @item --with-source=@var{source}
6038 @itemx --with-source=@var{package}=@var{source}
6039 @itemx --with-source=@var{package}@@@var{version}=@var{source}
6040 Use @var{source} as the source of @var{package}, and @var{version} as
6041 its version number.
6042 @var{source} must be a file name or a URL, as for @command{guix
6043 download} (@pxref{Invoking guix download}).
6044
6045 When @var{package} is omitted,
6046 it is taken to be the package name specified on the
6047 command line that matches the base of @var{source}---e.g.,
6048 if @var{source} is @code{/src/guile-2.0.10.tar.gz}, the corresponding
6049 package is @code{guile}.
6050
6051 Likewise, when @var{version} is omitted, the version string is inferred from
6052 @var{source}; in the previous example, it is @code{2.0.10}.
6053
6054 This option allows users to try out versions of packages other than the
6055 one provided by the distribution. The example below downloads
6056 @file{ed-1.7.tar.gz} from a GNU mirror and uses that as the source for
6057 the @code{ed} package:
6058
6059 @example
6060 guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
6061 @end example
6062
6063 As a developer, @code{--with-source} makes it easy to test release
6064 candidates:
6065
6066 @example
6067 guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
6068 @end example
6069
6070 @dots{} or to build from a checkout in a pristine environment:
6071
6072 @example
6073 $ git clone git://git.sv.gnu.org/guix.git
6074 $ guix build guix --with-source=guix@@1.0=./guix
6075 @end example
6076
6077 @item --with-input=@var{package}=@var{replacement}
6078 Replace dependency on @var{package} by a dependency on
6079 @var{replacement}. @var{package} must be a package name, and
6080 @var{replacement} must be a package specification such as @code{guile}
6081 or @code{guile@@1.8}.
6082
6083 For instance, the following command builds Guix, but replaces its
6084 dependency on the current stable version of Guile with a dependency on
6085 the legacy version of Guile, @code{guile@@2.0}:
6086
6087 @example
6088 guix build --with-input=guile=guile@@2.0 guix
6089 @end example
6090
6091 This is a recursive, deep replacement. So in this example, both
6092 @code{guix} and its dependency @code{guile-json} (which also depends on
6093 @code{guile}) get rebuilt against @code{guile@@2.0}.
6094
6095 This is implemented using the @code{package-input-rewriting} Scheme
6096 procedure (@pxref{Defining Packages, @code{package-input-rewriting}}).
6097
6098 @item --with-graft=@var{package}=@var{replacement}
6099 This is similar to @code{--with-input} but with an important difference:
6100 instead of rebuilding the whole dependency chain, @var{replacement} is
6101 built and then @dfn{grafted} onto the binaries that were initially
6102 referring to @var{package}. @xref{Security Updates}, for more
6103 information on grafts.
6104
6105 For example, the command below grafts version 3.5.4 of GnuTLS onto Wget
6106 and all its dependencies, replacing references to the version of GnuTLS
6107 they currently refer to:
6108
6109 @example
6110 guix build --with-graft=gnutls=gnutls@@3.5.4 wget
6111 @end example
6112
6113 This has the advantage of being much faster than rebuilding everything.
6114 But there is a caveat: it works if and only if @var{package} and
6115 @var{replacement} are strictly compatible---for example, if they provide
6116 a library, the application binary interface (ABI) of those libraries
6117 must be compatible. If @var{replacement} is somehow incompatible with
6118 @var{package}, then the resulting package may be unusable. Use with
6119 care!
6120
6121 @end table
6122
6123 @node Additional Build Options
6124 @subsection Additional Build Options
6125
6126 The command-line options presented below are specific to @command{guix
6127 build}.
6128
6129 @table @code
6130
6131 @item --quiet
6132 @itemx -q
6133 Build quietly, without displaying the build log. Upon completion, the
6134 build log is kept in @file{/var} (or similar) and can always be
6135 retrieved using the @option{--log-file} option.
6136
6137 @item --file=@var{file}
6138 @itemx -f @var{file}
6139
6140 Build the package or derivation that the code within @var{file}
6141 evaluates to.
6142
6143 As an example, @var{file} might contain a package definition like this
6144 (@pxref{Defining Packages}):
6145
6146 @example
6147 @verbatiminclude package-hello.scm
6148 @end example
6149
6150 @item --expression=@var{expr}
6151 @itemx -e @var{expr}
6152 Build the package or derivation @var{expr} evaluates to.
6153
6154 For example, @var{expr} may be @code{(@@ (gnu packages guile)
6155 guile-1.8)}, which unambiguously designates this specific variant of
6156 version 1.8 of Guile.
6157
6158 Alternatively, @var{expr} may be a G-expression, in which case it is used
6159 as a build program passed to @code{gexp->derivation}
6160 (@pxref{G-Expressions}).
6161
6162 Lastly, @var{expr} may refer to a zero-argument monadic procedure
6163 (@pxref{The Store Monad}). The procedure must return a derivation as a
6164 monadic value, which is then passed through @code{run-with-store}.
6165
6166 @item --source
6167 @itemx -S
6168 Build the source derivations of the packages, rather than the packages
6169 themselves.
6170
6171 For instance, @code{guix build -S gcc} returns something like
6172 @file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, which is the GCC
6173 source tarball.
6174
6175 The returned source tarball is the result of applying any patches and
6176 code snippets specified in the package @code{origin} (@pxref{Defining
6177 Packages}).
6178
6179 @item --sources
6180 Fetch and return the source of @var{package-or-derivation} and all their
6181 dependencies, recursively. This is a handy way to obtain a local copy
6182 of all the source code needed to build @var{packages}, allowing you to
6183 eventually build them even without network access. It is an extension
6184 of the @code{--source} option and can accept one of the following
6185 optional argument values:
6186
6187 @table @code
6188 @item package
6189 This value causes the @code{--sources} option to behave in the same way
6190 as the @code{--source} option.
6191
6192 @item all
6193 Build the source derivations of all packages, including any source that
6194 might be listed as @code{inputs}. This is the default value.
6195
6196 @example
6197 $ guix build --sources tzdata
6198 The following derivations will be built:
6199 /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
6200 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
6201 @end example
6202
6203 @item transitive
6204 Build the source derivations of all packages, as well of all transitive
6205 inputs to the packages. This can be used e.g. to
6206 prefetch package source for later offline building.
6207
6208 @example
6209 $ guix build --sources=transitive tzdata
6210 The following derivations will be built:
6211 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
6212 /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
6213 /gnu/store/@dots{}-grep-2.21.tar.xz.drv
6214 /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
6215 /gnu/store/@dots{}-make-4.1.tar.xz.drv
6216 /gnu/store/@dots{}-bash-4.3.tar.xz.drv
6217 @dots{}
6218 @end example
6219
6220 @end table
6221
6222 @item --system=@var{system}
6223 @itemx -s @var{system}
6224 Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
6225 the system type of the build host.
6226
6227 @quotation Note
6228 The @code{--system} flag is for @emph{native} compilation and must not
6229 be confused with cross-compilation. See @code{--target} below for
6230 information on cross-compilation.
6231 @end quotation
6232
6233 An example use of this is on Linux-based systems, which can emulate
6234 different personalities. For instance, passing
6235 @code{--system=i686-linux} on an @code{x86_64-linux} system or
6236 @code{--system=armhf-linux} on an @code{aarch64-linux} system allows you
6237 to build packages in a complete 32-bit environment.
6238
6239 @quotation Note
6240 Building for an @code{armhf-linux} system is unconditionally enabled on
6241 @code{aarch64-linux} machines, although certain aarch64 chipsets do not
6242 allow for this functionality, notably the ThunderX.
6243 @end quotation
6244
6245 Similarly, when transparent emulation with QEMU and @code{binfmt_misc}
6246 is enabled (@pxref{Virtualization Services,
6247 @code{qemu-binfmt-service-type}}), you can build for any system for
6248 which a QEMU @code{binfmt_misc} handler is installed.
6249
6250 Builds for a system other than that of the machine you are using can
6251 also be offloaded to a remote machine of the right architecture.
6252 @xref{Daemon Offload Setup}, for more information on offloading.
6253
6254 @item --target=@var{triplet}
6255 @cindex cross-compilation
6256 Cross-build for @var{triplet}, which must be a valid GNU triplet, such
6257 as @code{"mips64el-linux-gnu"} (@pxref{Specifying target triplets, GNU
6258 configuration triplets,, autoconf, Autoconf}).
6259
6260 @anchor{build-check}
6261 @item --check
6262 @cindex determinism, checking
6263 @cindex reproducibility, checking
6264 Rebuild @var{package-or-derivation}, which are already available in the
6265 store, and raise an error if the build results are not bit-for-bit
6266 identical.
6267
6268 This mechanism allows you to check whether previously installed
6269 substitutes are genuine (@pxref{Substitutes}), or whether the build result
6270 of a package is deterministic. @xref{Invoking guix challenge}, for more
6271 background information and tools.
6272
6273 When used in conjunction with @option{--keep-failed}, the differing
6274 output is kept in the store, under @file{/gnu/store/@dots{}-check}.
6275 This makes it easy to look for differences between the two results.
6276
6277 @item --repair
6278 @cindex repairing store items
6279 @cindex corruption, recovering from
6280 Attempt to repair the specified store items, if they are corrupt, by
6281 re-downloading or rebuilding them.
6282
6283 This operation is not atomic and thus restricted to @code{root}.
6284
6285 @item --derivations
6286 @itemx -d
6287 Return the derivation paths, not the output paths, of the given
6288 packages.
6289
6290 @item --root=@var{file}
6291 @itemx -r @var{file}
6292 @cindex GC roots, adding
6293 @cindex garbage collector roots, adding
6294 Make @var{file} a symlink to the result, and register it as a garbage
6295 collector root.
6296
6297 Consequently, the results of this @command{guix build} invocation are
6298 protected from garbage collection until @var{file} is removed. When
6299 that option is omitted, build results are eligible for garbage
6300 collection as soon as the build completes. @xref{Invoking guix gc}, for
6301 more on GC roots.
6302
6303 @item --log-file
6304 @cindex build logs, access
6305 Return the build log file names or URLs for the given
6306 @var{package-or-derivation}, or raise an error if build logs are
6307 missing.
6308
6309 This works regardless of how packages or derivations are specified. For
6310 instance, the following invocations are equivalent:
6311
6312 @example
6313 guix build --log-file `guix build -d guile`
6314 guix build --log-file `guix build guile`
6315 guix build --log-file guile
6316 guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
6317 @end example
6318
6319 If a log is unavailable locally, and unless @code{--no-substitutes} is
6320 passed, the command looks for a corresponding log on one of the
6321 substitute servers (as specified with @code{--substitute-urls}.)
6322
6323 So for instance, imagine you want to see the build log of GDB on MIPS,
6324 but you are actually on an @code{x86_64} machine:
6325
6326 @example
6327 $ guix build --log-file gdb -s mips64el-linux
6328 https://hydra.gnu.org/log/@dots{}-gdb-7.10
6329 @end example
6330
6331 You can freely access a huge library of build logs!
6332 @end table
6333
6334 @node Debugging Build Failures
6335 @subsection Debugging Build Failures
6336
6337 @cindex build failures, debugging
6338 When defining a new package (@pxref{Defining Packages}), you will
6339 probably find yourself spending some time debugging and tweaking the
6340 build until it succeeds. To do that, you need to operate the build
6341 commands yourself in an environment as close as possible to the one the
6342 build daemon uses.
6343
6344 To that end, the first thing to do is to use the @option{--keep-failed}
6345 or @option{-K} option of @command{guix build}, which will keep the
6346 failed build tree in @file{/tmp} or whatever directory you specified as
6347 @code{TMPDIR} (@pxref{Invoking guix build, @code{--keep-failed}}).
6348
6349 From there on, you can @command{cd} to the failed build tree and source
6350 the @file{environment-variables} file, which contains all the
6351 environment variable definitions that were in place when the build
6352 failed. So let's say you're debugging a build failure in package
6353 @code{foo}; a typical session would look like this:
6354
6355 @example
6356 $ guix build foo -K
6357 @dots{} @i{build fails}
6358 $ cd /tmp/guix-build-foo.drv-0
6359 $ source ./environment-variables
6360 $ cd foo-1.2
6361 @end example
6362
6363 Now, you can invoke commands as if you were the daemon (almost) and
6364 troubleshoot your build process.
6365
6366 Sometimes it happens that, for example, a package's tests pass when you
6367 run them manually but they fail when the daemon runs them. This can
6368 happen because the daemon runs builds in containers where, unlike in our
6369 environment above, network access is missing, @file{/bin/sh} does not
6370 exist, etc. (@pxref{Build Environment Setup}).
6371
6372 In such cases, you may need to run inspect the build process from within
6373 a container similar to the one the build daemon creates:
6374
6375 @example
6376 $ guix build -K foo
6377 @dots{}
6378 $ cd /tmp/guix-build-foo.drv-0
6379 $ guix environment --no-grafts -C foo --ad-hoc strace gdb
6380 [env]# source ./environment-variables
6381 [env]# cd foo-1.2
6382 @end example
6383
6384 Here, @command{guix environment -C} creates a container and spawns a new
6385 shell in it (@pxref{Invoking guix environment}). The @command{--ad-hoc
6386 strace gdb} part adds the @command{strace} and @command{gdb} commands to
6387 the container, which would may find handy while debugging. The
6388 @option{--no-grafts} option makes sure we get the exact same
6389 environment, with ungrafted packages (@pxref{Security Updates}, for more
6390 info on grafts).
6391
6392 To get closer to a container like that used by the build daemon, we can
6393 remove @file{/bin/sh}:
6394
6395 @example
6396 [env]# rm /bin/sh
6397 @end example
6398
6399 (Don't worry, this is harmless: this is all happening in the throw-away
6400 container created by @command{guix environment}.)
6401
6402 The @command{strace} command is probably not in the search path, but we
6403 can run:
6404
6405 @example
6406 [env]# $GUIX_ENVIRONMENT/bin/strace -f -o log make check
6407 @end example
6408
6409 In this way, not only you will have reproduced the environment variables
6410 the daemon uses, you will also be running the build process in a container
6411 similar to the one the daemon uses.
6412
6413
6414 @node Invoking guix edit
6415 @section Invoking @command{guix edit}
6416
6417 @cindex @command{guix edit}
6418 @cindex package definition, editing
6419 So many packages, so many source files! The @command{guix edit} command
6420 facilitates the life of users and packagers by pointing their editor at
6421 the source file containing the definition of the specified packages.
6422 For instance:
6423
6424 @example
6425 guix edit gcc@@4.9 vim
6426 @end example
6427
6428 @noindent
6429 launches the program specified in the @code{VISUAL} or in the
6430 @code{EDITOR} environment variable to view the recipe of GCC@tie{}4.9.3
6431 and that of Vim.
6432
6433 If you are using a Guix Git checkout (@pxref{Building from Git}), or
6434 have created your own packages on @code{GUIX_PACKAGE_PATH}
6435 (@pxref{Package Modules}), you will be able to edit the package
6436 recipes. In other cases, you will be able to examine the read-only recipes
6437 for packages currently in the store.
6438
6439
6440 @node Invoking guix download
6441 @section Invoking @command{guix download}
6442
6443 @cindex @command{guix download}
6444 @cindex downloading package sources
6445 When writing a package definition, developers typically need to download
6446 a source tarball, compute its SHA256 hash, and write that
6447 hash in the package definition (@pxref{Defining Packages}). The
6448 @command{guix download} tool helps with this task: it downloads a file
6449 from the given URI, adds it to the store, and prints both its file name
6450 in the store and its SHA256 hash.
6451
6452 The fact that the downloaded file is added to the store saves bandwidth:
6453 when the developer eventually tries to build the newly defined package
6454 with @command{guix build}, the source tarball will not have to be
6455 downloaded again because it is already in the store. It is also a
6456 convenient way to temporarily stash files, which may be deleted
6457 eventually (@pxref{Invoking guix gc}).
6458
6459 The @command{guix download} command supports the same URIs as used in
6460 package definitions. In particular, it supports @code{mirror://} URIs.
6461 @code{https} URIs (HTTP over TLS) are supported @emph{provided} the
6462 Guile bindings for GnuTLS are available in the user's environment; when
6463 they are not available, an error is raised. @xref{Guile Preparations,
6464 how to install the GnuTLS bindings for Guile,, gnutls-guile,
6465 GnuTLS-Guile}, for more information.
6466
6467 @command{guix download} verifies HTTPS server certificates by loading
6468 the certificates of X.509 authorities from the directory pointed to by
6469 the @code{SSL_CERT_DIR} environment variable (@pxref{X.509
6470 Certificates}), unless @option{--no-check-certificate} is used.
6471
6472 The following options are available:
6473
6474 @table @code
6475 @item --format=@var{fmt}
6476 @itemx -f @var{fmt}
6477 Write the hash in the format specified by @var{fmt}. For more
6478 information on the valid values for @var{fmt}, @pxref{Invoking guix hash}.
6479
6480 @item --no-check-certificate
6481 Do not validate the X.509 certificates of HTTPS servers.
6482
6483 When using this option, you have @emph{absolutely no guarantee} that you
6484 are communicating with the authentic server responsible for the given
6485 URL, which makes you vulnerable to ``man-in-the-middle'' attacks.
6486
6487 @item --output=@var{file}
6488 @itemx -o @var{file}
6489 Save the downloaded file to @var{file} instead of adding it to the
6490 store.
6491 @end table
6492
6493 @node Invoking guix hash
6494 @section Invoking @command{guix hash}
6495
6496 @cindex @command{guix hash}
6497 The @command{guix hash} command computes the SHA256 hash of a file.
6498 It is primarily a convenience tool for anyone contributing to the
6499 distribution: it computes the cryptographic hash of a file, which can be
6500 used in the definition of a package (@pxref{Defining Packages}).
6501
6502 The general syntax is:
6503
6504 @example
6505 guix hash @var{option} @var{file}
6506 @end example
6507
6508 When @var{file} is @code{-} (a hyphen), @command{guix hash} computes the
6509 hash of data read from standard input. @command{guix hash} has the
6510 following options:
6511
6512 @table @code
6513
6514 @item --format=@var{fmt}
6515 @itemx -f @var{fmt}
6516 Write the hash in the format specified by @var{fmt}.
6517
6518 Supported formats: @code{nix-base32}, @code{base32}, @code{base16}
6519 (@code{hex} and @code{hexadecimal} can be used as well).
6520
6521 If the @option{--format} option is not specified, @command{guix hash}
6522 will output the hash in @code{nix-base32}. This representation is used
6523 in the definitions of packages.
6524
6525 @item --recursive
6526 @itemx -r
6527 Compute the hash on @var{file} recursively.
6528
6529 In this case, the hash is computed on an archive containing @var{file},
6530 including its children if it is a directory. Some of the metadata of
6531 @var{file} is part of the archive; for instance, when @var{file} is a
6532 regular file, the hash is different depending on whether @var{file} is
6533 executable or not. Metadata such as time stamps has no impact on the
6534 hash (@pxref{Invoking guix archive}).
6535 @c FIXME: Replace xref above with xref to an ``Archive'' section when
6536 @c it exists.
6537
6538 @item --exclude-vcs
6539 @itemx -x
6540 When combined with @option{--recursive}, exclude version control system
6541 directories (@file{.bzr}, @file{.git}, @file{.hg}, etc.)
6542
6543 @vindex git-fetch
6544 As an example, here is how you would compute the hash of a Git checkout,
6545 which is useful when using the @code{git-fetch} method (@pxref{origin
6546 Reference}):
6547
6548 @example
6549 $ git clone http://example.org/foo.git
6550 $ cd foo
6551 $ guix hash -rx .
6552 @end example
6553 @end table
6554
6555 @node Invoking guix import
6556 @section Invoking @command{guix import}
6557
6558 @cindex importing packages
6559 @cindex package import
6560 @cindex package conversion
6561 @cindex Invoking @command{guix import}
6562 The @command{guix import} command is useful for people who would like to
6563 add a package to the distribution with as little work as
6564 possible---a legitimate demand. The command knows of a few
6565 repositories from which it can ``import'' package metadata. The result
6566 is a package definition, or a template thereof, in the format we know
6567 (@pxref{Defining Packages}).
6568
6569 The general syntax is:
6570
6571 @example
6572 guix import @var{importer} @var{options}@dots{}
6573 @end example
6574
6575 @var{importer} specifies the source from which to import package
6576 metadata, and @var{options} specifies a package identifier and other
6577 options specific to @var{importer}. Currently, the available
6578 ``importers'' are:
6579
6580 @table @code
6581 @item gnu
6582 Import metadata for the given GNU package. This provides a template
6583 for the latest version of that GNU package, including the hash of its
6584 source tarball, and its canonical synopsis and description.
6585
6586 Additional information such as the package dependencies and its
6587 license needs to be figured out manually.
6588
6589 For example, the following command returns a package definition for
6590 GNU@tie{}Hello:
6591
6592 @example
6593 guix import gnu hello
6594 @end example
6595
6596 Specific command-line options are:
6597
6598 @table @code
6599 @item --key-download=@var{policy}
6600 As for @code{guix refresh}, specify the policy to handle missing OpenPGP
6601 keys when verifying the package signature. @xref{Invoking guix
6602 refresh, @code{--key-download}}.
6603 @end table
6604
6605 @item pypi
6606 @cindex pypi
6607 Import metadata from the @uref{https://pypi.python.org/, Python Package
6608 Index}@footnote{This functionality requires Guile-JSON to be installed.
6609 @xref{Requirements}.}. Information is taken from the JSON-formatted
6610 description available at @code{pypi.python.org} and usually includes all
6611 the relevant information, including package dependencies. For maximum
6612 efficiency, it is recommended to install the @command{unzip} utility, so
6613 that the importer can unzip Python wheels and gather data from them.
6614
6615 The command below imports metadata for the @code{itsdangerous} Python
6616 package:
6617
6618 @example
6619 guix import pypi itsdangerous
6620 @end example
6621
6622 @table @code
6623 @item --recursive
6624 @itemx -r
6625 Traverse the dependency graph of the given upstream package recursively
6626 and generate package expressions for all those packages that are not yet
6627 in Guix.
6628 @end table
6629
6630 @item gem
6631 @cindex gem
6632 Import metadata from @uref{https://rubygems.org/,
6633 RubyGems}@footnote{This functionality requires Guile-JSON to be
6634 installed. @xref{Requirements}.}. Information is taken from the
6635 JSON-formatted description available at @code{rubygems.org} and includes
6636 most relevant information, including runtime dependencies. There are
6637 some caveats, however. The metadata doesn't distinguish between
6638 synopses and descriptions, so the same string is used for both fields.
6639 Additionally, the details of non-Ruby dependencies required to build
6640 native extensions is unavailable and left as an exercise to the
6641 packager.
6642
6643 The command below imports metadata for the @code{rails} Ruby package:
6644
6645 @example
6646 guix import gem rails
6647 @end example
6648
6649 @table @code
6650 @item --recursive
6651 @itemx -r
6652 Traverse the dependency graph of the given upstream package recursively
6653 and generate package expressions for all those packages that are not yet
6654 in Guix.
6655 @end table
6656
6657 @item cpan
6658 @cindex CPAN
6659 Import metadata from @uref{https://www.metacpan.org/, MetaCPAN}@footnote{This
6660 functionality requires Guile-JSON to be installed.
6661 @xref{Requirements}.}.
6662 Information is taken from the JSON-formatted metadata provided through
6663 @uref{https://fastapi.metacpan.org/, MetaCPAN's API} and includes most
6664 relevant information, such as module dependencies. License information
6665 should be checked closely. If Perl is available in the store, then the
6666 @code{corelist} utility will be used to filter core modules out of the
6667 list of dependencies.
6668
6669 The command command below imports metadata for the @code{Acme::Boolean}
6670 Perl module:
6671
6672 @example
6673 guix import cpan Acme::Boolean
6674 @end example
6675
6676 @item cran
6677 @cindex CRAN
6678 @cindex Bioconductor
6679 Import metadata from @uref{https://cran.r-project.org/, CRAN}, the
6680 central repository for the @uref{http://r-project.org, GNU@tie{}R
6681 statistical and graphical environment}.
6682
6683 Information is extracted from the @code{DESCRIPTION} file of the package.
6684
6685 The command command below imports metadata for the @code{Cairo}
6686 R package:
6687
6688 @example
6689 guix import cran Cairo
6690 @end example
6691
6692 When @code{--recursive} is added, the importer will traverse the
6693 dependency graph of the given upstream package recursively and generate
6694 package expressions for all those packages that are not yet in Guix.
6695
6696 When @code{--archive=bioconductor} is added, metadata is imported from
6697 @uref{https://www.bioconductor.org/, Bioconductor}, a repository of R
6698 packages for for the analysis and comprehension of high-throughput
6699 genomic data in bioinformatics.
6700
6701 Information is extracted from the @code{DESCRIPTION} file of a package
6702 published on the web interface of the Bioconductor SVN repository.
6703
6704 The command below imports metadata for the @code{GenomicRanges}
6705 R package:
6706
6707 @example
6708 guix import cran --archive=bioconductor GenomicRanges
6709 @end example
6710
6711 @item texlive
6712 @cindex TeX Live
6713 @cindex CTAN
6714 Import metadata from @uref{http://www.ctan.org/, CTAN}, the
6715 comprehensive TeX archive network for TeX packages that are part of the
6716 @uref{https://www.tug.org/texlive/, TeX Live distribution}.
6717
6718 Information about the package is obtained through the XML API provided
6719 by CTAN, while the source code is downloaded from the SVN repository of
6720 the Tex Live project. This is done because the CTAN does not keep
6721 versioned archives.
6722
6723 The command command below imports metadata for the @code{fontspec}
6724 TeX package:
6725
6726 @example
6727 guix import texlive fontspec
6728 @end example
6729
6730 When @code{--archive=DIRECTORY} is added, the source code is downloaded
6731 not from the @file{latex} sub-directory of the @file{texmf-dist/source}
6732 tree in the TeX Live SVN repository, but from the specified sibling
6733 directory under the same root.
6734
6735 The command below imports metadata for the @code{ifxetex} package from
6736 CTAN while fetching the sources from the directory
6737 @file{texmf/source/generic}:
6738
6739 @example
6740 guix import texlive --archive=generic ifxetex
6741 @end example
6742
6743 @item json
6744 @cindex JSON, import
6745 Import package metadata from a local JSON file@footnote{This
6746 functionality requires Guile-JSON to be installed.
6747 @xref{Requirements}.}. Consider the following example package
6748 definition in JSON format:
6749
6750 @example
6751 @{
6752 "name": "hello",
6753 "version": "2.10",
6754 "source": "mirror://gnu/hello/hello-2.10.tar.gz",
6755 "build-system": "gnu",
6756 "home-page": "https://www.gnu.org/software/hello/",
6757 "synopsis": "Hello, GNU world: An example GNU package",
6758 "description": "GNU Hello prints a greeting.",
6759 "license": "GPL-3.0+",
6760 "native-inputs": ["gcc@@6"]
6761 @}
6762 @end example
6763
6764 The field names are the same as for the @code{<package>} record
6765 (@xref{Defining Packages}). References to other packages are provided
6766 as JSON lists of quoted package specification strings such as
6767 @code{guile} or @code{guile@@2.0}.
6768
6769 The importer also supports a more explicit source definition using the
6770 common fields for @code{<origin>} records:
6771
6772 @example
6773 @{
6774 @dots{}
6775 "source": @{
6776 "method": "url-fetch",
6777 "uri": "mirror://gnu/hello/hello-2.10.tar.gz",
6778 "sha256": @{
6779 "base32": "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"
6780 @}
6781 @}
6782 @dots{}
6783 @}
6784 @end example
6785
6786 The command below reads metadata from the JSON file @code{hello.json}
6787 and outputs a package expression:
6788
6789 @example
6790 guix import json hello.json
6791 @end example
6792
6793 @item nix
6794 Import metadata from a local copy of the source of the
6795 @uref{http://nixos.org/nixpkgs/, Nixpkgs distribution}@footnote{This
6796 relies on the @command{nix-instantiate} command of
6797 @uref{http://nixos.org/nix/, Nix}.}. Package definitions in Nixpkgs are
6798 typically written in a mixture of Nix-language and Bash code. This
6799 command only imports the high-level package structure that is written in
6800 the Nix language. It normally includes all the basic fields of a
6801 package definition.
6802
6803 When importing a GNU package, the synopsis and descriptions are replaced
6804 by their canonical upstream variant.
6805
6806 Usually, you will first need to do:
6807
6808 @example
6809 export NIX_REMOTE=daemon
6810 @end example
6811
6812 @noindent
6813 so that @command{nix-instantiate} does not try to open the Nix database.
6814
6815 As an example, the command below imports the package definition of
6816 LibreOffice (more precisely, it imports the definition of the package
6817 bound to the @code{libreoffice} top-level attribute):
6818
6819 @example
6820 guix import nix ~/path/to/nixpkgs libreoffice
6821 @end example
6822
6823 @item hackage
6824 @cindex hackage
6825 Import metadata from the Haskell community's central package archive
6826 @uref{https://hackage.haskell.org/, Hackage}. Information is taken from
6827 Cabal files and includes all the relevant information, including package
6828 dependencies.
6829
6830 Specific command-line options are:
6831
6832 @table @code
6833 @item --stdin
6834 @itemx -s
6835 Read a Cabal file from standard input.
6836 @item --no-test-dependencies
6837 @itemx -t
6838 Do not include dependencies required only by the test suites.
6839 @item --cabal-environment=@var{alist}
6840 @itemx -e @var{alist}
6841 @var{alist} is a Scheme alist defining the environment in which the
6842 Cabal conditionals are evaluated. The accepted keys are: @code{os},
6843 @code{arch}, @code{impl} and a string representing the name of a flag.
6844 The value associated with a flag has to be either the symbol
6845 @code{true} or @code{false}. The value associated with other keys
6846 has to conform to the Cabal file format definition. The default value
6847 associated with the keys @code{os}, @code{arch} and @code{impl} is
6848 @samp{linux}, @samp{x86_64} and @samp{ghc}, respectively.
6849 @item --recursive
6850 @itemx -r
6851 Traverse the dependency graph of the given upstream package recursively
6852 and generate package expressions for all those packages that are not yet
6853 in Guix.
6854 @end table
6855
6856 The command below imports metadata for the latest version of the
6857 @code{HTTP} Haskell package without including test dependencies and
6858 specifying the value of the flag @samp{network-uri} as @code{false}:
6859
6860 @example
6861 guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
6862 @end example
6863
6864 A specific package version may optionally be specified by following the
6865 package name by an at-sign and a version number as in the following example:
6866
6867 @example
6868 guix import hackage mtl@@2.1.3.1
6869 @end example
6870
6871 @item stackage
6872 @cindex stackage
6873 The @code{stackage} importer is a wrapper around the @code{hackage} one.
6874 It takes a package name, looks up the package version included in a
6875 long-term support (LTS) @uref{https://www.stackage.org, Stackage}
6876 release and uses the @code{hackage} importer to retrieve its metadata.
6877 Note that it is up to you to select an LTS release compatible with the
6878 GHC compiler used by Guix.
6879
6880 Specific command-line options are:
6881
6882 @table @code
6883 @item --no-test-dependencies
6884 @itemx -t
6885 Do not include dependencies required only by the test suites.
6886 @item --lts-version=@var{version}
6887 @itemx -l @var{version}
6888 @var{version} is the desired LTS release version. If omitted the latest
6889 release is used.
6890 @item --recursive
6891 @itemx -r
6892 Traverse the dependency graph of the given upstream package recursively
6893 and generate package expressions for all those packages that are not yet
6894 in Guix.
6895 @end table
6896
6897 The command below imports metadata for the @code{HTTP} Haskell package
6898 included in the LTS Stackage release version 7.18:
6899
6900 @example
6901 guix import stackage --lts-version=7.18 HTTP
6902 @end example
6903
6904 @item elpa
6905 @cindex elpa
6906 Import metadata from an Emacs Lisp Package Archive (ELPA) package
6907 repository (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
6908
6909 Specific command-line options are:
6910
6911 @table @code
6912 @item --archive=@var{repo}
6913 @itemx -a @var{repo}
6914 @var{repo} identifies the archive repository from which to retrieve the
6915 information. Currently the supported repositories and their identifiers
6916 are:
6917 @itemize -
6918 @item
6919 @uref{http://elpa.gnu.org/packages, GNU}, selected by the @code{gnu}
6920 identifier. This is the default.
6921
6922 Packages from @code{elpa.gnu.org} are signed with one of the keys
6923 contained in the GnuPG keyring at
6924 @file{share/emacs/25.1/etc/package-keyring.gpg} (or similar) in the
6925 @code{emacs} package (@pxref{Package Installation, ELPA package
6926 signatures,, emacs, The GNU Emacs Manual}).
6927
6928 @item
6929 @uref{http://stable.melpa.org/packages, MELPA-Stable}, selected by the
6930 @code{melpa-stable} identifier.
6931
6932 @item
6933 @uref{http://melpa.org/packages, MELPA}, selected by the @code{melpa}
6934 identifier.
6935 @end itemize
6936
6937 @item --recursive
6938 @itemx -r
6939 Traverse the dependency graph of the given upstream package recursively
6940 and generate package expressions for all those packages that are not yet
6941 in Guix.
6942 @end table
6943
6944 @item crate
6945 @cindex crate
6946 Import metadata from the crates.io Rust package repository
6947 @uref{https://crates.io, crates.io}.
6948
6949 @item opam
6950 @cindex OPAM
6951 @cindex OCaml
6952 Import metadata from the @uref{https://opam.ocaml.org/, OPAM} package
6953 repository used by the OCaml community.
6954 @end table
6955
6956 The structure of the @command{guix import} code is modular. It would be
6957 useful to have more importers for other package formats, and your help
6958 is welcome here (@pxref{Contributing}).
6959
6960 @node Invoking guix refresh
6961 @section Invoking @command{guix refresh}
6962
6963 @cindex @command {guix refresh}
6964 The primary audience of the @command{guix refresh} command is developers
6965 of the GNU software distribution. By default, it reports any packages
6966 provided by the distribution that are outdated compared to the latest
6967 upstream version, like this:
6968
6969 @example
6970 $ guix refresh
6971 gnu/packages/gettext.scm:29:13: gettext would be upgraded from 0.18.1.1 to 0.18.2.1
6972 gnu/packages/glib.scm:77:12: glib would be upgraded from 2.34.3 to 2.37.0
6973 @end example
6974
6975 Alternately, one can specify packages to consider, in which case a
6976 warning is emitted for packages that lack an updater:
6977
6978 @example
6979 $ guix refresh coreutils guile guile-ssh
6980 gnu/packages/ssh.scm:205:2: warning: no updater for guile-ssh
6981 gnu/packages/guile.scm:136:12: guile would be upgraded from 2.0.12 to 2.0.13
6982 @end example
6983
6984 @command{guix refresh} browses the upstream repository of each package and determines
6985 the highest version number of the releases therein. The command
6986 knows how to update specific types of packages: GNU packages, ELPA
6987 packages, etc.---see the documentation for @option{--type} below. There
6988 are many packages, though, for which it lacks a method to determine
6989 whether a new upstream release is available. However, the mechanism is
6990 extensible, so feel free to get in touch with us to add a new method!
6991
6992 Sometimes the upstream name differs from the package name used in Guix,
6993 and @command{guix refresh} needs a little help. Most updaters honor the
6994 @code{upstream-name} property in package definitions, which can be used
6995 to that effect:
6996
6997 @example
6998 (define-public network-manager
6999 (package
7000 (name "network-manager")
7001 ;; @dots{}
7002 (properties '((upstream-name . "NetworkManager")))))
7003 @end example
7004
7005 When passed @code{--update}, it modifies distribution source files to
7006 update the version numbers and source tarball hashes of those package
7007 recipes (@pxref{Defining Packages}). This is achieved by downloading
7008 each package's latest source tarball and its associated OpenPGP
7009 signature, authenticating the downloaded tarball against its signature
7010 using @command{gpg}, and finally computing its hash. When the public
7011 key used to sign the tarball is missing from the user's keyring, an
7012 attempt is made to automatically retrieve it from a public key server;
7013 when this is successful, the key is added to the user's keyring; otherwise,
7014 @command{guix refresh} reports an error.
7015
7016 The following options are supported:
7017
7018 @table @code
7019
7020 @item --expression=@var{expr}
7021 @itemx -e @var{expr}
7022 Consider the package @var{expr} evaluates to.
7023
7024 This is useful to precisely refer to a package, as in this example:
7025
7026 @example
7027 guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
7028 @end example
7029
7030 This command lists the dependents of the ``final'' libc (essentially all
7031 the packages.)
7032
7033 @item --update
7034 @itemx -u
7035 Update distribution source files (package recipes) in place. This is
7036 usually run from a checkout of the Guix source tree (@pxref{Running
7037 Guix Before It Is Installed}):
7038
7039 @example
7040 $ ./pre-inst-env guix refresh -s non-core -u
7041 @end example
7042
7043 @xref{Defining Packages}, for more information on package definitions.
7044
7045 @item --select=[@var{subset}]
7046 @itemx -s @var{subset}
7047 Select all the packages in @var{subset}, one of @code{core} or
7048 @code{non-core}.
7049
7050 The @code{core} subset refers to all the packages at the core of the
7051 distribution---i.e., packages that are used to build ``everything
7052 else''. This includes GCC, libc, Binutils, Bash, etc. Usually,
7053 changing one of these packages in the distribution entails a rebuild of
7054 all the others. Thus, such updates are an inconvenience to users in
7055 terms of build time or bandwidth used to achieve the upgrade.
7056
7057 The @code{non-core} subset refers to the remaining packages. It is
7058 typically useful in cases where an update of the core packages would be
7059 inconvenient.
7060
7061 @item --manifest=@var{file}
7062 @itemx -m @var{file}
7063 Select all the packages from the manifest in @var{file}. This is useful to
7064 check if any packages of the user manifest can be updated.
7065
7066 @item --type=@var{updater}
7067 @itemx -t @var{updater}
7068 Select only packages handled by @var{updater} (may be a comma-separated
7069 list of updaters). Currently, @var{updater} may be one of:
7070
7071 @table @code
7072 @item gnu
7073 the updater for GNU packages;
7074 @item gnome
7075 the updater for GNOME packages;
7076 @item kde
7077 the updater for KDE packages;
7078 @item xorg
7079 the updater for X.org packages;
7080 @item kernel.org
7081 the updater for packages hosted on kernel.org;
7082 @item elpa
7083 the updater for @uref{http://elpa.gnu.org/, ELPA} packages;
7084 @item cran
7085 the updater for @uref{https://cran.r-project.org/, CRAN} packages;
7086 @item bioconductor
7087 the updater for @uref{https://www.bioconductor.org/, Bioconductor} R packages;
7088 @item cpan
7089 the updater for @uref{http://www.cpan.org/, CPAN} packages;
7090 @item pypi
7091 the updater for @uref{https://pypi.python.org, PyPI} packages.
7092 @item gem
7093 the updater for @uref{https://rubygems.org, RubyGems} packages.
7094 @item github
7095 the updater for @uref{https://github.com, GitHub} packages.
7096 @item hackage
7097 the updater for @uref{https://hackage.haskell.org, Hackage} packages.
7098 @item stackage
7099 the updater for @uref{https://www.stackage.org, Stackage} packages.
7100 @item crate
7101 the updater for @uref{https://crates.io, Crates} packages.
7102 @end table
7103
7104 For instance, the following command only checks for updates of Emacs
7105 packages hosted at @code{elpa.gnu.org} and for updates of CRAN packages:
7106
7107 @example
7108 $ guix refresh --type=elpa,cran
7109 gnu/packages/statistics.scm:819:13: r-testthat would be upgraded from 0.10.0 to 0.11.0
7110 gnu/packages/emacs.scm:856:13: emacs-auctex would be upgraded from 11.88.6 to 11.88.9
7111 @end example
7112
7113 @end table
7114
7115 In addition, @command{guix refresh} can be passed one or more package
7116 names, as in this example:
7117
7118 @example
7119 $ ./pre-inst-env guix refresh -u emacs idutils gcc@@4.8
7120 @end example
7121
7122 @noindent
7123 The command above specifically updates the @code{emacs} and
7124 @code{idutils} packages. The @code{--select} option would have no
7125 effect in this case.
7126
7127 When considering whether to upgrade a package, it is sometimes
7128 convenient to know which packages would be affected by the upgrade and
7129 should be checked for compatibility. For this the following option may
7130 be used when passing @command{guix refresh} one or more package names:
7131
7132 @table @code
7133
7134 @item --list-updaters
7135 @itemx -L
7136 List available updaters and exit (see @option{--type} above.)
7137
7138 For each updater, display the fraction of packages it covers; at the
7139 end, display the fraction of packages covered by all these updaters.
7140
7141 @item --list-dependent
7142 @itemx -l
7143 List top-level dependent packages that would need to be rebuilt as a
7144 result of upgrading one or more packages.
7145
7146 @xref{Invoking guix graph, the @code{reverse-package} type of
7147 @command{guix graph}}, for information on how to visualize the list of
7148 dependents of a package.
7149
7150 @end table
7151
7152 Be aware that the @code{--list-dependent} option only
7153 @emph{approximates} the rebuilds that would be required as a result of
7154 an upgrade. More rebuilds might be required under some circumstances.
7155
7156 @example
7157 $ guix refresh --list-dependent flex
7158 Building the following 120 packages would ensure 213 dependent packages are rebuilt:
7159 hop@@2.4.0 geiser@@0.4 notmuch@@0.18 mu@@0.9.9.5 cflow@@1.4 idutils@@4.6 @dots{}
7160 @end example
7161
7162 The command above lists a set of packages that could be built to check
7163 for compatibility with an upgraded @code{flex} package.
7164
7165 The following options can be used to customize GnuPG operation:
7166
7167 @table @code
7168
7169 @item --gpg=@var{command}
7170 Use @var{command} as the GnuPG 2.x command. @var{command} is searched
7171 for in @code{$PATH}.
7172
7173 @item --key-download=@var{policy}
7174 Handle missing OpenPGP keys according to @var{policy}, which may be one
7175 of:
7176
7177 @table @code
7178 @item always
7179 Always download missing OpenPGP keys from the key server, and add them
7180 to the user's GnuPG keyring.
7181
7182 @item never
7183 Never try to download missing OpenPGP keys. Instead just bail out.
7184
7185 @item interactive
7186 When a package signed with an unknown OpenPGP key is encountered, ask
7187 the user whether to download it or not. This is the default behavior.
7188 @end table
7189
7190 @item --key-server=@var{host}
7191 Use @var{host} as the OpenPGP key server when importing a public key.
7192
7193 @end table
7194
7195 The @code{github} updater uses the
7196 @uref{https://developer.github.com/v3/, GitHub API} to query for new
7197 releases. When used repeatedly e.g. when refreshing all packages,
7198 GitHub will eventually refuse to answer any further API requests. By
7199 default 60 API requests per hour are allowed, and a full refresh on all
7200 GitHub packages in Guix requires more than this. Authentication with
7201 GitHub through the use of an API token alleviates these limits. To use
7202 an API token, set the environment variable @code{GUIX_GITHUB_TOKEN} to a
7203 token procured from @uref{https://github.com/settings/tokens} or
7204 otherwise.
7205
7206
7207 @node Invoking guix lint
7208 @section Invoking @command{guix lint}
7209
7210 @cindex @command{guix lint}
7211 @cindex package, checking for errors
7212 The @command{guix lint} command is meant to help package developers avoid
7213 common errors and use a consistent style. It runs a number of checks on
7214 a given set of packages in order to find common mistakes in their
7215 definitions. Available @dfn{checkers} include (see
7216 @code{--list-checkers} for a complete list):
7217
7218 @table @code
7219 @item synopsis
7220 @itemx description
7221 Validate certain typographical and stylistic rules about package
7222 descriptions and synopses.
7223
7224 @item inputs-should-be-native
7225 Identify inputs that should most likely be native inputs.
7226
7227 @item source
7228 @itemx home-page
7229 @itemx mirror-url
7230 @itemx source-file-name
7231 Probe @code{home-page} and @code{source} URLs and report those that are
7232 invalid. Suggest a @code{mirror://} URL when applicable. Check that
7233 the source file name is meaningful, e.g. is not
7234 just a version number or ``git-checkout'', without a declared
7235 @code{file-name} (@pxref{origin Reference}).
7236
7237 @item cve
7238 @cindex security vulnerabilities
7239 @cindex CVE, Common Vulnerabilities and Exposures
7240 Report known vulnerabilities found in the Common Vulnerabilities and
7241 Exposures (CVE) databases of the current and past year
7242 @uref{https://nvd.nist.gov/download.cfm#CVE_FEED, published by the US
7243 NIST}.
7244
7245 To view information about a particular vulnerability, visit pages such as:
7246
7247 @itemize
7248 @item
7249 @indicateurl{https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-YYYY-ABCD}
7250 @item
7251 @indicateurl{https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-YYYY-ABCD}
7252 @end itemize
7253
7254 @noindent
7255 where @code{CVE-YYYY-ABCD} is the CVE identifier---e.g.,
7256 @code{CVE-2015-7554}.
7257
7258 Package developers can specify in package recipes the
7259 @uref{https://nvd.nist.gov/cpe.cfm,Common Platform Enumeration (CPE)}
7260 name and version of the package when they differ from the name or version
7261 that Guix uses, as in this example:
7262
7263 @example
7264 (package
7265 (name "grub")
7266 ;; @dots{}
7267 ;; CPE calls this package "grub2".
7268 (properties '((cpe-name . "grub2")
7269 (cpe-version . "2.3")))
7270 @end example
7271
7272 @c See <http://www.openwall.com/lists/oss-security/2017/03/15/3>.
7273 Some entries in the CVE database do not specify which version of a
7274 package they apply to, and would thus ``stick around'' forever. Package
7275 developers who found CVE alerts and verified they can be ignored can
7276 declare them as in this example:
7277
7278 @example
7279 (package
7280 (name "t1lib")
7281 ;; @dots{}
7282 ;; These CVEs no longer apply and can be safely ignored.
7283 (properties `((lint-hidden-cve . ("CVE-2011-0433"
7284 "CVE-2011-1553"
7285 "CVE-2011-1554"
7286 "CVE-2011-5244")))))
7287 @end example
7288
7289 @item formatting
7290 Warn about obvious source code formatting issues: trailing white space,
7291 use of tabulations, etc.
7292 @end table
7293
7294 The general syntax is:
7295
7296 @example
7297 guix lint @var{options} @var{package}@dots{}
7298 @end example
7299
7300 If no package is given on the command line, then all packages are checked.
7301 The @var{options} may be zero or more of the following:
7302
7303 @table @code
7304 @item --list-checkers
7305 @itemx -l
7306 List and describe all the available checkers that will be run on packages
7307 and exit.
7308
7309 @item --checkers
7310 @itemx -c
7311 Only enable the checkers specified in a comma-separated list using the
7312 names returned by @code{--list-checkers}.
7313
7314 @end table
7315
7316 @node Invoking guix size
7317 @section Invoking @command{guix size}
7318
7319 @cindex size
7320 @cindex package size
7321 @cindex closure
7322 @cindex @command{guix size}
7323 The @command{guix size} command helps package developers profile the
7324 disk usage of packages. It is easy to overlook the impact of an
7325 additional dependency added to a package, or the impact of using a
7326 single output for a package that could easily be split (@pxref{Packages
7327 with Multiple Outputs}). Such are the typical issues that
7328 @command{guix size} can highlight.
7329
7330 The command can be passed one or more package specifications
7331 such as @code{gcc@@4.8}
7332 or @code{guile:debug}, or a file name in the store. Consider this
7333 example:
7334
7335 @example
7336 $ guix size coreutils
7337 store item total self
7338 /gnu/store/@dots{}-gcc-5.5.0-lib 60.4 30.1 38.1%
7339 /gnu/store/@dots{}-glibc-2.27 30.3 28.8 36.6%
7340 /gnu/store/@dots{}-coreutils-8.28 78.9 15.0 19.0%
7341 /gnu/store/@dots{}-gmp-6.1.2 63.1 2.7 3.4%
7342 /gnu/store/@dots{}-bash-static-4.4.12 1.5 1.5 1.9%
7343 /gnu/store/@dots{}-acl-2.2.52 61.1 0.4 0.5%
7344 /gnu/store/@dots{}-attr-2.4.47 60.6 0.2 0.3%
7345 /gnu/store/@dots{}-libcap-2.25 60.5 0.2 0.2%
7346 total: 78.9 MiB
7347 @end example
7348
7349 @cindex closure
7350 The store items listed here constitute the @dfn{transitive closure} of
7351 Coreutils---i.e., Coreutils and all its dependencies, recursively---as
7352 would be returned by:
7353
7354 @example
7355 $ guix gc -R /gnu/store/@dots{}-coreutils-8.23
7356 @end example
7357
7358 Here the output shows three columns next to store items. The first column,
7359 labeled ``total'', shows the size in mebibytes (MiB) of the closure of
7360 the store item---that is, its own size plus the size of all its
7361 dependencies. The next column, labeled ``self'', shows the size of the
7362 item itself. The last column shows the ratio of the size of the item
7363 itself to the space occupied by all the items listed here.
7364
7365 In this example, we see that the closure of Coreutils weighs in at
7366 79@tie{}MiB, most of which is taken by libc and GCC's run-time support
7367 libraries. (That libc and GCC's libraries represent a large fraction of
7368 the closure is not a problem @i{per se} because they are always available
7369 on the system anyway.)
7370
7371 When the package(s) passed to @command{guix size} are available in the
7372 store@footnote{More precisely, @command{guix size} looks for the
7373 @emph{ungrafted} variant of the given package(s), as returned by
7374 @code{guix build @var{package} --no-grafts}. @xref{Security Updates},
7375 for information on grafts.}, @command{guix size} queries the daemon to determine its
7376 dependencies, and measures its size in the store, similar to @command{du
7377 -ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
7378 Coreutils}).
7379
7380 When the given packages are @emph{not} in the store, @command{guix size}
7381 reports information based on the available substitutes
7382 (@pxref{Substitutes}). This makes it possible it to profile disk usage of
7383 store items that are not even on disk, only available remotely.
7384
7385 You can also specify several package names:
7386
7387 @example
7388 $ guix size coreutils grep sed bash
7389 store item total self
7390 /gnu/store/@dots{}-coreutils-8.24 77.8 13.8 13.4%
7391 /gnu/store/@dots{}-grep-2.22 73.1 0.8 0.8%
7392 /gnu/store/@dots{}-bash-4.3.42 72.3 4.7 4.6%
7393 /gnu/store/@dots{}-readline-6.3 67.6 1.2 1.2%
7394 @dots{}
7395 total: 102.3 MiB
7396 @end example
7397
7398 @noindent
7399 In this example we see that the combination of the four packages takes
7400 102.3@tie{}MiB in total, which is much less than the sum of each closure
7401 since they have a lot of dependencies in common.
7402
7403 The available options are:
7404
7405 @table @option
7406
7407 @item --substitute-urls=@var{urls}
7408 Use substitute information from @var{urls}.
7409 @xref{client-substitute-urls, the same option for @code{guix build}}.
7410
7411 @item --sort=@var{key}
7412 Sort lines according to @var{key}, one of the following options:
7413
7414 @table @code
7415 @item self
7416 the size of each item (the default);
7417 @item closure
7418 the total size of the item's closure.
7419 @end table
7420
7421 @item --map-file=@var{file}
7422 Write a graphical map of disk usage in PNG format to @var{file}.
7423
7424 For the example above, the map looks like this:
7425
7426 @image{images/coreutils-size-map,5in,, map of Coreutils disk usage
7427 produced by @command{guix size}}
7428
7429 This option requires that
7430 @uref{http://wingolog.org/software/guile-charting/, Guile-Charting} be
7431 installed and visible in Guile's module search path. When that is not
7432 the case, @command{guix size} fails as it tries to load it.
7433
7434 @item --system=@var{system}
7435 @itemx -s @var{system}
7436 Consider packages for @var{system}---e.g., @code{x86_64-linux}.
7437
7438 @end table
7439
7440 @node Invoking guix graph
7441 @section Invoking @command{guix graph}
7442
7443 @cindex DAG
7444 @cindex @command{guix graph}
7445 @cindex package dependencies
7446 Packages and their dependencies form a @dfn{graph}, specifically a
7447 directed acyclic graph (DAG). It can quickly become difficult to have a
7448 mental model of the package DAG, so the @command{guix graph} command
7449 provides a visual representation of the DAG. By default,
7450 @command{guix graph} emits a DAG representation in the input format of
7451 @uref{http://www.graphviz.org/, Graphviz}, so its output can be passed
7452 directly to the @command{dot} command of Graphviz. It can also emit an
7453 HTML page with embedded JavaScript code to display a ``chord diagram''
7454 in a Web browser, using the @uref{https://d3js.org/, d3.js} library, or
7455 emit Cypher queries to construct a graph in a graph database supporting
7456 the @uref{http://www.opencypher.org/, openCypher} query language.
7457 The general syntax is:
7458
7459 @example
7460 guix graph @var{options} @var{package}@dots{}
7461 @end example
7462
7463 For example, the following command generates a PDF file representing the
7464 package DAG for the GNU@tie{}Core Utilities, showing its build-time
7465 dependencies:
7466
7467 @example
7468 guix graph coreutils | dot -Tpdf > dag.pdf
7469 @end example
7470
7471 The output looks like this:
7472
7473 @image{images/coreutils-graph,2in,,Dependency graph of the GNU Coreutils}
7474
7475 Nice little graph, no?
7476
7477 But there is more than one graph! The one above is concise: it is the
7478 graph of package objects, omitting implicit inputs such as GCC, libc,
7479 grep, etc. It is often useful to have such a concise graph, but
7480 sometimes one may want to see more details. @command{guix graph} supports
7481 several types of graphs, allowing you to choose the level of detail:
7482
7483 @table @code
7484 @item package
7485 This is the default type used in the example above. It shows the DAG of
7486 package objects, excluding implicit dependencies. It is concise, but
7487 filters out many details.
7488
7489 @item reverse-package
7490 This shows the @emph{reverse} DAG of packages. For example:
7491
7492 @example
7493 guix graph --type=reverse-package ocaml
7494 @end example
7495
7496 ... yields the graph of packages that depend on OCaml.
7497
7498 Note that for core packages this can yield huge graphs. If all you want
7499 is to know the number of packages that depend on a given package, use
7500 @command{guix refresh --list-dependent} (@pxref{Invoking guix refresh,
7501 @option{--list-dependent}}).
7502
7503 @item bag-emerged
7504 This is the package DAG, @emph{including} implicit inputs.
7505
7506 For instance, the following command:
7507
7508 @example
7509 guix graph --type=bag-emerged coreutils | dot -Tpdf > dag.pdf
7510 @end example
7511
7512 ... yields this bigger graph:
7513
7514 @image{images/coreutils-bag-graph,,5in,Detailed dependency graph of the GNU Coreutils}
7515
7516 At the bottom of the graph, we see all the implicit inputs of
7517 @var{gnu-build-system} (@pxref{Build Systems, @code{gnu-build-system}}).
7518
7519 Now, note that the dependencies of these implicit inputs---that is, the
7520 @dfn{bootstrap dependencies} (@pxref{Bootstrapping})---are not shown
7521 here, for conciseness.
7522
7523 @item bag
7524 Similar to @code{bag-emerged}, but this time including all the bootstrap
7525 dependencies.
7526
7527 @item bag-with-origins
7528 Similar to @code{bag}, but also showing origins and their dependencies.
7529
7530 @item derivation
7531 This is the most detailed representation: It shows the DAG of
7532 derivations (@pxref{Derivations}) and plain store items. Compared to
7533 the above representation, many additional nodes are visible, including
7534 build scripts, patches, Guile modules, etc.
7535
7536 For this type of graph, it is also possible to pass a @file{.drv} file
7537 name instead of a package name, as in:
7538
7539 @example
7540 guix graph -t derivation `guix system build -d my-config.scm`
7541 @end example
7542
7543 @item module
7544 This is the graph of @dfn{package modules} (@pxref{Package Modules}).
7545 For example, the following command shows the graph for the package
7546 module that defines the @code{guile} package:
7547
7548 @example
7549 guix graph -t module guile | dot -Tpdf > module-graph.pdf
7550 @end example
7551 @end table
7552
7553 All the types above correspond to @emph{build-time dependencies}. The
7554 following graph type represents the @emph{run-time dependencies}:
7555
7556 @table @code
7557 @item references
7558 This is the graph of @dfn{references} of a package output, as returned
7559 by @command{guix gc --references} (@pxref{Invoking guix gc}).
7560
7561 If the given package output is not available in the store, @command{guix
7562 graph} attempts to obtain dependency information from substitutes.
7563
7564 Here you can also pass a store file name instead of a package name. For
7565 example, the command below produces the reference graph of your profile
7566 (which can be big!):
7567
7568 @example
7569 guix graph -t references `readlink -f ~/.guix-profile`
7570 @end example
7571
7572 @item referrers
7573 This is the graph of the @dfn{referrers} of a store item, as returned by
7574 @command{guix gc --referrers} (@pxref{Invoking guix gc}).
7575
7576 This relies exclusively on local information from your store. For
7577 instance, let us suppose that the current Inkscape is available in 10
7578 profiles on your machine; @command{guix graph -t referrers inkscape}
7579 will show a graph rooted at Inkscape and with those 10 profiles linked
7580 to it.
7581
7582 It can help determine what is preventing a store item from being garbage
7583 collected.
7584
7585 @end table
7586
7587 The available options are the following:
7588
7589 @table @option
7590 @item --type=@var{type}
7591 @itemx -t @var{type}
7592 Produce a graph output of @var{type}, where @var{type} must be one of
7593 the values listed above.
7594
7595 @item --list-types
7596 List the supported graph types.
7597
7598 @item --backend=@var{backend}
7599 @itemx -b @var{backend}
7600 Produce a graph using the selected @var{backend}.
7601
7602 @item --list-backends
7603 List the supported graph backends.
7604
7605 Currently, the available backends are Graphviz and d3.js.
7606
7607 @item --expression=@var{expr}
7608 @itemx -e @var{expr}
7609 Consider the package @var{expr} evaluates to.
7610
7611 This is useful to precisely refer to a package, as in this example:
7612
7613 @example
7614 guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
7615 @end example
7616 @end table
7617
7618
7619 @node Invoking guix environment
7620 @section Invoking @command{guix environment}
7621
7622 @cindex reproducible build environments
7623 @cindex development environments
7624 @cindex @command{guix environment}
7625 @cindex environment, package build environment
7626 The purpose of @command{guix environment} is to assist hackers in
7627 creating reproducible development environments without polluting their
7628 package profile. The @command{guix environment} tool takes one or more
7629 packages, builds all of their inputs, and creates a shell
7630 environment to use them.
7631
7632 The general syntax is:
7633
7634 @example
7635 guix environment @var{options} @var{package}@dots{}
7636 @end example
7637
7638 The following example spawns a new shell set up for the development of
7639 GNU@tie{}Guile:
7640
7641 @example
7642 guix environment guile
7643 @end example
7644
7645 If the needed dependencies are not built yet, @command{guix environment}
7646 automatically builds them. The environment of the new shell is an augmented
7647 version of the environment that @command{guix environment} was run in.
7648 It contains the necessary search paths for building the given package
7649 added to the existing environment variables. To create a ``pure''
7650 environment, in which the original environment variables have been unset,
7651 use the @code{--pure} option@footnote{Users sometimes wrongfully augment
7652 environment variables such as @code{PATH} in their @file{~/.bashrc}
7653 file. As a consequence, when @code{guix environment} launches it, Bash
7654 may read @file{~/.bashrc}, thereby introducing ``impurities'' in these
7655 environment variables. It is an error to define such environment
7656 variables in @file{.bashrc}; instead, they should be defined in
7657 @file{.bash_profile}, which is sourced only by log-in shells.
7658 @xref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}, for
7659 details on Bash start-up files.}.
7660
7661 @vindex GUIX_ENVIRONMENT
7662 @command{guix environment} defines the @code{GUIX_ENVIRONMENT}
7663 variable in the shell it spawns; its value is the file name of the
7664 profile of this environment. This allows users to, say, define a
7665 specific prompt for development environments in their @file{.bashrc}
7666 (@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}):
7667
7668 @example
7669 if [ -n "$GUIX_ENVIRONMENT" ]
7670 then
7671 export PS1="\u@@\h \w [dev]\$ "
7672 fi
7673 @end example
7674
7675 @noindent
7676 ... or to browse the profile:
7677
7678 @example
7679 $ ls "$GUIX_ENVIRONMENT/bin"
7680 @end example
7681
7682 Additionally, more than one package may be specified, in which case the
7683 union of the inputs for the given packages are used. For example, the
7684 command below spawns a shell where all of the dependencies of both Guile
7685 and Emacs are available:
7686
7687 @example
7688 guix environment guile emacs
7689 @end example
7690
7691 Sometimes an interactive shell session is not desired. An arbitrary
7692 command may be invoked by placing the @code{--} token to separate the
7693 command from the rest of the arguments:
7694
7695 @example
7696 guix environment guile -- make -j4
7697 @end example
7698
7699 In other situations, it is more convenient to specify the list of
7700 packages needed in the environment. For example, the following command
7701 runs @command{python} from an environment containing Python@tie{}2.7 and
7702 NumPy:
7703
7704 @example
7705 guix environment --ad-hoc python2-numpy python-2.7 -- python
7706 @end example
7707
7708 Furthermore, one might want the dependencies of a package and also some
7709 additional packages that are not build-time or runtime dependencies, but
7710 are useful when developing nonetheless. Because of this, the
7711 @code{--ad-hoc} flag is positional. Packages appearing before
7712 @code{--ad-hoc} are interpreted as packages whose dependencies will be
7713 added to the environment. Packages appearing after are interpreted as
7714 packages that will be added to the environment directly. For example,
7715 the following command creates a Guix development environment that
7716 additionally includes Git and strace:
7717
7718 @example
7719 guix environment guix --ad-hoc git strace
7720 @end example
7721
7722 Sometimes it is desirable to isolate the environment as much as
7723 possible, for maximal purity and reproducibility. In particular, when
7724 using Guix on a host distro that is not GuixSD, it is desirable to
7725 prevent access to @file{/usr/bin} and other system-wide resources from
7726 the development environment. For example, the following command spawns
7727 a Guile REPL in a ``container'' where only the store and the current
7728 working directory are mounted:
7729
7730 @example
7731 guix environment --ad-hoc --container guile -- guile
7732 @end example
7733
7734 @quotation Note
7735 The @code{--container} option requires Linux-libre 3.19 or newer.
7736 @end quotation
7737
7738 The available options are summarized below.
7739
7740 @table @code
7741 @item --root=@var{file}
7742 @itemx -r @var{file}
7743 @cindex persistent environment
7744 @cindex garbage collector root, for environments
7745 Make @var{file} a symlink to the profile for this environment, and
7746 register it as a garbage collector root.
7747
7748 This is useful if you want to protect your environment from garbage
7749 collection, to make it ``persistent''.
7750
7751 When this option is omitted, the environment is protected from garbage
7752 collection only for the duration of the @command{guix environment}
7753 session. This means that next time you recreate the same environment,
7754 you could have to rebuild or re-download packages. @xref{Invoking guix
7755 gc}, for more on GC roots.
7756
7757 @item --expression=@var{expr}
7758 @itemx -e @var{expr}
7759 Create an environment for the package or list of packages that
7760 @var{expr} evaluates to.
7761
7762 For example, running:
7763
7764 @example
7765 guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
7766 @end example
7767
7768 starts a shell with the environment for this specific variant of the
7769 PETSc package.
7770
7771 Running:
7772
7773 @example
7774 guix environment --ad-hoc -e '(@@ (gnu) %base-packages)'
7775 @end example
7776
7777 starts a shell with all the GuixSD base packages available.
7778
7779 The above commands only use the default output of the given packages.
7780 To select other outputs, two element tuples can be specified:
7781
7782 @example
7783 guix environment --ad-hoc -e '(list (@@ (gnu packages bash) bash) "include")'
7784 @end example
7785
7786 @item --load=@var{file}
7787 @itemx -l @var{file}
7788 Create an environment for the package or list of packages that the code
7789 within @var{file} evaluates to.
7790
7791 As an example, @var{file} might contain a definition like this
7792 (@pxref{Defining Packages}):
7793
7794 @example
7795 @verbatiminclude environment-gdb.scm
7796 @end example
7797
7798 @item --manifest=@var{file}
7799 @itemx -m @var{file}
7800 Create an environment for the packages contained in the manifest object
7801 returned by the Scheme code in @var{file}.
7802
7803 This is similar to the same-named option in @command{guix package}
7804 (@pxref{profile-manifest, @option{--manifest}}) and uses the same
7805 manifest files.
7806
7807 @item --ad-hoc
7808 Include all specified packages in the resulting environment, as if an
7809 @i{ad hoc} package were defined with them as inputs. This option is
7810 useful for quickly creating an environment without having to write a
7811 package expression to contain the desired inputs.
7812
7813 For instance, the command:
7814
7815 @example
7816 guix environment --ad-hoc guile guile-sdl -- guile
7817 @end example
7818
7819 runs @command{guile} in an environment where Guile and Guile-SDL are
7820 available.
7821
7822 Note that this example implicitly asks for the default output of
7823 @code{guile} and @code{guile-sdl}, but it is possible to ask for a
7824 specific output---e.g., @code{glib:bin} asks for the @code{bin} output
7825 of @code{glib} (@pxref{Packages with Multiple Outputs}).
7826
7827 This option may be composed with the default behavior of @command{guix
7828 environment}. Packages appearing before @code{--ad-hoc} are interpreted
7829 as packages whose dependencies will be added to the environment, the
7830 default behavior. Packages appearing after are interpreted as packages
7831 that will be added to the environment directly.
7832
7833 @item --pure
7834 Unset existing environment variables when building the new environment.
7835 This has the effect of creating an environment in which search paths
7836 only contain package inputs.
7837
7838 @item --search-paths
7839 Display the environment variable definitions that make up the
7840 environment.
7841
7842 @item --system=@var{system}
7843 @itemx -s @var{system}
7844 Attempt to build for @var{system}---e.g., @code{i686-linux}.
7845
7846 @item --container
7847 @itemx -C
7848 @cindex container
7849 Run @var{command} within an isolated container. The current working
7850 directory outside the container is mapped inside the container.
7851 Additionally, unless overridden with @code{--user}, a dummy home
7852 directory is created that matches the current user's home directory, and
7853 @file{/etc/passwd} is configured accordingly. The spawned process runs
7854 as the current user outside the container, but has root privileges in
7855 the context of the container.
7856
7857 @item --network
7858 @itemx -N
7859 For containers, share the network namespace with the host system.
7860 Containers created without this flag only have access to the loopback
7861 device.
7862
7863 @item --link-profile
7864 @itemx -P
7865 For containers, link the environment profile to
7866 @file{~/.guix-profile} within the container. This is equivalent to
7867 running the command @command{ln -s $GUIX_ENVIRONMENT ~/.guix-profile}
7868 within the container. Linking will fail and abort the environment if
7869 the directory already exists, which will certainly be the case if
7870 @command{guix environment} was invoked in the user's home directory.
7871
7872 Certain packages are configured to look in
7873 @code{~/.guix-profile} for configuration files and data;@footnote{For
7874 example, the @code{fontconfig} package inspects
7875 @file{~/.guix-profile/share/fonts} for additional fonts.}
7876 @code{--link-profile} allows these programs to behave as expected within
7877 the environment.
7878
7879 @item --user=@var{user}
7880 @itemx -u @var{user}
7881 For containers, use the username @var{user} in place of the current
7882 user. The generated @file{/etc/passwd} entry within the container will
7883 contain the name @var{user}; the home directory will be
7884 @file{/home/USER}; and no user GECOS data will be copied. @var{user}
7885 need not exist on the system.
7886
7887 Additionally, any shared or exposed path (see @code{--share} and
7888 @code{--expose} respectively) whose target is within the current user's
7889 home directory will be remapped relative to @file{/home/USER}; this
7890 includes the automatic mapping of the current working directory.
7891
7892 @example
7893 # will expose paths as /home/foo/wd, /home/foo/test, and /home/foo/target
7894 cd $HOME/wd
7895 guix environment --container --user=foo \
7896 --expose=$HOME/test \
7897 --expose=/tmp/target=$HOME/target
7898 @end example
7899
7900 While this will limit the leaking of user identity through home paths
7901 and each of the user fields, this is only one useful component of a
7902 broader privacy/anonymity solution---not one in and of itself.
7903
7904 @item --expose=@var{source}[=@var{target}]
7905 For containers, expose the file system @var{source} from the host system
7906 as the read-only file system @var{target} within the container. If
7907 @var{target} is not specified, @var{source} is used as the target mount
7908 point in the container.
7909
7910 The example below spawns a Guile REPL in a container in which the user's
7911 home directory is accessible read-only via the @file{/exchange}
7912 directory:
7913
7914 @example
7915 guix environment --container --expose=$HOME=/exchange --ad-hoc guile -- guile
7916 @end example
7917
7918 @item --share=@var{source}[=@var{target}]
7919 For containers, share the file system @var{source} from the host system
7920 as the writable file system @var{target} within the container. If
7921 @var{target} is not specified, @var{source} is used as the target mount
7922 point in the container.
7923
7924 The example below spawns a Guile REPL in a container in which the user's
7925 home directory is accessible for both reading and writing via the
7926 @file{/exchange} directory:
7927
7928 @example
7929 guix environment --container --share=$HOME=/exchange --ad-hoc guile -- guile
7930 @end example
7931 @end table
7932
7933 @command{guix environment}
7934 also supports all of the common build options that @command{guix
7935 build} supports (@pxref{Common Build Options}).
7936
7937
7938 @node Invoking guix publish
7939 @section Invoking @command{guix publish}
7940
7941 @cindex @command{guix publish}
7942 The purpose of @command{guix publish} is to enable users to easily share
7943 their store with others, who can then use it as a substitute server
7944 (@pxref{Substitutes}).
7945
7946 When @command{guix publish} runs, it spawns an HTTP server which allows
7947 anyone with network access to obtain substitutes from it. This means
7948 that any machine running Guix can also act as if it were a build farm,
7949 since the HTTP interface is compatible with Hydra, the software behind
7950 the @code{hydra.gnu.org} build farm.
7951
7952 For security, each substitute is signed, allowing recipients to check
7953 their authenticity and integrity (@pxref{Substitutes}). Because
7954 @command{guix publish} uses the signing key of the system, which is only
7955 readable by the system administrator, it must be started as root; the
7956 @code{--user} option makes it drop root privileges early on.
7957
7958 The signing key pair must be generated before @command{guix publish} is
7959 launched, using @command{guix archive --generate-key} (@pxref{Invoking
7960 guix archive}).
7961
7962 The general syntax is:
7963
7964 @example
7965 guix publish @var{options}@dots{}
7966 @end example
7967
7968 Running @command{guix publish} without any additional arguments will
7969 spawn an HTTP server on port 8080:
7970
7971 @example
7972 guix publish
7973 @end example
7974
7975 Once a publishing server has been authorized (@pxref{Invoking guix
7976 archive}), the daemon may download substitutes from it:
7977
7978 @example
7979 guix-daemon --substitute-urls=http://example.org:8080
7980 @end example
7981
7982 By default, @command{guix publish} compresses archives on the fly as it
7983 serves them. This ``on-the-fly'' mode is convenient in that it requires
7984 no setup and is immediately available. However, when serving lots of
7985 clients, we recommend using the @option{--cache} option, which enables
7986 caching of the archives before they are sent to clients---see below for
7987 details. The @command{guix weather} command provides a handy way to
7988 check what a server provides (@pxref{Invoking guix weather}).
7989
7990 As a bonus, @command{guix publish} also serves as a content-addressed
7991 mirror for source files referenced in @code{origin} records
7992 (@pxref{origin Reference}). For instance, assuming @command{guix
7993 publish} is running on @code{example.org}, the following URL returns the
7994 raw @file{hello-2.10.tar.gz} file with the given SHA256 hash
7995 (represented in @code{nix-base32} format, @pxref{Invoking guix hash}):
7996
7997 @example
7998 http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1@dots{}ndq1i
7999 @end example
8000
8001 Obviously, these URLs only work for files that are in the store; in
8002 other cases, they return 404 (``Not Found'').
8003
8004 @cindex build logs, publication
8005 Build logs are available from @code{/log} URLs like:
8006
8007 @example
8008 http://example.org/log/gwspk@dots{}-guile-2.2.3
8009 @end example
8010
8011 @noindent
8012 When @command{guix-daemon} is configured to save compressed build logs,
8013 as is the case by default (@pxref{Invoking guix-daemon}), @code{/log}
8014 URLs return the compressed log as-is, with an appropriate
8015 @code{Content-Type} and/or @code{Content-Encoding} header. We recommend
8016 running @command{guix-daemon} with @code{--log-compression=gzip} since
8017 Web browsers can automatically decompress it, which is not the case with
8018 bzip2 compression.
8019
8020 The following options are available:
8021
8022 @table @code
8023 @item --port=@var{port}
8024 @itemx -p @var{port}
8025 Listen for HTTP requests on @var{port}.
8026
8027 @item --listen=@var{host}
8028 Listen on the network interface for @var{host}. The default is to
8029 accept connections from any interface.
8030
8031 @item --user=@var{user}
8032 @itemx -u @var{user}
8033 Change privileges to @var{user} as soon as possible---i.e., once the
8034 server socket is open and the signing key has been read.
8035
8036 @item --compression[=@var{level}]
8037 @itemx -C [@var{level}]
8038 Compress data using the given @var{level}. When @var{level} is zero,
8039 disable compression. The range 1 to 9 corresponds to different gzip
8040 compression levels: 1 is the fastest, and 9 is the best (CPU-intensive).
8041 The default is 3.
8042
8043 Unless @option{--cache} is used, compression occurs on the fly and
8044 the compressed streams are not
8045 cached. Thus, to reduce load on the machine that runs @command{guix
8046 publish}, it may be a good idea to choose a low compression level, to
8047 run @command{guix publish} behind a caching proxy, or to use
8048 @option{--cache}. Using @option{--cache} has the advantage that it
8049 allows @command{guix publish} to add @code{Content-Length} HTTP header
8050 to its responses.
8051
8052 @item --cache=@var{directory}
8053 @itemx -c @var{directory}
8054 Cache archives and meta-data (@code{.narinfo} URLs) to @var{directory}
8055 and only serve archives that are in cache.
8056
8057 When this option is omitted, archives and meta-data are created
8058 on-the-fly. This can reduce the available bandwidth, especially when
8059 compression is enabled, since this may become CPU-bound. Another
8060 drawback of the default mode is that the length of archives is not known
8061 in advance, so @command{guix publish} does not add a
8062 @code{Content-Length} HTTP header to its responses, which in turn
8063 prevents clients from knowing the amount of data being downloaded.
8064
8065 Conversely, when @option{--cache} is used, the first request for a store
8066 item (@i{via} a @code{.narinfo} URL) returns 404 and triggers a
8067 background process to @dfn{bake} the archive---computing its
8068 @code{.narinfo} and compressing the archive, if needed. Once the
8069 archive is cached in @var{directory}, subsequent requests succeed and
8070 are served directly from the cache, which guarantees that clients get
8071 the best possible bandwidth.
8072
8073 The ``baking'' process is performed by worker threads. By default, one
8074 thread per CPU core is created, but this can be customized. See
8075 @option{--workers} below.
8076
8077 When @option{--ttl} is used, cached entries are automatically deleted
8078 when they have expired.
8079
8080 @item --workers=@var{N}
8081 When @option{--cache} is used, request the allocation of @var{N} worker
8082 threads to ``bake'' archives.
8083
8084 @item --ttl=@var{ttl}
8085 Produce @code{Cache-Control} HTTP headers that advertise a time-to-live
8086 (TTL) of @var{ttl}. @var{ttl} must denote a duration: @code{5d} means 5
8087 days, @code{1m} means 1 month, and so on.
8088
8089 This allows the user's Guix to keep substitute information in cache for
8090 @var{ttl}. However, note that @code{guix publish} does not itself
8091 guarantee that the store items it provides will indeed remain available
8092 for as long as @var{ttl}.
8093
8094 Additionally, when @option{--cache} is used, cached entries that have
8095 not been accessed for @var{ttl} and that no longer have a corresponding
8096 item in the store, may be deleted.
8097
8098 @item --nar-path=@var{path}
8099 Use @var{path} as the prefix for the URLs of ``nar'' files
8100 (@pxref{Invoking guix archive, normalized archives}).
8101
8102 By default, nars are served at a URL such as
8103 @code{/nar/gzip/@dots{}-coreutils-8.25}. This option allows you to
8104 change the @code{/nar} part to @var{path}.
8105
8106 @item --public-key=@var{file}
8107 @itemx --private-key=@var{file}
8108 Use the specific @var{file}s as the public/private key pair used to sign
8109 the store items being published.
8110
8111 The files must correspond to the same key pair (the private key is used
8112 for signing and the public key is merely advertised in the signature
8113 metadata). They must contain keys in the canonical s-expression format
8114 as produced by @command{guix archive --generate-key} (@pxref{Invoking
8115 guix archive}). By default, @file{/etc/guix/signing-key.pub} and
8116 @file{/etc/guix/signing-key.sec} are used.
8117
8118 @item --repl[=@var{port}]
8119 @itemx -r [@var{port}]
8120 Spawn a Guile REPL server (@pxref{REPL Servers,,, guile, GNU Guile
8121 Reference Manual}) on @var{port} (37146 by default). This is used
8122 primarily for debugging a running @command{guix publish} server.
8123 @end table
8124
8125 Enabling @command{guix publish} on a GuixSD system is a one-liner: just
8126 instantiate a @code{guix-publish-service-type} service in the @code{services} field
8127 of the @code{operating-system} declaration (@pxref{guix-publish-service-type,
8128 @code{guix-publish-service-type}}).
8129
8130 If you are instead running Guix on a ``foreign distro'', follow these
8131 instructions:”
8132
8133 @itemize
8134 @item
8135 If your host distro uses the systemd init system:
8136
8137 @example
8138 # ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \
8139 /etc/systemd/system/
8140 # systemctl start guix-publish && systemctl enable guix-publish
8141 @end example
8142
8143 @item
8144 If your host distro uses the Upstart init system:
8145
8146 @example
8147 # ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/
8148 # start guix-publish
8149 @end example
8150
8151 @item
8152 Otherwise, proceed similarly with your distro's init system.
8153 @end itemize
8154
8155 @node Invoking guix challenge
8156 @section Invoking @command{guix challenge}
8157
8158 @cindex reproducible builds
8159 @cindex verifiable builds
8160 @cindex @command{guix challenge}
8161 @cindex challenge
8162 Do the binaries provided by this server really correspond to the source
8163 code it claims to build? Is a package build process deterministic?
8164 These are the questions the @command{guix challenge} command attempts to
8165 answer.
8166
8167 The former is obviously an important question: Before using a substitute
8168 server (@pxref{Substitutes}), one had better @emph{verify} that it
8169 provides the right binaries, and thus @emph{challenge} it. The latter
8170 is what enables the former: If package builds are deterministic, then
8171 independent builds of the package should yield the exact same result,
8172 bit for bit; if a server provides a binary different from the one
8173 obtained locally, it may be either corrupt or malicious.
8174
8175 We know that the hash that shows up in @file{/gnu/store} file names is
8176 the hash of all the inputs of the process that built the file or
8177 directory---compilers, libraries, build scripts,
8178 etc. (@pxref{Introduction}). Assuming deterministic build processes,
8179 one store file name should map to exactly one build output.
8180 @command{guix challenge} checks whether there is, indeed, a single
8181 mapping by comparing the build outputs of several independent builds of
8182 any given store item.
8183
8184 The command output looks like this:
8185
8186 @smallexample
8187 $ guix challenge --substitute-urls="https://hydra.gnu.org https://guix.example.org"
8188 updating list of substitutes from 'https://hydra.gnu.org'... 100.0%
8189 updating list of substitutes from 'https://guix.example.org'... 100.0%
8190 /gnu/store/@dots{}-openssl-1.0.2d contents differ:
8191 local hash: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
8192 https://hydra.gnu.org/nar/@dots{}-openssl-1.0.2d: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
8193 https://guix.example.org/nar/@dots{}-openssl-1.0.2d: 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim
8194 /gnu/store/@dots{}-git-2.5.0 contents differ:
8195 local hash: 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha
8196 https://hydra.gnu.org/nar/@dots{}-git-2.5.0: 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f
8197 https://guix.example.org/nar/@dots{}-git-2.5.0: 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73
8198 /gnu/store/@dots{}-pius-2.1.1 contents differ:
8199 local hash: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
8200 https://hydra.gnu.org/nar/@dots{}-pius-2.1.1: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
8201 https://guix.example.org/nar/@dots{}-pius-2.1.1: 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs
8202
8203 @dots{}
8204
8205 6,406 store items were analyzed:
8206 - 4,749 (74.1%) were identical
8207 - 525 (8.2%) differed
8208 - 1,132 (17.7%) were inconclusive
8209 @end smallexample
8210
8211 @noindent
8212 In this example, @command{guix challenge} first scans the store to
8213 determine the set of locally-built derivations---as opposed to store
8214 items that were downloaded from a substitute server---and then queries
8215 all the substitute servers. It then reports those store items for which
8216 the servers obtained a result different from the local build.
8217
8218 @cindex non-determinism, in package builds
8219 As an example, @code{guix.example.org} always gets a different answer.
8220 Conversely, @code{hydra.gnu.org} agrees with local builds, except in the
8221 case of Git. This might indicate that the build process of Git is
8222 non-deterministic, meaning that its output varies as a function of
8223 various things that Guix does not fully control, in spite of building
8224 packages in isolated environments (@pxref{Features}). Most common
8225 sources of non-determinism include the addition of timestamps in build
8226 results, the inclusion of random numbers, and directory listings sorted
8227 by inode number. See @uref{https://reproducible-builds.org/docs/}, for
8228 more information.
8229
8230 To find out what is wrong with this Git binary, we can do something along
8231 these lines (@pxref{Invoking guix archive}):
8232
8233 @example
8234 $ wget -q -O - https://hydra.gnu.org/nar/@dots{}-git-2.5.0 \
8235 | guix archive -x /tmp/git
8236 $ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git
8237 @end example
8238
8239 This command shows the difference between the files resulting from the
8240 local build, and the files resulting from the build on
8241 @code{hydra.gnu.org} (@pxref{Overview, Comparing and Merging Files,,
8242 diffutils, Comparing and Merging Files}). The @command{diff} command
8243 works great for text files. When binary files differ, a better option
8244 is @uref{https://diffoscope.org/, Diffoscope}, a tool that helps
8245 visualize differences for all kinds of files.
8246
8247 Once you have done that work, you can tell whether the differences are due
8248 to a non-deterministic build process or to a malicious server. We try
8249 hard to remove sources of non-determinism in packages to make it easier
8250 to verify substitutes, but of course, this is a process that
8251 involves not just Guix, but a large part of the free software community.
8252 In the meantime, @command{guix challenge} is one tool to help address
8253 the problem.
8254
8255 If you are writing packages for Guix, you are encouraged to check
8256 whether @code{hydra.gnu.org} and other substitute servers obtain the
8257 same build result as you did with:
8258
8259 @example
8260 $ guix challenge @var{package}
8261 @end example
8262
8263 @noindent
8264 where @var{package} is a package specification such as
8265 @code{guile@@2.0} or @code{glibc:debug}.
8266
8267 The general syntax is:
8268
8269 @example
8270 guix challenge @var{options} [@var{packages}@dots{}]
8271 @end example
8272
8273 When a difference is found between the hash of a locally-built item and
8274 that of a server-provided substitute, or among substitutes provided by
8275 different servers, the command displays it as in the example above and
8276 its exit code is 2 (other non-zero exit codes denote other kinds of
8277 errors.)
8278
8279 The one option that matters is:
8280
8281 @table @code
8282
8283 @item --substitute-urls=@var{urls}
8284 Consider @var{urls} the whitespace-separated list of substitute source
8285 URLs to compare to.
8286
8287 @item --verbose
8288 @itemx -v
8289 Show details about matches (identical contents) in addition to
8290 information about mismatches.
8291
8292 @end table
8293
8294 @node Invoking guix copy
8295 @section Invoking @command{guix copy}
8296
8297 @cindex copy, of store items, over SSH
8298 @cindex SSH, copy of store items
8299 @cindex sharing store items across machines
8300 @cindex transferring store items across machines
8301 The @command{guix copy} command copies items from the store of one
8302 machine to that of another machine over a secure shell (SSH)
8303 connection@footnote{This command is available only when Guile-SSH was
8304 found. @xref{Requirements}, for details.}. For example, the following
8305 command copies the @code{coreutils} package, the user's profile, and all
8306 their dependencies over to @var{host}, logged in as @var{user}:
8307
8308 @example
8309 guix copy --to=@var{user}@@@var{host} \
8310 coreutils `readlink -f ~/.guix-profile`
8311 @end example
8312
8313 If some of the items to be copied are already present on @var{host},
8314 they are not actually sent.
8315
8316 The command below retrieves @code{libreoffice} and @code{gimp} from
8317 @var{host}, assuming they are available there:
8318
8319 @example
8320 guix copy --from=@var{host} libreoffice gimp
8321 @end example
8322
8323 The SSH connection is established using the Guile-SSH client, which is
8324 compatible with OpenSSH: it honors @file{~/.ssh/known_hosts} and
8325 @file{~/.ssh/config}, and uses the SSH agent for authentication.
8326
8327 The key used to sign items that are sent must be accepted by the remote
8328 machine. Likewise, the key used by the remote machine to sign items you
8329 are retrieving must be in @file{/etc/guix/acl} so it is accepted by your
8330 own daemon. @xref{Invoking guix archive}, for more information about
8331 store item authentication.
8332
8333 The general syntax is:
8334
8335 @example
8336 guix copy [--to=@var{spec}|--from=@var{spec}] @var{items}@dots{}
8337 @end example
8338
8339 You must always specify one of the following options:
8340
8341 @table @code
8342 @item --to=@var{spec}
8343 @itemx --from=@var{spec}
8344 Specify the host to send to or receive from. @var{spec} must be an SSH
8345 spec such as @code{example.org}, @code{charlie@@example.org}, or
8346 @code{charlie@@example.org:2222}.
8347 @end table
8348
8349 The @var{items} can be either package names, such as @code{gimp}, or
8350 store items, such as @file{/gnu/store/@dots{}-idutils-4.6}.
8351
8352 When specifying the name of a package to send, it is first built if
8353 needed, unless @option{--dry-run} was specified. Common build options
8354 are supported (@pxref{Common Build Options}).
8355
8356
8357 @node Invoking guix container
8358 @section Invoking @command{guix container}
8359 @cindex container
8360 @cindex @command{guix container}
8361 @quotation Note
8362 As of version @value{VERSION}, this tool is experimental. The interface
8363 is subject to radical change in the future.
8364 @end quotation
8365
8366 The purpose of @command{guix container} is to manipulate processes
8367 running within an isolated environment, commonly known as a
8368 ``container'', typically created by the @command{guix environment}
8369 (@pxref{Invoking guix environment}) and @command{guix system container}
8370 (@pxref{Invoking guix system}) commands.
8371
8372 The general syntax is:
8373
8374 @example
8375 guix container @var{action} @var{options}@dots{}
8376 @end example
8377
8378 @var{action} specifies the operation to perform with a container, and
8379 @var{options} specifies the context-specific arguments for the action.
8380
8381 The following actions are available:
8382
8383 @table @code
8384 @item exec
8385 Execute a command within the context of a running container.
8386
8387 The syntax is:
8388
8389 @example
8390 guix container exec @var{pid} @var{program} @var{arguments}@dots{}
8391 @end example
8392
8393 @var{pid} specifies the process ID of the running container.
8394 @var{program} specifies an executable file name within the root file
8395 system of the container. @var{arguments} are the additional options that
8396 will be passed to @var{program}.
8397
8398 The following command launches an interactive login shell inside a
8399 GuixSD container, started by @command{guix system container}, and whose
8400 process ID is 9001:
8401
8402 @example
8403 guix container exec 9001 /run/current-system/profile/bin/bash --login
8404 @end example
8405
8406 Note that the @var{pid} cannot be the parent process of a container. It
8407 must be PID 1 of the container or one of its child processes.
8408
8409 @end table
8410
8411 @node Invoking guix weather
8412 @section Invoking @command{guix weather}
8413
8414 Occasionally you're grumpy because substitutes are lacking and you end
8415 up building packages by yourself (@pxref{Substitutes}). The
8416 @command{guix weather} command reports on substitute availability on the
8417 specified servers so you can have an idea of whether you'll be grumpy
8418 today. It can sometimes be useful info as a user, but it is primarily
8419 useful to people running @command{guix publish} (@pxref{Invoking guix
8420 publish}).
8421
8422 @cindex statistics, for substitutes
8423 @cindex availability of substitutes
8424 @cindex substitute availability
8425 @cindex weather, substitute availability
8426 Here's a sample run:
8427
8428 @example
8429 $ guix weather --substitute-urls=https://guix.example.org
8430 computing 5,872 package derivations for x86_64-linux...
8431 looking for 6,128 store items on https://guix.example.org..
8432 updating list of substitutes from 'https://guix.example.org'... 100.0%
8433 https://guix.example.org
8434 43.4% substitutes available (2,658 out of 6,128)
8435 7,032.5 MiB of nars (compressed)
8436 19,824.2 MiB on disk (uncompressed)
8437 0.030 seconds per request (182.9 seconds in total)
8438 33.5 requests per second
8439
8440 9.8% (342 out of 3,470) of the missing items are queued
8441 867 queued builds
8442 x86_64-linux: 518 (59.7%)
8443 i686-linux: 221 (25.5%)
8444 aarch64-linux: 128 (14.8%)
8445 build rate: 23.41 builds per hour
8446 x86_64-linux: 11.16 builds per hour
8447 i686-linux: 6.03 builds per hour
8448 aarch64-linux: 6.41 builds per hour
8449 @end example
8450
8451 @cindex continuous integration, statistics
8452 As you can see, it reports the fraction of all the packages for which
8453 substitutes are available on the server---regardless of whether
8454 substitutes are enabled, and regardless of whether this server's signing
8455 key is authorized. It also reports the size of the compressed archives
8456 (``nars'') provided by the server, the size the corresponding store
8457 items occupy in the store (assuming deduplication is turned off), and
8458 the server's throughput. The second part gives continuous integration
8459 (CI) statistics, if the server supports it.
8460
8461 To achieve that, @command{guix weather} queries over HTTP(S) meta-data
8462 (@dfn{narinfos}) for all the relevant store items. Like @command{guix
8463 challenge}, it ignores signatures on those substitutes, which is
8464 innocuous since the command only gathers statistics and cannot install
8465 those substitutes.
8466
8467 Among other things, it is possible to query specific system types and
8468 specific package sets. The available options are listed below.
8469
8470 @table @code
8471 @item --substitute-urls=@var{urls}
8472 @var{urls} is the space-separated list of substitute server URLs to
8473 query. When this option is omitted, the default set of substitute
8474 servers is queried.
8475
8476 @item --system=@var{system}
8477 @itemx -s @var{system}
8478 Query substitutes for @var{system}---e.g., @code{aarch64-linux}. This
8479 option can be repeated, in which case @command{guix weather} will query
8480 substitutes for several system types.
8481
8482 @item --manifest=@var{file}
8483 Instead of querying substitutes for all the packages, only ask for those
8484 specified in @var{file}. @var{file} must contain a @dfn{manifest}, as
8485 with the @code{-m} option of @command{guix package} (@pxref{Invoking
8486 guix package}).
8487 @end table
8488
8489
8490 @c *********************************************************************
8491 @node GNU Distribution
8492 @chapter GNU Distribution
8493
8494 @cindex Guix System Distribution
8495 @cindex GuixSD
8496 Guix comes with a distribution of the GNU system consisting entirely of
8497 free software@footnote{The term ``free'' here refers to the
8498 @url{http://www.gnu.org/philosophy/free-sw.html,freedom provided to
8499 users of that software}.}. The
8500 distribution can be installed on its own (@pxref{System Installation}),
8501 but it is also possible to install Guix as a package manager on top of
8502 an installed GNU/Linux system (@pxref{Installation}). To distinguish
8503 between the two, we refer to the standalone distribution as the Guix
8504 System Distribution, or GuixSD.
8505
8506 The distribution provides core GNU packages such as GNU libc, GCC, and
8507 Binutils, as well as many GNU and non-GNU applications. The complete
8508 list of available packages can be browsed
8509 @url{http://www.gnu.org/software/guix/packages,on-line} or by
8510 running @command{guix package} (@pxref{Invoking guix package}):
8511
8512 @example
8513 guix package --list-available
8514 @end example
8515
8516 Our goal is to provide a practical 100% free software distribution of
8517 Linux-based and other variants of GNU, with a focus on the promotion and
8518 tight integration of GNU components, and an emphasis on programs and
8519 tools that help users exert that freedom.
8520
8521 Packages are currently available on the following platforms:
8522
8523 @table @code
8524
8525 @item x86_64-linux
8526 Intel/AMD @code{x86_64} architecture, Linux-Libre kernel;
8527
8528 @item i686-linux
8529 Intel 32-bit architecture (IA32), Linux-Libre kernel;
8530
8531 @item armhf-linux
8532 ARMv7-A architecture with hard float, Thumb-2 and NEON,
8533 using the EABI hard-float application binary interface (ABI),
8534 and Linux-Libre kernel.
8535
8536 @item aarch64-linux
8537 little-endian 64-bit ARMv8-A processors, Linux-Libre kernel. This is
8538 currently in an experimental stage, with limited support.
8539 @xref{Contributing}, for how to help!
8540
8541 @item mips64el-linux
8542 little-endian 64-bit MIPS processors, specifically the Loongson series,
8543 n32 ABI, and Linux-Libre kernel.
8544
8545 @end table
8546
8547 GuixSD itself is currently only available on @code{i686} and @code{x86_64}.
8548
8549 @noindent
8550 For information on porting to other architectures or kernels,
8551 @pxref{Porting}.
8552
8553 @menu
8554 * System Installation:: Installing the whole operating system.
8555 * System Configuration:: Configuring the operating system.
8556 * Documentation:: Browsing software user manuals.
8557 * Installing Debugging Files:: Feeding the debugger.
8558 * Security Updates:: Deploying security fixes quickly.
8559 * Package Modules:: Packages from the programmer's viewpoint.
8560 * Packaging Guidelines:: Growing the distribution.
8561 * Bootstrapping:: GNU/Linux built from scratch.
8562 * Porting:: Targeting another platform or kernel.
8563 @end menu
8564
8565 Building this distribution is a cooperative effort, and you are invited
8566 to join! @xref{Contributing}, for information about how you can help.
8567
8568 @node System Installation
8569 @section System Installation
8570
8571 @cindex installing GuixSD
8572 @cindex Guix System Distribution
8573 This section explains how to install the Guix System Distribution (GuixSD)
8574 on a machine. The Guix package manager can
8575 also be installed on top of a running GNU/Linux system,
8576 @pxref{Installation}.
8577
8578 @ifinfo
8579 @quotation Note
8580 @c This paragraph is for people reading this from tty2 of the
8581 @c installation image.
8582 You are reading this documentation with an Info reader. For details on
8583 how to use it, hit the @key{RET} key (``return'' or ``enter'') on the
8584 link that follows: @pxref{Top, Info reader,, info-stnd, Stand-alone GNU
8585 Info}. Hit @kbd{l} afterwards to come back here.
8586
8587 Alternately, run @command{info info} in another tty to keep the manual
8588 available.
8589 @end quotation
8590 @end ifinfo
8591
8592 @menu
8593 * Limitations:: What you can expect.
8594 * Hardware Considerations:: Supported hardware.
8595 * USB Stick and DVD Installation:: Preparing the installation medium.
8596 * Preparing for Installation:: Networking, partitioning, etc.
8597 * Proceeding with the Installation:: The real thing.
8598 * Installing GuixSD in a VM:: GuixSD playground.
8599 * Building the Installation Image:: How this comes to be.
8600 @end menu
8601
8602 @node Limitations
8603 @subsection Limitations
8604
8605 As of version @value{VERSION}, the Guix System Distribution (GuixSD) is
8606 not production-ready. It may contain bugs and lack important
8607 features. Thus, if you are looking for a stable production system that
8608 respects your freedom as a computer user, a good solution at this point
8609 is to consider @url{http://www.gnu.org/distros/free-distros.html, one of
8610 the more established GNU/Linux distributions}. We hope you can soon switch
8611 to the GuixSD without fear, of course. In the meantime, you can
8612 also keep using your distribution and try out the package manager on top
8613 of it (@pxref{Installation}).
8614
8615 Before you proceed with the installation, be aware of the following
8616 noteworthy limitations applicable to version @value{VERSION}:
8617
8618 @itemize
8619 @item
8620 The installation process does not include a graphical user interface and
8621 requires familiarity with GNU/Linux (see the following subsections to
8622 get a feel of what that means.)
8623
8624 @item
8625 Support for the Logical Volume Manager (LVM) is missing.
8626
8627 @item
8628 More and more system services are provided (@pxref{Services}), but some
8629 may be missing.
8630
8631 @item
8632 More than 7,500 packages are available, but you might
8633 occasionally find that a useful package is missing.
8634
8635 @item
8636 GNOME, Xfce, LXDE, and Enlightenment are available (@pxref{Desktop Services}),
8637 as well as a number of X11 window managers. However, some graphical
8638 applications may be missing, as well as KDE.
8639 @end itemize
8640
8641 You have been warned! But more than a disclaimer, this is an invitation
8642 to report issues (and success stories!), and to join us in improving it.
8643 @xref{Contributing}, for more info.
8644
8645
8646 @node Hardware Considerations
8647 @subsection Hardware Considerations
8648
8649 @cindex hardware support on GuixSD
8650 GNU@tie{}GuixSD focuses on respecting the user's computing freedom. It
8651 builds around the kernel Linux-libre, which means that only hardware for
8652 which free software drivers and firmware exist is supported. Nowadays,
8653 a wide range of off-the-shelf hardware is supported on
8654 GNU/Linux-libre---from keyboards to graphics cards to scanners and
8655 Ethernet controllers. Unfortunately, there are still areas where
8656 hardware vendors deny users control over their own computing, and such
8657 hardware is not supported on GuixSD.
8658
8659 @cindex WiFi, hardware support
8660 One of the main areas where free drivers or firmware are lacking is WiFi
8661 devices. WiFi devices known to work include those using Atheros chips
8662 (AR9271 and AR7010), which corresponds to the @code{ath9k} Linux-libre
8663 driver, and those using Broadcom/AirForce chips (BCM43xx with
8664 Wireless-Core Revision 5), which corresponds to the @code{b43-open}
8665 Linux-libre driver. Free firmware exists for both and is available
8666 out-of-the-box on GuixSD, as part of @var{%base-firmware}
8667 (@pxref{operating-system Reference, @code{firmware}}).
8668
8669 @cindex RYF, Respects Your Freedom
8670 The @uref{https://www.fsf.org/, Free Software Foundation} runs
8671 @uref{https://www.fsf.org/ryf, @dfn{Respects Your Freedom}} (RYF), a
8672 certification program for hardware products that respect your freedom
8673 and your privacy and ensure that you have control over your device. We
8674 encourage you to check the list of RYF-certified devices.
8675
8676 Another useful resource is the @uref{https://www.h-node.org/, H-Node}
8677 web site. It contains a catalog of hardware devices with information
8678 about their support in GNU/Linux.
8679
8680
8681 @node USB Stick and DVD Installation
8682 @subsection USB Stick and DVD Installation
8683
8684 An ISO-9660 installation image that can be written to a USB stick or
8685 burnt to a DVD can be downloaded from
8686 @indicateurl{https://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{system}.iso.xz},
8687 where @var{system} is one of:
8688
8689 @table @code
8690 @item x86_64-linux
8691 for a GNU/Linux system on Intel/AMD-compatible 64-bit CPUs;
8692
8693 @item i686-linux
8694 for a 32-bit GNU/Linux system on Intel-compatible CPUs.
8695 @end table
8696
8697 @c start duplication of authentication part from ``Binary Installation''
8698 Make sure to download the associated @file{.sig} file and to verify the
8699 authenticity of the image against it, along these lines:
8700
8701 @example
8702 $ wget https://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{system}.iso.xz.sig
8703 $ gpg --verify guixsd-install-@value{VERSION}.@var{system}.iso.xz.sig
8704 @end example
8705
8706 If that command fails because you do not have the required public key,
8707 then run this command to import it:
8708
8709 @example
8710 $ gpg --keyserver pgp.mit.edu --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
8711 @end example
8712
8713 @noindent
8714 and rerun the @code{gpg --verify} command.
8715 @c end duplication
8716
8717 This image contains the tools necessary for an installation.
8718 It is meant to be copied @emph{as is} to a large-enough USB stick or DVD.
8719
8720 @unnumberedsubsubsec Copying to a USB Stick
8721
8722 To copy the image to a USB stick, follow these steps:
8723
8724 @enumerate
8725 @item
8726 Decompress the image using the @command{xz} command:
8727
8728 @example
8729 xz -d guixsd-install-@value{VERSION}.@var{system}.iso.xz
8730 @end example
8731
8732 @item
8733 Insert a USB stick of 1@tie{}GiB or more into your machine, and determine
8734 its device name. Assuming that the USB stick is known as @file{/dev/sdX},
8735 copy the image with:
8736
8737 @example
8738 dd if=guixsd-install-@value{VERSION}.x86_64-linux.iso of=/dev/sdX
8739 sync
8740 @end example
8741
8742 Access to @file{/dev/sdX} usually requires root privileges.
8743 @end enumerate
8744
8745 @unnumberedsubsubsec Burning on a DVD
8746
8747 To copy the image to a DVD, follow these steps:
8748
8749 @enumerate
8750 @item
8751 Decompress the image using the @command{xz} command:
8752
8753 @example
8754 xz -d guixsd-install-@value{VERSION}.@var{system}.iso.xz
8755 @end example
8756
8757 @item
8758 Insert a blank DVD into your machine, and determine
8759 its device name. Assuming that the DVD drive is known as @file{/dev/srX},
8760 copy the image with:
8761
8762 @example
8763 growisofs -dvd-compat -Z /dev/srX=guixsd-install-@value{VERSION}.x86_64.iso
8764 @end example
8765
8766 Access to @file{/dev/srX} usually requires root privileges.
8767 @end enumerate
8768
8769 @unnumberedsubsubsec Booting
8770
8771 Once this is done, you should be able to reboot the system and boot from
8772 the USB stick or DVD. The latter usually requires you to get in the
8773 BIOS or UEFI boot menu, where you can choose to boot from the USB stick.
8774
8775 @xref{Installing GuixSD in a VM}, if, instead, you would like to install
8776 GuixSD in a virtual machine (VM).
8777
8778
8779 @node Preparing for Installation
8780 @subsection Preparing for Installation
8781
8782 Once you have successfully booted your computer using the installation medium,
8783 you should end up with a root prompt. Several console TTYs are configured
8784 and can be used to run commands as root. TTY2 shows this documentation,
8785 browsable using the Info reader commands (@pxref{Top,,, info-stnd,
8786 Stand-alone GNU Info}). The installation system runs the GPM mouse
8787 daemon, which allows you to select text with the left mouse button and
8788 to paste it with the middle button.
8789
8790 @quotation Note
8791 Installation requires access to the Internet so that any missing
8792 dependencies of your system configuration can be downloaded. See the
8793 ``Networking'' section below.
8794 @end quotation
8795
8796 The installation system includes many common tools needed for this task.
8797 But it is also a full-blown GuixSD system, which means that you can
8798 install additional packages, should you need it, using @command{guix
8799 package} (@pxref{Invoking guix package}).
8800
8801 @subsubsection Keyboard Layout
8802
8803 @cindex keyboard layout
8804 The installation image uses the US qwerty keyboard layout. If you want
8805 to change it, you can use the @command{loadkeys} command. For example,
8806 the following command selects the Dvorak keyboard layout:
8807
8808 @example
8809 loadkeys dvorak
8810 @end example
8811
8812 See the files under @file{/run/current-system/profile/share/keymaps} for
8813 a list of available keyboard layouts. Run @command{man loadkeys} for
8814 more information.
8815
8816 @subsubsection Networking
8817
8818 Run the following command to see what your network interfaces are called:
8819
8820 @example
8821 ifconfig -a
8822 @end example
8823
8824 @noindent
8825 @dots{} or, using the GNU/Linux-specific @command{ip} command:
8826
8827 @example
8828 ip a
8829 @end example
8830
8831 @c http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
8832 Wired interfaces have a name starting with @samp{e}; for example, the
8833 interface corresponding to the first on-board Ethernet controller is
8834 called @samp{eno1}. Wireless interfaces have a name starting with
8835 @samp{w}, like @samp{w1p2s0}.
8836
8837 @table @asis
8838 @item Wired connection
8839 To configure a wired network run the following command, substituting
8840 @var{interface} with the name of the wired interface you want to use.
8841
8842 @example
8843 ifconfig @var{interface} up
8844 @end example
8845
8846 @item Wireless connection
8847 @cindex wireless
8848 @cindex WiFi
8849 To configure wireless networking, you can create a configuration file
8850 for the @command{wpa_supplicant} configuration tool (its location is not
8851 important) using one of the available text editors such as
8852 @command{nano}:
8853
8854 @example
8855 nano wpa_supplicant.conf
8856 @end example
8857
8858 As an example, the following stanza can go to this file and will work
8859 for many wireless networks, provided you give the actual SSID and
8860 passphrase for the network you are connecting to:
8861
8862 @example
8863 network=@{
8864 ssid="@var{my-ssid}"
8865 key_mgmt=WPA-PSK
8866 psk="the network's secret passphrase"
8867 @}
8868 @end example
8869
8870 Start the wireless service and run it in the background with the
8871 following command (substitute @var{interface} with the name of the
8872 network interface you want to use):
8873
8874 @example
8875 wpa_supplicant -c wpa_supplicant.conf -i @var{interface} -B
8876 @end example
8877
8878 Run @command{man wpa_supplicant} for more information.
8879 @end table
8880
8881 @cindex DHCP
8882 At this point, you need to acquire an IP address. On a network where IP
8883 addresses are automatically assigned @i{via} DHCP, you can run:
8884
8885 @example
8886 dhclient -v @var{interface}
8887 @end example
8888
8889 Try to ping a server to see if networking is up and running:
8890
8891 @example
8892 ping -c 3 gnu.org
8893 @end example
8894
8895 Setting up network access is almost always a requirement because the
8896 image does not contain all the software and tools that may be needed.
8897
8898 @cindex installing over SSH
8899 If you want to, you can continue the installation remotely by starting
8900 an SSH server:
8901
8902 @example
8903 herd start ssh-daemon
8904 @end example
8905
8906 Make sure to either set a password with @command{passwd}, or configure
8907 OpenSSH public key authentication before logging in.
8908
8909 @subsubsection Disk Partitioning
8910
8911 Unless this has already been done, the next step is to partition, and
8912 then format the target partition(s).
8913
8914 The installation image includes several partitioning tools, including
8915 Parted (@pxref{Overview,,, parted, GNU Parted User Manual}),
8916 @command{fdisk}, and @command{cfdisk}. Run it and set up your disk with
8917 the partition layout you want:
8918
8919 @example
8920 cfdisk
8921 @end example
8922
8923 If your disk uses the GUID Partition Table (GPT) format and you plan to
8924 install BIOS-based GRUB (which is the default), make sure a BIOS Boot
8925 Partition is available (@pxref{BIOS installation,,, grub, GNU GRUB
8926 manual}).
8927
8928 @cindex EFI, installation
8929 @cindex UEFI, installation
8930 @cindex ESP, EFI system partition
8931 If you instead wish to use EFI-based GRUB, a FAT32 @dfn{EFI System Partition}
8932 (ESP) is required. This partition should be mounted at @file{/boot/efi} and
8933 must have the @code{esp} flag set. E.g., for @command{parted}:
8934
8935 @example
8936 parted /dev/sda set 1 esp on
8937 @end example
8938
8939 @quotation Note
8940 @vindex grub-bootloader
8941 @vindex grub-efi-bootloader
8942 Unsure whether to use EFI- or BIOS-based GRUB? If the directory
8943 @file{/sys/firmware/efi} exists in the installation image, then you should
8944 probably perform an EFI installation, using @code{grub-efi-bootloader}.
8945 Otherwise you should use the BIOS-based GRUB, known as
8946 @code{grub-bootloader}. @xref{Bootloader Configuration}, for more info on
8947 bootloaders.
8948 @end quotation
8949
8950 Once you are done partitioning the target hard disk drive, you have to
8951 create a file system on the relevant partition(s)@footnote{Currently
8952 GuixSD only supports ext4 and btrfs file systems. In particular, code
8953 that reads file system UUIDs and labels only works for these file system
8954 types.}. For the ESP, if you have one and assuming it is
8955 @file{/dev/sda1}, run:
8956
8957 @example
8958 mkfs.fat -F32 /dev/sda1
8959 @end example
8960
8961 Preferably, assign file systems a label so that you can easily and
8962 reliably refer to them in @code{file-system} declarations (@pxref{File
8963 Systems}). This is typically done using the @code{-L} option of
8964 @command{mkfs.ext4} and related commands. So, assuming the target root
8965 partition lives at @file{/dev/sda2}, a file system with the label
8966 @code{my-root} can be created with:
8967
8968 @example
8969 mkfs.ext4 -L my-root /dev/sda2
8970 @end example
8971
8972 @cindex encrypted disk
8973 If you are instead planning to encrypt the root partition, you can use
8974 the Cryptsetup/LUKS utilities to do that (see @inlinefmtifelse{html,
8975 @uref{https://linux.die.net/man/8/cryptsetup, @code{man cryptsetup}},
8976 @code{man cryptsetup}} for more information.) Assuming you want to
8977 store the root partition on @file{/dev/sda2}, the command sequence would
8978 be along these lines:
8979
8980 @example
8981 cryptsetup luksFormat /dev/sda2
8982 cryptsetup open --type luks /dev/sda2 my-partition
8983 mkfs.ext4 -L my-root /dev/mapper/my-partition
8984 @end example
8985
8986 Once that is done, mount the target file system under @file{/mnt}
8987 with a command like (again, assuming @code{my-root} is the label of the
8988 root file system):
8989
8990 @example
8991 mount LABEL=my-root /mnt
8992 @end example
8993
8994 Also mount any other file systems you would like to use on the target
8995 system relative to this path. If you have @file{/boot} on a separate
8996 partition for example, mount it at @file{/mnt/boot} now so it is found
8997 by @code{guix system init} afterwards.
8998
8999 Finally, if you plan to use one or more swap partitions (@pxref{Memory
9000 Concepts, swap space,, libc, The GNU C Library Reference Manual}), make
9001 sure to initialize them with @command{mkswap}. Assuming you have one
9002 swap partition on @file{/dev/sda3}, you would run:
9003
9004 @example
9005 mkswap /dev/sda3
9006 swapon /dev/sda3
9007 @end example
9008
9009 Alternatively, you may use a swap file. For example, assuming that in
9010 the new system you want to use the file @file{/swapfile} as a swap file,
9011 you would run@footnote{This example will work for many types of file
9012 systems (e.g., ext4). However, for copy-on-write file systems (e.g.,
9013 btrfs), the required steps may be different. For details, see the
9014 manual pages for @command{mkswap} and @command{swapon}.}:
9015
9016 @example
9017 # This is 10 GiB of swap space. Adjust "count" to change the size.
9018 dd if=/dev/zero of=/mnt/swapfile bs=1MiB count=10240
9019 # For security, make the file readable and writable only by root.
9020 chmod 600 /mnt/swapfile
9021 mkswap /mnt/swapfile
9022 swapon /mnt/swapfile
9023 @end example
9024
9025 Note that if you have encrypted the root partition and created a swap
9026 file in its file system as described above, then the encryption also
9027 protects the swap file, just like any other file in that file system.
9028
9029 @node Proceeding with the Installation
9030 @subsection Proceeding with the Installation
9031
9032 With the target partitions ready and the target root mounted on
9033 @file{/mnt}, we're ready to go. First, run:
9034
9035 @example
9036 herd start cow-store /mnt
9037 @end example
9038
9039 This makes @file{/gnu/store} copy-on-write, such that packages added to it
9040 during the installation phase are written to the target disk on @file{/mnt}
9041 rather than kept in memory. This is necessary because the first phase of
9042 the @command{guix system init} command (see below) entails downloads or
9043 builds to @file{/gnu/store} which, initially, is an in-memory file system.
9044
9045 Next, you have to edit a file and
9046 provide the declaration of the operating system to be installed. To
9047 that end, the installation system comes with three text editors. We
9048 recommend GNU nano (@pxref{Top,,, nano, GNU nano Manual}), which
9049 supports syntax highlighting and parentheses matching; other editors
9050 include GNU Zile (an Emacs clone), and
9051 nvi (a clone of the original BSD @command{vi} editor).
9052 We strongly recommend storing that file on the target root file system, say,
9053 as @file{/mnt/etc/config.scm}. Failing to do that, you will have lost your
9054 configuration file once you have rebooted into the newly-installed system.
9055
9056 @xref{Using the Configuration System}, for an overview of the
9057 configuration file. The example configurations discussed in that
9058 section are available under @file{/etc/configuration} in the
9059 installation image. Thus, to get started with a system configuration
9060 providing a graphical display server (a ``desktop'' system), you can run
9061 something along these lines:
9062
9063 @example
9064 # mkdir /mnt/etc
9065 # cp /etc/configuration/desktop.scm /mnt/etc/config.scm
9066 # nano /mnt/etc/config.scm
9067 @end example
9068
9069 You should pay attention to what your configuration file contains, and
9070 in particular:
9071
9072 @itemize
9073 @item
9074 Make sure the @code{bootloader-configuration} form refers to the target
9075 you want to install GRUB on. It should mention @code{grub-bootloader} if
9076 you are installing GRUB in the legacy way, or @code{grub-efi-bootloader}
9077 for newer UEFI systems. For legacy systems, the @code{target} field
9078 names a device, like @code{/dev/sda}; for UEFI systems it names a path
9079 to a mounted EFI partition, like @code{/boot/efi}, and do make sure the
9080 path is actually mounted.
9081
9082 @item
9083 Be sure that your file system labels match the value of their respective
9084 @code{device} fields in your @code{file-system} configuration, assuming
9085 your @code{file-system} configuration uses the @code{file-system-label}
9086 procedure in its @code{device} field.
9087
9088 @item
9089 If there are encrypted or RAID partitions, make sure to add a
9090 @code{mapped-devices} field to describe them (@pxref{Mapped Devices}).
9091 @end itemize
9092
9093 Once you are done preparing the configuration file, the new system must
9094 be initialized (remember that the target root file system is mounted
9095 under @file{/mnt}):
9096
9097 @example
9098 guix system init /mnt/etc/config.scm /mnt
9099 @end example
9100
9101 @noindent
9102 This copies all the necessary files and installs GRUB on
9103 @file{/dev/sdX}, unless you pass the @option{--no-bootloader} option. For
9104 more information, @pxref{Invoking guix system}. This command may trigger
9105 downloads or builds of missing packages, which can take some time.
9106
9107 Once that command has completed---and hopefully succeeded!---you can run
9108 @command{reboot} and boot into the new system. The @code{root} password
9109 in the new system is initially empty; other users' passwords need to be
9110 initialized by running the @command{passwd} command as @code{root},
9111 unless your configuration specifies otherwise
9112 (@pxref{user-account-password, user account passwords}).
9113
9114 @cindex upgrading GuixSD
9115 From then on, you can update GuixSD whenever you want by running
9116 @command{guix pull} as @code{root} (@pxref{Invoking guix pull}), and
9117 then running @command{guix system reconfigure} to build a new system
9118 generation with the latest packages and services (@pxref{Invoking guix
9119 system}). We recommend doing that regularly so that your system
9120 includes the latest security updates (@pxref{Security Updates}).
9121
9122 Join us on @code{#guix} on the Freenode IRC network or on
9123 @file{guix-devel@@gnu.org} to share your experience---good or not so
9124 good.
9125
9126 @node Installing GuixSD in a VM
9127 @subsection Installing GuixSD in a Virtual Machine
9128
9129 @cindex virtual machine, GuixSD installation
9130 @cindex virtual private server (VPS)
9131 @cindex VPS (virtual private server)
9132 If you'd like to install GuixSD in a virtual machine (VM) or on a
9133 virtual private server (VPS) rather than on your beloved machine, this
9134 section is for you.
9135
9136 To boot a @uref{http://qemu.org/,QEMU} VM for installing GuixSD in a
9137 disk image, follow these steps:
9138
9139 @enumerate
9140 @item
9141 First, retrieve and decompress the GuixSD installation image as
9142 described previously (@pxref{USB Stick and DVD Installation}).
9143
9144 @item
9145 Create a disk image that will hold the installed system. To make a
9146 qcow2-formatted disk image, use the @command{qemu-img} command:
9147
9148 @example
9149 qemu-img create -f qcow2 guixsd.img 50G
9150 @end example
9151
9152 The resulting file will be much smaller than 50 GB (typically less than
9153 1 MB), but it will grow as the virtualized storage device is filled up.
9154
9155 @item
9156 Boot the USB installation image in an VM:
9157
9158 @example
9159 qemu-system-x86_64 -m 1024 -smp 1 \
9160 -net user -net nic,model=virtio -boot menu=on \
9161 -drive file=guixsd-install-@value{VERSION}.@var{system}.iso \
9162 -drive file=guixsd.img
9163 @end example
9164
9165 The ordering of the drives matters.
9166
9167 In the VM console, quickly press the @kbd{F12} key to enter the boot
9168 menu. Then press the @kbd{2} key and the @kbd{RET} key to validate your
9169 selection.
9170
9171 @item
9172 You're now root in the VM, proceed with the installation process.
9173 @xref{Preparing for Installation}, and follow the instructions.
9174 @end enumerate
9175
9176 Once installation is complete, you can boot the system that's on your
9177 @file{guixsd.img} image. @xref{Running GuixSD in a VM}, for how to do
9178 that.
9179
9180 @node Building the Installation Image
9181 @subsection Building the Installation Image
9182
9183 @cindex installation image
9184 The installation image described above was built using the @command{guix
9185 system} command, specifically:
9186
9187 @example
9188 guix system disk-image gnu/system/install.scm
9189 @end example
9190
9191 Have a look at @file{gnu/system/install.scm} in the source tree,
9192 and see also @ref{Invoking guix system} for more information
9193 about the installation image.
9194
9195 @subsection Building the Installation Image for ARM Boards
9196
9197 Many ARM boards require a specific variant of the
9198 @uref{http://www.denx.de/wiki/U-Boot/, U-Boot} bootloader.
9199
9200 If you build a disk image and the bootloader is not available otherwise
9201 (on another boot drive etc), it's advisable to build an image that
9202 includes the bootloader, specifically:
9203
9204 @example
9205 guix system disk-image --system=armhf-linux -e '((@@ (gnu system install) os-with-u-boot) (@@ (gnu system install) installation-os) "A20-OLinuXino-Lime2")'
9206 @end example
9207
9208 @code{A20-OLinuXino-Lime2} is the name of the board. If you specify an invalid
9209 board, a list of possible boards will be printed.
9210
9211 @node System Configuration
9212 @section System Configuration
9213
9214 @cindex system configuration
9215 The Guix System Distribution supports a consistent whole-system configuration
9216 mechanism. By that we mean that all aspects of the global system
9217 configuration---such as the available system services, timezone and
9218 locale settings, user accounts---are declared in a single place. Such
9219 a @dfn{system configuration} can be @dfn{instantiated}---i.e., effected.
9220
9221 One of the advantages of putting all the system configuration under the
9222 control of Guix is that it supports transactional system upgrades, and
9223 makes it possible to roll back to a previous system instantiation,
9224 should something go wrong with the new one (@pxref{Features}). Another
9225 advantage is that it makes it easy to replicate the exact same configuration
9226 across different machines, or at different points in time, without
9227 having to resort to additional administration tools layered on top of
9228 the own tools of the system.
9229 @c Yes, we're talking of Puppet, Chef, & co. here. ↑
9230
9231 This section describes this mechanism. First we focus on the system
9232 administrator's viewpoint---explaining how the system is configured and
9233 instantiated. Then we show how this mechanism can be extended, for
9234 instance to support new system services.
9235
9236 @menu
9237 * Using the Configuration System:: Customizing your GNU system.
9238 * operating-system Reference:: Detail of operating-system declarations.
9239 * File Systems:: Configuring file system mounts.
9240 * Mapped Devices:: Block device extra processing.
9241 * User Accounts:: Specifying user accounts.
9242 * Locales:: Language and cultural convention settings.
9243 * Services:: Specifying system services.
9244 * Setuid Programs:: Programs running with root privileges.
9245 * X.509 Certificates:: Authenticating HTTPS servers.
9246 * Name Service Switch:: Configuring libc's name service switch.
9247 * Initial RAM Disk:: Linux-Libre bootstrapping.
9248 * Bootloader Configuration:: Configuring the boot loader.
9249 * Invoking guix system:: Instantiating a system configuration.
9250 * Running GuixSD in a VM:: How to run GuixSD in a virtual machine.
9251 * Defining Services:: Adding new service definitions.
9252 @end menu
9253
9254 @node Using the Configuration System
9255 @subsection Using the Configuration System
9256
9257 The operating system is configured by providing an
9258 @code{operating-system} declaration in a file that can then be passed to
9259 the @command{guix system} command (@pxref{Invoking guix system}). A
9260 simple setup, with the default system services, the default Linux-Libre
9261 kernel, initial RAM disk, and boot loader looks like this:
9262
9263 @findex operating-system
9264 @lisp
9265 @include os-config-bare-bones.texi
9266 @end lisp
9267
9268 This example should be self-describing. Some of the fields defined
9269 above, such as @code{host-name} and @code{bootloader}, are mandatory.
9270 Others, such as @code{packages} and @code{services}, can be omitted, in
9271 which case they get a default value.
9272
9273 Below we discuss the effect of some of the most important fields
9274 (@pxref{operating-system Reference}, for details about all the available
9275 fields), and how to @dfn{instantiate} the operating system using
9276 @command{guix system}.
9277
9278 @unnumberedsubsubsec Bootloader
9279
9280 @cindex legacy boot, on Intel machines
9281 @cindex BIOS boot, on Intel machines
9282 @cindex UEFI boot
9283 @cindex EFI boot
9284 The @code{bootloader} field describes the method that will be used to boot
9285 your system. Machines based on Intel processors can boot in ``legacy'' BIOS
9286 mode, as in the example above. However, more recent machines rely instead on
9287 the @dfn{Unified Extensible Firmware Interface} (UEFI) to boot. In that case,
9288 the @code{bootloader} field should contain something along these lines:
9289
9290 @example
9291 (bootloader-configuration
9292 (bootloader grub-efi-bootloader)
9293 (target "/boot/efi"))
9294 @end example
9295
9296 @xref{Bootloader Configuration}, for more information on the available
9297 configuration options.
9298
9299 @unnumberedsubsubsec Globally-Visible Packages
9300
9301 @vindex %base-packages
9302 The @code{packages} field lists packages that will be globally visible
9303 on the system, for all user accounts---i.e., in every user's @code{PATH}
9304 environment variable---in addition to the per-user profiles
9305 (@pxref{Invoking guix package}). The @var{%base-packages} variable
9306 provides all the tools one would expect for basic user and administrator
9307 tasks---including the GNU Core Utilities, the GNU Networking Utilities,
9308 the GNU Zile lightweight text editor, @command{find}, @command{grep},
9309 etc. The example above adds GNU@tie{}Screen and OpenSSH to those,
9310 taken from the @code{(gnu packages screen)} and @code{(gnu packages ssh)}
9311 modules (@pxref{Package Modules}). The
9312 @code{(list package output)} syntax can be used to add a specific output
9313 of a package:
9314
9315 @lisp
9316 (use-modules (gnu packages))
9317 (use-modules (gnu packages dns))
9318
9319 (operating-system
9320 ;; ...
9321 (packages (cons (list bind "utils")
9322 %base-packages)))
9323 @end lisp
9324
9325 @findex specification->package
9326 Referring to packages by variable name, like @code{bind} above, has
9327 the advantage of being unambiguous; it also allows typos and such to be
9328 diagnosed right away as ``unbound variables''. The downside is that one
9329 needs to know which module defines which package, and to augment the
9330 @code{use-package-modules} line accordingly. To avoid that, one can use
9331 the @code{specification->package} procedure of the @code{(gnu packages)}
9332 module, which returns the best package for a given name or name and
9333 version:
9334
9335 @lisp
9336 (use-modules (gnu packages))
9337
9338 (operating-system
9339 ;; ...
9340 (packages (append (map specification->package
9341 '("tcpdump" "htop" "gnupg@@2.0"))
9342 %base-packages)))
9343 @end lisp
9344
9345 @unnumberedsubsubsec System Services
9346
9347 @cindex services
9348 @vindex %base-services
9349 The @code{services} field lists @dfn{system services} to be made
9350 available when the system starts (@pxref{Services}).
9351 The @code{operating-system} declaration above specifies that, in
9352 addition to the basic services, we want the @command{lshd} secure shell
9353 daemon listening on port 2222 (@pxref{Networking Services,
9354 @code{lsh-service}}). Under the hood,
9355 @code{lsh-service} arranges so that @code{lshd} is started with the
9356 right command-line options, possibly with supporting configuration files
9357 generated as needed (@pxref{Defining Services}).
9358
9359 @cindex customization, of services
9360 @findex modify-services
9361 Occasionally, instead of using the base services as is, you will want to
9362 customize them. To do this, use @code{modify-services} (@pxref{Service
9363 Reference, @code{modify-services}}) to modify the list.
9364
9365 For example, suppose you want to modify @code{guix-daemon} and Mingetty
9366 (the console log-in) in the @var{%base-services} list (@pxref{Base
9367 Services, @code{%base-services}}). To do that, you can write the
9368 following in your operating system declaration:
9369
9370 @lisp
9371 (define %my-services
9372 ;; My very own list of services.
9373 (modify-services %base-services
9374 (guix-service-type config =>
9375 (guix-configuration
9376 (inherit config)
9377 (use-substitutes? #f)
9378 (extra-options '("--gc-keep-derivations"))))
9379 (mingetty-service-type config =>
9380 (mingetty-configuration
9381 (inherit config)))))
9382
9383 (operating-system
9384 ;; @dots{}
9385 (services %my-services))
9386 @end lisp
9387
9388 This changes the configuration---i.e., the service parameters---of the
9389 @code{guix-service-type} instance, and that of all the
9390 @code{mingetty-service-type} instances in the @var{%base-services} list.
9391 Observe how this is accomplished: first, we arrange for the original
9392 configuration to be bound to the identifier @code{config} in the
9393 @var{body}, and then we write the @var{body} so that it evaluates to the
9394 desired configuration. In particular, notice how we use @code{inherit}
9395 to create a new configuration which has the same values as the old
9396 configuration, but with a few modifications.
9397
9398 @cindex encrypted disk
9399 The configuration for a typical ``desktop'' usage, with an encrypted
9400 root partition, the X11 display
9401 server, GNOME and Xfce (users can choose which of these desktop
9402 environments to use at the log-in screen by pressing @kbd{F1}), network
9403 management, power management, and more, would look like this:
9404
9405 @lisp
9406 @include os-config-desktop.texi
9407 @end lisp
9408
9409 A graphical system with a choice of lightweight window managers
9410 instead of full-blown desktop environments would look like this:
9411
9412 @lisp
9413 @include os-config-lightweight-desktop.texi
9414 @end lisp
9415
9416 This example refers to the @file{/boot/efi} file system by its UUID,
9417 @code{1234-ABCD}. Replace this UUID with the right UUID on your system,
9418 as returned by the @command{blkid} command.
9419
9420 @xref{Desktop Services}, for the exact list of services provided by
9421 @var{%desktop-services}. @xref{X.509 Certificates}, for background
9422 information about the @code{nss-certs} package that is used here.
9423
9424 Again, @var{%desktop-services} is just a list of service objects. If
9425 you want to remove services from there, you can do so using the
9426 procedures for list filtering (@pxref{SRFI-1 Filtering and
9427 Partitioning,,, guile, GNU Guile Reference Manual}). For instance, the
9428 following expression returns a list that contains all the services in
9429 @var{%desktop-services} minus the Avahi service:
9430
9431 @example
9432 (remove (lambda (service)
9433 (eq? (service-kind service) avahi-service-type))
9434 %desktop-services)
9435 @end example
9436
9437 @unnumberedsubsubsec Instantiating the System
9438
9439 Assuming the @code{operating-system} declaration
9440 is stored in the @file{my-system-config.scm}
9441 file, the @command{guix system reconfigure my-system-config.scm} command
9442 instantiates that configuration, and makes it the default GRUB boot
9443 entry (@pxref{Invoking guix system}).
9444
9445 The normal way to change the system configuration is by updating this
9446 file and re-running @command{guix system reconfigure}. One should never
9447 have to touch files in @file{/etc} or to run commands that modify the
9448 system state such as @command{useradd} or @command{grub-install}. In
9449 fact, you must avoid that since that would not only void your warranty
9450 but also prevent you from rolling back to previous versions of your
9451 system, should you ever need to.
9452
9453 @cindex roll-back, of the operating system
9454 Speaking of roll-back, each time you run @command{guix system
9455 reconfigure}, a new @dfn{generation} of the system is created---without
9456 modifying or deleting previous generations. Old system generations get
9457 an entry in the bootloader boot menu, allowing you to boot them in case
9458 something went wrong with the latest generation. Reassuring, no? The
9459 @command{guix system list-generations} command lists the system
9460 generations available on disk. It is also possible to roll back the
9461 system via the commands @command{guix system roll-back} and
9462 @command{guix system switch-generation}.
9463
9464 Although the @command{guix system reconfigure} command will not modify
9465 previous generations, you must take care when the current generation is not
9466 the latest (e.g., after invoking @command{guix system roll-back}), since
9467 the operation might overwrite a later generation (@pxref{Invoking guix
9468 system}).
9469
9470 @unnumberedsubsubsec The Programming Interface
9471
9472 At the Scheme level, the bulk of an @code{operating-system} declaration
9473 is instantiated with the following monadic procedure (@pxref{The Store
9474 Monad}):
9475
9476 @deffn {Monadic Procedure} operating-system-derivation os
9477 Return a derivation that builds @var{os}, an @code{operating-system}
9478 object (@pxref{Derivations}).
9479
9480 The output of the derivation is a single directory that refers to all
9481 the packages, configuration files, and other supporting files needed to
9482 instantiate @var{os}.
9483 @end deffn
9484
9485 This procedure is provided by the @code{(gnu system)} module. Along
9486 with @code{(gnu services)} (@pxref{Services}), this module contains the
9487 guts of GuixSD. Make sure to visit it!
9488
9489
9490 @node operating-system Reference
9491 @subsection @code{operating-system} Reference
9492
9493 This section summarizes all the options available in
9494 @code{operating-system} declarations (@pxref{Using the Configuration
9495 System}).
9496
9497 @deftp {Data Type} operating-system
9498 This is the data type representing an operating system configuration.
9499 By that, we mean all the global system configuration, not per-user
9500 configuration (@pxref{Using the Configuration System}).
9501
9502 @table @asis
9503 @item @code{kernel} (default: @var{linux-libre})
9504 The package object of the operating system kernel to use@footnote{Currently
9505 only the Linux-libre kernel is supported. In the future, it will be
9506 possible to use the GNU@tie{}Hurd.}.
9507
9508 @item @code{kernel-arguments} (default: @code{'()})
9509 List of strings or gexps representing additional arguments to pass on
9510 the command-line of the kernel---e.g., @code{("console=ttyS0")}.
9511
9512 @item @code{bootloader}
9513 The system bootloader configuration object. @xref{Bootloader Configuration}.
9514
9515 @item @code{initrd-modules} (default: @code{%base-initrd-modules})
9516 @cindex initrd
9517 @cindex initial RAM disk
9518 The list of Linux kernel modules that need to be available in the
9519 initial RAM disk. @xref{Initial RAM Disk}.
9520
9521 @item @code{initrd} (default: @code{base-initrd})
9522 A monadic procedure that returns an initial RAM disk for the Linux
9523 kernel. This field is provided to support low-level customization and
9524 should rarely be needed for casual use. @xref{Initial RAM Disk}.
9525
9526 @item @code{firmware} (default: @var{%base-firmware})
9527 @cindex firmware
9528 List of firmware packages loadable by the operating system kernel.
9529
9530 The default includes firmware needed for Atheros- and Broadcom-based
9531 WiFi devices (Linux-libre modules @code{ath9k} and @code{b43-open},
9532 respectively). @xref{Hardware Considerations}, for more info on
9533 supported hardware.
9534
9535 @item @code{host-name}
9536 The host name.
9537
9538 @item @code{hosts-file}
9539 @cindex hosts file
9540 A file-like object (@pxref{G-Expressions, file-like objects}) for use as
9541 @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library
9542 Reference Manual}). The default is a file with entries for
9543 @code{localhost} and @var{host-name}.
9544
9545 @item @code{mapped-devices} (default: @code{'()})
9546 A list of mapped devices. @xref{Mapped Devices}.
9547
9548 @item @code{file-systems}
9549 A list of file systems. @xref{File Systems}.
9550
9551 @item @code{swap-devices} (default: @code{'()})
9552 @cindex swap devices
9553 A list of strings identifying devices or files to be used for ``swap
9554 space'' (@pxref{Memory Concepts,,, libc, The GNU C Library Reference
9555 Manual}). For example, @code{'("/dev/sda3")} or @code{'("/swapfile")}.
9556 It is possible to specify a swap file in a file system on a mapped
9557 device, provided that the necessary device mapping and file system are
9558 also specified. @xref{Mapped Devices} and @ref{File Systems}.
9559
9560 @item @code{users} (default: @code{%base-user-accounts})
9561 @itemx @code{groups} (default: @var{%base-groups})
9562 List of user accounts and groups. @xref{User Accounts}.
9563
9564 If the @code{users} list lacks a user account with UID@tie{}0, a
9565 ``root'' account with UID@tie{}0 is automatically added.
9566
9567 @item @code{skeletons} (default: @code{(default-skeletons)})
9568 A list target file name/file-like object tuples (@pxref{G-Expressions,
9569 file-like objects}). These are the skeleton files that will be added to
9570 the home directory of newly-created user accounts.
9571
9572 For instance, a valid value may look like this:
9573
9574 @example
9575 `((".bashrc" ,(plain-file "bashrc" "echo Hello\n"))
9576 (".guile" ,(plain-file "guile"
9577 "(use-modules (ice-9 readline))
9578 (activate-readline)")))
9579 @end example
9580
9581 @item @code{issue} (default: @var{%default-issue})
9582 A string denoting the contents of the @file{/etc/issue} file, which is
9583 displayed when users log in on a text console.
9584
9585 @item @code{packages} (default: @var{%base-packages})
9586 The set of packages installed in the global profile, which is accessible
9587 at @file{/run/current-system/profile}.
9588
9589 The default set includes core utilities and it is good practice to
9590 install non-core utilities in user profiles (@pxref{Invoking guix
9591 package}).
9592
9593 @item @code{timezone}
9594 A timezone identifying string---e.g., @code{"Europe/Paris"}.
9595
9596 You can run the @command{tzselect} command to find out which timezone
9597 string corresponds to your region. Choosing an invalid timezone name
9598 causes @command{guix system} to fail.
9599
9600 @item @code{locale} (default: @code{"en_US.utf8"})
9601 The name of the default locale (@pxref{Locale Names,,, libc, The GNU C
9602 Library Reference Manual}). @xref{Locales}, for more information.
9603
9604 @item @code{locale-definitions} (default: @var{%default-locale-definitions})
9605 The list of locale definitions to be compiled and that may be used at
9606 run time. @xref{Locales}.
9607
9608 @item @code{locale-libcs} (default: @code{(list @var{glibc})})
9609 The list of GNU@tie{}libc packages whose locale data and tools are used
9610 to build the locale definitions. @xref{Locales}, for compatibility
9611 considerations that justify this option.
9612
9613 @item @code{name-service-switch} (default: @var{%default-nss})
9614 Configuration of the libc name service switch (NSS)---a
9615 @code{<name-service-switch>} object. @xref{Name Service Switch}, for
9616 details.
9617
9618 @item @code{services} (default: @var{%base-services})
9619 A list of service objects denoting system services. @xref{Services}.
9620
9621 @item @code{pam-services} (default: @code{(base-pam-services)})
9622 @cindex PAM
9623 @cindex pluggable authentication modules
9624 Linux @dfn{pluggable authentication module} (PAM) services.
9625 @c FIXME: Add xref to PAM services section.
9626
9627 @item @code{setuid-programs} (default: @var{%setuid-programs})
9628 List of string-valued G-expressions denoting setuid programs.
9629 @xref{Setuid Programs}.
9630
9631 @item @code{sudoers-file} (default: @var{%sudoers-specification})
9632 @cindex sudoers file
9633 The contents of the @file{/etc/sudoers} file as a file-like object
9634 (@pxref{G-Expressions, @code{local-file} and @code{plain-file}}).
9635
9636 This file specifies which users can use the @command{sudo} command, what
9637 they are allowed to do, and what privileges they may gain. The default
9638 is that only @code{root} and members of the @code{wheel} group may use
9639 @code{sudo}.
9640
9641 @end table
9642 @end deftp
9643
9644 @node File Systems
9645 @subsection File Systems
9646
9647 The list of file systems to be mounted is specified in the
9648 @code{file-systems} field of the operating system declaration
9649 (@pxref{Using the Configuration System}). Each file system is declared
9650 using the @code{file-system} form, like this:
9651
9652 @example
9653 (file-system
9654 (mount-point "/home")
9655 (device "/dev/sda3")
9656 (type "ext4"))
9657 @end example
9658
9659 As usual, some of the fields are mandatory---those shown in the example
9660 above---while others can be omitted. These are described below.
9661
9662 @deftp {Data Type} file-system
9663 Objects of this type represent file systems to be mounted. They
9664 contain the following members:
9665
9666 @table @asis
9667 @item @code{type}
9668 This is a string specifying the type of the file system---e.g.,
9669 @code{"ext4"}.
9670
9671 @item @code{mount-point}
9672 This designates the place where the file system is to be mounted.
9673
9674 @item @code{device}
9675 This names the ``source'' of the file system. It can be one of three
9676 things: a file system label, a file system UUID, or the name of a
9677 @file{/dev} node. Labels and UUIDs offer a way to refer to file
9678 systems without having to hard-code their actual device
9679 name@footnote{Note that, while it is tempting to use
9680 @file{/dev/disk/by-uuid} and similar device names to achieve the same
9681 result, this is not recommended: These special device nodes are created
9682 by the udev daemon and may be unavailable at the time the device is
9683 mounted.}.
9684
9685 @findex file-system-label
9686 File system labels are created using the @code{file-system-label}
9687 procedure, UUIDs are created using @code{uuid}, and @file{/dev} node are
9688 plain strings. Here's an example of a file system referred to by its
9689 label, as shown by the @command{e2label} command:
9690
9691 @example
9692 (file-system
9693 (mount-point "/home")
9694 (type "ext4")
9695 (device (file-system-label "my-home")))
9696 @end example
9697
9698 @findex uuid
9699 UUIDs are converted from their string representation (as shown by the
9700 @command{tune2fs -l} command) using the @code{uuid} form@footnote{The
9701 @code{uuid} form expects 16-byte UUIDs as defined in
9702 @uref{https://tools.ietf.org/html/rfc4122, RFC@tie{}4122}. This is the
9703 form of UUID used by the ext2 family of file systems and others, but it
9704 is different from ``UUIDs'' found in FAT file systems, for instance.},
9705 like this:
9706
9707 @example
9708 (file-system
9709 (mount-point "/home")
9710 (type "ext4")
9711 (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
9712 @end example
9713
9714 When the source of a file system is a mapped device (@pxref{Mapped
9715 Devices}), its @code{device} field @emph{must} refer to the mapped
9716 device name---e.g., @file{"/dev/mapper/root-partition"}.
9717 This is required so that
9718 the system knows that mounting the file system depends on having the
9719 corresponding device mapping established.
9720
9721 @item @code{flags} (default: @code{'()})
9722 This is a list of symbols denoting mount flags. Recognized flags
9723 include @code{read-only}, @code{bind-mount}, @code{no-dev} (disallow
9724 access to special files), @code{no-suid} (ignore setuid and setgid
9725 bits), and @code{no-exec} (disallow program execution.)
9726
9727 @item @code{options} (default: @code{#f})
9728 This is either @code{#f}, or a string denoting mount options.
9729
9730 @item @code{mount?} (default: @code{#t})
9731 This value indicates whether to automatically mount the file system when
9732 the system is brought up. When set to @code{#f}, the file system gets
9733 an entry in @file{/etc/fstab} (read by the @command{mount} command) but
9734 is not automatically mounted.
9735
9736 @item @code{needed-for-boot?} (default: @code{#f})
9737 This Boolean value indicates whether the file system is needed when
9738 booting. If that is true, then the file system is mounted when the
9739 initial RAM disk (initrd) is loaded. This is always the case, for
9740 instance, for the root file system.
9741
9742 @item @code{check?} (default: @code{#t})
9743 This Boolean indicates whether the file system needs to be checked for
9744 errors before being mounted.
9745
9746 @item @code{create-mount-point?} (default: @code{#f})
9747 When true, the mount point is created if it does not exist yet.
9748
9749 @item @code{dependencies} (default: @code{'()})
9750 This is a list of @code{<file-system>} or @code{<mapped-device>} objects
9751 representing file systems that must be mounted or mapped devices that
9752 must be opened before (and unmounted or closed after) this one.
9753
9754 As an example, consider a hierarchy of mounts: @file{/sys/fs/cgroup} is
9755 a dependency of @file{/sys/fs/cgroup/cpu} and
9756 @file{/sys/fs/cgroup/memory}.
9757
9758 Another example is a file system that depends on a mapped device, for
9759 example for an encrypted partition (@pxref{Mapped Devices}).
9760 @end table
9761 @end deftp
9762
9763 The @code{(gnu system file-systems)} exports the following useful
9764 variables.
9765
9766 @defvr {Scheme Variable} %base-file-systems
9767 These are essential file systems that are required on normal systems,
9768 such as @var{%pseudo-terminal-file-system} and @var{%immutable-store} (see
9769 below.) Operating system declarations should always contain at least
9770 these.
9771 @end defvr
9772
9773 @defvr {Scheme Variable} %pseudo-terminal-file-system
9774 This is the file system to be mounted as @file{/dev/pts}. It supports
9775 @dfn{pseudo-terminals} created @i{via} @code{openpty} and similar
9776 functions (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference
9777 Manual}). Pseudo-terminals are used by terminal emulators such as
9778 @command{xterm}.
9779 @end defvr
9780
9781 @defvr {Scheme Variable} %shared-memory-file-system
9782 This file system is mounted as @file{/dev/shm} and is used to support
9783 memory sharing across processes (@pxref{Memory-mapped I/O,
9784 @code{shm_open},, libc, The GNU C Library Reference Manual}).
9785 @end defvr
9786
9787 @defvr {Scheme Variable} %immutable-store
9788 This file system performs a read-only ``bind mount'' of
9789 @file{/gnu/store}, making it read-only for all the users including
9790 @code{root}. This prevents against accidental modification by software
9791 running as @code{root} or by system administrators.
9792
9793 The daemon itself is still able to write to the store: it remounts it
9794 read-write in its own ``name space.''
9795 @end defvr
9796
9797 @defvr {Scheme Variable} %binary-format-file-system
9798 The @code{binfmt_misc} file system, which allows handling of arbitrary
9799 executable file types to be delegated to user space. This requires the
9800 @code{binfmt.ko} kernel module to be loaded.
9801 @end defvr
9802
9803 @defvr {Scheme Variable} %fuse-control-file-system
9804 The @code{fusectl} file system, which allows unprivileged users to mount
9805 and unmount user-space FUSE file systems. This requires the
9806 @code{fuse.ko} kernel module to be loaded.
9807 @end defvr
9808
9809 @node Mapped Devices
9810 @subsection Mapped Devices
9811
9812 @cindex device mapping
9813 @cindex mapped devices
9814 The Linux kernel has a notion of @dfn{device mapping}: a block device,
9815 such as a hard disk partition, can be @dfn{mapped} into another device,
9816 usually in @code{/dev/mapper/},
9817 with additional processing over the data that flows through
9818 it@footnote{Note that the GNU@tie{}Hurd makes no difference between the
9819 concept of a ``mapped device'' and that of a file system: both boil down
9820 to @emph{translating} input/output operations made on a file to
9821 operations on its backing store. Thus, the Hurd implements mapped
9822 devices, like file systems, using the generic @dfn{translator} mechanism
9823 (@pxref{Translators,,, hurd, The GNU Hurd Reference Manual}).}. A
9824 typical example is encryption device mapping: all writes to the mapped
9825 device are encrypted, and all reads are deciphered, transparently.
9826 Guix extends this notion by considering any device or set of devices that
9827 are @dfn{transformed} in some way to create a new device; for instance,
9828 RAID devices are obtained by @dfn{assembling} several other devices, such
9829 as hard disks or partitions, into a new one that behaves as one partition.
9830 Other examples, not yet implemented, are LVM logical volumes.
9831
9832 Mapped devices are declared using the @code{mapped-device} form,
9833 defined as follows; for examples, see below.
9834
9835 @deftp {Data Type} mapped-device
9836 Objects of this type represent device mappings that will be made when
9837 the system boots up.
9838
9839 @table @code
9840 @item source
9841 This is either a string specifying the name of the block device to be mapped,
9842 such as @code{"/dev/sda3"}, or a list of such strings when several devices
9843 need to be assembled for creating a new one.
9844
9845 @item target
9846 This string specifies the name of the resulting mapped device. For
9847 kernel mappers such as encrypted devices of type @code{luks-device-mapping},
9848 specifying @code{"my-partition"} leads to the creation of
9849 the @code{"/dev/mapper/my-partition"} device.
9850 For RAID devices of type @code{raid-device-mapping}, the full device name
9851 such as @code{"/dev/md0"} needs to be given.
9852
9853 @item type
9854 This must be a @code{mapped-device-kind} object, which specifies how
9855 @var{source} is mapped to @var{target}.
9856 @end table
9857 @end deftp
9858
9859 @defvr {Scheme Variable} luks-device-mapping
9860 This defines LUKS block device encryption using the @command{cryptsetup}
9861 command from the package with the same name. It relies on the
9862 @code{dm-crypt} Linux kernel module.
9863 @end defvr
9864
9865 @defvr {Scheme Variable} raid-device-mapping
9866 This defines a RAID device, which is assembled using the @code{mdadm}
9867 command from the package with the same name. It requires a Linux kernel
9868 module for the appropriate RAID level to be loaded, such as @code{raid456}
9869 for RAID-4, RAID-5 or RAID-6, or @code{raid10} for RAID-10.
9870 @end defvr
9871
9872 @cindex disk encryption
9873 @cindex LUKS
9874 The following example specifies a mapping from @file{/dev/sda3} to
9875 @file{/dev/mapper/home} using LUKS---the
9876 @url{https://gitlab.com/cryptsetup/cryptsetup,Linux Unified Key Setup}, a
9877 standard mechanism for disk encryption.
9878 The @file{/dev/mapper/home}
9879 device can then be used as the @code{device} of a @code{file-system}
9880 declaration (@pxref{File Systems}).
9881
9882 @example
9883 (mapped-device
9884 (source "/dev/sda3")
9885 (target "home")
9886 (type luks-device-mapping))
9887 @end example
9888
9889 Alternatively, to become independent of device numbering, one may obtain
9890 the LUKS UUID (@dfn{unique identifier}) of the source device by a
9891 command like:
9892
9893 @example
9894 cryptsetup luksUUID /dev/sda3
9895 @end example
9896
9897 and use it as follows:
9898
9899 @example
9900 (mapped-device
9901 (source (uuid "cb67fc72-0d54-4c88-9d4b-b225f30b0f44"))
9902 (target "home")
9903 (type luks-device-mapping))
9904 @end example
9905
9906 @cindex swap encryption
9907 It is also desirable to encrypt swap space, since swap space may contain
9908 sensitive data. One way to accomplish that is to use a swap file in a
9909 file system on a device mapped via LUKS encryption. In this way, the
9910 swap file is encrypted because the entire device is encrypted.
9911 @xref{Preparing for Installation,,Disk Partitioning}, for an example.
9912
9913 A RAID device formed of the partitions @file{/dev/sda1} and @file{/dev/sdb1}
9914 may be declared as follows:
9915
9916 @example
9917 (mapped-device
9918 (source (list "/dev/sda1" "/dev/sdb1"))
9919 (target "/dev/md0")
9920 (type raid-device-mapping))
9921 @end example
9922
9923 The @file{/dev/md0} device can then be used as the @code{device} of a
9924 @code{file-system} declaration (@pxref{File Systems}).
9925 Note that the RAID level need not be given; it is chosen during the
9926 initial creation and formatting of the RAID device and is determined
9927 automatically later.
9928
9929
9930 @node User Accounts
9931 @subsection User Accounts
9932
9933 @cindex users
9934 @cindex accounts
9935 @cindex user accounts
9936 User accounts and groups are entirely managed through the
9937 @code{operating-system} declaration. They are specified with the
9938 @code{user-account} and @code{user-group} forms:
9939
9940 @example
9941 (user-account
9942 (name "alice")
9943 (group "users")
9944 (supplementary-groups '("wheel" ;allow use of sudo, etc.
9945 "audio" ;sound card
9946 "video" ;video devices such as webcams
9947 "cdrom")) ;the good ol' CD-ROM
9948 (comment "Bob's sister")
9949 (home-directory "/home/alice"))
9950 @end example
9951
9952 When booting or upon completion of @command{guix system reconfigure},
9953 the system ensures that only the user accounts and groups specified in
9954 the @code{operating-system} declaration exist, and with the specified
9955 properties. Thus, account or group creations or modifications made by
9956 directly invoking commands such as @command{useradd} are lost upon
9957 reconfiguration or reboot. This ensures that the system remains exactly
9958 as declared.
9959
9960 @deftp {Data Type} user-account
9961 Objects of this type represent user accounts. The following members may
9962 be specified:
9963
9964 @table @asis
9965 @item @code{name}
9966 The name of the user account.
9967
9968 @item @code{group}
9969 @cindex groups
9970 This is the name (a string) or identifier (a number) of the user group
9971 this account belongs to.
9972
9973 @item @code{supplementary-groups} (default: @code{'()})
9974 Optionally, this can be defined as a list of group names that this
9975 account belongs to.
9976
9977 @item @code{uid} (default: @code{#f})
9978 This is the user ID for this account (a number), or @code{#f}. In the
9979 latter case, a number is automatically chosen by the system when the
9980 account is created.
9981
9982 @item @code{comment} (default: @code{""})
9983 A comment about the account, such as the account owner's full name.
9984
9985 @item @code{home-directory}
9986 This is the name of the home directory for the account.
9987
9988 @item @code{create-home-directory?} (default: @code{#t})
9989 Indicates whether the home directory of this account should be created
9990 if it does not exist yet.
9991
9992 @item @code{shell} (default: Bash)
9993 This is a G-expression denoting the file name of a program to be used as
9994 the shell (@pxref{G-Expressions}).
9995
9996 @item @code{system?} (default: @code{#f})
9997 This Boolean value indicates whether the account is a ``system''
9998 account. System accounts are sometimes treated specially; for instance,
9999 graphical login managers do not list them.
10000
10001 @anchor{user-account-password}
10002 @item @code{password} (default: @code{#f})
10003 You would normally leave this field to @code{#f}, initialize user
10004 passwords as @code{root} with the @command{passwd} command, and then let
10005 users change it with @command{passwd}. Passwords set with
10006 @command{passwd} are of course preserved across reboot and
10007 reconfiguration.
10008
10009 If you @emph{do} want to have a preset password for an account, then
10010 this field must contain the encrypted password, as a string.
10011 @xref{crypt,,, libc, The GNU C Library Reference Manual}, for more information
10012 on password encryption, and @ref{Encryption,,, guile, GNU Guile Reference
10013 Manual}, for information on Guile's @code{crypt} procedure.
10014
10015 @end table
10016 @end deftp
10017
10018 @cindex groups
10019 User group declarations are even simpler:
10020
10021 @example
10022 (user-group (name "students"))
10023 @end example
10024
10025 @deftp {Data Type} user-group
10026 This type is for, well, user groups. There are just a few fields:
10027
10028 @table @asis
10029 @item @code{name}
10030 The name of the group.
10031
10032 @item @code{id} (default: @code{#f})
10033 The group identifier (a number). If @code{#f}, a new number is
10034 automatically allocated when the group is created.
10035
10036 @item @code{system?} (default: @code{#f})
10037 This Boolean value indicates whether the group is a ``system'' group.
10038 System groups have low numerical IDs.
10039
10040 @item @code{password} (default: @code{#f})
10041 What, user groups can have a password? Well, apparently yes. Unless
10042 @code{#f}, this field specifies the password of the group.
10043
10044 @end table
10045 @end deftp
10046
10047 For convenience, a variable lists all the basic user groups one may
10048 expect:
10049
10050 @defvr {Scheme Variable} %base-groups
10051 This is the list of basic user groups that users and/or packages expect
10052 to be present on the system. This includes groups such as ``root'',
10053 ``wheel'', and ``users'', as well as groups used to control access to
10054 specific devices such as ``audio'', ``disk'', and ``cdrom''.
10055 @end defvr
10056
10057 @defvr {Scheme Variable} %base-user-accounts
10058 This is the list of basic system accounts that programs may expect to
10059 find on a GNU/Linux system, such as the ``nobody'' account.
10060
10061 Note that the ``root'' account is not included here. It is a
10062 special-case and is automatically added whether or not it is specified.
10063 @end defvr
10064
10065 @node Locales
10066 @subsection Locales
10067
10068 @cindex locale
10069 A @dfn{locale} defines cultural conventions for a particular language
10070 and region of the world (@pxref{Locales,,, libc, The GNU C Library
10071 Reference Manual}). Each locale has a name that typically has the form
10072 @code{@var{language}_@var{territory}.@var{codeset}}---e.g.,
10073 @code{fr_LU.utf8} designates the locale for the French language, with
10074 cultural conventions from Luxembourg, and using the UTF-8 encoding.
10075
10076 @cindex locale definition
10077 Usually, you will want to specify the default locale for the machine
10078 using the @code{locale} field of the @code{operating-system} declaration
10079 (@pxref{operating-system Reference, @code{locale}}).
10080
10081 The selected locale is automatically added to the @dfn{locale
10082 definitions} known to the system if needed, with its codeset inferred
10083 from its name---e.g., @code{bo_CN.utf8} will be assumed to use the
10084 @code{UTF-8} codeset. Additional locale definitions can be specified in
10085 the @code{locale-definitions} slot of @code{operating-system}---this is
10086 useful, for instance, if the codeset could not be inferred from the
10087 locale name. The default set of locale definitions includes some widely
10088 used locales, but not all the available locales, in order to save space.
10089
10090 For instance, to add the North Frisian locale for Germany, the value of
10091 that field may be:
10092
10093 @example
10094 (cons (locale-definition
10095 (name "fy_DE.utf8") (source "fy_DE"))
10096 %default-locale-definitions)
10097 @end example
10098
10099 Likewise, to save space, one might want @code{locale-definitions} to
10100 list only the locales that are actually used, as in:
10101
10102 @example
10103 (list (locale-definition
10104 (name "ja_JP.eucjp") (source "ja_JP")
10105 (charset "EUC-JP")))
10106 @end example
10107
10108 @vindex LOCPATH
10109 The compiled locale definitions are available at
10110 @file{/run/current-system/locale/X.Y}, where @code{X.Y} is the libc
10111 version, which is the default location where the GNU@tie{}libc provided
10112 by Guix looks for locale data. This can be overridden using the
10113 @code{LOCPATH} environment variable (@pxref{locales-and-locpath,
10114 @code{LOCPATH} and locale packages}).
10115
10116 The @code{locale-definition} form is provided by the @code{(gnu system
10117 locale)} module. Details are given below.
10118
10119 @deftp {Data Type} locale-definition
10120 This is the data type of a locale definition.
10121
10122 @table @asis
10123
10124 @item @code{name}
10125 The name of the locale. @xref{Locale Names,,, libc, The GNU C Library
10126 Reference Manual}, for more information on locale names.
10127
10128 @item @code{source}
10129 The name of the source for that locale. This is typically the
10130 @code{@var{language}_@var{territory}} part of the locale name.
10131
10132 @item @code{charset} (default: @code{"UTF-8"})
10133 The ``character set'' or ``code set'' for that locale,
10134 @uref{http://www.iana.org/assignments/character-sets, as defined by
10135 IANA}.
10136
10137 @end table
10138 @end deftp
10139
10140 @defvr {Scheme Variable} %default-locale-definitions
10141 A list of commonly used UTF-8 locales, used as the default
10142 value of the @code{locale-definitions} field of @code{operating-system}
10143 declarations.
10144
10145 @cindex locale name
10146 @cindex normalized codeset in locale names
10147 These locale definitions use the @dfn{normalized codeset} for the part
10148 that follows the dot in the name (@pxref{Using gettextized software,
10149 normalized codeset,, libc, The GNU C Library Reference Manual}). So for
10150 instance it has @code{uk_UA.utf8} but @emph{not}, say,
10151 @code{uk_UA.UTF-8}.
10152 @end defvr
10153
10154 @subsubsection Locale Data Compatibility Considerations
10155
10156 @cindex incompatibility, of locale data
10157 @code{operating-system} declarations provide a @code{locale-libcs} field
10158 to specify the GNU@tie{}libc packages that are used to compile locale
10159 declarations (@pxref{operating-system Reference}). ``Why would I
10160 care?'', you may ask. Well, it turns out that the binary format of
10161 locale data is occasionally incompatible from one libc version to
10162 another.
10163
10164 @c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
10165 @c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
10166 For instance, a program linked against libc version 2.21 is unable to
10167 read locale data produced with libc 2.22; worse, that program
10168 @emph{aborts} instead of simply ignoring the incompatible locale
10169 data@footnote{Versions 2.23 and later of GNU@tie{}libc will simply skip
10170 the incompatible locale data, which is already an improvement.}.
10171 Similarly, a program linked against libc 2.22 can read most, but not
10172 all, of the locale data from libc 2.21 (specifically, @code{LC_COLLATE}
10173 data is incompatible); thus calls to @code{setlocale} may fail, but
10174 programs will not abort.
10175
10176 The ``problem'' in GuixSD is that users have a lot of freedom: They can
10177 choose whether and when to upgrade software in their profiles, and might
10178 be using a libc version different from the one the system administrator
10179 used to build the system-wide locale data.
10180
10181 Fortunately, unprivileged users can also install their own locale data
10182 and define @var{GUIX_LOCPATH} accordingly (@pxref{locales-and-locpath,
10183 @code{GUIX_LOCPATH} and locale packages}).
10184
10185 Still, it is best if the system-wide locale data at
10186 @file{/run/current-system/locale} is built for all the libc versions
10187 actually in use on the system, so that all the programs can access
10188 it---this is especially crucial on a multi-user system. To do that, the
10189 administrator can specify several libc packages in the
10190 @code{locale-libcs} field of @code{operating-system}:
10191
10192 @example
10193 (use-package-modules base)
10194
10195 (operating-system
10196 ;; @dots{}
10197 (locale-libcs (list glibc-2.21 (canonical-package glibc))))
10198 @end example
10199
10200 This example would lead to a system containing locale definitions for
10201 both libc 2.21 and the current version of libc in
10202 @file{/run/current-system/locale}.
10203
10204
10205 @node Services
10206 @subsection Services
10207
10208 @cindex system services
10209 An important part of preparing an @code{operating-system} declaration is
10210 listing @dfn{system services} and their configuration (@pxref{Using the
10211 Configuration System}). System services are typically daemons launched
10212 when the system boots, or other actions needed at that time---e.g.,
10213 configuring network access.
10214
10215 GuixSD has a broad definition of ``service'' (@pxref{Service
10216 Composition}), but many services are managed by the GNU@tie{}Shepherd
10217 (@pxref{Shepherd Services}). On a running system, the @command{herd}
10218 command allows you to list the available services, show their status,
10219 start and stop them, or do other specific operations (@pxref{Jump
10220 Start,,, shepherd, The GNU Shepherd Manual}). For example:
10221
10222 @example
10223 # herd status
10224 @end example
10225
10226 The above command, run as @code{root}, lists the currently defined
10227 services. The @command{herd doc} command shows a synopsis of the given
10228 service:
10229
10230 @example
10231 # herd doc nscd
10232 Run libc's name service cache daemon (nscd).
10233 @end example
10234
10235 The @command{start}, @command{stop}, and @command{restart} sub-commands
10236 have the effect you would expect. For instance, the commands below stop
10237 the nscd service and restart the Xorg display server:
10238
10239 @example
10240 # herd stop nscd
10241 Service nscd has been stopped.
10242 # herd restart xorg-server
10243 Service xorg-server has been stopped.
10244 Service xorg-server has been started.
10245 @end example
10246
10247 The following sections document the available services, starting with
10248 the core services, that may be used in an @code{operating-system}
10249 declaration.
10250
10251 @menu
10252 * Base Services:: Essential system services.
10253 * Scheduled Job Execution:: The mcron service.
10254 * Log Rotation:: The rottlog service.
10255 * Networking Services:: Network setup, SSH daemon, etc.
10256 * X Window:: Graphical display.
10257 * Printing Services:: Local and remote printer support.
10258 * Desktop Services:: D-Bus and desktop services.
10259 * Sound Services:: ALSA and Pulseaudio services.
10260 * Database Services:: SQL databases, key-value stores, etc.
10261 * Mail Services:: IMAP, POP3, SMTP, and all that.
10262 * Messaging Services:: Messaging services.
10263 * Telephony Services:: Telephony services.
10264 * Monitoring Services:: Monitoring services.
10265 * Kerberos Services:: Kerberos services.
10266 * Web Services:: Web servers.
10267 * Certificate Services:: TLS certificates via Let's Encrypt.
10268 * DNS Services:: DNS daemons.
10269 * VPN Services:: VPN daemons.
10270 * Network File System:: NFS related services.
10271 * Continuous Integration:: The Cuirass service.
10272 * Power Management Services:: Extending battery life.
10273 * Audio Services:: The MPD.
10274 * Virtualization Services:: Virtualization services.
10275 * Version Control Services:: Providing remote access to Git repositories.
10276 * Game Services:: Game servers.
10277 * Miscellaneous Services:: Other services.
10278 @end menu
10279
10280 @node Base Services
10281 @subsubsection Base Services
10282
10283 The @code{(gnu services base)} module provides definitions for the basic
10284 services that one expects from the system. The services exported by
10285 this module are listed below.
10286
10287 @defvr {Scheme Variable} %base-services
10288 This variable contains a list of basic services (@pxref{Service Types
10289 and Services}, for more information on service objects) one would
10290 expect from the system: a login service (mingetty) on each tty, syslogd,
10291 the libc name service cache daemon (nscd), the udev device manager, and
10292 more.
10293
10294 This is the default value of the @code{services} field of
10295 @code{operating-system} declarations. Usually, when customizing a
10296 system, you will want to append services to @var{%base-services}, like
10297 this:
10298
10299 @example
10300 (cons* (avahi-service) (lsh-service) %base-services)
10301 @end example
10302 @end defvr
10303
10304 @defvr {Scheme Variable} special-files-service-type
10305 This is the service that sets up ``special files'' such as
10306 @file{/bin/sh}; an instance of it is part of @code{%base-services}.
10307
10308 The value associated with @code{special-files-service-type} services
10309 must be a list of tuples where the first element is the ``special file''
10310 and the second element is its target. By default it is:
10311
10312 @cindex @file{/bin/sh}
10313 @cindex @file{sh}, in @file{/bin}
10314 @example
10315 `(("/bin/sh" ,(file-append @var{bash} "/bin/sh")))
10316 @end example
10317
10318 @cindex @file{/usr/bin/env}
10319 @cindex @file{env}, in @file{/usr/bin}
10320 If you want to add, say, @code{/usr/bin/env} to your system, you can
10321 change it to:
10322
10323 @example
10324 `(("/bin/sh" ,(file-append @var{bash} "/bin/sh"))
10325 ("/usr/bin/env" ,(file-append @var{coreutils} "/bin/env")))
10326 @end example
10327
10328 Since this is part of @code{%base-services}, you can use
10329 @code{modify-services} to customize the set of special files
10330 (@pxref{Service Reference, @code{modify-services}}). But the simple way
10331 to add a special file is @i{via} the @code{extra-special-file} procedure
10332 (see below.)
10333 @end defvr
10334
10335 @deffn {Scheme Procedure} extra-special-file @var{file} @var{target}
10336 Use @var{target} as the ``special file'' @var{file}.
10337
10338 For example, adding the following lines to the @code{services} field of
10339 your operating system declaration leads to a @file{/usr/bin/env}
10340 symlink:
10341
10342 @example
10343 (extra-special-file "/usr/bin/env"
10344 (file-append coreutils "/bin/env"))
10345 @end example
10346 @end deffn
10347
10348 @deffn {Scheme Procedure} host-name-service @var{name}
10349 Return a service that sets the host name to @var{name}.
10350 @end deffn
10351
10352 @deffn {Scheme Procedure} login-service @var{config}
10353 Return a service to run login according to @var{config}, a
10354 @code{<login-configuration>} object, which specifies the message of the day,
10355 among other things.
10356 @end deffn
10357
10358 @deftp {Data Type} login-configuration
10359 This is the data type representing the configuration of login.
10360
10361 @table @asis
10362
10363 @item @code{motd}
10364 @cindex message of the day
10365 A file-like object containing the ``message of the day''.
10366
10367 @item @code{allow-empty-passwords?} (default: @code{#t})
10368 Allow empty passwords by default so that first-time users can log in when
10369 the 'root' account has just been created.
10370
10371 @end table
10372 @end deftp
10373
10374 @deffn {Scheme Procedure} mingetty-service @var{config}
10375 Return a service to run mingetty according to @var{config}, a
10376 @code{<mingetty-configuration>} object, which specifies the tty to run, among
10377 other things.
10378 @end deffn
10379
10380 @deftp {Data Type} mingetty-configuration
10381 This is the data type representing the configuration of Mingetty, which
10382 provides the default implementation of virtual console log-in.
10383
10384 @table @asis
10385
10386 @item @code{tty}
10387 The name of the console this Mingetty runs on---e.g., @code{"tty1"}.
10388
10389 @item @code{auto-login} (default: @code{#f})
10390 When true, this field must be a string denoting the user name under
10391 which the system automatically logs in. When it is @code{#f}, a
10392 user name and password must be entered to log in.
10393
10394 @item @code{login-program} (default: @code{#f})
10395 This must be either @code{#f}, in which case the default log-in program
10396 is used (@command{login} from the Shadow tool suite), or a gexp denoting
10397 the name of the log-in program.
10398
10399 @item @code{login-pause?} (default: @code{#f})
10400 When set to @code{#t} in conjunction with @var{auto-login}, the user
10401 will have to press a key before the log-in shell is launched.
10402
10403 @item @code{mingetty} (default: @var{mingetty})
10404 The Mingetty package to use.
10405
10406 @end table
10407 @end deftp
10408
10409 @deffn {Scheme Procedure} agetty-service @var{config}
10410 Return a service to run agetty according to @var{config}, an
10411 @code{<agetty-configuration>} object, which specifies the tty to run,
10412 among other things.
10413 @end deffn
10414
10415 @deftp {Data Type} agetty-configuration
10416 This is the data type representing the configuration of agetty, which
10417 implements virtual and serial console log-in. See the @code{agetty(8)}
10418 man page for more information.
10419
10420 @table @asis
10421
10422 @item @code{tty}
10423 The name of the console this agetty runs on, as a string---e.g.,
10424 @code{"ttyS0"}. This argument is optional, it will default to
10425 a reasonable default serial port used by the kernel Linux.
10426
10427 For this, if there is a value for an option @code{agetty.tty} in the kernel
10428 command line, agetty will extract the device name of the serial port
10429 from it and use that.
10430
10431 If not and if there is a value for an option @code{console} with a tty in
10432 the Linux command line, agetty will extract the device name of the
10433 serial port from it and use that.
10434
10435 In both cases, agetty will leave the other serial device settings
10436 (baud rate etc.) alone---in the hope that Linux pinned them to the
10437 correct values.
10438
10439 @item @code{baud-rate} (default: @code{#f})
10440 A string containing a comma-separated list of one or more baud rates, in
10441 descending order.
10442
10443 @item @code{term} (default: @code{#f})
10444 A string containing the value used for the @code{TERM} environment
10445 variable.
10446
10447 @item @code{eight-bits?} (default: @code{#f})
10448 When @code{#t}, the tty is assumed to be 8-bit clean, and parity detection is
10449 disabled.
10450
10451 @item @code{auto-login} (default: @code{#f})
10452 When passed a login name, as a string, the specified user will be logged
10453 in automatically without prompting for their login name or password.
10454
10455 @item @code{no-reset?} (default: @code{#f})
10456 When @code{#t}, don't reset terminal cflags (control modes).
10457
10458 @item @code{host} (default: @code{#f})
10459 This accepts a string containing the "login_host", which will be written
10460 into the @file{/var/run/utmpx} file.
10461
10462 @item @code{remote?} (default: @code{#f})
10463 When set to @code{#t} in conjunction with @var{host}, this will add an
10464 @code{-r} fakehost option to the command line of the login program
10465 specified in @var{login-program}.
10466
10467 @item @code{flow-control?} (default: @code{#f})
10468 When set to @code{#t}, enable hardware (RTS/CTS) flow control.
10469
10470 @item @code{no-issue?} (default: @code{#f})
10471 When set to @code{#t}, the contents of the @file{/etc/issue} file will
10472 not be displayed before presenting the login prompt.
10473
10474 @item @code{init-string} (default: @code{#f})
10475 This accepts a string that will be sent to the tty or modem before
10476 sending anything else. It can be used to initialize a modem.
10477
10478 @item @code{no-clear?} (default: @code{#f})
10479 When set to @code{#t}, agetty will not clear the screen before showing
10480 the login prompt.
10481
10482 @item @code{login-program} (default: (file-append shadow "/bin/login"))
10483 This must be either a gexp denoting the name of a log-in program, or
10484 unset, in which case the default value is the @command{login} from the
10485 Shadow tool suite.
10486
10487 @item @code{local-line} (default: @code{#f})
10488 Control the CLOCAL line flag. This accepts one of three symbols as
10489 arguments, @code{'auto}, @code{'always}, or @code{'never}. If @code{#f},
10490 the default value chosen by agetty is @code{'auto}.
10491
10492 @item @code{extract-baud?} (default: @code{#f})
10493 When set to @code{#t}, instruct agetty to try to extract the baud rate
10494 from the status messages produced by certain types of modems.
10495
10496 @item @code{skip-login?} (default: @code{#f})
10497 When set to @code{#t}, do not prompt the user for a login name. This
10498 can be used with @var{login-program} field to use non-standard login
10499 systems.
10500
10501 @item @code{no-newline?} (default: @code{#f})
10502 When set to @code{#t}, do not print a newline before printing the
10503 @file{/etc/issue} file.
10504
10505 @c Is this dangerous only when used with login-program, or always?
10506 @item @code{login-options} (default: @code{#f})
10507 This option accepts a string containing options that are passed to the
10508 login program. When used with the @var{login-program}, be aware that a
10509 malicious user could try to enter a login name containing embedded
10510 options that could be parsed by the login program.
10511
10512 @item @code{login-pause} (default: @code{#f})
10513 When set to @code{#t}, wait for any key before showing the login prompt.
10514 This can be used in conjunction with @var{auto-login} to save memory by
10515 lazily spawning shells.
10516
10517 @item @code{chroot} (default: @code{#f})
10518 Change root to the specified directory. This option accepts a directory
10519 path as a string.
10520
10521 @item @code{hangup?} (default: @code{#f})
10522 Use the Linux system call @code{vhangup} to do a virtual hangup of the
10523 specified terminal.
10524
10525 @item @code{keep-baud?} (default: @code{#f})
10526 When set to @code{#t}, try to keep the existing baud rate. The baud
10527 rates from @var{baud-rate} are used when agetty receives a @key{BREAK}
10528 character.
10529
10530 @item @code{timeout} (default: @code{#f})
10531 When set to an integer value, terminate if no user name could be read
10532 within @var{timeout} seconds.
10533
10534 @item @code{detect-case?} (default: @code{#f})
10535 When set to @code{#t}, turn on support for detecting an uppercase-only
10536 terminal. This setting will detect a login name containing only
10537 uppercase letters as indicating an uppercase-only terminal and turn on
10538 some upper-to-lower case conversions. Note that this will not support
10539 Unicode characters.
10540
10541 @item @code{wait-cr?} (default: @code{#f})
10542 When set to @code{#t}, wait for the user or modem to send a
10543 carriage-return or linefeed character before displaying
10544 @file{/etc/issue} or login prompt. This is typically used with the
10545 @var{init-string} option.
10546
10547 @item @code{no-hints?} (default: @code{#f})
10548 When set to @code{#t}, do not print hints about Num, Caps, and Scroll
10549 locks.
10550
10551 @item @code{no-hostname?} (default: @code{#f})
10552 By default, the hostname is printed. When this option is set to
10553 @code{#t}, no hostname will be shown at all.
10554
10555 @item @code{long-hostname?} (default: @code{#f})
10556 By default, the hostname is only printed until the first dot. When this
10557 option is set to @code{#t}, the fully qualified hostname by
10558 @code{gethostname} or @code{getaddrinfo} is shown.
10559
10560 @item @code{erase-characters} (default: @code{#f})
10561 This option accepts a string of additional characters that should be
10562 interpreted as backspace when the user types their login name.
10563
10564 @item @code{kill-characters} (default: @code{#f})
10565 This option accepts a string that should be interpreted to mean "ignore
10566 all previous characters" (also called a "kill" character) when the types
10567 their login name.
10568
10569 @item @code{chdir} (default: @code{#f})
10570 This option accepts, as a string, a directory path that will be changed
10571 to before login.
10572
10573 @item @code{delay} (default: @code{#f})
10574 This options accepts, as an integer, the number of seconds to sleep
10575 before opening the tty and displaying the login prompt.
10576
10577 @item @code{nice} (default: @code{#f})
10578 This option accepts, as an integer, the nice value with which to run the
10579 @command{login} program.
10580
10581 @item @code{extra-options} (default: @code{'()})
10582 This option provides an "escape hatch" for the user to provide arbitrary
10583 command-line arguments to @command{agetty} as a list of strings.
10584
10585 @end table
10586 @end deftp
10587
10588 @deffn {Scheme Procedure} kmscon-service-type @var{config}
10589 Return a service to run @uref{https://www.freedesktop.org/wiki/Software/kmscon,kmscon}
10590 according to @var{config}, a @code{<kmscon-configuration>} object, which
10591 specifies the tty to run, among other things.
10592 @end deffn
10593
10594 @deftp {Data Type} kmscon-configuration
10595 This is the data type representing the configuration of Kmscon, which
10596 implements virtual console log-in.
10597
10598 @table @asis
10599
10600 @item @code{virtual-terminal}
10601 The name of the console this Kmscon runs on---e.g., @code{"tty1"}.
10602
10603 @item @code{login-program} (default: @code{#~(string-append #$shadow "/bin/login")})
10604 A gexp denoting the name of the log-in program. The default log-in program is
10605 @command{login} from the Shadow tool suite.
10606
10607 @item @code{login-arguments} (default: @code{'("-p")})
10608 A list of arguments to pass to @command{login}.
10609
10610 @item @code{hardware-acceleration?} (default: #f)
10611 Whether to use hardware acceleration.
10612
10613 @item @code{kmscon} (default: @var{kmscon})
10614 The Kmscon package to use.
10615
10616 @end table
10617 @end deftp
10618
10619 @cindex name service cache daemon
10620 @cindex nscd
10621 @deffn {Scheme Procedure} nscd-service [@var{config}] [#:glibc glibc] @
10622 [#:name-services '()]
10623 Return a service that runs the libc name service cache daemon (nscd) with the
10624 given @var{config}---an @code{<nscd-configuration>} object. @xref{Name
10625 Service Switch}, for an example.
10626 @end deffn
10627
10628 @defvr {Scheme Variable} %nscd-default-configuration
10629 This is the default @code{<nscd-configuration>} value (see below) used
10630 by @code{nscd-service}. It uses the caches defined by
10631 @var{%nscd-default-caches}; see below.
10632 @end defvr
10633
10634 @deftp {Data Type} nscd-configuration
10635 This is the data type representing the name service cache daemon (nscd)
10636 configuration.
10637
10638 @table @asis
10639
10640 @item @code{name-services} (default: @code{'()})
10641 List of packages denoting @dfn{name services} that must be visible to
10642 the nscd---e.g., @code{(list @var{nss-mdns})}.
10643
10644 @item @code{glibc} (default: @var{glibc})
10645 Package object denoting the GNU C Library providing the @command{nscd}
10646 command.
10647
10648 @item @code{log-file} (default: @code{"/var/log/nscd.log"})
10649 Name of the nscd log file. This is where debugging output goes when
10650 @code{debug-level} is strictly positive.
10651
10652 @item @code{debug-level} (default: @code{0})
10653 Integer denoting the debugging levels. Higher numbers mean that more
10654 debugging output is logged.
10655
10656 @item @code{caches} (default: @var{%nscd-default-caches})
10657 List of @code{<nscd-cache>} objects denoting things to be cached; see
10658 below.
10659
10660 @end table
10661 @end deftp
10662
10663 @deftp {Data Type} nscd-cache
10664 Data type representing a cache database of nscd and its parameters.
10665
10666 @table @asis
10667
10668 @item @code{database}
10669 This is a symbol representing the name of the database to be cached.
10670 Valid values are @code{passwd}, @code{group}, @code{hosts}, and
10671 @code{services}, which designate the corresponding NSS database
10672 (@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
10673
10674 @item @code{positive-time-to-live}
10675 @itemx @code{negative-time-to-live} (default: @code{20})
10676 A number representing the number of seconds during which a positive or
10677 negative lookup result remains in cache.
10678
10679 @item @code{check-files?} (default: @code{#t})
10680 Whether to check for updates of the files corresponding to
10681 @var{database}.
10682
10683 For instance, when @var{database} is @code{hosts}, setting this flag
10684 instructs nscd to check for updates in @file{/etc/hosts} and to take
10685 them into account.
10686
10687 @item @code{persistent?} (default: @code{#t})
10688 Whether the cache should be stored persistently on disk.
10689
10690 @item @code{shared?} (default: @code{#t})
10691 Whether the cache should be shared among users.
10692
10693 @item @code{max-database-size} (default: 32@tie{}MiB)
10694 Maximum size in bytes of the database cache.
10695
10696 @c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
10697 @c settings, so leave them out.
10698
10699 @end table
10700 @end deftp
10701
10702 @defvr {Scheme Variable} %nscd-default-caches
10703 List of @code{<nscd-cache>} objects used by default by
10704 @code{nscd-configuration} (see above).
10705
10706 It enables persistent and aggressive caching of service and host name
10707 lookups. The latter provides better host name lookup performance,
10708 resilience in the face of unreliable name servers, and also better
10709 privacy---often the result of host name lookups is in local cache, so
10710 external name servers do not even need to be queried.
10711 @end defvr
10712
10713 @anchor{syslog-configuration-type}
10714 @cindex syslog
10715 @cindex logging
10716 @deftp {Data Type} syslog-configuration
10717 This data type represents the configuration of the syslog daemon.
10718
10719 @table @asis
10720 @item @code{syslogd} (default: @code{#~(string-append #$inetutils "/libexec/syslogd")})
10721 The syslog daemon to use.
10722
10723 @item @code{config-file} (default: @code{%default-syslog.conf})
10724 The syslog configuration file to use.
10725
10726 @end table
10727 @end deftp
10728
10729 @anchor{syslog-service}
10730 @cindex syslog
10731 @deffn {Scheme Procedure} syslog-service @var{config}
10732 Return a service that runs a syslog daemon according to @var{config}.
10733
10734 @xref{syslogd invocation,,, inetutils, GNU Inetutils}, for more
10735 information on the configuration file syntax.
10736 @end deffn
10737
10738 @anchor{guix-configuration-type}
10739 @deftp {Data Type} guix-configuration
10740 This data type represents the configuration of the Guix build daemon.
10741 @xref{Invoking guix-daemon}, for more information.
10742
10743 @table @asis
10744 @item @code{guix} (default: @var{guix})
10745 The Guix package to use.
10746
10747 @item @code{build-group} (default: @code{"guixbuild"})
10748 Name of the group for build user accounts.
10749
10750 @item @code{build-accounts} (default: @code{10})
10751 Number of build user accounts to create.
10752
10753 @item @code{authorize-key?} (default: @code{#t})
10754 @cindex substitutes, authorization thereof
10755 Whether to authorize the substitute keys listed in
10756 @code{authorized-keys}---by default that of @code{hydra.gnu.org}
10757 (@pxref{Substitutes}).
10758
10759 @vindex %default-authorized-guix-keys
10760 @item @code{authorized-keys} (default: @var{%default-authorized-guix-keys})
10761 The list of authorized key files for archive imports, as a list of
10762 string-valued gexps (@pxref{Invoking guix archive}). By default, it
10763 contains that of @code{hydra.gnu.org} (@pxref{Substitutes}).
10764
10765 @item @code{use-substitutes?} (default: @code{#t})
10766 Whether to use substitutes.
10767
10768 @item @code{substitute-urls} (default: @var{%default-substitute-urls})
10769 The list of URLs where to look for substitutes by default.
10770
10771 @item @code{max-silent-time} (default: @code{0})
10772 @itemx @code{timeout} (default: @code{0})
10773 The number of seconds of silence and the number of seconds of activity,
10774 respectively, after which a build process times out. A value of zero
10775 disables the timeout.
10776
10777 @item @code{log-compression} (default: @code{'bzip2})
10778 The type of compression used for build logs---one of @code{gzip},
10779 @code{bzip2}, or @code{none}.
10780
10781 @item @code{extra-options} (default: @code{'()})
10782 List of extra command-line options for @command{guix-daemon}.
10783
10784 @item @code{log-file} (default: @code{"/var/log/guix-daemon.log"})
10785 File where @command{guix-daemon}'s standard output and standard error
10786 are written.
10787
10788 @item @code{http-proxy} (default: @code{#f})
10789 The HTTP proxy used for downloading fixed-output derivations and
10790 substitutes.
10791
10792 @item @code{tmpdir} (default: @code{#f})
10793 A directory path where the @command{guix-daemon} will perform builds.
10794
10795 @end table
10796 @end deftp
10797
10798 @deffn {Scheme Procedure} guix-service @var{config}
10799 Return a service that runs the Guix build daemon according to
10800 @var{config}.
10801 @end deffn
10802
10803 @deffn {Scheme Procedure} udev-service [#:udev @var{eudev} #:rules @code{'()}]
10804 Run @var{udev}, which populates the @file{/dev} directory dynamically.
10805 udev rules can be provided as a list of files through the @var{rules}
10806 variable. The procedures @var{udev-rule} and @var{file->udev-rule} from
10807 @code{(gnu services base)} simplify the creation of such rule files.
10808
10809 @deffn {Scheme Procedure} udev-rule [@var{file-name} @var{contents}]
10810 Return a udev-rule file named @var{file-name} containing the rules
10811 defined by the @var{contents} literal.
10812
10813 In the following example, a rule for a USB device is defined to be
10814 stored in the file @file{90-usb-thing.rules}. The rule runs a script
10815 upon detecting a USB device with a given product identifier.
10816
10817 @example
10818 (define %example-udev-rule
10819 (udev-rule
10820 "90-usb-thing.rules"
10821 (string-append "ACTION==\"add\", SUBSYSTEM==\"usb\", "
10822 "ATTR@{product@}==\"Example\", "
10823 "RUN+=\"/path/to/script\"")))
10824 @end example
10825 @end deffn
10826
10827 Here we show how the default @var{udev-service} can be extended with it.
10828
10829 @example
10830 (operating-system
10831 ;; @dots{}
10832 (services
10833 (modify-services %desktop-services
10834 (udev-service-type config =>
10835 (udev-configuration (inherit config)
10836 (rules (append (udev-configuration-rules config)
10837 (list %example-udev-rule))))))))
10838 @end example
10839
10840 @deffn {Scheme Procedure} file->udev-rule [@var{file-name} @var{file}]
10841 Return a udev file named @var{file-name} containing the rules defined
10842 within @var{file}, a file-like object.
10843
10844 The following example showcases how we can use an existing rule file.
10845
10846 @example
10847 (use-modules (guix download) ;for url-fetch
10848 (guix packages) ;for origin
10849 ;; @dots{})
10850
10851 (define %android-udev-rules
10852 (file->udev-rule
10853 "51-android-udev.rules"
10854 (let ((version "20170910"))
10855 (origin
10856 (method url-fetch)
10857 (uri (string-append "https://raw.githubusercontent.com/M0Rf30/"
10858 "android-udev-rules/" version "/51-android.rules"))
10859 (sha256
10860 (base32 "0lmmagpyb6xsq6zcr2w1cyx9qmjqmajkvrdbhjx32gqf1d9is003"))))))
10861 @end example
10862 @end deffn
10863
10864 Additionally, Guix package definitions can be included in @var{rules} in
10865 order to extend the udev rules with the definitions found under their
10866 @file{lib/udev/rules.d} sub-directory. In lieu of the previous
10867 @var{file->udev-rule} example, we could have used the
10868 @var{android-udev-rules} package which exists in Guix in the @code{(gnu
10869 packages android)} module.
10870
10871 The following example shows how to use the @var{android-udev-rules}
10872 package so that the Android tool @command{adb} can detect devices
10873 without root privileges. It also details how to create the
10874 @code{adbusers} group, which is required for the proper functioning of
10875 the rules defined within the @var{android-udev-rules} package. To
10876 create such a group, we must define it both as part of the
10877 @var{supplementary-groups} of our @var{user-account} declaration, as
10878 well as in the @var{groups} field of the @var{operating-system} record.
10879
10880 @example
10881 (use-modules (gnu packages android) ;for android-udev-rules
10882 (gnu system shadow) ;for user-group
10883 ;; @dots{})
10884
10885 (operating-system
10886 ;; @dots{}
10887 (users (cons (user-acount
10888 ;; @dots{}
10889 (supplementary-groups
10890 '("adbusers" ;for adb
10891 "wheel" "netdev" "audio" "video"))
10892 ;; @dots{})))
10893
10894 (groups (cons (user-group (system? #t) (name "adbusers"))
10895 %base-groups))
10896
10897 ;; @dots{}
10898
10899 (services
10900 (modify-services %desktop-services
10901 (udev-service-type config =>
10902 (udev-configuration (inherit config)
10903 (rules (cons* android-udev-rules
10904 (udev-configuration-rules config))))))))
10905 @end example
10906 @end deffn
10907
10908 @defvr {Scheme Variable} urandom-seed-service-type
10909 Save some entropy in @var{%random-seed-file} to seed @file{/dev/urandom}
10910 when rebooting. It also tries to seed @file{/dev/urandom} from
10911 @file{/dev/hwrng} while booting, if @file{/dev/hwrng} exists and is
10912 readable.
10913 @end defvr
10914
10915 @defvr {Scheme Variable} %random-seed-file
10916 This is the name of the file where some random bytes are saved by
10917 @var{urandom-seed-service} to seed @file{/dev/urandom} when rebooting.
10918 It defaults to @file{/var/lib/random-seed}.
10919 @end defvr
10920
10921 @cindex keymap
10922 @cindex keyboard
10923 @deffn {Scheme Procedure} console-keymap-service @var{files} ...
10924 @cindex keyboard layout
10925 Return a service to load console keymaps from @var{files} using
10926 @command{loadkeys} command. Most likely, you want to load some default
10927 keymap, which can be done like this:
10928
10929 @example
10930 (console-keymap-service "dvorak")
10931 @end example
10932
10933 Or, for example, for a Swedish keyboard, you may need to combine
10934 the following keymaps:
10935 @example
10936 (console-keymap-service "se-lat6" "se-fi-lat6")
10937 @end example
10938
10939 Also you can specify a full file name (or file names) of your keymap(s).
10940 See @code{man loadkeys} for details.
10941
10942 @end deffn
10943
10944 @cindex mouse
10945 @cindex gpm
10946 @defvr {Scheme Variable} gpm-service-type
10947 This is the type of the service that runs GPM, the @dfn{general-purpose
10948 mouse daemon}, which provides mouse support to the Linux console. GPM
10949 allows users to use the mouse in the console, notably to select, copy,
10950 and paste text.
10951
10952 The value for services of this type must be a @code{gpm-configuration}
10953 (see below). This service is not part of @var{%base-services}.
10954 @end defvr
10955
10956 @deftp {Data Type} gpm-configuration
10957 Data type representing the configuration of GPM.
10958
10959 @table @asis
10960 @item @code{options} (default: @code{%default-gpm-options})
10961 Command-line options passed to @command{gpm}. The default set of
10962 options instruct @command{gpm} to listen to mouse events on
10963 @file{/dev/input/mice}. @xref{Command Line,,, gpm, gpm manual}, for
10964 more information.
10965
10966 @item @code{gpm} (default: @code{gpm})
10967 The GPM package to use.
10968
10969 @end table
10970 @end deftp
10971
10972 @anchor{guix-publish-service-type}
10973 @deffn {Scheme Variable} guix-publish-service-type
10974 This is the service type for @command{guix publish} (@pxref{Invoking
10975 guix publish}). Its value must be a @code{guix-configuration}
10976 object, as described below.
10977
10978 This assumes that @file{/etc/guix} already contains a signing key pair as
10979 created by @command{guix archive --generate-key} (@pxref{Invoking guix
10980 archive}). If that is not the case, the service will fail to start.
10981 @end deffn
10982
10983 @deftp {Data Type} guix-publish-configuration
10984 Data type representing the configuration of the @code{guix publish}
10985 service.
10986
10987 @table @asis
10988 @item @code{guix} (default: @code{guix})
10989 The Guix package to use.
10990
10991 @item @code{port} (default: @code{80})
10992 The TCP port to listen for connections.
10993
10994 @item @code{host} (default: @code{"localhost"})
10995 The host (and thus, network interface) to listen to. Use
10996 @code{"0.0.0.0"} to listen on all the network interfaces.
10997
10998 @item @code{compression-level} (default: @code{3})
10999 The gzip compression level at which substitutes are compressed. Use
11000 @code{0} to disable compression altogether, and @code{9} to get the best
11001 compression ratio at the expense of increased CPU usage.
11002
11003 @item @code{nar-path} (default: @code{"nar"})
11004 The URL path at which ``nars'' can be fetched. @xref{Invoking guix
11005 publish, @code{--nar-path}}, for details.
11006
11007 @item @code{cache} (default: @code{#f})
11008 When it is @code{#f}, disable caching and instead generate archives on
11009 demand. Otherwise, this should be the name of a directory---e.g.,
11010 @code{"/var/cache/guix/publish"}---where @command{guix publish} caches
11011 archives and meta-data ready to be sent. @xref{Invoking guix publish,
11012 @option{--cache}}, for more information on the tradeoffs involved.
11013
11014 @item @code{workers} (default: @code{#f})
11015 When it is an integer, this is the number of worker threads used for
11016 caching; when @code{#f}, the number of processors is used.
11017 @xref{Invoking guix publish, @option{--workers}}, for more information.
11018
11019 @item @code{ttl} (default: @code{#f})
11020 When it is an integer, this denotes the @dfn{time-to-live} in seconds
11021 of the published archives. @xref{Invoking guix publish, @option{--ttl}},
11022 for more information.
11023 @end table
11024 @end deftp
11025
11026 @anchor{rngd-service}
11027 @deffn {Scheme Procedure} rngd-service [#:rng-tools @var{rng-tools}] @
11028 [#:device "/dev/hwrng"]
11029 Return a service that runs the @command{rngd} program from @var{rng-tools}
11030 to add @var{device} to the kernel's entropy pool. The service will fail if
11031 @var{device} does not exist.
11032 @end deffn
11033
11034 @anchor{pam-limits-service}
11035 @cindex session limits
11036 @cindex ulimit
11037 @cindex priority
11038 @cindex realtime
11039 @cindex jackd
11040 @deffn {Scheme Procedure} pam-limits-service [#:limits @code{'()}]
11041
11042 Return a service that installs a configuration file for the
11043 @uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html,
11044 @code{pam_limits} module}. The procedure optionally takes a list of
11045 @code{pam-limits-entry} values, which can be used to specify
11046 @code{ulimit} limits and nice priority limits to user sessions.
11047
11048 The following limits definition sets two hard and soft limits for all
11049 login sessions of users in the @code{realtime} group:
11050
11051 @example
11052 (pam-limits-service
11053 (list
11054 (pam-limits-entry "@@realtime" 'both 'rtprio 99)
11055 (pam-limits-entry "@@realtime" 'both 'memlock 'unlimited)))
11056 @end example
11057
11058 The first entry increases the maximum realtime priority for
11059 non-privileged processes; the second entry lifts any restriction of the
11060 maximum address space that can be locked in memory. These settings are
11061 commonly used for real-time audio systems.
11062 @end deffn
11063
11064 @node Scheduled Job Execution
11065 @subsubsection Scheduled Job Execution
11066
11067 @cindex cron
11068 @cindex mcron
11069 @cindex scheduling jobs
11070 The @code{(gnu services mcron)} module provides an interface to
11071 GNU@tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
11072 mcron, GNU@tie{}mcron}). GNU@tie{}mcron is similar to the traditional
11073 Unix @command{cron} daemon; the main difference is that it is
11074 implemented in Guile Scheme, which provides a lot of flexibility when
11075 specifying the scheduling of jobs and their actions.
11076
11077 The example below defines an operating system that runs the
11078 @command{updatedb} (@pxref{Invoking updatedb,,, find, Finding Files})
11079 and the @command{guix gc} commands (@pxref{Invoking guix gc}) daily, as
11080 well as the @command{mkid} command on behalf of an unprivileged user
11081 (@pxref{mkid invocation,,, idutils, ID Database Utilities}). It uses
11082 gexps to introduce job definitions that are passed to mcron
11083 (@pxref{G-Expressions}).
11084
11085 @lisp
11086 (use-modules (guix) (gnu) (gnu services mcron))
11087 (use-package-modules base idutils)
11088
11089 (define updatedb-job
11090 ;; Run 'updatedb' at 3AM every day. Here we write the
11091 ;; job's action as a Scheme procedure.
11092 #~(job '(next-hour '(3))
11093 (lambda ()
11094 (execl (string-append #$findutils "/bin/updatedb")
11095 "updatedb"
11096 "--prunepaths=/tmp /var/tmp /gnu/store"))))
11097
11098 (define garbage-collector-job
11099 ;; Collect garbage 5 minutes after midnight every day.
11100 ;; The job's action is a shell command.
11101 #~(job "5 0 * * *" ;Vixie cron syntax
11102 "guix gc -F 1G"))
11103
11104 (define idutils-job
11105 ;; Update the index database as user "charlie" at 12:15PM
11106 ;; and 19:15PM. This runs from the user's home directory.
11107 #~(job '(next-minute-from (next-hour '(12 19)) '(15))
11108 (string-append #$idutils "/bin/mkid src")
11109 #:user "charlie"))
11110
11111 (operating-system
11112 ;; @dots{}
11113 (services (cons (mcron-service (list garbage-collector-job
11114 updatedb-job
11115 idutils-job))
11116 %base-services)))
11117 @end lisp
11118
11119 @xref{Guile Syntax, mcron job specifications,, mcron, GNU@tie{}mcron},
11120 for more information on mcron job specifications. Below is the
11121 reference of the mcron service.
11122
11123 On a running system, you can use the @code{schedule} action of the service to
11124 visualize the mcron jobs that will be executed next:
11125
11126 @example
11127 # herd schedule mcron
11128 @end example
11129
11130 @noindent
11131 The example above lists the next five tasks that will be executed, but you can
11132 also specify the number of tasks to display:
11133
11134 @example
11135 # herd schedule mcron 10
11136 @end example
11137
11138 @deffn {Scheme Procedure} mcron-service @var{jobs} [#:mcron @var{mcron}]
11139 Return an mcron service running @var{mcron} that schedules @var{jobs}, a
11140 list of gexps denoting mcron job specifications.
11141
11142 This is a shorthand for:
11143 @example
11144 (service mcron-service-type
11145 (mcron-configuration (mcron mcron) (jobs jobs)))
11146 @end example
11147 @end deffn
11148
11149 @defvr {Scheme Variable} mcron-service-type
11150 This is the type of the @code{mcron} service, whose value is an
11151 @code{mcron-configuration} object.
11152
11153 This service type can be the target of a service extension that provides
11154 it additional job specifications (@pxref{Service Composition}). In
11155 other words, it is possible to define services that provide additional
11156 mcron jobs to run.
11157 @end defvr
11158
11159 @deftp {Data Type} mcron-configuration
11160 Data type representing the configuration of mcron.
11161
11162 @table @asis
11163 @item @code{mcron} (default: @var{mcron})
11164 The mcron package to use.
11165
11166 @item @code{jobs}
11167 This is a list of gexps (@pxref{G-Expressions}), where each gexp
11168 corresponds to an mcron job specification (@pxref{Syntax, mcron job
11169 specifications,, mcron, GNU@tie{}mcron}).
11170 @end table
11171 @end deftp
11172
11173
11174 @node Log Rotation
11175 @subsubsection Log Rotation
11176
11177 @cindex rottlog
11178 @cindex log rotation
11179 @cindex logging
11180 Log files such as those found in @file{/var/log} tend to grow endlessly,
11181 so it's a good idea to @dfn{rotate} them once in a while---i.e., archive
11182 their contents in separate files, possibly compressed. The @code{(gnu
11183 services admin)} module provides an interface to GNU@tie{}Rot[t]log, a
11184 log rotation tool (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}).
11185
11186 The example below defines an operating system that provides log rotation
11187 with the default settings, for commonly encountered log files.
11188
11189 @lisp
11190 (use-modules (guix) (gnu))
11191 (use-service-modules admin mcron)
11192 (use-package-modules base idutils)
11193
11194 (operating-system
11195 ;; @dots{}
11196 (services (cons (service rottlog-service-type)
11197 %base-services)))
11198 @end lisp
11199
11200 @defvr {Scheme Variable} rottlog-service-type
11201 This is the type of the Rottlog service, whose value is a
11202 @code{rottlog-configuration} object.
11203
11204 Other services can extend this one with new @code{log-rotation} objects
11205 (see below), thereby augmenting the set of files to be rotated.
11206
11207 This service type can define mcron jobs (@pxref{Scheduled Job
11208 Execution}) to run the rottlog service.
11209 @end defvr
11210
11211 @deftp {Data Type} rottlog-configuration
11212 Data type representing the configuration of rottlog.
11213
11214 @table @asis
11215 @item @code{rottlog} (default: @code{rottlog})
11216 The Rottlog package to use.
11217
11218 @item @code{rc-file} (default: @code{(file-append rottlog "/etc/rc")})
11219 The Rottlog configuration file to use (@pxref{Mandatory RC Variables,,,
11220 rottlog, GNU Rot[t]log Manual}).
11221
11222 @item @code{rotations} (default: @code{%default-rotations})
11223 A list of @code{log-rotation} objects as defined below.
11224
11225 @item @code{jobs}
11226 This is a list of gexps where each gexp corresponds to an mcron job
11227 specification (@pxref{Scheduled Job Execution}).
11228 @end table
11229 @end deftp
11230
11231 @deftp {Data Type} log-rotation
11232 Data type representing the rotation of a group of log files.
11233
11234 Taking an example from the Rottlog manual (@pxref{Period Related File
11235 Examples,,, rottlog, GNU Rot[t]log Manual}), a log rotation might be
11236 defined like this:
11237
11238 @example
11239 (log-rotation
11240 (frequency 'daily)
11241 (files '("/var/log/apache/*"))
11242 (options '("storedir apache-archives"
11243 "rotate 6"
11244 "notifempty"
11245 "nocompress")))
11246 @end example
11247
11248 The list of fields is as follows:
11249
11250 @table @asis
11251 @item @code{frequency} (default: @code{'weekly})
11252 The log rotation frequency, a symbol.
11253
11254 @item @code{files}
11255 The list of files or file glob patterns to rotate.
11256
11257 @item @code{options} (default: @code{'()})
11258 The list of rottlog options for this rotation (@pxref{Configuration
11259 parameters,,, rottlog, GNU Rot[t]lg Manual}).
11260
11261 @item @code{post-rotate} (default: @code{#f})
11262 Either @code{#f} or a gexp to execute once the rotation has completed.
11263 @end table
11264 @end deftp
11265
11266 @defvr {Scheme Variable} %default-rotations
11267 Specifies weekly rotation of @var{%rotated-files} and
11268 a couple of other files.
11269 @end defvr
11270
11271 @defvr {Scheme Variable} %rotated-files
11272 The list of syslog-controlled files to be rotated. By default it is:
11273 @code{'("/var/log/messages" "/var/log/secure")}.
11274 @end defvr
11275
11276 @node Networking Services
11277 @subsubsection Networking Services
11278
11279 The @code{(gnu services networking)} module provides services to configure
11280 the network interface.
11281
11282 @cindex DHCP, networking service
11283 @deffn {Scheme Procedure} dhcp-client-service [#:dhcp @var{isc-dhcp}]
11284 Return a service that runs @var{dhcp}, a Dynamic Host Configuration
11285 Protocol (DHCP) client, on all the non-loopback network interfaces.
11286 @end deffn
11287
11288 @deffn {Scheme Procedure} dhcpd-service-type
11289 This type defines a service that runs a DHCP daemon. To create a
11290 service of this type, you must supply a @code{<dhcpd-configuration>}.
11291 For example:
11292
11293 @example
11294 (service dhcpd-service-type
11295 (dhcpd-configuration
11296 (config-file (local-file "my-dhcpd.conf"))
11297 (interfaces '("enp0s25"))))
11298 @end example
11299 @end deffn
11300
11301 @deftp {Data Type} dhcpd-configuration
11302 @table @asis
11303 @item @code{package} (default: @code{isc-dhcp})
11304 The package that provides the DHCP daemon. This package is expected to
11305 provide the daemon at @file{sbin/dhcpd} relative to its output
11306 directory. The default package is the
11307 @uref{http://www.isc.org/products/DHCP, ISC's DHCP server}.
11308 @item @code{config-file} (default: @code{#f})
11309 The configuration file to use. This is required. It will be passed to
11310 @code{dhcpd} via its @code{-cf} option. This may be any ``file-like''
11311 object (@pxref{G-Expressions, file-like objects}). See @code{man
11312 dhcpd.conf} for details on the configuration file syntax.
11313 @item @code{version} (default: @code{"4"})
11314 The DHCP version to use. The ISC DHCP server supports the values ``4'',
11315 ``6'', and ``4o6''. These correspond to the @code{dhcpd} program
11316 options @code{-4}, @code{-6}, and @code{-4o6}. See @code{man dhcpd} for
11317 details.
11318 @item @code{run-directory} (default: @code{"/run/dhcpd"})
11319 The run directory to use. At service activation time, this directory
11320 will be created if it does not exist.
11321 @item @code{pid-file} (default: @code{"/run/dhcpd/dhcpd.pid"})
11322 The PID file to use. This corresponds to the @code{-pf} option of
11323 @code{dhcpd}. See @code{man dhcpd} for details.
11324 @item @code{interfaces} (default: @code{'()})
11325 The names of the network interfaces on which dhcpd should listen for
11326 broadcasts. If this list is not empty, then its elements (which must be
11327 strings) will be appended to the @code{dhcpd} invocation when starting
11328 the daemon. It may not be necessary to explicitly specify any
11329 interfaces here; see @code{man dhcpd} for details.
11330 @end table
11331 @end deftp
11332
11333 @defvr {Scheme Variable} static-networking-service-type
11334 This is the type for statically-configured network interfaces.
11335 @c TODO Document <static-networking> data structures.
11336 @end defvr
11337
11338 @deffn {Scheme Procedure} static-networking-service @var{interface} @var{ip} @
11339 [#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}] @
11340 [#:requirement @code{'(udev)}]
11341 Return a service that starts @var{interface} with address @var{ip}. If
11342 @var{netmask} is true, use it as the network mask. If @var{gateway} is true,
11343 it must be a string specifying the default network gateway. @var{requirement}
11344 can be used to declare a dependency on another service before configuring the
11345 interface.
11346
11347 This procedure can be called several times, one for each network
11348 interface of interest. Behind the scenes what it does is extend
11349 @code{static-networking-service-type} with additional network interfaces
11350 to handle.
11351 @end deffn
11352
11353 @cindex wicd
11354 @cindex wireless
11355 @cindex WiFi
11356 @cindex network management
11357 @deffn {Scheme Procedure} wicd-service [#:wicd @var{wicd}]
11358 Return a service that runs @url{https://launchpad.net/wicd,Wicd}, a network
11359 management daemon that aims to simplify wired and wireless networking.
11360
11361 This service adds the @var{wicd} package to the global profile, providing
11362 several commands to interact with the daemon and configure networking:
11363 @command{wicd-client}, a graphical user interface, and the @command{wicd-cli}
11364 and @command{wicd-curses} user interfaces.
11365 @end deffn
11366
11367 @cindex ModemManager
11368
11369 @defvr {Scheme Variable} modem-manager-service-type
11370 This is the service type for the
11371 @uref{https://wiki.gnome.org/Projects/ModemManager, ModemManager}
11372 service. The value for this service type is a
11373 @code{modem-manager-configuration} record.
11374
11375 This service is part of @code{%desktop-services} (@pxref{Desktop
11376 Services}).
11377 @end defvr
11378
11379 @deftp {Data Type} modem-manager-configuration
11380 Data type representing the configuration of ModemManager.
11381
11382 @table @asis
11383 @item @code{modem-manager} (default: @code{modem-manager})
11384 The ModemManager package to use.
11385
11386 @end table
11387 @end deftp
11388
11389 @cindex NetworkManager
11390
11391 @defvr {Scheme Variable} network-manager-service-type
11392 This is the service type for the
11393 @uref{https://wiki.gnome.org/Projects/NetworkManager, NetworkManager}
11394 service. The value for this service type is a
11395 @code{network-manager-configuration} record.
11396
11397 This service is part of @code{%desktop-services} (@pxref{Desktop
11398 Services}).
11399 @end defvr
11400
11401 @deftp {Data Type} network-manager-configuration
11402 Data type representing the configuration of NetworkManager.
11403
11404 @table @asis
11405 @item @code{network-manager} (default: @code{network-manager})
11406 The NetworkManager package to use.
11407
11408 @item @code{dns} (default: @code{"default"})
11409 Processing mode for DNS, which affects how NetworkManager uses the
11410 @code{resolv.conf} configuration file.
11411
11412 @table @samp
11413 @item default
11414 NetworkManager will update @code{resolv.conf} to reflect the nameservers
11415 provided by currently active connections.
11416
11417 @item dnsmasq
11418 NetworkManager will run @code{dnsmasq} as a local caching nameserver,
11419 using a "split DNS" configuration if you are connected to a VPN, and
11420 then update @code{resolv.conf} to point to the local nameserver.
11421
11422 @item none
11423 NetworkManager will not modify @code{resolv.conf}.
11424 @end table
11425
11426 @item @code{vpn-plugins} (default: @code{'()})
11427 This is the list of available plugins for virtual private networks
11428 (VPNs). An example of this is the @code{network-manager-openvpn}
11429 package, which allows NetworkManager to manage VPNs @i{via} OpenVPN.
11430
11431 @end table
11432 @end deftp
11433
11434 @cindex Connman
11435 @deffn {Scheme Variable} connman-service-type
11436 This is the service type to run @url{https://01.org/connman,Connman},
11437 a network connection manager.
11438
11439 Its value must be an
11440 @code{connman-configuration} record as in this example:
11441
11442 @example
11443 (service connman-service-type
11444 (connman-configuration
11445 (disable-vpn? #t)))
11446 @end example
11447
11448 See below for details about @code{connman-configuration}.
11449 @end deffn
11450
11451 @deftp {Data Type} connman-configuration
11452 Data Type representing the configuration of connman.
11453
11454 @table @asis
11455 @item @code{connman} (default: @var{connman})
11456 The connman package to use.
11457
11458 @item @code{disable-vpn?} (default: @code{#f})
11459 When true, enable connman's vpn plugin.
11460 @end table
11461 @end deftp
11462
11463 @cindex WPA Supplicant
11464 @defvr {Scheme Variable} wpa-supplicant-service-type
11465 This is the service type to run @url{https://w1.fi/wpa_supplicant/,WPA
11466 supplicant}, an authentication daemon required to authenticate against
11467 encrypted WiFi or ethernet networks. It is configured to listen for
11468 requests on D-Bus.
11469
11470 The value of this service is the @code{wpa-supplicant} package to use.
11471 Thus, it can be instantiated like this:
11472
11473 @lisp
11474 (use-modules (gnu services networking))
11475
11476 (service wpa-supplicant-service-type)
11477 @end lisp
11478 @end defvr
11479
11480 @cindex NTP
11481 @cindex real time clock
11482 @deffn {Scheme Procedure} ntp-service [#:ntp @var{ntp}] @
11483 [#:servers @var{%ntp-servers}] @
11484 [#:allow-large-adjustment? #f]
11485 Return a service that runs the daemon from @var{ntp}, the
11486 @uref{http://www.ntp.org, Network Time Protocol package}. The daemon will
11487 keep the system clock synchronized with that of @var{servers}.
11488 @var{allow-large-adjustment?} determines whether @command{ntpd} is allowed to
11489 make an initial adjustment of more than 1,000 seconds.
11490 @end deffn
11491
11492 @defvr {Scheme Variable} %ntp-servers
11493 List of host names used as the default NTP servers.
11494 @end defvr
11495
11496 @cindex OpenNTPD
11497 @deffn {Scheme Procedure} openntpd-service-type
11498 Run the @command{ntpd}, the Network Time Protocol (NTP) daemon, as implemented
11499 by @uref{http://www.openntpd.org, OpenNTPD}. The daemon will keep the system
11500 clock synchronized with that of the given servers.
11501
11502 @example
11503 (service
11504 openntpd-service-type
11505 (openntpd-configuration
11506 (listen-on '("127.0.0.1" "::1"))
11507 (sensor '("udcf0 correction 70000"))
11508 (constraint-from '("www.gnu.org"))
11509 (constraints-from '("https://www.google.com/"))
11510 (allow-large-adjustment? #t)))
11511
11512 @end example
11513 @end deffn
11514
11515 @deftp {Data Type} openntpd-configuration
11516 @table @asis
11517 @item @code{openntpd} (default: @code{(file-append openntpd "/sbin/ntpd")})
11518 The openntpd executable to use.
11519 @item @code{listen-on} (default: @code{'("127.0.0.1" "::1")})
11520 A list of local IP addresses or hostnames the ntpd daemon should listen on.
11521 @item @code{query-from} (default: @code{'()})
11522 A list of local IP address the ntpd daemon should use for outgoing queries.
11523 @item @code{sensor} (default: @code{'()})
11524 Specify a list of timedelta sensor devices ntpd should use. @code{ntpd}
11525 will listen to each sensor that acutally exists and ignore non-existant ones.
11526 See @uref{https://man.openbsd.org/ntpd.conf, upstream documentation} for more
11527 information.
11528 @item @code{server} (default: @var{%ntp-servers})
11529 Specify a list of IP addresses or hostnames of NTP servers to synchronize to.
11530 @item @code{servers} (default: @code{'()})
11531 Specify a list of IP addresses or hostnames of NTP pools to synchronize to.
11532 @item @code{constraint-from} (default: @code{'()})
11533 @code{ntpd} can be configured to query the ‘Date’ from trusted HTTPS servers via TLS.
11534 This time information is not used for precision but acts as an authenticated
11535 constraint, thereby reducing the impact of unauthenticated NTP
11536 man-in-the-middle attacks.
11537 Specify a list of URLs, IP addresses or hostnames of HTTPS servers to provide
11538 a constraint.
11539 @item @code{constraints-from} (default: @code{'()})
11540 As with constraint from, specify a list of URLs, IP addresses or hostnames of
11541 HTTPS servers to provide a constraint. Should the hostname resolve to multiple
11542 IP addresses, @code{ntpd} will calculate a median constraint from all of them.
11543 @item @code{allow-large-adjustment?} (default: @code{#f})
11544 Determines if @code{ntpd} is allowed to make an initial adjustment of more
11545 than 180 seconds.
11546 @end table
11547 @end deftp
11548
11549 @cindex inetd
11550 @deffn {Scheme variable} inetd-service-type
11551 This service runs the @command{inetd} (@pxref{inetd invocation,,,
11552 inetutils, GNU Inetutils}) daemon. @command{inetd} listens for
11553 connections on internet sockets, and lazily starts the specified server
11554 program when a connection is made on one of these sockets.
11555
11556 The value of this service is an @code{inetd-configuration} object. The
11557 following example configures the @command{inetd} daemon to provide the
11558 built-in @command{echo} service, as well as an smtp service which
11559 forwards smtp traffic over ssh to a server @code{smtp-server} behind a
11560 gateway @code{hostname}:
11561
11562 @example
11563 (service
11564 inetd-service-type
11565 (inetd-configuration
11566 (entries (list
11567 (inetd-entry
11568 (name "echo")
11569 (socket-type 'stream)
11570 (protocol "tcp")
11571 (wait? #f)
11572 (user "root"))
11573 (inetd-entry
11574 (node "127.0.0.1")
11575 (name "smtp")
11576 (socket-type 'stream)
11577 (protocol "tcp")
11578 (wait? #f)
11579 (user "root")
11580 (program (file-append openssh "/bin/ssh"))
11581 (arguments
11582 '("ssh" "-qT" "-i" "/path/to/ssh_key"
11583 "-W" "smtp-server:25" "user@@hostname")))))
11584 @end example
11585
11586 See below for more details about @code{inetd-configuration}.
11587 @end deffn
11588
11589 @deftp {Data Type} inetd-configuration
11590 Data type representing the configuration of @command{inetd}.
11591
11592 @table @asis
11593 @item @code{program} (default: @code{(file-append inetutils "/libexec/inetd")})
11594 The @command{inetd} executable to use.
11595
11596 @item @code{entries} (default: @code{'()})
11597 A list of @command{inetd} service entries. Each entry should be created
11598 by the @code{inetd-entry} constructor.
11599 @end table
11600 @end deftp
11601
11602 @deftp {Data Type} inetd-entry
11603 Data type representing an entry in the @command{inetd} configuration.
11604 Each entry corresponds to a socket where @command{inetd} will listen for
11605 requests.
11606
11607 @table @asis
11608 @item @code{node} (default: @code{#f})
11609 Optional string, a comma-separated list of local addresses
11610 @command{inetd} should use when listening for this service.
11611 @xref{Configuration file,,, inetutils, GNU Inetutils} for a complete
11612 description of all options.
11613 @item @code{name}
11614 A string, the name must correspond to an entry in @code{/etc/services}.
11615 @item @code{socket-type}
11616 One of @code{'stream}, @code{'dgram}, @code{'raw}, @code{'rdm} or
11617 @code{'seqpacket}.
11618 @item @code{protocol}
11619 A string, must correspond to an entry in @code{/etc/protocols}.
11620 @item @code{wait?} (default: @code{#t})
11621 Whether @command{inetd} should wait for the server to exit before
11622 listening to new service requests.
11623 @item @code{user}
11624 A string containing the user (and, optionally, group) name of the user
11625 as whom the server should run. The group name can be specified in a
11626 suffix, separated by a colon or period, i.e. @code{"user"},
11627 @code{"user:group"} or @code{"user.group"}.
11628 @item @code{program} (default: @code{"internal"})
11629 The server program which will serve the requests, or @code{"internal"}
11630 if @command{inetd} should use a built-in service.
11631 @item @code{arguments} (default: @code{'()})
11632 A list strings or file-like objects, which are the server program's
11633 arguments, starting with the zeroth argument, i.e. the name of the
11634 program itself. For @command{inetd}'s internal services, this entry
11635 must be @code{'()} or @code{'("internal")}.
11636 @end table
11637
11638 @xref{Configuration file,,, inetutils, GNU Inetutils} for a more
11639 detailed discussion of each configuration field.
11640 @end deftp
11641
11642 @cindex Tor
11643 @defvr {Scheme Variable} tor-service-type
11644 This is the type for a service that runs the @uref{https://torproject.org,
11645 Tor} anonymous networking daemon. The service is configured using a
11646 @code{<tor-configuration>} record. By default, the Tor daemon runs as the
11647 @code{tor} unprivileged user, which is a member of the @code{tor} group.
11648
11649 @end defvr
11650
11651 @deffn {Scheme Procedure} tor-service [@var{config-file}] [#:tor @var{tor}]
11652 This procedure is deprecated and will be removed in a future release. Return
11653 a service of the @code{tor-service-type} type. @var{config-file} and
11654 @var{tor} have the same meaning as in @code{<tor-configuration>}.
11655 @end deffn
11656
11657 @deftp {Data Type} tor-configuration
11658 @table @asis
11659 @item @code{tor} (default: @code{tor})
11660 The package that provides the Tor daemon. This package is expected to provide
11661 the daemon at @file{bin/tor} relative to its output directory. The default
11662 package is the @uref{https://www.torproject.org, Tor Project's}
11663 implementation.
11664
11665 @item @code{config-file} (default: @code{(plain-file "empty" "")})
11666 The configuration file to use. It will be appended to a default configuration
11667 file, and the final configuration file will be passed to @code{tor} via its
11668 @code{-f} option. This may be any ``file-like'' object (@pxref{G-Expressions,
11669 file-like objects}). See @code{man tor} for details on the configuration file
11670 syntax.
11671
11672 @item @code{hidden-services} (default: @code{'()})
11673 The list of @code{<hidden-service>} records to use. For any hidden service
11674 you include in this list, appropriate configuration to enable the hidden
11675 service will be automatically added to the default configuration file. You
11676 may conveniently create @code{<hidden-service>} records using the
11677 @code{tor-hidden-service} procedure described below.
11678
11679 @item @code{socks-socket-type} (default: @code{'tcp})
11680 The default socket type that Tor should use for its SOCKS socket. This must
11681 be either @code{'tcp} or @code{'unix}. If it is @code{'tcp}, then by default
11682 Tor will listen on TCP port 9050 on the loopback interface (i.e., localhost).
11683 If it is @code{'unix}, then Tor will listen on the UNIX domain socket
11684 @file{/var/run/tor/socks-sock}, which will be made writable by members of the
11685 @code{tor} group.
11686
11687 If you want to customize the SOCKS socket in more detail, leave
11688 @code{socks-socket-type} at its default value of @code{'tcp} and use
11689 @code{config-file} to override the default by providing your own
11690 @code{SocksPort} option.
11691 @end table
11692 @end deftp
11693
11694 @cindex hidden service
11695 @deffn {Scheme Procedure} tor-hidden-service @var{name} @var{mapping}
11696 Define a new Tor @dfn{hidden service} called @var{name} and implementing
11697 @var{mapping}. @var{mapping} is a list of port/host tuples, such as:
11698
11699 @example
11700 '((22 "127.0.0.1:22")
11701 (80 "127.0.0.1:8080"))
11702 @end example
11703
11704 In this example, port 22 of the hidden service is mapped to local port 22, and
11705 port 80 is mapped to local port 8080.
11706
11707 This creates a @file{/var/lib/tor/hidden-services/@var{name}} directory, where
11708 the @file{hostname} file contains the @code{.onion} host name for the hidden
11709 service.
11710
11711 See @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, the Tor
11712 project's documentation} for more information.
11713 @end deffn
11714
11715 The @code{(gnu services rsync)} module provides the following services:
11716
11717 You might want an rsync daemon if you have files that you want available
11718 so anyone (or just yourself) can download existing files or upload new
11719 files.
11720
11721 @deffn {Scheme Variable} rsync-service-type
11722 This is the type for the @uref{https://rsync.samba.org, rsync} rsync daemon,
11723 @command{rsync-configuration} record as in this example:
11724
11725 @example
11726 (service rsync-service-type)
11727 @end example
11728
11729 See below for details about @code{rsync-configuration}.
11730 @end deffn
11731
11732 @deftp {Data Type} rsync-configuration
11733 Data type representing the configuration for @code{rsync-service}.
11734
11735 @table @asis
11736 @item @code{package} (default: @var{rsync})
11737 @code{rsync} package to use.
11738
11739 @item @code{port-number} (default: @code{873})
11740 TCP port on which @command{rsync} listens for incoming connections. If port
11741 is less than @code{1024} @command{rsync} needs to be started as the
11742 @code{root} user and group.
11743
11744 @item @code{pid-file} (default: @code{"/var/run/rsyncd/rsyncd.pid"})
11745 Name of the file where @command{rsync} writes its PID.
11746
11747 @item @code{lock-file} (default: @code{"/var/run/rsyncd/rsyncd.lock"})
11748 Name of the file where @command{rsync} writes its lock file.
11749
11750 @item @code{log-file} (default: @code{"/var/log/rsyncd.log"})
11751 Name of the file where @command{rsync} writes its log file.
11752
11753 @item @code{use-chroot?} (default: @var{#t})
11754 Whether to use chroot for @command{rsync} shared directory.
11755
11756 @item @code{share-path} (default: @file{/srv/rsync})
11757 Location of the @command{rsync} shared directory.
11758
11759 @item @code{share-comment} (default: @code{"Rsync share"})
11760 Comment of the @command{rsync} shared directory.
11761
11762 @item @code{read-only?} (default: @var{#f})
11763 Read-write permissions to shared directory.
11764
11765 @item @code{timeout} (default: @code{300})
11766 I/O timeout in seconds.
11767
11768 @item @code{user} (default: @var{"root"})
11769 Owner of the @code{rsync} process.
11770
11771 @item @code{group} (default: @var{"root"})
11772 Group of the @code{rsync} process.
11773
11774 @item @code{uid} (default: @var{"rsyncd"})
11775 User name or user ID that file transfers to and from that module should take
11776 place as when the daemon was run as @code{root}.
11777
11778 @item @code{gid} (default: @var{"rsyncd"})
11779 Group name or group ID that will be used when accessing the module.
11780
11781 @end table
11782 @end deftp
11783
11784 Furthermore, @code{(gnu services ssh)} provides the following services.
11785 @cindex SSH
11786 @cindex SSH server
11787
11788 @deffn {Scheme Procedure} lsh-service [#:host-key "/etc/lsh/host-key"] @
11789 [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
11790 [#:allow-empty-passwords? #f] [#:root-login? #f] @
11791 [#:syslog-output? #t] [#:x11-forwarding? #t] @
11792 [#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
11793 [#:public-key-authentication? #t] [#:initialize? #t]
11794 Run the @command{lshd} program from @var{lsh} to listen on port @var{port-number}.
11795 @var{host-key} must designate a file containing the host key, and readable
11796 only by root.
11797
11798 When @var{daemonic?} is true, @command{lshd} will detach from the
11799 controlling terminal and log its output to syslogd, unless one sets
11800 @var{syslog-output?} to false. Obviously, it also makes lsh-service
11801 depend on existence of syslogd service. When @var{pid-file?} is true,
11802 @command{lshd} writes its PID to the file called @var{pid-file}.
11803
11804 When @var{initialize?} is true, automatically create the seed and host key
11805 upon service activation if they do not exist yet. This may take long and
11806 require interaction.
11807
11808 When @var{initialize?} is false, it is up to the user to initialize the
11809 randomness generator (@pxref{lsh-make-seed,,, lsh, LSH Manual}), and to create
11810 a key pair with the private key stored in file @var{host-key} (@pxref{lshd
11811 basics,,, lsh, LSH Manual}).
11812
11813 When @var{interfaces} is empty, lshd listens for connections on all the
11814 network interfaces; otherwise, @var{interfaces} must be a list of host names
11815 or addresses.
11816
11817 @var{allow-empty-passwords?} specifies whether to accept log-ins with empty
11818 passwords, and @var{root-login?} specifies whether to accept log-ins as
11819 root.
11820
11821 The other options should be self-descriptive.
11822 @end deffn
11823
11824 @cindex SSH
11825 @cindex SSH server
11826 @deffn {Scheme Variable} openssh-service-type
11827 This is the type for the @uref{http://www.openssh.org, OpenSSH} secure
11828 shell daemon, @command{sshd}. Its value must be an
11829 @code{openssh-configuration} record as in this example:
11830
11831 @example
11832 (service openssh-service-type
11833 (openssh-configuration
11834 (x11-forwarding? #t)
11835 (permit-root-login 'without-password)
11836 (authorized-keys
11837 `(("alice" ,(local-file "alice.pub"))
11838 ("bob" ,(local-file "bob.pub"))))))
11839 @end example
11840
11841 See below for details about @code{openssh-configuration}.
11842
11843 This service can be extended with extra authorized keys, as in this
11844 example:
11845
11846 @example
11847 (service-extension openssh-service-type
11848 (const `(("charlie"
11849 ,(local-file "charlie.pub")))))
11850 @end example
11851 @end deffn
11852
11853 @deftp {Data Type} openssh-configuration
11854 This is the configuration record for OpenSSH's @command{sshd}.
11855
11856 @table @asis
11857 @item @code{pid-file} (default: @code{"/var/run/sshd.pid"})
11858 Name of the file where @command{sshd} writes its PID.
11859
11860 @item @code{port-number} (default: @code{22})
11861 TCP port on which @command{sshd} listens for incoming connections.
11862
11863 @item @code{permit-root-login} (default: @code{#f})
11864 This field determines whether and when to allow logins as root. If
11865 @code{#f}, root logins are disallowed; if @code{#t}, they are allowed.
11866 If it's the symbol @code{'without-password}, then root logins are
11867 permitted but not with password-based authentication.
11868
11869 @item @code{allow-empty-passwords?} (default: @code{#f})
11870 When true, users with empty passwords may log in. When false, they may
11871 not.
11872
11873 @item @code{password-authentication?} (default: @code{#t})
11874 When true, users may log in with their password. When false, they have
11875 other authentication methods.
11876
11877 @item @code{public-key-authentication?} (default: @code{#t})
11878 When true, users may log in using public key authentication. When
11879 false, users have to use other authentication method.
11880
11881 Authorized public keys are stored in @file{~/.ssh/authorized_keys}.
11882 This is used only by protocol version 2.
11883
11884 @item @code{x11-forwarding?} (default: @code{#f})
11885 When true, forwarding of X11 graphical client connections is
11886 enabled---in other words, @command{ssh} options @option{-X} and
11887 @option{-Y} will work.
11888
11889 @item @code{allow-agent-forwarding?} (default: @code{#t})
11890 Whether to allow agent forwarding.
11891
11892 @item @code{allow-tcp-forwarding?} (default: @code{#t})
11893 Whether to allow TCP forwarding.
11894
11895 @item @code{gateway-ports?} (default: @code{#f})
11896 Whether to allow gateway ports.
11897
11898 @item @code{challenge-response-authentication?} (default: @code{#f})
11899 Specifies whether challenge response authentication is allowed (e.g. via
11900 PAM).
11901
11902 @item @code{use-pam?} (default: @code{#t})
11903 Enables the Pluggable Authentication Module interface. If set to
11904 @code{#t}, this will enable PAM authentication using
11905 @code{challenge-response-authentication?} and
11906 @code{password-authentication?}, in addition to PAM account and session
11907 module processing for all authentication types.
11908
11909 Because PAM challenge response authentication usually serves an
11910 equivalent role to password authentication, you should disable either
11911 @code{challenge-response-authentication?} or
11912 @code{password-authentication?}.
11913
11914 @item @code{print-last-log?} (default: @code{#t})
11915 Specifies whether @command{sshd} should print the date and time of the
11916 last user login when a user logs in interactively.
11917
11918 @item @code{subsystems} (default: @code{'(("sftp" "internal-sftp"))})
11919 Configures external subsystems (e.g. file transfer daemon).
11920
11921 This is a list of two-element lists, each of which containing the
11922 subsystem name and a command (with optional arguments) to execute upon
11923 subsystem request.
11924
11925 The command @command{internal-sftp} implements an in-process SFTP
11926 server. Alternately, one can specify the @command{sftp-server} command:
11927 @example
11928 (service openssh-service-type
11929 (openssh-configuration
11930 (subsystems
11931 `(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))
11932 @end example
11933
11934 @item @code{accepted-environment} (default: @code{'()})
11935 List of strings describing which environment variables may be exported.
11936
11937 Each string gets on its own line. See the @code{AcceptEnv} option in
11938 @code{man sshd_config}.
11939
11940 This example allows ssh-clients to export the @code{COLORTERM} variable.
11941 It is set by terminal emulators, which support colors. You can use it in
11942 your shell's ressource file to enable colors for the prompt and commands
11943 if this variable is set.
11944
11945 @example
11946 (service openssh-service-type
11947 (openssh-configuration
11948 (accepted-environment '("COLORTERM"))))
11949 @end example
11950
11951 @item @code{authorized-keys} (default: @code{'()})
11952 @cindex authorized keys, SSH
11953 @cindex SSH authorized keys
11954 This is the list of authorized keys. Each element of the list is a user
11955 name followed by one or more file-like objects that represent SSH public
11956 keys. For example:
11957
11958 @example
11959 (openssh-configuration
11960 (authorized-keys
11961 `(("rekado" ,(local-file "rekado.pub"))
11962 ("chris" ,(local-file "chris.pub"))
11963 ("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))
11964 @end example
11965
11966 @noindent
11967 registers the specified public keys for user accounts @code{rekado},
11968 @code{chris}, and @code{root}.
11969
11970 Additional authorized keys can be specified @i{via}
11971 @code{service-extension}.
11972
11973 Note that this does @emph{not} interfere with the use of
11974 @file{~/.ssh/authorized_keys}.
11975
11976 @item @code{log-level} (default: @code{'info})
11977 This is a symbol specifying the logging level: @code{quiet}, @code{fatal},
11978 @code{error}, @code{info}, @code{verbose}, @code{debug}, etc. See the man
11979 page for @file{sshd_config} for the full list of level names.
11980
11981 @end table
11982 @end deftp
11983
11984 @deffn {Scheme Procedure} dropbear-service [@var{config}]
11985 Run the @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,Dropbear SSH
11986 daemon} with the given @var{config}, a @code{<dropbear-configuration>}
11987 object.
11988
11989 For example, to specify a Dropbear service listening on port 1234, add
11990 this call to the operating system's @code{services} field:
11991
11992 @example
11993 (dropbear-service (dropbear-configuration
11994 (port-number 1234)))
11995 @end example
11996 @end deffn
11997
11998 @deftp {Data Type} dropbear-configuration
11999 This data type represents the configuration of a Dropbear SSH daemon.
12000
12001 @table @asis
12002 @item @code{dropbear} (default: @var{dropbear})
12003 The Dropbear package to use.
12004
12005 @item @code{port-number} (default: 22)
12006 The TCP port where the daemon waits for incoming connections.
12007
12008 @item @code{syslog-output?} (default: @code{#t})
12009 Whether to enable syslog output.
12010
12011 @item @code{pid-file} (default: @code{"/var/run/dropbear.pid"})
12012 File name of the daemon's PID file.
12013
12014 @item @code{root-login?} (default: @code{#f})
12015 Whether to allow @code{root} logins.
12016
12017 @item @code{allow-empty-passwords?} (default: @code{#f})
12018 Whether to allow empty passwords.
12019
12020 @item @code{password-authentication?} (default: @code{#t})
12021 Whether to enable password-based authentication.
12022 @end table
12023 @end deftp
12024
12025 @defvr {Scheme Variable} %facebook-host-aliases
12026 This variable contains a string for use in @file{/etc/hosts}
12027 (@pxref{Host Names,,, libc, The GNU C Library Reference Manual}). Each
12028 line contains a entry that maps a known server name of the Facebook
12029 on-line service---e.g., @code{www.facebook.com}---to the local
12030 host---@code{127.0.0.1} or its IPv6 equivalent, @code{::1}.
12031
12032 This variable is typically used in the @code{hosts-file} field of an
12033 @code{operating-system} declaration (@pxref{operating-system Reference,
12034 @file{/etc/hosts}}):
12035
12036 @example
12037 (use-modules (gnu) (guix))
12038
12039 (operating-system
12040 (host-name "mymachine")
12041 ;; ...
12042 (hosts-file
12043 ;; Create a /etc/hosts file with aliases for "localhost"
12044 ;; and "mymachine", as well as for Facebook servers.
12045 (plain-file "hosts"
12046 (string-append (local-host-aliases host-name)
12047 %facebook-host-aliases))))
12048 @end example
12049
12050 This mechanism can prevent programs running locally, such as Web
12051 browsers, from accessing Facebook.
12052 @end defvr
12053
12054 The @code{(gnu services avahi)} provides the following definition.
12055
12056 @deffn {Scheme Procedure} avahi-service [#:avahi @var{avahi}] @
12057 [#:host-name #f] [#:publish? #t] [#:ipv4? #t] @
12058 [#:ipv6? #t] [#:wide-area? #f] @
12059 [#:domains-to-browse '()] [#:debug? #f]
12060 Return a service that runs @command{avahi-daemon}, a system-wide
12061 mDNS/DNS-SD responder that allows for service discovery and
12062 "zero-configuration" host name lookups (see @uref{http://avahi.org/}), and
12063 extends the name service cache daemon (nscd) so that it can resolve
12064 @code{.local} host names using
12065 @uref{http://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. Additionally,
12066 add the @var{avahi} package to the system profile so that commands such as
12067 @command{avahi-browse} are directly usable.
12068
12069 If @var{host-name} is different from @code{#f}, use that as the host name to
12070 publish for this machine; otherwise, use the machine's actual host name.
12071
12072 When @var{publish?} is true, publishing of host names and services is allowed;
12073 in particular, avahi-daemon will publish the machine's host name and IP
12074 address via mDNS on the local network.
12075
12076 When @var{wide-area?} is true, DNS-SD over unicast DNS is enabled.
12077
12078 Boolean values @var{ipv4?} and @var{ipv6?} determine whether to use IPv4/IPv6
12079 sockets.
12080 @end deffn
12081
12082 @deffn {Scheme Variable} openvswitch-service-type
12083 This is the type of the @uref{http://www.openvswitch.org, Open vSwitch}
12084 service, whose value should be an @code{openvswitch-configuration}
12085 object.
12086 @end deffn
12087
12088 @deftp {Data Type} openvswitch-configuration
12089 Data type representing the configuration of Open vSwitch, a multilayer
12090 virtual switch which is designed to enable massive network automation
12091 through programmatic extension.
12092
12093 @table @asis
12094 @item @code{package} (default: @var{openvswitch})
12095 Package object of the Open vSwitch.
12096
12097 @end table
12098 @end deftp
12099
12100 @node X Window
12101 @subsubsection X Window
12102
12103 @cindex X11
12104 @cindex X Window System
12105 @cindex login manager
12106 Support for the X Window graphical display system---specifically
12107 Xorg---is provided by the @code{(gnu services xorg)} module. Note that
12108 there is no @code{xorg-service} procedure. Instead, the X server is
12109 started by the @dfn{login manager}, by default SLiM.
12110
12111 @cindex window manager
12112 To use X11, you must install at least one @dfn{window manager}---for
12113 example the @code{windowmaker} or @code{openbox} packages---preferably
12114 by adding it to the @code{packages} field of your operating system
12115 definition (@pxref{operating-system Reference, system-wide packages}).
12116
12117 @defvr {Scheme Variable} slim-service-type
12118 This is the type for the SLiM graphical login manager for X11.
12119
12120 @cindex session types (X11)
12121 @cindex X11 session types
12122 SLiM looks for @dfn{session types} described by the @file{.desktop} files in
12123 @file{/run/current-system/profile/share/xsessions} and allows users to
12124 choose a session from the log-in screen using @kbd{F1}. Packages such
12125 as @code{xfce}, @code{sawfish}, and @code{ratpoison} provide
12126 @file{.desktop} files; adding them to the system-wide set of packages
12127 automatically makes them available at the log-in screen.
12128
12129 In addition, @file{~/.xsession} files are honored. When available,
12130 @file{~/.xsession} must be an executable that starts a window manager
12131 and/or other X clients.
12132 @end defvr
12133
12134 @deftp {Data Type} slim-configuration
12135 Data type representing the configuration of @code{slim-service-type}.
12136
12137 @table @asis
12138 @item @code{allow-empty-passwords?} (default: @code{#t})
12139 Whether to allow logins with empty passwords.
12140
12141 @item @code{auto-login?} (default: @code{#f})
12142 @itemx @code{default-user} (default: @code{""})
12143 When @code{auto-login?} is false, SLiM presents a log-in screen.
12144
12145 When @code{auto-login?} is true, SLiM logs in directly as
12146 @code{default-user}.
12147
12148 @item @code{theme} (default: @code{%default-slim-theme})
12149 @itemx @code{theme-name} (default: @code{%default-slim-theme-name})
12150 The graphical theme to use and its name.
12151
12152 @item @code{auto-login-session} (default: @code{#f})
12153 If true, this must be the name of the executable to start as the default
12154 session---e.g., @code{(file-append windowmaker "/bin/windowmaker")}.
12155
12156 If false, a session described by one of the available @file{.desktop}
12157 files in @code{/run/current-system/profile} and @code{~/.guix-profile}
12158 will be used.
12159
12160 @quotation Note
12161 You must install at least one window manager in the system profile or in
12162 your user profile. Failing to do that, if @code{auto-login-session} is
12163 false, you will be unable to log in.
12164 @end quotation
12165
12166 @item @code{startx} (default: @code{(xorg-start-command)})
12167 The command used to start the X11 graphical server.
12168
12169 @item @code{xauth} (default: @code{xauth})
12170 The XAuth package to use.
12171
12172 @item @code{shepherd} (default: @code{shepherd})
12173 The Shepherd package used when invoking @command{halt} and
12174 @command{reboot}.
12175
12176 @item @code{sessreg} (default: @code{sessreg})
12177 The sessreg package used in order to register the session.
12178
12179 @item @code{slim} (default: @code{slim})
12180 The SLiM package to use.
12181 @end table
12182 @end deftp
12183
12184 @defvr {Scheme Variable} %default-theme
12185 @defvrx {Scheme Variable} %default-theme-name
12186 The default SLiM theme and its name.
12187 @end defvr
12188
12189
12190 @deftp {Data Type} sddm-configuration
12191 This is the data type representing the sddm service configuration.
12192
12193 @table @asis
12194 @item @code{display-server} (default: "x11")
12195 Select display server to use for the greeter. Valid values are "x11"
12196 or "wayland".
12197
12198 @item @code{numlock} (default: "on")
12199 Valid values are "on", "off" or "none".
12200
12201 @item @code{halt-command} (default @code{#~(string-apppend #$shepherd "/sbin/halt")})
12202 Command to run when halting.
12203
12204 @item @code{reboot-command} (default @code{#~(string-append #$shepherd "/sbin/reboot")})
12205 Command to run when rebooting.
12206
12207 @item @code{theme} (default "maldives")
12208 Theme to use. Default themes provided by SDDM are "elarun" or "maldives".
12209
12210 @item @code{themes-directory} (default "/run/current-system/profile/share/sddm/themes")
12211 Directory to look for themes.
12212
12213 @item @code{faces-directory} (default "/run/current-system/profile/share/sddm/faces")
12214 Directory to look for faces.
12215
12216 @item @code{default-path} (default "/run/current-system/profile/bin")
12217 Default PATH to use.
12218
12219 @item @code{minimum-uid} (default 1000)
12220 Minimum UID to display in SDDM.
12221
12222 @item @code{maximum-uid} (default 2000)
12223 Maximum UID to display in SDDM
12224
12225 @item @code{remember-last-user?} (default #t)
12226 Remember last user.
12227
12228 @item @code{remember-last-session?} (default #t)
12229 Remember last session.
12230
12231 @item @code{hide-users} (default "")
12232 Usernames to hide from SDDM greeter.
12233
12234 @item @code{hide-shells} (default @code{#~(string-append #$shadow "/sbin/nologin")})
12235 Users with shells listed will be hidden from the SDDM greeter.
12236
12237 @item @code{session-command} (default @code{#~(string-append #$sddm "/share/sddm/scripts/wayland-session")})
12238 Script to run before starting a wayland session.
12239
12240 @item @code{sessions-directory} (default "/run/current-system/profile/share/wayland-sessions")
12241 Directory to look for desktop files starting wayland sessions.
12242
12243 @item @code{xorg-server-path} (default @code{xorg-start-command})
12244 Path to xorg-server.
12245
12246 @item @code{xauth-path} (default @code{#~(string-append #$xauth "/bin/xauth")})
12247 Path to xauth.
12248
12249 @item @code{xephyr-path} (default @code{#~(string-append #$xorg-server "/bin/Xephyr")})
12250 Path to Xephyr.
12251
12252 @item @code{xdisplay-start} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xsetup")})
12253 Script to run after starting xorg-server.
12254
12255 @item @code{xdisplay-stop} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xstop")})
12256 Script to run before stopping xorg-server.
12257
12258 @item @code{xsession-command} (default: @code{xinitrc})
12259 Script to run before starting a X session.
12260
12261 @item @code{xsessions-directory} (default: "/run/current-system/profile/share/xsessions")
12262 Directory to look for desktop files starting X sessions.
12263
12264 @item @code{minimum-vt} (default: 7)
12265 Minimum VT to use.
12266
12267 @item @code{xserver-arguments} (default "-nolisten tcp")
12268 Arguments to pass to xorg-server.
12269
12270 @item @code{auto-login-user} (default "")
12271 User to use for auto-login.
12272
12273 @item @code{auto-login-session} (default "")
12274 Desktop file to use for auto-login.
12275
12276 @item @code{relogin?} (default #f)
12277 Relogin after logout.
12278
12279 @end table
12280 @end deftp
12281
12282 @cindex login manager
12283 @cindex X11 login
12284 @deffn {Scheme Procedure} sddm-service config
12285 Return a service that spawns the SDDM graphical login manager for config of
12286 type @code{<sddm-configuration>}.
12287
12288 @example
12289 (sddm-service (sddm-configuration
12290 (auto-login-user "Alice")
12291 (auto-login-session "xfce.desktop")))
12292 @end example
12293 @end deffn
12294
12295 @deffn {Scheme Procedure} xorg-start-command [#:guile] @
12296 [#:modules %default-xorg-modules] @
12297 [#:fonts %default-xorg-fonts] @
12298 [#:configuration-file (xorg-configuration-file @dots{})] @
12299 [#:xorg-server @var{xorg-server}]
12300 Return a @code{startx} script in which @var{modules}, a list of X module
12301 packages, and @var{fonts}, a list of X font directories, are available. See
12302 @code{xorg-wrapper} for more details on the arguments. The result should be
12303 used in place of @code{startx}.
12304
12305 Usually the X server is started by a login manager.
12306 @end deffn
12307
12308 @deffn {Scheme Procedure} xorg-configuration-file @
12309 [#:modules %default-xorg-modules] @
12310 [#:fonts %default-xorg-fonts] @
12311 [#:drivers '()] [#:resolutions '()] [#:extra-config '()]
12312 Return a configuration file for the Xorg server containing search paths for
12313 all the common drivers.
12314
12315 @var{modules} must be a list of @dfn{module packages} loaded by the Xorg
12316 server---e.g., @code{xf86-video-vesa}, @code{xf86-input-keyboard}, and so on.
12317 @var{fonts} must be a list of font directories to add to the server's
12318 @dfn{font path}.
12319
12320 @var{drivers} must be either the empty list, in which case Xorg chooses a
12321 graphics driver automatically, or a list of driver names that will be tried in
12322 this order---e.g., @code{("modesetting" "vesa")}.
12323
12324 Likewise, when @var{resolutions} is the empty list, Xorg chooses an
12325 appropriate screen resolution; otherwise, it must be a list of
12326 resolutions---e.g., @code{((1024 768) (640 480))}.
12327
12328 Last, @var{extra-config} is a list of strings or objects appended to the
12329 configuration file. It is used to pass extra text to be
12330 added verbatim to the configuration file.
12331
12332 @cindex keymap
12333 @cindex keyboard layout
12334 This procedure is especially useful to configure a different keyboard layout
12335 than the default US keymap. For instance, to use the ``bépo'' keymap by
12336 default on the display manager:
12337
12338 @example
12339 (define bepo-evdev
12340 "Section \"InputClass\"
12341 Identifier \"evdev keyboard catchall\"
12342 Driver \"evdev\"
12343 MatchIsKeyboard \"on\"
12344 Option \"xkb_layout\" \"fr\"
12345 Option \"xkb_variant\" \"bepo\"
12346 EndSection")
12347
12348 (operating-system
12349 ...
12350 (services
12351 (modify-services %desktop-services
12352 (slim-service-type config =>
12353 (slim-configuration
12354 (inherit config)
12355 (startx (xorg-start-command
12356 #:configuration-file
12357 (xorg-configuration-file
12358 #:extra-config
12359 (list bepo-evdev)))))))))
12360 @end example
12361
12362 The @code{MatchIsKeyboard} line specifies that we only apply the configuration
12363 to keyboards. Without this line, other devices such as touchpad may not work
12364 correctly because they will be attached to the wrong driver. In this example,
12365 the user typically used @code{setxkbmap fr bepo} to set their favorite keymap
12366 once logged in. The first argument corresponds to the layout, while the second
12367 argument corresponds to the variant. The @code{xkb_variant} line can be omitted
12368 to select the default variant.
12369 @end deffn
12370
12371 @deffn {Scheme Procedure} screen-locker-service @var{package} [@var{program}]
12372 Add @var{package}, a package for a screen locker or screen saver whose
12373 command is @var{program}, to the set of setuid programs and add a PAM entry
12374 for it. For example:
12375
12376 @lisp
12377 (screen-locker-service xlockmore "xlock")
12378 @end lisp
12379
12380 makes the good ol' XlockMore usable.
12381 @end deffn
12382
12383
12384 @node Printing Services
12385 @subsubsection Printing Services
12386
12387 @cindex printer support with CUPS
12388 The @code{(gnu services cups)} module provides a Guix service definition
12389 for the CUPS printing service. To add printer support to a GuixSD
12390 system, add a @code{cups-service} to the operating system definition:
12391
12392 @deffn {Scheme Variable} cups-service-type
12393 The service type for the CUPS print server. Its value should be a valid
12394 CUPS configuration (see below). To use the default settings, simply
12395 write:
12396 @example
12397 (service cups-service-type)
12398 @end example
12399 @end deffn
12400
12401 The CUPS configuration controls the basic things about your CUPS
12402 installation: what interfaces it listens on, what to do if a print job
12403 fails, how much logging to do, and so on. To actually add a printer,
12404 you have to visit the @url{http://localhost:631} URL, or use a tool such
12405 as GNOME's printer configuration services. By default, configuring a
12406 CUPS service will generate a self-signed certificate if needed, for
12407 secure connections to the print server.
12408
12409 Suppose you want to enable the Web interface of CUPS and also add
12410 support for Epson printers @i{via} the @code{escpr} package and for HP
12411 printers @i{via} the @code{hplip-minimal} package. You can do that directly,
12412 like this (you need to use the @code{(gnu packages cups)} module):
12413
12414 @example
12415 (service cups-service-type
12416 (cups-configuration
12417 (web-interface? #t)
12418 (extensions
12419 (list cups-filters escpr hplip-minimal))))
12420 @end example
12421
12422 Note: If you wish to use the Qt5 based GUI which comes with the hplip
12423 package then it is suggested that you install the @code{hplip} package,
12424 either in your OS configuration file or as your user.
12425
12426 The available configuration parameters follow. Each parameter
12427 definition is preceded by its type; for example, @samp{string-list foo}
12428 indicates that the @code{foo} parameter should be specified as a list of
12429 strings. There is also a way to specify the configuration as a string,
12430 if you have an old @code{cupsd.conf} file that you want to port over
12431 from some other system; see the end for more details.
12432
12433 @c The following documentation was initially generated by
12434 @c (generate-documentation) in (gnu services cups). Manually maintained
12435 @c documentation is better, so we shouldn't hesitate to edit below as
12436 @c needed. However if the change you want to make to this documentation
12437 @c can be done in an automated way, it's probably easier to change
12438 @c (generate-documentation) than to make it below and have to deal with
12439 @c the churn as CUPS updates.
12440
12441
12442 Available @code{cups-configuration} fields are:
12443
12444 @deftypevr {@code{cups-configuration} parameter} package cups
12445 The CUPS package.
12446 @end deftypevr
12447
12448 @deftypevr {@code{cups-configuration} parameter} package-list extensions
12449 Drivers and other extensions to the CUPS package.
12450 @end deftypevr
12451
12452 @deftypevr {@code{cups-configuration} parameter} files-configuration files-configuration
12453 Configuration of where to write logs, what directories to use for print
12454 spools, and related privileged configuration parameters.
12455
12456 Available @code{files-configuration} fields are:
12457
12458 @deftypevr {@code{files-configuration} parameter} log-location access-log
12459 Defines the access log filename. Specifying a blank filename disables
12460 access log generation. The value @code{stderr} causes log entries to be
12461 sent to the standard error file when the scheduler is running in the
12462 foreground, or to the system log daemon when run in the background. The
12463 value @code{syslog} causes log entries to be sent to the system log
12464 daemon. The server name may be included in filenames using the string
12465 @code{%s}, as in @code{/var/log/cups/%s-access_log}.
12466
12467 Defaults to @samp{"/var/log/cups/access_log"}.
12468 @end deftypevr
12469
12470 @deftypevr {@code{files-configuration} parameter} file-name cache-dir
12471 Where CUPS should cache data.
12472
12473 Defaults to @samp{"/var/cache/cups"}.
12474 @end deftypevr
12475
12476 @deftypevr {@code{files-configuration} parameter} string config-file-perm
12477 Specifies the permissions for all configuration files that the scheduler
12478 writes.
12479
12480 Note that the permissions for the printers.conf file are currently
12481 masked to only allow access from the scheduler user (typically root).
12482 This is done because printer device URIs sometimes contain sensitive
12483 authentication information that should not be generally known on the
12484 system. There is no way to disable this security feature.
12485
12486 Defaults to @samp{"0640"}.
12487 @end deftypevr
12488
12489 @deftypevr {@code{files-configuration} parameter} log-location error-log
12490 Defines the error log filename. Specifying a blank filename disables
12491 access log generation. The value @code{stderr} causes log entries to be
12492 sent to the standard error file when the scheduler is running in the
12493 foreground, or to the system log daemon when run in the background. The
12494 value @code{syslog} causes log entries to be sent to the system log
12495 daemon. The server name may be included in filenames using the string
12496 @code{%s}, as in @code{/var/log/cups/%s-error_log}.
12497
12498 Defaults to @samp{"/var/log/cups/error_log"}.
12499 @end deftypevr
12500
12501 @deftypevr {@code{files-configuration} parameter} string fatal-errors
12502 Specifies which errors are fatal, causing the scheduler to exit. The
12503 kind strings are:
12504
12505 @table @code
12506 @item none
12507 No errors are fatal.
12508
12509 @item all
12510 All of the errors below are fatal.
12511
12512 @item browse
12513 Browsing initialization errors are fatal, for example failed connections
12514 to the DNS-SD daemon.
12515
12516 @item config
12517 Configuration file syntax errors are fatal.
12518
12519 @item listen
12520 Listen or Port errors are fatal, except for IPv6 failures on the
12521 loopback or @code{any} addresses.
12522
12523 @item log
12524 Log file creation or write errors are fatal.
12525
12526 @item permissions
12527 Bad startup file permissions are fatal, for example shared TLS
12528 certificate and key files with world-read permissions.
12529 @end table
12530
12531 Defaults to @samp{"all -browse"}.
12532 @end deftypevr
12533
12534 @deftypevr {@code{files-configuration} parameter} boolean file-device?
12535 Specifies whether the file pseudo-device can be used for new printer
12536 queues. The URI @uref{file:///dev/null} is always allowed.
12537
12538 Defaults to @samp{#f}.
12539 @end deftypevr
12540
12541 @deftypevr {@code{files-configuration} parameter} string group
12542 Specifies the group name or ID that will be used when executing external
12543 programs.
12544
12545 Defaults to @samp{"lp"}.
12546 @end deftypevr
12547
12548 @deftypevr {@code{files-configuration} parameter} string log-file-perm
12549 Specifies the permissions for all log files that the scheduler writes.
12550
12551 Defaults to @samp{"0644"}.
12552 @end deftypevr
12553
12554 @deftypevr {@code{files-configuration} parameter} log-location page-log
12555 Defines the page log filename. Specifying a blank filename disables
12556 access log generation. The value @code{stderr} causes log entries to be
12557 sent to the standard error file when the scheduler is running in the
12558 foreground, or to the system log daemon when run in the background. The
12559 value @code{syslog} causes log entries to be sent to the system log
12560 daemon. The server name may be included in filenames using the string
12561 @code{%s}, as in @code{/var/log/cups/%s-page_log}.
12562
12563 Defaults to @samp{"/var/log/cups/page_log"}.
12564 @end deftypevr
12565
12566 @deftypevr {@code{files-configuration} parameter} string remote-root
12567 Specifies the username that is associated with unauthenticated accesses
12568 by clients claiming to be the root user. The default is @code{remroot}.
12569
12570 Defaults to @samp{"remroot"}.
12571 @end deftypevr
12572
12573 @deftypevr {@code{files-configuration} parameter} file-name request-root
12574 Specifies the directory that contains print jobs and other HTTP request
12575 data.
12576
12577 Defaults to @samp{"/var/spool/cups"}.
12578 @end deftypevr
12579
12580 @deftypevr {@code{files-configuration} parameter} sandboxing sandboxing
12581 Specifies the level of security sandboxing that is applied to print
12582 filters, backends, and other child processes of the scheduler; either
12583 @code{relaxed} or @code{strict}. This directive is currently only
12584 used/supported on macOS.
12585
12586 Defaults to @samp{strict}.
12587 @end deftypevr
12588
12589 @deftypevr {@code{files-configuration} parameter} file-name server-keychain
12590 Specifies the location of TLS certificates and private keys. CUPS will
12591 look for public and private keys in this directory: a @code{.crt} files
12592 for PEM-encoded certificates and corresponding @code{.key} files for
12593 PEM-encoded private keys.
12594
12595 Defaults to @samp{"/etc/cups/ssl"}.
12596 @end deftypevr
12597
12598 @deftypevr {@code{files-configuration} parameter} file-name server-root
12599 Specifies the directory containing the server configuration files.
12600
12601 Defaults to @samp{"/etc/cups"}.
12602 @end deftypevr
12603
12604 @deftypevr {@code{files-configuration} parameter} boolean sync-on-close?
12605 Specifies whether the scheduler calls fsync(2) after writing
12606 configuration or state files.
12607
12608 Defaults to @samp{#f}.
12609 @end deftypevr
12610
12611 @deftypevr {@code{files-configuration} parameter} space-separated-string-list system-group
12612 Specifies the group(s) to use for @code{@@SYSTEM} group authentication.
12613 @end deftypevr
12614
12615 @deftypevr {@code{files-configuration} parameter} file-name temp-dir
12616 Specifies the directory where temporary files are stored.
12617
12618 Defaults to @samp{"/var/spool/cups/tmp"}.
12619 @end deftypevr
12620
12621 @deftypevr {@code{files-configuration} parameter} string user
12622 Specifies the user name or ID that is used when running external
12623 programs.
12624
12625 Defaults to @samp{"lp"}.
12626 @end deftypevr
12627 @end deftypevr
12628
12629 @deftypevr {@code{cups-configuration} parameter} access-log-level access-log-level
12630 Specifies the logging level for the AccessLog file. The @code{config}
12631 level logs when printers and classes are added, deleted, or modified and
12632 when configuration files are accessed or updated. The @code{actions}
12633 level logs when print jobs are submitted, held, released, modified, or
12634 canceled, and any of the conditions for @code{config}. The @code{all}
12635 level logs all requests.
12636
12637 Defaults to @samp{actions}.
12638 @end deftypevr
12639
12640 @deftypevr {@code{cups-configuration} parameter} boolean auto-purge-jobs?
12641 Specifies whether to purge job history data automatically when it is no
12642 longer required for quotas.
12643
12644 Defaults to @samp{#f}.
12645 @end deftypevr
12646
12647 @deftypevr {@code{cups-configuration} parameter} browse-local-protocols browse-local-protocols
12648 Specifies which protocols to use for local printer sharing.
12649
12650 Defaults to @samp{dnssd}.
12651 @end deftypevr
12652
12653 @deftypevr {@code{cups-configuration} parameter} boolean browse-web-if?
12654 Specifies whether the CUPS web interface is advertised.
12655
12656 Defaults to @samp{#f}.
12657 @end deftypevr
12658
12659 @deftypevr {@code{cups-configuration} parameter} boolean browsing?
12660 Specifies whether shared printers are advertised.
12661
12662 Defaults to @samp{#f}.
12663 @end deftypevr
12664
12665 @deftypevr {@code{cups-configuration} parameter} string classification
12666 Specifies the security classification of the server. Any valid banner
12667 name can be used, including "classified", "confidential", "secret",
12668 "topsecret", and "unclassified", or the banner can be omitted to disable
12669 secure printing functions.
12670
12671 Defaults to @samp{""}.
12672 @end deftypevr
12673
12674 @deftypevr {@code{cups-configuration} parameter} boolean classify-override?
12675 Specifies whether users may override the classification (cover page) of
12676 individual print jobs using the @code{job-sheets} option.
12677
12678 Defaults to @samp{#f}.
12679 @end deftypevr
12680
12681 @deftypevr {@code{cups-configuration} parameter} default-auth-type default-auth-type
12682 Specifies the default type of authentication to use.
12683
12684 Defaults to @samp{Basic}.
12685 @end deftypevr
12686
12687 @deftypevr {@code{cups-configuration} parameter} default-encryption default-encryption
12688 Specifies whether encryption will be used for authenticated requests.
12689
12690 Defaults to @samp{Required}.
12691 @end deftypevr
12692
12693 @deftypevr {@code{cups-configuration} parameter} string default-language
12694 Specifies the default language to use for text and web content.
12695
12696 Defaults to @samp{"en"}.
12697 @end deftypevr
12698
12699 @deftypevr {@code{cups-configuration} parameter} string default-paper-size
12700 Specifies the default paper size for new print queues. @samp{"Auto"}
12701 uses a locale-specific default, while @samp{"None"} specifies there is
12702 no default paper size. Specific size names are typically
12703 @samp{"Letter"} or @samp{"A4"}.
12704
12705 Defaults to @samp{"Auto"}.
12706 @end deftypevr
12707
12708 @deftypevr {@code{cups-configuration} parameter} string default-policy
12709 Specifies the default access policy to use.
12710
12711 Defaults to @samp{"default"}.
12712 @end deftypevr
12713
12714 @deftypevr {@code{cups-configuration} parameter} boolean default-shared?
12715 Specifies whether local printers are shared by default.
12716
12717 Defaults to @samp{#t}.
12718 @end deftypevr
12719
12720 @deftypevr {@code{cups-configuration} parameter} non-negative-integer dirty-clean-interval
12721 Specifies the delay for updating of configuration and state files, in
12722 seconds. A value of 0 causes the update to happen as soon as possible,
12723 typically within a few milliseconds.
12724
12725 Defaults to @samp{30}.
12726 @end deftypevr
12727
12728 @deftypevr {@code{cups-configuration} parameter} error-policy error-policy
12729 Specifies what to do when an error occurs. Possible values are
12730 @code{abort-job}, which will discard the failed print job;
12731 @code{retry-job}, which will retry the job at a later time;
12732 @code{retry-this-job}, which retries the failed job immediately; and
12733 @code{stop-printer}, which stops the printer.
12734
12735 Defaults to @samp{stop-printer}.
12736 @end deftypevr
12737
12738 @deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-limit
12739 Specifies the maximum cost of filters that are run concurrently, which
12740 can be used to minimize disk, memory, and CPU resource problems. A
12741 limit of 0 disables filter limiting. An average print to a
12742 non-PostScript printer needs a filter limit of about 200. A PostScript
12743 printer needs about half that (100). Setting the limit below these
12744 thresholds will effectively limit the scheduler to printing a single job
12745 at any time.
12746
12747 Defaults to @samp{0}.
12748 @end deftypevr
12749
12750 @deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-nice
12751 Specifies the scheduling priority of filters that are run to print a
12752 job. The nice value ranges from 0, the highest priority, to 19, the
12753 lowest priority.
12754
12755 Defaults to @samp{0}.
12756 @end deftypevr
12757
12758 @deftypevr {@code{cups-configuration} parameter} host-name-lookups host-name-lookups
12759 Specifies whether to do reverse lookups on connecting clients. The
12760 @code{double} setting causes @code{cupsd} to verify that the hostname
12761 resolved from the address matches one of the addresses returned for that
12762 hostname. Double lookups also prevent clients with unregistered
12763 addresses from connecting to your server. Only set this option to
12764 @code{#t} or @code{double} if absolutely required.
12765
12766 Defaults to @samp{#f}.
12767 @end deftypevr
12768
12769 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-kill-delay
12770 Specifies the number of seconds to wait before killing the filters and
12771 backend associated with a canceled or held job.
12772
12773 Defaults to @samp{30}.
12774 @end deftypevr
12775
12776 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-interval
12777 Specifies the interval between retries of jobs in seconds. This is
12778 typically used for fax queues but can also be used with normal print
12779 queues whose error policy is @code{retry-job} or
12780 @code{retry-current-job}.
12781
12782 Defaults to @samp{30}.
12783 @end deftypevr
12784
12785 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-limit
12786 Specifies the number of retries that are done for jobs. This is
12787 typically used for fax queues but can also be used with normal print
12788 queues whose error policy is @code{retry-job} or
12789 @code{retry-current-job}.
12790
12791 Defaults to @samp{5}.
12792 @end deftypevr
12793
12794 @deftypevr {@code{cups-configuration} parameter} boolean keep-alive?
12795 Specifies whether to support HTTP keep-alive connections.
12796
12797 Defaults to @samp{#t}.
12798 @end deftypevr
12799
12800 @deftypevr {@code{cups-configuration} parameter} non-negative-integer keep-alive-timeout
12801 Specifies how long an idle client connection remains open, in seconds.
12802
12803 Defaults to @samp{30}.
12804 @end deftypevr
12805
12806 @deftypevr {@code{cups-configuration} parameter} non-negative-integer limit-request-body
12807 Specifies the maximum size of print files, IPP requests, and HTML form
12808 data. A limit of 0 disables the limit check.
12809
12810 Defaults to @samp{0}.
12811 @end deftypevr
12812
12813 @deftypevr {@code{cups-configuration} parameter} multiline-string-list listen
12814 Listens on the specified interfaces for connections. Valid values are
12815 of the form @var{address}:@var{port}, where @var{address} is either an
12816 IPv6 address enclosed in brackets, an IPv4 address, or @code{*} to
12817 indicate all addresses. Values can also be file names of local UNIX
12818 domain sockets. The Listen directive is similar to the Port directive
12819 but allows you to restrict access to specific interfaces or networks.
12820 @end deftypevr
12821
12822 @deftypevr {@code{cups-configuration} parameter} non-negative-integer listen-back-log
12823 Specifies the number of pending connections that will be allowed. This
12824 normally only affects very busy servers that have reached the MaxClients
12825 limit, but can also be triggered by large numbers of simultaneous
12826 connections. When the limit is reached, the operating system will
12827 refuse additional connections until the scheduler can accept the pending
12828 ones.
12829
12830 Defaults to @samp{128}.
12831 @end deftypevr
12832
12833 @deftypevr {@code{cups-configuration} parameter} location-access-control-list location-access-controls
12834 Specifies a set of additional access controls.
12835
12836 Available @code{location-access-controls} fields are:
12837
12838 @deftypevr {@code{location-access-controls} parameter} file-name path
12839 Specifies the URI path to which the access control applies.
12840 @end deftypevr
12841
12842 @deftypevr {@code{location-access-controls} parameter} access-control-list access-controls
12843 Access controls for all access to this path, in the same format as the
12844 @code{access-controls} of @code{operation-access-control}.
12845
12846 Defaults to @samp{()}.
12847 @end deftypevr
12848
12849 @deftypevr {@code{location-access-controls} parameter} method-access-control-list method-access-controls
12850 Access controls for method-specific access to this path.
12851
12852 Defaults to @samp{()}.
12853
12854 Available @code{method-access-controls} fields are:
12855
12856 @deftypevr {@code{method-access-controls} parameter} boolean reverse?
12857 If @code{#t}, apply access controls to all methods except the listed
12858 methods. Otherwise apply to only the listed methods.
12859
12860 Defaults to @samp{#f}.
12861 @end deftypevr
12862
12863 @deftypevr {@code{method-access-controls} parameter} method-list methods
12864 Methods to which this access control applies.
12865
12866 Defaults to @samp{()}.
12867 @end deftypevr
12868
12869 @deftypevr {@code{method-access-controls} parameter} access-control-list access-controls
12870 Access control directives, as a list of strings. Each string should be
12871 one directive, such as "Order allow,deny".
12872
12873 Defaults to @samp{()}.
12874 @end deftypevr
12875 @end deftypevr
12876 @end deftypevr
12877
12878 @deftypevr {@code{cups-configuration} parameter} non-negative-integer log-debug-history
12879 Specifies the number of debugging messages that are retained for logging
12880 if an error occurs in a print job. Debug messages are logged regardless
12881 of the LogLevel setting.
12882
12883 Defaults to @samp{100}.
12884 @end deftypevr
12885
12886 @deftypevr {@code{cups-configuration} parameter} log-level log-level
12887 Specifies the level of logging for the ErrorLog file. The value
12888 @code{none} stops all logging while @code{debug2} logs everything.
12889
12890 Defaults to @samp{info}.
12891 @end deftypevr
12892
12893 @deftypevr {@code{cups-configuration} parameter} log-time-format log-time-format
12894 Specifies the format of the date and time in the log files. The value
12895 @code{standard} logs whole seconds while @code{usecs} logs microseconds.
12896
12897 Defaults to @samp{standard}.
12898 @end deftypevr
12899
12900 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients
12901 Specifies the maximum number of simultaneous clients that are allowed by
12902 the scheduler.
12903
12904 Defaults to @samp{100}.
12905 @end deftypevr
12906
12907 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients-per-host
12908 Specifies the maximum number of simultaneous clients that are allowed
12909 from a single address.
12910
12911 Defaults to @samp{100}.
12912 @end deftypevr
12913
12914 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-copies
12915 Specifies the maximum number of copies that a user can print of each
12916 job.
12917
12918 Defaults to @samp{9999}.
12919 @end deftypevr
12920
12921 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-hold-time
12922 Specifies the maximum time a job may remain in the @code{indefinite}
12923 hold state before it is canceled. A value of 0 disables cancellation of
12924 held jobs.
12925
12926 Defaults to @samp{0}.
12927 @end deftypevr
12928
12929 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs
12930 Specifies the maximum number of simultaneous jobs that are allowed. Set
12931 to 0 to allow an unlimited number of jobs.
12932
12933 Defaults to @samp{500}.
12934 @end deftypevr
12935
12936 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-printer
12937 Specifies the maximum number of simultaneous jobs that are allowed per
12938 printer. A value of 0 allows up to MaxJobs jobs per printer.
12939
12940 Defaults to @samp{0}.
12941 @end deftypevr
12942
12943 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-user
12944 Specifies the maximum number of simultaneous jobs that are allowed per
12945 user. A value of 0 allows up to MaxJobs jobs per user.
12946
12947 Defaults to @samp{0}.
12948 @end deftypevr
12949
12950 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-job-time
12951 Specifies the maximum time a job may take to print before it is
12952 canceled, in seconds. Set to 0 to disable cancellation of "stuck" jobs.
12953
12954 Defaults to @samp{10800}.
12955 @end deftypevr
12956
12957 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-log-size
12958 Specifies the maximum size of the log files before they are rotated, in
12959 bytes. The value 0 disables log rotation.
12960
12961 Defaults to @samp{1048576}.
12962 @end deftypevr
12963
12964 @deftypevr {@code{cups-configuration} parameter} non-negative-integer multiple-operation-timeout
12965 Specifies the maximum amount of time to allow between files in a
12966 multiple file print job, in seconds.
12967
12968 Defaults to @samp{300}.
12969 @end deftypevr
12970
12971 @deftypevr {@code{cups-configuration} parameter} string page-log-format
12972 Specifies the format of PageLog lines. Sequences beginning with percent
12973 (@samp{%}) characters are replaced with the corresponding information,
12974 while all other characters are copied literally. The following percent
12975 sequences are recognized:
12976
12977 @table @samp
12978 @item %%
12979 insert a single percent character
12980
12981 @item %@{name@}
12982 insert the value of the specified IPP attribute
12983
12984 @item %C
12985 insert the number of copies for the current page
12986
12987 @item %P
12988 insert the current page number
12989
12990 @item %T
12991 insert the current date and time in common log format
12992
12993 @item %j
12994 insert the job ID
12995
12996 @item %p
12997 insert the printer name
12998
12999 @item %u
13000 insert the username
13001 @end table
13002
13003 A value of the empty string disables page logging. The string @code{%p
13004 %u %j %T %P %C %@{job-billing@} %@{job-originating-host-name@}
13005 %@{job-name@} %@{media@} %@{sides@}} creates a page log with the
13006 standard items.
13007
13008 Defaults to @samp{""}.
13009 @end deftypevr
13010
13011 @deftypevr {@code{cups-configuration} parameter} environment-variables environment-variables
13012 Passes the specified environment variable(s) to child processes; a list
13013 of strings.
13014
13015 Defaults to @samp{()}.
13016 @end deftypevr
13017
13018 @deftypevr {@code{cups-configuration} parameter} policy-configuration-list policies
13019 Specifies named access control policies.
13020
13021 Available @code{policy-configuration} fields are:
13022
13023 @deftypevr {@code{policy-configuration} parameter} string name
13024 Name of the policy.
13025 @end deftypevr
13026
13027 @deftypevr {@code{policy-configuration} parameter} string job-private-access
13028 Specifies an access list for a job's private values. @code{@@ACL} maps
13029 to the printer's requesting-user-name-allowed or
13030 requesting-user-name-denied values. @code{@@OWNER} maps to the job's
13031 owner. @code{@@SYSTEM} maps to the groups listed for the
13032 @code{system-group} field of the @code{files-config} configuration,
13033 which is reified into the @code{cups-files.conf(5)} file. Other
13034 possible elements of the access list include specific user names, and
13035 @code{@@@var{group}} to indicate members of a specific group. The
13036 access list may also be simply @code{all} or @code{default}.
13037
13038 Defaults to @samp{"@@OWNER @@SYSTEM"}.
13039 @end deftypevr
13040
13041 @deftypevr {@code{policy-configuration} parameter} string job-private-values
13042 Specifies the list of job values to make private, or @code{all},
13043 @code{default}, or @code{none}.
13044
13045 Defaults to @samp{"job-name job-originating-host-name
13046 job-originating-user-name phone"}.
13047 @end deftypevr
13048
13049 @deftypevr {@code{policy-configuration} parameter} string subscription-private-access
13050 Specifies an access list for a subscription's private values.
13051 @code{@@ACL} maps to the printer's requesting-user-name-allowed or
13052 requesting-user-name-denied values. @code{@@OWNER} maps to the job's
13053 owner. @code{@@SYSTEM} maps to the groups listed for the
13054 @code{system-group} field of the @code{files-config} configuration,
13055 which is reified into the @code{cups-files.conf(5)} file. Other
13056 possible elements of the access list include specific user names, and
13057 @code{@@@var{group}} to indicate members of a specific group. The
13058 access list may also be simply @code{all} or @code{default}.
13059
13060 Defaults to @samp{"@@OWNER @@SYSTEM"}.
13061 @end deftypevr
13062
13063 @deftypevr {@code{policy-configuration} parameter} string subscription-private-values
13064 Specifies the list of job values to make private, or @code{all},
13065 @code{default}, or @code{none}.
13066
13067 Defaults to @samp{"notify-events notify-pull-method notify-recipient-uri
13068 notify-subscriber-user-name notify-user-data"}.
13069 @end deftypevr
13070
13071 @deftypevr {@code{policy-configuration} parameter} operation-access-control-list access-controls
13072 Access control by IPP operation.
13073
13074 Defaults to @samp{()}.
13075 @end deftypevr
13076 @end deftypevr
13077
13078 @deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-files
13079 Specifies whether job files (documents) are preserved after a job is
13080 printed. If a numeric value is specified, job files are preserved for
13081 the indicated number of seconds after printing. Otherwise a boolean
13082 value applies indefinitely.
13083
13084 Defaults to @samp{86400}.
13085 @end deftypevr
13086
13087 @deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-history
13088 Specifies whether the job history is preserved after a job is printed.
13089 If a numeric value is specified, the job history is preserved for the
13090 indicated number of seconds after printing. If @code{#t}, the job
13091 history is preserved until the MaxJobs limit is reached.
13092
13093 Defaults to @samp{#t}.
13094 @end deftypevr
13095
13096 @deftypevr {@code{cups-configuration} parameter} non-negative-integer reload-timeout
13097 Specifies the amount of time to wait for job completion before
13098 restarting the scheduler.
13099
13100 Defaults to @samp{30}.
13101 @end deftypevr
13102
13103 @deftypevr {@code{cups-configuration} parameter} string rip-cache
13104 Specifies the maximum amount of memory to use when converting documents
13105 into bitmaps for a printer.
13106
13107 Defaults to @samp{"128m"}.
13108 @end deftypevr
13109
13110 @deftypevr {@code{cups-configuration} parameter} string server-admin
13111 Specifies the email address of the server administrator.
13112
13113 Defaults to @samp{"root@@localhost.localdomain"}.
13114 @end deftypevr
13115
13116 @deftypevr {@code{cups-configuration} parameter} host-name-list-or-* server-alias
13117 The ServerAlias directive is used for HTTP Host header validation when
13118 clients connect to the scheduler from external interfaces. Using the
13119 special name @code{*} can expose your system to known browser-based DNS
13120 rebinding attacks, even when accessing sites through a firewall. If the
13121 auto-discovery of alternate names does not work, we recommend listing
13122 each alternate name with a ServerAlias directive instead of using
13123 @code{*}.
13124
13125 Defaults to @samp{*}.
13126 @end deftypevr
13127
13128 @deftypevr {@code{cups-configuration} parameter} string server-name
13129 Specifies the fully-qualified host name of the server.
13130
13131 Defaults to @samp{"localhost"}.
13132 @end deftypevr
13133
13134 @deftypevr {@code{cups-configuration} parameter} server-tokens server-tokens
13135 Specifies what information is included in the Server header of HTTP
13136 responses. @code{None} disables the Server header. @code{ProductOnly}
13137 reports @code{CUPS}. @code{Major} reports @code{CUPS 2}. @code{Minor}
13138 reports @code{CUPS 2.0}. @code{Minimal} reports @code{CUPS 2.0.0}.
13139 @code{OS} reports @code{CUPS 2.0.0 (@var{uname})} where @var{uname} is
13140 the output of the @code{uname} command. @code{Full} reports @code{CUPS
13141 2.0.0 (@var{uname}) IPP/2.0}.
13142
13143 Defaults to @samp{Minimal}.
13144 @end deftypevr
13145
13146 @deftypevr {@code{cups-configuration} parameter} string set-env
13147 Set the specified environment variable to be passed to child processes.
13148
13149 Defaults to @samp{"variable value"}.
13150 @end deftypevr
13151
13152 @deftypevr {@code{cups-configuration} parameter} multiline-string-list ssl-listen
13153 Listens on the specified interfaces for encrypted connections. Valid
13154 values are of the form @var{address}:@var{port}, where @var{address} is
13155 either an IPv6 address enclosed in brackets, an IPv4 address, or
13156 @code{*} to indicate all addresses.
13157
13158 Defaults to @samp{()}.
13159 @end deftypevr
13160
13161 @deftypevr {@code{cups-configuration} parameter} ssl-options ssl-options
13162 Sets encryption options. By default, CUPS only supports encryption
13163 using TLS v1.0 or higher using known secure cipher suites. The
13164 @code{AllowRC4} option enables the 128-bit RC4 cipher suites, which are
13165 required for some older clients that do not implement newer ones. The
13166 @code{AllowSSL3} option enables SSL v3.0, which is required for some
13167 older clients that do not support TLS v1.0.
13168
13169 Defaults to @samp{()}.
13170 @end deftypevr
13171
13172 @deftypevr {@code{cups-configuration} parameter} boolean strict-conformance?
13173 Specifies whether the scheduler requires clients to strictly adhere to
13174 the IPP specifications.
13175
13176 Defaults to @samp{#f}.
13177 @end deftypevr
13178
13179 @deftypevr {@code{cups-configuration} parameter} non-negative-integer timeout
13180 Specifies the HTTP request timeout, in seconds.
13181
13182 Defaults to @samp{300}.
13183
13184 @end deftypevr
13185
13186 @deftypevr {@code{cups-configuration} parameter} boolean web-interface?
13187 Specifies whether the web interface is enabled.
13188
13189 Defaults to @samp{#f}.
13190 @end deftypevr
13191
13192 At this point you're probably thinking ``oh dear, Guix manual, I like
13193 you but you can stop already with the configuration options''. Indeed.
13194 However, one more point: it could be that you have an existing
13195 @code{cupsd.conf} that you want to use. In that case, you can pass an
13196 @code{opaque-cups-configuration} as the configuration of a
13197 @code{cups-service-type}.
13198
13199 Available @code{opaque-cups-configuration} fields are:
13200
13201 @deftypevr {@code{opaque-cups-configuration} parameter} package cups
13202 The CUPS package.
13203 @end deftypevr
13204
13205 @deftypevr {@code{opaque-cups-configuration} parameter} string cupsd.conf
13206 The contents of the @code{cupsd.conf}, as a string.
13207 @end deftypevr
13208
13209 @deftypevr {@code{opaque-cups-configuration} parameter} string cups-files.conf
13210 The contents of the @code{cups-files.conf} file, as a string.
13211 @end deftypevr
13212
13213 For example, if your @code{cupsd.conf} and @code{cups-files.conf} are in
13214 strings of the same name, you could instantiate a CUPS service like
13215 this:
13216
13217 @example
13218 (service cups-service-type
13219 (opaque-cups-configuration
13220 (cupsd.conf cupsd.conf)
13221 (cups-files.conf cups-files.conf)))
13222 @end example
13223
13224
13225 @node Desktop Services
13226 @subsubsection Desktop Services
13227
13228 The @code{(gnu services desktop)} module provides services that are
13229 usually useful in the context of a ``desktop'' setup---that is, on a
13230 machine running a graphical display server, possibly with graphical user
13231 interfaces, etc. It also defines services that provide specific desktop
13232 environments like GNOME, XFCE or MATE.
13233
13234 To simplify things, the module defines a variable containing the set of
13235 services that users typically expect on a machine with a graphical
13236 environment and networking:
13237
13238 @defvr {Scheme Variable} %desktop-services
13239 This is a list of services that builds upon @var{%base-services} and
13240 adds or adjusts services for a typical ``desktop'' setup.
13241
13242 In particular, it adds a graphical login manager (@pxref{X Window,
13243 @code{slim-service}}), screen lockers, a network management tool
13244 (@pxref{Networking Services, @code{network-manager-service-type}}), energy and color
13245 management services, the @code{elogind} login and seat manager, the
13246 Polkit privilege service, the GeoClue location service, the
13247 AccountsService daemon that allows authorized users change system
13248 passwords, an NTP client (@pxref{Networking Services}), the Avahi
13249 daemon, and has the name service switch service configured to be able to
13250 use @code{nss-mdns} (@pxref{Name Service Switch, mDNS}).
13251 @end defvr
13252
13253 The @var{%desktop-services} variable can be used as the @code{services}
13254 field of an @code{operating-system} declaration (@pxref{operating-system
13255 Reference, @code{services}}).
13256
13257 Additionally, the @code{gnome-desktop-service},
13258 @code{xfce-desktop-service}, @code{mate-desktop-service} and
13259 @code{enlightenment-desktop-service-type} procedures can add GNOME, XFCE, MATE
13260 and/or Enlightenment to a system. To ``add GNOME'' means that system-level
13261 services like the backlight adjustment helpers and the power management
13262 utilities are added to the system, extending @code{polkit} and @code{dbus}
13263 appropriately, allowing GNOME to operate with elevated privileges on a
13264 limited number of special-purpose system interfaces. Additionally,
13265 adding a service made by @code{gnome-desktop-service} adds the GNOME
13266 metapackage to the system profile. Likewise, adding the XFCE service
13267 not only adds the @code{xfce} metapackage to the system profile, but it
13268 also gives the Thunar file manager the ability to open a ``root-mode''
13269 file management window, if the user authenticates using the
13270 administrator's password via the standard polkit graphical interface.
13271 To ``add MATE'' means that @code{polkit} and @code{dbus} are extended
13272 appropriately, allowing MATE to operate with elevated privileges on a
13273 limited number of special-purpose system interfaces. Additionally,
13274 adding a service made by @code{mate-desktop-service} adds the MATE
13275 metapackage to the system profile. ``Adding ENLIGHTENMENT'' means that
13276 @code{dbus} is extended appropriately, and several of Enlightenment's binaries
13277 are set as setuid, allowing Enlightenment's screen locker and other
13278 functionality to work as expetected.
13279
13280 The desktop environments in Guix use the Xorg display server by
13281 default. If you'd like to use the newer display server protocol
13282 called Wayland, you need to use the @code{sddm-service} instead of the
13283 @code{slim-service} for the graphical login manager. You should then
13284 select the ``GNOME (Wayland)'' session in SDDM. Alternatively you can
13285 also try starting GNOME on Wayland manually from a TTY with the
13286 command ``XDG_SESSION_TYPE=wayland exec dbus-run-session
13287 gnome-session``. Currently only GNOME has support for Wayland.
13288
13289 @deffn {Scheme Procedure} gnome-desktop-service
13290 Return a service that adds the @code{gnome} package to the system
13291 profile, and extends polkit with the actions from
13292 @code{gnome-settings-daemon}.
13293 @end deffn
13294
13295 @deffn {Scheme Procedure} xfce-desktop-service
13296 Return a service that adds the @code{xfce} package to the system profile,
13297 and extends polkit with the ability for @code{thunar} to manipulate the
13298 file system as root from within a user session, after the user has
13299 authenticated with the administrator's password.
13300 @end deffn
13301
13302 @deffn {Scheme Procedure} mate-desktop-service
13303 Return a service that adds the @code{mate} package to the system
13304 profile, and extends polkit with the actions from
13305 @code{mate-settings-daemon}.
13306 @end deffn
13307
13308 @deffn {Scheme Procedure} enlightenment-desktop-service-type
13309 Return a service that adds the @code{enlightenment} package to the system
13310 profile, and extends dbus with actions from @code{efl}.
13311 @end deffn
13312
13313 @deftp {Data Type} enlightenment-desktop-service-configuration
13314 @table @asis
13315 @item @code{enlightenment} (default @code{enlightenment})
13316 The enlightenment package to use.
13317 @end table
13318 @end deftp
13319
13320 Because the GNOME, XFCE and MATE desktop services pull in so many packages,
13321 the default @code{%desktop-services} variable doesn't include any of
13322 them by default. To add GNOME, XFCE or MATE, just @code{cons} them onto
13323 @code{%desktop-services} in the @code{services} field of your
13324 @code{operating-system}:
13325
13326 @example
13327 (use-modules (gnu))
13328 (use-service-modules desktop)
13329 (operating-system
13330 ...
13331 ;; cons* adds items to the list given as its last argument.
13332 (services (cons* (gnome-desktop-service)
13333 (xfce-desktop-service)
13334 %desktop-services))
13335 ...)
13336 @end example
13337
13338 These desktop environments will then be available as options in the
13339 graphical login window.
13340
13341 The actual service definitions included in @code{%desktop-services} and
13342 provided by @code{(gnu services dbus)} and @code{(gnu services desktop)}
13343 are described below.
13344
13345 @deffn {Scheme Procedure} dbus-service [#:dbus @var{dbus}] [#:services '()]
13346 Return a service that runs the ``system bus'', using @var{dbus}, with
13347 support for @var{services}.
13348
13349 @uref{http://dbus.freedesktop.org/, D-Bus} is an inter-process communication
13350 facility. Its system bus is used to allow system services to communicate
13351 and to be notified of system-wide events.
13352
13353 @var{services} must be a list of packages that provide an
13354 @file{etc/dbus-1/system.d} directory containing additional D-Bus configuration
13355 and policy files. For example, to allow avahi-daemon to use the system bus,
13356 @var{services} must be equal to @code{(list avahi)}.
13357 @end deffn
13358
13359 @deffn {Scheme Procedure} elogind-service [#:config @var{config}]
13360 Return a service that runs the @code{elogind} login and
13361 seat management daemon. @uref{https://github.com/elogind/elogind,
13362 Elogind} exposes a D-Bus interface that can be used to know which users
13363 are logged in, know what kind of sessions they have open, suspend the
13364 system, inhibit system suspend, reboot the system, and other tasks.
13365
13366 Elogind handles most system-level power events for a computer, for
13367 example suspending the system when a lid is closed, or shutting it down
13368 when the power button is pressed.
13369
13370 The @var{config} keyword argument specifies the configuration for
13371 elogind, and should be the result of an @code{(elogind-configuration
13372 (@var{parameter} @var{value})...)} invocation. Available parameters and
13373 their default values are:
13374
13375 @table @code
13376 @item kill-user-processes?
13377 @code{#f}
13378 @item kill-only-users
13379 @code{()}
13380 @item kill-exclude-users
13381 @code{("root")}
13382 @item inhibit-delay-max-seconds
13383 @code{5}
13384 @item handle-power-key
13385 @code{poweroff}
13386 @item handle-suspend-key
13387 @code{suspend}
13388 @item handle-hibernate-key
13389 @code{hibernate}
13390 @item handle-lid-switch
13391 @code{suspend}
13392 @item handle-lid-switch-docked
13393 @code{ignore}
13394 @item power-key-ignore-inhibited?
13395 @code{#f}
13396 @item suspend-key-ignore-inhibited?
13397 @code{#f}
13398 @item hibernate-key-ignore-inhibited?
13399 @code{#f}
13400 @item lid-switch-ignore-inhibited?
13401 @code{#t}
13402 @item holdoff-timeout-seconds
13403 @code{30}
13404 @item idle-action
13405 @code{ignore}
13406 @item idle-action-seconds
13407 @code{(* 30 60)}
13408 @item runtime-directory-size-percent
13409 @code{10}
13410 @item runtime-directory-size
13411 @code{#f}
13412 @item remove-ipc?
13413 @code{#t}
13414 @item suspend-state
13415 @code{("mem" "standby" "freeze")}
13416 @item suspend-mode
13417 @code{()}
13418 @item hibernate-state
13419 @code{("disk")}
13420 @item hibernate-mode
13421 @code{("platform" "shutdown")}
13422 @item hybrid-sleep-state
13423 @code{("disk")}
13424 @item hybrid-sleep-mode
13425 @code{("suspend" "platform" "shutdown")}
13426 @end table
13427 @end deffn
13428
13429 @deffn {Scheme Procedure} accountsservice-service @
13430 [#:accountsservice @var{accountsservice}]
13431 Return a service that runs AccountsService, a system service that can
13432 list available accounts, change their passwords, and so on.
13433 AccountsService integrates with PolicyKit to enable unprivileged users
13434 to acquire the capability to modify their system configuration.
13435 @uref{https://www.freedesktop.org/wiki/Software/AccountsService/, the
13436 accountsservice web site} for more information.
13437
13438 The @var{accountsservice} keyword argument is the @code{accountsservice}
13439 package to expose as a service.
13440 @end deffn
13441
13442 @deffn {Scheme Procedure} polkit-service @
13443 [#:polkit @var{polkit}]
13444 Return a service that runs the
13445 @uref{http://www.freedesktop.org/wiki/Software/polkit/, Polkit privilege
13446 management service}, which allows system administrators to grant access to
13447 privileged operations in a structured way. By querying the Polkit service, a
13448 privileged system component can know when it should grant additional
13449 capabilities to ordinary users. For example, an ordinary user can be granted
13450 the capability to suspend the system if the user is logged in locally.
13451 @end deffn
13452
13453 @deffn {Scheme Procedure} upower-service [#:upower @var{upower}] @
13454 [#:watts-up-pro? #f] @
13455 [#:poll-batteries? #t] @
13456 [#:ignore-lid? #f] @
13457 [#:use-percentage-for-policy? #f] @
13458 [#:percentage-low 10] @
13459 [#:percentage-critical 3] @
13460 [#:percentage-action 2] @
13461 [#:time-low 1200] @
13462 [#:time-critical 300] @
13463 [#:time-action 120] @
13464 [#:critical-power-action 'hybrid-sleep]
13465 Return a service that runs @uref{http://upower.freedesktop.org/,
13466 @command{upowerd}}, a system-wide monitor for power consumption and battery
13467 levels, with the given configuration settings. It implements the
13468 @code{org.freedesktop.UPower} D-Bus interface, and is notably used by
13469 GNOME.
13470 @end deffn
13471
13472 @deffn {Scheme Procedure} udisks-service [#:udisks @var{udisks}]
13473 Return a service for @uref{http://udisks.freedesktop.org/docs/latest/,
13474 UDisks}, a @dfn{disk management} daemon that provides user interfaces with
13475 notifications and ways to mount/unmount disks. Programs that talk to UDisks
13476 include the @command{udisksctl} command, part of UDisks, and GNOME Disks.
13477 @end deffn
13478
13479 @deffn {Scheme Procedure} colord-service [#:colord @var{colord}]
13480 Return a service that runs @command{colord}, a system service with a D-Bus
13481 interface to manage the color profiles of input and output devices such as
13482 screens and scanners. It is notably used by the GNOME Color Manager graphical
13483 tool. See @uref{http://www.freedesktop.org/software/colord/, the colord web
13484 site} for more information.
13485 @end deffn
13486
13487 @deffn {Scheme Procedure} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()]
13488 Return a configuration allowing an application to access GeoClue
13489 location data. @var{name} is the Desktop ID of the application, without
13490 the @code{.desktop} part. If @var{allowed?} is true, the application
13491 will have access to location information by default. The boolean
13492 @var{system?} value indicates whether an application is a system component
13493 or not. Finally @var{users} is a list of UIDs of all users for which
13494 this application is allowed location info access. An empty users list
13495 means that all users are allowed.
13496 @end deffn
13497
13498 @defvr {Scheme Variable} %standard-geoclue-applications
13499 The standard list of well-known GeoClue application configurations,
13500 granting authority to the GNOME date-and-time utility to ask for the
13501 current location in order to set the time zone, and allowing the
13502 IceCat and Epiphany web browsers to request location information.
13503 IceCat and Epiphany both query the user before allowing a web page to
13504 know the user's location.
13505 @end defvr
13506
13507 @deffn {Scheme Procedure} geoclue-service [#:colord @var{colord}] @
13508 [#:whitelist '()] @
13509 [#:wifi-geolocation-url "https://location.services.mozilla.com/v1/geolocate?key=geoclue"] @
13510 [#:submit-data? #f]
13511 [#:wifi-submission-url "https://location.services.mozilla.com/v1/submit?key=geoclue"] @
13512 [#:submission-nick "geoclue"] @
13513 [#:applications %standard-geoclue-applications]
13514 Return a service that runs the GeoClue location service. This service
13515 provides a D-Bus interface to allow applications to request access to a
13516 user's physical location, and optionally to add information to online
13517 location databases. See
13518 @uref{https://wiki.freedesktop.org/www/Software/GeoClue/, the GeoClue
13519 web site} for more information.
13520 @end deffn
13521
13522 @deffn {Scheme Procedure} bluetooth-service [#:bluez @var{bluez}] @
13523 [@w{#:auto-enable? #f}]
13524 Return a service that runs the @command{bluetoothd} daemon, which
13525 manages all the Bluetooth devices and provides a number of D-Bus
13526 interfaces. When AUTO-ENABLE? is true, the bluetooth controller is
13527 powered automatically at boot, which can be useful when using a
13528 bluetooth keyboard or mouse.
13529
13530 Users need to be in the @code{lp} group to access the D-Bus service.
13531 @end deffn
13532
13533 @node Sound Services
13534 @subsubsection Sound Services
13535
13536 @cindex sound support
13537 @cindex ALSA
13538 @cindex PulseAudio, sound support
13539
13540 The @code{(gnu services sound)} module provides a service to configure the
13541 Advanced Linux Sound Architecture (ALSA) system, which making PulseAudio the
13542 preferred ALSA output driver.
13543
13544 @deffn {Scheme Variable} alsa-service-type
13545 This is the type for the @uref{https://alsa-project.org/, Advanced Linux Sound
13546 Architecture} (ALSA) system, which generates the @file{/etc/asound.conf}
13547 configuration file. The value for this type is a @command{alsa-configuration}
13548 record as in this example:
13549
13550 @example
13551 (service alsa-service-type)
13552 @end example
13553
13554 See below for details about @code{alsa-configuration}.
13555 @end deffn
13556
13557 @deftp {Data Type} alsa-configuration
13558 Data type representing the configuration for @code{alsa-service}.
13559
13560 @table @asis
13561 @item @code{alsa-plugins} (default: @var{alsa-plugins})
13562 @code{alsa-plugins} package to use.
13563
13564 @item @code{pulseaudio?} (default: @var{#t})
13565 Whether ALSA applications should transparently be made to use the
13566 @uref{http://www.pulseaudio.org/, PulseAudio} sound server.
13567
13568 Using PulseAudio allows you to run several sound-producing applications
13569 at the same time and to individual control them @i{via}
13570 @command{pavucontrol}, among other things.
13571
13572 @item @code{extra-options} (default: @var{""})
13573 String to append to the @file{/etc/asound.conf} file.
13574
13575 @end table
13576 @end deftp
13577
13578 Individual users who want to override the system configuration of ALSA can do
13579 it with the @file{~/.asoundrc} file:
13580
13581 @example
13582 # In guix, we have to specify the absolute path for plugins.
13583 pcm_type.jack @{
13584 lib "/home/alice/.guix-profile/lib/alsa-lib/libasound_module_pcm_jack.so"
13585 @}
13586
13587 # Routing ALSA to jack:
13588 # <http://jackaudio.org/faq/routing_alsa.html>.
13589 pcm.rawjack @{
13590 type jack
13591 playback_ports @{
13592 0 system:playback_1
13593 1 system:playback_2
13594 @}
13595
13596 capture_ports @{
13597 0 system:capture_1
13598 1 system:capture_2
13599 @}
13600 @}
13601
13602 pcm.!default @{
13603 type plug
13604 slave @{
13605 pcm "rawjack"
13606 @}
13607 @}
13608 @end example
13609
13610 See @uref{https://www.alsa-project.org/main/index.php/Asoundrc} for the
13611 details.
13612
13613
13614 @node Database Services
13615 @subsubsection Database Services
13616
13617 @cindex database
13618 @cindex SQL
13619 The @code{(gnu services databases)} module provides the following services.
13620
13621 @deffn {Scheme Procedure} postgresql-service [#:postgresql postgresql] @
13622 [#:config-file] [#:data-directory ``/var/lib/postgresql/data''] @
13623 [#:port 5432] [#:locale ``en_US.utf8'']
13624 Return a service that runs @var{postgresql}, the PostgreSQL database
13625 server.
13626
13627 The PostgreSQL daemon loads its runtime configuration from @var{config-file},
13628 creates a database cluster with @var{locale} as the default
13629 locale, stored in @var{data-directory}. It then listens on @var{port}.
13630 @end deffn
13631
13632 @deffn {Scheme Procedure} mysql-service [#:config (mysql-configuration)]
13633 Return a service that runs @command{mysqld}, the MySQL or MariaDB
13634 database server.
13635
13636 The optional @var{config} argument specifies the configuration for
13637 @command{mysqld}, which should be a @code{<mysql-configuration>} object.
13638 @end deffn
13639
13640 @deftp {Data Type} mysql-configuration
13641 Data type representing the configuration of @var{mysql-service}.
13642
13643 @table @asis
13644 @item @code{mysql} (default: @var{mariadb})
13645 Package object of the MySQL database server, can be either @var{mariadb}
13646 or @var{mysql}.
13647
13648 For MySQL, a temporary root password will be displayed at activation time.
13649 For MariaDB, the root password is empty.
13650
13651 @item @code{port} (default: @code{3306})
13652 TCP port on which the database server listens for incoming connections.
13653 @end table
13654 @end deftp
13655
13656 @defvr {Scheme Variable} memcached-service-type
13657 This is the service type for the @uref{https://memcached.org/,
13658 Memcached} service, which provides a distributed in memory cache. The
13659 value for the service type is a @code{memcached-configuration} object.
13660 @end defvr
13661
13662 @example
13663 (service memcached-service-type)
13664 @end example
13665
13666 @deftp {Data Type} memcached-configuration
13667 Data type representing the configuration of memcached.
13668
13669 @table @asis
13670 @item @code{memcached} (default: @code{memcached})
13671 The Memcached package to use.
13672
13673 @item @code{interfaces} (default: @code{'("0.0.0.0")})
13674 Network interfaces on which to listen.
13675
13676 @item @code{tcp-port} (default: @code{11211})
13677 Port on which to accept connections on,
13678
13679 @item @code{udp-port} (default: @code{11211})
13680 Port on which to accept UDP connections on, a value of 0 will disable
13681 listening on a UDP socket.
13682
13683 @item @code{additional-options} (default: @code{'()})
13684 Additional command line options to pass to @code{memcached}.
13685 @end table
13686 @end deftp
13687
13688 @defvr {Scheme Variable} mongodb-service-type
13689 This is the service type for @uref{https://www.mongodb.com/, MongoDB}.
13690 The value for the service type is a @code{mongodb-configuration} object.
13691 @end defvr
13692
13693 @example
13694 (service mongodb-service-type)
13695 @end example
13696
13697 @deftp {Data Type} mongodb-configuration
13698 Data type representing the configuration of mongodb.
13699
13700 @table @asis
13701 @item @code{mongodb} (default: @code{mongodb})
13702 The MongoDB package to use.
13703
13704 @item @code{config-file} (default: @code{%default-mongodb-configuration-file})
13705 The configuration file for MongoDB.
13706
13707 @item @code{data-directory} (default: @code{"/var/lib/mongodb"})
13708 This value is used to create the directory, so that it exists and is
13709 owned by the mongodb user. It should match the data-directory which
13710 MongoDB is configured to use through the configuration file.
13711 @end table
13712 @end deftp
13713
13714 @defvr {Scheme Variable} redis-service-type
13715 This is the service type for the @uref{https://redis.io/, Redis}
13716 key/value store, whose value is a @code{redis-configuration} object.
13717 @end defvr
13718
13719 @deftp {Data Type} redis-configuration
13720 Data type representing the configuration of redis.
13721
13722 @table @asis
13723 @item @code{redis} (default: @code{redis})
13724 The Redis package to use.
13725
13726 @item @code{bind} (default: @code{"127.0.0.1"})
13727 Network interface on which to listen.
13728
13729 @item @code{port} (default: @code{6379})
13730 Port on which to accept connections on, a value of 0 will disable
13731 listening on a TCP socket.
13732
13733 @item @code{working-directory} (default: @code{"/var/lib/redis"})
13734 Directory in which to store the database and related files.
13735 @end table
13736 @end deftp
13737
13738 @node Mail Services
13739 @subsubsection Mail Services
13740
13741 @cindex mail
13742 @cindex email
13743 The @code{(gnu services mail)} module provides Guix service definitions
13744 for email services: IMAP, POP3, and LMTP servers, as well as mail
13745 transport agents (MTAs). Lots of acronyms! These services are detailed
13746 in the subsections below.
13747
13748 @subsubheading Dovecot Service
13749
13750 @deffn {Scheme Procedure} dovecot-service [#:config (dovecot-configuration)]
13751 Return a service that runs the Dovecot IMAP/POP3/LMTP mail server.
13752 @end deffn
13753
13754 By default, Dovecot does not need much configuration; the default
13755 configuration object created by @code{(dovecot-configuration)} will
13756 suffice if your mail is delivered to @code{~/Maildir}. A self-signed
13757 certificate will be generated for TLS-protected connections, though
13758 Dovecot will also listen on cleartext ports by default. There are a
13759 number of options, though, which mail administrators might need to change,
13760 and as is the case with other services, Guix allows the system
13761 administrator to specify these parameters via a uniform Scheme interface.
13762
13763 For example, to specify that mail is located at @code{maildir~/.mail},
13764 one would instantiate the Dovecot service like this:
13765
13766 @example
13767 (dovecot-service #:config
13768 (dovecot-configuration
13769 (mail-location "maildir:~/.mail")))
13770 @end example
13771
13772 The available configuration parameters follow. Each parameter
13773 definition is preceded by its type; for example, @samp{string-list foo}
13774 indicates that the @code{foo} parameter should be specified as a list of
13775 strings. There is also a way to specify the configuration as a string,
13776 if you have an old @code{dovecot.conf} file that you want to port over
13777 from some other system; see the end for more details.
13778
13779 @c The following documentation was initially generated by
13780 @c (generate-documentation) in (gnu services mail). Manually maintained
13781 @c documentation is better, so we shouldn't hesitate to edit below as
13782 @c needed. However if the change you want to make to this documentation
13783 @c can be done in an automated way, it's probably easier to change
13784 @c (generate-documentation) than to make it below and have to deal with
13785 @c the churn as dovecot updates.
13786
13787 Available @code{dovecot-configuration} fields are:
13788
13789 @deftypevr {@code{dovecot-configuration} parameter} package dovecot
13790 The dovecot package.
13791 @end deftypevr
13792
13793 @deftypevr {@code{dovecot-configuration} parameter} comma-separated-string-list listen
13794 A list of IPs or hosts where to listen for connections. @samp{*}
13795 listens on all IPv4 interfaces, @samp{::} listens on all IPv6
13796 interfaces. If you want to specify non-default ports or anything more
13797 complex, customize the address and port fields of the
13798 @samp{inet-listener} of the specific services you are interested in.
13799 @end deftypevr
13800
13801 @deftypevr {@code{dovecot-configuration} parameter} protocol-configuration-list protocols
13802 List of protocols we want to serve. Available protocols include
13803 @samp{imap}, @samp{pop3}, and @samp{lmtp}.
13804
13805 Available @code{protocol-configuration} fields are:
13806
13807 @deftypevr {@code{protocol-configuration} parameter} string name
13808 The name of the protocol.
13809 @end deftypevr
13810
13811 @deftypevr {@code{protocol-configuration} parameter} string auth-socket-path
13812 UNIX socket path to the master authentication server to find users.
13813 This is used by imap (for shared users) and lda.
13814 It defaults to @samp{"/var/run/dovecot/auth-userdb"}.
13815 @end deftypevr
13816
13817 @deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins
13818 Space separated list of plugins to load.
13819 @end deftypevr
13820
13821 @deftypevr {@code{protocol-configuration} parameter} non-negative-integer mail-max-userip-connections
13822 Maximum number of IMAP connections allowed for a user from each IP
13823 address. NOTE: The username is compared case-sensitively.
13824 Defaults to @samp{10}.
13825 @end deftypevr
13826
13827 @end deftypevr
13828
13829 @deftypevr {@code{dovecot-configuration} parameter} service-configuration-list services
13830 List of services to enable. Available services include @samp{imap},
13831 @samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}, and
13832 @samp{lmtp}.
13833
13834 Available @code{service-configuration} fields are:
13835
13836 @deftypevr {@code{service-configuration} parameter} string kind
13837 The service kind. Valid values include @code{director},
13838 @code{imap-login}, @code{pop3-login}, @code{lmtp}, @code{imap},
13839 @code{pop3}, @code{auth}, @code{auth-worker}, @code{dict},
13840 @code{tcpwrap}, @code{quota-warning}, or anything else.
13841 @end deftypevr
13842
13843 @deftypevr {@code{service-configuration} parameter} listener-configuration-list listeners
13844 Listeners for the service. A listener is either a
13845 @code{unix-listener-configuration}, a @code{fifo-listener-configuration}, or
13846 an @code{inet-listener-configuration}.
13847 Defaults to @samp{()}.
13848
13849 Available @code{unix-listener-configuration} fields are:
13850
13851 @deftypevr {@code{unix-listener-configuration} parameter} string path
13852 Path to the file, relative to @code{base-dir} field. This is also used as
13853 the section name.
13854 @end deftypevr
13855
13856 @deftypevr {@code{unix-listener-configuration} parameter} string mode
13857 The access mode for the socket.
13858 Defaults to @samp{"0600"}.
13859 @end deftypevr
13860
13861 @deftypevr {@code{unix-listener-configuration} parameter} string user
13862 The user to own the socket.
13863 Defaults to @samp{""}.
13864 @end deftypevr
13865
13866 @deftypevr {@code{unix-listener-configuration} parameter} string group
13867 The group to own the socket.
13868 Defaults to @samp{""}.
13869 @end deftypevr
13870
13871
13872 Available @code{fifo-listener-configuration} fields are:
13873
13874 @deftypevr {@code{fifo-listener-configuration} parameter} string path
13875 Path to the file, relative to @code{base-dir} field. This is also used as
13876 the section name.
13877 @end deftypevr
13878
13879 @deftypevr {@code{fifo-listener-configuration} parameter} string mode
13880 The access mode for the socket.
13881 Defaults to @samp{"0600"}.
13882 @end deftypevr
13883
13884 @deftypevr {@code{fifo-listener-configuration} parameter} string user
13885 The user to own the socket.
13886 Defaults to @samp{""}.
13887 @end deftypevr
13888
13889 @deftypevr {@code{fifo-listener-configuration} parameter} string group
13890 The group to own the socket.
13891 Defaults to @samp{""}.
13892 @end deftypevr
13893
13894
13895 Available @code{inet-listener-configuration} fields are:
13896
13897 @deftypevr {@code{inet-listener-configuration} parameter} string protocol
13898 The protocol to listen for.
13899 @end deftypevr
13900
13901 @deftypevr {@code{inet-listener-configuration} parameter} string address
13902 The address on which to listen, or empty for all addresses.
13903 Defaults to @samp{""}.
13904 @end deftypevr
13905
13906 @deftypevr {@code{inet-listener-configuration} parameter} non-negative-integer port
13907 The port on which to listen.
13908 @end deftypevr
13909
13910 @deftypevr {@code{inet-listener-configuration} parameter} boolean ssl?
13911 Whether to use SSL for this service; @samp{yes}, @samp{no}, or
13912 @samp{required}.
13913 Defaults to @samp{#t}.
13914 @end deftypevr
13915
13916 @end deftypevr
13917
13918 @deftypevr {@code{service-configuration} parameter} non-negative-integer service-count
13919 Number of connections to handle before starting a new process.
13920 Typically the only useful values are 0 (unlimited) or 1. 1 is more
13921 secure, but 0 is faster. <doc/wiki/LoginProcess.txt>.
13922 Defaults to @samp{1}.
13923 @end deftypevr
13924
13925 @deftypevr {@code{service-configuration} parameter} non-negative-integer process-min-avail
13926 Number of processes to always keep waiting for more connections.
13927 Defaults to @samp{0}.
13928 @end deftypevr
13929
13930 @deftypevr {@code{service-configuration} parameter} non-negative-integer vsz-limit
13931 If you set @samp{service-count 0}, you probably need to grow
13932 this.
13933 Defaults to @samp{256000000}.
13934 @end deftypevr
13935
13936 @end deftypevr
13937
13938 @deftypevr {@code{dovecot-configuration} parameter} dict-configuration dict
13939 Dict configuration, as created by the @code{dict-configuration}
13940 constructor.
13941
13942 Available @code{dict-configuration} fields are:
13943
13944 @deftypevr {@code{dict-configuration} parameter} free-form-fields entries
13945 A list of key-value pairs that this dict should hold.
13946 Defaults to @samp{()}.
13947 @end deftypevr
13948
13949 @end deftypevr
13950
13951 @deftypevr {@code{dovecot-configuration} parameter} passdb-configuration-list passdbs
13952 A list of passdb configurations, each one created by the
13953 @code{passdb-configuration} constructor.
13954
13955 Available @code{passdb-configuration} fields are:
13956
13957 @deftypevr {@code{passdb-configuration} parameter} string driver
13958 The driver that the passdb should use. Valid values include
13959 @samp{pam}, @samp{passwd}, @samp{shadow}, @samp{bsdauth}, and
13960 @samp{static}.
13961 Defaults to @samp{"pam"}.
13962 @end deftypevr
13963
13964 @deftypevr {@code{passdb-configuration} parameter} space-separated-string-list args
13965 Space separated list of arguments to the passdb driver.
13966 Defaults to @samp{""}.
13967 @end deftypevr
13968
13969 @end deftypevr
13970
13971 @deftypevr {@code{dovecot-configuration} parameter} userdb-configuration-list userdbs
13972 List of userdb configurations, each one created by the
13973 @code{userdb-configuration} constructor.
13974
13975 Available @code{userdb-configuration} fields are:
13976
13977 @deftypevr {@code{userdb-configuration} parameter} string driver
13978 The driver that the userdb should use. Valid values include
13979 @samp{passwd} and @samp{static}.
13980 Defaults to @samp{"passwd"}.
13981 @end deftypevr
13982
13983 @deftypevr {@code{userdb-configuration} parameter} space-separated-string-list args
13984 Space separated list of arguments to the userdb driver.
13985 Defaults to @samp{""}.
13986 @end deftypevr
13987
13988 @deftypevr {@code{userdb-configuration} parameter} free-form-args override-fields
13989 Override fields from passwd.
13990 Defaults to @samp{()}.
13991 @end deftypevr
13992
13993 @end deftypevr
13994
13995 @deftypevr {@code{dovecot-configuration} parameter} plugin-configuration plugin-configuration
13996 Plug-in configuration, created by the @code{plugin-configuration}
13997 constructor.
13998 @end deftypevr
13999
14000 @deftypevr {@code{dovecot-configuration} parameter} list-of-namespace-configuration namespaces
14001 List of namespaces. Each item in the list is created by the
14002 @code{namespace-configuration} constructor.
14003
14004 Available @code{namespace-configuration} fields are:
14005
14006 @deftypevr {@code{namespace-configuration} parameter} string name
14007 Name for this namespace.
14008 @end deftypevr
14009
14010 @deftypevr {@code{namespace-configuration} parameter} string type
14011 Namespace type: @samp{private}, @samp{shared} or @samp{public}.
14012 Defaults to @samp{"private"}.
14013 @end deftypevr
14014
14015 @deftypevr {@code{namespace-configuration} parameter} string separator
14016 Hierarchy separator to use. You should use the same separator for
14017 all namespaces or some clients get confused. @samp{/} is usually a good
14018 one. The default however depends on the underlying mail storage
14019 format.
14020 Defaults to @samp{""}.
14021 @end deftypevr
14022
14023 @deftypevr {@code{namespace-configuration} parameter} string prefix
14024 Prefix required to access this namespace. This needs to be
14025 different for all namespaces. For example @samp{Public/}.
14026 Defaults to @samp{""}.
14027 @end deftypevr
14028
14029 @deftypevr {@code{namespace-configuration} parameter} string location
14030 Physical location of the mailbox. This is in the same format as
14031 mail_location, which is also the default for it.
14032 Defaults to @samp{""}.
14033 @end deftypevr
14034
14035 @deftypevr {@code{namespace-configuration} parameter} boolean inbox?
14036 There can be only one INBOX, and this setting defines which
14037 namespace has it.
14038 Defaults to @samp{#f}.
14039 @end deftypevr
14040
14041 @deftypevr {@code{namespace-configuration} parameter} boolean hidden?
14042 If namespace is hidden, it's not advertised to clients via NAMESPACE
14043 extension. You'll most likely also want to set @samp{list? #f}. This is mostly
14044 useful when converting from another server with different namespaces
14045 which you want to deprecate but still keep working. For example you can
14046 create hidden namespaces with prefixes @samp{~/mail/}, @samp{~%u/mail/}
14047 and @samp{mail/}.
14048 Defaults to @samp{#f}.
14049 @end deftypevr
14050
14051 @deftypevr {@code{namespace-configuration} parameter} boolean list?
14052 Show the mailboxes under this namespace with the LIST command. This
14053 makes the namespace visible for clients that do not support the NAMESPACE
14054 extension. The special @code{children} value lists child mailboxes, but
14055 hides the namespace prefix.
14056 Defaults to @samp{#t}.
14057 @end deftypevr
14058
14059 @deftypevr {@code{namespace-configuration} parameter} boolean subscriptions?
14060 Namespace handles its own subscriptions. If set to @code{#f}, the
14061 parent namespace handles them. The empty prefix should always have this
14062 as @code{#t}).
14063 Defaults to @samp{#t}.
14064 @end deftypevr
14065
14066 @deftypevr {@code{namespace-configuration} parameter} mailbox-configuration-list mailboxes
14067 List of predefined mailboxes in this namespace.
14068 Defaults to @samp{()}.
14069
14070 Available @code{mailbox-configuration} fields are:
14071
14072 @deftypevr {@code{mailbox-configuration} parameter} string name
14073 Name for this mailbox.
14074 @end deftypevr
14075
14076 @deftypevr {@code{mailbox-configuration} parameter} string auto
14077 @samp{create} will automatically create this mailbox.
14078 @samp{subscribe} will both create and subscribe to the mailbox.
14079 Defaults to @samp{"no"}.
14080 @end deftypevr
14081
14082 @deftypevr {@code{mailbox-configuration} parameter} space-separated-string-list special-use
14083 List of IMAP @code{SPECIAL-USE} attributes as specified by RFC 6154.
14084 Valid values are @code{\All}, @code{\Archive}, @code{\Drafts},
14085 @code{\Flagged}, @code{\Junk}, @code{\Sent}, and @code{\Trash}.
14086 Defaults to @samp{()}.
14087 @end deftypevr
14088
14089 @end deftypevr
14090
14091 @end deftypevr
14092
14093 @deftypevr {@code{dovecot-configuration} parameter} file-name base-dir
14094 Base directory where to store runtime data.
14095 Defaults to @samp{"/var/run/dovecot/"}.
14096 @end deftypevr
14097
14098 @deftypevr {@code{dovecot-configuration} parameter} string login-greeting
14099 Greeting message for clients.
14100 Defaults to @samp{"Dovecot ready."}.
14101 @end deftypevr
14102
14103 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-trusted-networks
14104 List of trusted network ranges. Connections from these IPs are
14105 allowed to override their IP addresses and ports (for logging and for
14106 authentication checks). @samp{disable-plaintext-auth} is also ignored
14107 for these networks. Typically you would specify your IMAP proxy servers
14108 here.
14109 Defaults to @samp{()}.
14110 @end deftypevr
14111
14112 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-access-sockets
14113 List of login access check sockets (e.g. tcpwrap).
14114 Defaults to @samp{()}.
14115 @end deftypevr
14116
14117 @deftypevr {@code{dovecot-configuration} parameter} boolean verbose-proctitle?
14118 Show more verbose process titles (in ps). Currently shows user name
14119 and IP address. Useful for seeing who is actually using the IMAP
14120 processes (e.g. shared mailboxes or if the same uid is used for multiple
14121 accounts).
14122 Defaults to @samp{#f}.
14123 @end deftypevr
14124
14125 @deftypevr {@code{dovecot-configuration} parameter} boolean shutdown-clients?
14126 Should all processes be killed when Dovecot master process shuts down.
14127 Setting this to @code{#f} means that Dovecot can be upgraded without
14128 forcing existing client connections to close (although that could also
14129 be a problem if the upgrade is e.g. due to a security fix).
14130 Defaults to @samp{#t}.
14131 @end deftypevr
14132
14133 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer doveadm-worker-count
14134 If non-zero, run mail commands via this many connections to doveadm
14135 server, instead of running them directly in the same process.
14136 Defaults to @samp{0}.
14137 @end deftypevr
14138
14139 @deftypevr {@code{dovecot-configuration} parameter} string doveadm-socket-path
14140 UNIX socket or host:port used for connecting to doveadm server.
14141 Defaults to @samp{"doveadm-server"}.
14142 @end deftypevr
14143
14144 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list import-environment
14145 List of environment variables that are preserved on Dovecot startup
14146 and passed down to all of its child processes. You can also give
14147 key=value pairs to always set specific settings.
14148 @end deftypevr
14149
14150 @deftypevr {@code{dovecot-configuration} parameter} boolean disable-plaintext-auth?
14151 Disable LOGIN command and all other plaintext authentications unless
14152 SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
14153 matches the local IP (i.e. you're connecting from the same computer),
14154 the connection is considered secure and plaintext authentication is
14155 allowed. See also ssl=required setting.
14156 Defaults to @samp{#t}.
14157 @end deftypevr
14158
14159 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-cache-size
14160 Authentication cache size (e.g. @samp{#e10e6}). 0 means it's disabled.
14161 Note that bsdauth, PAM and vpopmail require @samp{cache-key} to be set
14162 for caching to be used.
14163 Defaults to @samp{0}.
14164 @end deftypevr
14165
14166 @deftypevr {@code{dovecot-configuration} parameter} string auth-cache-ttl
14167 Time to live for cached data. After TTL expires the cached record
14168 is no longer used, *except* if the main database lookup returns internal
14169 failure. We also try to handle password changes automatically: If
14170 user's previous authentication was successful, but this one wasn't, the
14171 cache isn't used. For now this works only with plaintext
14172 authentication.
14173 Defaults to @samp{"1 hour"}.
14174 @end deftypevr
14175
14176 @deftypevr {@code{dovecot-configuration} parameter} string auth-cache-negative-ttl
14177 TTL for negative hits (user not found, password mismatch).
14178 0 disables caching them completely.
14179 Defaults to @samp{"1 hour"}.
14180 @end deftypevr
14181
14182 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-realms
14183 List of realms for SASL authentication mechanisms that need them.
14184 You can leave it empty if you don't want to support multiple realms.
14185 Many clients simply use the first one listed here, so keep the default
14186 realm first.
14187 Defaults to @samp{()}.
14188 @end deftypevr
14189
14190 @deftypevr {@code{dovecot-configuration} parameter} string auth-default-realm
14191 Default realm/domain to use if none was specified. This is used for
14192 both SASL realms and appending @@domain to username in plaintext
14193 logins.
14194 Defaults to @samp{""}.
14195 @end deftypevr
14196
14197 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-chars
14198 List of allowed characters in username. If the user-given username
14199 contains a character not listed in here, the login automatically fails.
14200 This is just an extra check to make sure user can't exploit any
14201 potential quote escaping vulnerabilities with SQL/LDAP databases. If
14202 you want to allow all characters, set this value to empty.
14203 Defaults to @samp{"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@@"}.
14204 @end deftypevr
14205
14206 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-translation
14207 Username character translations before it's looked up from
14208 databases. The value contains series of from -> to characters. For
14209 example @samp{#@@/@@} means that @samp{#} and @samp{/} characters are
14210 translated to @samp{@@}.
14211 Defaults to @samp{""}.
14212 @end deftypevr
14213
14214 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-format
14215 Username formatting before it's looked up from databases. You can
14216 use the standard variables here, e.g. %Lu would lowercase the username,
14217 %n would drop away the domain if it was given, or @samp{%n-AT-%d} would
14218 change the @samp{@@} into @samp{-AT-}. This translation is done after
14219 @samp{auth-username-translation} changes.
14220 Defaults to @samp{"%Lu"}.
14221 @end deftypevr
14222
14223 @deftypevr {@code{dovecot-configuration} parameter} string auth-master-user-separator
14224 If you want to allow master users to log in by specifying the master
14225 username within the normal username string (i.e. not using SASL
14226 mechanism's support for it), you can specify the separator character
14227 here. The format is then <username><separator><master username>.
14228 UW-IMAP uses @samp{*} as the separator, so that could be a good
14229 choice.
14230 Defaults to @samp{""}.
14231 @end deftypevr
14232
14233 @deftypevr {@code{dovecot-configuration} parameter} string auth-anonymous-username
14234 Username to use for users logging in with ANONYMOUS SASL
14235 mechanism.
14236 Defaults to @samp{"anonymous"}.
14237 @end deftypevr
14238
14239 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-worker-max-count
14240 Maximum number of dovecot-auth worker processes. They're used to
14241 execute blocking passdb and userdb queries (e.g. MySQL and PAM).
14242 They're automatically created and destroyed as needed.
14243 Defaults to @samp{30}.
14244 @end deftypevr
14245
14246 @deftypevr {@code{dovecot-configuration} parameter} string auth-gssapi-hostname
14247 Host name to use in GSSAPI principal names. The default is to use
14248 the name returned by gethostname(). Use @samp{$ALL} (with quotes) to
14249 allow all keytab entries.
14250 Defaults to @samp{""}.
14251 @end deftypevr
14252
14253 @deftypevr {@code{dovecot-configuration} parameter} string auth-krb5-keytab
14254 Kerberos keytab to use for the GSSAPI mechanism. Will use the
14255 system default (usually @file{/etc/krb5.keytab}) if not specified. You may
14256 need to change the auth service to run as root to be able to read this
14257 file.
14258 Defaults to @samp{""}.
14259 @end deftypevr
14260
14261 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-use-winbind?
14262 Do NTLM and GSS-SPNEGO authentication using Samba's winbind daemon
14263 and @samp{ntlm-auth} helper.
14264 <doc/wiki/Authentication/Mechanisms/Winbind.txt>.
14265 Defaults to @samp{#f}.
14266 @end deftypevr
14267
14268 @deftypevr {@code{dovecot-configuration} parameter} file-name auth-winbind-helper-path
14269 Path for Samba's @samp{ntlm-auth} helper binary.
14270 Defaults to @samp{"/usr/bin/ntlm_auth"}.
14271 @end deftypevr
14272
14273 @deftypevr {@code{dovecot-configuration} parameter} string auth-failure-delay
14274 Time to delay before replying to failed authentications.
14275 Defaults to @samp{"2 secs"}.
14276 @end deftypevr
14277
14278 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-require-client-cert?
14279 Require a valid SSL client certificate or the authentication
14280 fails.
14281 Defaults to @samp{#f}.
14282 @end deftypevr
14283
14284 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-username-from-cert?
14285 Take the username from client's SSL certificate, using
14286 @code{X509_NAME_get_text_by_NID()} which returns the subject's DN's
14287 CommonName.
14288 Defaults to @samp{#f}.
14289 @end deftypevr
14290
14291 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-mechanisms
14292 List of wanted authentication mechanisms. Supported mechanisms are:
14293 @samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
14294 @samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
14295 @samp{otp}, @samp{skey}, and @samp{gss-spnego}. NOTE: See also
14296 @samp{disable-plaintext-auth} setting.
14297 @end deftypevr
14298
14299 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-servers
14300 List of IPs or hostnames to all director servers, including ourself.
14301 Ports can be specified as ip:port. The default port is the same as what
14302 director service's @samp{inet-listener} is using.
14303 Defaults to @samp{()}.
14304 @end deftypevr
14305
14306 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-mail-servers
14307 List of IPs or hostnames to all backend mail servers. Ranges are
14308 allowed too, like 10.0.0.10-10.0.0.30.
14309 Defaults to @samp{()}.
14310 @end deftypevr
14311
14312 @deftypevr {@code{dovecot-configuration} parameter} string director-user-expire
14313 How long to redirect users to a specific server after it no longer
14314 has any connections.
14315 Defaults to @samp{"15 min"}.
14316 @end deftypevr
14317
14318 @deftypevr {@code{dovecot-configuration} parameter} string director-username-hash
14319 How the username is translated before being hashed. Useful values
14320 include %Ln if user can log in with or without @@domain, %Ld if mailboxes
14321 are shared within domain.
14322 Defaults to @samp{"%Lu"}.
14323 @end deftypevr
14324
14325 @deftypevr {@code{dovecot-configuration} parameter} string log-path
14326 Log file to use for error messages. @samp{syslog} logs to syslog,
14327 @samp{/dev/stderr} logs to stderr.
14328 Defaults to @samp{"syslog"}.
14329 @end deftypevr
14330
14331 @deftypevr {@code{dovecot-configuration} parameter} string info-log-path
14332 Log file to use for informational messages. Defaults to
14333 @samp{log-path}.
14334 Defaults to @samp{""}.
14335 @end deftypevr
14336
14337 @deftypevr {@code{dovecot-configuration} parameter} string debug-log-path
14338 Log file to use for debug messages. Defaults to
14339 @samp{info-log-path}.
14340 Defaults to @samp{""}.
14341 @end deftypevr
14342
14343 @deftypevr {@code{dovecot-configuration} parameter} string syslog-facility
14344 Syslog facility to use if you're logging to syslog. Usually if you
14345 don't want to use @samp{mail}, you'll use local0..local7. Also other
14346 standard facilities are supported.
14347 Defaults to @samp{"mail"}.
14348 @end deftypevr
14349
14350 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose?
14351 Log unsuccessful authentication attempts and the reasons why they
14352 failed.
14353 Defaults to @samp{#f}.
14354 @end deftypevr
14355
14356 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose-passwords?
14357 In case of password mismatches, log the attempted password. Valid
14358 values are no, plain and sha1. sha1 can be useful for detecting brute
14359 force password attempts vs. user simply trying the same password over
14360 and over again. You can also truncate the value to n chars by appending
14361 ":n" (e.g. sha1:6).
14362 Defaults to @samp{#f}.
14363 @end deftypevr
14364
14365 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug?
14366 Even more verbose logging for debugging purposes. Shows for example
14367 SQL queries.
14368 Defaults to @samp{#f}.
14369 @end deftypevr
14370
14371 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug-passwords?
14372 In case of password mismatches, log the passwords and used scheme so
14373 the problem can be debugged. Enabling this also enables
14374 @samp{auth-debug}.
14375 Defaults to @samp{#f}.
14376 @end deftypevr
14377
14378 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-debug?
14379 Enable mail process debugging. This can help you figure out why
14380 Dovecot isn't finding your mails.
14381 Defaults to @samp{#f}.
14382 @end deftypevr
14383
14384 @deftypevr {@code{dovecot-configuration} parameter} boolean verbose-ssl?
14385 Show protocol level SSL errors.
14386 Defaults to @samp{#f}.
14387 @end deftypevr
14388
14389 @deftypevr {@code{dovecot-configuration} parameter} string log-timestamp
14390 Prefix for each line written to log file. % codes are in
14391 strftime(3) format.
14392 Defaults to @samp{"\"%b %d %H:%M:%S \""}.
14393 @end deftypevr
14394
14395 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-log-format-elements
14396 List of elements we want to log. The elements which have a
14397 non-empty variable value are joined together to form a comma-separated
14398 string.
14399 @end deftypevr
14400
14401 @deftypevr {@code{dovecot-configuration} parameter} string login-log-format
14402 Login log format. %s contains @samp{login-log-format-elements}
14403 string, %$ contains the data we want to log.
14404 Defaults to @samp{"%$: %s"}.
14405 @end deftypevr
14406
14407 @deftypevr {@code{dovecot-configuration} parameter} string mail-log-prefix
14408 Log prefix for mail processes. See doc/wiki/Variables.txt for list
14409 of possible variables you can use.
14410 Defaults to @samp{"\"%s(%u)<%@{pid@}><%@{session@}>: \""}.
14411 @end deftypevr
14412
14413 @deftypevr {@code{dovecot-configuration} parameter} string deliver-log-format
14414 Format to use for logging mail deliveries. You can use variables:
14415 @table @code
14416 @item %$
14417 Delivery status message (e.g. @samp{saved to INBOX})
14418 @item %m
14419 Message-ID
14420 @item %s
14421 Subject
14422 @item %f
14423 From address
14424 @item %p
14425 Physical size
14426 @item %w
14427 Virtual size.
14428 @end table
14429 Defaults to @samp{"msgid=%m: %$"}.
14430 @end deftypevr
14431
14432 @deftypevr {@code{dovecot-configuration} parameter} string mail-location
14433 Location for users' mailboxes. The default is empty, which means
14434 that Dovecot tries to find the mailboxes automatically. This won't work
14435 if the user doesn't yet have any mail, so you should explicitly tell
14436 Dovecot the full location.
14437
14438 If you're using mbox, giving a path to the INBOX
14439 file (e.g. /var/mail/%u) isn't enough. You'll also need to tell Dovecot
14440 where the other mailboxes are kept. This is called the "root mail
14441 directory", and it must be the first path given in the
14442 @samp{mail-location} setting.
14443
14444 There are a few special variables you can use, eg.:
14445
14446 @table @samp
14447 @item %u
14448 username
14449 @item %n
14450 user part in user@@domain, same as %u if there's no domain
14451 @item %d
14452 domain part in user@@domain, empty if there's no domain
14453 @item %h
14454 home director
14455 @end table
14456
14457 See doc/wiki/Variables.txt for full list. Some examples:
14458 @table @samp
14459 @item maildir:~/Maildir
14460 @item mbox:~/mail:INBOX=/var/mail/%u
14461 @item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
14462 @end table
14463 Defaults to @samp{""}.
14464 @end deftypevr
14465
14466 @deftypevr {@code{dovecot-configuration} parameter} string mail-uid
14467 System user and group used to access mails. If you use multiple,
14468 userdb can override these by returning uid or gid fields. You can use
14469 either numbers or names. <doc/wiki/UserIds.txt>.
14470 Defaults to @samp{""}.
14471 @end deftypevr
14472
14473 @deftypevr {@code{dovecot-configuration} parameter} string mail-gid
14474
14475 Defaults to @samp{""}.
14476 @end deftypevr
14477
14478 @deftypevr {@code{dovecot-configuration} parameter} string mail-privileged-group
14479 Group to enable temporarily for privileged operations. Currently
14480 this is used only with INBOX when either its initial creation or
14481 dotlocking fails. Typically this is set to "mail" to give access to
14482 /var/mail.
14483 Defaults to @samp{""}.
14484 @end deftypevr
14485
14486 @deftypevr {@code{dovecot-configuration} parameter} string mail-access-groups
14487 Grant access to these supplementary groups for mail processes.
14488 Typically these are used to set up access to shared mailboxes. Note
14489 that it may be dangerous to set these if users can create
14490 symlinks (e.g. if "mail" group is set here, ln -s /var/mail ~/mail/var
14491 could allow a user to delete others' mailboxes, or ln -s
14492 /secret/shared/box ~/mail/mybox would allow reading it).
14493 Defaults to @samp{""}.
14494 @end deftypevr
14495
14496 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-full-filesystem-access?
14497 Allow full file system access to clients. There's no access checks
14498 other than what the operating system does for the active UID/GID. It
14499 works with both maildir and mboxes, allowing you to prefix mailboxes
14500 names with e.g. /path/ or ~user/.
14501 Defaults to @samp{#f}.
14502 @end deftypevr
14503
14504 @deftypevr {@code{dovecot-configuration} parameter} boolean mmap-disable?
14505 Don't use mmap() at all. This is required if you store indexes to
14506 shared file systems (NFS or clustered file system).
14507 Defaults to @samp{#f}.
14508 @end deftypevr
14509
14510 @deftypevr {@code{dovecot-configuration} parameter} boolean dotlock-use-excl?
14511 Rely on @samp{O_EXCL} to work when creating dotlock files. NFS
14512 supports @samp{O_EXCL} since version 3, so this should be safe to use
14513 nowadays by default.
14514 Defaults to @samp{#t}.
14515 @end deftypevr
14516
14517 @deftypevr {@code{dovecot-configuration} parameter} string mail-fsync
14518 When to use fsync() or fdatasync() calls:
14519 @table @code
14520 @item optimized
14521 Whenever necessary to avoid losing important data
14522 @item always
14523 Useful with e.g. NFS when write()s are delayed
14524 @item never
14525 Never use it (best performance, but crashes can lose data).
14526 @end table
14527 Defaults to @samp{"optimized"}.
14528 @end deftypevr
14529
14530 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-storage?
14531 Mail storage exists in NFS. Set this to yes to make Dovecot flush
14532 NFS caches whenever needed. If you're using only a single mail server
14533 this isn't needed.
14534 Defaults to @samp{#f}.
14535 @end deftypevr
14536
14537 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-index?
14538 Mail index files also exist in NFS. Setting this to yes requires
14539 @samp{mmap-disable? #t} and @samp{fsync-disable? #f}.
14540 Defaults to @samp{#f}.
14541 @end deftypevr
14542
14543 @deftypevr {@code{dovecot-configuration} parameter} string lock-method
14544 Locking method for index files. Alternatives are fcntl, flock and
14545 dotlock. Dotlocking uses some tricks which may create more disk I/O
14546 than other locking methods. NFS users: flock doesn't work, remember to
14547 change @samp{mmap-disable}.
14548 Defaults to @samp{"fcntl"}.
14549 @end deftypevr
14550
14551 @deftypevr {@code{dovecot-configuration} parameter} file-name mail-temp-dir
14552 Directory in which LDA/LMTP temporarily stores incoming mails >128
14553 kB.
14554 Defaults to @samp{"/tmp"}.
14555 @end deftypevr
14556
14557 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-uid
14558 Valid UID range for users. This is mostly to make sure that users can't
14559 log in as daemons or other system users. Note that denying root logins is
14560 hardcoded to dovecot binary and can't be done even if @samp{first-valid-uid}
14561 is set to 0.
14562 Defaults to @samp{500}.
14563 @end deftypevr
14564
14565 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-uid
14566
14567 Defaults to @samp{0}.
14568 @end deftypevr
14569
14570 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-gid
14571 Valid GID range for users. Users having non-valid GID as primary group ID
14572 aren't allowed to log in. If user belongs to supplementary groups with
14573 non-valid GIDs, those groups are not set.
14574 Defaults to @samp{1}.
14575 @end deftypevr
14576
14577 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-gid
14578
14579 Defaults to @samp{0}.
14580 @end deftypevr
14581
14582 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-max-keyword-length
14583 Maximum allowed length for mail keyword name. It's only forced when
14584 trying to create new keywords.
14585 Defaults to @samp{50}.
14586 @end deftypevr
14587
14588 @deftypevr {@code{dovecot-configuration} parameter} colon-separated-file-name-list valid-chroot-dirs
14589 List of directories under which chrooting is allowed for mail
14590 processes (i.e. /var/mail will allow chrooting to /var/mail/foo/bar
14591 too). This setting doesn't affect @samp{login-chroot}
14592 @samp{mail-chroot} or auth chroot settings. If this setting is empty,
14593 "/./" in home dirs are ignored. WARNING: Never add directories here
14594 which local users can modify, that may lead to root exploit. Usually
14595 this should be done only if you don't allow shell access for users.
14596 <doc/wiki/Chrooting.txt>.
14597 Defaults to @samp{()}.
14598 @end deftypevr
14599
14600 @deftypevr {@code{dovecot-configuration} parameter} string mail-chroot
14601 Default chroot directory for mail processes. This can be overridden
14602 for specific users in user database by giving /./ in user's home
14603 directory (e.g. /home/./user chroots into /home). Note that usually
14604 there is no real need to do chrooting, Dovecot doesn't allow users to
14605 access files outside their mail directory anyway. If your home
14606 directories are prefixed with the chroot directory, append "/." to
14607 @samp{mail-chroot}. <doc/wiki/Chrooting.txt>.
14608 Defaults to @samp{""}.
14609 @end deftypevr
14610
14611 @deftypevr {@code{dovecot-configuration} parameter} file-name auth-socket-path
14612 UNIX socket path to master authentication server to find users.
14613 This is used by imap (for shared users) and lda.
14614 Defaults to @samp{"/var/run/dovecot/auth-userdb"}.
14615 @end deftypevr
14616
14617 @deftypevr {@code{dovecot-configuration} parameter} file-name mail-plugin-dir
14618 Directory where to look up mail plugins.
14619 Defaults to @samp{"/usr/lib/dovecot"}.
14620 @end deftypevr
14621
14622 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mail-plugins
14623 List of plugins to load for all services. Plugins specific to IMAP,
14624 LDA, etc. are added to this list in their own .conf files.
14625 Defaults to @samp{()}.
14626 @end deftypevr
14627
14628 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-cache-min-mail-count
14629 The minimum number of mails in a mailbox before updates are done to
14630 cache file. This allows optimizing Dovecot's behavior to do less disk
14631 writes at the cost of more disk reads.
14632 Defaults to @samp{0}.
14633 @end deftypevr
14634
14635 @deftypevr {@code{dovecot-configuration} parameter} string mailbox-idle-check-interval
14636 When IDLE command is running, mailbox is checked once in a while to
14637 see if there are any new mails or other changes. This setting defines
14638 the minimum time to wait between those checks. Dovecot can also use
14639 dnotify, inotify and kqueue to find out immediately when changes
14640 occur.
14641 Defaults to @samp{"30 secs"}.
14642 @end deftypevr
14643
14644 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-save-crlf?
14645 Save mails with CR+LF instead of plain LF. This makes sending those
14646 mails take less CPU, especially with sendfile() syscall with Linux and
14647 FreeBSD. But it also creates a bit more disk I/O which may just make it
14648 slower. Also note that if other software reads the mboxes/maildirs,
14649 they may handle the extra CRs wrong and cause problems.
14650 Defaults to @samp{#f}.
14651 @end deftypevr
14652
14653 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-stat-dirs?
14654 By default LIST command returns all entries in maildir beginning
14655 with a dot. Enabling this option makes Dovecot return only entries
14656 which are directories. This is done by stat()ing each entry, so it
14657 causes more disk I/O.
14658 (For systems setting struct @samp{dirent->d_type} this check is free
14659 and it's done always regardless of this setting).
14660 Defaults to @samp{#f}.
14661 @end deftypevr
14662
14663 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-copy-with-hardlinks?
14664 When copying a message, do it with hard links whenever possible.
14665 This makes the performance much better, and it's unlikely to have any
14666 side effects.
14667 Defaults to @samp{#t}.
14668 @end deftypevr
14669
14670 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-very-dirty-syncs?
14671 Assume Dovecot is the only MUA accessing Maildir: Scan cur/
14672 directory only when its mtime changes unexpectedly or when we can't find
14673 the mail otherwise.
14674 Defaults to @samp{#f}.
14675 @end deftypevr
14676
14677 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-read-locks
14678 Which locking methods to use for locking mbox. There are four
14679 available:
14680
14681 @table @code
14682 @item dotlock
14683 Create <mailbox>.lock file. This is the oldest and most NFS-safe
14684 solution. If you want to use /var/mail/ like directory, the users will
14685 need write access to that directory.
14686 @item dotlock-try
14687 Same as dotlock, but if it fails because of permissions or because there
14688 isn't enough disk space, just skip it.
14689 @item fcntl
14690 Use this if possible. Works with NFS too if lockd is used.
14691 @item flock
14692 May not exist in all systems. Doesn't work with NFS.
14693 @item lockf
14694 May not exist in all systems. Doesn't work with NFS.
14695 @end table
14696
14697 You can use multiple locking methods; if you do the order they're declared
14698 in is important to avoid deadlocks if other MTAs/MUAs are using multiple
14699 locking methods as well. Some operating systems don't allow using some of
14700 them simultaneously.
14701 @end deftypevr
14702
14703 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-write-locks
14704
14705 @end deftypevr
14706
14707 @deftypevr {@code{dovecot-configuration} parameter} string mbox-lock-timeout
14708 Maximum time to wait for lock (all of them) before aborting.
14709 Defaults to @samp{"5 mins"}.
14710 @end deftypevr
14711
14712 @deftypevr {@code{dovecot-configuration} parameter} string mbox-dotlock-change-timeout
14713 If dotlock exists but the mailbox isn't modified in any way,
14714 override the lock file after this much time.
14715 Defaults to @samp{"2 mins"}.
14716 @end deftypevr
14717
14718 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-dirty-syncs?
14719 When mbox changes unexpectedly we have to fully read it to find out
14720 what changed. If the mbox is large this can take a long time. Since
14721 the change is usually just a newly appended mail, it'd be faster to
14722 simply read the new mails. If this setting is enabled, Dovecot does
14723 this but still safely fallbacks to re-reading the whole mbox file
14724 whenever something in mbox isn't how it's expected to be. The only real
14725 downside to this setting is that if some other MUA changes message
14726 flags, Dovecot doesn't notice it immediately. Note that a full sync is
14727 done with SELECT, EXAMINE, EXPUNGE and CHECK commands.
14728 Defaults to @samp{#t}.
14729 @end deftypevr
14730
14731 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-very-dirty-syncs?
14732 Like @samp{mbox-dirty-syncs}, but don't do full syncs even with SELECT,
14733 EXAMINE, EXPUNGE or CHECK commands. If this is set,
14734 @samp{mbox-dirty-syncs} is ignored.
14735 Defaults to @samp{#f}.
14736 @end deftypevr
14737
14738 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-lazy-writes?
14739 Delay writing mbox headers until doing a full write sync (EXPUNGE
14740 and CHECK commands and when closing the mailbox). This is especially
14741 useful for POP3 where clients often delete all mails. The downside is
14742 that our changes aren't immediately visible to other MUAs.
14743 Defaults to @samp{#t}.
14744 @end deftypevr
14745
14746 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mbox-min-index-size
14747 If mbox size is smaller than this (e.g. 100k), don't write index
14748 files. If an index file already exists it's still read, just not
14749 updated.
14750 Defaults to @samp{0}.
14751 @end deftypevr
14752
14753 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mdbox-rotate-size
14754 Maximum dbox file size until it's rotated.
14755 Defaults to @samp{10000000}.
14756 @end deftypevr
14757
14758 @deftypevr {@code{dovecot-configuration} parameter} string mdbox-rotate-interval
14759 Maximum dbox file age until it's rotated. Typically in days. Day
14760 begins from midnight, so 1d = today, 2d = yesterday, etc. 0 = check
14761 disabled.
14762 Defaults to @samp{"1d"}.
14763 @end deftypevr
14764
14765 @deftypevr {@code{dovecot-configuration} parameter} boolean mdbox-preallocate-space?
14766 When creating new mdbox files, immediately preallocate their size to
14767 @samp{mdbox-rotate-size}. This setting currently works only in Linux
14768 with some file systems (ext4, xfs).
14769 Defaults to @samp{#f}.
14770 @end deftypevr
14771
14772 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-dir
14773 sdbox and mdbox support saving mail attachments to external files,
14774 which also allows single instance storage for them. Other backends
14775 don't support this for now.
14776
14777 WARNING: This feature hasn't been tested much yet. Use at your own risk.
14778
14779 Directory root where to store mail attachments. Disabled, if empty.
14780 Defaults to @samp{""}.
14781 @end deftypevr
14782
14783 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-attachment-min-size
14784 Attachments smaller than this aren't saved externally. It's also
14785 possible to write a plugin to disable saving specific attachments
14786 externally.
14787 Defaults to @samp{128000}.
14788 @end deftypevr
14789
14790 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-fs
14791 File system backend to use for saving attachments:
14792 @table @code
14793 @item posix
14794 No SiS done by Dovecot (but this might help FS's own deduplication)
14795 @item sis posix
14796 SiS with immediate byte-by-byte comparison during saving
14797 @item sis-queue posix
14798 SiS with delayed comparison and deduplication.
14799 @end table
14800 Defaults to @samp{"sis posix"}.
14801 @end deftypevr
14802
14803 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-hash
14804 Hash format to use in attachment filenames. You can add any text and
14805 variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}},
14806 @code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}. Variables can be
14807 truncated, e.g. @code{%@{sha256:80@}} returns only first 80 bits.
14808 Defaults to @samp{"%@{sha1@}"}.
14809 @end deftypevr
14810
14811 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-process-limit
14812
14813 Defaults to @samp{100}.
14814 @end deftypevr
14815
14816 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-client-limit
14817
14818 Defaults to @samp{1000}.
14819 @end deftypevr
14820
14821 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-vsz-limit
14822 Default VSZ (virtual memory size) limit for service processes.
14823 This is mainly intended to catch and kill processes that leak memory
14824 before they eat up everything.
14825 Defaults to @samp{256000000}.
14826 @end deftypevr
14827
14828 @deftypevr {@code{dovecot-configuration} parameter} string default-login-user
14829 Login user is internally used by login processes. This is the most
14830 untrusted user in Dovecot system. It shouldn't have access to anything
14831 at all.
14832 Defaults to @samp{"dovenull"}.
14833 @end deftypevr
14834
14835 @deftypevr {@code{dovecot-configuration} parameter} string default-internal-user
14836 Internal user is used by unprivileged processes. It should be
14837 separate from login user, so that login processes can't disturb other
14838 processes.
14839 Defaults to @samp{"dovecot"}.
14840 @end deftypevr
14841
14842 @deftypevr {@code{dovecot-configuration} parameter} string ssl?
14843 SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>.
14844 Defaults to @samp{"required"}.
14845 @end deftypevr
14846
14847 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cert
14848 PEM encoded X.509 SSL/TLS certificate (public key).
14849 Defaults to @samp{"</etc/dovecot/default.pem"}.
14850 @end deftypevr
14851
14852 @deftypevr {@code{dovecot-configuration} parameter} string ssl-key
14853 PEM encoded SSL/TLS private key. The key is opened before
14854 dropping root privileges, so keep the key file unreadable by anyone but
14855 root.
14856 Defaults to @samp{"</etc/dovecot/private/default.pem"}.
14857 @end deftypevr
14858
14859 @deftypevr {@code{dovecot-configuration} parameter} string ssl-key-password
14860 If key file is password protected, give the password here.
14861 Alternatively give it when starting dovecot with -p parameter. Since
14862 this file is often world-readable, you may want to place this setting
14863 instead to a different.
14864 Defaults to @samp{""}.
14865 @end deftypevr
14866
14867 @deftypevr {@code{dovecot-configuration} parameter} string ssl-ca
14868 PEM encoded trusted certificate authority. Set this only if you
14869 intend to use @samp{ssl-verify-client-cert? #t}. The file should
14870 contain the CA certificate(s) followed by the matching
14871 CRL(s). (e.g. @samp{ssl-ca </etc/ssl/certs/ca.pem}).
14872 Defaults to @samp{""}.
14873 @end deftypevr
14874
14875 @deftypevr {@code{dovecot-configuration} parameter} boolean ssl-require-crl?
14876 Require that CRL check succeeds for client certificates.
14877 Defaults to @samp{#t}.
14878 @end deftypevr
14879
14880 @deftypevr {@code{dovecot-configuration} parameter} boolean ssl-verify-client-cert?
14881 Request client to send a certificate. If you also want to require
14882 it, set @samp{auth-ssl-require-client-cert? #t} in auth section.
14883 Defaults to @samp{#f}.
14884 @end deftypevr
14885
14886 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cert-username-field
14887 Which field from certificate to use for username. commonName and
14888 x500UniqueIdentifier are the usual choices. You'll also need to set
14889 @samp{auth-ssl-username-from-cert? #t}.
14890 Defaults to @samp{"commonName"}.
14891 @end deftypevr
14892
14893 @deftypevr {@code{dovecot-configuration} parameter} string ssl-min-protocol
14894 Minimum SSL protocol version to accept.
14895 Defaults to @samp{"TLSv1"}.
14896 @end deftypevr
14897
14898 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cipher-list
14899 SSL ciphers to use.
14900 Defaults to @samp{"ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@@STRENGTH"}.
14901 @end deftypevr
14902
14903 @deftypevr {@code{dovecot-configuration} parameter} string ssl-crypto-device
14904 SSL crypto device to use, for valid values run "openssl engine".
14905 Defaults to @samp{""}.
14906 @end deftypevr
14907
14908 @deftypevr {@code{dovecot-configuration} parameter} string postmaster-address
14909 Address to use when sending rejection mails.
14910 %d expands to recipient domain.
14911 Defaults to @samp{"postmaster@@%d"}.
14912 @end deftypevr
14913
14914 @deftypevr {@code{dovecot-configuration} parameter} string hostname
14915 Hostname to use in various parts of sent mails (e.g. in Message-Id)
14916 and in LMTP replies. Default is the system's real hostname@@domain.
14917 Defaults to @samp{""}.
14918 @end deftypevr
14919
14920 @deftypevr {@code{dovecot-configuration} parameter} boolean quota-full-tempfail?
14921 If user is over quota, return with temporary failure instead of
14922 bouncing the mail.
14923 Defaults to @samp{#f}.
14924 @end deftypevr
14925
14926 @deftypevr {@code{dovecot-configuration} parameter} file-name sendmail-path
14927 Binary to use for sending mails.
14928 Defaults to @samp{"/usr/sbin/sendmail"}.
14929 @end deftypevr
14930
14931 @deftypevr {@code{dovecot-configuration} parameter} string submission-host
14932 If non-empty, send mails via this SMTP host[:port] instead of
14933 sendmail.
14934 Defaults to @samp{""}.
14935 @end deftypevr
14936
14937 @deftypevr {@code{dovecot-configuration} parameter} string rejection-subject
14938 Subject: header to use for rejection mails. You can use the same
14939 variables as for @samp{rejection-reason} below.
14940 Defaults to @samp{"Rejected: %s"}.
14941 @end deftypevr
14942
14943 @deftypevr {@code{dovecot-configuration} parameter} string rejection-reason
14944 Human readable error message for rejection mails. You can use
14945 variables:
14946
14947 @table @code
14948 @item %n
14949 CRLF
14950 @item %r
14951 reason
14952 @item %s
14953 original subject
14954 @item %t
14955 recipient
14956 @end table
14957 Defaults to @samp{"Your message to <%t> was automatically rejected:%n%r"}.
14958 @end deftypevr
14959
14960 @deftypevr {@code{dovecot-configuration} parameter} string recipient-delimiter
14961 Delimiter character between local-part and detail in email
14962 address.
14963 Defaults to @samp{"+"}.
14964 @end deftypevr
14965
14966 @deftypevr {@code{dovecot-configuration} parameter} string lda-original-recipient-header
14967 Header where the original recipient address (SMTP's RCPT TO:
14968 address) is taken from if not available elsewhere. With dovecot-lda -a
14969 parameter overrides this. A commonly used header for this is
14970 X-Original-To.
14971 Defaults to @samp{""}.
14972 @end deftypevr
14973
14974 @deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autocreate?
14975 Should saving a mail to a nonexistent mailbox automatically create
14976 it?.
14977 Defaults to @samp{#f}.
14978 @end deftypevr
14979
14980 @deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autosubscribe?
14981 Should automatically created mailboxes be also automatically
14982 subscribed?.
14983 Defaults to @samp{#f}.
14984 @end deftypevr
14985
14986 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer imap-max-line-length
14987 Maximum IMAP command line length. Some clients generate very long
14988 command lines with huge mailboxes, so you may need to raise this if you
14989 get "Too long argument" or "IMAP command line too large" errors
14990 often.
14991 Defaults to @samp{64000}.
14992 @end deftypevr
14993
14994 @deftypevr {@code{dovecot-configuration} parameter} string imap-logout-format
14995 IMAP logout format string:
14996 @table @code
14997 @item %i
14998 total number of bytes read from client
14999 @item %o
15000 total number of bytes sent to client.
15001 @end table
15002 See @file{doc/wiki/Variables.txt} for a list of all the variables you can use.
15003 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@}"}.
15004 @end deftypevr
15005
15006 @deftypevr {@code{dovecot-configuration} parameter} string imap-capability
15007 Override the IMAP CAPABILITY response. If the value begins with '+',
15008 add the given capabilities on top of the defaults (e.g. +XFOO XBAR).
15009 Defaults to @samp{""}.
15010 @end deftypevr
15011
15012 @deftypevr {@code{dovecot-configuration} parameter} string imap-idle-notify-interval
15013 How long to wait between "OK Still here" notifications when client
15014 is IDLEing.
15015 Defaults to @samp{"2 mins"}.
15016 @end deftypevr
15017
15018 @deftypevr {@code{dovecot-configuration} parameter} string imap-id-send
15019 ID field names and values to send to clients. Using * as the value
15020 makes Dovecot use the default value. The following fields have default
15021 values currently: name, version, os, os-version, support-url,
15022 support-email.
15023 Defaults to @samp{""}.
15024 @end deftypevr
15025
15026 @deftypevr {@code{dovecot-configuration} parameter} string imap-id-log
15027 ID fields sent by client to log. * means everything.
15028 Defaults to @samp{""}.
15029 @end deftypevr
15030
15031 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list imap-client-workarounds
15032 Workarounds for various client bugs:
15033
15034 @table @code
15035 @item delay-newmail
15036 Send EXISTS/RECENT new mail notifications only when replying to NOOP and
15037 CHECK commands. Some clients ignore them otherwise, for example OSX
15038 Mail (<v2.1). Outlook Express breaks more badly though, without this it
15039 may show user "Message no longer in server" errors. Note that OE6
15040 still breaks even with this workaround if synchronization is set to
15041 "Headers Only".
15042
15043 @item tb-extra-mailbox-sep
15044 Thunderbird gets somehow confused with LAYOUT=fs (mbox and dbox) and
15045 adds extra @samp{/} suffixes to mailbox names. This option causes Dovecot to
15046 ignore the extra @samp{/} instead of treating it as invalid mailbox name.
15047
15048 @item tb-lsub-flags
15049 Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g. mbox).
15050 This makes Thunderbird realize they aren't selectable and show them
15051 greyed out, instead of only later giving "not selectable" popup error.
15052 @end table
15053 Defaults to @samp{()}.
15054 @end deftypevr
15055
15056 @deftypevr {@code{dovecot-configuration} parameter} string imap-urlauth-host
15057 Host allowed in URLAUTH URLs sent by client. "*" allows all.
15058 Defaults to @samp{""}.
15059 @end deftypevr
15060
15061
15062 Whew! Lots of configuration options. The nice thing about it though is
15063 that GuixSD has a complete interface to Dovecot's configuration
15064 language. This allows not only a nice way to declare configurations,
15065 but also offers reflective capabilities as well: users can write code to
15066 inspect and transform configurations from within Scheme.
15067
15068 However, it could be that you just want to get a @code{dovecot.conf} up
15069 and running. In that case, you can pass an
15070 @code{opaque-dovecot-configuration} as the @code{#:config} parameter to
15071 @code{dovecot-service}. As its name indicates, an opaque configuration
15072 does not have easy reflective capabilities.
15073
15074 Available @code{opaque-dovecot-configuration} fields are:
15075
15076 @deftypevr {@code{opaque-dovecot-configuration} parameter} package dovecot
15077 The dovecot package.
15078 @end deftypevr
15079
15080 @deftypevr {@code{opaque-dovecot-configuration} parameter} string string
15081 The contents of the @code{dovecot.conf}, as a string.
15082 @end deftypevr
15083
15084 For example, if your @code{dovecot.conf} is just the empty string, you
15085 could instantiate a dovecot service like this:
15086
15087 @example
15088 (dovecot-service #:config
15089 (opaque-dovecot-configuration
15090 (string "")))
15091 @end example
15092
15093 @subsubheading OpenSMTPD Service
15094
15095 @deffn {Scheme Variable} opensmtpd-service-type
15096 This is the type of the @uref{https://www.opensmtpd.org, OpenSMTPD}
15097 service, whose value should be an @code{opensmtpd-configuration} object
15098 as in this example:
15099
15100 @example
15101 (service opensmtpd-service-type
15102 (opensmtpd-configuration
15103 (config-file (local-file "./my-smtpd.conf"))))
15104 @end example
15105 @end deffn
15106
15107 @deftp {Data Type} opensmtpd-configuration
15108 Data type representing the configuration of opensmtpd.
15109
15110 @table @asis
15111 @item @code{package} (default: @var{opensmtpd})
15112 Package object of the OpenSMTPD SMTP server.
15113
15114 @item @code{config-file} (default: @var{%default-opensmtpd-file})
15115 File-like object of the OpenSMTPD configuration file to use. By default
15116 it listens on the loopback network interface, and allows for mail from
15117 users and daemons on the local machine, as well as permitting email to
15118 remote servers. Run @command{man smtpd.conf} for more information.
15119
15120 @end table
15121 @end deftp
15122
15123 @subsubheading Exim Service
15124
15125 @cindex mail transfer agent (MTA)
15126 @cindex MTA (mail transfer agent)
15127 @cindex SMTP
15128
15129 @deffn {Scheme Variable} exim-service-type
15130 This is the type of the @uref{https://exim.org, Exim} mail transfer
15131 agent (MTA), whose value should be an @code{exim-configuration} object
15132 as in this example:
15133
15134 @example
15135 (service exim-service-type
15136 (exim-configuration
15137 (config-file (local-file "./my-exim.conf"))))
15138 @end example
15139 @end deffn
15140
15141 In order to use an @code{exim-service-type} service you must also have a
15142 @code{mail-aliases-service-type} service present in your
15143 @code{operating-system} (even if it has no aliases).
15144
15145 @deftp {Data Type} exim-configuration
15146 Data type representing the configuration of exim.
15147
15148 @table @asis
15149 @item @code{package} (default: @var{exim})
15150 Package object of the Exim server.
15151
15152 @item @code{config-file} (default: @code{#f})
15153 File-like object of the Exim configuration file to use. If its value is
15154 @code{#f} then use the default configuration file from the package
15155 provided in @code{package}. The resulting configuration file is loaded
15156 after setting the @code{exim_user} and @code{exim_group} configuration
15157 variables.
15158
15159 @end table
15160 @end deftp
15161
15162 @subsubheading Mail Aliases Service
15163
15164 @cindex email aliases
15165 @cindex aliases, for email addresses
15166
15167 @deffn {Scheme Variable} mail-aliases-service-type
15168 This is the type of the service which provides @code{/etc/aliases},
15169 specifying how to deliver mail to users on this system.
15170
15171 @example
15172 (service mail-aliases-service-type
15173 '(("postmaster" "bob")
15174 ("bob" "bob@@example.com" "bob@@example2.com")))
15175 @end example
15176 @end deffn
15177
15178 The configuration for a @code{mail-aliases-service-type} service is an
15179 association list denoting how to deliver mail that comes to this
15180 system. Each entry is of the form @code{(alias addresses ...)}, with
15181 @code{alias} specifying the local alias and @code{addresses} specifying
15182 where to deliver this user's mail.
15183
15184 The aliases aren't required to exist as users on the local system. In
15185 the above example, there doesn't need to be a @code{postmaster} entry in
15186 the @code{operating-system}'s @code{user-accounts} in order to deliver
15187 the @code{postmaster} mail to @code{bob} (which subsequently would
15188 deliver mail to @code{bob@@example.com} and @code{bob@@example2.com}).
15189
15190 @node Messaging Services
15191 @subsubsection Messaging Services
15192
15193 @cindex messaging
15194 @cindex jabber
15195 @cindex XMPP
15196 The @code{(gnu services messaging)} module provides Guix service
15197 definitions for messaging services: currently only Prosody is supported.
15198
15199 @subsubheading Prosody Service
15200
15201 @deffn {Scheme Variable} prosody-service-type
15202 This is the type for the @uref{https://prosody.im, Prosody XMPP
15203 communication server}. Its value must be a @code{prosody-configuration}
15204 record as in this example:
15205
15206 @example
15207 (service prosody-service-type
15208 (prosody-configuration
15209 (modules-enabled (cons "groups" "mam" %default-modules-enabled))
15210 (int-components
15211 (list
15212 (int-component-configuration
15213 (hostname "conference.example.net")
15214 (plugin "muc")
15215 (mod-muc (mod-muc-configuration)))))
15216 (virtualhosts
15217 (list
15218 (virtualhost-configuration
15219 (domain "example.net"))))))
15220 @end example
15221
15222 See below for details about @code{prosody-configuration}.
15223
15224 @end deffn
15225
15226 By default, Prosody does not need much configuration. Only one
15227 @code{virtualhosts} field is needed: it specifies the domain you wish
15228 Prosody to serve.
15229
15230 You can perform various sanity checks on the generated configuration
15231 with the @code{prosodyctl check} command.
15232
15233 Prosodyctl will also help you to import certificates from the
15234 @code{letsencrypt} directory so that the @code{prosody} user can access
15235 them. See @url{https://prosody.im/doc/letsencrypt}.
15236
15237 @example
15238 prosodyctl --root cert import /etc/letsencrypt/live
15239 @end example
15240
15241 The available configuration parameters follow. Each parameter
15242 definition is preceded by its type; for example, @samp{string-list foo}
15243 indicates that the @code{foo} parameter should be specified as a list of
15244 strings. Types starting with @code{maybe-} denote parameters that won't
15245 show up in @code{prosody.cfg.lua} when their value is @code{'disabled}.
15246
15247 There is also a way to specify the configuration as a string, if you
15248 have an old @code{prosody.cfg.lua} file that you want to port over from
15249 some other system; see the end for more details.
15250
15251 The @code{file-object} type designates either a file-like object
15252 (@pxref{G-Expressions, file-like objects}) or a file name.
15253
15254 @c The following documentation was initially generated by
15255 @c (generate-documentation) in (gnu services messaging). Manually maintained
15256 @c documentation is better, so we shouldn't hesitate to edit below as
15257 @c needed. However if the change you want to make to this documentation
15258 @c can be done in an automated way, it's probably easier to change
15259 @c (generate-documentation) than to make it below and have to deal with
15260 @c the churn as Prosody updates.
15261
15262 Available @code{prosody-configuration} fields are:
15263
15264 @deftypevr {@code{prosody-configuration} parameter} package prosody
15265 The Prosody package.
15266 @end deftypevr
15267
15268 @deftypevr {@code{prosody-configuration} parameter} file-name data-path
15269 Location of the Prosody data storage directory. See
15270 @url{https://prosody.im/doc/configure}.
15271 Defaults to @samp{"/var/lib/prosody"}.
15272 @end deftypevr
15273
15274 @deftypevr {@code{prosody-configuration} parameter} file-object-list plugin-paths
15275 Additional plugin directories. They are searched in all the specified
15276 paths in order. See @url{https://prosody.im/doc/plugins_directory}.
15277 Defaults to @samp{()}.
15278 @end deftypevr
15279
15280 @deftypevr {@code{prosody-configuration} parameter} file-name certificates
15281 Every virtual host and component needs a certificate so that clients and
15282 servers can securely verify its identity. Prosody will automatically load
15283 certificates/keys from the directory specified here.
15284 Defaults to @samp{"/etc/prosody/certs"}.
15285 @end deftypevr
15286
15287 @deftypevr {@code{prosody-configuration} parameter} string-list admins
15288 This is a list of accounts that are admins for the server. Note that you
15289 must create the accounts separately. See @url{https://prosody.im/doc/admins} and
15290 @url{https://prosody.im/doc/creating_accounts}.
15291 Example: @code{(admins '("user1@@example.com" "user2@@example.net"))}
15292 Defaults to @samp{()}.
15293 @end deftypevr
15294
15295 @deftypevr {@code{prosody-configuration} parameter} boolean use-libevent?
15296 Enable use of libevent for better performance under high load. See
15297 @url{https://prosody.im/doc/libevent}.
15298 Defaults to @samp{#f}.
15299 @end deftypevr
15300
15301 @deftypevr {@code{prosody-configuration} parameter} module-list modules-enabled
15302 This is the list of modules Prosody will load on startup. It looks for
15303 @code{mod_modulename.lua} in the plugins folder, so make sure that exists too.
15304 Documentation on modules can be found at:
15305 @url{https://prosody.im/doc/modules}.
15306 Defaults to @samp{("roster" "saslauth" "tls" "dialback" "disco" "carbons" "private" "blocklist" "vcard" "version" "uptime" "time" "ping" "pep" "register" "admin_adhoc")}.
15307 @end deftypevr
15308
15309 @deftypevr {@code{prosody-configuration} parameter} string-list modules-disabled
15310 @samp{"offline"}, @samp{"c2s"} and @samp{"s2s"} are auto-loaded, but
15311 should you want to disable them then add them to this list.
15312 Defaults to @samp{()}.
15313 @end deftypevr
15314
15315 @deftypevr {@code{prosody-configuration} parameter} file-object groups-file
15316 Path to a text file where the shared groups are defined. If this path is
15317 empty then @samp{mod_groups} does nothing. See
15318 @url{https://prosody.im/doc/modules/mod_groups}.
15319 Defaults to @samp{"/var/lib/prosody/sharedgroups.txt"}.
15320 @end deftypevr
15321
15322 @deftypevr {@code{prosody-configuration} parameter} boolean allow-registration?
15323 Disable account creation by default, for security. See
15324 @url{https://prosody.im/doc/creating_accounts}.
15325 Defaults to @samp{#f}.
15326 @end deftypevr
15327
15328 @deftypevr {@code{prosody-configuration} parameter} maybe-ssl-configuration ssl
15329 These are the SSL/TLS-related settings. Most of them are disabled so to
15330 use Prosody's defaults. If you do not completely understand these options, do
15331 not add them to your config, it is easy to lower the security of your server
15332 using them. See @url{https://prosody.im/doc/advanced_ssl_config}.
15333
15334 Available @code{ssl-configuration} fields are:
15335
15336 @deftypevr {@code{ssl-configuration} parameter} maybe-string protocol
15337 This determines what handshake to use.
15338 @end deftypevr
15339
15340 @deftypevr {@code{ssl-configuration} parameter} maybe-file-name key
15341 Path to your private key file.
15342 @end deftypevr
15343
15344 @deftypevr {@code{ssl-configuration} parameter} maybe-file-name certificate
15345 Path to your certificate file.
15346 @end deftypevr
15347
15348 @deftypevr {@code{ssl-configuration} parameter} file-object capath
15349 Path to directory containing root certificates that you wish Prosody to
15350 trust when verifying the certificates of remote servers.
15351 Defaults to @samp{"/etc/ssl/certs"}.
15352 @end deftypevr
15353
15354 @deftypevr {@code{ssl-configuration} parameter} maybe-file-object cafile
15355 Path to a file containing root certificates that you wish Prosody to trust.
15356 Similar to @code{capath} but with all certificates concatenated together.
15357 @end deftypevr
15358
15359 @deftypevr {@code{ssl-configuration} parameter} maybe-string-list verify
15360 A list of verification options (these mostly map to OpenSSL's
15361 @code{set_verify()} flags).
15362 @end deftypevr
15363
15364 @deftypevr {@code{ssl-configuration} parameter} maybe-string-list options
15365 A list of general options relating to SSL/TLS. These map to OpenSSL's
15366 @code{set_options()}. For a full list of options available in LuaSec, see the
15367 LuaSec source.
15368 @end deftypevr
15369
15370 @deftypevr {@code{ssl-configuration} parameter} maybe-non-negative-integer depth
15371 How long a chain of certificate authorities to check when looking for a
15372 trusted root certificate.
15373 @end deftypevr
15374
15375 @deftypevr {@code{ssl-configuration} parameter} maybe-string ciphers
15376 An OpenSSL cipher string. This selects what ciphers Prosody will offer to
15377 clients, and in what order.
15378 @end deftypevr
15379
15380 @deftypevr {@code{ssl-configuration} parameter} maybe-file-name dhparam
15381 A path to a file containing parameters for Diffie-Hellman key exchange. You
15382 can create such a file with:
15383 @code{openssl dhparam -out /etc/prosody/certs/dh-2048.pem 2048}
15384 @end deftypevr
15385
15386 @deftypevr {@code{ssl-configuration} parameter} maybe-string curve
15387 Curve for Elliptic curve Diffie-Hellman. Prosody's default is
15388 @samp{"secp384r1"}.
15389 @end deftypevr
15390
15391 @deftypevr {@code{ssl-configuration} parameter} maybe-string-list verifyext
15392 A list of "extra" verification options.
15393 @end deftypevr
15394
15395 @deftypevr {@code{ssl-configuration} parameter} maybe-string password
15396 Password for encrypted private keys.
15397 @end deftypevr
15398
15399 @end deftypevr
15400
15401 @deftypevr {@code{prosody-configuration} parameter} boolean c2s-require-encryption?
15402 Whether to force all client-to-server connections to be encrypted or not.
15403 See @url{https://prosody.im/doc/modules/mod_tls}.
15404 Defaults to @samp{#f}.
15405 @end deftypevr
15406
15407 @deftypevr {@code{prosody-configuration} parameter} string-list disable-sasl-mechanisms
15408 Set of mechanisms that will never be offered. See
15409 @url{https://prosody.im/doc/modules/mod_saslauth}.
15410 Defaults to @samp{("DIGEST-MD5")}.
15411 @end deftypevr
15412
15413 @deftypevr {@code{prosody-configuration} parameter} boolean s2s-require-encryption?
15414 Whether to force all server-to-server connections to be encrypted or not.
15415 See @url{https://prosody.im/doc/modules/mod_tls}.
15416 Defaults to @samp{#f}.
15417 @end deftypevr
15418
15419 @deftypevr {@code{prosody-configuration} parameter} boolean s2s-secure-auth?
15420 Whether to require encryption and certificate authentication. This
15421 provides ideal security, but requires servers you communicate with to support
15422 encryption AND present valid, trusted certificates. See
15423 @url{https://prosody.im/doc/s2s#security}.
15424 Defaults to @samp{#f}.
15425 @end deftypevr
15426
15427 @deftypevr {@code{prosody-configuration} parameter} string-list s2s-insecure-domains
15428 Many servers don't support encryption or have invalid or self-signed
15429 certificates. You can list domains here that will not be required to
15430 authenticate using certificates. They will be authenticated using DNS. See
15431 @url{https://prosody.im/doc/s2s#security}.
15432 Defaults to @samp{()}.
15433 @end deftypevr
15434
15435 @deftypevr {@code{prosody-configuration} parameter} string-list s2s-secure-domains
15436 Even if you leave @code{s2s-secure-auth?} disabled, you can still require
15437 valid certificates for some domains by specifying a list here. See
15438 @url{https://prosody.im/doc/s2s#security}.
15439 Defaults to @samp{()}.
15440 @end deftypevr
15441
15442 @deftypevr {@code{prosody-configuration} parameter} string authentication
15443 Select the authentication backend to use. The default provider stores
15444 passwords in plaintext and uses Prosody's configured data storage to store the
15445 authentication data. If you do not trust your server please see
15446 @url{https://prosody.im/doc/modules/mod_auth_internal_hashed} for information
15447 about using the hashed backend. See also
15448 @url{https://prosody.im/doc/authentication}
15449 Defaults to @samp{"internal_plain"}.
15450 @end deftypevr
15451
15452 @deftypevr {@code{prosody-configuration} parameter} maybe-string log
15453 Set logging options. Advanced logging configuration is not yet supported
15454 by the GuixSD Prosody Service. See @url{https://prosody.im/doc/logging}.
15455 Defaults to @samp{"*syslog"}.
15456 @end deftypevr
15457
15458 @deftypevr {@code{prosody-configuration} parameter} file-name pidfile
15459 File to write pid in. See @url{https://prosody.im/doc/modules/mod_posix}.
15460 Defaults to @samp{"/var/run/prosody/prosody.pid"}.
15461 @end deftypevr
15462
15463 @deftypevr {@code{prosody-configuration} parameter} maybe-non-negative-integer http-max-content-size
15464 Maximum allowed size of the HTTP body (in bytes).
15465 @end deftypevr
15466
15467 @deftypevr {@code{prosody-configuration} parameter} maybe-string http-external-url
15468 Some modules expose their own URL in various ways. This URL is built
15469 from the protocol, host and port used. If Prosody sits behind a proxy, the
15470 public URL will be @code{http-external-url} instead. See
15471 @url{https://prosody.im/doc/http#external_url}.
15472 @end deftypevr
15473
15474 @deftypevr {@code{prosody-configuration} parameter} virtualhost-configuration-list virtualhosts
15475 A host in Prosody is a domain on which user accounts can be created. For
15476 example if you want your users to have addresses like
15477 @samp{"john.smith@@example.com"} then you need to add a host
15478 @samp{"example.com"}. All options in this list will apply only to this host.
15479
15480 Note: the name "virtual" host is used in configuration to avoid confusion with
15481 the actual physical host that Prosody is installed on. A single Prosody
15482 instance can serve many domains, each one defined as a VirtualHost entry in
15483 Prosody's configuration. Conversely a server that hosts a single domain would
15484 have just one VirtualHost entry.
15485
15486 See @url{https://prosody.im/doc/configure#virtual_host_settings}.
15487
15488 Available @code{virtualhost-configuration} fields are:
15489
15490 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:
15491 @deftypevr {@code{virtualhost-configuration} parameter} string domain
15492 Domain you wish Prosody to serve.
15493 @end deftypevr
15494
15495 @end deftypevr
15496
15497 @deftypevr {@code{prosody-configuration} parameter} int-component-configuration-list int-components
15498 Components are extra services on a server which are available to clients,
15499 usually on a subdomain of the main server (such as
15500 @samp{"mycomponent.example.com"}). Example components might be chatroom
15501 servers, user directories, or gateways to other protocols.
15502
15503 Internal components are implemented with Prosody-specific plugins. To add an
15504 internal component, you simply fill the hostname field, and the plugin you wish
15505 to use for the component.
15506
15507 See @url{https://prosody.im/doc/components}.
15508 Defaults to @samp{()}.
15509
15510 Available @code{int-component-configuration} fields are:
15511
15512 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:
15513 @deftypevr {@code{int-component-configuration} parameter} string hostname
15514 Hostname of the component.
15515 @end deftypevr
15516
15517 @deftypevr {@code{int-component-configuration} parameter} string plugin
15518 Plugin you wish to use for the component.
15519 @end deftypevr
15520
15521 @deftypevr {@code{int-component-configuration} parameter} maybe-mod-muc-configuration mod-muc
15522 Multi-user chat (MUC) is Prosody's module for allowing you to create
15523 hosted chatrooms/conferences for XMPP users.
15524
15525 General information on setting up and using multi-user chatrooms can be found
15526 in the "Chatrooms" documentation (@url{https://prosody.im/doc/chatrooms}),
15527 which you should read if you are new to XMPP chatrooms.
15528
15529 See also @url{https://prosody.im/doc/modules/mod_muc}.
15530
15531 Available @code{mod-muc-configuration} fields are:
15532
15533 @deftypevr {@code{mod-muc-configuration} parameter} string name
15534 The name to return in service discovery responses.
15535 Defaults to @samp{"Prosody Chatrooms"}.
15536 @end deftypevr
15537
15538 @deftypevr {@code{mod-muc-configuration} parameter} string-or-boolean restrict-room-creation
15539 If @samp{#t}, this will only allow admins to create new chatrooms.
15540 Otherwise anyone can create a room. The value @samp{"local"} restricts room
15541 creation to users on the service's parent domain. E.g. @samp{user@@example.com}
15542 can create rooms on @samp{rooms.example.com}. The value @samp{"admin"}
15543 restricts to service administrators only.
15544 Defaults to @samp{#f}.
15545 @end deftypevr
15546
15547 @deftypevr {@code{mod-muc-configuration} parameter} non-negative-integer max-history-messages
15548 Maximum number of history messages that will be sent to the member that has
15549 just joined the room.
15550 Defaults to @samp{20}.
15551 @end deftypevr
15552
15553 @end deftypevr
15554
15555 @end deftypevr
15556
15557 @deftypevr {@code{prosody-configuration} parameter} ext-component-configuration-list ext-components
15558 External components use XEP-0114, which most standalone components
15559 support. To add an external component, you simply fill the hostname field. See
15560 @url{https://prosody.im/doc/components}.
15561 Defaults to @samp{()}.
15562
15563 Available @code{ext-component-configuration} fields are:
15564
15565 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:
15566 @deftypevr {@code{ext-component-configuration} parameter} string component-secret
15567 Password which the component will use to log in.
15568 @end deftypevr
15569
15570 @deftypevr {@code{ext-component-configuration} parameter} string hostname
15571 Hostname of the component.
15572 @end deftypevr
15573
15574 @end deftypevr
15575
15576 @deftypevr {@code{prosody-configuration} parameter} non-negative-integer-list component-ports
15577 Port(s) Prosody listens on for component connections.
15578 Defaults to @samp{(5347)}.
15579 @end deftypevr
15580
15581 @deftypevr {@code{prosody-configuration} parameter} string component-interface
15582 Interface Prosody listens on for component connections.
15583 Defaults to @samp{"127.0.0.1"}.
15584 @end deftypevr
15585
15586 @deftypevr {@code{prosody-configuration} parameter} maybe-raw-content raw-content
15587 Raw content that will be added to the configuration file.
15588 @end deftypevr
15589
15590 It could be that you just want to get a @code{prosody.cfg.lua}
15591 up and running. In that case, you can pass an
15592 @code{opaque-prosody-configuration} record as the value of
15593 @code{prosody-service-type}. As its name indicates, an opaque configuration
15594 does not have easy reflective capabilities.
15595 Available @code{opaque-prosody-configuration} fields are:
15596
15597 @deftypevr {@code{opaque-prosody-configuration} parameter} package prosody
15598 The prosody package.
15599 @end deftypevr
15600
15601 @deftypevr {@code{opaque-prosody-configuration} parameter} string prosody.cfg.lua
15602 The contents of the @code{prosody.cfg.lua} to use.
15603 @end deftypevr
15604
15605 For example, if your @code{prosody.cfg.lua} is just the empty
15606 string, you could instantiate a prosody service like this:
15607
15608 @example
15609 (service prosody-service-type
15610 (opaque-prosody-configuration
15611 (prosody.cfg.lua "")))
15612 @end example
15613
15614 @c end of Prosody auto-generated documentation
15615
15616 @subsubheading BitlBee Service
15617
15618 @cindex IRC (Internet Relay Chat)
15619 @cindex IRC gateway
15620 @url{http://bitlbee.org,BitlBee} is a gateway that provides an IRC
15621 interface to a variety of messaging protocols such as XMPP.
15622
15623 @defvr {Scheme Variable} bitlbee-service-type
15624 This is the service type for the @url{http://bitlbee.org,BitlBee} IRC
15625 gateway daemon. Its value is a @code{bitlbee-configuration} (see
15626 below).
15627
15628 To have BitlBee listen on port 6667 on localhost, add this line to your
15629 services:
15630
15631 @example
15632 (service bitlbee-service-type)
15633 @end example
15634 @end defvr
15635
15636 @deftp {Data Type} bitlbee-configuration
15637 This is the configuration for BitlBee, with the following fields:
15638
15639 @table @asis
15640 @item @code{interface} (default: @code{"127.0.0.1"})
15641 @itemx @code{port} (default: @code{6667})
15642 Listen on the network interface corresponding to the IP address
15643 specified in @var{interface}, on @var{port}.
15644
15645 When @var{interface} is @code{127.0.0.1}, only local clients can
15646 connect; when it is @code{0.0.0.0}, connections can come from any
15647 networking interface.
15648
15649 @item @code{package} (default: @code{bitlbee})
15650 The BitlBee package to use.
15651
15652 @item @code{plugins} (default: @code{'()})
15653 List of plugin packages to use---e.g., @code{bitlbee-discord}.
15654
15655 @item @code{extra-settings} (default: @code{""})
15656 Configuration snippet added as-is to the BitlBee configuration file.
15657 @end table
15658 @end deftp
15659
15660
15661 @node Telephony Services
15662 @subsubsection Telephony Services
15663
15664 @cindex Murmur (VoIP server)
15665 @cindex VoIP server
15666 This section describes how to set up and run a Murmur server. Murmur is
15667 the server of the @uref{https://mumble.info, Mumble} voice-over-IP
15668 (VoIP) suite.
15669
15670 @deftp {Data Type} murmur-configuration
15671 The service type for the Murmur server. An example configuration can
15672 look like this:
15673
15674 @example
15675 (service murmur-service-type
15676 (murmur-configuration
15677 (welcome-text
15678 "Welcome to this Mumble server running on GuixSD!")
15679 (cert-required? #t) ;disallow text password logins
15680 (ssl-cert "/etc/letsencrypt/live/mumble.example.com/fullchain.pem")
15681 (ssl-key "/etc/letsencrypt/live/mumble.example.com/privkey.pem")))
15682 @end example
15683
15684 After reconfiguring your system, you can manually set the murmur @code{SuperUser}
15685 password with the command that is printed during the activation phase.
15686
15687 It is recommended to register a normal Mumble user account
15688 and grant it admin or moderator rights.
15689 You can use the @code{mumble} client to
15690 login as new normal user, register yourself, and log out.
15691 For the next step login with the name @code{SuperUser} use
15692 the @code{SuperUser} password that you set previously,
15693 and grant your newly registered mumble user administrator or moderator
15694 rights and create some channels.
15695
15696 Available @code{murmur-configuration} fields are:
15697
15698 @table @asis
15699 @item @code{package} (default: @code{mumble})
15700 Package that contains @code{bin/murmurd}.
15701
15702 @item @code{user} (default: @code{"murmur"})
15703 User who will run the Murmur server.
15704
15705 @item @code{group} (default: @code{"murmur"})
15706 Group of the user who will run the murmur server.
15707
15708 @item @code{port} (default: @code{64738})
15709 Port on which the server will listen.
15710
15711 @item @code{welcome-text} (default: @code{""})
15712 Welcome text sent to clients when they connect.
15713
15714 @item @code{server-password} (default: @code{""})
15715 Password the clients have to enter in order to connect.
15716
15717 @item @code{max-users} (default: @code{100})
15718 Maximum of users that can be connected to the server at once.
15719
15720 @item @code{max-user-bandwidth} (default: @code{#f})
15721 Maximum voice traffic a user can send per second.
15722
15723 @item @code{database-file} (default: @code{"/var/lib/murmur/db.sqlite"})
15724 File name of the sqlite database.
15725 The service's user will become the owner of the directory.
15726
15727 @item @code{log-file} (default: @code{"/var/log/murmur/murmur.log"})
15728 File name of the log file.
15729 The service's user will become the owner of the directory.
15730
15731 @item @code{autoban-attempts} (default: @code{10})
15732 Maximum number of logins a user can make in @code{autoban-timeframe}
15733 without getting auto banned for @code{autoban-time}.
15734
15735 @item @code{autoban-timeframe} (default: @code{120})
15736 Timeframe for autoban in seconds.
15737
15738 @item @code{autoban-time} (default: @code{300})
15739 Amount of time in seconds for which a client gets banned
15740 when violating the autoban limits.
15741
15742 @item @code{opus-threshold} (default: @code{100})
15743 Percentage of clients that need to support opus
15744 before switching over to opus audio codec.
15745
15746 @item @code{channel-nesting-limit} (default: @code{10})
15747 How deep channels can be nested at maximum.
15748
15749 @item @code{channelname-regex} (default: @code{#f})
15750 A string in from of a Qt regular expression that channel names must conform to.
15751
15752 @item @code{username-regex} (default: @code{#f})
15753 A string in from of a Qt regular expression that user names must conform to.
15754
15755 @item @code{text-message-length} (default: @code{5000})
15756 Maximum size in bytes that a user can send in one text chat message.
15757
15758 @item @code{image-message-length} (default: @code{(* 128 1024)})
15759 Maximum size in bytes that a user can send in one image message.
15760
15761 @item @code{cert-required?} (default: @code{#f})
15762 If it is set to @code{#t} clients that use weak password authentification
15763 will not be accepted. Users must have completed the certificate wizard to join.
15764
15765 @item @code{remember-channel?} (defualt @code{#f})
15766 Should murmur remember the last channel each user was in when they disconnected
15767 and put them into the remembered channel when they rejoin.
15768
15769 @item @code{allow-html?} (default: @code{#f})
15770 Should html be allowed in text messages, user comments, and channel descriptions.
15771
15772 @item @code{allow-ping?} (default: @code{#f})
15773 Setting to true exposes the current user count, the maximum user count, and
15774 the server's maximum bandwidth per client to unauthenticated users. In the
15775 Mumble client, this information is shown in the Connect dialog.
15776
15777 Disabling this setting will prevent public listing of the server.
15778
15779 @item @code{bonjour?} (default: @code{#f})
15780 Should the server advertise itself in the local network through the bonjour protocol.
15781
15782 @item @code{send-version?} (default: @code{#f})
15783 Should the murmur server version be exposed in ping requests.
15784
15785 @item @code{log-days} (default: @code{31})
15786 Murmur also stores logs in the database, which are accessible via RPC.
15787 The default is 31 days of months, but you can set this setting to 0 to keep logs forever,
15788 or -1 to disable logging to the database.
15789
15790 @item @code{obfuscate-ips?} (default @code{#t})
15791 Should logged ips be obfuscated to protect the privacy of users.
15792
15793 @item @code{ssl-cert} (default: @code{#f})
15794 File name of the SSL/TLS certificate used for encrypted connections.
15795
15796 @example
15797 (ssl-cert "/etc/letsencrypt/live/example.com/fullchain.pem")
15798 @end example
15799 @item @code{ssl-key} (default: @code{#f})
15800 Filepath to the ssl private key used for encrypted connections.
15801 @example
15802 (ssl-key "/etc/letsencrypt/live/example.com/privkey.pem")
15803 @end example
15804
15805 @item @code{ssl-dh-params} (default: @code{#f})
15806 File name of a PEM-encoded file with Diffie-Hellman parameters
15807 for the SSL/TLS encryption. Alternatively you set it to
15808 @code{"@@ffdhe2048"}, @code{"@@ffdhe3072"}, @code{"@@ffdhe4096"}, @code{"@@ffdhe6144"}
15809 or @code{"@@ffdhe8192"} to use bundled parameters from RFC 7919.
15810
15811 @item @code{ssl-ciphers} (default: @code{#f})
15812 The @code{ssl-ciphers} option chooses the cipher suites to make available for use
15813 in SSL/TLS.
15814
15815 This option is specified using
15816 @uref{https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT,
15817 OpenSSL cipher list notation}.
15818
15819 It is recommended that you try your cipher string using 'openssl ciphers <string>'
15820 before setting it here, to get a feel for which cipher suites you will get.
15821 After setting this option, it is recommend that you inspect your Murmur log
15822 to ensure that Murmur is using the cipher suites that you expected it to.
15823
15824 Note: Changing this option may impact the backwards compatibility of your
15825 Murmur server, and can remove the ability for older Mumble clients to be able
15826 to connect to it.
15827
15828 @item @code{public-registration} (default: @code{#f})
15829 Must be a @code{<murmur-public-registration-configuration>} record or @code{#f}.
15830
15831 You can optionally register your server in the public server list that the
15832 @code{mumble} client shows on startup.
15833 You cannot register your server if you have set a @code{server-password},
15834 or set @code{allow-ping} to @code{#f}.
15835
15836 It might take a few hours until it shows up in the public list.
15837
15838 @item @code{file} (default: @code{#f})
15839 Optional alternative override for this configuration.
15840 @end table
15841 @end deftp
15842
15843 @deftp {Data Type} murmur-public-registration-configuration
15844 Configuration for public registration of a murmur service.
15845
15846 @table @asis
15847 @item @code{name}
15848 This is a display name for your server. Not to be confused with the hostname.
15849
15850 @item @code{password}
15851 A password to identify your registration.
15852 Subsequent updates will need the same password. Don't lose your password.
15853
15854 @item @code{url}
15855 This should be a @code{http://} or @code{https://} link to your web
15856 site.
15857
15858 @item @code{hostname} (default: @code{#f})
15859 By default your server will be listed by its IP address.
15860 If it is set your server will be linked by this host name instead.
15861 @end table
15862 @end deftp
15863
15864
15865
15866 @node Monitoring Services
15867 @subsubsection Monitoring Services
15868
15869 @subsubheading Tailon Service
15870
15871 @uref{https://tailon.readthedocs.io/, Tailon} is a web application for
15872 viewing and searching log files.
15873
15874 The following example will configure the service with default values.
15875 By default, Tailon can be accessed on port 8080 (@code{http://localhost:8080}).
15876
15877 @example
15878 (service tailon-service-type)
15879 @end example
15880
15881 The following example customises more of the Tailon configuration,
15882 adding @command{sed} to the list of allowed commands.
15883
15884 @example
15885 (service tailon-service-type
15886 (tailon-configuration
15887 (config-file
15888 (tailon-configuration-file
15889 (allowed-commands '("tail" "grep" "awk" "sed"))))))
15890 @end example
15891
15892
15893 @deftp {Data Type} tailon-configuration
15894 Data type representing the configuration of Tailon.
15895 This type has the following parameters:
15896
15897 @table @asis
15898 @item @code{config-file} (default: @code{(tailon-configuration-file)})
15899 The configuration file to use for Tailon. This can be set to a
15900 @dfn{tailon-configuration-file} record value, or any gexp
15901 (@pxref{G-Expressions}).
15902
15903 For example, to instead use a local file, the @code{local-file} function
15904 can be used:
15905
15906 @example
15907 (service tailon-service-type
15908 (tailon-configuration
15909 (config-file (local-file "./my-tailon.conf"))))
15910 @end example
15911
15912 @item @code{package} (default: @code{tailon})
15913 The tailon package to use.
15914
15915 @end table
15916 @end deftp
15917
15918 @deftp {Data Type} tailon-configuration-file
15919 Data type representing the configuration options for Tailon.
15920 This type has the following parameters:
15921
15922 @table @asis
15923 @item @code{files} (default: @code{(list "/var/log")})
15924 List of files to display. The list can include strings for a single file
15925 or directory, or a list, where the first item is the name of a
15926 subsection, and the remaining items are the files or directories in that
15927 subsection.
15928
15929 @item @code{bind} (default: @code{"localhost:8080"})
15930 Address and port to which Tailon should bind on.
15931
15932 @item @code{relative-root} (default: @code{#f})
15933 URL path to use for Tailon, set to @code{#f} to not use a path.
15934
15935 @item @code{allow-transfers?} (default: @code{#t})
15936 Allow downloading the log files in the web interface.
15937
15938 @item @code{follow-names?} (default: @code{#t})
15939 Allow tailing of not-yet existent files.
15940
15941 @item @code{tail-lines} (default: @code{200})
15942 Number of lines to read initially from each file.
15943
15944 @item @code{allowed-commands} (default: @code{(list "tail" "grep" "awk")})
15945 Commands to allow running. By default, @code{sed} is disabled.
15946
15947 @item @code{debug?} (default: @code{#f})
15948 Set @code{debug?} to @code{#t} to show debug messages.
15949
15950 @item @code{wrap-lines} (default: @code{#t})
15951 Initial line wrapping state in the web interface. Set to @code{#t} to
15952 initially wrap lines (the default), or to @code{#f} to initially not
15953 wrap lines.
15954
15955 @item @code{http-auth} (default: @code{#f})
15956 HTTP authentication type to use. Set to @code{#f} to disable
15957 authentication (the default). Supported values are @code{"digest"} or
15958 @code{"basic"}.
15959
15960 @item @code{users} (default: @code{#f})
15961 If HTTP authentication is enabled (see @code{http-auth}), access will be
15962 restricted to the credentials provided here. To configure users, use a
15963 list of pairs, where the first element of the pair is the username, and
15964 the 2nd element of the pair is the password.
15965
15966 @example
15967 (tailon-configuration-file
15968 (http-auth "basic")
15969 (users '(("user1" . "password1")
15970 ("user2" . "password2"))))
15971 @end example
15972
15973 @end table
15974 @end deftp
15975
15976
15977 @subsubheading Darkstat Service
15978 @cindex darkstat
15979 Darkstat is a packet sniffer that captures network traffic, calculates
15980 statistics about usage, and serves reports over HTTP.
15981
15982 @defvar {Scheme Variable} darkstat-service-type
15983 This is the service type for the
15984 @uref{https://unix4lyfe.org/darkstat/, darkstat}
15985 service, its value must be a @code{darkstat-configuration} record as in
15986 this example:
15987
15988 @example
15989 (service darkstat-service-type
15990 (darkstat-configuration
15991 (interface "eno1")))
15992 @end example
15993 @end defvar
15994
15995 @deftp {Data Type} darkstat-configuration
15996 Data type representing the configuration of @command{darkstat}.
15997
15998 @table @asis
15999 @item @code{package} (default: @code{darkstat})
16000 The darkstat package to use.
16001
16002 @item @code{interface}
16003 Capture traffic on the specified network interface.
16004
16005 @item @code{port} (default: @code{"667"})
16006 Bind the web interface to the specified port.
16007
16008 @item @code{bind-address} (default: @code{"127.0.0.1"})
16009 Bind the web interface to the specified address.
16010
16011 @item @code{base} (default: @code{"/"})
16012 Specify the path of the base URL. This can be useful if
16013 @command{darkstat} is accessed via a reverse proxy.
16014
16015 @end table
16016 @end deftp
16017
16018 @subsubheading Prometheus Node Exporter Service
16019
16020 @cindex prometheus-node-exporter
16021 The Prometheus ``node exporter'' makes hardware and operating system statistics
16022 provided by the Linux kernel available for the Prometheus monitoring system.
16023 This service should be deployed on all physical nodes and virtual machines,
16024 where monitoring these statistics is desirable.
16025
16026 @defvar {Scheme variable} prometheus-node-exporter-service-type
16027 This is the service type for the
16028 @uref{https://github.com/prometheus/node_exporter/, prometheus-node-exporter}
16029 service, its value must be a @code{prometheus-node-exporter-configuration}
16030 record as in this example:
16031
16032 @example
16033 (service prometheus-node-exporter-service-type
16034 (prometheus-node-exporter-configuration
16035 (web-listen-address ":9100")))
16036 @end example
16037 @end defvar
16038
16039 @deftp {Data Type} prometheus-node-exporter-configuration
16040 Data type representing the configuration of @command{node_exporter}.
16041
16042 @table @asis
16043 @item @code{package} (default: @code{go-github-com-prometheus-node-exporter})
16044 The prometheus-node-exporter package to use.
16045
16046 @item @code{web-listen-address} (default: @code{":9100"})
16047 Bind the web interface to the specified address.
16048
16049 @end table
16050 @end deftp
16051
16052 @node Kerberos Services
16053 @subsubsection Kerberos Services
16054 @cindex Kerberos
16055
16056 The @code{(gnu services kerberos)} module provides services relating to
16057 the authentication protocol @dfn{Kerberos}.
16058
16059 @subsubheading Krb5 Service
16060
16061 Programs using a Kerberos client library normally
16062 expect a configuration file in @file{/etc/krb5.conf}.
16063 This service generates such a file from a definition provided in the
16064 operating system declaration.
16065 It does not cause any daemon to be started.
16066
16067 No ``keytab'' files are provided by this service---you must explicitly create them.
16068 This service is known to work with the MIT client library, @code{mit-krb5}.
16069 Other implementations have not been tested.
16070
16071 @defvr {Scheme Variable} krb5-service-type
16072 A service type for Kerberos 5 clients.
16073 @end defvr
16074
16075 @noindent
16076 Here is an example of its use:
16077 @lisp
16078 (service krb5-service-type
16079 (krb5-configuration
16080 (default-realm "EXAMPLE.COM")
16081 (allow-weak-crypto? #t)
16082 (realms (list
16083 (krb5-realm
16084 (name "EXAMPLE.COM")
16085 (admin-server "groucho.example.com")
16086 (kdc "karl.example.com"))
16087 (krb5-realm
16088 (name "ARGRX.EDU")
16089 (admin-server "kerb-admin.argrx.edu")
16090 (kdc "keys.argrx.edu"))))))
16091 @end lisp
16092
16093 @noindent
16094 This example provides a Kerberos@tie{}5 client configuration which:
16095 @itemize
16096 @item Recognizes two realms, @i{viz:} ``EXAMPLE.COM'' and ``ARGRX.EDU'', both
16097 of which have distinct administration servers and key distribution centers;
16098 @item Will default to the realm ``EXAMPLE.COM'' if the realm is not explicitly
16099 specified by clients;
16100 @item Accepts services which only support encryption types known to be weak.
16101 @end itemize
16102
16103 The @code{krb5-realm} and @code{krb5-configuration} types have many fields.
16104 Only the most commonly used ones are described here.
16105 For a full list, and more detailed explanation of each, see the MIT
16106 @uref{http://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html,,krb5.conf}
16107 documentation.
16108
16109
16110 @deftp {Data Type} krb5-realm
16111 @cindex realm, kerberos
16112 @table @asis
16113 @item @code{name}
16114 This field is a string identifying the name of the realm.
16115 A common convention is to use the fully qualified DNS name of your organization,
16116 converted to upper case.
16117
16118 @item @code{admin-server}
16119 This field is a string identifying the host where the administration server is
16120 running.
16121
16122 @item @code{kdc}
16123 This field is a string identifying the key distribution center
16124 for the realm.
16125 @end table
16126 @end deftp
16127
16128 @deftp {Data Type} krb5-configuration
16129
16130 @table @asis
16131 @item @code{allow-weak-crypto?} (default: @code{#f})
16132 If this flag is @code{#t} then services which only offer encryption algorithms
16133 known to be weak will be accepted.
16134
16135 @item @code{default-realm} (default: @code{#f})
16136 This field should be a string identifying the default Kerberos
16137 realm for the client.
16138 You should set this field to the name of your Kerberos realm.
16139 If this value is @code{#f}
16140 then a realm must be specified with every Kerberos principal when invoking programs
16141 such as @command{kinit}.
16142
16143 @item @code{realms}
16144 This should be a non-empty list of @code{krb5-realm} objects, which clients may
16145 access.
16146 Normally, one of them will have a @code{name} field matching the @code{default-realm}
16147 field.
16148 @end table
16149 @end deftp
16150
16151
16152 @subsubheading PAM krb5 Service
16153 @cindex pam-krb5
16154
16155 The @code{pam-krb5} service allows for login authentication and password
16156 management via Kerberos.
16157 You will need this service if you want PAM enabled applications to authenticate
16158 users using Kerberos.
16159
16160 @defvr {Scheme Variable} pam-krb5-service-type
16161 A service type for the Kerberos 5 PAM module.
16162 @end defvr
16163
16164 @deftp {Data Type} pam-krb5-configuration
16165 Data type representing the configuration of the Kerberos 5 PAM module
16166 This type has the following parameters:
16167 @table @asis
16168 @item @code{pam-krb5} (default: @code{pam-krb5})
16169 The pam-krb5 package to use.
16170
16171 @item @code{minimum-uid} (default: @code{1000})
16172 The smallest user ID for which Kerberos authentications should be attempted.
16173 Local accounts with lower values will silently fail to authenticate.
16174 @end table
16175 @end deftp
16176
16177
16178 @node Web Services
16179 @subsubsection Web Services
16180
16181 @cindex web
16182 @cindex www
16183 @cindex HTTP
16184 The @code{(gnu services web)} module provides the Apache HTTP Server,
16185 the nginx web server, and also a fastcgi wrapper daemon.
16186
16187 @subsubheading Apache HTTP Server
16188
16189 @deffn {Scheme Variable} httpd-service-type
16190 Service type for the @uref{https://httpd.apache.org/,Apache HTTP} server
16191 (@dfn{httpd}). The value for this service type is a
16192 @code{https-configuration} record.
16193
16194 A simple example configuration is given below.
16195
16196 @example
16197 (service httpd-service-type
16198 (httpd-configuration
16199 (config
16200 (httpd-config-file
16201 (server-name "www.example.com")
16202 (document-root "/srv/http/www.example.com")))))
16203 @end example
16204
16205 Other services can also extend the @code{httpd-service-type} to add to
16206 the configuration.
16207
16208 @example
16209 (simple-service 'my-extra-server httpd-service-type
16210 (list
16211 (httpd-virtualhost
16212 "*:80"
16213 (list (string-append
16214 "ServerName "www.example.com
16215 DocumentRoot \"/srv/http/www.example.com\"")))))
16216 @end example
16217 @end deffn
16218
16219 The details for the @code{httpd-configuration}, @code{httpd-module},
16220 @code{httpd-config-file} and @code{httpd-virtualhost} record types are
16221 given below.
16222
16223 @deffn {Data Type} httpd-configuration
16224 This data type represents the configuration for the httpd service.
16225
16226 @table @asis
16227 @item @code{package} (default: @code{httpd})
16228 The httpd package to use.
16229
16230 @item @code{pid-file} (default: @code{"/var/run/httpd"})
16231 The pid file used by the shepherd-service.
16232
16233 @item @code{config} (default: @code{(httpd-config-file)})
16234 The configuration file to use with the httpd service. The default value
16235 is a @code{httpd-config-file} record, but this can also be a different
16236 G-expression that generates a file, for example a @code{plain-file}. A
16237 file outside of the store can also be specified through a string.
16238
16239 @end table
16240 @end deffn
16241
16242 @deffn {Data Type} httpd-module
16243 This data type represents a module for the httpd service.
16244
16245 @table @asis
16246 @item @code{name}
16247 The name of the module.
16248
16249 @item @code{file}
16250 The file for the module. This can be relative to the httpd package being
16251 used, the absolute location of a file, or a G-expression for a file
16252 within the store, for example @code{(file-append mod-wsgi
16253 "/modules/mod_wsgi.so")}.
16254
16255 @end table
16256 @end deffn
16257
16258 @deffn {Data Type} httpd-config-file
16259 This data type represents a configuration file for the httpd service.
16260
16261 @table @asis
16262 @item @code{modules} (default: @code{%default-httpd-modules})
16263 The modules to load. Additional modules can be added here, or loaded by
16264 additional configuration.
16265
16266 @item @code{server-root} (default: @code{httpd})
16267 The @code{ServerRoot} in the configuration file, defaults to the httpd
16268 package. Directives including @code{Include} and @code{LoadModule} are
16269 taken as relative to the server root.
16270
16271 @item @code{server-name} (default: @code{#f})
16272 The @code{ServerName} in the configuration file, used to specify the
16273 request scheme, hostname and port that the server uses to identify
16274 itself.
16275
16276 This doesn't need to be set in the server config, and can be specifyed
16277 in virtual hosts. The default is @code{#f} to not specify a
16278 @code{ServerName}.
16279
16280 @item @code{document-root} (default: @code{"/srv/http"})
16281 The @code{DocumentRoot} from which files will be served.
16282
16283 @item @code{listen} (default: @code{'("80")})
16284 The list of values for the @code{Listen} directives in the config
16285 file. The value should be a list of strings, when each string can
16286 specify the port number to listen on, and optionally the IP address and
16287 protocol to use.
16288
16289 @item @code{pid-file} (default: @code{"/var/run/httpd"})
16290 The @code{PidFile} to use. This should match the @code{pid-file} set in
16291 the @code{httpd-configuration} so that the Shepherd service is
16292 configured correctly.
16293
16294 @item @code{error-log} (default: @code{"/var/log/httpd/error_log"})
16295 The @code{ErrorLog} to which the server will log errors.
16296
16297 @item @code{user} (default: @code{"httpd"})
16298 The @code{User} which the server will answer requests as.
16299
16300 @item @code{group} (default: @code{"httpd"})
16301 The @code{Group} which the server will answer requests as.
16302
16303 @item @code{extra-config} (default: @code{(list "TypesConfig etc/httpd/mime.types")})
16304 A flat list of strings and G-expressions which will be added to the end
16305 of the configuration file.
16306
16307 Any values which the service is extended with will be appended to this
16308 list.
16309
16310 @end table
16311 @end deffn
16312
16313 @deffn {Data Type} httpd-virtualhost
16314 This data type represents a virtualhost configuration block for the httpd service.
16315
16316 These should be added to the extra-config for the httpd-service.
16317
16318 @example
16319 (simple-service 'my-extra-server httpd-service-type
16320 (list
16321 (httpd-virtualhost
16322 "*:80"
16323 (list (string-append
16324 "ServerName "www.example.com
16325 DocumentRoot \"/srv/http/www.example.com\"")))))
16326 @end example
16327
16328 @table @asis
16329 @item @code{addresses-and-ports}
16330 The addresses and ports for the @code{VirtualHost} directive.
16331
16332 @item @code{contents}
16333 The contents of the @code{VirtualHost} directive, this should be a list
16334 of strings and G-expressions.
16335
16336 @end table
16337 @end deffn
16338
16339 @subsubheading NGINX
16340
16341 @deffn {Scheme Variable} nginx-service-type
16342 Service type for the @uref{https://nginx.org/,NGinx} web server. The
16343 value for this service type is a @code{<nginx-configuration>} record.
16344
16345 A simple example configuration is given below.
16346
16347 @example
16348 (service nginx-service-type
16349 (nginx-configuration
16350 (server-blocks
16351 (list (nginx-server-configuration
16352 (server-name '("www.example.com"))
16353 (root "/srv/http/www.example.com"))))))
16354 @end example
16355
16356 In addition to adding server blocks to the service configuration
16357 directly, this service can be extended by other services to add server
16358 blocks, as in this example:
16359
16360 @example
16361 (simple-service 'my-extra-server nginx-service-type
16362 (list (nginx-server-configuration
16363 (root "/srv/http/extra-website")
16364 (try-files (list "$uri" "$uri/index.html")))))
16365 @end example
16366 @end deffn
16367
16368 At startup, @command{nginx} has not yet read its configuration file, so
16369 it uses a default file to log error messages. If it fails to load its
16370 configuration file, that is where error messages are logged. After the
16371 configuration file is loaded, the default error log file changes as per
16372 configuration. In our case, startup error messages can be found in
16373 @file{/var/run/nginx/logs/error.log}, and after configuration in
16374 @file{/var/log/nginx/error.log}. The second location can be changed
16375 with the @var{log-directory} configuration option.
16376
16377 @deffn {Data Type} nginx-configuration
16378 This data type represents the configuration for NGinx. Some
16379 configuration can be done through this and the other provided record
16380 types, or alternatively, a config file can be provided.
16381
16382 @table @asis
16383 @item @code{nginx} (default: @code{nginx})
16384 The nginx package to use.
16385
16386 @item @code{log-directory} (default: @code{"/var/log/nginx"})
16387 The directory to which NGinx will write log files.
16388
16389 @item @code{run-directory} (default: @code{"/var/run/nginx"})
16390 The directory in which NGinx will create a pid file, and write temporary
16391 files.
16392
16393 @item @code{server-blocks} (default: @code{'()})
16394 A list of @dfn{server blocks} to create in the generated configuration
16395 file, the elements should be of type
16396 @code{<nginx-server-configuration>}.
16397
16398 The following example would setup NGinx to serve @code{www.example.com}
16399 from the @code{/srv/http/www.example.com} directory, without using
16400 HTTPS.
16401 @example
16402 (service nginx-service-type
16403 (nginx-configuration
16404 (server-blocks
16405 (list (nginx-server-configuration
16406 (server-name '("www.example.com"))
16407 (root "/srv/http/www.example.com"))))))
16408 @end example
16409
16410 @item @code{upstream-blocks} (default: @code{'()})
16411 A list of @dfn{upstream blocks} to create in the generated configuration
16412 file, the elements should be of type
16413 @code{<nginx-upstream-configuration>}.
16414
16415 Configuring upstreams through the @code{upstream-blocks} can be useful
16416 when combined with @code{locations} in the
16417 @code{<nginx-server-configuration>} records. The following example
16418 creates a server configuration with one location configuration, that
16419 will proxy requests to a upstream configuration, which will handle
16420 requests with two servers.
16421
16422 @example
16423 (service
16424 nginx-service-type
16425 (nginx-configuration
16426 (server-blocks
16427 (list (nginx-server-configuration
16428 (server-name '("www.example.com"))
16429 (root "/srv/http/www.example.com")
16430 (locations
16431 (list
16432 (nginx-location-configuration
16433 (uri "/path1")
16434 (body '("proxy_pass http://server-proxy;"))))))))
16435 (upstream-blocks
16436 (list (nginx-upstream-configuration
16437 (name "server-proxy")
16438 (servers (list "server1.example.com"
16439 "server2.example.com")))))))
16440 @end example
16441
16442 @item @code{file} (default: @code{#f})
16443 If a configuration @var{file} is provided, this will be used, rather than
16444 generating a configuration file from the provided @code{log-directory},
16445 @code{run-directory}, @code{server-blocks} and @code{upstream-blocks}. For
16446 proper operation, these arguments should match what is in @var{file} to ensure
16447 that the directories are created when the service is activated.
16448
16449 This can be useful if you have an existing configuration file, or it's
16450 not possible to do what is required through the other parts of the
16451 nginx-configuration record.
16452
16453 @item @code{server-names-hash-bucket-size} (default: @code{#f})
16454 Bucket size for the server names hash tables, defaults to @code{#f} to
16455 use the size of the processors cache line.
16456
16457 @item @code{server-names-hash-bucket-max-size} (default: @code{#f})
16458 Maximum bucket size for the server names hash tables.
16459
16460 @item @code{extra-content} (default: @code{""})
16461 Extra content for the @code{http} block. Should be string or a string
16462 valued G-expression.
16463
16464 @end table
16465 @end deffn
16466
16467 @deftp {Data Type} nginx-server-configuration
16468 Data type representing the configuration of an nginx server block.
16469 This type has the following parameters:
16470
16471 @table @asis
16472 @item @code{listen} (default: @code{'("80" "443 ssl")})
16473 Each @code{listen} directive sets the address and port for IP, or the
16474 path for a UNIX-domain socket on which the server will accept requests.
16475 Both address and port, or only address or only port can be specified.
16476 An address may also be a hostname, for example:
16477
16478 @example
16479 '("127.0.0.1:8000" "127.0.0.1" "8000" "*:8000" "localhost:8000")
16480 @end example
16481
16482 @item @code{server-name} (default: @code{(list 'default)})
16483 A list of server names this server represents. @code{'default} represents the
16484 default server for connections matching no other server.
16485
16486 @item @code{root} (default: @code{"/srv/http"})
16487 Root of the website nginx will serve.
16488
16489 @item @code{locations} (default: @code{'()})
16490 A list of @dfn{nginx-location-configuration} or
16491 @dfn{nginx-named-location-configuration} records to use within this
16492 server block.
16493
16494 @item @code{index} (default: @code{(list "index.html")})
16495 Index files to look for when clients ask for a directory. If it cannot be found,
16496 Nginx will send the list of files in the directory.
16497
16498 @item @code{try-files} (default: @code{'()})
16499 A list of files whose existence is checked in the specified order.
16500 @code{nginx} will use the first file it finds to process the request.
16501
16502 @item @code{ssl-certificate} (default: @code{#f})
16503 Where to find the certificate for secure connections. Set it to @code{#f} if
16504 you don't have a certificate or you don't want to use HTTPS.
16505
16506 @item @code{ssl-certificate-key} (default: @code{#f})
16507 Where to find the private key for secure connections. Set it to @code{#f} if
16508 you don't have a key or you don't want to use HTTPS.
16509
16510 @item @code{server-tokens?} (default: @code{#f})
16511 Whether the server should add its configuration to response.
16512
16513 @item @code{raw-content} (default: @code{'()})
16514 A list of raw lines added to the server block.
16515
16516 @end table
16517 @end deftp
16518
16519 @deftp {Data Type} nginx-upstream-configuration
16520 Data type representing the configuration of an nginx @code{upstream}
16521 block. This type has the following parameters:
16522
16523 @table @asis
16524 @item @code{name}
16525 Name for this group of servers.
16526
16527 @item @code{servers}
16528 Specify the addresses of the servers in the group. The address can be
16529 specified as a IP address (e.g. @samp{127.0.0.1}), domain name
16530 (e.g. @samp{backend1.example.com}) or a path to a UNIX socket using the
16531 prefix @samp{unix:}. For addresses using an IP address or domain name,
16532 the default port is 80, and a different port can be specified
16533 explicitly.
16534
16535 @end table
16536 @end deftp
16537
16538 @deftp {Data Type} nginx-location-configuration
16539 Data type representing the configuration of an nginx @code{location}
16540 block. This type has the following parameters:
16541
16542 @table @asis
16543 @item @code{uri}
16544 URI which this location block matches.
16545
16546 @anchor{nginx-location-configuration body}
16547 @item @code{body}
16548 Body of the location block, specified as a list of strings. This can contain
16549 many
16550 configuration directives. For example, to pass requests to a upstream
16551 server group defined using an @code{nginx-upstream-configuration} block,
16552 the following directive would be specified in the body @samp{(list "proxy_pass
16553 http://upstream-name;")}.
16554
16555 @end table
16556 @end deftp
16557
16558 @deftp {Data Type} nginx-named-location-configuration
16559 Data type representing the configuration of an nginx named location
16560 block. Named location blocks are used for request redirection, and not
16561 used for regular request processing. This type has the following
16562 parameters:
16563
16564 @table @asis
16565 @item @code{name}
16566 Name to identify this location block.
16567
16568 @item @code{body}
16569 @xref{nginx-location-configuration body}, as the body for named location
16570 blocks can be used in a similar way to the
16571 @code{nginx-location-configuration body}. One restriction is that the
16572 body of a named location block cannot contain location blocks.
16573
16574 @end table
16575 @end deftp
16576
16577 @cindex fastcgi
16578 @cindex fcgiwrap
16579 FastCGI is an interface between the front-end and the back-end of a web
16580 service. It is a somewhat legacy facility; new web services should
16581 generally just talk HTTP between the front-end and the back-end.
16582 However there are a number of back-end services such as PHP or the
16583 optimized HTTP Git repository access that use FastCGI, so we have
16584 support for it in Guix.
16585
16586 To use FastCGI, you configure the front-end web server (e.g., nginx) to
16587 dispatch some subset of its requests to the fastcgi backend, which
16588 listens on a local TCP or UNIX socket. There is an intermediary
16589 @code{fcgiwrap} program that sits between the actual backend process and
16590 the web server. The front-end indicates which backend program to run,
16591 passing that information to the @code{fcgiwrap} process.
16592
16593 @defvr {Scheme Variable} fcgiwrap-service-type
16594 A service type for the @code{fcgiwrap} FastCGI proxy.
16595 @end defvr
16596
16597 @deftp {Data Type} fcgiwrap-configuration
16598 Data type representing the configuration of the @code{fcgiwrap} serice.
16599 This type has the following parameters:
16600 @table @asis
16601 @item @code{package} (default: @code{fcgiwrap})
16602 The fcgiwrap package to use.
16603
16604 @item @code{socket} (default: @code{tcp:127.0.0.1:9000})
16605 The socket on which the @code{fcgiwrap} process should listen, as a
16606 string. Valid @var{socket} values include
16607 @code{unix:@var{/path/to/unix/socket}},
16608 @code{tcp:@var{dot.ted.qu.ad}:@var{port}} and
16609 @code{tcp6:[@var{ipv6_addr}]:port}.
16610
16611 @item @code{user} (default: @code{fcgiwrap})
16612 @itemx @code{group} (default: @code{fcgiwrap})
16613 The user and group names, as strings, under which to run the
16614 @code{fcgiwrap} process. The @code{fastcgi} service will ensure that if
16615 the user asks for the specific user or group names @code{fcgiwrap} that
16616 the corresponding user and/or group is present on the system.
16617
16618 It is possible to configure a FastCGI-backed web service to pass HTTP
16619 authentication information from the front-end to the back-end, and to
16620 allow @code{fcgiwrap} to run the back-end process as a corresponding
16621 local user. To enable this capability on the back-end., run
16622 @code{fcgiwrap} as the @code{root} user and group. Note that this
16623 capability also has to be configured on the front-end as well.
16624 @end table
16625 @end deftp
16626
16627 @cindex php-fpm
16628 PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation
16629 with some additional features useful for sites of any size.
16630
16631 These features include:
16632 @itemize @bullet
16633 @item Adaptive process spawning
16634 @item Basic statistics (similar to Apache's mod_status)
16635 @item Advanced process management with graceful stop/start
16636 @item Ability to start workers with different uid/gid/chroot/environment
16637 and different php.ini (replaces safe_mode)
16638 @item Stdout & stderr logging
16639 @item Emergency restart in case of accidental opcode cache destruction
16640 @item Accelerated upload support
16641 @item Support for a "slowlog"
16642 @item Enhancements to FastCGI, such as fastcgi_finish_request() -
16643 a special function to finish request & flush all data while continuing to do
16644 something time-consuming (video converting, stats processing, etc.)
16645 @end itemize
16646 ... and much more.
16647
16648 @defvr {Scheme Variable} php-fpm-service-type
16649 A Service type for @code{php-fpm}.
16650 @end defvr
16651
16652 @deftp {Data Type} php-fpm-configuration
16653 Data Type for php-fpm service configuration.
16654 @table @asis
16655 @item @code{php} (default: @code{php})
16656 The php package to use.
16657 @item @code{socket} (default: @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.sock")})
16658 The address on which to accept FastCGI requests. Valid syntaxes are:
16659 @table @asis
16660 @item @code{"ip.add.re.ss:port"}
16661 Listen on a TCP socket to a specific address on a specific port.
16662 @item @code{"port"}
16663 Listen on a TCP socket to all addresses on a specific port.
16664 @item @code{"/path/to/unix/socket"}
16665 Listen on a unix socket.
16666 @end table
16667
16668 @item @code{user} (default: @code{php-fpm})
16669 User who will own the php worker processes.
16670 @item @code{group} (default: @code{php-fpm})
16671 Group of the worker processes.
16672 @item @code{socket-user} (default: @code{php-fpm})
16673 User who can speak to the php-fpm socket.
16674 @item @code{socket-group} (default: @code{php-fpm})
16675 Group that can speak to the php-fpm socket.
16676 @item @code{pid-file} (default: @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.pid")})
16677 The process id of the php-fpm process is written to this file
16678 once the service has started.
16679 @item @code{log-file} (default: @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.log")})
16680 Log for the php-fpm master process.
16681 @item @code{process-manager} (default: @code{(php-fpm-dynamic-process-manager-configuration)})
16682 Detailed settings for the php-fpm process manager.
16683 Must be either:
16684 @table @asis
16685 @item @code{<php-fpm-dynamic-process-manager-configuration>}
16686 @item @code{<php-fpm-static-process-manager-configuration>}
16687 @item @code{<php-fpm-on-demand-process-manager-configuration>}
16688 @end table
16689 @item @code{display-errors} (default @code{#f})
16690 Determines whether php errors and warning should be sent to clients
16691 and displayed in their browsers.
16692 This is useful for local php development, but a security risk for public sites,
16693 as error messages can reveal passwords and personal data.
16694 @item @code{workers-logfile} (default @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.www.log")})
16695 This file will log the @code{stderr} outputs of php worker processes.
16696 Can be set to @code{#f} to disable logging.
16697 @item @code{file} (default @code{#f})
16698 An optional override of the whole configuration.
16699 You can use the @code{mixed-text-file} function or an absolute filepath for it.
16700 @end table
16701 @end deftp
16702
16703 @deftp {Data type} php-fpm-dynamic-process-manager-configuration
16704 Data Type for the @code{dynamic} php-fpm process manager. With the
16705 @code{dynamic} process manager, spare worker processes are kept around
16706 based on it's configured limits.
16707 @table @asis
16708 @item @code{max-children} (default: @code{5})
16709 Maximum of worker processes.
16710 @item @code{start-servers} (default: @code{2})
16711 How many worker processes should be started on start-up.
16712 @item @code{min-spare-servers} (default: @code{1})
16713 How many spare worker processes should be kept around at minimum.
16714 @item @code{max-spare-servers} (default: @code{3})
16715 How many spare worker processes should be kept around at maximum.
16716 @end table
16717 @end deftp
16718
16719 @deftp {Data type} php-fpm-static-process-manager-configuration
16720 Data Type for the @code{static} php-fpm process manager. With the
16721 @code{static} process manager, an unchanging number of worker processes
16722 are created.
16723 @table @asis
16724 @item @code{max-children} (default: @code{5})
16725 Maximum of worker processes.
16726 @end table
16727 @end deftp
16728
16729 @deftp {Data type} php-fpm-on-demand-process-manager-configuration
16730 Data Type for the @code{on-demand} php-fpm process manager. With the
16731 @code{on-demand} process manager, worker processes are only created as
16732 requests arrive.
16733 @table @asis
16734 @item @code{max-children} (default: @code{5})
16735 Maximum of worker processes.
16736 @item @code{process-idle-timeout} (default: @code{10})
16737 The time in seconds after which a process with no requests is killed.
16738 @end table
16739 @end deftp
16740
16741
16742 @deffn {Scheme Procedure} nginx-php-fpm-location @
16743 [#:nginx-package nginx] @
16744 [socket (string-append "/var/run/php" @
16745 (version-major (package-version php)) @
16746 "-fpm.sock")]
16747 A helper function to quickly add php to an @code{nginx-server-configuration}.
16748 @end deffn
16749
16750 A simple services setup for nginx with php can look like this:
16751 @example
16752 (services (cons* (dhcp-client-service)
16753 (service php-fpm-service-type)
16754 (service nginx-service-type
16755 (nginx-server-configuration
16756 (server-name '("example.com"))
16757 (root "/srv/http/")
16758 (locations
16759 (list (nginx-php-location)))
16760 (https-port #f)
16761 (ssl-certificate #f)
16762 (ssl-certificate-key #f)))
16763 %base-services))
16764 @end example
16765
16766 @cindex cat-avatar-generator
16767 The cat avatar generator is a simple service to demonstrate the use of php-fpm
16768 in @code{Nginx}. It is used to generate cat avatar from a seed, for instance
16769 the hash of a user's email address.
16770
16771 @deffn {Scheme Procedure} cat-avatar-generator-serice @
16772 [#:cache-dir "/var/cache/cat-avatar-generator"] @
16773 [#:package cat-avatar-generator] @
16774 [#:configuration (nginx-server-configuration)]
16775 Returns an nginx-server-configuration that inherits @code{configuration}. It
16776 extends the nginx configuration to add a server block that serves @code{package},
16777 a version of cat-avatar-generator. During execution, cat-avatar-generator will
16778 be able to use @code{cache-dir} as its cache directory.
16779 @end deffn
16780
16781 A simple setup for cat-avatar-generator can look like this:
16782 @example
16783 (services (cons* (cat-avatar-generator-service
16784 #:configuration
16785 (nginx-server-configuration
16786 (server-name '("example.com"))))
16787 ...
16788 %base-services))
16789 @end example
16790
16791 @subsubheading Hpcguix-web
16792
16793 @cindex hpcguix-web
16794 The @uref{hpcguix-web, https://github.com/UMCUGenetics/hpcguix-web/}
16795 program is a customizable web interface to browse Guix packages,
16796 initially designed for users of high-performance computing (HPC)
16797 clusters.
16798
16799 @defvr {Scheme Variable} hpcguix-web-service-type
16800 The service type for @code{hpcguix-web}.
16801 @end defvr
16802
16803 @deftp {Data Type} hpcguix-web-configuration
16804 Data type for the hpcguix-web service configuration.
16805
16806 @table @asis
16807 @item @code{specs}
16808 A gexp (@pxref{G-Expressions}) specifying the hpcguix-web service
16809 configuration. The main items available in this spec are:
16810
16811 @table @asis
16812 @item @code{title-prefix} (default: @code{"hpcguix | "})
16813 The page title prefix.
16814
16815 @item @code{guix-command} (default: @code{"guix"})
16816 The @command{guix} command.
16817
16818 @item @code{package-filter-proc} (default: @code{(const #t)})
16819 A procedure specifying how to filter packages that are displayed.
16820
16821 @item @code{package-page-extension-proc} (default: @code{(const '())})
16822 Extension package for @code{hpcguix-web}.
16823
16824 @item @code{menu} (default: @code{'()})
16825 Additional entry in page @code{menu}.
16826 @end table
16827
16828 See the hpcguix-web repository for a
16829 @uref{https://github.com/UMCUGenetics/hpcguix-web/blob/master/hpcweb-configuration.scm,
16830 complete example}.
16831
16832 @item @code{package} (default: @code{hpcguix-web})
16833 The hpcguix-web package to use.
16834 @end table
16835 @end deftp
16836
16837 A typical hpcguix-web service declaration looks like this:
16838
16839 @example
16840 (service hpcguix-web-service-type
16841 (hpcguix-web-configuration
16842 (specs
16843 #~(define site-config
16844 (hpcweb-configuration
16845 (title-prefix "Guix-HPC - ")
16846 (menu '(("/about" "ABOUT"))))))))
16847 @end example
16848
16849 @node Certificate Services
16850 @subsubsection Certificate Services
16851
16852 @cindex Web
16853 @cindex HTTP, HTTPS
16854 @cindex Let's Encrypt
16855 @cindex TLS certificates
16856 The @code{(gnu services certbot)} module provides a service to
16857 automatically obtain a valid TLS certificate from the Let's Encrypt
16858 certificate authority. These certificates can then be used to serve
16859 content securely over HTTPS or other TLS-based protocols, with the
16860 knowledge that the client will be able to verify the server's
16861 authenticity.
16862
16863 @url{https://letsencrypt.org/, Let's Encrypt} provides the
16864 @code{certbot} tool to automate the certification process. This tool
16865 first securely generates a key on the server. It then makes a request
16866 to the Let's Encrypt certificate authority (CA) to sign the key. The CA
16867 checks that the request originates from the host in question by using a
16868 challenge-response protocol, requiring the server to provide its
16869 response over HTTP. If that protocol completes successfully, the CA
16870 signs the key, resulting in a certificate. That certificate is valid
16871 for a limited period of time, and therefore to continue to provide TLS
16872 services, the server needs to periodically ask the CA to renew its
16873 signature.
16874
16875 The certbot service automates this process: the initial key
16876 generation, the initial certification request to the Let's Encrypt
16877 service, the web server challenge/response integration, writing the
16878 certificate to disk, the automated periodic renewals, and the deployment
16879 tasks associated with the renewal (e.g. reloading services, copying keys
16880 with different permissions).
16881
16882 Certbot is run twice a day, at a random minute within the hour. It
16883 won't do anything until your certificates are due for renewal or
16884 revoked, but running it regularly would give your service a chance of
16885 staying online in case a Let's Encrypt-initiated revocation happened for
16886 some reason.
16887
16888 By using this service, you agree to the ACME Subscriber Agreement, which
16889 can be found there:
16890 @url{https://acme-v01.api.letsencrypt.org/directory}.
16891
16892 @defvr {Scheme Variable} certbot-service-type
16893 A service type for the @code{certbot} Let's Encrypt client. Its value
16894 must be a @code{certbot-configuration} record as in this example:
16895
16896 @example
16897 (define %nginx-deploy-hook
16898 (program-file
16899 "nginx-deploy-hook"
16900 #~(let ((pid (call-with-input-file "/var/run/nginx/pid" read)))
16901 (kill pid SIGHUP))))
16902
16903 (service certbot-service-type
16904 (certbot-configuration
16905 (email "foo@@example.net")
16906 (certificates
16907 (list
16908 (certificate-configuration
16909 (domains '("example.net" "www.example.net"))
16910 (deploy-hook %nginx-deploy-hook))
16911 (certificate-configuration
16912 (domains '("bar.example.net")))))))
16913 @end example
16914
16915 See below for details about @code{certbot-configuration}.
16916 @end defvr
16917
16918 @deftp {Data Type} certbot-configuration
16919 Data type representing the configuration of the @code{certbot} service.
16920 This type has the following parameters:
16921
16922 @table @asis
16923 @item @code{package} (default: @code{certbot})
16924 The certbot package to use.
16925
16926 @item @code{webroot} (default: @code{/var/www})
16927 The directory from which to serve the Let's Encrypt challenge/response
16928 files.
16929
16930 @item @code{certificates} (default: @code{()})
16931 A list of @code{certificates-configuration}s for which to generate
16932 certificates and request signatures. Each certificate has a @code{name}
16933 and several @code{domains}.
16934
16935 @item @code{email}
16936 Mandatory email used for registration, recovery contact, and important
16937 account notifications.
16938
16939 @item @code{rsa-key-size} (default: @code{2048})
16940 Size of the RSA key.
16941
16942 @item @code{default-location} (default: @i{see below})
16943 The default @code{nginx-location-configuration}. Because @code{certbot}
16944 needs to be able to serve challenges and responses, it needs to be able
16945 to run a web server. It does so by extending the @code{nginx} web
16946 service with an @code{nginx-server-configuration} listening on the
16947 @var{domains} on port 80, and which has a
16948 @code{nginx-location-configuration} for the @code{/.well-known/} URI
16949 path subspace used by Let's Encrypt. @xref{Web Services}, for more on
16950 these nginx configuration data types.
16951
16952 Requests to other URL paths will be matched by the
16953 @code{default-location}, which if present is added to all
16954 @code{nginx-server-configuration}s.
16955
16956 By default, the @code{default-location} will issue a redirect from
16957 @code{http://@var{domain}/...} to @code{https://@var{domain}/...}, leaving
16958 you to define what to serve on your site via @code{https}.
16959
16960 Pass @code{#f} to not issue a default location.
16961 @end table
16962 @end deftp
16963
16964 @deftp {Data Type} certificate-configuration
16965 Data type representing the configuration of a certificate.
16966 This type has the following parameters:
16967
16968 @table @asis
16969 @item @code{name} (default: @i{see below})
16970 This name is used by Certbot for housekeeping and in file paths; it
16971 doesn't affect the content of the certificate itself. To see
16972 certificate names, run @code{certbot certificates}.
16973
16974 Its default is the first provided domain.
16975
16976 @item @code{domains} (default: @code{()})
16977 The first domain provided will be the subject CN of the certificate, and
16978 all domains will be Subject Alternative Names on the certificate.
16979
16980 @item @code{deploy-hook} (default: @code{#f})
16981 Command to be run in a shell once for each successfully issued
16982 certificate. For this command, the shell variable
16983 @code{$RENEWED_LINEAGE} will point to the config live subdirectory (for
16984 example, @samp{"/etc/letsencrypt/live/example.com"}) containing the new
16985 certificates and keys; the shell variable @code{$RENEWED_DOMAINS} will
16986 contain a space-delimited list of renewed certificate domains (for
16987 example, @samp{"example.com www.example.com"}.
16988
16989 @end table
16990 @end deftp
16991
16992 For each @code{certificate-configuration}, the certificate is saved to
16993 @code{/etc/letsencrypt/live/@var{name}/fullchain.pem} and the key is
16994 saved to @code{/etc/letsencrypt/live/@var{name}/privkey.pem}.
16995 @node DNS Services
16996 @subsubsection DNS Services
16997 @cindex DNS (domain name system)
16998 @cindex domain name system (DNS)
16999
17000 The @code{(gnu services dns)} module provides services related to the
17001 @dfn{domain name system} (DNS). It provides a server service for hosting
17002 an @emph{authoritative} DNS server for multiple zones, slave or master.
17003 This service uses @uref{https://www.knot-dns.cz/, Knot DNS}. And also a
17004 caching and forwarding DNS server for the LAN, which uses
17005 @uref{http://www.thekelleys.org.uk/dnsmasq/doc.html, dnsmasq}.
17006
17007 @subsubheading Knot Service
17008
17009 An example configuration of an authoritative server for two zones, one master
17010 and one slave, is:
17011
17012 @lisp
17013 (define-zone-entries example.org.zone
17014 ;; Name TTL Class Type Data
17015 ("@@" "" "IN" "A" "127.0.0.1")
17016 ("@@" "" "IN" "NS" "ns")
17017 ("ns" "" "IN" "A" "127.0.0.1"))
17018
17019 (define master-zone
17020 (knot-zone-configuration
17021 (domain "example.org")
17022 (zone (zone-file
17023 (origin "example.org")
17024 (entries example.org.zone)))))
17025
17026 (define slave-zone
17027 (knot-zone-configuration
17028 (domain "plop.org")
17029 (dnssec-policy "default")
17030 (master (list "plop-master"))))
17031
17032 (define plop-master
17033 (knot-remote-configuration
17034 (id "plop-master")
17035 (address (list "208.76.58.171"))))
17036
17037 (operating-system
17038 ;; ...
17039 (services (cons* (service knot-service-type
17040 (knot-configuration
17041 (remotes (list plop-master))
17042 (zones (list master-zone slave-zone))))
17043 ;; ...
17044 %base-services)))
17045 @end lisp
17046
17047 @deffn {Scheme Variable} knot-service-type
17048 This is the type for the Knot DNS server.
17049
17050 Knot DNS is an authoritative DNS server, meaning that it can serve multiple
17051 zones, that is to say domain names you would buy from a registrar. This server
17052 is not a resolver, meaning that it can only resolve names for which it is
17053 authoritative. This server can be configured to serve zones as a master server
17054 or a slave server as a per-zone basis. Slave zones will get their data from
17055 masters, and will serve it as an authoritative server. From the point of view
17056 of a resolver, there is no difference between master and slave.
17057
17058 The following data types are used to configure the Knot DNS server:
17059 @end deffn
17060
17061 @deftp {Data Type} knot-key-configuration
17062 Data type representing a key.
17063 This type has the following parameters:
17064
17065 @table @asis
17066 @item @code{id} (default: @code{""})
17067 An identifier for other configuration fields to refer to this key. IDs must
17068 be unique and must not be empty.
17069
17070 @item @code{algorithm} (default: @code{#f})
17071 The algorithm to use. Choose between @code{#f}, @code{'hmac-md5},
17072 @code{'hmac-sha1}, @code{'hmac-sha224}, @code{'hmac-sha256}, @code{'hmac-sha384}
17073 and @code{'hmac-sha512}.
17074
17075 @item @code{secret} (default: @code{""})
17076 The secret key itself.
17077
17078 @end table
17079 @end deftp
17080
17081 @deftp {Data Type} knot-acl-configuration
17082 Data type representing an Access Control List (ACL) configuration.
17083 This type has the following parameters:
17084
17085 @table @asis
17086 @item @code{id} (default: @code{""})
17087 An identifier for ether configuration fields to refer to this key. IDs must be
17088 unique and must not be empty.
17089
17090 @item @code{address} (default: @code{'()})
17091 An ordered list of IP addresses, network subnets, or network ranges represented
17092 with strings. The query must match one of them. Empty value means that
17093 address match is not required.
17094
17095 @item @code{key} (default: @code{'()})
17096 An ordered list of references to keys represented with strings. The string
17097 must match a key ID defined in a @code{knot-key-configuration}. No key means
17098 that a key is not require to match that ACL.
17099
17100 @item @code{action} (default: @code{'()})
17101 An ordered list of actions that are permitted or forbidden by this ACL. Possible
17102 values are lists of zero or more elements from @code{'transfer}, @code{'notify}
17103 and @code{'update}.
17104
17105 @item @code{deny?} (default: @code{#f})
17106 When true, the ACL defines restrictions. Listed actions are forbidden. When
17107 false, listed actions are allowed.
17108
17109 @end table
17110 @end deftp
17111
17112 @deftp {Data Type} zone-entry
17113 Data type represnting a record entry in a zone file.
17114 This type has the following parameters:
17115
17116 @table @asis
17117 @item @code{name} (default: @code{"@@"})
17118 The name of the record. @code{"@@"} refers to the origin of the zone. Names
17119 are relative to the origin of the zone. For example, in the @code{example.org}
17120 zone, @code{"ns.example.org"} actually refers to @code{ns.example.org.example.org}.
17121 Names ending with a dot are absolute, which means that @code{"ns.example.org."}
17122 refers to @code{ns.example.org}.
17123
17124 @item @code{ttl} (default: @code{""})
17125 The Time-To-Live (TTL) of this record. If not set, the default TTL is used.
17126
17127 @item @code{class} (default: @code{"IN"})
17128 The class of the record. Knot currently supports only @code{"IN"} and
17129 partially @code{"CH"}.
17130
17131 @item @code{type} (default: @code{"A"})
17132 The type of the record. Common types include A (IPv4 address), AAAA (IPv6
17133 address), NS (Name Server) and MX (Mail eXchange). Many other types are
17134 defined.
17135
17136 @item @code{data} (default: @code{""})
17137 The data contained in the record. For instance an IP address associated with
17138 an A record, or a domain name associated with an NS record. Remember that
17139 domain names are relative to the origin unless they end with a dot.
17140
17141 @end table
17142 @end deftp
17143
17144 @deftp {Data Type} zone-file
17145 Data type representing the content of a zone file.
17146 This type has the following parameters:
17147
17148 @table @asis
17149 @item @code{entries} (default: @code{'()})
17150 The list of entries. The SOA record is taken care of, so you don't need to
17151 put it in the list of entries. This list should probably contain an entry
17152 for your primary authoritative DNS server. Other than using a list of entries
17153 directly, you can use @code{define-zone-entries} to define a object containing
17154 the list of entries more easily, that you can later pass to the @code{entries}
17155 field of the @code{zone-file}.
17156
17157 @item @code{origin} (default: @code{""})
17158 The name of your zone. This parameter cannot be empty.
17159
17160 @item @code{ns} (default: @code{"ns"})
17161 The domain of your primary authoritative DNS server. The name is relative to
17162 the origin, unless it ends with a dot. It is mandatory that this primary
17163 DNS server corresponds to an NS record in the zone and that it is associated
17164 to an IP address in the list of entries.
17165
17166 @item @code{mail} (default: @code{"hostmaster"})
17167 An email address people can contact you at, as the owner of the zone. This
17168 is translated as @code{<mail>@@<origin>}.
17169
17170 @item @code{serial} (default: @code{1})
17171 The serial number of the zone. As this is used to keep track of changes by
17172 both slaves and resolvers, it is mandatory that it @emph{never} decreases.
17173 Always increment it when you make a change in your zone.
17174
17175 @item @code{refresh} (default: @code{(* 2 24 3600)})
17176 The frequency at which slaves will do a zone transfer. This value is a number
17177 of seconds. It can be computed by multiplications or with
17178 @code{(string->duration)}.
17179
17180 @item @code{retry} (default: @code{(* 15 60)})
17181 The period after which a slave will retry to contact its master when it fails
17182 to do so a first time.
17183
17184 @item @code{expiry} (default: @code{(* 14 24 3600)})
17185 Default TTL of records. Existing records are considered correct for at most
17186 this amount of time. After this period, resolvers will invalidate their cache
17187 and check again that it still exists.
17188
17189 @item @code{nx} (default: @code{3600})
17190 Default TTL of inexistant records. This delay is usually short because you want
17191 your new domains to reach everyone quickly.
17192
17193 @end table
17194 @end deftp
17195
17196 @deftp {Data Type} knot-remote-configuration
17197 Data type representing a remote configuration.
17198 This type has the following parameters:
17199
17200 @table @asis
17201 @item @code{id} (default: @code{""})
17202 An identifier for other configuration fields to refer to this remote. IDs must
17203 be unique and must not be empty.
17204
17205 @item @code{address} (default: @code{'()})
17206 An ordered list of destination IP addresses. Addresses are tried in sequence.
17207 An optional port can be given with the @@ separator. For instance:
17208 @code{(list "1.2.3.4" "2.3.4.5@@53")}. Default port is 53.
17209
17210 @item @code{via} (default: @code{'()})
17211 An ordered list of source IP addresses. An empty list will have Knot choose
17212 an appropriate source IP. An optional port can be given with the @@ separator.
17213 The default is to choose at random.
17214
17215 @item @code{key} (default: @code{#f})
17216 A reference to a key, that is a string containing the identifier of a key
17217 defined in a @code{knot-key-configuration} field.
17218
17219 @end table
17220 @end deftp
17221
17222 @deftp {Data Type} knot-keystore-configuration
17223 Data type representing a keystore to hold dnssec keys.
17224 This type has the following parameters:
17225
17226 @table @asis
17227 @item @code{id} (default: @code{""})
17228 The id of the keystore. It must not be empty.
17229
17230 @item @code{backend} (default: @code{'pem})
17231 The backend to store the keys in. Can be @code{'pem} or @code{'pkcs11}.
17232
17233 @item @code{config} (default: @code{"/var/lib/knot/keys/keys"})
17234 The configuration string of the backend. An example for the PKCS#11 is:
17235 @code{"pkcs11:token=knot;pin-value=1234 /gnu/store/.../lib/pkcs11/libsofthsm2.so"}.
17236 For the pem backend, the string reprensents a path in the file system.
17237
17238 @end table
17239 @end deftp
17240
17241 @deftp {Data Type} knot-policy-configuration
17242 Data type representing a dnssec policy. Knot DNS is able to automatically
17243 sign your zones. It can either generate and manage your keys automatically or
17244 use keys that you generate.
17245
17246 Dnssec is usually implemented using two keys: a Key Signing Key (KSK) that is
17247 used to sign the second, and a Zone Signing Key (ZSK) that is used to sign the
17248 zone. In order to be trusted, the KSK needs to be present in the parent zone
17249 (usually a top-level domain). If your registrar supports dnssec, you will
17250 have to send them your KSK's hash so they can add a DS record in their zone.
17251 This is not automated and need to be done each time you change your KSK.
17252
17253 The policy also defines the lifetime of keys. Usually, ZSK can be changed
17254 easily and use weaker cryptographic functions (they use lower parameters) in
17255 order to sign records quickly, so they are changed often. The KSK however
17256 requires manual interaction with the registrar, so they are changed less often
17257 and use stronger parameters because they sign only one record.
17258
17259 This type has the following parameters:
17260
17261 @table @asis
17262 @item @code{id} (default: @code{""})
17263 The id of the policy. It must not be empty.
17264
17265 @item @code{keystore} (default: @code{"default"})
17266 A reference to a keystore, that is a string containing the identifier of a
17267 keystore defined in a @code{knot-keystore-configuration} field. The
17268 @code{"default"} identifier means the default keystore (a kasp database that
17269 was setup by this service).
17270
17271 @item @code{manual?} (default: @code{#f})
17272 Whether the key management is manual or automatic.
17273
17274 @item @code{single-type-signing?} (default: @code{#f})
17275 When @code{#t}, use the Single-Type Signing Scheme.
17276
17277 @item @code{algorithm} (default: @code{"ecdsap256sha256"})
17278 An algorithm of signing keys and issued signatures.
17279
17280 @item @code{ksk-size} (default: @code{256})
17281 The length of the KSK. Note that this value is correct for the default
17282 algorithm, but would be unsecure for other algorithms.
17283
17284 @item @code{zsk-size} (default: @code{256})
17285 The length of the ZSK. Note that this value is correct for the default
17286 algorithm, but would be unsecure for other algorithms.
17287
17288 @item @code{dnskey-ttl} (default: @code{'default})
17289 The TTL value for DNSKEY records added into zone apex. The special
17290 @code{'default} value means same as the zone SOA TTL.
17291
17292 @item @code{zsk-lifetime} (default: @code{(* 30 24 3600)})
17293 The period between ZSK publication and the next rollover initiation.
17294
17295 @item @code{propagation-delay} (default: @code{(* 24 3600)})
17296 An extra delay added for each key rollover step. This value should be high
17297 enough to cover propagation of data from the master server to all slaves.
17298
17299 @item @code{rrsig-lifetime} (default: @code{(* 14 24 3600)})
17300 A validity period of newly issued signatures.
17301
17302 @item @code{rrsig-refresh} (default: @code{(* 7 24 3600)})
17303 A period how long before a signature expiration the signature will be refreshed.
17304
17305 @item @code{nsec3?} (default: @code{#f})
17306 When @code{#t}, NSEC3 will be used instead of NSEC.
17307
17308 @item @code{nsec3-iterations} (default: @code{5})
17309 The number of additional times the hashing is performed.
17310
17311 @item @code{nsec3-salt-length} (default: @code{8})
17312 The length of a salt field in octets, which is appended to the original owner
17313 name before hashing.
17314
17315 @item @code{nsec3-salt-lifetime} (default: @code{(* 30 24 3600)})
17316 The validity period of newly issued salt field.
17317
17318 @end table
17319 @end deftp
17320
17321 @deftp {Data Type} knot-zone-configuration
17322 Data type representing a zone served by Knot.
17323 This type has the following parameters:
17324
17325 @table @asis
17326 @item @code{domain} (default: @code{""})
17327 The domain served by this configuration. It must not be empty.
17328
17329 @item @code{file} (default: @code{""})
17330 The file where this zone is saved. This parameter is ignored by master zones.
17331 Empty means default location that depends on the domain name.
17332
17333 @item @code{zone} (default: @code{(zone-file)})
17334 The content of the zone file. This parameter is ignored by slave zones. It
17335 must contain a zone-file record.
17336
17337 @item @code{master} (default: @code{'()})
17338 A list of master remotes. When empty, this zone is a master. When set, this
17339 zone is a slave. This is a list of remotes identifiers.
17340
17341 @item @code{ddns-master} (default: @code{#f})
17342 The main master. When empty, it defaults to the first master in the list of
17343 masters.
17344
17345 @item @code{notify} (default: @code{'()})
17346 A list of slave remote identifiers.
17347
17348 @item @code{acl} (default: @code{'()})
17349 A list of acl identifiers.
17350
17351 @item @code{semantic-checks?} (default: @code{#f})
17352 When set, this adds more semantic checks to the zone.
17353
17354 @item @code{disable-any?} (default: @code{#f})
17355 When set, this forbids queries of the ANY type.
17356
17357 @item @code{zonefile-sync} (default: @code{0})
17358 The delay between a modification in memory and on disk. 0 means immediate
17359 synchronization.
17360
17361 @item @code{serial-policy} (default: @code{'increment})
17362 A policy between @code{'increment} and @code{'unixtime}.
17363
17364 @end table
17365 @end deftp
17366
17367 @deftp {Data Type} knot-configuration
17368 Data type representing the Knot configuration.
17369 This type has the following parameters:
17370
17371 @table @asis
17372 @item @code{knot} (default: @code{knot})
17373 The Knot package.
17374
17375 @item @code{run-directory} (default: @code{"/var/run/knot"})
17376 The run directory. This directory will be used for pid file and sockets.
17377
17378 @item @code{listen-v4} (default: @code{"0.0.0.0"})
17379 An ip address on which to listen.
17380
17381 @item @code{listen-v6} (default: @code{"::"})
17382 An ip address on which to listen.
17383
17384 @item @code{listen-port} (default: @code{53})
17385 A port on which to listen.
17386
17387 @item @code{keys} (default: @code{'()})
17388 The list of knot-key-configuration used by this configuration.
17389
17390 @item @code{acls} (default: @code{'()})
17391 The list of knot-acl-configuration used by this configuration.
17392
17393 @item @code{remotes} (default: @code{'()})
17394 The list of knot-remote-configuration used by this configuration.
17395
17396 @item @code{zones} (default: @code{'()})
17397 The list of knot-zone-configuration used by this configuration.
17398
17399 @end table
17400 @end deftp
17401
17402 @subsubheading Dnsmasq Service
17403
17404 @deffn {Scheme Variable} dnsmasq-service-type
17405 This is the type of the dnsmasq service, whose value should be an
17406 @code{dnsmasq-configuration} object as in this example:
17407
17408 @example
17409 (service dnsmasq-service-type
17410 (dnsmasq-configuration
17411 (no-resolv? #t)
17412 (servers '("192.168.1.1"))))
17413 @end example
17414 @end deffn
17415
17416 @deftp {Data Type} dnsmasq-configuration
17417 Data type representing the configuration of dnsmasq.
17418
17419 @table @asis
17420 @item @code{package} (default: @var{dnsmasq})
17421 Package object of the dnsmasq server.
17422
17423 @item @code{no-hosts?} (default: @code{#f})
17424 When true, don't read the hostnames in /etc/hosts.
17425
17426 @item @code{port} (default: @code{53})
17427 The port to listen on. Setting this to zero completely disables DNS
17428 responses, leaving only DHCP and/or TFTP functions.
17429
17430 @item @code{local-service?} (default: @code{#t})
17431 Accept DNS queries only from hosts whose address is on a local subnet,
17432 ie a subnet for which an interface exists on the server.
17433
17434 @item @code{listen-addresses} (default: @code{'()})
17435 Listen on the given IP addresses.
17436
17437 @item @code{resolv-file} (default: @code{"/etc/resolv.conf"})
17438 The file to read the IP address of the upstream nameservers from.
17439
17440 @item @code{no-resolv?} (default: @code{#f})
17441 When true, don't read @var{resolv-file}.
17442
17443 @item @code{servers} (default: @code{'()})
17444 Specify IP address of upstream servers directly.
17445
17446 @item @code{cache-size} (default: @code{150})
17447 Set the size of dnsmasq's cache. Setting the cache size to zero
17448 disables caching.
17449
17450 @item @code{negative-cache?} (default: @code{#t})
17451 When false, disable negative caching.
17452
17453 @end table
17454 @end deftp
17455
17456 @subsubheading ddclient Service
17457
17458 @cindex ddclient
17459 The ddclient service described below runs the ddclient daemon, which takes
17460 care of automatically updating DNS entries for service providers such as
17461 @uref{https://dyn.com/dns/, Dyn}.
17462
17463 The following example show instantiates the service with its default
17464 configuration:
17465
17466 @example
17467 (service ddclient-service-type)
17468 @end example
17469
17470 Note that ddclient needs to access credentials that are stored in a
17471 @dfn{secret file}, by default @file{/etc/ddclient/secrets} (see
17472 @code{secret-file} below.) You are expected to create this file manually, in
17473 an ``out-of-band'' fashion (you @emph{could} make this file part of the
17474 service configuration, for instance by using @code{plain-file}, but it will be
17475 world-readable @i{via} @file{/gnu/store}.) See the examples in the
17476 @file{share/ddclient} directory of the @code{ddclient} package.
17477
17478 @c %start of fragment
17479
17480 Available @code{ddclient-configuration} fields are:
17481
17482 @deftypevr {@code{ddclient-configuration} parameter} package ddclient
17483 The ddclient package.
17484
17485 @end deftypevr
17486
17487 @deftypevr {@code{ddclient-configuration} parameter} integer daemon
17488 The period after which ddclient will retry to check IP and domain name.
17489
17490 Defaults to @samp{300}.
17491
17492 @end deftypevr
17493
17494 @deftypevr {@code{ddclient-configuration} parameter} boolean syslog
17495 Use syslog for the output.
17496
17497 Defaults to @samp{#t}.
17498
17499 @end deftypevr
17500
17501 @deftypevr {@code{ddclient-configuration} parameter} string mail
17502 Mail to user.
17503
17504 Defaults to @samp{"root"}.
17505
17506 @end deftypevr
17507
17508 @deftypevr {@code{ddclient-configuration} parameter} string mail-failure
17509 Mail failed update to user.
17510
17511 Defaults to @samp{"root"}.
17512
17513 @end deftypevr
17514
17515 @deftypevr {@code{ddclient-configuration} parameter} string pid
17516 The ddclient PID file.
17517
17518 Defaults to @samp{"/var/run/ddclient/ddclient.pid"}.
17519
17520 @end deftypevr
17521
17522 @deftypevr {@code{ddclient-configuration} parameter} boolean ssl
17523 Enable SSL support.
17524
17525 Defaults to @samp{#t}.
17526
17527 @end deftypevr
17528
17529 @deftypevr {@code{ddclient-configuration} parameter} string user
17530 Specifies the user name or ID that is used when running ddclient
17531 program.
17532
17533 Defaults to @samp{"ddclient"}.
17534
17535 @end deftypevr
17536
17537 @deftypevr {@code{ddclient-configuration} parameter} string group
17538 Group of the user who will run the ddclient program.
17539
17540 Defaults to @samp{"ddclient"}.
17541
17542 @end deftypevr
17543
17544 @deftypevr {@code{ddclient-configuration} parameter} string secret-file
17545 Secret file which will be appended to @file{ddclient.conf} file. This
17546 file contains credentials for use by ddclient. You are expected to
17547 create it manually.
17548
17549 Defaults to @samp{"/etc/ddclient/secrets.conf"}.
17550
17551 @end deftypevr
17552
17553 @deftypevr {@code{ddclient-configuration} parameter} list extra-options
17554 Extra options will be appended to @file{ddclient.conf} file.
17555
17556 Defaults to @samp{()}.
17557
17558 @end deftypevr
17559
17560
17561 @c %end of fragment
17562
17563
17564 @node VPN Services
17565 @subsubsection VPN Services
17566 @cindex VPN (virtual private network)
17567 @cindex virtual private network (VPN)
17568
17569 The @code{(gnu services vpn)} module provides services related to
17570 @dfn{virtual private networks} (VPNs). It provides a @emph{client} service for
17571 your machine to connect to a VPN, and a @emph{servire} service for your machine
17572 to host a VPN. Both services use @uref{https://openvpn.net/, OpenVPN}.
17573
17574 @deffn {Scheme Procedure} openvpn-client-service @
17575 [#:config (openvpn-client-configuration)]
17576
17577 Return a service that runs @command{openvpn}, a VPN daemon, as a client.
17578 @end deffn
17579
17580 @deffn {Scheme Procedure} openvpn-server-service @
17581 [#:config (openvpn-server-configuration)]
17582
17583 Return a service that runs @command{openvpn}, a VPN daemon, as a server.
17584
17585 Both can be run simultaneously.
17586 @end deffn
17587
17588 @c %automatically generated documentation
17589
17590 Available @code{openvpn-client-configuration} fields are:
17591
17592 @deftypevr {@code{openvpn-client-configuration} parameter} package openvpn
17593 The OpenVPN package.
17594
17595 @end deftypevr
17596
17597 @deftypevr {@code{openvpn-client-configuration} parameter} string pid-file
17598 The OpenVPN pid file.
17599
17600 Defaults to @samp{"/var/run/openvpn/openvpn.pid"}.
17601
17602 @end deftypevr
17603
17604 @deftypevr {@code{openvpn-client-configuration} parameter} proto proto
17605 The protocol (UDP or TCP) used to open a channel between clients and
17606 servers.
17607
17608 Defaults to @samp{udp}.
17609
17610 @end deftypevr
17611
17612 @deftypevr {@code{openvpn-client-configuration} parameter} dev dev
17613 The device type used to represent the VPN connection.
17614
17615 Defaults to @samp{tun}.
17616
17617 @end deftypevr
17618
17619 @deftypevr {@code{openvpn-client-configuration} parameter} string ca
17620 The certificate authority to check connections against.
17621
17622 Defaults to @samp{"/etc/openvpn/ca.crt"}.
17623
17624 @end deftypevr
17625
17626 @deftypevr {@code{openvpn-client-configuration} parameter} string cert
17627 The certificate of the machine the daemon is running on. It should be
17628 signed by the authority given in @code{ca}.
17629
17630 Defaults to @samp{"/etc/openvpn/client.crt"}.
17631
17632 @end deftypevr
17633
17634 @deftypevr {@code{openvpn-client-configuration} parameter} string key
17635 The key of the machine the daemon is running on. It must be the key whose
17636 certificate is @code{cert}.
17637
17638 Defaults to @samp{"/etc/openvpn/client.key"}.
17639
17640 @end deftypevr
17641
17642 @deftypevr {@code{openvpn-client-configuration} parameter} boolean comp-lzo?
17643 Whether to use the lzo compression algorithm.
17644
17645 Defaults to @samp{#t}.
17646
17647 @end deftypevr
17648
17649 @deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-key?
17650 Don't re-read key files across SIGUSR1 or --ping-restart.
17651
17652 Defaults to @samp{#t}.
17653
17654 @end deftypevr
17655
17656 @deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-tun?
17657 Don't close and reopen TUN/TAP device or run up/down scripts across
17658 SIGUSR1 or --ping-restart restarts.
17659
17660 Defaults to @samp{#t}.
17661
17662 @end deftypevr
17663
17664 @deftypevr {@code{openvpn-client-configuration} parameter} number verbosity
17665 Verbosity level.
17666
17667 Defaults to @samp{3}.
17668
17669 @end deftypevr
17670
17671 @deftypevr {@code{openvpn-client-configuration} parameter} tls-auth-client tls-auth
17672 Add an additional layer of HMAC authentication on top of the TLS control
17673 channel to protect against DoS attacks.
17674
17675 Defaults to @samp{#f}.
17676
17677 @end deftypevr
17678
17679 @deftypevr {@code{openvpn-client-configuration} parameter} key-usage verify-key-usage?
17680 Whether to check the server certificate has server usage extension.
17681
17682 Defaults to @samp{#t}.
17683
17684 @end deftypevr
17685
17686 @deftypevr {@code{openvpn-client-configuration} parameter} bind bind?
17687 Bind to a specific local port number.
17688
17689 Defaults to @samp{#f}.
17690
17691 @end deftypevr
17692
17693 @deftypevr {@code{openvpn-client-configuration} parameter} resolv-retry resolv-retry?
17694 Retry resolving server address.
17695
17696 Defaults to @samp{#t}.
17697
17698 @end deftypevr
17699
17700 @deftypevr {@code{openvpn-client-configuration} parameter} openvpn-remote-list remote
17701 A list of remote servers to connect to.
17702
17703 Defaults to @samp{()}.
17704
17705 Available @code{openvpn-remote-configuration} fields are:
17706
17707 @deftypevr {@code{openvpn-remote-configuration} parameter} string name
17708 Server name.
17709
17710 Defaults to @samp{"my-server"}.
17711
17712 @end deftypevr
17713
17714 @deftypevr {@code{openvpn-remote-configuration} parameter} number port
17715 Port number the server listens to.
17716
17717 Defaults to @samp{1194}.
17718
17719 @end deftypevr
17720
17721 @end deftypevr
17722 @c %end of automatic openvpn-client documentation
17723
17724 @c %automatically generated documentation
17725
17726 Available @code{openvpn-server-configuration} fields are:
17727
17728 @deftypevr {@code{openvpn-server-configuration} parameter} package openvpn
17729 The OpenVPN package.
17730
17731 @end deftypevr
17732
17733 @deftypevr {@code{openvpn-server-configuration} parameter} string pid-file
17734 The OpenVPN pid file.
17735
17736 Defaults to @samp{"/var/run/openvpn/openvpn.pid"}.
17737
17738 @end deftypevr
17739
17740 @deftypevr {@code{openvpn-server-configuration} parameter} proto proto
17741 The protocol (UDP or TCP) used to open a channel between clients and
17742 servers.
17743
17744 Defaults to @samp{udp}.
17745
17746 @end deftypevr
17747
17748 @deftypevr {@code{openvpn-server-configuration} parameter} dev dev
17749 The device type used to represent the VPN connection.
17750
17751 Defaults to @samp{tun}.
17752
17753 @end deftypevr
17754
17755 @deftypevr {@code{openvpn-server-configuration} parameter} string ca
17756 The certificate authority to check connections against.
17757
17758 Defaults to @samp{"/etc/openvpn/ca.crt"}.
17759
17760 @end deftypevr
17761
17762 @deftypevr {@code{openvpn-server-configuration} parameter} string cert
17763 The certificate of the machine the daemon is running on. It should be
17764 signed by the authority given in @code{ca}.
17765
17766 Defaults to @samp{"/etc/openvpn/client.crt"}.
17767
17768 @end deftypevr
17769
17770 @deftypevr {@code{openvpn-server-configuration} parameter} string key
17771 The key of the machine the daemon is running on. It must be the key whose
17772 certificate is @code{cert}.
17773
17774 Defaults to @samp{"/etc/openvpn/client.key"}.
17775
17776 @end deftypevr
17777
17778 @deftypevr {@code{openvpn-server-configuration} parameter} boolean comp-lzo?
17779 Whether to use the lzo compression algorithm.
17780
17781 Defaults to @samp{#t}.
17782
17783 @end deftypevr
17784
17785 @deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-key?
17786 Don't re-read key files across SIGUSR1 or --ping-restart.
17787
17788 Defaults to @samp{#t}.
17789
17790 @end deftypevr
17791
17792 @deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-tun?
17793 Don't close and reopen TUN/TAP device or run up/down scripts across
17794 SIGUSR1 or --ping-restart restarts.
17795
17796 Defaults to @samp{#t}.
17797
17798 @end deftypevr
17799
17800 @deftypevr {@code{openvpn-server-configuration} parameter} number verbosity
17801 Verbosity level.
17802
17803 Defaults to @samp{3}.
17804
17805 @end deftypevr
17806
17807 @deftypevr {@code{openvpn-server-configuration} parameter} tls-auth-server tls-auth
17808 Add an additional layer of HMAC authentication on top of the TLS control
17809 channel to protect against DoS attacks.
17810
17811 Defaults to @samp{#f}.
17812
17813 @end deftypevr
17814
17815 @deftypevr {@code{openvpn-server-configuration} parameter} number port
17816 Specifies the port number on which the server listens.
17817
17818 Defaults to @samp{1194}.
17819
17820 @end deftypevr
17821
17822 @deftypevr {@code{openvpn-server-configuration} parameter} ip-mask server
17823 An ip and mask specifying the subnet inside the virtual network.
17824
17825 Defaults to @samp{"10.8.0.0 255.255.255.0"}.
17826
17827 @end deftypevr
17828
17829 @deftypevr {@code{openvpn-server-configuration} parameter} cidr6 server-ipv6
17830 A CIDR notation specifying the IPv6 subnet inside the virtual network.
17831
17832 Defaults to @samp{#f}.
17833
17834 @end deftypevr
17835
17836 @deftypevr {@code{openvpn-server-configuration} parameter} string dh
17837 The Diffie-Hellman parameters file.
17838
17839 Defaults to @samp{"/etc/openvpn/dh2048.pem"}.
17840
17841 @end deftypevr
17842
17843 @deftypevr {@code{openvpn-server-configuration} parameter} string ifconfig-pool-persist
17844 The file that records client IPs.
17845
17846 Defaults to @samp{"/etc/openvpn/ipp.txt"}.
17847
17848 @end deftypevr
17849
17850 @deftypevr {@code{openvpn-server-configuration} parameter} gateway redirect-gateway?
17851 When true, the server will act as a gateway for its clients.
17852
17853 Defaults to @samp{#f}.
17854
17855 @end deftypevr
17856
17857 @deftypevr {@code{openvpn-server-configuration} parameter} boolean client-to-client?
17858 When true, clients are allowed to talk to each other inside the VPN.
17859
17860 Defaults to @samp{#f}.
17861
17862 @end deftypevr
17863
17864 @deftypevr {@code{openvpn-server-configuration} parameter} keepalive keepalive
17865 Causes ping-like messages to be sent back and forth over the link so
17866 that each side knows when the other side has gone down. @code{keepalive}
17867 requires a pair. The first element is the period of the ping sending,
17868 and the second element is the timeout before considering the other side
17869 down.
17870
17871 @end deftypevr
17872
17873 @deftypevr {@code{openvpn-server-configuration} parameter} number max-clients
17874 The maximum number of clients.
17875
17876 Defaults to @samp{100}.
17877
17878 @end deftypevr
17879
17880 @deftypevr {@code{openvpn-server-configuration} parameter} string status
17881 The status file. This file shows a small report on current connection.
17882 It is truncated and rewritten every minute.
17883
17884 Defaults to @samp{"/var/run/openvpn/status"}.
17885
17886 @end deftypevr
17887
17888 @deftypevr {@code{openvpn-server-configuration} parameter} openvpn-ccd-list client-config-dir
17889 The list of configuration for some clients.
17890
17891 Defaults to @samp{()}.
17892
17893 Available @code{openvpn-ccd-configuration} fields are:
17894
17895 @deftypevr {@code{openvpn-ccd-configuration} parameter} string name
17896 Client name.
17897
17898 Defaults to @samp{"client"}.
17899
17900 @end deftypevr
17901
17902 @deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask iroute
17903 Client own network
17904
17905 Defaults to @samp{#f}.
17906
17907 @end deftypevr
17908
17909 @deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask ifconfig-push
17910 Client VPN IP.
17911
17912 Defaults to @samp{#f}.
17913
17914 @end deftypevr
17915
17916 @end deftypevr
17917
17918
17919 @c %end of automatic openvpn-server documentation
17920
17921
17922 @node Network File System
17923 @subsubsection Network File System
17924 @cindex NFS
17925
17926 The @code{(gnu services nfs)} module provides the following services,
17927 which are most commonly used in relation to mounting or exporting
17928 directory trees as @dfn{network file systems} (NFS).
17929
17930 @subsubheading RPC Bind Service
17931 @cindex rpcbind
17932
17933 The RPC Bind service provides a facility to map program numbers into
17934 universal addresses.
17935 Many NFS related services use this facility. Hence it is automatically
17936 started when a dependent service starts.
17937
17938 @defvr {Scheme Variable} rpcbind-service-type
17939 A service type for the RPC portmapper daemon.
17940 @end defvr
17941
17942
17943 @deftp {Data Type} rpcbind-configuration
17944 Data type representing the configuration of the RPC Bind Service.
17945 This type has the following parameters:
17946 @table @asis
17947 @item @code{rpcbind} (default: @code{rpcbind})
17948 The rpcbind package to use.
17949
17950 @item @code{warm-start?} (default: @code{#t})
17951 If this parameter is @code{#t}, then the daemon will read a
17952 state file on startup thus reloading state information saved by a previous
17953 instance.
17954 @end table
17955 @end deftp
17956
17957
17958 @subsubheading Pipefs Pseudo File System
17959 @cindex pipefs
17960 @cindex rpc_pipefs
17961
17962 The pipefs file system is used to transfer NFS related data
17963 between the kernel and user space programs.
17964
17965 @defvr {Scheme Variable} pipefs-service-type
17966 A service type for the pipefs pseudo file system.
17967 @end defvr
17968
17969 @deftp {Data Type} pipefs-configuration
17970 Data type representing the configuration of the pipefs pseudo file system service.
17971 This type has the following parameters:
17972 @table @asis
17973 @item @code{mount-point} (default: @code{"/var/lib/nfs/rpc_pipefs"})
17974 The directory to which the file system is to be attached.
17975 @end table
17976 @end deftp
17977
17978
17979 @subsubheading GSS Daemon Service
17980 @cindex GSSD
17981 @cindex GSS
17982 @cindex global security system
17983
17984 The @dfn{global security system} (GSS) daemon provides strong security for RPC
17985 based protocols.
17986 Before exchanging RPC requests an RPC client must establish a security
17987 context. Typically this is done using the Kerberos command @command{kinit}
17988 or automatically at login time using PAM services (@pxref{Kerberos Services}).
17989
17990 @defvr {Scheme Variable} gss-service-type
17991 A service type for the Global Security System (GSS) daemon.
17992 @end defvr
17993
17994 @deftp {Data Type} gss-configuration
17995 Data type representing the configuration of the GSS daemon service.
17996 This type has the following parameters:
17997 @table @asis
17998 @item @code{nfs-utils} (default: @code{nfs-utils})
17999 The package in which the @command{rpc.gssd} command is to be found.
18000
18001 @item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
18002 The directory where the pipefs file system is mounted.
18003
18004 @end table
18005 @end deftp
18006
18007
18008 @subsubheading IDMAP Daemon Service
18009 @cindex idmapd
18010 @cindex name mapper
18011
18012 The idmap daemon service provides mapping between user IDs and user names.
18013 Typically it is required in order to access file systems mounted via NFSv4.
18014
18015 @defvr {Scheme Variable} idmap-service-type
18016 A service type for the Identity Mapper (IDMAP) daemon.
18017 @end defvr
18018
18019 @deftp {Data Type} idmap-configuration
18020 Data type representing the configuration of the IDMAP daemon service.
18021 This type has the following parameters:
18022 @table @asis
18023 @item @code{nfs-utils} (default: @code{nfs-utils})
18024 The package in which the @command{rpc.idmapd} command is to be found.
18025
18026 @item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
18027 The directory where the pipefs file system is mounted.
18028
18029 @item @code{domain} (default: @code{#f})
18030 The local NFSv4 domain name.
18031 This must be a string or @code{#f}.
18032 If it is @code{#f} then the daemon will use the host's fully qualified domain name.
18033
18034 @end table
18035 @end deftp
18036
18037 @node Continuous Integration
18038 @subsubsection Continuous Integration
18039
18040 @cindex continuous integration
18041 @uref{https://git.savannah.gnu.org/cgit/guix/guix-cuirass.git, Cuirass} is a
18042 continuous integration tool for Guix. It can be used both for development and
18043 for providing substitutes to others (@pxref{Substitutes}).
18044
18045 The @code{(gnu services cuirass)} module provides the following service.
18046
18047 @defvr {Scheme Procedure} cuirass-service-type
18048 The type of the Cuirass service. Its value must be a
18049 @code{cuirass-configuration} object, as described below.
18050 @end defvr
18051
18052 To add build jobs, you have to set the @code{specifications} field of
18053 the configuration. Here is an example of a service defining a build job
18054 based on a specification that can be found in Cuirass source tree. This
18055 service polls the Guix repository and builds a subset of the Guix
18056 packages, as prescribed in the @file{gnu-system.scm} example spec:
18057
18058 @example
18059 (let ((spec #~((#:name . "guix")
18060 (#:url . "git://git.savannah.gnu.org/guix.git")
18061 (#:load-path . ".")
18062 (#:file . "build-aux/cuirass/gnu-system.scm")
18063 (#:proc . cuirass-jobs)
18064 (#:arguments (subset . "hello"))
18065 (#:branch . "master"))))
18066 (service cuirass-service-type
18067 (cuirass-configuration
18068 (specifications #~(list '#$spec)))))
18069 @end example
18070
18071 While information related to build jobs is located directly in the
18072 specifications, global settings for the @command{cuirass} process are
18073 accessible in other @code{cuirass-configuration} fields.
18074
18075 @deftp {Data Type} cuirass-configuration
18076 Data type representing the configuration of Cuirass.
18077
18078 @table @asis
18079 @item @code{log-file} (default: @code{"/var/log/cuirass.log"})
18080 Location of the log file.
18081
18082 @item @code{cache-directory} (default: @code{"/var/cache/cuirass"})
18083 Location of the repository cache.
18084
18085 @item @code{user} (default: @code{"cuirass"})
18086 Owner of the @code{cuirass} process.
18087
18088 @item @code{group} (default: @code{"cuirass"})
18089 Owner's group of the @code{cuirass} process.
18090
18091 @item @code{interval} (default: @code{60})
18092 Number of seconds between the poll of the repositories followed by the
18093 Cuirass jobs.
18094
18095 @item @code{database} (default: @code{"/var/run/cuirass/cuirass.db"})
18096 Location of sqlite database which contains the build results and previously
18097 added specifications.
18098
18099 @item @code{port} (default: @code{8081})
18100 Port number used by the HTTP server.
18101
18102 @item --listen=@var{host}
18103 Listen on the network interface for @var{host}. The default is to
18104 accept connections from localhost.
18105
18106 @item @code{specifications} (default: @code{#~'()})
18107 A gexp (@pxref{G-Expressions}) that evaluates to a list of specifications,
18108 where a specification is an association list
18109 (@pxref{Associations Lists,,, guile, GNU Guile Reference Manual}) whose
18110 keys are keywords (@code{#:keyword-example}) as shown in the example
18111 above.
18112
18113 @item @code{use-substitutes?} (default: @code{#f})
18114 This allows using substitutes to avoid building every dependencies of a job
18115 from source.
18116
18117 @item @code{one-shot?} (default: @code{#f})
18118 Only evaluate specifications and build derivations once.
18119
18120 @item @code{fallback?} (default: @code{#f})
18121 When substituting a pre-built binary fails, fall back to building
18122 packages locally.
18123
18124 @item @code{cuirass} (default: @code{cuirass})
18125 The Cuirass package to use.
18126 @end table
18127 @end deftp
18128
18129 @node Power Management Services
18130 @subsubsection Power Management Services
18131
18132 @cindex tlp
18133 @cindex power management with TLP
18134 @subsubheading TLP daemon
18135
18136 The @code{(gnu services pm)} module provides a Guix service definition
18137 for the Linux power management tool TLP.
18138
18139 TLP enables various powersaving modes in userspace and kernel.
18140 Contrary to @code{upower-service}, it is not a passive,
18141 monitoring tool, as it will apply custom settings each time a new power
18142 source is detected. More information can be found at
18143 @uref{http://linrunner.de/en/tlp/tlp.html, TLP home page}.
18144
18145 @deffn {Scheme Variable} tlp-service-type
18146 The service type for the TLP tool. Its value should be a valid
18147 TLP configuration (see below). To use the default settings, simply
18148 write:
18149 @example
18150 (service tlp-service-type)
18151 @end example
18152 @end deffn
18153
18154 By default TLP does not need much configuration but most TLP parameters
18155 can be tweaked using @code{tlp-configuration}.
18156
18157 Each parameter definition is preceded by its type; for example,
18158 @samp{boolean foo} indicates that the @code{foo} parameter
18159 should be specified as a boolean. Types starting with
18160 @code{maybe-} denote parameters that won't show up in TLP config file
18161 when their value is @code{'disabled}.
18162
18163 @c The following documentation was initially generated by
18164 @c (generate-tlp-documentation) in (gnu services pm). Manually maintained
18165 @c documentation is better, so we shouldn't hesitate to edit below as
18166 @c needed. However if the change you want to make to this documentation
18167 @c can be done in an automated way, it's probably easier to change
18168 @c (generate-documentation) than to make it below and have to deal with
18169 @c the churn as TLP updates.
18170
18171 Available @code{tlp-configuration} fields are:
18172
18173 @deftypevr {@code{tlp-configuration} parameter} package tlp
18174 The TLP package.
18175
18176 @end deftypevr
18177
18178 @deftypevr {@code{tlp-configuration} parameter} boolean tlp-enable?
18179 Set to true if you wish to enable TLP.
18180
18181 Defaults to @samp{#t}.
18182
18183 @end deftypevr
18184
18185 @deftypevr {@code{tlp-configuration} parameter} string tlp-default-mode
18186 Default mode when no power supply can be detected. Alternatives are AC
18187 and BAT.
18188
18189 Defaults to @samp{"AC"}.
18190
18191 @end deftypevr
18192
18193 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-ac
18194 Number of seconds Linux kernel has to wait after the disk goes idle,
18195 before syncing on AC.
18196
18197 Defaults to @samp{0}.
18198
18199 @end deftypevr
18200
18201 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-bat
18202 Same as @code{disk-idle-ac} but on BAT mode.
18203
18204 Defaults to @samp{2}.
18205
18206 @end deftypevr
18207
18208 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-ac
18209 Dirty pages flushing periodicity, expressed in seconds.
18210
18211 Defaults to @samp{15}.
18212
18213 @end deftypevr
18214
18215 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-bat
18216 Same as @code{max-lost-work-secs-on-ac} but on BAT mode.
18217
18218 Defaults to @samp{60}.
18219
18220 @end deftypevr
18221
18222 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-ac
18223 CPU frequency scaling governor on AC mode. With intel_pstate driver,
18224 alternatives are powersave and performance. With acpi-cpufreq driver,
18225 alternatives are ondemand, powersave, performance and conservative.
18226
18227 Defaults to @samp{disabled}.
18228
18229 @end deftypevr
18230
18231 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-bat
18232 Same as @code{cpu-scaling-governor-on-ac} but on BAT mode.
18233
18234 Defaults to @samp{disabled}.
18235
18236 @end deftypevr
18237
18238 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-ac
18239 Set the min available frequency for the scaling governor on AC.
18240
18241 Defaults to @samp{disabled}.
18242
18243 @end deftypevr
18244
18245 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-ac
18246 Set the max available frequency for the scaling governor on AC.
18247
18248 Defaults to @samp{disabled}.
18249
18250 @end deftypevr
18251
18252 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-bat
18253 Set the min available frequency for the scaling governor on BAT.
18254
18255 Defaults to @samp{disabled}.
18256
18257 @end deftypevr
18258
18259 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-bat
18260 Set the max available frequency for the scaling governor on BAT.
18261
18262 Defaults to @samp{disabled}.
18263
18264 @end deftypevr
18265
18266 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-ac
18267 Limit the min P-state to control the power dissipation of the CPU, in AC
18268 mode. Values are stated as a percentage of the available performance.
18269
18270 Defaults to @samp{disabled}.
18271
18272 @end deftypevr
18273
18274 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-ac
18275 Limit the max P-state to control the power dissipation of the CPU, in AC
18276 mode. Values are stated as a percentage of the available performance.
18277
18278 Defaults to @samp{disabled}.
18279
18280 @end deftypevr
18281
18282 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-bat
18283 Same as @code{cpu-min-perf-on-ac} on BAT mode.
18284
18285 Defaults to @samp{disabled}.
18286
18287 @end deftypevr
18288
18289 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-bat
18290 Same as @code{cpu-max-perf-on-ac} on BAT mode.
18291
18292 Defaults to @samp{disabled}.
18293
18294 @end deftypevr
18295
18296 @deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-ac?
18297 Enable CPU turbo boost feature on AC mode.
18298
18299 Defaults to @samp{disabled}.
18300
18301 @end deftypevr
18302
18303 @deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-bat?
18304 Same as @code{cpu-boost-on-ac?} on BAT mode.
18305
18306 Defaults to @samp{disabled}.
18307
18308 @end deftypevr
18309
18310 @deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-ac?
18311 Allow Linux kernel to minimize the number of CPU cores/hyper-threads
18312 used under light load conditions.
18313
18314 Defaults to @samp{#f}.
18315
18316 @end deftypevr
18317
18318 @deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-bat?
18319 Same as @code{sched-powersave-on-ac?} but on BAT mode.
18320
18321 Defaults to @samp{#t}.
18322
18323 @end deftypevr
18324
18325 @deftypevr {@code{tlp-configuration} parameter} boolean nmi-watchdog?
18326 Enable Linux kernel NMI watchdog.
18327
18328 Defaults to @samp{#f}.
18329
18330 @end deftypevr
18331
18332 @deftypevr {@code{tlp-configuration} parameter} maybe-string phc-controls
18333 For Linux kernels with PHC patch applied, change CPU voltages. An
18334 example value would be @samp{"F:V F:V F:V F:V"}.
18335
18336 Defaults to @samp{disabled}.
18337
18338 @end deftypevr
18339
18340 @deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-ac
18341 Set CPU performance versus energy saving policy on AC. Alternatives are
18342 performance, normal, powersave.
18343
18344 Defaults to @samp{"performance"}.
18345
18346 @end deftypevr
18347
18348 @deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-bat
18349 Same as @code{energy-perf-policy-ac} but on BAT mode.
18350
18351 Defaults to @samp{"powersave"}.
18352
18353 @end deftypevr
18354
18355 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disks-devices
18356 Hard disk devices.
18357
18358 @end deftypevr
18359
18360 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-ac
18361 Hard disk advanced power management level.
18362
18363 @end deftypevr
18364
18365 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-bat
18366 Same as @code{disk-apm-bat} but on BAT mode.
18367
18368 @end deftypevr
18369
18370 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-ac
18371 Hard disk spin down timeout. One value has to be specified for each
18372 declared hard disk.
18373
18374 Defaults to @samp{disabled}.
18375
18376 @end deftypevr
18377
18378 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-bat
18379 Same as @code{disk-spindown-timeout-on-ac} but on BAT mode.
18380
18381 Defaults to @samp{disabled}.
18382
18383 @end deftypevr
18384
18385 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-iosched
18386 Select IO scheduler for disk devices. One value has to be specified for
18387 each declared hard disk. Example alternatives are cfq, deadline and
18388 noop.
18389
18390 Defaults to @samp{disabled}.
18391
18392 @end deftypevr
18393
18394 @deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-ac
18395 SATA aggressive link power management (ALPM) level. Alternatives are
18396 min_power, medium_power, max_performance.
18397
18398 Defaults to @samp{"max_performance"}.
18399
18400 @end deftypevr
18401
18402 @deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-bat
18403 Same as @code{sata-linkpwr-ac} but on BAT mode.
18404
18405 Defaults to @samp{"min_power"}.
18406
18407 @end deftypevr
18408
18409 @deftypevr {@code{tlp-configuration} parameter} maybe-string sata-linkpwr-blacklist
18410 Exclude specified SATA host devices for link power management.
18411
18412 Defaults to @samp{disabled}.
18413
18414 @end deftypevr
18415
18416 @deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-ac?
18417 Enable Runtime Power Management for AHCI controller and disks on AC
18418 mode.
18419
18420 Defaults to @samp{disabled}.
18421
18422 @end deftypevr
18423
18424 @deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-bat?
18425 Same as @code{ahci-runtime-pm-on-ac} on BAT mode.
18426
18427 Defaults to @samp{disabled}.
18428
18429 @end deftypevr
18430
18431 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer ahci-runtime-pm-timeout
18432 Seconds of inactivity before disk is suspended.
18433
18434 Defaults to @samp{15}.
18435
18436 @end deftypevr
18437
18438 @deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-ac
18439 PCI Express Active State Power Management level. Alternatives are
18440 default, performance, powersave.
18441
18442 Defaults to @samp{"performance"}.
18443
18444 @end deftypevr
18445
18446 @deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-bat
18447 Same as @code{pcie-aspm-ac} but on BAT mode.
18448
18449 Defaults to @samp{"powersave"}.
18450
18451 @end deftypevr
18452
18453 @deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-ac
18454 Radeon graphics clock speed level. Alternatives are low, mid, high,
18455 auto, default.
18456
18457 Defaults to @samp{"high"}.
18458
18459 @end deftypevr
18460
18461 @deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-bat
18462 Same as @code{radeon-power-ac} but on BAT mode.
18463
18464 Defaults to @samp{"low"}.
18465
18466 @end deftypevr
18467
18468 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-ac
18469 Radeon dynamic power management method (DPM). Alternatives are battery,
18470 performance.
18471
18472 Defaults to @samp{"performance"}.
18473
18474 @end deftypevr
18475
18476 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-bat
18477 Same as @code{radeon-dpm-state-ac} but on BAT mode.
18478
18479 Defaults to @samp{"battery"}.
18480
18481 @end deftypevr
18482
18483 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-ac
18484 Radeon DPM performance level. Alternatives are auto, low, high.
18485
18486 Defaults to @samp{"auto"}.
18487
18488 @end deftypevr
18489
18490 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-bat
18491 Same as @code{radeon-dpm-perf-ac} but on BAT mode.
18492
18493 Defaults to @samp{"auto"}.
18494
18495 @end deftypevr
18496
18497 @deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-ac?
18498 Wifi power saving mode.
18499
18500 Defaults to @samp{#f}.
18501
18502 @end deftypevr
18503
18504 @deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-bat?
18505 Same as @code{wifi-power-ac?} but on BAT mode.
18506
18507 Defaults to @samp{#t}.
18508
18509 @end deftypevr
18510
18511 @deftypevr {@code{tlp-configuration} parameter} y-n-boolean wol-disable?
18512 Disable wake on LAN.
18513
18514 Defaults to @samp{#t}.
18515
18516 @end deftypevr
18517
18518 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-ac
18519 Timeout duration in seconds before activating audio power saving on
18520 Intel HDA and AC97 devices. A value of 0 disables power saving.
18521
18522 Defaults to @samp{0}.
18523
18524 @end deftypevr
18525
18526 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-bat
18527 Same as @code{sound-powersave-ac} but on BAT mode.
18528
18529 Defaults to @samp{1}.
18530
18531 @end deftypevr
18532
18533 @deftypevr {@code{tlp-configuration} parameter} y-n-boolean sound-power-save-controller?
18534 Disable controller in powersaving mode on Intel HDA devices.
18535
18536 Defaults to @samp{#t}.
18537
18538 @end deftypevr
18539
18540 @deftypevr {@code{tlp-configuration} parameter} boolean bay-poweroff-on-bat?
18541 Enable optical drive in UltraBay/MediaBay on BAT mode. Drive can be
18542 powered on again by releasing (and reinserting) the eject lever or by
18543 pressing the disc eject button on newer models.
18544
18545 Defaults to @samp{#f}.
18546
18547 @end deftypevr
18548
18549 @deftypevr {@code{tlp-configuration} parameter} string bay-device
18550 Name of the optical drive device to power off.
18551
18552 Defaults to @samp{"sr0"}.
18553
18554 @end deftypevr
18555
18556 @deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-ac
18557 Runtime Power Management for PCI(e) bus devices. Alternatives are on
18558 and auto.
18559
18560 Defaults to @samp{"on"}.
18561
18562 @end deftypevr
18563
18564 @deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-bat
18565 Same as @code{runtime-pm-ac} but on BAT mode.
18566
18567 Defaults to @samp{"auto"}.
18568
18569 @end deftypevr
18570
18571 @deftypevr {@code{tlp-configuration} parameter} boolean runtime-pm-all?
18572 Runtime Power Management for all PCI(e) bus devices, except blacklisted
18573 ones.
18574
18575 Defaults to @samp{#t}.
18576
18577 @end deftypevr
18578
18579 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list runtime-pm-blacklist
18580 Exclude specified PCI(e) device addresses from Runtime Power Management.
18581
18582 Defaults to @samp{disabled}.
18583
18584 @end deftypevr
18585
18586 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list runtime-pm-driver-blacklist
18587 Exclude PCI(e) devices assigned to the specified drivers from Runtime
18588 Power Management.
18589
18590 @end deftypevr
18591
18592 @deftypevr {@code{tlp-configuration} parameter} boolean usb-autosuspend?
18593 Enable USB autosuspend feature.
18594
18595 Defaults to @samp{#t}.
18596
18597 @end deftypevr
18598
18599 @deftypevr {@code{tlp-configuration} parameter} maybe-string usb-blacklist
18600 Exclude specified devices from USB autosuspend.
18601
18602 Defaults to @samp{disabled}.
18603
18604 @end deftypevr
18605
18606 @deftypevr {@code{tlp-configuration} parameter} boolean usb-blacklist-wwan?
18607 Exclude WWAN devices from USB autosuspend.
18608
18609 Defaults to @samp{#t}.
18610
18611 @end deftypevr
18612
18613 @deftypevr {@code{tlp-configuration} parameter} maybe-string usb-whitelist
18614 Include specified devices into USB autosuspend, even if they are already
18615 excluded by the driver or via @code{usb-blacklist-wwan?}.
18616
18617 Defaults to @samp{disabled}.
18618
18619 @end deftypevr
18620
18621 @deftypevr {@code{tlp-configuration} parameter} maybe-boolean usb-autosuspend-disable-on-shutdown?
18622 Enable USB autosuspend before shutdown.
18623
18624 Defaults to @samp{disabled}.
18625
18626 @end deftypevr
18627
18628 @deftypevr {@code{tlp-configuration} parameter} boolean restore-device-state-on-startup?
18629 Restore radio device state (bluetooth, wifi, wwan) from previous
18630 shutdown on system startup.
18631
18632 Defaults to @samp{#f}.
18633
18634 @end deftypevr
18635
18636 @cindex thermald
18637 @cindex CPU frequency scaling with thermald
18638 @subsubheading Thermald daemon
18639
18640 The @code{(gnu services pm)} module provides an interface to
18641 thermald, a CPU frequency scaling service which helps prevent overheating.
18642
18643 @defvr {Scheme Variable} thermald-service-type
18644 This is the service type for
18645 @uref{https://01.org/linux-thermal-daemon/, thermald}, the Linux
18646 Thermal Daemon, which is responsible for controlling the thermal state
18647 of processors and preventing overheating.
18648 @end defvr
18649
18650 @deftp {Data Type} thermald-configuration
18651 Data type representing the configuration of @code{thermald-service-type}.
18652
18653 @table @asis
18654 @item @code{ignore-cpuid-check?} (default: @code{#f})
18655 Ignore cpuid check for supported CPU models.
18656
18657 @item @code{thermald} (default: @var{thermald})
18658 Package object of thermald.
18659
18660 @end table
18661 @end deftp
18662
18663 @node Audio Services
18664 @subsubsection Audio Services
18665
18666 The @code{(gnu services audio)} module provides a service to start MPD
18667 (the Music Player Daemon).
18668
18669 @cindex mpd
18670 @subsubheading Music Player Daemon
18671
18672 The Music Player Daemon (MPD) is a service that can play music while
18673 being controlled from the local machine or over the network by a variety
18674 of clients.
18675
18676 The following example shows how one might run @code{mpd} as user
18677 @code{"bob"} on port @code{6666}. It uses pulseaudio for output.
18678
18679 @example
18680 (service mpd-service-type
18681 (mpd-configuration
18682 (user "bob")
18683 (port "6666")))
18684 @end example
18685
18686 @defvr {Scheme Variable} mpd-service-type
18687 The service type for @command{mpd}
18688 @end defvr
18689
18690 @deftp {Data Type} mpd-configuration
18691 Data type representing the configuration of @command{mpd}.
18692
18693 @table @asis
18694 @item @code{user} (default: @code{"mpd"})
18695 The user to run mpd as.
18696
18697 @item @code{music-dir} (default: @code{"~/Music"})
18698 The directory to scan for music files.
18699
18700 @item @code{playlist-dir} (default: @code{"~/.mpd/playlists"})
18701 The directory to store playlists.
18702
18703 @item @code{port} (default: @code{"6600"})
18704 The port to run mpd on.
18705
18706 @item @code{address} (default: @code{"any"})
18707 The address that mpd will bind to. To use a Unix domain socket,
18708 an absolute path can be specified here.
18709
18710 @end table
18711 @end deftp
18712
18713 @node Virtualization Services
18714 @subsubsection Virtualization services
18715
18716 The @code{(gnu services virtualization)} module provides services for
18717 the libvirt and virtlog daemons, as well as other virtualization-related
18718 services.
18719
18720 @subsubheading Libvirt daemon
18721 @code{libvirtd} is the server side daemon component of the libvirt
18722 virtualization management system. This daemon runs on host servers
18723 and performs required management tasks for virtualized guests.
18724
18725 @deffn {Scheme Variable} libvirt-service-type
18726 This is the type of the @uref{https://libvirt.org, libvirt daemon}.
18727 Its value must be a @code{libvirt-configuration}.
18728
18729 @example
18730 (service libvirt-service-type
18731 (libvirt-configuration
18732 (unix-sock-group "libvirt")
18733 (tls-port "16555")))
18734 @end example
18735 @end deffn
18736
18737 @c Auto-generated with (generate-libvirt-documentation)
18738 Available @code{libvirt-configuration} fields are:
18739
18740 @deftypevr {@code{libvirt-configuration} parameter} package libvirt
18741 Libvirt package.
18742
18743 @end deftypevr
18744
18745 @deftypevr {@code{libvirt-configuration} parameter} boolean listen-tls?
18746 Flag listening for secure TLS connections on the public TCP/IP port.
18747 must set @code{listen} for this to have any effect.
18748
18749 It is necessary to setup a CA and issue server certificates before using
18750 this capability.
18751
18752 Defaults to @samp{#t}.
18753
18754 @end deftypevr
18755
18756 @deftypevr {@code{libvirt-configuration} parameter} boolean listen-tcp?
18757 Listen for unencrypted TCP connections on the public TCP/IP port. must
18758 set @code{listen} for this to have any effect.
18759
18760 Using the TCP socket requires SASL authentication by default. Only SASL
18761 mechanisms which support data encryption are allowed. This is
18762 DIGEST_MD5 and GSSAPI (Kerberos5)
18763
18764 Defaults to @samp{#f}.
18765
18766 @end deftypevr
18767
18768 @deftypevr {@code{libvirt-configuration} parameter} string tls-port
18769 Port for accepting secure TLS connections This can be a port number, or
18770 service name
18771
18772 Defaults to @samp{"16514"}.
18773
18774 @end deftypevr
18775
18776 @deftypevr {@code{libvirt-configuration} parameter} string tcp-port
18777 Port for accepting insecure TCP connections This can be a port number,
18778 or service name
18779
18780 Defaults to @samp{"16509"}.
18781
18782 @end deftypevr
18783
18784 @deftypevr {@code{libvirt-configuration} parameter} string listen-addr
18785 IP address or hostname used for client connections.
18786
18787 Defaults to @samp{"0.0.0.0"}.
18788
18789 @end deftypevr
18790
18791 @deftypevr {@code{libvirt-configuration} parameter} boolean mdns-adv?
18792 Flag toggling mDNS advertisement of the libvirt service.
18793
18794 Alternatively can disable for all services on a host by stopping the
18795 Avahi daemon.
18796
18797 Defaults to @samp{#f}.
18798
18799 @end deftypevr
18800
18801 @deftypevr {@code{libvirt-configuration} parameter} string mdns-name
18802 Default mDNS advertisement name. This must be unique on the immediate
18803 broadcast network.
18804
18805 Defaults to @samp{"Virtualization Host <hostname>"}.
18806
18807 @end deftypevr
18808
18809 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-group
18810 UNIX domain socket group ownership. This can be used to allow a
18811 'trusted' set of users access to management capabilities without
18812 becoming root.
18813
18814 Defaults to @samp{"root"}.
18815
18816 @end deftypevr
18817
18818 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-ro-perms
18819 UNIX socket permissions for the R/O socket. This is used for monitoring
18820 VM status only.
18821
18822 Defaults to @samp{"0777"}.
18823
18824 @end deftypevr
18825
18826 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-rw-perms
18827 UNIX socket permissions for the R/W socket. Default allows only root.
18828 If PolicyKit is enabled on the socket, the default will change to allow
18829 everyone (eg, 0777)
18830
18831 Defaults to @samp{"0770"}.
18832
18833 @end deftypevr
18834
18835 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-admin-perms
18836 UNIX socket permissions for the admin socket. Default allows only owner
18837 (root), do not change it unless you are sure to whom you are exposing
18838 the access to.
18839
18840 Defaults to @samp{"0777"}.
18841
18842 @end deftypevr
18843
18844 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-dir
18845 The directory in which sockets will be found/created.
18846
18847 Defaults to @samp{"/var/run/libvirt"}.
18848
18849 @end deftypevr
18850
18851 @deftypevr {@code{libvirt-configuration} parameter} string auth-unix-ro
18852 Authentication scheme for UNIX read-only sockets. By default socket
18853 permissions allow anyone to connect
18854
18855 Defaults to @samp{"polkit"}.
18856
18857 @end deftypevr
18858
18859 @deftypevr {@code{libvirt-configuration} parameter} string auth-unix-rw
18860 Authentication scheme for UNIX read-write sockets. By default socket
18861 permissions only allow root. If PolicyKit support was compiled into
18862 libvirt, the default will be to use 'polkit' auth.
18863
18864 Defaults to @samp{"polkit"}.
18865
18866 @end deftypevr
18867
18868 @deftypevr {@code{libvirt-configuration} parameter} string auth-tcp
18869 Authentication scheme for TCP sockets. If you don't enable SASL, then
18870 all TCP traffic is cleartext. Don't do this outside of a dev/test
18871 scenario.
18872
18873 Defaults to @samp{"sasl"}.
18874
18875 @end deftypevr
18876
18877 @deftypevr {@code{libvirt-configuration} parameter} string auth-tls
18878 Authentication scheme for TLS sockets. TLS sockets already have
18879 encryption provided by the TLS layer, and limited authentication is done
18880 by certificates.
18881
18882 It is possible to make use of any SASL authentication mechanism as well,
18883 by using 'sasl' for this option
18884
18885 Defaults to @samp{"none"}.
18886
18887 @end deftypevr
18888
18889 @deftypevr {@code{libvirt-configuration} parameter} optional-list access-drivers
18890 API access control scheme.
18891
18892 By default an authenticated user is allowed access to all APIs. Access
18893 drivers can place restrictions on this.
18894
18895 Defaults to @samp{()}.
18896
18897 @end deftypevr
18898
18899 @deftypevr {@code{libvirt-configuration} parameter} string key-file
18900 Server key file path. If set to an empty string, then no private key is
18901 loaded.
18902
18903 Defaults to @samp{""}.
18904
18905 @end deftypevr
18906
18907 @deftypevr {@code{libvirt-configuration} parameter} string cert-file
18908 Server key file path. If set to an empty string, then no certificate is
18909 loaded.
18910
18911 Defaults to @samp{""}.
18912
18913 @end deftypevr
18914
18915 @deftypevr {@code{libvirt-configuration} parameter} string ca-file
18916 Server key file path. If set to an empty string, then no CA certificate
18917 is loaded.
18918
18919 Defaults to @samp{""}.
18920
18921 @end deftypevr
18922
18923 @deftypevr {@code{libvirt-configuration} parameter} string crl-file
18924 Certificate revocation list path. If set to an empty string, then no
18925 CRL is loaded.
18926
18927 Defaults to @samp{""}.
18928
18929 @end deftypevr
18930
18931 @deftypevr {@code{libvirt-configuration} parameter} boolean tls-no-sanity-cert
18932 Disable verification of our own server certificates.
18933
18934 When libvirtd starts it performs some sanity checks against its own
18935 certificates.
18936
18937 Defaults to @samp{#f}.
18938
18939 @end deftypevr
18940
18941 @deftypevr {@code{libvirt-configuration} parameter} boolean tls-no-verify-cert
18942 Disable verification of client certificates.
18943
18944 Client certificate verification is the primary authentication mechanism.
18945 Any client which does not present a certificate signed by the CA will be
18946 rejected.
18947
18948 Defaults to @samp{#f}.
18949
18950 @end deftypevr
18951
18952 @deftypevr {@code{libvirt-configuration} parameter} optional-list tls-allowed-dn-list
18953 Whitelist of allowed x509 Distinguished Name.
18954
18955 Defaults to @samp{()}.
18956
18957 @end deftypevr
18958
18959 @deftypevr {@code{libvirt-configuration} parameter} optional-list sasl-allowed-usernames
18960 Whitelist of allowed SASL usernames. The format for username depends on
18961 the SASL authentication mechanism.
18962
18963 Defaults to @samp{()}.
18964
18965 @end deftypevr
18966
18967 @deftypevr {@code{libvirt-configuration} parameter} string tls-priority
18968 Override the compile time default TLS priority string. The default is
18969 usually "NORMAL" unless overridden at build time. Only set this is it
18970 is desired for libvirt to deviate from the global default settings.
18971
18972 Defaults to @samp{"NORMAL"}.
18973
18974 @end deftypevr
18975
18976 @deftypevr {@code{libvirt-configuration} parameter} integer max-clients
18977 Maximum number of concurrent client connections to allow over all
18978 sockets combined.
18979
18980 Defaults to @samp{5000}.
18981
18982 @end deftypevr
18983
18984 @deftypevr {@code{libvirt-configuration} parameter} integer max-queued-clients
18985 Maximum length of queue of connections waiting to be accepted by the
18986 daemon. Note, that some protocols supporting retransmission may obey
18987 this so that a later reattempt at connection succeeds.
18988
18989 Defaults to @samp{1000}.
18990
18991 @end deftypevr
18992
18993 @deftypevr {@code{libvirt-configuration} parameter} integer max-anonymous-clients
18994 Maximum length of queue of accepted but not yet authenticated clients.
18995 Set this to zero to turn this feature off
18996
18997 Defaults to @samp{20}.
18998
18999 @end deftypevr
19000
19001 @deftypevr {@code{libvirt-configuration} parameter} integer min-workers
19002 Number of workers to start up initially.
19003
19004 Defaults to @samp{5}.
19005
19006 @end deftypevr
19007
19008 @deftypevr {@code{libvirt-configuration} parameter} integer max-workers
19009 Maximum number of worker threads.
19010
19011 If the number of active clients exceeds @code{min-workers}, then more
19012 threads are spawned, up to max_workers limit. Typically you'd want
19013 max_workers to equal maximum number of clients allowed.
19014
19015 Defaults to @samp{20}.
19016
19017 @end deftypevr
19018
19019 @deftypevr {@code{libvirt-configuration} parameter} integer prio-workers
19020 Number of priority workers. If all workers from above pool are stuck,
19021 some calls marked as high priority (notably domainDestroy) can be
19022 executed in this pool.
19023
19024 Defaults to @samp{5}.
19025
19026 @end deftypevr
19027
19028 @deftypevr {@code{libvirt-configuration} parameter} integer max-requests
19029 Total global limit on concurrent RPC calls.
19030
19031 Defaults to @samp{20}.
19032
19033 @end deftypevr
19034
19035 @deftypevr {@code{libvirt-configuration} parameter} integer max-client-requests
19036 Limit on concurrent requests from a single client connection. To avoid
19037 one client monopolizing the server this should be a small fraction of
19038 the global max_requests and max_workers parameter.
19039
19040 Defaults to @samp{5}.
19041
19042 @end deftypevr
19043
19044 @deftypevr {@code{libvirt-configuration} parameter} integer admin-min-workers
19045 Same as @code{min-workers} but for the admin interface.
19046
19047 Defaults to @samp{1}.
19048
19049 @end deftypevr
19050
19051 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-workers
19052 Same as @code{max-workers} but for the admin interface.
19053
19054 Defaults to @samp{5}.
19055
19056 @end deftypevr
19057
19058 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-clients
19059 Same as @code{max-clients} but for the admin interface.
19060
19061 Defaults to @samp{5}.
19062
19063 @end deftypevr
19064
19065 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-queued-clients
19066 Same as @code{max-queued-clients} but for the admin interface.
19067
19068 Defaults to @samp{5}.
19069
19070 @end deftypevr
19071
19072 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-client-requests
19073 Same as @code{max-client-requests} but for the admin interface.
19074
19075 Defaults to @samp{5}.
19076
19077 @end deftypevr
19078
19079 @deftypevr {@code{libvirt-configuration} parameter} integer log-level
19080 Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
19081
19082 Defaults to @samp{3}.
19083
19084 @end deftypevr
19085
19086 @deftypevr {@code{libvirt-configuration} parameter} string log-filters
19087 Logging filters.
19088
19089 A filter allows to select a different logging level for a given category
19090 of logs The format for a filter is one of:
19091
19092 @itemize @bullet
19093 @item
19094 x:name
19095
19096 @item
19097 x:+name
19098
19099 @end itemize
19100
19101 where @code{name} is a string which is matched against the category
19102 given in the @code{VIR_LOG_INIT()} at the top of each libvirt source
19103 file, e.g., "remote", "qemu", or "util.json" (the name in the filter can
19104 be a substring of the full category name, in order to match multiple
19105 similar categories), the optional "+" prefix tells libvirt to log stack
19106 trace for each message matching name, and @code{x} is the minimal level
19107 where matching messages should be logged:
19108
19109 @itemize @bullet
19110 @item
19111 1: DEBUG
19112
19113 @item
19114 2: INFO
19115
19116 @item
19117 3: WARNING
19118
19119 @item
19120 4: ERROR
19121
19122 @end itemize
19123
19124 Multiple filters can be defined in a single filters statement, they just
19125 need to be separated by spaces.
19126
19127 Defaults to @samp{"3:remote 4:event"}.
19128
19129 @end deftypevr
19130
19131 @deftypevr {@code{libvirt-configuration} parameter} string log-outputs
19132 Logging outputs.
19133
19134 An output is one of the places to save logging information The format
19135 for an output can be:
19136
19137 @table @code
19138 @item x:stderr
19139 output goes to stderr
19140
19141 @item x:syslog:name
19142 use syslog for the output and use the given name as the ident
19143
19144 @item x:file:file_path
19145 output to a file, with the given filepath
19146
19147 @item x:journald
19148 output to journald logging system
19149
19150 @end table
19151
19152 In all case the x prefix is the minimal level, acting as a filter
19153
19154 @itemize @bullet
19155 @item
19156 1: DEBUG
19157
19158 @item
19159 2: INFO
19160
19161 @item
19162 3: WARNING
19163
19164 @item
19165 4: ERROR
19166
19167 @end itemize
19168
19169 Multiple outputs can be defined, they just need to be separated by
19170 spaces.
19171
19172 Defaults to @samp{"3:stderr"}.
19173
19174 @end deftypevr
19175
19176 @deftypevr {@code{libvirt-configuration} parameter} integer audit-level
19177 Allows usage of the auditing subsystem to be altered
19178
19179 @itemize @bullet
19180 @item
19181 0: disable all auditing
19182
19183 @item
19184 1: enable auditing, only if enabled on host
19185
19186 @item
19187 2: enable auditing, and exit if disabled on host.
19188
19189 @end itemize
19190
19191 Defaults to @samp{1}.
19192
19193 @end deftypevr
19194
19195 @deftypevr {@code{libvirt-configuration} parameter} boolean audit-logging
19196 Send audit messages via libvirt logging infrastructure.
19197
19198 Defaults to @samp{#f}.
19199
19200 @end deftypevr
19201
19202 @deftypevr {@code{libvirt-configuration} parameter} optional-string host-uuid
19203 Host UUID. UUID must not have all digits be the same.
19204
19205 Defaults to @samp{""}.
19206
19207 @end deftypevr
19208
19209 @deftypevr {@code{libvirt-configuration} parameter} string host-uuid-source
19210 Source to read host UUID.
19211
19212 @itemize @bullet
19213 @item
19214 @code{smbios}: fetch the UUID from @code{dmidecode -s system-uuid}
19215
19216 @item
19217 @code{machine-id}: fetch the UUID from @code{/etc/machine-id}
19218
19219 @end itemize
19220
19221 If @code{dmidecode} does not provide a valid UUID a temporary UUID will
19222 be generated.
19223
19224 Defaults to @samp{"smbios"}.
19225
19226 @end deftypevr
19227
19228 @deftypevr {@code{libvirt-configuration} parameter} integer keepalive-interval
19229 A keepalive message is sent to a client after @code{keepalive_interval}
19230 seconds of inactivity to check if the client is still responding. If
19231 set to -1, libvirtd will never send keepalive requests; however clients
19232 can still send them and the daemon will send responses.
19233
19234 Defaults to @samp{5}.
19235
19236 @end deftypevr
19237
19238 @deftypevr {@code{libvirt-configuration} parameter} integer keepalive-count
19239 Maximum number of keepalive messages that are allowed to be sent to the
19240 client without getting any response before the connection is considered
19241 broken.
19242
19243 In other words, the connection is automatically closed approximately
19244 after @code{keepalive_interval * (keepalive_count + 1)} seconds since
19245 the last message received from the client. When @code{keepalive-count}
19246 is set to 0, connections will be automatically closed after
19247 @code{keepalive-interval} seconds of inactivity without sending any
19248 keepalive messages.
19249
19250 Defaults to @samp{5}.
19251
19252 @end deftypevr
19253
19254 @deftypevr {@code{libvirt-configuration} parameter} integer admin-keepalive-interval
19255 Same as above but for admin interface.
19256
19257 Defaults to @samp{5}.
19258
19259 @end deftypevr
19260
19261 @deftypevr {@code{libvirt-configuration} parameter} integer admin-keepalive-count
19262 Same as above but for admin interface.
19263
19264 Defaults to @samp{5}.
19265
19266 @end deftypevr
19267
19268 @deftypevr {@code{libvirt-configuration} parameter} integer ovs-timeout
19269 Timeout for Open vSwitch calls.
19270
19271 The @code{ovs-vsctl} utility is used for the configuration and its
19272 timeout option is set by default to 5 seconds to avoid potential
19273 infinite waits blocking libvirt.
19274
19275 Defaults to @samp{5}.
19276
19277 @end deftypevr
19278
19279 @c %end of autogenerated docs
19280
19281 @subsubheading Virtlog daemon
19282 The virtlogd service is a server side daemon component of libvirt that is
19283 used to manage logs from virtual machine consoles.
19284
19285 This daemon is not used directly by libvirt client applications, rather it
19286 is called on their behalf by @code{libvirtd}. By maintaining the logs in a
19287 standalone daemon, the main @code{libvirtd} daemon can be restarted without
19288 risk of losing logs. The @code{virtlogd} daemon has the ability to re-exec()
19289 itself upon receiving @code{SIGUSR1}, to allow live upgrades without downtime.
19290
19291 @deffn {Scheme Variable} virtlog-service-type
19292 This is the type of the virtlog daemon.
19293 Its value must be a @code{virtlog-configuration}.
19294
19295 @example
19296 (service virtlog-service-type
19297 (virtlog-configuration
19298 (max-clients 1000)))
19299 @end example
19300 @end deffn
19301
19302 @deftypevr {@code{virtlog-configuration} parameter} integer log-level
19303 Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
19304
19305 Defaults to @samp{3}.
19306
19307 @end deftypevr
19308
19309 @deftypevr {@code{virtlog-configuration} parameter} string log-filters
19310 Logging filters.
19311
19312 A filter allows to select a different logging level for a given category
19313 of logs The format for a filter is one of:
19314
19315 @itemize @bullet
19316 @item
19317 x:name
19318
19319 @item
19320 x:+name
19321
19322 @end itemize
19323
19324 where @code{name} is a string which is matched against the category
19325 given in the @code{VIR_LOG_INIT()} at the top of each libvirt source
19326 file, e.g., "remote", "qemu", or "util.json" (the name in the filter can
19327 be a substring of the full category name, in order to match multiple
19328 similar categories), the optional "+" prefix tells libvirt to log stack
19329 trace for each message matching name, and @code{x} is the minimal level
19330 where matching messages should be logged:
19331
19332 @itemize @bullet
19333 @item
19334 1: DEBUG
19335
19336 @item
19337 2: INFO
19338
19339 @item
19340 3: WARNING
19341
19342 @item
19343 4: ERROR
19344
19345 @end itemize
19346
19347 Multiple filters can be defined in a single filters statement, they just
19348 need to be separated by spaces.
19349
19350 Defaults to @samp{"3:remote 4:event"}.
19351
19352 @end deftypevr
19353
19354 @deftypevr {@code{virtlog-configuration} parameter} string log-outputs
19355 Logging outputs.
19356
19357 An output is one of the places to save logging information The format
19358 for an output can be:
19359
19360 @table @code
19361 @item x:stderr
19362 output goes to stderr
19363
19364 @item x:syslog:name
19365 use syslog for the output and use the given name as the ident
19366
19367 @item x:file:file_path
19368 output to a file, with the given filepath
19369
19370 @item x:journald
19371 output to journald logging system
19372
19373 @end table
19374
19375 In all case the x prefix is the minimal level, acting as a filter
19376
19377 @itemize @bullet
19378 @item
19379 1: DEBUG
19380
19381 @item
19382 2: INFO
19383
19384 @item
19385 3: WARNING
19386
19387 @item
19388 4: ERROR
19389
19390 @end itemize
19391
19392 Multiple outputs can be defined, they just need to be separated by
19393 spaces.
19394
19395 Defaults to @samp{"3:stderr"}.
19396
19397 @end deftypevr
19398
19399 @deftypevr {@code{virtlog-configuration} parameter} integer max-clients
19400 Maximum number of concurrent client connections to allow over all
19401 sockets combined.
19402
19403 Defaults to @samp{1024}.
19404
19405 @end deftypevr
19406
19407 @deftypevr {@code{virtlog-configuration} parameter} integer max-size
19408 Maximum file size before rolling over.
19409
19410 Defaults to @samp{2MB}
19411
19412 @end deftypevr
19413
19414 @deftypevr {@code{virtlog-configuration} parameter} integer max-backups
19415 Maximum number of backup files to keep.
19416
19417 Defaults to @samp{3}
19418
19419 @end deftypevr
19420
19421 @subsubheading Transparent Emulation with QEMU
19422
19423 @cindex emulation
19424 @cindex @code{binfmt_misc}
19425 @code{qemu-binfmt-service-type} provides support for transparent
19426 emulation of program binaries built for different architectures---e.g.,
19427 it allows you to transparently execute an ARMv7 program on an x86_64
19428 machine. It achieves this by combining the @uref{https://www.qemu.org,
19429 QEMU} emulator and the @code{binfmt_misc} feature of the kernel Linux.
19430
19431 @defvr {Scheme Variable} qemu-binfmt-service-type
19432 This is the type of the QEMU/binfmt service for transparent emulation.
19433 Its value must be a @code{qemu-binfmt-configuration} object, which
19434 specifies the QEMU package to use as well as the architecture we want to
19435 emulated:
19436
19437 @example
19438 (service qemu-binfmt-service-type
19439 (qemu-binfmt-configuration
19440 (platforms (lookup-qemu-platforms "arm" "aarch64" "ppc"))))
19441 @end example
19442
19443 In this example, we enable transparent emulation for the ARM and aarch64
19444 platforms. Running @code{herd stop qemu-binfmt} turns it off, and
19445 running @code{herd start qemu-binfmt} turns it back on (@pxref{Invoking
19446 herd, the @command{herd} command,, shepherd, The GNU Shepherd Manual}).
19447 @end defvr
19448
19449 @deftp {Data Type} qemu-binfmt-configuration
19450 This is the configuration for the @code{qemu-binfmt} service.
19451
19452 @table @asis
19453 @item @code{platforms} (default: @code{'()})
19454 The list of emulated QEMU platforms. Each item must be a @dfn{platform
19455 object} as returned by @code{lookup-qemu-platforms} (see below).
19456
19457 @item @code{guix-support?} (default: @code{#f})
19458 When it is true, QEMU and all its dependencies are added to the build
19459 environment of @command{guix-daemon} (@pxref{Invoking guix-daemon,
19460 @code{--chroot-directory} option}). This allows the @code{binfmt_misc}
19461 handlers to be used within the build environment, which in turn means
19462 that you can transparently build programs for another architecture.
19463
19464 For example, let's suppose you're on an x86_64 machine and you have this
19465 service:
19466
19467 @example
19468 (service qemu-binfmt-service-type
19469 (qemu-binfmt-configuration
19470 (platforms (lookup-qemu-platforms "arm"))
19471 (guix-support? #t)))
19472 @end example
19473
19474 You can run:
19475
19476 @example
19477 guix build -s armhf-linux inkscape
19478 @end example
19479
19480 @noindent
19481 and it will build Inkscape for ARMv7 @emph{as if it were a native
19482 build}, transparently using QEMU to emulate the ARMv7 CPU. Pretty handy
19483 if you'd like to test a package build for an architecture you don't have
19484 access to!
19485
19486 @item @code{qemu} (default: @code{qemu})
19487 The QEMU package to use.
19488 @end table
19489 @end deftp
19490
19491 @deffn {Scheme Procedure} lookup-qemu-platforms @var{platforms}@dots{}
19492 Return the list of QEMU platform objects corresponding to
19493 @var{platforms}@dots{}. @var{platforms} must be a list of strings
19494 corresponding to platform names, such as @code{"arm"}, @code{"sparc"},
19495 @code{"mips64el"}, and so on.
19496 @end deffn
19497
19498 @deffn {Scheme Procedure} qemu-platform? @var{obj}
19499 Return true if @var{obj} is a platform object.
19500 @end deffn
19501
19502 @deffn {Scheme Procedure} qemu-platform-name @var{platform}
19503 Return the name of @var{platform}---a string such as @code{"arm"}.
19504 @end deffn
19505
19506 @node Version Control Services
19507 @subsubsection Version Control Services
19508
19509 The @code{(gnu services version-control)} module provides a service to
19510 allow remote access to local Git repositories. There are three options:
19511 the @code{git-daemon-service}, which provides access to repositories via
19512 the @code{git://} unsecured TCP-based protocol, extending the
19513 @code{nginx} web server to proxy some requests to
19514 @code{git-http-backend}, or providing a web interface with
19515 @code{cgit-service-type}.
19516
19517 @deffn {Scheme Procedure} git-daemon-service [#:config (git-daemon-configuration)]
19518
19519 Return a service that runs @command{git daemon}, a simple TCP server to
19520 expose repositories over the Git protocol for anonymous access.
19521
19522 The optional @var{config} argument should be a
19523 @code{<git-daemon-configuration>} object, by default it allows read-only
19524 access to exported@footnote{By creating the magic file
19525 "git-daemon-export-ok" in the repository directory.} repositories under
19526 @file{/srv/git}.
19527
19528 @end deffn
19529
19530 @deftp {Data Type} git-daemon-configuration
19531 Data type representing the configuration for @code{git-daemon-service}.
19532
19533 @table @asis
19534 @item @code{package} (default: @var{git})
19535 Package object of the Git distributed version control system.
19536
19537 @item @code{export-all?} (default: @var{#f})
19538 Whether to allow access for all Git repositories, even if they do not
19539 have the @file{git-daemon-export-ok} file.
19540
19541 @item @code{base-path} (default: @file{/srv/git})
19542 Whether to remap all the path requests as relative to the given path.
19543 If you run git daemon with @var{(base-path "/srv/git")} on example.com,
19544 then if you later try to pull @code{git://example.com/hello.git}, git
19545 daemon will interpret the path as @code{/srv/git/hello.git}.
19546
19547 @item @code{user-path} (default: @var{#f})
19548 Whether to allow @code{~user} notation to be used in requests. When
19549 specified with empty string, requests to @code{git://host/~alice/foo} is
19550 taken as a request to access @code{foo} repository in the home directory
19551 of user @code{alice}. If @var{(user-path "path")} is specified, the
19552 same request is taken as a request to access @code{path/foo} repository
19553 in the home directory of user @code{alice}.
19554
19555 @item @code{listen} (default: @var{'()})
19556 Whether to listen on specific IP addresses or hostnames, defaults to
19557 all.
19558
19559 @item @code{port} (default: @var{#f})
19560 Whether to listen on an alternative port, which defaults to 9418.
19561
19562 @item @code{whitelist} (default: @var{'()})
19563 If not empty, only allow access to this list of directories.
19564
19565 @item @code{extra-options} (default: @var{'()})
19566 Extra options will be passed to @code{git daemon}, please run
19567 @command{man git-daemon} for more information.
19568
19569 @end table
19570 @end deftp
19571
19572 The @code{git://} protocol lacks authentication. When you pull from a
19573 repository fetched via @code{git://}, you don't know that the data you
19574 receive was modified is really coming from the specified host, and you
19575 have your connection is subject to eavesdropping. It's better to use an
19576 authenticated and encrypted transport, such as @code{https}. Although Git allows you
19577 to serve repositories using unsophisticated file-based web servers,
19578 there is a faster protocol implemented by the @code{git-http-backend}
19579 program. This program is the back-end of a proper Git web service. It
19580 is designed to sit behind a FastCGI proxy. @xref{Web Services}, for more
19581 on running the necessary @code{fcgiwrap} daemon.
19582
19583 Guix has a separate configuration data type for serving Git repositories
19584 over HTTP.
19585
19586 @deftp {Data Type} git-http-configuration
19587 Data type representing the configuration for @code{git-http-service}.
19588
19589 @table @asis
19590 @item @code{package} (default: @var{git})
19591 Package object of the Git distributed version control system.
19592
19593 @item @code{git-root} (default: @file{/srv/git})
19594 Directory containing the Git repositories to expose to the world.
19595
19596 @item @code{export-all?} (default: @var{#f})
19597 Whether to expose access for all Git repositories in @var{git-root},
19598 even if they do not have the @file{git-daemon-export-ok} file.
19599
19600 @item @code{uri-path} (default: @file{/git/})
19601 Path prefix for Git access. With the default @code{/git/} prefix, this
19602 will map @code{http://@var{server}/git/@var{repo}.git} to
19603 @code{/srv/git/@var{repo}.git}. Requests whose URI paths do not begin
19604 with this prefix are not passed on to this Git instance.
19605
19606 @item @code{fcgiwrap-socket} (default: @code{127.0.0.1:9000})
19607 The socket on which the @code{fcgiwrap} daemon is listening. @xref{Web
19608 Services}.
19609 @end table
19610 @end deftp
19611
19612 There is no @code{git-http-service-type}, currently; instead you can
19613 create an @code{nginx-location-configuration} from a
19614 @code{git-http-configuration} and then add that location to a web
19615 server.
19616
19617 @deffn {Scheme Procedure} git-http-nginx-location-configuration @
19618 [config=(git-http-configuration)]
19619 Compute an @code{nginx-location-configuration} that corresponds to the
19620 given Git http configuration. An example nginx service definition to
19621 serve the default @file{/srv/git} over HTTPS might be:
19622
19623 @example
19624 (service nginx-service-type
19625 (nginx-configuration
19626 (server-blocks
19627 (list
19628 (nginx-server-configuration
19629 (listen '("443 ssl"))
19630 (server-name "git.my-host.org")
19631 (ssl-certificate
19632 "/etc/letsencrypt/live/git.my-host.org/fullchain.pem")
19633 (ssl-certificate-key
19634 "/etc/letsencrypt/live/git.my-host.org/privkey.pem")
19635 (locations
19636 (list
19637 (git-http-nginx-location-configuration
19638 (git-http-configuration (uri-path "/"))))))))))
19639 @end example
19640
19641 This example assumes that you are using Let's Encrypt to get your TLS
19642 certificate. @xref{Certificate Services}. The default @code{certbot}
19643 service will redirect all HTTP traffic on @code{git.my-host.org} to
19644 HTTPS. You will also need to add an @code{fcgiwrap} proxy to your
19645 system services. @xref{Web Services}.
19646 @end deffn
19647
19648 @subsubheading Cgit Service
19649
19650 @cindex Cgit service
19651 @cindex Git, web interface
19652 @uref{https://git.zx2c4.com/cgit/, Cgit} is a web frontend for Git
19653 repositories written in C.
19654
19655 The following example will configure the service with default values.
19656 By default, Cgit can be accessed on port 80 (@code{http://localhost:80}).
19657
19658 @example
19659 (service cgit-service-type)
19660 @end example
19661
19662 The @code{file-object} type designates either a file-like object
19663 (@pxref{G-Expressions, file-like objects}) or a string.
19664
19665 @c %start of fragment
19666
19667 Available @code{cgit-configuration} fields are:
19668
19669 @deftypevr {@code{cgit-configuration} parameter} package package
19670 The CGIT package.
19671
19672 @end deftypevr
19673
19674 @deftypevr {@code{cgit-configuration} parameter} nginx-server-configuration-list nginx
19675 NGINX configuration.
19676
19677 @end deftypevr
19678
19679 @deftypevr {@code{cgit-configuration} parameter} file-object about-filter
19680 Specifies a command which will be invoked to format the content of about
19681 pages (both top-level and for each repository).
19682
19683 Defaults to @samp{""}.
19684
19685 @end deftypevr
19686
19687 @deftypevr {@code{cgit-configuration} parameter} string agefile
19688 Specifies a path, relative to each repository path, which can be used to
19689 specify the date and time of the youngest commit in the repository.
19690
19691 Defaults to @samp{""}.
19692
19693 @end deftypevr
19694
19695 @deftypevr {@code{cgit-configuration} parameter} file-object auth-filter
19696 Specifies a command that will be invoked for authenticating repository
19697 access.
19698
19699 Defaults to @samp{""}.
19700
19701 @end deftypevr
19702
19703 @deftypevr {@code{cgit-configuration} parameter} string branch-sort
19704 Flag which, when set to @samp{age}, enables date ordering in the branch
19705 ref list, and when set @samp{name} enables ordering by branch name.
19706
19707 Defaults to @samp{"name"}.
19708
19709 @end deftypevr
19710
19711 @deftypevr {@code{cgit-configuration} parameter} string cache-root
19712 Path used to store the cgit cache entries.
19713
19714 Defaults to @samp{"/var/cache/cgit"}.
19715
19716 @end deftypevr
19717
19718 @deftypevr {@code{cgit-configuration} parameter} integer cache-static-ttl
19719 Number which specifies the time-to-live, in minutes, for the cached
19720 version of repository pages accessed with a fixed SHA1.
19721
19722 Defaults to @samp{-1}.
19723
19724 @end deftypevr
19725
19726 @deftypevr {@code{cgit-configuration} parameter} integer cache-dynamic-ttl
19727 Number which specifies the time-to-live, in minutes, for the cached
19728 version of repository pages accessed without a fixed SHA1.
19729
19730 Defaults to @samp{5}.
19731
19732 @end deftypevr
19733
19734 @deftypevr {@code{cgit-configuration} parameter} integer cache-repo-ttl
19735 Number which specifies the time-to-live, in minutes, for the cached
19736 version of the repository summary page.
19737
19738 Defaults to @samp{5}.
19739
19740 @end deftypevr
19741
19742 @deftypevr {@code{cgit-configuration} parameter} integer cache-root-ttl
19743 Number which specifies the time-to-live, in minutes, for the cached
19744 version of the repository index page.
19745
19746 Defaults to @samp{5}.
19747
19748 @end deftypevr
19749
19750 @deftypevr {@code{cgit-configuration} parameter} integer cache-scanrc-ttl
19751 Number which specifies the time-to-live, in minutes, for the result of
19752 scanning a path for Git repositories.
19753
19754 Defaults to @samp{15}.
19755
19756 @end deftypevr
19757
19758 @deftypevr {@code{cgit-configuration} parameter} integer cache-about-ttl
19759 Number which specifies the time-to-live, in minutes, for the cached
19760 version of the repository about page.
19761
19762 Defaults to @samp{15}.
19763
19764 @end deftypevr
19765
19766 @deftypevr {@code{cgit-configuration} parameter} integer cache-snapshot-ttl
19767 Number which specifies the time-to-live, in minutes, for the cached
19768 version of snapshots.
19769
19770 Defaults to @samp{5}.
19771
19772 @end deftypevr
19773
19774 @deftypevr {@code{cgit-configuration} parameter} integer cache-size
19775 The maximum number of entries in the cgit cache. When set to @samp{0},
19776 caching is disabled.
19777
19778 Defaults to @samp{0}.
19779
19780 @end deftypevr
19781
19782 @deftypevr {@code{cgit-configuration} parameter} boolean case-sensitive-sort?
19783 Sort items in the repo list case sensitively.
19784
19785 Defaults to @samp{#t}.
19786
19787 @end deftypevr
19788
19789 @deftypevr {@code{cgit-configuration} parameter} list clone-prefix
19790 List of common prefixes which, when combined with a repository URL,
19791 generates valid clone URLs for the repository.
19792
19793 Defaults to @samp{()}.
19794
19795 @end deftypevr
19796
19797 @deftypevr {@code{cgit-configuration} parameter} list clone-url
19798 List of @code{clone-url} templates.
19799
19800 Defaults to @samp{()}.
19801
19802 @end deftypevr
19803
19804 @deftypevr {@code{cgit-configuration} parameter} file-object commit-filter
19805 Command which will be invoked to format commit messages.
19806
19807 Defaults to @samp{""}.
19808
19809 @end deftypevr
19810
19811 @deftypevr {@code{cgit-configuration} parameter} string commit-sort
19812 Flag which, when set to @samp{date}, enables strict date ordering in the
19813 commit log, and when set to @samp{topo} enables strict topological
19814 ordering.
19815
19816 Defaults to @samp{"git log"}.
19817
19818 @end deftypevr
19819
19820 @deftypevr {@code{cgit-configuration} parameter} file-object css
19821 URL which specifies the css document to include in all cgit pages.
19822
19823 Defaults to @samp{"/share/cgit/cgit.css"}.
19824
19825 @end deftypevr
19826
19827 @deftypevr {@code{cgit-configuration} parameter} file-object email-filter
19828 Specifies a command which will be invoked to format names and email
19829 address of committers, authors, and taggers, as represented in various
19830 places throughout the cgit interface.
19831
19832 Defaults to @samp{""}.
19833
19834 @end deftypevr
19835
19836 @deftypevr {@code{cgit-configuration} parameter} boolean embedded?
19837 Flag which, when set to @samp{#t}, will make cgit generate a HTML
19838 fragment suitable for embedding in other HTML pages.
19839
19840 Defaults to @samp{#f}.
19841
19842 @end deftypevr
19843
19844 @deftypevr {@code{cgit-configuration} parameter} boolean enable-commit-graph?
19845 Flag which, when set to @samp{#t}, will make cgit print an ASCII-art
19846 commit history graph to the left of the commit messages in the
19847 repository log page.
19848
19849 Defaults to @samp{#f}.
19850
19851 @end deftypevr
19852
19853 @deftypevr {@code{cgit-configuration} parameter} boolean enable-filter-overrides?
19854 Flag which, when set to @samp{#t}, allows all filter settings to be
19855 overridden in repository-specific cgitrc files.
19856
19857 Defaults to @samp{#f}.
19858
19859 @end deftypevr
19860
19861 @deftypevr {@code{cgit-configuration} parameter} boolean enable-follow-links?
19862 Flag which, when set to @samp{#t}, allows users to follow a file in the
19863 log view.
19864
19865 Defaults to @samp{#f}.
19866
19867 @end deftypevr
19868
19869 @deftypevr {@code{cgit-configuration} parameter} boolean enable-http-clone?
19870 If set to @samp{#t}, cgit will act as an dumb HTTP endpoint for Git
19871 clones.
19872
19873 Defaults to @samp{#t}.
19874
19875 @end deftypevr
19876
19877 @deftypevr {@code{cgit-configuration} parameter} boolean enable-index-links?
19878 Flag which, when set to @samp{#t}, will make cgit generate extra links
19879 "summary", "commit", "tree" for each repo in the repository index.
19880
19881 Defaults to @samp{#f}.
19882
19883 @end deftypevr
19884
19885 @deftypevr {@code{cgit-configuration} parameter} boolean enable-index-owner?
19886 Flag which, when set to @samp{#t}, will make cgit display the owner of
19887 each repo in the repository index.
19888
19889 Defaults to @samp{#t}.
19890
19891 @end deftypevr
19892
19893 @deftypevr {@code{cgit-configuration} parameter} boolean enable-log-filecount?
19894 Flag which, when set to @samp{#t}, will make cgit print the number of
19895 modified files for each commit on the repository log page.
19896
19897 Defaults to @samp{#f}.
19898
19899 @end deftypevr
19900
19901 @deftypevr {@code{cgit-configuration} parameter} boolean enable-log-linecount?
19902 Flag which, when set to @samp{#t}, will make cgit print the number of
19903 added and removed lines for each commit on the repository log page.
19904
19905 Defaults to @samp{#f}.
19906
19907 @end deftypevr
19908
19909 @deftypevr {@code{cgit-configuration} parameter} boolean enable-remote-branches?
19910 Flag which, when set to @code{#t}, will make cgit display remote
19911 branches in the summary and refs views.
19912
19913 Defaults to @samp{#f}.
19914
19915 @end deftypevr
19916
19917 @deftypevr {@code{cgit-configuration} parameter} boolean enable-subject-links?
19918 Flag which, when set to @code{1}, will make cgit use the subject of the
19919 parent commit as link text when generating links to parent commits in
19920 commit view.
19921
19922 Defaults to @samp{#f}.
19923
19924 @end deftypevr
19925
19926 @deftypevr {@code{cgit-configuration} parameter} boolean enable-html-serving?
19927 Flag which, when set to @samp{#t}, will make cgit use the subject of the
19928 parent commit as link text when generating links to parent commits in
19929 commit view.
19930
19931 Defaults to @samp{#f}.
19932
19933 @end deftypevr
19934
19935 @deftypevr {@code{cgit-configuration} parameter} boolean enable-tree-linenumbers?
19936 Flag which, when set to @samp{#t}, will make cgit generate linenumber
19937 links for plaintext blobs printed in the tree view.
19938
19939 Defaults to @samp{#t}.
19940
19941 @end deftypevr
19942
19943 @deftypevr {@code{cgit-configuration} parameter} boolean enable-git-config?
19944 Flag which, when set to @samp{#f}, will allow cgit to use Git config to
19945 set any repo specific settings.
19946
19947 Defaults to @samp{#f}.
19948
19949 @end deftypevr
19950
19951 @deftypevr {@code{cgit-configuration} parameter} file-object favicon
19952 URL used as link to a shortcut icon for cgit.
19953
19954 Defaults to @samp{"/favicon.ico"}.
19955
19956 @end deftypevr
19957
19958 @deftypevr {@code{cgit-configuration} parameter} string footer
19959 The content of the file specified with this option will be included
19960 verbatim at the bottom of all pages (i.e. it replaces the standard
19961 "generated by..." message).
19962
19963 Defaults to @samp{""}.
19964
19965 @end deftypevr
19966
19967 @deftypevr {@code{cgit-configuration} parameter} string head-include
19968 The content of the file specified with this option will be included
19969 verbatim in the HTML HEAD section on all pages.
19970
19971 Defaults to @samp{""}.
19972
19973 @end deftypevr
19974
19975 @deftypevr {@code{cgit-configuration} parameter} string header
19976 The content of the file specified with this option will be included
19977 verbatim at the top of all pages.
19978
19979 Defaults to @samp{""}.
19980
19981 @end deftypevr
19982
19983 @deftypevr {@code{cgit-configuration} parameter} file-object include
19984 Name of a configfile to include before the rest of the current config-
19985 file is parsed.
19986
19987 Defaults to @samp{""}.
19988
19989 @end deftypevr
19990
19991 @deftypevr {@code{cgit-configuration} parameter} string index-header
19992 The content of the file specified with this option will be included
19993 verbatim above the repository index.
19994
19995 Defaults to @samp{""}.
19996
19997 @end deftypevr
19998
19999 @deftypevr {@code{cgit-configuration} parameter} string index-info
20000 The content of the file specified with this option will be included
20001 verbatim below the heading on the repository index page.
20002
20003 Defaults to @samp{""}.
20004
20005 @end deftypevr
20006
20007 @deftypevr {@code{cgit-configuration} parameter} boolean local-time?
20008 Flag which, if set to @samp{#t}, makes cgit print commit and tag times
20009 in the servers timezone.
20010
20011 Defaults to @samp{#f}.
20012
20013 @end deftypevr
20014
20015 @deftypevr {@code{cgit-configuration} parameter} file-object logo
20016 URL which specifies the source of an image which will be used as a logo
20017 on all cgit pages.
20018
20019 Defaults to @samp{"/share/cgit/cgit.png"}.
20020
20021 @end deftypevr
20022
20023 @deftypevr {@code{cgit-configuration} parameter} string logo-link
20024 URL loaded when clicking on the cgit logo image.
20025
20026 Defaults to @samp{""}.
20027
20028 @end deftypevr
20029
20030 @deftypevr {@code{cgit-configuration} parameter} file-object owner-filter
20031 Command which will be invoked to format the Owner column of the main
20032 page.
20033
20034 Defaults to @samp{""}.
20035
20036 @end deftypevr
20037
20038 @deftypevr {@code{cgit-configuration} parameter} integer max-atom-items
20039 Number of items to display in atom feeds view.
20040
20041 Defaults to @samp{10}.
20042
20043 @end deftypevr
20044
20045 @deftypevr {@code{cgit-configuration} parameter} integer max-commit-count
20046 Number of entries to list per page in "log" view.
20047
20048 Defaults to @samp{50}.
20049
20050 @end deftypevr
20051
20052 @deftypevr {@code{cgit-configuration} parameter} integer max-message-length
20053 Number of commit message characters to display in "log" view.
20054
20055 Defaults to @samp{80}.
20056
20057 @end deftypevr
20058
20059 @deftypevr {@code{cgit-configuration} parameter} integer max-repo-count
20060 Specifies the number of entries to list per page on the repository index
20061 page.
20062
20063 Defaults to @samp{50}.
20064
20065 @end deftypevr
20066
20067 @deftypevr {@code{cgit-configuration} parameter} integer max-repodesc-length
20068 Specifies the maximum number of repo description characters to display
20069 on the repository index page.
20070
20071 Defaults to @samp{80}.
20072
20073 @end deftypevr
20074
20075 @deftypevr {@code{cgit-configuration} parameter} integer max-blob-size
20076 Specifies the maximum size of a blob to display HTML for in KBytes.
20077
20078 Defaults to @samp{0}.
20079
20080 @end deftypevr
20081
20082 @deftypevr {@code{cgit-configuration} parameter} string max-stats
20083 Maximum statistics period. Valid values are @samp{week},@samp{month},
20084 @samp{quarter} and @samp{year}.
20085
20086 Defaults to @samp{""}.
20087
20088 @end deftypevr
20089
20090 @deftypevr {@code{cgit-configuration} parameter} mimetype-alist mimetype
20091 Mimetype for the specified filename extension.
20092
20093 Defaults to @samp{((gif "image/gif") (html "text/html") (jpg
20094 "image/jpeg") (jpeg "image/jpeg") (pdf "application/pdf") (png
20095 "image/png") (svg "image/svg+xml"))}.
20096
20097 @end deftypevr
20098
20099 @deftypevr {@code{cgit-configuration} parameter} file-object mimetype-file
20100 Specifies the file to use for automatic mimetype lookup.
20101
20102 Defaults to @samp{""}.
20103
20104 @end deftypevr
20105
20106 @deftypevr {@code{cgit-configuration} parameter} string module-link
20107 Text which will be used as the formatstring for a hyperlink when a
20108 submodule is printed in a directory listing.
20109
20110 Defaults to @samp{""}.
20111
20112 @end deftypevr
20113
20114 @deftypevr {@code{cgit-configuration} parameter} boolean nocache?
20115 If set to the value @samp{#t} caching will be disabled.
20116
20117 Defaults to @samp{#f}.
20118
20119 @end deftypevr
20120
20121 @deftypevr {@code{cgit-configuration} parameter} boolean noplainemail?
20122 If set to @samp{#t} showing full author email addresses will be
20123 disabled.
20124
20125 Defaults to @samp{#f}.
20126
20127 @end deftypevr
20128
20129 @deftypevr {@code{cgit-configuration} parameter} boolean noheader?
20130 Flag which, when set to @samp{#t}, will make cgit omit the standard
20131 header on all pages.
20132
20133 Defaults to @samp{#f}.
20134
20135 @end deftypevr
20136
20137 @deftypevr {@code{cgit-configuration} parameter} project-list project-list
20138 A list of subdirectories inside of @code{repository-directory}, relative
20139 to it, that should loaded as Git repositories. An empty list means that
20140 all subdirectories will be loaded.
20141
20142 Defaults to @samp{()}.
20143
20144 @end deftypevr
20145
20146 @deftypevr {@code{cgit-configuration} parameter} file-object readme
20147 Text which will be used as default value for @code{cgit-repo-readme}.
20148
20149 Defaults to @samp{""}.
20150
20151 @end deftypevr
20152
20153 @deftypevr {@code{cgit-configuration} parameter} boolean remove-suffix?
20154 If set to @code{#t} and @code{repository-directory} is enabled, if any
20155 repositories are found with a suffix of @code{.git}, this suffix will be
20156 removed for the URL and name.
20157
20158 Defaults to @samp{#f}.
20159
20160 @end deftypevr
20161
20162 @deftypevr {@code{cgit-configuration} parameter} integer renamelimit
20163 Maximum number of files to consider when detecting renames.
20164
20165 Defaults to @samp{-1}.
20166
20167 @end deftypevr
20168
20169 @deftypevr {@code{cgit-configuration} parameter} string repository-sort
20170 The way in which repositories in each section are sorted.
20171
20172 Defaults to @samp{""}.
20173
20174 @end deftypevr
20175
20176 @deftypevr {@code{cgit-configuration} parameter} robots-list robots
20177 Text used as content for the @code{robots} meta-tag.
20178
20179 Defaults to @samp{("noindex" "nofollow")}.
20180
20181 @end deftypevr
20182
20183 @deftypevr {@code{cgit-configuration} parameter} string root-desc
20184 Text printed below the heading on the repository index page.
20185
20186 Defaults to @samp{"a fast webinterface for the git dscm"}.
20187
20188 @end deftypevr
20189
20190 @deftypevr {@code{cgit-configuration} parameter} string root-readme
20191 The content of the file specified with this option will be included
20192 verbatim below thef "about" link on the repository index page.
20193
20194 Defaults to @samp{""}.
20195
20196 @end deftypevr
20197
20198 @deftypevr {@code{cgit-configuration} parameter} string root-title
20199 Text printed as heading on the repository index page.
20200
20201 Defaults to @samp{""}.
20202
20203 @end deftypevr
20204
20205 @deftypevr {@code{cgit-configuration} parameter} boolean scan-hidden-path
20206 If set to @samp{#t} and repository-directory is enabled,
20207 repository-directory will recurse into directories whose name starts
20208 with a period. Otherwise, repository-directory will stay away from such
20209 directories, considered as "hidden". Note that this does not apply to
20210 the ".git" directory in non-bare repos.
20211
20212 Defaults to @samp{#f}.
20213
20214 @end deftypevr
20215
20216 @deftypevr {@code{cgit-configuration} parameter} list snapshots
20217 Text which specifies the default set of snapshot formats that cgit
20218 generates links for.
20219
20220 Defaults to @samp{()}.
20221
20222 @end deftypevr
20223
20224 @deftypevr {@code{cgit-configuration} parameter} repository-directory repository-directory
20225 Name of the directory to scan for repositories (represents
20226 @code{scan-path}).
20227
20228 Defaults to @samp{"/srv/git"}.
20229
20230 @end deftypevr
20231
20232 @deftypevr {@code{cgit-configuration} parameter} string section
20233 The name of the current repository section - all repositories defined
20234 after this option will inherit the current section name.
20235
20236 Defaults to @samp{""}.
20237
20238 @end deftypevr
20239
20240 @deftypevr {@code{cgit-configuration} parameter} string section-sort
20241 Flag which, when set to @samp{1}, will sort the sections on the
20242 repository listing by name.
20243
20244 Defaults to @samp{""}.
20245
20246 @end deftypevr
20247
20248 @deftypevr {@code{cgit-configuration} parameter} integer section-from-path
20249 A number which, if defined prior to repository-directory, specifies how
20250 many path elements from each repo path to use as a default section name.
20251
20252 Defaults to @samp{0}.
20253
20254 @end deftypevr
20255
20256 @deftypevr {@code{cgit-configuration} parameter} boolean side-by-side-diffs?
20257 If set to @samp{#t} shows side-by-side diffs instead of unidiffs per
20258 default.
20259
20260 Defaults to @samp{#f}.
20261
20262 @end deftypevr
20263
20264 @deftypevr {@code{cgit-configuration} parameter} file-object source-filter
20265 Specifies a command which will be invoked to format plaintext blobs in
20266 the tree view.
20267
20268 Defaults to @samp{""}.
20269
20270 @end deftypevr
20271
20272 @deftypevr {@code{cgit-configuration} parameter} integer summary-branches
20273 Specifies the number of branches to display in the repository "summary"
20274 view.
20275
20276 Defaults to @samp{10}.
20277
20278 @end deftypevr
20279
20280 @deftypevr {@code{cgit-configuration} parameter} integer summary-log
20281 Specifies the number of log entries to display in the repository
20282 "summary" view.
20283
20284 Defaults to @samp{10}.
20285
20286 @end deftypevr
20287
20288 @deftypevr {@code{cgit-configuration} parameter} integer summary-tags
20289 Specifies the number of tags to display in the repository "summary"
20290 view.
20291
20292 Defaults to @samp{10}.
20293
20294 @end deftypevr
20295
20296 @deftypevr {@code{cgit-configuration} parameter} string strict-export
20297 Filename which, if specified, needs to be present within the repository
20298 for cgit to allow access to that repository.
20299
20300 Defaults to @samp{""}.
20301
20302 @end deftypevr
20303
20304 @deftypevr {@code{cgit-configuration} parameter} string virtual-root
20305 URL which, if specified, will be used as root for all cgit links.
20306
20307 Defaults to @samp{"/"}.
20308
20309 @end deftypevr
20310
20311 @deftypevr {@code{cgit-configuration} parameter} repository-cgit-configuration-list repositories
20312 A list of @dfn{cgit-repo} records to use with config.
20313
20314 Defaults to @samp{()}.
20315
20316 Available @code{repository-cgit-configuration} fields are:
20317
20318 @deftypevr {@code{repository-cgit-configuration} parameter} repo-list snapshots
20319 A mask of snapshot formats for this repo that cgit generates links for,
20320 restricted by the global @code{snapshots} setting.
20321
20322 Defaults to @samp{()}.
20323
20324 @end deftypevr
20325
20326 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object source-filter
20327 Override the default @code{source-filter}.
20328
20329 Defaults to @samp{""}.
20330
20331 @end deftypevr
20332
20333 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string url
20334 The relative URL used to access the repository.
20335
20336 Defaults to @samp{""}.
20337
20338 @end deftypevr
20339
20340 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object about-filter
20341 Override the default @code{about-filter}.
20342
20343 Defaults to @samp{""}.
20344
20345 @end deftypevr
20346
20347 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string branch-sort
20348 Flag which, when set to @samp{age}, enables date ordering in the branch
20349 ref list, and when set to @samp{name} enables ordering by branch name.
20350
20351 Defaults to @samp{""}.
20352
20353 @end deftypevr
20354
20355 @deftypevr {@code{repository-cgit-configuration} parameter} repo-list clone-url
20356 A list of URLs which can be used to clone repo.
20357
20358 Defaults to @samp{()}.
20359
20360 @end deftypevr
20361
20362 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object commit-filter
20363 Override the default @code{commit-filter}.
20364
20365 Defaults to @samp{""}.
20366
20367 @end deftypevr
20368
20369 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string commit-sort
20370 Flag which, when set to @samp{date}, enables strict date ordering in the
20371 commit log, and when set to @samp{topo} enables strict topological
20372 ordering.
20373
20374 Defaults to @samp{""}.
20375
20376 @end deftypevr
20377
20378 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string defbranch
20379 The name of the default branch for this repository. If no such branch
20380 exists in the repository, the first branch name (when sorted) is used as
20381 default instead. By default branch pointed to by HEAD, or "master" if
20382 there is no suitable HEAD.
20383
20384 Defaults to @samp{""}.
20385
20386 @end deftypevr
20387
20388 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string desc
20389 The value to show as repository description.
20390
20391 Defaults to @samp{""}.
20392
20393 @end deftypevr
20394
20395 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string homepage
20396 The value to show as repository homepage.
20397
20398 Defaults to @samp{""}.
20399
20400 @end deftypevr
20401
20402 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object email-filter
20403 Override the default @code{email-filter}.
20404
20405 Defaults to @samp{""}.
20406
20407 @end deftypevr
20408
20409 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-commit-graph?
20410 A flag which can be used to disable the global setting
20411 @code{enable-commit-graph?}.
20412
20413 Defaults to @samp{disabled}.
20414
20415 @end deftypevr
20416
20417 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-log-filecount?
20418 A flag which can be used to disable the global setting
20419 @code{enable-log-filecount?}.
20420
20421 Defaults to @samp{disabled}.
20422
20423 @end deftypevr
20424
20425 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-log-linecount?
20426 A flag which can be used to disable the global setting
20427 @code{enable-log-linecount?}.
20428
20429 Defaults to @samp{disabled}.
20430
20431 @end deftypevr
20432
20433 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-remote-branches?
20434 Flag which, when set to @code{#t}, will make cgit display remote
20435 branches in the summary and refs views.
20436
20437 Defaults to @samp{disabled}.
20438
20439 @end deftypevr
20440
20441 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-subject-links?
20442 A flag which can be used to override the global setting
20443 @code{enable-subject-links?}.
20444
20445 Defaults to @samp{disabled}.
20446
20447 @end deftypevr
20448
20449 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-html-serving?
20450 A flag which can be used to override the global setting
20451 @code{enable-html-serving?}.
20452
20453 Defaults to @samp{disabled}.
20454
20455 @end deftypevr
20456
20457 @deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean hide?
20458 Flag which, when set to @code{#t}, hides the repository from the
20459 repository index.
20460
20461 Defaults to @samp{#f}.
20462
20463 @end deftypevr
20464
20465 @deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean ignore?
20466 Flag which, when set to @samp{#t}, ignores the repository.
20467
20468 Defaults to @samp{#f}.
20469
20470 @end deftypevr
20471
20472 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object logo
20473 URL which specifies the source of an image which will be used as a logo
20474 on this repo’s pages.
20475
20476 Defaults to @samp{""}.
20477
20478 @end deftypevr
20479
20480 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string logo-link
20481 URL loaded when clicking on the cgit logo image.
20482
20483 Defaults to @samp{""}.
20484
20485 @end deftypevr
20486
20487 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object owner-filter
20488 Override the default @code{owner-filter}.
20489
20490 Defaults to @samp{""}.
20491
20492 @end deftypevr
20493
20494 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string module-link
20495 Text which will be used as the formatstring for a hyperlink when a
20496 submodule is printed in a directory listing. The arguments for the
20497 formatstring are the path and SHA1 of the submodule commit.
20498
20499 Defaults to @samp{""}.
20500
20501 @end deftypevr
20502
20503 @deftypevr {@code{repository-cgit-configuration} parameter} module-link-path module-link-path
20504 Text which will be used as the formatstring for a hyperlink when a
20505 submodule with the specified subdirectory path is printed in a directory
20506 listing.
20507
20508 Defaults to @samp{()}.
20509
20510 @end deftypevr
20511
20512 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string max-stats
20513 Override the default maximum statistics period.
20514
20515 Defaults to @samp{""}.
20516
20517 @end deftypevr
20518
20519 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string name
20520 The value to show as repository name.
20521
20522 Defaults to @samp{""}.
20523
20524 @end deftypevr
20525
20526 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string owner
20527 A value used to identify the owner of the repository.
20528
20529 Defaults to @samp{""}.
20530
20531 @end deftypevr
20532
20533 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string path
20534 An absolute path to the repository directory.
20535
20536 Defaults to @samp{""}.
20537
20538 @end deftypevr
20539
20540 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string readme
20541 A path (relative to repo) which specifies a file to include verbatim as
20542 the "About" page for this repo.
20543
20544 Defaults to @samp{""}.
20545
20546 @end deftypevr
20547
20548 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string section
20549 The name of the current repository section - all repositories defined
20550 after this option will inherit the current section name.
20551
20552 Defaults to @samp{""}.
20553
20554 @end deftypevr
20555
20556 @deftypevr {@code{repository-cgit-configuration} parameter} repo-list extra-options
20557 Extra options will be appended to cgitrc file.
20558
20559 Defaults to @samp{()}.
20560
20561 @end deftypevr
20562
20563 @end deftypevr
20564
20565 @deftypevr {@code{cgit-configuration} parameter} list extra-options
20566 Extra options will be appended to cgitrc file.
20567
20568 Defaults to @samp{()}.
20569
20570 @end deftypevr
20571
20572
20573 @c %end of fragment
20574
20575 However, it could be that you just want to get a @code{cgitrc} up and
20576 running. In that case, you can pass an @code{opaque-cgit-configuration}
20577 as a record to @code{cgit-service-type}. As its name indicates, an
20578 opaque configuration does not have easy reflective capabilities.
20579
20580 Available @code{opaque-cgit-configuration} fields are:
20581
20582 @deftypevr {@code{opaque-cgit-configuration} parameter} package cgit
20583 The cgit package.
20584 @end deftypevr
20585
20586 @deftypevr {@code{opaque-cgit-configuration} parameter} string string
20587 The contents of the @code{cgitrc}, as a string.
20588 @end deftypevr
20589
20590 For example, if your @code{cgitrc} is just the empty string, you
20591 could instantiate a cgit service like this:
20592
20593 @example
20594 (service cgit-service-type
20595 (opaque-cgit-configuration
20596 (cgitrc "")))
20597 @end example
20598
20599
20600 @node Game Services
20601 @subsubsection Game Services
20602
20603 @subsubheading The Battle for Wesnoth Service
20604 @cindex wesnothd
20605 @uref{https://wesnoth.org, The Battle for Wesnoth} is a fantasy, turn
20606 based tactical strategy game, with several single player campaigns, and
20607 multiplayer games (both networked and local).
20608
20609 @defvar {Scheme Variable} wesnothd-service-type
20610 Service type for the wesnothd service. Its value must be a
20611 @code{wesnothd-configuration} object. To run wesnothd in the default
20612 configuration, instantiate it as:
20613
20614 @example
20615 (service wesnothd-service-type)
20616 @end example
20617 @end defvar
20618
20619 @deftp {Data Type} wesnothd-configuration
20620 Data type representing the configuration of @command{wesnothd}.
20621
20622 @table @asis
20623 @item @code{package} (default: @code{wesnoth-server})
20624 The wesnoth server package to use.
20625
20626 @item @code{port} (default: @code{15000})
20627 The port to bind the server to.
20628 @end table
20629 @end deftp
20630
20631 @node Miscellaneous Services
20632 @subsubsection Miscellaneous Services
20633
20634 @cindex fingerprint
20635 @subsubheading Fingerprint Service
20636
20637 The @code{(gnu services fingerprint)} module provides a DBus service to
20638 read and identify fingerprints via a fingerprint sensor.
20639
20640 @defvr {Scheme Variable} fprintd-service-type
20641 The service type for @command{fprintd}, which provides the fingerprint
20642 reading capability.
20643
20644 @example
20645 (service fprintd-service-type)
20646 @end example
20647 @end defvr
20648
20649 @cindex sysctl
20650 @subsubheading System Control Service
20651
20652 The @code{(gnu services sysctl)} provides a service to configure kernel
20653 parameters at boot.
20654
20655 @defvr {Scheme Variable} sysctl-service-type
20656 The service type for @command{sysctl}, which modifies kernel parameters
20657 under @file{/proc/sys/}. To enable IPv4 forwarding, it can be
20658 instantiated as:
20659
20660 @example
20661 (service sysctl-service-type
20662 (sysctl-configuration
20663 (settings '(("net.ipv4.ip_forward" . "1")))))
20664 @end example
20665 @end defvr
20666
20667 @deftp {Data Type} sysctl-configuration
20668 The data type representing the configuration of @command{sysctl}.
20669
20670 @table @asis
20671 @item @code{sysctl} (default: @code{(file-append procps "/sbin/sysctl"})
20672 The @command{sysctl} executable to use.
20673
20674 @item @code{settings} (default: @code{'()})
20675 An association list specifies kernel parameters and their values.
20676 @end table
20677 @end deftp
20678
20679 @cindex pcscd
20680 @subsubheading PC/SC Smart Card Daemon Service
20681
20682 The @code{(gnu services security-token)} module provides the following service
20683 to run @command{pcscd}, the PC/SC Smart Card Daemon. @command{pcscd} is the
20684 daemon program for pcsc-lite and the MuscleCard framework. It is a resource
20685 manager that coordinates communications with smart card readers, smart cards
20686 and cryptographic tokens that are connected to the system.
20687
20688 @defvr {Scheme Variable} pcscd-service-type
20689 Service type for the @command{pcscd} service. Its value must be a
20690 @code{pcscd-configuration} object. To run pcscd in the default
20691 configuration, instantiate it as:
20692
20693 @example
20694 (service pcscd-service-type)
20695 @end example
20696 @end defvr
20697
20698 @deftp {Data Type} pcscd-configuration
20699 The data type representing the configuration of @command{pcscd}.
20700
20701 @table @asis
20702 @item @code{pcsc-lite} (default: @code{pcsc-lite})
20703 The pcsc-lite package that provides pcscd.
20704 @item @code{usb-drivers} (default: @code{(list ccid)})
20705 List of packages that provide USB drivers to pcscd. Drivers are expected to be
20706 under @file{pcsc/drivers} in the store directory of the package.
20707 @end table
20708 @end deftp
20709
20710 @cindex lirc
20711 @subsubheading Lirc Service
20712
20713 The @code{(gnu services lirc)} module provides the following service.
20714
20715 @deffn {Scheme Procedure} lirc-service [#:lirc lirc] @
20716 [#:device #f] [#:driver #f] [#:config-file #f] @
20717 [#:extra-options '()]
20718 Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
20719 decodes infrared signals from remote controls.
20720
20721 Optionally, @var{device}, @var{driver} and @var{config-file}
20722 (configuration file name) may be specified. See @command{lircd} manual
20723 for details.
20724
20725 Finally, @var{extra-options} is a list of additional command-line options
20726 passed to @command{lircd}.
20727 @end deffn
20728
20729 @cindex spice
20730 @subsubheading Spice Service
20731
20732 The @code{(gnu services spice)} module provides the following service.
20733
20734 @deffn {Scheme Procedure} spice-vdagent-service [#:spice-vdagent]
20735 Returns a service that runs @url{http://www.spice-space.org,VDAGENT}, a daemon
20736 that enables sharing the clipboard with a vm and setting the guest display
20737 resolution when the graphical console window resizes.
20738 @end deffn
20739
20740 @subsubsection Dictionary Services
20741 @cindex dictionary
20742 The @code{(gnu services dict)} module provides the following service:
20743
20744 @deffn {Scheme Procedure} dicod-service [#:config (dicod-configuration)]
20745 Return a service that runs the @command{dicod} daemon, an implementation
20746 of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
20747
20748 The optional @var{config} argument specifies the configuration for
20749 @command{dicod}, which should be a @code{<dicod-configuration>} object, by
20750 default it serves the GNU Collaborative International Dictonary of English.
20751
20752 You can add @command{open localhost} to your @file{~/.dico} file to make
20753 @code{localhost} the default server for @command{dico} client
20754 (@pxref{Initialization File,,, dico, GNU Dico Manual}).
20755 @end deffn
20756
20757 @deftp {Data Type} dicod-configuration
20758 Data type representing the configuration of dicod.
20759
20760 @table @asis
20761 @item @code{dico} (default: @var{dico})
20762 Package object of the GNU Dico dictionary server.
20763
20764 @item @code{interfaces} (default: @var{'("localhost")})
20765 This is the list of IP addresses and ports and possibly socket file
20766 names to listen to (@pxref{Server Settings, @code{listen} directive,,
20767 dico, GNU Dico Manual}).
20768
20769 @item @code{handlers} (default: @var{'()})
20770 List of @code{<dicod-handler>} objects denoting handlers (module instances).
20771
20772 @item @code{databases} (default: @var{(list %dicod-database:gcide)})
20773 List of @code{<dicod-database>} objects denoting dictionaries to be served.
20774 @end table
20775 @end deftp
20776
20777 @deftp {Data Type} dicod-handler
20778 Data type representing a dictionary handler (module instance).
20779
20780 @table @asis
20781 @item @code{name}
20782 Name of the handler (module instance).
20783
20784 @item @code{module} (default: @var{#f})
20785 Name of the dicod module of the handler (instance). If it is @code{#f},
20786 the module has the same name as the handler.
20787 (@pxref{Modules,,, dico, GNU Dico Manual}).
20788
20789 @item @code{options}
20790 List of strings or gexps representing the arguments for the module handler
20791 @end table
20792 @end deftp
20793
20794 @deftp {Data Type} dicod-database
20795 Data type representing a dictionary database.
20796
20797 @table @asis
20798 @item @code{name}
20799 Name of the database, will be used in DICT commands.
20800
20801 @item @code{handler}
20802 Name of the dicod handler (module instance) used by this database
20803 (@pxref{Handlers,,, dico, GNU Dico Manual}).
20804
20805 @item @code{complex?} (default: @var{#f})
20806 Whether the database configuration complex. The complex configuration
20807 will need a corresponding @code{<dicod-handler>} object, otherwise not.
20808
20809 @item @code{options}
20810 List of strings or gexps representing the arguments for the database
20811 (@pxref{Databases,,, dico, GNU Dico Manual}).
20812 @end table
20813 @end deftp
20814
20815 @defvr {Scheme Variable} %dicod-database:gcide
20816 A @code{<dicod-database>} object serving the GNU Collaborative International
20817 Dictionary of English using the @code{gcide} package.
20818 @end defvr
20819
20820 The following is an example @code{dicod-service} configuration.
20821
20822 @example
20823 (dicod-service #:config
20824 (dicod-configuration
20825 (handlers (list (dicod-handler
20826 (name "wordnet")
20827 (module "dictorg")
20828 (options
20829 (list #~(string-append "dbdir=" #$wordnet))))))
20830 (databases (list (dicod-database
20831 (name "wordnet")
20832 (complex? #t)
20833 (handler "wordnet")
20834 (options '("database=wn")))
20835 %dicod-database:gcide))))
20836 @end example
20837
20838 @node Setuid Programs
20839 @subsection Setuid Programs
20840
20841 @cindex setuid programs
20842 Some programs need to run with ``root'' privileges, even when they are
20843 launched by unprivileged users. A notorious example is the
20844 @command{passwd} program, which users can run to change their
20845 password, and which needs to access the @file{/etc/passwd} and
20846 @file{/etc/shadow} files---something normally restricted to root, for
20847 obvious security reasons. To address that, these executables are
20848 @dfn{setuid-root}, meaning that they always run with root privileges
20849 (@pxref{How Change Persona,,, libc, The GNU C Library Reference Manual},
20850 for more info about the setuid mechanism.)
20851
20852 The store itself @emph{cannot} contain setuid programs: that would be a
20853 security issue since any user on the system can write derivations that
20854 populate the store (@pxref{The Store}). Thus, a different mechanism is
20855 used: instead of changing the setuid bit directly on files that are in
20856 the store, we let the system administrator @emph{declare} which programs
20857 should be setuid root.
20858
20859 The @code{setuid-programs} field of an @code{operating-system}
20860 declaration contains a list of G-expressions denoting the names of
20861 programs to be setuid-root (@pxref{Using the Configuration System}).
20862 For instance, the @command{passwd} program, which is part of the Shadow
20863 package, can be designated by this G-expression (@pxref{G-Expressions}):
20864
20865 @example
20866 #~(string-append #$shadow "/bin/passwd")
20867 @end example
20868
20869 A default set of setuid programs is defined by the
20870 @code{%setuid-programs} variable of the @code{(gnu system)} module.
20871
20872 @defvr {Scheme Variable} %setuid-programs
20873 A list of G-expressions denoting common programs that are setuid-root.
20874
20875 The list includes commands such as @command{passwd}, @command{ping},
20876 @command{su}, and @command{sudo}.
20877 @end defvr
20878
20879 Under the hood, the actual setuid programs are created in the
20880 @file{/run/setuid-programs} directory at system activation time. The
20881 files in this directory refer to the ``real'' binaries, which are in the
20882 store.
20883
20884 @node X.509 Certificates
20885 @subsection X.509 Certificates
20886
20887 @cindex HTTPS, certificates
20888 @cindex X.509 certificates
20889 @cindex TLS
20890 Web servers available over HTTPS (that is, HTTP over the transport-layer
20891 security mechanism, TLS) send client programs an @dfn{X.509 certificate}
20892 that the client can then use to @emph{authenticate} the server. To do
20893 that, clients verify that the server's certificate is signed by a
20894 so-called @dfn{certificate authority} (CA). But to verify the CA's
20895 signature, clients must have first acquired the CA's certificate.
20896
20897 Web browsers such as GNU@tie{}IceCat include their own set of CA
20898 certificates, such that they are able to verify CA signatures
20899 out-of-the-box.
20900
20901 However, most other programs that can talk HTTPS---@command{wget},
20902 @command{git}, @command{w3m}, etc.---need to be told where CA
20903 certificates can be found.
20904
20905 @cindex @code{nss-certs}
20906 In GuixSD, this is done by adding a package that provides certificates
20907 to the @code{packages} field of the @code{operating-system} declaration
20908 (@pxref{operating-system Reference}). GuixSD includes one such package,
20909 @code{nss-certs}, which is a set of CA certificates provided as part of
20910 Mozilla's Network Security Services.
20911
20912 Note that it is @emph{not} part of @var{%base-packages}, so you need to
20913 explicitly add it. The @file{/etc/ssl/certs} directory, which is where
20914 most applications and libraries look for certificates by default, points
20915 to the certificates installed globally.
20916
20917 Unprivileged users, including users of Guix on a foreign distro,
20918 can also install their own certificate package in
20919 their profile. A number of environment variables need to be defined so
20920 that applications and libraries know where to find them. Namely, the
20921 OpenSSL library honors the @code{SSL_CERT_DIR} and @code{SSL_CERT_FILE}
20922 variables. Some applications add their own environment variables; for
20923 instance, the Git version control system honors the certificate bundle
20924 pointed to by the @code{GIT_SSL_CAINFO} environment variable. Thus, you
20925 would typically run something like:
20926
20927 @example
20928 $ guix package -i nss-certs
20929 $ export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs"
20930 $ export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
20931 $ export GIT_SSL_CAINFO="$SSL_CERT_FILE"
20932 @end example
20933
20934 As another example, R requires the @code{CURL_CA_BUNDLE} environment
20935 variable to point to a certificate bundle, so you would have to run
20936 something like this:
20937
20938 @example
20939 $ guix package -i nss-certs
20940 $ export CURL_CA_BUNDLE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
20941 @end example
20942
20943 For other applications you may want to look up the required environment
20944 variable in the relevant documentation.
20945
20946
20947 @node Name Service Switch
20948 @subsection Name Service Switch
20949
20950 @cindex name service switch
20951 @cindex NSS
20952 The @code{(gnu system nss)} module provides bindings to the
20953 configuration file of the libc @dfn{name service switch} or @dfn{NSS}
20954 (@pxref{NSS Configuration File,,, libc, The GNU C Library Reference
20955 Manual}). In a nutshell, the NSS is a mechanism that allows libc to be
20956 extended with new ``name'' lookup methods for system databases, which
20957 includes host names, service names, user accounts, and more (@pxref{Name
20958 Service Switch, System Databases and Name Service Switch,, libc, The GNU
20959 C Library Reference Manual}).
20960
20961 The NSS configuration specifies, for each system database, which lookup
20962 method is to be used, and how the various methods are chained
20963 together---for instance, under which circumstances NSS should try the
20964 next method in the list. The NSS configuration is given in the
20965 @code{name-service-switch} field of @code{operating-system} declarations
20966 (@pxref{operating-system Reference, @code{name-service-switch}}).
20967
20968 @cindex nss-mdns
20969 @cindex .local, host name lookup
20970 As an example, the declaration below configures the NSS to use the
20971 @uref{http://0pointer.de/lennart/projects/nss-mdns/, @code{nss-mdns}
20972 back-end}, which supports host name lookups over multicast DNS (mDNS)
20973 for host names ending in @code{.local}:
20974
20975 @example
20976 (name-service-switch
20977 (hosts (list %files ;first, check /etc/hosts
20978
20979 ;; If the above did not succeed, try
20980 ;; with 'mdns_minimal'.
20981 (name-service
20982 (name "mdns_minimal")
20983
20984 ;; 'mdns_minimal' is authoritative for
20985 ;; '.local'. When it returns "not found",
20986 ;; no need to try the next methods.
20987 (reaction (lookup-specification
20988 (not-found => return))))
20989
20990 ;; Then fall back to DNS.
20991 (name-service
20992 (name "dns"))
20993
20994 ;; Finally, try with the "full" 'mdns'.
20995 (name-service
20996 (name "mdns")))))
20997 @end example
20998
20999 Do not worry: the @code{%mdns-host-lookup-nss} variable (see below)
21000 contains this configuration, so you will not have to type it if all you
21001 want is to have @code{.local} host lookup working.
21002
21003 Note that, in this case, in addition to setting the
21004 @code{name-service-switch} of the @code{operating-system} declaration,
21005 you also need to use @code{avahi-service} (@pxref{Networking Services,
21006 @code{avahi-service}}), or @var{%desktop-services}, which includes it
21007 (@pxref{Desktop Services}). Doing this makes @code{nss-mdns} accessible
21008 to the name service cache daemon (@pxref{Base Services,
21009 @code{nscd-service}}).
21010
21011 For convenience, the following variables provide typical NSS
21012 configurations.
21013
21014 @defvr {Scheme Variable} %default-nss
21015 This is the default name service switch configuration, a
21016 @code{name-service-switch} object.
21017 @end defvr
21018
21019 @defvr {Scheme Variable} %mdns-host-lookup-nss
21020 This is the name service switch configuration with support for host name
21021 lookup over multicast DNS (mDNS) for host names ending in @code{.local}.
21022 @end defvr
21023
21024 The reference for name service switch configuration is given below. It
21025 is a direct mapping of the configuration file format of the C library , so
21026 please refer to the C library manual for more information (@pxref{NSS
21027 Configuration File,,, libc, The GNU C Library Reference Manual}).
21028 Compared to the configuration file format of libc NSS, it has the advantage
21029 not only of adding this warm parenthetic feel that we like, but also
21030 static checks: you will know about syntax errors and typos as soon as you
21031 run @command{guix system}.
21032
21033 @deftp {Data Type} name-service-switch
21034
21035 This is the data type representation the configuration of libc's name
21036 service switch (NSS). Each field below represents one of the supported
21037 system databases.
21038
21039 @table @code
21040 @item aliases
21041 @itemx ethers
21042 @itemx group
21043 @itemx gshadow
21044 @itemx hosts
21045 @itemx initgroups
21046 @itemx netgroup
21047 @itemx networks
21048 @itemx password
21049 @itemx public-key
21050 @itemx rpc
21051 @itemx services
21052 @itemx shadow
21053 The system databases handled by the NSS. Each of these fields must be a
21054 list of @code{<name-service>} objects (see below).
21055 @end table
21056 @end deftp
21057
21058 @deftp {Data Type} name-service
21059
21060 This is the data type representing an actual name service and the
21061 associated lookup action.
21062
21063 @table @code
21064 @item name
21065 A string denoting the name service (@pxref{Services in the NSS
21066 configuration,,, libc, The GNU C Library Reference Manual}).
21067
21068 Note that name services listed here must be visible to nscd. This is
21069 achieved by passing the @code{#:name-services} argument to
21070 @code{nscd-service} the list of packages providing the needed name
21071 services (@pxref{Base Services, @code{nscd-service}}).
21072
21073 @item reaction
21074 An action specified using the @code{lookup-specification} macro
21075 (@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
21076 Reference Manual}). For example:
21077
21078 @example
21079 (lookup-specification (unavailable => continue)
21080 (success => return))
21081 @end example
21082 @end table
21083 @end deftp
21084
21085 @node Initial RAM Disk
21086 @subsection Initial RAM Disk
21087
21088 @cindex initrd
21089 @cindex initial RAM disk
21090 For bootstrapping purposes, the Linux-Libre kernel is passed an
21091 @dfn{initial RAM disk}, or @dfn{initrd}. An initrd contains a temporary
21092 root file system as well as an initialization script. The latter is
21093 responsible for mounting the real root file system, and for loading any
21094 kernel modules that may be needed to achieve that.
21095
21096 The @code{initrd-modules} field of an @code{operating-system}
21097 declaration allows you to specify Linux-libre kernel modules that must
21098 be available in the initrd. In particular, this is where you would list
21099 modules needed to actually drive the hard disk where your root partition
21100 is---although the default value of @code{initrd-modules} should cover
21101 most use cases. For example, assuming you need the @code{megaraid_sas}
21102 module in addition to the default modules to be able to access your root
21103 file system, you would write:
21104
21105 @example
21106 (operating-system
21107 ;; @dots{}
21108 (initrd-modules (cons "megaraid_sas" %base-initrd-modules)))
21109 @end example
21110
21111 @defvr {Scheme Variable} %base-initrd-modules
21112 This is the list of kernel modules included in the initrd by default.
21113 @end defvr
21114
21115 Furthermore, if you need lower-level customization, the @code{initrd}
21116 field of an @code{operating-system} declaration allows
21117 you to specify which initrd you would like to use. The @code{(gnu
21118 system linux-initrd)} module provides three ways to build an initrd: the
21119 high-level @code{base-initrd} procedure and the low-level
21120 @code{raw-initrd} and @code{expression->initrd} procedures.
21121
21122 The @code{base-initrd} procedure is intended to cover most common uses.
21123 For example, if you want to add a bunch of kernel modules to be loaded
21124 at boot time, you can define the @code{initrd} field of the operating
21125 system declaration like this:
21126
21127 @example
21128 (initrd (lambda (file-systems . rest)
21129 ;; Create a standard initrd but set up networking
21130 ;; with the parameters QEMU expects by default.
21131 (apply base-initrd file-systems
21132 #:qemu-networking? #t
21133 rest)))
21134 @end example
21135
21136 The @code{base-initrd} procedure also handles common use cases that
21137 involves using the system as a QEMU guest, or as a ``live'' system with
21138 volatile root file system.
21139
21140 The @code{base-initrd} procedure is built from @code{raw-initrd} procedure.
21141 Unlike @code{base-initrd}, @code{raw-initrd} doesn't do anything high-level,
21142 such as trying to guess which kernel modules and packages should be included
21143 to the initrd. An example use of @code{raw-initrd} is when a user has
21144 a custom Linux kernel configuration and default kernel modules included by
21145 @code{base-initrd} are not available.
21146
21147 The initial RAM disk produced by @code{base-initrd} or @code{raw-initrd}
21148 honors several options passed on the Linux kernel command line
21149 (that is, arguments passed @i{via} the @code{linux} command of GRUB, or the
21150 @code{-append} option of QEMU), notably:
21151
21152 @table @code
21153 @item --load=@var{boot}
21154 Tell the initial RAM disk to load @var{boot}, a file containing a Scheme
21155 program, once it has mounted the root file system.
21156
21157 GuixSD uses this option to yield control to a boot program that runs the
21158 service activation programs and then spawns the GNU@tie{}Shepherd, the
21159 initialization system.
21160
21161 @item --root=@var{root}
21162 Mount @var{root} as the root file system. @var{root} can be a
21163 device name like @code{/dev/sda1}, a file system label, or a file system
21164 UUID.
21165
21166 @item --system=@var{system}
21167 Have @file{/run/booted-system} and @file{/run/current-system} point to
21168 @var{system}.
21169
21170 @item modprobe.blacklist=@var{modules}@dots{}
21171 @cindex module, black-listing
21172 @cindex black list, of kernel modules
21173 Instruct the initial RAM disk as well as the @command{modprobe} command
21174 (from the kmod package) to refuse to load @var{modules}. @var{modules}
21175 must be a comma-separated list of module names---e.g.,
21176 @code{usbkbd,9pnet}.
21177
21178 @item --repl
21179 Start a read-eval-print loop (REPL) from the initial RAM disk before it
21180 tries to load kernel modules and to mount the root file system. Our
21181 marketing team calls it @dfn{boot-to-Guile}. The Schemer in you will
21182 love it. @xref{Using Guile Interactively,,, guile, GNU Guile Reference
21183 Manual}, for more information on Guile's REPL.
21184
21185 @end table
21186
21187 Now that you know all the features that initial RAM disks produced by
21188 @code{base-initrd} and @code{raw-initrd} provide,
21189 here is how to use it and customize it further.
21190
21191 @cindex initrd
21192 @cindex initial RAM disk
21193 @deffn {Monadic Procedure} raw-initrd @var{file-systems} @
21194 [#:linux-modules '()] [#:mapped-devices '()] @
21195 [#:helper-packages '()] [#:qemu-networking? #f] [#:volatile-root? #f]
21196 Return a monadic derivation that builds a raw initrd. @var{file-systems} is
21197 a list of file systems to be mounted by the initrd, possibly in addition to
21198 the root file system specified on the kernel command line via @code{--root}.
21199 @var{linux-modules} is a list of kernel modules to be loaded at boot time.
21200 @var{mapped-devices} is a list of device mappings to realize before
21201 @var{file-systems} are mounted (@pxref{Mapped Devices}).
21202 @var{helper-packages} is a list of packages to be copied in the initrd. It may
21203 include @code{e2fsck/static} or other packages needed by the initrd to check
21204 the root file system.
21205
21206 When @var{qemu-networking?} is true, set up networking with the standard QEMU
21207 parameters. When @var{virtio?} is true, load additional modules so that the
21208 initrd can be used as a QEMU guest with para-virtualized I/O drivers.
21209
21210 When @var{volatile-root?} is true, the root file system is writable but any changes
21211 to it are lost.
21212 @end deffn
21213
21214 @deffn {Monadic Procedure} base-initrd @var{file-systems} @
21215 [#:mapped-devices '()] [#:qemu-networking? #f] [#:volatile-root? #f]@
21216 [#:linux-modules '()]
21217 Return a monadic derivation that builds a generic initrd, with kernel
21218 modules taken from @var{linux}. @var{file-systems} is a list of file-systems to be
21219 mounted by the initrd, possibly in addition to the root file system specified
21220 on the kernel command line via @code{--root}. @var{mapped-devices} is a list of device
21221 mappings to realize before @var{file-systems} are mounted.
21222
21223 @var{qemu-networking?} and @var{volatile-root?} behaves as in @code{raw-initrd}.
21224
21225 The initrd is automatically populated with all the kernel modules necessary
21226 for @var{file-systems} and for the given options. Additional kernel
21227 modules can be listed in @var{linux-modules}. They will be added to the initrd, and
21228 loaded at boot time in the order in which they appear.
21229 @end deffn
21230
21231 Needless to say, the initrds we produce and use embed a
21232 statically-linked Guile, and the initialization program is a Guile
21233 program. That gives a lot of flexibility. The
21234 @code{expression->initrd} procedure builds such an initrd, given the
21235 program to run in that initrd.
21236
21237 @deffn {Monadic Procedure} expression->initrd @var{exp} @
21238 [#:guile %guile-static-stripped] [#:name "guile-initrd"]
21239 Return a derivation that builds a Linux initrd (a gzipped cpio archive)
21240 containing @var{guile} and that evaluates @var{exp}, a G-expression,
21241 upon booting. All the derivations referenced by @var{exp} are
21242 automatically copied to the initrd.
21243 @end deffn
21244
21245 @node Bootloader Configuration
21246 @subsection Bootloader Configuration
21247
21248 @cindex bootloader
21249 @cindex boot loader
21250
21251 The operating system supports multiple bootloaders. The bootloader is
21252 configured using @code{bootloader-configuration} declaration. All the
21253 fields of this structure are bootloader agnostic except for one field,
21254 @code{bootloader} that indicates the bootloader to be configured and
21255 installed.
21256
21257 Some of the bootloaders do not honor every field of
21258 @code{bootloader-configuration}. For instance, the extlinux
21259 bootloader does not support themes and thus ignores the @code{theme}
21260 field.
21261
21262 @deftp {Data Type} bootloader-configuration
21263 The type of a bootloader configuration declaration.
21264
21265 @table @asis
21266
21267 @item @code{bootloader}
21268 @cindex EFI, bootloader
21269 @cindex UEFI, bootloader
21270 @cindex BIOS, bootloader
21271 The bootloader to use, as a @code{bootloader} object. For now
21272 @code{grub-bootloader}, @code{grub-efi-bootloader},
21273 @code{extlinux-bootloader} and @code{u-boot-bootloader} are supported.
21274
21275 @vindex grub-efi-bootloader
21276 @code{grub-efi-bootloader} allows to boot on modern systems using the
21277 @dfn{Unified Extensible Firmware Interface} (UEFI). This is what you should
21278 use if the installation image contains a @file{/sys/firmware/efi} directory
21279 when you boot it on your system.
21280
21281 @vindex grub-bootloader
21282 @code{grub-bootloader} allows you to boot in particular Intel-based machines
21283 in ``legacy'' BIOS mode.
21284
21285 @cindex ARM, bootloaders
21286 @cindex AArch64, bootloaders
21287 Available bootloaders are described in @code{(gnu bootloader @dots{})}
21288 modules. In particular, @code{(gnu bootloader u-boot)} contains definitions
21289 of bootloaders for a wide range of ARM and AArch64 systems, using the
21290 @uref{http://www.denx.de/wiki/U-Boot/, U-Boot bootloader}.
21291
21292 @item @code{target}
21293 This is a string denoting the target onto which to install the
21294 bootloader.
21295
21296 The interpretation depends on the bootloader in question. For
21297 @code{grub-bootloader}, for example, it should be a device name understood by
21298 the bootloader @command{installer} command, such as @code{/dev/sda} or
21299 @code{(hd0)} (@pxref{Invoking grub-install,,, grub, GNU GRUB Manual}). For
21300 @code{grub-efi-bootloader}, it should be the mount point of the EFI file
21301 system, usually @file{/boot/efi}.
21302
21303 @item @code{menu-entries} (default: @code{()})
21304 A possibly empty list of @code{menu-entry} objects (see below), denoting
21305 entries to appear in the bootloader menu, in addition to the current
21306 system entry and the entry pointing to previous system generations.
21307
21308 @item @code{default-entry} (default: @code{0})
21309 The index of the default boot menu entry. Index 0 is for the entry of the
21310 current system.
21311
21312 @item @code{timeout} (default: @code{5})
21313 The number of seconds to wait for keyboard input before booting. Set to
21314 0 to boot immediately, and to -1 to wait indefinitely.
21315
21316 @item @code{theme} (default: @var{#f})
21317 The bootloader theme object describing the theme to use. If no theme
21318 is provided, some bootloaders might use a default theme, that's true
21319 for GRUB.
21320
21321 @item @code{terminal-outputs} (default: @code{'gfxterm})
21322 The output terminals used for the bootloader boot menu, as a list of
21323 symbols. GRUB accepts the values: @code{console}, @code{serial},
21324 @code{serial_@{0-3@}}, @code{gfxterm}, @code{vga_text},
21325 @code{mda_text}, @code{morse}, and @code{pkmodem}. This field
21326 corresponds to the GRUB variable @code{GRUB_TERMINAL_OUTPUT} (@pxref{Simple
21327 configuration,,, grub,GNU GRUB manual}).
21328
21329 @item @code{terminal-inputs} (default: @code{'()})
21330 The input terminals used for the bootloader boot menu, as a list of
21331 symbols. For GRUB, the default is the native platform terminal as
21332 determined at run-time. GRUB accepts the values: @code{console},
21333 @code{serial}, @code{serial_@{0-3@}}, @code{at_keyboard}, and
21334 @code{usb_keyboard}. This field corresponds to the GRUB variable
21335 @code{GRUB_TERMINAL_INPUT} (@pxref{Simple configuration,,, grub,GNU GRUB
21336 manual}).
21337
21338 @item @code{serial-unit} (default: @code{#f})
21339 The serial unit used by the bootloader, as an integer from 0 to 3.
21340 For GRUB, it is chosen at run-time; currently GRUB chooses 0, which
21341 corresponds to COM1 (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
21342
21343 @item @code{serial-speed} (default: @code{#f})
21344 The speed of the serial interface, as an integer. For GRUB, the
21345 default value is chosen at run-time; currently GRUB chooses
21346 9600@tie{}bps (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
21347 @end table
21348
21349 @end deftp
21350
21351 @cindex dual boot
21352 @cindex boot menu
21353 Should you want to list additional boot menu entries @i{via} the
21354 @code{menu-entries} field above, you will need to create them with the
21355 @code{menu-entry} form. For example, imagine you want to be able to
21356 boot another distro (hard to imagine!), you can define a menu entry
21357 along these lines:
21358
21359 @example
21360 (menu-entry
21361 (label "The Other Distro")
21362 (linux "/boot/old/vmlinux-2.6.32")
21363 (linux-arguments '("root=/dev/sda2"))
21364 (initrd "/boot/old/initrd"))
21365 @end example
21366
21367 Details below.
21368
21369 @deftp {Data Type} menu-entry
21370 The type of an entry in the bootloader menu.
21371
21372 @table @asis
21373
21374 @item @code{label}
21375 The label to show in the menu---e.g., @code{"GNU"}.
21376
21377 @item @code{linux}
21378 The Linux kernel image to boot, for example:
21379
21380 @example
21381 (file-append linux-libre "/bzImage")
21382 @end example
21383
21384 For GRUB, it is also possible to specify a device explicitly in the
21385 file path using GRUB's device naming convention (@pxref{Naming
21386 convention,,, grub, GNU GRUB manual}), for example:
21387
21388 @example
21389 "(hd0,msdos1)/boot/vmlinuz"
21390 @end example
21391
21392 If the device is specified explicitly as above, then the @code{device}
21393 field is ignored entirely.
21394
21395 @item @code{linux-arguments} (default: @code{()})
21396 The list of extra Linux kernel command-line arguments---e.g.,
21397 @code{("console=ttyS0")}.
21398
21399 @item @code{initrd}
21400 A G-Expression or string denoting the file name of the initial RAM disk
21401 to use (@pxref{G-Expressions}).
21402 @item @code{device} (default: @code{#f})
21403 The device where the kernel and initrd are to be found---i.e., for GRUB,
21404 @dfn{root} for this menu entry (@pxref{root,,, grub, GNU GRUB manual}).
21405
21406 This may be a file system label (a string), a file system UUID (a
21407 bytevector, @pxref{File Systems}), or @code{#f}, in which case
21408 the bootloader will search the device containing the file specified by
21409 the @code{linux} field (@pxref{search,,, grub, GNU GRUB manual}). It
21410 must @emph{not} be an OS device name such as @file{/dev/sda1}.
21411
21412 @end table
21413 @end deftp
21414
21415 @c FIXME: Write documentation once it's stable.
21416 Fow now only GRUB has theme support. GRUB themes are created using
21417 the @code{grub-theme} form, which is not documented yet.
21418
21419 @defvr {Scheme Variable} %default-theme
21420 This is the default GRUB theme used by the operating system if no
21421 @code{theme} field is specified in @code{bootloader-configuration}
21422 record.
21423
21424 It comes with a fancy background image displaying the GNU and Guix
21425 logos.
21426 @end defvr
21427
21428
21429 @node Invoking guix system
21430 @subsection Invoking @code{guix system}
21431
21432 Once you have written an operating system declaration as seen in the
21433 previous section, it can be @dfn{instantiated} using the @command{guix
21434 system} command. The synopsis is:
21435
21436 @example
21437 guix system @var{options}@dots{} @var{action} @var{file}
21438 @end example
21439
21440 @var{file} must be the name of a file containing an
21441 @code{operating-system} declaration. @var{action} specifies how the
21442 operating system is instantiated. Currently the following values are
21443 supported:
21444
21445 @table @code
21446 @item search
21447 Display available service type definitions that match the given regular
21448 expressions, sorted by relevance:
21449
21450 @example
21451 $ guix system search console font
21452 name: console-fonts
21453 location: gnu/services/base.scm:729:2
21454 extends: shepherd-root
21455 description: Install the given fonts on the specified ttys (fonts are
21456 + per virtual console on GNU/Linux). The value of this service is a list
21457 + of tty/font pairs like:
21458 +
21459 + '(("tty1" . "LatGrkCyr-8x16"))
21460 relevance: 20
21461
21462 name: mingetty
21463 location: gnu/services/base.scm:1048:2
21464 extends: shepherd-root
21465 description: Provide console login using the `mingetty' program.
21466 relevance: 2
21467
21468 name: login
21469 location: gnu/services/base.scm:775:2
21470 extends: pam
21471 description: Provide a console log-in service as specified by its
21472 + configuration value, a `login-configuration' object.
21473 relevance: 2
21474
21475 @dots{}
21476 @end example
21477
21478 As for @command{guix package --search}, the result is written in
21479 @code{recutils} format, which makes it easy to filter the output
21480 (@pxref{Top, GNU recutils databases,, recutils, GNU recutils manual}).
21481
21482 @item reconfigure
21483 Build the operating system described in @var{file}, activate it, and
21484 switch to it@footnote{This action (and the related actions
21485 @code{switch-generation} and @code{roll-back}) are usable only on
21486 systems already running GuixSD.}.
21487
21488 This effects all the configuration specified in @var{file}: user
21489 accounts, system services, global package list, setuid programs, etc.
21490 The command starts system services specified in @var{file} that are not
21491 currently running; if a service is currently running, it does not
21492 attempt to upgrade it since this would not be possible without stopping it
21493 first.
21494
21495 This command creates a new generation whose number is one greater than
21496 the current generation (as reported by @command{guix system
21497 list-generations}). If that generation already exists, it will be
21498 overwritten. This behavior mirrors that of @command{guix package}
21499 (@pxref{Invoking guix package}).
21500
21501 It also adds a bootloader menu entry for the new OS configuration,
21502 ---unless @option{--no-bootloader} is passed. For GRUB, it moves
21503 entries for older configurations to a submenu, allowing you to choose
21504 an older system generation at boot time should you need it.
21505
21506 @quotation Note
21507 @c The paragraph below refers to the problem discussed at
21508 @c <http://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
21509 It is highly recommended to run @command{guix pull} once before you run
21510 @command{guix system reconfigure} for the first time (@pxref{Invoking
21511 guix pull}). Failing to do that you would see an older version of Guix
21512 once @command{reconfigure} has completed.
21513 @end quotation
21514
21515 @item switch-generation
21516 @cindex generations
21517 Switch to an existing system generation. This action atomically
21518 switches the system profile to the specified system generation. It
21519 also rearranges the system's existing bootloader menu entries. It
21520 makes the menu entry for the specified system generation the default,
21521 and it moves the entries for the other generatiors to a submenu, if
21522 supported by the bootloader being used. The next time the system
21523 boots, it will use the specified system generation.
21524
21525 The bootloader itself is not being reinstalled when using this
21526 command. Thus, the installed bootloader is used with an updated
21527 configuration file.
21528
21529 The target generation can be specified explicitly by its generation
21530 number. For example, the following invocation would switch to system
21531 generation 7:
21532
21533 @example
21534 guix system switch-generation 7
21535 @end example
21536
21537 The target generation can also be specified relative to the current
21538 generation with the form @code{+N} or @code{-N}, where @code{+3} means
21539 ``3 generations ahead of the current generation,'' and @code{-1} means
21540 ``1 generation prior to the current generation.'' When specifying a
21541 negative value such as @code{-1}, you must precede it with @code{--} to
21542 prevent it from being parsed as an option. For example:
21543
21544 @example
21545 guix system switch-generation -- -1
21546 @end example
21547
21548 Currently, the effect of invoking this action is @emph{only} to switch
21549 the system profile to an existing generation and rearrange the
21550 bootloader menu entries. To actually start using the target system
21551 generation, you must reboot after running this action. In the future,
21552 it will be updated to do the same things as @command{reconfigure},
21553 like activating and deactivating services.
21554
21555 This action will fail if the specified generation does not exist.
21556
21557 @item roll-back
21558 @cindex rolling back
21559 Switch to the preceding system generation. The next time the system
21560 boots, it will use the preceding system generation. This is the inverse
21561 of @command{reconfigure}, and it is exactly the same as invoking
21562 @command{switch-generation} with an argument of @code{-1}.
21563
21564 Currently, as with @command{switch-generation}, you must reboot after
21565 running this action to actually start using the preceding system
21566 generation.
21567
21568 @item build
21569 Build the derivation of the operating system, which includes all the
21570 configuration files and programs needed to boot and run the system.
21571 This action does not actually install anything.
21572
21573 @item init
21574 Populate the given directory with all the files necessary to run the
21575 operating system specified in @var{file}. This is useful for first-time
21576 installations of GuixSD. For instance:
21577
21578 @example
21579 guix system init my-os-config.scm /mnt
21580 @end example
21581
21582 copies to @file{/mnt} all the store items required by the configuration
21583 specified in @file{my-os-config.scm}. This includes configuration
21584 files, packages, and so on. It also creates other essential files
21585 needed for the system to operate correctly---e.g., the @file{/etc},
21586 @file{/var}, and @file{/run} directories, and the @file{/bin/sh} file.
21587
21588 This command also installs bootloader on the target specified in
21589 @file{my-os-config}, unless the @option{--no-bootloader} option was
21590 passed.
21591
21592 @item vm
21593 @cindex virtual machine
21594 @cindex VM
21595 @anchor{guix system vm}
21596 Build a virtual machine that contains the operating system declared in
21597 @var{file}, and return a script to run that virtual machine (VM).
21598 Arguments given to the script are passed to QEMU as in the example
21599 below, which enables networking and requests 1@tie{}GiB of RAM for the
21600 emulated machine:
21601
21602 @example
21603 $ /gnu/store/@dots{}-run-vm.sh -m 1024 -net user
21604 @end example
21605
21606 The VM shares its store with the host system.
21607
21608 Additional file systems can be shared between the host and the VM using
21609 the @code{--share} and @code{--expose} command-line options: the former
21610 specifies a directory to be shared with write access, while the latter
21611 provides read-only access to the shared directory.
21612
21613 The example below creates a VM in which the user's home directory is
21614 accessible read-only, and where the @file{/exchange} directory is a
21615 read-write mapping of @file{$HOME/tmp} on the host:
21616
21617 @example
21618 guix system vm my-config.scm \
21619 --expose=$HOME --share=$HOME/tmp=/exchange
21620 @end example
21621
21622 On GNU/Linux, the default is to boot directly to the kernel; this has
21623 the advantage of requiring only a very tiny root disk image since the
21624 store of the host can then be mounted.
21625
21626 The @code{--full-boot} option forces a complete boot sequence, starting
21627 with the bootloader. This requires more disk space since a root image
21628 containing at least the kernel, initrd, and bootloader data files must
21629 be created. The @code{--image-size} option can be used to specify the
21630 size of the image.
21631
21632 @cindex System images, creation in various formats
21633 @cindex Creating system images in various formats
21634 @item vm-image
21635 @itemx disk-image
21636 @itemx docker-image
21637 Return a virtual machine, disk image, or Docker image of the operating
21638 system declared in @var{file} that stands alone. By default,
21639 @command{guix system} estimates the size of the image needed to store
21640 the system, but you can use the @option{--image-size} option to specify
21641 a value. Docker images are built to contain exactly what they need, so
21642 the @option{--image-size} option is ignored in the case of
21643 @code{docker-image}.
21644
21645 You can specify the root file system type by using the
21646 @option{--file-system-type} option. It defaults to @code{ext4}.
21647
21648 When using @code{vm-image}, the returned image is in qcow2 format, which
21649 the QEMU emulator can efficiently use. @xref{Running GuixSD in a VM},
21650 for more information on how to run the image in a virtual machine.
21651
21652 When using @code{disk-image}, a raw disk image is produced; it can be
21653 copied as is to a USB stick, for instance. Assuming @code{/dev/sdc} is
21654 the device corresponding to a USB stick, one can copy the image to it
21655 using the following command:
21656
21657 @example
21658 # dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
21659 @end example
21660
21661 When using @code{docker-image}, a Docker image is produced. Guix builds
21662 the image from scratch, not from a pre-existing Docker base image. As a
21663 result, it contains @emph{exactly} what you define in the operating
21664 system configuration file. You can then load the image and launch a
21665 Docker container using commands like the following:
21666
21667 @example
21668 image_id="$(docker load < guixsd-docker-image.tar.gz)"
21669 docker run -e GUIX_NEW_SYSTEM=/var/guix/profiles/system \\
21670 --entrypoint /var/guix/profiles/system/profile/bin/guile \\
21671 $image_id /var/guix/profiles/system/boot
21672 @end example
21673
21674 This command starts a new Docker container from the specified image. It
21675 will boot the GuixSD system in the usual manner, which means it will
21676 start any services you have defined in the operating system
21677 configuration. Depending on what you run in the Docker container, it
21678 may be necessary to give the container additional permissions. For
21679 example, if you intend to build software using Guix inside of the Docker
21680 container, you may need to pass the @option{--privileged} option to
21681 @code{docker run}.
21682
21683 @item container
21684 Return a script to run the operating system declared in @var{file}
21685 within a container. Containers are a set of lightweight isolation
21686 mechanisms provided by the kernel Linux-libre. Containers are
21687 substantially less resource-demanding than full virtual machines since
21688 the kernel, shared objects, and other resources can be shared with the
21689 host system; this also means they provide thinner isolation.
21690
21691 Currently, the script must be run as root in order to support more than
21692 a single user and group. The container shares its store with the host
21693 system.
21694
21695 As with the @code{vm} action (@pxref{guix system vm}), additional file
21696 systems to be shared between the host and container can be specified
21697 using the @option{--share} and @option{--expose} options:
21698
21699 @example
21700 guix system container my-config.scm \
21701 --expose=$HOME --share=$HOME/tmp=/exchange
21702 @end example
21703
21704 @quotation Note
21705 This option requires Linux-libre 3.19 or newer.
21706 @end quotation
21707
21708 @end table
21709
21710 @var{options} can contain any of the common build options (@pxref{Common
21711 Build Options}). In addition, @var{options} can contain one of the
21712 following:
21713
21714 @table @option
21715 @item --expression=@var{expr}
21716 @itemx -e @var{expr}
21717 Consider the operating-system @var{expr} evaluates to.
21718 This is an alternative to specifying a file which evaluates to an
21719 operating system.
21720 This is used to generate the GuixSD installer @pxref{Building the
21721 Installation Image}).
21722
21723 @item --system=@var{system}
21724 @itemx -s @var{system}
21725 Attempt to build for @var{system} instead of the host system type.
21726 This works as per @command{guix build} (@pxref{Invoking guix build}).
21727
21728 @item --derivation
21729 @itemx -d
21730 Return the derivation file name of the given operating system without
21731 building anything.
21732
21733 @item --file-system-type=@var{type}
21734 @itemx -t @var{type}
21735 For the @code{disk-image} action, create a file system of the given
21736 @var{type} on the image.
21737
21738 When this option is omitted, @command{guix system} uses @code{ext4}.
21739
21740 @cindex ISO-9660 format
21741 @cindex CD image format
21742 @cindex DVD image format
21743 @code{--file-system-type=iso9660} produces an ISO-9660 image, suitable
21744 for burning on CDs and DVDs.
21745
21746 @item --image-size=@var{size}
21747 For the @code{vm-image} and @code{disk-image} actions, create an image
21748 of the given @var{size}. @var{size} may be a number of bytes, or it may
21749 include a unit as a suffix (@pxref{Block size, size specifications,,
21750 coreutils, GNU Coreutils}).
21751
21752 When this option is omitted, @command{guix system} computes an estimate
21753 of the image size as a function of the size of the system declared in
21754 @var{file}.
21755
21756 @item --root=@var{file}
21757 @itemx -r @var{file}
21758 Make @var{file} a symlink to the result, and register it as a garbage
21759 collector root.
21760
21761 @item --skip-checks
21762 Skip pre-installation safety checks.
21763
21764 By default, @command{guix system init} and @command{guix system
21765 reconfigure} perform safety checks: they make sure the file systems that
21766 appear in the @code{operating-system} declaration actually exist
21767 (@pxref{File Systems}), and that any Linux kernel modules that may be
21768 needed at boot time are listed in @code{initrd-modules} (@pxref{Initial
21769 RAM Disk}). Passing this option skips these tests altogether.
21770
21771 @item --on-error=@var{strategy}
21772 Apply @var{strategy} when an error occurs when reading @var{file}.
21773 @var{strategy} may be one of the following:
21774
21775 @table @code
21776 @item nothing-special
21777 Report the error concisely and exit. This is the default strategy.
21778
21779 @item backtrace
21780 Likewise, but also display a backtrace.
21781
21782 @item debug
21783 Report the error and enter Guile's debugger. From there, you can run
21784 commands such as @code{,bt} to get a backtrace, @code{,locals} to
21785 display local variable values, and more generally inspect the state of the
21786 program. @xref{Debug Commands,,, guile, GNU Guile Reference Manual}, for
21787 a list of available debugging commands.
21788 @end table
21789 @end table
21790
21791 @quotation Note
21792 All the actions above, except @code{build} and @code{init},
21793 can use KVM support in the Linux-libre kernel. Specifically, if the
21794 machine has hardware virtualization support, the corresponding
21795 KVM kernel module should be loaded, and the @file{/dev/kvm} device node
21796 must exist and be readable and writable by the user and by the
21797 build users of the daemon (@pxref{Build Environment Setup}).
21798 @end quotation
21799
21800 Once you have built, configured, re-configured, and re-re-configured
21801 your GuixSD installation, you may find it useful to list the operating
21802 system generations available on disk---and that you can choose from the
21803 bootloader boot menu:
21804
21805 @table @code
21806
21807 @item list-generations
21808 List a summary of each generation of the operating system available on
21809 disk, in a human-readable way. This is similar to the
21810 @option{--list-generations} option of @command{guix package}
21811 (@pxref{Invoking guix package}).
21812
21813 Optionally, one can specify a pattern, with the same syntax that is used
21814 in @command{guix package --list-generations}, to restrict the list of
21815 generations displayed. For instance, the following command displays
21816 generations that are up to 10 days old:
21817
21818 @example
21819 $ guix system list-generations 10d
21820 @end example
21821
21822 @end table
21823
21824 The @command{guix system} command has even more to offer! The following
21825 sub-commands allow you to visualize how your system services relate to
21826 each other:
21827
21828 @anchor{system-extension-graph}
21829 @table @code
21830
21831 @item extension-graph
21832 Emit in Dot/Graphviz format to standard output the @dfn{service
21833 extension graph} of the operating system defined in @var{file}
21834 (@pxref{Service Composition}, for more information on service
21835 extensions.)
21836
21837 The command:
21838
21839 @example
21840 $ guix system extension-graph @var{file} | dot -Tpdf > services.pdf
21841 @end example
21842
21843 produces a PDF file showing the extension relations among services.
21844
21845 @anchor{system-shepherd-graph}
21846 @item shepherd-graph
21847 Emit in Dot/Graphviz format to standard output the @dfn{dependency
21848 graph} of shepherd services of the operating system defined in
21849 @var{file}. @xref{Shepherd Services}, for more information and for an
21850 example graph.
21851
21852 @end table
21853
21854 @node Running GuixSD in a VM
21855 @subsection Running GuixSD in a Virtual Machine
21856
21857 @cindex virtual machine
21858 To run GuixSD in a virtual machine (VM), one can either use the
21859 pre-built GuixSD VM image distributed at
21860 @indicateurl{https://alpha.gnu.org/gnu/guix/guixsd-vm-image-@value{VERSION}.@var{system}.xz}
21861 , or build their own virtual machine image using @command{guix system
21862 vm-image} (@pxref{Invoking guix system}). The returned image is in
21863 qcow2 format, which the @uref{http://qemu.org/, QEMU emulator} can
21864 efficiently use.
21865
21866 @cindex QEMU
21867 If you built your own image, you must copy it out of the store
21868 (@pxref{The Store}) and give yourself permission to write to the copy
21869 before you can use it. When invoking QEMU, you must choose a system
21870 emulator that is suitable for your hardware platform. Here is a minimal
21871 QEMU invocation that will boot the result of @command{guix system
21872 vm-image} on x86_64 hardware:
21873
21874 @example
21875 $ qemu-system-x86_64 \
21876 -net user -net nic,model=virtio \
21877 -enable-kvm -m 256 /tmp/qemu-image
21878 @end example
21879
21880 Here is what each of these options means:
21881
21882 @table @code
21883 @item qemu-system-x86_64
21884 This specifies the hardware platform to emulate. This should match the
21885 host.
21886
21887 @item -net user
21888 Enable the unprivileged user-mode network stack. The guest OS can
21889 access the host but not vice versa. This is the simplest way to get the
21890 guest OS online.
21891
21892 @item -net nic,model=virtio
21893 You must create a network interface of a given model. If you do not
21894 create a NIC, the boot will fail. Assuming your hardware platform is
21895 x86_64, you can get a list of available NIC models by running
21896 @command{qemu-system-x86_64 -net nic,model=help}.
21897
21898 @item -enable-kvm
21899 If your system has hardware virtualization extensions, enabling the
21900 virtual machine support (KVM) of the Linux kernel will make things run
21901 faster.
21902
21903 @item -m 256
21904 RAM available to the guest OS, in mebibytes. Defaults to 128@tie{}MiB,
21905 which may be insufficient for some operations.
21906
21907 @item /tmp/qemu-image
21908 The file name of the qcow2 image.
21909 @end table
21910
21911 The default @command{run-vm.sh} script that is returned by an invocation of
21912 @command{guix system vm} does not add a @command{-net user} flag by default.
21913 To get network access from within the vm add the @code{(dhcp-client-service)}
21914 to your system definition and start the VM using
21915 @command{`guix system vm config.scm` -net user}. An important caveat of using
21916 @command{-net user} for networking is that @command{ping} will not work, because
21917 it uses the ICMP protocol. You'll have to use a different command to check for
21918 network connectivity, for example @command{guix download}.
21919
21920 @subsubsection Connecting Through SSH
21921
21922 @cindex SSH
21923 @cindex SSH server
21924 To enable SSH inside a VM you need to add a SSH server like @code{(dropbear-service)}
21925 or @code{(lsh-service)} to your VM. The @code{(lsh-service}) doesn't currently
21926 boot unsupervised. It requires you to type some characters to initialize the
21927 randomness generator. In addition you need to forward the SSH port, 22 by
21928 default, to the host. You can do this with
21929
21930 @example
21931 `guix system vm config.scm` -net user,hostfwd=tcp::10022-:22
21932 @end example
21933
21934 To connect to the VM you can run
21935
21936 @example
21937 ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022
21938 @end example
21939
21940 The @command{-p} tells @command{ssh} the port you want to connect to.
21941 @command{-o UserKnownHostsFile=/dev/null} prevents @command{ssh} from complaining
21942 every time you modify your @command{config.scm} file and the
21943 @command{-o StrictHostKeyChecking=no} prevents you from having to allow a
21944 connection to an unknown host every time you connect.
21945
21946 @subsubsection Using @command{virt-viewer} with Spice
21947
21948 As an alternative to the default @command{qemu} graphical client you can
21949 use the @command{remote-viewer} from the @command{virt-viewer} package. To
21950 connect pass the @command{-spice port=5930,disable-ticketing} flag to
21951 @command{qemu}. See previous section for further information on how to do this.
21952
21953 Spice also allows you to do some nice stuff like share your clipboard with your
21954 VM. To enable that you'll also have to pass the following flags to @command{qemu}:
21955
21956 @example
21957 -device virtio-serial-pci,id=virtio-serial0,max_ports=16,bus=pci.0,addr=0x5
21958 -chardev spicevmc,name=vdagent,id=vdagent
21959 -device virtserialport,nr=1,bus=virtio-serial0.0,chardev=vdagent,
21960 name=com.redhat.spice.0
21961 @end example
21962
21963 You'll also need to add the @pxref{Miscellaneous Services, Spice service}.
21964
21965 @node Defining Services
21966 @subsection Defining Services
21967
21968 The previous sections show the available services and how one can combine
21969 them in an @code{operating-system} declaration. But how do we define
21970 them in the first place? And what is a service anyway?
21971
21972 @menu
21973 * Service Composition:: The model for composing services.
21974 * Service Types and Services:: Types and services.
21975 * Service Reference:: API reference.
21976 * Shepherd Services:: A particular type of service.
21977 @end menu
21978
21979 @node Service Composition
21980 @subsubsection Service Composition
21981
21982 @cindex services
21983 @cindex daemons
21984 Here we define a @dfn{service} as, broadly, something that extends the
21985 functionality of the operating system. Often a service is a process---a
21986 @dfn{daemon}---started when the system boots: a secure shell server, a
21987 Web server, the Guix build daemon, etc. Sometimes a service is a daemon
21988 whose execution can be triggered by another daemon---e.g., an FTP server
21989 started by @command{inetd} or a D-Bus service activated by
21990 @command{dbus-daemon}. Occasionally, a service does not map to a
21991 daemon. For instance, the ``account'' service collects user accounts
21992 and makes sure they exist when the system runs; the ``udev'' service
21993 collects device management rules and makes them available to the eudev
21994 daemon; the @file{/etc} service populates the @file{/etc} directory
21995 of the system.
21996
21997 @cindex service extensions
21998 GuixSD services are connected by @dfn{extensions}. For instance, the
21999 secure shell service @emph{extends} the Shepherd---the GuixSD
22000 initialization system, running as PID@tie{}1---by giving it the command
22001 lines to start and stop the secure shell daemon (@pxref{Networking
22002 Services, @code{lsh-service}}); the UPower service extends the D-Bus
22003 service by passing it its @file{.service} specification, and extends the
22004 udev service by passing it device management rules (@pxref{Desktop
22005 Services, @code{upower-service}}); the Guix daemon service extends the
22006 Shepherd by passing it the command lines to start and stop the daemon,
22007 and extends the account service by passing it a list of required build
22008 user accounts (@pxref{Base Services}).
22009
22010 All in all, services and their ``extends'' relations form a directed
22011 acyclic graph (DAG). If we represent services as boxes and extensions
22012 as arrows, a typical system might provide something like this:
22013
22014 @image{images/service-graph,,5in,Typical service extension graph.}
22015
22016 @cindex system service
22017 At the bottom, we see the @dfn{system service}, which produces the
22018 directory containing everything to run and boot the system, as returned
22019 by the @command{guix system build} command. @xref{Service Reference},
22020 to learn about the other service types shown here.
22021 @xref{system-extension-graph, the @command{guix system extension-graph}
22022 command}, for information on how to generate this representation for a
22023 particular operating system definition.
22024
22025 @cindex service types
22026 Technically, developers can define @dfn{service types} to express these
22027 relations. There can be any number of services of a given type on the
22028 system---for instance, a system running two instances of the GNU secure
22029 shell server (lsh) has two instances of @var{lsh-service-type}, with
22030 different parameters.
22031
22032 The following section describes the programming interface for service
22033 types and services.
22034
22035 @node Service Types and Services
22036 @subsubsection Service Types and Services
22037
22038 A @dfn{service type} is a node in the DAG described above. Let us start
22039 with a simple example, the service type for the Guix build daemon
22040 (@pxref{Invoking guix-daemon}):
22041
22042 @example
22043 (define guix-service-type
22044 (service-type
22045 (name 'guix)
22046 (extensions
22047 (list (service-extension shepherd-root-service-type guix-shepherd-service)
22048 (service-extension account-service-type guix-accounts)
22049 (service-extension activation-service-type guix-activation)))
22050 (default-value (guix-configuration))))
22051 @end example
22052
22053 @noindent
22054 It defines three things:
22055
22056 @enumerate
22057 @item
22058 A name, whose sole purpose is to make inspection and debugging easier.
22059
22060 @item
22061 A list of @dfn{service extensions}, where each extension designates the
22062 target service type and a procedure that, given the parameters of the
22063 service, returns a list of objects to extend the service of that type.
22064
22065 Every service type has at least one service extension. The only
22066 exception is the @dfn{boot service type}, which is the ultimate service.
22067
22068 @item
22069 Optionally, a default value for instances of this type.
22070 @end enumerate
22071
22072 In this example, @var{guix-service-type} extends three services:
22073
22074 @table @var
22075 @item shepherd-root-service-type
22076 The @var{guix-shepherd-service} procedure defines how the Shepherd
22077 service is extended. Namely, it returns a @code{<shepherd-service>}
22078 object that defines how @command{guix-daemon} is started and stopped
22079 (@pxref{Shepherd Services}).
22080
22081 @item account-service-type
22082 This extension for this service is computed by @var{guix-accounts},
22083 which returns a list of @code{user-group} and @code{user-account}
22084 objects representing the build user accounts (@pxref{Invoking
22085 guix-daemon}).
22086
22087 @item activation-service-type
22088 Here @var{guix-activation} is a procedure that returns a gexp, which is
22089 a code snippet to run at ``activation time''---e.g., when the service is
22090 booted.
22091 @end table
22092
22093 A service of this type is instantiated like this:
22094
22095 @example
22096 (service guix-service-type
22097 (guix-configuration
22098 (build-accounts 5)
22099 (use-substitutes? #f)))
22100 @end example
22101
22102 The second argument to the @code{service} form is a value representing
22103 the parameters of this specific service instance.
22104 @xref{guix-configuration-type, @code{guix-configuration}}, for
22105 information about the @code{guix-configuration} data type. When the
22106 value is omitted, the default value specified by
22107 @code{guix-service-type} is used:
22108
22109 @example
22110 (service guix-service-type)
22111 @end example
22112
22113 @var{guix-service-type} is quite simple because it extends other
22114 services but is not extensible itself.
22115
22116 @c @subsubsubsection Extensible Service Types
22117
22118 The service type for an @emph{extensible} service looks like this:
22119
22120 @example
22121 (define udev-service-type
22122 (service-type (name 'udev)
22123 (extensions
22124 (list (service-extension shepherd-root-service-type
22125 udev-shepherd-service)))
22126
22127 (compose concatenate) ;concatenate the list of rules
22128 (extend (lambda (config rules)
22129 (match config
22130 (($ <udev-configuration> udev initial-rules)
22131 (udev-configuration
22132 (udev udev) ;the udev package to use
22133 (rules (append initial-rules rules)))))))))
22134 @end example
22135
22136 This is the service type for the
22137 @uref{https://wiki.gentoo.org/wiki/Project:Eudev, eudev device
22138 management daemon}. Compared to the previous example, in addition to an
22139 extension of @var{shepherd-root-service-type}, we see two new fields:
22140
22141 @table @code
22142 @item compose
22143 This is the procedure to @dfn{compose} the list of extensions to
22144 services of this type.
22145
22146 Services can extend the udev service by passing it lists of rules; we
22147 compose those extensions simply by concatenating them.
22148
22149 @item extend
22150 This procedure defines how the value of the service is @dfn{extended} with
22151 the composition of the extensions.
22152
22153 Udev extensions are composed into a list of rules, but the udev service
22154 value is itself a @code{<udev-configuration>} record. So here, we
22155 extend that record by appending the list of rules it contains to the
22156 list of contributed rules.
22157
22158 @item description
22159 This is a string giving an overview of the service type. The string can
22160 contain Texinfo markup (@pxref{Overview,,, texinfo, GNU Texinfo}). The
22161 @command{guix system search} command searches these strings and displays
22162 them (@pxref{Invoking guix system}).
22163 @end table
22164
22165 There can be only one instance of an extensible service type such as
22166 @var{udev-service-type}. If there were more, the
22167 @code{service-extension} specifications would be ambiguous.
22168
22169 Still here? The next section provides a reference of the programming
22170 interface for services.
22171
22172 @node Service Reference
22173 @subsubsection Service Reference
22174
22175 We have seen an overview of service types (@pxref{Service Types and
22176 Services}). This section provides a reference on how to manipulate
22177 services and service types. This interface is provided by the
22178 @code{(gnu services)} module.
22179
22180 @deffn {Scheme Procedure} service @var{type} [@var{value}]
22181 Return a new service of @var{type}, a @code{<service-type>} object (see
22182 below.) @var{value} can be any object; it represents the parameters of
22183 this particular service instance.
22184
22185 When @var{value} is omitted, the default value specified by @var{type}
22186 is used; if @var{type} does not specify a default value, an error is
22187 raised.
22188
22189 For instance, this:
22190
22191 @example
22192 (service openssh-service-type)
22193 @end example
22194
22195 @noindent
22196 is equivalent to this:
22197
22198 @example
22199 (service openssh-service-type
22200 (openssh-configuration))
22201 @end example
22202
22203 In both cases the result is an instance of @code{openssh-service-type}
22204 with the default configuration.
22205 @end deffn
22206
22207 @deffn {Scheme Procedure} service? @var{obj}
22208 Return true if @var{obj} is a service.
22209 @end deffn
22210
22211 @deffn {Scheme Procedure} service-kind @var{service}
22212 Return the type of @var{service}---i.e., a @code{<service-type>} object.
22213 @end deffn
22214
22215 @deffn {Scheme Procedure} service-value @var{service}
22216 Return the value associated with @var{service}. It represents its
22217 parameters.
22218 @end deffn
22219
22220 Here is an example of how a service is created and manipulated:
22221
22222 @example
22223 (define s
22224 (service nginx-service-type
22225 (nginx-configuration
22226 (nginx nginx)
22227 (log-directory log-directory)
22228 (run-directory run-directory)
22229 (file config-file))))
22230
22231 (service? s)
22232 @result{} #t
22233
22234 (eq? (service-kind s) nginx-service-type)
22235 @result{} #t
22236 @end example
22237
22238 The @code{modify-services} form provides a handy way to change the
22239 parameters of some of the services of a list such as
22240 @var{%base-services} (@pxref{Base Services, @code{%base-services}}). It
22241 evaluates to a list of services. Of course, you could always use
22242 standard list combinators such as @code{map} and @code{fold} to do that
22243 (@pxref{SRFI-1, List Library,, guile, GNU Guile Reference Manual});
22244 @code{modify-services} simply provides a more concise form for this
22245 common pattern.
22246
22247 @deffn {Scheme Syntax} modify-services @var{services} @
22248 (@var{type} @var{variable} => @var{body}) @dots{}
22249
22250 Modify the services listed in @var{services} according to the given
22251 clauses. Each clause has the form:
22252
22253 @example
22254 (@var{type} @var{variable} => @var{body})
22255 @end example
22256
22257 where @var{type} is a service type---e.g.,
22258 @code{guix-service-type}---and @var{variable} is an identifier that is
22259 bound within the @var{body} to the service parameters---e.g., a
22260 @code{guix-configuration} instance---of the original service of that
22261 @var{type}.
22262
22263 The @var{body} should evaluate to the new service parameters, which will
22264 be used to configure the new service. This new service will replace the
22265 original in the resulting list. Because a service's service parameters
22266 are created using @code{define-record-type*}, you can write a succinct
22267 @var{body} that evaluates to the new service parameters by using the
22268 @code{inherit} feature that @code{define-record-type*} provides.
22269
22270 @xref{Using the Configuration System}, for example usage.
22271
22272 @end deffn
22273
22274 Next comes the programming interface for service types. This is
22275 something you want to know when writing new service definitions, but not
22276 necessarily when simply looking for ways to customize your
22277 @code{operating-system} declaration.
22278
22279 @deftp {Data Type} service-type
22280 @cindex service type
22281 This is the representation of a @dfn{service type} (@pxref{Service Types
22282 and Services}).
22283
22284 @table @asis
22285 @item @code{name}
22286 This is a symbol, used only to simplify inspection and debugging.
22287
22288 @item @code{extensions}
22289 A non-empty list of @code{<service-extension>} objects (see below).
22290
22291 @item @code{compose} (default: @code{#f})
22292 If this is @code{#f}, then the service type denotes services that cannot
22293 be extended---i.e., services that do not receive ``values'' from other
22294 services.
22295
22296 Otherwise, it must be a one-argument procedure. The procedure is called
22297 by @code{fold-services} and is passed a list of values collected from
22298 extensions. It may return any single value.
22299
22300 @item @code{extend} (default: @code{#f})
22301 If this is @code{#f}, services of this type cannot be extended.
22302
22303 Otherwise, it must be a two-argument procedure: @code{fold-services}
22304 calls it, passing it the initial value of the service as the first
22305 argument and the result of applying @code{compose} to the extension
22306 values as the second argument. It must return a value that is a valid
22307 parameter value for the service instance.
22308 @end table
22309
22310 @xref{Service Types and Services}, for examples.
22311 @end deftp
22312
22313 @deffn {Scheme Procedure} service-extension @var{target-type} @
22314 @var{compute}
22315 Return a new extension for services of type @var{target-type}.
22316 @var{compute} must be a one-argument procedure: @code{fold-services}
22317 calls it, passing it the value associated with the service that provides
22318 the extension; it must return a valid value for the target service.
22319 @end deffn
22320
22321 @deffn {Scheme Procedure} service-extension? @var{obj}
22322 Return true if @var{obj} is a service extension.
22323 @end deffn
22324
22325 Occasionally, you might want to simply extend an existing service. This
22326 involves creating a new service type and specifying the extension of
22327 interest, which can be verbose; the @code{simple-service} procedure
22328 provides a shorthand for this.
22329
22330 @deffn {Scheme Procedure} simple-service @var{name} @var{target} @var{value}
22331 Return a service that extends @var{target} with @var{value}. This works
22332 by creating a singleton service type @var{name}, of which the returned
22333 service is an instance.
22334
22335 For example, this extends mcron (@pxref{Scheduled Job Execution}) with
22336 an additional job:
22337
22338 @example
22339 (simple-service 'my-mcron-job mcron-service-type
22340 #~(job '(next-hour (3)) "guix gc -F 2G"))
22341 @end example
22342 @end deffn
22343
22344 At the core of the service abstraction lies the @code{fold-services}
22345 procedure, which is responsible for ``compiling'' a list of services
22346 down to a single directory that contains everything needed to boot and
22347 run the system---the directory shown by the @command{guix system build}
22348 command (@pxref{Invoking guix system}). In essence, it propagates
22349 service extensions down the service graph, updating each node parameters
22350 on the way, until it reaches the root node.
22351
22352 @deffn {Scheme Procedure} fold-services @var{services} @
22353 [#:target-type @var{system-service-type}]
22354 Fold @var{services} by propagating their extensions down to the root of
22355 type @var{target-type}; return the root service adjusted accordingly.
22356 @end deffn
22357
22358 Lastly, the @code{(gnu services)} module also defines several essential
22359 service types, some of which are listed below.
22360
22361 @defvr {Scheme Variable} system-service-type
22362 This is the root of the service graph. It produces the system directory
22363 as returned by the @command{guix system build} command.
22364 @end defvr
22365
22366 @defvr {Scheme Variable} boot-service-type
22367 The type of the ``boot service'', which produces the @dfn{boot script}.
22368 The boot script is what the initial RAM disk runs when booting.
22369 @end defvr
22370
22371 @defvr {Scheme Variable} etc-service-type
22372 The type of the @file{/etc} service. This service is used to create
22373 files under @file{/etc} and can be extended by
22374 passing it name/file tuples such as:
22375
22376 @example
22377 (list `("issue" ,(plain-file "issue" "Welcome!\n")))
22378 @end example
22379
22380 In this example, the effect would be to add an @file{/etc/issue} file
22381 pointing to the given file.
22382 @end defvr
22383
22384 @defvr {Scheme Variable} setuid-program-service-type
22385 Type for the ``setuid-program service''. This service collects lists of
22386 executable file names, passed as gexps, and adds them to the set of
22387 setuid-root programs on the system (@pxref{Setuid Programs}).
22388 @end defvr
22389
22390 @defvr {Scheme Variable} profile-service-type
22391 Type of the service that populates the @dfn{system profile}---i.e., the
22392 programs under @file{/run/current-system/profile}. Other services can
22393 extend it by passing it lists of packages to add to the system profile.
22394 @end defvr
22395
22396
22397 @node Shepherd Services
22398 @subsubsection Shepherd Services
22399
22400 @cindex shepherd services
22401 @cindex PID 1
22402 @cindex init system
22403 The @code{(gnu services shepherd)} module provides a way to define
22404 services managed by the GNU@tie{}Shepherd, which is the GuixSD
22405 initialization system---the first process that is started when the
22406 system boots, also known as PID@tie{}1
22407 (@pxref{Introduction,,, shepherd, The GNU Shepherd Manual}).
22408
22409 Services in the Shepherd can depend on each other. For instance, the
22410 SSH daemon may need to be started after the syslog daemon has been
22411 started, which in turn can only happen once all the file systems have
22412 been mounted. The simple operating system defined earlier (@pxref{Using
22413 the Configuration System}) results in a service graph like this:
22414
22415 @image{images/shepherd-graph,,5in,Typical shepherd service graph.}
22416
22417 You can actually generate such a graph for any operating system
22418 definition using the @command{guix system shepherd-graph} command
22419 (@pxref{system-shepherd-graph, @command{guix system shepherd-graph}}).
22420
22421 The @var{%shepherd-root-service} is a service object representing
22422 PID@tie{}1, of type @var{shepherd-root-service-type}; it can be extended
22423 by passing it lists of @code{<shepherd-service>} objects.
22424
22425 @deftp {Data Type} shepherd-service
22426 The data type representing a service managed by the Shepherd.
22427
22428 @table @asis
22429 @item @code{provision}
22430 This is a list of symbols denoting what the service provides.
22431
22432 These are the names that may be passed to @command{herd start},
22433 @command{herd status}, and similar commands (@pxref{Invoking herd,,,
22434 shepherd, The GNU Shepherd Manual}). @xref{Slots of services, the
22435 @code{provides} slot,, shepherd, The GNU Shepherd Manual}, for details.
22436
22437 @item @code{requirements} (default: @code{'()})
22438 List of symbols denoting the Shepherd services this one depends on.
22439
22440 @item @code{respawn?} (default: @code{#t})
22441 Whether to restart the service when it stops, for instance when the
22442 underlying process dies.
22443
22444 @item @code{start}
22445 @itemx @code{stop} (default: @code{#~(const #f)})
22446 The @code{start} and @code{stop} fields refer to the Shepherd's
22447 facilities to start and stop processes (@pxref{Service De- and
22448 Constructors,,, shepherd, The GNU Shepherd Manual}). They are given as
22449 G-expressions that get expanded in the Shepherd configuration file
22450 (@pxref{G-Expressions}).
22451
22452 @item @code{actions} (default: @code{'()})
22453 @cindex actions, of Shepherd services
22454 This is a list of @code{shepherd-action} objects (see below) defining
22455 @dfn{actions} supported by the service, in addition to the standard
22456 @code{start} and @code{stop} actions. Actions listed here become available as
22457 @command{herd} sub-commands:
22458
22459 @example
22460 herd @var{action} @var{service} [@var{arguments}@dots{}]
22461 @end example
22462
22463 @item @code{documentation}
22464 A documentation string, as shown when running:
22465
22466 @example
22467 herd doc @var{service-name}
22468 @end example
22469
22470 where @var{service-name} is one of the symbols in @var{provision}
22471 (@pxref{Invoking herd,,, shepherd, The GNU Shepherd Manual}).
22472
22473 @item @code{modules} (default: @var{%default-modules})
22474 This is the list of modules that must be in scope when @code{start} and
22475 @code{stop} are evaluated.
22476
22477 @end table
22478 @end deftp
22479
22480 @deftp {Data Type} shepherd-action
22481 This is the data type that defines additional actions implemented by a
22482 Shepherd service (see above).
22483
22484 @table @code
22485 @item name
22486 Symbol naming the action.
22487
22488 @item documentation
22489 This is a documentation string for the action. It can be viewed by running:
22490
22491 @example
22492 herd doc @var{service} action @var{action}
22493 @end example
22494
22495 @item procedure
22496 This should be a gexp that evaluates to a procedure of at least one argument,
22497 which is the ``running value'' of the service (@pxref{Slots of services,,,
22498 shepherd, The GNU Shepherd Manual}).
22499 @end table
22500
22501 The following example defines an action called @code{say-hello} that kindly
22502 greets the user:
22503
22504 @example
22505 (shepherd-action
22506 (name 'say-hello)
22507 (documentation "Say hi!")
22508 (procedure #~(lambda (running . args)
22509 (format #t "Hello, friend! arguments: ~s\n"
22510 args)
22511 #t)))
22512 @end example
22513
22514 Assuming this action is added to the @code{example} service, then you can do:
22515
22516 @example
22517 # herd say-hello example
22518 Hello, friend! arguments: ()
22519 # herd say-hello example a b c
22520 Hello, friend! arguments: ("a" "b" "c")
22521 @end example
22522
22523 This, as you can see, is a fairly sophisticated way to say hello.
22524 @xref{Service Convenience,,, shepherd, The GNU Shepherd Manual}, for more
22525 info on actions.
22526 @end deftp
22527
22528 @defvr {Scheme Variable} shepherd-root-service-type
22529 The service type for the Shepherd ``root service''---i.e., PID@tie{}1.
22530
22531 This is the service type that extensions target when they want to create
22532 shepherd services (@pxref{Service Types and Services}, for an example).
22533 Each extension must pass a list of @code{<shepherd-service>}.
22534 @end defvr
22535
22536 @defvr {Scheme Variable} %shepherd-root-service
22537 This service represents PID@tie{}1.
22538 @end defvr
22539
22540
22541 @node Documentation
22542 @section Documentation
22543
22544 @cindex documentation, searching for
22545 @cindex searching for documentation
22546 @cindex Info, documentation format
22547 @cindex man pages
22548 @cindex manual pages
22549 In most cases packages installed with Guix come with documentation.
22550 There are two main documentation formats: ``Info'', a browseable
22551 hypertext format used for GNU software, and ``manual pages'' (or ``man
22552 pages''), the linear documentation format traditionally found on Unix.
22553 Info manuals are accessed with the @command{info} command or with Emacs,
22554 and man pages are accessed using @command{man}.
22555
22556 You can look for documentation of software installed on your system by
22557 keyword. For example, the following command searches for information
22558 about ``TLS'' in Info manuals:
22559
22560 @example
22561 $ info -k TLS
22562 "(emacs)Network Security" -- STARTTLS
22563 "(emacs)Network Security" -- TLS
22564 "(gnutls)Core TLS API" -- gnutls_certificate_set_verify_flags
22565 "(gnutls)Core TLS API" -- gnutls_certificate_set_verify_function
22566 @dots{}
22567 @end example
22568
22569 @noindent
22570 The command below searches for the same keyword in man pages:
22571
22572 @example
22573 $ man -k TLS
22574 SSL (7) - OpenSSL SSL/TLS library
22575 certtool (1) - GnuTLS certificate tool
22576 @dots {}
22577 @end example
22578
22579 These searches are purely local to your computer so you have the
22580 guarantee that documentation you find corresponds to what you have
22581 actually installed, you can access it off-line, and your privacy is
22582 respected.
22583
22584 Once you have these results, you can view the relevant documentation by
22585 running, say:
22586
22587 @example
22588 $ info "(gnutls)Core TLS API"
22589 @end example
22590
22591 @noindent
22592 or:
22593
22594 @example
22595 $ man certtool
22596 @end example
22597
22598 Info manuals contain sections and indices as well as hyperlinks like
22599 those found in Web pages. The @command{info} reader (@pxref{Top, Info
22600 reader,, info-stnd, Stand-alone GNU Info}) and its Emacs counterpart
22601 (@pxref{Misc Help,,, emacs, The GNU Emacs Manual}) provide intuitive key
22602 bindings to navigate manuals. @xref{Getting Started,,, info, Info: An
22603 Introduction}, for an introduction to Info navigation.
22604
22605 @node Installing Debugging Files
22606 @section Installing Debugging Files
22607
22608 @cindex debugging files
22609 Program binaries, as produced by the GCC compilers for instance, are
22610 typically written in the ELF format, with a section containing
22611 @dfn{debugging information}. Debugging information is what allows the
22612 debugger, GDB, to map binary code to source code; it is required to
22613 debug a compiled program in good conditions.
22614
22615 The problem with debugging information is that is takes up a fair amount
22616 of disk space. For example, debugging information for the GNU C Library
22617 weighs in at more than 60 MiB. Thus, as a user, keeping all the
22618 debugging info of all the installed programs is usually not an option.
22619 Yet, space savings should not come at the cost of an impediment to
22620 debugging---especially in the GNU system, which should make it easier
22621 for users to exert their computing freedom (@pxref{GNU Distribution}).
22622
22623 Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a
22624 mechanism that allows users to get the best of both worlds: debugging
22625 information can be stripped from the binaries and stored in separate
22626 files. GDB is then able to load debugging information from those files,
22627 when they are available (@pxref{Separate Debug Files,,, gdb, Debugging
22628 with GDB}).
22629
22630 The GNU distribution takes advantage of this by storing debugging
22631 information in the @code{lib/debug} sub-directory of a separate package
22632 output unimaginatively called @code{debug} (@pxref{Packages with
22633 Multiple Outputs}). Users can choose to install the @code{debug} output
22634 of a package when they need it. For instance, the following command
22635 installs the debugging information for the GNU C Library and for GNU
22636 Guile:
22637
22638 @example
22639 guix package -i glibc:debug guile:debug
22640 @end example
22641
22642 GDB must then be told to look for debug files in the user's profile, by
22643 setting the @code{debug-file-directory} variable (consider setting it
22644 from the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with
22645 GDB}):
22646
22647 @example
22648 (gdb) set debug-file-directory ~/.guix-profile/lib/debug
22649 @end example
22650
22651 From there on, GDB will pick up debugging information from the
22652 @code{.debug} files under @file{~/.guix-profile/lib/debug}.
22653
22654 In addition, you will most likely want GDB to be able to show the source
22655 code being debugged. To do that, you will have to unpack the source
22656 code of the package of interest (obtained with @code{guix build
22657 --source}, @pxref{Invoking guix build}), and to point GDB to that source
22658 directory using the @code{directory} command (@pxref{Source Path,
22659 @code{directory},, gdb, Debugging with GDB}).
22660
22661 @c XXX: keep me up-to-date
22662 The @code{debug} output mechanism in Guix is implemented by the
22663 @code{gnu-build-system} (@pxref{Build Systems}). Currently, it is
22664 opt-in---debugging information is available only for the packages
22665 with definitions explicitly declaring a @code{debug} output. This may be
22666 changed to opt-out in the future if our build farm servers can handle
22667 the load. To check whether a package has a @code{debug} output, use
22668 @command{guix package --list-available} (@pxref{Invoking guix package}).
22669
22670
22671 @node Security Updates
22672 @section Security Updates
22673
22674 @cindex security updates
22675 @cindex security vulnerabilities
22676 Occasionally, important security vulnerabilities are discovered in software
22677 packages and must be patched. Guix developers try hard to keep track of
22678 known vulnerabilities and to apply fixes as soon as possible in the
22679 @code{master} branch of Guix (we do not yet provide a ``stable'' branch
22680 containing only security updates.) The @command{guix lint} tool helps
22681 developers find out about vulnerable versions of software packages in the
22682 distribution:
22683
22684 @smallexample
22685 $ guix lint -c cve
22686 gnu/packages/base.scm:652:2: glibc@@2.21: probably vulnerable to CVE-2015-1781, CVE-2015-7547
22687 gnu/packages/gcc.scm:334:2: gcc@@4.9.3: probably vulnerable to CVE-2015-5276
22688 gnu/packages/image.scm:312:2: openjpeg@@2.1.0: probably vulnerable to CVE-2016-1923, CVE-2016-1924
22689 @dots{}
22690 @end smallexample
22691
22692 @xref{Invoking guix lint}, for more information.
22693
22694 @quotation Note
22695 As of version @value{VERSION}, the feature described below is considered
22696 ``beta''.
22697 @end quotation
22698
22699 Guix follows a functional
22700 package management discipline (@pxref{Introduction}), which implies
22701 that, when a package is changed, @emph{every package that depends on it}
22702 must be rebuilt. This can significantly slow down the deployment of
22703 fixes in core packages such as libc or Bash, since basically the whole
22704 distribution would need to be rebuilt. Using pre-built binaries helps
22705 (@pxref{Substitutes}), but deployment may still take more time than
22706 desired.
22707
22708 @cindex grafts
22709 To address this, Guix implements @dfn{grafts}, a mechanism that allows
22710 for fast deployment of critical updates without the costs associated
22711 with a whole-distribution rebuild. The idea is to rebuild only the
22712 package that needs to be patched, and then to ``graft'' it onto packages
22713 explicitly installed by the user and that were previously referring to
22714 the original package. The cost of grafting is typically very low, and
22715 order of magnitudes lower than a full rebuild of the dependency chain.
22716
22717 @cindex replacements of packages, for grafts
22718 For instance, suppose a security update needs to be applied to Bash.
22719 Guix developers will provide a package definition for the ``fixed''
22720 Bash, say @var{bash-fixed}, in the usual way (@pxref{Defining
22721 Packages}). Then, the original package definition is augmented with a
22722 @code{replacement} field pointing to the package containing the bug fix:
22723
22724 @example
22725 (define bash
22726 (package
22727 (name "bash")
22728 ;; @dots{}
22729 (replacement bash-fixed)))
22730 @end example
22731
22732 From there on, any package depending directly or indirectly on Bash---as
22733 reported by @command{guix gc --requisites} (@pxref{Invoking guix
22734 gc})---that is installed is automatically ``rewritten'' to refer to
22735 @var{bash-fixed} instead of @var{bash}. This grafting process takes
22736 time proportional to the size of the package, usually less than a
22737 minute for an ``average'' package on a recent machine. Grafting is
22738 recursive: when an indirect dependency requires grafting, then grafting
22739 ``propagates'' up to the package that the user is installing.
22740
22741 Currently, the length of the name and version of the graft and that of
22742 the package it replaces (@var{bash-fixed} and @var{bash} in the example
22743 above) must be equal. This restriction mostly comes from the fact that
22744 grafting works by patching files, including binary files, directly.
22745 Other restrictions may apply: for instance, when adding a graft to a
22746 package providing a shared library, the original shared library and its
22747 replacement must have the same @code{SONAME} and be binary-compatible.
22748
22749 The @option{--no-grafts} command-line option allows you to forcefully
22750 avoid grafting (@pxref{Common Build Options, @option{--no-grafts}}).
22751 Thus, the command:
22752
22753 @example
22754 guix build bash --no-grafts
22755 @end example
22756
22757 @noindent
22758 returns the store file name of the original Bash, whereas:
22759
22760 @example
22761 guix build bash
22762 @end example
22763
22764 @noindent
22765 returns the store file name of the ``fixed'', replacement Bash. This
22766 allows you to distinguish between the two variants of Bash.
22767
22768 To verify which Bash your whole profile refers to, you can run
22769 (@pxref{Invoking guix gc}):
22770
22771 @example
22772 guix gc -R `readlink -f ~/.guix-profile` | grep bash
22773 @end example
22774
22775 @noindent
22776 @dots{} and compare the store file names that you get with those above.
22777 Likewise for a complete GuixSD system generation:
22778
22779 @example
22780 guix gc -R `guix system build my-config.scm` | grep bash
22781 @end example
22782
22783 Lastly, to check which Bash running processes are using, you can use the
22784 @command{lsof} command:
22785
22786 @example
22787 lsof | grep /gnu/store/.*bash
22788 @end example
22789
22790
22791 @node Package Modules
22792 @section Package Modules
22793
22794 From a programming viewpoint, the package definitions of the
22795 GNU distribution are provided by Guile modules in the @code{(gnu packages
22796 @dots{})} name space@footnote{Note that packages under the @code{(gnu
22797 packages @dots{})} module name space are not necessarily ``GNU
22798 packages''. This module naming scheme follows the usual Guile module
22799 naming convention: @code{gnu} means that these modules are distributed
22800 as part of the GNU system, and @code{packages} identifies modules that
22801 define packages.} (@pxref{Modules, Guile modules,, guile, GNU Guile
22802 Reference Manual}). For instance, the @code{(gnu packages emacs)}
22803 module exports a variable named @code{emacs}, which is bound to a
22804 @code{<package>} object (@pxref{Defining Packages}).
22805
22806 The @code{(gnu packages @dots{})} module name space is
22807 automatically scanned for packages by the command-line tools. For
22808 instance, when running @code{guix package -i emacs}, all the @code{(gnu
22809 packages @dots{})} modules are scanned until one that exports a package
22810 object whose name is @code{emacs} is found. This package search
22811 facility is implemented in the @code{(gnu packages)} module.
22812
22813 @cindex customization, of packages
22814 @cindex package module search path
22815 Users can store package definitions in modules with different
22816 names---e.g., @code{(my-packages emacs)}@footnote{Note that the file
22817 name and module name must match. For instance, the @code{(my-packages
22818 emacs)} module must be stored in a @file{my-packages/emacs.scm} file
22819 relative to the load path specified with @option{--load-path} or
22820 @code{GUIX_PACKAGE_PATH}. @xref{Modules and the File System,,,
22821 guile, GNU Guile Reference Manual}, for details.}. There are two ways to make
22822 these package definitions visible to the user interfaces:
22823
22824 @enumerate
22825 @item
22826 By adding the directory containing your package modules to the search path
22827 with the @code{-L} flag of @command{guix package} and other commands
22828 (@pxref{Common Build Options}), or by setting the @code{GUIX_PACKAGE_PATH}
22829 environment variable described below.
22830
22831 @item
22832 By defining a @dfn{channel} and configuring @command{guix pull} so that it
22833 pulls from it. A channel is essentially a Git repository containing package
22834 modules. @xref{Channels}, for more information on how to define and use
22835 channels.
22836 @end enumerate
22837
22838 @code{GUIX_PACKAGE_PATH} works similarly to other search path variables:
22839
22840 @defvr {Environment Variable} GUIX_PACKAGE_PATH
22841 This is a colon-separated list of directories to search for additional
22842 package modules. Directories listed in this variable take precedence
22843 over the own modules of the distribution.
22844 @end defvr
22845
22846 The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}:
22847 each package is built based solely on other packages in the
22848 distribution. The root of this dependency graph is a small set of
22849 @dfn{bootstrap binaries}, provided by the @code{(gnu packages
22850 bootstrap)} module. For more information on bootstrapping,
22851 @pxref{Bootstrapping}.
22852
22853 @node Packaging Guidelines
22854 @section Packaging Guidelines
22855
22856 @cindex packages, creating
22857 The GNU distribution is nascent and may well lack some of your favorite
22858 packages. This section describes how you can help make the distribution
22859 grow. @xref{Contributing}, for additional information on how you can
22860 help.
22861
22862 Free software packages are usually distributed in the form of
22863 @dfn{source code tarballs}---typically @file{tar.gz} files that contain
22864 all the source files. Adding a package to the distribution means
22865 essentially two things: adding a @dfn{recipe} that describes how to
22866 build the package, including a list of other packages required to build
22867 it, and adding @dfn{package metadata} along with that recipe, such as a
22868 description and licensing information.
22869
22870 In Guix all this information is embodied in @dfn{package definitions}.
22871 Package definitions provide a high-level view of the package. They are
22872 written using the syntax of the Scheme programming language; in fact,
22873 for each package we define a variable bound to the package definition,
22874 and export that variable from a module (@pxref{Package Modules}).
22875 However, in-depth Scheme knowledge is @emph{not} a prerequisite for
22876 creating packages. For more information on package definitions,
22877 @pxref{Defining Packages}.
22878
22879 Once a package definition is in place, stored in a file in the Guix
22880 source tree, it can be tested using the @command{guix build} command
22881 (@pxref{Invoking guix build}). For example, assuming the new package is
22882 called @code{gnew}, you may run this command from the Guix build tree
22883 (@pxref{Running Guix Before It Is Installed}):
22884
22885 @example
22886 ./pre-inst-env guix build gnew --keep-failed
22887 @end example
22888
22889 Using @code{--keep-failed} makes it easier to debug build failures since
22890 it provides access to the failed build tree. Another useful
22891 command-line option when debugging is @code{--log-file}, to access the
22892 build log.
22893
22894 If the package is unknown to the @command{guix} command, it may be that
22895 the source file contains a syntax error, or lacks a @code{define-public}
22896 clause to export the package variable. To figure it out, you may load
22897 the module from Guile to get more information about the actual error:
22898
22899 @example
22900 ./pre-inst-env guile -c '(use-modules (gnu packages gnew))'
22901 @end example
22902
22903 Once your package builds correctly, please send us a patch
22904 (@pxref{Contributing}). Well, if you need help, we will be happy to
22905 help you too. Once the patch is committed in the Guix repository, the
22906 new package automatically gets built on the supported platforms by
22907 @url{http://hydra.gnu.org/jobset/gnu/master, our continuous integration
22908 system}.
22909
22910 @cindex substituter
22911 Users can obtain the new package definition simply by running
22912 @command{guix pull} (@pxref{Invoking guix pull}). When
22913 @code{hydra.gnu.org} is done building the package, installing the
22914 package automatically downloads binaries from there
22915 (@pxref{Substitutes}). The only place where human intervention is
22916 needed is to review and apply the patch.
22917
22918
22919 @menu
22920 * Software Freedom:: What may go into the distribution.
22921 * Package Naming:: What's in a name?
22922 * Version Numbers:: When the name is not enough.
22923 * Synopses and Descriptions:: Helping users find the right package.
22924 * Python Modules:: A touch of British comedy.
22925 * Perl Modules:: Little pearls.
22926 * Java Packages:: Coffee break.
22927 * Fonts:: Fond of fonts.
22928 @end menu
22929
22930 @node Software Freedom
22931 @subsection Software Freedom
22932
22933 @c Adapted from http://www.gnu.org/philosophy/philosophy.html.
22934 @cindex free software
22935 The GNU operating system has been developed so that users can have
22936 freedom in their computing. GNU is @dfn{free software}, meaning that
22937 users have the @url{http://www.gnu.org/philosophy/free-sw.html,four
22938 essential freedoms}: to run the program, to study and change the program
22939 in source code form, to redistribute exact copies, and to distribute
22940 modified versions. Packages found in the GNU distribution provide only
22941 software that conveys these four freedoms.
22942
22943 In addition, the GNU distribution follow the
22944 @url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free
22945 software distribution guidelines}. Among other things, these guidelines
22946 reject non-free firmware, recommendations of non-free software, and
22947 discuss ways to deal with trademarks and patents.
22948
22949 Some otherwise free upstream package sources contain a small and optional
22950 subset that violates the above guidelines, for instance because this subset
22951 is itself non-free code. When that happens, the offending items are removed
22952 with appropriate patches or code snippets in the @code{origin} form of the
22953 package (@pxref{Defining Packages}). This way, @code{guix
22954 build --source} returns the ``freed'' source rather than the unmodified
22955 upstream source.
22956
22957
22958 @node Package Naming
22959 @subsection Package Naming
22960
22961 @cindex package name
22962 A package has actually two names associated with it:
22963 First, there is the name of the @emph{Scheme variable}, the one following
22964 @code{define-public}. By this name, the package can be made known in the
22965 Scheme code, for instance as input to another package. Second, there is
22966 the string in the @code{name} field of a package definition. This name
22967 is used by package management commands such as
22968 @command{guix package} and @command{guix build}.
22969
22970 Both are usually the same and correspond to the lowercase conversion of
22971 the project name chosen upstream, with underscores replaced with
22972 hyphens. For instance, GNUnet is available as @code{gnunet}, and
22973 SDL_net as @code{sdl-net}.
22974
22975 We do not add @code{lib} prefixes for library packages, unless these are
22976 already part of the official project name. But @pxref{Python
22977 Modules} and @ref{Perl Modules} for special rules concerning modules for
22978 the Python and Perl languages.
22979
22980 Font package names are handled differently, @pxref{Fonts}.
22981
22982
22983 @node Version Numbers
22984 @subsection Version Numbers
22985
22986 @cindex package version
22987 We usually package only the latest version of a given free software
22988 project. But sometimes, for instance for incompatible library versions,
22989 two (or more) versions of the same package are needed. These require
22990 different Scheme variable names. We use the name as defined
22991 in @ref{Package Naming}
22992 for the most recent version; previous versions use the same name, suffixed
22993 by @code{-} and the smallest prefix of the version number that may
22994 distinguish the two versions.
22995
22996 The name inside the package definition is the same for all versions of a
22997 package and does not contain any version number.
22998
22999 For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as follows:
23000
23001 @example
23002 (define-public gtk+
23003 (package
23004 (name "gtk+")
23005 (version "3.9.12")
23006 ...))
23007 (define-public gtk+-2
23008 (package
23009 (name "gtk+")
23010 (version "2.24.20")
23011 ...))
23012 @end example
23013 If we also wanted GTK+ 3.8.2, this would be packaged as
23014 @example
23015 (define-public gtk+-3.8
23016 (package
23017 (name "gtk+")
23018 (version "3.8.2")
23019 ...))
23020 @end example
23021
23022 @c See <https://lists.gnu.org/archive/html/guix-devel/2016-01/msg00425.html>,
23023 @c for a discussion of what follows.
23024 @cindex version number, for VCS snapshots
23025 Occasionally, we package snapshots of upstream's version control system
23026 (VCS) instead of formal releases. This should remain exceptional,
23027 because it is up to upstream developers to clarify what the stable
23028 release is. Yet, it is sometimes necessary. So, what should we put in
23029 the @code{version} field?
23030
23031 Clearly, we need to make the commit identifier of the VCS snapshot
23032 visible in the version string, but we also need to make sure that the
23033 version string is monotonically increasing so that @command{guix package
23034 --upgrade} can determine which version is newer. Since commit
23035 identifiers, notably with Git, are not monotonically increasing, we add
23036 a revision number that we increase each time we upgrade to a newer
23037 snapshot. The resulting version string looks like this:
23038
23039 @example
23040 2.0.11-3.cabba9e
23041 ^ ^ ^
23042 | | `-- upstream commit ID
23043 | |
23044 | `--- Guix package revision
23045 |
23046 latest upstream version
23047 @end example
23048
23049 It is a good idea to strip commit identifiers in the @code{version}
23050 field to, say, 7 digits. It avoids an aesthetic annoyance (assuming
23051 aesthetics have a role to play here) as well as problems related to OS
23052 limits such as the maximum shebang length (127 bytes for the Linux
23053 kernel.) It is best to use the full commit identifiers in
23054 @code{origin}s, though, to avoid ambiguities. A typical package
23055 definition may look like this:
23056
23057 @example
23058 (define my-package
23059 (let ((commit "c3f29bc928d5900971f65965feaae59e1272a3f7")
23060 (revision "1")) ;Guix package revision
23061 (package
23062 (version (git-version "0.9" revision commit))
23063 (source (origin
23064 (method git-fetch)
23065 (uri (git-reference
23066 (url "git://example.org/my-package.git")
23067 (commit commit)))
23068 (sha256 (base32 "1mbikn@dots{}"))
23069 (file-name (git-file-name name version))))
23070 ;; @dots{}
23071 )))
23072 @end example
23073
23074 @node Synopses and Descriptions
23075 @subsection Synopses and Descriptions
23076
23077 @cindex package description
23078 @cindex package synopsis
23079 As we have seen before, each package in GNU@tie{}Guix includes a
23080 synopsis and a description (@pxref{Defining Packages}). Synopses and
23081 descriptions are important: They are what @command{guix package
23082 --search} searches, and a crucial piece of information to help users
23083 determine whether a given package suits their needs. Consequently,
23084 packagers should pay attention to what goes into them.
23085
23086 Synopses must start with a capital letter and must not end with a
23087 period. They must not start with ``a'' or ``the'', which usually does
23088 not bring anything; for instance, prefer ``File-frobbing tool'' over ``A
23089 tool that frobs files''. The synopsis should say what the package
23090 is---e.g., ``Core GNU utilities (file, text, shell)''---or what it is
23091 used for---e.g., the synopsis for GNU@tie{}grep is ``Print lines
23092 matching a pattern''.
23093
23094 Keep in mind that the synopsis must be meaningful for a very wide
23095 audience. For example, ``Manipulate alignments in the SAM format''
23096 might make sense for a seasoned bioinformatics researcher, but might be
23097 fairly unhelpful or even misleading to a non-specialized audience. It
23098 is a good idea to come up with a synopsis that gives an idea of the
23099 application domain of the package. In this example, this might give
23100 something like ``Manipulate nucleotide sequence alignments'', which
23101 hopefully gives the user a better idea of whether this is what they are
23102 looking for.
23103
23104 Descriptions should take between five and ten lines. Use full
23105 sentences, and avoid using acronyms without first introducing them.
23106 Please avoid marketing phrases such as ``world-leading'',
23107 ``industrial-strength'', and ``next-generation'', and avoid superlatives
23108 like ``the most advanced''---they are not helpful to users looking for a
23109 package and may even sound suspicious. Instead, try to be factual,
23110 mentioning use cases and features.
23111
23112 @cindex Texinfo markup, in package descriptions
23113 Descriptions can include Texinfo markup, which is useful to introduce
23114 ornaments such as @code{@@code} or @code{@@dfn}, bullet lists, or
23115 hyperlinks (@pxref{Overview,,, texinfo, GNU Texinfo}). However you
23116 should be careful when using some characters for example @samp{@@} and
23117 curly braces which are the basic special characters in Texinfo
23118 (@pxref{Special Characters,,, texinfo, GNU Texinfo}). User interfaces
23119 such as @command{guix package --show} take care of rendering it
23120 appropriately.
23121
23122 Synopses and descriptions are translated by volunteers
23123 @uref{http://translationproject.org/domain/guix-packages.html, at the
23124 Translation Project} so that as many users as possible can read them in
23125 their native language. User interfaces search them and display them in
23126 the language specified by the current locale.
23127
23128 To allow @command{xgettext} to extract them as translatable strings,
23129 synopses and descriptions @emph{must be literal strings}. This means
23130 that you cannot use @code{string-append} or @code{format} to construct
23131 these strings:
23132
23133 @lisp
23134 (package
23135 ;; @dots{}
23136 (synopsis "This is translatable")
23137 (description (string-append "This is " "*not*" " translatable.")))
23138 @end lisp
23139
23140 Translation is a lot of work so, as a packager, please pay even more
23141 attention to your synopses and descriptions as every change may entail
23142 additional work for translators. In order to help them, it is possible
23143 to make recommendations or instructions visible to them by inserting
23144 special comments like this (@pxref{xgettext Invocation,,, gettext, GNU
23145 Gettext}):
23146
23147 @example
23148 ;; TRANSLATORS: "X11 resize-and-rotate" should not be translated.
23149 (description "ARandR is designed to provide a simple visual front end
23150 for the X11 resize-and-rotate (RandR) extension. @dots{}")
23151 @end example
23152
23153
23154 @node Python Modules
23155 @subsection Python Modules
23156
23157 @cindex python
23158 We currently package Python 2 and Python 3, under the Scheme variable names
23159 @code{python-2} and @code{python} as explained in @ref{Version Numbers}.
23160 To avoid confusion and naming clashes with other programming languages, it
23161 seems desirable that the name of a package for a Python module contains
23162 the word @code{python}.
23163
23164 Some modules are compatible with only one version of Python, others with both.
23165 If the package Foo compiles only with Python 3, we name it
23166 @code{python-foo}; if it compiles only with Python 2, we name it
23167 @code{python2-foo}. If it is compatible with both versions, we create two
23168 packages with the corresponding names.
23169
23170 If a project already contains the word @code{python}, we drop this;
23171 for instance, the module python-dateutil is packaged under the names
23172 @code{python-dateutil} and @code{python2-dateutil}. If the project name
23173 starts with @code{py} (e.g. @code{pytz}), we keep it and prefix it as
23174 described above.
23175
23176 @subsubsection Specifying Dependencies
23177 @cindex inputs, for Python packages
23178
23179 Dependency information for Python packages is usually available in the
23180 package source tree, with varying degrees of accuracy: in the
23181 @file{setup.py} file, in @file{requirements.txt}, or in @file{tox.ini}.
23182
23183 Your mission, when writing a recipe for a Python package, is to map
23184 these dependencies to the appropriate type of ``input'' (@pxref{package
23185 Reference, inputs}). Although the @code{pypi} importer normally does a
23186 good job (@pxref{Invoking guix import}), you may want to check the
23187 following check list to determine which dependency goes where.
23188
23189 @itemize
23190
23191 @item
23192 We currently package Python 2 with @code{setuptools} and @code{pip}
23193 installed like Python 3.4 has per default. Thus you don't need to
23194 specify either of these as an input. @command{guix lint} will warn you
23195 if you do.
23196
23197 @item
23198 Python dependencies required at run time go into
23199 @code{propagated-inputs}. They are typically defined with the
23200 @code{install_requires} keyword in @file{setup.py}, or in the
23201 @file{requirements.txt} file.
23202
23203 @item
23204 Python packages required only at build time---e.g., those listed with
23205 the @code{setup_requires} keyword in @file{setup.py}---or only for
23206 testing---e.g., those in @code{tests_require}---go into
23207 @code{native-inputs}. The rationale is that (1) they do not need to be
23208 propagated because they are not needed at run time, and (2) in a
23209 cross-compilation context, it's the ``native'' input that we'd want.
23210
23211 Examples are the @code{pytest}, @code{mock}, and @code{nose} test
23212 frameworks. Of course if any of these packages is also required at
23213 run-time, it needs to go to @code{propagated-inputs}.
23214
23215 @item
23216 Anything that does not fall in the previous categories goes to
23217 @code{inputs}, for example programs or C libraries required for building
23218 Python packages containing C extensions.
23219
23220 @item
23221 If a Python package has optional dependencies (@code{extras_require}),
23222 it is up to you to decide whether to add them or not, based on their
23223 usefulness/overhead ratio (@pxref{Submitting Patches, @command{guix
23224 size}}).
23225
23226 @end itemize
23227
23228
23229 @node Perl Modules
23230 @subsection Perl Modules
23231
23232 @cindex perl
23233 Perl programs standing for themselves are named as any other package,
23234 using the lowercase upstream name.
23235 For Perl packages containing a single class, we use the lowercase class name,
23236 replace all occurrences of @code{::} by dashes and prepend the prefix
23237 @code{perl-}.
23238 So the class @code{XML::Parser} becomes @code{perl-xml-parser}.
23239 Modules containing several classes keep their lowercase upstream name and
23240 are also prepended by @code{perl-}. Such modules tend to have the word
23241 @code{perl} somewhere in their name, which gets dropped in favor of the
23242 prefix. For instance, @code{libwww-perl} becomes @code{perl-libwww}.
23243
23244
23245 @node Java Packages
23246 @subsection Java Packages
23247
23248 @cindex java
23249 Java programs standing for themselves are named as any other package,
23250 using the lowercase upstream name.
23251
23252 To avoid confusion and naming clashes with other programming languages,
23253 it is desirable that the name of a package for a Java package is
23254 prefixed with @code{java-}. If a project already contains the word
23255 @code{java}, we drop this; for instance, the package @code{ngsjava} is
23256 packaged under the name @code{java-ngs}.
23257
23258 For Java packages containing a single class or a small class hierarchy,
23259 we use the lowercase class name, replace all occurrences of @code{.} by
23260 dashes and prepend the prefix @code{java-}. So the class
23261 @code{apache.commons.cli} becomes package
23262 @code{java-apache-commons-cli}.
23263
23264
23265 @node Fonts
23266 @subsection Fonts
23267
23268 @cindex fonts
23269 For fonts that are in general not installed by a user for typesetting
23270 purposes, or that are distributed as part of a larger software package,
23271 we rely on the general packaging rules for software; for instance, this
23272 applies to the fonts delivered as part of the X.Org system or fonts that
23273 are part of TeX Live.
23274
23275 To make it easier for a user to search for fonts, names for other packages
23276 containing only fonts are constructed as follows, independently of the
23277 upstream package name.
23278
23279 The name of a package containing only one font family starts with
23280 @code{font-}; it is followed by the foundry name and a dash @code{-}
23281 if the foundry is known, and the font family name, in which spaces are
23282 replaced by dashes (and as usual, all upper case letters are transformed
23283 to lower case).
23284 For example, the Gentium font family by SIL is packaged under the name
23285 @code{font-sil-gentium}.
23286
23287 For a package containing several font families, the name of the collection
23288 is used in the place of the font family name.
23289 For instance, the Liberation fonts consist of three families,
23290 Liberation Sans, Liberation Serif and Liberation Mono.
23291 These could be packaged separately under the names
23292 @code{font-liberation-sans} and so on; but as they are distributed together
23293 under a common name, we prefer to package them together as
23294 @code{font-liberation}.
23295
23296 In the case where several formats of the same font family or font collection
23297 are packaged separately, a short form of the format, prepended by a dash,
23298 is added to the package name. We use @code{-ttf} for TrueType fonts,
23299 @code{-otf} for OpenType fonts and @code{-type1} for PostScript Type 1
23300 fonts.
23301
23302
23303
23304 @node Bootstrapping
23305 @section Bootstrapping
23306
23307 @c Adapted from the ELS 2013 paper.
23308
23309 @cindex bootstrapping
23310
23311 Bootstrapping in our context refers to how the distribution gets built
23312 ``from nothing''. Remember that the build environment of a derivation
23313 contains nothing but its declared inputs (@pxref{Introduction}). So
23314 there's an obvious chicken-and-egg problem: how does the first package
23315 get built? How does the first compiler get compiled? Note that this is
23316 a question of interest only to the curious hacker, not to the regular
23317 user, so you can shamelessly skip this section if you consider yourself
23318 a ``regular user''.
23319
23320 @cindex bootstrap binaries
23321 The GNU system is primarily made of C code, with libc at its core. The
23322 GNU build system itself assumes the availability of a Bourne shell and
23323 command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
23324 `grep'. Furthermore, build programs---programs that run
23325 @code{./configure}, @code{make}, etc.---are written in Guile Scheme
23326 (@pxref{Derivations}). Consequently, to be able to build anything at
23327 all, from scratch, Guix relies on pre-built binaries of Guile, GCC,
23328 Binutils, libc, and the other packages mentioned above---the
23329 @dfn{bootstrap binaries}.
23330
23331 These bootstrap binaries are ``taken for granted'', though we can also
23332 re-create them if needed (more on that later).
23333
23334 @unnumberedsubsec Preparing to Use the Bootstrap Binaries
23335
23336 @c As of Emacs 24.3, Info-mode displays the image, but since it's a
23337 @c large image, it's hard to scroll. Oh well.
23338 @image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap derivations}
23339
23340 The figure above shows the very beginning of the dependency graph of the
23341 distribution, corresponding to the package definitions of the @code{(gnu
23342 packages bootstrap)} module. A similar figure can be generated with
23343 @command{guix graph} (@pxref{Invoking guix graph}), along the lines of:
23344
23345 @example
23346 guix graph -t derivation \
23347 -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
23348 | dot -Tps > t.ps
23349 @end example
23350
23351 At this level of detail, things are
23352 slightly complex. First, Guile itself consists of an ELF executable,
23353 along with many source and compiled Scheme files that are dynamically
23354 loaded when it runs. This gets stored in the @file{guile-2.0.7.tar.xz}
23355 tarball shown in this graph. This tarball is part of Guix's ``source''
23356 distribution, and gets inserted into the store with @code{add-to-store}
23357 (@pxref{The Store}).
23358
23359 But how do we write a derivation that unpacks this tarball and adds it
23360 to the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
23361 derivation---the first one that gets built---uses @code{bash} as its
23362 builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
23363 @code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar},
23364 @file{xz}, and @file{mkdir} are statically-linked binaries, also part of
23365 the Guix source distribution, whose sole purpose is to allow the Guile
23366 tarball to be unpacked.
23367
23368 Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning
23369 Guile that can be used to run subsequent build programs. Its first task
23370 is to download tarballs containing the other pre-built binaries---this
23371 is what the @code{.tar.xz.drv} derivations do. Guix modules such as
23372 @code{ftp-client.scm} are used for this purpose. The
23373 @code{module-import.drv} derivations import those modules in a directory
23374 in the store, using the original layout. The
23375 @code{module-import-compiled.drv} derivations compile those modules, and
23376 write them in an output directory with the right layout. This
23377 corresponds to the @code{#:modules} argument of
23378 @code{build-expression->derivation} (@pxref{Derivations}).
23379
23380 Finally, the various tarballs are unpacked by the
23381 derivations @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv},
23382 etc., at which point we have a working C tool chain.
23383
23384
23385 @unnumberedsubsec Building the Build Tools
23386
23387 Bootstrapping is complete when we have a full tool chain that does not
23388 depend on the pre-built bootstrap tools discussed above. This
23389 no-dependency requirement is verified by checking whether the files of
23390 the final tool chain contain references to the @file{/gnu/store}
23391 directories of the bootstrap inputs. The process that leads to this
23392 ``final'' tool chain is described by the package definitions found in
23393 the @code{(gnu packages commencement)} module.
23394
23395 The @command{guix graph} command allows us to ``zoom out'' compared to
23396 the graph above, by looking at the level of package objects instead of
23397 individual derivations---remember that a package may translate to
23398 several derivations, typically one derivation to download its source,
23399 one to build the Guile modules it needs, and one to actually build the
23400 package from source. The command:
23401
23402 @example
23403 guix graph -t bag \
23404 -e '(@@@@ (gnu packages commencement)
23405 glibc-final-with-bootstrap-bash)' | dot -Tps > t.ps
23406 @end example
23407
23408 @noindent
23409 produces the dependency graph leading to the ``final'' C
23410 library@footnote{You may notice the @code{glibc-intermediate} label,
23411 suggesting that it is not @emph{quite} final, but as a good
23412 approximation, we will consider it final.}, depicted below.
23413
23414 @image{images/bootstrap-packages,6in,,Dependency graph of the early packages}
23415
23416 @c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
23417 The first tool that gets built with the bootstrap binaries is
23418 GNU@tie{}Make---noted @code{make-boot0} above---which is a prerequisite
23419 for all the following packages. From there Findutils and Diffutils get
23420 built.
23421
23422 Then come the first-stage Binutils and GCC, built as pseudo cross
23423 tools---i.e., with @code{--target} equal to @code{--host}. They are
23424 used to build libc. Thanks to this cross-build trick, this libc is
23425 guaranteed not to hold any reference to the initial tool chain.
23426
23427 From there the final Binutils and GCC (not shown above) are built.
23428 GCC uses @code{ld}
23429 from the final Binutils, and links programs against the just-built libc.
23430 This tool chain is used to build the other packages used by Guix and by
23431 the GNU Build System: Guile, Bash, Coreutils, etc.
23432
23433 And voilà! At this point we have the complete set of build tools that
23434 the GNU Build System expects. These are in the @code{%final-inputs}
23435 variable of the @code{(gnu packages commencement)} module, and are
23436 implicitly used by any package that uses @code{gnu-build-system}
23437 (@pxref{Build Systems, @code{gnu-build-system}}).
23438
23439
23440 @unnumberedsubsec Building the Bootstrap Binaries
23441
23442 @cindex bootstrap binaries
23443 Because the final tool chain does not depend on the bootstrap binaries,
23444 those rarely need to be updated. Nevertheless, it is useful to have an
23445 automated way to produce them, should an update occur, and this is what
23446 the @code{(gnu packages make-bootstrap)} module provides.
23447
23448 The following command builds the tarballs containing the bootstrap
23449 binaries (Guile, Binutils, GCC, libc, and a tarball containing a mixture
23450 of Coreutils and other basic command-line tools):
23451
23452 @example
23453 guix build bootstrap-tarballs
23454 @end example
23455
23456 The generated tarballs are those that should be referred to in the
23457 @code{(gnu packages bootstrap)} module mentioned at the beginning of
23458 this section.
23459
23460 Still here? Then perhaps by now you've started to wonder: when do we
23461 reach a fixed point? That is an interesting question! The answer is
23462 unknown, but if you would like to investigate further (and have
23463 significant computational and storage resources to do so), then let us
23464 know.
23465
23466 @unnumberedsubsec Reducing the Set of Bootstrap Binaries
23467
23468 Our bootstrap binaries currently include GCC, Guile, etc. That's a lot
23469 of binary code! Why is that a problem? It's a problem because these
23470 big chunks of binary code are practically non-auditable, which makes it
23471 hard to establish what source code produced them. Every unauditable
23472 binary also leaves us vulnerable to compiler backdoors as described by
23473 Ken Thompson in the 1984 paper @emph{Reflections on Trusting Trust}.
23474
23475 This is mitigated by the fact that our bootstrap binaries were generated
23476 from an earlier Guix revision. Nevertheless it lacks the level of
23477 transparency that we get in the rest of the package dependency graph,
23478 where Guix always gives us a source-to-binary mapping. Thus, our goal
23479 is to reduce the set of bootstrap binaries to the bare minimum.
23480
23481 The @uref{http://bootstrappable.org, Bootstrappable.org web site} lists
23482 on-going projects to do that. One of these is about replacing the
23483 bootstrap GCC with a sequence of assemblers, interpreters, and compilers
23484 of increasing complexity, which could be built from source starting from
23485 a simple and auditable assembler. Your help is welcome!
23486
23487
23488 @node Porting
23489 @section Porting to a New Platform
23490
23491 As discussed above, the GNU distribution is self-contained, and
23492 self-containment is achieved by relying on pre-built ``bootstrap
23493 binaries'' (@pxref{Bootstrapping}). These binaries are specific to an
23494 operating system kernel, CPU architecture, and application binary
23495 interface (ABI). Thus, to port the distribution to a platform that is
23496 not yet supported, one must build those bootstrap binaries, and update
23497 the @code{(gnu packages bootstrap)} module to use them on that platform.
23498
23499 Fortunately, Guix can @emph{cross compile} those bootstrap binaries.
23500 When everything goes well, and assuming the GNU tool chain supports the
23501 target platform, this can be as simple as running a command like this
23502 one:
23503
23504 @example
23505 guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
23506 @end example
23507
23508 For this to work, the @code{glibc-dynamic-linker} procedure in
23509 @code{(gnu packages bootstrap)} must be augmented to return the right
23510 file name for libc's dynamic linker on that platform; likewise,
23511 @code{system->linux-architecture} in @code{(gnu packages linux)} must be
23512 taught about the new platform.
23513
23514 Once these are built, the @code{(gnu packages bootstrap)} module needs
23515 to be updated to refer to these binaries on the target platform. That
23516 is, the hashes and URLs of the bootstrap tarballs for the new platform
23517 must be added alongside those of the currently supported platforms. The
23518 bootstrap Guile tarball is treated specially: it is expected to be
23519 available locally, and @file{gnu/local.mk} has rules do download it for
23520 the supported architectures; a rule for the new platform must be added
23521 as well.
23522
23523 In practice, there may be some complications. First, it may be that the
23524 extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
23525 above) is not recognized by all the GNU tools. Typically, glibc
23526 recognizes some of these, whereas GCC uses an extra @code{--with-abi}
23527 configure flag (see @code{gcc.scm} for examples of how to handle this).
23528 Second, some of the required packages could fail to build for that
23529 platform. Lastly, the generated binaries could be broken for some
23530 reason.
23531
23532 @c *********************************************************************
23533 @include contributing.texi
23534
23535 @c *********************************************************************
23536 @node Acknowledgments
23537 @chapter Acknowledgments
23538
23539 Guix is based on the @uref{http://nixos.org/nix/, Nix package manager},
23540 which was designed and
23541 implemented by Eelco Dolstra, with contributions from other people (see
23542 the @file{nix/AUTHORS} file in Guix.) Nix pioneered functional package
23543 management, and promoted unprecedented features, such as transactional
23544 package upgrades and rollbacks, per-user profiles, and referentially
23545 transparent build processes. Without this work, Guix would not exist.
23546
23547 The Nix-based software distributions, Nixpkgs and NixOS, have also been
23548 an inspiration for Guix.
23549
23550 GNU@tie{}Guix itself is a collective work with contributions from a
23551 number of people. See the @file{AUTHORS} file in Guix for more
23552 information on these fine people. The @file{THANKS} file lists people
23553 who have helped by reporting bugs, taking care of the infrastructure,
23554 providing artwork and themes, making suggestions, and more---thank you!
23555
23556
23557 @c *********************************************************************
23558 @node GNU Free Documentation License
23559 @appendix GNU Free Documentation License
23560 @cindex license, GNU Free Documentation License
23561 @include fdl-1.3.texi
23562
23563 @c *********************************************************************
23564 @node Concept Index
23565 @unnumbered Concept Index
23566 @printindex cp
23567
23568 @node Programming Index
23569 @unnumbered Programming Index
23570 @syncodeindex tp fn
23571 @syncodeindex vr fn
23572 @printindex fn
23573
23574 @bye
23575
23576 @c Local Variables:
23577 @c ispell-local-dictionary: "american";
23578 @c End: