e52382e976415f9c7f9c8d657fd4379909dec870
[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 BCA689B636553801C3C62150197A5888235FACAC
14
15 @copying
16 Copyright @copyright{} 2012, 2013, 2014, 2015, 2016, 2017 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 Leo Famulari@*
24 Copyright @copyright{} 2015, 2016 Ricardo Wurmus@*
25 Copyright @copyright{} 2016 Ben Woodcroft@*
26 Copyright @copyright{} 2016 Chris Marusich@*
27 Copyright @copyright{} 2016 Efraim Flashner@*
28 Copyright @copyright{} 2016 John Darrington@*
29 Copyright @copyright{} 2016 ng0@*
30 Copyright @copyright{} 2016 Jan Nieuwenhuizen@*
31 Copyright @copyright{} 2016 Julien Lepiller@*
32 Copyright @copyright{} 2016 Alex ter Weele
33
34 Permission is granted to copy, distribute and/or modify this document
35 under the terms of the GNU Free Documentation License, Version 1.3 or
36 any later version published by the Free Software Foundation; with no
37 Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
38 copy of the license is included in the section entitled ``GNU Free
39 Documentation License''.
40 @end copying
41
42 @dircategory System administration
43 @direntry
44 * Guix: (guix). Manage installed software and system configuration.
45 * guix package: (guix)Invoking guix package. Installing, removing, and upgrading packages.
46 * guix build: (guix)Invoking guix build. Building packages.
47 * guix gc: (guix)Invoking guix gc. Reclaiming unused disk space.
48 * guix pull: (guix)Invoking guix pull. Update the list of available packages.
49 * guix system: (guix)Invoking guix system. Manage the operating system configuration.
50 @end direntry
51
52 @dircategory Software development
53 @direntry
54 * guix environment: (guix)Invoking guix environment. Building development environments with Guix.
55 @end direntry
56
57 @titlepage
58 @title GNU Guix Reference Manual
59 @subtitle Using the GNU Guix Functional Package Manager
60 @author The GNU Guix Developers
61
62 @page
63 @vskip 0pt plus 1filll
64 Edition @value{EDITION} @*
65 @value{UPDATED} @*
66
67 @insertcopying
68 @end titlepage
69
70 @contents
71
72 @c *********************************************************************
73 @node Top
74 @top GNU Guix
75
76 This document describes GNU Guix version @value{VERSION}, a functional
77 package management tool written for the GNU system.
78
79 @menu
80 * Introduction:: What is Guix about?
81 * Installation:: Installing Guix.
82 * Package Management:: Package installation, upgrade, etc.
83 * Programming Interface:: Using Guix in Scheme.
84 * Utilities:: Package management commands.
85 * GNU Distribution:: Software for your friendly GNU system.
86 * Contributing:: Your help needed!
87
88 * Acknowledgments:: Thanks!
89 * GNU Free Documentation License:: The license of this manual.
90 * Concept Index:: Concepts.
91 * Programming Index:: Data types, functions, and variables.
92
93 @detailmenu
94 --- The Detailed Node Listing ---
95
96 Installation
97
98 * Binary Installation:: Getting Guix running in no time!
99 * Requirements:: Software needed to build and run Guix.
100 * Running the Test Suite:: Testing Guix.
101 * Setting Up the Daemon:: Preparing the build daemon's environment.
102 * Invoking guix-daemon:: Running the build daemon.
103 * Application Setup:: Application-specific setup.
104
105 Setting Up the Daemon
106
107 * Build Environment Setup:: Preparing the isolated build environment.
108 * Daemon Offload Setup:: Offloading builds to remote machines.
109
110 Package Management
111
112 * Features:: How Guix will make your life brighter.
113 * Invoking guix package:: Package installation, removal, etc.
114 * Substitutes:: Downloading pre-built binaries.
115 * Packages with Multiple Outputs:: Single source package, multiple outputs.
116 * Invoking guix gc:: Running the garbage collector.
117 * Invoking guix pull:: Fetching the latest Guix and distribution.
118 * Invoking guix archive:: Exporting and importing store files.
119
120 Programming Interface
121
122 * Defining Packages:: Defining new packages.
123 * Build Systems:: Specifying how packages are built.
124 * The Store:: Manipulating the package store.
125 * Derivations:: Low-level interface to package derivations.
126 * The Store Monad:: Purely functional interface to the store.
127 * G-Expressions:: Manipulating build expressions.
128
129 Defining Packages
130
131 * package Reference:: The package data type.
132 * origin Reference:: The origin data type.
133
134 Utilities
135
136 * Invoking guix build:: Building packages from the command line.
137 * Invoking guix edit:: Editing package definitions.
138 * Invoking guix download:: Downloading a file and printing its hash.
139 * Invoking guix hash:: Computing the cryptographic hash of a file.
140 * Invoking guix import:: Importing package definitions.
141 * Invoking guix refresh:: Updating package definitions.
142 * Invoking guix lint:: Finding errors in package definitions.
143 * Invoking guix size:: Profiling disk usage.
144 * Invoking guix graph:: Visualizing the graph of packages.
145 * Invoking guix environment:: Setting up development environments.
146 * Invoking guix publish:: Sharing substitutes.
147 * Invoking guix challenge:: Challenging substitute servers.
148 * Invoking guix copy:: Copying to and from a remote store.
149 * Invoking guix container:: Process isolation.
150
151 Invoking @command{guix build}
152
153 * Common Build Options:: Build options for most commands.
154 * Package Transformation Options:: Creating variants of packages.
155 * Additional Build Options:: Options specific to 'guix build'.
156
157 GNU Distribution
158
159 * System Installation:: Installing the whole operating system.
160 * System Configuration:: Configuring the operating system.
161 * Installing Debugging Files:: Feeding the debugger.
162 * Security Updates:: Deploying security fixes quickly.
163 * Package Modules:: Packages from the programmer's viewpoint.
164 * Packaging Guidelines:: Growing the distribution.
165 * Bootstrapping:: GNU/Linux built from scratch.
166 * Porting:: Targeting another platform or kernel.
167
168 System Installation
169
170 * Limitations:: What you can expect.
171 * Hardware Considerations:: Supported hardware.
172 * USB Stick Installation:: Preparing the installation medium.
173 * Preparing for Installation:: Networking, partitioning, etc.
174 * Proceeding with the Installation:: The real thing.
175 * Installing GuixSD in a VM:: GuixSD playground.
176 * Building the Installation Image:: How this comes to be.
177
178 System Configuration
179
180 * Using the Configuration System:: Customizing your GNU system.
181 * operating-system Reference:: Detail of operating-system declarations.
182 * File Systems:: Configuring file system mounts.
183 * Mapped Devices:: Block device extra processing.
184 * User Accounts:: Specifying user accounts.
185 * Locales:: Language and cultural convention settings.
186 * Services:: Specifying system services.
187 * Setuid Programs:: Programs running with root privileges.
188 * X.509 Certificates:: Authenticating HTTPS servers.
189 * Name Service Switch:: Configuring libc's name service switch.
190 * Initial RAM Disk:: Linux-Libre bootstrapping.
191 * GRUB Configuration:: Configuring the boot loader.
192 * Invoking guix system:: Instantiating a system configuration.
193 * Running GuixSD in a VM:: How to run GuixSD in a virtual machine.
194 * Defining Services:: Adding new service definitions.
195
196 Services
197
198 * Base Services:: Essential system services.
199 * Scheduled Job Execution:: The mcron service.
200 * Log Rotation:: The rottlog service.
201 * Networking Services:: Network setup, SSH daemon, etc.
202 * X Window:: Graphical display.
203 * Printing Services:: Local and remote printer support.
204 * Desktop Services:: D-Bus and desktop services.
205 * Database Services:: SQL databases.
206 * Mail Services:: IMAP, POP3, SMTP, and all that.
207 * Kerberos Services:: Kerberos services.
208 * Web Services:: Web servers.
209 * Network File System:: NFS related services.
210 * Continuous Integration:: The Cuirass service.
211 * Miscellaneous Services:: Other services.
212
213 Defining Services
214
215 * Service Composition:: The model for composing services.
216 * Service Types and Services:: Types and services.
217 * Service Reference:: API reference.
218 * Shepherd Services:: A particular type of service.
219
220 Packaging Guidelines
221
222 * Software Freedom:: What may go into the distribution.
223 * Package Naming:: What's in a name?
224 * Version Numbers:: When the name is not enough.
225 * Synopses and Descriptions:: Helping users find the right package.
226 * Python Modules:: Taming the snake.
227 * Perl Modules:: Little pearls.
228 * Java Packages:: Coffee break.
229 * Fonts:: Fond of fonts.
230
231 Contributing
232
233 * Building from Git:: The latest and greatest.
234 * Running Guix Before It Is Installed:: Hacker tricks.
235 * The Perfect Setup:: The right tools.
236 * Coding Style:: Hygiene of the contributor.
237 * Submitting Patches:: Share your work.
238
239 Coding Style
240
241 * Programming Paradigm:: How to compose your elements.
242 * Modules:: Where to store your code?
243 * Data Types and Pattern Matching:: Implementing data structures.
244 * Formatting Code:: Writing conventions.
245
246 @end detailmenu
247 @end menu
248
249 @c *********************************************************************
250 @node Introduction
251 @chapter Introduction
252
253 @cindex purpose
254 GNU Guix@footnote{``Guix'' is pronounced like ``geeks'', or ``ɡiːks''
255 using the international phonetic alphabet (IPA).} is a package
256 management tool for the GNU system. Guix makes it easy for unprivileged
257 users to install, upgrade, or remove packages, to roll back to a
258 previous package set, to build packages from source, and generally
259 assists with the creation and maintenance of software environments.
260
261 @cindex user interfaces
262 Guix provides a command-line package management interface
263 (@pxref{Invoking guix package}), a set of command-line utilities
264 (@pxref{Utilities}), as well as Scheme programming interfaces
265 (@pxref{Programming Interface}).
266 @cindex build daemon
267 Its @dfn{build daemon} is responsible for building packages on behalf of
268 users (@pxref{Setting Up the Daemon}) and for downloading pre-built
269 binaries from authorized sources (@pxref{Substitutes}).
270
271 @cindex extensibility of the distribution
272 @cindex customization, of packages
273 Guix includes package definitions for many GNU and non-GNU packages, all
274 of which @uref{https://www.gnu.org/philosophy/free-sw.html, respect the
275 user's computing freedom}. It is @emph{extensible}: users can write
276 their own package definitions (@pxref{Defining Packages}) and make them
277 available as independent package modules (@pxref{Package Modules}). It
278 is also @emph{customizable}: users can @emph{derive} specialized package
279 definitions from existing ones, including from the command line
280 (@pxref{Package Transformation Options}).
281
282 @cindex Guix System Distribution
283 @cindex GuixSD
284 You can install GNU@tie{}Guix on top of an existing GNU/Linux system
285 where it complements the available tools without interference
286 (@pxref{Installation}), or you can use it as part of the standalone
287 @dfn{Guix System Distribution} or GuixSD (@pxref{GNU Distribution}).
288 With GNU@tie{}GuixSD, you @emph{declare} all aspects of the operating
289 system configuration and Guix takes care of instantiating the
290 configuration in a transactional, reproducible, and stateless fashion
291 (@pxref{System Configuration}).
292
293 @cindex functional package management
294 Under the hood, Guix implements the @dfn{functional package management}
295 discipline pioneered by Nix (@pxref{Acknowledgments}).
296 In Guix, the package build and installation process is seen
297 as a @emph{function}, in the mathematical sense. That function takes inputs,
298 such as build scripts, a compiler, and libraries, and
299 returns an installed package. As a pure function, its result depends
300 solely on its inputs---for instance, it cannot refer to software or
301 scripts that were not explicitly passed as inputs. A build function
302 always produces the same result when passed a given set of inputs. It
303 cannot alter the environment of the running system in
304 any way; for instance, it cannot create, modify, or delete files outside
305 of its build and installation directories. This is achieved by running
306 build processes in isolated environments (or @dfn{containers}), where only their
307 explicit inputs are visible.
308
309 @cindex store
310 The result of package build functions is @dfn{cached} in the file
311 system, in a special directory called @dfn{the store} (@pxref{The
312 Store}). Each package is installed in a directory of its own in the
313 store---by default under @file{/gnu/store}. The directory name contains
314 a hash of all the inputs used to build that package; thus, changing an
315 input yields a different directory name.
316
317 This approach is the foundation for the salient features of Guix: support
318 for transactional package upgrade and rollback, per-user installation, and
319 garbage collection of packages (@pxref{Features}).
320
321
322 @c *********************************************************************
323 @node Installation
324 @chapter Installation
325
326 @cindex installing Guix
327 GNU Guix is available for download from its website at
328 @url{http://www.gnu.org/software/guix/}. This section describes the
329 software requirements of Guix, as well as how to install it and get
330 ready to use it.
331
332 Note that this section is concerned with the installation of the package
333 manager, which can be done on top of a running GNU/Linux system. If,
334 instead, you want to install the complete GNU operating system,
335 @pxref{System Installation}.
336
337 @cindex foreign distro
338 When installed on a running GNU/Linux system---thereafter called a
339 @dfn{foreign distro}---GNU@tie{}Guix complements the available tools
340 without interference. Its data lives exclusively in two directories,
341 usually @file{/gnu/store} and @file{/var/guix}; other files on your
342 system, such as @file{/etc}, are left untouched.
343
344 Once installed, Guix can be updated by running @command{guix pull}
345 (@pxref{Invoking guix pull}).
346
347 @menu
348 * Binary Installation:: Getting Guix running in no time!
349 * Requirements:: Software needed to build and run Guix.
350 * Running the Test Suite:: Testing Guix.
351 * Setting Up the Daemon:: Preparing the build daemon's environment.
352 * Invoking guix-daemon:: Running the build daemon.
353 * Application Setup:: Application-specific setup.
354 @end menu
355
356 @node Binary Installation
357 @section Binary Installation
358
359 @cindex installing Guix from binaries
360 This section describes how to install Guix on an arbitrary system from a
361 self-contained tarball providing binaries for Guix and for all its
362 dependencies. This is often quicker than installing from source, which
363 is described in the next sections. The only requirement is to have
364 GNU@tie{}tar and Xz.
365
366 Installing goes along these lines:
367
368 @enumerate
369 @item
370 @cindex downloading Guix binary
371 Download the binary tarball from
372 @indicateurl{ftp://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz},
373 where @var{system} is @code{x86_64-linux} for an @code{x86_64} machine
374 already running the kernel Linux, and so on.
375
376 @c The following is somewhat duplicated in ``System Installation''.
377 Make sure to download the associated @file{.sig} file and to verify the
378 authenticity of the tarball against it, along these lines:
379
380 @example
381 $ wget ftp://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
382 $ gpg --verify guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
383 @end example
384
385 If that command fails because you do not have the required public key,
386 then run this command to import it:
387
388 @example
389 $ gpg --keyserver pgp.mit.edu --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
390 @end example
391
392 @noindent
393 and rerun the @code{gpg --verify} command.
394 @c end authentication part
395
396 @item
397 As @code{root}, run:
398
399 @example
400 # cd /tmp
401 # tar --warning=no-timestamp -xf \
402 guix-binary-@value{VERSION}.@var{system}.tar.xz
403 # mv var/guix /var/ && mv gnu /
404 @end example
405
406 This creates @file{/gnu/store} (@pxref{The Store}) and @file{/var/guix}.
407 The latter contains a ready-to-use profile for @code{root} (see next
408 step.)
409
410 Do @emph{not} unpack the tarball on a working Guix system since that
411 would overwrite its own essential files.
412
413 The @code{--warning=no-timestamp} option makes sure GNU@tie{}tar does
414 not emit warnings about ``implausibly old time stamps'' (such
415 warnings were triggered by GNU@tie{}tar 1.26 and older; recent
416 versions are fine.)
417 They stem from the fact that all the
418 files in the archive have their modification time set to zero (which
419 means January 1st, 1970.) This is done on purpose to make sure the
420 archive content is independent of its creation time, thus making it
421 reproducible.
422
423 @item
424 Make @code{root}'s profile available under @file{~/.guix-profile}:
425
426 @example
427 # ln -sf /var/guix/profiles/per-user/root/guix-profile \
428 ~root/.guix-profile
429 @end example
430
431 @item
432 Create the group and user accounts for build users as explained below
433 (@pxref{Build Environment Setup}).
434
435 @item
436 Run the daemon, and set it to automatically start on boot.
437
438 If your host distro uses the systemd init system, this can be achieved
439 with these commands:
440
441 @example
442 # ln -s ~root/.guix-profile/lib/systemd/system/guix-daemon.service \
443 /etc/systemd/system/
444 # systemctl start guix-daemon && systemctl enable guix-daemon
445 @end example
446
447 If your host distro uses the Upstart init system:
448
449 @example
450 # ln -s ~root/.guix-profile/lib/upstart/system/guix-daemon.conf /etc/init/
451 # start guix-daemon
452 @end example
453
454 Otherwise, you can still start the daemon manually with:
455
456 @example
457 # ~root/.guix-profile/bin/guix-daemon --build-users-group=guixbuild
458 @end example
459
460 @item
461 Make the @command{guix} command available to other users on the machine,
462 for instance with:
463
464 @example
465 # mkdir -p /usr/local/bin
466 # cd /usr/local/bin
467 # ln -s /var/guix/profiles/per-user/root/guix-profile/bin/guix
468 @end example
469
470 It is also a good idea to make the Info version of this manual available
471 there:
472
473 @example
474 # mkdir -p /usr/local/share/info
475 # cd /usr/local/share/info
476 # for i in /var/guix/profiles/per-user/root/guix-profile/share/info/* ;
477 do ln -s $i ; done
478 @end example
479
480 That way, assuming @file{/usr/local/share/info} is in the search path,
481 running @command{info guix} will open this manual (@pxref{Other Info
482 Directories,,, texinfo, GNU Texinfo}, for more details on changing the
483 Info search path.)
484
485 @item
486 @cindex substitutes, authorization thereof
487 To use substitutes from @code{hydra.gnu.org} or one of its mirrors
488 (@pxref{Substitutes}), authorize them:
489
490 @example
491 # guix archive --authorize < ~root/.guix-profile/share/guix/hydra.gnu.org.pub
492 @end example
493 @end enumerate
494
495 This completes root-level install of Guix. Each user will need to
496 perform additional steps to make their Guix environment ready for use,
497 @pxref{Application Setup}.
498
499 You can confirm that Guix is working by installing a sample package into
500 the root profile:
501
502 @example
503 # guix package -i hello
504 @end example
505
506 The @code{guix} package must remain available in @code{root}'s profile,
507 or it would become subject to garbage collection---in which case you
508 would find yourself badly handicapped by the lack of the @command{guix}
509 command. In other words, do not remove @code{guix} by running
510 @code{guix package -r guix}.
511
512 The binary installation tarball can be (re)produced and verified simply
513 by running the following command in the Guix source tree:
514
515 @example
516 make guix-binary.@var{system}.tar.xz
517 @end example
518
519
520 @node Requirements
521 @section Requirements
522
523 This section lists requirements when building Guix from source. The
524 build procedure for Guix is the same as for other GNU software, and is
525 not covered here. Please see the files @file{README} and @file{INSTALL}
526 in the Guix source tree for additional details.
527
528 GNU Guix depends on the following packages:
529
530 @itemize
531 @item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.7 or later;
532 @item @url{http://gnupg.org/, GNU libgcrypt};
533 @item @url{http://www.gnu.org/software/make/, GNU Make}.
534 @end itemize
535
536 The following dependencies are optional:
537
538 @itemize
539 @item
540 Installing @uref{http://gnutls.org/, GnuTLS-Guile} will allow you to
541 access @code{https} URLs for substitutes, which is highly recommended
542 (@pxref{Substitutes}). It also allows you to access HTTPS URLs with the
543 @command{guix download} command (@pxref{Invoking guix download}), the
544 @command{guix import pypi} command, and the @command{guix import cpan}
545 command. @xref{Guile Preparations, how to install the GnuTLS bindings
546 for Guile,, gnutls-guile, GnuTLS-Guile}.
547
548 @item
549 Installing
550 @url{http://savannah.nongnu.org/projects/guile-json/, Guile-JSON} will
551 allow you to use the @command{guix import pypi} command (@pxref{Invoking
552 guix import}). It is of
553 interest primarily for developers and not for casual users.
554
555 @item
556 @c Note: We need at least 0.10.2 for 'channel-send-eof'.
557 Support for build offloading (@pxref{Daemon Offload Setup}) and
558 @command{guix copy} (@pxref{Invoking guix copy}) depends on
559 @uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH},
560 version 0.10.2 or later.
561
562 @item
563 When @url{http://zlib.net, zlib} is available, @command{guix publish}
564 can compress build byproducts (@pxref{Invoking guix publish}).
565 @end itemize
566
567 Unless @code{--disable-daemon} was passed to @command{configure}, the
568 following packages are also needed:
569
570 @itemize
571 @item @url{http://sqlite.org, SQLite 3};
572 @item @url{http://www.bzip.org, libbz2};
573 @item @url{http://gcc.gnu.org, GCC's g++}, with support for the
574 C++11 standard.
575 @end itemize
576
577 @cindex state directory
578 When configuring Guix on a system that already has a Guix installation,
579 be sure to specify the same state directory as the existing installation
580 using the @code{--localstatedir} option of the @command{configure}
581 script (@pxref{Directory Variables, @code{localstatedir},, standards,
582 GNU Coding Standards}). The @command{configure} script protects against
583 unintended misconfiguration of @var{localstatedir} so you do not
584 inadvertently corrupt your store (@pxref{The Store}).
585
586 @cindex Nix, compatibility
587 When a working installation of @url{http://nixos.org/nix/, the Nix package
588 manager} is available, you
589 can instead configure Guix with @code{--disable-daemon}. In that case,
590 Nix replaces the three dependencies above.
591
592 Guix is compatible with Nix, so it is possible to share the same store
593 between both. To do so, you must pass @command{configure} not only the
594 same @code{--with-store-dir} value, but also the same
595 @code{--localstatedir} value. The latter is essential because it
596 specifies where the database that stores metadata about the store is
597 located, among other things. The default values for Nix are
598 @code{--with-store-dir=/nix/store} and @code{--localstatedir=/nix/var}.
599 Note that @code{--disable-daemon} is not required if
600 your goal is to share the store with Nix.
601
602 @node Running the Test Suite
603 @section Running the Test Suite
604
605 @cindex test suite
606 After a successful @command{configure} and @code{make} run, it is a good
607 idea to run the test suite. It can help catch issues with the setup or
608 environment, or bugs in Guix itself---and really, reporting test
609 failures is a good way to help improve the software. To run the test
610 suite, type:
611
612 @example
613 make check
614 @end example
615
616 Test cases can run in parallel: you can use the @code{-j} option of
617 GNU@tie{}make to speed things up. The first run may take a few minutes
618 on a recent machine; subsequent runs will be faster because the store
619 that is created for test purposes will already have various things in
620 cache.
621
622 It is also possible to run a subset of the tests by defining the
623 @code{TESTS} makefile variable as in this example:
624
625 @example
626 make check TESTS="tests/store.scm tests/cpio.scm"
627 @end example
628
629 By default, tests results are displayed at a file level. In order to
630 see the details of every individual test cases, it is possible to define
631 the @code{SCM_LOG_DRIVER_FLAGS} makefile variable as in this example:
632
633 @example
634 make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no"
635 @end example
636
637 Upon failure, please email @email{bug-guix@@gnu.org} and attach the
638 @file{test-suite.log} file. Please specify the Guix version being used
639 as well as version numbers of the dependencies (@pxref{Requirements}) in
640 your message.
641
642 Guix also comes with a whole-system test suite that tests complete
643 GuixSD operating system instances. It can only run on systems where
644 Guix is already installed, using:
645
646 @example
647 make check-system
648 @end example
649
650 @noindent
651 or, again, by defining @code{TESTS} to select a subset of tests to run:
652
653 @example
654 make check-system TESTS="basic mcron"
655 @end example
656
657 These system tests are defined in the @code{(gnu tests @dots{})}
658 modules. They work by running the operating systems under test with
659 lightweight instrumentation in a virtual machine (VM). They can be
660 computationally intensive or rather cheap, depending on whether
661 substitutes are available for their dependencies (@pxref{Substitutes}).
662 Some of them require a lot of storage space to hold VM images.
663
664 Again in case of test failures, please send @email{bug-guix@@gnu.org}
665 all the details.
666
667 @node Setting Up the Daemon
668 @section Setting Up the Daemon
669
670 @cindex daemon
671 Operations such as building a package or running the garbage collector
672 are all performed by a specialized process, the @dfn{build daemon}, on
673 behalf of clients. Only the daemon may access the store and its
674 associated database. Thus, any operation that manipulates the store
675 goes through the daemon. For instance, command-line tools such as
676 @command{guix package} and @command{guix build} communicate with the
677 daemon (@i{via} remote procedure calls) to instruct it what to do.
678
679 The following sections explain how to prepare the build daemon's
680 environment. See also @ref{Substitutes}, for information on how to allow
681 the daemon to download pre-built binaries.
682
683 @menu
684 * Build Environment Setup:: Preparing the isolated build environment.
685 * Daemon Offload Setup:: Offloading builds to remote machines.
686 @end menu
687
688 @node Build Environment Setup
689 @subsection Build Environment Setup
690
691 @cindex build environment
692 In a standard multi-user setup, Guix and its daemon---the
693 @command{guix-daemon} program---are installed by the system
694 administrator; @file{/gnu/store} is owned by @code{root} and
695 @command{guix-daemon} runs as @code{root}. Unprivileged users may use
696 Guix tools to build packages or otherwise access the store, and the
697 daemon will do it on their behalf, ensuring that the store is kept in a
698 consistent state, and allowing built packages to be shared among users.
699
700 @cindex build users
701 When @command{guix-daemon} runs as @code{root}, you may not want package
702 build processes themselves to run as @code{root} too, for obvious
703 security reasons. To avoid that, a special pool of @dfn{build users}
704 should be created for use by build processes started by the daemon.
705 These build users need not have a shell and a home directory: they will
706 just be used when the daemon drops @code{root} privileges in build
707 processes. Having several such users allows the daemon to launch
708 distinct build processes under separate UIDs, which guarantees that they
709 do not interfere with each other---an essential feature since builds are
710 regarded as pure functions (@pxref{Introduction}).
711
712 On a GNU/Linux system, a build user pool may be created like this (using
713 Bash syntax and the @code{shadow} commands):
714
715 @c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
716 @c for why `-G' is needed.
717 @example
718 # groupadd --system guixbuild
719 # for i in `seq -w 1 10`;
720 do
721 useradd -g guixbuild -G guixbuild \
722 -d /var/empty -s `which nologin` \
723 -c "Guix build user $i" --system \
724 guixbuilder$i;
725 done
726 @end example
727
728 @noindent
729 The number of build users determines how many build jobs may run in
730 parallel, as specified by the @option{--max-jobs} option
731 (@pxref{Invoking guix-daemon, @option{--max-jobs}}). To use
732 @command{guix system vm} and related commands, you may need to add the
733 build users to the @code{kvm} group so they can access @file{/dev/kvm},
734 using @code{-G guixbuild,kvm} instead of @code{-G guixbuild}
735 (@pxref{Invoking guix system}).
736
737 The @code{guix-daemon} program may then be run as @code{root} with the
738 following command@footnote{If your machine uses the systemd init system,
739 dropping the @file{@var{prefix}/lib/systemd/system/guix-daemon.service}
740 file in @file{/etc/systemd/system} will ensure that
741 @command{guix-daemon} is automatically started. Similarly, if your
742 machine uses the Upstart init system, drop the
743 @file{@var{prefix}/lib/upstart/system/guix-daemon.conf}
744 file in @file{/etc/init}.}:
745
746 @example
747 # guix-daemon --build-users-group=guixbuild
748 @end example
749
750 @cindex chroot
751 @noindent
752 This way, the daemon starts build processes in a chroot, under one of
753 the @code{guixbuilder} users. On GNU/Linux, by default, the chroot
754 environment contains nothing but:
755
756 @c Keep this list in sync with libstore/build.cc! -----------------------
757 @itemize
758 @item
759 a minimal @code{/dev} directory, created mostly independently from the
760 host @code{/dev}@footnote{``Mostly'', because while the set of files
761 that appear in the chroot's @code{/dev} is fixed, most of these files
762 can only be created if the host has them.};
763
764 @item
765 the @code{/proc} directory; it only shows the processes of the container
766 since a separate PID name space is used;
767
768 @item
769 @file{/etc/passwd} with an entry for the current user and an entry for
770 user @file{nobody};
771
772 @item
773 @file{/etc/group} with an entry for the user's group;
774
775 @item
776 @file{/etc/hosts} with an entry that maps @code{localhost} to
777 @code{127.0.0.1};
778
779 @item
780 a writable @file{/tmp} directory.
781 @end itemize
782
783 You can influence the directory where the daemon stores build trees
784 @i{via} the @code{TMPDIR} environment variable. However, the build tree
785 within the chroot is always called @file{/tmp/guix-build-@var{name}.drv-0},
786 where @var{name} is the derivation name---e.g., @code{coreutils-8.24}.
787 This way, the value of @code{TMPDIR} does not leak inside build
788 environments, which avoids discrepancies in cases where build processes
789 capture the name of their build tree.
790
791 @vindex http_proxy
792 The daemon also honors the @code{http_proxy} environment variable for
793 HTTP downloads it performs, be it for fixed-output derivations
794 (@pxref{Derivations}) or for substitutes (@pxref{Substitutes}).
795
796 If you are installing Guix as an unprivileged user, it is still possible
797 to run @command{guix-daemon} provided you pass @code{--disable-chroot}.
798 However, build processes will not be isolated from one another, and not
799 from the rest of the system. Thus, build processes may interfere with
800 each other, and may access programs, libraries, and other files
801 available on the system---making it much harder to view them as
802 @emph{pure} functions.
803
804
805 @node Daemon Offload Setup
806 @subsection Using the Offload Facility
807
808 @cindex offloading
809 @cindex build hook
810 When desired, the build daemon can @dfn{offload} derivation builds to
811 other machines running Guix, using the @code{offload} @dfn{build
812 hook}@footnote{This feature is available only when
813 @uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH} is
814 present.}. When that
815 feature is enabled, a list of user-specified build machines is read from
816 @file{/etc/guix/machines.scm}; every time a build is requested, for
817 instance via @code{guix build}, the daemon attempts to offload it to one
818 of the machines that satisfy the constraints of the derivation, in
819 particular its system type---e.g., @file{x86_64-linux}. Missing
820 prerequisites for the build are copied over SSH to the target machine,
821 which then proceeds with the build; upon success the output(s) of the
822 build are copied back to the initial machine.
823
824 The @file{/etc/guix/machines.scm} file typically looks like this:
825
826 @example
827 (list (build-machine
828 (name "eightysix.example.org")
829 (system "x86_64-linux")
830 (host-key "ssh-ed25519 AAAAC3Nza@dots{}")
831 (user "bob")
832 (speed 2.)) ;incredibly fast!
833
834 (build-machine
835 (name "meeps.example.org")
836 (system "mips64el-linux")
837 (host-key "ssh-rsa AAAAB3Nza@dots{}")
838 (user "alice")
839 (private-key
840 (string-append (getenv "HOME")
841 "/.ssh/identity-for-guix"))))
842 @end example
843
844 @noindent
845 In the example above we specify a list of two build machines, one for
846 the @code{x86_64} architecture and one for the @code{mips64el}
847 architecture.
848
849 In fact, this file is---not surprisingly!---a Scheme file that is
850 evaluated when the @code{offload} hook is started. Its return value
851 must be a list of @code{build-machine} objects. While this example
852 shows a fixed list of build machines, one could imagine, say, using
853 DNS-SD to return a list of potential build machines discovered in the
854 local network (@pxref{Introduction, Guile-Avahi,, guile-avahi, Using
855 Avahi in Guile Scheme Programs}). The @code{build-machine} data type is
856 detailed below.
857
858 @deftp {Data Type} build-machine
859 This data type represents build machines to which the daemon may offload
860 builds. The important fields are:
861
862 @table @code
863
864 @item name
865 The host name of the remote machine.
866
867 @item system
868 The system type of the remote machine---e.g., @code{"x86_64-linux"}.
869
870 @item user
871 The user account to use when connecting to the remote machine over SSH.
872 Note that the SSH key pair must @emph{not} be passphrase-protected, to
873 allow non-interactive logins.
874
875 @item host-key
876 This must be the machine's SSH @dfn{public host key} in OpenSSH format.
877 This is used to authenticate the machine when we connect to it. It is a
878 long string that looks like this:
879
880 @example
881 ssh-ed25519 AAAAC3NzaC@dots{}mde+UhL hint@@example.org
882 @end example
883
884 If the machine is running the OpenSSH daemon, @command{sshd}, the host
885 key can be found in a file such as
886 @file{/etc/ssh/ssh_host_ed25519_key.pub}.
887
888 If the machine is running the SSH daemon of GNU@tie{}lsh,
889 @command{lshd}, the host key is in @file{/etc/lsh/host-key.pub} or a
890 similar file. It can be converted to the OpenSSH format using
891 @command{lsh-export-key} (@pxref{Converting keys,,, lsh, LSH Manual}):
892
893 @example
894 $ lsh-export-key --openssh < /etc/lsh/host-key.pub
895 ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV@dots{}
896 @end example
897
898 @end table
899
900 A number of optional fields may be specified:
901
902 @table @asis
903
904 @item @code{port} (default: @code{22})
905 Port number of SSH server on the machine.
906
907 @item @code{private-key} (default: @file{~/.ssh/id_rsa})
908 The SSH private key file to use when connecting to the machine, in
909 OpenSSH format.
910
911 @item @code{compression} (default: @code{"zlib@@openssh.com,zlib"})
912 @itemx @code{compression-level} (default: @code{3})
913 The SSH-level compression methods and compression level requested.
914
915 Note that offloading relies on SSH compression to reduce bandwidth usage
916 when transferring files to and from build machines.
917
918 @item @code{daemon-socket} (default: @code{"/var/guix/daemon-socket/socket"})
919 File name of the Unix-domain socket @command{guix-daemon} is listening
920 to on that machine.
921
922 @item @code{parallel-builds} (default: @code{1})
923 The number of builds that may run in parallel on the machine.
924
925 @item @code{speed} (default: @code{1.0})
926 A ``relative speed factor''. The offload scheduler will tend to prefer
927 machines with a higher speed factor.
928
929 @item @code{features} (default: @code{'()})
930 A list of strings denoting specific features supported by the machine.
931 An example is @code{"kvm"} for machines that have the KVM Linux modules
932 and corresponding hardware support. Derivations can request features by
933 name, and they will be scheduled on matching build machines.
934
935 @end table
936 @end deftp
937
938 The @code{guile} command must be in the search path on the build
939 machines. In addition, the Guix modules must be in
940 @code{$GUILE_LOAD_PATH} on the build machine---you can check whether
941 this is the case by running:
942
943 @example
944 ssh build-machine guile -c "'(use-modules (guix config))'"
945 @end example
946
947 There is one last thing to do once @file{machines.scm} is in place. As
948 explained above, when offloading, files are transferred back and forth
949 between the machine stores. For this to work, you first need to
950 generate a key pair on each machine to allow the daemon to export signed
951 archives of files from the store (@pxref{Invoking guix archive}):
952
953 @example
954 # guix archive --generate-key
955 @end example
956
957 @noindent
958 Each build machine must authorize the key of the master machine so that
959 it accepts store items it receives from the master:
960
961 @example
962 # guix archive --authorize < master-public-key.txt
963 @end example
964
965 @noindent
966 Likewise, the master machine must authorize the key of each build machine.
967
968 All the fuss with keys is here to express pairwise mutual trust
969 relations between the master and the build machines. Concretely, when
970 the master receives files from a build machine (and @i{vice versa}), its
971 build daemon can make sure they are genuine, have not been tampered
972 with, and that they are signed by an authorized key.
973
974 @cindex offload test
975 To test whether your setup is operational, run this command on the
976 master node:
977
978 @example
979 # guix offload test
980 @end example
981
982 This will attempt to connect to each of the build machines specified in
983 @file{/etc/guix/machines.scm}, make sure Guile and the Guix modules are
984 available on each machine, attempt to export to the machine and import
985 from it, and report any error in the process.
986
987 If you want to test a different machine file, just specify it on the
988 command line:
989
990 @example
991 # guix offload test machines-qualif.scm
992 @end example
993
994 Last, you can test the subset of the machines whose name matches a
995 regular expression like this:
996
997 @example
998 # guix offload test machines.scm '\.gnu\.org$'
999 @end example
1000
1001 @node Invoking guix-daemon
1002 @section Invoking @command{guix-daemon}
1003
1004 The @command{guix-daemon} program implements all the functionality to
1005 access the store. This includes launching build processes, running the
1006 garbage collector, querying the availability of a build result, etc. It
1007 is normally run as @code{root} like this:
1008
1009 @example
1010 # guix-daemon --build-users-group=guixbuild
1011 @end example
1012
1013 @noindent
1014 For details on how to set it up, @pxref{Setting Up the Daemon}.
1015
1016 @cindex chroot
1017 @cindex container, build environment
1018 @cindex build environment
1019 @cindex reproducible builds
1020 By default, @command{guix-daemon} launches build processes under
1021 different UIDs, taken from the build group specified with
1022 @code{--build-users-group}. In addition, each build process is run in a
1023 chroot environment that only contains the subset of the store that the
1024 build process depends on, as specified by its derivation
1025 (@pxref{Programming Interface, derivation}), plus a set of specific
1026 system directories. By default, the latter contains @file{/dev} and
1027 @file{/dev/pts}. Furthermore, on GNU/Linux, the build environment is a
1028 @dfn{container}: in addition to having its own file system tree, it has
1029 a separate mount name space, its own PID name space, network name space,
1030 etc. This helps achieve reproducible builds (@pxref{Features}).
1031
1032 When the daemon performs a build on behalf of the user, it creates a
1033 build directory under @file{/tmp} or under the directory specified by
1034 its @code{TMPDIR} environment variable; this directory is shared with
1035 the container for the duration of the build. Be aware that using a
1036 directory other than @file{/tmp} can affect build results---for example,
1037 with a longer directory name, a build process that uses Unix-domain
1038 sockets might hit the name length limitation for @code{sun_path}, which
1039 it would otherwise not hit.
1040
1041 The build directory is automatically deleted upon completion, unless the
1042 build failed and the client specified @option{--keep-failed}
1043 (@pxref{Invoking guix build, @option{--keep-failed}}).
1044
1045 The following command-line options are supported:
1046
1047 @table @code
1048 @item --build-users-group=@var{group}
1049 Take users from @var{group} to run build processes (@pxref{Setting Up
1050 the Daemon, build users}).
1051
1052 @item --no-substitutes
1053 @cindex substitutes
1054 Do not use substitutes for build products. That is, always build things
1055 locally instead of allowing downloads of pre-built binaries
1056 (@pxref{Substitutes}).
1057
1058 By default substitutes are used, unless the client---such as the
1059 @command{guix package} command---is explicitly invoked with
1060 @code{--no-substitutes}.
1061
1062 When the daemon runs with @code{--no-substitutes}, clients can still
1063 explicitly enable substitution @i{via} the @code{set-build-options}
1064 remote procedure call (@pxref{The Store}).
1065
1066 @item --substitute-urls=@var{urls}
1067 @anchor{daemon-substitute-urls}
1068 Consider @var{urls} the default whitespace-separated list of substitute
1069 source URLs. When this option is omitted,
1070 @indicateurl{https://mirror.hydra.gnu.org https://hydra.gnu.org} is used
1071 (@code{mirror.hydra.gnu.org} is a mirror of @code{hydra.gnu.org}).
1072
1073 This means that substitutes may be downloaded from @var{urls}, as long
1074 as they are signed by a trusted signature (@pxref{Substitutes}).
1075
1076 @cindex build hook
1077 @item --no-build-hook
1078 Do not use the @dfn{build hook}.
1079
1080 The build hook is a helper program that the daemon can start and to
1081 which it submits build requests. This mechanism is used to offload
1082 builds to other machines (@pxref{Daemon Offload Setup}).
1083
1084 @item --cache-failures
1085 Cache build failures. By default, only successful builds are cached.
1086
1087 When this option is used, @command{guix gc --list-failures} can be used
1088 to query the set of store items marked as failed; @command{guix gc
1089 --clear-failures} removes store items from the set of cached failures.
1090 @xref{Invoking guix gc}.
1091
1092 @item --cores=@var{n}
1093 @itemx -c @var{n}
1094 Use @var{n} CPU cores to build each derivation; @code{0} means as many
1095 as available.
1096
1097 The default value is @code{0}, but it may be overridden by clients, such
1098 as the @code{--cores} option of @command{guix build} (@pxref{Invoking
1099 guix build}).
1100
1101 The effect is to define the @code{NIX_BUILD_CORES} environment variable
1102 in the build process, which can then use it to exploit internal
1103 parallelism---for instance, by running @code{make -j$NIX_BUILD_CORES}.
1104
1105 @item --max-jobs=@var{n}
1106 @itemx -M @var{n}
1107 Allow at most @var{n} build jobs in parallel. The default value is
1108 @code{1}. Setting it to @code{0} means that no builds will be performed
1109 locally; instead, the daemon will offload builds (@pxref{Daemon Offload
1110 Setup}), or simply fail.
1111
1112 @item --rounds=@var{N}
1113 Build each derivation @var{n} times in a row, and raise an error if
1114 consecutive build results are not bit-for-bit identical. Note that this
1115 setting can be overridden by clients such as @command{guix build}
1116 (@pxref{Invoking guix build}).
1117
1118 When used in conjunction with @option{--keep-failed}, the differing
1119 output is kept in the store, under @file{/gnu/store/@dots{}-check}.
1120 This makes it easy to look for differences between the two results.
1121
1122 @item --debug
1123 Produce debugging output.
1124
1125 This is useful to debug daemon start-up issues, but then it may be
1126 overridden by clients, for example the @code{--verbosity} option of
1127 @command{guix build} (@pxref{Invoking guix build}).
1128
1129 @item --chroot-directory=@var{dir}
1130 Add @var{dir} to the build chroot.
1131
1132 Doing this may change the result of build processes---for instance if
1133 they use optional dependencies found in @var{dir} when it is available,
1134 and not otherwise. For that reason, it is not recommended to do so.
1135 Instead, make sure that each derivation declares all the inputs that it
1136 needs.
1137
1138 @item --disable-chroot
1139 Disable chroot builds.
1140
1141 Using this option is not recommended since, again, it would allow build
1142 processes to gain access to undeclared dependencies. It is necessary,
1143 though, when @command{guix-daemon} is running under an unprivileged user
1144 account.
1145
1146 @item --disable-log-compression
1147 Disable compression of the build logs.
1148
1149 Unless @code{--lose-logs} is used, all the build logs are kept in the
1150 @var{localstatedir}. To save space, the daemon automatically compresses
1151 them with bzip2 by default. This option disables that.
1152
1153 @item --disable-deduplication
1154 @cindex deduplication
1155 Disable automatic file ``deduplication'' in the store.
1156
1157 By default, files added to the store are automatically ``deduplicated'':
1158 if a newly added file is identical to another one found in the store,
1159 the daemon makes the new file a hard link to the other file. This can
1160 noticeably reduce disk usage, at the expense of slightly increased
1161 input/output load at the end of a build process. This option disables
1162 this optimization.
1163
1164 @item --gc-keep-outputs[=yes|no]
1165 Tell whether the garbage collector (GC) must keep outputs of live
1166 derivations.
1167
1168 When set to ``yes'', the GC will keep the outputs of any live derivation
1169 available in the store---the @code{.drv} files. The default is ``no'',
1170 meaning that derivation outputs are kept only if they are GC roots.
1171
1172 @item --gc-keep-derivations[=yes|no]
1173 Tell whether the garbage collector (GC) must keep derivations
1174 corresponding to live outputs.
1175
1176 When set to ``yes'', as is the case by default, the GC keeps
1177 derivations---i.e., @code{.drv} files---as long as at least one of their
1178 outputs is live. This allows users to keep track of the origins of
1179 items in their store. Setting it to ``no'' saves a bit of disk space.
1180
1181 Note that when both @code{--gc-keep-derivations} and
1182 @code{--gc-keep-outputs} are used, the effect is to keep all the build
1183 prerequisites (the sources, compiler, libraries, and other build-time
1184 tools) of live objects in the store, regardless of whether these
1185 prerequisites are live. This is convenient for developers since it
1186 saves rebuilds or downloads.
1187
1188 @item --impersonate-linux-2.6
1189 On Linux-based systems, impersonate Linux 2.6. This means that the
1190 kernel's @code{uname} system call will report 2.6 as the release number.
1191
1192 This might be helpful to build programs that (usually wrongfully) depend
1193 on the kernel version number.
1194
1195 @item --lose-logs
1196 Do not keep build logs. By default they are kept under
1197 @code{@var{localstatedir}/guix/log}.
1198
1199 @item --system=@var{system}
1200 Assume @var{system} as the current system type. By default it is the
1201 architecture/kernel pair found at configure time, such as
1202 @code{x86_64-linux}.
1203
1204 @item --listen=@var{socket}
1205 Listen for connections on @var{socket}, the file name of a Unix-domain
1206 socket. The default socket is
1207 @file{@var{localstatedir}/daemon-socket/socket}. This option is only
1208 useful in exceptional circumstances, such as if you need to run several
1209 daemons on the same machine.
1210 @end table
1211
1212
1213 @node Application Setup
1214 @section Application Setup
1215
1216 @cindex foreign distro
1217 When using Guix on top of GNU/Linux distribution other than GuixSD---a
1218 so-called @dfn{foreign distro}---a few additional steps are needed to
1219 get everything in place. Here are some of them.
1220
1221 @subsection Locales
1222
1223 @anchor{locales-and-locpath}
1224 @cindex locales, when not on GuixSD
1225 @vindex LOCPATH
1226 @vindex GUIX_LOCPATH
1227 Packages installed @i{via} Guix will not use the locale data of the
1228 host system. Instead, you must first install one of the locale packages
1229 available with Guix and then define the @code{GUIX_LOCPATH} environment
1230 variable:
1231
1232 @example
1233 $ guix package -i glibc-locales
1234 $ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
1235 @end example
1236
1237 Note that the @code{glibc-locales} package contains data for all the
1238 locales supported by the GNU@tie{}libc and weighs in at around
1239 110@tie{}MiB. Alternatively, the @code{glibc-utf8-locales} is smaller but
1240 limited to a few UTF-8 locales.
1241
1242 The @code{GUIX_LOCPATH} variable plays a role similar to @code{LOCPATH}
1243 (@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library Reference
1244 Manual}). There are two important differences though:
1245
1246 @enumerate
1247 @item
1248 @code{GUIX_LOCPATH} is honored only by the libc in Guix, and not by the libc
1249 provided by foreign distros. Thus, using @code{GUIX_LOCPATH} allows you
1250 to make sure the programs of the foreign distro will not end up loading
1251 incompatible locale data.
1252
1253 @item
1254 libc suffixes each entry of @code{GUIX_LOCPATH} with @code{/X.Y}, where
1255 @code{X.Y} is the libc version---e.g., @code{2.22}. This means that,
1256 should your Guix profile contain a mixture of programs linked against
1257 different libc version, each libc version will only try to load locale
1258 data in the right format.
1259 @end enumerate
1260
1261 This is important because the locale data format used by different libc
1262 versions may be incompatible.
1263
1264 @subsection Name Service Switch
1265
1266 @cindex name service switch, glibc
1267 @cindex NSS (name service switch), glibc
1268 @cindex nscd (name service caching daemon)
1269 @cindex name service caching daemon (nscd)
1270 When using Guix on a foreign distro, we @emph{strongly recommend} that
1271 the system run the GNU C library's @dfn{name service cache daemon},
1272 @command{nscd}, which should be listening on the
1273 @file{/var/run/nscd/socket} socket. Failing to do that, applications
1274 installed with Guix may fail to look up host names or user accounts, or
1275 may even crash. The next paragraphs explain why.
1276
1277 @cindex @file{nsswitch.conf}
1278 The GNU C library implements a @dfn{name service switch} (NSS), which is
1279 an extensible mechanism for ``name lookups'' in general: host name
1280 resolution, user accounts, and more (@pxref{Name Service Switch,,, libc,
1281 The GNU C Library Reference Manual}).
1282
1283 @cindex Network information service (NIS)
1284 @cindex NIS (Network information service)
1285 Being extensible, the NSS supports @dfn{plugins}, which provide new name
1286 lookup implementations: for example, the @code{nss-mdns} plugin allow
1287 resolution of @code{.local} host names, the @code{nis} plugin allows
1288 user account lookup using the Network information service (NIS), and so
1289 on. These extra ``lookup services'' are configured system-wide in
1290 @file{/etc/nsswitch.conf}, and all the programs running on the system
1291 honor those settings (@pxref{NSS Configuration File,,, libc, The GNU C
1292 Reference Manual}).
1293
1294 When they perform a name lookup---for instance by calling the
1295 @code{getaddrinfo} function in C---applications first try to connect to
1296 the nscd; on success, nscd performs name lookups on their behalf. If
1297 the nscd is not running, then they perform the name lookup by
1298 themselves, by loading the name lookup services into their own address
1299 space and running it. These name lookup services---the
1300 @file{libnss_*.so} files---are @code{dlopen}'d, but they may come from
1301 the host system's C library, rather than from the C library the
1302 application is linked against (the C library coming from Guix).
1303
1304 And this is where the problem is: if your application is linked against
1305 Guix's C library (say, glibc 2.24) and tries to load NSS plugins from
1306 another C library (say, @code{libnss_mdns.so} for glibc 2.22), it will
1307 likely crash or have its name lookups fail unexpectedly.
1308
1309 Running @command{nscd} on the system, among other advantages, eliminates
1310 this binary incompatibility problem because those @code{libnss_*.so}
1311 files are loaded in the @command{nscd} process, not in applications
1312 themselves.
1313
1314 @subsection X11 Fonts
1315
1316 @cindex fonts
1317 The majority of graphical applications use Fontconfig to locate and
1318 load fonts and perform X11-client-side rendering. The @code{fontconfig}
1319 package in Guix looks for fonts in @file{$HOME/.guix-profile}
1320 by default. Thus, to allow graphical applications installed with Guix
1321 to display fonts, you have to install fonts with Guix as well.
1322 Essential font packages include @code{gs-fonts}, @code{font-dejavu}, and
1323 @code{font-gnu-freefont-ttf}.
1324
1325 To display text written in Chinese languages, Japanese, or Korean in
1326 graphical applications, consider installing
1327 @code{font-adobe-source-han-sans} or @code{font-wqy-zenhei}. The former
1328 has multiple outputs, one per language family (@pxref{Packages with
1329 Multiple Outputs}). For instance, the following command installs fonts
1330 for Chinese languages:
1331
1332 @example
1333 guix package -i font-adobe-source-han-sans:cn
1334 @end example
1335
1336 @cindex @code{xterm}
1337 Older programs such as @command{xterm} do not use Fontconfig and instead
1338 rely on server-side font rendering. Such programs require to specify a
1339 full name of a font using XLFD (X Logical Font Description), like this:
1340
1341 @example
1342 -*-dejavu sans-medium-r-normal-*-*-100-*-*-*-*-*-1
1343 @end example
1344
1345 To be able to use such full names for the TrueType fonts installed in
1346 your Guix profile, you need to extend the font path of the X server:
1347
1348 @example
1349 xset +fp ~/.guix-profile/share/fonts/truetype
1350 @end example
1351
1352 @cindex @code{xlsfonts}
1353 After that, you can run @code{xlsfonts} (from @code{xlsfonts} package)
1354 to make sure your TrueType fonts are listed there.
1355
1356 @subsection X.509 Certificates
1357
1358 @cindex @code{nss-certs}
1359 The @code{nss-certs} package provides X.509 certificates, which allow
1360 programs to authenticate Web servers accessed over HTTPS.
1361
1362 When using Guix on a foreign distro, you can install this package and
1363 define the relevant environment variables so that packages know where to
1364 look for certificates. @xref{X.509 Certificates}, for detailed
1365 information.
1366
1367 @subsection Emacs Packages
1368
1369 @cindex @code{emacs}
1370 When you install Emacs packages with Guix, the elisp files may be placed
1371 either in @file{$HOME/.guix-profile/share/emacs/site-lisp/} or in
1372 sub-directories of
1373 @file{$HOME/.guix-profile/share/emacs/site-lisp/guix.d/}. The latter
1374 directory exists because potentially there may exist thousands of Emacs
1375 packages and storing all their files in a single directory may be not
1376 reliable (because of name conflicts). So we think using a separate
1377 directory for each package is a good idea. It is very similar to how
1378 the Emacs package system organizes the file structure (@pxref{Package
1379 Files,,, emacs, The GNU Emacs Manual}).
1380
1381 By default, Emacs (installed with Guix) ``knows'' where these packages
1382 are placed, so you do not need to perform any configuration. If, for
1383 some reason, you want to avoid auto-loading Emacs packages installed
1384 with Guix, you can do so by running Emacs with @code{--no-site-file}
1385 option (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
1386
1387 @c TODO What else?
1388
1389 @c *********************************************************************
1390 @node Package Management
1391 @chapter Package Management
1392
1393 @cindex packages
1394 The purpose of GNU Guix is to allow users to easily install, upgrade, and
1395 remove software packages, without having to know about their build
1396 procedures or dependencies. Guix also goes beyond this obvious set of
1397 features.
1398
1399 This chapter describes the main features of Guix, as well as the package
1400 management tools it provides. Along with the command-line interface
1401 described below (@pxref{Invoking guix package, @code{guix package}}),
1402 you may also use Emacs Interface, after installing @code{emacs-guix}
1403 package (run @kbd{M-x guix-help} command to start with it):
1404
1405 @example
1406 guix package -i emacs-guix
1407 @end example
1408
1409 @menu
1410 * Features:: How Guix will make your life brighter.
1411 * Invoking guix package:: Package installation, removal, etc.
1412 * Substitutes:: Downloading pre-built binaries.
1413 * Packages with Multiple Outputs:: Single source package, multiple outputs.
1414 * Invoking guix gc:: Running the garbage collector.
1415 * Invoking guix pull:: Fetching the latest Guix and distribution.
1416 * Invoking guix archive:: Exporting and importing store files.
1417 @end menu
1418
1419 @node Features
1420 @section Features
1421
1422 When using Guix, each package ends up in the @dfn{package store}, in its
1423 own directory---something that resembles
1424 @file{/gnu/store/xxx-package-1.2}, where @code{xxx} is a base32 string.
1425
1426 Instead of referring to these directories, users have their own
1427 @dfn{profile}, which points to the packages that they actually want to
1428 use. These profiles are stored within each user's home directory, at
1429 @code{$HOME/.guix-profile}.
1430
1431 For example, @code{alice} installs GCC 4.7.2. As a result,
1432 @file{/home/alice/.guix-profile/bin/gcc} points to
1433 @file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Now, on the same machine,
1434 @code{bob} had already installed GCC 4.8.0. The profile of @code{bob}
1435 simply continues to point to
1436 @file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc}---i.e., both versions of GCC
1437 coexist on the same system without any interference.
1438
1439 The @command{guix package} command is the central tool to manage
1440 packages (@pxref{Invoking guix package}). It operates on the per-user
1441 profiles, and can be used @emph{with normal user privileges}.
1442
1443 @cindex transactions
1444 The command provides the obvious install, remove, and upgrade
1445 operations. Each invocation is actually a @emph{transaction}: either
1446 the specified operation succeeds, or nothing happens. Thus, if the
1447 @command{guix package} process is terminated during the transaction,
1448 or if a power outage occurs during the transaction, then the user's
1449 profile remains in its previous state, and remains usable.
1450
1451 In addition, any package transaction may be @emph{rolled back}. So, if,
1452 for example, an upgrade installs a new version of a package that turns
1453 out to have a serious bug, users may roll back to the previous instance
1454 of their profile, which was known to work well. Similarly, the global
1455 system configuration on GuixSD is subject to
1456 transactional upgrades and roll-back
1457 (@pxref{Using the Configuration System}).
1458
1459 All packages in the package store may be @emph{garbage-collected}.
1460 Guix can determine which packages are still referenced by user
1461 profiles, and remove those that are provably no longer referenced
1462 (@pxref{Invoking guix gc}). Users may also explicitly remove old
1463 generations of their profile so that the packages they refer to can be
1464 collected.
1465
1466 @cindex reproducibility
1467 @cindex reproducible builds
1468 Finally, Guix takes a @dfn{purely functional} approach to package
1469 management, as described in the introduction (@pxref{Introduction}).
1470 Each @file{/gnu/store} package directory name contains a hash of all the
1471 inputs that were used to build that package---compiler, libraries, build
1472 scripts, etc. This direct correspondence allows users to make sure a
1473 given package installation matches the current state of their
1474 distribution. It also helps maximize @dfn{build reproducibility}:
1475 thanks to the isolated build environments that are used, a given build
1476 is likely to yield bit-identical files when performed on different
1477 machines (@pxref{Invoking guix-daemon, container}).
1478
1479 @cindex substitutes
1480 This foundation allows Guix to support @dfn{transparent binary/source
1481 deployment}. When a pre-built binary for a @file{/gnu/store} item is
1482 available from an external source---a @dfn{substitute}, Guix just
1483 downloads it and unpacks it;
1484 otherwise, it builds the package from source, locally
1485 (@pxref{Substitutes}). Because build results are usually bit-for-bit
1486 reproducible, users do not have to trust servers that provide
1487 substitutes: they can force a local build and @emph{challenge} providers
1488 (@pxref{Invoking guix challenge}).
1489
1490 Control over the build environment is a feature that is also useful for
1491 developers. The @command{guix environment} command allows developers of
1492 a package to quickly set up the right development environment for their
1493 package, without having to manually install the dependencies of the
1494 package into their profile (@pxref{Invoking guix environment}).
1495
1496 @node Invoking guix package
1497 @section Invoking @command{guix package}
1498
1499 @cindex installing packages
1500 @cindex removing packages
1501 @cindex package installation
1502 @cindex package removal
1503 The @command{guix package} command is the tool that allows users to
1504 install, upgrade, and remove packages, as well as rolling back to
1505 previous configurations. It operates only on the user's own profile,
1506 and works with normal user privileges (@pxref{Features}). Its syntax
1507 is:
1508
1509 @example
1510 guix package @var{options}
1511 @end example
1512 @cindex transactions
1513 Primarily, @var{options} specifies the operations to be performed during
1514 the transaction. Upon completion, a new profile is created, but
1515 previous @dfn{generations} of the profile remain available, should the user
1516 want to roll back.
1517
1518 For example, to remove @code{lua} and install @code{guile} and
1519 @code{guile-cairo} in a single transaction:
1520
1521 @example
1522 guix package -r lua -i guile guile-cairo
1523 @end example
1524
1525 @command{guix package} also supports a @dfn{declarative approach}
1526 whereby the user specifies the exact set of packages to be available and
1527 passes it @i{via} the @option{--manifest} option
1528 (@pxref{profile-manifest, @option{--manifest}}).
1529
1530 @cindex profile
1531 For each user, a symlink to the user's default profile is automatically
1532 created in @file{$HOME/.guix-profile}. This symlink always points to the
1533 current generation of the user's default profile. Thus, users can add
1534 @file{$HOME/.guix-profile/bin} to their @code{PATH} environment
1535 variable, and so on.
1536 @cindex search paths
1537 If you are not using the Guix System Distribution, consider adding the
1538 following lines to your @file{~/.bash_profile} (@pxref{Bash Startup
1539 Files,,, bash, The GNU Bash Reference Manual}) so that newly-spawned
1540 shells get all the right environment variable definitions:
1541
1542 @example
1543 GUIX_PROFILE="$HOME/.guix-profile" \
1544 source "$HOME/.guix-profile/etc/profile"
1545 @end example
1546
1547 In a multi-user setup, user profiles are stored in a place registered as
1548 a @dfn{garbage-collector root}, which @file{$HOME/.guix-profile} points
1549 to (@pxref{Invoking guix gc}). That directory is normally
1550 @code{@var{localstatedir}/profiles/per-user/@var{user}}, where
1551 @var{localstatedir} is the value passed to @code{configure} as
1552 @code{--localstatedir}, and @var{user} is the user name. The
1553 @file{per-user} directory is created when @command{guix-daemon} is
1554 started, and the @var{user} sub-directory is created by @command{guix
1555 package}.
1556
1557 The @var{options} can be among the following:
1558
1559 @table @code
1560
1561 @item --install=@var{package} @dots{}
1562 @itemx -i @var{package} @dots{}
1563 Install the specified @var{package}s.
1564
1565 Each @var{package} may specify either a simple package name, such as
1566 @code{guile}, or a package name followed by an at-sign and version number,
1567 such as @code{guile@@1.8.8} or simply @code{guile@@1.8} (in the latter
1568 case, the newest version prefixed by @code{1.8} is selected.)
1569
1570 If no version number is specified, the
1571 newest available version will be selected. In addition, @var{package}
1572 may contain a colon, followed by the name of one of the outputs of the
1573 package, as in @code{gcc:doc} or @code{binutils@@2.22:lib}
1574 (@pxref{Packages with Multiple Outputs}). Packages with a corresponding
1575 name (and optionally version) are searched for among the GNU
1576 distribution modules (@pxref{Package Modules}).
1577
1578 @cindex propagated inputs
1579 Sometimes packages have @dfn{propagated inputs}: these are dependencies
1580 that automatically get installed along with the required package
1581 (@pxref{package-propagated-inputs, @code{propagated-inputs} in
1582 @code{package} objects}, for information about propagated inputs in
1583 package definitions).
1584
1585 @anchor{package-cmd-propagated-inputs}
1586 An example is the GNU MPC library: its C header files refer to those of
1587 the GNU MPFR library, which in turn refer to those of the GMP library.
1588 Thus, when installing MPC, the MPFR and GMP libraries also get installed
1589 in the profile; removing MPC also removes MPFR and GMP---unless they had
1590 also been explicitly installed by the user.
1591
1592 Besides, packages sometimes rely on the definition of environment
1593 variables for their search paths (see explanation of
1594 @code{--search-paths} below). Any missing or possibly incorrect
1595 environment variable definitions are reported here.
1596
1597 @item --install-from-expression=@var{exp}
1598 @itemx -e @var{exp}
1599 Install the package @var{exp} evaluates to.
1600
1601 @var{exp} must be a Scheme expression that evaluates to a
1602 @code{<package>} object. This option is notably useful to disambiguate
1603 between same-named variants of a package, with expressions such as
1604 @code{(@@ (gnu packages base) guile-final)}.
1605
1606 Note that this option installs the first output of the specified
1607 package, which may be insufficient when needing a specific output of a
1608 multiple-output package.
1609
1610 @item --install-from-file=@var{file}
1611 @itemx -f @var{file}
1612 Install the package that the code within @var{file} evaluates to.
1613
1614 As an example, @var{file} might contain a definition like this
1615 (@pxref{Defining Packages}):
1616
1617 @example
1618 @verbatiminclude package-hello.scm
1619 @end example
1620
1621 Developers may find it useful to include such a @file{guix.scm} file
1622 in the root of their project source tree that can be used to test
1623 development snapshots and create reproducible development environments
1624 (@pxref{Invoking guix environment}).
1625
1626 @item --remove=@var{package} @dots{}
1627 @itemx -r @var{package} @dots{}
1628 Remove the specified @var{package}s.
1629
1630 As for @code{--install}, each @var{package} may specify a version number
1631 and/or output name in addition to the package name. For instance,
1632 @code{-r glibc:debug} would remove the @code{debug} output of
1633 @code{glibc}.
1634
1635 @item --upgrade[=@var{regexp} @dots{}]
1636 @itemx -u [@var{regexp} @dots{}]
1637 @cindex upgrading packages
1638 Upgrade all the installed packages. If one or more @var{regexp}s are
1639 specified, upgrade only installed packages whose name matches a
1640 @var{regexp}. Also see the @code{--do-not-upgrade} option below.
1641
1642 Note that this upgrades package to the latest version of packages found
1643 in the distribution currently installed. To update your distribution,
1644 you should regularly run @command{guix pull} (@pxref{Invoking guix
1645 pull}).
1646
1647 @item --do-not-upgrade[=@var{regexp} @dots{}]
1648 When used together with the @code{--upgrade} option, do @emph{not}
1649 upgrade any packages whose name matches a @var{regexp}. For example, to
1650 upgrade all packages in the current profile except those containing the
1651 substring ``emacs'':
1652
1653 @example
1654 $ guix package --upgrade . --do-not-upgrade emacs
1655 @end example
1656
1657 @item @anchor{profile-manifest}--manifest=@var{file}
1658 @itemx -m @var{file}
1659 @cindex profile declaration
1660 @cindex profile manifest
1661 Create a new generation of the profile from the manifest object
1662 returned by the Scheme code in @var{file}.
1663
1664 This allows you to @emph{declare} the profile's contents rather than
1665 constructing it through a sequence of @code{--install} and similar
1666 commands. The advantage is that @var{file} can be put under version
1667 control, copied to different machines to reproduce the same profile, and
1668 so on.
1669
1670 @c FIXME: Add reference to (guix profile) documentation when available.
1671 @var{file} must return a @dfn{manifest} object, which is roughly a list
1672 of packages:
1673
1674 @findex packages->manifest
1675 @example
1676 (use-package-modules guile emacs)
1677
1678 (packages->manifest
1679 (list emacs
1680 guile-2.0
1681 ;; Use a specific package output.
1682 (list guile-2.0 "debug")))
1683 @end example
1684
1685 @item --roll-back
1686 @cindex rolling back
1687 @cindex undoing transactions
1688 @cindex transactions, undoing
1689 Roll back to the previous @dfn{generation} of the profile---i.e., undo
1690 the last transaction.
1691
1692 When combined with options such as @code{--install}, roll back occurs
1693 before any other actions.
1694
1695 When rolling back from the first generation that actually contains
1696 installed packages, the profile is made to point to the @dfn{zeroth
1697 generation}, which contains no files apart from its own metadata.
1698
1699 After having rolled back, installing, removing, or upgrading packages
1700 overwrites previous future generations. Thus, the history of the
1701 generations in a profile is always linear.
1702
1703 @item --switch-generation=@var{pattern}
1704 @itemx -S @var{pattern}
1705 @cindex generations
1706 Switch to a particular generation defined by @var{pattern}.
1707
1708 @var{pattern} may be either a generation number or a number prefixed
1709 with ``+'' or ``-''. The latter means: move forward/backward by a
1710 specified number of generations. For example, if you want to return to
1711 the latest generation after @code{--roll-back}, use
1712 @code{--switch-generation=+1}.
1713
1714 The difference between @code{--roll-back} and
1715 @code{--switch-generation=-1} is that @code{--switch-generation} will
1716 not make a zeroth generation, so if a specified generation does not
1717 exist, the current generation will not be changed.
1718
1719 @item --search-paths[=@var{kind}]
1720 @cindex search paths
1721 Report environment variable definitions, in Bash syntax, that may be
1722 needed in order to use the set of installed packages. These environment
1723 variables are used to specify @dfn{search paths} for files used by some
1724 of the installed packages.
1725
1726 For example, GCC needs the @code{CPATH} and @code{LIBRARY_PATH}
1727 environment variables to be defined so it can look for headers and
1728 libraries in the user's profile (@pxref{Environment Variables,,, gcc,
1729 Using the GNU Compiler Collection (GCC)}). If GCC and, say, the C
1730 library are installed in the profile, then @code{--search-paths} will
1731 suggest setting these variables to @code{@var{profile}/include} and
1732 @code{@var{profile}/lib}, respectively.
1733
1734 The typical use case is to define these environment variables in the
1735 shell:
1736
1737 @example
1738 $ eval `guix package --search-paths`
1739 @end example
1740
1741 @var{kind} may be one of @code{exact}, @code{prefix}, or @code{suffix},
1742 meaning that the returned environment variable definitions will either
1743 be exact settings, or prefixes or suffixes of the current value of these
1744 variables. When omitted, @var{kind} defaults to @code{exact}.
1745
1746 This option can also be used to compute the @emph{combined} search paths
1747 of several profiles. Consider this example:
1748
1749 @example
1750 $ guix package -p foo -i guile
1751 $ guix package -p bar -i guile-json
1752 $ guix package -p foo -p bar --search-paths
1753 @end example
1754
1755 The last command above reports about the @code{GUILE_LOAD_PATH}
1756 variable, even though, taken individually, neither @file{foo} nor
1757 @file{bar} would lead to that recommendation.
1758
1759
1760 @item --profile=@var{profile}
1761 @itemx -p @var{profile}
1762 Use @var{profile} instead of the user's default profile.
1763
1764 @item --verbose
1765 Produce verbose output. In particular, emit the build log of the
1766 environment on the standard error port.
1767
1768 @item --bootstrap
1769 Use the bootstrap Guile to build the profile. This option is only
1770 useful to distribution developers.
1771
1772 @end table
1773
1774 In addition to these actions, @command{guix package} supports the
1775 following options to query the current state of a profile, or the
1776 availability of packages:
1777
1778 @table @option
1779
1780 @item --search=@var{regexp}
1781 @itemx -s @var{regexp}
1782 @cindex searching for packages
1783 List the available packages whose name, synopsis, or description matches
1784 @var{regexp}. Print all the metadata of matching packages in
1785 @code{recutils} format (@pxref{Top, GNU recutils databases,, recutils,
1786 GNU recutils manual}).
1787
1788 This allows specific fields to be extracted using the @command{recsel}
1789 command, for instance:
1790
1791 @example
1792 $ guix package -s malloc | recsel -p name,version
1793 name: glibc
1794 version: 2.17
1795
1796 name: libgc
1797 version: 7.2alpha6
1798 @end example
1799
1800 Similarly, to show the name of all the packages available under the
1801 terms of the GNU@tie{}LGPL version 3:
1802
1803 @example
1804 $ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
1805 name: elfutils
1806
1807 name: gmp
1808 @dots{}
1809 @end example
1810
1811 It is also possible to refine search results using several @code{-s}
1812 flags. For example, the following command returns a list of board
1813 games:
1814
1815 @example
1816 $ guix package -s '\<board\>' -s game | recsel -p name
1817 name: gnubg
1818 @dots{}
1819 @end example
1820
1821 If we were to omit @code{-s game}, we would also get software packages
1822 that deal with printed circuit boards; removing the angle brackets
1823 around @code{board} would further add packages that have to do with
1824 keyboards.
1825
1826 And now for a more elaborate example. The following command searches
1827 for cryptographic libraries, filters out Haskell, Perl, Python, and Ruby
1828 libraries, and prints the name and synopsis of the matching packages:
1829
1830 @example
1831 $ guix package -s crypto -s library | \
1832 recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
1833 @end example
1834
1835 @noindent
1836 @xref{Selection Expressions,,, recutils, GNU recutils manual}, for more
1837 information on @dfn{selection expressions} for @code{recsel -e}.
1838
1839 @item --show=@var{package}
1840 Show details about @var{package}, taken from the list of available packages, in
1841 @code{recutils} format (@pxref{Top, GNU recutils databases,, recutils, GNU
1842 recutils manual}).
1843
1844 @example
1845 $ guix package --show=python | recsel -p name,version
1846 name: python
1847 version: 2.7.6
1848
1849 name: python
1850 version: 3.3.5
1851 @end example
1852
1853 You may also specify the full name of a package to only get details about a
1854 specific version of it:
1855 @example
1856 $ guix package --show=python@@3.4 | recsel -p name,version
1857 name: python
1858 version: 3.4.3
1859 @end example
1860
1861
1862
1863 @item --list-installed[=@var{regexp}]
1864 @itemx -I [@var{regexp}]
1865 List the currently installed packages in the specified profile, with the
1866 most recently installed packages shown last. When @var{regexp} is
1867 specified, list only installed packages whose name matches @var{regexp}.
1868
1869 For each installed package, print the following items, separated by
1870 tabs: the package name, its version string, the part of the package that
1871 is installed (for instance, @code{out} for the default output,
1872 @code{include} for its headers, etc.), and the path of this package in
1873 the store.
1874
1875 @item --list-available[=@var{regexp}]
1876 @itemx -A [@var{regexp}]
1877 List packages currently available in the distribution for this system
1878 (@pxref{GNU Distribution}). When @var{regexp} is specified, list only
1879 installed packages whose name matches @var{regexp}.
1880
1881 For each package, print the following items separated by tabs: its name,
1882 its version string, the parts of the package (@pxref{Packages with
1883 Multiple Outputs}), and the source location of its definition.
1884
1885 @item --list-generations[=@var{pattern}]
1886 @itemx -l [@var{pattern}]
1887 @cindex generations
1888 Return a list of generations along with their creation dates; for each
1889 generation, show the installed packages, with the most recently
1890 installed packages shown last. Note that the zeroth generation is never
1891 shown.
1892
1893 For each installed package, print the following items, separated by
1894 tabs: the name of a package, its version string, the part of the package
1895 that is installed (@pxref{Packages with Multiple Outputs}), and the
1896 location of this package in the store.
1897
1898 When @var{pattern} is used, the command returns only matching
1899 generations. Valid patterns include:
1900
1901 @itemize
1902 @item @emph{Integers and comma-separated integers}. Both patterns denote
1903 generation numbers. For instance, @code{--list-generations=1} returns
1904 the first one.
1905
1906 And @code{--list-generations=1,8,2} outputs three generations in the
1907 specified order. Neither spaces nor trailing commas are allowed.
1908
1909 @item @emph{Ranges}. @code{--list-generations=2..9} prints the
1910 specified generations and everything in between. Note that the start of
1911 a range must be smaller than its end.
1912
1913 It is also possible to omit the endpoint. For example,
1914 @code{--list-generations=2..}, returns all generations starting from the
1915 second one.
1916
1917 @item @emph{Durations}. You can also get the last @emph{N}@tie{}days, weeks,
1918 or months by passing an integer along with the first letter of the
1919 duration. For example, @code{--list-generations=20d} lists generations
1920 that are up to 20 days old.
1921 @end itemize
1922
1923 @item --delete-generations[=@var{pattern}]
1924 @itemx -d [@var{pattern}]
1925 When @var{pattern} is omitted, delete all generations except the current
1926 one.
1927
1928 This command accepts the same patterns as @option{--list-generations}.
1929 When @var{pattern} is specified, delete the matching generations. When
1930 @var{pattern} specifies a duration, generations @emph{older} than the
1931 specified duration match. For instance, @code{--delete-generations=1m}
1932 deletes generations that are more than one month old.
1933
1934 If the current generation matches, it is @emph{not} deleted. Also, the
1935 zeroth generation is never deleted.
1936
1937 Note that deleting generations prevents rolling back to them.
1938 Consequently, this command must be used with care.
1939
1940 @end table
1941
1942 Finally, since @command{guix package} may actually start build
1943 processes, it supports all the common build options (@pxref{Common Build
1944 Options}). It also supports package transformation options, such as
1945 @option{--with-source} (@pxref{Package Transformation Options}).
1946 However, note that package transformations are lost when upgrading; to
1947 preserve transformations across upgrades, you should define your own
1948 package variant in a Guile module and add it to @code{GUIX_PACKAGE_PATH}
1949 (@pxref{Defining Packages}).
1950
1951
1952 @node Substitutes
1953 @section Substitutes
1954
1955 @cindex substitutes
1956 @cindex pre-built binaries
1957 Guix supports transparent source/binary deployment, which means that it
1958 can either build things locally, or download pre-built items from a
1959 server. We call these pre-built items @dfn{substitutes}---they are
1960 substitutes for local build results. In many cases, downloading a
1961 substitute is much faster than building things locally.
1962
1963 Substitutes can be anything resulting from a derivation build
1964 (@pxref{Derivations}). Of course, in the common case, they are
1965 pre-built package binaries, but source tarballs, for instance, which
1966 also result from derivation builds, can be available as substitutes.
1967
1968 The @code{hydra.gnu.org} server is a front-end to a build farm that
1969 builds packages from the GNU distribution continuously for some
1970 architectures, and makes them available as substitutes. This is the
1971 default source of substitutes; it can be overridden by passing the
1972 @option{--substitute-urls} option either to @command{guix-daemon}
1973 (@pxref{daemon-substitute-urls,, @code{guix-daemon --substitute-urls}})
1974 or to client tools such as @command{guix package}
1975 (@pxref{client-substitute-urls,, client @option{--substitute-urls}
1976 option}).
1977
1978 Substitute URLs can be either HTTP or HTTPS@footnote{For HTTPS access,
1979 the Guile bindings of GnuTLS must be installed. @xref{Requirements}.}
1980 HTTPS is recommended because communications are encrypted; conversely,
1981 using HTTP makes all communications visible to an eavesdropper, who
1982 could use the information gathered to determine, for instance, whether
1983 your system has unpatched security vulnerabilities.
1984
1985 @cindex security
1986 @cindex digital signatures
1987 @cindex substitutes, authorization thereof
1988 To allow Guix to download substitutes from @code{hydra.gnu.org} or a
1989 mirror thereof, you
1990 must add its public key to the access control list (ACL) of archive
1991 imports, using the @command{guix archive} command (@pxref{Invoking guix
1992 archive}). Doing so implies that you trust @code{hydra.gnu.org} to not
1993 be compromised and to serve genuine substitutes.
1994
1995 This public key is installed along with Guix, in
1996 @code{@var{prefix}/share/guix/hydra.gnu.org.pub}, where @var{prefix} is
1997 the installation prefix of Guix. If you installed Guix from source,
1998 make sure you checked the GPG signature of
1999 @file{guix-@value{VERSION}.tar.gz}, which contains this public key file.
2000 Then, you can run something like this:
2001
2002 @example
2003 # guix archive --authorize < hydra.gnu.org.pub
2004 @end example
2005
2006 Once this is in place, the output of a command like @code{guix build}
2007 should change from something like:
2008
2009 @example
2010 $ guix build emacs --dry-run
2011 The following derivations would be built:
2012 /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
2013 /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
2014 /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
2015 /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
2016 @dots{}
2017 @end example
2018
2019 @noindent
2020 to something like:
2021
2022 @example
2023 $ guix build emacs --dry-run
2024 The following files would be downloaded:
2025 /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
2026 /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
2027 /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
2028 /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
2029 @dots{}
2030 @end example
2031
2032 @noindent
2033 This indicates that substitutes from @code{hydra.gnu.org} are usable and
2034 will be downloaded, when possible, for future builds.
2035
2036 Guix ignores substitutes that are not signed, or that are not signed by
2037 one of the keys listed in the ACL. It also detects and raises an error
2038 when attempting to use a substitute that has been tampered with.
2039
2040 @vindex http_proxy
2041 Substitutes are downloaded over HTTP or HTTPS.
2042 The @code{http_proxy} environment
2043 variable can be set in the environment of @command{guix-daemon} and is
2044 honored for downloads of substitutes. Note that the value of
2045 @code{http_proxy} in the environment where @command{guix build},
2046 @command{guix package}, and other client commands are run has
2047 @emph{absolutely no effect}.
2048
2049 When using HTTPS, the server's X.509 certificate is @emph{not} validated
2050 (in other words, the server is not authenticated), contrary to what
2051 HTTPS clients such as Web browsers usually do. This is because Guix
2052 authenticates substitute information itself, as explained above, which
2053 is what we care about (whereas X.509 certificates are about
2054 authenticating bindings between domain names and public keys.)
2055
2056 The substitute mechanism can be disabled globally by running
2057 @code{guix-daemon} with @code{--no-substitutes} (@pxref{Invoking
2058 guix-daemon}). It can also be disabled temporarily by passing the
2059 @code{--no-substitutes} option to @command{guix package}, @command{guix
2060 build}, and other command-line tools.
2061
2062
2063 @unnumberedsubsec On Trusting Binaries
2064
2065 Today, each individual's control over their own computing is at the
2066 mercy of institutions, corporations, and groups with enough power and
2067 determination to subvert the computing infrastructure and exploit its
2068 weaknesses. While using @code{hydra.gnu.org} substitutes can be
2069 convenient, we encourage users to also build on their own, or even run
2070 their own build farm, such that @code{hydra.gnu.org} is less of an
2071 interesting target. One way to help is by publishing the software you
2072 build using @command{guix publish} so that others have one more choice
2073 of server to download substitutes from (@pxref{Invoking guix publish}).
2074
2075 Guix has the foundations to maximize build reproducibility
2076 (@pxref{Features}). In most cases, independent builds of a given
2077 package or derivation should yield bit-identical results. Thus, through
2078 a diverse set of independent package builds, we can strengthen the
2079 integrity of our systems. The @command{guix challenge} command aims to
2080 help users assess substitute servers, and to assist developers in
2081 finding out about non-deterministic package builds (@pxref{Invoking guix
2082 challenge}). Similarly, the @option{--check} option of @command{guix
2083 build} allows users to check whether previously-installed substitutes
2084 are genuine by rebuilding them locally (@pxref{build-check,
2085 @command{guix build --check}}).
2086
2087 In the future, we want Guix to have support to publish and retrieve
2088 binaries to/from other users, in a peer-to-peer fashion. If you would
2089 like to discuss this project, join us on @email{guix-devel@@gnu.org}.
2090
2091
2092 @node Packages with Multiple Outputs
2093 @section Packages with Multiple Outputs
2094
2095 @cindex multiple-output packages
2096 @cindex package outputs
2097 @cindex outputs
2098
2099 Often, packages defined in Guix have a single @dfn{output}---i.e., the
2100 source package leads to exactly one directory in the store. When running
2101 @command{guix package -i glibc}, one installs the default output of the
2102 GNU libc package; the default output is called @code{out}, but its name
2103 can be omitted as shown in this command. In this particular case, the
2104 default output of @code{glibc} contains all the C header files, shared
2105 libraries, static libraries, Info documentation, and other supporting
2106 files.
2107
2108 Sometimes it is more appropriate to separate the various types of files
2109 produced from a single source package into separate outputs. For
2110 instance, the GLib C library (used by GTK+ and related packages)
2111 installs more than 20 MiB of reference documentation as HTML pages.
2112 To save space for users who do not need it, the documentation goes to a
2113 separate output, called @code{doc}. To install the main GLib output,
2114 which contains everything but the documentation, one would run:
2115
2116 @example
2117 guix package -i glib
2118 @end example
2119
2120 @cindex documentation
2121 The command to install its documentation is:
2122
2123 @example
2124 guix package -i glib:doc
2125 @end example
2126
2127 Some packages install programs with different ``dependency footprints''.
2128 For instance, the WordNet package installs both command-line tools and
2129 graphical user interfaces (GUIs). The former depend solely on the C
2130 library, whereas the latter depend on Tcl/Tk and the underlying X
2131 libraries. In this case, we leave the command-line tools in the default
2132 output, whereas the GUIs are in a separate output. This allows users
2133 who do not need the GUIs to save space. The @command{guix size} command
2134 can help find out about such situations (@pxref{Invoking guix size}).
2135 @command{guix graph} can also be helpful (@pxref{Invoking guix graph}).
2136
2137 There are several such multiple-output packages in the GNU distribution.
2138 Other conventional output names include @code{lib} for libraries and
2139 possibly header files, @code{bin} for stand-alone programs, and
2140 @code{debug} for debugging information (@pxref{Installing Debugging
2141 Files}). The outputs of a packages are listed in the third column of
2142 the output of @command{guix package --list-available} (@pxref{Invoking
2143 guix package}).
2144
2145
2146 @node Invoking guix gc
2147 @section Invoking @command{guix gc}
2148
2149 @cindex garbage collector
2150 @cindex disk space
2151 Packages that are installed, but not used, may be @dfn{garbage-collected}.
2152 The @command{guix gc} command allows users to explicitly run the garbage
2153 collector to reclaim space from the @file{/gnu/store} directory. It is
2154 the @emph{only} way to remove files from @file{/gnu/store}---removing
2155 files or directories manually may break it beyond repair!
2156
2157 The garbage collector has a set of known @dfn{roots}: any file under
2158 @file{/gnu/store} reachable from a root is considered @dfn{live} and
2159 cannot be deleted; any other file is considered @dfn{dead} and may be
2160 deleted. The set of garbage collector roots includes default user
2161 profiles, and may be augmented with @command{guix build --root}, for
2162 example (@pxref{Invoking guix build}).
2163
2164 Prior to running @code{guix gc --collect-garbage} to make space, it is
2165 often useful to remove old generations from user profiles; that way, old
2166 package builds referenced by those generations can be reclaimed. This
2167 is achieved by running @code{guix package --delete-generations}
2168 (@pxref{Invoking guix package}).
2169
2170 The @command{guix gc} command has three modes of operation: it can be
2171 used to garbage-collect any dead files (the default), to delete specific
2172 files (the @code{--delete} option), to print garbage-collector
2173 information, or for more advanced queries. The garbage collection
2174 options are as follows:
2175
2176 @table @code
2177 @item --collect-garbage[=@var{min}]
2178 @itemx -C [@var{min}]
2179 Collect garbage---i.e., unreachable @file{/gnu/store} files and
2180 sub-directories. This is the default operation when no option is
2181 specified.
2182
2183 When @var{min} is given, stop once @var{min} bytes have been collected.
2184 @var{min} may be a number of bytes, or it may include a unit as a
2185 suffix, such as @code{MiB} for mebibytes and @code{GB} for gigabytes
2186 (@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
2187
2188 When @var{min} is omitted, collect all the garbage.
2189
2190 @item --free-space=@var{free}
2191 @itemx -F @var{free}
2192 Collect garbage until @var{free} space is available under
2193 @file{/gnu/store}, if possible; @var{free} denotes storage space, such
2194 as @code{500MiB}, as described above.
2195
2196 When @var{free} or more is already available in @file{/gnu/store}, do
2197 nothing and exit immediately.
2198
2199 @item --delete
2200 @itemx -d
2201 Attempt to delete all the store files and directories specified as
2202 arguments. This fails if some of the files are not in the store, or if
2203 they are still live.
2204
2205 @item --list-failures
2206 List store items corresponding to cached build failures.
2207
2208 This prints nothing unless the daemon was started with
2209 @option{--cache-failures} (@pxref{Invoking guix-daemon,
2210 @option{--cache-failures}}).
2211
2212 @item --clear-failures
2213 Remove the specified store items from the failed-build cache.
2214
2215 Again, this option only makes sense when the daemon is started with
2216 @option{--cache-failures}. Otherwise, it does nothing.
2217
2218 @item --list-dead
2219 Show the list of dead files and directories still present in the
2220 store---i.e., files and directories no longer reachable from any root.
2221
2222 @item --list-live
2223 Show the list of live store files and directories.
2224
2225 @end table
2226
2227 In addition, the references among existing store files can be queried:
2228
2229 @table @code
2230
2231 @item --references
2232 @itemx --referrers
2233 @cindex package dependencies
2234 List the references (respectively, the referrers) of store files given
2235 as arguments.
2236
2237 @item --requisites
2238 @itemx -R
2239 @cindex closure
2240 List the requisites of the store files passed as arguments. Requisites
2241 include the store files themselves, their references, and the references
2242 of these, recursively. In other words, the returned list is the
2243 @dfn{transitive closure} of the store files.
2244
2245 @xref{Invoking guix size}, for a tool to profile the size of the closure
2246 of an element. @xref{Invoking guix graph}, for a tool to visualize
2247 the graph of references.
2248
2249 @end table
2250
2251 Lastly, the following options allow you to check the integrity of the
2252 store and to control disk usage.
2253
2254 @table @option
2255
2256 @item --verify[=@var{options}]
2257 @cindex integrity, of the store
2258 @cindex integrity checking
2259 Verify the integrity of the store.
2260
2261 By default, make sure that all the store items marked as valid in the
2262 database of the daemon actually exist in @file{/gnu/store}.
2263
2264 When provided, @var{options} must be a comma-separated list containing one
2265 or more of @code{contents} and @code{repair}.
2266
2267 When passing @option{--verify=contents}, the daemon computes the
2268 content hash of each store item and compares it against its hash in the
2269 database. Hash mismatches are reported as data corruptions. Because it
2270 traverses @emph{all the files in the store}, this command can take a
2271 long time, especially on systems with a slow disk drive.
2272
2273 @cindex repairing the store
2274 Using @option{--verify=repair} or @option{--verify=contents,repair}
2275 causes the daemon to try to repair corrupt store items by fetching
2276 substitutes for them (@pxref{Substitutes}). Because repairing is not
2277 atomic, and thus potentially dangerous, it is available only to the
2278 system administrator.
2279
2280 @item --optimize
2281 @cindex deduplication
2282 Optimize the store by hard-linking identical files---this is
2283 @dfn{deduplication}.
2284
2285 The daemon performs deduplication after each successful build or archive
2286 import, unless it was started with @code{--disable-deduplication}
2287 (@pxref{Invoking guix-daemon, @code{--disable-deduplication}}). Thus,
2288 this option is primarily useful when the daemon was running with
2289 @code{--disable-deduplication}.
2290
2291 @end table
2292
2293 @node Invoking guix pull
2294 @section Invoking @command{guix pull}
2295
2296 @cindex upgrading Guix
2297 @cindex updating Guix
2298 @cindex @command{guix pull}
2299 @cindex pull
2300 Packages are installed or upgraded to the latest version available in
2301 the distribution currently available on your local machine. To update
2302 that distribution, along with the Guix tools, you must run @command{guix
2303 pull}: the command downloads the latest Guix source code and package
2304 descriptions, and deploys it.
2305
2306 On completion, @command{guix package} will use packages and package
2307 versions from this just-retrieved copy of Guix. Not only that, but all
2308 the Guix commands and Scheme modules will also be taken from that latest
2309 version. New @command{guix} sub-commands added by the update also
2310 become available.
2311
2312 Any user can update their Guix copy using @command{guix pull}, and the
2313 effect is limited to the user who run @command{guix pull}. For
2314 instance, when user @code{root} runs @command{guix pull}, this has no
2315 effect on the version of Guix that user @code{alice} sees, and vice
2316 versa@footnote{Under the hood, @command{guix pull} updates the
2317 @file{~/.config/guix/latest} symbolic link to point to the latest Guix,
2318 and the @command{guix} command loads code from there.}.
2319
2320 The @command{guix pull} command is usually invoked with no arguments,
2321 but it supports the following options:
2322
2323 @table @code
2324 @item --verbose
2325 Produce verbose output, writing build logs to the standard error output.
2326
2327 @item --url=@var{url}
2328 Download the source tarball of Guix from @var{url}.
2329
2330 By default, the tarball is taken from its canonical address at
2331 @code{gnu.org}, for the stable branch of Guix.
2332
2333 @item --bootstrap
2334 Use the bootstrap Guile to build the latest Guix. This option is only
2335 useful to Guix developers.
2336 @end table
2337
2338
2339 @node Invoking guix archive
2340 @section Invoking @command{guix archive}
2341
2342 @cindex @command{guix archive}
2343 @cindex archive
2344 The @command{guix archive} command allows users to @dfn{export} files
2345 from the store into a single archive, and to later @dfn{import} them.
2346 In particular, it allows store files to be transferred from one machine
2347 to the store on another machine.
2348
2349 @cindex exporting store items
2350 To export store files as an archive to standard output, run:
2351
2352 @example
2353 guix archive --export @var{options} @var{specifications}...
2354 @end example
2355
2356 @var{specifications} may be either store file names or package
2357 specifications, as for @command{guix package} (@pxref{Invoking guix
2358 package}). For instance, the following command creates an archive
2359 containing the @code{gui} output of the @code{git} package and the main
2360 output of @code{emacs}:
2361
2362 @example
2363 guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
2364 @end example
2365
2366 If the specified packages are not built yet, @command{guix archive}
2367 automatically builds them. The build process may be controlled with the
2368 common build options (@pxref{Common Build Options}).
2369
2370 To transfer the @code{emacs} package to a machine connected over SSH,
2371 one would run:
2372
2373 @example
2374 guix archive --export -r emacs | ssh the-machine guix archive --import
2375 @end example
2376
2377 @noindent
2378 Similarly, a complete user profile may be transferred from one machine
2379 to another like this:
2380
2381 @example
2382 guix archive --export -r $(readlink -f ~/.guix-profile) | \
2383 ssh the-machine guix-archive --import
2384 @end example
2385
2386 @noindent
2387 However, note that, in both examples, all of @code{emacs} and the
2388 profile as well as all of their dependencies are transferred (due to
2389 @code{-r}), regardless of what is already available in the store on the
2390 target machine. The @code{--missing} option can help figure out which
2391 items are missing from the target store. The @command{guix copy}
2392 command simplifies and optimizes this whole process, so this is probably
2393 what you should use in this case (@pxref{Invoking guix copy}).
2394
2395 @cindex nar, archive format
2396 @cindex normalized archive (nar)
2397 By default archives are stored in the ``normalized archive'' or ``nar'' format, which is
2398 comparable in spirit to `tar', but with differences
2399 that make it more appropriate for our purposes. First, rather than
2400 recording all Unix metadata for each file, the nar format only mentions
2401 the file type (regular, directory, or symbolic link); Unix permissions
2402 and owner/group are dismissed. Second, the order in which directory
2403 entries are stored always follows the order of file names according to
2404 the C locale collation order. This makes archive production fully
2405 deterministic.
2406
2407 When exporting, the daemon digitally signs the contents of the archive,
2408 and that digital signature is appended. When importing, the daemon
2409 verifies the signature and rejects the import in case of an invalid
2410 signature or if the signing key is not authorized.
2411 @c FIXME: Add xref to daemon doc about signatures.
2412
2413 Optionally, archives can be exported as a Docker image in the tar
2414 archive format using @code{--format=docker}.
2415
2416 The main options are:
2417
2418 @table @code
2419 @item --export
2420 Export the specified store files or packages (see below.) Write the
2421 resulting archive to the standard output.
2422
2423 Dependencies are @emph{not} included in the output, unless
2424 @code{--recursive} is passed.
2425
2426 @item -r
2427 @itemx --recursive
2428 When combined with @code{--export}, this instructs @command{guix
2429 archive} to include dependencies of the given items in the archive.
2430 Thus, the resulting archive is self-contained: it contains the closure
2431 of the exported store items.
2432
2433 @item --import
2434 Read an archive from the standard input, and import the files listed
2435 therein into the store. Abort if the archive has an invalid digital
2436 signature, or if it is signed by a public key not among the authorized
2437 keys (see @code{--authorize} below.)
2438
2439 @item --missing
2440 Read a list of store file names from the standard input, one per line,
2441 and write on the standard output the subset of these files missing from
2442 the store.
2443
2444 @item -f
2445 @item --format=@var{FMT}
2446 @cindex docker, export
2447 @cindex export format
2448 Specify the export format. Acceptable arguments are @code{nar} and
2449 @code{docker}. The default is the nar format. When the format is
2450 @code{docker}, recursively export the specified store directory as a
2451 Docker image in tar archive format, as specified in
2452 @uref{https://github.com/docker/docker/blob/master/image/spec/v1.2.md,
2453 version 1.2.0 of the Docker Image Specification}. Using
2454 @code{--format=docker} implies @code{--recursive}. The generated
2455 archive can be loaded by Docker using @command{docker load}.
2456
2457 @item --generate-key[=@var{parameters}]
2458 @cindex signing, archives
2459 Generate a new key pair for the daemon. This is a prerequisite before
2460 archives can be exported with @code{--export}. Note that this operation
2461 usually takes time, because it needs to gather enough entropy to
2462 generate the key pair.
2463
2464 The generated key pair is typically stored under @file{/etc/guix}, in
2465 @file{signing-key.pub} (public key) and @file{signing-key.sec} (private
2466 key, which must be kept secret.) When @var{parameters} is omitted,
2467 an ECDSA key using the Ed25519 curve is generated, or, for Libgcrypt
2468 versions before 1.6.0, it is a 4096-bit RSA key.
2469 Alternatively, @var{parameters} can specify
2470 @code{genkey} parameters suitable for Libgcrypt (@pxref{General
2471 public-key related Functions, @code{gcry_pk_genkey},, gcrypt, The
2472 Libgcrypt Reference Manual}).
2473
2474 @item --authorize
2475 @cindex authorizing, archives
2476 Authorize imports signed by the public key passed on standard input.
2477 The public key must be in ``s-expression advanced format''---i.e., the
2478 same format as the @file{signing-key.pub} file.
2479
2480 The list of authorized keys is kept in the human-editable file
2481 @file{/etc/guix/acl}. The file contains
2482 @url{http://people.csail.mit.edu/rivest/Sexp.txt, ``advanced-format
2483 s-expressions''} and is structured as an access-control list in the
2484 @url{http://theworld.com/~cme/spki.txt, Simple Public-Key Infrastructure
2485 (SPKI)}.
2486
2487 @item --extract=@var{directory}
2488 @itemx -x @var{directory}
2489 Read a single-item archive as served by substitute servers
2490 (@pxref{Substitutes}) and extract it to @var{directory}. This is a
2491 low-level operation needed in only very narrow use cases; see below.
2492
2493 For example, the following command extracts the substitute for Emacs
2494 served by @code{hydra.gnu.org} to @file{/tmp/emacs}:
2495
2496 @example
2497 $ wget -O - \
2498 https://hydra.gnu.org/nar/@dots{}-emacs-24.5 \
2499 | bunzip2 | guix archive -x /tmp/emacs
2500 @end example
2501
2502 Single-item archives are different from multiple-item archives produced
2503 by @command{guix archive --export}; they contain a single store item,
2504 and they do @emph{not} embed a signature. Thus this operation does
2505 @emph{no} signature verification and its output should be considered
2506 unsafe.
2507
2508 The primary purpose of this operation is to facilitate inspection of
2509 archive contents coming from possibly untrusted substitute servers.
2510
2511 @end table
2512
2513 @c *********************************************************************
2514 @node Programming Interface
2515 @chapter Programming Interface
2516
2517 GNU Guix provides several Scheme programming interfaces (APIs) to
2518 define, build, and query packages. The first interface allows users to
2519 write high-level package definitions. These definitions refer to
2520 familiar packaging concepts, such as the name and version of a package,
2521 its build system, and its dependencies. These definitions can then be
2522 turned into concrete build actions.
2523
2524 Build actions are performed by the Guix daemon, on behalf of users. In a
2525 standard setup, the daemon has write access to the store---the
2526 @file{/gnu/store} directory---whereas users do not. The recommended
2527 setup also has the daemon perform builds in chroots, under a specific
2528 build users, to minimize interference with the rest of the system.
2529
2530 @cindex derivation
2531 Lower-level APIs are available to interact with the daemon and the
2532 store. To instruct the daemon to perform a build action, users actually
2533 provide it with a @dfn{derivation}. A derivation is a low-level
2534 representation of the build actions to be taken, and the environment in
2535 which they should occur---derivations are to package definitions what
2536 assembly is to C programs. The term ``derivation'' comes from the fact
2537 that build results @emph{derive} from them.
2538
2539 This chapter describes all these APIs in turn, starting from high-level
2540 package definitions.
2541
2542 @menu
2543 * Defining Packages:: Defining new packages.
2544 * Build Systems:: Specifying how packages are built.
2545 * The Store:: Manipulating the package store.
2546 * Derivations:: Low-level interface to package derivations.
2547 * The Store Monad:: Purely functional interface to the store.
2548 * G-Expressions:: Manipulating build expressions.
2549 @end menu
2550
2551 @node Defining Packages
2552 @section Defining Packages
2553
2554 The high-level interface to package definitions is implemented in the
2555 @code{(guix packages)} and @code{(guix build-system)} modules. As an
2556 example, the package definition, or @dfn{recipe}, for the GNU Hello
2557 package looks like this:
2558
2559 @example
2560 (define-module (gnu packages hello)
2561 #:use-module (guix packages)
2562 #:use-module (guix download)
2563 #:use-module (guix build-system gnu)
2564 #:use-module (guix licenses)
2565 #:use-module (gnu packages gawk))
2566
2567 (define-public hello
2568 (package
2569 (name "hello")
2570 (version "2.10")
2571 (source (origin
2572 (method url-fetch)
2573 (uri (string-append "mirror://gnu/hello/hello-" version
2574 ".tar.gz"))
2575 (sha256
2576 (base32
2577 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
2578 (build-system gnu-build-system)
2579 (arguments '(#:configure-flags '("--enable-silent-rules")))
2580 (inputs `(("gawk" ,gawk)))
2581 (synopsis "Hello, GNU world: An example GNU package")
2582 (description "Guess what GNU Hello prints!")
2583 (home-page "http://www.gnu.org/software/hello/")
2584 (license gpl3+)))
2585 @end example
2586
2587 @noindent
2588 Without being a Scheme expert, the reader may have guessed the meaning
2589 of the various fields here. This expression binds the variable
2590 @code{hello} to a @code{<package>} object, which is essentially a record
2591 (@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}).
2592 This package object can be inspected using procedures found in the
2593 @code{(guix packages)} module; for instance, @code{(package-name hello)}
2594 returns---surprise!---@code{"hello"}.
2595
2596 With luck, you may be able to import part or all of the definition of
2597 the package you are interested in from another repository, using the
2598 @code{guix import} command (@pxref{Invoking guix import}).
2599
2600 In the example above, @var{hello} is defined in a module of its own,
2601 @code{(gnu packages hello)}. Technically, this is not strictly
2602 necessary, but it is convenient to do so: all the packages defined in
2603 modules under @code{(gnu packages @dots{})} are automatically known to
2604 the command-line tools (@pxref{Package Modules}).
2605
2606 There are a few points worth noting in the above package definition:
2607
2608 @itemize
2609 @item
2610 The @code{source} field of the package is an @code{<origin>} object
2611 (@pxref{origin Reference}, for the complete reference).
2612 Here, the @code{url-fetch} method from @code{(guix download)} is used,
2613 meaning that the source is a file to be downloaded over FTP or HTTP.
2614
2615 The @code{mirror://gnu} prefix instructs @code{url-fetch} to use one of
2616 the GNU mirrors defined in @code{(guix download)}.
2617
2618 The @code{sha256} field specifies the expected SHA256 hash of the file
2619 being downloaded. It is mandatory, and allows Guix to check the
2620 integrity of the file. The @code{(base32 @dots{})} form introduces the
2621 base32 representation of the hash. You can obtain this information with
2622 @code{guix download} (@pxref{Invoking guix download}) and @code{guix
2623 hash} (@pxref{Invoking guix hash}).
2624
2625 @cindex patches
2626 When needed, the @code{origin} form can also have a @code{patches} field
2627 listing patches to be applied, and a @code{snippet} field giving a
2628 Scheme expression to modify the source code.
2629
2630 @item
2631 @cindex GNU Build System
2632 The @code{build-system} field specifies the procedure to build the
2633 package (@pxref{Build Systems}). Here, @var{gnu-build-system}
2634 represents the familiar GNU Build System, where packages may be
2635 configured, built, and installed with the usual @code{./configure &&
2636 make && make check && make install} command sequence.
2637
2638 @item
2639 The @code{arguments} field specifies options for the build system
2640 (@pxref{Build Systems}). Here it is interpreted by
2641 @var{gnu-build-system} as a request run @file{configure} with the
2642 @code{--enable-silent-rules} flag.
2643
2644 @cindex quote
2645 @cindex quoting
2646 @findex '
2647 @findex quote
2648 What about these quote (@code{'}) characters? They are Scheme syntax to
2649 introduce a literal list; @code{'} is synonymous with @code{quote}.
2650 @xref{Expression Syntax, quoting,, guile, GNU Guile Reference Manual},
2651 for details. Here the value of the @code{arguments} field is a list of
2652 arguments passed to the build system down the road, as with @code{apply}
2653 (@pxref{Fly Evaluation, @code{apply},, guile, GNU Guile Reference
2654 Manual}).
2655
2656 The hash-colon (@code{#:}) sequence defines a Scheme @dfn{keyword}
2657 (@pxref{Keywords,,, guile, GNU Guile Reference Manual}), and
2658 @code{#:configure-flags} is a keyword used to pass a keyword argument
2659 to the build system (@pxref{Coding With Keywords,,, guile, GNU Guile
2660 Reference Manual}).
2661
2662 @item
2663 The @code{inputs} field specifies inputs to the build process---i.e.,
2664 build-time or run-time dependencies of the package. Here, we define an
2665 input called @code{"gawk"} whose value is that of the @var{gawk}
2666 variable; @var{gawk} is itself bound to a @code{<package>} object.
2667
2668 @cindex backquote (quasiquote)
2669 @findex `
2670 @findex quasiquote
2671 @cindex comma (unquote)
2672 @findex ,
2673 @findex unquote
2674 @findex ,@@
2675 @findex unquote-splicing
2676 Again, @code{`} (a backquote, synonymous with @code{quasiquote}) allows
2677 us to introduce a literal list in the @code{inputs} field, while
2678 @code{,} (a comma, synonymous with @code{unquote}) allows us to insert a
2679 value in that list (@pxref{Expression Syntax, unquote,, guile, GNU Guile
2680 Reference Manual}).
2681
2682 Note that GCC, Coreutils, Bash, and other essential tools do not need to
2683 be specified as inputs here. Instead, @var{gnu-build-system} takes care
2684 of ensuring that they are present (@pxref{Build Systems}).
2685
2686 However, any other dependencies need to be specified in the
2687 @code{inputs} field. Any dependency not specified here will simply be
2688 unavailable to the build process, possibly leading to a build failure.
2689 @end itemize
2690
2691 @xref{package Reference}, for a full description of possible fields.
2692
2693 Once a package definition is in place, the
2694 package may actually be built using the @code{guix build} command-line
2695 tool (@pxref{Invoking guix build}). You can easily jump back to the
2696 package definition using the @command{guix edit} command
2697 (@pxref{Invoking guix edit}).
2698 @xref{Packaging Guidelines}, for
2699 more information on how to test package definitions, and
2700 @ref{Invoking guix lint}, for information on how to check a definition
2701 for style conformance.
2702
2703 Finally, updating the package definition to a new upstream version
2704 can be partly automated by the @command{guix refresh} command
2705 (@pxref{Invoking guix refresh}).
2706
2707 Behind the scenes, a derivation corresponding to the @code{<package>}
2708 object is first computed by the @code{package-derivation} procedure.
2709 That derivation is stored in a @code{.drv} file under @file{/gnu/store}.
2710 The build actions it prescribes may then be realized by using the
2711 @code{build-derivations} procedure (@pxref{The Store}).
2712
2713 @deffn {Scheme Procedure} package-derivation @var{store} @var{package} [@var{system}]
2714 Return the @code{<derivation>} object of @var{package} for @var{system}
2715 (@pxref{Derivations}).
2716
2717 @var{package} must be a valid @code{<package>} object, and @var{system}
2718 must be a string denoting the target system type---e.g.,
2719 @code{"x86_64-linux"} for an x86_64 Linux-based GNU system. @var{store}
2720 must be a connection to the daemon, which operates on the store
2721 (@pxref{The Store}).
2722 @end deffn
2723
2724 @noindent
2725 @cindex cross-compilation
2726 Similarly, it is possible to compute a derivation that cross-builds a
2727 package for some other system:
2728
2729 @deffn {Scheme Procedure} package-cross-derivation @var{store} @
2730 @var{package} @var{target} [@var{system}]
2731 Return the @code{<derivation>} object of @var{package} cross-built from
2732 @var{system} to @var{target}.
2733
2734 @var{target} must be a valid GNU triplet denoting the target hardware
2735 and operating system, such as @code{"mips64el-linux-gnu"}
2736 (@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
2737 Configure and Build System}).
2738 @end deffn
2739
2740 @cindex package transformations
2741 @cindex input rewriting
2742 @cindex dependency tree rewriting
2743 Packages can be manipulated in arbitrary ways. An example of a useful
2744 transformation is @dfn{input rewriting}, whereby the dependency tree of
2745 a package is rewritten by replacing specific inputs by others:
2746
2747 @deffn {Scheme Procedure} package-input-rewriting @var{replacements} @
2748 [@var{rewrite-name}]
2749 Return a procedure that, when passed a package, replaces its direct and
2750 indirect dependencies (but not its implicit inputs) according to
2751 @var{replacements}. @var{replacements} is a list of package pairs; the
2752 first element of each pair is the package to replace, and the second one
2753 is the replacement.
2754
2755 Optionally, @var{rewrite-name} is a one-argument procedure that takes
2756 the name of a package and returns its new name after rewrite.
2757 @end deffn
2758
2759 @noindent
2760 Consider this example:
2761
2762 @example
2763 (define libressl-instead-of-openssl
2764 ;; This is a procedure to replace OPENSSL by LIBRESSL,
2765 ;; recursively.
2766 (package-input-rewriting `((,openssl . ,libressl))))
2767
2768 (define git-with-libressl
2769 (libressl-instead-of-openssl git))
2770 @end example
2771
2772 @noindent
2773 Here we first define a rewriting procedure that replaces @var{openssl}
2774 with @var{libressl}. Then we use it to define a @dfn{variant} of the
2775 @var{git} package that uses @var{libressl} instead of @var{openssl}.
2776 This is exactly what the @option{--with-input} command-line option does
2777 (@pxref{Package Transformation Options, @option{--with-input}}).
2778
2779 @menu
2780 * package Reference :: The package data type.
2781 * origin Reference:: The origin data type.
2782 @end menu
2783
2784
2785 @node package Reference
2786 @subsection @code{package} Reference
2787
2788 This section summarizes all the options available in @code{package}
2789 declarations (@pxref{Defining Packages}).
2790
2791 @deftp {Data Type} package
2792 This is the data type representing a package recipe.
2793
2794 @table @asis
2795 @item @code{name}
2796 The name of the package, as a string.
2797
2798 @item @code{version}
2799 The version of the package, as a string.
2800
2801 @item @code{source}
2802 An object telling how the source code for the package should be
2803 acquired. Most of the time, this is an @code{origin} object, which
2804 denotes a file fetched from the Internet (@pxref{origin Reference}). It
2805 can also be any other ``file-like'' object such as a @code{local-file},
2806 which denotes a file from the local file system (@pxref{G-Expressions,
2807 @code{local-file}}).
2808
2809 @item @code{build-system}
2810 The build system that should be used to build the package (@pxref{Build
2811 Systems}).
2812
2813 @item @code{arguments} (default: @code{'()})
2814 The arguments that should be passed to the build system. This is a
2815 list, typically containing sequential keyword-value pairs.
2816
2817 @item @code{inputs} (default: @code{'()})
2818 @itemx @code{native-inputs} (default: @code{'()})
2819 @itemx @code{propagated-inputs} (default: @code{'()})
2820 @cindex inputs, of packages
2821 These fields list dependencies of the package. Each one is a list of
2822 tuples, where each tuple has a label for the input (a string) as its
2823 first element, a package, origin, or derivation as its second element,
2824 and optionally the name of the output thereof that should be used, which
2825 defaults to @code{"out"} (@pxref{Packages with Multiple Outputs}, for
2826 more on package outputs). For example, the list below specifies three
2827 inputs:
2828
2829 @example
2830 `(("libffi" ,libffi)
2831 ("libunistring" ,libunistring)
2832 ("glib:bin" ,glib "bin")) ;the "bin" output of Glib
2833 @end example
2834
2835 @cindex cross compilation, package dependencies
2836 The distinction between @code{native-inputs} and @code{inputs} is
2837 necessary when considering cross-compilation. When cross-compiling,
2838 dependencies listed in @code{inputs} are built for the @emph{target}
2839 architecture; conversely, dependencies listed in @code{native-inputs}
2840 are built for the architecture of the @emph{build} machine.
2841
2842 @code{native-inputs} is typically used to list tools needed at
2843 build time, but not at run time, such as Autoconf, Automake, pkg-config,
2844 Gettext, or Bison. @command{guix lint} can report likely mistakes in
2845 this area (@pxref{Invoking guix lint}).
2846
2847 @anchor{package-propagated-inputs}
2848 Lastly, @code{propagated-inputs} is similar to @code{inputs}, but the
2849 specified packages will be automatically installed alongside the package
2850 they belong to (@pxref{package-cmd-propagated-inputs, @command{guix
2851 package}}, for information on how @command{guix package} deals with
2852 propagated inputs.)
2853
2854 For example this is necessary when a C/C++ library needs headers of
2855 another library to compile, or when a pkg-config file refers to another
2856 one @i{via} its @code{Requires} field.
2857
2858 Another example where @code{propagated-inputs} is useful is for languages
2859 that lack a facility to record the run-time search path akin to the
2860 @code{RUNPATH} of ELF files; this includes Guile, Python, Perl, and
2861 more. To ensure that libraries written in those languages can find
2862 library code they depend on at run time, run-time dependencies must be
2863 listed in @code{propagated-inputs} rather than @code{inputs}.
2864
2865 @item @code{self-native-input?} (default: @code{#f})
2866 This is a Boolean field telling whether the package should use itself as
2867 a native input when cross-compiling.
2868
2869 @item @code{outputs} (default: @code{'("out")})
2870 The list of output names of the package. @xref{Packages with Multiple
2871 Outputs}, for typical uses of additional outputs.
2872
2873 @item @code{native-search-paths} (default: @code{'()})
2874 @itemx @code{search-paths} (default: @code{'()})
2875 A list of @code{search-path-specification} objects describing
2876 search-path environment variables honored by the package.
2877
2878 @item @code{replacement} (default: @code{#f})
2879 This must be either @code{#f} or a package object that will be used as a
2880 @dfn{replacement} for this package. @xref{Security Updates, grafts},
2881 for details.
2882
2883 @item @code{synopsis}
2884 A one-line description of the package.
2885
2886 @item @code{description}
2887 A more elaborate description of the package.
2888
2889 @item @code{license}
2890 @cindex license, of packages
2891 The license of the package; a value from @code{(guix licenses)},
2892 or a list of such values.
2893
2894 @item @code{home-page}
2895 The URL to the home-page of the package, as a string.
2896
2897 @item @code{supported-systems} (default: @var{%supported-systems})
2898 The list of systems supported by the package, as strings of the form
2899 @code{architecture-kernel}, for example @code{"x86_64-linux"}.
2900
2901 @item @code{maintainers} (default: @code{'()})
2902 The list of maintainers of the package, as @code{maintainer} objects.
2903
2904 @item @code{location} (default: source location of the @code{package} form)
2905 The source location of the package. It is useful to override this when
2906 inheriting from another package, in which case this field is not
2907 automatically corrected.
2908 @end table
2909 @end deftp
2910
2911
2912 @node origin Reference
2913 @subsection @code{origin} Reference
2914
2915 This section summarizes all the options available in @code{origin}
2916 declarations (@pxref{Defining Packages}).
2917
2918 @deftp {Data Type} origin
2919 This is the data type representing a source code origin.
2920
2921 @table @asis
2922 @item @code{uri}
2923 An object containing the URI of the source. The object type depends on
2924 the @code{method} (see below). For example, when using the
2925 @var{url-fetch} method of @code{(guix download)}, the valid @code{uri}
2926 values are: a URL represented as a string, or a list thereof.
2927
2928 @item @code{method}
2929 A procedure that handles the URI.
2930
2931 Examples include:
2932
2933 @table @asis
2934 @item @var{url-fetch} from @code{(guix download)}
2935 download a file from the HTTP, HTTPS, or FTP URL specified in the
2936 @code{uri} field;
2937
2938 @vindex git-fetch
2939 @item @var{git-fetch} from @code{(guix git-download)}
2940 clone the Git version control repository, and check out the revision
2941 specified in the @code{uri} field as a @code{git-reference} object; a
2942 @code{git-reference} looks like this:
2943
2944 @example
2945 (git-reference
2946 (url "git://git.debian.org/git/pkg-shadow/shadow")
2947 (commit "v4.1.5.1"))
2948 @end example
2949 @end table
2950
2951 @item @code{sha256}
2952 A bytevector containing the SHA-256 hash of the source. Typically the
2953 @code{base32} form is used here to generate the bytevector from a
2954 base-32 string.
2955
2956 You can obtain this information using @code{guix download}
2957 (@pxref{Invoking guix download}) or @code{guix hash} (@pxref{Invoking
2958 guix hash}).
2959
2960 @item @code{file-name} (default: @code{#f})
2961 The file name under which the source code should be saved. When this is
2962 @code{#f}, a sensible default value will be used in most cases. In case
2963 the source is fetched from a URL, the file name from the URL will be
2964 used. For version control checkouts, it is recommended to provide the
2965 file name explicitly because the default is not very descriptive.
2966
2967 @item @code{patches} (default: @code{'()})
2968 A list of file names containing patches to be applied to the source.
2969
2970 This list of patches must be unconditional. In particular, it cannot
2971 depend on the value of @code{%current-system} or
2972 @code{%current-target-system}.
2973
2974 @item @code{snippet} (default: @code{#f})
2975 A G-expression (@pxref{G-Expressions}) or S-expression that will be run
2976 in the source directory. This is a convenient way to modify the source,
2977 sometimes more convenient than a patch.
2978
2979 @item @code{patch-flags} (default: @code{'("-p1")})
2980 A list of command-line flags that should be passed to the @code{patch}
2981 command.
2982
2983 @item @code{patch-inputs} (default: @code{#f})
2984 Input packages or derivations to the patching process. When this is
2985 @code{#f}, the usual set of inputs necessary for patching are provided,
2986 such as GNU@tie{}Patch.
2987
2988 @item @code{modules} (default: @code{'()})
2989 A list of Guile modules that should be loaded during the patching
2990 process and while running the code in the @code{snippet} field.
2991
2992 @item @code{patch-guile} (default: @code{#f})
2993 The Guile package that should be used in the patching process. When
2994 this is @code{#f}, a sensible default is used.
2995 @end table
2996 @end deftp
2997
2998
2999 @node Build Systems
3000 @section Build Systems
3001
3002 @cindex build system
3003 Each package definition specifies a @dfn{build system} and arguments for
3004 that build system (@pxref{Defining Packages}). This @code{build-system}
3005 field represents the build procedure of the package, as well as implicit
3006 dependencies of that build procedure.
3007
3008 Build systems are @code{<build-system>} objects. The interface to
3009 create and manipulate them is provided by the @code{(guix build-system)}
3010 module, and actual build systems are exported by specific modules.
3011
3012 @cindex bag (low-level package representation)
3013 Under the hood, build systems first compile package objects to
3014 @dfn{bags}. A @dfn{bag} is like a package, but with less
3015 ornamentation---in other words, a bag is a lower-level representation of
3016 a package, which includes all the inputs of that package, including some
3017 that were implicitly added by the build system. This intermediate
3018 representation is then compiled to a derivation (@pxref{Derivations}).
3019
3020 Build systems accept an optional list of @dfn{arguments}. In package
3021 definitions, these are passed @i{via} the @code{arguments} field
3022 (@pxref{Defining Packages}). They are typically keyword arguments
3023 (@pxref{Optional Arguments, keyword arguments in Guile,, guile, GNU
3024 Guile Reference Manual}). The value of these arguments is usually
3025 evaluated in the @dfn{build stratum}---i.e., by a Guile process launched
3026 by the daemon (@pxref{Derivations}).
3027
3028 The main build system is @var{gnu-build-system}, which implements the
3029 standard build procedure for GNU and many other packages. It
3030 is provided by the @code{(guix build-system gnu)} module.
3031
3032 @defvr {Scheme Variable} gnu-build-system
3033 @var{gnu-build-system} represents the GNU Build System, and variants
3034 thereof (@pxref{Configuration, configuration and makefile conventions,,
3035 standards, GNU Coding Standards}).
3036
3037 @cindex build phases
3038 In a nutshell, packages using it are configured, built, and installed with
3039 the usual @code{./configure && make && make check && make install}
3040 command sequence. In practice, a few additional steps are often needed.
3041 All these steps are split up in separate @dfn{phases},
3042 notably@footnote{Please see the @code{(guix build gnu-build-system)}
3043 modules for more details about the build phases.}:
3044
3045 @table @code
3046 @item unpack
3047 Unpack the source tarball, and change the current directory to the
3048 extracted source tree. If the source is actually a directory, copy it
3049 to the build tree, and enter that directory.
3050
3051 @item patch-source-shebangs
3052 Patch shebangs encountered in source files so they refer to the right
3053 store file names. For instance, this changes @code{#!/bin/sh} to
3054 @code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
3055
3056 @item configure
3057 Run the @file{configure} script with a number of default options, such
3058 as @code{--prefix=/gnu/store/@dots{}}, as well as the options specified
3059 by the @code{#:configure-flags} argument.
3060
3061 @item build
3062 Run @code{make} with the list of flags specified with
3063 @code{#:make-flags}. If the @code{#:parallel-build?} argument is true
3064 (the default), build with @code{make -j}.
3065
3066 @item check
3067 Run @code{make check}, or some other target specified with
3068 @code{#:test-target}, unless @code{#:tests? #f} is passed. If the
3069 @code{#:parallel-tests?} argument is true (the default), run @code{make
3070 check -j}.
3071
3072 @item install
3073 Run @code{make install} with the flags listed in @code{#:make-flags}.
3074
3075 @item patch-shebangs
3076 Patch shebangs on the installed executable files.
3077
3078 @item strip
3079 Strip debugging symbols from ELF files (unless @code{#:strip-binaries?}
3080 is false), copying them to the @code{debug} output when available
3081 (@pxref{Installing Debugging Files}).
3082 @end table
3083
3084 @vindex %standard-phases
3085 The build-side module @code{(guix build gnu-build-system)} defines
3086 @var{%standard-phases} as the default list of build phases.
3087 @var{%standard-phases} is a list of symbol/procedure pairs, where the
3088 procedure implements the actual phase.
3089
3090 The list of phases used for a particular package can be changed with the
3091 @code{#:phases} parameter. For instance, passing:
3092
3093 @example
3094 #:phases (modify-phases %standard-phases (delete 'configure))
3095 @end example
3096
3097 means that all the phases described above will be used, except the
3098 @code{configure} phase.
3099
3100 In addition, this build system ensures that the ``standard'' environment
3101 for GNU packages is available. This includes tools such as GCC, libc,
3102 Coreutils, Bash, Make, Diffutils, grep, and sed (see the @code{(guix
3103 build-system gnu)} module for a complete list). We call these the
3104 @dfn{implicit inputs} of a package, because package definitions do not
3105 have to mention them.
3106 @end defvr
3107
3108 Other @code{<build-system>} objects are defined to support other
3109 conventions and tools used by free software packages. They inherit most
3110 of @var{gnu-build-system}, and differ mainly in the set of inputs
3111 implicitly added to the build process, and in the list of phases
3112 executed. Some of these build systems are listed below.
3113
3114 @defvr {Scheme Variable} ant-build-system
3115 This variable is exported by @code{(guix build-system ant)}. It
3116 implements the build procedure for Java packages that can be built with
3117 @url{http://ant.apache.org/, Ant build tool}.
3118
3119 It adds both @code{ant} and the @dfn{Java Development Kit} (JDK) as
3120 provided by the @code{icedtea} package to the set of inputs. Different
3121 packages can be specified with the @code{#:ant} and @code{#:jdk}
3122 parameters, respectively.
3123
3124 When the original package does not provide a suitable Ant build file,
3125 the parameter @code{#:jar-name} can be used to generate a minimal Ant
3126 build file @file{build.xml} with tasks to build the specified jar
3127 archive.
3128
3129 The parameter @code{#:build-target} can be used to specify the Ant task
3130 that should be run during the @code{build} phase. By default the
3131 ``jar'' task will be run.
3132
3133 @end defvr
3134
3135 @defvr {Scheme Variable} asdf-build-system/source
3136 @defvrx {Scheme Variable} asdf-build-system/sbcl
3137 @defvrx {Scheme Variable} asdf-build-system/ecl
3138
3139 These variables, exported by @code{(guix build-system asdf)}, implement
3140 build procedures for Common Lisp packages using
3141 @url{https://common-lisp.net/project/asdf/, ``ASDF''}. ASDF is a system
3142 definition facility for Common Lisp programs and libraries.
3143
3144 The @code{asdf-build-system/source} system installs the packages in
3145 source form, and can be loaded using any common lisp implementation, via
3146 ASDF. The others, such as @code{asdf-build-system/sbcl}, install binary
3147 systems in the format which a particular implementation understands.
3148 These build systems can also be used to produce executable programs, or
3149 lisp images which contain a set of packages pre-loaded.
3150
3151 The build system uses naming conventions. For binary packages, the
3152 package itself as well as its run-time dependencies should begin their
3153 name with the lisp implementation, such as @code{sbcl-} for
3154 @code{asdf-build-system/sbcl}. Beginning the input name with this
3155 prefix will allow the build system to encode its location into the
3156 resulting library, so that the input can be found at run-time.
3157
3158 If dependencies are used only for tests, it is convenient to use a
3159 different prefix in order to avoid having a run-time dependency on such
3160 systems. For example,
3161
3162 @example
3163 (define-public sbcl-bordeaux-threads
3164 (package
3165 ...
3166 (native-inputs `(("tests:cl-fiveam" ,sbcl-fiveam)))
3167 ...))
3168 @end example
3169
3170 Additionally, the corresponding source package should be labeled using
3171 the same convention as python packages (see @ref{Python Modules}), using
3172 the @code{cl-} prefix.
3173
3174 For binary packages, each system should be defined as a Guix package.
3175 If one package @code{origin} contains several systems, package variants
3176 can be created in order to build all the systems. Source packages,
3177 which use @code{asdf-build-system/source}, may contain several systems.
3178
3179 In order to create executable programs and images, the build-side
3180 procedures @code{build-program} and @code{build-image} can be used.
3181 They should be called in a build phase after the @code{create-symlinks}
3182 phase, so that the system which was just built can be used within the
3183 resulting image. @code{build-program} requires a list of Common Lisp
3184 expressions to be passed as the @code{#:entry-program} argument.
3185
3186 If the system is not defined within its own @code{.asd} file of the same
3187 name, then the @code{#:asd-file} parameter should be used to specify
3188 which file the system is defined in.
3189
3190 @end defvr
3191
3192 @defvr {Scheme Variable} cargo-build-system
3193 @cindex Rust programming language
3194 @cindex Cargo (Rust build system)
3195 This variable is exported by @code{(guix build-system cargo)}. It
3196 supports builds of packages using Cargo, the build tool of the
3197 @uref{https://www.rust-lang.org, Rust programming language}.
3198
3199 In its @code{configure} phase, this build system replaces dependencies
3200 specified in the @file{Carto.toml} file with inputs to the Guix package.
3201 The @code{install} phase installs the binaries, and it also installs the
3202 source code and @file{Cargo.toml} file.
3203 @end defvr
3204
3205 @defvr {Scheme Variable} cmake-build-system
3206 This variable is exported by @code{(guix build-system cmake)}. It
3207 implements the build procedure for packages using the
3208 @url{http://www.cmake.org, CMake build tool}.
3209
3210 It automatically adds the @code{cmake} package to the set of inputs.
3211 Which package is used can be specified with the @code{#:cmake}
3212 parameter.
3213
3214 The @code{#:configure-flags} parameter is taken as a list of flags
3215 passed to the @command{cmake} command. The @code{#:build-type}
3216 parameter specifies in abstract terms the flags passed to the compiler;
3217 it defaults to @code{"RelWithDebInfo"} (short for ``release mode with
3218 debugging information''), which roughly means that code is compiled with
3219 @code{-O2 -g}, as is the case for Autoconf-based packages by default.
3220 @end defvr
3221
3222 @defvr {Scheme Variable} glib-or-gtk-build-system
3223 This variable is exported by @code{(guix build-system glib-or-gtk)}. It
3224 is intended for use with packages making use of GLib or GTK+.
3225
3226 This build system adds the following two phases to the ones defined by
3227 @var{gnu-build-system}:
3228
3229 @table @code
3230 @item glib-or-gtk-wrap
3231 The phase @code{glib-or-gtk-wrap} ensures that programs in
3232 @file{bin/} are able to find GLib ``schemas'' and
3233 @uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, GTK+
3234 modules}. This is achieved by wrapping the programs in launch scripts
3235 that appropriately set the @code{XDG_DATA_DIRS} and @code{GTK_PATH}
3236 environment variables.
3237
3238 It is possible to exclude specific package outputs from that wrapping
3239 process by listing their names in the
3240 @code{#:glib-or-gtk-wrap-excluded-outputs} parameter. This is useful
3241 when an output is known not to contain any GLib or GTK+ binaries, and
3242 where wrapping would gratuitously add a dependency of that output on
3243 GLib and GTK+.
3244
3245 @item glib-or-gtk-compile-schemas
3246 The phase @code{glib-or-gtk-compile-schemas} makes sure that all
3247 @uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
3248 GSettings schemas} of GLib are compiled. Compilation is performed by the
3249 @command{glib-compile-schemas} program. It is provided by the package
3250 @code{glib:bin} which is automatically imported by the build system.
3251 The @code{glib} package providing @command{glib-compile-schemas} can be
3252 specified with the @code{#:glib} parameter.
3253 @end table
3254
3255 Both phases are executed after the @code{install} phase.
3256 @end defvr
3257
3258 @defvr {Scheme Variable} python-build-system
3259 This variable is exported by @code{(guix build-system python)}. It
3260 implements the more or less standard build procedure used by Python
3261 packages, which consists in running @code{python setup.py build} and
3262 then @code{python setup.py install --prefix=/gnu/store/@dots{}}.
3263
3264 For packages that install stand-alone Python programs under @code{bin/},
3265 it takes care of wrapping these programs so that their @code{PYTHONPATH}
3266 environment variable points to all the Python libraries they depend on.
3267
3268 Which Python package is used to perform the build can be specified with
3269 the @code{#:python} parameter. This is a useful way to force a package
3270 to be built for a specific version of the Python interpreter, which
3271 might be necessary if the package is only compatible with a single
3272 interpreter version.
3273
3274 By default guix calls @code{setup.py} under control of
3275 @code{setuptools}, much like @command{pip} does. Some packages are not
3276 compatible with setuptools (and pip), thus you can disable this by
3277 setting the @code{#:use-setuptools} parameter to @code{#f}.
3278 @end defvr
3279
3280 @defvr {Scheme Variable} perl-build-system
3281 This variable is exported by @code{(guix build-system perl)}. It
3282 implements the standard build procedure for Perl packages, which either
3283 consists in running @code{perl Build.PL --prefix=/gnu/store/@dots{}},
3284 followed by @code{Build} and @code{Build install}; or in running
3285 @code{perl Makefile.PL PREFIX=/gnu/store/@dots{}}, followed by
3286 @code{make} and @code{make install}, depending on which of
3287 @code{Build.PL} or @code{Makefile.PL} is present in the package
3288 distribution. Preference is given to the former if both @code{Build.PL}
3289 and @code{Makefile.PL} exist in the package distribution. This
3290 preference can be reversed by specifying @code{#t} for the
3291 @code{#:make-maker?} parameter.
3292
3293 The initial @code{perl Makefile.PL} or @code{perl Build.PL} invocation
3294 passes flags specified by the @code{#:make-maker-flags} or
3295 @code{#:module-build-flags} parameter, respectively.
3296
3297 Which Perl package is used can be specified with @code{#:perl}.
3298 @end defvr
3299
3300 @defvr {Scheme Variable} r-build-system
3301 This variable is exported by @code{(guix build-system r)}. It
3302 implements the build procedure used by @uref{http://r-project.org, R}
3303 packages, which essentially is little more than running @code{R CMD
3304 INSTALL --library=/gnu/store/@dots{}} in an environment where
3305 @code{R_LIBS_SITE} contains the paths to all R package inputs. Tests
3306 are run after installation using the R function
3307 @code{tools::testInstalledPackage}.
3308 @end defvr
3309
3310 @defvr {Scheme Variable} ruby-build-system
3311 This variable is exported by @code{(guix build-system ruby)}. It
3312 implements the RubyGems build procedure used by Ruby packages, which
3313 involves running @code{gem build} followed by @code{gem install}.
3314
3315 The @code{source} field of a package that uses this build system
3316 typically references a gem archive, since this is the format that Ruby
3317 developers use when releasing their software. The build system unpacks
3318 the gem archive, potentially patches the source, runs the test suite,
3319 repackages the gem, and installs it. Additionally, directories and
3320 tarballs may be referenced to allow building unreleased gems from Git or
3321 a traditional source release tarball.
3322
3323 Which Ruby package is used can be specified with the @code{#:ruby}
3324 parameter. A list of additional flags to be passed to the @command{gem}
3325 command can be specified with the @code{#:gem-flags} parameter.
3326 @end defvr
3327
3328 @defvr {Scheme Variable} waf-build-system
3329 This variable is exported by @code{(guix build-system waf)}. It
3330 implements a build procedure around the @code{waf} script. The common
3331 phases---@code{configure}, @code{build}, and @code{install}---are
3332 implemented by passing their names as arguments to the @code{waf}
3333 script.
3334
3335 The @code{waf} script is executed by the Python interpreter. Which
3336 Python package is used to run the script can be specified with the
3337 @code{#:python} parameter.
3338 @end defvr
3339
3340 @defvr {Scheme Variable} haskell-build-system
3341 This variable is exported by @code{(guix build-system haskell)}. It
3342 implements the Cabal build procedure used by Haskell packages, which
3343 involves running @code{runhaskell Setup.hs configure
3344 --prefix=/gnu/store/@dots{}} and @code{runhaskell Setup.hs build}.
3345 Instead of installing the package by running @code{runhaskell Setup.hs
3346 install}, to avoid trying to register libraries in the read-only
3347 compiler store directory, the build system uses @code{runhaskell
3348 Setup.hs copy}, followed by @code{runhaskell Setup.hs register}. In
3349 addition, the build system generates the package documentation by
3350 running @code{runhaskell Setup.hs haddock}, unless @code{#:haddock? #f}
3351 is passed. Optional Haddock parameters can be passed with the help of
3352 the @code{#:haddock-flags} parameter. If the file @code{Setup.hs} is
3353 not found, the build system looks for @code{Setup.lhs} instead.
3354
3355 Which Haskell compiler is used can be specified with the @code{#:haskell}
3356 parameter which defaults to @code{ghc}.
3357 @end defvr
3358
3359 @defvr {Scheme Variable} emacs-build-system
3360 This variable is exported by @code{(guix build-system emacs)}. It
3361 implements an installation procedure similar to the packaging system
3362 of Emacs itself (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
3363
3364 It first creates the @code{@var{package}-autoloads.el} file, then it
3365 byte compiles all Emacs Lisp files. Differently from the Emacs
3366 packaging system, the Info documentation files are moved to the standard
3367 documentation directory and the @file{dir} file is deleted. Each
3368 package is installed in its own directory under
3369 @file{share/emacs/site-lisp/guix.d}.
3370 @end defvr
3371
3372 Lastly, for packages that do not need anything as sophisticated, a
3373 ``trivial'' build system is provided. It is trivial in the sense that
3374 it provides basically no support: it does not pull any implicit inputs,
3375 and does not have a notion of build phases.
3376
3377 @defvr {Scheme Variable} trivial-build-system
3378 This variable is exported by @code{(guix build-system trivial)}.
3379
3380 This build system requires a @code{#:builder} argument. This argument
3381 must be a Scheme expression that builds the package output(s)---as
3382 with @code{build-expression->derivation} (@pxref{Derivations,
3383 @code{build-expression->derivation}}).
3384 @end defvr
3385
3386 @node The Store
3387 @section The Store
3388
3389 @cindex store
3390 @cindex store items
3391 @cindex store paths
3392
3393 Conceptually, the @dfn{store} is the place where derivations that have
3394 been built successfully are stored---by default, @file{/gnu/store}.
3395 Sub-directories in the store are referred to as @dfn{store items} or
3396 sometimes @dfn{store paths}. The store has an associated database that
3397 contains information such as the store paths referred to by each store
3398 path, and the list of @emph{valid} store items---results of successful
3399 builds. This database resides in @file{@var{localstatedir}/guix/db},
3400 where @var{localstatedir} is the state directory specified @i{via}
3401 @option{--localstatedir} at configure time, usually @file{/var}.
3402
3403 The store is @emph{always} accessed by the daemon on behalf of its clients
3404 (@pxref{Invoking guix-daemon}). To manipulate the store, clients
3405 connect to the daemon over a Unix-domain socket, send requests to it,
3406 and read the result---these are remote procedure calls, or RPCs.
3407
3408 @quotation Note
3409 Users must @emph{never} modify files under @file{/gnu/store} directly.
3410 This would lead to inconsistencies and break the immutability
3411 assumptions of Guix's functional model (@pxref{Introduction}).
3412
3413 @xref{Invoking guix gc, @command{guix gc --verify}}, for information on
3414 how to check the integrity of the store and attempt recovery from
3415 accidental modifications.
3416 @end quotation
3417
3418 The @code{(guix store)} module provides procedures to connect to the
3419 daemon, and to perform RPCs. These are described below.
3420
3421 @deffn {Scheme Procedure} open-connection [@var{file}] [#:reserve-space? #t]
3422 Connect to the daemon over the Unix-domain socket at @var{file}. When
3423 @var{reserve-space?} is true, instruct it to reserve a little bit of
3424 extra space on the file system so that the garbage collector can still
3425 operate should the disk become full. Return a server object.
3426
3427 @var{file} defaults to @var{%default-socket-path}, which is the normal
3428 location given the options that were passed to @command{configure}.
3429 @end deffn
3430
3431 @deffn {Scheme Procedure} close-connection @var{server}
3432 Close the connection to @var{server}.
3433 @end deffn
3434
3435 @defvr {Scheme Variable} current-build-output-port
3436 This variable is bound to a SRFI-39 parameter, which refers to the port
3437 where build and error logs sent by the daemon should be written.
3438 @end defvr
3439
3440 Procedures that make RPCs all take a server object as their first
3441 argument.
3442
3443 @deffn {Scheme Procedure} valid-path? @var{server} @var{path}
3444 @cindex invalid store items
3445 Return @code{#t} when @var{path} designates a valid store item and
3446 @code{#f} otherwise (an invalid item may exist on disk but still be
3447 invalid, for instance because it is the result of an aborted or failed
3448 build.)
3449
3450 A @code{&nix-protocol-error} condition is raised if @var{path} is not
3451 prefixed by the store directory (@file{/gnu/store}).
3452 @end deffn
3453
3454 @deffn {Scheme Procedure} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
3455 Add @var{text} under file @var{name} in the store, and return its store
3456 path. @var{references} is the list of store paths referred to by the
3457 resulting store path.
3458 @end deffn
3459
3460 @deffn {Scheme Procedure} build-derivations @var{server} @var{derivations}
3461 Build @var{derivations} (a list of @code{<derivation>} objects or
3462 derivation paths), and return when the worker is done building them.
3463 Return @code{#t} on success.
3464 @end deffn
3465
3466 Note that the @code{(guix monads)} module provides a monad as well as
3467 monadic versions of the above procedures, with the goal of making it
3468 more convenient to work with code that accesses the store (@pxref{The
3469 Store Monad}).
3470
3471 @c FIXME
3472 @i{This section is currently incomplete.}
3473
3474 @node Derivations
3475 @section Derivations
3476
3477 @cindex derivations
3478 Low-level build actions and the environment in which they are performed
3479 are represented by @dfn{derivations}. A derivation contains the
3480 following pieces of information:
3481
3482 @itemize
3483 @item
3484 The outputs of the derivation---derivations produce at least one file or
3485 directory in the store, but may produce more.
3486
3487 @item
3488 The inputs of the derivations, which may be other derivations or plain
3489 files in the store (patches, build scripts, etc.)
3490
3491 @item
3492 The system type targeted by the derivation---e.g., @code{x86_64-linux}.
3493
3494 @item
3495 The file name of a build script in the store, along with the arguments
3496 to be passed.
3497
3498 @item
3499 A list of environment variables to be defined.
3500
3501 @end itemize
3502
3503 @cindex derivation path
3504 Derivations allow clients of the daemon to communicate build actions to
3505 the store. They exist in two forms: as an in-memory representation,
3506 both on the client- and daemon-side, and as files in the store whose
3507 name end in @code{.drv}---these files are referred to as @dfn{derivation
3508 paths}. Derivations paths can be passed to the @code{build-derivations}
3509 procedure to perform the build actions they prescribe (@pxref{The
3510 Store}).
3511
3512 The @code{(guix derivations)} module provides a representation of
3513 derivations as Scheme objects, along with procedures to create and
3514 otherwise manipulate derivations. The lowest-level primitive to create
3515 a derivation is the @code{derivation} procedure:
3516
3517 @deffn {Scheme Procedure} derivation @var{store} @var{name} @var{builder} @
3518 @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
3519 [#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
3520 [#:system (%current-system)] [#:references-graphs #f] @
3521 [#:allowed-references #f] [#:disallowed-references #f] @
3522 [#:leaked-env-vars #f] [#:local-build? #f] @
3523 [#:substitutable? #t]
3524 Build a derivation with the given arguments, and return the resulting
3525 @code{<derivation>} object.
3526
3527 When @var{hash} and @var{hash-algo} are given, a
3528 @dfn{fixed-output derivation} is created---i.e., one whose result is
3529 known in advance, such as a file download. If, in addition,
3530 @var{recursive?} is true, then that fixed output may be an executable
3531 file or a directory and @var{hash} must be the hash of an archive
3532 containing this output.
3533
3534 When @var{references-graphs} is true, it must be a list of file
3535 name/store path pairs. In that case, the reference graph of each store
3536 path is exported in the build environment in the corresponding file, in
3537 a simple text format.
3538
3539 When @var{allowed-references} is true, it must be a list of store items
3540 or outputs that the derivation's output may refer to. Likewise,
3541 @var{disallowed-references}, if true, must be a list of things the
3542 outputs may @emph{not} refer to.
3543
3544 When @var{leaked-env-vars} is true, it must be a list of strings
3545 denoting environment variables that are allowed to ``leak'' from the
3546 daemon's environment to the build environment. This is only applicable
3547 to fixed-output derivations---i.e., when @var{hash} is true. The main
3548 use is to allow variables such as @code{http_proxy} to be passed to
3549 derivations that download files.
3550
3551 When @var{local-build?} is true, declare that the derivation is not a
3552 good candidate for offloading and should rather be built locally
3553 (@pxref{Daemon Offload Setup}). This is the case for small derivations
3554 where the costs of data transfers would outweigh the benefits.
3555
3556 When @var{substitutable?} is false, declare that substitutes of the
3557 derivation's output should not be used (@pxref{Substitutes}). This is
3558 useful, for instance, when building packages that capture details of the
3559 host CPU instruction set.
3560 @end deffn
3561
3562 @noindent
3563 Here's an example with a shell script as its builder, assuming
3564 @var{store} is an open connection to the daemon, and @var{bash} points
3565 to a Bash executable in the store:
3566
3567 @lisp
3568 (use-modules (guix utils)
3569 (guix store)
3570 (guix derivations))
3571
3572 (let ((builder ; add the Bash script to the store
3573 (add-text-to-store store "my-builder.sh"
3574 "echo hello world > $out\n" '())))
3575 (derivation store "foo"
3576 bash `("-e" ,builder)
3577 #:inputs `((,bash) (,builder))
3578 #:env-vars '(("HOME" . "/homeless"))))
3579 @result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
3580 @end lisp
3581
3582 As can be guessed, this primitive is cumbersome to use directly. A
3583 better approach is to write build scripts in Scheme, of course! The
3584 best course of action for that is to write the build code as a
3585 ``G-expression'', and to pass it to @code{gexp->derivation}. For more
3586 information, @pxref{G-Expressions}.
3587
3588 Once upon a time, @code{gexp->derivation} did not exist and constructing
3589 derivations with build code written in Scheme was achieved with
3590 @code{build-expression->derivation}, documented below. This procedure
3591 is now deprecated in favor of the much nicer @code{gexp->derivation}.
3592
3593 @deffn {Scheme Procedure} build-expression->derivation @var{store} @
3594 @var{name} @var{exp} @
3595 [#:system (%current-system)] [#:inputs '()] @
3596 [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
3597 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
3598 [#:references-graphs #f] [#:allowed-references #f] @
3599 [#:disallowed-references #f] @
3600 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
3601 Return a derivation that executes Scheme expression @var{exp} as a
3602 builder for derivation @var{name}. @var{inputs} must be a list of
3603 @code{(name drv-path sub-drv)} tuples; when @var{sub-drv} is omitted,
3604 @code{"out"} is assumed. @var{modules} is a list of names of Guile
3605 modules from the current search path to be copied in the store,
3606 compiled, and made available in the load path during the execution of
3607 @var{exp}---e.g., @code{((guix build utils) (guix build
3608 gnu-build-system))}.
3609
3610 @var{exp} is evaluated in an environment where @code{%outputs} is bound
3611 to a list of output/path pairs, and where @code{%build-inputs} is bound
3612 to a list of string/output-path pairs made from @var{inputs}.
3613 Optionally, @var{env-vars} is a list of string pairs specifying the name
3614 and value of environment variables visible to the builder. The builder
3615 terminates by passing the result of @var{exp} to @code{exit}; thus, when
3616 @var{exp} returns @code{#f}, the build is considered to have failed.
3617
3618 @var{exp} is built using @var{guile-for-build} (a derivation). When
3619 @var{guile-for-build} is omitted or is @code{#f}, the value of the
3620 @code{%guile-for-build} fluid is used instead.
3621
3622 See the @code{derivation} procedure for the meaning of
3623 @var{references-graphs}, @var{allowed-references},
3624 @var{disallowed-references}, @var{local-build?}, and
3625 @var{substitutable?}.
3626 @end deffn
3627
3628 @noindent
3629 Here's an example of a single-output derivation that creates a directory
3630 containing one file:
3631
3632 @lisp
3633 (let ((builder '(let ((out (assoc-ref %outputs "out")))
3634 (mkdir out) ; create /gnu/store/@dots{}-goo
3635 (call-with-output-file (string-append out "/test")
3636 (lambda (p)
3637 (display '(hello guix) p))))))
3638 (build-expression->derivation store "goo" builder))
3639
3640 @result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
3641 @end lisp
3642
3643
3644 @node The Store Monad
3645 @section The Store Monad
3646
3647 @cindex monad
3648
3649 The procedures that operate on the store described in the previous
3650 sections all take an open connection to the build daemon as their first
3651 argument. Although the underlying model is functional, they either have
3652 side effects or depend on the current state of the store.
3653
3654 The former is inconvenient: the connection to the build daemon has to be
3655 carried around in all those functions, making it impossible to compose
3656 functions that do not take that parameter with functions that do. The
3657 latter can be problematic: since store operations have side effects
3658 and/or depend on external state, they have to be properly sequenced.
3659
3660 @cindex monadic values
3661 @cindex monadic functions
3662 This is where the @code{(guix monads)} module comes in. This module
3663 provides a framework for working with @dfn{monads}, and a particularly
3664 useful monad for our uses, the @dfn{store monad}. Monads are a
3665 construct that allows two things: associating ``context'' with values
3666 (in our case, the context is the store), and building sequences of
3667 computations (here computations include accesses to the store). Values
3668 in a monad---values that carry this additional context---are called
3669 @dfn{monadic values}; procedures that return such values are called
3670 @dfn{monadic procedures}.
3671
3672 Consider this ``normal'' procedure:
3673
3674 @example
3675 (define (sh-symlink store)
3676 ;; Return a derivation that symlinks the 'bash' executable.
3677 (let* ((drv (package-derivation store bash))
3678 (out (derivation->output-path drv))
3679 (sh (string-append out "/bin/bash")))
3680 (build-expression->derivation store "sh"
3681 `(symlink ,sh %output))))
3682 @end example
3683
3684 Using @code{(guix monads)} and @code{(guix gexp)}, it may be rewritten
3685 as a monadic function:
3686
3687 @example
3688 (define (sh-symlink)
3689 ;; Same, but return a monadic value.
3690 (mlet %store-monad ((drv (package->derivation bash)))
3691 (gexp->derivation "sh"
3692 #~(symlink (string-append #$drv "/bin/bash")
3693 #$output))))
3694 @end example
3695
3696 There are several things to note in the second version: the @code{store}
3697 parameter is now implicit and is ``threaded'' in the calls to the
3698 @code{package->derivation} and @code{gexp->derivation} monadic
3699 procedures, and the monadic value returned by @code{package->derivation}
3700 is @dfn{bound} using @code{mlet} instead of plain @code{let}.
3701
3702 As it turns out, the call to @code{package->derivation} can even be
3703 omitted since it will take place implicitly, as we will see later
3704 (@pxref{G-Expressions}):
3705
3706 @example
3707 (define (sh-symlink)
3708 (gexp->derivation "sh"
3709 #~(symlink (string-append #$bash "/bin/bash")
3710 #$output)))
3711 @end example
3712
3713 @c See
3714 @c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
3715 @c for the funny quote.
3716 Calling the monadic @code{sh-symlink} has no effect. As someone once
3717 said, ``you exit a monad like you exit a building on fire: by running''.
3718 So, to exit the monad and get the desired effect, one must use
3719 @code{run-with-store}:
3720
3721 @example
3722 (run-with-store (open-connection) (sh-symlink))
3723 @result{} /gnu/store/...-sh-symlink
3724 @end example
3725
3726 Note that the @code{(guix monad-repl)} module extends the Guile REPL with
3727 new ``meta-commands'' to make it easier to deal with monadic procedures:
3728 @code{run-in-store}, and @code{enter-store-monad}. The former is used
3729 to ``run'' a single monadic value through the store:
3730
3731 @example
3732 scheme@@(guile-user)> ,run-in-store (package->derivation hello)
3733 $1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
3734 @end example
3735
3736 The latter enters a recursive REPL, where all the return values are
3737 automatically run through the store:
3738
3739 @example
3740 scheme@@(guile-user)> ,enter-store-monad
3741 store-monad@@(guile-user) [1]> (package->derivation hello)
3742 $2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
3743 store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
3744 $3 = "/gnu/store/@dots{}-foo"
3745 store-monad@@(guile-user) [1]> ,q
3746 scheme@@(guile-user)>
3747 @end example
3748
3749 @noindent
3750 Note that non-monadic values cannot be returned in the
3751 @code{store-monad} REPL.
3752
3753 The main syntactic forms to deal with monads in general are provided by
3754 the @code{(guix monads)} module and are described below.
3755
3756 @deffn {Scheme Syntax} with-monad @var{monad} @var{body} ...
3757 Evaluate any @code{>>=} or @code{return} forms in @var{body} as being
3758 in @var{monad}.
3759 @end deffn
3760
3761 @deffn {Scheme Syntax} return @var{val}
3762 Return a monadic value that encapsulates @var{val}.
3763 @end deffn
3764
3765 @deffn {Scheme Syntax} >>= @var{mval} @var{mproc} ...
3766 @dfn{Bind} monadic value @var{mval}, passing its ``contents'' to monadic
3767 procedures @var{mproc}@dots{}@footnote{This operation is commonly
3768 referred to as ``bind'', but that name denotes an unrelated procedure in
3769 Guile. Thus we use this somewhat cryptic symbol inherited from the
3770 Haskell language.}. There can be one @var{mproc} or several of them, as
3771 in this example:
3772
3773 @example
3774 (run-with-state
3775 (with-monad %state-monad
3776 (>>= (return 1)
3777 (lambda (x) (return (+ 1 x)))
3778 (lambda (x) (return (* 2 x)))))
3779 'some-state)
3780
3781 @result{} 4
3782 @result{} some-state
3783 @end example
3784 @end deffn
3785
3786 @deffn {Scheme Syntax} mlet @var{monad} ((@var{var} @var{mval}) ...) @
3787 @var{body} ...
3788 @deffnx {Scheme Syntax} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
3789 @var{body} ...
3790 Bind the variables @var{var} to the monadic values @var{mval} in
3791 @var{body}. The form (@var{var} -> @var{val}) binds @var{var} to the
3792 ``normal'' value @var{val}, as per @code{let}.
3793
3794 @code{mlet*} is to @code{mlet} what @code{let*} is to @code{let}
3795 (@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
3796 @end deffn
3797
3798 @deffn {Scheme System} mbegin @var{monad} @var{mexp} ...
3799 Bind @var{mexp} and the following monadic expressions in sequence,
3800 returning the result of the last expression.
3801
3802 This is akin to @code{mlet}, except that the return values of the
3803 monadic expressions are ignored. In that sense, it is analogous to
3804 @code{begin}, but applied to monadic expressions.
3805 @end deffn
3806
3807 @cindex state monad
3808 The @code{(guix monads)} module provides the @dfn{state monad}, which
3809 allows an additional value---the state---to be @emph{threaded} through
3810 monadic procedure calls.
3811
3812 @defvr {Scheme Variable} %state-monad
3813 The state monad. Procedures in the state monad can access and change
3814 the state that is threaded.
3815
3816 Consider the example below. The @code{square} procedure returns a value
3817 in the state monad. It returns the square of its argument, but also
3818 increments the current state value:
3819
3820 @example
3821 (define (square x)
3822 (mlet %state-monad ((count (current-state)))
3823 (mbegin %state-monad
3824 (set-current-state (+ 1 count))
3825 (return (* x x)))))
3826
3827 (run-with-state (sequence %state-monad (map square (iota 3))) 0)
3828 @result{} (0 1 4)
3829 @result{} 3
3830 @end example
3831
3832 When ``run'' through @var{%state-monad}, we obtain that additional state
3833 value, which is the number of @code{square} calls.
3834 @end defvr
3835
3836 @deffn {Monadic Procedure} current-state
3837 Return the current state as a monadic value.
3838 @end deffn
3839
3840 @deffn {Monadic Procedure} set-current-state @var{value}
3841 Set the current state to @var{value} and return the previous state as a
3842 monadic value.
3843 @end deffn
3844
3845 @deffn {Monadic Procedure} state-push @var{value}
3846 Push @var{value} to the current state, which is assumed to be a list,
3847 and return the previous state as a monadic value.
3848 @end deffn
3849
3850 @deffn {Monadic Procedure} state-pop
3851 Pop a value from the current state and return it as a monadic value.
3852 The state is assumed to be a list.
3853 @end deffn
3854
3855 @deffn {Scheme Procedure} run-with-state @var{mval} [@var{state}]
3856 Run monadic value @var{mval} starting with @var{state} as the initial
3857 state. Return two values: the resulting value, and the resulting state.
3858 @end deffn
3859
3860 The main interface to the store monad, provided by the @code{(guix
3861 store)} module, is as follows.
3862
3863 @defvr {Scheme Variable} %store-monad
3864 The store monad---an alias for @var{%state-monad}.
3865
3866 Values in the store monad encapsulate accesses to the store. When its
3867 effect is needed, a value of the store monad must be ``evaluated'' by
3868 passing it to the @code{run-with-store} procedure (see below.)
3869 @end defvr
3870
3871 @deffn {Scheme Procedure} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
3872 Run @var{mval}, a monadic value in the store monad, in @var{store}, an
3873 open store connection.
3874 @end deffn
3875
3876 @deffn {Monadic Procedure} text-file @var{name} @var{text} [@var{references}]
3877 Return as a monadic value the absolute file name in the store of the file
3878 containing @var{text}, a string. @var{references} is a list of store items that the
3879 resulting text file refers to; it defaults to the empty list.
3880 @end deffn
3881
3882 @deffn {Monadic Procedure} interned-file @var{file} [@var{name}] @
3883 [#:recursive? #t] [#:select? (const #t)]
3884 Return the name of @var{file} once interned in the store. Use
3885 @var{name} as its store name, or the basename of @var{file} if
3886 @var{name} is omitted.
3887
3888 When @var{recursive?} is true, the contents of @var{file} are added
3889 recursively; if @var{file} designates a flat file and @var{recursive?}
3890 is true, its contents are added, and its permission bits are kept.
3891
3892 When @var{recursive?} is true, call @code{(@var{select?} @var{file}
3893 @var{stat})} for each directory entry, where @var{file} is the entry's
3894 absolute file name and @var{stat} is the result of @code{lstat}; exclude
3895 entries for which @var{select?} does not return true.
3896
3897 The example below adds a file to the store, under two different names:
3898
3899 @example
3900 (run-with-store (open-connection)
3901 (mlet %store-monad ((a (interned-file "README"))
3902 (b (interned-file "README" "LEGU-MIN")))
3903 (return (list a b))))
3904
3905 @result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
3906 @end example
3907
3908 @end deffn
3909
3910 The @code{(guix packages)} module exports the following package-related
3911 monadic procedures:
3912
3913 @deffn {Monadic Procedure} package-file @var{package} [@var{file}] @
3914 [#:system (%current-system)] [#:target #f] @
3915 [#:output "out"]
3916 Return as a monadic
3917 value in the absolute file name of @var{file} within the @var{output}
3918 directory of @var{package}. When @var{file} is omitted, return the name
3919 of the @var{output} directory of @var{package}. When @var{target} is
3920 true, use it as a cross-compilation target triplet.
3921 @end deffn
3922
3923 @deffn {Monadic Procedure} package->derivation @var{package} [@var{system}]
3924 @deffnx {Monadic Procedure} package->cross-derivation @var{package} @
3925 @var{target} [@var{system}]
3926 Monadic version of @code{package-derivation} and
3927 @code{package-cross-derivation} (@pxref{Defining Packages}).
3928 @end deffn
3929
3930
3931 @node G-Expressions
3932 @section G-Expressions
3933
3934 @cindex G-expression
3935 @cindex build code quoting
3936 So we have ``derivations'', which represent a sequence of build actions
3937 to be performed to produce an item in the store (@pxref{Derivations}).
3938 These build actions are performed when asking the daemon to actually
3939 build the derivations; they are run by the daemon in a container
3940 (@pxref{Invoking guix-daemon}).
3941
3942 @cindex strata of code
3943 It should come as no surprise that we like to write these build actions
3944 in Scheme. When we do that, we end up with two @dfn{strata} of Scheme
3945 code@footnote{The term @dfn{stratum} in this context was coined by
3946 Manuel Serrano et al.@: in the context of their work on Hop. Oleg
3947 Kiselyov, who has written insightful
3948 @url{http://okmij.org/ftp/meta-programming/#meta-scheme, essays and code
3949 on this topic}, refers to this kind of code generation as
3950 @dfn{staging}.}: the ``host code''---code that defines packages, talks
3951 to the daemon, etc.---and the ``build code''---code that actually
3952 performs build actions, such as making directories, invoking
3953 @command{make}, etc.
3954
3955 To describe a derivation and its build actions, one typically needs to
3956 embed build code inside host code. It boils down to manipulating build
3957 code as data, and the homoiconicity of Scheme---code has a direct
3958 representation as data---comes in handy for that. But we need more than
3959 the normal @code{quasiquote} mechanism in Scheme to construct build
3960 expressions.
3961
3962 The @code{(guix gexp)} module implements @dfn{G-expressions}, a form of
3963 S-expressions adapted to build expressions. G-expressions, or
3964 @dfn{gexps}, consist essentially of three syntactic forms: @code{gexp},
3965 @code{ungexp}, and @code{ungexp-splicing} (or simply: @code{#~},
3966 @code{#$}, and @code{#$@@}), which are comparable to
3967 @code{quasiquote}, @code{unquote}, and @code{unquote-splicing},
3968 respectively (@pxref{Expression Syntax, @code{quasiquote},, guile,
3969 GNU Guile Reference Manual}). However, there are major differences:
3970
3971 @itemize
3972 @item
3973 Gexps are meant to be written to a file and run or manipulated by other
3974 processes.
3975
3976 @item
3977 When a high-level object such as a package or derivation is unquoted
3978 inside a gexp, the result is as if its output file name had been
3979 introduced.
3980
3981 @item
3982 Gexps carry information about the packages or derivations they refer to,
3983 and these dependencies are automatically added as inputs to the build
3984 processes that use them.
3985 @end itemize
3986
3987 @cindex lowering, of high-level objects in gexps
3988 This mechanism is not limited to package and derivation
3989 objects: @dfn{compilers} able to ``lower'' other high-level objects to
3990 derivations or files in the store can be defined,
3991 such that these objects can also be inserted
3992 into gexps. For example, a useful type of high-level objects that can be
3993 inserted in a gexp is ``file-like objects'', which make it easy to
3994 add files to the store and to refer to them in
3995 derivations and such (see @code{local-file} and @code{plain-file}
3996 below.)
3997
3998 To illustrate the idea, here is an example of a gexp:
3999
4000 @example
4001 (define build-exp
4002 #~(begin
4003 (mkdir #$output)
4004 (chdir #$output)
4005 (symlink (string-append #$coreutils "/bin/ls")
4006 "list-files")))
4007 @end example
4008
4009 This gexp can be passed to @code{gexp->derivation}; we obtain a
4010 derivation that builds a directory containing exactly one symlink to
4011 @file{/gnu/store/@dots{}-coreutils-8.22/bin/ls}:
4012
4013 @example
4014 (gexp->derivation "the-thing" build-exp)
4015 @end example
4016
4017 As one would expect, the @code{"/gnu/store/@dots{}-coreutils-8.22"} string is
4018 substituted to the reference to the @var{coreutils} package in the
4019 actual build code, and @var{coreutils} is automatically made an input to
4020 the derivation. Likewise, @code{#$output} (equivalent to @code{(ungexp
4021 output)}) is replaced by a string containing the directory name of the
4022 output of the derivation.
4023
4024 @cindex cross compilation
4025 In a cross-compilation context, it is useful to distinguish between
4026 references to the @emph{native} build of a package---that can run on the
4027 host---versus references to cross builds of a package. To that end, the
4028 @code{#+} plays the same role as @code{#$}, but is a reference to a
4029 native package build:
4030
4031 @example
4032 (gexp->derivation "vi"
4033 #~(begin
4034 (mkdir #$output)
4035 (system* (string-append #+coreutils "/bin/ln")
4036 "-s"
4037 (string-append #$emacs "/bin/emacs")
4038 (string-append #$output "/bin/vi")))
4039 #:target "mips64el-linux-gnu")
4040 @end example
4041
4042 @noindent
4043 In the example above, the native build of @var{coreutils} is used, so
4044 that @command{ln} can actually run on the host; but then the
4045 cross-compiled build of @var{emacs} is referenced.
4046
4047 @cindex imported modules, for gexps
4048 @findex with-imported-modules
4049 Another gexp feature is @dfn{imported modules}: sometimes you want to be
4050 able to use certain Guile modules from the ``host environment'' in the
4051 gexp, so those modules should be imported in the ``build environment''.
4052 The @code{with-imported-modules} form allows you to express that:
4053
4054 @example
4055 (let ((build (with-imported-modules '((guix build utils))
4056 #~(begin
4057 (use-modules (guix build utils))
4058 (mkdir-p (string-append #$output "/bin"))))))
4059 (gexp->derivation "empty-dir"
4060 #~(begin
4061 #$build
4062 (display "success!\n")
4063 #t)))
4064 @end example
4065
4066 @noindent
4067 In this example, the @code{(guix build utils)} module is automatically
4068 pulled into the isolated build environment of our gexp, such that
4069 @code{(use-modules (guix build utils))} works as expected.
4070
4071 @cindex module closure
4072 @findex source-module-closure
4073 Usually you want the @emph{closure} of the module to be imported---i.e.,
4074 the module itself and all the modules it depends on---rather than just
4075 the module; failing to do that, attempts to use the module will fail
4076 because of missing dependent modules. The @code{source-module-closure}
4077 procedure computes the closure of a module by looking at its source file
4078 headers, which comes in handy in this case:
4079
4080 @example
4081 (use-modules (guix modules)) ;for 'source-module-closure'
4082
4083 (with-imported-modules (source-module-closure
4084 '((guix build utils)
4085 (gnu build vm)))
4086 (gexp->derivation "something-with-vms"
4087 #~(begin
4088 (use-modules (guix build utils)
4089 (gnu build vm))
4090 @dots{})))
4091 @end example
4092
4093 The syntactic form to construct gexps is summarized below.
4094
4095 @deffn {Scheme Syntax} #~@var{exp}
4096 @deffnx {Scheme Syntax} (gexp @var{exp})
4097 Return a G-expression containing @var{exp}. @var{exp} may contain one
4098 or more of the following forms:
4099
4100 @table @code
4101 @item #$@var{obj}
4102 @itemx (ungexp @var{obj})
4103 Introduce a reference to @var{obj}. @var{obj} may have one of the
4104 supported types, for example a package or a
4105 derivation, in which case the @code{ungexp} form is replaced by its
4106 output file name---e.g., @code{"/gnu/store/@dots{}-coreutils-8.22}.
4107
4108 If @var{obj} is a list, it is traversed and references to supported
4109 objects are substituted similarly.
4110
4111 If @var{obj} is another gexp, its contents are inserted and its
4112 dependencies are added to those of the containing gexp.
4113
4114 If @var{obj} is another kind of object, it is inserted as is.
4115
4116 @item #$@var{obj}:@var{output}
4117 @itemx (ungexp @var{obj} @var{output})
4118 This is like the form above, but referring explicitly to the
4119 @var{output} of @var{obj}---this is useful when @var{obj} produces
4120 multiple outputs (@pxref{Packages with Multiple Outputs}).
4121
4122 @item #+@var{obj}
4123 @itemx #+@var{obj}:output
4124 @itemx (ungexp-native @var{obj})
4125 @itemx (ungexp-native @var{obj} @var{output})
4126 Same as @code{ungexp}, but produces a reference to the @emph{native}
4127 build of @var{obj} when used in a cross compilation context.
4128
4129 @item #$output[:@var{output}]
4130 @itemx (ungexp output [@var{output}])
4131 Insert a reference to derivation output @var{output}, or to the main
4132 output when @var{output} is omitted.
4133
4134 This only makes sense for gexps passed to @code{gexp->derivation}.
4135
4136 @item #$@@@var{lst}
4137 @itemx (ungexp-splicing @var{lst})
4138 Like the above, but splices the contents of @var{lst} inside the
4139 containing list.
4140
4141 @item #+@@@var{lst}
4142 @itemx (ungexp-native-splicing @var{lst})
4143 Like the above, but refers to native builds of the objects listed in
4144 @var{lst}.
4145
4146 @end table
4147
4148 G-expressions created by @code{gexp} or @code{#~} are run-time objects
4149 of the @code{gexp?} type (see below.)
4150 @end deffn
4151
4152 @deffn {Scheme Syntax} with-imported-modules @var{modules} @var{body}@dots{}
4153 Mark the gexps defined in @var{body}@dots{} as requiring @var{modules}
4154 in their execution environment. @var{modules} must be a list of Guile
4155 module names, such as @code{'((guix build utils) (guix build gremlin))}.
4156
4157 This form has @emph{lexical} scope: it has an effect on the gexps
4158 directly defined in @var{body}@dots{}, but not on those defined, say, in
4159 procedures called from @var{body}@dots{}.
4160 @end deffn
4161
4162 @deffn {Scheme Procedure} gexp? @var{obj}
4163 Return @code{#t} if @var{obj} is a G-expression.
4164 @end deffn
4165
4166 G-expressions are meant to be written to disk, either as code building
4167 some derivation, or as plain files in the store. The monadic procedures
4168 below allow you to do that (@pxref{The Store Monad}, for more
4169 information about monads.)
4170
4171 @deffn {Monadic Procedure} gexp->derivation @var{name} @var{exp} @
4172 [#:system (%current-system)] [#:target #f] [#:graft? #t] @
4173 [#:hash #f] [#:hash-algo #f] @
4174 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
4175 [#:module-path @var{%load-path}] @
4176 [#:references-graphs #f] [#:allowed-references #f] @
4177 [#:disallowed-references #f] @
4178 [#:leaked-env-vars #f] @
4179 [#:script-name (string-append @var{name} "-builder")] @
4180 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
4181 Return a derivation @var{name} that runs @var{exp} (a gexp) with
4182 @var{guile-for-build} (a derivation) on @var{system}; @var{exp} is
4183 stored in a file called @var{script-name}. When @var{target} is true,
4184 it is used as the cross-compilation target triplet for packages referred
4185 to by @var{exp}.
4186
4187 @var{modules} is deprecated in favor of @code{with-imported-modules}.
4188 Its meaning is to
4189 make @var{modules} available in the evaluation context of @var{exp};
4190 @var{modules} is a list of names of Guile modules searched in
4191 @var{module-path} to be copied in the store, compiled, and made available in
4192 the load path during the execution of @var{exp}---e.g., @code{((guix
4193 build utils) (guix build gnu-build-system))}.
4194
4195 @var{graft?} determines whether packages referred to by @var{exp} should be grafted when
4196 applicable.
4197
4198 When @var{references-graphs} is true, it must be a list of tuples of one of the
4199 following forms:
4200
4201 @example
4202 (@var{file-name} @var{package})
4203 (@var{file-name} @var{package} @var{output})
4204 (@var{file-name} @var{derivation})
4205 (@var{file-name} @var{derivation} @var{output})
4206 (@var{file-name} @var{store-item})
4207 @end example
4208
4209 The right-hand-side of each element of @var{references-graphs} is automatically made
4210 an input of the build process of @var{exp}. In the build environment, each
4211 @var{file-name} contains the reference graph of the corresponding item, in a simple
4212 text format.
4213
4214 @var{allowed-references} must be either @code{#f} or a list of output names and packages.
4215 In the latter case, the list denotes store items that the result is allowed to
4216 refer to. Any reference to another store item will lead to a build error.
4217 Similarly for @var{disallowed-references}, which can list items that must not be
4218 referenced by the outputs.
4219
4220 The other arguments are as for @code{derivation} (@pxref{Derivations}).
4221 @end deffn
4222
4223 @cindex file-like objects
4224 The @code{local-file}, @code{plain-file}, @code{computed-file},
4225 @code{program-file}, and @code{scheme-file} procedures below return
4226 @dfn{file-like objects}. That is, when unquoted in a G-expression,
4227 these objects lead to a file in the store. Consider this G-expression:
4228
4229 @example
4230 #~(system* #$(file-append glibc "/sbin/nscd") "-f"
4231 #$(local-file "/tmp/my-nscd.conf"))
4232 @end example
4233
4234 The effect here is to ``intern'' @file{/tmp/my-nscd.conf} by copying it
4235 to the store. Once expanded, for instance @i{via}
4236 @code{gexp->derivation}, the G-expression refers to that copy under
4237 @file{/gnu/store}; thus, modifying or removing the file in @file{/tmp}
4238 does not have any effect on what the G-expression does.
4239 @code{plain-file} can be used similarly; it differs in that the file
4240 content is directly passed as a string.
4241
4242 @deffn {Scheme Procedure} local-file @var{file} [@var{name}] @
4243 [#:recursive? #f] [#:select? (const #t)]
4244 Return an object representing local file @var{file} to add to the store; this
4245 object can be used in a gexp. If @var{file} is a relative file name, it is looked
4246 up relative to the source file where this form appears. @var{file} will be added to
4247 the store under @var{name}--by default the base name of @var{file}.
4248
4249 When @var{recursive?} is true, the contents of @var{file} are added recursively; if @var{file}
4250 designates a flat file and @var{recursive?} is true, its contents are added, and its
4251 permission bits are kept.
4252
4253 When @var{recursive?} is true, call @code{(@var{select?} @var{file}
4254 @var{stat})} for each directory entry, where @var{file} is the entry's
4255 absolute file name and @var{stat} is the result of @code{lstat}; exclude
4256 entries for which @var{select?} does not return true.
4257
4258 This is the declarative counterpart of the @code{interned-file} monadic
4259 procedure (@pxref{The Store Monad, @code{interned-file}}).
4260 @end deffn
4261
4262 @deffn {Scheme Procedure} plain-file @var{name} @var{content}
4263 Return an object representing a text file called @var{name} with the given
4264 @var{content} (a string) to be added to the store.
4265
4266 This is the declarative counterpart of @code{text-file}.
4267 @end deffn
4268
4269 @deffn {Scheme Procedure} computed-file @var{name} @var{gexp} @
4270 [#:options '(#:local-build? #t)]
4271 Return an object representing the store item @var{name}, a file or
4272 directory computed by @var{gexp}. @var{options}
4273 is a list of additional arguments to pass to @code{gexp->derivation}.
4274
4275 This is the declarative counterpart of @code{gexp->derivation}.
4276 @end deffn
4277
4278 @deffn {Monadic Procedure} gexp->script @var{name} @var{exp}
4279 Return an executable script @var{name} that runs @var{exp} using
4280 @var{guile}, with @var{exp}'s imported modules in its search path.
4281
4282 The example below builds a script that simply invokes the @command{ls}
4283 command:
4284
4285 @example
4286 (use-modules (guix gexp) (gnu packages base))
4287
4288 (gexp->script "list-files"
4289 #~(execl #$(file-append coreutils "/bin/ls")
4290 "ls"))
4291 @end example
4292
4293 When ``running'' it through the store (@pxref{The Store Monad,
4294 @code{run-with-store}}), we obtain a derivation that produces an
4295 executable file @file{/gnu/store/@dots{}-list-files} along these lines:
4296
4297 @example
4298 #!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
4299 !#
4300 (execl "/gnu/store/@dots{}-coreutils-8.22"/bin/ls" "ls")
4301 @end example
4302 @end deffn
4303
4304 @deffn {Scheme Procedure} program-file @var{name} @var{exp} @
4305 [#:guile #f]
4306 Return an object representing the executable store item @var{name} that
4307 runs @var{gexp}. @var{guile} is the Guile package used to execute that
4308 script.
4309
4310 This is the declarative counterpart of @code{gexp->script}.
4311 @end deffn
4312
4313 @deffn {Monadic Procedure} gexp->file @var{name} @var{exp} @
4314 [#:set-load-path? #t]
4315 Return a derivation that builds a file @var{name} containing @var{exp}.
4316 When @var{set-load-path?} is true, emit code in the resulting file to
4317 set @code{%load-path} and @code{%load-compiled-path} to honor
4318 @var{exp}'s imported modules.
4319
4320 The resulting file holds references to all the dependencies of @var{exp}
4321 or a subset thereof.
4322 @end deffn
4323
4324 @deffn {Scheme Procedure} scheme-file @var{name} @var{exp}
4325 Return an object representing the Scheme file @var{name} that contains
4326 @var{exp}.
4327
4328 This is the declarative counterpart of @code{gexp->file}.
4329 @end deffn
4330
4331 @deffn {Monadic Procedure} text-file* @var{name} @var{text} @dots{}
4332 Return as a monadic value a derivation that builds a text file
4333 containing all of @var{text}. @var{text} may list, in addition to
4334 strings, objects of any type that can be used in a gexp: packages,
4335 derivations, local file objects, etc. The resulting store file holds
4336 references to all these.
4337
4338 This variant should be preferred over @code{text-file} anytime the file
4339 to create will reference items from the store. This is typically the
4340 case when building a configuration file that embeds store file names,
4341 like this:
4342
4343 @example
4344 (define (profile.sh)
4345 ;; Return the name of a shell script in the store that
4346 ;; initializes the 'PATH' environment variable.
4347 (text-file* "profile.sh"
4348 "export PATH=" coreutils "/bin:"
4349 grep "/bin:" sed "/bin\n"))
4350 @end example
4351
4352 In this example, the resulting @file{/gnu/store/@dots{}-profile.sh} file
4353 will reference @var{coreutils}, @var{grep}, and @var{sed}, thereby
4354 preventing them from being garbage-collected during its lifetime.
4355 @end deffn
4356
4357 @deffn {Scheme Procedure} mixed-text-file @var{name} @var{text} @dots{}
4358 Return an object representing store file @var{name} containing
4359 @var{text}. @var{text} is a sequence of strings and file-like objects,
4360 as in:
4361
4362 @example
4363 (mixed-text-file "profile"
4364 "export PATH=" coreutils "/bin:" grep "/bin")
4365 @end example
4366
4367 This is the declarative counterpart of @code{text-file*}.
4368 @end deffn
4369
4370 @deffn {Scheme Procedure} file-append @var{obj} @var{suffix} @dots{}
4371 Return a file-like object that expands to the concatenation of @var{obj}
4372 and @var{suffix}, where @var{obj} is a lowerable object and each
4373 @var{suffix} is a string.
4374
4375 As an example, consider this gexp:
4376
4377 @example
4378 (gexp->script "run-uname"
4379 #~(system* #$(file-append coreutils
4380 "/bin/uname")))
4381 @end example
4382
4383 The same effect could be achieved with:
4384
4385 @example
4386 (gexp->script "run-uname"
4387 #~(system* (string-append #$coreutils
4388 "/bin/uname")))
4389 @end example
4390
4391 There is one difference though: in the @code{file-append} case, the
4392 resulting script contains the absolute file name as a string, whereas in
4393 the second case, the resulting script contains a @code{(string-append
4394 @dots{})} expression to construct the file name @emph{at run time}.
4395 @end deffn
4396
4397
4398 Of course, in addition to gexps embedded in ``host'' code, there are
4399 also modules containing build tools. To make it clear that they are
4400 meant to be used in the build stratum, these modules are kept in the
4401 @code{(guix build @dots{})} name space.
4402
4403 @cindex lowering, of high-level objects in gexps
4404 Internally, high-level objects are @dfn{lowered}, using their compiler,
4405 to either derivations or store items. For instance, lowering a package
4406 yields a derivation, and lowering a @code{plain-file} yields a store
4407 item. This is achieved using the @code{lower-object} monadic procedure.
4408
4409 @deffn {Monadic Procedure} lower-object @var{obj} [@var{system}] @
4410 [#:target #f]
4411 Return as a value in @var{%store-monad} the derivation or store item
4412 corresponding to @var{obj} for @var{system}, cross-compiling for
4413 @var{target} if @var{target} is true. @var{obj} must be an object that
4414 has an associated gexp compiler, such as a @code{<package>}.
4415 @end deffn
4416
4417
4418 @c *********************************************************************
4419 @node Utilities
4420 @chapter Utilities
4421
4422 This section describes Guix command-line utilities. Some of them are
4423 primarily targeted at developers and users who write new package
4424 definitions, while others are more generally useful. They complement
4425 the Scheme programming interface of Guix in a convenient way.
4426
4427 @menu
4428 * Invoking guix build:: Building packages from the command line.
4429 * Invoking guix edit:: Editing package definitions.
4430 * Invoking guix download:: Downloading a file and printing its hash.
4431 * Invoking guix hash:: Computing the cryptographic hash of a file.
4432 * Invoking guix import:: Importing package definitions.
4433 * Invoking guix refresh:: Updating package definitions.
4434 * Invoking guix lint:: Finding errors in package definitions.
4435 * Invoking guix size:: Profiling disk usage.
4436 * Invoking guix graph:: Visualizing the graph of packages.
4437 * Invoking guix environment:: Setting up development environments.
4438 * Invoking guix publish:: Sharing substitutes.
4439 * Invoking guix challenge:: Challenging substitute servers.
4440 * Invoking guix copy:: Copying to and from a remote store.
4441 * Invoking guix container:: Process isolation.
4442 @end menu
4443
4444 @node Invoking guix build
4445 @section Invoking @command{guix build}
4446
4447 @cindex package building
4448 @cindex @command{guix build}
4449 The @command{guix build} command builds packages or derivations and
4450 their dependencies, and prints the resulting store paths. Note that it
4451 does not modify the user's profile---this is the job of the
4452 @command{guix package} command (@pxref{Invoking guix package}). Thus,
4453 it is mainly useful for distribution developers.
4454
4455 The general syntax is:
4456
4457 @example
4458 guix build @var{options} @var{package-or-derivation}@dots{}
4459 @end example
4460
4461 As an example, the following command builds the latest versions of Emacs
4462 and of Guile, displays their build logs, and finally displays the
4463 resulting directories:
4464
4465 @example
4466 guix build emacs guile
4467 @end example
4468
4469 Similarly, the following command builds all the available packages:
4470
4471 @example
4472 guix build --quiet --keep-going \
4473 `guix package -A | cut -f1,2 --output-delimiter=@@`
4474 @end example
4475
4476 @var{package-or-derivation} may be either the name of a package found in
4477 the software distribution such as @code{coreutils} or
4478 @code{coreutils-8.20}, or a derivation such as
4479 @file{/gnu/store/@dots{}-coreutils-8.19.drv}. In the former case, a
4480 package with the corresponding name (and optionally version) is searched
4481 for among the GNU distribution modules (@pxref{Package Modules}).
4482
4483 Alternatively, the @code{--expression} option may be used to specify a
4484 Scheme expression that evaluates to a package; this is useful when
4485 disambiguating among several same-named packages or package variants is
4486 needed.
4487
4488 There may be zero or more @var{options}. The available options are
4489 described in the subsections below.
4490
4491 @menu
4492 * Common Build Options:: Build options for most commands.
4493 * Package Transformation Options:: Creating variants of packages.
4494 * Additional Build Options:: Options specific to 'guix build'.
4495 @end menu
4496
4497 @node Common Build Options
4498 @subsection Common Build Options
4499
4500 A number of options that control the build process are common to
4501 @command{guix build} and other commands that can spawn builds, such as
4502 @command{guix package} or @command{guix archive}. These are the
4503 following:
4504
4505 @table @code
4506
4507 @item --load-path=@var{directory}
4508 @itemx -L @var{directory}
4509 Add @var{directory} to the front of the package module search path
4510 (@pxref{Package Modules}).
4511
4512 This allows users to define their own packages and make them visible to
4513 the command-line tools.
4514
4515 @item --keep-failed
4516 @itemx -K
4517 Keep the build tree of failed builds. Thus, if a build fails, its build
4518 tree is kept under @file{/tmp}, in a directory whose name is shown at
4519 the end of the build log. This is useful when debugging build issues.
4520
4521 @item --keep-going
4522 @itemx -k
4523 Keep going when some of the derivations fail to build; return only once
4524 all the builds have either completed or failed.
4525
4526 The default behavior is to stop as soon as one of the specified
4527 derivations has failed.
4528
4529 @item --dry-run
4530 @itemx -n
4531 Do not build the derivations.
4532
4533 @item --fallback
4534 When substituting a pre-built binary fails, fall back to building
4535 packages locally.
4536
4537 @item --substitute-urls=@var{urls}
4538 @anchor{client-substitute-urls}
4539 Consider @var{urls} the whitespace-separated list of substitute source
4540 URLs, overriding the default list of URLs of @command{guix-daemon}
4541 (@pxref{daemon-substitute-urls,, @command{guix-daemon} URLs}).
4542
4543 This means that substitutes may be downloaded from @var{urls}, provided
4544 they are signed by a key authorized by the system administrator
4545 (@pxref{Substitutes}).
4546
4547 When @var{urls} is the empty string, substitutes are effectively
4548 disabled.
4549
4550 @item --no-substitutes
4551 Do not use substitutes for build products. That is, always build things
4552 locally instead of allowing downloads of pre-built binaries
4553 (@pxref{Substitutes}).
4554
4555 @item --no-grafts
4556 Do not ``graft'' packages. In practice, this means that package updates
4557 available as grafts are not applied. @xref{Security Updates}, for more
4558 information on grafts.
4559
4560 @item --rounds=@var{n}
4561 Build each derivation @var{n} times in a row, and raise an error if
4562 consecutive build results are not bit-for-bit identical.
4563
4564 This is a useful way to detect non-deterministic builds processes.
4565 Non-deterministic build processes are a problem because they make it
4566 practically impossible for users to @emph{verify} whether third-party
4567 binaries are genuine. @xref{Invoking guix challenge}, for more.
4568
4569 Note that, currently, the differing build results are not kept around,
4570 so you will have to manually investigate in case of an error---e.g., by
4571 stashing one of the build results with @code{guix archive --export}
4572 (@pxref{Invoking guix archive}), then rebuilding, and finally comparing
4573 the two results.
4574
4575 @item --no-build-hook
4576 Do not attempt to offload builds @i{via} the ``build hook'' of the daemon
4577 (@pxref{Daemon Offload Setup}). That is, always build things locally
4578 instead of offloading builds to remote machines.
4579
4580 @item --max-silent-time=@var{seconds}
4581 When the build or substitution process remains silent for more than
4582 @var{seconds}, terminate it and report a build failure.
4583
4584 @item --timeout=@var{seconds}
4585 Likewise, when the build or substitution process lasts for more than
4586 @var{seconds}, terminate it and report a build failure.
4587
4588 By default there is no timeout. This behavior can be restored with
4589 @code{--timeout=0}.
4590
4591 @item --verbosity=@var{level}
4592 Use the given verbosity level. @var{level} must be an integer between 0
4593 and 5; higher means more verbose output. Setting a level of 4 or more
4594 may be helpful when debugging setup issues with the build daemon.
4595
4596 @item --cores=@var{n}
4597 @itemx -c @var{n}
4598 Allow the use of up to @var{n} CPU cores for the build. The special
4599 value @code{0} means to use as many CPU cores as available.
4600
4601 @item --max-jobs=@var{n}
4602 @itemx -M @var{n}
4603 Allow at most @var{n} build jobs in parallel. @xref{Invoking
4604 guix-daemon, @code{--max-jobs}}, for details about this option and the
4605 equivalent @command{guix-daemon} option.
4606
4607 @end table
4608
4609 Behind the scenes, @command{guix build} is essentially an interface to
4610 the @code{package-derivation} procedure of the @code{(guix packages)}
4611 module, and to the @code{build-derivations} procedure of the @code{(guix
4612 derivations)} module.
4613
4614 In addition to options explicitly passed on the command line,
4615 @command{guix build} and other @command{guix} commands that support
4616 building honor the @code{GUIX_BUILD_OPTIONS} environment variable.
4617
4618 @defvr {Environment Variable} GUIX_BUILD_OPTIONS
4619 Users can define this variable to a list of command line options that
4620 will automatically be used by @command{guix build} and other
4621 @command{guix} commands that can perform builds, as in the example
4622 below:
4623
4624 @example
4625 $ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
4626 @end example
4627
4628 These options are parsed independently, and the result is appended to
4629 the parsed command-line options.
4630 @end defvr
4631
4632
4633 @node Package Transformation Options
4634 @subsection Package Transformation Options
4635
4636 @cindex package variants
4637 Another set of command-line options supported by @command{guix build}
4638 and also @command{guix package} are @dfn{package transformation
4639 options}. These are options that make it possible to define @dfn{package
4640 variants}---for instance, packages built from different source code.
4641 This is a convenient way to create customized packages on the fly
4642 without having to type in the definitions of package variants
4643 (@pxref{Defining Packages}).
4644
4645 @table @code
4646
4647 @item --with-source=@var{source}
4648 Use @var{source} as the source of the corresponding package.
4649 @var{source} must be a file name or a URL, as for @command{guix
4650 download} (@pxref{Invoking guix download}).
4651
4652 The ``corresponding package'' is taken to be the one specified on the
4653 command line the name of which matches the base of @var{source}---e.g.,
4654 if @var{source} is @code{/src/guile-2.0.10.tar.gz}, the corresponding
4655 package is @code{guile}. Likewise, the version string is inferred from
4656 @var{source}; in the previous example, it is @code{2.0.10}.
4657
4658 This option allows users to try out versions of packages other than the
4659 one provided by the distribution. The example below downloads
4660 @file{ed-1.7.tar.gz} from a GNU mirror and uses that as the source for
4661 the @code{ed} package:
4662
4663 @example
4664 guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
4665 @end example
4666
4667 As a developer, @code{--with-source} makes it easy to test release
4668 candidates:
4669
4670 @example
4671 guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
4672 @end example
4673
4674 @dots{} or to build from a checkout in a pristine environment:
4675
4676 @example
4677 $ git clone git://git.sv.gnu.org/guix.git
4678 $ guix build guix --with-source=./guix
4679 @end example
4680
4681 @item --with-input=@var{package}=@var{replacement}
4682 Replace dependency on @var{package} by a dependency on
4683 @var{replacement}. @var{package} must be a package name, and
4684 @var{replacement} must be a package specification such as @code{guile}
4685 or @code{guile@@1.8}.
4686
4687 For instance, the following command builds Guix, but replaces its
4688 dependency on the current stable version of Guile with a dependency on
4689 the development version of Guile, @code{guile-next}:
4690
4691 @example
4692 guix build --with-input=guile=guile-next guix
4693 @end example
4694
4695 This is a recursive, deep replacement. So in this example, both
4696 @code{guix} and its dependency @code{guile-json} (which also depends on
4697 @code{guile}) get rebuilt against @code{guile-next}.
4698
4699 This is implemented using the @code{package-input-rewriting} Scheme
4700 procedure (@pxref{Defining Packages, @code{package-input-rewriting}}).
4701
4702 @item --with-graft=@var{package}=@var{replacement}
4703 This is similar to @code{--with-input} but with an important difference:
4704 instead of rebuilding the whole dependency chain, @var{replacement} is
4705 built and then @dfn{grafted} onto the binaries that were initially
4706 referring to @var{package}. @xref{Security Updates}, for more
4707 information on grafts.
4708
4709 For example, the command below grafts version 3.5.4 of GnuTLS onto Wget
4710 and all its dependencies, replacing references to the version of GnuTLS
4711 they currently refer to:
4712
4713 @example
4714 guix build --with-graft=gnutls=gnutls@@3.5.4 wget
4715 @end example
4716
4717 This has the advantage of being much faster than rebuilding everything.
4718 But there is a caveat: it works if and only if @var{package} and
4719 @var{replacement} are strictly compatible---for example, if they provide
4720 a library, the application binary interface (ABI) of those libraries
4721 must be compatible. If @var{replacement} is somehow incompatible with
4722 @var{package}, then the resulting package may be unusable. Use with
4723 care!
4724
4725 @end table
4726
4727 @node Additional Build Options
4728 @subsection Additional Build Options
4729
4730 The command-line options presented below are specific to @command{guix
4731 build}.
4732
4733 @table @code
4734
4735 @item --quiet
4736 @itemx -q
4737 Build quietly, without displaying the build log. Upon completion, the
4738 build log is kept in @file{/var} (or similar) and can always be
4739 retrieved using the @option{--log-file} option.
4740
4741 @item --file=@var{file}
4742 @itemx -f @var{file}
4743
4744 Build the package or derivation that the code within @var{file}
4745 evaluates to.
4746
4747 As an example, @var{file} might contain a package definition like this
4748 (@pxref{Defining Packages}):
4749
4750 @example
4751 @verbatiminclude package-hello.scm
4752 @end example
4753
4754 @item --expression=@var{expr}
4755 @itemx -e @var{expr}
4756 Build the package or derivation @var{expr} evaluates to.
4757
4758 For example, @var{expr} may be @code{(@@ (gnu packages guile)
4759 guile-1.8)}, which unambiguously designates this specific variant of
4760 version 1.8 of Guile.
4761
4762 Alternatively, @var{expr} may be a G-expression, in which case it is used
4763 as a build program passed to @code{gexp->derivation}
4764 (@pxref{G-Expressions}).
4765
4766 Lastly, @var{expr} may refer to a zero-argument monadic procedure
4767 (@pxref{The Store Monad}). The procedure must return a derivation as a
4768 monadic value, which is then passed through @code{run-with-store}.
4769
4770 @item --source
4771 @itemx -S
4772 Build the source derivations of the packages, rather than the packages
4773 themselves.
4774
4775 For instance, @code{guix build -S gcc} returns something like
4776 @file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, which is the GCC
4777 source tarball.
4778
4779 The returned source tarball is the result of applying any patches and
4780 code snippets specified in the package @code{origin} (@pxref{Defining
4781 Packages}).
4782
4783 @item --sources
4784 Fetch and return the source of @var{package-or-derivation} and all their
4785 dependencies, recursively. This is a handy way to obtain a local copy
4786 of all the source code needed to build @var{packages}, allowing you to
4787 eventually build them even without network access. It is an extension
4788 of the @code{--source} option and can accept one of the following
4789 optional argument values:
4790
4791 @table @code
4792 @item package
4793 This value causes the @code{--sources} option to behave in the same way
4794 as the @code{--source} option.
4795
4796 @item all
4797 Build the source derivations of all packages, including any source that
4798 might be listed as @code{inputs}. This is the default value.
4799
4800 @example
4801 $ guix build --sources tzdata
4802 The following derivations will be built:
4803 /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
4804 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
4805 @end example
4806
4807 @item transitive
4808 Build the source derivations of all packages, as well of all transitive
4809 inputs to the packages. This can be used e.g. to
4810 prefetch package source for later offline building.
4811
4812 @example
4813 $ guix build --sources=transitive tzdata
4814 The following derivations will be built:
4815 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
4816 /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
4817 /gnu/store/@dots{}-grep-2.21.tar.xz.drv
4818 /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
4819 /gnu/store/@dots{}-make-4.1.tar.xz.drv
4820 /gnu/store/@dots{}-bash-4.3.tar.xz.drv
4821 @dots{}
4822 @end example
4823
4824 @end table
4825
4826 @item --system=@var{system}
4827 @itemx -s @var{system}
4828 Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
4829 the system type of the build host.
4830
4831 An example use of this is on Linux-based systems, which can emulate
4832 different personalities. For instance, passing
4833 @code{--system=i686-linux} on an @code{x86_64-linux} system allows users
4834 to build packages in a complete 32-bit environment.
4835
4836 @item --target=@var{triplet}
4837 @cindex cross-compilation
4838 Cross-build for @var{triplet}, which must be a valid GNU triplet, such
4839 as @code{"mips64el-linux-gnu"} (@pxref{Configuration Names, GNU
4840 configuration triplets,, configure, GNU Configure and Build System}).
4841
4842 @anchor{build-check}
4843 @item --check
4844 @cindex determinism, checking
4845 @cindex reproducibility, checking
4846 Rebuild @var{package-or-derivation}, which are already available in the
4847 store, and raise an error if the build results are not bit-for-bit
4848 identical.
4849
4850 This mechanism allows you to check whether previously installed
4851 substitutes are genuine (@pxref{Substitutes}), or whether the build result
4852 of a package is deterministic. @xref{Invoking guix challenge}, for more
4853 background information and tools.
4854
4855 When used in conjunction with @option{--keep-failed}, the differing
4856 output is kept in the store, under @file{/gnu/store/@dots{}-check}.
4857 This makes it easy to look for differences between the two results.
4858
4859 @item --derivations
4860 @itemx -d
4861 Return the derivation paths, not the output paths, of the given
4862 packages.
4863
4864 @item --root=@var{file}
4865 @itemx -r @var{file}
4866 Make @var{file} a symlink to the result, and register it as a garbage
4867 collector root.
4868
4869 @item --log-file
4870 Return the build log file names or URLs for the given
4871 @var{package-or-derivation}, or raise an error if build logs are
4872 missing.
4873
4874 This works regardless of how packages or derivations are specified. For
4875 instance, the following invocations are equivalent:
4876
4877 @example
4878 guix build --log-file `guix build -d guile`
4879 guix build --log-file `guix build guile`
4880 guix build --log-file guile
4881 guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
4882 @end example
4883
4884 If a log is unavailable locally, and unless @code{--no-substitutes} is
4885 passed, the command looks for a corresponding log on one of the
4886 substitute servers (as specified with @code{--substitute-urls}.)
4887
4888 So for instance, imagine you want to see the build log of GDB on MIPS,
4889 but you are actually on an @code{x86_64} machine:
4890
4891 @example
4892 $ guix build --log-file gdb -s mips64el-linux
4893 https://hydra.gnu.org/log/@dots{}-gdb-7.10
4894 @end example
4895
4896 You can freely access a huge library of build logs!
4897 @end table
4898
4899
4900 @node Invoking guix edit
4901 @section Invoking @command{guix edit}
4902
4903 @cindex @command{guix edit}
4904 @cindex package definition, editing
4905 So many packages, so many source files! The @command{guix edit} command
4906 facilitates the life of users and packagers by pointing their editor at
4907 the source file containing the definition of the specified packages.
4908 For instance:
4909
4910 @example
4911 guix edit gcc@@4.9 vim
4912 @end example
4913
4914 @noindent
4915 launches the program specified in the @code{VISUAL} or in the
4916 @code{EDITOR} environment variable to view the recipe of GCC@tie{}4.9.3
4917 and that of Vim.
4918
4919 If you are using a Guix Git checkout (@pxref{Building from Git}), or
4920 have created your own packages on @code{GUIX_PACKAGE_PATH}
4921 (@pxref{Defining Packages}), you will be able to edit the package
4922 recipes. Otherwise, you will be able to examine the read-only recipes
4923 for packages currently in the store.
4924
4925
4926 @node Invoking guix download
4927 @section Invoking @command{guix download}
4928
4929 @cindex @command{guix download}
4930 @cindex downloading package sources
4931 When writing a package definition, developers typically need to download
4932 a source tarball, compute its SHA256 hash, and write that
4933 hash in the package definition (@pxref{Defining Packages}). The
4934 @command{guix download} tool helps with this task: it downloads a file
4935 from the given URI, adds it to the store, and prints both its file name
4936 in the store and its SHA256 hash.
4937
4938 The fact that the downloaded file is added to the store saves bandwidth:
4939 when the developer eventually tries to build the newly defined package
4940 with @command{guix build}, the source tarball will not have to be
4941 downloaded again because it is already in the store. It is also a
4942 convenient way to temporarily stash files, which may be deleted
4943 eventually (@pxref{Invoking guix gc}).
4944
4945 The @command{guix download} command supports the same URIs as used in
4946 package definitions. In particular, it supports @code{mirror://} URIs.
4947 @code{https} URIs (HTTP over TLS) are supported @emph{provided} the
4948 Guile bindings for GnuTLS are available in the user's environment; when
4949 they are not available, an error is raised. @xref{Guile Preparations,
4950 how to install the GnuTLS bindings for Guile,, gnutls-guile,
4951 GnuTLS-Guile}, for more information.
4952
4953 @command{guix download} verifies HTTPS server certificates by loading
4954 the certificates of X.509 authorities from the directory pointed to by
4955 the @code{SSL_CERT_DIR} environment variable (@pxref{X.509
4956 Certificates}), unless @option{--no-check-certificate} is used.
4957
4958 The following options are available:
4959
4960 @table @code
4961 @item --format=@var{fmt}
4962 @itemx -f @var{fmt}
4963 Write the hash in the format specified by @var{fmt}. For more
4964 information on the valid values for @var{fmt}, @pxref{Invoking guix hash}.
4965
4966 @item --no-check-certificate
4967 Do not validate the X.509 certificates of HTTPS servers.
4968
4969 When using this option, you have @emph{absolutely no guarantee} that you
4970 are communicating with the authentic server responsible for the given
4971 URL, which makes you vulnerable to ``man-in-the-middle'' attacks.
4972
4973 @item --output=@var{file}
4974 @itemx -o @var{file}
4975 Save the downloaded file to @var{file} instead of adding it to the
4976 store.
4977 @end table
4978
4979 @node Invoking guix hash
4980 @section Invoking @command{guix hash}
4981
4982 @cindex @command{guix hash}
4983 The @command{guix hash} command computes the SHA256 hash of a file.
4984 It is primarily a convenience tool for anyone contributing to the
4985 distribution: it computes the cryptographic hash of a file, which can be
4986 used in the definition of a package (@pxref{Defining Packages}).
4987
4988 The general syntax is:
4989
4990 @example
4991 guix hash @var{option} @var{file}
4992 @end example
4993
4994 When @var{file} is @code{-} (a hyphen), @command{guix hash} computes the
4995 hash of data read from standard input. @command{guix hash} has the
4996 following options:
4997
4998 @table @code
4999
5000 @item --format=@var{fmt}
5001 @itemx -f @var{fmt}
5002 Write the hash in the format specified by @var{fmt}.
5003
5004 Supported formats: @code{nix-base32}, @code{base32}, @code{base16}
5005 (@code{hex} and @code{hexadecimal} can be used as well).
5006
5007 If the @option{--format} option is not specified, @command{guix hash}
5008 will output the hash in @code{nix-base32}. This representation is used
5009 in the definitions of packages.
5010
5011 @item --recursive
5012 @itemx -r
5013 Compute the hash on @var{file} recursively.
5014
5015 In this case, the hash is computed on an archive containing @var{file},
5016 including its children if it is a directory. Some of the metadata of
5017 @var{file} is part of the archive; for instance, when @var{file} is a
5018 regular file, the hash is different depending on whether @var{file} is
5019 executable or not. Metadata such as time stamps has no impact on the
5020 hash (@pxref{Invoking guix archive}).
5021 @c FIXME: Replace xref above with xref to an ``Archive'' section when
5022 @c it exists.
5023
5024 @item --exclude-vcs
5025 @itemx -x
5026 When combined with @option{--recursive}, exclude version control system
5027 directories (@file{.bzr}, @file{.git}, @file{.hg}, etc.)
5028
5029 @vindex git-fetch
5030 As an example, here is how you would compute the hash of a Git checkout,
5031 which is useful when using the @code{git-fetch} method (@pxref{origin
5032 Reference}):
5033
5034 @example
5035 $ git clone http://example.org/foo.git
5036 $ cd foo
5037 $ guix hash -rx .
5038 @end example
5039 @end table
5040
5041 @node Invoking guix import
5042 @section Invoking @command{guix import}
5043
5044 @cindex importing packages
5045 @cindex package import
5046 @cindex package conversion
5047 @cindex Invoking @command{guix import}
5048 The @command{guix import} command is useful for people who would like to
5049 add a package to the distribution with as little work as
5050 possible---a legitimate demand. The command knows of a few
5051 repositories from which it can ``import'' package metadata. The result
5052 is a package definition, or a template thereof, in the format we know
5053 (@pxref{Defining Packages}).
5054
5055 The general syntax is:
5056
5057 @example
5058 guix import @var{importer} @var{options}@dots{}
5059 @end example
5060
5061 @var{importer} specifies the source from which to import package
5062 metadata, and @var{options} specifies a package identifier and other
5063 options specific to @var{importer}. Currently, the available
5064 ``importers'' are:
5065
5066 @table @code
5067 @item gnu
5068 Import metadata for the given GNU package. This provides a template
5069 for the latest version of that GNU package, including the hash of its
5070 source tarball, and its canonical synopsis and description.
5071
5072 Additional information such as the package dependencies and its
5073 license needs to be figured out manually.
5074
5075 For example, the following command returns a package definition for
5076 GNU@tie{}Hello:
5077
5078 @example
5079 guix import gnu hello
5080 @end example
5081
5082 Specific command-line options are:
5083
5084 @table @code
5085 @item --key-download=@var{policy}
5086 As for @code{guix refresh}, specify the policy to handle missing OpenPGP
5087 keys when verifying the package signature. @xref{Invoking guix
5088 refresh, @code{--key-download}}.
5089 @end table
5090
5091 @item pypi
5092 @cindex pypi
5093 Import metadata from the @uref{https://pypi.python.org/, Python Package
5094 Index}@footnote{This functionality requires Guile-JSON to be installed.
5095 @xref{Requirements}.}. Information is taken from the JSON-formatted
5096 description available at @code{pypi.python.org} and usually includes all
5097 the relevant information, including package dependencies. For maximum
5098 efficiency, it is recommended to install the @command{unzip} utility, so
5099 that the importer can unzip Python wheels and gather data from them.
5100
5101 The command below imports metadata for the @code{itsdangerous} Python
5102 package:
5103
5104 @example
5105 guix import pypi itsdangerous
5106 @end example
5107
5108 @item gem
5109 @cindex gem
5110 Import metadata from @uref{https://rubygems.org/,
5111 RubyGems}@footnote{This functionality requires Guile-JSON to be
5112 installed. @xref{Requirements}.}. Information is taken from the
5113 JSON-formatted description available at @code{rubygems.org} and includes
5114 most relevant information, including runtime dependencies. There are
5115 some caveats, however. The metadata doesn't distinguish between
5116 synopses and descriptions, so the same string is used for both fields.
5117 Additionally, the details of non-Ruby dependencies required to build
5118 native extensions is unavailable and left as an exercise to the
5119 packager.
5120
5121 The command below imports metadata for the @code{rails} Ruby package:
5122
5123 @example
5124 guix import gem rails
5125 @end example
5126
5127 @item cpan
5128 @cindex CPAN
5129 Import metadata from @uref{https://www.metacpan.org/, MetaCPAN}@footnote{This
5130 functionality requires Guile-JSON to be installed.
5131 @xref{Requirements}.}.
5132 Information is taken from the JSON-formatted metadata provided through
5133 @uref{https://api.metacpan.org/, MetaCPAN's API} and includes most
5134 relevant information, such as module dependencies. License information
5135 should be checked closely. If Perl is available in the store, then the
5136 @code{corelist} utility will be used to filter core modules out of the
5137 list of dependencies.
5138
5139 The command command below imports metadata for the @code{Acme::Boolean}
5140 Perl module:
5141
5142 @example
5143 guix import cpan Acme::Boolean
5144 @end example
5145
5146 @item cran
5147 @cindex CRAN
5148 @cindex Bioconductor
5149 Import metadata from @uref{http://cran.r-project.org/, CRAN}, the
5150 central repository for the @uref{http://r-project.org, GNU@tie{}R
5151 statistical and graphical environment}.
5152
5153 Information is extracted from the @code{DESCRIPTION} file of the package.
5154
5155 The command command below imports metadata for the @code{Cairo}
5156 R package:
5157
5158 @example
5159 guix import cran Cairo
5160 @end example
5161
5162 When @code{--recursive} is added, the importer will traverse the
5163 dependency graph of the given upstream package recursively and generate
5164 package expressions for all those packages that are not yet in Guix.
5165
5166 When @code{--archive=bioconductor} is added, metadata is imported from
5167 @uref{http://www.bioconductor.org/, Bioconductor}, a repository of R
5168 packages for for the analysis and comprehension of high-throughput
5169 genomic data in bioinformatics.
5170
5171 Information is extracted from the @code{DESCRIPTION} file of a package
5172 published on the web interface of the Bioconductor SVN repository.
5173
5174 The command below imports metadata for the @code{GenomicRanges}
5175 R package:
5176
5177 @example
5178 guix import cran --archive=bioconductor GenomicRanges
5179 @end example
5180
5181 @item nix
5182 Import metadata from a local copy of the source of the
5183 @uref{http://nixos.org/nixpkgs/, Nixpkgs distribution}@footnote{This
5184 relies on the @command{nix-instantiate} command of
5185 @uref{http://nixos.org/nix/, Nix}.}. Package definitions in Nixpkgs are
5186 typically written in a mixture of Nix-language and Bash code. This
5187 command only imports the high-level package structure that is written in
5188 the Nix language. It normally includes all the basic fields of a
5189 package definition.
5190
5191 When importing a GNU package, the synopsis and descriptions are replaced
5192 by their canonical upstream variant.
5193
5194 Usually, you will first need to do:
5195
5196 @example
5197 export NIX_REMOTE=daemon
5198 @end example
5199
5200 @noindent
5201 so that @command{nix-instantiate} does not try to open the Nix database.
5202
5203 As an example, the command below imports the package definition of
5204 LibreOffice (more precisely, it imports the definition of the package
5205 bound to the @code{libreoffice} top-level attribute):
5206
5207 @example
5208 guix import nix ~/path/to/nixpkgs libreoffice
5209 @end example
5210
5211 @item hackage
5212 @cindex hackage
5213 Import metadata from the Haskell community's central package archive
5214 @uref{https://hackage.haskell.org/, Hackage}. Information is taken from
5215 Cabal files and includes all the relevant information, including package
5216 dependencies.
5217
5218 Specific command-line options are:
5219
5220 @table @code
5221 @item --stdin
5222 @itemx -s
5223 Read a Cabal file from standard input.
5224 @item --no-test-dependencies
5225 @itemx -t
5226 Do not include dependencies required only by the test suites.
5227 @item --cabal-environment=@var{alist}
5228 @itemx -e @var{alist}
5229 @var{alist} is a Scheme alist defining the environment in which the
5230 Cabal conditionals are evaluated. The accepted keys are: @code{os},
5231 @code{arch}, @code{impl} and a string representing the name of a flag.
5232 The value associated with a flag has to be either the symbol
5233 @code{true} or @code{false}. The value associated with other keys
5234 has to conform to the Cabal file format definition. The default value
5235 associated with the keys @code{os}, @code{arch} and @code{impl} is
5236 @samp{linux}, @samp{x86_64} and @samp{ghc}, respectively.
5237 @end table
5238
5239 The command below imports metadata for the latest version of the
5240 @code{HTTP} Haskell package without including test dependencies and
5241 specifying the value of the flag @samp{network-uri} as @code{false}:
5242
5243 @example
5244 guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
5245 @end example
5246
5247 A specific package version may optionally be specified by following the
5248 package name by an at-sign and a version number as in the following example:
5249
5250 @example
5251 guix import hackage mtl@@2.1.3.1
5252 @end example
5253
5254 @item elpa
5255 @cindex elpa
5256 Import metadata from an Emacs Lisp Package Archive (ELPA) package
5257 repository (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
5258
5259 Specific command-line options are:
5260
5261 @table @code
5262 @item --archive=@var{repo}
5263 @itemx -a @var{repo}
5264 @var{repo} identifies the archive repository from which to retrieve the
5265 information. Currently the supported repositories and their identifiers
5266 are:
5267 @itemize -
5268 @item
5269 @uref{http://elpa.gnu.org/packages, GNU}, selected by the @code{gnu}
5270 identifier. This is the default.
5271
5272 Packages from @code{elpa.gnu.org} are signed with one of the keys
5273 contained in the GnuPG keyring at
5274 @file{share/emacs/25.1/etc/package-keyring.gpg} (or similar) in the
5275 @code{emacs} package (@pxref{Package Installation, ELPA package
5276 signatures,, emacs, The GNU Emacs Manual}).
5277
5278 @item
5279 @uref{http://stable.melpa.org/packages, MELPA-Stable}, selected by the
5280 @code{melpa-stable} identifier.
5281
5282 @item
5283 @uref{http://melpa.org/packages, MELPA}, selected by the @code{melpa}
5284 identifier.
5285 @end itemize
5286 @end table
5287
5288 @item crate
5289 @cindex crate
5290 Import metadata from the crates.io Rust package repository
5291 @uref{https://crates.io, crates.io}.
5292 @end table
5293
5294 The structure of the @command{guix import} code is modular. It would be
5295 useful to have more importers for other package formats, and your help
5296 is welcome here (@pxref{Contributing}).
5297
5298 @node Invoking guix refresh
5299 @section Invoking @command{guix refresh}
5300
5301 @cindex @command {guix refresh}
5302 The primary audience of the @command{guix refresh} command is developers
5303 of the GNU software distribution. By default, it reports any packages
5304 provided by the distribution that are outdated compared to the latest
5305 upstream version, like this:
5306
5307 @example
5308 $ guix refresh
5309 gnu/packages/gettext.scm:29:13: gettext would be upgraded from 0.18.1.1 to 0.18.2.1
5310 gnu/packages/glib.scm:77:12: glib would be upgraded from 2.34.3 to 2.37.0
5311 @end example
5312
5313 Alternately, one can specify packages to consider, in which case a
5314 warning is emitted for packages that lack an updater:
5315
5316 @example
5317 $ guix refresh coreutils guile guile-ssh
5318 gnu/packages/ssh.scm:205:2: warning: no updater for guile-ssh
5319 gnu/packages/guile.scm:136:12: guile would be upgraded from 2.0.12 to 2.0.13
5320 @end example
5321
5322 @command{guix refresh} browses the upstream repository of each package and determines
5323 the highest version number of the releases therein. The command
5324 knows how to update specific types of packages: GNU packages, ELPA
5325 packages, etc.---see the documentation for @option{--type} below. There
5326 are many packages, though, for which it lacks a method to determine
5327 whether a new upstream release is available. However, the mechanism is
5328 extensible, so feel free to get in touch with us to add a new method!
5329
5330 When passed @code{--update}, it modifies distribution source files to
5331 update the version numbers and source tarball hashes of those package
5332 recipes (@pxref{Defining Packages}). This is achieved by downloading
5333 each package's latest source tarball and its associated OpenPGP
5334 signature, authenticating the downloaded tarball against its signature
5335 using @command{gpg}, and finally computing its hash. When the public
5336 key used to sign the tarball is missing from the user's keyring, an
5337 attempt is made to automatically retrieve it from a public key server;
5338 when this is successful, the key is added to the user's keyring; otherwise,
5339 @command{guix refresh} reports an error.
5340
5341 The following options are supported:
5342
5343 @table @code
5344
5345 @item --expression=@var{expr}
5346 @itemx -e @var{expr}
5347 Consider the package @var{expr} evaluates to.
5348
5349 This is useful to precisely refer to a package, as in this example:
5350
5351 @example
5352 guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
5353 @end example
5354
5355 This command lists the dependents of the ``final'' libc (essentially all
5356 the packages.)
5357
5358 @item --update
5359 @itemx -u
5360 Update distribution source files (package recipes) in place. This is
5361 usually run from a checkout of the Guix source tree (@pxref{Running
5362 Guix Before It Is Installed}):
5363
5364 @example
5365 $ ./pre-inst-env guix refresh -s non-core -u
5366 @end example
5367
5368 @xref{Defining Packages}, for more information on package definitions.
5369
5370 @item --select=[@var{subset}]
5371 @itemx -s @var{subset}
5372 Select all the packages in @var{subset}, one of @code{core} or
5373 @code{non-core}.
5374
5375 The @code{core} subset refers to all the packages at the core of the
5376 distribution---i.e., packages that are used to build ``everything
5377 else''. This includes GCC, libc, Binutils, Bash, etc. Usually,
5378 changing one of these packages in the distribution entails a rebuild of
5379 all the others. Thus, such updates are an inconvenience to users in
5380 terms of build time or bandwidth used to achieve the upgrade.
5381
5382 The @code{non-core} subset refers to the remaining packages. It is
5383 typically useful in cases where an update of the core packages would be
5384 inconvenient.
5385
5386 @item --type=@var{updater}
5387 @itemx -t @var{updater}
5388 Select only packages handled by @var{updater} (may be a comma-separated
5389 list of updaters). Currently, @var{updater} may be one of:
5390
5391 @table @code
5392 @item gnu
5393 the updater for GNU packages;
5394 @item gnome
5395 the updater for GNOME packages;
5396 @item kde
5397 the updater for KDE packages;
5398 @item xorg
5399 the updater for X.org packages;
5400 @item kernel.org
5401 the updater for packages hosted on kernel.org;
5402 @item elpa
5403 the updater for @uref{http://elpa.gnu.org/, ELPA} packages;
5404 @item cran
5405 the updater for @uref{http://cran.r-project.org/, CRAN} packages;
5406 @item bioconductor
5407 the updater for @uref{http://www.bioconductor.org/, Bioconductor} R packages;
5408 @item cpan
5409 the updater for @uref{http://www.cpan.org/, CPAN} packages;
5410 @item pypi
5411 the updater for @uref{https://pypi.python.org, PyPI} packages.
5412 @item gem
5413 the updater for @uref{https://rubygems.org, RubyGems} packages.
5414 @item github
5415 the updater for @uref{https://github.com, GitHub} packages.
5416 @item hackage
5417 the updater for @uref{https://hackage.haskell.org, Hackage} packages.
5418 @item crate
5419 the updater for @uref{https://crates.io, Crates} packages.
5420 @end table
5421
5422 For instance, the following command only checks for updates of Emacs
5423 packages hosted at @code{elpa.gnu.org} and for updates of CRAN packages:
5424
5425 @example
5426 $ guix refresh --type=elpa,cran
5427 gnu/packages/statistics.scm:819:13: r-testthat would be upgraded from 0.10.0 to 0.11.0
5428 gnu/packages/emacs.scm:856:13: emacs-auctex would be upgraded from 11.88.6 to 11.88.9
5429 @end example
5430
5431 @end table
5432
5433 In addition, @command{guix refresh} can be passed one or more package
5434 names, as in this example:
5435
5436 @example
5437 $ ./pre-inst-env guix refresh -u emacs idutils gcc@@4.8
5438 @end example
5439
5440 @noindent
5441 The command above specifically updates the @code{emacs} and
5442 @code{idutils} packages. The @code{--select} option would have no
5443 effect in this case.
5444
5445 When considering whether to upgrade a package, it is sometimes
5446 convenient to know which packages would be affected by the upgrade and
5447 should be checked for compatibility. For this the following option may
5448 be used when passing @command{guix refresh} one or more package names:
5449
5450 @table @code
5451
5452 @item --list-updaters
5453 @itemx -L
5454 List available updaters and exit (see @option{--type} above.)
5455
5456 For each updater, display the fraction of packages it covers; at the
5457 end, display the fraction of packages covered by all these updaters.
5458
5459 @item --list-dependent
5460 @itemx -l
5461 List top-level dependent packages that would need to be rebuilt as a
5462 result of upgrading one or more packages.
5463
5464 @xref{Invoking guix graph, the @code{reverse-package} type of
5465 @command{guix graph}}, for information on how to visualize the list of
5466 dependents of a package.
5467
5468 @end table
5469
5470 Be aware that the @code{--list-dependent} option only
5471 @emph{approximates} the rebuilds that would be required as a result of
5472 an upgrade. More rebuilds might be required under some circumstances.
5473
5474 @example
5475 $ guix refresh --list-dependent flex
5476 Building the following 120 packages would ensure 213 dependent packages are rebuilt:
5477 hop-2.4.0 geiser-0.4 notmuch-0.18 mu-0.9.9.5 cflow-1.4 idutils-4.6 @dots{}
5478 @end example
5479
5480 The command above lists a set of packages that could be built to check
5481 for compatibility with an upgraded @code{flex} package.
5482
5483 The following options can be used to customize GnuPG operation:
5484
5485 @table @code
5486
5487 @item --gpg=@var{command}
5488 Use @var{command} as the GnuPG 2.x command. @var{command} is searched
5489 for in @code{$PATH}.
5490
5491 @item --key-download=@var{policy}
5492 Handle missing OpenPGP keys according to @var{policy}, which may be one
5493 of:
5494
5495 @table @code
5496 @item always
5497 Always download missing OpenPGP keys from the key server, and add them
5498 to the user's GnuPG keyring.
5499
5500 @item never
5501 Never try to download missing OpenPGP keys. Instead just bail out.
5502
5503 @item interactive
5504 When a package signed with an unknown OpenPGP key is encountered, ask
5505 the user whether to download it or not. This is the default behavior.
5506 @end table
5507
5508 @item --key-server=@var{host}
5509 Use @var{host} as the OpenPGP key server when importing a public key.
5510
5511 @end table
5512
5513 The @code{github} updater uses the
5514 @uref{https://developer.github.com/v3/, GitHub API} to query for new
5515 releases. When used repeatedly e.g. when refreshing all packages,
5516 GitHub will eventually refuse to answer any further API requests. By
5517 default 60 API requests per hour are allowed, and a full refresh on all
5518 GitHub packages in Guix requires more than this. Authentication with
5519 GitHub through the use of an API token alleviates these limits. To use
5520 an API token, set the environment variable @code{GUIX_GITHUB_TOKEN} to a
5521 token procured from @uref{https://github.com/settings/tokens} or
5522 otherwise.
5523
5524
5525 @node Invoking guix lint
5526 @section Invoking @command{guix lint}
5527
5528 @cindex @command{guix lint}
5529 @cindex package, checking for errors
5530 The @command{guix lint} command is meant to help package developers avoid
5531 common errors and use a consistent style. It runs a number of checks on
5532 a given set of packages in order to find common mistakes in their
5533 definitions. Available @dfn{checkers} include (see
5534 @code{--list-checkers} for a complete list):
5535
5536 @table @code
5537 @item synopsis
5538 @itemx description
5539 Validate certain typographical and stylistic rules about package
5540 descriptions and synopses.
5541
5542 @item inputs-should-be-native
5543 Identify inputs that should most likely be native inputs.
5544
5545 @item source
5546 @itemx home-page
5547 @itemx mirror-url
5548 @itemx source-file-name
5549 Probe @code{home-page} and @code{source} URLs and report those that are
5550 invalid. Suggest a @code{mirror://} URL when applicable. Check that
5551 the source file name is meaningful, e.g. is not
5552 just a version number or ``git-checkout'', without a declared
5553 @code{file-name} (@pxref{origin Reference}).
5554
5555 @item cve
5556 @cindex security vulnerabilities
5557 @cindex CVE, Common Vulnerabilities and Exposures
5558 Report known vulnerabilities found in the Common Vulnerabilities and
5559 Exposures (CVE) databases of the current and past year
5560 @uref{https://nvd.nist.gov/download.cfm#CVE_FEED, published by the US
5561 NIST}.
5562
5563 To view information about a particular vulnerability, visit pages such as:
5564
5565 @itemize
5566 @item
5567 @indicateurl{https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-YYYY-ABCD}
5568 @item
5569 @indicateurl{https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-YYYY-ABCD}
5570 @end itemize
5571
5572 @noindent
5573 where @code{CVE-YYYY-ABCD} is the CVE identifier---e.g.,
5574 @code{CVE-2015-7554}.
5575
5576 Package developers can specify in package recipes the
5577 @uref{https://nvd.nist.gov/cpe.cfm,Common Platform Enumeration (CPE)}
5578 name and version of the package when they differ from the name that Guix
5579 uses, as in this example:
5580
5581 @example
5582 (package
5583 (name "grub")
5584 ;; @dots{}
5585 ;; CPE calls this package "grub2".
5586 (properties '((cpe-name . "grub2"))))
5587 @end example
5588
5589 @item formatting
5590 Warn about obvious source code formatting issues: trailing white space,
5591 use of tabulations, etc.
5592 @end table
5593
5594 The general syntax is:
5595
5596 @example
5597 guix lint @var{options} @var{package}@dots{}
5598 @end example
5599
5600 If no package is given on the command line, then all packages are checked.
5601 The @var{options} may be zero or more of the following:
5602
5603 @table @code
5604 @item --list-checkers
5605 @itemx -l
5606 List and describe all the available checkers that will be run on packages
5607 and exit.
5608
5609 @item --checkers
5610 @itemx -c
5611 Only enable the checkers specified in a comma-separated list using the
5612 names returned by @code{--list-checkers}.
5613
5614 @end table
5615
5616 @node Invoking guix size
5617 @section Invoking @command{guix size}
5618
5619 @cindex size
5620 @cindex package size
5621 @cindex closure
5622 @cindex @command{guix size}
5623 The @command{guix size} command helps package developers profile the
5624 disk usage of packages. It is easy to overlook the impact of an
5625 additional dependency added to a package, or the impact of using a
5626 single output for a package that could easily be split (@pxref{Packages
5627 with Multiple Outputs}). Such are the typical issues that
5628 @command{guix size} can highlight.
5629
5630 The command can be passed a package specification such as @code{gcc-4.8}
5631 or @code{guile:debug}, or a file name in the store. Consider this
5632 example:
5633
5634 @example
5635 $ guix size coreutils
5636 store item total self
5637 /gnu/store/@dots{}-coreutils-8.23 70.0 13.9 19.8%
5638 /gnu/store/@dots{}-gmp-6.0.0a 55.3 2.5 3.6%
5639 /gnu/store/@dots{}-acl-2.2.52 53.7 0.5 0.7%
5640 /gnu/store/@dots{}-attr-2.4.46 53.2 0.3 0.5%
5641 /gnu/store/@dots{}-gcc-4.8.4-lib 52.9 15.7 22.4%
5642 /gnu/store/@dots{}-glibc-2.21 37.2 37.2 53.1%
5643 @end example
5644
5645 @cindex closure
5646 The store items listed here constitute the @dfn{transitive closure} of
5647 Coreutils---i.e., Coreutils and all its dependencies, recursively---as
5648 would be returned by:
5649
5650 @example
5651 $ guix gc -R /gnu/store/@dots{}-coreutils-8.23
5652 @end example
5653
5654 Here the output shows three columns next to store items. The first column,
5655 labeled ``total'', shows the size in mebibytes (MiB) of the closure of
5656 the store item---that is, its own size plus the size of all its
5657 dependencies. The next column, labeled ``self'', shows the size of the
5658 item itself. The last column shows the ratio of the size of the item
5659 itself to the space occupied by all the items listed here.
5660
5661 In this example, we see that the closure of Coreutils weighs in at
5662 70@tie{}MiB, half of which is taken by libc. (That libc represents a
5663 large fraction of the closure is not a problem @i{per se} because it is
5664 always available on the system anyway.)
5665
5666 When the package passed to @command{guix size} is available in the
5667 store, @command{guix size} queries the daemon to determine its
5668 dependencies, and measures its size in the store, similar to @command{du
5669 -ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
5670 Coreutils}).
5671
5672 When the given package is @emph{not} in the store, @command{guix size}
5673 reports information based on the available substitutes
5674 (@pxref{Substitutes}). This makes it possible it to profile disk usage of
5675 store items that are not even on disk, only available remotely.
5676
5677 You can also specify several package names:
5678
5679 @example
5680 $ guix size coreutils grep sed bash
5681 store item total self
5682 /gnu/store/@dots{}-coreutils-8.24 77.8 13.8 13.4%
5683 /gnu/store/@dots{}-grep-2.22 73.1 0.8 0.8%
5684 /gnu/store/@dots{}-bash-4.3.42 72.3 4.7 4.6%
5685 /gnu/store/@dots{}-readline-6.3 67.6 1.2 1.2%
5686 @dots{}
5687 total: 102.3 MiB
5688 @end example
5689
5690 @noindent
5691 In this example we see that the combination of the four packages takes
5692 102.3@tie{}MiB in total, which is much less than the sum of each closure
5693 since they have a lot of dependencies in common.
5694
5695 The available options are:
5696
5697 @table @option
5698
5699 @item --substitute-urls=@var{urls}
5700 Use substitute information from @var{urls}.
5701 @xref{client-substitute-urls, the same option for @code{guix build}}.
5702
5703 @item --map-file=@var{file}
5704 Write a graphical map of disk usage in PNG format to @var{file}.
5705
5706 For the example above, the map looks like this:
5707
5708 @image{images/coreutils-size-map,5in,, map of Coreutils disk usage
5709 produced by @command{guix size}}
5710
5711 This option requires that
5712 @uref{http://wingolog.org/software/guile-charting/, Guile-Charting} be
5713 installed and visible in Guile's module search path. When that is not
5714 the case, @command{guix size} fails as it tries to load it.
5715
5716 @item --system=@var{system}
5717 @itemx -s @var{system}
5718 Consider packages for @var{system}---e.g., @code{x86_64-linux}.
5719
5720 @end table
5721
5722 @node Invoking guix graph
5723 @section Invoking @command{guix graph}
5724
5725 @cindex DAG
5726 @cindex @command{guix graph}
5727 @cindex package dependencies
5728 Packages and their dependencies form a @dfn{graph}, specifically a
5729 directed acyclic graph (DAG). It can quickly become difficult to have a
5730 mental model of the package DAG, so the @command{guix graph} command
5731 provides a visual representation of the DAG. By default,
5732 @command{guix graph} emits a DAG representation in the input format of
5733 @uref{http://www.graphviz.org/, Graphviz}, so its output can be passed
5734 directly to the @command{dot} command of Graphviz. It can also emit an
5735 HTML page with embedded JavaScript code to display a ``chord diagram''
5736 in a Web browser, using the @uref{https://d3js.org/, d3.js} library.
5737 The general syntax is:
5738
5739 @example
5740 guix graph @var{options} @var{package}@dots{}
5741 @end example
5742
5743 For example, the following command generates a PDF file representing the
5744 package DAG for the GNU@tie{}Core Utilities, showing its build-time
5745 dependencies:
5746
5747 @example
5748 guix graph coreutils | dot -Tpdf > dag.pdf
5749 @end example
5750
5751 The output looks like this:
5752
5753 @image{images/coreutils-graph,2in,,Dependency graph of the GNU Coreutils}
5754
5755 Nice little graph, no?
5756
5757 But there is more than one graph! The one above is concise: it is the
5758 graph of package objects, omitting implicit inputs such as GCC, libc,
5759 grep, etc. It is often useful to have such a concise graph, but
5760 sometimes one may want to see more details. @command{guix graph} supports
5761 several types of graphs, allowing you to choose the level of detail:
5762
5763 @table @code
5764 @item package
5765 This is the default type used in the example above. It shows the DAG of
5766 package objects, excluding implicit dependencies. It is concise, but
5767 filters out many details.
5768
5769 @item reverse-package
5770 This shows the @emph{reverse} DAG of packages. For example:
5771
5772 @example
5773 guix graph --type=reverse-package ocaml
5774 @end example
5775
5776 ... yields the graph of packages that depend on OCaml.
5777
5778 Note that for core packages this can yield huge graphs. If all you want
5779 is to know the number of packages that depend on a given package, use
5780 @command{guix refresh --list-dependent} (@pxref{Invoking guix refresh,
5781 @option{--list-dependent}}).
5782
5783 @item bag-emerged
5784 This is the package DAG, @emph{including} implicit inputs.
5785
5786 For instance, the following command:
5787
5788 @example
5789 guix graph --type=bag-emerged coreutils | dot -Tpdf > dag.pdf
5790 @end example
5791
5792 ... yields this bigger graph:
5793
5794 @image{images/coreutils-bag-graph,,5in,Detailed dependency graph of the GNU Coreutils}
5795
5796 At the bottom of the graph, we see all the implicit inputs of
5797 @var{gnu-build-system} (@pxref{Build Systems, @code{gnu-build-system}}).
5798
5799 Now, note that the dependencies of these implicit inputs---that is, the
5800 @dfn{bootstrap dependencies} (@pxref{Bootstrapping})---are not shown
5801 here, for conciseness.
5802
5803 @item bag
5804 Similar to @code{bag-emerged}, but this time including all the bootstrap
5805 dependencies.
5806
5807 @item bag-with-origins
5808 Similar to @code{bag}, but also showing origins and their dependencies.
5809
5810 @item derivations
5811 This is the most detailed representation: It shows the DAG of
5812 derivations (@pxref{Derivations}) and plain store items. Compared to
5813 the above representation, many additional nodes are visible, including
5814 build scripts, patches, Guile modules, etc.
5815
5816 For this type of graph, it is also possible to pass a @file{.drv} file
5817 name instead of a package name, as in:
5818
5819 @example
5820 guix graph -t derivation `guix system build -d my-config.scm`
5821 @end example
5822 @end table
5823
5824 All the types above correspond to @emph{build-time dependencies}. The
5825 following graph type represents the @emph{run-time dependencies}:
5826
5827 @table @code
5828 @item references
5829 This is the graph of @dfn{references} of a package output, as returned
5830 by @command{guix gc --references} (@pxref{Invoking guix gc}).
5831
5832 If the given package output is not available in the store, @command{guix
5833 graph} attempts to obtain dependency information from substitutes.
5834
5835 Here you can also pass a store file name instead of a package name. For
5836 example, the command below produces the reference graph of your profile
5837 (which can be big!):
5838
5839 @example
5840 guix graph -t references `readlink -f ~/.guix-profile`
5841 @end example
5842
5843 @item referrers
5844 This is the graph of the @dfn{referrers} of a store item, as returned by
5845 @command{guix gc --referrers} (@pxref{Invoking guix gc}).
5846
5847 This relies exclusively on local information from your store. For
5848 instance, let us suppose that the current Inkscape is available in 10
5849 profiles on your machine; @command{guix graph -t referrers inkscape}
5850 will show a graph rooted at Inkscape and with those 10 profiles linked
5851 to it.
5852
5853 It can help determine what is preventing a store item from being garbage
5854 collected.
5855
5856 @end table
5857
5858 The available options are the following:
5859
5860 @table @option
5861 @item --type=@var{type}
5862 @itemx -t @var{type}
5863 Produce a graph output of @var{type}, where @var{type} must be one of
5864 the values listed above.
5865
5866 @item --list-types
5867 List the supported graph types.
5868
5869 @item --backend=@var{backend}
5870 @itemx -b @var{backend}
5871 Produce a graph using the selected @var{backend}.
5872
5873 @item --list-backends
5874 List the supported graph backends.
5875
5876 Currently, the available backends are Graphviz and d3.js.
5877
5878 @item --expression=@var{expr}
5879 @itemx -e @var{expr}
5880 Consider the package @var{expr} evaluates to.
5881
5882 This is useful to precisely refer to a package, as in this example:
5883
5884 @example
5885 guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
5886 @end example
5887 @end table
5888
5889
5890 @node Invoking guix environment
5891 @section Invoking @command{guix environment}
5892
5893 @cindex reproducible build environments
5894 @cindex development environments
5895 @cindex @command{guix environment}
5896 @cindex environment, package build environment
5897 The purpose of @command{guix environment} is to assist hackers in
5898 creating reproducible development environments without polluting their
5899 package profile. The @command{guix environment} tool takes one or more
5900 packages, builds all of their inputs, and creates a shell
5901 environment to use them.
5902
5903 The general syntax is:
5904
5905 @example
5906 guix environment @var{options} @var{package}@dots{}
5907 @end example
5908
5909 The following example spawns a new shell set up for the development of
5910 GNU@tie{}Guile:
5911
5912 @example
5913 guix environment guile
5914 @end example
5915
5916 If the needed dependencies are not built yet, @command{guix environment}
5917 automatically builds them. The environment of the new shell is an augmented
5918 version of the environment that @command{guix environment} was run in.
5919 It contains the necessary search paths for building the given package
5920 added to the existing environment variables. To create a ``pure''
5921 environment, in which the original environment variables have been unset,
5922 use the @code{--pure} option@footnote{Users sometimes wrongfully augment
5923 environment variables such as @code{PATH} in their @file{~/.bashrc}
5924 file. As a consequence, when @code{guix environment} launches it, Bash
5925 may read @file{~/.bashrc}, thereby introducing ``impurities'' in these
5926 environment variables. It is an error to define such environment
5927 variables in @file{.bashrc}; instead, they should be defined in
5928 @file{.bash_profile}, which is sourced only by log-in shells.
5929 @xref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}, for
5930 details on Bash start-up files.}.
5931
5932 @vindex GUIX_ENVIRONMENT
5933 @command{guix environment} defines the @code{GUIX_ENVIRONMENT}
5934 variable in the shell it spawns; its value is the file name of the
5935 profile of this environment. This allows users to, say, define a
5936 specific prompt for development environments in their @file{.bashrc}
5937 (@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}):
5938
5939 @example
5940 if [ -n "$GUIX_ENVIRONMENT" ]
5941 then
5942 export PS1="\u@@\h \w [dev]\$ "
5943 fi
5944 @end example
5945
5946 @noindent
5947 ... or to browse the profile:
5948
5949 @example
5950 $ ls "$GUIX_ENVIRONMENT/bin"
5951 @end example
5952
5953 Additionally, more than one package may be specified, in which case the
5954 union of the inputs for the given packages are used. For example, the
5955 command below spawns a shell where all of the dependencies of both Guile
5956 and Emacs are available:
5957
5958 @example
5959 guix environment guile emacs
5960 @end example
5961
5962 Sometimes an interactive shell session is not desired. An arbitrary
5963 command may be invoked by placing the @code{--} token to separate the
5964 command from the rest of the arguments:
5965
5966 @example
5967 guix environment guile -- make -j4
5968 @end example
5969
5970 In other situations, it is more convenient to specify the list of
5971 packages needed in the environment. For example, the following command
5972 runs @command{python} from an environment containing Python@tie{}2.7 and
5973 NumPy:
5974
5975 @example
5976 guix environment --ad-hoc python2-numpy python-2.7 -- python
5977 @end example
5978
5979 Furthermore, one might want the dependencies of a package and also some
5980 additional packages that are not build-time or runtime dependencies, but
5981 are useful when developing nonetheless. Because of this, the
5982 @code{--ad-hoc} flag is positional. Packages appearing before
5983 @code{--ad-hoc} are interpreted as packages whose dependencies will be
5984 added to the environment. Packages appearing after are interpreted as
5985 packages that will be added to the environment directly. For example,
5986 the following command creates a Guix development environment that
5987 additionally includes Git and strace:
5988
5989 @example
5990 guix environment guix --ad-hoc git strace
5991 @end example
5992
5993 Sometimes it is desirable to isolate the environment as much as
5994 possible, for maximal purity and reproducibility. In particular, when
5995 using Guix on a host distro that is not GuixSD, it is desirable to
5996 prevent access to @file{/usr/bin} and other system-wide resources from
5997 the development environment. For example, the following command spawns
5998 a Guile REPL in a ``container'' where only the store and the current
5999 working directory are mounted:
6000
6001 @example
6002 guix environment --ad-hoc --container guile -- guile
6003 @end example
6004
6005 @quotation Note
6006 The @code{--container} option requires Linux-libre 3.19 or newer.
6007 @end quotation
6008
6009 The available options are summarized below.
6010
6011 @table @code
6012 @item --root=@var{file}
6013 @itemx -r @var{file}
6014 @cindex persistent environment
6015 @cindex garbage collector root, for environments
6016 Make @var{file} a symlink to the profile for this environment, and
6017 register it as a garbage collector root.
6018
6019 This is useful if you want to protect your environment from garbage
6020 collection, to make it ``persistent''.
6021
6022 When this option is omitted, the environment is protected from garbage
6023 collection only for the duration of the @command{guix environment}
6024 session. This means that next time you recreate the same environment,
6025 you could have to rebuild or re-download packages.
6026
6027 @item --expression=@var{expr}
6028 @itemx -e @var{expr}
6029 Create an environment for the package or list of packages that
6030 @var{expr} evaluates to.
6031
6032 For example, running:
6033
6034 @example
6035 guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
6036 @end example
6037
6038 starts a shell with the environment for this specific variant of the
6039 PETSc package.
6040
6041 Running:
6042
6043 @example
6044 guix environment --ad-hoc -e '(@@ (gnu) %base-packages)'
6045 @end example
6046
6047 starts a shell with all the GuixSD base packages available.
6048
6049 The above commands only the use default output of the given packages.
6050 To select other outputs, two element tuples can be specified:
6051
6052 @example
6053 guix environment --ad-hoc -e '(list (@ (gnu packages bash) bash) "include")'
6054 @end example
6055
6056 @item --load=@var{file}
6057 @itemx -l @var{file}
6058 Create an environment for the package or list of packages that the code
6059 within @var{file} evaluates to.
6060
6061 As an example, @var{file} might contain a definition like this
6062 (@pxref{Defining Packages}):
6063
6064 @example
6065 @verbatiminclude environment-gdb.scm
6066 @end example
6067
6068 @item --ad-hoc
6069 Include all specified packages in the resulting environment, as if an
6070 @i{ad hoc} package were defined with them as inputs. This option is
6071 useful for quickly creating an environment without having to write a
6072 package expression to contain the desired inputs.
6073
6074 For instance, the command:
6075
6076 @example
6077 guix environment --ad-hoc guile guile-sdl -- guile
6078 @end example
6079
6080 runs @command{guile} in an environment where Guile and Guile-SDL are
6081 available.
6082
6083 Note that this example implicitly asks for the default output of
6084 @code{guile} and @code{guile-sdl}, but it is possible to ask for a
6085 specific output---e.g., @code{glib:bin} asks for the @code{bin} output
6086 of @code{glib} (@pxref{Packages with Multiple Outputs}).
6087
6088 This option may be composed with the default behavior of @command{guix
6089 environment}. Packages appearing before @code{--ad-hoc} are interpreted
6090 as packages whose dependencies will be added to the environment, the
6091 default behavior. Packages appearing after are interpreted as packages
6092 that will be added to the environment directly.
6093
6094 @item --pure
6095 Unset existing environment variables when building the new environment.
6096 This has the effect of creating an environment in which search paths
6097 only contain package inputs.
6098
6099 @item --search-paths
6100 Display the environment variable definitions that make up the
6101 environment.
6102
6103 @item --system=@var{system}
6104 @itemx -s @var{system}
6105 Attempt to build for @var{system}---e.g., @code{i686-linux}.
6106
6107 @item --container
6108 @itemx -C
6109 @cindex container
6110 Run @var{command} within an isolated container. The current working
6111 directory outside the container is mapped inside the container.
6112 Additionally, a dummy home directory is created that matches the current
6113 user's home directory, and @file{/etc/passwd} is configured accordingly.
6114 The spawned process runs as the current user outside the container, but
6115 has root privileges in the context of the container.
6116
6117 @item --network
6118 @itemx -N
6119 For containers, share the network namespace with the host system.
6120 Containers created without this flag only have access to the loopback
6121 device.
6122
6123 @item --expose=@var{source}[=@var{target}]
6124 For containers, expose the file system @var{source} from the host system
6125 as the read-only file system @var{target} within the container. If
6126 @var{target} is not specified, @var{source} is used as the target mount
6127 point in the container.
6128
6129 The example below spawns a Guile REPL in a container in which the user's
6130 home directory is accessible read-only via the @file{/exchange}
6131 directory:
6132
6133 @example
6134 guix environment --container --expose=$HOME=/exchange guile -- guile
6135 @end example
6136
6137 @item --share=@var{source}[=@var{target}]
6138 For containers, share the file system @var{source} from the host system
6139 as the writable file system @var{target} within the container. If
6140 @var{target} is not specified, @var{source} is used as the target mount
6141 point in the container.
6142
6143 The example below spawns a Guile REPL in a container in which the user's
6144 home directory is accessible for both reading and writing via the
6145 @file{/exchange} directory:
6146
6147 @example
6148 guix environment --container --share=$HOME=/exchange guile -- guile
6149 @end example
6150 @end table
6151
6152 It also supports all of the common build options that @command{guix
6153 build} supports (@pxref{Common Build Options}).
6154
6155 @node Invoking guix publish
6156 @section Invoking @command{guix publish}
6157
6158 @cindex @command{guix publish}
6159 The purpose of @command{guix publish} is to enable users to easily share
6160 their store with others, who can then use it as a substitute server
6161 (@pxref{Substitutes}).
6162
6163 When @command{guix publish} runs, it spawns an HTTP server which allows
6164 anyone with network access to obtain substitutes from it. This means
6165 that any machine running Guix can also act as if it were a build farm,
6166 since the HTTP interface is compatible with Hydra, the software behind
6167 the @code{hydra.gnu.org} build farm.
6168
6169 For security, each substitute is signed, allowing recipients to check
6170 their authenticity and integrity (@pxref{Substitutes}). Because
6171 @command{guix publish} uses the signing key of the system, which is only
6172 readable by the system administrator, it must be started as root; the
6173 @code{--user} option makes it drop root privileges early on.
6174
6175 The signing key pair must be generated before @command{guix publish} is
6176 launched, using @command{guix archive --generate-key} (@pxref{Invoking
6177 guix archive}).
6178
6179 The general syntax is:
6180
6181 @example
6182 guix publish @var{options}@dots{}
6183 @end example
6184
6185 Running @command{guix publish} without any additional arguments will
6186 spawn an HTTP server on port 8080:
6187
6188 @example
6189 guix publish
6190 @end example
6191
6192 Once a publishing server has been authorized (@pxref{Invoking guix
6193 archive}), the daemon may download substitutes from it:
6194
6195 @example
6196 guix-daemon --substitute-urls=http://example.org:8080
6197 @end example
6198
6199 As a bonus, @command{guix publish} also serves as a content-addressed
6200 mirror for source files referenced in @code{origin} records
6201 (@pxref{origin Reference}). For instance, assuming @command{guix
6202 publish} is running on @code{example.org}, the following URL returns the
6203 raw @file{hello-2.10.tar.gz} file with the given SHA256 hash
6204 (represented in @code{nix-base32} format, @pxref{Invoking guix hash}):
6205
6206 @example
6207 http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1@dots{}ndq1i
6208 @end example
6209
6210 Obviously, these URLs only work for files that are in the store; in
6211 other cases, they return 404 (``Not Found'').
6212
6213 The following options are available:
6214
6215 @table @code
6216 @item --port=@var{port}
6217 @itemx -p @var{port}
6218 Listen for HTTP requests on @var{port}.
6219
6220 @item --listen=@var{host}
6221 Listen on the network interface for @var{host}. The default is to
6222 accept connections from any interface.
6223
6224 @item --user=@var{user}
6225 @itemx -u @var{user}
6226 Change privileges to @var{user} as soon as possible---i.e., once the
6227 server socket is open and the signing key has been read.
6228
6229 @item --compression[=@var{level}]
6230 @itemx -C [@var{level}]
6231 Compress data using the given @var{level}. When @var{level} is zero,
6232 disable compression. The range 1 to 9 corresponds to different gzip
6233 compression levels: 1 is the fastest, and 9 is the best (CPU-intensive).
6234 The default is 3.
6235
6236 Compression occurs on the fly and the compressed streams are not
6237 cached. Thus, to reduce load on the machine that runs @command{guix
6238 publish}, it may be a good idea to choose a low compression level, or to
6239 run @command{guix publish} behind a caching proxy.
6240
6241 @item --ttl=@var{ttl}
6242 Produce @code{Cache-Control} HTTP headers that advertise a time-to-live
6243 (TTL) of @var{ttl}. @var{ttl} must denote a duration: @code{5d} means 5
6244 days, @code{1m} means 1 month, and so on.
6245
6246 This allows the user's Guix to keep substitute information in cache for
6247 @var{ttl}. However, note that @code{guix publish} does not itself
6248 guarantee that the store items it provides will indeed remain available
6249 for as long as @var{ttl}.
6250
6251 @item --repl[=@var{port}]
6252 @itemx -r [@var{port}]
6253 Spawn a Guile REPL server (@pxref{REPL Servers,,, guile, GNU Guile
6254 Reference Manual}) on @var{port} (37146 by default). This is used
6255 primarily for debugging a running @command{guix publish} server.
6256 @end table
6257
6258 Enabling @command{guix publish} on a GuixSD system is a one-liner: just
6259 add a call to @code{guix-publish-service} in the @code{services} field
6260 of the @code{operating-system} declaration (@pxref{guix-publish-service,
6261 @code{guix-publish-service}}).
6262
6263 If you are instead running Guix on a ``foreign distro'', follow these
6264 instructions:”
6265
6266 @itemize
6267 @item
6268 If your host distro uses the systemd init system:
6269
6270 @example
6271 # ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \
6272 /etc/systemd/system/
6273 # systemctl start guix-publish && systemctl enable guix-publish
6274 @end example
6275
6276 @item
6277 If your host distro uses the Upstart init system:
6278
6279 @example
6280 # ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/
6281 # start guix-publish
6282 @end example
6283
6284 @item
6285 Otherwise, proceed similarly with your distro's init system.
6286 @end itemize
6287
6288 @node Invoking guix challenge
6289 @section Invoking @command{guix challenge}
6290
6291 @cindex reproducible builds
6292 @cindex verifiable builds
6293 @cindex @command{guix challenge}
6294 @cindex challenge
6295 Do the binaries provided by this server really correspond to the source
6296 code it claims to build? Is a package build process deterministic?
6297 These are the questions the @command{guix challenge} command attempts to
6298 answer.
6299
6300 The former is obviously an important question: Before using a substitute
6301 server (@pxref{Substitutes}), one had better @emph{verify} that it
6302 provides the right binaries, and thus @emph{challenge} it. The latter
6303 is what enables the former: If package builds are deterministic, then
6304 independent builds of the package should yield the exact same result,
6305 bit for bit; if a server provides a binary different from the one
6306 obtained locally, it may be either corrupt or malicious.
6307
6308 We know that the hash that shows up in @file{/gnu/store} file names is
6309 the hash of all the inputs of the process that built the file or
6310 directory---compilers, libraries, build scripts,
6311 etc. (@pxref{Introduction}). Assuming deterministic build processes,
6312 one store file name should map to exactly one build output.
6313 @command{guix challenge} checks whether there is, indeed, a single
6314 mapping by comparing the build outputs of several independent builds of
6315 any given store item.
6316
6317 The command output looks like this:
6318
6319 @smallexample
6320 $ guix challenge --substitute-urls="https://hydra.gnu.org https://guix.example.org"
6321 updating list of substitutes from 'https://hydra.gnu.org'... 100.0%
6322 updating list of substitutes from 'https://guix.example.org'... 100.0%
6323 /gnu/store/@dots{}-openssl-1.0.2d contents differ:
6324 local hash: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
6325 https://hydra.gnu.org/nar/@dots{}-openssl-1.0.2d: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
6326 https://guix.example.org/nar/@dots{}-openssl-1.0.2d: 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim
6327 /gnu/store/@dots{}-git-2.5.0 contents differ:
6328 local hash: 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha
6329 https://hydra.gnu.org/nar/@dots{}-git-2.5.0: 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f
6330 https://guix.example.org/nar/@dots{}-git-2.5.0: 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73
6331 /gnu/store/@dots{}-pius-2.1.1 contents differ:
6332 local hash: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
6333 https://hydra.gnu.org/nar/@dots{}-pius-2.1.1: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
6334 https://guix.example.org/nar/@dots{}-pius-2.1.1: 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs
6335 @end smallexample
6336
6337 @noindent
6338 In this example, @command{guix challenge} first scans the store to
6339 determine the set of locally-built derivations---as opposed to store
6340 items that were downloaded from a substitute server---and then queries
6341 all the substitute servers. It then reports those store items for which
6342 the servers obtained a result different from the local build.
6343
6344 @cindex non-determinism, in package builds
6345 As an example, @code{guix.example.org} always gets a different answer.
6346 Conversely, @code{hydra.gnu.org} agrees with local builds, except in the
6347 case of Git. This might indicate that the build process of Git is
6348 non-deterministic, meaning that its output varies as a function of
6349 various things that Guix does not fully control, in spite of building
6350 packages in isolated environments (@pxref{Features}). Most common
6351 sources of non-determinism include the addition of timestamps in build
6352 results, the inclusion of random numbers, and directory listings sorted
6353 by inode number. See @uref{https://reproducible-builds.org/docs/}, for
6354 more information.
6355
6356 To find out what is wrong with this Git binary, we can do something along
6357 these lines (@pxref{Invoking guix archive}):
6358
6359 @example
6360 $ wget -q -O - https://hydra.gnu.org/nar/@dots{}-git-2.5.0 \
6361 | guix archive -x /tmp/git
6362 $ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git
6363 @end example
6364
6365 This command shows the difference between the files resulting from the
6366 local build, and the files resulting from the build on
6367 @code{hydra.gnu.org} (@pxref{Overview, Comparing and Merging Files,,
6368 diffutils, Comparing and Merging Files}). The @command{diff} command
6369 works great for text files. When binary files differ, a better option
6370 is @uref{https://diffoscope.org/, Diffoscope}, a tool that helps
6371 visualize differences for all kinds of files.
6372
6373 Once you have done that work, you can tell whether the differences are due
6374 to a non-deterministic build process or to a malicious server. We try
6375 hard to remove sources of non-determinism in packages to make it easier
6376 to verify substitutes, but of course, this is a process that
6377 involves not just Guix, but a large part of the free software community.
6378 In the meantime, @command{guix challenge} is one tool to help address
6379 the problem.
6380
6381 If you are writing packages for Guix, you are encouraged to check
6382 whether @code{hydra.gnu.org} and other substitute servers obtain the
6383 same build result as you did with:
6384
6385 @example
6386 $ guix challenge @var{package}
6387 @end example
6388
6389 @noindent
6390 where @var{package} is a package specification such as
6391 @code{guile@@2.0} or @code{glibc:debug}.
6392
6393 The general syntax is:
6394
6395 @example
6396 guix challenge @var{options} [@var{packages}@dots{}]
6397 @end example
6398
6399 When a difference is found between the hash of a locally-built item and
6400 that of a server-provided substitute, or among substitutes provided by
6401 different servers, the command displays it as in the example above and
6402 its exit code is 2 (other non-zero exit codes denote other kinds of
6403 errors.)
6404
6405 The one option that matters is:
6406
6407 @table @code
6408
6409 @item --substitute-urls=@var{urls}
6410 Consider @var{urls} the whitespace-separated list of substitute source
6411 URLs to compare to.
6412
6413 @end table
6414
6415 @node Invoking guix copy
6416 @section Invoking @command{guix copy}
6417
6418 @cindex copy, of store items, over SSH
6419 @cindex SSH, copy of store items
6420 @cindex sharing store items across machines
6421 @cindex transferring store items across machines
6422 The @command{guix copy} command copies items from the store of one
6423 machine to that of another machine over a secure shell (SSH)
6424 connection@footnote{This command is available only when Guile-SSH was
6425 found. @xref{Requirements}, for details.}. For example, the following
6426 command copies the @code{coreutils} package, the user's profile, and all
6427 their dependencies over to @var{host}, logged in as @var{user}:
6428
6429 @example
6430 guix copy --to=@var{user}@@@var{host} \
6431 coreutils `readlink -f ~/.guix-profile`
6432 @end example
6433
6434 If some of the items to be copied are already present on @var{host},
6435 they are not actually sent.
6436
6437 The command below retrieves @code{libreoffice} and @code{gimp} from
6438 @var{host}, assuming they are available there:
6439
6440 @example
6441 guix copy --from=@var{host} libreoffice gimp
6442 @end example
6443
6444 The SSH connection is established using the Guile-SSH client, which is
6445 compatible with OpenSSH: it honors @file{~/.ssh/known_hosts} and
6446 @file{~/.ssh/config}, and uses the SSH agent for authentication.
6447
6448 The key used to sign items that are sent must be accepted by the remote
6449 machine. Likewise, the key used by the remote machine to sign items you
6450 are retrieving must be in @file{/etc/guix/acl} so it is accepted by your
6451 own daemon. @xref{Invoking guix archive}, for more information about
6452 store item authentication.
6453
6454 The general syntax is:
6455
6456 @example
6457 guix copy [--to=@var{spec}|--from=@var{spec}] @var{items}@dots{}
6458 @end example
6459
6460 You must always specify one of the following options:
6461
6462 @table @code
6463 @item --to=@var{spec}
6464 @itemx --from=@var{spec}
6465 Specify the host to send to or receive from. @var{spec} must be an SSH
6466 spec such as @code{example.org}, @code{charlie@@example.org}, or
6467 @code{charlie@@example.org:2222}.
6468 @end table
6469
6470 The @var{items} can be either package names, such as @code{gimp}, or
6471 store items, such as @file{/gnu/store/@dots{}-idutils-4.6}.
6472
6473 When specifying the name of a package to send, it is first built if
6474 needed, unless @option{--dry-run} was specified. Common build options
6475 are supported (@pxref{Common Build Options}).
6476
6477
6478 @node Invoking guix container
6479 @section Invoking @command{guix container}
6480 @cindex container
6481 @cindex @command{guix container}
6482 @quotation Note
6483 As of version @value{VERSION}, this tool is experimental. The interface
6484 is subject to radical change in the future.
6485 @end quotation
6486
6487 The purpose of @command{guix container} is to manipulate processes
6488 running within an isolated environment, commonly known as a
6489 ``container'', typically created by the @command{guix environment}
6490 (@pxref{Invoking guix environment}) and @command{guix system container}
6491 (@pxref{Invoking guix system}) commands.
6492
6493 The general syntax is:
6494
6495 @example
6496 guix container @var{action} @var{options}@dots{}
6497 @end example
6498
6499 @var{action} specifies the operation to perform with a container, and
6500 @var{options} specifies the context-specific arguments for the action.
6501
6502 The following actions are available:
6503
6504 @table @code
6505 @item exec
6506 Execute a command within the context of a running container.
6507
6508 The syntax is:
6509
6510 @example
6511 guix container exec @var{pid} @var{program} @var{arguments}@dots{}
6512 @end example
6513
6514 @var{pid} specifies the process ID of the running container.
6515 @var{program} specifies an executable file name within the root file
6516 system of the container. @var{arguments} are the additional options that
6517 will be passed to @var{program}.
6518
6519 The following command launches an interactive login shell inside a
6520 GuixSD container, started by @command{guix system container}, and whose
6521 process ID is 9001:
6522
6523 @example
6524 guix container exec 9001 /run/current-system/profile/bin/bash --login
6525 @end example
6526
6527 Note that the @var{pid} cannot be the parent process of a container. It
6528 must be PID 1 of the container or one of its child processes.
6529
6530 @end table
6531
6532 @c *********************************************************************
6533 @node GNU Distribution
6534 @chapter GNU Distribution
6535
6536 @cindex Guix System Distribution
6537 @cindex GuixSD
6538 Guix comes with a distribution of the GNU system consisting entirely of
6539 free software@footnote{The term ``free'' here refers to the
6540 @url{http://www.gnu.org/philosophy/free-sw.html,freedom provided to
6541 users of that software}.}. The
6542 distribution can be installed on its own (@pxref{System Installation}),
6543 but it is also possible to install Guix as a package manager on top of
6544 an installed GNU/Linux system (@pxref{Installation}). To distinguish
6545 between the two, we refer to the standalone distribution as the Guix
6546 System Distribution, or GuixSD.
6547
6548 The distribution provides core GNU packages such as GNU libc, GCC, and
6549 Binutils, as well as many GNU and non-GNU applications. The complete
6550 list of available packages can be browsed
6551 @url{http://www.gnu.org/software/guix/packages,on-line} or by
6552 running @command{guix package} (@pxref{Invoking guix package}):
6553
6554 @example
6555 guix package --list-available
6556 @end example
6557
6558 Our goal is to provide a practical 100% free software distribution of
6559 Linux-based and other variants of GNU, with a focus on the promotion and
6560 tight integration of GNU components, and an emphasis on programs and
6561 tools that help users exert that freedom.
6562
6563 Packages are currently available on the following platforms:
6564
6565 @table @code
6566
6567 @item x86_64-linux
6568 Intel/AMD @code{x86_64} architecture, Linux-Libre kernel;
6569
6570 @item i686-linux
6571 Intel 32-bit architecture (IA32), Linux-Libre kernel;
6572
6573 @item armhf-linux
6574 ARMv7-A architecture with hard float, Thumb-2 and NEON,
6575 using the EABI hard-float application binary interface (ABI),
6576 and Linux-Libre kernel.
6577
6578 @item mips64el-linux
6579 little-endian 64-bit MIPS processors, specifically the Loongson series,
6580 n32 ABI, and Linux-Libre kernel.
6581
6582 @end table
6583
6584 GuixSD itself is currently only available on @code{i686} and @code{x86_64}.
6585
6586 @noindent
6587 For information on porting to other architectures or kernels,
6588 @pxref{Porting}.
6589
6590 @menu
6591 * System Installation:: Installing the whole operating system.
6592 * System Configuration:: Configuring the operating system.
6593 * Installing Debugging Files:: Feeding the debugger.
6594 * Security Updates:: Deploying security fixes quickly.
6595 * Package Modules:: Packages from the programmer's viewpoint.
6596 * Packaging Guidelines:: Growing the distribution.
6597 * Bootstrapping:: GNU/Linux built from scratch.
6598 * Porting:: Targeting another platform or kernel.
6599 @end menu
6600
6601 Building this distribution is a cooperative effort, and you are invited
6602 to join! @xref{Contributing}, for information about how you can help.
6603
6604 @node System Installation
6605 @section System Installation
6606
6607 @cindex installing GuixSD
6608 @cindex Guix System Distribution
6609 This section explains how to install the Guix System Distribution (GuixSD)
6610 on a machine. The Guix package manager can
6611 also be installed on top of a running GNU/Linux system,
6612 @pxref{Installation}.
6613
6614 @ifinfo
6615 @quotation Note
6616 @c This paragraph is for people reading this from tty2 of the
6617 @c installation image.
6618 You are reading this documentation with an Info reader. For details on
6619 how to use it, hit the @key{RET} key (``return'' or ``enter'') on the
6620 link that follows: @pxref{Top, Info reader,, info-stnd, Stand-alone GNU
6621 Info}. Hit @kbd{l} afterwards to come back here.
6622
6623 Alternately, run @command{info info} in another tty to keep the manual
6624 available.
6625 @end quotation
6626 @end ifinfo
6627
6628 @menu
6629 * Limitations:: What you can expect.
6630 * Hardware Considerations:: Supported hardware.
6631 * USB Stick Installation:: Preparing the installation medium.
6632 * Preparing for Installation:: Networking, partitioning, etc.
6633 * Proceeding with the Installation:: The real thing.
6634 * Installing GuixSD in a VM:: GuixSD playground.
6635 * Building the Installation Image:: How this comes to be.
6636 @end menu
6637
6638 @node Limitations
6639 @subsection Limitations
6640
6641 As of version @value{VERSION}, the Guix System Distribution (GuixSD) is
6642 not production-ready. It may contain bugs and lack important
6643 features. Thus, if you are looking for a stable production system that
6644 respects your freedom as a computer user, a good solution at this point
6645 is to consider @url{http://www.gnu.org/distros/free-distros.html, one of
6646 the more established GNU/Linux distributions}. We hope you can soon switch
6647 to the GuixSD without fear, of course. In the meantime, you can
6648 also keep using your distribution and try out the package manager on top
6649 of it (@pxref{Installation}).
6650
6651 Before you proceed with the installation, be aware of the following
6652 noteworthy limitations applicable to version @value{VERSION}:
6653
6654 @itemize
6655 @item
6656 The installation process does not include a graphical user interface and
6657 requires familiarity with GNU/Linux (see the following subsections to
6658 get a feel of what that means.)
6659
6660 @item
6661 Support for the Logical Volume Manager (LVM) is missing.
6662
6663 @item
6664 Few system services are currently supported out-of-the-box
6665 (@pxref{Services}).
6666
6667 @item
6668 More than 4,000 packages are available, but you may
6669 occasionally find that a useful package is missing.
6670
6671 @item
6672 GNOME, Xfce, and Enlightenment are available (@pxref{Desktop Services}),
6673 as well as a number of X11 window managers. However, some graphical
6674 applications may be missing, as well as KDE.
6675 @end itemize
6676
6677 You have been warned! But more than a disclaimer, this is an invitation
6678 to report issues (and success stories!), and to join us in improving it.
6679 @xref{Contributing}, for more info.
6680
6681
6682 @node Hardware Considerations
6683 @subsection Hardware Considerations
6684
6685 @cindex hardware support on GuixSD
6686 GNU@tie{}GuixSD focuses on respecting the user's computing freedom. It
6687 builds around the kernel Linux-libre, which means that only hardware for
6688 which free software drivers and firmware exist is supported. Nowadays,
6689 a wide range of off-the-shelf hardware is supported on
6690 GNU/Linux-libre---from keyboards to graphics cards to scanners and
6691 Ethernet controllers. Unfortunately, there are still areas where
6692 hardware vendors deny users control over their own computing, and such
6693 hardware is not supported on GuixSD.
6694
6695 @cindex WiFi, hardware support
6696 One of the main areas where free drivers or firmware are lacking is WiFi
6697 devices. WiFi devices known to work include those using Atheros chips
6698 (AR9271 and AR7010), which corresponds to the @code{ath9k} Linux-libre
6699 driver, and those using Broadcom/AirForce chips (BCM43xx with
6700 Wireless-Core Revision 5), which corresponds to the @code{b43-open}
6701 Linux-libre driver. Free firmware exists for both and is available
6702 out-of-the-box on GuixSD, as part of @var{%base-firmware}
6703 (@pxref{operating-system Reference, @code{firmware}}).
6704
6705 @cindex RYF, Respects Your Freedom
6706 The @uref{https://www.fsf.org/, Free Software Foundation} runs
6707 @uref{https://www.fsf.org/ryf, @dfn{Respects Your Freedom}} (RYF), a
6708 certification program for hardware products that respect your freedom
6709 and your privacy and ensure that you have control over your device. We
6710 encourage you to check the list of RYF-certified devices.
6711
6712 Another useful resource is the @uref{https://www.h-node.org/, H-Node}
6713 web site. It contains a catalog of hardware devices with information
6714 about their support in GNU/Linux.
6715
6716
6717 @node USB Stick Installation
6718 @subsection USB Stick Installation
6719
6720 An installation image for USB sticks can be downloaded from
6721 @indicateurl{ftp://alpha.gnu.org/gnu/guix/guixsd-usb-install-@value{VERSION}.@var{system}.xz},
6722 where @var{system} is one of:
6723
6724 @table @code
6725 @item x86_64-linux
6726 for a GNU/Linux system on Intel/AMD-compatible 64-bit CPUs;
6727
6728 @item i686-linux
6729 for a 32-bit GNU/Linux system on Intel-compatible CPUs.
6730 @end table
6731
6732 @c start duplication of authentication part from ``Binary Installation''
6733 Make sure to download the associated @file{.sig} file and to verify the
6734 authenticity of the image against it, along these lines:
6735
6736 @example
6737 $ wget ftp://alpha.gnu.org/gnu/guix/guixsd-usb-install-@value{VERSION}.@var{system}.xz.sig
6738 $ gpg --verify guixsd-usb-install-@value{VERSION}.@var{system}.xz.sig
6739 @end example
6740
6741 If that command fails because you do not have the required public key,
6742 then run this command to import it:
6743
6744 @example
6745 $ gpg --keyserver pgp.mit.edu --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
6746 @end example
6747
6748 @noindent
6749 and rerun the @code{gpg --verify} command.
6750 @c end duplication
6751
6752 This image contains a single partition with the tools necessary for an
6753 installation. It is meant to be copied @emph{as is} to a large-enough
6754 USB stick.
6755
6756 To copy the image to a USB stick, follow these steps:
6757
6758 @enumerate
6759 @item
6760 Decompress the image using the @command{xz} command:
6761
6762 @example
6763 xz -d guixsd-usb-install-@value{VERSION}.@var{system}.xz
6764 @end example
6765
6766 @item
6767 Insert a USB stick of 1@tie{}GiB or more into your machine, and determine
6768 its device name. Assuming that the USB stick is known as @file{/dev/sdX},
6769 copy the image with:
6770
6771 @example
6772 dd if=guixsd-usb-install-@value{VERSION}.x86_64 of=/dev/sdX
6773 @end example
6774
6775 Access to @file{/dev/sdX} usually requires root privileges.
6776 @end enumerate
6777
6778 Once this is done, you should be able to reboot the system and boot from
6779 the USB stick. The latter usually requires you to get in the BIOS' boot
6780 menu, where you can choose to boot from the USB stick.
6781
6782 @xref{Installing GuixSD in a VM}, if, instead, you would like to install
6783 GuixSD in a virtual machine (VM).
6784
6785 @node Preparing for Installation
6786 @subsection Preparing for Installation
6787
6788 Once you have successfully booted the image on the USB stick, you should
6789 end up with a root prompt. Several console TTYs are configured and can
6790 be used to run commands as root. TTY2 shows this documentation,
6791 browsable using the Info reader commands (@pxref{Top,,, info-stnd,
6792 Stand-alone GNU Info}). The installation system runs the GPM mouse
6793 daemon, which allows you to select text with the left mouse button and
6794 to paste it with the middle button.
6795
6796 @quotation Note
6797 Installation requires access to the Internet so that any missing
6798 dependencies of your system configuration can be downloaded. See the
6799 ``Networking'' section below.
6800 @end quotation
6801
6802 The installation system includes many common tools needed for this task.
6803 But it is also a full-blown GuixSD system, which means that you can
6804 install additional packages, should you need it, using @command{guix
6805 package} (@pxref{Invoking guix package}).
6806
6807 @subsubsection Keyboard Layout
6808
6809 @cindex keyboard layout
6810 The installation image uses the US qwerty keyboard layout. If you want
6811 to change it, you can use the @command{loadkeys} command. For example,
6812 the following command selects the Dvorak keyboard layout:
6813
6814 @example
6815 loadkeys dvorak
6816 @end example
6817
6818 See the files under @file{/run/current-system/profile/share/keymaps} for
6819 a list of available keyboard layouts. Run @command{man loadkeys} for
6820 more information.
6821
6822 @subsubsection Networking
6823
6824 Run the following command see what your network interfaces are called:
6825
6826 @example
6827 ifconfig -a
6828 @end example
6829
6830 @noindent
6831 @dots{} or, using the GNU/Linux-specific @command{ip} command:
6832
6833 @example
6834 ip a
6835 @end example
6836
6837 @c http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
6838 Wired interfaces have a name starting with @samp{e}; for example, the
6839 interface corresponding to the first on-board Ethernet controller is
6840 called @samp{eno1}. Wireless interfaces have a name starting with
6841 @samp{w}, like @samp{w1p2s0}.
6842
6843 @table @asis
6844 @item Wired connection
6845 To configure a wired network run the following command, substituting
6846 @var{interface} with the name of the wired interface you want to use.
6847
6848 @example
6849 ifconfig @var{interface} up
6850 @end example
6851
6852 @item Wireless connection
6853 @cindex wireless
6854 @cindex WiFi
6855 To configure wireless networking, you can create a configuration file
6856 for the @command{wpa_supplicant} configuration tool (its location is not
6857 important) using one of the available text editors such as
6858 @command{zile}:
6859
6860 @example
6861 zile wpa_supplicant.conf
6862 @end example
6863
6864 As an example, the following stanza can go to this file and will work
6865 for many wireless networks, provided you give the actual SSID and
6866 passphrase for the network you are connecting to:
6867
6868 @example
6869 network=@{
6870 ssid="@var{my-ssid}"
6871 key_mgmt=WPA-PSK
6872 psk="the network's secret passphrase"
6873 @}
6874 @end example
6875
6876 Start the wireless service and run it in the background with the
6877 following command (substitute @var{interface} with the name of the
6878 network interface you want to use):
6879
6880 @example
6881 wpa_supplicant -c wpa_supplicant.conf -i @var{interface} -B
6882 @end example
6883
6884 Run @command{man wpa_supplicant} for more information.
6885 @end table
6886
6887 @cindex DHCP
6888 At this point, you need to acquire an IP address. On a network where IP
6889 addresses are automatically assigned @i{via} DHCP, you can run:
6890
6891 @example
6892 dhclient -v @var{interface}
6893 @end example
6894
6895 Try to ping a server to see if networking is up and running:
6896
6897 @example
6898 ping -c 3 gnu.org
6899 @end example
6900
6901 Setting up network access is almost always a requirement because the
6902 image does not contain all the software and tools that may be needed.
6903
6904 @subsubsection Disk Partitioning
6905
6906 Unless this has already been done, the next step is to partition, and
6907 then format the target partition(s).
6908
6909 The installation image includes several partitioning tools, including
6910 Parted (@pxref{Overview,,, parted, GNU Parted User Manual}),
6911 @command{fdisk}, and @command{cfdisk}. Run it and set up your disk with
6912 the partition layout you want:
6913
6914 @example
6915 cfdisk
6916 @end example
6917
6918 Once you are done partitioning the target hard disk drive, you have to
6919 create a file system on the relevant partition(s)@footnote{Currently
6920 GuixSD pretty much assumes an ext4 file system. In particular, code
6921 that reads partition UUIDs and labels only works with ext4. This will
6922 be fixed in the future.}.
6923
6924 Preferably, assign partitions a label so that you can easily and
6925 reliably refer to them in @code{file-system} declarations (@pxref{File
6926 Systems}). This is typically done using the @code{-L} option of
6927 @command{mkfs.ext4} and related commands. So, assuming the target root
6928 partition lives at @file{/dev/sda1}, a file system with the label
6929 @code{my-root} can be created with:
6930
6931 @example
6932 mkfs.ext4 -L my-root /dev/sda1
6933 @end example
6934
6935 @cindex encrypted disk
6936 If you are instead planning to encrypt the root partition, you can use
6937 the Cryptsetup/LUKS utilities to do that (see @inlinefmtifelse{html,
6938 @uref{https://linux.die.net/man/8/cryptsetup, @code{man cryptsetup}},
6939 @code{man cryptsetup}} for more information.) Assuming you want to
6940 store the root partition on @file{/dev/sda1}, the command sequence would
6941 be along these lines:
6942
6943 @example
6944 cryptsetup luksFormat /dev/sda1
6945 cryptsetup open --type luks /dev/sda1 my-partition
6946 mkfs.ext4 -L my-root /dev/mapper/my-partition
6947 @end example
6948
6949 Once that is done, mount the target root partition under @file{/mnt}
6950 with a command like (again, assuming @code{my-root} is the label of the
6951 root partition):
6952
6953 @example
6954 mount LABEL=my-root /mnt
6955 @end example
6956
6957 Finally, if you plan to use one or more swap partitions (@pxref{Memory
6958 Concepts, swap space,, libc, The GNU C Library Reference Manual}), make
6959 sure to initialize them with @command{mkswap}. Assuming you have one
6960 swap partition on @file{/dev/sda2}, you would run:
6961
6962 @example
6963 mkswap /dev/sda2
6964 swapon /dev/sda2
6965 @end example
6966
6967 @node Proceeding with the Installation
6968 @subsection Proceeding with the Installation
6969
6970 With the target partitions ready and the target root mounted on
6971 @file{/mnt}, we're ready to go. First, run:
6972
6973 @example
6974 herd start cow-store /mnt
6975 @end example
6976
6977 This makes @file{/gnu/store} copy-on-write, such that packages added to it
6978 during the installation phase are written to the target disk on @file{/mnt}
6979 rather than kept in memory. This is necessary because the first phase of
6980 the @command{guix system init} command (see below) entails downloads or
6981 builds to @file{/gnu/store} which, initially, is an in-memory file system.
6982
6983 Next, you have to edit a file and
6984 provide the declaration of the operating system to be installed. To
6985 that end, the installation system comes with three text editors: GNU nano
6986 (@pxref{Top,,, nano, GNU nano Manual}), GNU Zile (an Emacs clone), and
6987 nvi (a clone of the original BSD @command{vi} editor).
6988 We strongly recommend storing that file on the target root file system, say,
6989 as @file{/mnt/etc/config.scm}. Failing to do that, you will have lost your
6990 configuration file once you have rebooted into the newly-installed system.
6991
6992 @xref{Using the Configuration System}, for an overview of the
6993 configuration file. The example configurations discussed in that
6994 section are available under @file{/etc/configuration} in the
6995 installation image. Thus, to get started with a system configuration
6996 providing a graphical display server (a ``desktop'' system), you can run
6997 something along these lines:
6998
6999 @example
7000 # mkdir /mnt/etc
7001 # cp /etc/configuration/desktop.scm /mnt/etc/config.scm
7002 # zile /mnt/etc/config.scm
7003 @end example
7004
7005 You should pay attention to what your configuration file contains, and
7006 in particular:
7007
7008 @itemize
7009 @item
7010 Make sure the @code{grub-configuration} form refers to the device you
7011 want to install GRUB on.
7012
7013 @item
7014 Be sure that your partition labels match the value of their respective
7015 @code{device} fields in your @code{file-system} configuration, assuming
7016 your @code{file-system} configuration sets the value of @code{title} to
7017 @code{'label}.
7018
7019 @item
7020 If there are encrypted or RAID partitions, make sure to add a
7021 @code{mapped-devices} field to describe them (@pxref{Mapped Devices}).
7022 @end itemize
7023
7024 Once you are done preparing the configuration file, the new system must
7025 be initialized (remember that the target root file system is mounted
7026 under @file{/mnt}):
7027
7028 @example
7029 guix system init /mnt/etc/config.scm /mnt
7030 @end example
7031
7032 @noindent
7033 This copies all the necessary files and installs GRUB on
7034 @file{/dev/sdX}, unless you pass the @option{--no-grub} option. For
7035 more information, @pxref{Invoking guix system}. This command may trigger
7036 downloads or builds of missing packages, which can take some time.
7037
7038 Once that command has completed---and hopefully succeeded!---you can run
7039 @command{reboot} and boot into the new system. The @code{root} password
7040 in the new system is initially empty; other users' passwords need to be
7041 initialized by running the @command{passwd} command as @code{root},
7042 unless your configuration specifies otherwise
7043 (@pxref{user-account-password, user account passwords}).
7044
7045 @cindex upgrading GuixSD
7046 From then on, you can update GuixSD whenever you want by running
7047 @command{guix pull} as @code{root} (@pxref{Invoking guix pull}), and
7048 then running @command{guix system reconfigure} to build a new system
7049 generation with the latest packages and services (@pxref{Invoking guix
7050 system}). We recommend doing that regularly so that your system
7051 includes the latest security updates (@pxref{Security Updates}).
7052
7053 Join us on @code{#guix} on the Freenode IRC network or on
7054 @file{guix-devel@@gnu.org} to share your experience---good or not so
7055 good.
7056
7057 @node Installing GuixSD in a VM
7058 @subsection Installing GuixSD in a Virtual Machine
7059
7060 @cindex virtual machine, GuixSD installation
7061 If you'd like to install GuixSD in a virtual machine (VM) rather than on
7062 your beloved machine, this section is for you.
7063
7064 To boot a @uref{http://qemu.org/,QEMU} VM for installing GuixSD in a
7065 disk image, follow these steps:
7066
7067 @enumerate
7068 @item
7069 First, retrieve the GuixSD installation image as described previously
7070 (@pxref{USB Stick Installation}).
7071
7072 @item
7073 Create a disk image that will hold the installed system. To make a
7074 qcow2-formatted disk image, use the @command{qemu-img} command:
7075
7076 @example
7077 qemu-img create -f qcow2 guixsd.img 5G
7078 @end example
7079
7080 This will create a 5GB file.
7081
7082 @item
7083 Boot the USB installation image in an VM:
7084
7085 @example
7086 qemu-system-x86_64 -m 1024 -smp 1 \
7087 -net default -net nic,model=virtio -boot menu=on \
7088 -drive file=guixsd.img \
7089 -drive file=guixsd-usb-install-@value{VERSION}.@var{system}
7090 @end example
7091
7092 In the VM console, quickly press the @kbd{F12} key to enter the boot
7093 menu. Then press the @kbd{2} key and the @kbd{RET} key to validate your
7094 selection.
7095
7096 @item
7097 You're now root in the VM, proceed with the installation process.
7098 @xref{Preparing for Installation}, and follow the instructions.
7099 @end enumerate
7100
7101 Once installation is complete, you can boot the system that's on your
7102 @file{guixsd.img} image. @xref{Running GuixSD in a VM}, for how to do
7103 that.
7104
7105 @node Building the Installation Image
7106 @subsection Building the Installation Image
7107
7108 @cindex installation image
7109 The installation image described above was built using the @command{guix
7110 system} command, specifically:
7111
7112 @c FIXME: 1G is too much; see <http://bugs.gnu.org/23077>.
7113 @example
7114 guix system disk-image --image-size=1G gnu/system/install.scm
7115 @end example
7116
7117 Have a look at @file{gnu/system/install.scm} in the source tree,
7118 and see also @ref{Invoking guix system} for more information
7119 about the installation image.
7120
7121 @node System Configuration
7122 @section System Configuration
7123
7124 @cindex system configuration
7125 The Guix System Distribution supports a consistent whole-system configuration
7126 mechanism. By that we mean that all aspects of the global system
7127 configuration---such as the available system services, timezone and
7128 locale settings, user accounts---are declared in a single place. Such
7129 a @dfn{system configuration} can be @dfn{instantiated}---i.e., effected.
7130
7131 One of the advantages of putting all the system configuration under the
7132 control of Guix is that it supports transactional system upgrades, and
7133 makes it possible to roll back to a previous system instantiation,
7134 should something go wrong with the new one (@pxref{Features}). Another
7135 advantage is that it makes it easy to replicate the exact same configuration
7136 across different machines, or at different points in time, without
7137 having to resort to additional administration tools layered on top of
7138 the own tools of the system.
7139 @c Yes, we're talking of Puppet, Chef, & co. here. ↑
7140
7141 This section describes this mechanism. First we focus on the system
7142 administrator's viewpoint---explaining how the system is configured and
7143 instantiated. Then we show how this mechanism can be extended, for
7144 instance to support new system services.
7145
7146 @menu
7147 * Using the Configuration System:: Customizing your GNU system.
7148 * operating-system Reference:: Detail of operating-system declarations.
7149 * File Systems:: Configuring file system mounts.
7150 * Mapped Devices:: Block device extra processing.
7151 * User Accounts:: Specifying user accounts.
7152 * Locales:: Language and cultural convention settings.
7153 * Services:: Specifying system services.
7154 * Setuid Programs:: Programs running with root privileges.
7155 * X.509 Certificates:: Authenticating HTTPS servers.
7156 * Name Service Switch:: Configuring libc's name service switch.
7157 * Initial RAM Disk:: Linux-Libre bootstrapping.
7158 * GRUB Configuration:: Configuring the boot loader.
7159 * Invoking guix system:: Instantiating a system configuration.
7160 * Running GuixSD in a VM:: How to run GuixSD in a virtual machine.
7161 * Defining Services:: Adding new service definitions.
7162 @end menu
7163
7164 @node Using the Configuration System
7165 @subsection Using the Configuration System
7166
7167 The operating system is configured by providing an
7168 @code{operating-system} declaration in a file that can then be passed to
7169 the @command{guix system} command (@pxref{Invoking guix system}). A
7170 simple setup, with the default system services, the default Linux-Libre
7171 kernel, initial RAM disk, and boot loader looks like this:
7172
7173 @findex operating-system
7174 @lisp
7175 @include os-config-bare-bones.texi
7176 @end lisp
7177
7178 This example should be self-describing. Some of the fields defined
7179 above, such as @code{host-name} and @code{bootloader}, are mandatory.
7180 Others, such as @code{packages} and @code{services}, can be omitted, in
7181 which case they get a default value.
7182
7183 Below we discuss the effect of some of the most important fields
7184 (@pxref{operating-system Reference}, for details about all the available
7185 fields), and how to @dfn{instantiate} the operating system using
7186 @command{guix system}.
7187
7188 @unnumberedsubsubsec Globally-Visible Packages
7189
7190 @vindex %base-packages
7191 The @code{packages} field lists packages that will be globally visible
7192 on the system, for all user accounts---i.e., in every user's @code{PATH}
7193 environment variable---in addition to the per-user profiles
7194 (@pxref{Invoking guix package}). The @var{%base-packages} variable
7195 provides all the tools one would expect for basic user and administrator
7196 tasks---including the GNU Core Utilities, the GNU Networking Utilities,
7197 the GNU Zile lightweight text editor, @command{find}, @command{grep},
7198 etc. The example above adds tcpdump to those, taken from the @code{(gnu
7199 packages admin)} module (@pxref{Package Modules}).
7200
7201 @findex specification->package
7202 Referring to packages by variable name, like @var{tcpdump} above, has
7203 the advantage of being unambiguous; it also allows typos and such to be
7204 diagnosed right away as ``unbound variables''. The downside is that one
7205 needs to know which module defines which package, and to augment the
7206 @code{use-package-modules} line accordingly. To avoid that, one can use
7207 the @code{specification->package} procedure of the @code{(gnu packages)}
7208 module, which returns the best package for a given name or name and
7209 version:
7210
7211 @lisp
7212 (use-modules (gnu packages))
7213
7214 (operating-system
7215 ;; ...
7216 (packages (append (map specification->package
7217 '("tcpdump" "htop" "gnupg@@2.0"))
7218 %base-packages)))
7219 @end lisp
7220
7221 @unnumberedsubsubsec System Services
7222
7223 @cindex services
7224 @vindex %base-services
7225 The @code{services} field lists @dfn{system services} to be made
7226 available when the system starts (@pxref{Services}).
7227 The @code{operating-system} declaration above specifies that, in
7228 addition to the basic services, we want the @command{lshd} secure shell
7229 daemon listening on port 2222 (@pxref{Networking Services,
7230 @code{lsh-service}}). Under the hood,
7231 @code{lsh-service} arranges so that @code{lshd} is started with the
7232 right command-line options, possibly with supporting configuration files
7233 generated as needed (@pxref{Defining Services}).
7234
7235 @cindex customization, of services
7236 @findex modify-services
7237 Occasionally, instead of using the base services as is, you will want to
7238 customize them. To do this, use @code{modify-services} (@pxref{Service
7239 Reference, @code{modify-services}}) to modify the list.
7240
7241 For example, suppose you want to modify @code{guix-daemon} and Mingetty
7242 (the console log-in) in the @var{%base-services} list (@pxref{Base
7243 Services, @code{%base-services}}). To do that, you can write the
7244 following in your operating system declaration:
7245
7246 @lisp
7247 (define %my-services
7248 ;; My very own list of services.
7249 (modify-services %base-services
7250 (guix-service-type config =>
7251 (guix-configuration
7252 (inherit config)
7253 (use-substitutes? #f)
7254 (extra-options '("--gc-keep-derivations"))))
7255 (mingetty-service-type config =>
7256 (mingetty-configuration
7257 (inherit config)))))
7258
7259 (operating-system
7260 ;; @dots{}
7261 (services %my-services))
7262 @end lisp
7263
7264 This changes the configuration---i.e., the service parameters---of the
7265 @code{guix-service-type} instance, and that of all the
7266 @code{mingetty-service-type} instances in the @var{%base-services} list.
7267 Observe how this is accomplished: first, we arrange for the original
7268 configuration to be bound to the identifier @code{config} in the
7269 @var{body}, and then we write the @var{body} so that it evaluates to the
7270 desired configuration. In particular, notice how we use @code{inherit}
7271 to create a new configuration which has the same values as the old
7272 configuration, but with a few modifications.
7273
7274 @cindex encrypted disk
7275 The configuration for a typical ``desktop'' usage, with an encrypted
7276 root partition, the X11 display
7277 server, GNOME and Xfce (users can choose which of these desktop
7278 environments to use at the log-in screen by pressing @kbd{F1}), network
7279 management, power management, and more, would look like this:
7280
7281 @lisp
7282 @include os-config-desktop.texi
7283 @end lisp
7284
7285 A graphical environment with a choice of lightweight window managers
7286 instead of full-blown desktop environments would look like this:
7287
7288 @lisp
7289 @include os-config-lightweight-desktop.texi
7290 @end lisp
7291
7292 @xref{Desktop Services}, for the exact list of services provided by
7293 @var{%desktop-services}. @xref{X.509 Certificates}, for background
7294 information about the @code{nss-certs} package that is used here.
7295
7296 Again, @var{%desktop-services} is just a list of service objects. If
7297 you want to remove services from there, you can do so using the
7298 procedures for list filtering (@pxref{SRFI-1 Filtering and
7299 Partitioning,,, guile, GNU Guile Reference Manual}). For instance, the
7300 following expression returns a list that contains all the services in
7301 @var{%desktop-services} minus the Avahi service:
7302
7303 @example
7304 (remove (lambda (service)
7305 (eq? (service-kind service) avahi-service-type))
7306 %desktop-services)
7307 @end example
7308
7309 @unnumberedsubsubsec Instantiating the System
7310
7311 Assuming the @code{operating-system} declaration
7312 is stored in the @file{my-system-config.scm}
7313 file, the @command{guix system reconfigure my-system-config.scm} command
7314 instantiates that configuration, and makes it the default GRUB boot
7315 entry (@pxref{Invoking guix system}).
7316
7317 The normal way to change the system configuration is by updating this
7318 file and re-running @command{guix system reconfigure}. One should never
7319 have to touch files in @file{/etc} or to run commands that modify the
7320 system state such as @command{useradd} or @command{grub-install}. In
7321 fact, you must avoid that since that would not only void your warranty
7322 but also prevent you from rolling back to previous versions of your
7323 system, should you ever need to.
7324
7325 @cindex roll-back, of the operating system
7326 Speaking of roll-back, each time you run @command{guix system
7327 reconfigure}, a new @dfn{generation} of the system is created---without
7328 modifying or deleting previous generations. Old system generations get
7329 an entry in the GRUB boot menu, allowing you to boot them in case
7330 something went wrong with the latest generation. Reassuring, no? The
7331 @command{guix system list-generations} command lists the system
7332 generations available on disk. It is also possible to roll back the
7333 system via the commands @command{guix system roll-back} and
7334 @command{guix system switch-generation}.
7335
7336 Although the command @command{guix system reconfigure} will not modify
7337 previous generations, must take care when the current generation is not
7338 the latest (e.g., after invoking @command{guix system roll-back}), since
7339 the operation might overwrite a later generation (@pxref{Invoking guix
7340 system}).
7341
7342 @unnumberedsubsubsec The Programming Interface
7343
7344 At the Scheme level, the bulk of an @code{operating-system} declaration
7345 is instantiated with the following monadic procedure (@pxref{The Store
7346 Monad}):
7347
7348 @deffn {Monadic Procedure} operating-system-derivation os
7349 Return a derivation that builds @var{os}, an @code{operating-system}
7350 object (@pxref{Derivations}).
7351
7352 The output of the derivation is a single directory that refers to all
7353 the packages, configuration files, and other supporting files needed to
7354 instantiate @var{os}.
7355 @end deffn
7356
7357 This procedure is provided by the @code{(gnu system)} module. Along
7358 with @code{(gnu services)} (@pxref{Services}), this module contains the
7359 guts of GuixSD. Make sure to visit it!
7360
7361
7362 @node operating-system Reference
7363 @subsection @code{operating-system} Reference
7364
7365 This section summarizes all the options available in
7366 @code{operating-system} declarations (@pxref{Using the Configuration
7367 System}).
7368
7369 @deftp {Data Type} operating-system
7370 This is the data type representing an operating system configuration.
7371 By that, we mean all the global system configuration, not per-user
7372 configuration (@pxref{Using the Configuration System}).
7373
7374 @table @asis
7375 @item @code{kernel} (default: @var{linux-libre})
7376 The package object of the operating system kernel to use@footnote{Currently
7377 only the Linux-libre kernel is supported. In the future, it will be
7378 possible to use the GNU@tie{}Hurd.}.
7379
7380 @item @code{kernel-arguments} (default: @code{'()})
7381 List of strings or gexps representing additional arguments to pass on
7382 the command-line of the kernel---e.g., @code{("console=ttyS0")}.
7383
7384 @item @code{bootloader}
7385 The system bootloader configuration object. @xref{GRUB Configuration}.
7386
7387 @item @code{initrd} (default: @code{base-initrd})
7388 @cindex initrd
7389 @cindex initial RAM disk
7390 A two-argument monadic procedure that returns an initial RAM disk for
7391 the Linux kernel. @xref{Initial RAM Disk}.
7392
7393 @item @code{firmware} (default: @var{%base-firmware})
7394 @cindex firmware
7395 List of firmware packages loadable by the operating system kernel.
7396
7397 The default includes firmware needed for Atheros- and Broadcom-based
7398 WiFi devices (Linux-libre modules @code{ath9k} and @code{b43-open},
7399 respectively). @xref{Hardware Considerations}, for more info on
7400 supported hardware.
7401
7402 @item @code{host-name}
7403 The host name.
7404
7405 @item @code{hosts-file}
7406 @cindex hosts file
7407 A file-like object (@pxref{G-Expressions, file-like objects}) for use as
7408 @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library
7409 Reference Manual}). The default is a file with entries for
7410 @code{localhost} and @var{host-name}.
7411
7412 @item @code{mapped-devices} (default: @code{'()})
7413 A list of mapped devices. @xref{Mapped Devices}.
7414
7415 @item @code{file-systems}
7416 A list of file systems. @xref{File Systems}.
7417
7418 @item @code{swap-devices} (default: @code{'()})
7419 @cindex swap devices
7420 A list of strings identifying devices to be used for ``swap space''
7421 (@pxref{Memory Concepts,,, libc, The GNU C Library Reference Manual}).
7422 For example, @code{'("/dev/sda3")}.
7423
7424 @item @code{users} (default: @code{%base-user-accounts})
7425 @itemx @code{groups} (default: @var{%base-groups})
7426 List of user accounts and groups. @xref{User Accounts}.
7427
7428 @item @code{skeletons} (default: @code{(default-skeletons)})
7429 A list target file name/file-like object tuples (@pxref{G-Expressions,
7430 file-like objects}). These are the skeleton files that will be added to
7431 the home directory of newly-created user accounts.
7432
7433 For instance, a valid value may look like this:
7434
7435 @example
7436 `((".bashrc" ,(plain-file "bashrc" "echo Hello\n"))
7437 (".guile" ,(plain-file "guile"
7438 "(use-modules (ice-9 readline))
7439 (activate-readline)")))
7440 @end example
7441
7442 @item @code{issue} (default: @var{%default-issue})
7443 A string denoting the contents of the @file{/etc/issue} file, which is
7444 displayed when users log in on a text console.
7445
7446 @item @code{packages} (default: @var{%base-packages})
7447 The set of packages installed in the global profile, which is accessible
7448 at @file{/run/current-system/profile}.
7449
7450 The default set includes core utilities and it is good practice to
7451 install non-core utilities in user profiles (@pxref{Invoking guix
7452 package}).
7453
7454 @item @code{timezone}
7455 A timezone identifying string---e.g., @code{"Europe/Paris"}.
7456
7457 You can run the @command{tzselect} command to find out which timezone
7458 string corresponds to your region. Choosing an invalid timezone name
7459 causes @command{guix system} to fail.
7460
7461 @item @code{locale} (default: @code{"en_US.utf8"})
7462 The name of the default locale (@pxref{Locale Names,,, libc, The GNU C
7463 Library Reference Manual}). @xref{Locales}, for more information.
7464
7465 @item @code{locale-definitions} (default: @var{%default-locale-definitions})
7466 The list of locale definitions to be compiled and that may be used at
7467 run time. @xref{Locales}.
7468
7469 @item @code{locale-libcs} (default: @code{(list @var{glibc})})
7470 The list of GNU@tie{}libc packages whose locale data and tools are used
7471 to build the locale definitions. @xref{Locales}, for compatibility
7472 considerations that justify this option.
7473
7474 @item @code{name-service-switch} (default: @var{%default-nss})
7475 Configuration of the libc name service switch (NSS)---a
7476 @code{<name-service-switch>} object. @xref{Name Service Switch}, for
7477 details.
7478
7479 @item @code{services} (default: @var{%base-services})
7480 A list of service objects denoting system services. @xref{Services}.
7481
7482 @item @code{pam-services} (default: @code{(base-pam-services)})
7483 @cindex PAM
7484 @cindex pluggable authentication modules
7485 Linux @dfn{pluggable authentication module} (PAM) services.
7486 @c FIXME: Add xref to PAM services section.
7487
7488 @item @code{setuid-programs} (default: @var{%setuid-programs})
7489 List of string-valued G-expressions denoting setuid programs.
7490 @xref{Setuid Programs}.
7491
7492 @item @code{sudoers-file} (default: @var{%sudoers-specification})
7493 @cindex sudoers file
7494 The contents of the @file{/etc/sudoers} file as a file-like object
7495 (@pxref{G-Expressions, @code{local-file} and @code{plain-file}}).
7496
7497 This file specifies which users can use the @command{sudo} command, what
7498 they are allowed to do, and what privileges they may gain. The default
7499 is that only @code{root} and members of the @code{wheel} group may use
7500 @code{sudo}.
7501
7502 @end table
7503 @end deftp
7504
7505 @node File Systems
7506 @subsection File Systems
7507
7508 The list of file systems to be mounted is specified in the
7509 @code{file-systems} field of the operating system declaration
7510 (@pxref{Using the Configuration System}). Each file system is declared
7511 using the @code{file-system} form, like this:
7512
7513 @example
7514 (file-system
7515 (mount-point "/home")
7516 (device "/dev/sda3")
7517 (type "ext4"))
7518 @end example
7519
7520 As usual, some of the fields are mandatory---those shown in the example
7521 above---while others can be omitted. These are described below.
7522
7523 @deftp {Data Type} file-system
7524 Objects of this type represent file systems to be mounted. They
7525 contain the following members:
7526
7527 @table @asis
7528 @item @code{type}
7529 This is a string specifying the type of the file system---e.g.,
7530 @code{"ext4"}.
7531
7532 @item @code{mount-point}
7533 This designates the place where the file system is to be mounted.
7534
7535 @item @code{device}
7536 This names the ``source'' of the file system. By default it is the name
7537 of a node under @file{/dev}, but its meaning depends on the @code{title}
7538 field described below.
7539
7540 @item @code{title} (default: @code{'device})
7541 This is a symbol that specifies how the @code{device} field is to be
7542 interpreted.
7543
7544 When it is the symbol @code{device}, then the @code{device} field is
7545 interpreted as a file name; when it is @code{label}, then @code{device}
7546 is interpreted as a partition label name; when it is @code{uuid},
7547 @code{device} is interpreted as a partition unique identifier (UUID).
7548
7549 UUIDs may be converted from their string representation (as shown by the
7550 @command{tune2fs -l} command) using the @code{uuid} form@footnote{The
7551 @code{uuid} form expects 16-byte UUIDs as defined in
7552 @uref{https://tools.ietf.org/html/rfc4122, RFC@tie{}4122}. This is the
7553 form of UUID used by the ext2 family of file systems and others, but it
7554 is different from ``UUIDs'' found in FAT file systems, for instance.},
7555 like this:
7556
7557 @example
7558 (file-system
7559 (mount-point "/home")
7560 (type "ext4")
7561 (title 'uuid)
7562 (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
7563 @end example
7564
7565 The @code{label} and @code{uuid} options offer a way to refer to disk
7566 partitions without having to hard-code their actual device
7567 name@footnote{Note that, while it is tempting to use
7568 @file{/dev/disk/by-uuid} and similar device names to achieve the same
7569 result, this is not recommended: These special device nodes are created
7570 by the udev daemon and may be unavailable at the time the device is
7571 mounted.}.
7572
7573 However, when the source of a file system is a mapped device (@pxref{Mapped
7574 Devices}), its @code{device} field @emph{must} refer to the mapped
7575 device name---e.g., @file{/dev/mapper/root-partition}---and consequently
7576 @code{title} must be set to @code{'device}. This is required so that
7577 the system knows that mounting the file system depends on having the
7578 corresponding device mapping established.
7579
7580 @item @code{flags} (default: @code{'()})
7581 This is a list of symbols denoting mount flags. Recognized flags
7582 include @code{read-only}, @code{bind-mount}, @code{no-dev} (disallow
7583 access to special files), @code{no-suid} (ignore setuid and setgid
7584 bits), and @code{no-exec} (disallow program execution.)
7585
7586 @item @code{options} (default: @code{#f})
7587 This is either @code{#f}, or a string denoting mount options.
7588
7589 @item @code{mount?} (default: @code{#t})
7590 This value indicates whether to automatically mount the file system when
7591 the system is brought up. When set to @code{#f}, the file system gets
7592 an entry in @file{/etc/fstab} (read by the @command{mount} command) but
7593 is not automatically mounted.
7594
7595 @item @code{needed-for-boot?} (default: @code{#f})
7596 This Boolean value indicates whether the file system is needed when
7597 booting. If that is true, then the file system is mounted when the
7598 initial RAM disk (initrd) is loaded. This is always the case, for
7599 instance, for the root file system.
7600
7601 @item @code{check?} (default: @code{#t})
7602 This Boolean indicates whether the file system needs to be checked for
7603 errors before being mounted.
7604
7605 @item @code{create-mount-point?} (default: @code{#f})
7606 When true, the mount point is created if it does not exist yet.
7607
7608 @item @code{dependencies} (default: @code{'()})
7609 This is a list of @code{<file-system>} or @code{<mapped-device>} objects
7610 representing file systems that must be mounted or mapped devices that
7611 must be opened before (and unmounted or closed after) this one.
7612
7613 As an example, consider a hierarchy of mounts: @file{/sys/fs/cgroup} is
7614 a dependency of @file{/sys/fs/cgroup/cpu} and
7615 @file{/sys/fs/cgroup/memory}.
7616
7617 Another example is a file system that depends on a mapped device, for
7618 example for an encrypted partition (@pxref{Mapped Devices}).
7619 @end table
7620 @end deftp
7621
7622 The @code{(gnu system file-systems)} exports the following useful
7623 variables.
7624
7625 @defvr {Scheme Variable} %base-file-systems
7626 These are essential file systems that are required on normal systems,
7627 such as @var{%pseudo-terminal-file-system} and @var{%immutable-store} (see
7628 below.) Operating system declarations should always contain at least
7629 these.
7630 @end defvr
7631
7632 @defvr {Scheme Variable} %pseudo-terminal-file-system
7633 This is the file system to be mounted as @file{/dev/pts}. It supports
7634 @dfn{pseudo-terminals} created @i{via} @code{openpty} and similar
7635 functions (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference
7636 Manual}). Pseudo-terminals are used by terminal emulators such as
7637 @command{xterm}.
7638 @end defvr
7639
7640 @defvr {Scheme Variable} %shared-memory-file-system
7641 This file system is mounted as @file{/dev/shm} and is used to support
7642 memory sharing across processes (@pxref{Memory-mapped I/O,
7643 @code{shm_open},, libc, The GNU C Library Reference Manual}).
7644 @end defvr
7645
7646 @defvr {Scheme Variable} %immutable-store
7647 This file system performs a read-only ``bind mount'' of
7648 @file{/gnu/store}, making it read-only for all the users including
7649 @code{root}. This prevents against accidental modification by software
7650 running as @code{root} or by system administrators.
7651
7652 The daemon itself is still able to write to the store: it remounts it
7653 read-write in its own ``name space.''
7654 @end defvr
7655
7656 @defvr {Scheme Variable} %binary-format-file-system
7657 The @code{binfmt_misc} file system, which allows handling of arbitrary
7658 executable file types to be delegated to user space. This requires the
7659 @code{binfmt.ko} kernel module to be loaded.
7660 @end defvr
7661
7662 @defvr {Scheme Variable} %fuse-control-file-system
7663 The @code{fusectl} file system, which allows unprivileged users to mount
7664 and unmount user-space FUSE file systems. This requires the
7665 @code{fuse.ko} kernel module to be loaded.
7666 @end defvr
7667
7668 @node Mapped Devices
7669 @subsection Mapped Devices
7670
7671 @cindex device mapping
7672 @cindex mapped devices
7673 The Linux kernel has a notion of @dfn{device mapping}: a block device,
7674 such as a hard disk partition, can be @dfn{mapped} into another device,
7675 usually in @code{/dev/mapper/},
7676 with additional processing over the data that flows through
7677 it@footnote{Note that the GNU@tie{}Hurd makes no difference between the
7678 concept of a ``mapped device'' and that of a file system: both boil down
7679 to @emph{translating} input/output operations made on a file to
7680 operations on its backing store. Thus, the Hurd implements mapped
7681 devices, like file systems, using the generic @dfn{translator} mechanism
7682 (@pxref{Translators,,, hurd, The GNU Hurd Reference Manual}).}. A
7683 typical example is encryption device mapping: all writes to the mapped
7684 device are encrypted, and all reads are deciphered, transparently.
7685 Guix extends this notion by considering any device or set of devices that
7686 are @dfn{transformed} in some way to create a new device; for instance,
7687 RAID devices are obtained by @dfn{assembling} several other devices, such
7688 as hard disks or partitions, into a new one that behaves as one partition.
7689 Other examples, not yet implemented, are LVM logical volumes.
7690
7691 Mapped devices are declared using the @code{mapped-device} form,
7692 defined as follows; for examples, see below.
7693
7694 @deftp {Data Type} mapped-device
7695 Objects of this type represent device mappings that will be made when
7696 the system boots up.
7697
7698 @table @code
7699 @item source
7700 This is either a string specifying the name of the block device to be mapped,
7701 such as @code{"/dev/sda3"}, or a list of such strings when several devices
7702 need to be assembled for creating a new one.
7703
7704 @item target
7705 This string specifies the name of the resulting mapped device. For
7706 kernel mappers such as encrypted devices of type @code{luks-device-mapping},
7707 specifying @code{"my-partition"} leads to the creation of
7708 the @code{"/dev/mapper/my-partition"} device.
7709 For RAID devices of type @code{raid-device-mapping}, the full device name
7710 such as @code{"/dev/md0"} needs to be given.
7711
7712 @item type
7713 This must be a @code{mapped-device-kind} object, which specifies how
7714 @var{source} is mapped to @var{target}.
7715 @end table
7716 @end deftp
7717
7718 @defvr {Scheme Variable} luks-device-mapping
7719 This defines LUKS block device encryption using the @command{cryptsetup}
7720 command from the package with the same name. It relies on the
7721 @code{dm-crypt} Linux kernel module.
7722 @end defvr
7723
7724 @defvr {Scheme Variable} raid-device-mapping
7725 This defines a RAID device, which is assembled using the @code{mdadm}
7726 command from the package with the same name. It requires a Linux kernel
7727 module for the appropriate RAID level to be loaded, such as @code{raid456}
7728 for RAID-4, RAID-5 or RAID-6, or @code{raid10} for RAID-10.
7729 @end defvr
7730
7731 @cindex disk encryption
7732 @cindex LUKS
7733 The following example specifies a mapping from @file{/dev/sda3} to
7734 @file{/dev/mapper/home} using LUKS---the
7735 @url{https://gitlab.com/cryptsetup/cryptsetup,Linux Unified Key Setup}, a
7736 standard mechanism for disk encryption.
7737 The @file{/dev/mapper/home}
7738 device can then be used as the @code{device} of a @code{file-system}
7739 declaration (@pxref{File Systems}).
7740
7741 @example
7742 (mapped-device
7743 (source "/dev/sda3")
7744 (target "home")
7745 (type luks-device-mapping))
7746 @end example
7747
7748 Alternatively, to become independent of device numbering, one may obtain
7749 the LUKS UUID (@dfn{unique identifier}) of the source device by a
7750 command like:
7751
7752 @example
7753 cryptsetup luksUUID /dev/sda3
7754 @end example
7755
7756 and use it as follows:
7757
7758 @example
7759 (mapped-device
7760 (source (uuid "cb67fc72-0d54-4c88-9d4b-b225f30b0f44"))
7761 (target "home")
7762 (type luks-device-mapping))
7763 @end example
7764
7765 A RAID device formed of the partitions @file{/dev/sda1} and @file{/dev/sdb1}
7766 may be declared as follows:
7767
7768 @example
7769 (mapped-device
7770 (source (list "/dev/sda1" "/dev/sdb1"))
7771 (target "/dev/md0")
7772 (type raid-device-mapping))
7773 @end example
7774
7775 The @file{/dev/md0} device can then be used as the @code{device} of a
7776 @code{file-system} declaration (@pxref{File Systems}).
7777 Note that the RAID level need not be given; it is chosen during the
7778 initial creation and formatting of the RAID device and is determined
7779 automatically later.
7780
7781
7782 @node User Accounts
7783 @subsection User Accounts
7784
7785 @cindex users
7786 @cindex accounts
7787 @cindex user accounts
7788 User accounts and groups are entirely managed through the
7789 @code{operating-system} declaration. They are specified with the
7790 @code{user-account} and @code{user-group} forms:
7791
7792 @example
7793 (user-account
7794 (name "alice")
7795 (group "users")
7796 (supplementary-groups '("wheel" ;allow use of sudo, etc.
7797 "audio" ;sound card
7798 "video" ;video devices such as webcams
7799 "cdrom")) ;the good ol' CD-ROM
7800 (comment "Bob's sister")
7801 (home-directory "/home/alice"))
7802 @end example
7803
7804 When booting or upon completion of @command{guix system reconfigure},
7805 the system ensures that only the user accounts and groups specified in
7806 the @code{operating-system} declaration exist, and with the specified
7807 properties. Thus, account or group creations or modifications made by
7808 directly invoking commands such as @command{useradd} are lost upon
7809 reconfiguration or reboot. This ensures that the system remains exactly
7810 as declared.
7811
7812 @deftp {Data Type} user-account
7813 Objects of this type represent user accounts. The following members may
7814 be specified:
7815
7816 @table @asis
7817 @item @code{name}
7818 The name of the user account.
7819
7820 @item @code{group}
7821 @cindex groups
7822 This is the name (a string) or identifier (a number) of the user group
7823 this account belongs to.
7824
7825 @item @code{supplementary-groups} (default: @code{'()})
7826 Optionally, this can be defined as a list of group names that this
7827 account belongs to.
7828
7829 @item @code{uid} (default: @code{#f})
7830 This is the user ID for this account (a number), or @code{#f}. In the
7831 latter case, a number is automatically chosen by the system when the
7832 account is created.
7833
7834 @item @code{comment} (default: @code{""})
7835 A comment about the account, such as the account owner's full name.
7836
7837 @item @code{home-directory}
7838 This is the name of the home directory for the account.
7839
7840 @item @code{create-home-directory?} (default: @code{#t})
7841 Indicates whether the home directory of this account should be created
7842 if it does not exist yet.
7843
7844 @item @code{shell} (default: Bash)
7845 This is a G-expression denoting the file name of a program to be used as
7846 the shell (@pxref{G-Expressions}).
7847
7848 @item @code{system?} (default: @code{#f})
7849 This Boolean value indicates whether the account is a ``system''
7850 account. System accounts are sometimes treated specially; for instance,
7851 graphical login managers do not list them.
7852
7853 @anchor{user-account-password}
7854 @item @code{password} (default: @code{#f})
7855 You would normally leave this field to @code{#f}, initialize user
7856 passwords as @code{root} with the @command{passwd} command, and then let
7857 users change it with @command{passwd}. Passwords set with
7858 @command{passwd} are of course preserved across reboot and
7859 reconfiguration.
7860
7861 If you @emph{do} want to have a preset password for an account, then
7862 this field must contain the encrypted password, as a string.
7863 @xref{crypt,,, libc, The GNU C Library Reference Manual}, for more information
7864 on password encryption, and @ref{Encryption,,, guile, GNU Guile Reference
7865 Manual}, for information on Guile's @code{crypt} procedure.
7866
7867 @end table
7868 @end deftp
7869
7870 @cindex groups
7871 User group declarations are even simpler:
7872
7873 @example
7874 (user-group (name "students"))
7875 @end example
7876
7877 @deftp {Data Type} user-group
7878 This type is for, well, user groups. There are just a few fields:
7879
7880 @table @asis
7881 @item @code{name}
7882 The name of the group.
7883
7884 @item @code{id} (default: @code{#f})
7885 The group identifier (a number). If @code{#f}, a new number is
7886 automatically allocated when the group is created.
7887
7888 @item @code{system?} (default: @code{#f})
7889 This Boolean value indicates whether the group is a ``system'' group.
7890 System groups have low numerical IDs.
7891
7892 @item @code{password} (default: @code{#f})
7893 What, user groups can have a password? Well, apparently yes. Unless
7894 @code{#f}, this field specifies the password of the group.
7895
7896 @end table
7897 @end deftp
7898
7899 For convenience, a variable lists all the basic user groups one may
7900 expect:
7901
7902 @defvr {Scheme Variable} %base-groups
7903 This is the list of basic user groups that users and/or packages expect
7904 to be present on the system. This includes groups such as ``root'',
7905 ``wheel'', and ``users'', as well as groups used to control access to
7906 specific devices such as ``audio'', ``disk'', and ``cdrom''.
7907 @end defvr
7908
7909 @defvr {Scheme Variable} %base-user-accounts
7910 This is the list of basic system accounts that programs may expect to
7911 find on a GNU/Linux system, such as the ``nobody'' account.
7912
7913 Note that the ``root'' account is not included here. It is a
7914 special-case and is automatically added whether or not it is specified.
7915 @end defvr
7916
7917 @node Locales
7918 @subsection Locales
7919
7920 @cindex locale
7921 A @dfn{locale} defines cultural conventions for a particular language
7922 and region of the world (@pxref{Locales,,, libc, The GNU C Library
7923 Reference Manual}). Each locale has a name that typically has the form
7924 @code{@var{language}_@var{territory}.@var{codeset}}---e.g.,
7925 @code{fr_LU.utf8} designates the locale for the French language, with
7926 cultural conventions from Luxembourg, and using the UTF-8 encoding.
7927
7928 @cindex locale definition
7929 Usually, you will want to specify the default locale for the machine
7930 using the @code{locale} field of the @code{operating-system} declaration
7931 (@pxref{operating-system Reference, @code{locale}}).
7932
7933 The selected locale is automatically added to the @dfn{locale
7934 definitions} known to the system if needed, with its codeset inferred
7935 from its name---e.g., @code{bo_CN.utf8} will be assumed to use the
7936 @code{UTF-8} codeset. Additional locale definitions can be specified in
7937 the @code{locale-definitions} slot of @code{operating-system}---this is
7938 useful, for instance, if the codeset could not be inferred from the
7939 locale name. The default set of locale definitions includes some widely
7940 used locales, but not all the available locales, in order to save space.
7941
7942 For instance, to add the North Frisian locale for Germany, the value of
7943 that field may be:
7944
7945 @example
7946 (cons (locale-definition
7947 (name "fy_DE.utf8") (source "fy_DE"))
7948 %default-locale-definitions)
7949 @end example
7950
7951 Likewise, to save space, one might want @code{locale-definitions} to
7952 list only the locales that are actually used, as in:
7953
7954 @example
7955 (list (locale-definition
7956 (name "ja_JP.eucjp") (source "ja_JP")
7957 (charset "EUC-JP")))
7958 @end example
7959
7960 @vindex LOCPATH
7961 The compiled locale definitions are available at
7962 @file{/run/current-system/locale/X.Y}, where @code{X.Y} is the libc
7963 version, which is the default location where the GNU@tie{}libc provided
7964 by Guix looks for locale data. This can be overridden using the
7965 @code{LOCPATH} environment variable (@pxref{locales-and-locpath,
7966 @code{LOCPATH} and locale packages}).
7967
7968 The @code{locale-definition} form is provided by the @code{(gnu system
7969 locale)} module. Details are given below.
7970
7971 @deftp {Data Type} locale-definition
7972 This is the data type of a locale definition.
7973
7974 @table @asis
7975
7976 @item @code{name}
7977 The name of the locale. @xref{Locale Names,,, libc, The GNU C Library
7978 Reference Manual}, for more information on locale names.
7979
7980 @item @code{source}
7981 The name of the source for that locale. This is typically the
7982 @code{@var{language}_@var{territory}} part of the locale name.
7983
7984 @item @code{charset} (default: @code{"UTF-8"})
7985 The ``character set'' or ``code set'' for that locale,
7986 @uref{http://www.iana.org/assignments/character-sets, as defined by
7987 IANA}.
7988
7989 @end table
7990 @end deftp
7991
7992 @defvr {Scheme Variable} %default-locale-definitions
7993 A list of commonly used UTF-8 locales, used as the default
7994 value of the @code{locale-definitions} field of @code{operating-system}
7995 declarations.
7996
7997 @cindex locale name
7998 @cindex normalized codeset in locale names
7999 These locale definitions use the @dfn{normalized codeset} for the part
8000 that follows the dot in the name (@pxref{Using gettextized software,
8001 normalized codeset,, libc, The GNU C Library Reference Manual}). So for
8002 instance it has @code{uk_UA.utf8} but @emph{not}, say,
8003 @code{uk_UA.UTF-8}.
8004 @end defvr
8005
8006 @subsubsection Locale Data Compatibility Considerations
8007
8008 @cindex incompatibility, of locale data
8009 @code{operating-system} declarations provide a @code{locale-libcs} field
8010 to specify the GNU@tie{}libc packages that are used to compile locale
8011 declarations (@pxref{operating-system Reference}). ``Why would I
8012 care?'', you may ask. Well, it turns out that the binary format of
8013 locale data is occasionally incompatible from one libc version to
8014 another.
8015
8016 @c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
8017 @c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
8018 For instance, a program linked against libc version 2.21 is unable to
8019 read locale data produced with libc 2.22; worse, that program
8020 @emph{aborts} instead of simply ignoring the incompatible locale
8021 data@footnote{Versions 2.23 and later of GNU@tie{}libc will simply skip
8022 the incompatible locale data, which is already an improvement.}.
8023 Similarly, a program linked against libc 2.22 can read most, but not
8024 all, of the locale data from libc 2.21 (specifically, @code{LC_COLLATE}
8025 data is incompatible); thus calls to @code{setlocale} may fail, but
8026 programs will not abort.
8027
8028 The ``problem'' in GuixSD is that users have a lot of freedom: They can
8029 choose whether and when to upgrade software in their profiles, and might
8030 be using a libc version different from the one the system administrator
8031 used to build the system-wide locale data.
8032
8033 Fortunately, unprivileged users can also install their own locale data
8034 and define @var{GUIX_LOCPATH} accordingly (@pxref{locales-and-locpath,
8035 @code{GUIX_LOCPATH} and locale packages}).
8036
8037 Still, it is best if the system-wide locale data at
8038 @file{/run/current-system/locale} is built for all the libc versions
8039 actually in use on the system, so that all the programs can access
8040 it---this is especially crucial on a multi-user system. To do that, the
8041 administrator can specify several libc packages in the
8042 @code{locale-libcs} field of @code{operating-system}:
8043
8044 @example
8045 (use-package-modules base)
8046
8047 (operating-system
8048 ;; @dots{}
8049 (locale-libcs (list glibc-2.21 (canonical-package glibc))))
8050 @end example
8051
8052 This example would lead to a system containing locale definitions for
8053 both libc 2.21 and the current version of libc in
8054 @file{/run/current-system/locale}.
8055
8056
8057 @node Services
8058 @subsection Services
8059
8060 @cindex system services
8061 An important part of preparing an @code{operating-system} declaration is
8062 listing @dfn{system services} and their configuration (@pxref{Using the
8063 Configuration System}). System services are typically daemons launched
8064 when the system boots, or other actions needed at that time---e.g.,
8065 configuring network access.
8066
8067 GuixSD has a broad definition of ``service'' (@pxref{Service
8068 Composition}), but many services are managed by the GNU@tie{}Shepherd
8069 (@pxref{Shepherd Services}). On a running system, the @command{herd}
8070 command allows you to list the available services, show their status,
8071 start and stop them, or do other specific operations (@pxref{Jump
8072 Start,,, shepherd, The GNU Shepherd Manual}). For example:
8073
8074 @example
8075 # herd status
8076 @end example
8077
8078 The above command, run as @code{root}, lists the currently defined
8079 services. The @command{herd doc} command shows a synopsis of the given
8080 service:
8081
8082 @example
8083 # herd doc nscd
8084 Run libc's name service cache daemon (nscd).
8085 @end example
8086
8087 The @command{start}, @command{stop}, and @command{restart} sub-commands
8088 have the effect you would expect. For instance, the commands below stop
8089 the nscd service and restart the Xorg display server:
8090
8091 @example
8092 # herd stop nscd
8093 Service nscd has been stopped.
8094 # herd restart xorg-server
8095 Service xorg-server has been stopped.
8096 Service xorg-server has been started.
8097 @end example
8098
8099 The following sections document the available services, starting with
8100 the core services, that may be used in an @code{operating-system}
8101 declaration.
8102
8103 @menu
8104 * Base Services:: Essential system services.
8105 * Scheduled Job Execution:: The mcron service.
8106 * Log Rotation:: The rottlog service.
8107 * Networking Services:: Network setup, SSH daemon, etc.
8108 * X Window:: Graphical display.
8109 * Printing Services:: Local and remote printer support.
8110 * Desktop Services:: D-Bus and desktop services.
8111 * Database Services:: SQL databases.
8112 * Mail Services:: IMAP, POP3, SMTP, and all that.
8113 * Kerberos Services:: Kerberos services.
8114 * Web Services:: Web servers.
8115 * Network File System:: NFS related services.
8116 * Continuous Integration:: The Cuirass service.
8117 * Miscellaneous Services:: Other services.
8118 @end menu
8119
8120 @node Base Services
8121 @subsubsection Base Services
8122
8123 The @code{(gnu services base)} module provides definitions for the basic
8124 services that one expects from the system. The services exported by
8125 this module are listed below.
8126
8127 @defvr {Scheme Variable} %base-services
8128 This variable contains a list of basic services (@pxref{Service Types
8129 and Services}, for more information on service objects) one would
8130 expect from the system: a login service (mingetty) on each tty, syslogd,
8131 the libc name service cache daemon (nscd), the udev device manager, and
8132 more.
8133
8134 This is the default value of the @code{services} field of
8135 @code{operating-system} declarations. Usually, when customizing a
8136 system, you will want to append services to @var{%base-services}, like
8137 this:
8138
8139 @example
8140 (cons* (avahi-service) (lsh-service) %base-services)
8141 @end example
8142 @end defvr
8143
8144 @deffn {Scheme Procedure} host-name-service @var{name}
8145 Return a service that sets the host name to @var{name}.
8146 @end deffn
8147
8148 @deffn {Scheme Procedure} login-service @var{config}
8149 Return a service to run login according to @var{config}, a
8150 @code{<login-configuration>} object, which specifies the message of the day,
8151 among other things.
8152 @end deffn
8153
8154 @deftp {Data Type} login-configuration
8155 This is the data type representing the configuration of login.
8156
8157 @table @asis
8158
8159 @item @code{motd}
8160 @cindex message of the day
8161 A file-like object containing the ``message of the day''.
8162
8163 @item @code{allow-empty-passwords?} (default: @code{#t})
8164 Allow empty passwords by default so that first-time users can log in when
8165 the 'root' account has just been created.
8166
8167 @end table
8168 @end deftp
8169
8170 @deffn {Scheme Procedure} mingetty-service @var{config}
8171 Return a service to run mingetty according to @var{config}, a
8172 @code{<mingetty-configuration>} object, which specifies the tty to run, among
8173 other things.
8174 @end deffn
8175
8176 @deftp {Data Type} mingetty-configuration
8177 This is the data type representing the configuration of Mingetty, which
8178 implements console log-in.
8179
8180 @table @asis
8181
8182 @item @code{tty}
8183 The name of the console this Mingetty runs on---e.g., @code{"tty1"}.
8184
8185 @item @code{auto-login} (default: @code{#f})
8186 When true, this field must be a string denoting the user name under
8187 which the system automatically logs in. When it is @code{#f}, a
8188 user name and password must be entered to log in.
8189
8190 @item @code{login-program} (default: @code{#f})
8191 This must be either @code{#f}, in which case the default log-in program
8192 is used (@command{login} from the Shadow tool suite), or a gexp denoting
8193 the name of the log-in program.
8194
8195 @item @code{login-pause?} (default: @code{#f})
8196 When set to @code{#t} in conjunction with @var{auto-login}, the user
8197 will have to press a key before the log-in shell is launched.
8198
8199 @item @code{mingetty} (default: @var{mingetty})
8200 The Mingetty package to use.
8201
8202 @end table
8203 @end deftp
8204
8205 @deffn {Scheme Procedure} kmscon-service-type @var{config}
8206 Return a service to run @uref{https://www.freedesktop.org/wiki/Software/kmscon,kmscon}
8207 according to @var{config}, a @code{<kmscon-configuration>} object, which
8208 specifies the tty to run, among other things.
8209 @end deffn
8210
8211 @deftp {Data Type} kmscon-configuration
8212 This is the data type representing the configuration of Kmscon, which
8213 implements console log-in.
8214
8215 @table @asis
8216
8217 @item @code{virtual-terminal}
8218 The name of the console this Kmscon runs on---e.g., @code{"tty1"}.
8219
8220 @item @code{login-program} (default: @code{#~(string-append #$shadow "/bin/login")})
8221 A gexp denoting the name of the log-in program. The default log-in program is
8222 @command{login} from the Shadow tool suite.
8223
8224 @item @code{login-arguments} (default: @code{'("-p")})
8225 A list of arguments to pass to @command{login}.
8226
8227 @item @code{hardware-acceleration?} (default: #f)
8228 Whether to use hardware acceleration.
8229
8230 @item @code{kmscon} (default: @var{kmscon})
8231 The Kmscon package to use.
8232
8233 @end table
8234 @end deftp
8235
8236 @cindex name service cache daemon
8237 @cindex nscd
8238 @deffn {Scheme Procedure} nscd-service [@var{config}] [#:glibc glibc] @
8239 [#:name-services '()]
8240 Return a service that runs the libc name service cache daemon (nscd) with the
8241 given @var{config}---an @code{<nscd-configuration>} object. @xref{Name
8242 Service Switch}, for an example.
8243 @end deffn
8244
8245 @defvr {Scheme Variable} %nscd-default-configuration
8246 This is the default @code{<nscd-configuration>} value (see below) used
8247 by @code{nscd-service}. It uses the caches defined by
8248 @var{%nscd-default-caches}; see below.
8249 @end defvr
8250
8251 @deftp {Data Type} nscd-configuration
8252 This is the data type representing the name service cache daemon (nscd)
8253 configuration.
8254
8255 @table @asis
8256
8257 @item @code{name-services} (default: @code{'()})
8258 List of packages denoting @dfn{name services} that must be visible to
8259 the nscd---e.g., @code{(list @var{nss-mdns})}.
8260
8261 @item @code{glibc} (default: @var{glibc})
8262 Package object denoting the GNU C Library providing the @command{nscd}
8263 command.
8264
8265 @item @code{log-file} (default: @code{"/var/log/nscd.log"})
8266 Name of the nscd log file. This is where debugging output goes when
8267 @code{debug-level} is strictly positive.
8268
8269 @item @code{debug-level} (default: @code{0})
8270 Integer denoting the debugging levels. Higher numbers mean that more
8271 debugging output is logged.
8272
8273 @item @code{caches} (default: @var{%nscd-default-caches})
8274 List of @code{<nscd-cache>} objects denoting things to be cached; see
8275 below.
8276
8277 @end table
8278 @end deftp
8279
8280 @deftp {Data Type} nscd-cache
8281 Data type representing a cache database of nscd and its parameters.
8282
8283 @table @asis
8284
8285 @item @code{database}
8286 This is a symbol representing the name of the database to be cached.
8287 Valid values are @code{passwd}, @code{group}, @code{hosts}, and
8288 @code{services}, which designate the corresponding NSS database
8289 (@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
8290
8291 @item @code{positive-time-to-live}
8292 @itemx @code{negative-time-to-live} (default: @code{20})
8293 A number representing the number of seconds during which a positive or
8294 negative lookup result remains in cache.
8295
8296 @item @code{check-files?} (default: @code{#t})
8297 Whether to check for updates of the files corresponding to
8298 @var{database}.
8299
8300 For instance, when @var{database} is @code{hosts}, setting this flag
8301 instructs nscd to check for updates in @file{/etc/hosts} and to take
8302 them into account.
8303
8304 @item @code{persistent?} (default: @code{#t})
8305 Whether the cache should be stored persistently on disk.
8306
8307 @item @code{shared?} (default: @code{#t})
8308 Whether the cache should be shared among users.
8309
8310 @item @code{max-database-size} (default: 32@tie{}MiB)
8311 Maximum size in bytes of the database cache.
8312
8313 @c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
8314 @c settings, so leave them out.
8315
8316 @end table
8317 @end deftp
8318
8319 @defvr {Scheme Variable} %nscd-default-caches
8320 List of @code{<nscd-cache>} objects used by default by
8321 @code{nscd-configuration} (see above).
8322
8323 It enables persistent and aggressive caching of service and host name
8324 lookups. The latter provides better host name lookup performance,
8325 resilience in the face of unreliable name servers, and also better
8326 privacy---often the result of host name lookups is in local cache, so
8327 external name servers do not even need to be queried.
8328 @end defvr
8329
8330 @anchor{syslog-configuration-type}
8331 @cindex syslog
8332 @cindex logging
8333 @deftp {Data Type} syslog-configuration
8334 This data type represents the configuration of the syslog daemon.
8335
8336 @table @asis
8337 @item @code{syslogd} (default: @code{#~(string-append #$inetutils "/libexec/syslogd")})
8338 The syslog daemon to use.
8339
8340 @item @code{config-file} (default: @code{%default-syslog.conf})
8341 The syslog configuration file to use.
8342
8343 @end table
8344 @end deftp
8345
8346 @anchor{syslog-service}
8347 @cindex syslog
8348 @deffn {Scheme Procedure} syslog-service @var{config}
8349 Return a service that runs a syslog daemon according to @var{config}.
8350
8351 @xref{syslogd invocation,,, inetutils, GNU Inetutils}, for more
8352 information on the configuration file syntax.
8353 @end deffn
8354
8355 @anchor{guix-configuration-type}
8356 @deftp {Data Type} guix-configuration
8357 This data type represents the configuration of the Guix build daemon.
8358 @xref{Invoking guix-daemon}, for more information.
8359
8360 @table @asis
8361 @item @code{guix} (default: @var{guix})
8362 The Guix package to use.
8363
8364 @item @code{build-group} (default: @code{"guixbuild"})
8365 Name of the group for build user accounts.
8366
8367 @item @code{build-accounts} (default: @code{10})
8368 Number of build user accounts to create.
8369
8370 @item @code{authorize-key?} (default: @code{#t})
8371 @cindex substitutes, authorization thereof
8372 Whether to authorize the substitute keys listed in
8373 @code{authorized-keys}---by default that of @code{hydra.gnu.org}
8374 (@pxref{Substitutes}).
8375
8376 @vindex %default-authorized-guix-keys
8377 @item @code{authorized-keys} (default: @var{%default-authorized-guix-keys})
8378 The list of authorized key files for archive imports, as a list of
8379 string-valued gexps (@pxref{Invoking guix archive}). By default, it
8380 contains that of @code{hydra.gnu.org} (@pxref{Substitutes}).
8381
8382 @item @code{use-substitutes?} (default: @code{#t})
8383 Whether to use substitutes.
8384
8385 @item @code{substitute-urls} (default: @var{%default-substitute-urls})
8386 The list of URLs where to look for substitutes by default.
8387
8388 @item @code{extra-options} (default: @code{'()})
8389 List of extra command-line options for @command{guix-daemon}.
8390
8391 @item @code{log-file} (default: @code{"/var/log/guix-daemon.log"})
8392 File where @command{guix-daemon}'s standard output and standard error
8393 are written.
8394
8395 @item @code{lsof} (default: @var{lsof})
8396 The lsof package to use.
8397
8398 @end table
8399 @end deftp
8400
8401 @deffn {Scheme Procedure} guix-service @var{config}
8402 Return a service that runs the Guix build daemon according to
8403 @var{config}.
8404 @end deffn
8405
8406 @deffn {Scheme Procedure} udev-service [#:udev udev]
8407 Run @var{udev}, which populates the @file{/dev} directory dynamically.
8408 @end deffn
8409
8410 @deffn {Scheme Procedure} urandom-seed-service @var{#f}
8411 Save some entropy in @var{%random-seed-file} to seed @file{/dev/urandom}
8412 when rebooting.
8413 @end deffn
8414
8415 @defvr {Scheme Variable} %random-seed-file
8416 This is the name of the file where some random bytes are saved by
8417 @var{urandom-seed-service} to seed @file{/dev/urandom} when rebooting.
8418 It defaults to @file{/var/lib/random-seed}.
8419 @end defvr
8420
8421 @cindex keymap
8422 @cindex keyboard
8423 @deffn {Scheme Procedure} console-keymap-service @var{files} ...
8424 @cindex keyboard layout
8425 Return a service to load console keymaps from @var{files} using
8426 @command{loadkeys} command. Most likely, you want to load some default
8427 keymap, which can be done like this:
8428
8429 @example
8430 (console-keymap-service "dvorak")
8431 @end example
8432
8433 Or, for example, for a Swedish keyboard, you may need to combine
8434 the following keymaps:
8435 @example
8436 (console-keymap-service "se-lat6" "se-fi-lat6")
8437 @end example
8438
8439 Also you can specify a full file name (or file names) of your keymap(s).
8440 See @code{man loadkeys} for details.
8441
8442 @end deffn
8443
8444 @cindex mouse
8445 @cindex gpm
8446 @deffn {Scheme Procedure} gpm-service [#:gpm @var{gpm}] @
8447 [#:options]
8448 Run @var{gpm}, the general-purpose mouse daemon, with the given
8449 command-line @var{options}. GPM allows users to use the mouse in the console,
8450 notably to select, copy, and paste text. The default value of @var{options}
8451 uses the @code{ps2} protocol, which works for both USB and PS/2 mice.
8452
8453 This service is not part of @var{%base-services}.
8454 @end deffn
8455
8456 @anchor{guix-publish-service}
8457 @deffn {Scheme Procedure} guix-publish-service [#:guix @var{guix}] @
8458 [#:port 80] [#:host "localhost"]
8459 Return a service that runs @command{guix publish} listening on @var{host}
8460 and @var{port} (@pxref{Invoking guix publish}).
8461
8462 This assumes that @file{/etc/guix} already contains a signing key pair as
8463 created by @command{guix archive --generate-key} (@pxref{Invoking guix
8464 archive}). If that is not the case, the service will fail to start.
8465 @end deffn
8466
8467 @anchor{rngd-service}
8468 @deffn {Scheme Procedure} rngd-service [#:rng-tools @var{rng-tools}] @
8469 [#:device "/dev/hwrng"]
8470 Return a service that runs the @command{rngd} program from @var{rng-tools}
8471 to add @var{device} to the kernel's entropy pool. The service will fail if
8472 @var{device} does not exist.
8473 @end deffn
8474
8475 @anchor{pam-limits-service}
8476 @cindex session limits
8477 @cindex ulimit
8478 @cindex priority
8479 @deffn {Scheme Procedure} pam-limits-service [#:limits @var{limits}]
8480
8481 Return a service that installs a configuration file for the
8482 @uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html,
8483 @code{pam_limits} module}. The procedure optionally takes a list of
8484 @code{pam-limits-entry} values, which can be used to specify
8485 @code{ulimit} limits and nice priority limits to user sessions.
8486
8487 The following limits definition sets two hard and soft limits for all
8488 login sessions of users in the @code{realtime} group:
8489
8490 @example
8491 (pam-limits-service
8492 (list
8493 (pam-limits-entry "@@realtime" 'both 'rtprio 99)
8494 (pam-limits-entry "@@realtime" 'both 'memlock 'unlimited)))
8495 @end example
8496
8497 The first entry increases the maximum realtime priority for
8498 non-privileged processes; the second entry lifts any restriction of the
8499 maximum address space that can be locked in memory. These settings are
8500 commonly used for real-time audio systems.
8501 @end deffn
8502
8503 @node Scheduled Job Execution
8504 @subsubsection Scheduled Job Execution
8505
8506 @cindex cron
8507 @cindex mcron
8508 @cindex scheduling jobs
8509 The @code{(gnu services mcron)} module provides an interface to
8510 GNU@tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
8511 mcron, GNU@tie{}mcron}). GNU@tie{}mcron is similar to the traditional
8512 Unix @command{cron} daemon; the main difference is that it is
8513 implemented in Guile Scheme, which provides a lot of flexibility when
8514 specifying the scheduling of jobs and their actions.
8515
8516 The example below defines an operating system that runs the
8517 @command{updatedb} (@pxref{Invoking updatedb,,, find, Finding Files})
8518 and the @command{guix gc} commands (@pxref{Invoking guix gc}) daily, as
8519 well as the @command{mkid} command on behalf of an unprivileged user
8520 (@pxref{mkid invocation,,, idutils, ID Database Utilities}). It uses
8521 gexps to introduce job definitions that are passed to mcron
8522 (@pxref{G-Expressions}).
8523
8524 @lisp
8525 (use-modules (guix) (gnu) (gnu services mcron))
8526 (use-package-modules base idutils)
8527
8528 (define updatedb-job
8529 ;; Run 'updatedb' at 3AM every day. Here we write the
8530 ;; job's action as a Scheme procedure.
8531 #~(job '(next-hour '(3))
8532 (lambda ()
8533 (execl (string-append #$findutils "/bin/updatedb")
8534 "updatedb"
8535 "--prunepaths=/tmp /var/tmp /gnu/store"))))
8536
8537 (define garbage-collector-job
8538 ;; Collect garbage 5 minutes after midnight every day.
8539 ;; The job's action is a shell command.
8540 #~(job "5 0 * * *" ;Vixie cron syntax
8541 "guix gc -F 1G"))
8542
8543 (define idutils-job
8544 ;; Update the index database as user "charlie" at 12:15PM
8545 ;; and 19:15PM. This runs from the user's home directory.
8546 #~(job '(next-minute-from (next-hour '(12 19)) '(15))
8547 (string-append #$idutils "/bin/mkid src")
8548 #:user "charlie"))
8549
8550 (operating-system
8551 ;; @dots{}
8552 (services (cons (mcron-service (list garbage-collector-job
8553 updatedb-job
8554 idutils-job))
8555 %base-services)))
8556 @end lisp
8557
8558 @xref{Guile Syntax, mcron job specifications,, mcron, GNU@tie{}mcron},
8559 for more information on mcron job specifications. Below is the
8560 reference of the mcron service.
8561
8562 @deffn {Scheme Procedure} mcron-service @var{jobs} [#:mcron @var{mcron2}]
8563 Return an mcron service running @var{mcron} that schedules @var{jobs}, a
8564 list of gexps denoting mcron job specifications.
8565
8566 This is a shorthand for:
8567 @example
8568 (service mcron-service-type
8569 (mcron-configuration (mcron mcron) (jobs jobs)))
8570 @end example
8571 @end deffn
8572
8573 @defvr {Scheme Variable} mcron-service-type
8574 This is the type of the @code{mcron} service, whose value is an
8575 @code{mcron-configuration} object.
8576
8577 This service type can be the target of a service extension that provides
8578 it additional job specifications (@pxref{Service Composition}). In
8579 other words, it is possible to define services that provide additional
8580 mcron jobs to run.
8581 @end defvr
8582
8583 @deftp {Data Type} mcron-configuration
8584 Data type representing the configuration of mcron.
8585
8586 @table @asis
8587 @item @code{mcron} (default: @var{mcron2})
8588 The mcron package to use.
8589
8590 @item @code{jobs}
8591 This is a list of gexps (@pxref{G-Expressions}), where each gexp
8592 corresponds to an mcron job specification (@pxref{Syntax, mcron job
8593 specifications,, mcron, GNU@tie{}mcron}).
8594 @end table
8595 @end deftp
8596
8597
8598 @node Log Rotation
8599 @subsubsection Log Rotation
8600
8601 @cindex rottlog
8602 @cindex log rotation
8603 @cindex logging
8604 Log files such as those found in @file{/var/log} tend to grow endlessly,
8605 so it's a good idea to @dfn{rotate} them once in a while---i.e., archive
8606 their contents in separate files, possibly compressed. The @code{(gnu
8607 services admin)} module provides an interface to GNU@tie{}Rot[t]log, a
8608 log rotation tool (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}).
8609
8610 The example below defines an operating system that provides log rotation
8611 with the default settings.
8612
8613 @lisp
8614 (use-modules (guix) (gnu))
8615 (use-service-modules admin mcron)
8616 (use-package-modules base idutils)
8617
8618 (operating-system
8619 ;; @dots{}
8620 (services (cons* (mcron-service)
8621 (service rottlog-service-type (rottlog-configuration))
8622 %base-services)))
8623 @end lisp
8624
8625 @defvr {Scheme Variable} rottlog-service-type
8626 This is the type of the Rottlog service, whose value is a
8627 @code{rottlog-configuration} object.
8628
8629 This service type can define mcron jobs (@pxref{Scheduled Job
8630 Execution}) to run the rottlog service.
8631 @end defvr
8632
8633 @deftp {Data Type} rottlog-configuration
8634 Data type representing the configuration of rottlog.
8635
8636 @table @asis
8637 @item @code{rottlog} (default: @code{rottlog})
8638 The Rottlog package to use.
8639
8640 @item @code{rc-file} (default: @code{(file-append rottlog "/etc/rc")})
8641 The Rottlog configuration file to use (@pxref{Mandatory RC Variables,,,
8642 rottlog, GNU Rot[t]log Manual}).
8643
8644 @item @code{periodic-rotations} (default: @code{`(("weekly" %default-rotatations))})
8645 A list of Rottlog period-name/period-config tuples.
8646
8647 For example, taking an example from the Rottlog manual (@pxref{Period
8648 Related File Examples,,, rottlog, GNU Rot[t]log Manual}), a valid tuple
8649 might be:
8650
8651 @example
8652 ("daily" ,(plain-file "daily"
8653 "\
8654 /var/log/apache/* @{
8655 storedir apache-archives
8656 rotate 6
8657 notifempty
8658 nocompress
8659 @}"))
8660 @end example
8661
8662 @item @code{jobs}
8663 This is a list of gexps where each gexp corresponds to an mcron job
8664 specification (@pxref{Scheduled Job Execution}).
8665 @end table
8666 @end deftp
8667
8668 @defvr {Scheme Variable} %default-rotations
8669 Specifies weekly rotation of @var{%rotated-files} and
8670 @code{"/var/log/shepherd.log"}.
8671 @end defvr
8672
8673 @defvr {Scheme Variable} %rotated-files
8674 The list of syslog-controlled files to be rotated. By default it is:
8675 @code{'("/var/log/messages" "/var/log/secure")}.
8676 @end defvr
8677
8678 @node Networking Services
8679 @subsubsection Networking Services
8680
8681 The @code{(gnu services networking)} module provides services to configure
8682 the network interface.
8683
8684 @cindex DHCP, networking service
8685 @deffn {Scheme Procedure} dhcp-client-service [#:dhcp @var{isc-dhcp}]
8686 Return a service that runs @var{dhcp}, a Dynamic Host Configuration
8687 Protocol (DHCP) client, on all the non-loopback network interfaces.
8688 @end deffn
8689
8690 @deffn {Scheme Procedure} static-networking-service @var{interface} @var{ip} @
8691 [#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}]
8692 Return a service that starts @var{interface} with address @var{ip}. If
8693 @var{netmask} is true, use it as the network mask. If @var{gateway} is true,
8694 it must be a string specifying the default network gateway.
8695 @end deffn
8696
8697 @cindex wicd
8698 @cindex wireless
8699 @cindex WiFi
8700 @cindex network management
8701 @deffn {Scheme Procedure} wicd-service [#:wicd @var{wicd}]
8702 Return a service that runs @url{https://launchpad.net/wicd,Wicd}, a network
8703 management daemon that aims to simplify wired and wireless networking.
8704
8705 This service adds the @var{wicd} package to the global profile, providing
8706 several commands to interact with the daemon and configure networking:
8707 @command{wicd-client}, a graphical user interface, and the @command{wicd-cli}
8708 and @command{wicd-curses} user interfaces.
8709 @end deffn
8710
8711 @cindex NetworkManager
8712 @deffn {Scheme Procedure} network-manager-service @
8713 [#:network-manager @var{network-manager}]
8714 Return a service that runs NetworkManager, a network connection manager
8715 attempting to keep network connectivity active when available.
8716 @end deffn
8717
8718 @cindex Connman
8719 @deffn {Scheme Procedure} connman-service @
8720 [#:connman @var{connman}]
8721 Return a service that runs @url{https://01.org/connman,Connman}, a network
8722 connection manager.
8723
8724 This service adds the @var{connman} package to the global profile, providing
8725 several the @command{connmanctl} command to interact with the daemon and
8726 configure networking."
8727 @end deffn
8728
8729 @cindex WPA Supplicant
8730 @defvr {Scheme Variable} wpa-supplicant-service-type
8731 This is the service type to run @url{https://w1.fi/wpa_supplicant/,WPA
8732 supplicant}, an authentication daemon required to authenticate against
8733 encrypted WiFi or ethernet networks. It is configured to listen for
8734 requests on D-Bus.
8735
8736 The value of this service is the @code{wpa-supplicant} package to use.
8737 Thus, it can be instantiated like this:
8738
8739 @lisp
8740 (use-modules (gnu services networking)
8741 (gnu packages admin))
8742
8743 (service wpa-supplicant-service-type wpa-supplicant)
8744 @end lisp
8745 @end defvr
8746
8747 @cindex NTP
8748 @cindex real time clock
8749 @deffn {Scheme Procedure} ntp-service [#:ntp @var{ntp}] @
8750 [#:servers @var{%ntp-servers}] @
8751 [#:allow-large-adjustment? #f]
8752 Return a service that runs the daemon from @var{ntp}, the
8753 @uref{http://www.ntp.org, Network Time Protocol package}. The daemon will
8754 keep the system clock synchronized with that of @var{servers}.
8755 @var{allow-large-adjustment?} determines whether @command{ntpd} is allowed to
8756 make an initial adjustment of more than 1,000 seconds.
8757 @end deffn
8758
8759 @defvr {Scheme Variable} %ntp-servers
8760 List of host names used as the default NTP servers.
8761 @end defvr
8762
8763 @cindex Tor
8764 @deffn {Scheme Procedure} tor-service [@var{config-file}] [#:tor @var{tor}]
8765 Return a service to run the @uref{https://torproject.org, Tor} anonymous
8766 networking daemon.
8767
8768 The daemon runs as the @code{tor} unprivileged user. It is passed
8769 @var{config-file}, a file-like object, with an additional @code{User tor} line
8770 and lines for hidden services added via @code{tor-hidden-service}. Run
8771 @command{man tor} for information about the configuration file.
8772 @end deffn
8773
8774 @cindex hidden service
8775 @deffn {Scheme Procedure} tor-hidden-service @var{name} @var{mapping}
8776 Define a new Tor @dfn{hidden service} called @var{name} and implementing
8777 @var{mapping}. @var{mapping} is a list of port/host tuples, such as:
8778
8779 @example
8780 '((22 "127.0.0.1:22")
8781 (80 "127.0.0.1:8080"))
8782 @end example
8783
8784 In this example, port 22 of the hidden service is mapped to local port 22, and
8785 port 80 is mapped to local port 8080.
8786
8787 This creates a @file{/var/lib/tor/hidden-services/@var{name}} directory, where
8788 the @file{hostname} file contains the @code{.onion} host name for the hidden
8789 service.
8790
8791 See @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, the Tor
8792 project's documentation} for more information.
8793 @end deffn
8794
8795 @deffn {Scheme Procedure} bitlbee-service [#:bitlbee bitlbee] @
8796 [#:interface "127.0.0.1"] [#:port 6667] @
8797 [#:extra-settings ""]
8798 Return a service that runs @url{http://bitlbee.org,BitlBee}, a daemon that
8799 acts as a gateway between IRC and chat networks.
8800
8801 The daemon will listen to the interface corresponding to the IP address
8802 specified in @var{interface}, on @var{port}. @code{127.0.0.1} means that only
8803 local clients can connect, whereas @code{0.0.0.0} means that connections can
8804 come from any networking interface.
8805
8806 In addition, @var{extra-settings} specifies a string to append to the
8807 configuration file.
8808 @end deffn
8809
8810 Furthermore, @code{(gnu services ssh)} provides the following services.
8811 @cindex SSH
8812 @cindex SSH server
8813
8814 @deffn {Scheme Procedure} lsh-service [#:host-key "/etc/lsh/host-key"] @
8815 [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
8816 [#:allow-empty-passwords? #f] [#:root-login? #f] @
8817 [#:syslog-output? #t] [#:x11-forwarding? #t] @
8818 [#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
8819 [#:public-key-authentication? #t] [#:initialize? #t]
8820 Run the @command{lshd} program from @var{lsh} to listen on port @var{port-number}.
8821 @var{host-key} must designate a file containing the host key, and readable
8822 only by root.
8823
8824 When @var{daemonic?} is true, @command{lshd} will detach from the
8825 controlling terminal and log its output to syslogd, unless one sets
8826 @var{syslog-output?} to false. Obviously, it also makes lsh-service
8827 depend on existence of syslogd service. When @var{pid-file?} is true,
8828 @command{lshd} writes its PID to the file called @var{pid-file}.
8829
8830 When @var{initialize?} is true, automatically create the seed and host key
8831 upon service activation if they do not exist yet. This may take long and
8832 require interaction.
8833
8834 When @var{initialize?} is false, it is up to the user to initialize the
8835 randomness generator (@pxref{lsh-make-seed,,, lsh, LSH Manual}), and to create
8836 a key pair with the private key stored in file @var{host-key} (@pxref{lshd
8837 basics,,, lsh, LSH Manual}).
8838
8839 When @var{interfaces} is empty, lshd listens for connections on all the
8840 network interfaces; otherwise, @var{interfaces} must be a list of host names
8841 or addresses.
8842
8843 @var{allow-empty-passwords?} specifies whether to accept log-ins with empty
8844 passwords, and @var{root-login?} specifies whether to accept log-ins as
8845 root.
8846
8847 The other options should be self-descriptive.
8848 @end deffn
8849
8850 @cindex SSH
8851 @cindex SSH server
8852 @deffn {Scheme Variable} openssh-service-type
8853 This is the type for the @uref{http://www.openssh.org, OpenSSH} secure
8854 shell daemon, @command{sshd}. Its value must be an
8855 @code{openssh-configuration} record as in this example:
8856
8857 @example
8858 (service openssh-service-type
8859 (openssh-configuration
8860 (x11-forwarding? #t)
8861 (permit-root-login 'without-password)))
8862 @end example
8863
8864 See below for details about @code{openssh-configuration}.
8865 @end deffn
8866
8867 @deftp {Data Type} openssh-configuration
8868 This is the configuration record for OpenSSH's @command{sshd}.
8869
8870 @table @asis
8871 @item @code{pid-file} (default: @code{"/var/run/sshd.pid"})
8872 Name of the file where @command{sshd} writes its PID.
8873
8874 @item @code{port-number} (default: @code{22})
8875 TCP port on which @command{sshd} listens for incoming connections.
8876
8877 @item @code{permit-root-login} (default: @code{#f})
8878 This field determines whether and when to allow logins as root. If
8879 @code{#f}, root logins are disallowed; if @code{#t}, they are allowed.
8880 If it's the symbol @code{'without-password}, then root logins are
8881 permitted but not with password-based authentication.
8882
8883 @item @code{allow-empty-passwords?} (default: @code{#f})
8884 When true, users with empty passwords may log in. When false, they may
8885 not.
8886
8887 @item @code{password-authentication?} (default: @code{#t})
8888 When true, users may log in with their password. When false, they have
8889 other authentication methods.
8890
8891 @item @code{public-key-authentication?} (default: @code{#t})
8892 When true, users may log in using public key authentication. When
8893 false, users have to use other authentication method.
8894
8895 Authorized public keys are stored in @file{~/.ssh/authorized_keys}.
8896 This is used only by protocol version 2.
8897
8898 @item @code{rsa-authentication?} (default: @code{#t})
8899 When true, users may log in using pure RSA authentication. When false,
8900 users have to use other means of authentication. This is used only by
8901 protocol 1.
8902
8903 @item @code{x11-forwarding?} (default: @code{#f})
8904 When true, forwarding of X11 graphical client connections is
8905 enabled---in other words, @command{ssh} options @option{-X} and
8906 @option{-Y} will work.
8907
8908 @item @code{protocol-number} (default: @code{2})
8909 The SSH protocol number to use.
8910 @end table
8911 @end deftp
8912
8913 @deffn {Scheme Procedure} dropbear-service [@var{config}]
8914 Run the @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,Dropbear SSH
8915 daemon} with the given @var{config}, a @code{<dropbear-configuration>}
8916 object.
8917
8918 For example, to specify a Dropbear service listening on port 1234, add
8919 this call to the operating system's @code{services} field:
8920
8921 @example
8922 (dropbear-service (dropbear-configuration
8923 (port-number 1234)))
8924 @end example
8925 @end deffn
8926
8927 @deftp {Data Type} dropbear-configuration
8928 This data type represents the configuration of a Dropbear SSH daemon.
8929
8930 @table @asis
8931 @item @code{dropbear} (default: @var{dropbear})
8932 The Dropbear package to use.
8933
8934 @item @code{port-number} (default: 22)
8935 The TCP port where the daemon waits for incoming connections.
8936
8937 @item @code{syslog-output?} (default: @code{#t})
8938 Whether to enable syslog output.
8939
8940 @item @code{pid-file} (default: @code{"/var/run/dropbear.pid"})
8941 File name of the daemon's PID file.
8942
8943 @item @code{root-login?} (default: @code{#f})
8944 Whether to allow @code{root} logins.
8945
8946 @item @code{allow-empty-passwords?} (default: @code{#f})
8947 Whether to allow empty passwords.
8948
8949 @item @code{password-authentication?} (default: @code{#t})
8950 Whether to enable password-based authentication.
8951 @end table
8952 @end deftp
8953
8954 @defvr {Scheme Variable} %facebook-host-aliases
8955 This variable contains a string for use in @file{/etc/hosts}
8956 (@pxref{Host Names,,, libc, The GNU C Library Reference Manual}). Each
8957 line contains a entry that maps a known server name of the Facebook
8958 on-line service---e.g., @code{www.facebook.com}---to the local
8959 host---@code{127.0.0.1} or its IPv6 equivalent, @code{::1}.
8960
8961 This variable is typically used in the @code{hosts-file} field of an
8962 @code{operating-system} declaration (@pxref{operating-system Reference,
8963 @file{/etc/hosts}}):
8964
8965 @example
8966 (use-modules (gnu) (guix))
8967
8968 (operating-system
8969 (host-name "mymachine")
8970 ;; ...
8971 (hosts-file
8972 ;; Create a /etc/hosts file with aliases for "localhost"
8973 ;; and "mymachine", as well as for Facebook servers.
8974 (plain-file "hosts"
8975 (string-append (local-host-aliases host-name)
8976 %facebook-host-aliases))))
8977 @end example
8978
8979 This mechanism can prevent programs running locally, such as Web
8980 browsers, from accessing Facebook.
8981 @end defvr
8982
8983 The @code{(gnu services avahi)} provides the following definition.
8984
8985 @deffn {Scheme Procedure} avahi-service [#:avahi @var{avahi}] @
8986 [#:host-name #f] [#:publish? #t] [#:ipv4? #t] @
8987 [#:ipv6? #t] [#:wide-area? #f] @
8988 [#:domains-to-browse '()] [#:debug? #f]
8989 Return a service that runs @command{avahi-daemon}, a system-wide
8990 mDNS/DNS-SD responder that allows for service discovery and
8991 "zero-configuration" host name lookups (see @uref{http://avahi.org/}), and
8992 extends the name service cache daemon (nscd) so that it can resolve
8993 @code{.local} host names using
8994 @uref{http://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. Additionally,
8995 add the @var{avahi} package to the system profile so that commands such as
8996 @command{avahi-browse} are directly usable.
8997
8998 If @var{host-name} is different from @code{#f}, use that as the host name to
8999 publish for this machine; otherwise, use the machine's actual host name.
9000
9001 When @var{publish?} is true, publishing of host names and services is allowed;
9002 in particular, avahi-daemon will publish the machine's host name and IP
9003 address via mDNS on the local network.
9004
9005 When @var{wide-area?} is true, DNS-SD over unicast DNS is enabled.
9006
9007 Boolean values @var{ipv4?} and @var{ipv6?} determine whether to use IPv4/IPv6
9008 sockets.
9009 @end deffn
9010
9011
9012 @node X Window
9013 @subsubsection X Window
9014
9015 @cindex X11
9016 @cindex X Window System
9017 Support for the X Window graphical display system---specifically
9018 Xorg---is provided by the @code{(gnu services xorg)} module. Note that
9019 there is no @code{xorg-service} procedure. Instead, the X server is
9020 started by the @dfn{login manager}, currently SLiM.
9021
9022 @deftp {Data Type} sddm-configuration
9023 This is the data type representing the sddm service configuration.
9024
9025 @table @asis
9026 @item @code{display-server} (default: "x11")
9027 Select display server to use for the greeter. Valid values are "x11"
9028 or "wayland".
9029
9030 @item @code{numlock} (default: "on")
9031 Valid values are "on", "off" or "none".
9032
9033 @item @code{halt-command} (default @code{#~(string-apppend #$shepherd "/sbin/halt")})
9034 Command to run when halting.
9035
9036 @item @code{reboot-command} (default @code{#~(string-append #$shepherd "/sbin/reboot")})
9037 Command to run when rebooting.
9038
9039 @item @code{theme} (default "maldives")
9040 Theme to use. Default themes provided by SDDM are "elarun" or "maldives".
9041
9042 @item @code{themes-directory} (default "/run/current-system/profile/share/sddm/themes")
9043 Directory to look for themes.
9044
9045 @item @code{faces-directory} (default "/run/current-system/profile/share/sddm/faces")
9046 Directory to look for faces.
9047
9048 @item @code{default-path} (default "/run/current-system/profile/bin")
9049 Default PATH to use.
9050
9051 @item @code{minimum-uid} (default 1000)
9052 Minimum UID to display in SDDM.
9053
9054 @item @code{maximum-uid} (default 2000)
9055 Maximum UID to display in SDDM
9056
9057 @item @code{remember-last-user?} (default #t)
9058 Remember last user.
9059
9060 @item @code{remember-last-session?} (default #t)
9061 Remember last session.
9062
9063 @item @code{hide-users} (default "")
9064 Usernames to hide from SDDM greeter.
9065
9066 @item @code{hide-shells} (default @code{#~(string-append #$shadow "/sbin/nologin")})
9067 Users with shells listed will be hidden from the SDDM greeter.
9068
9069 @item @code{session-command} (default @code{#~(string-append #$sddm "/share/sddm/scripts/wayland-session")})
9070 Script to run before starting a wayland session.
9071
9072 @item @code{sessions-directory} (default "/run/current-system/profile/share/wayland-sessions")
9073 Directory to look for desktop files starting wayland sessions.
9074
9075 @item @code{xorg-server-path} (default @code{xorg-start-command})
9076 Path to xorg-server.
9077
9078 @item @code{xauth-path} (default @code{#~(string-append #$xauth "/bin/xauth")})
9079 Path to xauth.
9080
9081 @item @code{xephyr-path} (default @code{#~(string-append #$xorg-server "/bin/Xephyr")})
9082 Path to Xephyr.
9083
9084 @item @code{xdisplay-start} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xsetup")})
9085 Script to run after starting xorg-server.
9086
9087 @item @code{xdisplay-stop} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xstop")})
9088 Script to run before stopping xorg-server.
9089
9090 @item @code{xsession-command} (default: @code{xinitr })
9091 Script to run before starting a X session.
9092
9093 @item @code{xsessions-directory} (default: "/run/current-system/profile/share/xsessions")
9094 Directory to look for desktop files starting X sessions.
9095
9096 @item @code{minimum-vt} (default: 7)
9097 Minimum VT to use.
9098
9099 @item @code{xserver-arguments} (default "-nolisten tcp")
9100 Arguments to pass to xorg-server.
9101
9102 @item @code{auto-login-user} (default "")
9103 User to use for auto-login.
9104
9105 @item @code{auto-login-session} (default "")
9106 Desktop file to use for auto-login.
9107
9108 @item @code{relogin?} (default #f)
9109 Relogin after logout.
9110
9111 @end table
9112 @end deftp
9113
9114 @cindex login manager
9115 @deffn {Scheme Procedure} sddm-service config
9116 Return a service that spawns the SDDM graphical login manager for config of
9117 type @code{<sddm-configuration>}.
9118
9119 @example
9120 (sddm-service (sddm-configuration
9121 (auto-login-user "Alice")
9122 (auto-login-session "xfce.desktop")))
9123 @end example
9124 @end deffn
9125
9126 @deffn {Scheme Procedure} slim-service [#:allow-empty-passwords? #f] @
9127 [#:auto-login? #f] [#:default-user ""] [#:startx] @
9128 [#:theme @var{%default-slim-theme}] @
9129 [#:theme-name @var{%default-slim-theme-name}]
9130 Return a service that spawns the SLiM graphical login manager, which in
9131 turn starts the X display server with @var{startx}, a command as returned by
9132 @code{xorg-start-command}.
9133
9134 @cindex X session
9135
9136 SLiM automatically looks for session types described by the @file{.desktop}
9137 files in @file{/run/current-system/profile/share/xsessions} and allows users
9138 to choose a session from the log-in screen using @kbd{F1}. Packages such as
9139 @var{xfce}, @var{sawfish}, and @var{ratpoison} provide @file{.desktop} files;
9140 adding them to the system-wide set of packages automatically makes them
9141 available at the log-in screen.
9142
9143 In addition, @file{~/.xsession} files are honored. When available,
9144 @file{~/.xsession} must be an executable that starts a window manager
9145 and/or other X clients.
9146
9147 When @var{allow-empty-passwords?} is true, allow logins with an empty
9148 password. When @var{auto-login?} is true, log in automatically as
9149 @var{default-user}.
9150
9151 If @var{theme} is @code{#f}, use the default log-in theme; otherwise
9152 @var{theme} must be a gexp denoting the name of a directory containing the
9153 theme to use. In that case, @var{theme-name} specifies the name of the
9154 theme.
9155 @end deffn
9156
9157 @defvr {Scheme Variable} %default-theme
9158 @defvrx {Scheme Variable} %default-theme-name
9159 The G-Expression denoting the default SLiM theme and its name.
9160 @end defvr
9161
9162 @deffn {Scheme Procedure} xorg-start-command [#:guile] @
9163 [#:configuration-file #f] [#:xorg-server @var{xorg-server}]
9164 Return a derivation that builds a @var{guile} script to start the X server
9165 from @var{xorg-server}. @var{configuration-file} is the server configuration
9166 file or a derivation that builds it; when omitted, the result of
9167 @code{xorg-configuration-file} is used.
9168
9169 Usually the X server is started by a login manager.
9170 @end deffn
9171
9172 @deffn {Scheme Procedure} xorg-configuration-file @
9173 [#:drivers '()] [#:resolutions '()] [#:extra-config '()]
9174 Return a configuration file for the Xorg server containing search paths for
9175 all the common drivers.
9176
9177 @var{drivers} must be either the empty list, in which case Xorg chooses a
9178 graphics driver automatically, or a list of driver names that will be tried in
9179 this order---e.g., @code{(\"modesetting\" \"vesa\")}.
9180
9181 Likewise, when @var{resolutions} is the empty list, Xorg chooses an
9182 appropriate screen resolution; otherwise, it must be a list of
9183 resolutions---e.g., @code{((1024 768) (640 480))}.
9184
9185 Last, @var{extra-config} is a list of strings or objects appended to the
9186 @code{text-file*} argument list. It is used to pass extra text to be added
9187 verbatim to the configuration file.
9188 @end deffn
9189
9190 @deffn {Scheme Procedure} screen-locker-service @var{package} [@var{name}]
9191 Add @var{package}, a package for a screen-locker or screen-saver whose
9192 command is @var{program}, to the set of setuid programs and add a PAM entry
9193 for it. For example:
9194
9195 @lisp
9196 (screen-locker-service xlockmore "xlock")
9197 @end lisp
9198
9199 makes the good ol' XlockMore usable.
9200 @end deffn
9201
9202
9203 @node Printing Services
9204 @subsubsection Printing Services
9205
9206 The @code{(gnu services cups)} module provides a Guix service definition
9207 for the CUPS printing service. To add printer support to a GuixSD
9208 system, add a @code{cups-service} to the operating system definition:
9209
9210 @deffn {Scheme Variable} cups-service-type
9211 The service type for the CUPS print server. Its value should be a valid
9212 CUPS configuration (see below). For example:
9213 @example
9214 (service cups-service-type (cups-configuration))
9215 @end example
9216 @end deffn
9217
9218 The CUPS configuration controls the basic things about your CUPS
9219 installation: what interfaces it listens on, what to do if a print job
9220 fails, how much logging to do, and so on. To actually add a printer,
9221 you have to visit the @url{http://localhost:631} URL, or use a tool such
9222 as GNOME's printer configuration services. By default, configuring a
9223 CUPS service will generate a self-signed certificate if needed, for
9224 secure connections to the print server.
9225
9226 One way you might want to customize CUPS is to enable or disable the web
9227 interface. You can do that directly, like this:
9228
9229 @example
9230 (service cups-service-type
9231 (cups-configuration
9232 (web-interface? #f)))
9233 @end example
9234
9235 The available configuration parameters follow. Each parameter
9236 definition is preceded by its type; for example, @samp{string-list foo}
9237 indicates that the @code{foo} parameter should be specified as a list of
9238 strings. There is also a way to specify the configuration as a string,
9239 if you have an old @code{cupsd.conf} file that you want to port over
9240 from some other system; see the end for more details.
9241
9242 @c The following documentation was initially generated by
9243 @c (generate-documentation) in (gnu services cups). Manually maintained
9244 @c documentation is better, so we shouldn't hesitate to edit below as
9245 @c needed. However if the change you want to make to this documentation
9246 @c can be done in an automated way, it's probably easier to change
9247 @c (generate-documentation) than to make it below and have to deal with
9248 @c the churn as CUPS updates.
9249
9250
9251 Available @code{cups-configuration} fields are:
9252
9253 @deftypevr {@code{cups-configuration} parameter} package cups
9254 The CUPS package.
9255 @end deftypevr
9256
9257 @deftypevr {@code{cups-configuration} parameter} package-list extensions
9258 Drivers and other extensions to the CUPS package.
9259 @end deftypevr
9260
9261 @deftypevr {@code{cups-configuration} parameter} files-configuration files-configuration
9262 Configuration of where to write logs, what directories to use for print
9263 spools, and related privileged configuration parameters.
9264
9265 Available @code{files-configuration} fields are:
9266
9267 @deftypevr {@code{files-configuration} parameter} log-location access-log
9268 Defines the access log filename. Specifying a blank filename disables
9269 access log generation. The value @code{stderr} causes log entries to be
9270 sent to the standard error file when the scheduler is running in the
9271 foreground, or to the system log daemon when run in the background. The
9272 value @code{syslog} causes log entries to be sent to the system log
9273 daemon. The server name may be included in filenames using the string
9274 @code{%s}, as in @code{/var/log/cups/%s-access_log}.
9275
9276 Defaults to @samp{"/var/log/cups/access_log"}.
9277 @end deftypevr
9278
9279 @deftypevr {@code{files-configuration} parameter} file-name cache-dir
9280 Where CUPS should cache data.
9281
9282 Defaults to @samp{"/var/cache/cups"}.
9283 @end deftypevr
9284
9285 @deftypevr {@code{files-configuration} parameter} string config-file-perm
9286 Specifies the permissions for all configuration files that the scheduler
9287 writes.
9288
9289 Note that the permissions for the printers.conf file are currently
9290 masked to only allow access from the scheduler user (typically root).
9291 This is done because printer device URIs sometimes contain sensitive
9292 authentication information that should not be generally known on the
9293 system. There is no way to disable this security feature.
9294
9295 Defaults to @samp{"0640"}.
9296 @end deftypevr
9297
9298 @deftypevr {@code{files-configuration} parameter} log-location error-log
9299 Defines the error log filename. Specifying a blank filename disables
9300 access log generation. The value @code{stderr} causes log entries to be
9301 sent to the standard error file when the scheduler is running in the
9302 foreground, or to the system log daemon when run in the background. The
9303 value @code{syslog} causes log entries to be sent to the system log
9304 daemon. The server name may be included in filenames using the string
9305 @code{%s}, as in @code{/var/log/cups/%s-error_log}.
9306
9307 Defaults to @samp{"/var/log/cups/error_log"}.
9308 @end deftypevr
9309
9310 @deftypevr {@code{files-configuration} parameter} string fatal-errors
9311 Specifies which errors are fatal, causing the scheduler to exit. The
9312 kind strings are:
9313
9314 @table @code
9315 @item none
9316 No errors are fatal.
9317
9318 @item all
9319 All of the errors below are fatal.
9320
9321 @item browse
9322 Browsing initialization errors are fatal, for example failed connections
9323 to the DNS-SD daemon.
9324
9325 @item config
9326 Configuration file syntax errors are fatal.
9327
9328 @item listen
9329 Listen or Port errors are fatal, except for IPv6 failures on the
9330 loopback or @code{any} addresses.
9331
9332 @item log
9333 Log file creation or write errors are fatal.
9334
9335 @item permissions
9336 Bad startup file permissions are fatal, for example shared TLS
9337 certificate and key files with world-read permissions.
9338 @end table
9339
9340 Defaults to @samp{"all -browse"}.
9341 @end deftypevr
9342
9343 @deftypevr {@code{files-configuration} parameter} boolean file-device?
9344 Specifies whether the file pseudo-device can be used for new printer
9345 queues. The URI @uref{file:///dev/null} is always allowed.
9346
9347 Defaults to @samp{#f}.
9348 @end deftypevr
9349
9350 @deftypevr {@code{files-configuration} parameter} string group
9351 Specifies the group name or ID that will be used when executing external
9352 programs.
9353
9354 Defaults to @samp{"lp"}.
9355 @end deftypevr
9356
9357 @deftypevr {@code{files-configuration} parameter} string log-file-perm
9358 Specifies the permissions for all log files that the scheduler writes.
9359
9360 Defaults to @samp{"0644"}.
9361 @end deftypevr
9362
9363 @deftypevr {@code{files-configuration} parameter} log-location page-log
9364 Defines the page log filename. Specifying a blank filename disables
9365 access log generation. The value @code{stderr} causes log entries to be
9366 sent to the standard error file when the scheduler is running in the
9367 foreground, or to the system log daemon when run in the background. The
9368 value @code{syslog} causes log entries to be sent to the system log
9369 daemon. The server name may be included in filenames using the string
9370 @code{%s}, as in @code{/var/log/cups/%s-page_log}.
9371
9372 Defaults to @samp{"/var/log/cups/page_log"}.
9373 @end deftypevr
9374
9375 @deftypevr {@code{files-configuration} parameter} string remote-root
9376 Specifies the username that is associated with unauthenticated accesses
9377 by clients claiming to be the root user. The default is @code{remroot}.
9378
9379 Defaults to @samp{"remroot"}.
9380 @end deftypevr
9381
9382 @deftypevr {@code{files-configuration} parameter} file-name request-root
9383 Specifies the directory that contains print jobs and other HTTP request
9384 data.
9385
9386 Defaults to @samp{"/var/spool/cups"}.
9387 @end deftypevr
9388
9389 @deftypevr {@code{files-configuration} parameter} sandboxing sandboxing
9390 Specifies the level of security sandboxing that is applied to print
9391 filters, backends, and other child processes of the scheduler; either
9392 @code{relaxed} or @code{strict}. This directive is currently only
9393 used/supported on macOS.
9394
9395 Defaults to @samp{strict}.
9396 @end deftypevr
9397
9398 @deftypevr {@code{files-configuration} parameter} file-name server-keychain
9399 Specifies the location of TLS certificates and private keys. CUPS will
9400 look for public and private keys in this directory: a @code{.crt} files
9401 for PEM-encoded certificates and corresponding @code{.key} files for
9402 PEM-encoded private keys.
9403
9404 Defaults to @samp{"/etc/cups/ssl"}.
9405 @end deftypevr
9406
9407 @deftypevr {@code{files-configuration} parameter} file-name server-root
9408 Specifies the directory containing the server configuration files.
9409
9410 Defaults to @samp{"/etc/cups"}.
9411 @end deftypevr
9412
9413 @deftypevr {@code{files-configuration} parameter} boolean sync-on-close?
9414 Specifies whether the scheduler calls fsync(2) after writing
9415 configuration or state files.
9416
9417 Defaults to @samp{#f}.
9418 @end deftypevr
9419
9420 @deftypevr {@code{files-configuration} parameter} space-separated-string-list system-group
9421 Specifies the group(s) to use for @code{@@SYSTEM} group authentication.
9422 @end deftypevr
9423
9424 @deftypevr {@code{files-configuration} parameter} file-name temp-dir
9425 Specifies the directory where temporary files are stored.
9426
9427 Defaults to @samp{"/var/spool/cups/tmp"}.
9428 @end deftypevr
9429
9430 @deftypevr {@code{files-configuration} parameter} string user
9431 Specifies the user name or ID that is used when running external
9432 programs.
9433
9434 Defaults to @samp{"lp"}.
9435 @end deftypevr
9436 @end deftypevr
9437
9438 @deftypevr {@code{cups-configuration} parameter} access-log-level access-log-level
9439 Specifies the logging level for the AccessLog file. The @code{config}
9440 level logs when printers and classes are added, deleted, or modified and
9441 when configuration files are accessed or updated. The @code{actions}
9442 level logs when print jobs are submitted, held, released, modified, or
9443 canceled, and any of the conditions for @code{config}. The @code{all}
9444 level logs all requests.
9445
9446 Defaults to @samp{actions}.
9447 @end deftypevr
9448
9449 @deftypevr {@code{cups-configuration} parameter} boolean auto-purge-jobs?
9450 Specifies whether to purge job history data automatically when it is no
9451 longer required for quotas.
9452
9453 Defaults to @samp{#f}.
9454 @end deftypevr
9455
9456 @deftypevr {@code{cups-configuration} parameter} browse-local-protocols browse-local-protocols
9457 Specifies which protocols to use for local printer sharing.
9458
9459 Defaults to @samp{dnssd}.
9460 @end deftypevr
9461
9462 @deftypevr {@code{cups-configuration} parameter} boolean browse-web-if?
9463 Specifies whether the CUPS web interface is advertised.
9464
9465 Defaults to @samp{#f}.
9466 @end deftypevr
9467
9468 @deftypevr {@code{cups-configuration} parameter} boolean browsing?
9469 Specifies whether shared printers are advertised.
9470
9471 Defaults to @samp{#f}.
9472 @end deftypevr
9473
9474 @deftypevr {@code{cups-configuration} parameter} string classification
9475 Specifies the security classification of the server. Any valid banner
9476 name can be used, including "classified", "confidential", "secret",
9477 "topsecret", and "unclassified", or the banner can be omitted to disable
9478 secure printing functions.
9479
9480 Defaults to @samp{""}.
9481 @end deftypevr
9482
9483 @deftypevr {@code{cups-configuration} parameter} boolean classify-override?
9484 Specifies whether users may override the classification (cover page) of
9485 individual print jobs using the @code{job-sheets} option.
9486
9487 Defaults to @samp{#f}.
9488 @end deftypevr
9489
9490 @deftypevr {@code{cups-configuration} parameter} default-auth-type default-auth-type
9491 Specifies the default type of authentication to use.
9492
9493 Defaults to @samp{Basic}.
9494 @end deftypevr
9495
9496 @deftypevr {@code{cups-configuration} parameter} default-encryption default-encryption
9497 Specifies whether encryption will be used for authenticated requests.
9498
9499 Defaults to @samp{Required}.
9500 @end deftypevr
9501
9502 @deftypevr {@code{cups-configuration} parameter} string default-language
9503 Specifies the default language to use for text and web content.
9504
9505 Defaults to @samp{"en"}.
9506 @end deftypevr
9507
9508 @deftypevr {@code{cups-configuration} parameter} string default-paper-size
9509 Specifies the default paper size for new print queues. @samp{"Auto"}
9510 uses a locale-specific default, while @samp{"None"} specifies there is
9511 no default paper size. Specific size names are typically
9512 @samp{"Letter"} or @samp{"A4"}.
9513
9514 Defaults to @samp{"Auto"}.
9515 @end deftypevr
9516
9517 @deftypevr {@code{cups-configuration} parameter} string default-policy
9518 Specifies the default access policy to use.
9519
9520 Defaults to @samp{"default"}.
9521 @end deftypevr
9522
9523 @deftypevr {@code{cups-configuration} parameter} boolean default-shared?
9524 Specifies whether local printers are shared by default.
9525
9526 Defaults to @samp{#t}.
9527 @end deftypevr
9528
9529 @deftypevr {@code{cups-configuration} parameter} non-negative-integer dirty-clean-interval
9530 Specifies the delay for updating of configuration and state files, in
9531 seconds. A value of 0 causes the update to happen as soon as possible,
9532 typically within a few milliseconds.
9533
9534 Defaults to @samp{30}.
9535 @end deftypevr
9536
9537 @deftypevr {@code{cups-configuration} parameter} error-policy error-policy
9538 Specifies what to do when an error occurs. Possible values are
9539 @code{abort-job}, which will discard the failed print job;
9540 @code{retry-job}, which will retry the job at a later time;
9541 @code{retry-this-job}, which retries the failed job immediately; and
9542 @code{stop-printer}, which stops the printer.
9543
9544 Defaults to @samp{stop-printer}.
9545 @end deftypevr
9546
9547 @deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-limit
9548 Specifies the maximum cost of filters that are run concurrently, which
9549 can be used to minimize disk, memory, and CPU resource problems. A
9550 limit of 0 disables filter limiting. An average print to a
9551 non-PostScript printer needs a filter limit of about 200. A PostScript
9552 printer needs about half that (100). Setting the limit below these
9553 thresholds will effectively limit the scheduler to printing a single job
9554 at any time.
9555
9556 Defaults to @samp{0}.
9557 @end deftypevr
9558
9559 @deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-nice
9560 Specifies the scheduling priority of filters that are run to print a
9561 job. The nice value ranges from 0, the highest priority, to 19, the
9562 lowest priority.
9563
9564 Defaults to @samp{0}.
9565 @end deftypevr
9566
9567 @deftypevr {@code{cups-configuration} parameter} host-name-lookups host-name-lookups
9568 Specifies whether to do reverse lookups on connecting clients. The
9569 @code{double} setting causes @code{cupsd} to verify that the hostname
9570 resolved from the address matches one of the addresses returned for that
9571 hostname. Double lookups also prevent clients with unregistered
9572 addresses from connecting to your server. Only set this option to
9573 @code{#t} or @code{double} if absolutely required.
9574
9575 Defaults to @samp{#f}.
9576 @end deftypevr
9577
9578 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-kill-delay
9579 Specifies the number of seconds to wait before killing the filters and
9580 backend associated with a canceled or held job.
9581
9582 Defaults to @samp{30}.
9583 @end deftypevr
9584
9585 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-interval
9586 Specifies the interval between retries of jobs in seconds. This is
9587 typically used for fax queues but can also be used with normal print
9588 queues whose error policy is @code{retry-job} or
9589 @code{retry-current-job}.
9590
9591 Defaults to @samp{30}.
9592 @end deftypevr
9593
9594 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-limit
9595 Specifies the number of retries that are done for jobs. This is
9596 typically used for fax queues but can also be used with normal print
9597 queues whose error policy is @code{retry-job} or
9598 @code{retry-current-job}.
9599
9600 Defaults to @samp{5}.
9601 @end deftypevr
9602
9603 @deftypevr {@code{cups-configuration} parameter} boolean keep-alive?
9604 Specifies whether to support HTTP keep-alive connections.
9605
9606 Defaults to @samp{#t}.
9607 @end deftypevr
9608
9609 @deftypevr {@code{cups-configuration} parameter} non-negative-integer keep-alive-timeout
9610 Specifies how long an idle client connection remains open, in seconds.
9611
9612 Defaults to @samp{30}.
9613 @end deftypevr
9614
9615 @deftypevr {@code{cups-configuration} parameter} non-negative-integer limit-request-body
9616 Specifies the maximum size of print files, IPP requests, and HTML form
9617 data. A limit of 0 disables the limit check.
9618
9619 Defaults to @samp{0}.
9620 @end deftypevr
9621
9622 @deftypevr {@code{cups-configuration} parameter} multiline-string-list listen
9623 Listens on the specified interfaces for connections. Valid values are
9624 of the form @var{address}:@var{port}, where @var{address} is either an
9625 IPv6 address enclosed in brackets, an IPv4 address, or @code{*} to
9626 indicate all addresses. Values can also be file names of local UNIX
9627 domain sockets. The Listen directive is similar to the Port directive
9628 but allows you to restrict access to specific interfaces or networks.
9629 @end deftypevr
9630
9631 @deftypevr {@code{cups-configuration} parameter} non-negative-integer listen-back-log
9632 Specifies the number of pending connections that will be allowed. This
9633 normally only affects very busy servers that have reached the MaxClients
9634 limit, but can also be triggered by large numbers of simultaneous
9635 connections. When the limit is reached, the operating system will
9636 refuse additional connections until the scheduler can accept the pending
9637 ones.
9638
9639 Defaults to @samp{128}.
9640 @end deftypevr
9641
9642 @deftypevr {@code{cups-configuration} parameter} location-access-control-list location-access-controls
9643 Specifies a set of additional access controls.
9644
9645 Available @code{location-access-controls} fields are:
9646
9647 @deftypevr {@code{location-access-controls} parameter} file-name path
9648 Specifies the URI path to which the access control applies.
9649 @end deftypevr
9650
9651 @deftypevr {@code{location-access-controls} parameter} access-control-list access-controls
9652 Access controls for all access to this path, in the same format as the
9653 @code{access-controls} of @code{operation-access-control}.
9654
9655 Defaults to @samp{()}.
9656 @end deftypevr
9657
9658 @deftypevr {@code{location-access-controls} parameter} method-access-control-list method-access-controls
9659 Access controls for method-specific access to this path.
9660
9661 Defaults to @samp{()}.
9662
9663 Available @code{method-access-controls} fields are:
9664
9665 @deftypevr {@code{method-access-controls} parameter} boolean reverse?
9666 If @code{#t}, apply access controls to all methods except the listed
9667 methods. Otherwise apply to only the listed methods.
9668
9669 Defaults to @samp{#f}.
9670 @end deftypevr
9671
9672 @deftypevr {@code{method-access-controls} parameter} method-list methods
9673 Methods to which this access control applies.
9674
9675 Defaults to @samp{()}.
9676 @end deftypevr
9677
9678 @deftypevr {@code{method-access-controls} parameter} access-control-list access-controls
9679 Access control directives, as a list of strings. Each string should be
9680 one directive, such as "Order allow,deny".
9681
9682 Defaults to @samp{()}.
9683 @end deftypevr
9684 @end deftypevr
9685 @end deftypevr
9686
9687 @deftypevr {@code{cups-configuration} parameter} non-negative-integer log-debug-history
9688 Specifies the number of debugging messages that are retained for logging
9689 if an error occurs in a print job. Debug messages are logged regardless
9690 of the LogLevel setting.
9691
9692 Defaults to @samp{100}.
9693 @end deftypevr
9694
9695 @deftypevr {@code{cups-configuration} parameter} log-level log-level
9696 Specifies the level of logging for the ErrorLog file. The value
9697 @code{none} stops all logging while @code{debug2} logs everything.
9698
9699 Defaults to @samp{info}.
9700 @end deftypevr
9701
9702 @deftypevr {@code{cups-configuration} parameter} log-time-format log-time-format
9703 Specifies the format of the date and time in the log files. The value
9704 @code{standard} logs whole seconds while @code{usecs} logs microseconds.
9705
9706 Defaults to @samp{standard}.
9707 @end deftypevr
9708
9709 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients
9710 Specifies the maximum number of simultaneous clients that are allowed by
9711 the scheduler.
9712
9713 Defaults to @samp{100}.
9714 @end deftypevr
9715
9716 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients-per-host
9717 Specifies the maximum number of simultaneous clients that are allowed
9718 from a single address.
9719
9720 Defaults to @samp{100}.
9721 @end deftypevr
9722
9723 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-copies
9724 Specifies the maximum number of copies that a user can print of each
9725 job.
9726
9727 Defaults to @samp{9999}.
9728 @end deftypevr
9729
9730 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-hold-time
9731 Specifies the maximum time a job may remain in the @code{indefinite}
9732 hold state before it is canceled. A value of 0 disables cancellation of
9733 held jobs.
9734
9735 Defaults to @samp{0}.
9736 @end deftypevr
9737
9738 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs
9739 Specifies the maximum number of simultaneous jobs that are allowed. Set
9740 to 0 to allow an unlimited number of jobs.
9741
9742 Defaults to @samp{500}.
9743 @end deftypevr
9744
9745 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-printer
9746 Specifies the maximum number of simultaneous jobs that are allowed per
9747 printer. A value of 0 allows up to MaxJobs jobs per printer.
9748
9749 Defaults to @samp{0}.
9750 @end deftypevr
9751
9752 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-user
9753 Specifies the maximum number of simultaneous jobs that are allowed per
9754 user. A value of 0 allows up to MaxJobs jobs per user.
9755
9756 Defaults to @samp{0}.
9757 @end deftypevr
9758
9759 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-job-time
9760 Specifies the maximum time a job may take to print before it is
9761 canceled, in seconds. Set to 0 to disable cancellation of "stuck" jobs.
9762
9763 Defaults to @samp{10800}.
9764 @end deftypevr
9765
9766 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-log-size
9767 Specifies the maximum size of the log files before they are rotated, in
9768 bytes. The value 0 disables log rotation.
9769
9770 Defaults to @samp{1048576}.
9771 @end deftypevr
9772
9773 @deftypevr {@code{cups-configuration} parameter} non-negative-integer multiple-operation-timeout
9774 Specifies the maximum amount of time to allow between files in a
9775 multiple file print job, in seconds.
9776
9777 Defaults to @samp{300}.
9778 @end deftypevr
9779
9780 @deftypevr {@code{cups-configuration} parameter} string page-log-format
9781 Specifies the format of PageLog lines. Sequences beginning with percent
9782 (@samp{%}) characters are replaced with the corresponding information,
9783 while all other characters are copied literally. The following percent
9784 sequences are recognized:
9785
9786 @table @samp
9787 @item %%
9788 insert a single percent character
9789
9790 @item %@{name@}
9791 insert the value of the specified IPP attribute
9792
9793 @item %C
9794 insert the number of copies for the current page
9795
9796 @item %P
9797 insert the current page number
9798
9799 @item %T
9800 insert the current date and time in common log format
9801
9802 @item %j
9803 insert the job ID
9804
9805 @item %p
9806 insert the printer name
9807
9808 @item %u
9809 insert the username
9810 @end table
9811
9812 A value of the empty string disables page logging. The string @code{%p
9813 %u %j %T %P %C %@{job-billing@} %@{job-originating-host-name@}
9814 %@{job-name@} %@{media@} %@{sides@}} creates a page log with the
9815 standard items.
9816
9817 Defaults to @samp{""}.
9818 @end deftypevr
9819
9820 @deftypevr {@code{cups-configuration} parameter} environment-variables environment-variables
9821 Passes the specified environment variable(s) to child processes; a list
9822 of strings.
9823
9824 Defaults to @samp{()}.
9825 @end deftypevr
9826
9827 @deftypevr {@code{cups-configuration} parameter} policy-configuration-list policies
9828 Specifies named access control policies.
9829
9830 Available @code{policy-configuration} fields are:
9831
9832 @deftypevr {@code{policy-configuration} parameter} string name
9833 Name of the policy.
9834 @end deftypevr
9835
9836 @deftypevr {@code{policy-configuration} parameter} string job-private-access
9837 Specifies an access list for a job's private values. @code{@@ACL} maps
9838 to the printer's requesting-user-name-allowed or
9839 requesting-user-name-denied values. @code{@@OWNER} maps to the job's
9840 owner. @code{@@SYSTEM} maps to the groups listed for the
9841 @code{system-group} field of the @code{files-config} configuration,
9842 which is reified into the @code{cups-files.conf(5)} file. Other
9843 possible elements of the access list include specific user names, and
9844 @code{@@@var{group}} to indicate members of a specific group. The
9845 access list may also be simply @code{all} or @code{default}.
9846
9847 Defaults to @samp{"@@OWNER @@SYSTEM"}.
9848 @end deftypevr
9849
9850 @deftypevr {@code{policy-configuration} parameter} string job-private-values
9851 Specifies the list of job values to make private, or @code{all},
9852 @code{default}, or @code{none}.
9853
9854 Defaults to @samp{"job-name job-originating-host-name
9855 job-originating-user-name phone"}.
9856 @end deftypevr
9857
9858 @deftypevr {@code{policy-configuration} parameter} string subscription-private-access
9859 Specifies an access list for a subscription's private values.
9860 @code{@@ACL} maps to the printer's requesting-user-name-allowed or
9861 requesting-user-name-denied values. @code{@@OWNER} maps to the job's
9862 owner. @code{@@SYSTEM} maps to the groups listed for the
9863 @code{system-group} field of the @code{files-config} configuration,
9864 which is reified into the @code{cups-files.conf(5)} file. Other
9865 possible elements of the access list include specific user names, and
9866 @code{@@@var{group}} to indicate members of a specific group. The
9867 access list may also be simply @code{all} or @code{default}.
9868
9869 Defaults to @samp{"@@OWNER @@SYSTEM"}.
9870 @end deftypevr
9871
9872 @deftypevr {@code{policy-configuration} parameter} string subscription-private-values
9873 Specifies the list of job values to make private, or @code{all},
9874 @code{default}, or @code{none}.
9875
9876 Defaults to @samp{"notify-events notify-pull-method notify-recipient-uri
9877 notify-subscriber-user-name notify-user-data"}.
9878 @end deftypevr
9879
9880 @deftypevr {@code{policy-configuration} parameter} operation-access-control-list access-controls
9881 Access control by IPP operation.
9882
9883 Defaults to @samp{()}.
9884 @end deftypevr
9885 @end deftypevr
9886
9887 @deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-files
9888 Specifies whether job files (documents) are preserved after a job is
9889 printed. If a numeric value is specified, job files are preserved for
9890 the indicated number of seconds after printing. Otherwise a boolean
9891 value applies indefinitely.
9892
9893 Defaults to @samp{86400}.
9894 @end deftypevr
9895
9896 @deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-history
9897 Specifies whether the job history is preserved after a job is printed.
9898 If a numeric value is specified, the job history is preserved for the
9899 indicated number of seconds after printing. If @code{#t}, the job
9900 history is preserved until the MaxJobs limit is reached.
9901
9902 Defaults to @samp{#t}.
9903 @end deftypevr
9904
9905 @deftypevr {@code{cups-configuration} parameter} non-negative-integer reload-timeout
9906 Specifies the amount of time to wait for job completion before
9907 restarting the scheduler.
9908
9909 Defaults to @samp{30}.
9910 @end deftypevr
9911
9912 @deftypevr {@code{cups-configuration} parameter} string rip-cache
9913 Specifies the maximum amount of memory to use when converting documents
9914 into bitmaps for a printer.
9915
9916 Defaults to @samp{"128m"}.
9917 @end deftypevr
9918
9919 @deftypevr {@code{cups-configuration} parameter} string server-admin
9920 Specifies the email address of the server administrator.
9921
9922 Defaults to @samp{"root@@localhost.localdomain"}.
9923 @end deftypevr
9924
9925 @deftypevr {@code{cups-configuration} parameter} host-name-list-or-* server-alias
9926 The ServerAlias directive is used for HTTP Host header validation when
9927 clients connect to the scheduler from external interfaces. Using the
9928 special name @code{*} can expose your system to known browser-based DNS
9929 rebinding attacks, even when accessing sites through a firewall. If the
9930 auto-discovery of alternate names does not work, we recommend listing
9931 each alternate name with a ServerAlias directive instead of using
9932 @code{*}.
9933
9934 Defaults to @samp{*}.
9935 @end deftypevr
9936
9937 @deftypevr {@code{cups-configuration} parameter} string server-name
9938 Specifies the fully-qualified host name of the server.
9939
9940 Defaults to @samp{"localhost"}.
9941 @end deftypevr
9942
9943 @deftypevr {@code{cups-configuration} parameter} server-tokens server-tokens
9944 Specifies what information is included in the Server header of HTTP
9945 responses. @code{None} disables the Server header. @code{ProductOnly}
9946 reports @code{CUPS}. @code{Major} reports @code{CUPS 2}. @code{Minor}
9947 reports @code{CUPS 2.0}. @code{Minimal} reports @code{CUPS 2.0.0}.
9948 @code{OS} reports @code{CUPS 2.0.0 (@var{uname})} where @var{uname} is
9949 the output of the @code{uname} command. @code{Full} reports @code{CUPS
9950 2.0.0 (@var{uname}) IPP/2.0}.
9951
9952 Defaults to @samp{Minimal}.
9953 @end deftypevr
9954
9955 @deftypevr {@code{cups-configuration} parameter} string set-env
9956 Set the specified environment variable to be passed to child processes.
9957
9958 Defaults to @samp{"variable value"}.
9959 @end deftypevr
9960
9961 @deftypevr {@code{cups-configuration} parameter} multiline-string-list ssl-listen
9962 Listens on the specified interfaces for encrypted connections. Valid
9963 values are of the form @var{address}:@var{port}, where @var{address} is
9964 either an IPv6 address enclosed in brackets, an IPv4 address, or
9965 @code{*} to indicate all addresses.
9966
9967 Defaults to @samp{()}.
9968 @end deftypevr
9969
9970 @deftypevr {@code{cups-configuration} parameter} ssl-options ssl-options
9971 Sets encryption options. By default, CUPS only supports encryption
9972 using TLS v1.0 or higher using known secure cipher suites. The
9973 @code{AllowRC4} option enables the 128-bit RC4 cipher suites, which are
9974 required for some older clients that do not implement newer ones. The
9975 @code{AllowSSL3} option enables SSL v3.0, which is required for some
9976 older clients that do not support TLS v1.0.
9977
9978 Defaults to @samp{()}.
9979 @end deftypevr
9980
9981 @deftypevr {@code{cups-configuration} parameter} boolean strict-conformance?
9982 Specifies whether the scheduler requires clients to strictly adhere to
9983 the IPP specifications.
9984
9985 Defaults to @samp{#f}.
9986 @end deftypevr
9987
9988 @deftypevr {@code{cups-configuration} parameter} non-negative-integer timeout
9989 Specifies the HTTP request timeout, in seconds.
9990
9991 Defaults to @samp{300}.
9992
9993 @end deftypevr
9994
9995 @deftypevr {@code{cups-configuration} parameter} boolean web-interface?
9996 Specifies whether the web interface is enabled.
9997
9998 Defaults to @samp{#f}.
9999 @end deftypevr
10000
10001 At this point you're probably thinking ``oh dear, Guix manual, I like
10002 you but you can stop already with the configuration options''. Indeed.
10003 However, one more point: it could be that you have an existing
10004 @code{cupsd.conf} that you want to use. In that case, you can pass an
10005 @code{opaque-cups-configuration} as the configuration of a
10006 @code{cups-service-type}.
10007
10008 Available @code{opaque-cups-configuration} fields are:
10009
10010 @deftypevr {@code{opaque-cups-configuration} parameter} package cups
10011 The CUPS package.
10012 @end deftypevr
10013
10014 @deftypevr {@code{opaque-cups-configuration} parameter} string cupsd.conf
10015 The contents of the @code{cupsd.conf}, as a string.
10016 @end deftypevr
10017
10018 @deftypevr {@code{opaque-cups-configuration} parameter} string cups-files.conf
10019 The contents of the @code{cups-files.conf} file, as a string.
10020 @end deftypevr
10021
10022 For example, if your @code{cupsd.conf} and @code{cups-files.conf} are in
10023 strings of the same name, you could instantiate a CUPS service like
10024 this:
10025
10026 @example
10027 (service cups-service-type
10028 (opaque-cups-configuration
10029 (cupsd.conf cupsd.conf)
10030 (cups-files.conf cups-files.conf)))
10031 @end example
10032
10033
10034 @node Desktop Services
10035 @subsubsection Desktop Services
10036
10037 The @code{(gnu services desktop)} module provides services that are
10038 usually useful in the context of a ``desktop'' setup---that is, on a
10039 machine running a graphical display server, possibly with graphical user
10040 interfaces, etc. It also defines services that provide specific desktop
10041 environments like GNOME and XFCE.
10042
10043 To simplify things, the module defines a variable containing the set of
10044 services that users typically expect on a machine with a graphical
10045 environment and networking:
10046
10047 @defvr {Scheme Variable} %desktop-services
10048 This is a list of services that builds upon @var{%base-services} and
10049 adds or adjusts services for a typical ``desktop'' setup.
10050
10051 In particular, it adds a graphical login manager (@pxref{X Window,
10052 @code{slim-service}}), screen lockers,
10053 a network management tool (@pxref{Networking
10054 Services, @code{wicd-service}}), energy and color management services,
10055 the @code{elogind} login and seat manager, the Polkit privilege service,
10056 the GeoClue location service, an NTP client (@pxref{Networking
10057 Services}), the Avahi daemon, and has the name service switch service
10058 configured to be able to use @code{nss-mdns} (@pxref{Name Service
10059 Switch, mDNS}).
10060 @end defvr
10061
10062 The @var{%desktop-services} variable can be used as the @code{services}
10063 field of an @code{operating-system} declaration (@pxref{operating-system
10064 Reference, @code{services}}).
10065
10066 Additionally, the @code{gnome-desktop-service} and
10067 @code{xfce-desktop-service} procedures can add GNOME and/or XFCE to a
10068 system. To ``add GNOME'' means that system-level services like the
10069 backlight adjustment helpers and the power management utilities are
10070 added to the system, extending @code{polkit} and @code{dbus}
10071 appropriately, allowing GNOME to operate with elevated privileges on a
10072 limited number of special-purpose system interfaces. Additionally,
10073 adding a service made by @code{gnome-desktop-service} adds the GNOME
10074 metapackage to the system profile. Likewise, adding the XFCE service
10075 not only adds the @code{xfce} metapackage to the system profile, but it
10076 also gives the Thunar file manager the ability to open a ``root-mode''
10077 file management window, if the user authenticates using the
10078 administrator's password via the standard polkit graphical interface.
10079
10080 @deffn {Scheme Procedure} gnome-desktop-service
10081 Return a service that adds the @code{gnome} package to the system
10082 profile, and extends polkit with the actions from
10083 @code{gnome-settings-daemon}.
10084 @end deffn
10085
10086 @deffn {Scheme Procedure} xfce-desktop-service
10087 Return a service that adds the @code{xfce} package to the system profile,
10088 and extends polkit with the ability for @code{thunar} to manipulate the
10089 file system as root from within a user session, after the user has
10090 authenticated with the administrator's password.
10091 @end deffn
10092
10093 Because the GNOME and XFCE desktop services pull in so many packages,
10094 the default @code{%desktop-services} variable doesn't include either of
10095 them by default. To add GNOME or XFCE, just @code{cons} them onto
10096 @code{%desktop-services} in the @code{services} field of your
10097 @code{operating-system}:
10098
10099 @example
10100 (use-modules (gnu))
10101 (use-service-modules desktop)
10102 (operating-system
10103 ...
10104 ;; cons* adds items to the list given as its last argument.
10105 (services (cons* (gnome-desktop-service)
10106 (xfce-desktop-service)
10107 %desktop-services))
10108 ...)
10109 @end example
10110
10111 These desktop environments will then be available as options in the
10112 graphical login window.
10113
10114 The actual service definitions included in @code{%desktop-services} and
10115 provided by @code{(gnu services dbus)} and @code{(gnu services desktop)}
10116 are described below.
10117
10118 @deffn {Scheme Procedure} dbus-service [#:dbus @var{dbus}] [#:services '()]
10119 Return a service that runs the ``system bus'', using @var{dbus}, with
10120 support for @var{services}.
10121
10122 @uref{http://dbus.freedesktop.org/, D-Bus} is an inter-process communication
10123 facility. Its system bus is used to allow system services to communicate
10124 and to be notified of system-wide events.
10125
10126 @var{services} must be a list of packages that provide an
10127 @file{etc/dbus-1/system.d} directory containing additional D-Bus configuration
10128 and policy files. For example, to allow avahi-daemon to use the system bus,
10129 @var{services} must be equal to @code{(list avahi)}.
10130 @end deffn
10131
10132 @deffn {Scheme Procedure} elogind-service [#:config @var{config}]
10133 Return a service that runs the @code{elogind} login and
10134 seat management daemon. @uref{https://github.com/andywingo/elogind,
10135 Elogind} exposes a D-Bus interface that can be used to know which users
10136 are logged in, know what kind of sessions they have open, suspend the
10137 system, inhibit system suspend, reboot the system, and other tasks.
10138
10139 Elogind handles most system-level power events for a computer, for
10140 example suspending the system when a lid is closed, or shutting it down
10141 when the power button is pressed.
10142
10143 The @var{config} keyword argument specifies the configuration for
10144 elogind, and should be the result of an @code{(elogind-configuration
10145 (@var{parameter} @var{value})...)} invocation. Available parameters and
10146 their default values are:
10147
10148 @table @code
10149 @item kill-user-processes?
10150 @code{#f}
10151 @item kill-only-users
10152 @code{()}
10153 @item kill-exclude-users
10154 @code{("root")}
10155 @item inhibit-delay-max-seconds
10156 @code{5}
10157 @item handle-power-key
10158 @code{poweroff}
10159 @item handle-suspend-key
10160 @code{suspend}
10161 @item handle-hibernate-key
10162 @code{hibernate}
10163 @item handle-lid-switch
10164 @code{suspend}
10165 @item handle-lid-switch-docked
10166 @code{ignore}
10167 @item power-key-ignore-inhibited?
10168 @code{#f}
10169 @item suspend-key-ignore-inhibited?
10170 @code{#f}
10171 @item hibernate-key-ignore-inhibited?
10172 @code{#f}
10173 @item lid-switch-ignore-inhibited?
10174 @code{#t}
10175 @item holdoff-timeout-seconds
10176 @code{30}
10177 @item idle-action
10178 @code{ignore}
10179 @item idle-action-seconds
10180 @code{(* 30 60)}
10181 @item runtime-directory-size-percent
10182 @code{10}
10183 @item runtime-directory-size
10184 @code{#f}
10185 @item remove-ipc?
10186 @code{#t}
10187 @item suspend-state
10188 @code{("mem" "standby" "freeze")}
10189 @item suspend-mode
10190 @code{()}
10191 @item hibernate-state
10192 @code{("disk")}
10193 @item hibernate-mode
10194 @code{("platform" "shutdown")}
10195 @item hybrid-sleep-state
10196 @code{("disk")}
10197 @item hybrid-sleep-mode
10198 @code{("suspend" "platform" "shutdown")}
10199 @end table
10200 @end deffn
10201
10202 @deffn {Scheme Procedure} polkit-service @
10203 [#:polkit @var{polkit}]
10204 Return a service that runs the
10205 @uref{http://www.freedesktop.org/wiki/Software/polkit/, Polkit privilege
10206 management service}, which allows system administrators to grant access to
10207 privileged operations in a structured way. By querying the Polkit service, a
10208 privileged system component can know when it should grant additional
10209 capabilities to ordinary users. For example, an ordinary user can be granted
10210 the capability to suspend the system if the user is logged in locally.
10211 @end deffn
10212
10213 @deffn {Scheme Procedure} upower-service [#:upower @var{upower}] @
10214 [#:watts-up-pro? #f] @
10215 [#:poll-batteries? #t] @
10216 [#:ignore-lid? #f] @
10217 [#:use-percentage-for-policy? #f] @
10218 [#:percentage-low 10] @
10219 [#:percentage-critical 3] @
10220 [#:percentage-action 2] @
10221 [#:time-low 1200] @
10222 [#:time-critical 300] @
10223 [#:time-action 120] @
10224 [#:critical-power-action 'hybrid-sleep]
10225 Return a service that runs @uref{http://upower.freedesktop.org/,
10226 @command{upowerd}}, a system-wide monitor for power consumption and battery
10227 levels, with the given configuration settings. It implements the
10228 @code{org.freedesktop.UPower} D-Bus interface, and is notably used by
10229 GNOME.
10230 @end deffn
10231
10232 @deffn {Scheme Procedure} udisks-service [#:udisks @var{udisks}]
10233 Return a service for @uref{http://udisks.freedesktop.org/docs/latest/,
10234 UDisks}, a @dfn{disk management} daemon that provides user interfaces with
10235 notifications and ways to mount/unmount disks. Programs that talk to UDisks
10236 include the @command{udisksctl} command, part of UDisks, and GNOME Disks.
10237 @end deffn
10238
10239 @deffn {Scheme Procedure} colord-service [#:colord @var{colord}]
10240 Return a service that runs @command{colord}, a system service with a D-Bus
10241 interface to manage the color profiles of input and output devices such as
10242 screens and scanners. It is notably used by the GNOME Color Manager graphical
10243 tool. See @uref{http://www.freedesktop.org/software/colord/, the colord web
10244 site} for more information.
10245 @end deffn
10246
10247 @deffn {Scheme Procedure} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()]
10248 Return a configuration allowing an application to access GeoClue
10249 location data. @var{name} is the Desktop ID of the application, without
10250 the @code{.desktop} part. If @var{allowed?} is true, the application
10251 will have access to location information by default. The boolean
10252 @var{system?} value indicates whether an application is a system component
10253 or not. Finally @var{users} is a list of UIDs of all users for which
10254 this application is allowed location info access. An empty users list
10255 means that all users are allowed.
10256 @end deffn
10257
10258 @defvr {Scheme Variable} %standard-geoclue-applications
10259 The standard list of well-known GeoClue application configurations,
10260 granting authority to the GNOME date-and-time utility to ask for the
10261 current location in order to set the time zone, and allowing the
10262 IceCat and Epiphany web browsers to request location information.
10263 IceCat and Epiphany both query the user before allowing a web page to
10264 know the user's location.
10265 @end defvr
10266
10267 @deffn {Scheme Procedure} geoclue-service [#:colord @var{colord}] @
10268 [#:whitelist '()] @
10269 [#:wifi-geolocation-url "https://location.services.mozilla.com/v1/geolocate?key=geoclue"] @
10270 [#:submit-data? #f]
10271 [#:wifi-submission-url "https://location.services.mozilla.com/v1/submit?key=geoclue"] @
10272 [#:submission-nick "geoclue"] @
10273 [#:applications %standard-geoclue-applications]
10274 Return a service that runs the GeoClue location service. This service
10275 provides a D-Bus interface to allow applications to request access to a
10276 user's physical location, and optionally to add information to online
10277 location databases. See
10278 @uref{https://wiki.freedesktop.org/www/Software/GeoClue/, the GeoClue
10279 web site} for more information.
10280 @end deffn
10281
10282 @deffn {Scheme Procedure} bluetooth-service [#:bluez @var{bluez}]
10283 Return a service that runs the @command{bluetoothd} daemon, which manages
10284 all the Bluetooth devices and provides a number of D-Bus interfaces.
10285
10286 Users need to be in the @code{lp} group to access the D-Bus service.
10287 @end deffn
10288
10289 @node Database Services
10290 @subsubsection Database Services
10291
10292 @cindex database
10293 @cindex SQL
10294 The @code{(gnu services databases)} module provides the following services.
10295
10296 @deffn {Scheme Procedure} postgresql-service [#:postgresql postgresql] @
10297 [#:config-file] [#:data-directory ``/var/lib/postgresql/data''] @
10298 [#:port 5432] [#:locale ``en_US.utf8'']
10299 Return a service that runs @var{postgresql}, the PostgreSQL database
10300 server.
10301
10302 The PostgreSQL daemon loads its runtime configuration from @var{config-file},
10303 creates a database cluster with @var{locale} as the default
10304 locale, stored in @var{data-directory}. It then listens on @var{port}.
10305 @end deffn
10306
10307 @deffn {Scheme Procedure} mysql-service [#:config (mysql-configuration)]
10308 Return a service that runs @command{mysqld}, the MySQL or MariaDB
10309 database server.
10310
10311 The optional @var{config} argument specifies the configuration for
10312 @command{mysqld}, which should be a @code{<mysql-configuration>} object.
10313 @end deffn
10314
10315 @deftp {Data Type} mysql-configuration
10316 Data type representing the configuration of @var{mysql-service}.
10317
10318 @table @asis
10319 @item @code{mysql} (default: @var{mariadb})
10320 Package object of the MySQL database server, can be either @var{mariadb}
10321 or @var{mysql}.
10322
10323 For MySQL, a temporary root password will be displayed at activation time.
10324 For MariaDB, the root password is empty.
10325
10326 @item @code{port} (default: @code{3306})
10327 TCP port on which the database server listens for incoming connections.
10328 @end table
10329 @end deftp
10330
10331 @node Mail Services
10332 @subsubsection Mail Services
10333
10334 @cindex mail
10335 @cindex email
10336 The @code{(gnu services mail)} module provides Guix service definitions
10337 for email services: IMAP, POP3, and LMTP servers, as well as mail
10338 transport agents (MTAs). Lots of acronyms! These services are detailed
10339 in the subsections below.
10340
10341 @subsubheading Dovecot Service
10342
10343 @deffn {Scheme Procedure} dovecot-service [#:config (dovecot-configuration)]
10344 Return a service that runs the Dovecot IMAP/POP3/LMTP mail server.
10345 @end deffn
10346
10347 By default, Dovecot does not need much configuration; the default
10348 configuration object created by @code{(dovecot-configuration)} will
10349 suffice if your mail is delivered to @code{~/Maildir}. A self-signed
10350 certificate will be generated for TLS-protected connections, though
10351 Dovecot will also listen on cleartext ports by default. There are a
10352 number of options, though, which mail administrators might need to change,
10353 and as is the case with other services, Guix allows the system
10354 administrator to specify these parameters via a uniform Scheme interface.
10355
10356 For example, to specify that mail is located at @code{maildir~/.mail},
10357 one would instantiate the Dovecot service like this:
10358
10359 @example
10360 (dovecot-service #:config
10361 (dovecot-configuration
10362 (mail-location "maildir:~/.mail")))
10363 @end example
10364
10365 The available configuration parameters follow. Each parameter
10366 definition is preceded by its type; for example, @samp{string-list foo}
10367 indicates that the @code{foo} parameter should be specified as a list of
10368 strings. There is also a way to specify the configuration as a string,
10369 if you have an old @code{dovecot.conf} file that you want to port over
10370 from some other system; see the end for more details.
10371
10372 @c The following documentation was initially generated by
10373 @c (generate-documentation) in (gnu services mail). Manually maintained
10374 @c documentation is better, so we shouldn't hesitate to edit below as
10375 @c needed. However if the change you want to make to this documentation
10376 @c can be done in an automated way, it's probably easier to change
10377 @c (generate-documentation) than to make it below and have to deal with
10378 @c the churn as dovecot updates.
10379
10380 Available @code{dovecot-configuration} fields are:
10381
10382 @deftypevr {@code{dovecot-configuration} parameter} package dovecot
10383 The dovecot package.
10384 @end deftypevr
10385
10386 @deftypevr {@code{dovecot-configuration} parameter} comma-separated-string-list listen
10387 A list of IPs or hosts where to listen for connections. @samp{*}
10388 listens on all IPv4 interfaces, @samp{::} listens on all IPv6
10389 interfaces. If you want to specify non-default ports or anything more
10390 complex, customize the address and port fields of the
10391 @samp{inet-listener} of the specific services you are interested in.
10392 @end deftypevr
10393
10394 @deftypevr {@code{dovecot-configuration} parameter} protocol-configuration-list protocols
10395 List of protocols we want to serve. Available protocols include
10396 @samp{imap}, @samp{pop3}, and @samp{lmtp}.
10397
10398 Available @code{protocol-configuration} fields are:
10399
10400 @deftypevr {@code{protocol-configuration} parameter} string name
10401 The name of the protocol.
10402 @end deftypevr
10403
10404 @deftypevr {@code{protocol-configuration} parameter} string auth-socket-path
10405 UNIX socket path to the master authentication server to find users.
10406 This is used by imap (for shared users) and lda.
10407 It defaults to @samp{"/var/run/dovecot/auth-userdb"}.
10408 @end deftypevr
10409
10410 @deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins
10411 Space separated list of plugins to load.
10412 @end deftypevr
10413
10414 @deftypevr {@code{protocol-configuration} parameter} non-negative-integer mail-max-userip-connections
10415 Maximum number of IMAP connections allowed for a user from each IP
10416 address. NOTE: The username is compared case-sensitively.
10417 Defaults to @samp{10}.
10418 @end deftypevr
10419
10420 @end deftypevr
10421
10422 @deftypevr {@code{dovecot-configuration} parameter} service-configuration-list services
10423 List of services to enable. Available services include @samp{imap},
10424 @samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}, and
10425 @samp{lmtp}.
10426
10427 Available @code{service-configuration} fields are:
10428
10429 @deftypevr {@code{service-configuration} parameter} string kind
10430 The service kind. Valid values include @code{director},
10431 @code{imap-login}, @code{pop3-login}, @code{lmtp}, @code{imap},
10432 @code{pop3}, @code{auth}, @code{auth-worker}, @code{dict},
10433 @code{tcpwrap}, @code{quota-warning}, or anything else.
10434 @end deftypevr
10435
10436 @deftypevr {@code{service-configuration} parameter} listener-configuration-list listeners
10437 Listeners for the service. A listener is either a
10438 @code{unix-listener-configuration}, a @code{fifo-listener-configuration}, or
10439 an @code{inet-listener-configuration}.
10440 Defaults to @samp{()}.
10441
10442 Available @code{unix-listener-configuration} fields are:
10443
10444 @deftypevr {@code{unix-listener-configuration} parameter} file-name path
10445 The file name on which to listen.
10446 @end deftypevr
10447
10448 @deftypevr {@code{unix-listener-configuration} parameter} string mode
10449 The access mode for the socket.
10450 Defaults to @samp{"0600"}.
10451 @end deftypevr
10452
10453 @deftypevr {@code{unix-listener-configuration} parameter} string user
10454 The user to own the socket.
10455 Defaults to @samp{""}.
10456 @end deftypevr
10457
10458 @deftypevr {@code{unix-listener-configuration} parameter} string group
10459 The group to own the socket.
10460 Defaults to @samp{""}.
10461 @end deftypevr
10462
10463
10464 Available @code{fifo-listener-configuration} fields are:
10465
10466 @deftypevr {@code{fifo-listener-configuration} parameter} file-name path
10467 The file name on which to listen.
10468 @end deftypevr
10469
10470 @deftypevr {@code{fifo-listener-configuration} parameter} string mode
10471 The access mode for the socket.
10472 Defaults to @samp{"0600"}.
10473 @end deftypevr
10474
10475 @deftypevr {@code{fifo-listener-configuration} parameter} string user
10476 The user to own the socket.
10477 Defaults to @samp{""}.
10478 @end deftypevr
10479
10480 @deftypevr {@code{fifo-listener-configuration} parameter} string group
10481 The group to own the socket.
10482 Defaults to @samp{""}.
10483 @end deftypevr
10484
10485
10486 Available @code{inet-listener-configuration} fields are:
10487
10488 @deftypevr {@code{inet-listener-configuration} parameter} string protocol
10489 The protocol to listen for.
10490 @end deftypevr
10491
10492 @deftypevr {@code{inet-listener-configuration} parameter} string address
10493 The address on which to listen, or empty for all addresses.
10494 Defaults to @samp{""}.
10495 @end deftypevr
10496
10497 @deftypevr {@code{inet-listener-configuration} parameter} non-negative-integer port
10498 The port on which to listen.
10499 @end deftypevr
10500
10501 @deftypevr {@code{inet-listener-configuration} parameter} boolean ssl?
10502 Whether to use SSL for this service; @samp{yes}, @samp{no}, or
10503 @samp{required}.
10504 Defaults to @samp{#t}.
10505 @end deftypevr
10506
10507 @end deftypevr
10508
10509 @deftypevr {@code{service-configuration} parameter} non-negative-integer service-count
10510 Number of connections to handle before starting a new process.
10511 Typically the only useful values are 0 (unlimited) or 1. 1 is more
10512 secure, but 0 is faster. <doc/wiki/LoginProcess.txt>.
10513 Defaults to @samp{1}.
10514 @end deftypevr
10515
10516 @deftypevr {@code{service-configuration} parameter} non-negative-integer process-min-avail
10517 Number of processes to always keep waiting for more connections.
10518 Defaults to @samp{0}.
10519 @end deftypevr
10520
10521 @deftypevr {@code{service-configuration} parameter} non-negative-integer vsz-limit
10522 If you set @samp{service-count 0}, you probably need to grow
10523 this.
10524 Defaults to @samp{256000000}.
10525 @end deftypevr
10526
10527 @end deftypevr
10528
10529 @deftypevr {@code{dovecot-configuration} parameter} dict-configuration dict
10530 Dict configuration, as created by the @code{dict-configuration}
10531 constructor.
10532
10533 Available @code{dict-configuration} fields are:
10534
10535 @deftypevr {@code{dict-configuration} parameter} free-form-fields entries
10536 A list of key-value pairs that this dict should hold.
10537 Defaults to @samp{()}.
10538 @end deftypevr
10539
10540 @end deftypevr
10541
10542 @deftypevr {@code{dovecot-configuration} parameter} passdb-configuration-list passdbs
10543 A list of passdb configurations, each one created by the
10544 @code{passdb-configuration} constructor.
10545
10546 Available @code{passdb-configuration} fields are:
10547
10548 @deftypevr {@code{passdb-configuration} parameter} string driver
10549 The driver that the passdb should use. Valid values include
10550 @samp{pam}, @samp{passwd}, @samp{shadow}, @samp{bsdauth}, and
10551 @samp{static}.
10552 Defaults to @samp{"pam"}.
10553 @end deftypevr
10554
10555 @deftypevr {@code{passdb-configuration} parameter} free-form-args args
10556 A list of key-value args to the passdb driver.
10557 Defaults to @samp{()}.
10558 @end deftypevr
10559
10560 @end deftypevr
10561
10562 @deftypevr {@code{dovecot-configuration} parameter} userdb-configuration-list userdbs
10563 List of userdb configurations, each one created by the
10564 @code{userdb-configuration} constructor.
10565
10566 Available @code{userdb-configuration} fields are:
10567
10568 @deftypevr {@code{userdb-configuration} parameter} string driver
10569 The driver that the userdb should use. Valid values include
10570 @samp{passwd} and @samp{static}.
10571 Defaults to @samp{"passwd"}.
10572 @end deftypevr
10573
10574 @deftypevr {@code{userdb-configuration} parameter} free-form-args args
10575 A list of key-value args to the userdb driver.
10576 Defaults to @samp{()}.
10577 @end deftypevr
10578
10579 @deftypevr {@code{userdb-configuration} parameter} free-form-args override-fields
10580 Override fields from passwd.
10581 Defaults to @samp{()}.
10582 @end deftypevr
10583
10584 @end deftypevr
10585
10586 @deftypevr {@code{dovecot-configuration} parameter} plugin-configuration plugin-configuration
10587 Plug-in configuration, created by the @code{plugin-configuration}
10588 constructor.
10589 @end deftypevr
10590
10591 @deftypevr {@code{dovecot-configuration} parameter} list-of-namespace-configuration namespaces
10592 List of namespaces. Each item in the list is created by the
10593 @code{namespace-configuration} constructor.
10594
10595 Available @code{namespace-configuration} fields are:
10596
10597 @deftypevr {@code{namespace-configuration} parameter} string name
10598 Name for this namespace.
10599 @end deftypevr
10600
10601 @deftypevr {@code{namespace-configuration} parameter} string type
10602 Namespace type: @samp{private}, @samp{shared} or @samp{public}.
10603 Defaults to @samp{"private"}.
10604 @end deftypevr
10605
10606 @deftypevr {@code{namespace-configuration} parameter} string separator
10607 Hierarchy separator to use. You should use the same separator for
10608 all namespaces or some clients get confused. @samp{/} is usually a good
10609 one. The default however depends on the underlying mail storage
10610 format.
10611 Defaults to @samp{""}.
10612 @end deftypevr
10613
10614 @deftypevr {@code{namespace-configuration} parameter} string prefix
10615 Prefix required to access this namespace. This needs to be
10616 different for all namespaces. For example @samp{Public/}.
10617 Defaults to @samp{""}.
10618 @end deftypevr
10619
10620 @deftypevr {@code{namespace-configuration} parameter} string location
10621 Physical location of the mailbox. This is in the same format as
10622 mail_location, which is also the default for it.
10623 Defaults to @samp{""}.
10624 @end deftypevr
10625
10626 @deftypevr {@code{namespace-configuration} parameter} boolean inbox?
10627 There can be only one INBOX, and this setting defines which
10628 namespace has it.
10629 Defaults to @samp{#f}.
10630 @end deftypevr
10631
10632 @deftypevr {@code{namespace-configuration} parameter} boolean hidden?
10633 If namespace is hidden, it's not advertised to clients via NAMESPACE
10634 extension. You'll most likely also want to set @samp{list? #f}. This is mostly
10635 useful when converting from another server with different namespaces
10636 which you want to deprecate but still keep working. For example you can
10637 create hidden namespaces with prefixes @samp{~/mail/}, @samp{~%u/mail/}
10638 and @samp{mail/}.
10639 Defaults to @samp{#f}.
10640 @end deftypevr
10641
10642 @deftypevr {@code{namespace-configuration} parameter} boolean list?
10643 Show the mailboxes under this namespace with the LIST command. This
10644 makes the namespace visible for clients that do not support the NAMESPACE
10645 extension. The special @code{children} value lists child mailboxes, but
10646 hides the namespace prefix.
10647 Defaults to @samp{#t}.
10648 @end deftypevr
10649
10650 @deftypevr {@code{namespace-configuration} parameter} boolean subscriptions?
10651 Namespace handles its own subscriptions. If set to @code{#f}, the
10652 parent namespace handles them. The empty prefix should always have this
10653 as @code{#t}).
10654 Defaults to @samp{#t}.
10655 @end deftypevr
10656
10657 @deftypevr {@code{namespace-configuration} parameter} mailbox-configuration-list mailboxes
10658 List of predefined mailboxes in this namespace.
10659 Defaults to @samp{()}.
10660
10661 Available @code{mailbox-configuration} fields are:
10662
10663 @deftypevr {@code{mailbox-configuration} parameter} string name
10664 Name for this mailbox.
10665 @end deftypevr
10666
10667 @deftypevr {@code{mailbox-configuration} parameter} string auto
10668 @samp{create} will automatically create this mailbox.
10669 @samp{subscribe} will both create and subscribe to the mailbox.
10670 Defaults to @samp{"no"}.
10671 @end deftypevr
10672
10673 @deftypevr {@code{mailbox-configuration} parameter} space-separated-string-list special-use
10674 List of IMAP @code{SPECIAL-USE} attributes as specified by RFC 6154.
10675 Valid values are @code{\All}, @code{\Archive}, @code{\Drafts},
10676 @code{\Flagged}, @code{\Junk}, @code{\Sent}, and @code{\Trash}.
10677 Defaults to @samp{()}.
10678 @end deftypevr
10679
10680 @end deftypevr
10681
10682 @end deftypevr
10683
10684 @deftypevr {@code{dovecot-configuration} parameter} file-name base-dir
10685 Base directory where to store runtime data.
10686 Defaults to @samp{"/var/run/dovecot/"}.
10687 @end deftypevr
10688
10689 @deftypevr {@code{dovecot-configuration} parameter} string login-greeting
10690 Greeting message for clients.
10691 Defaults to @samp{"Dovecot ready."}.
10692 @end deftypevr
10693
10694 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-trusted-networks
10695 List of trusted network ranges. Connections from these IPs are
10696 allowed to override their IP addresses and ports (for logging and for
10697 authentication checks). @samp{disable-plaintext-auth} is also ignored
10698 for these networks. Typically you would specify your IMAP proxy servers
10699 here.
10700 Defaults to @samp{()}.
10701 @end deftypevr
10702
10703 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-access-sockets
10704 List of login access check sockets (e.g. tcpwrap).
10705 Defaults to @samp{()}.
10706 @end deftypevr
10707
10708 @deftypevr {@code{dovecot-configuration} parameter} boolean verbose-proctitle?
10709 Show more verbose process titles (in ps). Currently shows user name
10710 and IP address. Useful for seeing who is actually using the IMAP
10711 processes (e.g. shared mailboxes or if the same uid is used for multiple
10712 accounts).
10713 Defaults to @samp{#f}.
10714 @end deftypevr
10715
10716 @deftypevr {@code{dovecot-configuration} parameter} boolean shutdown-clients?
10717 Should all processes be killed when Dovecot master process shuts down.
10718 Setting this to @code{#f} means that Dovecot can be upgraded without
10719 forcing existing client connections to close (although that could also
10720 be a problem if the upgrade is e.g. due to a security fix).
10721 Defaults to @samp{#t}.
10722 @end deftypevr
10723
10724 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer doveadm-worker-count
10725 If non-zero, run mail commands via this many connections to doveadm
10726 server, instead of running them directly in the same process.
10727 Defaults to @samp{0}.
10728 @end deftypevr
10729
10730 @deftypevr {@code{dovecot-configuration} parameter} string doveadm-socket-path
10731 UNIX socket or host:port used for connecting to doveadm server.
10732 Defaults to @samp{"doveadm-server"}.
10733 @end deftypevr
10734
10735 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list import-environment
10736 List of environment variables that are preserved on Dovecot startup
10737 and passed down to all of its child processes. You can also give
10738 key=value pairs to always set specific settings.
10739 @end deftypevr
10740
10741 @deftypevr {@code{dovecot-configuration} parameter} boolean disable-plaintext-auth?
10742 Disable LOGIN command and all other plaintext authentications unless
10743 SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
10744 matches the local IP (i.e. you're connecting from the same computer),
10745 the connection is considered secure and plaintext authentication is
10746 allowed. See also ssl=required setting.
10747 Defaults to @samp{#t}.
10748 @end deftypevr
10749
10750 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-cache-size
10751 Authentication cache size (e.g. @samp{#e10e6}). 0 means it's disabled.
10752 Note that bsdauth, PAM and vpopmail require @samp{cache-key} to be set
10753 for caching to be used.
10754 Defaults to @samp{0}.
10755 @end deftypevr
10756
10757 @deftypevr {@code{dovecot-configuration} parameter} string auth-cache-ttl
10758 Time to live for cached data. After TTL expires the cached record
10759 is no longer used, *except* if the main database lookup returns internal
10760 failure. We also try to handle password changes automatically: If
10761 user's previous authentication was successful, but this one wasn't, the
10762 cache isn't used. For now this works only with plaintext
10763 authentication.
10764 Defaults to @samp{"1 hour"}.
10765 @end deftypevr
10766
10767 @deftypevr {@code{dovecot-configuration} parameter} string auth-cache-negative-ttl
10768 TTL for negative hits (user not found, password mismatch).
10769 0 disables caching them completely.
10770 Defaults to @samp{"1 hour"}.
10771 @end deftypevr
10772
10773 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-realms
10774 List of realms for SASL authentication mechanisms that need them.
10775 You can leave it empty if you don't want to support multiple realms.
10776 Many clients simply use the first one listed here, so keep the default
10777 realm first.
10778 Defaults to @samp{()}.
10779 @end deftypevr
10780
10781 @deftypevr {@code{dovecot-configuration} parameter} string auth-default-realm
10782 Default realm/domain to use if none was specified. This is used for
10783 both SASL realms and appending @@domain to username in plaintext
10784 logins.
10785 Defaults to @samp{""}.
10786 @end deftypevr
10787
10788 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-chars
10789 List of allowed characters in username. If the user-given username
10790 contains a character not listed in here, the login automatically fails.
10791 This is just an extra check to make sure user can't exploit any
10792 potential quote escaping vulnerabilities with SQL/LDAP databases. If
10793 you want to allow all characters, set this value to empty.
10794 Defaults to @samp{"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@@"}.
10795 @end deftypevr
10796
10797 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-translation
10798 Username character translations before it's looked up from
10799 databases. The value contains series of from -> to characters. For
10800 example @samp{#@@/@@} means that @samp{#} and @samp{/} characters are
10801 translated to @samp{@@}.
10802 Defaults to @samp{""}.
10803 @end deftypevr
10804
10805 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-format
10806 Username formatting before it's looked up from databases. You can
10807 use the standard variables here, e.g. %Lu would lowercase the username,
10808 %n would drop away the domain if it was given, or @samp{%n-AT-%d} would
10809 change the @samp{@@} into @samp{-AT-}. This translation is done after
10810 @samp{auth-username-translation} changes.
10811 Defaults to @samp{"%Lu"}.
10812 @end deftypevr
10813
10814 @deftypevr {@code{dovecot-configuration} parameter} string auth-master-user-separator
10815 If you want to allow master users to log in by specifying the master
10816 username within the normal username string (i.e. not using SASL
10817 mechanism's support for it), you can specify the separator character
10818 here. The format is then <username><separator><master username>.
10819 UW-IMAP uses @samp{*} as the separator, so that could be a good
10820 choice.
10821 Defaults to @samp{""}.
10822 @end deftypevr
10823
10824 @deftypevr {@code{dovecot-configuration} parameter} string auth-anonymous-username
10825 Username to use for users logging in with ANONYMOUS SASL
10826 mechanism.
10827 Defaults to @samp{"anonymous"}.
10828 @end deftypevr
10829
10830 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-worker-max-count
10831 Maximum number of dovecot-auth worker processes. They're used to
10832 execute blocking passdb and userdb queries (e.g. MySQL and PAM).
10833 They're automatically created and destroyed as needed.
10834 Defaults to @samp{30}.
10835 @end deftypevr
10836
10837 @deftypevr {@code{dovecot-configuration} parameter} string auth-gssapi-hostname
10838 Host name to use in GSSAPI principal names. The default is to use
10839 the name returned by gethostname(). Use @samp{$ALL} (with quotes) to
10840 allow all keytab entries.
10841 Defaults to @samp{""}.
10842 @end deftypevr
10843
10844 @deftypevr {@code{dovecot-configuration} parameter} string auth-krb5-keytab
10845 Kerberos keytab to use for the GSSAPI mechanism. Will use the
10846 system default (usually @file{/etc/krb5.keytab}) if not specified. You may
10847 need to change the auth service to run as root to be able to read this
10848 file.
10849 Defaults to @samp{""}.
10850 @end deftypevr
10851
10852 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-use-winbind?
10853 Do NTLM and GSS-SPNEGO authentication using Samba's winbind daemon
10854 and @samp{ntlm-auth} helper.
10855 <doc/wiki/Authentication/Mechanisms/Winbind.txt>.
10856 Defaults to @samp{#f}.
10857 @end deftypevr
10858
10859 @deftypevr {@code{dovecot-configuration} parameter} file-name auth-winbind-helper-path
10860 Path for Samba's @samp{ntlm-auth} helper binary.
10861 Defaults to @samp{"/usr/bin/ntlm_auth"}.
10862 @end deftypevr
10863
10864 @deftypevr {@code{dovecot-configuration} parameter} string auth-failure-delay
10865 Time to delay before replying to failed authentications.
10866 Defaults to @samp{"2 secs"}.
10867 @end deftypevr
10868
10869 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-require-client-cert?
10870 Require a valid SSL client certificate or the authentication
10871 fails.
10872 Defaults to @samp{#f}.
10873 @end deftypevr
10874
10875 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-username-from-cert?
10876 Take the username from client's SSL certificate, using
10877 @code{X509_NAME_get_text_by_NID()} which returns the subject's DN's
10878 CommonName.
10879 Defaults to @samp{#f}.
10880 @end deftypevr
10881
10882 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-mechanisms
10883 List of wanted authentication mechanisms. Supported mechanisms are:
10884 @samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
10885 @samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
10886 @samp{otp}, @samp{skey}, and @samp{gss-spnego}. NOTE: See also
10887 @samp{disable-plaintext-auth} setting.
10888 @end deftypevr
10889
10890 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-servers
10891 List of IPs or hostnames to all director servers, including ourself.
10892 Ports can be specified as ip:port. The default port is the same as what
10893 director service's @samp{inet-listener} is using.
10894 Defaults to @samp{()}.
10895 @end deftypevr
10896
10897 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-mail-servers
10898 List of IPs or hostnames to all backend mail servers. Ranges are
10899 allowed too, like 10.0.0.10-10.0.0.30.
10900 Defaults to @samp{()}.
10901 @end deftypevr
10902
10903 @deftypevr {@code{dovecot-configuration} parameter} string director-user-expire
10904 How long to redirect users to a specific server after it no longer
10905 has any connections.
10906 Defaults to @samp{"15 min"}.
10907 @end deftypevr
10908
10909 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer director-doveadm-port
10910 TCP/IP port that accepts doveadm connections (instead of director
10911 connections) If you enable this, you'll also need to add
10912 @samp{inet-listener} for the port.
10913 Defaults to @samp{0}.
10914 @end deftypevr
10915
10916 @deftypevr {@code{dovecot-configuration} parameter} string director-username-hash
10917 How the username is translated before being hashed. Useful values
10918 include %Ln if user can log in with or without @@domain, %Ld if mailboxes
10919 are shared within domain.
10920 Defaults to @samp{"%Lu"}.
10921 @end deftypevr
10922
10923 @deftypevr {@code{dovecot-configuration} parameter} string log-path
10924 Log file to use for error messages. @samp{syslog} logs to syslog,
10925 @samp{/dev/stderr} logs to stderr.
10926 Defaults to @samp{"syslog"}.
10927 @end deftypevr
10928
10929 @deftypevr {@code{dovecot-configuration} parameter} string info-log-path
10930 Log file to use for informational messages. Defaults to
10931 @samp{log-path}.
10932 Defaults to @samp{""}.
10933 @end deftypevr
10934
10935 @deftypevr {@code{dovecot-configuration} parameter} string debug-log-path
10936 Log file to use for debug messages. Defaults to
10937 @samp{info-log-path}.
10938 Defaults to @samp{""}.
10939 @end deftypevr
10940
10941 @deftypevr {@code{dovecot-configuration} parameter} string syslog-facility
10942 Syslog facility to use if you're logging to syslog. Usually if you
10943 don't want to use @samp{mail}, you'll use local0..local7. Also other
10944 standard facilities are supported.
10945 Defaults to @samp{"mail"}.
10946 @end deftypevr
10947
10948 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose?
10949 Log unsuccessful authentication attempts and the reasons why they
10950 failed.
10951 Defaults to @samp{#f}.
10952 @end deftypevr
10953
10954 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose-passwords?
10955 In case of password mismatches, log the attempted password. Valid
10956 values are no, plain and sha1. sha1 can be useful for detecting brute
10957 force password attempts vs. user simply trying the same password over
10958 and over again. You can also truncate the value to n chars by appending
10959 ":n" (e.g. sha1:6).
10960 Defaults to @samp{#f}.
10961 @end deftypevr
10962
10963 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug?
10964 Even more verbose logging for debugging purposes. Shows for example
10965 SQL queries.
10966 Defaults to @samp{#f}.
10967 @end deftypevr
10968
10969 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug-passwords?
10970 In case of password mismatches, log the passwords and used scheme so
10971 the problem can be debugged. Enabling this also enables
10972 @samp{auth-debug}.
10973 Defaults to @samp{#f}.
10974 @end deftypevr
10975
10976 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-debug?
10977 Enable mail process debugging. This can help you figure out why
10978 Dovecot isn't finding your mails.
10979 Defaults to @samp{#f}.
10980 @end deftypevr
10981
10982 @deftypevr {@code{dovecot-configuration} parameter} boolean verbose-ssl?
10983 Show protocol level SSL errors.
10984 Defaults to @samp{#f}.
10985 @end deftypevr
10986
10987 @deftypevr {@code{dovecot-configuration} parameter} string log-timestamp
10988 Prefix for each line written to log file. % codes are in
10989 strftime(3) format.
10990 Defaults to @samp{"\"%b %d %H:%M:%S \""}.
10991 @end deftypevr
10992
10993 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-log-format-elements
10994 List of elements we want to log. The elements which have a
10995 non-empty variable value are joined together to form a comma-separated
10996 string.
10997 @end deftypevr
10998
10999 @deftypevr {@code{dovecot-configuration} parameter} string login-log-format
11000 Login log format. %s contains @samp{login-log-format-elements}
11001 string, %$ contains the data we want to log.
11002 Defaults to @samp{"%$: %s"}.
11003 @end deftypevr
11004
11005 @deftypevr {@code{dovecot-configuration} parameter} string mail-log-prefix
11006 Log prefix for mail processes. See doc/wiki/Variables.txt for list
11007 of possible variables you can use.
11008 Defaults to @samp{"\"%s(%u): \""}.
11009 @end deftypevr
11010
11011 @deftypevr {@code{dovecot-configuration} parameter} string deliver-log-format
11012 Format to use for logging mail deliveries. You can use variables:
11013 @table @code
11014 @item %$
11015 Delivery status message (e.g. @samp{saved to INBOX})
11016 @item %m
11017 Message-ID
11018 @item %s
11019 Subject
11020 @item %f
11021 From address
11022 @item %p
11023 Physical size
11024 @item %w
11025 Virtual size.
11026 @end table
11027 Defaults to @samp{"msgid=%m: %$"}.
11028 @end deftypevr
11029
11030 @deftypevr {@code{dovecot-configuration} parameter} string mail-location
11031 Location for users' mailboxes. The default is empty, which means
11032 that Dovecot tries to find the mailboxes automatically. This won't work
11033 if the user doesn't yet have any mail, so you should explicitly tell
11034 Dovecot the full location.
11035
11036 If you're using mbox, giving a path to the INBOX
11037 file (e.g. /var/mail/%u) isn't enough. You'll also need to tell Dovecot
11038 where the other mailboxes are kept. This is called the "root mail
11039 directory", and it must be the first path given in the
11040 @samp{mail-location} setting.
11041
11042 There are a few special variables you can use, eg.:
11043
11044 @table @samp
11045 @item %u
11046 username
11047 @item %n
11048 user part in user@@domain, same as %u if there's no domain
11049 @item %d
11050 domain part in user@@domain, empty if there's no domain
11051 @item %h
11052 home director
11053 @end table
11054
11055 See doc/wiki/Variables.txt for full list. Some examples:
11056 @table @samp
11057 @item maildir:~/Maildir
11058 @item mbox:~/mail:INBOX=/var/mail/%u
11059 @item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
11060 @end table
11061 Defaults to @samp{""}.
11062 @end deftypevr
11063
11064 @deftypevr {@code{dovecot-configuration} parameter} string mail-uid
11065 System user and group used to access mails. If you use multiple,
11066 userdb can override these by returning uid or gid fields. You can use
11067 either numbers or names. <doc/wiki/UserIds.txt>.
11068 Defaults to @samp{""}.
11069 @end deftypevr
11070
11071 @deftypevr {@code{dovecot-configuration} parameter} string mail-gid
11072
11073 Defaults to @samp{""}.
11074 @end deftypevr
11075
11076 @deftypevr {@code{dovecot-configuration} parameter} string mail-privileged-group
11077 Group to enable temporarily for privileged operations. Currently
11078 this is used only with INBOX when either its initial creation or
11079 dotlocking fails. Typically this is set to "mail" to give access to
11080 /var/mail.
11081 Defaults to @samp{""}.
11082 @end deftypevr
11083
11084 @deftypevr {@code{dovecot-configuration} parameter} string mail-access-groups
11085 Grant access to these supplementary groups for mail processes.
11086 Typically these are used to set up access to shared mailboxes. Note
11087 that it may be dangerous to set these if users can create
11088 symlinks (e.g. if "mail" group is set here, ln -s /var/mail ~/mail/var
11089 could allow a user to delete others' mailboxes, or ln -s
11090 /secret/shared/box ~/mail/mybox would allow reading it).
11091 Defaults to @samp{""}.
11092 @end deftypevr
11093
11094 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-full-filesystem-access?
11095 Allow full file system access to clients. There's no access checks
11096 other than what the operating system does for the active UID/GID. It
11097 works with both maildir and mboxes, allowing you to prefix mailboxes
11098 names with e.g. /path/ or ~user/.
11099 Defaults to @samp{#f}.
11100 @end deftypevr
11101
11102 @deftypevr {@code{dovecot-configuration} parameter} boolean mmap-disable?
11103 Don't use mmap() at all. This is required if you store indexes to
11104 shared file systems (NFS or clustered file system).
11105 Defaults to @samp{#f}.
11106 @end deftypevr
11107
11108 @deftypevr {@code{dovecot-configuration} parameter} boolean dotlock-use-excl?
11109 Rely on @samp{O_EXCL} to work when creating dotlock files. NFS
11110 supports @samp{O_EXCL} since version 3, so this should be safe to use
11111 nowadays by default.
11112 Defaults to @samp{#t}.
11113 @end deftypevr
11114
11115 @deftypevr {@code{dovecot-configuration} parameter} string mail-fsync
11116 When to use fsync() or fdatasync() calls:
11117 @table @code
11118 @item optimized
11119 Whenever necessary to avoid losing important data
11120 @item always
11121 Useful with e.g. NFS when write()s are delayed
11122 @item never
11123 Never use it (best performance, but crashes can lose data).
11124 @end table
11125 Defaults to @samp{"optimized"}.
11126 @end deftypevr
11127
11128 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-storage?
11129 Mail storage exists in NFS. Set this to yes to make Dovecot flush
11130 NFS caches whenever needed. If you're using only a single mail server
11131 this isn't needed.
11132 Defaults to @samp{#f}.
11133 @end deftypevr
11134
11135 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-index?
11136 Mail index files also exist in NFS. Setting this to yes requires
11137 @samp{mmap-disable? #t} and @samp{fsync-disable? #f}.
11138 Defaults to @samp{#f}.
11139 @end deftypevr
11140
11141 @deftypevr {@code{dovecot-configuration} parameter} string lock-method
11142 Locking method for index files. Alternatives are fcntl, flock and
11143 dotlock. Dotlocking uses some tricks which may create more disk I/O
11144 than other locking methods. NFS users: flock doesn't work, remember to
11145 change @samp{mmap-disable}.
11146 Defaults to @samp{"fcntl"}.
11147 @end deftypevr
11148
11149 @deftypevr {@code{dovecot-configuration} parameter} file-name mail-temp-dir
11150 Directory in which LDA/LMTP temporarily stores incoming mails >128
11151 kB.
11152 Defaults to @samp{"/tmp"}.
11153 @end deftypevr
11154
11155 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-uid
11156 Valid UID range for users. This is mostly to make sure that users can't
11157 log in as daemons or other system users. Note that denying root logins is
11158 hardcoded to dovecot binary and can't be done even if @samp{first-valid-uid}
11159 is set to 0.
11160 Defaults to @samp{500}.
11161 @end deftypevr
11162
11163 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-uid
11164
11165 Defaults to @samp{0}.
11166 @end deftypevr
11167
11168 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-gid
11169 Valid GID range for users. Users having non-valid GID as primary group ID
11170 aren't allowed to log in. If user belongs to supplementary groups with
11171 non-valid GIDs, those groups are not set.
11172 Defaults to @samp{1}.
11173 @end deftypevr
11174
11175 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-gid
11176
11177 Defaults to @samp{0}.
11178 @end deftypevr
11179
11180 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-max-keyword-length
11181 Maximum allowed length for mail keyword name. It's only forced when
11182 trying to create new keywords.
11183 Defaults to @samp{50}.
11184 @end deftypevr
11185
11186 @deftypevr {@code{dovecot-configuration} parameter} colon-separated-file-name-list valid-chroot-dirs
11187 List of directories under which chrooting is allowed for mail
11188 processes (i.e. /var/mail will allow chrooting to /var/mail/foo/bar
11189 too). This setting doesn't affect @samp{login-chroot}
11190 @samp{mail-chroot} or auth chroot settings. If this setting is empty,
11191 "/./" in home dirs are ignored. WARNING: Never add directories here
11192 which local users can modify, that may lead to root exploit. Usually
11193 this should be done only if you don't allow shell access for users.
11194 <doc/wiki/Chrooting.txt>.
11195 Defaults to @samp{()}.
11196 @end deftypevr
11197
11198 @deftypevr {@code{dovecot-configuration} parameter} string mail-chroot
11199 Default chroot directory for mail processes. This can be overridden
11200 for specific users in user database by giving /./ in user's home
11201 directory (e.g. /home/./user chroots into /home). Note that usually
11202 there is no real need to do chrooting, Dovecot doesn't allow users to
11203 access files outside their mail directory anyway. If your home
11204 directories are prefixed with the chroot directory, append "/." to
11205 @samp{mail-chroot}. <doc/wiki/Chrooting.txt>.
11206 Defaults to @samp{""}.
11207 @end deftypevr
11208
11209 @deftypevr {@code{dovecot-configuration} parameter} file-name auth-socket-path
11210 UNIX socket path to master authentication server to find users.
11211 This is used by imap (for shared users) and lda.
11212 Defaults to @samp{"/var/run/dovecot/auth-userdb"}.
11213 @end deftypevr
11214
11215 @deftypevr {@code{dovecot-configuration} parameter} file-name mail-plugin-dir
11216 Directory where to look up mail plugins.
11217 Defaults to @samp{"/usr/lib/dovecot"}.
11218 @end deftypevr
11219
11220 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mail-plugins
11221 List of plugins to load for all services. Plugins specific to IMAP,
11222 LDA, etc. are added to this list in their own .conf files.
11223 Defaults to @samp{()}.
11224 @end deftypevr
11225
11226 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-cache-min-mail-count
11227 The minimum number of mails in a mailbox before updates are done to
11228 cache file. This allows optimizing Dovecot's behavior to do less disk
11229 writes at the cost of more disk reads.
11230 Defaults to @samp{0}.
11231 @end deftypevr
11232
11233 @deftypevr {@code{dovecot-configuration} parameter} string mailbox-idle-check-interval
11234 When IDLE command is running, mailbox is checked once in a while to
11235 see if there are any new mails or other changes. This setting defines
11236 the minimum time to wait between those checks. Dovecot can also use
11237 dnotify, inotify and kqueue to find out immediately when changes
11238 occur.
11239 Defaults to @samp{"30 secs"}.
11240 @end deftypevr
11241
11242 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-save-crlf?
11243 Save mails with CR+LF instead of plain LF. This makes sending those
11244 mails take less CPU, especially with sendfile() syscall with Linux and
11245 FreeBSD. But it also creates a bit more disk I/O which may just make it
11246 slower. Also note that if other software reads the mboxes/maildirs,
11247 they may handle the extra CRs wrong and cause problems.
11248 Defaults to @samp{#f}.
11249 @end deftypevr
11250
11251 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-stat-dirs?
11252 By default LIST command returns all entries in maildir beginning
11253 with a dot. Enabling this option makes Dovecot return only entries
11254 which are directories. This is done by stat()ing each entry, so it
11255 causes more disk I/O.
11256 (For systems setting struct @samp{dirent->d_type} this check is free
11257 and it's done always regardless of this setting).
11258 Defaults to @samp{#f}.
11259 @end deftypevr
11260
11261 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-copy-with-hardlinks?
11262 When copying a message, do it with hard links whenever possible.
11263 This makes the performance much better, and it's unlikely to have any
11264 side effects.
11265 Defaults to @samp{#t}.
11266 @end deftypevr
11267
11268 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-very-dirty-syncs?
11269 Assume Dovecot is the only MUA accessing Maildir: Scan cur/
11270 directory only when its mtime changes unexpectedly or when we can't find
11271 the mail otherwise.
11272 Defaults to @samp{#f}.
11273 @end deftypevr
11274
11275 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-read-locks
11276 Which locking methods to use for locking mbox. There are four
11277 available:
11278
11279 @table @code
11280 @item dotlock
11281 Create <mailbox>.lock file. This is the oldest and most NFS-safe
11282 solution. If you want to use /var/mail/ like directory, the users will
11283 need write access to that directory.
11284 @item dotlock-try
11285 Same as dotlock, but if it fails because of permissions or because there
11286 isn't enough disk space, just skip it.
11287 @item fcntl
11288 Use this if possible. Works with NFS too if lockd is used.
11289 @item flock
11290 May not exist in all systems. Doesn't work with NFS.
11291 @item lockf
11292 May not exist in all systems. Doesn't work with NFS.
11293 @end table
11294
11295 You can use multiple locking methods; if you do the order they're declared
11296 in is important to avoid deadlocks if other MTAs/MUAs are using multiple
11297 locking methods as well. Some operating systems don't allow using some of
11298 them simultaneously.
11299 @end deftypevr
11300
11301 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-write-locks
11302
11303 @end deftypevr
11304
11305 @deftypevr {@code{dovecot-configuration} parameter} string mbox-lock-timeout
11306 Maximum time to wait for lock (all of them) before aborting.
11307 Defaults to @samp{"5 mins"}.
11308 @end deftypevr
11309
11310 @deftypevr {@code{dovecot-configuration} parameter} string mbox-dotlock-change-timeout
11311 If dotlock exists but the mailbox isn't modified in any way,
11312 override the lock file after this much time.
11313 Defaults to @samp{"2 mins"}.
11314 @end deftypevr
11315
11316 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-dirty-syncs?
11317 When mbox changes unexpectedly we have to fully read it to find out
11318 what changed. If the mbox is large this can take a long time. Since
11319 the change is usually just a newly appended mail, it'd be faster to
11320 simply read the new mails. If this setting is enabled, Dovecot does
11321 this but still safely fallbacks to re-reading the whole mbox file
11322 whenever something in mbox isn't how it's expected to be. The only real
11323 downside to this setting is that if some other MUA changes message
11324 flags, Dovecot doesn't notice it immediately. Note that a full sync is
11325 done with SELECT, EXAMINE, EXPUNGE and CHECK commands.
11326 Defaults to @samp{#t}.
11327 @end deftypevr
11328
11329 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-very-dirty-syncs?
11330 Like @samp{mbox-dirty-syncs}, but don't do full syncs even with SELECT,
11331 EXAMINE, EXPUNGE or CHECK commands. If this is set,
11332 @samp{mbox-dirty-syncs} is ignored.
11333 Defaults to @samp{#f}.
11334 @end deftypevr
11335
11336 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-lazy-writes?
11337 Delay writing mbox headers until doing a full write sync (EXPUNGE
11338 and CHECK commands and when closing the mailbox). This is especially
11339 useful for POP3 where clients often delete all mails. The downside is
11340 that our changes aren't immediately visible to other MUAs.
11341 Defaults to @samp{#t}.
11342 @end deftypevr
11343
11344 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mbox-min-index-size
11345 If mbox size is smaller than this (e.g. 100k), don't write index
11346 files. If an index file already exists it's still read, just not
11347 updated.
11348 Defaults to @samp{0}.
11349 @end deftypevr
11350
11351 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mdbox-rotate-size
11352 Maximum dbox file size until it's rotated.
11353 Defaults to @samp{2000000}.
11354 @end deftypevr
11355
11356 @deftypevr {@code{dovecot-configuration} parameter} string mdbox-rotate-interval
11357 Maximum dbox file age until it's rotated. Typically in days. Day
11358 begins from midnight, so 1d = today, 2d = yesterday, etc. 0 = check
11359 disabled.
11360 Defaults to @samp{"1d"}.
11361 @end deftypevr
11362
11363 @deftypevr {@code{dovecot-configuration} parameter} boolean mdbox-preallocate-space?
11364 When creating new mdbox files, immediately preallocate their size to
11365 @samp{mdbox-rotate-size}. This setting currently works only in Linux
11366 with some file systems (ext4, xfs).
11367 Defaults to @samp{#f}.
11368 @end deftypevr
11369
11370 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-dir
11371 sdbox and mdbox support saving mail attachments to external files,
11372 which also allows single instance storage for them. Other backends
11373 don't support this for now.
11374
11375 WARNING: This feature hasn't been tested much yet. Use at your own risk.
11376
11377 Directory root where to store mail attachments. Disabled, if empty.
11378 Defaults to @samp{""}.
11379 @end deftypevr
11380
11381 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-attachment-min-size
11382 Attachments smaller than this aren't saved externally. It's also
11383 possible to write a plugin to disable saving specific attachments
11384 externally.
11385 Defaults to @samp{128000}.
11386 @end deftypevr
11387
11388 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-fs
11389 File system backend to use for saving attachments:
11390 @table @code
11391 @item posix
11392 No SiS done by Dovecot (but this might help FS's own deduplication)
11393 @item sis posix
11394 SiS with immediate byte-by-byte comparison during saving
11395 @item sis-queue posix
11396 SiS with delayed comparison and deduplication.
11397 @end table
11398 Defaults to @samp{"sis posix"}.
11399 @end deftypevr
11400
11401 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-hash
11402 Hash format to use in attachment filenames. You can add any text and
11403 variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}},
11404 @code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}. Variables can be
11405 truncated, e.g. @code{%@{sha256:80@}} returns only first 80 bits.
11406 Defaults to @samp{"%@{sha1@}"}.
11407 @end deftypevr
11408
11409 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-process-limit
11410
11411 Defaults to @samp{100}.
11412 @end deftypevr
11413
11414 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-client-limit
11415
11416 Defaults to @samp{1000}.
11417 @end deftypevr
11418
11419 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-vsz-limit
11420 Default VSZ (virtual memory size) limit for service processes.
11421 This is mainly intended to catch and kill processes that leak memory
11422 before they eat up everything.
11423 Defaults to @samp{256000000}.
11424 @end deftypevr
11425
11426 @deftypevr {@code{dovecot-configuration} parameter} string default-login-user
11427 Login user is internally used by login processes. This is the most
11428 untrusted user in Dovecot system. It shouldn't have access to anything
11429 at all.
11430 Defaults to @samp{"dovenull"}.
11431 @end deftypevr
11432
11433 @deftypevr {@code{dovecot-configuration} parameter} string default-internal-user
11434 Internal user is used by unprivileged processes. It should be
11435 separate from login user, so that login processes can't disturb other
11436 processes.
11437 Defaults to @samp{"dovecot"}.
11438 @end deftypevr
11439
11440 @deftypevr {@code{dovecot-configuration} parameter} string ssl?
11441 SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>.
11442 Defaults to @samp{"required"}.
11443 @end deftypevr
11444
11445 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cert
11446 PEM encoded X.509 SSL/TLS certificate (public key).
11447 Defaults to @samp{"</etc/dovecot/default.pem"}.
11448 @end deftypevr
11449
11450 @deftypevr {@code{dovecot-configuration} parameter} string ssl-key
11451 PEM encoded SSL/TLS private key. The key is opened before
11452 dropping root privileges, so keep the key file unreadable by anyone but
11453 root.
11454 Defaults to @samp{"</etc/dovecot/private/default.pem"}.
11455 @end deftypevr
11456
11457 @deftypevr {@code{dovecot-configuration} parameter} string ssl-key-password
11458 If key file is password protected, give the password here.
11459 Alternatively give it when starting dovecot with -p parameter. Since
11460 this file is often world-readable, you may want to place this setting
11461 instead to a different.
11462 Defaults to @samp{""}.
11463 @end deftypevr
11464
11465 @deftypevr {@code{dovecot-configuration} parameter} string ssl-ca
11466 PEM encoded trusted certificate authority. Set this only if you
11467 intend to use @samp{ssl-verify-client-cert? #t}. The file should
11468 contain the CA certificate(s) followed by the matching
11469 CRL(s). (e.g. @samp{ssl-ca </etc/ssl/certs/ca.pem}).
11470 Defaults to @samp{""}.
11471 @end deftypevr
11472
11473 @deftypevr {@code{dovecot-configuration} parameter} boolean ssl-require-crl?
11474 Require that CRL check succeeds for client certificates.
11475 Defaults to @samp{#t}.
11476 @end deftypevr
11477
11478 @deftypevr {@code{dovecot-configuration} parameter} boolean ssl-verify-client-cert?
11479 Request client to send a certificate. If you also want to require
11480 it, set @samp{auth-ssl-require-client-cert? #t} in auth section.
11481 Defaults to @samp{#f}.
11482 @end deftypevr
11483
11484 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cert-username-field
11485 Which field from certificate to use for username. commonName and
11486 x500UniqueIdentifier are the usual choices. You'll also need to set
11487 @samp{auth-ssl-username-from-cert? #t}.
11488 Defaults to @samp{"commonName"}.
11489 @end deftypevr
11490
11491 @deftypevr {@code{dovecot-configuration} parameter} hours ssl-parameters-regenerate
11492 How often to regenerate the SSL parameters file. Generation is
11493 quite CPU intensive operation. The value is in hours, 0 disables
11494 regeneration entirely.
11495 Defaults to @samp{168}.
11496 @end deftypevr
11497
11498 @deftypevr {@code{dovecot-configuration} parameter} string ssl-protocols
11499 SSL protocols to use.
11500 Defaults to @samp{"!SSLv2"}.
11501 @end deftypevr
11502
11503 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cipher-list
11504 SSL ciphers to use.
11505 Defaults to @samp{"ALL:!LOW:!SSLv2:!EXP:!aNULL"}.
11506 @end deftypevr
11507
11508 @deftypevr {@code{dovecot-configuration} parameter} string ssl-crypto-device
11509 SSL crypto device to use, for valid values run "openssl engine".
11510 Defaults to @samp{""}.
11511 @end deftypevr
11512
11513 @deftypevr {@code{dovecot-configuration} parameter} string postmaster-address
11514 Address to use when sending rejection mails.
11515 %d expands to recipient domain.
11516 Defaults to @samp{"postmaster@@%d"}.
11517 @end deftypevr
11518
11519 @deftypevr {@code{dovecot-configuration} parameter} string hostname
11520 Hostname to use in various parts of sent mails (e.g. in Message-Id)
11521 and in LMTP replies. Default is the system's real hostname@@domain.
11522 Defaults to @samp{""}.
11523 @end deftypevr
11524
11525 @deftypevr {@code{dovecot-configuration} parameter} boolean quota-full-tempfail?
11526 If user is over quota, return with temporary failure instead of
11527 bouncing the mail.
11528 Defaults to @samp{#f}.
11529 @end deftypevr
11530
11531 @deftypevr {@code{dovecot-configuration} parameter} file-name sendmail-path
11532 Binary to use for sending mails.
11533 Defaults to @samp{"/usr/sbin/sendmail"}.
11534 @end deftypevr
11535
11536 @deftypevr {@code{dovecot-configuration} parameter} string submission-host
11537 If non-empty, send mails via this SMTP host[:port] instead of
11538 sendmail.
11539 Defaults to @samp{""}.
11540 @end deftypevr
11541
11542 @deftypevr {@code{dovecot-configuration} parameter} string rejection-subject
11543 Subject: header to use for rejection mails. You can use the same
11544 variables as for @samp{rejection-reason} below.
11545 Defaults to @samp{"Rejected: %s"}.
11546 @end deftypevr
11547
11548 @deftypevr {@code{dovecot-configuration} parameter} string rejection-reason
11549 Human readable error message for rejection mails. You can use
11550 variables:
11551
11552 @table @code
11553 @item %n
11554 CRLF
11555 @item %r
11556 reason
11557 @item %s
11558 original subject
11559 @item %t
11560 recipient
11561 @end table
11562 Defaults to @samp{"Your message to <%t> was automatically rejected:%n%r"}.
11563 @end deftypevr
11564
11565 @deftypevr {@code{dovecot-configuration} parameter} string recipient-delimiter
11566 Delimiter character between local-part and detail in email
11567 address.
11568 Defaults to @samp{"+"}.
11569 @end deftypevr
11570
11571 @deftypevr {@code{dovecot-configuration} parameter} string lda-original-recipient-header
11572 Header where the original recipient address (SMTP's RCPT TO:
11573 address) is taken from if not available elsewhere. With dovecot-lda -a
11574 parameter overrides this. A commonly used header for this is
11575 X-Original-To.
11576 Defaults to @samp{""}.
11577 @end deftypevr
11578
11579 @deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autocreate?
11580 Should saving a mail to a nonexistent mailbox automatically create
11581 it?.
11582 Defaults to @samp{#f}.
11583 @end deftypevr
11584
11585 @deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autosubscribe?
11586 Should automatically created mailboxes be also automatically
11587 subscribed?.
11588 Defaults to @samp{#f}.
11589 @end deftypevr
11590
11591 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer imap-max-line-length
11592 Maximum IMAP command line length. Some clients generate very long
11593 command lines with huge mailboxes, so you may need to raise this if you
11594 get "Too long argument" or "IMAP command line too large" errors
11595 often.
11596 Defaults to @samp{64000}.
11597 @end deftypevr
11598
11599 @deftypevr {@code{dovecot-configuration} parameter} string imap-logout-format
11600 IMAP logout format string:
11601 @table @code
11602 @item %i
11603 total number of bytes read from client
11604 @item %o
11605 total number of bytes sent to client.
11606 @end table
11607 Defaults to @samp{"in=%i out=%o"}.
11608 @end deftypevr
11609
11610 @deftypevr {@code{dovecot-configuration} parameter} string imap-capability
11611 Override the IMAP CAPABILITY response. If the value begins with '+',
11612 add the given capabilities on top of the defaults (e.g. +XFOO XBAR).
11613 Defaults to @samp{""}.
11614 @end deftypevr
11615
11616 @deftypevr {@code{dovecot-configuration} parameter} string imap-idle-notify-interval
11617 How long to wait between "OK Still here" notifications when client
11618 is IDLEing.
11619 Defaults to @samp{"2 mins"}.
11620 @end deftypevr
11621
11622 @deftypevr {@code{dovecot-configuration} parameter} string imap-id-send
11623 ID field names and values to send to clients. Using * as the value
11624 makes Dovecot use the default value. The following fields have default
11625 values currently: name, version, os, os-version, support-url,
11626 support-email.
11627 Defaults to @samp{""}.
11628 @end deftypevr
11629
11630 @deftypevr {@code{dovecot-configuration} parameter} string imap-id-log
11631 ID fields sent by client to log. * means everything.
11632 Defaults to @samp{""}.
11633 @end deftypevr
11634
11635 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list imap-client-workarounds
11636 Workarounds for various client bugs:
11637
11638 @table @code
11639 @item delay-newmail
11640 Send EXISTS/RECENT new mail notifications only when replying to NOOP and
11641 CHECK commands. Some clients ignore them otherwise, for example OSX
11642 Mail (<v2.1). Outlook Express breaks more badly though, without this it
11643 may show user "Message no longer in server" errors. Note that OE6
11644 still breaks even with this workaround if synchronization is set to
11645 "Headers Only".
11646
11647 @item tb-extra-mailbox-sep
11648 Thunderbird gets somehow confused with LAYOUT=fs (mbox and dbox) and
11649 adds extra @samp{/} suffixes to mailbox names. This option causes Dovecot to
11650 ignore the extra @samp{/} instead of treating it as invalid mailbox name.
11651
11652 @item tb-lsub-flags
11653 Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g. mbox).
11654 This makes Thunderbird realize they aren't selectable and show them
11655 greyed out, instead of only later giving "not selectable" popup error.
11656 @end table
11657 Defaults to @samp{()}.
11658 @end deftypevr
11659
11660 @deftypevr {@code{dovecot-configuration} parameter} string imap-urlauth-host
11661 Host allowed in URLAUTH URLs sent by client. "*" allows all.
11662 Defaults to @samp{""}.
11663 @end deftypevr
11664
11665
11666 Whew! Lots of configuration options. The nice thing about it though is
11667 that GuixSD has a complete interface to Dovecot's configuration
11668 language. This allows not only a nice way to declare configurations,
11669 but also offers reflective capabilities as well: users can write code to
11670 inspect and transform configurations from within Scheme.
11671
11672 However, it could be that you just want to get a @code{dovecot.conf} up
11673 and running. In that case, you can pass an
11674 @code{opaque-dovecot-configuration} as the @code{#:config} parameter to
11675 @code{dovecot-service}. As its name indicates, an opaque configuration
11676 does not have easy reflective capabilities.
11677
11678 Available @code{opaque-dovecot-configuration} fields are:
11679
11680 @deftypevr {@code{opaque-dovecot-configuration} parameter} package dovecot
11681 The dovecot package.
11682 @end deftypevr
11683
11684 @deftypevr {@code{opaque-dovecot-configuration} parameter} string string
11685 The contents of the @code{dovecot.conf}, as a string.
11686 @end deftypevr
11687
11688 For example, if your @code{dovecot.conf} is just the empty string, you
11689 could instantiate a dovecot service like this:
11690
11691 @example
11692 (dovecot-service #:config
11693 (opaque-dovecot-configuration
11694 (string "")))
11695 @end example
11696
11697 @subsubheading OpenSMTPD Service
11698
11699 @deffn {Scheme Variable} opensmtpd-service-type
11700 This is the type of the @uref{https://www.opensmtpd.org, OpenSMTPD}
11701 service, whose value should be an @code{opensmtpd-configuration} object
11702 as in this example:
11703
11704 @example
11705 (service opensmtpd-service-type
11706 (opensmtpd-configuration
11707 (config-file (local-file "./my-smtpd.conf"))))
11708 @end example
11709 @end deffn
11710
11711 @deftp {Data Type} opensmtpd-configuration
11712 Data type regresenting the configuration of opensmtpd.
11713
11714 @table @asis
11715 @item @code{package} (default: @var{opensmtpd})
11716 Package object of the OpenSMTPD SMTP server.
11717
11718 @item @code{config-file} (default: @var{%default-opensmtpd-file})
11719 File-like object of the OpenSMTPD configuration file to use. By default
11720 it listens on the loopback network interface, and allows for mail from
11721 users and daemons on the local machine, as well as permitting email to
11722 remote servers. Run @command{man smtpd.conf} for more information.
11723
11724 @end table
11725 @end deftp
11726
11727 @node Kerberos Services
11728 @subsubsection Kerberos Services
11729 @cindex Kerberos
11730
11731 The @code{(gnu services kerberos)} module provides services relating to
11732 the authentication protocol @dfn{Kerberos}.
11733
11734 @subsubheading Krb5 Service
11735
11736 Programs using a Kerberos client library normally
11737 expect a configuration file in @file{/etc/krb5.conf}.
11738 This service generates such a file from a definition provided in the
11739 operating system declaration.
11740 It does not cause any daemon to be started.
11741
11742 No ``keytab'' files are provided by this service---you must explicitly create them.
11743 This service is known to work with the MIT client library, @code{mit-krb5}.
11744 Other implementations have not been tested.
11745
11746 @defvr {Scheme Variable} krb5-service-type
11747 A service type for Kerberos 5 clients.
11748 @end defvr
11749
11750 @noindent
11751 Here is an example of its use:
11752 @lisp
11753 (service krb5-service-type
11754 (krb5-configuration
11755 (default-realm "EXAMPLE.COM")
11756 (allow-weak-crypto? #t)
11757 (realms (list
11758 (krb5-realm
11759 (name "EXAMPLE.COM")
11760 (admin-server "groucho.example.com")
11761 (kdc "karl.example.com"))
11762 (krb5-realm
11763 (name "ARGRX.EDU")
11764 (admin-server "kerb-admin.argrx.edu")
11765 (kdc "keys.argrx.edu"))))))
11766 @end lisp
11767
11768 @noindent
11769 This example provides a Kerberos@tie{}5 client configuration which:
11770 @itemize
11771 @item Recognizes two realms, @i{viz:} ``EXAMPLE.COM'' and ``ARGRX.EDU'', both
11772 of which have distinct administration servers and key distribution centers;
11773 @item Will default to the realm ``EXAMPLE.COM'' if the realm is not explicitly
11774 specified by clients;
11775 @item Accepts services which only support encryption types known to be weak.
11776 @end itemize
11777
11778 The @code{krb5-realm} and @code{krb5-configuration} types have many fields.
11779 Only the most commonly used ones are described here.
11780 For a full list, and more detailed explanation of each, see the MIT
11781 @uref{http://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html,,krb5.conf}
11782 documentation.
11783
11784
11785 @deftp {Data Type} krb5-realm
11786 @cindex realm, kerberos
11787 @table @asis
11788 @item @code{name}
11789 This field is a string identifying the name of the realm.
11790 A common convention is to use the fully qualified DNS name of your organization,
11791 converted to upper case.
11792
11793 @item @code{admin-server}
11794 This field is a string identifying the host where the administration server is
11795 running.
11796
11797 @item @code{kdc}
11798 This field is a string identifying the key distribution center
11799 for the realm.
11800 @end table
11801 @end deftp
11802
11803 @deftp {Data Type} krb5-configuration
11804
11805 @table @asis
11806 @item @code{allow-weak-crypto?} (default: @code{#f})
11807 If this flag is @code{#t} then services which only offer encryption algorithms
11808 known to be weak will be accepted.
11809
11810 @item @code{default-realm} (default: @code{#f})
11811 This field should be a string identifying the default Kerberos
11812 realm for the client.
11813 You should set this field to the name of your Kerberos realm.
11814 If this value is @code{#f}
11815 then a realm must be specified with every Kerberos principal when invoking programs
11816 such as @command{kinit}.
11817
11818 @item @code{realms}
11819 This should be a non-empty list of @code{krb5-realm} objects, which clients may
11820 access.
11821 Normally, one of them will have a @code{name} field matching the @code{default-realm}
11822 field.
11823 @end table
11824 @end deftp
11825
11826
11827 @subsubheading PAM krb5 Service
11828 @cindex pam-krb5
11829
11830 The @code{pam-krb5} service allows for login authentication and password
11831 management via Kerberos.
11832 You will need this service if you want PAM enabled applications to authenticate
11833 users using Kerberos.
11834
11835 @defvr {Scheme Variable} pam-krb5-service-type
11836 A service type for the Kerberos 5 PAM module.
11837 @end defvr
11838
11839 @deftp {Data Type} pam-krb5-configuration
11840 Data type representing the configuration of the Kerberos 5 PAM module
11841 This type has the following parameters:
11842 @table @asis
11843 @item @code{pam-krb5} (default: @code{pam-krb5})
11844 The pam-krb5 package to use.
11845
11846 @item @code{minimum-uid} (default: @code{1000})
11847 The smallest user ID for which Kerberos authentications should be attempted.
11848 Local accounts with lower values will silently fail to authenticate.
11849 @end table
11850 @end deftp
11851
11852
11853 @node Web Services
11854 @subsubsection Web Services
11855
11856 @cindex web
11857 @cindex www
11858 @cindex HTTP
11859 The @code{(gnu services web)} module provides the following service:
11860
11861 @deffn {Scheme Procedure} nginx-service [#:nginx nginx] @
11862 [#:log-directory ``/var/log/nginx''] @
11863 [#:run-directory ``/var/run/nginx''] @
11864 [#:server-list '()] @
11865 [#:config-file @code{#f}]
11866
11867 Return a service that runs @var{nginx}, the nginx web server.
11868
11869 The nginx daemon loads its runtime configuration from @var{config-file}.
11870 Log files are written to @var{log-directory} and temporary runtime data
11871 files are written to @var{run-directory}. For proper operation, these
11872 arguments should match what is in @var{config-file} to ensure that the
11873 directories are created when the service is activated.
11874
11875 As an alternative to using a @var{config-file}, @var{server-list} can be
11876 used to specify the list of @dfn{server blocks} required on the host. For
11877 this to work, use the default value for @var{config-file}.
11878
11879 @end deffn
11880
11881 @deffn {Scheme Variable} nginx-service-type
11882 This is type for the nginx web server.
11883
11884 This service can be extended to add server blocks in addition to the
11885 default one, as in this example:
11886
11887 @example
11888 (simple-service 'my-extra-server nginx-service-type
11889 (list (nginx-server-configuration
11890 (https-port #f)
11891 (root "/srv/http/extra-website"))))
11892 @end example
11893 @end deffn
11894
11895 @deftp {Data Type} nginx-server-configuration
11896 Data type representing the configuration of an nginx server block.
11897 This type has the following parameters:
11898
11899 @table @asis
11900 @item @code{http-port} (default: @code{80})
11901 Nginx will listen for HTTP connection on this port. Set it at @code{#f} if
11902 nginx should not listen for HTTP (non secure) connection for this
11903 @dfn{server block}.
11904
11905 @item @code{https-port} (default: @code{443})
11906 Nginx will listen for HTTPS connection on this port. Set it at @code{#f} if
11907 nginx should not listen for HTTPS (secure) connection for this @dfn{server block}.
11908
11909 Note that nginx can listen for HTTP and HTTPS connections in the same
11910 @dfn{server block}.
11911
11912 @item @code{server-name} (default: @code{(list 'default)})
11913 A list of server names this server represents. @code{'default} represents the
11914 default server for connections matching no other server.
11915
11916 @item @code{root} (default: @code{"/srv/http"})
11917 Root of the website nginx will serve.
11918
11919 @item @code{index} (default: @code{(list "index.html")})
11920 Index files to look for when clients ask for a directory. If it cannot be found,
11921 Nginx will send the list of files in the directory.
11922
11923 @item @code{ssl-certificate} (default: @code{"/etc/nginx/cert.pem"})
11924 Where to find the certificate for secure connections. Set it to @code{#f} if
11925 you don't have a certificate or you don't want to use HTTPS.
11926
11927 @item @code{ssl-certificate-key} (default: @code{"/etc/nginx/key.pem"})
11928 Where to find the private key for secure connections. Set it to @code{#f} if
11929 you don't have a key or you don't want to use HTTPS.
11930
11931 @item @code{server-tokens?} (default: @code{#f})
11932 Whether the server should add its configuration to response.
11933
11934 @end table
11935 @end deftp
11936
11937 @node Network File System
11938 @subsubsection Network File System
11939 @cindex NFS
11940
11941 The @code{(gnu services nfs)} module provides the following services,
11942 which are most commonly used in relation to mounting or exporting
11943 directory trees as @dfn{network file systems} (NFS).
11944
11945 @subsubheading RPC Bind Service
11946 @cindex rpcbind
11947
11948 The RPC Bind service provides a facility to map program numbers into
11949 universal addresses.
11950 Many NFS related services use this facility. Hence it is automatically
11951 started when a dependent service starts.
11952
11953 @defvr {Scheme Variable} rpcbind-service-type
11954 A service type for the RPC portmapper daemon.
11955 @end defvr
11956
11957
11958 @deftp {Data Type} rpcbind-configuration
11959 Data type representing the configuration of the RPC Bind Service.
11960 This type has the following parameters:
11961 @table @asis
11962 @item @code{rpcbind} (default: @code{rpcbind})
11963 The rpcbind package to use.
11964
11965 @item @code{warm-start?} (default: @code{#t})
11966 If this parameter is @code{#t}, then the daemon will read a
11967 state file on startup thus reloading state information saved by a previous
11968 instance.
11969 @end table
11970 @end deftp
11971
11972
11973 @subsubheading Pipefs Pseudo File System
11974 @cindex pipefs
11975 @cindex rpc_pipefs
11976
11977 The pipefs file system is used to transfer NFS related data
11978 between the kernel and user space programs.
11979
11980 @defvr {Scheme Variable} pipefs-service-type
11981 A service type for the pipefs pseudo file system.
11982 @end defvr
11983
11984 @deftp {Data Type} pipefs-configuration
11985 Data type representing the configuration of the pipefs pseudo file system service.
11986 This type has the following parameters:
11987 @table @asis
11988 @item @code{mount-point} (default: @code{"/var/lib/nfs/rpc_pipefs"})
11989 The directory to which the file system is to be attached.
11990 @end table
11991 @end deftp
11992
11993
11994 @subsubheading GSS Daemon Service
11995 @cindex GSSD
11996 @cindex GSS
11997 @cindex global security system
11998
11999 The @dfn{global security system} (GSS) daemon provides strong security for RPC
12000 based protocols.
12001 Before exchanging RPC requests an RPC client must establish a security
12002 context. Typically this is done using the Kerberos command @command{kinit}
12003 or automatically at login time using PAM services (@pxref{Kerberos Services}).
12004
12005 @defvr {Scheme Variable} gss-service-type
12006 A service type for the Global Security System (GSS) daemon.
12007 @end defvr
12008
12009 @deftp {Data Type} gss-configuration
12010 Data type representing the configuration of the GSS daemon service.
12011 This type has the following parameters:
12012 @table @asis
12013 @item @code{nfs-utils} (default: @code{nfs-utils})
12014 The package in which the @command{rpc.gssd} command is to be found.
12015
12016 @item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
12017 The directory where the pipefs file system is mounted.
12018
12019 @end table
12020 @end deftp
12021
12022
12023 @subsubheading IDMAP Daemon Service
12024 @cindex idmapd
12025 @cindex name mapper
12026
12027 The idmap daemon service provides mapping between user IDs and user names.
12028 Typically it is required in order to access file systems mounted via NFSv4.
12029
12030 @defvr {Scheme Variable} idmap-service-type
12031 A service type for the Identity Mapper (IDMAP) daemon.
12032 @end defvr
12033
12034 @deftp {Data Type} idmap-configuration
12035 Data type representing the configuration of the IDMAP daemon service.
12036 This type has the following parameters:
12037 @table @asis
12038 @item @code{nfs-utils} (default: @code{nfs-utils})
12039 The package in which the @command{rpc.idmapd} command is to be found.
12040
12041 @item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
12042 The directory where the pipefs file system is mounted.
12043
12044 @item @code{domain} (default: @code{#f})
12045 The local NFSv4 domain name.
12046 This must be a string or @code{#f}.
12047 If it is @code{#f} then the daemon will use the host's fully qualified domain name.
12048
12049 @end table
12050 @end deftp
12051
12052 @node Continuous Integration
12053 @subsubsection Continuous Integration
12054
12055 @cindex continuous integration
12056 @uref{https://notabug.org/mthl/cuirass, Cuirass} is a continuous
12057 integration tool for Guix. It can be used both for development and for
12058 providing substitutes to others (@pxref{Substitutes}).
12059
12060 The @code{(gnu services cuirass)} module provides the following service.
12061
12062 @defvr {Scheme Procedure} cuirass-service-type
12063 The type of the Cuirass service. Its value must be a
12064 @code{cuirass-configuration} object, as described below.
12065 @end defvr
12066
12067 To add build jobs, you have to set the @code{specifications} field of
12068 the configuration. Here is an example of a service defining a build job
12069 based on a specification that can be found in Cuirass source tree. This
12070 service polls the Guix repository and builds a subset of the Guix
12071 packages, as prescribed in the @file{gnu-system.scm} example spec:
12072
12073 @example
12074 (let ((spec #~((#:name . "guix")
12075 (#:url . "git://git.savannah.gnu.org/guix.git")
12076 (#:load-path . ".")
12077
12078 ;; Here we must provide an absolute file name.
12079 ;; We take jobs from one of the examples provided
12080 ;; by Cuirass.
12081 (#:file . #$(file-append
12082 cuirass
12083 "/tests/gnu-system.scm"))
12084
12085 (#:proc . hydra-jobs)
12086 (#:arguments (subset . "hello"))
12087 (#:branch . "master"))))
12088 (service cuirass-service-type
12089 (cuirass-configuration
12090 (specifications #~(list #$spec)))))
12091 @end example
12092
12093 While information related to build jobs is located directly in the
12094 specifications, global settings for the @command{cuirass} process are
12095 accessible in other @code{cuirass-configuration} fields.
12096
12097 @deftp {Data Type} cuirass-configuration
12098 Data type representing the configuration of Cuirass.
12099
12100 @table @asis
12101 @item @code{log-file} (default: @code{"/var/log/cuirass.log"})
12102 Location of the log file.
12103
12104 @item @code{cache-directory} (default: @code{"/var/cache/cuirass"})
12105 Location of the repository cache.
12106
12107 @item @code{user} (default: @code{"cuirass"})
12108 Owner of the @code{cuirass} process.
12109
12110 @item @code{group} (default: @code{"cuirass"})
12111 Owner's group of the @code{cuirass} process.
12112
12113 @item @code{interval} (default: @code{60})
12114 Number of seconds between the poll of the repositories followed by the
12115 Cuirass jobs.
12116
12117 @item @code{database} (default: @code{"/var/run/cuirass/cuirass.db"})
12118 Location of sqlite database which contains the build results and previously
12119 added specifications.
12120
12121 @item @code{specifications} (default: @code{#~'()})
12122 A gexp (@pxref{G-Expressions}) that evaluates to a list of specifications,
12123 where a specification is an association list
12124 (@pxref{Associations Lists,,, guile, GNU Guile Reference Manual}) whose
12125 keys are keywords (@code{#:keyword-example}) as shown in the example
12126 above.
12127
12128 @item @code{use-substitutes?} (default: @code{#f})
12129 This allows using substitutes to avoid building every dependencies of a job
12130 from source.
12131
12132 @item @code{one-shot?} (default: @code{#f})
12133 Only evaluate specifications and build derivations once.
12134
12135 @item @code{cuirass} (default: @code{cuirass})
12136 The Cuirass package to use.
12137 @end table
12138 @end deftp
12139
12140 @node Miscellaneous Services
12141 @subsubsection Miscellaneous Services
12142
12143
12144 @cindex lirc
12145 @subsubheading Lirc Service
12146
12147 The @code{(gnu services lirc)} module provides the following service.
12148
12149 @deffn {Scheme Procedure} lirc-service [#:lirc lirc] @
12150 [#:device #f] [#:driver #f] [#:config-file #f] @
12151 [#:extra-options '()]
12152 Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
12153 decodes infrared signals from remote controls.
12154
12155 Optionally, @var{device}, @var{driver} and @var{config-file}
12156 (configuration file name) may be specified. See @command{lircd} manual
12157 for details.
12158
12159 Finally, @var{extra-options} is a list of additional command-line options
12160 passed to @command{lircd}.
12161 @end deffn
12162
12163 @cindex spice
12164 @subsubheading Spice Service
12165
12166 The @code{(gnu services spice)} module provides the following service.
12167
12168 @deffn {Scheme Procedure} spice-vdagent-service [#:spice-vdagent]
12169 Returns a service that runs @url{http://www.spice-space.org,VDAGENT}, a daemon
12170 that enables sharing the clipboard with a vm and setting the guest display
12171 resolution when the graphical console window resizes.
12172 @end deffn
12173
12174 @subsubsection Dictionary Services
12175 @cindex dictionary
12176 The @code{(gnu services dict)} module provides the following service:
12177
12178 @deffn {Scheme Procedure} dicod-service [#:config (dicod-configuration)]
12179 Return a service that runs the @command{dicod} daemon, an implementation
12180 of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
12181
12182 The optional @var{config} argument specifies the configuration for
12183 @command{dicod}, which should be a @code{<dicod-configuration>} object, by
12184 default it serves the GNU Collaborative International Dictonary of English.
12185
12186 You can add @command{open localhost} to your @file{~/.dico} file to make
12187 @code{localhost} the default server for @command{dico} client
12188 (@pxref{Initialization File,,, dico, GNU Dico Manual}).
12189 @end deffn
12190
12191 @deftp {Data Type} dicod-configuration
12192 Data type representing the configuration of dicod.
12193
12194 @table @asis
12195 @item @code{dico} (default: @var{dico})
12196 Package object of the GNU Dico dictionary server.
12197
12198 @item @code{interfaces} (default: @var{'("localhost")})
12199 This is the list of IP addresses and ports and possibly socket file
12200 names to listen to (@pxref{Server Settings, @code{listen} directive,,
12201 dico, GNU Dico Manual}).
12202
12203 @item @code{databases} (default: @var{(list %dicod-database:gcide)})
12204 List of @code{<dicod-database>} objects denoting dictionaries to be served.
12205 @end table
12206 @end deftp
12207
12208 @deftp {Data Type} dicod-database
12209 Data type representing a dictionary database.
12210
12211 @table @asis
12212 @item @code{name}
12213 Name of the database, will be used in DICT commands.
12214
12215 @item @code{module}
12216 Name of the dicod module used by this database
12217 (@pxref{Modules,,, dico, GNU Dico Manual}).
12218
12219 @item @code{options}
12220 List of strings or gexps representing the arguments for the module handler
12221 (@pxref{Handlers,,, dico, GNU Dico Manual}).
12222 @end table
12223 @end deftp
12224
12225 @defvr {Scheme Variable} %dicod-database:gcide
12226 A @code{<dicod-database>} object serving the GNU Collaborative International
12227 Dictonary of English using the @code{gcide} package.
12228 @end defvr
12229
12230 @subsubsection Version Control
12231
12232 The @code{(gnu services version-control)} module provides the following services:
12233
12234 @subsubheading Git daemon service
12235
12236 @deffn {Scheme Procedure} git-daemon-service [#:config (git-daemon-configuration)]
12237
12238 Return a service that runs @command{git daemon}, a simple TCP server to
12239 expose repositiories over the Git protocol for annoymous access.
12240
12241 The optional @var{config} argument should be a
12242 @code{<git-daemon-configuration>} object, by default it allows read-only
12243 access to exported@footnote{By creating the magic file
12244 "git-daemon-export-ok" in the repository directory.} repositories under
12245 @file{/srv/git}.
12246
12247 @end deffn
12248
12249 @deftp {Data Type} git-daemon-configuration
12250 Data type representing the configuration for @code{git-daemon-service}.
12251
12252 @table @asis
12253 @item @code{package} (default: @var{git})
12254 Package object of the Git distributed version control system.
12255
12256 @item @code{export-all?} (default: @var{#f})
12257 Whether to allow access for all Git repositories, even if they do not
12258 have the @file{git-daemon-export-ok} file.
12259
12260 @item @code{base-path} (default: @file{/srv/git})
12261 Whether to remap all the path requests as relative to the given path.
12262 If you run git daemon with @var{(base-path "/srv/git")} on example.com,
12263 then if you later try to pull @code{git://example.com/hello.git}, git
12264 daemon will interpret the path as @code{/srv/git/hello.git}.
12265
12266 @item @code{user-path} (default: @var{#f})
12267 Whether to allow @code{~user} notation to be used in requests. When
12268 specified with empty string, requests to @code{git://host/~alice/foo} is
12269 taken as a request to access @code{foo} repository in the home directory
12270 of user @code{alice}. If @var{(user-path "path")} is specified, the
12271 same request is taken as a request to access @code{path/foo} repository
12272 in the home directory of user @code{alice}.
12273
12274 @item @code{listen} (default: @var{'()})
12275 Whether to listen on specific IP addresses or hostnames, defaults to
12276 all.
12277
12278 @item @code{port} (default: @var{#f})
12279 Whether to listen on an alternative port, which defaults to 9418.
12280
12281 @item @code{whitelist} (default: @var{'()})
12282 If not empty, only allow access to this list of directories.
12283
12284 @item @code{extra-options} (default: @var{'()})
12285 Extra options will be passed to @code{git daemon}, please run
12286 @command{man git-daemon} for more information.
12287
12288 @end table
12289 @end deftp
12290
12291 @node Setuid Programs
12292 @subsection Setuid Programs
12293
12294 @cindex setuid programs
12295 Some programs need to run with ``root'' privileges, even when they are
12296 launched by unprivileged users. A notorious example is the
12297 @command{passwd} program, which users can run to change their
12298 password, and which needs to access the @file{/etc/passwd} and
12299 @file{/etc/shadow} files---something normally restricted to root, for
12300 obvious security reasons. To address that, these executables are
12301 @dfn{setuid-root}, meaning that they always run with root privileges
12302 (@pxref{How Change Persona,,, libc, The GNU C Library Reference Manual},
12303 for more info about the setuid mechanism.)
12304
12305 The store itself @emph{cannot} contain setuid programs: that would be a
12306 security issue since any user on the system can write derivations that
12307 populate the store (@pxref{The Store}). Thus, a different mechanism is
12308 used: instead of changing the setuid bit directly on files that are in
12309 the store, we let the system administrator @emph{declare} which programs
12310 should be setuid root.
12311
12312 The @code{setuid-programs} field of an @code{operating-system}
12313 declaration contains a list of G-expressions denoting the names of
12314 programs to be setuid-root (@pxref{Using the Configuration System}).
12315 For instance, the @command{passwd} program, which is part of the Shadow
12316 package, can be designated by this G-expression (@pxref{G-Expressions}):
12317
12318 @example
12319 #~(string-append #$shadow "/bin/passwd")
12320 @end example
12321
12322 A default set of setuid programs is defined by the
12323 @code{%setuid-programs} variable of the @code{(gnu system)} module.
12324
12325 @defvr {Scheme Variable} %setuid-programs
12326 A list of G-expressions denoting common programs that are setuid-root.
12327
12328 The list includes commands such as @command{passwd}, @command{ping},
12329 @command{su}, and @command{sudo}.
12330 @end defvr
12331
12332 Under the hood, the actual setuid programs are created in the
12333 @file{/run/setuid-programs} directory at system activation time. The
12334 files in this directory refer to the ``real'' binaries, which are in the
12335 store.
12336
12337 @node X.509 Certificates
12338 @subsection X.509 Certificates
12339
12340 @cindex HTTPS, certificates
12341 @cindex X.509 certificates
12342 @cindex TLS
12343 Web servers available over HTTPS (that is, HTTP over the transport-layer
12344 security mechanism, TLS) send client programs an @dfn{X.509 certificate}
12345 that the client can then use to @emph{authenticate} the server. To do
12346 that, clients verify that the server's certificate is signed by a
12347 so-called @dfn{certificate authority} (CA). But to verify the CA's
12348 signature, clients must have first acquired the CA's certificate.
12349
12350 Web browsers such as GNU@tie{}IceCat include their own set of CA
12351 certificates, such that they are able to verify CA signatures
12352 out-of-the-box.
12353
12354 However, most other programs that can talk HTTPS---@command{wget},
12355 @command{git}, @command{w3m}, etc.---need to be told where CA
12356 certificates can be found.
12357
12358 @cindex @code{nss-certs}
12359 In GuixSD, this is done by adding a package that provides certificates
12360 to the @code{packages} field of the @code{operating-system} declaration
12361 (@pxref{operating-system Reference}). GuixSD includes one such package,
12362 @code{nss-certs}, which is a set of CA certificates provided as part of
12363 Mozilla's Network Security Services.
12364
12365 Note that it is @emph{not} part of @var{%base-packages}, so you need to
12366 explicitly add it. The @file{/etc/ssl/certs} directory, which is where
12367 most applications and libraries look for certificates by default, points
12368 to the certificates installed globally.
12369
12370 Unprivileged users, including users of Guix on a foreign distro,
12371 can also install their own certificate package in
12372 their profile. A number of environment variables need to be defined so
12373 that applications and libraries know where to find them. Namely, the
12374 OpenSSL library honors the @code{SSL_CERT_DIR} and @code{SSL_CERT_FILE}
12375 variables. Some applications add their own environment variables; for
12376 instance, the Git version control system honors the certificate bundle
12377 pointed to by the @code{GIT_SSL_CAINFO} environment variable. Thus, you
12378 would typically run something like:
12379
12380 @example
12381 $ guix package -i nss-certs
12382 $ export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs"
12383 $ export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
12384 $ export GIT_SSL_CAINFO="$SSL_CERT_FILE"
12385 @end example
12386
12387 @node Name Service Switch
12388 @subsection Name Service Switch
12389
12390 @cindex name service switch
12391 @cindex NSS
12392 The @code{(gnu system nss)} module provides bindings to the
12393 configuration file of the libc @dfn{name service switch} or @dfn{NSS}
12394 (@pxref{NSS Configuration File,,, libc, The GNU C Library Reference
12395 Manual}). In a nutshell, the NSS is a mechanism that allows libc to be
12396 extended with new ``name'' lookup methods for system databases, which
12397 includes host names, service names, user accounts, and more (@pxref{Name
12398 Service Switch, System Databases and Name Service Switch,, libc, The GNU
12399 C Library Reference Manual}).
12400
12401 The NSS configuration specifies, for each system database, which lookup
12402 method is to be used, and how the various methods are chained
12403 together---for instance, under which circumstances NSS should try the
12404 next method in the list. The NSS configuration is given in the
12405 @code{name-service-switch} field of @code{operating-system} declarations
12406 (@pxref{operating-system Reference, @code{name-service-switch}}).
12407
12408 @cindex nss-mdns
12409 @cindex .local, host name lookup
12410 As an example, the declaration below configures the NSS to use the
12411 @uref{http://0pointer.de/lennart/projects/nss-mdns/, @code{nss-mdns}
12412 back-end}, which supports host name lookups over multicast DNS (mDNS)
12413 for host names ending in @code{.local}:
12414
12415 @example
12416 (name-service-switch
12417 (hosts (list %files ;first, check /etc/hosts
12418
12419 ;; If the above did not succeed, try
12420 ;; with 'mdns_minimal'.
12421 (name-service
12422 (name "mdns_minimal")
12423
12424 ;; 'mdns_minimal' is authoritative for
12425 ;; '.local'. When it returns "not found",
12426 ;; no need to try the next methods.
12427 (reaction (lookup-specification
12428 (not-found => return))))
12429
12430 ;; Then fall back to DNS.
12431 (name-service
12432 (name "dns"))
12433
12434 ;; Finally, try with the "full" 'mdns'.
12435 (name-service
12436 (name "mdns")))))
12437 @end example
12438
12439 Do not worry: the @code{%mdns-host-lookup-nss} variable (see below)
12440 contains this configuration, so you will not have to type it if all you
12441 want is to have @code{.local} host lookup working.
12442
12443 Note that, in this case, in addition to setting the
12444 @code{name-service-switch} of the @code{operating-system} declaration,
12445 you also need to use @code{avahi-service} (@pxref{Networking Services,
12446 @code{avahi-service}}), or @var{%desktop-services}, which includes it
12447 (@pxref{Desktop Services}). Doing this makes @code{nss-mdns} accessible
12448 to the name service cache daemon (@pxref{Base Services,
12449 @code{nscd-service}}).
12450
12451 For convenience, the following variables provide typical NSS
12452 configurations.
12453
12454 @defvr {Scheme Variable} %default-nss
12455 This is the default name service switch configuration, a
12456 @code{name-service-switch} object.
12457 @end defvr
12458
12459 @defvr {Scheme Variable} %mdns-host-lookup-nss
12460 This is the name service switch configuration with support for host name
12461 lookup over multicast DNS (mDNS) for host names ending in @code{.local}.
12462 @end defvr
12463
12464 The reference for name service switch configuration is given below. It
12465 is a direct mapping of the configuration file format of the C library , so
12466 please refer to the C library manual for more information (@pxref{NSS
12467 Configuration File,,, libc, The GNU C Library Reference Manual}).
12468 Compared to the configuration file format of libc NSS, it has the advantage
12469 not only of adding this warm parenthetic feel that we like, but also
12470 static checks: you will know about syntax errors and typos as soon as you
12471 run @command{guix system}.
12472
12473 @deftp {Data Type} name-service-switch
12474
12475 This is the data type representation the configuration of libc's name
12476 service switch (NSS). Each field below represents one of the supported
12477 system databases.
12478
12479 @table @code
12480 @item aliases
12481 @itemx ethers
12482 @itemx group
12483 @itemx gshadow
12484 @itemx hosts
12485 @itemx initgroups
12486 @itemx netgroup
12487 @itemx networks
12488 @itemx password
12489 @itemx public-key
12490 @itemx rpc
12491 @itemx services
12492 @itemx shadow
12493 The system databases handled by the NSS. Each of these fields must be a
12494 list of @code{<name-service>} objects (see below).
12495 @end table
12496 @end deftp
12497
12498 @deftp {Data Type} name-service
12499
12500 This is the data type representing an actual name service and the
12501 associated lookup action.
12502
12503 @table @code
12504 @item name
12505 A string denoting the name service (@pxref{Services in the NSS
12506 configuration,,, libc, The GNU C Library Reference Manual}).
12507
12508 Note that name services listed here must be visible to nscd. This is
12509 achieved by passing the @code{#:name-services} argument to
12510 @code{nscd-service} the list of packages providing the needed name
12511 services (@pxref{Base Services, @code{nscd-service}}).
12512
12513 @item reaction
12514 An action specified using the @code{lookup-specification} macro
12515 (@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
12516 Reference Manual}). For example:
12517
12518 @example
12519 (lookup-specification (unavailable => continue)
12520 (success => return))
12521 @end example
12522 @end table
12523 @end deftp
12524
12525 @node Initial RAM Disk
12526 @subsection Initial RAM Disk
12527
12528 @cindex initrd
12529 @cindex initial RAM disk
12530 For bootstrapping purposes, the Linux-Libre kernel is passed an
12531 @dfn{initial RAM disk}, or @dfn{initrd}. An initrd contains a temporary
12532 root file system as well as an initialization script. The latter is
12533 responsible for mounting the real root file system, and for loading any
12534 kernel modules that may be needed to achieve that.
12535
12536 The @code{initrd} field of an @code{operating-system} declaration allows
12537 you to specify which initrd you would like to use. The @code{(gnu
12538 system linux-initrd)} module provides two ways to build an initrd: the
12539 high-level @code{base-initrd} procedure, and the low-level
12540 @code{expression->initrd} procedure.
12541
12542 The @code{base-initrd} procedure is intended to cover most common uses.
12543 For example, if you want to add a bunch of kernel modules to be loaded
12544 at boot time, you can define the @code{initrd} field of the operating
12545 system declaration like this:
12546
12547 @example
12548 (initrd (lambda (file-systems . rest)
12549 ;; Create a standard initrd that has modules "foo.ko"
12550 ;; and "bar.ko", as well as their dependencies, in
12551 ;; addition to the modules available by default.
12552 (apply base-initrd file-systems
12553 #:extra-modules '("foo" "bar")
12554 rest)))
12555 @end example
12556
12557 The @code{base-initrd} procedure also handles common use cases that
12558 involves using the system as a QEMU guest, or as a ``live'' system with
12559 volatile root file system.
12560
12561 The initial RAM disk produced by @code{base-initrd} honors several
12562 options passed on the Linux kernel command line (that is, arguments
12563 passed @i{via} the @code{linux} command of GRUB, or the
12564 @code{-append} option of QEMU), notably:
12565
12566 @table @code
12567 @item --load=@var{boot}
12568 Tell the initial RAM disk to load @var{boot}, a file containing a Scheme
12569 program, once it has mounted the root file system.
12570
12571 GuixSD uses this option to yield control to a boot program that runs the
12572 service activation programs and then spawns the GNU@tie{}Shepherd, the
12573 initialization system.
12574
12575 @item --root=@var{root}
12576 Mount @var{root} as the root file system. @var{root} can be a
12577 device name like @code{/dev/sda1}, a partition label, or a partition
12578 UUID.
12579
12580 @item --system=@var{system}
12581 Have @file{/run/booted-system} and @file{/run/current-system} point to
12582 @var{system}.
12583
12584 @item modprobe.blacklist=@var{modules}@dots{}
12585 @cindex module, black-listing
12586 @cindex black list, of kernel modules
12587 Instruct the initial RAM disk as well as the @command{modprobe} command
12588 (from the kmod package) to refuse to load @var{modules}. @var{modules}
12589 must be a comma-separated list of module names---e.g.,
12590 @code{usbkbd,9pnet}.
12591
12592 @item --repl
12593 Start a read-eval-print loop (REPL) from the initial RAM disk before it
12594 tries to load kernel modules and to mount the root file system. Our
12595 marketing team calls it @dfn{boot-to-Guile}. The Schemer in you will
12596 love it. @xref{Using Guile Interactively,,, guile, GNU Guile Reference
12597 Manual}, for more information on Guile's REPL.
12598
12599 @end table
12600
12601 Now that you know all the features that initial RAM disks produced by
12602 @code{base-initrd} provide, here is how to use it and customize it
12603 further.
12604
12605 @cindex initrd
12606 @cindex initial RAM disk
12607 @deffn {Monadic Procedure} base-initrd @var{file-systems} @
12608 [#:qemu-networking? #f] [#:virtio? #t] [#:volatile-root? #f] @
12609 [#:extra-modules '()] [#:mapped-devices '()]
12610 Return a monadic derivation that builds a generic initrd. @var{file-systems} is
12611 a list of file systems to be mounted by the initrd, possibly in addition to
12612 the root file system specified on the kernel command line via @code{--root}.
12613 @var{mapped-devices} is a list of device mappings to realize before
12614 @var{file-systems} are mounted (@pxref{Mapped Devices}).
12615
12616 When @var{qemu-networking?} is true, set up networking with the standard QEMU
12617 parameters. When @var{virtio?} is true, load additional modules so that the
12618 initrd can be used as a QEMU guest with para-virtualized I/O drivers.
12619
12620 When @var{volatile-root?} is true, the root file system is writable but any changes
12621 to it are lost.
12622
12623 The initrd is automatically populated with all the kernel modules necessary
12624 for @var{file-systems} and for the given options. However, additional kernel
12625 modules can be listed in @var{extra-modules}. They will be added to the initrd, and
12626 loaded at boot time in the order in which they appear.
12627 @end deffn
12628
12629 Needless to say, the initrds we produce and use embed a
12630 statically-linked Guile, and the initialization program is a Guile
12631 program. That gives a lot of flexibility. The
12632 @code{expression->initrd} procedure builds such an initrd, given the
12633 program to run in that initrd.
12634
12635 @deffn {Monadic Procedure} expression->initrd @var{exp} @
12636 [#:guile %guile-static-stripped] [#:name "guile-initrd"]
12637 Return a derivation that builds a Linux initrd (a gzipped cpio archive)
12638 containing @var{guile} and that evaluates @var{exp}, a G-expression,
12639 upon booting. All the derivations referenced by @var{exp} are
12640 automatically copied to the initrd.
12641 @end deffn
12642
12643 @node GRUB Configuration
12644 @subsection GRUB Configuration
12645
12646 @cindex GRUB
12647 @cindex boot loader
12648
12649 The operating system uses GNU@tie{}GRUB as its boot loader
12650 (@pxref{Overview, overview of GRUB,, grub, GNU GRUB Manual}). It is
12651 configured using a @code{grub-configuration} declaration. This data type
12652 is exported by the @code{(gnu system grub)} module and described below.
12653
12654 @deftp {Data Type} grub-configuration
12655 The type of a GRUB configuration declaration.
12656
12657 @table @asis
12658
12659 @item @code{device}
12660 This is a string denoting the boot device. It must be a device name
12661 understood by the @command{grub-install} command, such as
12662 @code{/dev/sda} or @code{(hd0)} (@pxref{Invoking grub-install,,, grub,
12663 GNU GRUB Manual}).
12664
12665 @item @code{menu-entries} (default: @code{()})
12666 A possibly empty list of @code{menu-entry} objects (see below), denoting
12667 entries to appear in the GRUB boot menu, in addition to the current
12668 system entry and the entry pointing to previous system generations.
12669
12670 @item @code{default-entry} (default: @code{0})
12671 The index of the default boot menu entry. Index 0 is for the entry of the
12672 current system.
12673
12674 @item @code{timeout} (default: @code{5})
12675 The number of seconds to wait for keyboard input before booting. Set to
12676 0 to boot immediately, and to -1 to wait indefinitely.
12677
12678 @item @code{theme} (default: @var{%default-theme})
12679 The @code{grub-theme} object describing the theme to use.
12680
12681 @item @code{grub} (default: @code{grub})
12682 The GRUB package to use.
12683 @end table
12684
12685 @end deftp
12686
12687 @cindex dual boot
12688 @cindex boot menu
12689 Should you want to list additional boot menu entries @i{via} the
12690 @code{menu-entries} field above, you will need to create them with the
12691 @code{menu-entry} form. For example, imagine you want to be able to
12692 boot another distro (hard to imagine!), you can define a menu entry
12693 along these lines:
12694
12695 @example
12696 (menu-entry
12697 (label "The Other Distro")
12698 (linux "/boot/old/vmlinux-2.6.32")
12699 (linux-arguments '("root=/dev/sda2"))
12700 (initrd "/boot/old/initrd"))
12701 @end example
12702
12703 Details below.
12704
12705 @deftp {Data Type} menu-entry
12706 The type of an entry in the GRUB boot menu.
12707
12708 @table @asis
12709
12710 @item @code{label}
12711 The label to show in the menu---e.g., @code{"GNU"}.
12712
12713 @item @code{linux}
12714 The Linux kernel image to boot, for example:
12715
12716 @example
12717 (file-append linux-libre "/bzImage")
12718 @end example
12719
12720 It is also possible to specify a device explicitly in the file path
12721 using GRUB's device naming convention (@pxref{Naming convention,,, grub,
12722 GNU GRUB manual}), for example:
12723
12724 @example
12725 "(hd0,msdos1)/boot/vmlinuz"
12726 @end example
12727
12728 If the device is specified explicitly as above, then the @code{device}
12729 field is ignored entirely.
12730
12731 @item @code{linux-arguments} (default: @code{()})
12732 The list of extra Linux kernel command-line arguments---e.g.,
12733 @code{("console=ttyS0")}.
12734
12735 @item @code{initrd}
12736 A G-Expression or string denoting the file name of the initial RAM disk
12737 to use (@pxref{G-Expressions}).
12738
12739 @item @code{device} (default: @code{#f})
12740 The device where the kernel and initrd are to be found---i.e., the GRUB
12741 @dfn{root} for this menu entry (@pxref{root,,, grub, GNU GRUB manual}).
12742
12743 This may be a file system label (a string), a file system UUID (a
12744 bytevector, @pxref{File Systems}), or @code{#f}, in which case GRUB will
12745 search the device containing the file specified by the @code{linux}
12746 field (@pxref{search,,, grub, GNU GRUB manual}). It must @emph{not} be
12747 an OS device name such as @file{/dev/sda1}.
12748
12749 @item @code{device-mount-point} (default: @code{"/"})
12750 The mount point of the above device on the system. You probably do not
12751 need to change the default value. GuixSD uses it to strip the prefix of
12752 store file names for systems where @file{/gnu} or @file{/gnu/store} is
12753 on a separate partition.
12754
12755 @end table
12756 @end deftp
12757
12758 @c FIXME: Write documentation once it's stable.
12759 Themes are created using the @code{grub-theme} form, which is not
12760 documented yet.
12761
12762 @defvr {Scheme Variable} %default-theme
12763 This is the default GRUB theme used by the operating system, with a
12764 fancy background image displaying the GNU and Guix logos.
12765 @end defvr
12766
12767
12768 @node Invoking guix system
12769 @subsection Invoking @code{guix system}
12770
12771 Once you have written an operating system declaration as seen in the
12772 previous section, it can be @dfn{instantiated} using the @command{guix
12773 system} command. The synopsis is:
12774
12775 @example
12776 guix system @var{options}@dots{} @var{action} @var{file}
12777 @end example
12778
12779 @var{file} must be the name of a file containing an
12780 @code{operating-system} declaration. @var{action} specifies how the
12781 operating system is instantiated. Currently the following values are
12782 supported:
12783
12784 @table @code
12785 @item reconfigure
12786 Build the operating system described in @var{file}, activate it, and
12787 switch to it@footnote{This action (and the related actions
12788 @code{switch-generation} and @code{roll-back}) are usable only on
12789 systems already running GuixSD.}.
12790
12791 This effects all the configuration specified in @var{file}: user
12792 accounts, system services, global package list, setuid programs, etc.
12793 The command starts system services specified in @var{file} that are not
12794 currently running; if a service is currently running, it does not
12795 attempt to upgrade it since this would not be possible without stopping it
12796 first.
12797
12798 This command creates a new generation whose number is one greater than
12799 the current generation (as reported by @command{guix system
12800 list-generations}). If that generation already exists, it will be
12801 overwritten. This behavior mirrors that of @command{guix package}
12802 (@pxref{Invoking guix package}).
12803
12804 It also adds a GRUB menu entry for the new OS configuration, and moves
12805 entries for older configurations to a submenu---unless
12806 @option{--no-grub} is passed.
12807
12808 @quotation Note
12809 @c The paragraph below refers to the problem discussed at
12810 @c <http://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
12811 It is highly recommended to run @command{guix pull} once before you run
12812 @command{guix system reconfigure} for the first time (@pxref{Invoking
12813 guix pull}). Failing to do that you would see an older version of Guix
12814 once @command{reconfigure} has completed.
12815 @end quotation
12816
12817 @item switch-generation
12818 @cindex generations
12819 Switch to an existing system generation. This action atomically
12820 switches the system profile to the specified system generation. It also
12821 rearranges the system's existing GRUB menu entries. It makes the menu
12822 entry for the specified system generation the default, and it moves the
12823 entries for the other generations to a submenu. The next time the
12824 system boots, it will use the specified system generation.
12825
12826 The target generation can be specified explicitly by its generation
12827 number. For example, the following invocation would switch to system
12828 generation 7:
12829
12830 @example
12831 guix system switch-generation 7
12832 @end example
12833
12834 The target generation can also be specified relative to the current
12835 generation with the form @code{+N} or @code{-N}, where @code{+3} means
12836 ``3 generations ahead of the current generation,'' and @code{-1} means
12837 ``1 generation prior to the current generation.'' When specifying a
12838 negative value such as @code{-1}, you must precede it with @code{--} to
12839 prevent it from being parsed as an option. For example:
12840
12841 @example
12842 guix system switch-generation -- -1
12843 @end example
12844
12845 Currently, the effect of invoking this action is @emph{only} to switch
12846 the system profile to an existing generation and rearrange the GRUB menu
12847 entries. To actually start using the target system generation, you must
12848 reboot after running this action. In the future, it will be updated to
12849 do the same things as @command{reconfigure}, like activating and
12850 deactivating services.
12851
12852 This action will fail if the specified generation does not exist.
12853
12854 @item roll-back
12855 @cindex rolling back
12856 Switch to the preceding system generation. The next time the system
12857 boots, it will use the preceding system generation. This is the inverse
12858 of @command{reconfigure}, and it is exactly the same as invoking
12859 @command{switch-generation} with an argument of @code{-1}.
12860
12861 Currently, as with @command{switch-generation}, you must reboot after
12862 running this action to actually start using the preceding system
12863 generation.
12864
12865 @item build
12866 Build the derivation of the operating system, which includes all the
12867 configuration files and programs needed to boot and run the system.
12868 This action does not actually install anything.
12869
12870 @item init
12871 Populate the given directory with all the files necessary to run the
12872 operating system specified in @var{file}. This is useful for first-time
12873 installations of GuixSD. For instance:
12874
12875 @example
12876 guix system init my-os-config.scm /mnt
12877 @end example
12878
12879 copies to @file{/mnt} all the store items required by the configuration
12880 specified in @file{my-os-config.scm}. This includes configuration
12881 files, packages, and so on. It also creates other essential files
12882 needed for the system to operate correctly---e.g., the @file{/etc},
12883 @file{/var}, and @file{/run} directories, and the @file{/bin/sh} file.
12884
12885 This command also installs GRUB on the device specified in
12886 @file{my-os-config}, unless the @option{--no-grub} option was passed.
12887
12888 @item vm
12889 @cindex virtual machine
12890 @cindex VM
12891 @anchor{guix system vm}
12892 Build a virtual machine that contains the operating system declared in
12893 @var{file}, and return a script to run that virtual machine (VM).
12894 Arguments given to the script are passed to QEMU.
12895
12896 The VM shares its store with the host system.
12897
12898 Additional file systems can be shared between the host and the VM using
12899 the @code{--share} and @code{--expose} command-line options: the former
12900 specifies a directory to be shared with write access, while the latter
12901 provides read-only access to the shared directory.
12902
12903 The example below creates a VM in which the user's home directory is
12904 accessible read-only, and where the @file{/exchange} directory is a
12905 read-write mapping of @file{$HOME/tmp} on the host:
12906
12907 @example
12908 guix system vm my-config.scm \
12909 --expose=$HOME --share=$HOME/tmp=/exchange
12910 @end example
12911
12912 On GNU/Linux, the default is to boot directly to the kernel; this has
12913 the advantage of requiring only a very tiny root disk image since the
12914 store of the host can then be mounted.
12915
12916 The @code{--full-boot} option forces a complete boot sequence, starting
12917 with the bootloader. This requires more disk space since a root image
12918 containing at least the kernel, initrd, and bootloader data files must
12919 be created. The @code{--image-size} option can be used to specify the
12920 size of the image.
12921
12922 @item vm-image
12923 @itemx disk-image
12924 Return a virtual machine or disk image of the operating system declared
12925 in @var{file} that stands alone. Use the @option{--image-size} option
12926 to specify the size of the image.
12927
12928 When using @code{vm-image}, the returned image is in qcow2 format, which
12929 the QEMU emulator can efficiently use. @xref{Running GuixSD in a VM},
12930 for more information on how to run the image in a virtual machine.
12931
12932 When using @code{disk-image}, a raw disk image is produced; it can be
12933 copied as is to a USB stick, for instance. Assuming @code{/dev/sdc} is
12934 the device corresponding to a USB stick, one can copy the image to it
12935 using the following command:
12936
12937 @example
12938 # dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
12939 @end example
12940
12941 @item container
12942 Return a script to run the operating system declared in @var{file}
12943 within a container. Containers are a set of lightweight isolation
12944 mechanisms provided by the kernel Linux-libre. Containers are
12945 substantially less resource-demanding than full virtual machines since
12946 the kernel, shared objects, and other resources can be shared with the
12947 host system; this also means they provide thinner isolation.
12948
12949 Currently, the script must be run as root in order to support more than
12950 a single user and group. The container shares its store with the host
12951 system.
12952
12953 As with the @code{vm} action (@pxref{guix system vm}), additional file
12954 systems to be shared between the host and container can be specified
12955 using the @option{--share} and @option{--expose} options:
12956
12957 @example
12958 guix system container my-config.scm \
12959 --expose=$HOME --share=$HOME/tmp=/exchange
12960 @end example
12961
12962 @quotation Note
12963 This option requires Linux-libre 3.19 or newer.
12964 @end quotation
12965
12966 @end table
12967
12968 @var{options} can contain any of the common build options (@pxref{Common
12969 Build Options}). In addition, @var{options} can contain one of the
12970 following:
12971
12972 @table @option
12973 @item --system=@var{system}
12974 @itemx -s @var{system}
12975 Attempt to build for @var{system} instead of the host system type.
12976 This works as per @command{guix build} (@pxref{Invoking guix build}).
12977
12978 @item --derivation
12979 @itemx -d
12980 Return the derivation file name of the given operating system without
12981 building anything.
12982
12983 @item --image-size=@var{size}
12984 For the @code{vm-image} and @code{disk-image} actions, create an image
12985 of the given @var{size}. @var{size} may be a number of bytes, or it may
12986 include a unit as a suffix (@pxref{Block size, size specifications,,
12987 coreutils, GNU Coreutils}).
12988
12989 @item --on-error=@var{strategy}
12990 Apply @var{strategy} when an error occurs when reading @var{file}.
12991 @var{strategy} may be one of the following:
12992
12993 @table @code
12994 @item nothing-special
12995 Report the error concisely and exit. This is the default strategy.
12996
12997 @item backtrace
12998 Likewise, but also display a backtrace.
12999
13000 @item debug
13001 Report the error and enter Guile's debugger. From there, you can run
13002 commands such as @code{,bt} to get a backtrace, @code{,locals} to
13003 display local variable values, and more generally inspect the state of the
13004 program. @xref{Debug Commands,,, guile, GNU Guile Reference Manual}, for
13005 a list of available debugging commands.
13006 @end table
13007 @end table
13008
13009 @quotation Note
13010 All the actions above, except @code{build} and @code{init},
13011 can use KVM support in the Linux-libre kernel. Specifically, if the
13012 machine has hardware virtualization support, the corresponding
13013 KVM kernel module should be loaded, and the @file{/dev/kvm} device node
13014 must exist and be readable and writable by the user and by the
13015 build users of the daemon (@pxref{Build Environment Setup}).
13016 @end quotation
13017
13018 Once you have built, configured, re-configured, and re-re-configured
13019 your GuixSD installation, you may find it useful to list the operating
13020 system generations available on disk---and that you can choose from the
13021 GRUB boot menu:
13022
13023 @table @code
13024
13025 @item list-generations
13026 List a summary of each generation of the operating system available on
13027 disk, in a human-readable way. This is similar to the
13028 @option{--list-generations} option of @command{guix package}
13029 (@pxref{Invoking guix package}).
13030
13031 Optionally, one can specify a pattern, with the same syntax that is used
13032 in @command{guix package --list-generations}, to restrict the list of
13033 generations displayed. For instance, the following command displays
13034 generations that are up to 10 days old:
13035
13036 @example
13037 $ guix system list-generations 10d
13038 @end example
13039
13040 @end table
13041
13042 The @command{guix system} command has even more to offer! The following
13043 sub-commands allow you to visualize how your system services relate to
13044 each other:
13045
13046 @anchor{system-extension-graph}
13047 @table @code
13048
13049 @item extension-graph
13050 Emit in Dot/Graphviz format to standard output the @dfn{service
13051 extension graph} of the operating system defined in @var{file}
13052 (@pxref{Service Composition}, for more information on service
13053 extensions.)
13054
13055 The command:
13056
13057 @example
13058 $ guix system extension-graph @var{file} | dot -Tpdf > services.pdf
13059 @end example
13060
13061 produces a PDF file showing the extension relations among services.
13062
13063 @anchor{system-shepherd-graph}
13064 @item shepherd-graph
13065 Emit in Dot/Graphviz format to standard output the @dfn{dependency
13066 graph} of shepherd services of the operating system defined in
13067 @var{file}. @xref{Shepherd Services}, for more information and for an
13068 example graph.
13069
13070 @end table
13071
13072 @node Running GuixSD in a VM
13073 @subsection Running GuixSD in a Virtual Machine
13074
13075 @cindex virtual machine
13076 One way to run GuixSD in a virtual machine (VM) is to build a GuixSD
13077 virtual machine image using @command{guix system vm-image}
13078 (@pxref{Invoking guix system}). The returned image is in qcow2 format,
13079 which the @uref{http://qemu.org/, QEMU emulator} can efficiently use.
13080
13081 @cindex QEMU
13082 To run the image in QEMU, copy it out of the store (@pxref{The Store})
13083 and give yourself permission to write to the copy. When invoking QEMU,
13084 you must choose a system emulator that is suitable for your hardware
13085 platform. Here is a minimal QEMU invocation that will boot the result
13086 of @command{guix system vm-image} on x86_64 hardware:
13087
13088 @example
13089 $ qemu-system-x86_64 \
13090 -net user -net nic,model=virtio \
13091 -enable-kvm -m 256 /tmp/qemu-image
13092 @end example
13093
13094 Here is what each of these options means:
13095
13096 @table @code
13097 @item qemu-system-x86_64
13098 This specifies the hardware platform to emulate. This should match the
13099 host.
13100
13101 @item -net user
13102 Enable the unprivileged user-mode network stack. The guest OS can
13103 access the host but not vice versa. This is the simplest way to get the
13104 guest OS online.
13105
13106 @item -net nic,model=virtio
13107 You must create a network interface of a given model. If you do not
13108 create a NIC, the boot will fail. Assuming your hardware platform is
13109 x86_64, you can get a list of available NIC models by running
13110 @command{qemu-system-x86_64 -net nic,model=help}.
13111
13112 @item -enable-kvm
13113 If your system has hardware virtualization extensions, enabling the
13114 virtual machine support (KVM) of the Linux kernel will make things run
13115 faster.
13116
13117 @item -m 256
13118 RAM available to the guest OS, in mebibytes. Defaults to 128@tie{}MiB,
13119 which may be insufficient for some operations.
13120
13121 @item /tmp/qemu-image
13122 The file name of the qcow2 image.
13123 @end table
13124
13125 The default @command{run-vm.sh} script that is returned by an invokation of
13126 @command{guix system vm} does not add a @command{-net user} flag by default.
13127 To get network access from within the vm add the @code{(dhcp-client-service)}
13128 to your system definition and start the VM using
13129 @command{`guix system vm config.scm` -net user}. An important caveat of using
13130 @command{-net user} for networking is that @command{ping} will not work, because
13131 it uses the ICMP protocol. You'll have to use a different command to check for
13132 network connectivity, like for example @command{curl}.
13133
13134 @subsubsection Connecting Through SSH
13135
13136 @cindex SSH
13137 @cindex SSH server
13138 To enable SSH inside a VM you need to add a SSH server like @code{(dropbear-service)}
13139 or @code{(lsh-service)} to your VM. The @code{(lsh-service}) doesn't currently
13140 boot unsupervised. It requires you to type some characters to initialize the
13141 randomness generator. In addition you need to forward the SSH port, 22 by
13142 default, to the host. You can do this with
13143
13144 @example
13145 `guix system vm config.scm` -net user,hostfwd=tcp::10022-:22
13146 @end example
13147
13148 To connect to the VM you can run
13149
13150 @example
13151 ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022
13152 @end example
13153
13154 The @command{-p} tells @command{ssh} the port you want to connect to.
13155 @command{-o UserKnownHostsFile=/dev/null} prevents @command{ssh} from complaining
13156 every time you modify your @command{config.scm} file and the
13157 @command{-o StrictHostKeyChecking=no} prevents you from having to allow a
13158 connection to an unknown host every time you connect.
13159
13160 @subsubsection Using @command{virt-viewer} with Spice
13161
13162 As an alternative to the default @command{qemu} graphical client you can
13163 use the @command{remote-viewer} from the @command{virt-viewer} package. To
13164 connect pass the @command{-spice port=5930,disable-ticketing} flag to
13165 @command{qemu}. See previous section for further information on how to do this.
13166
13167 Spice also allows you to do some nice stuff like share your clipboard with your
13168 VM. To enable that you'll also have to pass the following flags to @command{qemu}:
13169
13170 @example
13171 -device virtio-serial-pci,id=virtio-serial0,max_ports=16,bus=pci.0,addr=0x5
13172 -chardev spicevmc,name=vdagent,id=vdagent
13173 -device virtserialport,nr=1,bus=virtio-serial0.0,chardev=vdagent,
13174 name=com.redhat.spice.0
13175 @end example
13176
13177 You'll also need to add the @pxref{Miscellaneous Services, Spice service}.
13178
13179 @node Defining Services
13180 @subsection Defining Services
13181
13182 The previous sections show the available services and how one can combine
13183 them in an @code{operating-system} declaration. But how do we define
13184 them in the first place? And what is a service anyway?
13185
13186 @menu
13187 * Service Composition:: The model for composing services.
13188 * Service Types and Services:: Types and services.
13189 * Service Reference:: API reference.
13190 * Shepherd Services:: A particular type of service.
13191 @end menu
13192
13193 @node Service Composition
13194 @subsubsection Service Composition
13195
13196 @cindex services
13197 @cindex daemons
13198 Here we define a @dfn{service} as, broadly, something that extends the
13199 functionality of the operating system. Often a service is a process---a
13200 @dfn{daemon}---started when the system boots: a secure shell server, a
13201 Web server, the Guix build daemon, etc. Sometimes a service is a daemon
13202 whose execution can be triggered by another daemon---e.g., an FTP server
13203 started by @command{inetd} or a D-Bus service activated by
13204 @command{dbus-daemon}. Occasionally, a service does not map to a
13205 daemon. For instance, the ``account'' service collects user accounts
13206 and makes sure they exist when the system runs; the ``udev'' service
13207 collects device management rules and makes them available to the eudev
13208 daemon; the @file{/etc} service populates the @file{/etc} directory
13209 of the system.
13210
13211 @cindex service extensions
13212 GuixSD services are connected by @dfn{extensions}. For instance, the
13213 secure shell service @emph{extends} the Shepherd---the GuixSD
13214 initialization system, running as PID@tie{}1---by giving it the command
13215 lines to start and stop the secure shell daemon (@pxref{Networking
13216 Services, @code{lsh-service}}); the UPower service extends the D-Bus
13217 service by passing it its @file{.service} specification, and extends the
13218 udev service by passing it device management rules (@pxref{Desktop
13219 Services, @code{upower-service}}); the Guix daemon service extends the
13220 Shepherd by passing it the command lines to start and stop the daemon,
13221 and extends the account service by passing it a list of required build
13222 user accounts (@pxref{Base Services}).
13223
13224 All in all, services and their ``extends'' relations form a directed
13225 acyclic graph (DAG). If we represent services as boxes and extensions
13226 as arrows, a typical system might provide something like this:
13227
13228 @image{images/service-graph,,5in,Typical service extension graph.}
13229
13230 @cindex system service
13231 At the bottom, we see the @dfn{system service}, which produces the
13232 directory containing everything to run and boot the system, as returned
13233 by the @command{guix system build} command. @xref{Service Reference},
13234 to learn about the other service types shown here.
13235 @xref{system-extension-graph, the @command{guix system extension-graph}
13236 command}, for information on how to generate this representation for a
13237 particular operating system definition.
13238
13239 @cindex service types
13240 Technically, developers can define @dfn{service types} to express these
13241 relations. There can be any number of services of a given type on the
13242 system---for instance, a system running two instances of the GNU secure
13243 shell server (lsh) has two instances of @var{lsh-service-type}, with
13244 different parameters.
13245
13246 The following section describes the programming interface for service
13247 types and services.
13248
13249 @node Service Types and Services
13250 @subsubsection Service Types and Services
13251
13252 A @dfn{service type} is a node in the DAG described above. Let us start
13253 with a simple example, the service type for the Guix build daemon
13254 (@pxref{Invoking guix-daemon}):
13255
13256 @example
13257 (define guix-service-type
13258 (service-type
13259 (name 'guix)
13260 (extensions
13261 (list (service-extension shepherd-root-service-type guix-shepherd-service)
13262 (service-extension account-service-type guix-accounts)
13263 (service-extension activation-service-type guix-activation)))))
13264 @end example
13265
13266 @noindent
13267 It defines two things:
13268
13269 @enumerate
13270 @item
13271 A name, whose sole purpose is to make inspection and debugging easier.
13272
13273 @item
13274 A list of @dfn{service extensions}, where each extension designates the
13275 target service type and a procedure that, given the parameters of the
13276 service, returns a list of objects to extend the service of that type.
13277
13278 Every service type has at least one service extension. The only
13279 exception is the @dfn{boot service type}, which is the ultimate service.
13280 @end enumerate
13281
13282 In this example, @var{guix-service-type} extends three services:
13283
13284 @table @var
13285 @item shepherd-root-service-type
13286 The @var{guix-shepherd-service} procedure defines how the Shepherd
13287 service is extended. Namely, it returns a @code{<shepherd-service>}
13288 object that defines how @command{guix-daemon} is started and stopped
13289 (@pxref{Shepherd Services}).
13290
13291 @item account-service-type
13292 This extension for this service is computed by @var{guix-accounts},
13293 which returns a list of @code{user-group} and @code{user-account}
13294 objects representing the build user accounts (@pxref{Invoking
13295 guix-daemon}).
13296
13297 @item activation-service-type
13298 Here @var{guix-activation} is a procedure that returns a gexp, which is
13299 a code snippet to run at ``activation time''---e.g., when the service is
13300 booted.
13301 @end table
13302
13303 A service of this type is instantiated like this:
13304
13305 @example
13306 (service guix-service-type
13307 (guix-configuration
13308 (build-accounts 5)
13309 (use-substitutes? #f)))
13310 @end example
13311
13312 The second argument to the @code{service} form is a value representing
13313 the parameters of this specific service instance.
13314 @xref{guix-configuration-type, @code{guix-configuration}}, for
13315 information about the @code{guix-configuration} data type.
13316
13317 @var{guix-service-type} is quite simple because it extends other
13318 services but is not extensible itself.
13319
13320 @c @subsubsubsection Extensible Service Types
13321
13322 The service type for an @emph{extensible} service looks like this:
13323
13324 @example
13325 (define udev-service-type
13326 (service-type (name 'udev)
13327 (extensions
13328 (list (service-extension shepherd-root-service-type
13329 udev-shepherd-service)))
13330
13331 (compose concatenate) ;concatenate the list of rules
13332 (extend (lambda (config rules)
13333 (match config
13334 (($ <udev-configuration> udev initial-rules)
13335 (udev-configuration
13336 (udev udev) ;the udev package to use
13337 (rules (append initial-rules rules)))))))))
13338 @end example
13339
13340 This is the service type for the
13341 @uref{https://wiki.gentoo.org/wiki/Project:Eudev, eudev device
13342 management daemon}. Compared to the previous example, in addition to an
13343 extension of @var{shepherd-root-service-type}, we see two new fields:
13344
13345 @table @code
13346 @item compose
13347 This is the procedure to @dfn{compose} the list of extensions to
13348 services of this type.
13349
13350 Services can extend the udev service by passing it lists of rules; we
13351 compose those extensions simply by concatenating them.
13352
13353 @item extend
13354 This procedure defines how the value of the service is @dfn{extended} with
13355 the composition of the extensions.
13356
13357 Udev extensions are composed into a list of rules, but the udev service
13358 value is itself a @code{<udev-configuration>} record. So here, we
13359 extend that record by appending the list of rules it contains to the
13360 list of contributed rules.
13361 @end table
13362
13363 There can be only one instance of an extensible service type such as
13364 @var{udev-service-type}. If there were more, the
13365 @code{service-extension} specifications would be ambiguous.
13366
13367 Still here? The next section provides a reference of the programming
13368 interface for services.
13369
13370 @node Service Reference
13371 @subsubsection Service Reference
13372
13373 We have seen an overview of service types (@pxref{Service Types and
13374 Services}). This section provides a reference on how to manipulate
13375 services and service types. This interface is provided by the
13376 @code{(gnu services)} module.
13377
13378 @deffn {Scheme Procedure} service @var{type} @var{value}
13379 Return a new service of @var{type}, a @code{<service-type>} object (see
13380 below.) @var{value} can be any object; it represents the parameters of
13381 this particular service instance.
13382 @end deffn
13383
13384 @deffn {Scheme Procedure} service? @var{obj}
13385 Return true if @var{obj} is a service.
13386 @end deffn
13387
13388 @deffn {Scheme Procedure} service-kind @var{service}
13389 Return the type of @var{service}---i.e., a @code{<service-type>} object.
13390 @end deffn
13391
13392 @deffn {Scheme Procedure} service-parameters @var{service}
13393 Return the value associated with @var{service}. It represents its
13394 parameters.
13395 @end deffn
13396
13397 Here is an example of how a service is created and manipulated:
13398
13399 @example
13400 (define s
13401 (service nginx-service-type
13402 (nginx-configuration
13403 (nginx nginx)
13404 (log-directory log-directory)
13405 (run-directory run-directory)
13406 (file config-file))))
13407
13408 (service? s)
13409 @result{} #t
13410
13411 (eq? (service-kind s) nginx-service-type)
13412 @result{} #t
13413 @end example
13414
13415 The @code{modify-services} form provides a handy way to change the
13416 parameters of some of the services of a list such as
13417 @var{%base-services} (@pxref{Base Services, @code{%base-services}}). It
13418 evaluates to a list of services. Of course, you could always use
13419 standard list combinators such as @code{map} and @code{fold} to do that
13420 (@pxref{SRFI-1, List Library,, guile, GNU Guile Reference Manual});
13421 @code{modify-services} simply provides a more concise form for this
13422 common pattern.
13423
13424 @deffn {Scheme Syntax} modify-services @var{services} @
13425 (@var{type} @var{variable} => @var{body}) @dots{}
13426
13427 Modify the services listed in @var{services} according to the given
13428 clauses. Each clause has the form:
13429
13430 @example
13431 (@var{type} @var{variable} => @var{body})
13432 @end example
13433
13434 where @var{type} is a service type---e.g.,
13435 @code{guix-service-type}---and @var{variable} is an identifier that is
13436 bound within the @var{body} to the service parameters---e.g., a
13437 @code{guix-configuration} instance---of the original service of that
13438 @var{type}.
13439
13440 The @var{body} should evaluate to the new service parameters, which will
13441 be used to configure the new service. This new service will replace the
13442 original in the resulting list. Because a service's service parameters
13443 are created using @code{define-record-type*}, you can write a succinct
13444 @var{body} that evaluates to the new service parameters by using the
13445 @code{inherit} feature that @code{define-record-type*} provides.
13446
13447 @xref{Using the Configuration System}, for example usage.
13448
13449 @end deffn
13450
13451 Next comes the programming interface for service types. This is
13452 something you want to know when writing new service definitions, but not
13453 necessarily when simply looking for ways to customize your
13454 @code{operating-system} declaration.
13455
13456 @deftp {Data Type} service-type
13457 @cindex service type
13458 This is the representation of a @dfn{service type} (@pxref{Service Types
13459 and Services}).
13460
13461 @table @asis
13462 @item @code{name}
13463 This is a symbol, used only to simplify inspection and debugging.
13464
13465 @item @code{extensions}
13466 A non-empty list of @code{<service-extension>} objects (see below).
13467
13468 @item @code{compose} (default: @code{#f})
13469 If this is @code{#f}, then the service type denotes services that cannot
13470 be extended---i.e., services that do not receive ``values'' from other
13471 services.
13472
13473 Otherwise, it must be a one-argument procedure. The procedure is called
13474 by @code{fold-services} and is passed a list of values collected from
13475 extensions. It must return a value that is a valid parameter value for
13476 the service instance.
13477
13478 @item @code{extend} (default: @code{#f})
13479 If this is @code{#f}, services of this type cannot be extended.
13480
13481 Otherwise, it must be a two-argument procedure: @code{fold-services}
13482 calls it, passing it the initial value of the service as the first argument
13483 and the result of applying @code{compose} to the extension values as the
13484 second argument.
13485 @end table
13486
13487 @xref{Service Types and Services}, for examples.
13488 @end deftp
13489
13490 @deffn {Scheme Procedure} service-extension @var{target-type} @
13491 @var{compute}
13492 Return a new extension for services of type @var{target-type}.
13493 @var{compute} must be a one-argument procedure: @code{fold-services}
13494 calls it, passing it the value associated with the service that provides
13495 the extension; it must return a valid value for the target service.
13496 @end deffn
13497
13498 @deffn {Scheme Procedure} service-extension? @var{obj}
13499 Return true if @var{obj} is a service extension.
13500 @end deffn
13501
13502 Occasionally, you might want to simply extend an existing service. This
13503 involves creating a new service type and specifying the extension of
13504 interest, which can be verbose; the @code{simple-service} procedure
13505 provides a shorthand for this.
13506
13507 @deffn {Scheme Procedure} simple-service @var{name} @var{target} @var{value}
13508 Return a service that extends @var{target} with @var{value}. This works
13509 by creating a singleton service type @var{name}, of which the returned
13510 service is an instance.
13511
13512 For example, this extends mcron (@pxref{Scheduled Job Execution}) with
13513 an additional job:
13514
13515 @example
13516 (simple-service 'my-mcron-job mcron-service-type
13517 #~(job '(next-hour (3)) "guix gc -F 2G"))
13518 @end example
13519 @end deffn
13520
13521 At the core of the service abstraction lies the @code{fold-services}
13522 procedure, which is responsible for ``compiling'' a list of services
13523 down to a single directory that contains everything needed to boot and
13524 run the system---the directory shown by the @command{guix system build}
13525 command (@pxref{Invoking guix system}). In essence, it propagates
13526 service extensions down the service graph, updating each node parameters
13527 on the way, until it reaches the root node.
13528
13529 @deffn {Scheme Procedure} fold-services @var{services} @
13530 [#:target-type @var{system-service-type}]
13531 Fold @var{services} by propagating their extensions down to the root of
13532 type @var{target-type}; return the root service adjusted accordingly.
13533 @end deffn
13534
13535 Lastly, the @code{(gnu services)} module also defines several essential
13536 service types, some of which are listed below.
13537
13538 @defvr {Scheme Variable} system-service-type
13539 This is the root of the service graph. It produces the system directory
13540 as returned by the @command{guix system build} command.
13541 @end defvr
13542
13543 @defvr {Scheme Variable} boot-service-type
13544 The type of the ``boot service'', which produces the @dfn{boot script}.
13545 The boot script is what the initial RAM disk runs when booting.
13546 @end defvr
13547
13548 @defvr {Scheme Variable} etc-service-type
13549 The type of the @file{/etc} service. This service can be extended by
13550 passing it name/file tuples such as:
13551
13552 @example
13553 (list `("issue" ,(plain-file "issue" "Welcome!\n")))
13554 @end example
13555
13556 In this example, the effect would be to add an @file{/etc/issue} file
13557 pointing to the given file.
13558 @end defvr
13559
13560 @defvr {Scheme Variable} setuid-program-service-type
13561 Type for the ``setuid-program service''. This service collects lists of
13562 executable file names, passed as gexps, and adds them to the set of
13563 setuid-root programs on the system (@pxref{Setuid Programs}).
13564 @end defvr
13565
13566 @defvr {Scheme Variable} profile-service-type
13567 Type of the service that populates the @dfn{system profile}---i.e., the
13568 programs under @file{/run/current-system/profile}. Other services can
13569 extend it by passing it lists of packages to add to the system profile.
13570 @end defvr
13571
13572
13573 @node Shepherd Services
13574 @subsubsection Shepherd Services
13575
13576 @cindex shepherd services
13577 @cindex PID 1
13578 @cindex init system
13579 The @code{(gnu services shepherd)} module provides a way to define
13580 services managed by the GNU@tie{}Shepherd, which is the GuixSD
13581 initialization system---the first process that is started when the
13582 system boots, also known as PID@tie{}1
13583 (@pxref{Introduction,,, shepherd, The GNU Shepherd Manual}).
13584
13585 Services in the Shepherd can depend on each other. For instance, the
13586 SSH daemon may need to be started after the syslog daemon has been
13587 started, which in turn can only happen once all the file systems have
13588 been mounted. The simple operating system defined earlier (@pxref{Using
13589 the Configuration System}) results in a service graph like this:
13590
13591 @image{images/shepherd-graph,,5in,Typical shepherd service graph.}
13592
13593 You can actually generate such a graph for any operating system
13594 definition using the @command{guix system shepherd-graph} command
13595 (@pxref{system-shepherd-graph, @command{guix system shepherd-graph}}).
13596
13597 The @var{%shepherd-root-service} is a service object representing
13598 PID@tie{}1, of type @var{shepherd-root-service-type}; it can be extended
13599 by passing it lists of @code{<shepherd-service>} objects.
13600
13601 @deftp {Data Type} shepherd-service
13602 The data type representing a service managed by the Shepherd.
13603
13604 @table @asis
13605 @item @code{provision}
13606 This is a list of symbols denoting what the service provides.
13607
13608 These are the names that may be passed to @command{herd start},
13609 @command{herd status}, and similar commands (@pxref{Invoking herd,,,
13610 shepherd, The GNU Shepherd Manual}). @xref{Slots of services, the
13611 @code{provides} slot,, shepherd, The GNU Shepherd Manual}, for details.
13612
13613 @item @code{requirements} (default: @code{'()})
13614 List of symbols denoting the Shepherd services this one depends on.
13615
13616 @item @code{respawn?} (default: @code{#t})
13617 Whether to restart the service when it stops, for instance when the
13618 underlying process dies.
13619
13620 @item @code{start}
13621 @itemx @code{stop} (default: @code{#~(const #f)})
13622 The @code{start} and @code{stop} fields refer to the Shepherd's
13623 facilities to start and stop processes (@pxref{Service De- and
13624 Constructors,,, shepherd, The GNU Shepherd Manual}). They are given as
13625 G-expressions that get expanded in the Shepherd configuration file
13626 (@pxref{G-Expressions}).
13627
13628 @item @code{documentation}
13629 A documentation string, as shown when running:
13630
13631 @example
13632 herd doc @var{service-name}
13633 @end example
13634
13635 where @var{service-name} is one of the symbols in @var{provision}
13636 (@pxref{Invoking herd,,, shepherd, The GNU Shepherd Manual}).
13637
13638 @item @code{modules} (default: @var{%default-modules})
13639 This is the list of modules that must be in scope when @code{start} and
13640 @code{stop} are evaluated.
13641
13642 @end table
13643 @end deftp
13644
13645 @defvr {Scheme Variable} shepherd-root-service-type
13646 The service type for the Shepherd ``root service''---i.e., PID@tie{}1.
13647
13648 This is the service type that extensions target when they want to create
13649 shepherd services (@pxref{Service Types and Services}, for an example).
13650 Each extension must pass a list of @code{<shepherd-service>}.
13651 @end defvr
13652
13653 @defvr {Scheme Variable} %shepherd-root-service
13654 This service represents PID@tie{}1.
13655 @end defvr
13656
13657
13658 @node Installing Debugging Files
13659 @section Installing Debugging Files
13660
13661 @cindex debugging files
13662 Program binaries, as produced by the GCC compilers for instance, are
13663 typically written in the ELF format, with a section containing
13664 @dfn{debugging information}. Debugging information is what allows the
13665 debugger, GDB, to map binary code to source code; it is required to
13666 debug a compiled program in good conditions.
13667
13668 The problem with debugging information is that is takes up a fair amount
13669 of disk space. For example, debugging information for the GNU C Library
13670 weighs in at more than 60 MiB. Thus, as a user, keeping all the
13671 debugging info of all the installed programs is usually not an option.
13672 Yet, space savings should not come at the cost of an impediment to
13673 debugging---especially in the GNU system, which should make it easier
13674 for users to exert their computing freedom (@pxref{GNU Distribution}).
13675
13676 Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a
13677 mechanism that allows users to get the best of both worlds: debugging
13678 information can be stripped from the binaries and stored in separate
13679 files. GDB is then able to load debugging information from those files,
13680 when they are available (@pxref{Separate Debug Files,,, gdb, Debugging
13681 with GDB}).
13682
13683 The GNU distribution takes advantage of this by storing debugging
13684 information in the @code{lib/debug} sub-directory of a separate package
13685 output unimaginatively called @code{debug} (@pxref{Packages with
13686 Multiple Outputs}). Users can choose to install the @code{debug} output
13687 of a package when they need it. For instance, the following command
13688 installs the debugging information for the GNU C Library and for GNU
13689 Guile:
13690
13691 @example
13692 guix package -i glibc:debug guile:debug
13693 @end example
13694
13695 GDB must then be told to look for debug files in the user's profile, by
13696 setting the @code{debug-file-directory} variable (consider setting it
13697 from the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with
13698 GDB}):
13699
13700 @example
13701 (gdb) set debug-file-directory ~/.guix-profile/lib/debug
13702 @end example
13703
13704 From there on, GDB will pick up debugging information from the
13705 @code{.debug} files under @file{~/.guix-profile/lib/debug}.
13706
13707 In addition, you will most likely want GDB to be able to show the source
13708 code being debugged. To do that, you will have to unpack the source
13709 code of the package of interest (obtained with @code{guix build
13710 --source}, @pxref{Invoking guix build}), and to point GDB to that source
13711 directory using the @code{directory} command (@pxref{Source Path,
13712 @code{directory},, gdb, Debugging with GDB}).
13713
13714 @c XXX: keep me up-to-date
13715 The @code{debug} output mechanism in Guix is implemented by the
13716 @code{gnu-build-system} (@pxref{Build Systems}). Currently, it is
13717 opt-in---debugging information is available only for the packages
13718 with definitions explicitly declaring a @code{debug} output. This may be
13719 changed to opt-out in the future if our build farm servers can handle
13720 the load. To check whether a package has a @code{debug} output, use
13721 @command{guix package --list-available} (@pxref{Invoking guix package}).
13722
13723
13724 @node Security Updates
13725 @section Security Updates
13726
13727 @cindex security updates
13728 @cindex security vulnerabilities
13729 Occasionally, important security vulnerabilities are discovered in software
13730 packages and must be patched. Guix developers try hard to keep track of
13731 known vulnerabilities and to apply fixes as soon as possible in the
13732 @code{master} branch of Guix (we do not yet provide a ``stable'' branch
13733 containing only security updates.) The @command{guix lint} tool helps
13734 developers find out about vulnerable versions of software packages in the
13735 distribution:
13736
13737 @smallexample
13738 $ guix lint -c cve
13739 gnu/packages/base.scm:652:2: glibc-2.21: probably vulnerable to CVE-2015-1781, CVE-2015-7547
13740 gnu/packages/gcc.scm:334:2: gcc-4.9.3: probably vulnerable to CVE-2015-5276
13741 gnu/packages/image.scm:312:2: openjpeg-2.1.0: probably vulnerable to CVE-2016-1923, CVE-2016-1924
13742 @dots{}
13743 @end smallexample
13744
13745 @xref{Invoking guix lint}, for more information.
13746
13747 @quotation Note
13748 As of version @value{VERSION}, the feature described below is considered
13749 ``beta''.
13750 @end quotation
13751
13752 Guix follows a functional
13753 package management discipline (@pxref{Introduction}), which implies
13754 that, when a package is changed, @emph{every package that depends on it}
13755 must be rebuilt. This can significantly slow down the deployment of
13756 fixes in core packages such as libc or Bash, since basically the whole
13757 distribution would need to be rebuilt. Using pre-built binaries helps
13758 (@pxref{Substitutes}), but deployment may still take more time than
13759 desired.
13760
13761 @cindex grafts
13762 To address this, Guix implements @dfn{grafts}, a mechanism that allows
13763 for fast deployment of critical updates without the costs associated
13764 with a whole-distribution rebuild. The idea is to rebuild only the
13765 package that needs to be patched, and then to ``graft'' it onto packages
13766 explicitly installed by the user and that were previously referring to
13767 the original package. The cost of grafting is typically very low, and
13768 order of magnitudes lower than a full rebuild of the dependency chain.
13769
13770 @cindex replacements of packages, for grafts
13771 For instance, suppose a security update needs to be applied to Bash.
13772 Guix developers will provide a package definition for the ``fixed''
13773 Bash, say @var{bash-fixed}, in the usual way (@pxref{Defining
13774 Packages}). Then, the original package definition is augmented with a
13775 @code{replacement} field pointing to the package containing the bug fix:
13776
13777 @example
13778 (define bash
13779 (package
13780 (name "bash")
13781 ;; @dots{}
13782 (replacement bash-fixed)))
13783 @end example
13784
13785 From there on, any package depending directly or indirectly on Bash---as
13786 reported by @command{guix gc --requisites} (@pxref{Invoking guix
13787 gc})---that is installed is automatically ``rewritten'' to refer to
13788 @var{bash-fixed} instead of @var{bash}. This grafting process takes
13789 time proportional to the size of the package, usually less than a
13790 minute for an ``average'' package on a recent machine. Grafting is
13791 recursive: when an indirect dependency requires grafting, then grafting
13792 ``propagates'' up to the package that the user is installing.
13793
13794 Currently, the length of the name and version of the graft and that of
13795 the package it replaces (@var{bash-fixed} and @var{bash} in the example
13796 above) must be equal. This restriction mostly comes from the fact that
13797 grafting works by patching files, including binary files, directly.
13798 Other restrictions may apply: for instance, when adding a graft to a
13799 package providing a shared library, the original shared library and its
13800 replacement must have the same @code{SONAME} and be binary-compatible.
13801
13802 The @option{--no-grafts} command-line option allows you to forcefully
13803 avoid grafting (@pxref{Common Build Options, @option{--no-grafts}}).
13804 Thus, the command:
13805
13806 @example
13807 guix build bash --no-grafts
13808 @end example
13809
13810 @noindent
13811 returns the store file name of the original Bash, whereas:
13812
13813 @example
13814 guix build bash
13815 @end example
13816
13817 @noindent
13818 returns the store file name of the ``fixed'', replacement Bash. This
13819 allows you to distinguish between the two variants of Bash.
13820
13821 To verify which Bash your whole profile refers to, you can run
13822 (@pxref{Invoking guix gc}):
13823
13824 @example
13825 guix gc -R `readlink -f ~/.guix-profile` | grep bash
13826 @end example
13827
13828 @noindent
13829 @dots{} and compare the store file names that you get with those above.
13830 Likewise for a complete GuixSD system generation:
13831
13832 @example
13833 guix gc -R `guix system build my-config.scm` | grep bash
13834 @end example
13835
13836 Lastly, to check which Bash running processes are using, you can use the
13837 @command{lsof} command:
13838
13839 @example
13840 lsof | grep /gnu/store/.*bash
13841 @end example
13842
13843
13844 @node Package Modules
13845 @section Package Modules
13846
13847 From a programming viewpoint, the package definitions of the
13848 GNU distribution are provided by Guile modules in the @code{(gnu packages
13849 @dots{})} name space@footnote{Note that packages under the @code{(gnu
13850 packages @dots{})} module name space are not necessarily ``GNU
13851 packages''. This module naming scheme follows the usual Guile module
13852 naming convention: @code{gnu} means that these modules are distributed
13853 as part of the GNU system, and @code{packages} identifies modules that
13854 define packages.} (@pxref{Modules, Guile modules,, guile, GNU Guile
13855 Reference Manual}). For instance, the @code{(gnu packages emacs)}
13856 module exports a variable named @code{emacs}, which is bound to a
13857 @code{<package>} object (@pxref{Defining Packages}).
13858
13859 The @code{(gnu packages @dots{})} module name space is
13860 automatically scanned for packages by the command-line tools. For
13861 instance, when running @code{guix package -i emacs}, all the @code{(gnu
13862 packages @dots{})} modules are scanned until one that exports a package
13863 object whose name is @code{emacs} is found. This package search
13864 facility is implemented in the @code{(gnu packages)} module.
13865
13866 @cindex customization, of packages
13867 @cindex package module search path
13868 Users can store package definitions in modules with different
13869 names---e.g., @code{(my-packages emacs)}@footnote{Note that the file
13870 name and module name must match. For instance, the @code{(my-packages
13871 emacs)} module must be stored in a @file{my-packages/emacs.scm} file
13872 relative to the load path specified with @option{--load-path} or
13873 @code{GUIX_PACKAGE_PATH}. @xref{Modules and the File System,,,
13874 guile, GNU Guile Reference Manual}, for details.}. These package definitions
13875 will not be visible by default. Users can invoke commands such as
13876 @command{guix package} and @command{guix build} with the
13877 @code{-e} option so that they know where to find the package. Better
13878 yet, they can use the
13879 @code{-L} option of these commands to make those modules visible
13880 (@pxref{Invoking guix build, @code{--load-path}}), or define the
13881 @code{GUIX_PACKAGE_PATH} environment variable. This environment
13882 variable makes it easy to extend or customize the distribution and is
13883 honored by all the user interfaces.
13884
13885 @defvr {Environment Variable} GUIX_PACKAGE_PATH
13886 This is a colon-separated list of directories to search for additional
13887 package modules. Directories listed in this variable take precedence
13888 over the own modules of the distribution.
13889 @end defvr
13890
13891 The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}:
13892 each package is built based solely on other packages in the
13893 distribution. The root of this dependency graph is a small set of
13894 @dfn{bootstrap binaries}, provided by the @code{(gnu packages
13895 bootstrap)} module. For more information on bootstrapping,
13896 @pxref{Bootstrapping}.
13897
13898 @node Packaging Guidelines
13899 @section Packaging Guidelines
13900
13901 @cindex packages, creating
13902 The GNU distribution is nascent and may well lack some of your favorite
13903 packages. This section describes how you can help make the distribution
13904 grow. @xref{Contributing}, for additional information on how you can
13905 help.
13906
13907 Free software packages are usually distributed in the form of
13908 @dfn{source code tarballs}---typically @file{tar.gz} files that contain
13909 all the source files. Adding a package to the distribution means
13910 essentially two things: adding a @dfn{recipe} that describes how to
13911 build the package, including a list of other packages required to build
13912 it, and adding @dfn{package metadata} along with that recipe, such as a
13913 description and licensing information.
13914
13915 In Guix all this information is embodied in @dfn{package definitions}.
13916 Package definitions provide a high-level view of the package. They are
13917 written using the syntax of the Scheme programming language; in fact,
13918 for each package we define a variable bound to the package definition,
13919 and export that variable from a module (@pxref{Package Modules}).
13920 However, in-depth Scheme knowledge is @emph{not} a prerequisite for
13921 creating packages. For more information on package definitions,
13922 @pxref{Defining Packages}.
13923
13924 Once a package definition is in place, stored in a file in the Guix
13925 source tree, it can be tested using the @command{guix build} command
13926 (@pxref{Invoking guix build}). For example, assuming the new package is
13927 called @code{gnew}, you may run this command from the Guix build tree
13928 (@pxref{Running Guix Before It Is Installed}):
13929
13930 @example
13931 ./pre-inst-env guix build gnew --keep-failed
13932 @end example
13933
13934 Using @code{--keep-failed} makes it easier to debug build failures since
13935 it provides access to the failed build tree. Another useful
13936 command-line option when debugging is @code{--log-file}, to access the
13937 build log.
13938
13939 If the package is unknown to the @command{guix} command, it may be that
13940 the source file contains a syntax error, or lacks a @code{define-public}
13941 clause to export the package variable. To figure it out, you may load
13942 the module from Guile to get more information about the actual error:
13943
13944 @example
13945 ./pre-inst-env guile -c '(use-modules (gnu packages gnew))'
13946 @end example
13947
13948 Once your package builds correctly, please send us a patch
13949 (@pxref{Contributing}). Well, if you need help, we will be happy to
13950 help you too. Once the patch is committed in the Guix repository, the
13951 new package automatically gets built on the supported platforms by
13952 @url{http://hydra.gnu.org/jobset/gnu/master, our continuous integration
13953 system}.
13954
13955 @cindex substituter
13956 Users can obtain the new package definition simply by running
13957 @command{guix pull} (@pxref{Invoking guix pull}). When
13958 @code{hydra.gnu.org} is done building the package, installing the
13959 package automatically downloads binaries from there
13960 (@pxref{Substitutes}). The only place where human intervention is
13961 needed is to review and apply the patch.
13962
13963
13964 @menu
13965 * Software Freedom:: What may go into the distribution.
13966 * Package Naming:: What's in a name?
13967 * Version Numbers:: When the name is not enough.
13968 * Synopses and Descriptions:: Helping users find the right package.
13969 * Python Modules:: Taming the snake.
13970 * Perl Modules:: Little pearls.
13971 * Java Packages:: Coffee break.
13972 * Fonts:: Fond of fonts.
13973 @end menu
13974
13975 @node Software Freedom
13976 @subsection Software Freedom
13977
13978 @c Adapted from http://www.gnu.org/philosophy/philosophy.html.
13979 @cindex free software
13980 The GNU operating system has been developed so that users can have
13981 freedom in their computing. GNU is @dfn{free software}, meaning that
13982 users have the @url{http://www.gnu.org/philosophy/free-sw.html,four
13983 essential freedoms}: to run the program, to study and change the program
13984 in source code form, to redistribute exact copies, and to distribute
13985 modified versions. Packages found in the GNU distribution provide only
13986 software that conveys these four freedoms.
13987
13988 In addition, the GNU distribution follow the
13989 @url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free
13990 software distribution guidelines}. Among other things, these guidelines
13991 reject non-free firmware, recommendations of non-free software, and
13992 discuss ways to deal with trademarks and patents.
13993
13994 Some otherwise free upstream package sources contain a small and optional
13995 subset that violates the above guidelines, for instance because this subset
13996 is itself non-free code. When that happens, the offending items are removed
13997 with appropriate patches or code snippets in the @code{origin} form of the
13998 package (@pxref{Defining Packages}). This way, @code{guix
13999 build --source} returns the ``freed'' source rather than the unmodified
14000 upstream source.
14001
14002
14003 @node Package Naming
14004 @subsection Package Naming
14005
14006 @cindex package name
14007 A package has actually two names associated with it:
14008 First, there is the name of the @emph{Scheme variable}, the one following
14009 @code{define-public}. By this name, the package can be made known in the
14010 Scheme code, for instance as input to another package. Second, there is
14011 the string in the @code{name} field of a package definition. This name
14012 is used by package management commands such as
14013 @command{guix package} and @command{guix build}.
14014
14015 Both are usually the same and correspond to the lowercase conversion of
14016 the project name chosen upstream, with underscores replaced with
14017 hyphens. For instance, GNUnet is available as @code{gnunet}, and
14018 SDL_net as @code{sdl-net}.
14019
14020 We do not add @code{lib} prefixes for library packages, unless these are
14021 already part of the official project name. But @pxref{Python
14022 Modules} and @ref{Perl Modules} for special rules concerning modules for
14023 the Python and Perl languages.
14024
14025 Font package names are handled differently, @pxref{Fonts}.
14026
14027
14028 @node Version Numbers
14029 @subsection Version Numbers
14030
14031 @cindex package version
14032 We usually package only the latest version of a given free software
14033 project. But sometimes, for instance for incompatible library versions,
14034 two (or more) versions of the same package are needed. These require
14035 different Scheme variable names. We use the name as defined
14036 in @ref{Package Naming}
14037 for the most recent version; previous versions use the same name, suffixed
14038 by @code{-} and the smallest prefix of the version number that may
14039 distinguish the two versions.
14040
14041 The name inside the package definition is the same for all versions of a
14042 package and does not contain any version number.
14043
14044 For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as follows:
14045
14046 @example
14047 (define-public gtk+
14048 (package
14049 (name "gtk+")
14050 (version "3.9.12")
14051 ...))
14052 (define-public gtk+-2
14053 (package
14054 (name "gtk+")
14055 (version "2.24.20")
14056 ...))
14057 @end example
14058 If we also wanted GTK+ 3.8.2, this would be packaged as
14059 @example
14060 (define-public gtk+-3.8
14061 (package
14062 (name "gtk+")
14063 (version "3.8.2")
14064 ...))
14065 @end example
14066
14067 @c See <https://lists.gnu.org/archive/html/guix-devel/2016-01/msg00425.html>,
14068 @c for a discussion of what follows.
14069 @cindex version number, for VCS snapshots
14070 Occasionally, we package snapshots of upstream's version control system
14071 (VCS) instead of formal releases. This should remain exceptional,
14072 because it is up to upstream developers to clarify what the stable
14073 release is. Yet, it is sometimes necessary. So, what should we put in
14074 the @code{version} field?
14075
14076 Clearly, we need to make the commit identifier of the VCS snapshot
14077 visible in the version string, but we also need to make sure that the
14078 version string is monotonically increasing so that @command{guix package
14079 --upgrade} can determine which version is newer. Since commit
14080 identifiers, notably with Git, are not monotonically increasing, we add
14081 a revision number that we increase each time we upgrade to a newer
14082 snapshot. The resulting version string looks like this:
14083
14084 @example
14085 2.0.11-3.cabba9e
14086 ^ ^ ^
14087 | | `-- upstream commit ID
14088 | |
14089 | `--- Guix package revision
14090 |
14091 latest upstream version
14092 @end example
14093
14094 It is a good idea to strip commit identifiers in the @code{version}
14095 field to, say, 7 digits. It avoids an aesthetic annoyance (assuming
14096 aesthetics have a role to play here) as well as problems related to OS
14097 limits such as the maximum shebang length (127 bytes for the Linux
14098 kernel.) It is best to use the full commit identifiers in
14099 @code{origin}s, though, to avoid ambiguities. A typical package
14100 definition may look like this:
14101
14102 @example
14103 (define my-package
14104 (let ((commit "c3f29bc928d5900971f65965feaae59e1272a3f7")
14105 (revision "1")) ;Guix package revision
14106 (package
14107 (version (string-append "0.9-" revision "."
14108 (string-take commit 7)))
14109 (source (origin
14110 (method git-fetch)
14111 (uri (git-reference
14112 (url "git://example.org/my-package.git")
14113 (commit commit)))
14114 (sha256 (base32 "1mbikn@dots{}"))
14115 (file-name (string-append "my-package-" version
14116 "-checkout"))))
14117 ;; @dots{}
14118 )))
14119 @end example
14120
14121 @node Synopses and Descriptions
14122 @subsection Synopses and Descriptions
14123
14124 @cindex package description
14125 @cindex package synopsis
14126 As we have seen before, each package in GNU@tie{}Guix includes a
14127 synopsis and a description (@pxref{Defining Packages}). Synopses and
14128 descriptions are important: They are what @command{guix package
14129 --search} searches, and a crucial piece of information to help users
14130 determine whether a given package suits their needs. Consequently,
14131 packagers should pay attention to what goes into them.
14132
14133 Synopses must start with a capital letter and must not end with a
14134 period. They must not start with ``a'' or ``the'', which usually does
14135 not bring anything; for instance, prefer ``File-frobbing tool'' over ``A
14136 tool that frobs files''. The synopsis should say what the package
14137 is---e.g., ``Core GNU utilities (file, text, shell)''---or what it is
14138 used for---e.g., the synopsis for GNU@tie{}grep is ``Print lines
14139 matching a pattern''.
14140
14141 Keep in mind that the synopsis must be meaningful for a very wide
14142 audience. For example, ``Manipulate alignments in the SAM format''
14143 might make sense for a seasoned bioinformatics researcher, but might be
14144 fairly unhelpful or even misleading to a non-specialized audience. It
14145 is a good idea to come up with a synopsis that gives an idea of the
14146 application domain of the package. In this example, this might give
14147 something like ``Manipulate nucleotide sequence alignments'', which
14148 hopefully gives the user a better idea of whether this is what they are
14149 looking for.
14150
14151 Descriptions should take between five and ten lines. Use full
14152 sentences, and avoid using acronyms without first introducing them.
14153 Please avoid marketing phrases such as ``world-leading'',
14154 ``industrial-strength'', and ``next-generation'', and avoid superlatives
14155 like ``the most advanced''---they are not helpful to users looking for a
14156 package and may even sound suspicious. Instead, try to be factual,
14157 mentioning use cases and features.
14158
14159 @cindex Texinfo markup, in package descriptions
14160 Descriptions can include Texinfo markup, which is useful to introduce
14161 ornaments such as @code{@@code} or @code{@@dfn}, bullet lists, or
14162 hyperlinks (@pxref{Overview,,, texinfo, GNU Texinfo}). However you
14163 should be careful when using some characters for example @samp{@@} and
14164 curly braces which are the basic special characters in Texinfo
14165 (@pxref{Special Characters,,, texinfo, GNU Texinfo}). User interfaces
14166 such as @command{guix package --show} take care of rendering it
14167 appropriately.
14168
14169 Synopses and descriptions are translated by volunteers
14170 @uref{http://translationproject.org/domain/guix-packages.html, at the
14171 Translation Project} so that as many users as possible can read them in
14172 their native language. User interfaces search them and display them in
14173 the language specified by the current locale.
14174
14175 Translation is a lot of work so, as a packager, please pay even more
14176 attention to your synopses and descriptions as every change may entail
14177 additional work for translators. In order to help them, it is possible
14178 to make recommendations or instructions visible to them by inserting
14179 special comments like this (@pxref{xgettext Invocation,,, gettext, GNU
14180 Gettext}):
14181
14182 @example
14183 ;; TRANSLATORS: "X11 resize-and-rotate" should not be translated.
14184 (description "ARandR is designed to provide a simple visual front end
14185 for the X11 resize-and-rotate (RandR) extension. @dots{}")
14186 @end example
14187
14188
14189 @node Python Modules
14190 @subsection Python Modules
14191
14192 @cindex python
14193 We currently package Python 2 and Python 3, under the Scheme variable names
14194 @code{python-2} and @code{python} as explained in @ref{Version Numbers}.
14195 To avoid confusion and naming clashes with other programming languages, it
14196 seems desirable that the name of a package for a Python module contains
14197 the word @code{python}.
14198
14199 Some modules are compatible with only one version of Python, others with both.
14200 If the package Foo compiles only with Python 3, we name it
14201 @code{python-foo}; if it compiles only with Python 2, we name it
14202 @code{python2-foo}. If it is compatible with both versions, we create two
14203 packages with the corresponding names.
14204
14205 If a project already contains the word @code{python}, we drop this;
14206 for instance, the module python-dateutil is packaged under the names
14207 @code{python-dateutil} and @code{python2-dateutil}. If the project name
14208 starts with @code{py} (e.g. @code{pytz}), we keep it and prefix it as
14209 described above.
14210
14211 @subsubsection Specifying Dependencies
14212 @cindex inputs, for Python packages
14213
14214 Dependency information for Python packages is usually available in the
14215 package source tree, with varying degrees of accuracy: in the
14216 @file{setup.py} file, in @file{requirements.txt}, or in @file{tox.ini}.
14217
14218 Your mission, when writing a recipe for a Python package, is to map
14219 these dependencies to the appropriate type of ``input'' (@pxref{package
14220 Reference, inputs}). Although the @code{pypi} importer normally does a
14221 good job (@pxref{Invoking guix import}), you may want to check the
14222 following check list to determine which dependency goes where.
14223
14224 @itemize
14225
14226 @item
14227 We currently package Python 2 with @code{setuptools} and @code{pip}
14228 installed like Python 3.4 has per default. Thus you don't need to
14229 specify either of these as an input. @command{guix lint} will warn you
14230 if you do.
14231
14232 @item
14233 Python dependencies required at run time go into
14234 @code{propagated-inputs}. They are typically defined with the
14235 @code{install_requires} keyword in @file{setup.py}, or in the
14236 @file{requirements.txt} file.
14237
14238 @item
14239 Python packages required only at build time---e.g., those listed with
14240 the @code{setup_requires} keyword in @file{setup.py}---or only for
14241 testing---e.g., those in @code{tests_require}---go into
14242 @code{native-inputs}. The rationale is that (1) they do not need to be
14243 propagated because they are not needed at run time, and (2) in a
14244 cross-compilation context, it's the ``native'' input that we'd want.
14245
14246 Examples are the @code{pytest}, @code{mock}, and @code{nose} test
14247 frameworks. Of course if any of these packages is also required at
14248 run-time, it needs to go to @code{propagated-inputs}.
14249
14250 @item
14251 Anything that does not fall in the previous categories goes to
14252 @code{inputs}, for example programs or C libraries required for building
14253 Python packages containing C extensions.
14254
14255 @item
14256 If a Python package has optional dependencies (@code{extras_require}),
14257 it is up to you to decide whether to add them or not, based on their
14258 usefulness/overhead ratio (@pxref{Submitting Patches, @command{guix
14259 size}}).
14260
14261 @end itemize
14262
14263
14264 @node Perl Modules
14265 @subsection Perl Modules
14266
14267 @cindex perl
14268 Perl programs standing for themselves are named as any other package,
14269 using the lowercase upstream name.
14270 For Perl packages containing a single class, we use the lowercase class name,
14271 replace all occurrences of @code{::} by dashes and prepend the prefix
14272 @code{perl-}.
14273 So the class @code{XML::Parser} becomes @code{perl-xml-parser}.
14274 Modules containing several classes keep their lowercase upstream name and
14275 are also prepended by @code{perl-}. Such modules tend to have the word
14276 @code{perl} somewhere in their name, which gets dropped in favor of the
14277 prefix. For instance, @code{libwww-perl} becomes @code{perl-libwww}.
14278
14279
14280 @node Java Packages
14281 @subsection Java Packages
14282
14283 @cindex java
14284 Java programs standing for themselves are named as any other package,
14285 using the lowercase upstream name.
14286
14287 To avoid confusion and naming clashes with other programming languages,
14288 it is desirable that the name of a package for a Java package is
14289 prefixed with @code{java-}. If a project already contains the word
14290 @code{java}, we drop this; for instance, the package @code{ngsjava} is
14291 packaged under the name @code{java-ngs}.
14292
14293 For Java packages containing a single class or a small class hierarchy,
14294 we use the lowercase class name, replace all occurrences of @code{.} by
14295 dashes and prepend the prefix @code{java-}. So the class
14296 @code{apache.commons.cli} becomes package
14297 @code{java-apache-commons-cli}.
14298
14299
14300 @node Fonts
14301 @subsection Fonts
14302
14303 @cindex fonts
14304 For fonts that are in general not installed by a user for typesetting
14305 purposes, or that are distributed as part of a larger software package,
14306 we rely on the general packaging rules for software; for instance, this
14307 applies to the fonts delivered as part of the X.Org system or fonts that
14308 are part of TeX Live.
14309
14310 To make it easier for a user to search for fonts, names for other packages
14311 containing only fonts are constructed as follows, independently of the
14312 upstream package name.
14313
14314 The name of a package containing only one font family starts with
14315 @code{font-}; it is followed by the foundry name and a dash @code{-}
14316 if the foundry is known, and the font family name, in which spaces are
14317 replaced by dashes (and as usual, all upper case letters are transformed
14318 to lower case).
14319 For example, the Gentium font family by SIL is packaged under the name
14320 @code{font-sil-gentium}.
14321
14322 For a package containing several font families, the name of the collection
14323 is used in the place of the font family name.
14324 For instance, the Liberation fonts consist of three families,
14325 Liberation Sans, Liberation Serif and Liberation Mono.
14326 These could be packaged separately under the names
14327 @code{font-liberation-sans} and so on; but as they are distributed together
14328 under a common name, we prefer to package them together as
14329 @code{font-liberation}.
14330
14331 In the case where several formats of the same font family or font collection
14332 are packaged separately, a short form of the format, prepended by a dash,
14333 is added to the package name. We use @code{-ttf} for TrueType fonts,
14334 @code{-otf} for OpenType fonts and @code{-type1} for PostScript Type 1
14335 fonts.
14336
14337
14338
14339 @node Bootstrapping
14340 @section Bootstrapping
14341
14342 @c Adapted from the ELS 2013 paper.
14343
14344 @cindex bootstrapping
14345
14346 Bootstrapping in our context refers to how the distribution gets built
14347 ``from nothing''. Remember that the build environment of a derivation
14348 contains nothing but its declared inputs (@pxref{Introduction}). So
14349 there's an obvious chicken-and-egg problem: how does the first package
14350 get built? How does the first compiler get compiled? Note that this is
14351 a question of interest only to the curious hacker, not to the regular
14352 user, so you can shamelessly skip this section if you consider yourself
14353 a ``regular user''.
14354
14355 @cindex bootstrap binaries
14356 The GNU system is primarily made of C code, with libc at its core. The
14357 GNU build system itself assumes the availability of a Bourne shell and
14358 command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
14359 `grep'. Furthermore, build programs---programs that run
14360 @code{./configure}, @code{make}, etc.---are written in Guile Scheme
14361 (@pxref{Derivations}). Consequently, to be able to build anything at
14362 all, from scratch, Guix relies on pre-built binaries of Guile, GCC,
14363 Binutils, libc, and the other packages mentioned above---the
14364 @dfn{bootstrap binaries}.
14365
14366 These bootstrap binaries are ``taken for granted'', though we can also
14367 re-create them if needed (more on that later).
14368
14369 @unnumberedsubsec Preparing to Use the Bootstrap Binaries
14370
14371 @c As of Emacs 24.3, Info-mode displays the image, but since it's a
14372 @c large image, it's hard to scroll. Oh well.
14373 @image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap derivations}
14374
14375 The figure above shows the very beginning of the dependency graph of the
14376 distribution, corresponding to the package definitions of the @code{(gnu
14377 packages bootstrap)} module. A similar figure can be generated with
14378 @command{guix graph} (@pxref{Invoking guix graph}), along the lines of:
14379
14380 @example
14381 guix graph -t derivation \
14382 -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
14383 | dot -Tps > t.ps
14384 @end example
14385
14386 At this level of detail, things are
14387 slightly complex. First, Guile itself consists of an ELF executable,
14388 along with many source and compiled Scheme files that are dynamically
14389 loaded when it runs. This gets stored in the @file{guile-2.0.7.tar.xz}
14390 tarball shown in this graph. This tarball is part of Guix's ``source''
14391 distribution, and gets inserted into the store with @code{add-to-store}
14392 (@pxref{The Store}).
14393
14394 But how do we write a derivation that unpacks this tarball and adds it
14395 to the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
14396 derivation---the first one that gets built---uses @code{bash} as its
14397 builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
14398 @code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar},
14399 @file{xz}, and @file{mkdir} are statically-linked binaries, also part of
14400 the Guix source distribution, whose sole purpose is to allow the Guile
14401 tarball to be unpacked.
14402
14403 Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning
14404 Guile that can be used to run subsequent build programs. Its first task
14405 is to download tarballs containing the other pre-built binaries---this
14406 is what the @code{.tar.xz.drv} derivations do. Guix modules such as
14407 @code{ftp-client.scm} are used for this purpose. The
14408 @code{module-import.drv} derivations import those modules in a directory
14409 in the store, using the original layout. The
14410 @code{module-import-compiled.drv} derivations compile those modules, and
14411 write them in an output directory with the right layout. This
14412 corresponds to the @code{#:modules} argument of
14413 @code{build-expression->derivation} (@pxref{Derivations}).
14414
14415 Finally, the various tarballs are unpacked by the
14416 derivations @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv},
14417 etc., at which point we have a working C tool chain.
14418
14419
14420 @unnumberedsubsec Building the Build Tools
14421
14422 Bootstrapping is complete when we have a full tool chain that does not
14423 depend on the pre-built bootstrap tools discussed above. This
14424 no-dependency requirement is verified by checking whether the files of
14425 the final tool chain contain references to the @file{/gnu/store}
14426 directories of the bootstrap inputs. The process that leads to this
14427 ``final'' tool chain is described by the package definitions found in
14428 the @code{(gnu packages commencement)} module.
14429
14430 The @command{guix graph} command allows us to ``zoom out'' compared to
14431 the graph above, by looking at the level of package objects instead of
14432 individual derivations---remember that a package may translate to
14433 several derivations, typically one derivation to download its source,
14434 one to build the Guile modules it needs, and one to actually build the
14435 package from source. The command:
14436
14437 @example
14438 guix graph -t bag \
14439 -e '(@@@@ (gnu packages commencement)
14440 glibc-final-with-bootstrap-bash)' | dot -Tps > t.ps
14441 @end example
14442
14443 @noindent
14444 produces the dependency graph leading to the ``final'' C
14445 library@footnote{You may notice the @code{glibc-intermediate} label,
14446 suggesting that it is not @emph{quite} final, but as a good
14447 approximation, we will consider it final.}, depicted below.
14448
14449 @image{images/bootstrap-packages,6in,,Dependency graph of the early packages}
14450
14451 @c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
14452 The first tool that gets built with the bootstrap binaries is
14453 GNU@tie{}Make---noted @code{make-boot0} above---which is a prerequisite
14454 for all the following packages. From there Findutils and Diffutils get
14455 built.
14456
14457 Then come the first-stage Binutils and GCC, built as pseudo cross
14458 tools---i.e., with @code{--target} equal to @code{--host}. They are
14459 used to build libc. Thanks to this cross-build trick, this libc is
14460 guaranteed not to hold any reference to the initial tool chain.
14461
14462 From there the final Binutils and GCC (not shown above) are built.
14463 GCC uses @code{ld}
14464 from the final Binutils, and links programs against the just-built libc.
14465 This tool chain is used to build the other packages used by Guix and by
14466 the GNU Build System: Guile, Bash, Coreutils, etc.
14467
14468 And voilà! At this point we have the complete set of build tools that
14469 the GNU Build System expects. These are in the @code{%final-inputs}
14470 variable of the @code{(gnu packages commencement)} module, and are
14471 implicitly used by any package that uses @code{gnu-build-system}
14472 (@pxref{Build Systems, @code{gnu-build-system}}).
14473
14474
14475 @unnumberedsubsec Building the Bootstrap Binaries
14476
14477 @cindex bootstrap binaries
14478 Because the final tool chain does not depend on the bootstrap binaries,
14479 those rarely need to be updated. Nevertheless, it is useful to have an
14480 automated way to produce them, should an update occur, and this is what
14481 the @code{(gnu packages make-bootstrap)} module provides.
14482
14483 The following command builds the tarballs containing the bootstrap
14484 binaries (Guile, Binutils, GCC, libc, and a tarball containing a mixture
14485 of Coreutils and other basic command-line tools):
14486
14487 @example
14488 guix build bootstrap-tarballs
14489 @end example
14490
14491 The generated tarballs are those that should be referred to in the
14492 @code{(gnu packages bootstrap)} module mentioned at the beginning of
14493 this section.
14494
14495 Still here? Then perhaps by now you've started to wonder: when do we
14496 reach a fixed point? That is an interesting question! The answer is
14497 unknown, but if you would like to investigate further (and have
14498 significant computational and storage resources to do so), then let us
14499 know.
14500
14501 @node Porting
14502 @section Porting to a New Platform
14503
14504 As discussed above, the GNU distribution is self-contained, and
14505 self-containment is achieved by relying on pre-built ``bootstrap
14506 binaries'' (@pxref{Bootstrapping}). These binaries are specific to an
14507 operating system kernel, CPU architecture, and application binary
14508 interface (ABI). Thus, to port the distribution to a platform that is
14509 not yet supported, one must build those bootstrap binaries, and update
14510 the @code{(gnu packages bootstrap)} module to use them on that platform.
14511
14512 Fortunately, Guix can @emph{cross compile} those bootstrap binaries.
14513 When everything goes well, and assuming the GNU tool chain supports the
14514 target platform, this can be as simple as running a command like this
14515 one:
14516
14517 @example
14518 guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
14519 @end example
14520
14521 For this to work, the @code{glibc-dynamic-linker} procedure in
14522 @code{(gnu packages bootstrap)} must be augmented to return the right
14523 file name for libc's dynamic linker on that platform; likewise,
14524 @code{system->linux-architecture} in @code{(gnu packages linux)} must be
14525 taught about the new platform.
14526
14527 Once these are built, the @code{(gnu packages bootstrap)} module needs
14528 to be updated to refer to these binaries on the target platform. That
14529 is, the hashes and URLs of the bootstrap tarballs for the new platform
14530 must be added alongside those of the currently supported platforms. The
14531 bootstrap Guile tarball is treated specially: it is expected to be
14532 available locally, and @file{gnu/local.mk} has rules do download it for
14533 the supported architectures; a rule for the new platform must be added
14534 as well.
14535
14536 In practice, there may be some complications. First, it may be that the
14537 extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
14538 above) is not recognized by all the GNU tools. Typically, glibc
14539 recognizes some of these, whereas GCC uses an extra @code{--with-abi}
14540 configure flag (see @code{gcc.scm} for examples of how to handle this).
14541 Second, some of the required packages could fail to build for that
14542 platform. Lastly, the generated binaries could be broken for some
14543 reason.
14544
14545 @c *********************************************************************
14546 @include contributing.texi
14547
14548 @c *********************************************************************
14549 @node Acknowledgments
14550 @chapter Acknowledgments
14551
14552 Guix is based on the @uref{http://nixos.org/nix/, Nix package manager},
14553 which was designed and
14554 implemented by Eelco Dolstra, with contributions from other people (see
14555 the @file{nix/AUTHORS} file in Guix.) Nix pioneered functional package
14556 management, and promoted unprecedented features, such as transactional
14557 package upgrades and rollbacks, per-user profiles, and referentially
14558 transparent build processes. Without this work, Guix would not exist.
14559
14560 The Nix-based software distributions, Nixpkgs and NixOS, have also been
14561 an inspiration for Guix.
14562
14563 GNU@tie{}Guix itself is a collective work with contributions from a
14564 number of people. See the @file{AUTHORS} file in Guix for more
14565 information on these fine people. The @file{THANKS} file lists people
14566 who have helped by reporting bugs, taking care of the infrastructure,
14567 providing artwork and themes, making suggestions, and more---thank you!
14568
14569
14570 @c *********************************************************************
14571 @node GNU Free Documentation License
14572 @appendix GNU Free Documentation License
14573 @cindex license, GNU Free Documentation License
14574 @include fdl-1.3.texi
14575
14576 @c *********************************************************************
14577 @node Concept Index
14578 @unnumbered Concept Index
14579 @printindex cp
14580
14581 @node Programming Index
14582 @unnumbered Programming Index
14583 @syncodeindex tp fn
14584 @syncodeindex vr fn
14585 @printindex fn
14586
14587 @bye
14588
14589 @c Local Variables:
14590 @c ispell-local-dictionary: "american";
14591 @c End: