offload: Add "test" sub-command.
[guix.git] / doc / guix.texi
blob4d7f96d9077999a0e094763f566877e67a6fd509
1 \input texinfo
2 @c -*-texinfo-*-
4 @c %**start of header
5 @setfilename guix.info
6 @documentencoding UTF-8
7 @settitle GNU Guix Reference Manual
8 @c %**end of header
10 @include version.texi
12 @c Identifier of the OpenPGP key used to sign tarballs and such.
13 @set OPENPGP-SIGNING-KEY-ID 3CE464558A84FDC69DB40CFB090B11993D9AEBB5
15 @copying
16 Copyright @copyright{} 2012, 2013, 2014, 2015, 2016 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
33 Permission is granted to copy, distribute and/or modify this document
34 under the terms of the GNU Free Documentation License, Version 1.3 or
35 any later version published by the Free Software Foundation; with no
36 Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  A
37 copy of the license is included in the section entitled ``GNU Free
38 Documentation License''.
39 @end copying
41 @dircategory System administration
42 @direntry
43 * Guix: (guix).       Manage installed software and system configuration.
44 * guix package: (guix)Invoking guix package.  Installing, removing, and upgrading packages.
45 * guix build: (guix)Invoking guix build.      Building packages.
46 * guix gc: (guix)Invoking guix gc.            Reclaiming unused disk space.
47 * guix pull: (guix)Invoking guix pull.        Update the list of available packages.
48 * guix system: (guix)Invoking guix system.    Manage the operating system configuration.
49 @end direntry
51 @dircategory Software development
52 @direntry
53 * guix environment: (guix)Invoking guix environment. Building development environments with Guix.
54 @end direntry
56 @dircategory Emacs
57 @direntry
58 * Guix user interface: (guix)Emacs Interface. Package management from the comfort of Emacs.
59 @end direntry
62 @titlepage
63 @title GNU Guix Reference Manual
64 @subtitle Using the GNU Guix Functional Package Manager
65 @author The GNU Guix Developers
67 @page
68 @vskip 0pt plus 1filll
69 Edition @value{EDITION} @*
70 @value{UPDATED} @*
72 @insertcopying
73 @end titlepage
75 @contents
77 @c *********************************************************************
78 @node Top
79 @top GNU Guix
81 This document describes GNU Guix version @value{VERSION}, a functional
82 package management tool written for the GNU system.
84 @menu
85 * Introduction::                What is Guix about?
86 * Installation::                Installing Guix.
87 * Package Management::          Package installation, upgrade, etc.
88 * Emacs Interface::             Using Guix from Emacs.
89 * Programming Interface::       Using Guix in Scheme.
90 * Utilities::                   Package management commands.
91 * GNU Distribution::            Software for your friendly GNU system.
92 * Contributing::                Your help needed!
94 * Acknowledgments::             Thanks!
95 * GNU Free Documentation License::  The license of this manual.
96 * Concept Index::               Concepts.
97 * Programming Index::           Data types, functions, and variables.
99 @detailmenu
100  --- The Detailed Node Listing ---
102 Installation
104 * Binary Installation::         Getting Guix running in no time!
105 * Requirements::                Software needed to build and run Guix.
106 * Running the Test Suite::      Testing Guix.
107 * Setting Up the Daemon::       Preparing the build daemon's environment.
108 * Invoking guix-daemon::        Running the build daemon.
109 * Application Setup::           Application-specific setup.
111 Setting Up the Daemon
113 * Build Environment Setup::     Preparing the isolated build environment.
114 * Daemon Offload Setup::        Offloading builds to remote machines.
116 Package Management
118 * Features::                    How Guix will make your life brighter.
119 * Invoking guix package::       Package installation, removal, etc.
120 * Substitutes::                 Downloading pre-built binaries.
121 * Packages with Multiple Outputs::  Single source package, multiple outputs.
122 * Invoking guix gc::            Running the garbage collector.
123 * Invoking guix pull::          Fetching the latest Guix and distribution.
124 * Invoking guix archive::       Exporting and importing store files.
126 Emacs Interface
128 * Initial Setup: Emacs Initial Setup.   Preparing @file{~/.emacs}.
129 * Package Management: Emacs Package Management. Managing packages and generations.
130 * Licenses: Emacs Licenses.             Interface for licenses of Guix packages.
131 * Package Source Locations: Emacs Package Locations.    Interface for package location files.
132 * Popup Interface: Emacs Popup Interface.       Magit-like interface for guix commands.
133 * Prettify Mode: Emacs Prettify.        Abbreviating @file{/gnu/store/@dots{}} file names.
134 * Build Log Mode: Emacs Build Log.      Highlighting Guix build logs.
135 * Completions: Emacs Completions.       Completing @command{guix} shell command.
136 * Development: Emacs Development.       Tools for Guix developers.
137 * Hydra: Emacs Hydra.                   Interface for Guix build farm.
139 Programming Interface
141 * Defining Packages::           Defining new packages.
142 * Build Systems::               Specifying how packages are built.
143 * The Store::                   Manipulating the package store.
144 * Derivations::                 Low-level interface to package derivations.
145 * The Store Monad::             Purely functional interface to the store.
146 * G-Expressions::               Manipulating build expressions.
148 Defining Packages
150 * package Reference::           The package data type.
151 * origin Reference::            The origin data type.
153 Utilities
155 * Invoking guix build::         Building packages from the command line.
156 * Invoking guix edit::          Editing package definitions.
157 * Invoking guix download::      Downloading a file and printing its hash.
158 * Invoking guix hash::          Computing the cryptographic hash of a file.
159 * Invoking guix import::        Importing package definitions.
160 * Invoking guix refresh::       Updating package definitions.
161 * Invoking guix lint::          Finding errors in package definitions.
162 * Invoking guix size::          Profiling disk usage.
163 * Invoking guix graph::         Visualizing the graph of packages.
164 * Invoking guix environment::   Setting up development environments.
165 * Invoking guix publish::       Sharing substitutes.
166 * Invoking guix challenge::     Challenging substitute servers.
167 * Invoking guix container::     Process isolation.
169 Invoking @command{guix build}
171 * Common Build Options::        Build options for most commands.
172 * Package Transformation Options::    Creating variants of packages.
173 * Additional Build Options::    Options specific to 'guix build'.
175 GNU Distribution
177 * System Installation::         Installing the whole operating system.
178 * System Configuration::        Configuring the operating system.
179 * Installing Debugging Files::  Feeding the debugger.
180 * Security Updates::            Deploying security fixes quickly.
181 * Package Modules::             Packages from the programmer's viewpoint.
182 * Packaging Guidelines::        Growing the distribution.
183 * Bootstrapping::               GNU/Linux built from scratch.
184 * Porting::                     Targeting another platform or kernel.
186 System Installation
188 * Limitations::                 What you can expect.
189 * Hardware Considerations::     Supported hardware.
190 * USB Stick Installation::      Preparing the installation medium.
191 * Preparing for Installation::  Networking, partitioning, etc.
192 * Proceeding with the Installation::  The real thing.
193 * Installing GuixSD in a VM::   GuixSD playground.
194 * Building the Installation Image::  How this comes to be.
196 System Configuration
198 * Using the Configuration System::  Customizing your GNU system.
199 * operating-system Reference::  Detail of operating-system declarations.
200 * File Systems::                Configuring file system mounts.
201 * Mapped Devices::              Block device extra processing.
202 * User Accounts::               Specifying user accounts.
203 * Locales::                     Language and cultural convention settings.
204 * Services::                    Specifying system services.
205 * Setuid Programs::             Programs running with root privileges.
206 * X.509 Certificates::          Authenticating HTTPS servers.
207 * Name Service Switch::         Configuring libc's name service switch.
208 * Initial RAM Disk::            Linux-Libre bootstrapping.
209 * GRUB Configuration::          Configuring the boot loader.
210 * Invoking guix system::        Instantiating a system configuration.
211 * Running GuixSD in a VM::      How to run GuixSD in a virtual machine.
212 * Defining Services::           Adding new service definitions.
214 Services
216 * Base Services::               Essential system services.
217 * Scheduled Job Execution::     The mcron service.
218 * Log Rotation::                The rottlog service.
219 * Networking Services::         Network setup, SSH daemon, etc.
220 * X Window::                    Graphical display.
221 * Desktop Services::            D-Bus and desktop services.
222 * Database Services::           SQL databases.
223 * Mail Services::               IMAP, POP3, SMTP, and all that.
224 * Kerberos Services::           Kerberos services.
225 * Web Services::                Web servers.
226 * Network File System::         NFS related services.
227 * Miscellaneous Services::      Other services.
229 Defining Services
231 * Service Composition::         The model for composing services.
232 * Service Types and Services::  Types and services.
233 * Service Reference::           API reference.
234 * Shepherd Services::           A particular type of service.
236 Packaging Guidelines
238 * Software Freedom::            What may go into the distribution.
239 * Package Naming::              What's in a name?
240 * Version Numbers::             When the name is not enough.
241 * Synopses and Descriptions::   Helping users find the right package.
242 * Python Modules::              Taming the snake.
243 * Perl Modules::                Little pearls.
244 * Java Packages::               Coffee break.
245 * Fonts::                       Fond of fonts.
247 Contributing
249 * Building from Git::           The latest and greatest.
250 * Running Guix Before It Is Installed::  Hacker tricks.
251 * The Perfect Setup::           The right tools.
252 * Coding Style::                Hygiene of the contributor.
253 * Submitting Patches::          Share your work.
255 Coding Style
257 * Programming Paradigm::        How to compose your elements.
258 * Modules::                     Where to store your code?
259 * Data Types and Pattern Matching::  Implementing data structures.
260 * Formatting Code::             Writing conventions.
262 @end detailmenu
263 @end menu
265 @c *********************************************************************
266 @node Introduction
267 @chapter Introduction
269 @cindex purpose
270 GNU Guix@footnote{``Guix'' is pronounced like ``geeks'', or ``ɡiːks''
271 using the international phonetic alphabet (IPA).} is a package
272 management tool for the GNU system.  Guix makes it easy for unprivileged
273 users to install, upgrade, or remove packages, to roll back to a
274 previous package set, to build packages from source, and generally
275 assists with the creation and maintenance of software environments.
277 @cindex user interfaces
278 Guix provides a command-line package management interface
279 (@pxref{Invoking guix package}), a set of command-line utilities
280 (@pxref{Utilities}), a visual user interface in Emacs (@pxref{Emacs
281 Interface}), as well as Scheme programming interfaces
282 (@pxref{Programming Interface}).
283 @cindex build daemon
284 Its @dfn{build daemon} is responsible for building packages on behalf of
285 users (@pxref{Setting Up the Daemon}) and for downloading pre-built
286 binaries from authorized sources (@pxref{Substitutes}).
288 @cindex extensibility of the distribution
289 @cindex customization, of packages
290 Guix includes package definitions for many GNU and non-GNU packages, all
291 of which @uref{https://www.gnu.org/philosophy/free-sw.html, respect the
292 user's computing freedom}.  It is @emph{extensible}: users can write
293 their own package definitions (@pxref{Defining Packages}) and make them
294 available as independent package modules (@pxref{Package Modules}).  It
295 is also @emph{customizable}: users can @emph{derive} specialized package
296 definitions from existing ones, including from the command line
297 (@pxref{Package Transformation Options}).
299 @cindex Guix System Distribution
300 @cindex GuixSD
301 You can install GNU@tie{}Guix on top of an existing GNU/Linux system
302 where it complements the available tools without interference
303 (@pxref{Installation}), or you can use it as part of the standalone
304 @dfn{Guix System Distribution} or GuixSD (@pxref{GNU Distribution}).
305 With GNU@tie{}GuixSD, you @emph{declare} all aspects of the operating
306 system configuration and Guix takes care of instantiating the
307 configuration in a transactional, reproducible, and stateless fashion
308 (@pxref{System Configuration}).
310 @cindex functional package management
311 Under the hood, Guix implements the @dfn{functional package management}
312 discipline pioneered by Nix (@pxref{Acknowledgments}).
313 In Guix, the package build and installation process is seen
314 as a @emph{function}, in the mathematical sense.  That function takes inputs,
315 such as build scripts, a compiler, and libraries, and
316 returns an installed package.  As a pure function, its result depends
317 solely on its inputs---for instance, it cannot refer to software or
318 scripts that were not explicitly passed as inputs.  A build function
319 always produces the same result when passed a given set of inputs.  It
320 cannot alter the environment of the running system in
321 any way; for instance, it cannot create, modify, or delete files outside
322 of its build and installation directories.  This is achieved by running
323 build processes in isolated environments (or @dfn{containers}), where only their
324 explicit inputs are visible.
326 @cindex store
327 The result of package build functions is @dfn{cached} in the file
328 system, in a special directory called @dfn{the store} (@pxref{The
329 Store}).  Each package is installed in a directory of its own in the
330 store---by default under @file{/gnu/store}.  The directory name contains
331 a hash of all the inputs used to build that package; thus, changing an
332 input yields a different directory name.
334 This approach is the foundation for the salient features of Guix: support
335 for transactional package upgrade and rollback, per-user installation, and
336 garbage collection of packages (@pxref{Features}).
339 @c *********************************************************************
340 @node Installation
341 @chapter Installation
343 @cindex installing Guix
344 GNU Guix is available for download from its website at
345 @url{http://www.gnu.org/software/guix/}.  This section describes the
346 software requirements of Guix, as well as how to install it and get
347 ready to use it.
349 Note that this section is concerned with the installation of the package
350 manager, which can be done on top of a running GNU/Linux system.  If,
351 instead, you want to install the complete GNU operating system,
352 @pxref{System Installation}.
354 @cindex foreign distro
355 When installed on a running GNU/Linux system---thereafter called a
356 @dfn{foreign distro}---GNU@tie{}Guix complements the available tools
357 without interference.  Its data lives exclusively in two directories,
358 usually @file{/gnu/store} and @file{/var/guix}; other files on your
359 system, such as @file{/etc}, are left untouched.
361 @menu
362 * Binary Installation::         Getting Guix running in no time!
363 * Requirements::                Software needed to build and run Guix.
364 * Running the Test Suite::      Testing Guix.
365 * Setting Up the Daemon::       Preparing the build daemon's environment.
366 * Invoking guix-daemon::        Running the build daemon.
367 * Application Setup::           Application-specific setup.
368 @end menu
370 @node Binary Installation
371 @section Binary Installation
373 @cindex installing Guix from binaries
374 This section describes how to install Guix on an arbitrary system from a
375 self-contained tarball providing binaries for Guix and for all its
376 dependencies.  This is often quicker than installing from source, which
377 is described in the next sections.  The only requirement is to have
378 GNU@tie{}tar and Xz.
380 Installing goes along these lines:
382 @enumerate
383 @item
384 @cindex downloading Guix binary
385 Download the binary tarball from
386 @indicateurl{ftp://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz},
387 where @var{system} is @code{x86_64-linux} for an @code{x86_64} machine
388 already running the kernel Linux, and so on.
390 @c The following is somewhat duplicated in ``System Installation''.
391 Make sure to download the associated @file{.sig} file and to verify the
392 authenticity of the tarball against it, along these lines:
394 @example
395 $ wget ftp://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
396 $ gpg --verify guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
397 @end example
399 If that command fails because you do not have the required public key,
400 then run this command to import it:
402 @example
403 $ gpg --keyserver pgp.mit.edu --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
404 @end example
406 @noindent
407 and rerun the @code{gpg --verify} command.
408 @c end authentication part
410 @item
411 As @code{root}, run:
413 @example
414 # cd /tmp
415 # tar --warning=no-timestamp -xf \
416      guix-binary-@value{VERSION}.@var{system}.tar.xz
417 # mv var/guix /var/ && mv gnu /
418 @end example
420 This creates @file{/gnu/store} (@pxref{The Store}) and @file{/var/guix}.
421 The latter contains a ready-to-use profile for @code{root} (see next
422 step.)
424 Do @emph{not} unpack the tarball on a working Guix system since that
425 would overwrite its own essential files.
427 The @code{--warning=no-timestamp} option makes sure GNU@tie{}tar does
428 not emit warnings about ``implausibly old time stamps'' (such
429 warnings were triggered by GNU@tie{}tar 1.26 and older; recent
430 versions are fine.)
431 They stem from the fact that all the
432 files in the archive have their modification time set to zero (which
433 means January 1st, 1970.)  This is done on purpose to make sure the
434 archive content is independent of its creation time, thus making it
435 reproducible.
437 @item
438 Make @code{root}'s profile available under @file{~/.guix-profile}:
440 @example
441 # ln -sf /var/guix/profiles/per-user/root/guix-profile \
442          ~root/.guix-profile
443 @end example
445 @item
446 Create the group and user accounts for build users as explained below
447 (@pxref{Build Environment Setup}).
449 @item
450 Run the daemon, and set it to automatically start on boot.
452 If your host distro uses the systemd init system, this can be achieved
453 with these commands:
455 @example
456 # ln -s ~root/.guix-profile/lib/systemd/system/guix-daemon.service \
457         /etc/systemd/system/
458 # systemctl start guix-daemon && systemctl enable guix-daemon
459 @end example
461 If your host distro uses the Upstart init system:
463 @example
464 # ln -s ~root/.guix-profile/lib/upstart/system/guix-daemon.conf /etc/init/
465 # start guix-daemon
466 @end example
468 Otherwise, you can still start the daemon manually with:
470 @example
471 # ~root/.guix-profile/bin/guix-daemon --build-users-group=guixbuild
472 @end example
474 @item
475 Make the @command{guix} command available to other users on the machine,
476 for instance with:
478 @example
479 # mkdir -p /usr/local/bin
480 # cd /usr/local/bin
481 # ln -s /var/guix/profiles/per-user/root/guix-profile/bin/guix
482 @end example
484 It is also a good idea to make the Info version of this manual available
485 there:
487 @example
488 # mkdir -p /usr/local/share/info
489 # cd /usr/local/share/info
490 # for i in /var/guix/profiles/per-user/root/guix-profile/share/info/* ;
491   do ln -s $i ; done
492 @end example
494 That way, assuming @file{/usr/local/share/info} is in the search path,
495 running @command{info guix} will open this manual (@pxref{Other Info
496 Directories,,, texinfo, GNU Texinfo}, for more details on changing the
497 Info search path.)
499 @item
500 @cindex substitutes, authorization thereof
501 To use substitutes from @code{hydra.gnu.org} or one of its mirrors
502 (@pxref{Substitutes}), authorize them:
504 @example
505 # guix archive --authorize < ~root/.guix-profile/share/guix/hydra.gnu.org.pub
506 @end example
507 @end enumerate
509 This completes root-level install of Guix.  Each user will need to
510 perform additional steps to make their Guix environment ready for use,
511 @pxref{Application Setup}.
513 You can confirm that Guix is working by installing a sample package into
514 the root profile:
516 @example
517 # guix package -i hello
518 @end example
520 The @code{guix} package must remain available in @code{root}'s profile,
521 or it would become subject to garbage collection---in which case you
522 would find yourself badly handicapped by the lack of the @command{guix}
523 command.  In other words, do not remove @code{guix} by running
524 @code{guix package -r guix}.
526 The binary installation tarball can be (re)produced and verified simply
527 by running the following command in the Guix source tree:
529 @example
530 make guix-binary.@var{system}.tar.xz
531 @end example
534 @node Requirements
535 @section Requirements
537 This section lists requirements when building Guix from source.  The
538 build procedure for Guix is the same as for other GNU software, and is
539 not covered here.  Please see the files @file{README} and @file{INSTALL}
540 in the Guix source tree for additional details.
542 GNU Guix depends on the following packages:
544 @itemize
545 @item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.7 or later;
546 @item @url{http://gnupg.org/, GNU libgcrypt};
547 @item @url{http://www.gnu.org/software/make/, GNU Make}.
548 @end itemize
550 The following dependencies are optional:
552 @itemize
553 @item
554 Installing @uref{http://gnutls.org/, GnuTLS-Guile} will allow you to
555 access @code{https} URLs for substitutes, which is highly recommended
556 (@pxref{Substitutes}).  It also allows you to access HTTPS URLs with the
557 @command{guix download} command (@pxref{Invoking guix download}), the
558 @command{guix import pypi} command, and the @command{guix import cpan}
559 command.  @xref{Guile Preparations, how to install the GnuTLS bindings
560 for Guile,, gnutls-guile, GnuTLS-Guile}.
562 @item
563 Installing
564 @url{http://savannah.nongnu.org/projects/guile-json/, Guile-JSON} will
565 allow you to use the @command{guix import pypi} command (@pxref{Invoking
566 guix import}).  It is of
567 interest primarily for developers and not for casual users.
569 @item
570 @c Note: We need at least 0.10.2 for 'channel-send-eof'.
571 Support for build offloading (@pxref{Daemon Offload Setup}) depends on
572 @uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH},
573 version 0.10.2 or later.
575 @item
576 When @url{http://zlib.net, zlib} is available, @command{guix publish}
577 can compress build byproducts (@pxref{Invoking guix publish}).
578 @end itemize
580 Unless @code{--disable-daemon} was passed to @command{configure}, the
581 following packages are also needed:
583 @itemize
584 @item @url{http://sqlite.org, SQLite 3};
585 @item @url{http://www.bzip.org, libbz2};
586 @item @url{http://gcc.gnu.org, GCC's g++}, with support for the
587 C++11 standard.
588 @end itemize
590 @cindex state directory
591 When configuring Guix on a system that already has a Guix installation,
592 be sure to specify the same state directory as the existing installation
593 using the @code{--localstatedir} option of the @command{configure}
594 script (@pxref{Directory Variables, @code{localstatedir},, standards,
595 GNU Coding Standards}).  The @command{configure} script protects against
596 unintended misconfiguration of @var{localstatedir} so you do not
597 inadvertently corrupt your store (@pxref{The Store}).
599 @cindex Nix, compatibility
600 When a working installation of @url{http://nixos.org/nix/, the Nix package
601 manager} is available, you
602 can instead configure Guix with @code{--disable-daemon}.  In that case,
603 Nix replaces the three dependencies above.
605 Guix is compatible with Nix, so it is possible to share the same store
606 between both.  To do so, you must pass @command{configure} not only the
607 same @code{--with-store-dir} value, but also the same
608 @code{--localstatedir} value.  The latter is essential because it
609 specifies where the database that stores metadata about the store is
610 located, among other things.  The default values for Nix are
611 @code{--with-store-dir=/nix/store} and @code{--localstatedir=/nix/var}.
612 Note that @code{--disable-daemon} is not required if
613 your goal is to share the store with Nix.
615 @node Running the Test Suite
616 @section Running the Test Suite
618 @cindex test suite
619 After a successful @command{configure} and @code{make} run, it is a good
620 idea to run the test suite.  It can help catch issues with the setup or
621 environment, or bugs in Guix itself---and really, reporting test
622 failures is a good way to help improve the software.  To run the test
623 suite, type:
625 @example
626 make check
627 @end example
629 Test cases can run in parallel: you can use the @code{-j} option of
630 GNU@tie{}make to speed things up.  The first run may take a few minutes
631 on a recent machine; subsequent runs will be faster because the store
632 that is created for test purposes will already have various things in
633 cache.
635 It is also possible to run a subset of the tests by defining the
636 @code{TESTS} makefile variable as in this example:
638 @example
639 make check TESTS="tests/store.scm tests/cpio.scm"
640 @end example
642 By default, tests results are displayed at a file level.  In order to
643 see the details of every individual test cases, it is possible to define
644 the @code{SCM_LOG_DRIVER_FLAGS} makefile variable as in this example:
646 @example
647 make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no"
648 @end example
650 Upon failure, please email @email{bug-guix@@gnu.org} and attach the
651 @file{test-suite.log} file.  Please specify the Guix version being used
652 as well as version numbers of the dependencies (@pxref{Requirements}) in
653 your message.
655 Guix also comes with a whole-system test suite that tests complete
656 GuixSD operating system instances.  It can only run on systems where
657 Guix is already installed, using:
659 @example
660 make check-system
661 @end example
663 @noindent
664 or, again, by defining @code{TESTS} to select a subset of tests to run:
666 @example
667 make check-system TESTS="basic mcron"
668 @end example
670 These system tests are defined in the @code{(gnu tests @dots{})}
671 modules.  They work by running the operating systems under test with
672 lightweight instrumentation in a virtual machine (VM).  They can be
673 computationally intensive or rather cheap, depending on whether
674 substitutes are available for their dependencies (@pxref{Substitutes}).
675 Some of them require a lot of storage space to hold VM images.
677 Again in case of test failures, please send @email{bug-guix@@gnu.org}
678 all the details.
680 @node Setting Up the Daemon
681 @section Setting Up the Daemon
683 @cindex daemon
684 Operations such as building a package or running the garbage collector
685 are all performed by a specialized process, the @dfn{build daemon}, on
686 behalf of clients.  Only the daemon may access the store and its
687 associated database.  Thus, any operation that manipulates the store
688 goes through the daemon.  For instance, command-line tools such as
689 @command{guix package} and @command{guix build} communicate with the
690 daemon (@i{via} remote procedure calls) to instruct it what to do.
692 The following sections explain how to prepare the build daemon's
693 environment.  See also @ref{Substitutes}, for information on how to allow
694 the daemon to download pre-built binaries.
696 @menu
697 * Build Environment Setup::     Preparing the isolated build environment.
698 * Daemon Offload Setup::        Offloading builds to remote machines.
699 @end menu
701 @node Build Environment Setup
702 @subsection Build Environment Setup
704 @cindex build environment
705 In a standard multi-user setup, Guix and its daemon---the
706 @command{guix-daemon} program---are installed by the system
707 administrator; @file{/gnu/store} is owned by @code{root} and
708 @command{guix-daemon} runs as @code{root}.  Unprivileged users may use
709 Guix tools to build packages or otherwise access the store, and the
710 daemon will do it on their behalf, ensuring that the store is kept in a
711 consistent state, and allowing built packages to be shared among users.
713 @cindex build users
714 When @command{guix-daemon} runs as @code{root}, you may not want package
715 build processes themselves to run as @code{root} too, for obvious
716 security reasons.  To avoid that, a special pool of @dfn{build users}
717 should be created for use by build processes started by the daemon.
718 These build users need not have a shell and a home directory: they will
719 just be used when the daemon drops @code{root} privileges in build
720 processes.  Having several such users allows the daemon to launch
721 distinct build processes under separate UIDs, which guarantees that they
722 do not interfere with each other---an essential feature since builds are
723 regarded as pure functions (@pxref{Introduction}).
725 On a GNU/Linux system, a build user pool may be created like this (using
726 Bash syntax and the @code{shadow} commands):
728 @c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
729 @c for why `-G' is needed.
730 @example
731 # groupadd --system guixbuild
732 # for i in `seq -w 1 10`;
733   do
734     useradd -g guixbuild -G guixbuild           \
735             -d /var/empty -s `which nologin`    \
736             -c "Guix build user $i" --system    \
737             guixbuilder$i;
738   done
739 @end example
741 @noindent
742 The number of build users determines how many build jobs may run in
743 parallel, as specified by the @option{--max-jobs} option
744 (@pxref{Invoking guix-daemon, @option{--max-jobs}}).  To use
745 @command{guix system vm} and related commands, you may need to add the
746 build users to the @code{kvm} group so they can access @file{/dev/kvm},
747 using @code{-G guixbuild,kvm} instead of @code{-G guixbuild}
748 (@pxref{Invoking guix system}).
750 The @code{guix-daemon} program may then be run as @code{root} with the
751 following command@footnote{If your machine uses the systemd init system,
752 dropping the @file{@var{prefix}/lib/systemd/system/guix-daemon.service}
753 file in @file{/etc/systemd/system} will ensure that
754 @command{guix-daemon} is automatically started.  Similarly, if your
755 machine uses the Upstart init system, drop the
756 @file{@var{prefix}/lib/upstart/system/guix-daemon.conf}
757 file in @file{/etc/init}.}:
759 @example
760 # guix-daemon --build-users-group=guixbuild
761 @end example
763 @cindex chroot
764 @noindent
765 This way, the daemon starts build processes in a chroot, under one of
766 the @code{guixbuilder} users.  On GNU/Linux, by default, the chroot
767 environment contains nothing but:
769 @c Keep this list in sync with libstore/build.cc! -----------------------
770 @itemize
771 @item
772 a minimal @code{/dev} directory, created mostly independently from the
773 host @code{/dev}@footnote{``Mostly'', because while the set of files
774 that appear in the chroot's @code{/dev} is fixed, most of these files
775 can only be created if the host has them.};
777 @item
778 the @code{/proc} directory; it only shows the processes of the container
779 since a separate PID name space is used;
781 @item
782 @file{/etc/passwd} with an entry for the current user and an entry for
783 user @file{nobody};
785 @item
786 @file{/etc/group} with an entry for the user's group;
788 @item
789 @file{/etc/hosts} with an entry that maps @code{localhost} to
790 @code{127.0.0.1};
792 @item
793 a writable @file{/tmp} directory.
794 @end itemize
796 You can influence the directory where the daemon stores build trees
797 @i{via} the @code{TMPDIR} environment variable.  However, the build tree
798 within the chroot is always called @file{/tmp/guix-build-@var{name}.drv-0},
799 where @var{name} is the derivation name---e.g., @code{coreutils-8.24}.
800 This way, the value of @code{TMPDIR} does not leak inside build
801 environments, which avoids discrepancies in cases where build processes
802 capture the name of their build tree.
804 @vindex http_proxy
805 The daemon also honors the @code{http_proxy} environment variable for
806 HTTP downloads it performs, be it for fixed-output derivations
807 (@pxref{Derivations}) or for substitutes (@pxref{Substitutes}).
809 If you are installing Guix as an unprivileged user, it is still possible
810 to run @command{guix-daemon} provided you pass @code{--disable-chroot}.
811 However, build processes will not be isolated from one another, and not
812 from the rest of the system.  Thus, build processes may interfere with
813 each other, and may access programs, libraries, and other files
814 available on the system---making it much harder to view them as
815 @emph{pure} functions.
818 @node Daemon Offload Setup
819 @subsection Using the Offload Facility
821 @cindex offloading
822 @cindex build hook
823 When desired, the build daemon can @dfn{offload} derivation builds to
824 other machines running Guix, using the @code{offload} @dfn{build
825 hook}@footnote{This feature is available only when
826 @uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH} is
827 present.}.  When that
828 feature is enabled, a list of user-specified build machines is read from
829 @file{/etc/guix/machines.scm}; every time a build is requested, for
830 instance via @code{guix build}, the daemon attempts to offload it to one
831 of the machines that satisfy the constraints of the derivation, in
832 particular its system type---e.g., @file{x86_64-linux}.  Missing
833 prerequisites for the build are copied over SSH to the target machine,
834 which then proceeds with the build; upon success the output(s) of the
835 build are copied back to the initial machine.
837 The @file{/etc/guix/machines.scm} file typically looks like this:
839 @example
840 (list (build-machine
841         (name "eightysix.example.org")
842         (system "x86_64-linux")
843         (host-key "ssh-ed25519 AAAAC3Nza@dots{}")
844         (user "bob")
845         (speed 2.))     ;incredibly fast!
847       (build-machine
848         (name "meeps.example.org")
849         (system "mips64el-linux")
850         (host-key "ssh-rsa AAAAB3Nza@dots{}")
851         (user "alice")
852         (private-key
853          (string-append (getenv "HOME")
854                         "/.ssh/identity-for-guix"))))
855 @end example
857 @noindent
858 In the example above we specify a list of two build machines, one for
859 the @code{x86_64} architecture and one for the @code{mips64el}
860 architecture.
862 In fact, this file is---not surprisingly!---a Scheme file that is
863 evaluated when the @code{offload} hook is started.  Its return value
864 must be a list of @code{build-machine} objects.  While this example
865 shows a fixed list of build machines, one could imagine, say, using
866 DNS-SD to return a list of potential build machines discovered in the
867 local network (@pxref{Introduction, Guile-Avahi,, guile-avahi, Using
868 Avahi in Guile Scheme Programs}).  The @code{build-machine} data type is
869 detailed below.
871 @deftp {Data Type} build-machine
872 This data type represents build machines to which the daemon may offload
873 builds.  The important fields are:
875 @table @code
877 @item name
878 The host name of the remote machine.
880 @item system
881 The system type of the remote machine---e.g., @code{"x86_64-linux"}.
883 @item user
884 The user account to use when connecting to the remote machine over SSH.
885 Note that the SSH key pair must @emph{not} be passphrase-protected, to
886 allow non-interactive logins.
888 @item host-key
889 This must be the machine's SSH @dfn{public host key} in OpenSSH format.
890 This is used to authenticate the machine when we connect to it.  It is a
891 long string that looks like this:
893 @example
894 ssh-ed25519 AAAAC3NzaC@dots{}mde+UhL hint@@example.org
895 @end example
897 If the machine is running the OpenSSH daemon, @command{sshd}, the host
898 key can be found in a file such as
899 @file{/etc/ssh/ssh_host_ed25519_key.pub}.
901 If the machine is running the SSH daemon of GNU@tie{}lsh,
902 @command{lshd}, the host key is in @file{/etc/lsh/host-key.pub} or a
903 similar file.  It can be converted to the OpenSSH format using
904 @command{lsh-export-key} (@pxref{Converting keys,,, lsh, LSH Manual}):
906 @example
907 $ lsh-export-key --openssh < /etc/lsh/host-key.pub 
908 ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV@dots{}
909 @end example
911 @end table
913 A number of optional fields may be specified:
915 @table @asis
917 @item @code{port} (default: @code{22})
918 Port number of SSH server on the machine.
920 @item @code{private-key} (default: @file{~/.ssh/id_rsa})
921 The SSH private key file to use when connecting to the machine, in
922 OpenSSH format.
924 @item @code{daemon-socket} (default: @code{"/var/guix/daemon-socket/socket"})
925 File name of the Unix-domain socket @command{guix-daemon} is listening
926 to on that machine.
928 @item @code{parallel-builds} (default: @code{1})
929 The number of builds that may run in parallel on the machine.
931 @item @code{speed} (default: @code{1.0})
932 A ``relative speed factor''.  The offload scheduler will tend to prefer
933 machines with a higher speed factor.
935 @item @code{features} (default: @code{'()})
936 A list of strings denoting specific features supported by the machine.
937 An example is @code{"kvm"} for machines that have the KVM Linux modules
938 and corresponding hardware support.  Derivations can request features by
939 name, and they will be scheduled on matching build machines.
941 @end table
942 @end deftp
944 The @code{guile} command must be in the search path on the build
945 machines.  In addition, the Guix modules must be in
946 @code{$GUILE_LOAD_PATH} on the build machine---you can check whether
947 this is the case by running:
949 @example
950 ssh build-machine guile -c "'(use-modules (guix config))'"
951 @end example
953 There is one last thing to do once @file{machines.scm} is in place.  As
954 explained above, when offloading, files are transferred back and forth
955 between the machine stores.  For this to work, you first need to
956 generate a key pair on each machine to allow the daemon to export signed
957 archives of files from the store (@pxref{Invoking guix archive}):
959 @example
960 # guix archive --generate-key
961 @end example
963 @noindent
964 Each build machine must authorize the key of the master machine so that
965 it accepts store items it receives from the master:
967 @example
968 # guix archive --authorize < master-public-key.txt
969 @end example
971 @noindent
972 Likewise, the master machine must authorize the key of each build machine.
974 All the fuss with keys is here to express pairwise mutual trust
975 relations between the master and the build machines.  Concretely, when
976 the master receives files from a build machine (and @i{vice versa}), its
977 build daemon can make sure they are genuine, have not been tampered
978 with, and that they are signed by an authorized key.
980 @cindex offload test
981 To test whether your setup is operational, run this command on the
982 master node:
984 @example
985 # guix offload test
986 @end example
988 This will attempt to connect to each of the build machines specified in
989 @file{/etc/guix/machines.scm}, make sure Guile and the Guix modules are
990 available on each machine, attempt to export to the machine and import
991 from it, and report any error in the process.
993 If you want to test a different machine file, just specify it on the
994 command line:
996 @example
997 # guix offload test machines-qualif.scm
998 @end example
1001 @node Invoking guix-daemon
1002 @section Invoking @command{guix-daemon}
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:
1009 @example
1010 # guix-daemon --build-users-group=guixbuild
1011 @end example
1013 @noindent
1014 For details on how to set it up, @pxref{Setting Up the Daemon}.
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}).
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.
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}}).
1045 The following command-line options are supported:
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}).
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}).
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}.
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}).
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}).
1073 This means that substitutes may be downloaded from @var{urls}, as long
1074 as they are signed by a trusted signature (@pxref{Substitutes}).
1076 @cindex build hook
1077 @item --no-build-hook
1078 Do not use the @dfn{build hook}.
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}).
1084 @item --cache-failures
1085 Cache build failures.  By default, only successful builds are cached.
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}.
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.
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}).
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}.
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.
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}).
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.
1122 @item --debug
1123 Produce debugging output.
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}).
1129 @item --chroot-directory=@var{dir}
1130 Add @var{dir} to the build chroot.
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.
1138 @item --disable-chroot
1139 Disable chroot builds.
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.
1146 @item --disable-log-compression
1147 Disable compression of the build logs.
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.
1153 @item --disable-deduplication
1154 @cindex deduplication
1155 Disable automatic file ``deduplication'' in the store.
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.
1164 @item --gc-keep-outputs[=yes|no]
1165 Tell whether the garbage collector (GC) must keep outputs of live
1166 derivations.
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.
1172 @item --gc-keep-derivations[=yes|no]
1173 Tell whether the garbage collector (GC) must keep derivations
1174 corresponding to live outputs.
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.
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.
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.
1192 This might be helpful to build programs that (usually wrongfully) depend
1193 on the kernel version number.
1195 @item --lose-logs
1196 Do not keep build logs.  By default they are kept under
1197 @code{@var{localstatedir}/guix/log}.
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}.
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
1213 @node Application Setup
1214 @section Application Setup
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.
1221 @subsection Locales
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:
1232 @example
1233 $ guix package -i glibc-locales
1234 $ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
1235 @end example
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.
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:
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.
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
1261 This is important because the locale data format used by different libc
1262 versions may be incompatible.
1264 @subsection Name Service Switch
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.
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}).
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}).
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).
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.
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.
1314 @subsection X11 Fonts
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}.
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:
1332 @example
1333 guix package -i font-adobe-source-han-sans:cn
1334 @end example
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:
1341 @example
1342 -*-dejavu sans-medium-r-normal-*-*-100-*-*-*-*-*-1
1343 @end example
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:
1348 @example
1349 xset +fp ~/.guix-profile/share/fonts/truetype
1350 @end example
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.
1356 @subsection X.509 Certificates
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.
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.
1367 @subsection Emacs Packages
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}).
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}).
1387 @c TODO What else?
1389 @c *********************************************************************
1390 @node Package Management
1391 @chapter Package Management
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.
1399 This chapter describes the main features of Guix, as well as the package
1400 management tools it provides.  Two user interfaces are provided for
1401 routine package management tasks: A command-line interface described below
1402 (@pxref{Invoking guix package, @code{guix package}}), as well as a visual user
1403 interface in Emacs described in a subsequent chapter (@pxref{Emacs Interface}).
1405 @menu
1406 * Features::                    How Guix will make your life brighter.
1407 * Invoking guix package::       Package installation, removal, etc.
1408 * Substitutes::                 Downloading pre-built binaries.
1409 * Packages with Multiple Outputs::  Single source package, multiple outputs.
1410 * Invoking guix gc::            Running the garbage collector.
1411 * Invoking guix pull::          Fetching the latest Guix and distribution.
1412 * Invoking guix archive::       Exporting and importing store files.
1413 @end menu
1415 @node Features
1416 @section Features
1418 When using Guix, each package ends up in the @dfn{package store}, in its
1419 own directory---something that resembles
1420 @file{/gnu/store/xxx-package-1.2}, where @code{xxx} is a base32 string
1421 (note that Guix comes with an Emacs extension to shorten those file
1422 names, @pxref{Emacs Prettify}.)
1424 Instead of referring to these directories, users have their own
1425 @dfn{profile}, which points to the packages that they actually want to
1426 use.  These profiles are stored within each user's home directory, at
1427 @code{$HOME/.guix-profile}.
1429 For example, @code{alice} installs GCC 4.7.2.  As a result,
1430 @file{/home/alice/.guix-profile/bin/gcc} points to
1431 @file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}.  Now, on the same machine,
1432 @code{bob} had already installed GCC 4.8.0.  The profile of @code{bob}
1433 simply continues to point to
1434 @file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc}---i.e., both versions of GCC
1435 coexist on the same system without any interference.
1437 The @command{guix package} command is the central tool to manage
1438 packages (@pxref{Invoking guix package}).  It operates on the per-user
1439 profiles, and can be used @emph{with normal user privileges}.
1441 @cindex transactions
1442 The command provides the obvious install, remove, and upgrade
1443 operations.  Each invocation is actually a @emph{transaction}: either
1444 the specified operation succeeds, or nothing happens.  Thus, if the
1445 @command{guix package} process is terminated during the transaction,
1446 or if a power outage occurs during the transaction, then the user's
1447 profile remains in its previous state, and remains usable.
1449 In addition, any package transaction may be @emph{rolled back}.  So, if,
1450 for example, an upgrade installs a new version of a package that turns
1451 out to have a serious bug, users may roll back to the previous instance
1452 of their profile, which was known to work well.  Similarly, the global
1453 system configuration on GuixSD is subject to
1454 transactional upgrades and roll-back
1455 (@pxref{Using the Configuration System}).
1457 All packages in the package store may be @emph{garbage-collected}.
1458 Guix can determine which packages are still referenced by user
1459 profiles, and remove those that are provably no longer referenced
1460 (@pxref{Invoking guix gc}).  Users may also explicitly remove old
1461 generations of their profile so that the packages they refer to can be
1462 collected.
1464 @cindex reproducibility
1465 @cindex reproducible builds
1466 Finally, Guix takes a @dfn{purely functional} approach to package
1467 management, as described in the introduction (@pxref{Introduction}).
1468 Each @file{/gnu/store} package directory name contains a hash of all the
1469 inputs that were used to build that package---compiler, libraries, build
1470 scripts, etc.  This direct correspondence allows users to make sure a
1471 given package installation matches the current state of their
1472 distribution.  It also helps maximize @dfn{build reproducibility}:
1473 thanks to the isolated build environments that are used, a given build
1474 is likely to yield bit-identical files when performed on different
1475 machines (@pxref{Invoking guix-daemon, container}).
1477 @cindex substitutes
1478 This foundation allows Guix to support @dfn{transparent binary/source
1479 deployment}.  When a pre-built binary for a @file{/gnu/store} item is
1480 available from an external source---a @dfn{substitute}, Guix just
1481 downloads it and unpacks it;
1482 otherwise, it builds the package from source, locally
1483 (@pxref{Substitutes}).  Because build results are usually bit-for-bit
1484 reproducible, users do not have to trust servers that provide
1485 substitutes: they can force a local build and @emph{challenge} providers
1486 (@pxref{Invoking guix challenge}).
1488 Control over the build environment is a feature that is also useful for
1489 developers.  The @command{guix environment} command allows developers of
1490 a package to quickly set up the right development environment for their
1491 package, without having to manually install the dependencies of the
1492 package into their profile (@pxref{Invoking guix environment}).
1494 @node Invoking guix package
1495 @section Invoking @command{guix package}
1497 @cindex installing packages
1498 @cindex removing packages
1499 @cindex package installation
1500 @cindex package removal
1501 The @command{guix package} command is the tool that allows users to
1502 install, upgrade, and remove packages, as well as rolling back to
1503 previous configurations.  It operates only on the user's own profile,
1504 and works with normal user privileges (@pxref{Features}).  Its syntax
1507 @example
1508 guix package @var{options}
1509 @end example
1510 @cindex transactions
1511 Primarily, @var{options} specifies the operations to be performed during
1512 the transaction.  Upon completion, a new profile is created, but
1513 previous @dfn{generations} of the profile remain available, should the user
1514 want to roll back.
1516 For example, to remove @code{lua} and install @code{guile} and
1517 @code{guile-cairo} in a single transaction:
1519 @example
1520 guix package -r lua -i guile guile-cairo
1521 @end example
1523 @command{guix package} also supports a @dfn{declarative approach}
1524 whereby the user specifies the exact set of packages to be available and
1525 passes it @i{via} the @option{--manifest} option
1526 (@pxref{profile-manifest, @option{--manifest}}).
1528 @cindex profile
1529 For each user, a symlink to the user's default profile is automatically
1530 created in @file{$HOME/.guix-profile}.  This symlink always points to the
1531 current generation of the user's default profile.  Thus, users can add
1532 @file{$HOME/.guix-profile/bin} to their @code{PATH} environment
1533 variable, and so on.
1534 @cindex search paths
1535 If you are not using the Guix System Distribution, consider adding the
1536 following lines to your @file{~/.bash_profile} (@pxref{Bash Startup
1537 Files,,, bash, The GNU Bash Reference Manual}) so that newly-spawned
1538 shells get all the right environment variable definitions:
1540 @example
1541 GUIX_PROFILE="$HOME/.guix-profile" \
1542 source "$HOME/.guix-profile/etc/profile"
1543 @end example
1545 In a multi-user setup, user profiles are stored in a place registered as
1546 a @dfn{garbage-collector root}, which @file{$HOME/.guix-profile} points
1547 to (@pxref{Invoking guix gc}).  That directory is normally
1548 @code{@var{localstatedir}/profiles/per-user/@var{user}}, where
1549 @var{localstatedir} is the value passed to @code{configure} as
1550 @code{--localstatedir}, and @var{user} is the user name.  The
1551 @file{per-user} directory is created when @command{guix-daemon} is
1552 started, and the @var{user} sub-directory is created by @command{guix
1553 package}.
1555 The @var{options} can be among the following:
1557 @table @code
1559 @item --install=@var{package} @dots{}
1560 @itemx -i @var{package} @dots{}
1561 Install the specified @var{package}s.
1563 Each @var{package} may specify either a simple package name, such as
1564 @code{guile}, or a package name followed by an at-sign and version number,
1565 such as @code{guile@@1.8.8} or simply @code{guile@@1.8} (in the latter
1566 case, the newest version prefixed by @code{1.8} is selected.)
1568 If no version number is specified, the
1569 newest available version will be selected.  In addition, @var{package}
1570 may contain a colon, followed by the name of one of the outputs of the
1571 package, as in @code{gcc:doc} or @code{binutils@@2.22:lib}
1572 (@pxref{Packages with Multiple Outputs}).  Packages with a corresponding
1573 name (and optionally version) are searched for among the GNU
1574 distribution modules (@pxref{Package Modules}).
1576 @cindex propagated inputs
1577 Sometimes packages have @dfn{propagated inputs}: these are dependencies
1578 that automatically get installed along with the required package
1579 (@pxref{package-propagated-inputs, @code{propagated-inputs} in
1580 @code{package} objects}, for information about propagated inputs in
1581 package definitions).
1583 @anchor{package-cmd-propagated-inputs}
1584 An example is the GNU MPC library: its C header files refer to those of
1585 the GNU MPFR library, which in turn refer to those of the GMP library.
1586 Thus, when installing MPC, the MPFR and GMP libraries also get installed
1587 in the profile; removing MPC also removes MPFR and GMP---unless they had
1588 also been explicitly installed by the user.
1590 Besides, packages sometimes rely on the definition of environment
1591 variables for their search paths (see explanation of
1592 @code{--search-paths} below).  Any missing or possibly incorrect
1593 environment variable definitions are reported here.
1595 @item --install-from-expression=@var{exp}
1596 @itemx -e @var{exp}
1597 Install the package @var{exp} evaluates to.
1599 @var{exp} must be a Scheme expression that evaluates to a
1600 @code{<package>} object.  This option is notably useful to disambiguate
1601 between same-named variants of a package, with expressions such as
1602 @code{(@@ (gnu packages base) guile-final)}.
1604 Note that this option installs the first output of the specified
1605 package, which may be insufficient when needing a specific output of a
1606 multiple-output package.
1608 @item --install-from-file=@var{file}
1609 @itemx -f @var{file}
1610 Install the package that the code within @var{file} evaluates to.
1612 As an example, @var{file} might contain a definition like this
1613 (@pxref{Defining Packages}):
1615 @example
1616 @verbatiminclude package-hello.scm
1617 @end example
1619 Developers may find it useful to include such a @file{guix.scm} file
1620 in the root of their project source tree that can be used to test
1621 development snapshots and create reproducible development environments
1622 (@pxref{Invoking guix environment}).
1624 @item --remove=@var{package} @dots{}
1625 @itemx -r @var{package} @dots{}
1626 Remove the specified @var{package}s.
1628 As for @code{--install}, each @var{package} may specify a version number
1629 and/or output name in addition to the package name.  For instance,
1630 @code{-r glibc:debug} would remove the @code{debug} output of
1631 @code{glibc}.
1633 @item --upgrade[=@var{regexp} @dots{}]
1634 @itemx -u [@var{regexp} @dots{}]
1635 @cindex upgrading packages
1636 Upgrade all the installed packages.  If one or more @var{regexp}s are
1637 specified, upgrade only installed packages whose name matches a
1638 @var{regexp}.  Also see the @code{--do-not-upgrade} option below.
1640 Note that this upgrades package to the latest version of packages found
1641 in the distribution currently installed.  To update your distribution,
1642 you should regularly run @command{guix pull} (@pxref{Invoking guix
1643 pull}).
1645 @item --do-not-upgrade[=@var{regexp} @dots{}]
1646 When used together with the @code{--upgrade} option, do @emph{not}
1647 upgrade any packages whose name matches a @var{regexp}.  For example, to
1648 upgrade all packages in the current profile except those containing the
1649 substring ``emacs'':
1651 @example
1652 $ guix package --upgrade . --do-not-upgrade emacs
1653 @end example
1655 @item @anchor{profile-manifest}--manifest=@var{file}
1656 @itemx -m @var{file}
1657 @cindex profile declaration
1658 @cindex profile manifest
1659 Create a new generation of the profile from the manifest object
1660 returned by the Scheme code in @var{file}.
1662 This allows you to @emph{declare} the profile's contents rather than
1663 constructing it through a sequence of @code{--install} and similar
1664 commands.  The advantage is that @var{file} can be put under version
1665 control, copied to different machines to reproduce the same profile, and
1666 so on.
1668 @c FIXME: Add reference to (guix profile) documentation when available.
1669 @var{file} must return a @dfn{manifest} object, which is roughly a list
1670 of packages:
1672 @findex packages->manifest
1673 @example
1674 (use-package-modules guile emacs)
1676 (packages->manifest
1677  (list emacs
1678        guile-2.0
1679        ;; Use a specific package output.
1680        (list guile-2.0 "debug")))
1681 @end example
1683 @item --roll-back
1684 @cindex rolling back
1685 @cindex undoing transactions
1686 @cindex transactions, undoing
1687 Roll back to the previous @dfn{generation} of the profile---i.e., undo
1688 the last transaction.
1690 When combined with options such as @code{--install}, roll back occurs
1691 before any other actions.
1693 When rolling back from the first generation that actually contains
1694 installed packages, the profile is made to point to the @dfn{zeroth
1695 generation}, which contains no files apart from its own metadata.
1697 After having rolled back, installing, removing, or upgrading packages
1698 overwrites previous future generations.  Thus, the history of the
1699 generations in a profile is always linear.
1701 @item --switch-generation=@var{pattern}
1702 @itemx -S @var{pattern}
1703 @cindex generations
1704 Switch to a particular generation defined by @var{pattern}.
1706 @var{pattern} may be either a generation number or a number prefixed
1707 with ``+'' or ``-''.  The latter means: move forward/backward by a
1708 specified number of generations.  For example, if you want to return to
1709 the latest generation after @code{--roll-back}, use
1710 @code{--switch-generation=+1}.
1712 The difference between @code{--roll-back} and
1713 @code{--switch-generation=-1} is that @code{--switch-generation} will
1714 not make a zeroth generation, so if a specified generation does not
1715 exist, the current generation will not be changed.
1717 @item --search-paths[=@var{kind}]
1718 @cindex search paths
1719 Report environment variable definitions, in Bash syntax, that may be
1720 needed in order to use the set of installed packages.  These environment
1721 variables are used to specify @dfn{search paths} for files used by some
1722 of the installed packages.
1724 For example, GCC needs the @code{CPATH} and @code{LIBRARY_PATH}
1725 environment variables to be defined so it can look for headers and
1726 libraries in the user's profile (@pxref{Environment Variables,,, gcc,
1727 Using the GNU Compiler Collection (GCC)}).  If GCC and, say, the C
1728 library are installed in the profile, then @code{--search-paths} will
1729 suggest setting these variables to @code{@var{profile}/include} and
1730 @code{@var{profile}/lib}, respectively.
1732 The typical use case is to define these environment variables in the
1733 shell:
1735 @example
1736 $ eval `guix package --search-paths`
1737 @end example
1739 @var{kind} may be one of @code{exact}, @code{prefix}, or @code{suffix},
1740 meaning that the returned environment variable definitions will either
1741 be exact settings, or prefixes or suffixes of the current value of these
1742 variables.  When omitted, @var{kind} defaults to @code{exact}.
1744 This option can also be used to compute the @emph{combined} search paths
1745 of several profiles.  Consider this example:
1747 @example
1748 $ guix package -p foo -i guile
1749 $ guix package -p bar -i guile-json
1750 $ guix package -p foo -p bar --search-paths
1751 @end example
1753 The last command above reports about the @code{GUILE_LOAD_PATH}
1754 variable, even though, taken individually, neither @file{foo} nor
1755 @file{bar} would lead to that recommendation.
1758 @item --profile=@var{profile}
1759 @itemx -p @var{profile}
1760 Use @var{profile} instead of the user's default profile.
1762 @item --verbose
1763 Produce verbose output.  In particular, emit the build log of the
1764 environment on the standard error port.
1766 @item --bootstrap
1767 Use the bootstrap Guile to build the profile.  This option is only
1768 useful to distribution developers.
1770 @end table
1772 In addition to these actions, @command{guix package} supports the
1773 following options to query the current state of a profile, or the
1774 availability of packages:
1776 @table @option
1778 @item --search=@var{regexp}
1779 @itemx -s @var{regexp}
1780 @cindex searching for packages
1781 List the available packages whose name, synopsis, or description matches
1782 @var{regexp}.  Print all the metadata of matching packages in
1783 @code{recutils} format (@pxref{Top, GNU recutils databases,, recutils,
1784 GNU recutils manual}).
1786 This allows specific fields to be extracted using the @command{recsel}
1787 command, for instance:
1789 @example
1790 $ guix package -s malloc | recsel -p name,version
1791 name: glibc
1792 version: 2.17
1794 name: libgc
1795 version: 7.2alpha6
1796 @end example
1798 Similarly, to show the name of all the packages available under the
1799 terms of the GNU@tie{}LGPL version 3:
1801 @example
1802 $ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
1803 name: elfutils
1805 name: gmp
1806 @dots{}
1807 @end example
1809 It is also possible to refine search results using several @code{-s}
1810 flags.  For example, the following command returns a list of board
1811 games:
1813 @example
1814 $ guix package -s '\<board\>' -s game | recsel -p name
1815 name: gnubg
1816 @dots{}
1817 @end example
1819 If we were to omit @code{-s game}, we would also get software packages
1820 that deal with printed circuit boards; removing the angle brackets
1821 around @code{board} would further add packages that have to do with
1822 keyboards.
1824 And now for a more elaborate example.  The following command searches
1825 for cryptographic libraries, filters out Haskell, Perl, Python, and Ruby
1826 libraries, and prints the name and synopsis of the matching packages:
1828 @example
1829 $ guix package -s crypto -s library | \
1830     recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
1831 @end example
1833 @noindent
1834 @xref{Selection Expressions,,, recutils, GNU recutils manual}, for more
1835 information on @dfn{selection expressions} for @code{recsel -e}.
1837 @item --show=@var{package}
1838 Show details about @var{package}, taken from the list of available packages, in
1839 @code{recutils} format (@pxref{Top, GNU recutils databases,, recutils, GNU
1840 recutils manual}).
1842 @example
1843 $ guix package --show=python | recsel -p name,version
1844 name: python
1845 version: 2.7.6
1847 name: python
1848 version: 3.3.5
1849 @end example
1851 You may also specify the full name of a package to only get details about a
1852 specific version of it:
1853 @example
1854 $ guix package --show=python@@3.4 | recsel -p name,version
1855 name: python
1856 version: 3.4.3
1857 @end example
1861 @item --list-installed[=@var{regexp}]
1862 @itemx -I [@var{regexp}]
1863 List the currently installed packages in the specified profile, with the
1864 most recently installed packages shown last.  When @var{regexp} is
1865 specified, list only installed packages whose name matches @var{regexp}.
1867 For each installed package, print the following items, separated by
1868 tabs: the package name, its version string, the part of the package that
1869 is installed (for instance, @code{out} for the default output,
1870 @code{include} for its headers, etc.), and the path of this package in
1871 the store.
1873 @item --list-available[=@var{regexp}]
1874 @itemx -A [@var{regexp}]
1875 List packages currently available in the distribution for this system
1876 (@pxref{GNU Distribution}).  When @var{regexp} is specified, list only
1877 installed packages whose name matches @var{regexp}.
1879 For each package, print the following items separated by tabs: its name,
1880 its version string, the parts of the package (@pxref{Packages with
1881 Multiple Outputs}), and the source location of its definition.
1883 @item --list-generations[=@var{pattern}]
1884 @itemx -l [@var{pattern}]
1885 @cindex generations
1886 Return a list of generations along with their creation dates; for each
1887 generation, show the installed packages, with the most recently
1888 installed packages shown last.  Note that the zeroth generation is never
1889 shown.
1891 For each installed package, print the following items, separated by
1892 tabs: the name of a package, its version string, the part of the package
1893 that is installed (@pxref{Packages with Multiple Outputs}), and the
1894 location of this package in the store.
1896 When @var{pattern} is used, the command returns only matching
1897 generations.  Valid patterns include:
1899 @itemize
1900 @item @emph{Integers and comma-separated integers}.  Both patterns denote
1901 generation numbers.  For instance, @code{--list-generations=1} returns
1902 the first one.
1904 And @code{--list-generations=1,8,2} outputs three generations in the
1905 specified order.  Neither spaces nor trailing commas are allowed.
1907 @item @emph{Ranges}.  @code{--list-generations=2..9} prints the
1908 specified generations and everything in between.  Note that the start of
1909 a range must be smaller than its end.
1911 It is also possible to omit the endpoint.  For example,
1912 @code{--list-generations=2..}, returns all generations starting from the
1913 second one.
1915 @item @emph{Durations}.  You can also get the last @emph{N}@tie{}days, weeks,
1916 or months by passing an integer along with the first letter of the
1917 duration.  For example, @code{--list-generations=20d} lists generations
1918 that are up to 20 days old.
1919 @end itemize
1921 @item --delete-generations[=@var{pattern}]
1922 @itemx -d [@var{pattern}]
1923 When @var{pattern} is omitted, delete all generations except the current
1924 one.
1926 This command accepts the same patterns as @option{--list-generations}.
1927 When @var{pattern} is specified, delete the matching generations.  When
1928 @var{pattern} specifies a duration, generations @emph{older} than the
1929 specified duration match.  For instance, @code{--delete-generations=1m}
1930 deletes generations that are more than one month old.
1932 If the current generation matches, it is @emph{not} deleted.  Also, the
1933 zeroth generation is never deleted.
1935 Note that deleting generations prevents rolling back to them.
1936 Consequently, this command must be used with care.
1938 @end table
1940 Finally, since @command{guix package} may actually start build
1941 processes, it supports all the common build options (@pxref{Common Build
1942 Options}).  It also supports package transformation options, such as
1943 @option{--with-source} (@pxref{Package Transformation Options}).
1944 However, note that package transformations are lost when upgrading; to
1945 preserve transformations across upgrades, you should define your own
1946 package variant in a Guile module and add it to @code{GUIX_PACKAGE_PATH}
1947 (@pxref{Defining Packages}).
1950 @node Substitutes
1951 @section Substitutes
1953 @cindex substitutes
1954 @cindex pre-built binaries
1955 Guix supports transparent source/binary deployment, which means that it
1956 can either build things locally, or download pre-built items from a
1957 server.  We call these pre-built items @dfn{substitutes}---they are
1958 substitutes for local build results.  In many cases, downloading a
1959 substitute is much faster than building things locally.
1961 Substitutes can be anything resulting from a derivation build
1962 (@pxref{Derivations}).  Of course, in the common case, they are
1963 pre-built package binaries, but source tarballs, for instance, which
1964 also result from derivation builds, can be available as substitutes.
1966 The @code{hydra.gnu.org} server is a front-end to a build farm that
1967 builds packages from the GNU distribution continuously for some
1968 architectures, and makes them available as substitutes (@pxref{Emacs
1969 Hydra}, for information on how to query the continuous integration
1970 server).  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}).
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.
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.
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:
2002 @example
2003 # guix archive --authorize < hydra.gnu.org.pub
2004 @end example
2006 Once this is in place, the output of a command like @code{guix build}
2007 should change from something like:
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
2019 @noindent
2020 to something like:
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
2032 @noindent
2033 This indicates that substitutes from @code{hydra.gnu.org} are usable and
2034 will be downloaded, when possible, for future builds.
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.
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}.
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.)
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.
2063 @unnumberedsubsec On Trusting Binaries
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}).
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}}).
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}.
2092 @node Packages with Multiple Outputs
2093 @section Packages with Multiple Outputs
2095 @cindex multiple-output packages
2096 @cindex package outputs
2097 @cindex outputs
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.
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:
2116 @example
2117 guix package -i glib
2118 @end example
2120 @cindex documentation
2121 The command to install its documentation is:
2123 @example
2124 guix package -i glib:doc
2125 @end example
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}).
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}).
2146 @node Invoking guix gc
2147 @section Invoking @command{guix gc}
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!
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}).
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}).
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:
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.
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}).
2188 When @var{min} is omitted, collect all the garbage.
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.
2196 When @var{free} or more is already available in @file{/gnu/store}, do
2197 nothing and exit immediately.
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.
2205 @item --list-failures
2206 List store items corresponding to cached build failures.
2208 This prints nothing unless the daemon was started with
2209 @option{--cache-failures} (@pxref{Invoking guix-daemon,
2210 @option{--cache-failures}}).
2212 @item --clear-failures
2213 Remove the specified store items from the failed-build cache.
2215 Again, this option only makes sense when the daemon is started with
2216 @option{--cache-failures}.  Otherwise, it does nothing.
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.
2222 @item --list-live
2223 Show the list of live store files and directories.
2225 @end table
2227 In addition, the references among existing store files can be queried:
2229 @table @code
2231 @item --references
2232 @itemx --referrers
2233 @cindex package dependencies
2234 List the references (respectively, the referrers) of store files given
2235 as arguments.
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.
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.
2249 @end table
2251 Lastly, the following options allow you to check the integrity of the
2252 store and to control disk usage.
2254 @table @option
2256 @item --verify[=@var{options}]
2257 @cindex integrity, of the store
2258 @cindex integrity checking
2259 Verify the integrity of the store.
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}.
2264 When provided, @var{options} must be a comma-separated list containing one
2265 or more of @code{contents} and @code{repair}.
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.
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.
2280 @item --optimize
2281 @cindex deduplication
2282 Optimize the store by hard-linking identical files---this is
2283 @dfn{deduplication}.
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}.
2291 @end table
2293 @node Invoking guix pull
2294 @section Invoking @command{guix pull}
2296 @cindex upgrading Guix
2297 @cindex @command{guix pull}
2298 @cindex pull
2299 Packages are installed or upgraded to the latest version available in
2300 the distribution currently available on your local machine.  To update
2301 that distribution, along with the Guix tools, you must run @command{guix
2302 pull}: the command downloads the latest Guix source code and package
2303 descriptions, and deploys it.
2305 On completion, @command{guix package} will use packages and package
2306 versions from this just-retrieved copy of Guix.  Not only that, but all
2307 the Guix commands and Scheme modules will also be taken from that latest
2308 version.  New @command{guix} sub-commands added by the update also
2309 become available.
2311 Any user can update their Guix copy using @command{guix pull}, and the
2312 effect is limited to the user who run @command{guix pull}.  For
2313 instance, when user @code{root} runs @command{guix pull}, this has no
2314 effect on the version of Guix that user @code{alice} sees, and vice
2315 versa@footnote{Under the hood, @command{guix pull} updates the
2316 @file{~/.config/guix/latest} symbolic link to point to the latest Guix,
2317 and the @command{guix} command loads code from there.}.
2319 The @command{guix pull} command is usually invoked with no arguments,
2320 but it supports the following options:
2322 @table @code
2323 @item --verbose
2324 Produce verbose output, writing build logs to the standard error output.
2326 @item --url=@var{url}
2327 Download the source tarball of Guix from @var{url}.
2329 By default, the tarball is taken from its canonical address at
2330 @code{gnu.org}, for the stable branch of Guix.
2332 @item --bootstrap
2333 Use the bootstrap Guile to build the latest Guix.  This option is only
2334 useful to Guix developers.
2335 @end table
2338 @node Invoking guix archive
2339 @section Invoking @command{guix archive}
2341 @cindex @command{guix archive}
2342 @cindex archive
2343 The @command{guix archive} command allows users to @dfn{export} files
2344 from the store into a single archive, and to later @dfn{import} them.
2345 In particular, it allows store files to be transferred from one machine
2346 to the store on another machine.
2348 @cindex exporting store items
2349 To export store files as an archive to standard output, run:
2351 @example
2352 guix archive --export @var{options} @var{specifications}...
2353 @end example
2355 @var{specifications} may be either store file names or package
2356 specifications, as for @command{guix package} (@pxref{Invoking guix
2357 package}).  For instance, the following command creates an archive
2358 containing the @code{gui} output of the @code{git} package and the main
2359 output of @code{emacs}:
2361 @example
2362 guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
2363 @end example
2365 If the specified packages are not built yet, @command{guix archive}
2366 automatically builds them.  The build process may be controlled with the
2367 common build options (@pxref{Common Build Options}).
2369 To transfer the @code{emacs} package to a machine connected over SSH,
2370 one would run:
2372 @example
2373 guix archive --export -r emacs | ssh the-machine guix archive --import
2374 @end example
2376 @noindent
2377 Similarly, a complete user profile may be transferred from one machine
2378 to another like this:
2380 @example
2381 guix archive --export -r $(readlink -f ~/.guix-profile) | \
2382   ssh the-machine guix-archive --import
2383 @end example
2385 @noindent
2386 However, note that, in both examples, all of @code{emacs} and the
2387 profile as well as all of their dependencies are transferred (due to
2388 @code{-r}), regardless of what is already available in the store on the
2389 target machine.  The @code{--missing} option can help figure out which
2390 items are missing from the target store.
2392 Archives are stored in the ``Nix archive'' or ``Nar'' format, which is
2393 comparable in spirit to `tar', but with a few noteworthy differences
2394 that make it more appropriate for our purposes.  First, rather than
2395 recording all Unix metadata for each file, the Nar format only mentions
2396 the file type (regular, directory, or symbolic link); Unix permissions
2397 and owner/group are dismissed.  Second, the order in which directory
2398 entries are stored always follows the order of file names according to
2399 the C locale collation order.  This makes archive production fully
2400 deterministic.
2402 When exporting, the daemon digitally signs the contents of the archive,
2403 and that digital signature is appended.  When importing, the daemon
2404 verifies the signature and rejects the import in case of an invalid
2405 signature or if the signing key is not authorized.
2406 @c FIXME: Add xref to daemon doc about signatures.
2408 The main options are:
2410 @table @code
2411 @item --export
2412 Export the specified store files or packages (see below.)  Write the
2413 resulting archive to the standard output.
2415 Dependencies are @emph{not} included in the output, unless
2416 @code{--recursive} is passed.
2418 @item -r
2419 @itemx --recursive
2420 When combined with @code{--export}, this instructs @command{guix
2421 archive} to include dependencies of the given items in the archive.
2422 Thus, the resulting archive is self-contained: it contains the closure
2423 of the exported store items.
2425 @item --import
2426 Read an archive from the standard input, and import the files listed
2427 therein into the store.  Abort if the archive has an invalid digital
2428 signature, or if it is signed by a public key not among the authorized
2429 keys (see @code{--authorize} below.)
2431 @item --missing
2432 Read a list of store file names from the standard input, one per line,
2433 and write on the standard output the subset of these files missing from
2434 the store.
2436 @item --generate-key[=@var{parameters}]
2437 @cindex signing, archives
2438 Generate a new key pair for the daemon.  This is a prerequisite before
2439 archives can be exported with @code{--export}.  Note that this operation
2440 usually takes time, because it needs to gather enough entropy to
2441 generate the key pair.
2443 The generated key pair is typically stored under @file{/etc/guix}, in
2444 @file{signing-key.pub} (public key) and @file{signing-key.sec} (private
2445 key, which must be kept secret.)  When @var{parameters} is omitted,
2446 an ECDSA key using the Ed25519 curve is generated, or, for Libgcrypt
2447 versions before 1.6.0, it is a 4096-bit RSA key.
2448 Alternatively, @var{parameters} can specify
2449 @code{genkey} parameters suitable for Libgcrypt (@pxref{General
2450 public-key related Functions, @code{gcry_pk_genkey},, gcrypt, The
2451 Libgcrypt Reference Manual}).
2453 @item --authorize
2454 @cindex authorizing, archives
2455 Authorize imports signed by the public key passed on standard input.
2456 The public key must be in ``s-expression advanced format''---i.e., the
2457 same format as the @file{signing-key.pub} file.
2459 The list of authorized keys is kept in the human-editable file
2460 @file{/etc/guix/acl}.  The file contains
2461 @url{http://people.csail.mit.edu/rivest/Sexp.txt, ``advanced-format
2462 s-expressions''} and is structured as an access-control list in the
2463 @url{http://theworld.com/~cme/spki.txt, Simple Public-Key Infrastructure
2464 (SPKI)}.
2466 @item --extract=@var{directory}
2467 @itemx -x @var{directory}
2468 Read a single-item archive as served by substitute servers
2469 (@pxref{Substitutes}) and extract it to @var{directory}.  This is a
2470 low-level operation needed in only very narrow use cases; see below.
2472 For example, the following command extracts the substitute for Emacs
2473 served by @code{hydra.gnu.org} to @file{/tmp/emacs}:
2475 @example
2476 $ wget -O - \
2477   https://hydra.gnu.org/nar/@dots{}-emacs-24.5 \
2478   | bunzip2 | guix archive -x /tmp/emacs
2479 @end example
2481 Single-item archives are different from multiple-item archives produced
2482 by @command{guix archive --export}; they contain a single store item,
2483 and they do @emph{not} embed a signature.  Thus this operation does
2484 @emph{no} signature verification and its output should be considered
2485 unsafe.
2487 The primary purpose of this operation is to facilitate inspection of
2488 archive contents coming from possibly untrusted substitute servers.
2490 @end table
2492 @c *********************************************************************
2493 @include emacs.texi
2495 @c *********************************************************************
2496 @node Programming Interface
2497 @chapter Programming Interface
2499 GNU Guix provides several Scheme programming interfaces (APIs) to
2500 define, build, and query packages.  The first interface allows users to
2501 write high-level package definitions.  These definitions refer to
2502 familiar packaging concepts, such as the name and version of a package,
2503 its build system, and its dependencies.  These definitions can then be
2504 turned into concrete build actions.
2506 Build actions are performed by the Guix daemon, on behalf of users.  In a
2507 standard setup, the daemon has write access to the store---the
2508 @file{/gnu/store} directory---whereas users do not.  The recommended
2509 setup also has the daemon perform builds in chroots, under a specific
2510 build users, to minimize interference with the rest of the system.
2512 @cindex derivation
2513 Lower-level APIs are available to interact with the daemon and the
2514 store.  To instruct the daemon to perform a build action, users actually
2515 provide it with a @dfn{derivation}.  A derivation is a low-level
2516 representation of the build actions to be taken, and the environment in
2517 which they should occur---derivations are to package definitions what
2518 assembly is to C programs.  The term ``derivation'' comes from the fact
2519 that build results @emph{derive} from them.
2521 This chapter describes all these APIs in turn, starting from high-level
2522 package definitions.
2524 @menu
2525 * Defining Packages::           Defining new packages.
2526 * Build Systems::               Specifying how packages are built.
2527 * The Store::                   Manipulating the package store.
2528 * Derivations::                 Low-level interface to package derivations.
2529 * The Store Monad::             Purely functional interface to the store.
2530 * G-Expressions::               Manipulating build expressions.
2531 @end menu
2533 @node Defining Packages
2534 @section Defining Packages
2536 The high-level interface to package definitions is implemented in the
2537 @code{(guix packages)} and @code{(guix build-system)} modules.  As an
2538 example, the package definition, or @dfn{recipe}, for the GNU Hello
2539 package looks like this:
2541 @example
2542 (define-module (gnu packages hello)
2543   #:use-module (guix packages)
2544   #:use-module (guix download)
2545   #:use-module (guix build-system gnu)
2546   #:use-module (guix licenses)
2547   #:use-module (gnu packages gawk))
2549 (define-public hello
2550   (package
2551     (name "hello")
2552     (version "2.10")
2553     (source (origin
2554               (method url-fetch)
2555               (uri (string-append "mirror://gnu/hello/hello-" version
2556                                   ".tar.gz"))
2557               (sha256
2558                (base32
2559                 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
2560     (build-system gnu-build-system)
2561     (arguments '(#:configure-flags '("--enable-silent-rules")))
2562     (inputs `(("gawk" ,gawk)))
2563     (synopsis "Hello, GNU world: An example GNU package")
2564     (description "Guess what GNU Hello prints!")
2565     (home-page "http://www.gnu.org/software/hello/")
2566     (license gpl3+)))
2567 @end example
2569 @noindent
2570 Without being a Scheme expert, the reader may have guessed the meaning
2571 of the various fields here.  This expression binds the variable
2572 @code{hello} to a @code{<package>} object, which is essentially a record
2573 (@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}).
2574 This package object can be inspected using procedures found in the
2575 @code{(guix packages)} module; for instance, @code{(package-name hello)}
2576 returns---surprise!---@code{"hello"}.
2578 With luck, you may be able to import part or all of the definition of
2579 the package you are interested in from another repository, using the
2580 @code{guix import} command (@pxref{Invoking guix import}).
2582 In the example above, @var{hello} is defined in a module of its own,
2583 @code{(gnu packages hello)}.  Technically, this is not strictly
2584 necessary, but it is convenient to do so: all the packages defined in
2585 modules under @code{(gnu packages @dots{})} are automatically known to
2586 the command-line tools (@pxref{Package Modules}).
2588 There are a few points worth noting in the above package definition:
2590 @itemize
2591 @item
2592 The @code{source} field of the package is an @code{<origin>} object
2593 (@pxref{origin Reference}, for the complete reference).
2594 Here, the @code{url-fetch} method from @code{(guix download)} is used,
2595 meaning that the source is a file to be downloaded over FTP or HTTP.
2597 The @code{mirror://gnu} prefix instructs @code{url-fetch} to use one of
2598 the GNU mirrors defined in @code{(guix download)}.
2600 The @code{sha256} field specifies the expected SHA256 hash of the file
2601 being downloaded.  It is mandatory, and allows Guix to check the
2602 integrity of the file.  The @code{(base32 @dots{})} form introduces the
2603 base32 representation of the hash.  You can obtain this information with
2604 @code{guix download} (@pxref{Invoking guix download}) and @code{guix
2605 hash} (@pxref{Invoking guix hash}).
2607 @cindex patches
2608 When needed, the @code{origin} form can also have a @code{patches} field
2609 listing patches to be applied, and a @code{snippet} field giving a
2610 Scheme expression to modify the source code.
2612 @item
2613 @cindex GNU Build System
2614 The @code{build-system} field specifies the procedure to build the
2615 package (@pxref{Build Systems}).  Here, @var{gnu-build-system}
2616 represents the familiar GNU Build System, where packages may be
2617 configured, built, and installed with the usual @code{./configure &&
2618 make && make check && make install} command sequence.
2620 @item
2621 The @code{arguments} field specifies options for the build system
2622 (@pxref{Build Systems}).  Here it is interpreted by
2623 @var{gnu-build-system} as a request run @file{configure} with the
2624 @code{--enable-silent-rules} flag.
2626 @cindex quote
2627 @cindex quoting
2628 @findex '
2629 @findex quote
2630 What about these quote (@code{'}) characters?  They are Scheme syntax to
2631 introduce a literal list; @code{'} is synonymous with @code{quote}.
2632 @xref{Expression Syntax, quoting,, guile, GNU Guile Reference Manual},
2633 for details.  Here the value of the @code{arguments} field is a list of
2634 arguments passed to the build system down the road, as with @code{apply}
2635 (@pxref{Fly Evaluation, @code{apply},, guile, GNU Guile Reference
2636 Manual}).
2638 The hash-colon (@code{#:}) sequence defines a Scheme @dfn{keyword}
2639 (@pxref{Keywords,,, guile, GNU Guile Reference Manual}), and
2640 @code{#:configure-flags} is a keyword used to pass a keyword argument
2641 to the build system (@pxref{Coding With Keywords,,, guile, GNU Guile
2642 Reference Manual}).
2644 @item
2645 The @code{inputs} field specifies inputs to the build process---i.e.,
2646 build-time or run-time dependencies of the package.  Here, we define an
2647 input called @code{"gawk"} whose value is that of the @var{gawk}
2648 variable; @var{gawk} is itself bound to a @code{<package>} object.
2650 @cindex backquote (quasiquote)
2651 @findex `
2652 @findex quasiquote
2653 @cindex comma (unquote)
2654 @findex ,
2655 @findex unquote
2656 @findex ,@@
2657 @findex unquote-splicing
2658 Again, @code{`} (a backquote, synonymous with @code{quasiquote}) allows
2659 us to introduce a literal list in the @code{inputs} field, while
2660 @code{,} (a comma, synonymous with @code{unquote}) allows us to insert a
2661 value in that list (@pxref{Expression Syntax, unquote,, guile, GNU Guile
2662 Reference Manual}).
2664 Note that GCC, Coreutils, Bash, and other essential tools do not need to
2665 be specified as inputs here.  Instead, @var{gnu-build-system} takes care
2666 of ensuring that they are present (@pxref{Build Systems}).
2668 However, any other dependencies need to be specified in the
2669 @code{inputs} field.  Any dependency not specified here will simply be
2670 unavailable to the build process, possibly leading to a build failure.
2671 @end itemize
2673 @xref{package Reference}, for a full description of possible fields.
2675 Once a package definition is in place, the
2676 package may actually be built using the @code{guix build} command-line
2677 tool (@pxref{Invoking guix build}).  You can easily jump back to the
2678 package definition using the @command{guix edit} command
2679 (@pxref{Invoking guix edit}).
2680 @xref{Packaging Guidelines}, for
2681 more information on how to test package definitions, and
2682 @ref{Invoking guix lint}, for information on how to check a definition
2683 for style conformance.
2685 Finally, updating the package definition to a new upstream version
2686 can be partly automated by the @command{guix refresh} command
2687 (@pxref{Invoking guix refresh}).
2689 Behind the scenes, a derivation corresponding to the @code{<package>}
2690 object is first computed by the @code{package-derivation} procedure.
2691 That derivation is stored in a @code{.drv} file under @file{/gnu/store}.
2692 The build actions it prescribes may then be realized by using the
2693 @code{build-derivations} procedure (@pxref{The Store}).
2695 @deffn {Scheme Procedure} package-derivation @var{store} @var{package} [@var{system}]
2696 Return the @code{<derivation>} object of @var{package} for @var{system}
2697 (@pxref{Derivations}).
2699 @var{package} must be a valid @code{<package>} object, and @var{system}
2700 must be a string denoting the target system type---e.g.,
2701 @code{"x86_64-linux"} for an x86_64 Linux-based GNU system.  @var{store}
2702 must be a connection to the daemon, which operates on the store
2703 (@pxref{The Store}).
2704 @end deffn
2706 @noindent
2707 @cindex cross-compilation
2708 Similarly, it is possible to compute a derivation that cross-builds a
2709 package for some other system:
2711 @deffn {Scheme Procedure} package-cross-derivation @var{store} @
2712             @var{package} @var{target} [@var{system}]
2713 Return the @code{<derivation>} object of @var{package} cross-built from
2714 @var{system} to @var{target}.
2716 @var{target} must be a valid GNU triplet denoting the target hardware
2717 and operating system, such as @code{"mips64el-linux-gnu"}
2718 (@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
2719 Configure and Build System}).
2720 @end deffn
2722 @cindex package transformations
2723 @cindex input rewriting
2724 @cindex dependency tree rewriting
2725 Packages can be manipulated in arbitrary ways.  An example of a useful
2726 transformation is @dfn{input rewriting}, whereby the dependency tree of
2727 a package is rewritten by replacing specific inputs by others:
2729 @deffn {Scheme Procedure} package-input-rewriting @var{replacements} @
2730            [@var{rewrite-name}]
2731 Return a procedure that, when passed a package, replaces its direct and
2732 indirect dependencies (but not its implicit inputs) according to
2733 @var{replacements}.  @var{replacements} is a list of package pairs; the
2734 first element of each pair is the package to replace, and the second one
2735 is the replacement.
2737 Optionally, @var{rewrite-name} is a one-argument procedure that takes
2738 the name of a package and returns its new name after rewrite.
2739 @end deffn
2741 @noindent
2742 Consider this example:
2744 @example
2745 (define libressl-instead-of-openssl
2746   ;; This is a procedure to replace OPENSSL by LIBRESSL,
2747   ;; recursively.
2748   (package-input-rewriting `((,openssl . ,libressl))))
2750 (define git-with-libressl
2751   (libressl-instead-of-openssl git))
2752 @end example
2754 @noindent
2755 Here we first define a rewriting procedure that replaces @var{openssl}
2756 with @var{libressl}.  Then we use it to define a @dfn{variant} of the
2757 @var{git} package that uses @var{libressl} instead of @var{openssl}.
2758 This is exactly what the @option{--with-input} command-line option does
2759 (@pxref{Package Transformation Options, @option{--with-input}}).
2761 @menu
2762 * package Reference ::          The package data type.
2763 * origin Reference::            The origin data type.
2764 @end menu
2767 @node package Reference
2768 @subsection @code{package} Reference
2770 This section summarizes all the options available in @code{package}
2771 declarations (@pxref{Defining Packages}).
2773 @deftp {Data Type} package
2774 This is the data type representing a package recipe.
2776 @table @asis
2777 @item @code{name}
2778 The name of the package, as a string.
2780 @item @code{version}
2781 The version of the package, as a string.
2783 @item @code{source}
2784 An object telling how the source code for the package should be
2785 acquired.  Most of the time, this is an @code{origin} object, which
2786 denotes a file fetched from the Internet (@pxref{origin Reference}).  It
2787 can also be any other ``file-like'' object such as a @code{local-file},
2788 which denotes a file from the local file system (@pxref{G-Expressions,
2789 @code{local-file}}).
2791 @item @code{build-system}
2792 The build system that should be used to build the package (@pxref{Build
2793 Systems}).
2795 @item @code{arguments} (default: @code{'()})
2796 The arguments that should be passed to the build system.  This is a
2797 list, typically containing sequential keyword-value pairs.
2799 @item @code{inputs} (default: @code{'()})
2800 @itemx @code{native-inputs} (default: @code{'()})
2801 @itemx @code{propagated-inputs} (default: @code{'()})
2802 @cindex inputs, of packages
2803 These fields list dependencies of the package.  Each one is a list of
2804 tuples, where each tuple has a label for the input (a string) as its
2805 first element, a package, origin, or derivation as its second element,
2806 and optionally the name of the output thereof that should be used, which
2807 defaults to @code{"out"} (@pxref{Packages with Multiple Outputs}, for
2808 more on package outputs).  For example, the list below specifies three
2809 inputs:
2811 @example
2812 `(("libffi" ,libffi)
2813   ("libunistring" ,libunistring)
2814   ("glib:bin" ,glib "bin"))  ;the "bin" output of Glib
2815 @end example
2817 @cindex cross compilation, package dependencies
2818 The distinction between @code{native-inputs} and @code{inputs} is
2819 necessary when considering cross-compilation.  When cross-compiling,
2820 dependencies listed in @code{inputs} are built for the @emph{target}
2821 architecture; conversely, dependencies listed in @code{native-inputs}
2822 are built for the architecture of the @emph{build} machine.
2824 @code{native-inputs} is typically used to list tools needed at
2825 build time, but not at run time, such as Autoconf, Automake, pkg-config,
2826 Gettext, or Bison.  @command{guix lint} can report likely mistakes in
2827 this area (@pxref{Invoking guix lint}).
2829 @anchor{package-propagated-inputs}
2830 Lastly, @code{propagated-inputs} is similar to @code{inputs}, but the
2831 specified packages will be automatically installed alongside the package
2832 they belong to (@pxref{package-cmd-propagated-inputs, @command{guix
2833 package}}, for information on how @command{guix package} deals with
2834 propagated inputs.)
2836 For example this is necessary when a C/C++ library needs headers of
2837 another library to compile, or when a pkg-config file refers to another
2838 one @i{via} its @code{Requires} field.
2840 Another example where @code{propagated-inputs} is useful is for languages
2841 that lack a facility to record the run-time search path akin to the
2842 @code{RUNPATH} of ELF files; this includes Guile, Python, Perl, and
2843 more.  To ensure that libraries written in those languages can find
2844 library code they depend on at run time, run-time dependencies must be
2845 listed in @code{propagated-inputs} rather than @code{inputs}.
2847 @item @code{self-native-input?} (default: @code{#f})
2848 This is a Boolean field telling whether the package should use itself as
2849 a native input when cross-compiling.
2851 @item @code{outputs} (default: @code{'("out")})
2852 The list of output names of the package.  @xref{Packages with Multiple
2853 Outputs}, for typical uses of additional outputs.
2855 @item @code{native-search-paths} (default: @code{'()})
2856 @itemx @code{search-paths} (default: @code{'()})
2857 A list of @code{search-path-specification} objects describing
2858 search-path environment variables honored by the package.
2860 @item @code{replacement} (default: @code{#f})
2861 This must be either @code{#f} or a package object that will be used as a
2862 @dfn{replacement} for this package.  @xref{Security Updates, grafts},
2863 for details.
2865 @item @code{synopsis}
2866 A one-line description of the package.
2868 @item @code{description}
2869 A more elaborate description of the package.
2871 @item @code{license}
2872 @cindex license, of packages
2873 The license of the package; a value from @code{(guix licenses)},
2874 or a list of such values.
2876 @item @code{home-page}
2877 The URL to the home-page of the package, as a string.
2879 @item @code{supported-systems} (default: @var{%supported-systems})
2880 The list of systems supported by the package, as strings of the form
2881 @code{architecture-kernel}, for example @code{"x86_64-linux"}.
2883 @item @code{maintainers} (default: @code{'()})
2884 The list of maintainers of the package, as @code{maintainer} objects.
2886 @item @code{location} (default: source location of the @code{package} form)
2887 The source location of the package.  It is useful to override this when
2888 inheriting from another package, in which case this field is not
2889 automatically corrected.
2890 @end table
2891 @end deftp
2894 @node origin Reference
2895 @subsection @code{origin} Reference
2897 This section summarizes all the options available in @code{origin}
2898 declarations (@pxref{Defining Packages}).
2900 @deftp {Data Type} origin
2901 This is the data type representing a source code origin.
2903 @table @asis
2904 @item @code{uri}
2905 An object containing the URI of the source.  The object type depends on
2906 the @code{method} (see below).  For example, when using the
2907 @var{url-fetch} method of @code{(guix download)}, the valid @code{uri}
2908 values are: a URL represented as a string, or a list thereof.
2910 @item @code{method}
2911 A procedure that handles the URI.
2913 Examples include:
2915 @table @asis
2916 @item @var{url-fetch} from @code{(guix download)}
2917 download a file from the HTTP, HTTPS, or FTP URL specified in the
2918 @code{uri} field;
2920 @vindex git-fetch
2921 @item @var{git-fetch} from @code{(guix git-download)}
2922 clone the Git version control repository, and check out the revision
2923 specified in the @code{uri} field as a @code{git-reference} object; a
2924 @code{git-reference} looks like this:
2926 @example
2927 (git-reference
2928   (url "git://git.debian.org/git/pkg-shadow/shadow")
2929   (commit "v4.1.5.1"))
2930 @end example
2931 @end table
2933 @item @code{sha256}
2934 A bytevector containing the SHA-256 hash of the source.  Typically the
2935 @code{base32} form is used here to generate the bytevector from a
2936 base-32 string.
2938 You can obtain this information using @code{guix download}
2939 (@pxref{Invoking guix download}) or @code{guix hash} (@pxref{Invoking
2940 guix hash}).
2942 @item @code{file-name} (default: @code{#f})
2943 The file name under which the source code should be saved.  When this is
2944 @code{#f}, a sensible default value will be used in most cases.  In case
2945 the source is fetched from a URL, the file name from the URL will be
2946 used.  For version control checkouts, it is recommended to provide the
2947 file name explicitly because the default is not very descriptive.
2949 @item @code{patches} (default: @code{'()})
2950 A list of file names containing patches to be applied to the source.
2952 This list of patches must be unconditional.  In particular, it cannot
2953 depend on the value of @code{%current-system} or
2954 @code{%current-target-system}.
2956 @item @code{snippet} (default: @code{#f})
2957 A G-expression (@pxref{G-Expressions}) or S-expression that will be run
2958 in the source directory.  This is a convenient way to modify the source,
2959 sometimes more convenient than a patch.
2961 @item @code{patch-flags} (default: @code{'("-p1")})
2962 A list of command-line flags that should be passed to the @code{patch}
2963 command.
2965 @item @code{patch-inputs} (default: @code{#f})
2966 Input packages or derivations to the patching process.  When this is
2967 @code{#f}, the usual set of inputs necessary for patching are provided,
2968 such as GNU@tie{}Patch.
2970 @item @code{modules} (default: @code{'()})
2971 A list of Guile modules that should be loaded during the patching
2972 process and while running the code in the @code{snippet} field.
2974 @item @code{patch-guile} (default: @code{#f})
2975 The Guile package that should be used in the patching process.  When
2976 this is @code{#f}, a sensible default is used.
2977 @end table
2978 @end deftp
2981 @node Build Systems
2982 @section Build Systems
2984 @cindex build system
2985 Each package definition specifies a @dfn{build system} and arguments for
2986 that build system (@pxref{Defining Packages}).  This @code{build-system}
2987 field represents the build procedure of the package, as well as implicit
2988 dependencies of that build procedure.
2990 Build systems are @code{<build-system>} objects.  The interface to
2991 create and manipulate them is provided by the @code{(guix build-system)}
2992 module, and actual build systems are exported by specific modules.
2994 @cindex bag (low-level package representation)
2995 Under the hood, build systems first compile package objects to
2996 @dfn{bags}.  A @dfn{bag} is like a package, but with less
2997 ornamentation---in other words, a bag is a lower-level representation of
2998 a package, which includes all the inputs of that package, including some
2999 that were implicitly added by the build system.  This intermediate
3000 representation is then compiled to a derivation (@pxref{Derivations}).
3002 Build systems accept an optional list of @dfn{arguments}.  In package
3003 definitions, these are passed @i{via} the @code{arguments} field
3004 (@pxref{Defining Packages}).  They are typically keyword arguments
3005 (@pxref{Optional Arguments, keyword arguments in Guile,, guile, GNU
3006 Guile Reference Manual}).  The value of these arguments is usually
3007 evaluated in the @dfn{build stratum}---i.e., by a Guile process launched
3008 by the daemon (@pxref{Derivations}).
3010 The main build system is @var{gnu-build-system}, which implements the
3011 standard build procedure for GNU and many other packages.  It
3012 is provided by the @code{(guix build-system gnu)} module.
3014 @defvr {Scheme Variable} gnu-build-system
3015 @var{gnu-build-system} represents the GNU Build System, and variants
3016 thereof (@pxref{Configuration, configuration and makefile conventions,,
3017 standards, GNU Coding Standards}).
3019 @cindex build phases
3020 In a nutshell, packages using it are configured, built, and installed with
3021 the usual @code{./configure && make && make check && make install}
3022 command sequence.  In practice, a few additional steps are often needed.
3023 All these steps are split up in separate @dfn{phases},
3024 notably@footnote{Please see the @code{(guix build gnu-build-system)}
3025 modules for more details about the build phases.}:
3027 @table @code
3028 @item unpack
3029 Unpack the source tarball, and change the current directory to the
3030 extracted source tree.  If the source is actually a directory, copy it
3031 to the build tree, and enter that directory.
3033 @item patch-source-shebangs
3034 Patch shebangs encountered in source files so they refer to the right
3035 store file names.  For instance, this changes @code{#!/bin/sh} to
3036 @code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
3038 @item configure
3039 Run the @file{configure} script with a number of default options, such
3040 as @code{--prefix=/gnu/store/@dots{}}, as well as the options specified
3041 by the @code{#:configure-flags} argument.
3043 @item build
3044 Run @code{make} with the list of flags specified with
3045 @code{#:make-flags}.  If the @code{#:parallel-build?} argument is true
3046 (the default), build with @code{make -j}.
3048 @item check
3049 Run @code{make check}, or some other target specified with
3050 @code{#:test-target}, unless @code{#:tests? #f} is passed.  If the
3051 @code{#:parallel-tests?} argument is true (the default), run @code{make
3052 check -j}.
3054 @item install
3055 Run @code{make install} with the flags listed in @code{#:make-flags}.
3057 @item patch-shebangs
3058 Patch shebangs on the installed executable files.
3060 @item strip
3061 Strip debugging symbols from ELF files (unless @code{#:strip-binaries?}
3062 is false), copying them to the @code{debug} output when available
3063 (@pxref{Installing Debugging Files}).
3064 @end table
3066 @vindex %standard-phases
3067 The build-side module @code{(guix build gnu-build-system)} defines
3068 @var{%standard-phases} as the default list of build phases.
3069 @var{%standard-phases} is a list of symbol/procedure pairs, where the
3070 procedure implements the actual phase.
3072 The list of phases used for a particular package can be changed with the
3073 @code{#:phases} parameter.  For instance, passing:
3075 @example
3076 #:phases (modify-phases %standard-phases (delete 'configure))
3077 @end example
3079 means that all the phases described above will be used, except the
3080 @code{configure} phase.
3082 In addition, this build system ensures that the ``standard'' environment
3083 for GNU packages is available.  This includes tools such as GCC, libc,
3084 Coreutils, Bash, Make, Diffutils, grep, and sed (see the @code{(guix
3085 build-system gnu)} module for a complete list).  We call these the
3086 @dfn{implicit inputs} of a package, because package definitions do not
3087 have to mention them.
3088 @end defvr
3090 Other @code{<build-system>} objects are defined to support other
3091 conventions and tools used by free software packages.  They inherit most
3092 of @var{gnu-build-system}, and differ mainly in the set of inputs
3093 implicitly added to the build process, and in the list of phases
3094 executed.  Some of these build systems are listed below.
3096 @defvr {Scheme Variable} ant-build-system
3097 This variable is exported by @code{(guix build-system ant)}.  It
3098 implements the build procedure for Java packages that can be built with
3099 @url{http://ant.apache.org/, Ant build tool}.
3101 It adds both @code{ant} and the @dfn{Java Development Kit} (JDK) as
3102 provided by the @code{icedtea} package to the set of inputs.  Different
3103 packages can be specified with the @code{#:ant} and @code{#:jdk}
3104 parameters, respectively.
3106 When the original package does not provide a suitable Ant build file,
3107 the parameter @code{#:jar-name} can be used to generate a minimal Ant
3108 build file @file{build.xml} with tasks to build the specified jar
3109 archive.
3111 The parameter @code{#:build-target} can be used to specify the Ant task
3112 that should be run during the @code{build} phase.  By default the
3113 ``jar'' task will be run.
3115 @end defvr
3117 @defvr {Scheme Variable} asdf-build-system/source
3118 @defvrx {Scheme Variable} asdf-build-system/sbcl
3119 @defvrx {Scheme Variable} asdf-build-system/ecl
3121 These variables, exported by @code{(guix build-system asdf)}, implement
3122 build procedures for Common Lisp packages using
3123 @url{https://common-lisp.net/project/asdf/, ``ASDF''}. ASDF is a system
3124 definition facility for Common Lisp programs and libraries.
3126 The @code{asdf-build-system/source} system installs the packages in
3127 source form, and can be loaded using any common lisp implementation, via
3128 ASDF.  The others, such as @code{asdf-build-system/sbcl}, install binary
3129 systems in the format which a particular implementation understands.
3130 These build systems can also be used to produce executable programs, or
3131 lisp images which contain a set of packages pre-loaded.
3133 The build system uses naming conventions.  For binary packages, the
3134 package itself as well as its run-time dependencies should begin their
3135 name with the lisp implementation, such as @code{sbcl-} for
3136 @code{asdf-build-system/sbcl}.  Beginning the input name with this
3137 prefix will allow the build system to encode its location into the
3138 resulting library, so that the input can be found at run-time.
3140 If dependencies are used only for tests, it is convenient to use a
3141 different prefix in order to avoid having a run-time dependency on such
3142 systems.  For example,
3144 @example
3145 (define-public sbcl-bordeaux-threads
3146   (package
3147     ...
3148     (native-inputs `(("tests:cl-fiveam" ,sbcl-fiveam)))
3149     ...))
3150 @end example
3152 Additionally, the corresponding source package should be labeled using
3153 the same convention as python packages (see @ref{Python Modules}), using
3154 the @code{cl-} prefix.
3156 For binary packages, each system should be defined as a Guix package.
3157 If one package @code{origin} contains several systems, package variants
3158 can be created in order to build all the systems.  Source packages,
3159 which use @code{asdf-build-system/source}, may contain several systems.
3161 In order to create executable programs and images, the build-side
3162 procedures @code{build-program} and @code{build-image} can be used.
3163 They should be called in a build phase after the @code{create-symlinks}
3164 phase, so that the system which was just built can be used within the
3165 resulting image.  @code{build-program} requires a list of Common Lisp
3166 expressions to be passed as the @code{#:entry-program} argument.
3168 If the system is not defined within its own @code{.asd} file of the same
3169 name, then the @code{#:asd-file} parameter should be used to specify
3170 which file the system is defined in.
3172 @end defvr
3174 @defvr {Scheme Variable} cmake-build-system
3175 This variable is exported by @code{(guix build-system cmake)}.  It
3176 implements the build procedure for packages using the
3177 @url{http://www.cmake.org, CMake build tool}.
3179 It automatically adds the @code{cmake} package to the set of inputs.
3180 Which package is used can be specified with the @code{#:cmake}
3181 parameter.
3183 The @code{#:configure-flags} parameter is taken as a list of flags
3184 passed to the @command{cmake} command.  The @code{#:build-type}
3185 parameter specifies in abstract terms the flags passed to the compiler;
3186 it defaults to @code{"RelWithDebInfo"} (short for ``release mode with
3187 debugging information''), which roughly means that code is compiled with
3188 @code{-O2 -g}, as is the case for Autoconf-based packages by default.
3189 @end defvr
3191 @defvr {Scheme Variable} glib-or-gtk-build-system
3192 This variable is exported by @code{(guix build-system glib-or-gtk)}.  It
3193 is intended for use with packages making use of GLib or GTK+.
3195 This build system adds the following two phases to the ones defined by
3196 @var{gnu-build-system}:
3198 @table @code
3199 @item glib-or-gtk-wrap
3200 The phase @code{glib-or-gtk-wrap} ensures that programs in
3201 @file{bin/} are able to find GLib ``schemas'' and
3202 @uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, GTK+
3203 modules}.  This is achieved by wrapping the programs in launch scripts
3204 that appropriately set the @code{XDG_DATA_DIRS} and @code{GTK_PATH}
3205 environment variables.
3207 It is possible to exclude specific package outputs from that wrapping
3208 process by listing their names in the
3209 @code{#:glib-or-gtk-wrap-excluded-outputs} parameter.  This is useful
3210 when an output is known not to contain any GLib or GTK+ binaries, and
3211 where wrapping would gratuitously add a dependency of that output on
3212 GLib and GTK+.
3214 @item glib-or-gtk-compile-schemas
3215 The phase @code{glib-or-gtk-compile-schemas} makes sure that all
3216 @uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
3217 GSettings schemas} of GLib are compiled.  Compilation is performed by the
3218 @command{glib-compile-schemas} program.  It is provided by the package
3219 @code{glib:bin} which is automatically imported by the build system.
3220 The @code{glib} package providing @command{glib-compile-schemas} can be
3221 specified with the @code{#:glib} parameter.
3222 @end table
3224 Both phases are executed after the @code{install} phase.
3225 @end defvr
3227 @defvr {Scheme Variable} python-build-system
3228 This variable is exported by @code{(guix build-system python)}.  It
3229 implements the more or less standard build procedure used by Python
3230 packages, which consists in running @code{python setup.py build} and
3231 then @code{python setup.py install --prefix=/gnu/store/@dots{}}.
3233 For packages that install stand-alone Python programs under @code{bin/},
3234 it takes care of wrapping these programs so that their @code{PYTHONPATH}
3235 environment variable points to all the Python libraries they depend on.
3237 Which Python package is used to perform the build can be specified with
3238 the @code{#:python} parameter.  This is a useful way to force a package
3239 to be built for a specific version of the Python interpreter, which
3240 might be necessary if the package is only compatible with a single
3241 interpreter version.
3243 By default guix calls @code{setup.py} under control of
3244 @code{setuptools}, much like @command{pip} does.  Some packages are not
3245 compatible with setuptools (and pip), thus you can disable this by
3246 setting the @code{#:use-setuptools} parameter to @code{#f}.
3247 @end defvr
3249 @defvr {Scheme Variable} perl-build-system
3250 This variable is exported by @code{(guix build-system perl)}.  It
3251 implements the standard build procedure for Perl packages, which either
3252 consists in running @code{perl Build.PL --prefix=/gnu/store/@dots{}},
3253 followed by @code{Build} and @code{Build install}; or in running
3254 @code{perl Makefile.PL PREFIX=/gnu/store/@dots{}}, followed by
3255 @code{make} and @code{make install}, depending on which of
3256 @code{Build.PL} or @code{Makefile.PL} is present in the package
3257 distribution.  Preference is given to the former if both @code{Build.PL}
3258 and @code{Makefile.PL} exist in the package distribution.  This
3259 preference can be reversed by specifying @code{#t} for the
3260 @code{#:make-maker?} parameter.
3262 The initial @code{perl Makefile.PL} or @code{perl Build.PL} invocation
3263 passes flags specified by the @code{#:make-maker-flags} or
3264 @code{#:module-build-flags} parameter, respectively.
3266 Which Perl package is used can be specified with @code{#:perl}.
3267 @end defvr
3269 @defvr {Scheme Variable} r-build-system
3270 This variable is exported by @code{(guix build-system r)}.  It
3271 implements the build procedure used by @uref{http://r-project.org, R}
3272 packages, which essentially is little more than running @code{R CMD
3273 INSTALL --library=/gnu/store/@dots{}} in an environment where
3274 @code{R_LIBS_SITE} contains the paths to all R package inputs.  Tests
3275 are run after installation using the R function
3276 @code{tools::testInstalledPackage}.
3277 @end defvr
3279 @defvr {Scheme Variable} ruby-build-system
3280 This variable is exported by @code{(guix build-system ruby)}.  It
3281 implements the RubyGems build procedure used by Ruby packages, which
3282 involves running @code{gem build} followed by @code{gem install}.
3284 The @code{source} field of a package that uses this build system
3285 typically references a gem archive, since this is the format that Ruby
3286 developers use when releasing their software.  The build system unpacks
3287 the gem archive, potentially patches the source, runs the test suite,
3288 repackages the gem, and installs it.  Additionally, directories and
3289 tarballs may be referenced to allow building unreleased gems from Git or
3290 a traditional source release tarball.
3292 Which Ruby package is used can be specified with the @code{#:ruby}
3293 parameter.  A list of additional flags to be passed to the @command{gem}
3294 command can be specified with the @code{#:gem-flags} parameter.
3295 @end defvr
3297 @defvr {Scheme Variable} waf-build-system
3298 This variable is exported by @code{(guix build-system waf)}.  It
3299 implements a build procedure around the @code{waf} script.  The common
3300 phases---@code{configure}, @code{build}, and @code{install}---are
3301 implemented by passing their names as arguments to the @code{waf}
3302 script.
3304 The @code{waf} script is executed by the Python interpreter.  Which
3305 Python package is used to run the script can be specified with the
3306 @code{#:python} parameter.
3307 @end defvr
3309 @defvr {Scheme Variable} haskell-build-system
3310 This variable is exported by @code{(guix build-system haskell)}.  It
3311 implements the Cabal build procedure used by Haskell packages, which
3312 involves running @code{runhaskell Setup.hs configure
3313 --prefix=/gnu/store/@dots{}} and @code{runhaskell Setup.hs build}.
3314 Instead of installing the package by running @code{runhaskell Setup.hs
3315 install}, to avoid trying to register libraries in the read-only
3316 compiler store directory, the build system uses @code{runhaskell
3317 Setup.hs copy}, followed by @code{runhaskell Setup.hs register}.  In
3318 addition, the build system generates the package documentation by
3319 running @code{runhaskell Setup.hs haddock}, unless @code{#:haddock? #f}
3320 is passed.  Optional Haddock parameters can be passed with the help of
3321 the @code{#:haddock-flags} parameter.  If the file @code{Setup.hs} is
3322 not found, the build system looks for @code{Setup.lhs} instead.
3324 Which Haskell compiler is used can be specified with the @code{#:haskell}
3325 parameter which defaults to @code{ghc}.
3326 @end defvr
3328 @defvr {Scheme Variable} emacs-build-system
3329 This variable is exported by @code{(guix build-system emacs)}.  It
3330 implements an installation procedure similar to the packaging system
3331 of Emacs itself (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
3333 It first creates the @code{@var{package}-autoloads.el} file, then it
3334 byte compiles all Emacs Lisp files.  Differently from the Emacs
3335 packaging system, the Info documentation files are moved to the standard
3336 documentation directory and the @file{dir} file is deleted.  Each
3337 package is installed in its own directory under
3338 @file{share/emacs/site-lisp/guix.d}.
3339 @end defvr
3341 Lastly, for packages that do not need anything as sophisticated, a
3342 ``trivial'' build system is provided.  It is trivial in the sense that
3343 it provides basically no support: it does not pull any implicit inputs,
3344 and does not have a notion of build phases.
3346 @defvr {Scheme Variable} trivial-build-system
3347 This variable is exported by @code{(guix build-system trivial)}.
3349 This build system requires a @code{#:builder} argument.  This argument
3350 must be a Scheme expression that builds the package output(s)---as
3351 with @code{build-expression->derivation} (@pxref{Derivations,
3352 @code{build-expression->derivation}}).
3353 @end defvr
3355 @node The Store
3356 @section The Store
3358 @cindex store
3359 @cindex store items
3360 @cindex store paths
3362 Conceptually, the @dfn{store} is the place where derivations that have
3363 been built successfully are stored---by default, @file{/gnu/store}.
3364 Sub-directories in the store are referred to as @dfn{store items} or
3365 sometimes @dfn{store paths}.  The store has an associated database that
3366 contains information such as the store paths referred to by each store
3367 path, and the list of @emph{valid} store items---results of successful
3368 builds.  This database resides in @file{@var{localstatedir}/guix/db},
3369 where @var{localstatedir} is the state directory specified @i{via}
3370 @option{--localstatedir} at configure time, usually @file{/var}.
3372 The store is @emph{always} accessed by the daemon on behalf of its clients
3373 (@pxref{Invoking guix-daemon}).  To manipulate the store, clients
3374 connect to the daemon over a Unix-domain socket, send requests to it,
3375 and read the result---these are remote procedure calls, or RPCs.
3377 @quotation Note
3378 Users must @emph{never} modify files under @file{/gnu/store} directly.
3379 This would lead to inconsistencies and break the immutability
3380 assumptions of Guix's functional model (@pxref{Introduction}).
3382 @xref{Invoking guix gc, @command{guix gc --verify}}, for information on
3383 how to check the integrity of the store and attempt recovery from
3384 accidental modifications.
3385 @end quotation
3387 The @code{(guix store)} module provides procedures to connect to the
3388 daemon, and to perform RPCs.  These are described below.
3390 @deffn {Scheme Procedure} open-connection [@var{file}] [#:reserve-space? #t]
3391 Connect to the daemon over the Unix-domain socket at @var{file}.  When
3392 @var{reserve-space?} is true, instruct it to reserve a little bit of
3393 extra space on the file system so that the garbage collector can still
3394 operate should the disk become full.  Return a server object.
3396 @var{file} defaults to @var{%default-socket-path}, which is the normal
3397 location given the options that were passed to @command{configure}.
3398 @end deffn
3400 @deffn {Scheme Procedure} close-connection @var{server}
3401 Close the connection to @var{server}.
3402 @end deffn
3404 @defvr {Scheme Variable} current-build-output-port
3405 This variable is bound to a SRFI-39 parameter, which refers to the port
3406 where build and error logs sent by the daemon should be written.
3407 @end defvr
3409 Procedures that make RPCs all take a server object as their first
3410 argument.
3412 @deffn {Scheme Procedure} valid-path? @var{server} @var{path}
3413 @cindex invalid store items
3414 Return @code{#t} when @var{path} designates a valid store item and
3415 @code{#f} otherwise (an invalid item may exist on disk but still be
3416 invalid, for instance because it is the result of an aborted or failed
3417 build.)
3419 A @code{&nix-protocol-error} condition is raised if @var{path} is not
3420 prefixed by the store directory (@file{/gnu/store}).
3421 @end deffn
3423 @deffn {Scheme Procedure} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
3424 Add @var{text} under file @var{name} in the store, and return its store
3425 path.  @var{references} is the list of store paths referred to by the
3426 resulting store path.
3427 @end deffn
3429 @deffn {Scheme Procedure} build-derivations @var{server} @var{derivations}
3430 Build @var{derivations} (a list of @code{<derivation>} objects or
3431 derivation paths), and return when the worker is done building them.
3432 Return @code{#t} on success.
3433 @end deffn
3435 Note that the @code{(guix monads)} module provides a monad as well as
3436 monadic versions of the above procedures, with the goal of making it
3437 more convenient to work with code that accesses the store (@pxref{The
3438 Store Monad}).
3440 @c FIXME
3441 @i{This section is currently incomplete.}
3443 @node Derivations
3444 @section Derivations
3446 @cindex derivations
3447 Low-level build actions and the environment in which they are performed
3448 are represented by @dfn{derivations}.  A derivation contains the
3449 following pieces of information:
3451 @itemize
3452 @item
3453 The outputs of the derivation---derivations produce at least one file or
3454 directory in the store, but may produce more.
3456 @item
3457 The inputs of the derivations, which may be other derivations or plain
3458 files in the store (patches, build scripts, etc.)
3460 @item
3461 The system type targeted by the derivation---e.g., @code{x86_64-linux}.
3463 @item
3464 The file name of a build script in the store, along with the arguments
3465 to be passed.
3467 @item
3468 A list of environment variables to be defined.
3470 @end itemize
3472 @cindex derivation path
3473 Derivations allow clients of the daemon to communicate build actions to
3474 the store.  They exist in two forms: as an in-memory representation,
3475 both on the client- and daemon-side, and as files in the store whose
3476 name end in @code{.drv}---these files are referred to as @dfn{derivation
3477 paths}.  Derivations paths can be passed to the @code{build-derivations}
3478 procedure to perform the build actions they prescribe (@pxref{The
3479 Store}).
3481 The @code{(guix derivations)} module provides a representation of
3482 derivations as Scheme objects, along with procedures to create and
3483 otherwise manipulate derivations.  The lowest-level primitive to create
3484 a derivation is the @code{derivation} procedure:
3486 @deffn {Scheme Procedure} derivation @var{store} @var{name} @var{builder} @
3487   @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
3488   [#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
3489   [#:system (%current-system)] [#:references-graphs #f] @
3490   [#:allowed-references #f] [#:disallowed-references #f] @
3491   [#:leaked-env-vars #f] [#:local-build? #f] @
3492   [#:substitutable? #t]
3493 Build a derivation with the given arguments, and return the resulting
3494 @code{<derivation>} object.
3496 When @var{hash} and @var{hash-algo} are given, a
3497 @dfn{fixed-output derivation} is created---i.e., one whose result is
3498 known in advance, such as a file download.  If, in addition,
3499 @var{recursive?} is true, then that fixed output may be an executable
3500 file or a directory and @var{hash} must be the hash of an archive
3501 containing this output.
3503 When @var{references-graphs} is true, it must be a list of file
3504 name/store path pairs.  In that case, the reference graph of each store
3505 path is exported in the build environment in the corresponding file, in
3506 a simple text format.
3508 When @var{allowed-references} is true, it must be a list of store items
3509 or outputs that the derivation's output may refer to.  Likewise,
3510 @var{disallowed-references}, if true, must be a list of things the
3511 outputs may @emph{not} refer to.
3513 When @var{leaked-env-vars} is true, it must be a list of strings
3514 denoting environment variables that are allowed to ``leak'' from the
3515 daemon's environment to the build environment.  This is only applicable
3516 to fixed-output derivations---i.e., when @var{hash} is true.  The main
3517 use is to allow variables such as @code{http_proxy} to be passed to
3518 derivations that download files.
3520 When @var{local-build?} is true, declare that the derivation is not a
3521 good candidate for offloading and should rather be built locally
3522 (@pxref{Daemon Offload Setup}).  This is the case for small derivations
3523 where the costs of data transfers would outweigh the benefits.
3525 When @var{substitutable?} is false, declare that substitutes of the
3526 derivation's output should not be used (@pxref{Substitutes}).  This is
3527 useful, for instance, when building packages that capture details of the
3528 host CPU instruction set.
3529 @end deffn
3531 @noindent
3532 Here's an example with a shell script as its builder, assuming
3533 @var{store} is an open connection to the daemon, and @var{bash} points
3534 to a Bash executable in the store:
3536 @lisp
3537 (use-modules (guix utils)
3538              (guix store)
3539              (guix derivations))
3541 (let ((builder   ; add the Bash script to the store
3542         (add-text-to-store store "my-builder.sh"
3543                            "echo hello world > $out\n" '())))
3544   (derivation store "foo"
3545               bash `("-e" ,builder)
3546               #:inputs `((,bash) (,builder))
3547               #:env-vars '(("HOME" . "/homeless"))))
3548 @result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
3549 @end lisp
3551 As can be guessed, this primitive is cumbersome to use directly.  A
3552 better approach is to write build scripts in Scheme, of course!  The
3553 best course of action for that is to write the build code as a
3554 ``G-expression'', and to pass it to @code{gexp->derivation}.  For more
3555 information, @pxref{G-Expressions}.
3557 Once upon a time, @code{gexp->derivation} did not exist and constructing
3558 derivations with build code written in Scheme was achieved with
3559 @code{build-expression->derivation}, documented below.  This procedure
3560 is now deprecated in favor of the much nicer @code{gexp->derivation}.
3562 @deffn {Scheme Procedure} build-expression->derivation @var{store} @
3563        @var{name} @var{exp} @
3564        [#:system (%current-system)] [#:inputs '()] @
3565        [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
3566        [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
3567        [#:references-graphs #f] [#:allowed-references #f] @
3568        [#:disallowed-references #f] @
3569        [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
3570 Return a derivation that executes Scheme expression @var{exp} as a
3571 builder for derivation @var{name}.  @var{inputs} must be a list of
3572 @code{(name drv-path sub-drv)} tuples; when @var{sub-drv} is omitted,
3573 @code{"out"} is assumed.  @var{modules} is a list of names of Guile
3574 modules from the current search path to be copied in the store,
3575 compiled, and made available in the load path during the execution of
3576 @var{exp}---e.g., @code{((guix build utils) (guix build
3577 gnu-build-system))}.
3579 @var{exp} is evaluated in an environment where @code{%outputs} is bound
3580 to a list of output/path pairs, and where @code{%build-inputs} is bound
3581 to a list of string/output-path pairs made from @var{inputs}.
3582 Optionally, @var{env-vars} is a list of string pairs specifying the name
3583 and value of environment variables visible to the builder.  The builder
3584 terminates by passing the result of @var{exp} to @code{exit}; thus, when
3585 @var{exp} returns @code{#f}, the build is considered to have failed.
3587 @var{exp} is built using @var{guile-for-build} (a derivation).  When
3588 @var{guile-for-build} is omitted or is @code{#f}, the value of the
3589 @code{%guile-for-build} fluid is used instead.
3591 See the @code{derivation} procedure for the meaning of
3592 @var{references-graphs}, @var{allowed-references},
3593 @var{disallowed-references}, @var{local-build?}, and
3594 @var{substitutable?}.
3595 @end deffn
3597 @noindent
3598 Here's an example of a single-output derivation that creates a directory
3599 containing one file:
3601 @lisp
3602 (let ((builder '(let ((out (assoc-ref %outputs "out")))
3603                   (mkdir out)    ; create /gnu/store/@dots{}-goo
3604                   (call-with-output-file (string-append out "/test")
3605                     (lambda (p)
3606                       (display '(hello guix) p))))))
3607   (build-expression->derivation store "goo" builder))
3609 @result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
3610 @end lisp
3613 @node The Store Monad
3614 @section The Store Monad
3616 @cindex monad
3618 The procedures that operate on the store described in the previous
3619 sections all take an open connection to the build daemon as their first
3620 argument.  Although the underlying model is functional, they either have
3621 side effects or depend on the current state of the store.
3623 The former is inconvenient: the connection to the build daemon has to be
3624 carried around in all those functions, making it impossible to compose
3625 functions that do not take that parameter with functions that do.  The
3626 latter can be problematic: since store operations have side effects
3627 and/or depend on external state, they have to be properly sequenced.
3629 @cindex monadic values
3630 @cindex monadic functions
3631 This is where the @code{(guix monads)} module comes in.  This module
3632 provides a framework for working with @dfn{monads}, and a particularly
3633 useful monad for our uses, the @dfn{store monad}.  Monads are a
3634 construct that allows two things: associating ``context'' with values
3635 (in our case, the context is the store), and building sequences of
3636 computations (here computations include accesses to the store).  Values
3637 in a monad---values that carry this additional context---are called
3638 @dfn{monadic values}; procedures that return such values are called
3639 @dfn{monadic procedures}.
3641 Consider this ``normal'' procedure:
3643 @example
3644 (define (sh-symlink store)
3645   ;; Return a derivation that symlinks the 'bash' executable.
3646   (let* ((drv (package-derivation store bash))
3647          (out (derivation->output-path drv))
3648          (sh  (string-append out "/bin/bash")))
3649     (build-expression->derivation store "sh"
3650                                   `(symlink ,sh %output))))
3651 @end example
3653 Using @code{(guix monads)} and @code{(guix gexp)}, it may be rewritten
3654 as a monadic function:
3656 @example
3657 (define (sh-symlink)
3658   ;; Same, but return a monadic value.
3659   (mlet %store-monad ((drv (package->derivation bash)))
3660     (gexp->derivation "sh"
3661                       #~(symlink (string-append #$drv "/bin/bash")
3662                                  #$output))))
3663 @end example
3665 There are several things to note in the second version: the @code{store}
3666 parameter is now implicit and is ``threaded'' in the calls to the
3667 @code{package->derivation} and @code{gexp->derivation} monadic
3668 procedures, and the monadic value returned by @code{package->derivation}
3669 is @dfn{bound} using @code{mlet} instead of plain @code{let}.
3671 As it turns out, the call to @code{package->derivation} can even be
3672 omitted since it will take place implicitly, as we will see later
3673 (@pxref{G-Expressions}):
3675 @example
3676 (define (sh-symlink)
3677   (gexp->derivation "sh"
3678                     #~(symlink (string-append #$bash "/bin/bash")
3679                                #$output)))
3680 @end example
3682 @c See
3683 @c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
3684 @c for the funny quote.
3685 Calling the monadic @code{sh-symlink} has no effect.  As someone once
3686 said, ``you exit a monad like you exit a building on fire: by running''.
3687 So, to exit the monad and get the desired effect, one must use
3688 @code{run-with-store}:
3690 @example
3691 (run-with-store (open-connection) (sh-symlink))
3692 @result{} /gnu/store/...-sh-symlink
3693 @end example
3695 Note that the @code{(guix monad-repl)} module extends the Guile REPL with
3696 new ``meta-commands'' to make it easier to deal with monadic procedures:
3697 @code{run-in-store}, and @code{enter-store-monad}.  The former is used
3698 to ``run'' a single monadic value through the store:
3700 @example
3701 scheme@@(guile-user)> ,run-in-store (package->derivation hello)
3702 $1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
3703 @end example
3705 The latter enters a recursive REPL, where all the return values are
3706 automatically run through the store:
3708 @example
3709 scheme@@(guile-user)> ,enter-store-monad
3710 store-monad@@(guile-user) [1]> (package->derivation hello)
3711 $2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
3712 store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
3713 $3 = "/gnu/store/@dots{}-foo"
3714 store-monad@@(guile-user) [1]> ,q
3715 scheme@@(guile-user)>
3716 @end example
3718 @noindent
3719 Note that non-monadic values cannot be returned in the
3720 @code{store-monad} REPL.
3722 The main syntactic forms to deal with monads in general are provided by
3723 the @code{(guix monads)} module and are described below.
3725 @deffn {Scheme Syntax} with-monad @var{monad} @var{body} ...
3726 Evaluate any @code{>>=} or @code{return} forms in @var{body} as being
3727 in @var{monad}.
3728 @end deffn
3730 @deffn {Scheme Syntax} return @var{val}
3731 Return a monadic value that encapsulates @var{val}.
3732 @end deffn
3734 @deffn {Scheme Syntax} >>= @var{mval} @var{mproc} ...
3735 @dfn{Bind} monadic value @var{mval}, passing its ``contents'' to monadic
3736 procedures @var{mproc}@dots{}@footnote{This operation is commonly
3737 referred to as ``bind'', but that name denotes an unrelated procedure in
3738 Guile.  Thus we use this somewhat cryptic symbol inherited from the
3739 Haskell language.}.  There can be one @var{mproc} or several of them, as
3740 in this example:
3742 @example
3743 (run-with-state
3744     (with-monad %state-monad
3745       (>>= (return 1)
3746            (lambda (x) (return (+ 1 x)))
3747            (lambda (x) (return (* 2 x)))))
3748   'some-state)
3750 @result{} 4
3751 @result{} some-state
3752 @end example
3753 @end deffn
3755 @deffn {Scheme Syntax} mlet @var{monad} ((@var{var} @var{mval}) ...) @
3756        @var{body} ...
3757 @deffnx {Scheme Syntax} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
3758        @var{body} ...
3759 Bind the variables @var{var} to the monadic values @var{mval} in
3760 @var{body}.  The form (@var{var} -> @var{val}) binds @var{var} to the
3761 ``normal'' value @var{val}, as per @code{let}.
3763 @code{mlet*} is to @code{mlet} what @code{let*} is to @code{let}
3764 (@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
3765 @end deffn
3767 @deffn {Scheme System} mbegin @var{monad} @var{mexp} ...
3768 Bind @var{mexp} and the following monadic expressions in sequence,
3769 returning the result of the last expression.
3771 This is akin to @code{mlet}, except that the return values of the
3772 monadic expressions are ignored.  In that sense, it is analogous to
3773 @code{begin}, but applied to monadic expressions.
3774 @end deffn
3776 @cindex state monad
3777 The @code{(guix monads)} module provides the @dfn{state monad}, which
3778 allows an additional value---the state---to be @emph{threaded} through
3779 monadic procedure calls.
3781 @defvr {Scheme Variable} %state-monad
3782 The state monad.  Procedures in the state monad can access and change
3783 the state that is threaded.
3785 Consider the example below.  The @code{square} procedure returns a value
3786 in the state monad.  It returns the square of its argument, but also
3787 increments the current state value:
3789 @example
3790 (define (square x)
3791   (mlet %state-monad ((count (current-state)))
3792     (mbegin %state-monad
3793       (set-current-state (+ 1 count))
3794       (return (* x x)))))
3796 (run-with-state (sequence %state-monad (map square (iota 3))) 0)
3797 @result{} (0 1 4)
3798 @result{} 3
3799 @end example
3801 When ``run'' through @var{%state-monad}, we obtain that additional state
3802 value, which is the number of @code{square} calls.
3803 @end defvr
3805 @deffn {Monadic Procedure} current-state
3806 Return the current state as a monadic value.
3807 @end deffn
3809 @deffn {Monadic Procedure} set-current-state @var{value}
3810 Set the current state to @var{value} and return the previous state as a
3811 monadic value.
3812 @end deffn
3814 @deffn {Monadic Procedure} state-push @var{value}
3815 Push @var{value} to the current state, which is assumed to be a list,
3816 and return the previous state as a monadic value.
3817 @end deffn
3819 @deffn {Monadic Procedure} state-pop
3820 Pop a value from the current state and return it as a monadic value.
3821 The state is assumed to be a list.
3822 @end deffn
3824 @deffn {Scheme Procedure} run-with-state @var{mval} [@var{state}]
3825 Run monadic value @var{mval} starting with @var{state} as the initial
3826 state.  Return two values: the resulting value, and the resulting state.
3827 @end deffn
3829 The main interface to the store monad, provided by the @code{(guix
3830 store)} module, is as follows.
3832 @defvr {Scheme Variable} %store-monad
3833 The store monad---an alias for @var{%state-monad}.
3835 Values in the store monad encapsulate accesses to the store.  When its
3836 effect is needed, a value of the store monad must be ``evaluated'' by
3837 passing it to the @code{run-with-store} procedure (see below.)
3838 @end defvr
3840 @deffn {Scheme Procedure} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
3841 Run @var{mval}, a monadic value in the store monad, in @var{store}, an
3842 open store connection.
3843 @end deffn
3845 @deffn {Monadic Procedure} text-file @var{name} @var{text} [@var{references}]
3846 Return as a monadic value the absolute file name in the store of the file
3847 containing @var{text}, a string.  @var{references} is a list of store items that the
3848 resulting text file refers to; it defaults to the empty list.
3849 @end deffn
3851 @deffn {Monadic Procedure} interned-file @var{file} [@var{name}] @
3852          [#:recursive? #t] [#:select? (const #t)]
3853 Return the name of @var{file} once interned in the store.  Use
3854 @var{name} as its store name, or the basename of @var{file} if
3855 @var{name} is omitted.
3857 When @var{recursive?} is true, the contents of @var{file} are added
3858 recursively; if @var{file} designates a flat file and @var{recursive?}
3859 is true, its contents are added, and its permission bits are kept.
3861 When @var{recursive?} is true, call @code{(@var{select?} @var{file}
3862 @var{stat})} for each directory entry, where @var{file} is the entry's
3863 absolute file name and @var{stat} is the result of @code{lstat}; exclude
3864 entries for which @var{select?} does not return true.
3866 The example below adds a file to the store, under two different names:
3868 @example
3869 (run-with-store (open-connection)
3870   (mlet %store-monad ((a (interned-file "README"))
3871                       (b (interned-file "README" "LEGU-MIN")))
3872     (return (list a b))))
3874 @result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
3875 @end example
3877 @end deffn
3879 The @code{(guix packages)} module exports the following package-related
3880 monadic procedures:
3882 @deffn {Monadic Procedure} package-file @var{package} [@var{file}] @
3883        [#:system (%current-system)] [#:target #f] @
3884        [#:output "out"]
3885 Return as a monadic
3886 value in the absolute file name of @var{file} within the @var{output}
3887 directory of @var{package}.  When @var{file} is omitted, return the name
3888 of the @var{output} directory of @var{package}.  When @var{target} is
3889 true, use it as a cross-compilation target triplet.
3890 @end deffn
3892 @deffn {Monadic Procedure} package->derivation @var{package} [@var{system}]
3893 @deffnx {Monadic Procedure} package->cross-derivation @var{package} @
3894           @var{target} [@var{system}]
3895 Monadic version of @code{package-derivation} and
3896 @code{package-cross-derivation} (@pxref{Defining Packages}).
3897 @end deffn
3900 @node G-Expressions
3901 @section G-Expressions
3903 @cindex G-expression
3904 @cindex build code quoting
3905 So we have ``derivations'', which represent a sequence of build actions
3906 to be performed to produce an item in the store (@pxref{Derivations}).
3907 These build actions are performed when asking the daemon to actually
3908 build the derivations; they are run by the daemon in a container
3909 (@pxref{Invoking guix-daemon}).
3911 @cindex strata of code
3912 It should come as no surprise that we like to write these build actions
3913 in Scheme.  When we do that, we end up with two @dfn{strata} of Scheme
3914 code@footnote{The term @dfn{stratum} in this context was coined by
3915 Manuel Serrano et al.@: in the context of their work on Hop.  Oleg
3916 Kiselyov, who has written insightful
3917 @url{http://okmij.org/ftp/meta-programming/#meta-scheme, essays and code
3918 on this topic}, refers to this kind of code generation as
3919 @dfn{staging}.}: the ``host code''---code that defines packages, talks
3920 to the daemon, etc.---and the ``build code''---code that actually
3921 performs build actions, such as making directories, invoking
3922 @command{make}, etc.
3924 To describe a derivation and its build actions, one typically needs to
3925 embed build code inside host code.  It boils down to manipulating build
3926 code as data, and the homoiconicity of Scheme---code has a direct
3927 representation as data---comes in handy for that.  But we need more than
3928 the normal @code{quasiquote} mechanism in Scheme to construct build
3929 expressions.
3931 The @code{(guix gexp)} module implements @dfn{G-expressions}, a form of
3932 S-expressions adapted to build expressions.  G-expressions, or
3933 @dfn{gexps}, consist essentially of three syntactic forms: @code{gexp},
3934 @code{ungexp}, and @code{ungexp-splicing} (or simply: @code{#~},
3935 @code{#$}, and @code{#$@@}), which are comparable to
3936 @code{quasiquote}, @code{unquote}, and @code{unquote-splicing},
3937 respectively (@pxref{Expression Syntax, @code{quasiquote},, guile,
3938 GNU Guile Reference Manual}).  However, there are major differences:
3940 @itemize
3941 @item
3942 Gexps are meant to be written to a file and run or manipulated by other
3943 processes.
3945 @item
3946 When a high-level object such as a package or derivation is unquoted
3947 inside a gexp, the result is as if its output file name had been
3948 introduced.
3950 @item
3951 Gexps carry information about the packages or derivations they refer to,
3952 and these dependencies are automatically added as inputs to the build
3953 processes that use them.
3954 @end itemize
3956 @cindex lowering, of high-level objects in gexps
3957 This mechanism is not limited to package and derivation
3958 objects: @dfn{compilers} able to ``lower'' other high-level objects to
3959 derivations or files in the store can be defined,
3960 such that these objects can also be inserted
3961 into gexps.  For example, a useful type of high-level objects that can be
3962 inserted in a gexp is ``file-like objects'', which make it easy to
3963 add files to the store and to refer to them in
3964 derivations and such (see @code{local-file} and @code{plain-file}
3965 below.)
3967 To illustrate the idea, here is an example of a gexp:
3969 @example
3970 (define build-exp
3971   #~(begin
3972       (mkdir #$output)
3973       (chdir #$output)
3974       (symlink (string-append #$coreutils "/bin/ls")
3975                "list-files")))
3976 @end example
3978 This gexp can be passed to @code{gexp->derivation}; we obtain a
3979 derivation that builds a directory containing exactly one symlink to
3980 @file{/gnu/store/@dots{}-coreutils-8.22/bin/ls}:
3982 @example
3983 (gexp->derivation "the-thing" build-exp)
3984 @end example
3986 As one would expect, the @code{"/gnu/store/@dots{}-coreutils-8.22"} string is
3987 substituted to the reference to the @var{coreutils} package in the
3988 actual build code, and @var{coreutils} is automatically made an input to
3989 the derivation.  Likewise, @code{#$output} (equivalent to @code{(ungexp
3990 output)}) is replaced by a string containing the directory name of the
3991 output of the derivation.
3993 @cindex cross compilation
3994 In a cross-compilation context, it is useful to distinguish between
3995 references to the @emph{native} build of a package---that can run on the
3996 host---versus references to cross builds of a package.  To that end, the
3997 @code{#+} plays the same role as @code{#$}, but is a reference to a
3998 native package build:
4000 @example
4001 (gexp->derivation "vi"
4002    #~(begin
4003        (mkdir #$output)
4004        (system* (string-append #+coreutils "/bin/ln")
4005                 "-s"
4006                 (string-append #$emacs "/bin/emacs")
4007                 (string-append #$output "/bin/vi")))
4008    #:target "mips64el-linux-gnu")
4009 @end example
4011 @noindent
4012 In the example above, the native build of @var{coreutils} is used, so
4013 that @command{ln} can actually run on the host; but then the
4014 cross-compiled build of @var{emacs} is referenced.
4016 @cindex imported modules, for gexps
4017 @findex with-imported-modules
4018 Another gexp feature is @dfn{imported modules}: sometimes you want to be
4019 able to use certain Guile modules from the ``host environment'' in the
4020 gexp, so those modules should be imported in the ``build environment''.
4021 The @code{with-imported-modules} form allows you to express that:
4023 @example
4024 (let ((build (with-imported-modules '((guix build utils))
4025                #~(begin
4026                    (use-modules (guix build utils))
4027                    (mkdir-p (string-append #$output "/bin"))))))
4028   (gexp->derivation "empty-dir"
4029                     #~(begin
4030                         #$build
4031                         (display "success!\n")
4032                         #t)))
4033 @end example
4035 @noindent
4036 In this example, the @code{(guix build utils)} module is automatically
4037 pulled into the isolated build environment of our gexp, such that
4038 @code{(use-modules (guix build utils))} works as expected.
4040 @cindex module closure
4041 @findex source-module-closure
4042 Usually you want the @emph{closure} of the module to be imported---i.e.,
4043 the module itself and all the modules it depends on---rather than just
4044 the module; failing to do that, attempts to use the module will fail
4045 because of missing dependent modules.  The @code{source-module-closure}
4046 procedure computes the closure of a module by looking at its source file
4047 headers, which comes in handy in this case:
4049 @example
4050 (use-modules (guix modules))   ;for 'source-module-closure'
4052 (with-imported-modules (source-module-closure
4053                          '((guix build utils)
4054                            (gnu build vm)))
4055   (gexp->derivation "something-with-vms"
4056                     #~(begin
4057                         (use-modules (guix build utils)
4058                                      (gnu build vm))
4059                         @dots{})))
4060 @end example
4062 The syntactic form to construct gexps is summarized below.
4064 @deffn {Scheme Syntax} #~@var{exp}
4065 @deffnx {Scheme Syntax} (gexp @var{exp})
4066 Return a G-expression containing @var{exp}.  @var{exp} may contain one
4067 or more of the following forms:
4069 @table @code
4070 @item #$@var{obj}
4071 @itemx (ungexp @var{obj})
4072 Introduce a reference to @var{obj}.  @var{obj} may have one of the
4073 supported types, for example a package or a
4074 derivation, in which case the @code{ungexp} form is replaced by its
4075 output file name---e.g., @code{"/gnu/store/@dots{}-coreutils-8.22}.
4077 If @var{obj} is a list, it is traversed and references to supported
4078 objects are substituted similarly.
4080 If @var{obj} is another gexp, its contents are inserted and its
4081 dependencies are added to those of the containing gexp.
4083 If @var{obj} is another kind of object, it is inserted as is.
4085 @item #$@var{obj}:@var{output}
4086 @itemx (ungexp @var{obj} @var{output})
4087 This is like the form above, but referring explicitly to the
4088 @var{output} of @var{obj}---this is useful when @var{obj} produces
4089 multiple outputs (@pxref{Packages with Multiple Outputs}).
4091 @item #+@var{obj}
4092 @itemx #+@var{obj}:output
4093 @itemx (ungexp-native @var{obj})
4094 @itemx (ungexp-native @var{obj} @var{output})
4095 Same as @code{ungexp}, but produces a reference to the @emph{native}
4096 build of @var{obj} when used in a cross compilation context.
4098 @item #$output[:@var{output}]
4099 @itemx (ungexp output [@var{output}])
4100 Insert a reference to derivation output @var{output}, or to the main
4101 output when @var{output} is omitted.
4103 This only makes sense for gexps passed to @code{gexp->derivation}.
4105 @item #$@@@var{lst}
4106 @itemx (ungexp-splicing @var{lst})
4107 Like the above, but splices the contents of @var{lst} inside the
4108 containing list.
4110 @item #+@@@var{lst}
4111 @itemx (ungexp-native-splicing @var{lst})
4112 Like the above, but refers to native builds of the objects listed in
4113 @var{lst}.
4115 @end table
4117 G-expressions created by @code{gexp} or @code{#~} are run-time objects
4118 of the @code{gexp?} type (see below.)
4119 @end deffn
4121 @deffn {Scheme Syntax} with-imported-modules @var{modules} @var{body}@dots{}
4122 Mark the gexps defined in @var{body}@dots{} as requiring @var{modules}
4123 in their execution environment.  @var{modules} must be a list of Guile
4124 module names, such as @code{'((guix build utils) (guix build gremlin))}.
4126 This form has @emph{lexical} scope: it has an effect on the gexps
4127 directly defined in @var{body}@dots{}, but not on those defined, say, in
4128 procedures called from @var{body}@dots{}.
4129 @end deffn
4131 @deffn {Scheme Procedure} gexp? @var{obj}
4132 Return @code{#t} if @var{obj} is a G-expression.
4133 @end deffn
4135 G-expressions are meant to be written to disk, either as code building
4136 some derivation, or as plain files in the store.  The monadic procedures
4137 below allow you to do that (@pxref{The Store Monad}, for more
4138 information about monads.)
4140 @deffn {Monadic Procedure} gexp->derivation @var{name} @var{exp} @
4141        [#:system (%current-system)] [#:target #f] [#:graft? #t] @
4142        [#:hash #f] [#:hash-algo #f] @
4143        [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
4144        [#:module-path @var{%load-path}] @
4145        [#:references-graphs #f] [#:allowed-references #f] @
4146        [#:disallowed-references #f] @
4147        [#:leaked-env-vars #f] @
4148        [#:script-name (string-append @var{name} "-builder")] @
4149        [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
4150 Return a derivation @var{name} that runs @var{exp} (a gexp) with
4151 @var{guile-for-build} (a derivation) on @var{system}; @var{exp} is
4152 stored in a file called @var{script-name}.  When @var{target} is true,
4153 it is used as the cross-compilation target triplet for packages referred
4154 to by @var{exp}.
4156 @var{modules} is deprecated in favor of @code{with-imported-modules}.
4157 Its meaning is to
4158 make @var{modules} available in the evaluation context of @var{exp};
4159 @var{modules} is a list of names of Guile modules searched in
4160 @var{module-path} to be copied in the store, compiled, and made available in
4161 the load path during the execution of @var{exp}---e.g., @code{((guix
4162 build utils) (guix build gnu-build-system))}.
4164 @var{graft?} determines whether packages referred to by @var{exp} should be grafted when
4165 applicable.
4167 When @var{references-graphs} is true, it must be a list of tuples of one of the
4168 following forms:
4170 @example
4171 (@var{file-name} @var{package})
4172 (@var{file-name} @var{package} @var{output})
4173 (@var{file-name} @var{derivation})
4174 (@var{file-name} @var{derivation} @var{output})
4175 (@var{file-name} @var{store-item})
4176 @end example
4178 The right-hand-side of each element of @var{references-graphs} is automatically made
4179 an input of the build process of @var{exp}.  In the build environment, each
4180 @var{file-name} contains the reference graph of the corresponding item, in a simple
4181 text format.
4183 @var{allowed-references} must be either @code{#f} or a list of output names and packages.
4184 In the latter case, the list denotes store items that the result is allowed to
4185 refer to.  Any reference to another store item will lead to a build error.
4186 Similarly for @var{disallowed-references}, which can list items that must not be
4187 referenced by the outputs.
4189 The other arguments are as for @code{derivation} (@pxref{Derivations}).
4190 @end deffn
4192 @cindex file-like objects
4193 The @code{local-file}, @code{plain-file}, @code{computed-file},
4194 @code{program-file}, and @code{scheme-file} procedures below return
4195 @dfn{file-like objects}.  That is, when unquoted in a G-expression,
4196 these objects lead to a file in the store.  Consider this G-expression:
4198 @example
4199 #~(system* #$(file-append glibc "/sbin/nscd") "-f"
4200            #$(local-file "/tmp/my-nscd.conf"))
4201 @end example
4203 The effect here is to ``intern'' @file{/tmp/my-nscd.conf} by copying it
4204 to the store.  Once expanded, for instance @i{via}
4205 @code{gexp->derivation}, the G-expression refers to that copy under
4206 @file{/gnu/store}; thus, modifying or removing the file in @file{/tmp}
4207 does not have any effect on what the G-expression does.
4208 @code{plain-file} can be used similarly; it differs in that the file
4209 content is directly passed as a string.
4211 @deffn {Scheme Procedure} local-file @var{file} [@var{name}] @
4212    [#:recursive? #f] [#:select? (const #t)]
4213 Return an object representing local file @var{file} to add to the store; this
4214 object can be used in a gexp.  If @var{file} is a relative file name, it is looked
4215 up relative to the source file where this form appears.  @var{file} will be added to
4216 the store under @var{name}--by default the base name of @var{file}.
4218 When @var{recursive?} is true, the contents of @var{file} are added recursively; if @var{file}
4219 designates a flat file and @var{recursive?} is true, its contents are added, and its
4220 permission bits are kept.
4222 When @var{recursive?} is true, call @code{(@var{select?} @var{file}
4223 @var{stat})} for each directory entry, where @var{file} is the entry's
4224 absolute file name and @var{stat} is the result of @code{lstat}; exclude
4225 entries for which @var{select?} does not return true.
4227 This is the declarative counterpart of the @code{interned-file} monadic
4228 procedure (@pxref{The Store Monad, @code{interned-file}}).
4229 @end deffn
4231 @deffn {Scheme Procedure} plain-file @var{name} @var{content}
4232 Return an object representing a text file called @var{name} with the given
4233 @var{content} (a string) to be added to the store.
4235 This is the declarative counterpart of @code{text-file}.
4236 @end deffn
4238 @deffn {Scheme Procedure} computed-file @var{name} @var{gexp} @
4239           [#:options '(#:local-build? #t)]
4240 Return an object representing the store item @var{name}, a file or
4241 directory computed by @var{gexp}.  @var{options}
4242 is a list of additional arguments to pass to @code{gexp->derivation}.
4244 This is the declarative counterpart of @code{gexp->derivation}.
4245 @end deffn
4247 @deffn {Monadic Procedure} gexp->script @var{name} @var{exp}
4248 Return an executable script @var{name} that runs @var{exp} using
4249 @var{guile}, with @var{exp}'s imported modules in its search path.
4251 The example below builds a script that simply invokes the @command{ls}
4252 command:
4254 @example
4255 (use-modules (guix gexp) (gnu packages base))
4257 (gexp->script "list-files"
4258               #~(execl #$(file-append coreutils "/bin/ls")
4259                        "ls"))
4260 @end example
4262 When ``running'' it through the store (@pxref{The Store Monad,
4263 @code{run-with-store}}), we obtain a derivation that produces an
4264 executable file @file{/gnu/store/@dots{}-list-files} along these lines:
4266 @example
4267 #!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
4269 (execl "/gnu/store/@dots{}-coreutils-8.22"/bin/ls" "ls")
4270 @end example
4271 @end deffn
4273 @deffn {Scheme Procedure} program-file @var{name} @var{exp} @
4274           [#:guile #f]
4275 Return an object representing the executable store item @var{name} that
4276 runs @var{gexp}.  @var{guile} is the Guile package used to execute that
4277 script.
4279 This is the declarative counterpart of @code{gexp->script}.
4280 @end deffn
4282 @deffn {Monadic Procedure} gexp->file @var{name} @var{exp} @
4283             [#:set-load-path? #t]
4284 Return a derivation that builds a file @var{name} containing @var{exp}.
4285 When @var{set-load-path?} is true, emit code in the resulting file to
4286 set @code{%load-path} and @code{%load-compiled-path} to honor
4287 @var{exp}'s imported modules.
4289 The resulting file holds references to all the dependencies of @var{exp}
4290 or a subset thereof.
4291 @end deffn
4293 @deffn {Scheme Procedure} scheme-file @var{name} @var{exp}
4294 Return an object representing the Scheme file @var{name} that contains
4295 @var{exp}.
4297 This is the declarative counterpart of @code{gexp->file}.
4298 @end deffn
4300 @deffn {Monadic Procedure} text-file* @var{name} @var{text} @dots{}
4301 Return as a monadic value a derivation that builds a text file
4302 containing all of @var{text}.  @var{text} may list, in addition to
4303 strings, objects of any type that can be used in a gexp: packages,
4304 derivations, local file objects, etc.  The resulting store file holds
4305 references to all these.
4307 This variant should be preferred over @code{text-file} anytime the file
4308 to create will reference items from the store.  This is typically the
4309 case when building a configuration file that embeds store file names,
4310 like this:
4312 @example
4313 (define (profile.sh)
4314   ;; Return the name of a shell script in the store that
4315   ;; initializes the 'PATH' environment variable.
4316   (text-file* "profile.sh"
4317               "export PATH=" coreutils "/bin:"
4318               grep "/bin:" sed "/bin\n"))
4319 @end example
4321 In this example, the resulting @file{/gnu/store/@dots{}-profile.sh} file
4322 will reference @var{coreutils}, @var{grep}, and @var{sed}, thereby
4323 preventing them from being garbage-collected during its lifetime.
4324 @end deffn
4326 @deffn {Scheme Procedure} mixed-text-file @var{name} @var{text} @dots{}
4327 Return an object representing store file @var{name} containing
4328 @var{text}.  @var{text} is a sequence of strings and file-like objects,
4329 as in:
4331 @example
4332 (mixed-text-file "profile"
4333                  "export PATH=" coreutils "/bin:" grep "/bin")
4334 @end example
4336 This is the declarative counterpart of @code{text-file*}.
4337 @end deffn
4339 @deffn {Scheme Procedure} file-append @var{obj} @var{suffix} @dots{}
4340 Return a file-like object that expands to the concatenation of @var{obj}
4341 and @var{suffix}, where @var{obj} is a lowerable object and each
4342 @var{suffix} is a string.
4344 As an example, consider this gexp:
4346 @example
4347 (gexp->script "run-uname"
4348               #~(system* #$(file-append coreutils
4349                                         "/bin/uname")))
4350 @end example
4352 The same effect could be achieved with:
4354 @example
4355 (gexp->script "run-uname"
4356               #~(system* (string-append #$coreutils
4357                                         "/bin/uname")))
4358 @end example
4360 There is one difference though: in the @code{file-append} case, the
4361 resulting script contains the absolute file name as a string, whereas in
4362 the second case, the resulting script contains a @code{(string-append
4363 @dots{})} expression to construct the file name @emph{at run time}.
4364 @end deffn
4367 Of course, in addition to gexps embedded in ``host'' code, there are
4368 also modules containing build tools.  To make it clear that they are
4369 meant to be used in the build stratum, these modules are kept in the
4370 @code{(guix build @dots{})} name space.
4372 @cindex lowering, of high-level objects in gexps
4373 Internally, high-level objects are @dfn{lowered}, using their compiler,
4374 to either derivations or store items.  For instance, lowering a package
4375 yields a derivation, and lowering a @code{plain-file} yields a store
4376 item.  This is achieved using the @code{lower-object} monadic procedure.
4378 @deffn {Monadic Procedure} lower-object @var{obj} [@var{system}] @
4379            [#:target #f]
4380 Return as a value in @var{%store-monad} the derivation or store item
4381 corresponding to @var{obj} for @var{system}, cross-compiling for
4382 @var{target} if @var{target} is true.  @var{obj} must be an object that
4383 has an associated gexp compiler, such as a @code{<package>}.
4384 @end deffn
4387 @c *********************************************************************
4388 @node Utilities
4389 @chapter Utilities
4391 This section describes Guix command-line utilities.  Some of them are
4392 primarily targeted at developers and users who write new package
4393 definitions, while others are more generally useful.  They complement
4394 the Scheme programming interface of Guix in a convenient way.
4396 @menu
4397 * Invoking guix build::         Building packages from the command line.
4398 * Invoking guix edit::          Editing package definitions.
4399 * Invoking guix download::      Downloading a file and printing its hash.
4400 * Invoking guix hash::          Computing the cryptographic hash of a file.
4401 * Invoking guix import::        Importing package definitions.
4402 * Invoking guix refresh::       Updating package definitions.
4403 * Invoking guix lint::          Finding errors in package definitions.
4404 * Invoking guix size::          Profiling disk usage.
4405 * Invoking guix graph::         Visualizing the graph of packages.
4406 * Invoking guix environment::   Setting up development environments.
4407 * Invoking guix publish::       Sharing substitutes.
4408 * Invoking guix challenge::     Challenging substitute servers.
4409 * Invoking guix container::     Process isolation.
4410 @end menu
4412 @node Invoking guix build
4413 @section Invoking @command{guix build}
4415 @cindex package building
4416 @cindex @command{guix build}
4417 The @command{guix build} command builds packages or derivations and
4418 their dependencies, and prints the resulting store paths.  Note that it
4419 does not modify the user's profile---this is the job of the
4420 @command{guix package} command (@pxref{Invoking guix package}).  Thus,
4421 it is mainly useful for distribution developers.
4423 The general syntax is:
4425 @example
4426 guix build @var{options} @var{package-or-derivation}@dots{}
4427 @end example
4429 As an example, the following command builds the latest versions of Emacs
4430 and of Guile, displays their build logs, and finally displays the
4431 resulting directories:
4433 @example
4434 guix build emacs guile
4435 @end example
4437 Similarly, the following command builds all the available packages:
4439 @example
4440 guix build --quiet --keep-going \
4441   `guix package -A | cut -f1,2 --output-delimiter=@@`
4442 @end example
4444 @var{package-or-derivation} may be either the name of a package found in
4445 the software distribution such as @code{coreutils} or
4446 @code{coreutils-8.20}, or a derivation such as
4447 @file{/gnu/store/@dots{}-coreutils-8.19.drv}.  In the former case, a
4448 package with the corresponding name (and optionally version) is searched
4449 for among the GNU distribution modules (@pxref{Package Modules}).
4451 Alternatively, the @code{--expression} option may be used to specify a
4452 Scheme expression that evaluates to a package; this is useful when
4453 disambiguating among several same-named packages or package variants is
4454 needed.
4456 There may be zero or more @var{options}.  The available options are
4457 described in the subsections below.
4459 @menu
4460 * Common Build Options::        Build options for most commands.
4461 * Package Transformation Options::    Creating variants of packages.
4462 * Additional Build Options::    Options specific to 'guix build'.
4463 @end menu
4465 @node Common Build Options
4466 @subsection Common Build Options
4468 A number of options that control the build process are common to
4469 @command{guix build} and other commands that can spawn builds, such as
4470 @command{guix package} or @command{guix archive}.  These are the
4471 following:
4473 @table @code
4475 @item --load-path=@var{directory}
4476 @itemx -L @var{directory}
4477 Add @var{directory} to the front of the package module search path
4478 (@pxref{Package Modules}).
4480 This allows users to define their own packages and make them visible to
4481 the command-line tools.
4483 @item --keep-failed
4484 @itemx -K
4485 Keep the build tree of failed builds.  Thus, if a build fails, its build
4486 tree is kept under @file{/tmp}, in a directory whose name is shown at
4487 the end of the build log.  This is useful when debugging build issues.
4489 @item --keep-going
4490 @itemx -k
4491 Keep going when some of the derivations fail to build; return only once
4492 all the builds have either completed or failed.
4494 The default behavior is to stop as soon as one of the specified
4495 derivations has failed.
4497 @item --dry-run
4498 @itemx -n
4499 Do not build the derivations.
4501 @item --fallback
4502 When substituting a pre-built binary fails, fall back to building
4503 packages locally.
4505 @item --substitute-urls=@var{urls}
4506 @anchor{client-substitute-urls}
4507 Consider @var{urls} the whitespace-separated list of substitute source
4508 URLs, overriding the default list of URLs of @command{guix-daemon}
4509 (@pxref{daemon-substitute-urls,, @command{guix-daemon} URLs}).
4511 This means that substitutes may be downloaded from @var{urls}, provided
4512 they are signed by a key authorized by the system administrator
4513 (@pxref{Substitutes}).
4515 When @var{urls} is the empty string, substitutes are effectively
4516 disabled.
4518 @item --no-substitutes
4519 Do not use substitutes for build products.  That is, always build things
4520 locally instead of allowing downloads of pre-built binaries
4521 (@pxref{Substitutes}).
4523 @item --no-grafts
4524 Do not ``graft'' packages.  In practice, this means that package updates
4525 available as grafts are not applied.  @xref{Security Updates}, for more
4526 information on grafts.
4528 @item --rounds=@var{n}
4529 Build each derivation @var{n} times in a row, and raise an error if
4530 consecutive build results are not bit-for-bit identical.
4532 This is a useful way to detect non-deterministic builds processes.
4533 Non-deterministic build processes are a problem because they make it
4534 practically impossible for users to @emph{verify} whether third-party
4535 binaries are genuine.  @xref{Invoking guix challenge}, for more.
4537 Note that, currently, the differing build results are not kept around,
4538 so you will have to manually investigate in case of an error---e.g., by
4539 stashing one of the build results with @code{guix archive --export}
4540 (@pxref{Invoking guix archive}), then rebuilding, and finally comparing
4541 the two results.
4543 @item --no-build-hook
4544 Do not attempt to offload builds @i{via} the ``build hook'' of the daemon
4545 (@pxref{Daemon Offload Setup}).  That is, always build things locally
4546 instead of offloading builds to remote machines.
4548 @item --max-silent-time=@var{seconds}
4549 When the build or substitution process remains silent for more than
4550 @var{seconds}, terminate it and report a build failure.
4552 @item --timeout=@var{seconds}
4553 Likewise, when the build or substitution process lasts for more than
4554 @var{seconds}, terminate it and report a build failure.
4556 By default there is no timeout.  This behavior can be restored with
4557 @code{--timeout=0}.
4559 @item --verbosity=@var{level}
4560 Use the given verbosity level.  @var{level} must be an integer between 0
4561 and 5; higher means more verbose output.  Setting a level of 4 or more
4562 may be helpful when debugging setup issues with the build daemon.
4564 @item --cores=@var{n}
4565 @itemx -c @var{n}
4566 Allow the use of up to @var{n} CPU cores for the build.  The special
4567 value @code{0} means to use as many CPU cores as available.
4569 @item --max-jobs=@var{n}
4570 @itemx -M @var{n}
4571 Allow at most @var{n} build jobs in parallel.  @xref{Invoking
4572 guix-daemon, @code{--max-jobs}}, for details about this option and the
4573 equivalent @command{guix-daemon} option.
4575 @end table
4577 Behind the scenes, @command{guix build} is essentially an interface to
4578 the @code{package-derivation} procedure of the @code{(guix packages)}
4579 module, and to the @code{build-derivations} procedure of the @code{(guix
4580 derivations)} module.
4582 In addition to options explicitly passed on the command line,
4583 @command{guix build} and other @command{guix} commands that support
4584 building honor the @code{GUIX_BUILD_OPTIONS} environment variable.
4586 @defvr {Environment Variable} GUIX_BUILD_OPTIONS
4587 Users can define this variable to a list of command line options that
4588 will automatically be used by @command{guix build} and other
4589 @command{guix} commands that can perform builds, as in the example
4590 below:
4592 @example
4593 $ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
4594 @end example
4596 These options are parsed independently, and the result is appended to
4597 the parsed command-line options.
4598 @end defvr
4601 @node Package Transformation Options
4602 @subsection Package Transformation Options
4604 @cindex package variants
4605 Another set of command-line options supported by @command{guix build}
4606 and also @command{guix package} are @dfn{package transformation
4607 options}.  These are options that make it possible to define @dfn{package
4608 variants}---for instance, packages built from different source code.
4609 This is a convenient way to create customized packages on the fly
4610 without having to type in the definitions of package variants
4611 (@pxref{Defining Packages}).
4613 @table @code
4615 @item --with-source=@var{source}
4616 Use @var{source} as the source of the corresponding package.
4617 @var{source} must be a file name or a URL, as for @command{guix
4618 download} (@pxref{Invoking guix download}).
4620 The ``corresponding package'' is taken to be the one specified on the
4621 command line the name of which matches the base of @var{source}---e.g.,
4622 if @var{source} is @code{/src/guile-2.0.10.tar.gz}, the corresponding
4623 package is @code{guile}.  Likewise, the version string is inferred from
4624 @var{source}; in the previous example, it is @code{2.0.10}.
4626 This option allows users to try out versions of packages other than the
4627 one provided by the distribution.  The example below downloads
4628 @file{ed-1.7.tar.gz} from a GNU mirror and uses that as the source for
4629 the @code{ed} package:
4631 @example
4632 guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
4633 @end example
4635 As a developer, @code{--with-source} makes it easy to test release
4636 candidates:
4638 @example
4639 guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
4640 @end example
4642 @dots{} or to build from a checkout in a pristine environment:
4644 @example
4645 $ git clone git://git.sv.gnu.org/guix.git
4646 $ guix build guix --with-source=./guix
4647 @end example
4649 @item --with-input=@var{package}=@var{replacement}
4650 Replace dependency on @var{package} by a dependency on
4651 @var{replacement}.  @var{package} must be a package name, and
4652 @var{replacement} must be a package specification such as @code{guile}
4653 or @code{guile@@1.8}.
4655 For instance, the following command builds Guix, but replaces its
4656 dependency on the current stable version of Guile with a dependency on
4657 the development version of Guile, @code{guile-next}:
4659 @example
4660 guix build --with-input=guile=guile-next guix
4661 @end example
4663 This is a recursive, deep replacement.  So in this example, both
4664 @code{guix} and its dependency @code{guile-json} (which also depends on
4665 @code{guile}) get rebuilt against @code{guile-next}.
4667 This is implemented using the @code{package-input-rewriting} Scheme
4668 procedure (@pxref{Defining Packages, @code{package-input-rewriting}}).
4670 @item --with-graft=@var{package}=@var{replacement}
4671 This is similar to @code{--with-input} but with an important difference:
4672 instead of rebuilding all the dependency chain, @var{replacement} is
4673 built and then @dfn{grafted} onto the binaries that were initially
4674 referring to @var{package}.  @xref{Security Updates}, for more
4675 information on grafts.
4677 For example, the command below grafts version 3.5.4 of GnuTLS onto Wget
4678 and all its dependencies, replacing references to the version of GnuTLS
4679 they currently refer to:
4681 @example
4682 guix build --with-graft=gnutls=gnutls@@3.5.4 wget
4683 @end example
4685 This has the advantage of being much faster than rebuilding everything.
4686 But there is a caveat: it works if and only if @var{package} and
4687 @var{replacement} are strictly compatible---for example, if they provide
4688 a library, the application binary interface (ABI) of those libraries
4689 must be compatible.  If @var{replacement} is somehow incompatible with
4690 @var{package}, then the resulting package may be unusable.  Use with
4691 care!
4693 @end table
4695 @node Additional Build Options
4696 @subsection Additional Build Options
4698 The command-line options presented below are specific to @command{guix
4699 build}.
4701 @table @code
4703 @item --quiet
4704 @itemx -q
4705 Build quietly, without displaying the build log.  Upon completion, the
4706 build log is kept in @file{/var} (or similar) and can always be
4707 retrieved using the @option{--log-file} option.
4709 @item --file=@var{file}
4710 @itemx -f @var{file}
4712 Build the package or derivation that the code within @var{file}
4713 evaluates to.
4715 As an example, @var{file} might contain a package definition like this
4716 (@pxref{Defining Packages}):
4718 @example
4719 @verbatiminclude package-hello.scm
4720 @end example
4722 @item --expression=@var{expr}
4723 @itemx -e @var{expr}
4724 Build the package or derivation @var{expr} evaluates to.
4726 For example, @var{expr} may be @code{(@@ (gnu packages guile)
4727 guile-1.8)}, which unambiguously designates this specific variant of
4728 version 1.8 of Guile.
4730 Alternatively, @var{expr} may be a G-expression, in which case it is used
4731 as a build program passed to @code{gexp->derivation}
4732 (@pxref{G-Expressions}).
4734 Lastly, @var{expr} may refer to a zero-argument monadic procedure
4735 (@pxref{The Store Monad}).  The procedure must return a derivation as a
4736 monadic value, which is then passed through @code{run-with-store}.
4738 @item --source
4739 @itemx -S
4740 Build the source derivations of the packages, rather than the packages
4741 themselves.
4743 For instance, @code{guix build -S gcc} returns something like
4744 @file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, which is the GCC
4745 source tarball.
4747 The returned source tarball is the result of applying any patches and
4748 code snippets specified in the package @code{origin} (@pxref{Defining
4749 Packages}).
4751 @item --sources
4752 Fetch and return the source of @var{package-or-derivation} and all their
4753 dependencies, recursively.  This is a handy way to obtain a local copy
4754 of all the source code needed to build @var{packages}, allowing you to
4755 eventually build them even without network access.  It is an extension
4756 of the @code{--source} option and can accept one of the following
4757 optional argument values:
4759 @table @code
4760 @item package
4761 This value causes the @code{--sources} option to behave in the same way
4762 as the @code{--source} option.
4764 @item all
4765 Build the source derivations of all packages, including any source that
4766 might be listed as @code{inputs}.  This is the default value.
4768 @example
4769 $ guix build --sources tzdata
4770 The following derivations will be built:
4771    /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
4772    /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
4773 @end example
4775 @item transitive
4776 Build the source derivations of all packages, as well of all transitive
4777 inputs to the packages.  This can be used e.g. to
4778 prefetch package source for later offline building.
4780 @example
4781 $ guix build --sources=transitive tzdata
4782 The following derivations will be built:
4783    /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
4784    /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
4785    /gnu/store/@dots{}-grep-2.21.tar.xz.drv
4786    /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
4787    /gnu/store/@dots{}-make-4.1.tar.xz.drv
4788    /gnu/store/@dots{}-bash-4.3.tar.xz.drv
4789 @dots{}
4790 @end example
4792 @end table
4794 @item --system=@var{system}
4795 @itemx -s @var{system}
4796 Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
4797 the system type of the build host.
4799 An example use of this is on Linux-based systems, which can emulate
4800 different personalities.  For instance, passing
4801 @code{--system=i686-linux} on an @code{x86_64-linux} system allows users
4802 to build packages in a complete 32-bit environment.
4804 @item --target=@var{triplet}
4805 @cindex cross-compilation
4806 Cross-build for @var{triplet}, which must be a valid GNU triplet, such
4807 as @code{"mips64el-linux-gnu"} (@pxref{Configuration Names, GNU
4808 configuration triplets,, configure, GNU Configure and Build System}).
4810 @anchor{build-check}
4811 @item --check
4812 @cindex determinism, checking
4813 @cindex reproducibility, checking
4814 Rebuild @var{package-or-derivation}, which are already available in the
4815 store, and raise an error if the build results are not bit-for-bit
4816 identical.
4818 This mechanism allows you to check whether previously installed
4819 substitutes are genuine (@pxref{Substitutes}), or whether the build result
4820 of a package is deterministic.  @xref{Invoking guix challenge}, for more
4821 background information and tools.
4823 When used in conjunction with @option{--keep-failed}, the differing
4824 output is kept in the store, under @file{/gnu/store/@dots{}-check}.
4825 This makes it easy to look for differences between the two results.
4827 @item --derivations
4828 @itemx -d
4829 Return the derivation paths, not the output paths, of the given
4830 packages.
4832 @item --root=@var{file}
4833 @itemx -r @var{file}
4834 Make @var{file} a symlink to the result, and register it as a garbage
4835 collector root.
4837 @item --log-file
4838 Return the build log file names or URLs for the given
4839 @var{package-or-derivation}, or raise an error if build logs are
4840 missing.
4842 This works regardless of how packages or derivations are specified.  For
4843 instance, the following invocations are equivalent:
4845 @example
4846 guix build --log-file `guix build -d guile`
4847 guix build --log-file `guix build guile`
4848 guix build --log-file guile
4849 guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
4850 @end example
4852 If a log is unavailable locally, and unless @code{--no-substitutes} is
4853 passed, the command looks for a corresponding log on one of the
4854 substitute servers (as specified with @code{--substitute-urls}.)
4856 So for instance, imagine you want to see the build log of GDB on MIPS,
4857 but you are actually on an @code{x86_64} machine:
4859 @example
4860 $ guix build --log-file gdb -s mips64el-linux
4861 https://hydra.gnu.org/log/@dots{}-gdb-7.10
4862 @end example
4864 You can freely access a huge library of build logs!
4865 @end table
4868 @node Invoking guix edit
4869 @section Invoking @command{guix edit}
4871 @cindex @command{guix edit}
4872 @cindex package definition, editing
4873 So many packages, so many source files!  The @command{guix edit} command
4874 facilitates the life of users and packagers by pointing their editor at
4875 the source file containing the definition of the specified packages.
4876 For instance:
4878 @example
4879 guix edit gcc@@4.9 vim
4880 @end example
4882 @noindent
4883 launches the program specified in the @code{VISUAL} or in the
4884 @code{EDITOR} environment variable to view the recipe of GCC@tie{}4.9.3
4885 and that of Vim.
4887 If you are using a Guix Git checkout (@pxref{Building from Git}), or
4888 have created your own packages on @code{GUIX_PACKAGE_PATH}
4889 (@pxref{Defining Packages}), you will be able to edit the package
4890 recipes. Otherwise, you will be able to examine the read-only recipes
4891 for packages currently in the store.
4893 If you are using Emacs, note that the Emacs user interface provides the
4894 @kbd{M-x guix-edit} command and a similar functionality in the ``package
4895 info'' and ``package list'' buffers created by the @kbd{M-x
4896 guix-search-by-name} and similar commands (@pxref{Emacs Commands}).
4899 @node Invoking guix download
4900 @section Invoking @command{guix download}
4902 @cindex @command{guix download}
4903 @cindex downloading package sources
4904 When writing a package definition, developers typically need to download
4905 a source tarball, compute its SHA256 hash, and write that
4906 hash in the package definition (@pxref{Defining Packages}).  The
4907 @command{guix download} tool helps with this task: it downloads a file
4908 from the given URI, adds it to the store, and prints both its file name
4909 in the store and its SHA256 hash.
4911 The fact that the downloaded file is added to the store saves bandwidth:
4912 when the developer eventually tries to build the newly defined package
4913 with @command{guix build}, the source tarball will not have to be
4914 downloaded again because it is already in the store.  It is also a
4915 convenient way to temporarily stash files, which may be deleted
4916 eventually (@pxref{Invoking guix gc}).
4918 The @command{guix download} command supports the same URIs as used in
4919 package definitions.  In particular, it supports @code{mirror://} URIs.
4920 @code{https} URIs (HTTP over TLS) are supported @emph{provided} the
4921 Guile bindings for GnuTLS are available in the user's environment; when
4922 they are not available, an error is raised.  @xref{Guile Preparations,
4923 how to install the GnuTLS bindings for Guile,, gnutls-guile,
4924 GnuTLS-Guile}, for more information.
4926 @command{guix download} verifies HTTPS server certificates by loading
4927 the certificates of X.509 authorities from the directory pointed to by
4928 the @code{SSL_CERT_DIR} environment variable (@pxref{X.509
4929 Certificates}), unless @option{--no-check-certificate} is used.
4931 The following options are available:
4933 @table @code
4934 @item --format=@var{fmt}
4935 @itemx -f @var{fmt}
4936 Write the hash in the format specified by @var{fmt}.  For more
4937 information on the valid values for @var{fmt}, @pxref{Invoking guix hash}.
4939 @item --no-check-certificate
4940 Do not validate the X.509 certificates of HTTPS servers.
4942 When using this option, you have @emph{absolutely no guarantee} that you
4943 are communicating with the authentic server responsible for the given
4944 URL, which makes you vulnerable to ``man-in-the-middle'' attacks.
4946 @item --output=@var{file}
4947 @itemx -o @var{file}
4948 Save the downloaded file to @var{file} instead of adding it to the
4949 store.
4950 @end table
4952 @node Invoking guix hash
4953 @section Invoking @command{guix hash}
4955 @cindex @command{guix hash}
4956 The @command{guix hash} command computes the SHA256 hash of a file.
4957 It is primarily a convenience tool for anyone contributing to the
4958 distribution: it computes the cryptographic hash of a file, which can be
4959 used in the definition of a package (@pxref{Defining Packages}).
4961 The general syntax is:
4963 @example
4964 guix hash @var{option} @var{file}
4965 @end example
4967 When @var{file} is @code{-} (a hyphen), @command{guix hash} computes the
4968 hash of data read from standard input.  @command{guix hash} has the
4969 following options:
4971 @table @code
4973 @item --format=@var{fmt}
4974 @itemx -f @var{fmt}
4975 Write the hash in the format specified by @var{fmt}.
4977 Supported formats: @code{nix-base32}, @code{base32}, @code{base16}
4978 (@code{hex} and @code{hexadecimal} can be used as well).
4980 If the @option{--format} option is not specified, @command{guix hash}
4981 will output the hash in @code{nix-base32}.  This representation is used
4982 in the definitions of packages.
4984 @item --recursive
4985 @itemx -r
4986 Compute the hash on @var{file} recursively.
4988 In this case, the hash is computed on an archive containing @var{file},
4989 including its children if it is a directory.  Some of the metadata of
4990 @var{file} is part of the archive; for instance, when @var{file} is a
4991 regular file, the hash is different depending on whether @var{file} is
4992 executable or not.  Metadata such as time stamps has no impact on the
4993 hash (@pxref{Invoking guix archive}).
4994 @c FIXME: Replace xref above with xref to an ``Archive'' section when
4995 @c it exists.
4997 @item --exclude-vcs
4998 @itemx -x
4999 When combined with @option{--recursive}, exclude version control system
5000 directories (@file{.bzr}, @file{.git}, @file{.hg}, etc.)
5002 @vindex git-fetch
5003 As an example, here is how you would compute the hash of a Git checkout,
5004 which is useful when using the @code{git-fetch} method (@pxref{origin
5005 Reference}):
5007 @example
5008 $ git clone http://example.org/foo.git
5009 $ cd foo
5010 $ guix hash -rx .
5011 @end example
5012 @end table
5014 @node Invoking guix import
5015 @section Invoking @command{guix import}
5017 @cindex importing packages
5018 @cindex package import
5019 @cindex package conversion
5020 @cindex Invoking @command{guix import}
5021 The @command{guix import} command is useful for people who would like to
5022 add a package to the distribution with as little work as
5023 possible---a legitimate demand.  The command knows of a few
5024 repositories from which it can ``import'' package metadata.  The result
5025 is a package definition, or a template thereof, in the format we know
5026 (@pxref{Defining Packages}).
5028 The general syntax is:
5030 @example
5031 guix import @var{importer} @var{options}@dots{}
5032 @end example
5034 @var{importer} specifies the source from which to import package
5035 metadata, and @var{options} specifies a package identifier and other
5036 options specific to @var{importer}.  Currently, the available
5037 ``importers'' are:
5039 @table @code
5040 @item gnu
5041 Import metadata for the given GNU package.  This provides a template
5042 for the latest version of that GNU package, including the hash of its
5043 source tarball, and its canonical synopsis and description.
5045 Additional information such as the package dependencies and its
5046 license needs to be figured out manually.
5048 For example, the following command returns a package definition for
5049 GNU@tie{}Hello:
5051 @example
5052 guix import gnu hello
5053 @end example
5055 Specific command-line options are:
5057 @table @code
5058 @item --key-download=@var{policy}
5059 As for @code{guix refresh}, specify the policy to handle missing OpenPGP
5060 keys when verifying the package signature.  @xref{Invoking guix
5061 refresh, @code{--key-download}}.
5062 @end table
5064 @item pypi
5065 @cindex pypi
5066 Import metadata from the @uref{https://pypi.python.org/, Python Package
5067 Index}@footnote{This functionality requires Guile-JSON to be installed.
5068 @xref{Requirements}.}.  Information is taken from the JSON-formatted
5069 description available at @code{pypi.python.org} and usually includes all
5070 the relevant information, including package dependencies.  For maximum
5071 efficiency, it is recommended to install the @command{unzip} utility, so
5072 that the importer can unzip Python wheels and gather data from them.
5074 The command below imports metadata for the @code{itsdangerous} Python
5075 package:
5077 @example
5078 guix import pypi itsdangerous
5079 @end example
5081 @item gem
5082 @cindex gem
5083 Import metadata from @uref{https://rubygems.org/,
5084 RubyGems}@footnote{This functionality requires Guile-JSON to be
5085 installed.  @xref{Requirements}.}.  Information is taken from the
5086 JSON-formatted description available at @code{rubygems.org} and includes
5087 most relevant information, including runtime dependencies.  There are
5088 some caveats, however.  The metadata doesn't distinguish between
5089 synopses and descriptions, so the same string is used for both fields.
5090 Additionally, the details of non-Ruby dependencies required to build
5091 native extensions is unavailable and left as an exercise to the
5092 packager.
5094 The command below imports metadata for the @code{rails} Ruby package:
5096 @example
5097 guix import gem rails
5098 @end example
5100 @item cpan
5101 @cindex CPAN
5102 Import metadata from @uref{https://www.metacpan.org/, MetaCPAN}@footnote{This
5103 functionality requires Guile-JSON to be installed.
5104 @xref{Requirements}.}.
5105 Information is taken from the JSON-formatted metadata provided through
5106 @uref{https://api.metacpan.org/, MetaCPAN's API} and includes most
5107 relevant information, such as module dependencies.  License information
5108 should be checked closely.  If Perl is available in the store, then the
5109 @code{corelist} utility will be used to filter core modules out of the
5110 list of dependencies.
5112 The command command below imports metadata for the @code{Acme::Boolean}
5113 Perl module:
5115 @example
5116 guix import cpan Acme::Boolean
5117 @end example
5119 @item cran
5120 @cindex CRAN
5121 @cindex Bioconductor
5122 Import metadata from @uref{http://cran.r-project.org/, CRAN}, the
5123 central repository for the @uref{http://r-project.org, GNU@tie{}R
5124 statistical and graphical environment}.
5126 Information is extracted from the @code{DESCRIPTION} file of the package.
5128 The command command below imports metadata for the @code{Cairo}
5129 R package:
5131 @example
5132 guix import cran Cairo
5133 @end example
5135 When @code{--archive=bioconductor} is added, metadata is imported from
5136 @uref{http://www.bioconductor.org/, Bioconductor}, a repository of R
5137 packages for for the analysis and comprehension of high-throughput
5138 genomic data in bioinformatics.
5140 Information is extracted from the @code{DESCRIPTION} file of a package
5141 published on the web interface of the Bioconductor SVN repository.
5143 The command below imports metadata for the @code{GenomicRanges}
5144 R package:
5146 @example
5147 guix import cran --archive=bioconductor GenomicRanges
5148 @end example
5150 @item nix
5151 Import metadata from a local copy of the source of the
5152 @uref{http://nixos.org/nixpkgs/, Nixpkgs distribution}@footnote{This
5153 relies on the @command{nix-instantiate} command of
5154 @uref{http://nixos.org/nix/, Nix}.}.  Package definitions in Nixpkgs are
5155 typically written in a mixture of Nix-language and Bash code.  This
5156 command only imports the high-level package structure that is written in
5157 the Nix language.  It normally includes all the basic fields of a
5158 package definition.
5160 When importing a GNU package, the synopsis and descriptions are replaced
5161 by their canonical upstream variant.
5163 Usually, you will first need to do:
5165 @example
5166 export NIX_REMOTE=daemon
5167 @end example
5169 @noindent
5170 so that @command{nix-instantiate} does not try to open the Nix database.
5172 As an example, the command below imports the package definition of
5173 LibreOffice (more precisely, it imports the definition of the package
5174 bound to the @code{libreoffice} top-level attribute):
5176 @example
5177 guix import nix ~/path/to/nixpkgs libreoffice
5178 @end example
5180 @item hackage
5181 @cindex hackage
5182 Import metadata from the Haskell community's central package archive
5183 @uref{https://hackage.haskell.org/, Hackage}.  Information is taken from
5184 Cabal files and includes all the relevant information, including package
5185 dependencies.
5187 Specific command-line options are:
5189 @table @code
5190 @item --stdin
5191 @itemx -s
5192 Read a Cabal file from standard input.
5193 @item --no-test-dependencies
5194 @itemx -t
5195 Do not include dependencies required only by the test suites.
5196 @item --cabal-environment=@var{alist}
5197 @itemx -e @var{alist}
5198 @var{alist} is a Scheme alist defining the environment in which the
5199 Cabal conditionals are evaluated.  The accepted keys are: @code{os},
5200 @code{arch}, @code{impl} and a string representing the name of a flag.
5201 The value associated with a flag has to be either the symbol
5202 @code{true} or @code{false}.  The value associated with other keys
5203 has to conform to the Cabal file format definition.  The default value
5204 associated with the keys @code{os}, @code{arch} and @code{impl} is
5205 @samp{linux}, @samp{x86_64} and @samp{ghc}, respectively.
5206 @end table
5208 The command below imports metadata for the latest version of the
5209 @code{HTTP} Haskell package without including test dependencies and
5210 specifying the value of the flag @samp{network-uri} as @code{false}:
5212 @example
5213 guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
5214 @end example
5216 A specific package version may optionally be specified by following the
5217 package name by an at-sign and a version number as in the following example:
5219 @example
5220 guix import hackage mtl@@2.1.3.1
5221 @end example
5223 @item elpa
5224 @cindex elpa
5225 Import metadata from an Emacs Lisp Package Archive (ELPA) package
5226 repository (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
5228 Specific command-line options are:
5230 @table @code
5231 @item --archive=@var{repo}
5232 @itemx -a @var{repo}
5233 @var{repo} identifies the archive repository from which to retrieve the
5234 information.  Currently the supported repositories and their identifiers
5235 are:
5236 @itemize -
5237 @item
5238 @uref{http://elpa.gnu.org/packages, GNU}, selected by the @code{gnu}
5239 identifier.  This is the default.
5241 Packages from @code{elpa.gnu.org} are signed with one of the keys
5242 contained in the GnuPG keyring at
5243 @file{share/emacs/25.1/etc/package-keyring.gpg} (or similar) in the
5244 @code{emacs} package (@pxref{Package Installation, ELPA package
5245 signatures,, emacs, The GNU Emacs Manual}).
5247 @item
5248 @uref{http://stable.melpa.org/packages, MELPA-Stable}, selected by the
5249 @code{melpa-stable} identifier.
5251 @item
5252 @uref{http://melpa.org/packages, MELPA}, selected by the @code{melpa}
5253 identifier.
5254 @end itemize
5255 @end table
5256 @end table
5258 The structure of the @command{guix import} code is modular.  It would be
5259 useful to have more importers for other package formats, and your help
5260 is welcome here (@pxref{Contributing}).
5262 @node Invoking guix refresh
5263 @section Invoking @command{guix refresh}
5265 @cindex @command {guix refresh}
5266 The primary audience of the @command{guix refresh} command is developers
5267 of the GNU software distribution.  By default, it reports any packages
5268 provided by the distribution that are outdated compared to the latest
5269 upstream version, like this:
5271 @example
5272 $ guix refresh
5273 gnu/packages/gettext.scm:29:13: gettext would be upgraded from 0.18.1.1 to 0.18.2.1
5274 gnu/packages/glib.scm:77:12: glib would be upgraded from 2.34.3 to 2.37.0
5275 @end example
5277 Alternately, one can specify packages to consider, in which case a
5278 warning is emitted for packages that lack an updater:
5280 @example
5281 $ guix refresh coreutils guile guile-ssh
5282 gnu/packages/ssh.scm:205:2: warning: no updater for guile-ssh
5283 gnu/packages/guile.scm:136:12: guile would be upgraded from 2.0.12 to 2.0.13
5284 @end example
5286 @command{guix refresh} browses the upstream repository of each package and determines
5287 the highest version number of the releases therein.  The command
5288 knows how to update specific types of packages: GNU packages, ELPA
5289 packages, etc.---see the documentation for @option{--type} below.  There
5290 are many packages, though, for which it lacks a method to determine
5291 whether a new upstream release is available.  However, the mechanism is
5292 extensible, so feel free to get in touch with us to add a new method!
5294 When passed @code{--update}, it modifies distribution source files to
5295 update the version numbers and source tarball hashes of those package
5296 recipes (@pxref{Defining Packages}).  This is achieved by downloading
5297 each package's latest source tarball and its associated OpenPGP
5298 signature, authenticating the downloaded tarball against its signature
5299 using @command{gpg}, and finally computing its hash.  When the public
5300 key used to sign the tarball is missing from the user's keyring, an
5301 attempt is made to automatically retrieve it from a public key server;
5302 when this is successful, the key is added to the user's keyring; otherwise,
5303 @command{guix refresh} reports an error.
5305 The following options are supported:
5307 @table @code
5309 @item --expression=@var{expr}
5310 @itemx -e @var{expr}
5311 Consider the package @var{expr} evaluates to.
5313 This is useful to precisely refer to a package, as in this example:
5315 @example
5316 guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
5317 @end example
5319 This command lists the dependents of the ``final'' libc (essentially all
5320 the packages.)
5322 @item --update
5323 @itemx -u
5324 Update distribution source files (package recipes) in place.  This is
5325 usually run from a checkout of the Guix source tree (@pxref{Running
5326 Guix Before It Is Installed}):
5328 @example
5329 $ ./pre-inst-env guix refresh -s non-core -u
5330 @end example
5332 @xref{Defining Packages}, for more information on package definitions.
5334 @item --select=[@var{subset}]
5335 @itemx -s @var{subset}
5336 Select all the packages in @var{subset}, one of @code{core} or
5337 @code{non-core}.
5339 The @code{core} subset refers to all the packages at the core of the
5340 distribution---i.e., packages that are used to build ``everything
5341 else''.  This includes GCC, libc, Binutils, Bash, etc.  Usually,
5342 changing one of these packages in the distribution entails a rebuild of
5343 all the others.  Thus, such updates are an inconvenience to users in
5344 terms of build time or bandwidth used to achieve the upgrade.
5346 The @code{non-core} subset refers to the remaining packages.  It is
5347 typically useful in cases where an update of the core packages would be
5348 inconvenient.
5350 @item --type=@var{updater}
5351 @itemx -t @var{updater}
5352 Select only packages handled by @var{updater} (may be a comma-separated
5353 list of updaters).  Currently, @var{updater} may be one of:
5355 @table @code
5356 @item gnu
5357 the updater for GNU packages;
5358 @item gnome
5359 the updater for GNOME packages;
5360 @item kde
5361 the updater for KDE packages;
5362 @item xorg
5363 the updater for X.org packages;
5364 @item kernel.org
5365 the updater for packages hosted on kernel.org;
5366 @item elpa
5367 the updater for @uref{http://elpa.gnu.org/, ELPA} packages;
5368 @item cran
5369 the updater for @uref{http://cran.r-project.org/, CRAN} packages;
5370 @item bioconductor
5371 the updater for @uref{http://www.bioconductor.org/, Bioconductor} R packages;
5372 @item pypi
5373 the updater for @uref{https://pypi.python.org, PyPI} packages.
5374 @item gem
5375 the updater for @uref{https://rubygems.org, RubyGems} packages.
5376 @item github
5377 the updater for @uref{https://github.com, GitHub} packages.
5378 @item hackage
5379 the updater for @uref{https://hackage.haskell.org, Hackage} packages.
5380 @end table
5382 For instance, the following command only checks for updates of Emacs
5383 packages hosted at @code{elpa.gnu.org} and for updates of CRAN packages:
5385 @example
5386 $ guix refresh --type=elpa,cran
5387 gnu/packages/statistics.scm:819:13: r-testthat would be upgraded from 0.10.0 to 0.11.0
5388 gnu/packages/emacs.scm:856:13: emacs-auctex would be upgraded from 11.88.6 to 11.88.9
5389 @end example
5391 @end table
5393 In addition, @command{guix refresh} can be passed one or more package
5394 names, as in this example:
5396 @example
5397 $ ./pre-inst-env guix refresh -u emacs idutils gcc@@4.8
5398 @end example
5400 @noindent
5401 The command above specifically updates the @code{emacs} and
5402 @code{idutils} packages.  The @code{--select} option would have no
5403 effect in this case.
5405 When considering whether to upgrade a package, it is sometimes
5406 convenient to know which packages would be affected by the upgrade and
5407 should be checked for compatibility.  For this the following option may
5408 be used when passing @command{guix refresh} one or more package names:
5410 @table @code
5412 @item --list-updaters
5413 @itemx -L
5414 List available updaters and exit (see @option{--type} above.)
5416 For each updater, display the fraction of packages it covers; at the
5417 end, display the fraction of packages covered by all these updaters.
5419 @item --list-dependent
5420 @itemx -l
5421 List top-level dependent packages that would need to be rebuilt as a
5422 result of upgrading one or more packages.
5424 @end table
5426 Be aware that the @code{--list-dependent} option only
5427 @emph{approximates} the rebuilds that would be required as a result of
5428 an upgrade.  More rebuilds might be required under some circumstances.
5430 @example
5431 $ guix refresh --list-dependent flex
5432 Building the following 120 packages would ensure 213 dependent packages are rebuilt:
5433 hop-2.4.0 geiser-0.4 notmuch-0.18 mu-0.9.9.5 cflow-1.4 idutils-4.6 @dots{}
5434 @end example
5436 The command above lists a set of packages that could be built to check
5437 for compatibility with an upgraded @code{flex} package.
5439 The following options can be used to customize GnuPG operation:
5441 @table @code
5443 @item --gpg=@var{command}
5444 Use @var{command} as the GnuPG 2.x command.  @var{command} is searched
5445 for in @code{$PATH}.
5447 @item --key-download=@var{policy}
5448 Handle missing OpenPGP keys according to @var{policy}, which may be one
5451 @table @code
5452 @item always
5453 Always download missing OpenPGP keys from the key server, and add them
5454 to the user's GnuPG keyring.
5456 @item never
5457 Never try to download missing OpenPGP keys.  Instead just bail out.
5459 @item interactive
5460 When a package signed with an unknown OpenPGP key is encountered, ask
5461 the user whether to download it or not.  This is the default behavior.
5462 @end table
5464 @item --key-server=@var{host}
5465 Use @var{host} as the OpenPGP key server when importing a public key.
5467 @end table
5469 The @code{github} updater uses the
5470 @uref{https://developer.github.com/v3/, GitHub API} to query for new
5471 releases.  When used repeatedly e.g. when refreshing all packages,
5472 GitHub will eventually refuse to answer any further API requests.  By
5473 default 60 API requests per hour are allowed, and a full refresh on all
5474 GitHub packages in Guix requires more than this.  Authentication with
5475 GitHub through the use of an API token alleviates these limits.  To use
5476 an API token, set the environment variable @code{GUIX_GITHUB_TOKEN} to a
5477 token procured from @uref{https://github.com/settings/tokens} or
5478 otherwise.
5481 @node Invoking guix lint
5482 @section Invoking @command{guix lint}
5484 @cindex @command{guix lint}
5485 @cindex package, checking for errors
5486 The @command{guix lint} command is meant to help package developers avoid
5487 common errors and use a consistent style.  It runs a number of checks on
5488 a given set of packages in order to find common mistakes in their
5489 definitions.  Available @dfn{checkers} include (see
5490 @code{--list-checkers} for a complete list):
5492 @table @code
5493 @item synopsis
5494 @itemx description
5495 Validate certain typographical and stylistic rules about package
5496 descriptions and synopses.
5498 @item inputs-should-be-native
5499 Identify inputs that should most likely be native inputs.
5501 @item source
5502 @itemx home-page
5503 @itemx mirror-url
5504 @itemx source-file-name
5505 Probe @code{home-page} and @code{source} URLs and report those that are
5506 invalid.  Suggest a @code{mirror://} URL when applicable.  Check that
5507 the source file name is meaningful, e.g. is not
5508 just a version number or ``git-checkout'', without a declared
5509 @code{file-name} (@pxref{origin Reference}).
5511 @item cve
5512 @cindex security vulnerabilities
5513 @cindex CVE, Common Vulnerabilities and Exposures
5514 Report known vulnerabilities found in the Common Vulnerabilities and
5515 Exposures (CVE) databases of the current and past year
5516 @uref{https://nvd.nist.gov/download.cfm#CVE_FEED, published by the US
5517 NIST}.
5519 To view information about a particular vulnerability, visit pages such as:
5521 @itemize
5522 @item
5523 @indicateurl{https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-YYYY-ABCD}
5524 @item
5525 @indicateurl{https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-YYYY-ABCD}
5526 @end itemize
5528 @noindent
5529 where @code{CVE-YYYY-ABCD} is the CVE identifier---e.g.,
5530 @code{CVE-2015-7554}.
5532 Package developers can specify in package recipes the
5533 @uref{https://nvd.nist.gov/cpe.cfm,Common Platform Enumeration (CPE)}
5534 name and version of the package when they differ from the name that Guix
5535 uses, as in this example:
5537 @example
5538 (package
5539   (name "grub")
5540   ;; @dots{}
5541   ;; CPE calls this package "grub2".
5542   (properties '((cpe-name . "grub2"))))
5543 @end example
5545 @item formatting
5546 Warn about obvious source code formatting issues: trailing white space,
5547 use of tabulations, etc.
5548 @end table
5550 The general syntax is:
5552 @example
5553 guix lint @var{options} @var{package}@dots{}
5554 @end example
5556 If no package is given on the command line, then all packages are checked.
5557 The @var{options} may be zero or more of the following:
5559 @table @code
5560 @item --list-checkers
5561 @itemx -l
5562 List and describe all the available checkers that will be run on packages
5563 and exit.
5565 @item --checkers
5566 @itemx -c
5567 Only enable the checkers specified in a comma-separated list using the
5568 names returned by @code{--list-checkers}.
5570 @end table
5572 @node Invoking guix size
5573 @section Invoking @command{guix size}
5575 @cindex size
5576 @cindex package size
5577 @cindex closure
5578 @cindex @command{guix size}
5579 The @command{guix size} command helps package developers profile the
5580 disk usage of packages.  It is easy to overlook the impact of an
5581 additional dependency added to a package, or the impact of using a
5582 single output for a package that could easily be split (@pxref{Packages
5583 with Multiple Outputs}).  Such are the typical issues that
5584 @command{guix size} can highlight.
5586 The command can be passed a package specification such as @code{gcc-4.8}
5587 or @code{guile:debug}, or a file name in the store.  Consider this
5588 example:
5590 @example
5591 $ guix size coreutils
5592 store item                               total    self
5593 /gnu/store/@dots{}-coreutils-8.23          70.0    13.9  19.8%
5594 /gnu/store/@dots{}-gmp-6.0.0a              55.3     2.5   3.6%
5595 /gnu/store/@dots{}-acl-2.2.52              53.7     0.5   0.7%
5596 /gnu/store/@dots{}-attr-2.4.46             53.2     0.3   0.5%
5597 /gnu/store/@dots{}-gcc-4.8.4-lib           52.9    15.7  22.4%
5598 /gnu/store/@dots{}-glibc-2.21              37.2    37.2  53.1%
5599 @end example
5601 @cindex closure
5602 The store items listed here constitute the @dfn{transitive closure} of
5603 Coreutils---i.e., Coreutils and all its dependencies, recursively---as
5604 would be returned by:
5606 @example
5607 $ guix gc -R /gnu/store/@dots{}-coreutils-8.23
5608 @end example
5610 Here the output shows three columns next to store items.  The first column,
5611 labeled ``total'', shows the size in mebibytes (MiB) of the closure of
5612 the store item---that is, its own size plus the size of all its
5613 dependencies.  The next column, labeled ``self'', shows the size of the
5614 item itself.  The last column shows the ratio of the size of the item
5615 itself to the space occupied by all the items listed here.
5617 In this example, we see that the closure of Coreutils weighs in at
5618 70@tie{}MiB, half of which is taken by libc.  (That libc represents a
5619 large fraction of the closure is not a problem @i{per se} because it is
5620 always available on the system anyway.)
5622 When the package passed to @command{guix size} is available in the
5623 store, @command{guix size} queries the daemon to determine its
5624 dependencies, and measures its size in the store, similar to @command{du
5625 -ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
5626 Coreutils}).
5628 When the given package is @emph{not} in the store, @command{guix size}
5629 reports information based on the available substitutes
5630 (@pxref{Substitutes}).  This makes it possible it to profile disk usage of
5631 store items that are not even on disk, only available remotely.
5633 You can also specify several package names:
5635 @example
5636 $ guix size coreutils grep sed bash
5637 store item                               total    self
5638 /gnu/store/@dots{}-coreutils-8.24          77.8    13.8  13.4%
5639 /gnu/store/@dots{}-grep-2.22               73.1     0.8   0.8%
5640 /gnu/store/@dots{}-bash-4.3.42             72.3     4.7   4.6%
5641 /gnu/store/@dots{}-readline-6.3            67.6     1.2   1.2%
5642 @dots{}
5643 total: 102.3 MiB
5644 @end example
5646 @noindent
5647 In this example we see that the combination of the four packages takes
5648 102.3@tie{}MiB in total, which is much less than the sum of each closure
5649 since they have a lot of dependencies in common.
5651 The available options are:
5653 @table @option
5655 @item --substitute-urls=@var{urls}
5656 Use substitute information from @var{urls}.
5657 @xref{client-substitute-urls, the same option for @code{guix build}}.
5659 @item --map-file=@var{file}
5660 Write a graphical map of disk usage in PNG format to @var{file}.
5662 For the example above, the map looks like this:
5664 @image{images/coreutils-size-map,5in,, map of Coreutils disk usage
5665 produced by @command{guix size}}
5667 This option requires that
5668 @uref{http://wingolog.org/software/guile-charting/, Guile-Charting} be
5669 installed and visible in Guile's module search path.  When that is not
5670 the case, @command{guix size} fails as it tries to load it.
5672 @item --system=@var{system}
5673 @itemx -s @var{system}
5674 Consider packages for @var{system}---e.g., @code{x86_64-linux}.
5676 @end table
5678 @node Invoking guix graph
5679 @section Invoking @command{guix graph}
5681 @cindex DAG
5682 @cindex @command{guix graph}
5683 @cindex package dependencies
5684 Packages and their dependencies form a @dfn{graph}, specifically a
5685 directed acyclic graph (DAG).  It can quickly become difficult to have a
5686 mental model of the package DAG, so the @command{guix graph} command
5687 provides a visual representation of the DAG.  @command{guix graph}
5688 emits a DAG representation in the input format of
5689 @uref{http://www.graphviz.org/, Graphviz}, so its output can be passed
5690 directly to the @command{dot} command of Graphviz.  The general
5691 syntax is:
5693 @example
5694 guix graph @var{options} @var{package}@dots{}
5695 @end example
5697 For example, the following command generates a PDF file representing the
5698 package DAG for the GNU@tie{}Core Utilities, showing its build-time
5699 dependencies:
5701 @example
5702 guix graph coreutils | dot -Tpdf > dag.pdf
5703 @end example
5705 The output looks like this:
5707 @image{images/coreutils-graph,2in,,Dependency graph of the GNU Coreutils}
5709 Nice little graph, no?
5711 But there is more than one graph!  The one above is concise: it is the
5712 graph of package objects, omitting implicit inputs such as GCC, libc,
5713 grep, etc.  It is often useful to have such a concise graph, but
5714 sometimes one may want to see more details.  @command{guix graph} supports
5715 several types of graphs, allowing you to choose the level of detail:
5717 @table @code
5718 @item package
5719 This is the default type used in the example above.  It shows the DAG of
5720 package objects, excluding implicit dependencies.  It is concise, but
5721 filters out many details.
5723 @item bag-emerged
5724 This is the package DAG, @emph{including} implicit inputs.
5726 For instance, the following command:
5728 @example
5729 guix graph --type=bag-emerged coreutils | dot -Tpdf > dag.pdf
5730 @end example
5732 ... yields this bigger graph:
5734 @image{images/coreutils-bag-graph,,5in,Detailed dependency graph of the GNU Coreutils}
5736 At the bottom of the graph, we see all the implicit inputs of
5737 @var{gnu-build-system} (@pxref{Build Systems, @code{gnu-build-system}}).
5739 Now, note that the dependencies of these implicit inputs---that is, the
5740 @dfn{bootstrap dependencies} (@pxref{Bootstrapping})---are not shown
5741 here, for conciseness.
5743 @item bag
5744 Similar to @code{bag-emerged}, but this time including all the bootstrap
5745 dependencies.
5747 @item bag-with-origins
5748 Similar to @code{bag}, but also showing origins and their dependencies.
5750 @item derivations
5751 This is the most detailed representation: It shows the DAG of
5752 derivations (@pxref{Derivations}) and plain store items.  Compared to
5753 the above representation, many additional nodes are visible, including
5754 build scripts, patches, Guile modules, etc.
5756 For this type of graph, it is also possible to pass a @file{.drv} file
5757 name instead of a package name, as in:
5759 @example
5760 guix graph -t derivation `guix system build -d my-config.scm`
5761 @end example
5762 @end table
5764 All the types above correspond to @emph{build-time dependencies}.  The
5765 following graph type represents the @emph{run-time dependencies}:
5767 @table @code
5768 @item references
5769 This is the graph of @dfn{references} of a package output, as returned
5770 by @command{guix gc --references} (@pxref{Invoking guix gc}).
5772 If the given package output is not available in the store, @command{guix
5773 graph} attempts to obtain dependency information from substitutes.
5775 Here you can also pass a store file name instead of a package name.  For
5776 example, the command below produces the reference graph of your profile
5777 (which can be big!):
5779 @example
5780 guix graph -t references `readlink -f ~/.guix-profile`
5781 @end example
5783 @item referrers
5784 This is the graph of the @dfn{referrers} of a store item, as returned by
5785 @command{guix gc --referrers} (@pxref{Invoking guix gc}).
5787 This relies exclusively on local information from your store.  For
5788 instance, let us suppose that the current Inkscape is available in 10
5789 profiles on your machine; @command{guix graph -t referrers inkscape}
5790 will show a graph rooted at Inkscape and with those 10 profiles linked
5791 to it.
5793 It can help determine what is preventing a store item from being garbage
5794 collected.
5796 @end table
5798 The available options are the following:
5800 @table @option
5801 @item --type=@var{type}
5802 @itemx -t @var{type}
5803 Produce a graph output of @var{type}, where @var{type} must be one of
5804 the values listed above.
5806 @item --list-types
5807 List the supported graph types.
5809 @item --expression=@var{expr}
5810 @itemx -e @var{expr}
5811 Consider the package @var{expr} evaluates to.
5813 This is useful to precisely refer to a package, as in this example:
5815 @example
5816 guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
5817 @end example
5818 @end table
5821 @node Invoking guix environment
5822 @section Invoking @command{guix environment}
5824 @cindex reproducible build environments
5825 @cindex development environments
5826 @cindex @command{guix environment}
5827 @cindex environment, package build environment
5828 The purpose of @command{guix environment} is to assist hackers in
5829 creating reproducible development environments without polluting their
5830 package profile.  The @command{guix environment} tool takes one or more
5831 packages, builds all of their inputs, and creates a shell
5832 environment to use them.
5834 The general syntax is:
5836 @example
5837 guix environment @var{options} @var{package}@dots{}
5838 @end example
5840 The following example spawns a new shell set up for the development of
5841 GNU@tie{}Guile:
5843 @example
5844 guix environment guile
5845 @end example
5847 If the needed dependencies are not built yet, @command{guix environment}
5848 automatically builds them.  The environment of the new shell is an augmented
5849 version of the environment that @command{guix environment} was run in.
5850 It contains the necessary search paths for building the given package
5851 added to the existing environment variables.  To create a ``pure''
5852 environment, in which the original environment variables have been unset,
5853 use the @code{--pure} option@footnote{Users sometimes wrongfully augment
5854 environment variables such as @code{PATH} in their @file{~/.bashrc}
5855 file.  As a consequence, when @code{guix environment} launches it, Bash
5856 may read @file{~/.bashrc}, thereby introducing ``impurities'' in these
5857 environment variables.  It is an error to define such environment
5858 variables in @file{.bashrc}; instead, they should be defined in
5859 @file{.bash_profile}, which is sourced only by log-in shells.
5860 @xref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}, for
5861 details on Bash start-up files.}.
5863 @vindex GUIX_ENVIRONMENT
5864 @command{guix environment} defines the @code{GUIX_ENVIRONMENT}
5865 variable in the shell it spawns; its value is the file name of the
5866 profile of this environment.  This allows users to, say, define a
5867 specific prompt for development environments in their @file{.bashrc}
5868 (@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}):
5870 @example
5871 if [ -n "$GUIX_ENVIRONMENT" ]
5872 then
5873     export PS1="\u@@\h \w [dev]\$ "
5875 @end example
5877 @noindent
5878 ... or to browse the profile:
5880 @example
5881 $ ls "$GUIX_ENVIRONMENT/bin"
5882 @end example
5884 Additionally, more than one package may be specified, in which case the
5885 union of the inputs for the given packages are used.  For example, the
5886 command below spawns a shell where all of the dependencies of both Guile
5887 and Emacs are available:
5889 @example
5890 guix environment guile emacs
5891 @end example
5893 Sometimes an interactive shell session is not desired.  An arbitrary
5894 command may be invoked by placing the @code{--} token to separate the
5895 command from the rest of the arguments:
5897 @example
5898 guix environment guile -- make -j4
5899 @end example
5901 In other situations, it is more convenient to specify the list of
5902 packages needed in the environment.  For example, the following command
5903 runs @command{python} from an environment containing Python@tie{}2.7 and
5904 NumPy:
5906 @example
5907 guix environment --ad-hoc python2-numpy python-2.7 -- python
5908 @end example
5910 Furthermore, one might want the dependencies of a package and also some
5911 additional packages that are not build-time or runtime dependencies, but
5912 are useful when developing nonetheless.  Because of this, the
5913 @code{--ad-hoc} flag is positional.  Packages appearing before
5914 @code{--ad-hoc} are interpreted as packages whose dependencies will be
5915 added to the environment.  Packages appearing after are interpreted as
5916 packages that will be added to the environment directly.  For example,
5917 the following command creates a Guix development environment that
5918 additionally includes Git and strace:
5920 @example
5921 guix environment guix --ad-hoc git strace
5922 @end example
5924 Sometimes it is desirable to isolate the environment as much as
5925 possible, for maximal purity and reproducibility.  In particular, when
5926 using Guix on a host distro that is not GuixSD, it is desirable to
5927 prevent access to @file{/usr/bin} and other system-wide resources from
5928 the development environment.  For example, the following command spawns
5929 a Guile REPL in a ``container'' where only the store and the current
5930 working directory are mounted:
5932 @example
5933 guix environment --ad-hoc --container guile -- guile
5934 @end example
5936 @quotation Note
5937 The @code{--container} option requires Linux-libre 3.19 or newer.
5938 @end quotation
5940 The available options are summarized below.
5942 @table @code
5943 @item --expression=@var{expr}
5944 @itemx -e @var{expr}
5945 Create an environment for the package or list of packages that
5946 @var{expr} evaluates to.
5948 For example, running:
5950 @example
5951 guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
5952 @end example
5954 starts a shell with the environment for this specific variant of the
5955 PETSc package.
5957 Running:
5959 @example
5960 guix environment --ad-hoc -e '(@@ (gnu) %base-packages)'
5961 @end example
5963 starts a shell with all the GuixSD base packages available.
5965 The above commands only the use default output of the given packages.
5966 To select other outputs, two element tuples can be specified:
5968 @example
5969 guix environment --ad-hoc -e '(list (@ (gnu packages bash) bash) "include")'
5970 @end example
5972 @item --load=@var{file}
5973 @itemx -l @var{file}
5974 Create an environment for the package or list of packages that the code
5975 within @var{file} evaluates to.
5977 As an example, @var{file} might contain a definition like this
5978 (@pxref{Defining Packages}):
5980 @example
5981 @verbatiminclude environment-gdb.scm
5982 @end example
5984 @item --ad-hoc
5985 Include all specified packages in the resulting environment, as if an
5986 @i{ad hoc} package were defined with them as inputs.  This option is
5987 useful for quickly creating an environment without having to write a
5988 package expression to contain the desired inputs.
5990 For instance, the command:
5992 @example
5993 guix environment --ad-hoc guile guile-sdl -- guile
5994 @end example
5996 runs @command{guile} in an environment where Guile and Guile-SDL are
5997 available.
5999 Note that this example implicitly asks for the default output of
6000 @code{guile} and @code{guile-sdl}, but it is possible to ask for a
6001 specific output---e.g., @code{glib:bin} asks for the @code{bin} output
6002 of @code{glib} (@pxref{Packages with Multiple Outputs}).
6004 This option may be composed with the default behavior of @command{guix
6005 environment}.  Packages appearing before @code{--ad-hoc} are interpreted
6006 as packages whose dependencies will be added to the environment, the
6007 default behavior.  Packages appearing after are interpreted as packages
6008 that will be added to the environment directly.
6010 @item --pure
6011 Unset existing environment variables when building the new environment.
6012 This has the effect of creating an environment in which search paths
6013 only contain package inputs.
6015 @item --search-paths
6016 Display the environment variable definitions that make up the
6017 environment.
6019 @item --system=@var{system}
6020 @itemx -s @var{system}
6021 Attempt to build for @var{system}---e.g., @code{i686-linux}.
6023 @item --container
6024 @itemx -C
6025 @cindex container
6026 Run @var{command} within an isolated container.  The current working
6027 directory outside the container is mapped inside the container.
6028 Additionally, a dummy home directory is created that matches the current
6029 user's home directory, and @file{/etc/passwd} is configured accordingly.
6030 The spawned process runs as the current user outside the container, but
6031 has root privileges in the context of the container.
6033 @item --network
6034 @itemx -N
6035 For containers, share the network namespace with the host system.
6036 Containers created without this flag only have access to the loopback
6037 device.
6039 @item --expose=@var{source}[=@var{target}]
6040 For containers, expose the file system @var{source} from the host system
6041 as the read-only file system @var{target} within the container.  If
6042 @var{target} is not specified, @var{source} is used as the target mount
6043 point in the container.
6045 The example below spawns a Guile REPL in a container in which the user's
6046 home directory is accessible read-only via the @file{/exchange}
6047 directory:
6049 @example
6050 guix environment --container --expose=$HOME=/exchange guile -- guile
6051 @end example
6053 @item --share=@var{source}[=@var{target}]
6054 For containers, share the file system @var{source} from the host system
6055 as the writable file system @var{target} within the container.  If
6056 @var{target} is not specified, @var{source} is used as the target mount
6057 point in the container.
6059 The example below spawns a Guile REPL in a container in which the user's
6060 home directory is accessible for both reading and writing via the
6061 @file{/exchange} directory:
6063 @example
6064 guix environment --container --share=$HOME=/exchange guile -- guile
6065 @end example
6066 @end table
6068 It also supports all of the common build options that @command{guix
6069 build} supports (@pxref{Common Build Options}).
6071 @node Invoking guix publish
6072 @section Invoking @command{guix publish}
6074 @cindex @command{guix publish}
6075 The purpose of @command{guix publish} is to enable users to easily share
6076 their store with others, who can then use it as a substitute server
6077 (@pxref{Substitutes}).
6079 When @command{guix publish} runs, it spawns an HTTP server which allows
6080 anyone with network access to obtain substitutes from it.  This means
6081 that any machine running Guix can also act as if it were a build farm,
6082 since the HTTP interface is compatible with Hydra, the software behind
6083 the @code{hydra.gnu.org} build farm.
6085 For security, each substitute is signed, allowing recipients to check
6086 their authenticity and integrity (@pxref{Substitutes}).  Because
6087 @command{guix publish} uses the signing key of the system, which is only
6088 readable by the system administrator, it must be started as root; the
6089 @code{--user} option makes it drop root privileges early on.
6091 The signing key pair must be generated before @command{guix publish} is
6092 launched, using @command{guix archive --generate-key} (@pxref{Invoking
6093 guix archive}).
6095 The general syntax is:
6097 @example
6098 guix publish @var{options}@dots{}
6099 @end example
6101 Running @command{guix publish} without any additional arguments will
6102 spawn an HTTP server on port 8080:
6104 @example
6105 guix publish
6106 @end example
6108 Once a publishing server has been authorized (@pxref{Invoking guix
6109 archive}), the daemon may download substitutes from it:
6111 @example
6112 guix-daemon --substitute-urls=http://example.org:8080
6113 @end example
6115 As a bonus, @command{guix publish} also serves as a content-addressed
6116 mirror for source files referenced in @code{origin} records
6117 (@pxref{origin Reference}).  For instance, assuming @command{guix
6118 publish} is running on @code{example.org}, the following URL returns the
6119 raw @file{hello-2.10.tar.gz} file with the given SHA256 hash
6120 (represented in @code{nix-base32} format, @pxref{Invoking guix hash}):
6122 @example
6123 http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1@dots{}ndq1i
6124 @end example
6126 Obviously, these URLs only work for files that are in the store; in
6127 other cases, they return 404 (``Not Found'').
6129 The following options are available:
6131 @table @code
6132 @item --port=@var{port}
6133 @itemx -p @var{port}
6134 Listen for HTTP requests on @var{port}.
6136 @item --listen=@var{host}
6137 Listen on the network interface for @var{host}.  The default is to
6138 accept connections from any interface.
6140 @item --user=@var{user}
6141 @itemx -u @var{user}
6142 Change privileges to @var{user} as soon as possible---i.e., once the
6143 server socket is open and the signing key has been read.
6145 @item --compression[=@var{level}]
6146 @itemx -C [@var{level}]
6147 Compress data using the given @var{level}.  When @var{level} is zero,
6148 disable compression.  The range 1 to 9 corresponds to different gzip
6149 compression levels: 1 is the fastest, and 9 is the best (CPU-intensive).
6150 The default is 3.
6152 Compression occurs on the fly and the compressed streams are not
6153 cached.  Thus, to reduce load on the machine that runs @command{guix
6154 publish}, it may be a good idea to choose a low compression level, or to
6155 run @command{guix publish} behind a caching proxy.
6157 @item --ttl=@var{ttl}
6158 Produce @code{Cache-Control} HTTP headers that advertise a time-to-live
6159 (TTL) of @var{ttl}.  @var{ttl} must denote a duration: @code{5d} means 5
6160 days, @code{1m} means 1 month, and so on.
6162 This allows the user's Guix to keep substitute information in cache for
6163 @var{ttl}.  However, note that @code{guix publish} does not itself
6164 guarantee that the store items it provides will indeed remain available
6165 for as long as @var{ttl}.
6167 @item --repl[=@var{port}]
6168 @itemx -r [@var{port}]
6169 Spawn a Guile REPL server (@pxref{REPL Servers,,, guile, GNU Guile
6170 Reference Manual}) on @var{port} (37146 by default).  This is used
6171 primarily for debugging a running @command{guix publish} server.
6172 @end table
6174 Enabling @command{guix publish} on a GuixSD system is a one-liner: just
6175 add a call to @code{guix-publish-service} in the @code{services} field
6176 of the @code{operating-system} declaration (@pxref{guix-publish-service,
6177 @code{guix-publish-service}}).
6179 If you are instead running Guix on a ``foreign distro'', follow these
6180 instructions:”
6182 @itemize
6183 @item
6184 If your host distro uses the systemd init system:
6186 @example
6187 # ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \
6188         /etc/systemd/system/
6189 # systemctl start guix-publish && systemctl enable guix-publish
6190 @end example
6192 @item
6193 If your host distro uses the Upstart init system:
6195 @example
6196 # ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/
6197 # start guix-publish
6198 @end example
6200 @item
6201 Otherwise, proceed similarly with your distro's init system.
6202 @end itemize
6204 @node Invoking guix challenge
6205 @section Invoking @command{guix challenge}
6207 @cindex reproducible builds
6208 @cindex verifiable builds
6209 @cindex @command{guix challenge}
6210 @cindex challenge
6211 Do the binaries provided by this server really correspond to the source
6212 code it claims to build?  Is a package build process deterministic?
6213 These are the questions the @command{guix challenge} command attempts to
6214 answer.
6216 The former is obviously an important question: Before using a substitute
6217 server (@pxref{Substitutes}), one had better @emph{verify} that it
6218 provides the right binaries, and thus @emph{challenge} it.  The latter
6219 is what enables the former: If package builds are deterministic, then
6220 independent builds of the package should yield the exact same result,
6221 bit for bit; if a server provides a binary different from the one
6222 obtained locally, it may be either corrupt or malicious.
6224 We know that the hash that shows up in @file{/gnu/store} file names is
6225 the hash of all the inputs of the process that built the file or
6226 directory---compilers, libraries, build scripts,
6227 etc. (@pxref{Introduction}).  Assuming deterministic build processes,
6228 one store file name should map to exactly one build output.
6229 @command{guix challenge} checks whether there is, indeed, a single
6230 mapping by comparing the build outputs of several independent builds of
6231 any given store item.
6233 The command output looks like this:
6235 @smallexample
6236 $ guix challenge --substitute-urls="https://hydra.gnu.org https://guix.example.org"
6237 updating list of substitutes from 'https://hydra.gnu.org'... 100.0%
6238 updating list of substitutes from 'https://guix.example.org'... 100.0%
6239 /gnu/store/@dots{}-openssl-1.0.2d contents differ:
6240   local hash: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
6241   https://hydra.gnu.org/nar/@dots{}-openssl-1.0.2d: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
6242   https://guix.example.org/nar/@dots{}-openssl-1.0.2d: 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim
6243 /gnu/store/@dots{}-git-2.5.0 contents differ:
6244   local hash: 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha
6245   https://hydra.gnu.org/nar/@dots{}-git-2.5.0: 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f
6246   https://guix.example.org/nar/@dots{}-git-2.5.0: 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73
6247 /gnu/store/@dots{}-pius-2.1.1 contents differ:
6248   local hash: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
6249   https://hydra.gnu.org/nar/@dots{}-pius-2.1.1: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
6250   https://guix.example.org/nar/@dots{}-pius-2.1.1: 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs
6251 @end smallexample
6253 @noindent
6254 In this example, @command{guix challenge} first scans the store to
6255 determine the set of locally-built derivations---as opposed to store
6256 items that were downloaded from a substitute server---and then queries
6257 all the substitute servers.  It then reports those store items for which
6258 the servers obtained a result different from the local build.
6260 @cindex non-determinism, in package builds
6261 As an example, @code{guix.example.org} always gets a different answer.
6262 Conversely, @code{hydra.gnu.org} agrees with local builds, except in the
6263 case of Git.  This might indicate that the build process of Git is
6264 non-deterministic, meaning that its output varies as a function of
6265 various things that Guix does not fully control, in spite of building
6266 packages in isolated environments (@pxref{Features}).  Most common
6267 sources of non-determinism include the addition of timestamps in build
6268 results, the inclusion of random numbers, and directory listings sorted
6269 by inode number.  See @uref{https://reproducible-builds.org/docs/}, for
6270 more information.
6272 To find out what is wrong with this Git binary, we can do something along
6273 these lines (@pxref{Invoking guix archive}):
6275 @example
6276 $ wget -q -O - https://hydra.gnu.org/nar/@dots{}-git-2.5.0 \
6277    | guix archive -x /tmp/git
6278 $ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git
6279 @end example
6281 This command shows the difference between the files resulting from the
6282 local build, and the files resulting from the build on
6283 @code{hydra.gnu.org} (@pxref{Overview, Comparing and Merging Files,,
6284 diffutils, Comparing and Merging Files}).  The @command{diff} command
6285 works great for text files.  When binary files differ, a better option
6286 is @uref{https://diffoscope.org/, Diffoscope}, a tool that helps
6287 visualize differences for all kinds of files.
6289 Once you have done that work, you can tell whether the differences are due
6290 to a non-deterministic build process or to a malicious server.  We try
6291 hard to remove sources of non-determinism in packages to make it easier
6292 to verify substitutes, but of course, this is a process that
6293 involves not just Guix, but a large part of the free software community.
6294 In the meantime, @command{guix challenge} is one tool to help address
6295 the problem.
6297 If you are writing packages for Guix, you are encouraged to check
6298 whether @code{hydra.gnu.org} and other substitute servers obtain the
6299 same build result as you did with:
6301 @example
6302 $ guix challenge @var{package}
6303 @end example
6305 @noindent
6306 where @var{package} is a package specification such as
6307 @code{guile@@2.0} or @code{glibc:debug}.
6309 The general syntax is:
6311 @example
6312 guix challenge @var{options} [@var{packages}@dots{}]
6313 @end example
6315 When a difference is found between the hash of a locally-built item and
6316 that of a server-provided substitute, or among substitutes provided by
6317 different servers, the command displays it as in the example above and
6318 its exit code is 2 (other non-zero exit codes denote other kinds of
6319 errors.)
6321 The one option that matters is:
6323 @table @code
6325 @item --substitute-urls=@var{urls}
6326 Consider @var{urls} the whitespace-separated list of substitute source
6327 URLs to compare to.
6329 @end table
6332 @node Invoking guix container
6333 @section Invoking @command{guix container}
6334 @cindex container
6335 @cindex @command{guix container}
6336 @quotation Note
6337 As of version @value{VERSION}, this tool is experimental.  The interface
6338 is subject to radical change in the future.
6339 @end quotation
6341 The purpose of @command{guix container} is to manipulate processes
6342 running within an isolated environment, commonly known as a
6343 ``container'', typically created by the @command{guix environment}
6344 (@pxref{Invoking guix environment}) and @command{guix system container}
6345 (@pxref{Invoking guix system}) commands.
6347 The general syntax is:
6349 @example
6350 guix container @var{action} @var{options}@dots{}
6351 @end example
6353 @var{action} specifies the operation to perform with a container, and
6354 @var{options} specifies the context-specific arguments for the action.
6356 The following actions are available:
6358 @table @code
6359 @item exec
6360 Execute a command within the context of a running container.
6362 The syntax is:
6364 @example
6365 guix container exec @var{pid} @var{program} @var{arguments}@dots{}
6366 @end example
6368 @var{pid} specifies the process ID of the running container.
6369 @var{program} specifies an executable file name within the root file
6370 system of the container.  @var{arguments} are the additional options that
6371 will be passed to @var{program}.
6373 The following command launches an interactive login shell inside a
6374 GuixSD container, started by @command{guix system container}, and whose
6375 process ID is 9001:
6377 @example
6378 guix container exec 9001 /run/current-system/profile/bin/bash --login
6379 @end example
6381 Note that the @var{pid} cannot be the parent process of a container.  It
6382 must be PID 1 of the container or one of its child processes.
6384 @end table
6386 @c *********************************************************************
6387 @node GNU Distribution
6388 @chapter GNU Distribution
6390 @cindex Guix System Distribution
6391 @cindex GuixSD
6392 Guix comes with a distribution of the GNU system consisting entirely of
6393 free software@footnote{The term ``free'' here refers to the
6394 @url{http://www.gnu.org/philosophy/free-sw.html,freedom provided to
6395 users of that software}.}.  The
6396 distribution can be installed on its own (@pxref{System Installation}),
6397 but it is also possible to install Guix as a package manager on top of
6398 an installed GNU/Linux system (@pxref{Installation}).  To distinguish
6399 between the two, we refer to the standalone distribution as the Guix
6400 System Distribution, or GuixSD.
6402 The distribution provides core GNU packages such as GNU libc, GCC, and
6403 Binutils, as well as many GNU and non-GNU applications.  The complete
6404 list of available packages can be browsed
6405 @url{http://www.gnu.org/software/guix/packages,on-line} or by
6406 running @command{guix package} (@pxref{Invoking guix package}):
6408 @example
6409 guix package --list-available
6410 @end example
6412 Our goal is to provide a practical 100% free software distribution of
6413 Linux-based and other variants of GNU, with a focus on the promotion and
6414 tight integration of GNU components, and an emphasis on programs and
6415 tools that help users exert that freedom.
6417 Packages are currently available on the following platforms:
6419 @table @code
6421 @item x86_64-linux
6422 Intel/AMD @code{x86_64} architecture, Linux-Libre kernel;
6424 @item i686-linux
6425 Intel 32-bit architecture (IA32), Linux-Libre kernel;
6427 @item armhf-linux
6428 ARMv7-A architecture with hard float, Thumb-2 and NEON,
6429 using the EABI hard-float application binary interface (ABI),
6430 and Linux-Libre kernel.
6432 @item mips64el-linux
6433 little-endian 64-bit MIPS processors, specifically the Loongson series,
6434 n32 ABI, and Linux-Libre kernel.
6436 @end table
6438 GuixSD itself is currently only available on @code{i686} and @code{x86_64}.
6440 @noindent
6441 For information on porting to other architectures or kernels,
6442 @pxref{Porting}.
6444 @menu
6445 * System Installation::         Installing the whole operating system.
6446 * System Configuration::        Configuring the operating system.
6447 * Installing Debugging Files::  Feeding the debugger.
6448 * Security Updates::            Deploying security fixes quickly.
6449 * Package Modules::             Packages from the programmer's viewpoint.
6450 * Packaging Guidelines::        Growing the distribution.
6451 * Bootstrapping::               GNU/Linux built from scratch.
6452 * Porting::                     Targeting another platform or kernel.
6453 @end menu
6455 Building this distribution is a cooperative effort, and you are invited
6456 to join!  @xref{Contributing}, for information about how you can help.
6458 @node System Installation
6459 @section System Installation
6461 @cindex installing GuixSD
6462 @cindex Guix System Distribution
6463 This section explains how to install the Guix System Distribution (GuixSD)
6464 on a machine.  The Guix package manager can
6465 also be installed on top of a running GNU/Linux system,
6466 @pxref{Installation}.
6468 @ifinfo
6469 @quotation Note
6470 @c This paragraph is for people reading this from tty2 of the
6471 @c installation image.
6472 You are reading this documentation with an Info reader.  For details on
6473 how to use it, hit the @key{RET} key (``return'' or ``enter'') on the
6474 link that follows: @pxref{Top, Info reader,, info-stnd, Stand-alone GNU
6475 Info}.  Hit @kbd{l} afterwards to come back here.
6477 Alternately, run @command{info info} in another tty to keep the manual
6478 available.
6479 @end quotation
6480 @end ifinfo
6482 @menu
6483 * Limitations::                 What you can expect.
6484 * Hardware Considerations::     Supported hardware.
6485 * USB Stick Installation::      Preparing the installation medium.
6486 * Preparing for Installation::  Networking, partitioning, etc.
6487 * Proceeding with the Installation::  The real thing.
6488 * Installing GuixSD in a VM::   GuixSD playground.
6489 * Building the Installation Image::  How this comes to be.
6490 @end menu
6492 @node Limitations
6493 @subsection Limitations
6495 As of version @value{VERSION}, the Guix System Distribution (GuixSD) is
6496 not production-ready.  It may contain bugs and lack important
6497 features.  Thus, if you are looking for a stable production system that
6498 respects your freedom as a computer user, a good solution at this point
6499 is to consider @url{http://www.gnu.org/distros/free-distros.html, one of
6500 the more established GNU/Linux distributions}.  We hope you can soon switch
6501 to the GuixSD without fear, of course.  In the meantime, you can
6502 also keep using your distribution and try out the package manager on top
6503 of it (@pxref{Installation}).
6505 Before you proceed with the installation, be aware of the following
6506 noteworthy limitations applicable to version @value{VERSION}:
6508 @itemize
6509 @item
6510 The installation process does not include a graphical user interface and
6511 requires familiarity with GNU/Linux (see the following subsections to
6512 get a feel of what that means.)
6514 @item
6515 Support for the Logical Volume Manager (LVM) is missing.
6517 @item
6518 Few system services are currently supported out-of-the-box
6519 (@pxref{Services}).
6521 @item
6522 More than 4,000 packages are available, but you may
6523 occasionally find that a useful package is missing.
6525 @item
6526 GNOME, Xfce, and Enlightenment are available (@pxref{Desktop Services}),
6527 as well as a number of X11 window managers.  However, some graphical
6528 applications may be missing, as well as KDE.
6529 @end itemize
6531 You have been warned!  But more than a disclaimer, this is an invitation
6532 to report issues (and success stories!), and to join us in improving it.
6533 @xref{Contributing}, for more info.
6536 @node Hardware Considerations
6537 @subsection Hardware Considerations
6539 @cindex hardware support on GuixSD
6540 GNU@tie{}GuixSD focuses on respecting the user's computing freedom.  It
6541 builds around the kernel Linux-libre, which means that only hardware for
6542 which free software drivers and firmware exist is supported.  Nowadays,
6543 a wide range of off-the-shelf hardware is supported on
6544 GNU/Linux-libre---from keyboards to graphics cards to scanners and
6545 Ethernet controllers.  Unfortunately, there are still areas where
6546 hardware vendors deny users control over their own computing, and such
6547 hardware is not supported on GuixSD.
6549 @cindex WiFi, hardware support
6550 One of the main areas where free drivers or firmware are lacking is WiFi
6551 devices.  WiFi devices known to work include those using Atheros chips
6552 (AR9271 and AR7010), which corresponds to the @code{ath9k} Linux-libre
6553 driver, and those using Broadcom/AirForce chips (BCM43xx with
6554 Wireless-Core Revision 5), which corresponds to the @code{b43-open}
6555 Linux-libre driver.  Free firmware exists for both and is available
6556 out-of-the-box on GuixSD, as part of @var{%base-firmware}
6557 (@pxref{operating-system Reference, @code{firmware}}).
6559 @cindex RYF, Respects Your Freedom
6560 The @uref{https://www.fsf.org/, Free Software Foundation} runs
6561 @uref{https://www.fsf.org/ryf, @dfn{Respects Your Freedom}} (RYF), a
6562 certification program for hardware products that respect your freedom
6563 and your privacy and ensure that you have control over your device.  We
6564 encourage you to check the list of RYF-certified devices.
6566 Another useful resource is the @uref{https://www.h-node.org/, H-Node}
6567 web site.  It contains a catalog of hardware devices with information
6568 about their support in GNU/Linux.
6571 @node USB Stick Installation
6572 @subsection USB Stick Installation
6574 An installation image for USB sticks can be downloaded from
6575 @indicateurl{ftp://alpha.gnu.org/gnu/guix/guixsd-usb-install-@value{VERSION}.@var{system}.xz},
6576 where @var{system} is one of:
6578 @table @code
6579 @item x86_64-linux
6580 for a GNU/Linux system on Intel/AMD-compatible 64-bit CPUs;
6582 @item i686-linux
6583 for a 32-bit GNU/Linux system on Intel-compatible CPUs.
6584 @end table
6586 @c start duplication of authentication part from ``Binary Installation''
6587 Make sure to download the associated @file{.sig} file and to verify the
6588 authenticity of the image against it, along these lines:
6590 @example
6591 $ wget ftp://alpha.gnu.org/gnu/guix/guixsd-usb-install-@value{VERSION}.@var{system}.xz.sig
6592 $ gpg --verify guixsd-usb-install-@value{VERSION}.@var{system}.xz.sig
6593 @end example
6595 If that command fails because you do not have the required public key,
6596 then run this command to import it:
6598 @example
6599 $ gpg --keyserver pgp.mit.edu --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
6600 @end example
6602 @noindent
6603 and rerun the @code{gpg --verify} command.
6604 @c end duplication
6606 This image contains a single partition with the tools necessary for an
6607 installation.  It is meant to be copied @emph{as is} to a large-enough
6608 USB stick.
6610 To copy the image to a USB stick, follow these steps:
6612 @enumerate
6613 @item
6614 Decompress the image using the @command{xz} command:
6616 @example
6617 xz -d guixsd-usb-install-@value{VERSION}.@var{system}.xz
6618 @end example
6620 @item
6621 Insert a USB stick of 1@tie{}GiB or more into your machine, and determine
6622 its device name.  Assuming that the USB stick is known as @file{/dev/sdX},
6623 copy the image with:
6625 @example
6626 dd if=guixsd-usb-install-@value{VERSION}.x86_64 of=/dev/sdX
6627 @end example
6629 Access to @file{/dev/sdX} usually requires root privileges.
6630 @end enumerate
6632 Once this is done, you should be able to reboot the system and boot from
6633 the USB stick.  The latter usually requires you to get in the BIOS' boot
6634 menu, where you can choose to boot from the USB stick.
6636 @xref{Installing GuixSD in a VM}, if, instead, you would like to install
6637 GuixSD in a virtual machine (VM).
6639 @node Preparing for Installation
6640 @subsection Preparing for Installation
6642 Once you have successfully booted the image on the USB stick, you should
6643 end up with a root prompt.  Several console TTYs are configured and can
6644 be used to run commands as root.  TTY2 shows this documentation,
6645 browsable using the Info reader commands (@pxref{Top,,, info-stnd,
6646 Stand-alone GNU Info}).  The installation system runs the GPM mouse
6647 daemon, which allows you to select text with the left mouse button and
6648 to paste it with the middle button.
6650 @quotation Note
6651 Installation requires access to the Internet so that any missing
6652 dependencies of your system configuration can be downloaded.  See the
6653 ``Networking'' section below.
6654 @end quotation
6656 The installation system includes many common tools needed for this task.
6657 But it is also a full-blown GuixSD system, which means that you can
6658 install additional packages, should you need it, using @command{guix
6659 package} (@pxref{Invoking guix package}).
6661 @subsubsection Keyboard Layout
6663 @cindex keyboard layout
6664 The installation image uses the US qwerty keyboard layout.  If you want
6665 to change it, you can use the @command{loadkeys} command.  For example,
6666 the following command selects the Dvorak keyboard layout:
6668 @example
6669 loadkeys dvorak
6670 @end example
6672 See the files under @file{/run/current-system/profile/share/keymaps} for
6673 a list of available keyboard layouts.  Run @command{man loadkeys} for
6674 more information.
6676 @subsubsection Networking
6678 Run the following command see what your network interfaces are called:
6680 @example
6681 ifconfig -a
6682 @end example
6684 @noindent
6685 @dots{} or, using the GNU/Linux-specific @command{ip} command:
6687 @example
6688 ip a
6689 @end example
6691 @c http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
6692 Wired interfaces have a name starting with @samp{e}; for example, the
6693 interface corresponding to the first on-board Ethernet controller is
6694 called @samp{eno1}.  Wireless interfaces have a name starting with
6695 @samp{w}, like @samp{w1p2s0}.
6697 @table @asis
6698 @item Wired connection
6699 To configure a wired network run the following command, substituting
6700 @var{interface} with the name of the wired interface you want to use.
6702 @example
6703 ifconfig @var{interface} up
6704 @end example
6706 @item Wireless connection
6707 @cindex wireless
6708 @cindex WiFi
6709 To configure wireless networking, you can create a configuration file
6710 for the @command{wpa_supplicant} configuration tool (its location is not
6711 important) using one of the available text editors such as
6712 @command{zile}:
6714 @example
6715 zile wpa_supplicant.conf
6716 @end example
6718 As an example, the following stanza can go to this file and will work
6719 for many wireless networks, provided you give the actual SSID and
6720 passphrase for the network you are connecting to:
6722 @example
6723 network=@{
6724   ssid="@var{my-ssid}"
6725   key_mgmt=WPA-PSK
6726   psk="the network's secret passphrase"
6728 @end example
6730 Start the wireless service and run it in the background with the
6731 following command (substitute @var{interface} with the name of the
6732 network interface you want to use):
6734 @example
6735 wpa_supplicant -c wpa_supplicant.conf -i @var{interface} -B
6736 @end example
6738 Run @command{man wpa_supplicant} for more information.
6739 @end table
6741 @cindex DHCP
6742 At this point, you need to acquire an IP address.  On a network where IP
6743 addresses are automatically assigned @i{via} DHCP, you can run:
6745 @example
6746 dhclient -v @var{interface}
6747 @end example
6749 Try to ping a server to see if networking is up and running:
6751 @example
6752 ping -c 3 gnu.org
6753 @end example
6755 Setting up network access is almost always a requirement because the
6756 image does not contain all the software and tools that may be needed.
6758 @subsubsection Disk Partitioning
6760 Unless this has already been done, the next step is to partition, and
6761 then format the target partition(s).
6763 The installation image includes several partitioning tools, including
6764 Parted (@pxref{Overview,,, parted, GNU Parted User Manual}),
6765 @command{fdisk}, and @command{cfdisk}.  Run it and set up your disk with
6766 the partition layout you want:
6768 @example
6769 cfdisk
6770 @end example
6772 Once you are done partitioning the target hard disk drive, you have to
6773 create a file system on the relevant partition(s)@footnote{Currently
6774 GuixSD pretty much assumes an ext4 file system.  In particular, code
6775 that reads partition UUIDs and labels only works with ext4.  This will
6776 be fixed in the future.}.
6778 Preferably, assign partitions a label so that you can easily and
6779 reliably refer to them in @code{file-system} declarations (@pxref{File
6780 Systems}).  This is typically done using the @code{-L} option of
6781 @command{mkfs.ext4} and related commands.  So, assuming the target root
6782 partition lives at @file{/dev/sda1}, a file system with the label
6783 @code{my-root} can be created with:
6785 @example
6786 mkfs.ext4 -L my-root /dev/sda1
6787 @end example
6789 @cindex encrypted disk
6790 If you are instead planning to encrypt the root partition, you can use
6791 the Cryptsetup/LUKS utilities to do that (see @inlinefmtifelse{html,
6792 @uref{https://linux.die.net/man/8/cryptsetup, @code{man cryptsetup}},
6793 @code{man cryptsetup}} for more information.)  Assuming you want to
6794 store the root partition on @file{/dev/sda1}, the command sequence would
6795 be along these lines:
6797 @example
6798 cryptsetup luksFormat /dev/sda1
6799 cryptsetup open --type luks /dev/sda1 my-partition
6800 mkfs.ext4 -L my-root /dev/mapper/my-partition
6801 @end example
6803 Once that is done, mount the target root partition under @file{/mnt}
6804 with a command like (again, assuming @code{my-root} is the label of the
6805 root partition):
6807 @example
6808 mount LABEL=my-root /mnt
6809 @end example
6811 Finally, if you plan to use one or more swap partitions (@pxref{Memory
6812 Concepts, swap space,, libc, The GNU C Library Reference Manual}), make
6813 sure to initialize them with @command{mkswap}.  Assuming you have one
6814 swap partition on @file{/dev/sda2}, you would run:
6816 @example
6817 mkswap /dev/sda2
6818 @end example
6820 @node Proceeding with the Installation
6821 @subsection Proceeding with the Installation
6823 With the target partitions ready and the target root mounted on
6824 @file{/mnt}, we're ready to go.  First, run:
6826 @example
6827 herd start cow-store /mnt
6828 @end example
6830 This makes @file{/gnu/store} copy-on-write, such that packages added to it
6831 during the installation phase are written to the target disk on @file{/mnt}
6832 rather than kept in memory.  This is necessary because the first phase of
6833 the @command{guix system init} command (see below) entails downloads or
6834 builds to @file{/gnu/store} which, initially, is an in-memory file system.
6836 Next, you have to edit a file and
6837 provide the declaration of the operating system to be installed.  To
6838 that end, the installation system comes with three text editors: GNU nano
6839 (@pxref{Top,,, nano, GNU nano Manual}), GNU Zile (an Emacs clone), and
6840 nvi (a clone of the original BSD @command{vi} editor).
6841 We strongly recommend storing that file on the target root file system, say,
6842 as @file{/mnt/etc/config.scm}.  Failing to do that, you will have lost your
6843 configuration file once you have rebooted into the newly-installed system.
6845 @xref{Using the Configuration System}, for an overview of the
6846 configuration file.  The example configurations discussed in that
6847 section are available under @file{/etc/configuration} in the
6848 installation image.  Thus, to get started with a system configuration
6849 providing a graphical display server (a ``desktop'' system), you can run
6850 something along these lines:
6852 @example
6853 # mkdir /mnt/etc
6854 # cp /etc/configuration/desktop.scm /mnt/etc/config.scm
6855 # zile /mnt/etc/config.scm
6856 @end example
6858 You should pay attention to what your configuration file contains, and
6859 in particular:
6861 @itemize
6862 @item
6863 Make sure the @code{grub-configuration} form refers to the device you
6864 want to install GRUB on.
6866 @item
6867 Be sure that your partition labels match the value of their respective
6868 @code{device} fields in your @code{file-system} configuration, assuming
6869 your @code{file-system} configuration sets the value of @code{title} to
6870 @code{'label}.
6872 @item
6873 If there are encrypted or RAID partitions, make sure to add a
6874 @code{mapped-devices} field to describe them (@pxref{Mapped Devices}).
6875 @end itemize
6877 Once you are done preparing the configuration file, the new system must
6878 be initialized (remember that the target root file system is mounted
6879 under @file{/mnt}):
6881 @example
6882 guix system init /mnt/etc/config.scm /mnt
6883 @end example
6885 @noindent
6886 This copies all the necessary files and installs GRUB on
6887 @file{/dev/sdX}, unless you pass the @option{--no-grub} option.  For
6888 more information, @pxref{Invoking guix system}.  This command may trigger
6889 downloads or builds of missing packages, which can take some time.
6891 Once that command has completed---and hopefully succeeded!---you can run
6892 @command{reboot} and boot into the new system.  The @code{root} password
6893 in the new system is initially empty; other users' passwords need to be
6894 initialized by running the @command{passwd} command as @code{root},
6895 unless your configuration specifies otherwise
6896 (@pxref{user-account-password, user account passwords}).
6898 Join us on @code{#guix} on the Freenode IRC network or on
6899 @file{guix-devel@@gnu.org} to share your experience---good or not so
6900 good.
6902 @node Installing GuixSD in a VM
6903 @subsection Installing GuixSD in a Virtual Machine
6905 @cindex virtual machine, GuixSD installation
6906 If you'd like to install GuixSD in a virtual machine (VM) rather than on
6907 your beloved machine, this section is for you.
6909 To boot a @uref{http://qemu.org/,QEMU} VM for installing GuixSD in a
6910 disk image, follow these steps:
6912 @enumerate
6913 @item
6914 First, retrieve the GuixSD installation image as described previously
6915 (@pxref{USB Stick Installation}).
6917 @item
6918 Create a disk image that will hold the installed system.  To make a
6919 qcow2-formatted disk image, use the @command{qemu-img} command:
6921 @example
6922 qemu-img create -f qcow2 guixsd.img 5G
6923 @end example
6925 This will create a 5GB file.
6927 @item
6928 Boot the USB installation image in an VM:
6930 @example
6931 qemu-system-x86_64 -m 1024 -smp 1 \
6932   -net default -net nic,model=virtio -boot menu=on \
6933   -drive file=guixsd.img \
6934   -drive file=guixsd-usb-install-@value{VERSION}.@var{system}
6935 @end example
6937 In the VM console, quickly press the @kbd{F12} key to enter the boot
6938 menu.  Then press the @kbd{2} key and the @kbd{RET} key to validate your
6939 selection.
6941 @item
6942 You're now root in the VM, proceed with the installation process.
6943 @xref{Preparing for Installation}, and follow the instructions.
6944 @end enumerate
6946 Once installation is complete, you can boot the system that's on your
6947 @file{guixsd.img} image.  @xref{Running GuixSD in a VM}, for how to do
6948 that.
6950 @node Building the Installation Image
6951 @subsection Building the Installation Image
6953 @cindex installation image
6954 The installation image described above was built using the @command{guix
6955 system} command, specifically:
6957 @c FIXME: 1G is too much; see <http://bugs.gnu.org/23077>.
6958 @example
6959 guix system disk-image --image-size=1G gnu/system/install.scm
6960 @end example
6962 Have a look at @file{gnu/system/install.scm} in the source tree,
6963 and see also @ref{Invoking guix system} for more information
6964 about the installation image.
6966 @node System Configuration
6967 @section System Configuration
6969 @cindex system configuration
6970 The Guix System Distribution supports a consistent whole-system configuration
6971 mechanism.  By that we mean that all aspects of the global system
6972 configuration---such as the available system services, timezone and
6973 locale settings, user accounts---are declared in a single place.  Such
6974 a @dfn{system configuration} can be @dfn{instantiated}---i.e., effected.
6976 One of the advantages of putting all the system configuration under the
6977 control of Guix is that it supports transactional system upgrades, and
6978 makes it possible to roll back to a previous system instantiation,
6979 should something go wrong with the new one (@pxref{Features}).  Another
6980 advantage is that it makes it easy to replicate the exact same configuration
6981 across different machines, or at different points in time, without
6982 having to resort to additional administration tools layered on top of
6983 the own tools of the system.
6984 @c Yes, we're talking of Puppet, Chef, & co. here.  ↑
6986 This section describes this mechanism.  First we focus on the system
6987 administrator's viewpoint---explaining how the system is configured and
6988 instantiated.  Then we show how this mechanism can be extended, for
6989 instance to support new system services.
6991 @menu
6992 * Using the Configuration System::  Customizing your GNU system.
6993 * operating-system Reference::  Detail of operating-system declarations.
6994 * File Systems::                Configuring file system mounts.
6995 * Mapped Devices::              Block device extra processing.
6996 * User Accounts::               Specifying user accounts.
6997 * Locales::                     Language and cultural convention settings.
6998 * Services::                    Specifying system services.
6999 * Setuid Programs::             Programs running with root privileges.
7000 * X.509 Certificates::          Authenticating HTTPS servers.
7001 * Name Service Switch::         Configuring libc's name service switch.
7002 * Initial RAM Disk::            Linux-Libre bootstrapping.
7003 * GRUB Configuration::          Configuring the boot loader.
7004 * Invoking guix system::        Instantiating a system configuration.
7005 * Running GuixSD in a VM::      How to run GuixSD in a virtual machine.
7006 * Defining Services::           Adding new service definitions.
7007 @end menu
7009 @node Using the Configuration System
7010 @subsection Using the Configuration System
7012 The operating system is configured by providing an
7013 @code{operating-system} declaration in a file that can then be passed to
7014 the @command{guix system} command (@pxref{Invoking guix system}).  A
7015 simple setup, with the default system services, the default Linux-Libre
7016 kernel, initial RAM disk, and boot loader looks like this:
7018 @findex operating-system
7019 @lisp
7020 @include os-config-bare-bones.texi
7021 @end lisp
7023 This example should be self-describing.  Some of the fields defined
7024 above, such as @code{host-name} and @code{bootloader}, are mandatory.
7025 Others, such as @code{packages} and @code{services}, can be omitted, in
7026 which case they get a default value.
7028 Below we discuss the effect of some of the most important fields
7029 (@pxref{operating-system Reference}, for details about all the available
7030 fields), and how to @dfn{instantiate} the operating system using
7031 @command{guix system}.
7033 @unnumberedsubsubsec Globally-Visible Packages
7035 @vindex %base-packages
7036 The @code{packages} field lists packages that will be globally visible
7037 on the system, for all user accounts---i.e., in every user's @code{PATH}
7038 environment variable---in addition to the per-user profiles
7039 (@pxref{Invoking guix package}).  The @var{%base-packages} variable
7040 provides all the tools one would expect for basic user and administrator
7041 tasks---including the GNU Core Utilities, the GNU Networking Utilities,
7042 the GNU Zile lightweight text editor, @command{find}, @command{grep},
7043 etc.  The example above adds tcpdump to those, taken from the @code{(gnu
7044 packages admin)} module (@pxref{Package Modules}).
7046 @findex specification->package
7047 Referring to packages by variable name, like @var{tcpdump} above, has
7048 the advantage of being unambiguous; it also allows typos and such to be
7049 diagnosed right away as ``unbound variables''.  The downside is that one
7050 needs to know which module defines which package, and to augment the
7051 @code{use-package-modules} line accordingly.  To avoid that, one can use
7052 the @code{specification->package} procedure of the @code{(gnu packages)}
7053 module, which returns the best package for a given name or name and
7054 version:
7056 @lisp
7057 (use-modules (gnu packages))
7059 (operating-system
7060   ;; ...
7061   (packages (append (map specification->package
7062                          '("tcpdump" "htop" "gnupg@@2.0"))
7063                     %base-packages)))
7064 @end lisp
7066 @unnumberedsubsubsec System Services
7068 @cindex services
7069 @vindex %base-services
7070 The @code{services} field lists @dfn{system services} to be made
7071 available when the system starts (@pxref{Services}).
7072 The @code{operating-system} declaration above specifies that, in
7073 addition to the basic services, we want the @command{lshd} secure shell
7074 daemon listening on port 2222 (@pxref{Networking Services,
7075 @code{lsh-service}}).  Under the hood,
7076 @code{lsh-service} arranges so that @code{lshd} is started with the
7077 right command-line options, possibly with supporting configuration files
7078 generated as needed (@pxref{Defining Services}).
7080 @cindex customization, of services
7081 @findex modify-services
7082 Occasionally, instead of using the base services as is, you will want to
7083 customize them.  To do this, use @code{modify-services} (@pxref{Service
7084 Reference, @code{modify-services}}) to modify the list.
7086 For example, suppose you want to modify @code{guix-daemon} and Mingetty
7087 (the console log-in) in the @var{%base-services} list (@pxref{Base
7088 Services, @code{%base-services}}).  To do that, you can write the
7089 following in your operating system declaration:
7091 @lisp
7092 (define %my-services
7093   ;; My very own list of services.
7094   (modify-services %base-services
7095     (guix-service-type config =>
7096                        (guix-configuration
7097                         (inherit config)
7098                         (use-substitutes? #f)
7099                         (extra-options '("--gc-keep-derivations"))))
7100     (mingetty-service-type config =>
7101                            (mingetty-configuration
7102                             (inherit config)))))
7104 (operating-system
7105   ;; @dots{}
7106   (services %my-services))
7107 @end lisp
7109 This changes the configuration---i.e., the service parameters---of the
7110 @code{guix-service-type} instance, and that of all the
7111 @code{mingetty-service-type} instances in the @var{%base-services} list.
7112 Observe how this is accomplished: first, we arrange for the original
7113 configuration to be bound to the identifier @code{config} in the
7114 @var{body}, and then we write the @var{body} so that it evaluates to the
7115 desired configuration.  In particular, notice how we use @code{inherit}
7116 to create a new configuration which has the same values as the old
7117 configuration, but with a few modifications.
7119 @cindex encrypted disk
7120 The configuration for a typical ``desktop'' usage, with an encrypted
7121 root partition, the X11 display
7122 server, GNOME and Xfce (users can choose which of these desktop
7123 environments to use at the log-in screen by pressing @kbd{F1}), network
7124 management, power management, and more, would look like this:
7126 @lisp
7127 @include os-config-desktop.texi
7128 @end lisp
7130 A graphical environment with a choice of lightweight window managers
7131 instead of full-blown desktop environments would look like this:
7133 @lisp
7134 @include os-config-lightweight-desktop.texi
7135 @end lisp
7137 @xref{Desktop Services}, for the exact list of services provided by
7138 @var{%desktop-services}.  @xref{X.509 Certificates}, for background
7139 information about the @code{nss-certs} package that is used here.
7141 Again, @var{%desktop-services} is just a list of service objects.  If
7142 you want to remove services from there, you can do so using the
7143 procedures for list filtering (@pxref{SRFI-1 Filtering and
7144 Partitioning,,, guile, GNU Guile Reference Manual}).  For instance, the
7145 following expression returns a list that contains all the services in
7146 @var{%desktop-services} minus the Avahi service:
7148 @example
7149 (remove (lambda (service)
7150           (eq? (service-kind service) avahi-service-type))
7151         %desktop-services)
7152 @end example
7154 @unnumberedsubsubsec Instantiating the System
7156 Assuming the @code{operating-system} declaration
7157 is stored in the @file{my-system-config.scm}
7158 file, the @command{guix system reconfigure my-system-config.scm} command
7159 instantiates that configuration, and makes it the default GRUB boot
7160 entry (@pxref{Invoking guix system}).
7162 The normal way to change the system configuration is by updating this
7163 file and re-running @command{guix system reconfigure}.  One should never
7164 have to touch files in @file{/etc} or to run commands that modify the
7165 system state such as @command{useradd} or @command{grub-install}.  In
7166 fact, you must avoid that since that would not only void your warranty
7167 but also prevent you from rolling back to previous versions of your
7168 system, should you ever need to.
7170 @cindex roll-back, of the operating system
7171 Speaking of roll-back, each time you run @command{guix system
7172 reconfigure}, a new @dfn{generation} of the system is created---without
7173 modifying or deleting previous generations.  Old system generations get
7174 an entry in the GRUB boot menu, allowing you to boot them in case
7175 something went wrong with the latest generation.  Reassuring, no?  The
7176 @command{guix system list-generations} command lists the system
7177 generations available on disk.
7179 @unnumberedsubsubsec The Programming Interface
7181 At the Scheme level, the bulk of an @code{operating-system} declaration
7182 is instantiated with the following monadic procedure (@pxref{The Store
7183 Monad}):
7185 @deffn {Monadic Procedure} operating-system-derivation os
7186 Return a derivation that builds @var{os}, an @code{operating-system}
7187 object (@pxref{Derivations}).
7189 The output of the derivation is a single directory that refers to all
7190 the packages, configuration files, and other supporting files needed to
7191 instantiate @var{os}.
7192 @end deffn
7194 This procedure is provided by the @code{(gnu system)} module.  Along
7195 with @code{(gnu services)} (@pxref{Services}), this module contains the
7196 guts of GuixSD.  Make sure to visit it!
7199 @node operating-system Reference
7200 @subsection @code{operating-system} Reference
7202 This section summarizes all the options available in
7203 @code{operating-system} declarations (@pxref{Using the Configuration
7204 System}).
7206 @deftp {Data Type} operating-system
7207 This is the data type representing an operating system configuration.
7208 By that, we mean all the global system configuration, not per-user
7209 configuration (@pxref{Using the Configuration System}).
7211 @table @asis
7212 @item @code{kernel} (default: @var{linux-libre})
7213 The package object of the operating system kernel to use@footnote{Currently
7214 only the Linux-libre kernel is supported.  In the future, it will be
7215 possible to use the GNU@tie{}Hurd.}.
7217 @item @code{kernel-arguments} (default: @code{'()})
7218 List of strings or gexps representing additional arguments to pass on
7219 the command-line of the kernel---e.g., @code{("console=ttyS0")}.
7221 @item @code{bootloader}
7222 The system bootloader configuration object.  @xref{GRUB Configuration}.
7224 @item @code{initrd} (default: @code{base-initrd})
7225 @cindex initrd
7226 @cindex initial RAM disk
7227 A two-argument monadic procedure that returns an initial RAM disk for
7228 the Linux kernel.  @xref{Initial RAM Disk}.
7230 @item @code{firmware} (default: @var{%base-firmware})
7231 @cindex firmware
7232 List of firmware packages loadable by the operating system kernel.
7234 The default includes firmware needed for Atheros- and Broadcom-based
7235 WiFi devices (Linux-libre modules @code{ath9k} and @code{b43-open},
7236 respectively).  @xref{Hardware Considerations}, for more info on
7237 supported hardware.
7239 @item @code{host-name}
7240 The host name.
7242 @item @code{hosts-file}
7243 @cindex hosts file
7244 A file-like object (@pxref{G-Expressions, file-like objects}) for use as
7245 @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library
7246 Reference Manual}).  The default is a file with entries for
7247 @code{localhost} and @var{host-name}.
7249 @item @code{mapped-devices} (default: @code{'()})
7250 A list of mapped devices.  @xref{Mapped Devices}.
7252 @item @code{file-systems}
7253 A list of file systems.  @xref{File Systems}.
7255 @item @code{swap-devices} (default: @code{'()})
7256 @cindex swap devices
7257 A list of strings identifying devices to be used for ``swap space''
7258 (@pxref{Memory Concepts,,, libc, The GNU C Library Reference Manual}).
7259 For example, @code{'("/dev/sda3")}.
7261 @item @code{users} (default: @code{%base-user-accounts})
7262 @itemx @code{groups} (default: @var{%base-groups})
7263 List of user accounts and groups.  @xref{User Accounts}.
7265 @item @code{skeletons} (default: @code{(default-skeletons)})
7266 A list target file name/file-like object tuples (@pxref{G-Expressions,
7267 file-like objects}).  These are the skeleton files that will be added to
7268 the home directory of newly-created user accounts.
7270 For instance, a valid value may look like this:
7272 @example
7273 `((".bashrc" ,(plain-file "bashrc" "echo Hello\n"))
7274   (".guile" ,(plain-file "guile"
7275                          "(use-modules (ice-9 readline))
7276                           (activate-readline)")))
7277 @end example
7279 @item @code{issue} (default: @var{%default-issue})
7280 A string denoting the contents of the @file{/etc/issue} file, which is
7281 displayed when users log in on a text console.
7283 @item @code{packages} (default: @var{%base-packages})
7284 The set of packages installed in the global profile, which is accessible
7285 at @file{/run/current-system/profile}.
7287 The default set includes core utilities and it is good practice to
7288 install non-core utilities in user profiles (@pxref{Invoking guix
7289 package}).
7291 @item @code{timezone}
7292 A timezone identifying string---e.g., @code{"Europe/Paris"}.
7294 You can run the @command{tzselect} command to find out which timezone
7295 string corresponds to your region.  Choosing an invalid timezone name
7296 causes @command{guix system} to fail.
7298 @item @code{locale} (default: @code{"en_US.utf8"})
7299 The name of the default locale (@pxref{Locale Names,,, libc, The GNU C
7300 Library Reference Manual}).  @xref{Locales}, for more information.
7302 @item @code{locale-definitions} (default: @var{%default-locale-definitions})
7303 The list of locale definitions to be compiled and that may be used at
7304 run time.  @xref{Locales}.
7306 @item @code{locale-libcs} (default: @code{(list @var{glibc})})
7307 The list of GNU@tie{}libc packages whose locale data and tools are used
7308 to build the locale definitions.  @xref{Locales}, for compatibility
7309 considerations that justify this option.
7311 @item @code{name-service-switch} (default: @var{%default-nss})
7312 Configuration of the libc name service switch (NSS)---a
7313 @code{<name-service-switch>} object.  @xref{Name Service Switch}, for
7314 details.
7316 @item @code{services} (default: @var{%base-services})
7317 A list of service objects denoting system services.  @xref{Services}.
7319 @item @code{pam-services} (default: @code{(base-pam-services)})
7320 @cindex PAM
7321 @cindex pluggable authentication modules
7322 Linux @dfn{pluggable authentication module} (PAM) services.
7323 @c FIXME: Add xref to PAM services section.
7325 @item @code{setuid-programs} (default: @var{%setuid-programs})
7326 List of string-valued G-expressions denoting setuid programs.
7327 @xref{Setuid Programs}.
7329 @item @code{sudoers-file} (default: @var{%sudoers-specification})
7330 @cindex sudoers file
7331 The contents of the @file{/etc/sudoers} file as a file-like object
7332 (@pxref{G-Expressions, @code{local-file} and @code{plain-file}}).
7334 This file specifies which users can use the @command{sudo} command, what
7335 they are allowed to do, and what privileges they may gain.  The default
7336 is that only @code{root} and members of the @code{wheel} group may use
7337 @code{sudo}.
7339 @end table
7340 @end deftp
7342 @node File Systems
7343 @subsection File Systems
7345 The list of file systems to be mounted is specified in the
7346 @code{file-systems} field of the operating system declaration
7347 (@pxref{Using the Configuration System}).  Each file system is declared
7348 using the @code{file-system} form, like this:
7350 @example
7351 (file-system
7352   (mount-point "/home")
7353   (device "/dev/sda3")
7354   (type "ext4"))
7355 @end example
7357 As usual, some of the fields are mandatory---those shown in the example
7358 above---while others can be omitted.  These are described below.
7360 @deftp {Data Type} file-system
7361 Objects of this type represent file systems to be mounted.  They
7362 contain the following members:
7364 @table @asis
7365 @item @code{type}
7366 This is a string specifying the type of the file system---e.g.,
7367 @code{"ext4"}.
7369 @item @code{mount-point}
7370 This designates the place where the file system is to be mounted.
7372 @item @code{device}
7373 This names the ``source'' of the file system.  By default it is the name
7374 of a node under @file{/dev}, but its meaning depends on the @code{title}
7375 field described below.
7377 @item @code{title} (default: @code{'device})
7378 This is a symbol that specifies how the @code{device} field is to be
7379 interpreted.
7381 When it is the symbol @code{device}, then the @code{device} field is
7382 interpreted as a file name; when it is @code{label}, then @code{device}
7383 is interpreted as a partition label name; when it is @code{uuid},
7384 @code{device} is interpreted as a partition unique identifier (UUID).
7386 UUIDs may be converted from their string representation (as shown by the
7387 @command{tune2fs -l} command) using the @code{uuid} form@footnote{The
7388 @code{uuid} form expects 16-byte UUIDs as defined in
7389 @uref{https://tools.ietf.org/html/rfc4122, RFC@tie{}4122}.  This is the
7390 form of UUID used by the ext2 family of file systems and others, but it
7391 is different from ``UUIDs'' found in FAT file systems, for instance.},
7392 like this:
7394 @example
7395 (file-system
7396   (mount-point "/home")
7397   (type "ext4")
7398   (title 'uuid)
7399   (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
7400 @end example
7402 The @code{label} and @code{uuid} options offer a way to refer to disk
7403 partitions without having to hard-code their actual device
7404 name@footnote{Note that, while it is tempting to use
7405 @file{/dev/disk/by-uuid} and similar device names to achieve the same
7406 result, this is not recommended: These special device nodes are created
7407 by the udev daemon and may be unavailable at the time the device is
7408 mounted.}.
7410 However, when the source of a file system is a mapped device (@pxref{Mapped
7411 Devices}), its @code{device} field @emph{must} refer to the mapped
7412 device name---e.g., @file{/dev/mapper/root-partition}---and consequently
7413 @code{title} must be set to @code{'device}.  This is required so that
7414 the system knows that mounting the file system depends on having the
7415 corresponding device mapping established.
7417 @item @code{flags} (default: @code{'()})
7418 This is a list of symbols denoting mount flags.  Recognized flags
7419 include @code{read-only}, @code{bind-mount}, @code{no-dev} (disallow
7420 access to special files), @code{no-suid} (ignore setuid and setgid
7421 bits), and @code{no-exec} (disallow program execution.)
7423 @item @code{options} (default: @code{#f})
7424 This is either @code{#f}, or a string denoting mount options.
7426 @item @code{mount?} (default: @code{#t})
7427 This value indicates whether to automatically mount the file system when
7428 the system is brought up.  When set to @code{#f}, the file system gets
7429 an entry in @file{/etc/fstab} (read by the @command{mount} command) but
7430 is not automatically mounted.
7432 @item @code{needed-for-boot?} (default: @code{#f})
7433 This Boolean value indicates whether the file system is needed when
7434 booting.  If that is true, then the file system is mounted when the
7435 initial RAM disk (initrd) is loaded.  This is always the case, for
7436 instance, for the root file system.
7438 @item @code{check?} (default: @code{#t})
7439 This Boolean indicates whether the file system needs to be checked for
7440 errors before being mounted.
7442 @item @code{create-mount-point?} (default: @code{#f})
7443 When true, the mount point is created if it does not exist yet.
7445 @item @code{dependencies} (default: @code{'()})
7446 This is a list of @code{<file-system>} or @code{<mapped-device>} objects
7447 representing file systems that must be mounted or mapped devices that
7448 must be opened before (and unmounted or closed after) this one.
7450 As an example, consider a hierarchy of mounts: @file{/sys/fs/cgroup} is
7451 a dependency of @file{/sys/fs/cgroup/cpu} and
7452 @file{/sys/fs/cgroup/memory}.
7454 Another example is a file system that depends on a mapped device, for
7455 example for an encrypted partition (@pxref{Mapped Devices}).
7456 @end table
7457 @end deftp
7459 The @code{(gnu system file-systems)} exports the following useful
7460 variables.
7462 @defvr {Scheme Variable} %base-file-systems
7463 These are essential file systems that are required on normal systems,
7464 such as @var{%pseudo-terminal-file-system} and @var{%immutable-store} (see
7465 below.)  Operating system declarations should always contain at least
7466 these.
7467 @end defvr
7469 @defvr {Scheme Variable} %pseudo-terminal-file-system
7470 This is the file system to be mounted as @file{/dev/pts}.  It supports
7471 @dfn{pseudo-terminals} created @i{via} @code{openpty} and similar
7472 functions (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference
7473 Manual}).  Pseudo-terminals are used by terminal emulators such as
7474 @command{xterm}.
7475 @end defvr
7477 @defvr {Scheme Variable} %shared-memory-file-system
7478 This file system is mounted as @file{/dev/shm} and is used to support
7479 memory sharing across processes (@pxref{Memory-mapped I/O,
7480 @code{shm_open},, libc, The GNU C Library Reference Manual}).
7481 @end defvr
7483 @defvr {Scheme Variable} %immutable-store
7484 This file system performs a read-only ``bind mount'' of
7485 @file{/gnu/store}, making it read-only for all the users including
7486 @code{root}.  This prevents against accidental modification by software
7487 running as @code{root} or by system administrators.
7489 The daemon itself is still able to write to the store: it remounts it
7490 read-write in its own ``name space.''
7491 @end defvr
7493 @defvr {Scheme Variable} %binary-format-file-system
7494 The @code{binfmt_misc} file system, which allows handling of arbitrary
7495 executable file types to be delegated to user space.  This requires the
7496 @code{binfmt.ko} kernel module to be loaded.
7497 @end defvr
7499 @defvr {Scheme Variable} %fuse-control-file-system
7500 The @code{fusectl} file system, which allows unprivileged users to mount
7501 and unmount user-space FUSE file systems.  This requires the
7502 @code{fuse.ko} kernel module to be loaded.
7503 @end defvr
7505 @node Mapped Devices
7506 @subsection Mapped Devices
7508 @cindex device mapping
7509 @cindex mapped devices
7510 The Linux kernel has a notion of @dfn{device mapping}: a block device,
7511 such as a hard disk partition, can be @dfn{mapped} into another device,
7512 usually in @code{/dev/mapper/},
7513 with additional processing over the data that flows through
7514 it@footnote{Note that the GNU@tie{}Hurd makes no difference between the
7515 concept of a ``mapped device'' and that of a file system: both boil down
7516 to @emph{translating} input/output operations made on a file to
7517 operations on its backing store.  Thus, the Hurd implements mapped
7518 devices, like file systems, using the generic @dfn{translator} mechanism
7519 (@pxref{Translators,,, hurd, The GNU Hurd Reference Manual}).}.  A
7520 typical example is encryption device mapping: all writes to the mapped
7521 device are encrypted, and all reads are deciphered, transparently.
7522 Guix extends this notion by considering any device or set of devices that
7523 are @dfn{transformed} in some way to create a new device; for instance,
7524 RAID devices are obtained by @dfn{assembling} several other devices, such
7525 as hard disks or partitions, into a new one that behaves as one partition.
7526 Other examples, not yet implemented, are LVM logical volumes.
7528 Mapped devices are declared using the @code{mapped-device} form,
7529 defined as follows; for examples, see below.
7531 @deftp {Data Type} mapped-device
7532 Objects of this type represent device mappings that will be made when
7533 the system boots up.
7535 @table @code
7536 @item source
7537 This is either a string specifying the name of the block device to be mapped,
7538 such as @code{"/dev/sda3"}, or a list of such strings when several devices
7539 need to be assembled for creating a new one.
7541 @item target
7542 This string specifies the name of the resulting mapped device.  For
7543 kernel mappers such as encrypted devices of type @code{luks-device-mapping},
7544 specifying @code{"my-partition"} leads to the creation of
7545 the @code{"/dev/mapper/my-partition"} device.
7546 For RAID devices of type @code{raid-device-mapping}, the full device name
7547 such as @code{"/dev/md0"} needs to be given.
7549 @item type
7550 This must be a @code{mapped-device-kind} object, which specifies how
7551 @var{source} is mapped to @var{target}.
7552 @end table
7553 @end deftp
7555 @defvr {Scheme Variable} luks-device-mapping
7556 This defines LUKS block device encryption using the @command{cryptsetup}
7557 command from the package with the same name.  It relies on the
7558 @code{dm-crypt} Linux kernel module.
7559 @end defvr
7561 @defvr {Scheme Variable} raid-device-mapping
7562 This defines a RAID device, which is assembled using the @code{mdadm}
7563 command from the package with the same name.  It requires a Linux kernel
7564 module for the appropriate RAID level to be loaded, such as @code{raid456}
7565 for RAID-4, RAID-5 or RAID-6, or @code{raid10} for RAID-10.
7566 @end defvr
7568 @cindex disk encryption
7569 @cindex LUKS
7570 The following example specifies a mapping from @file{/dev/sda3} to
7571 @file{/dev/mapper/home} using LUKS---the
7572 @url{http://code.google.com/p/cryptsetup,Linux Unified Key Setup}, a
7573 standard mechanism for disk encryption.
7574 The @file{/dev/mapper/home}
7575 device can then be used as the @code{device} of a @code{file-system}
7576 declaration (@pxref{File Systems}).
7578 @example
7579 (mapped-device
7580   (source "/dev/sda3")
7581   (target "home")
7582   (type luks-device-mapping))
7583 @end example
7585 Alternatively, to become independent of device numbering, one may obtain
7586 the LUKS UUID (@dfn{unique identifier}) of the source device by a
7587 command like:
7589 @example
7590 cryptsetup luksUUID /dev/sda3
7591 @end example
7593 and use it as follows:
7595 @example
7596 (mapped-device
7597   (source (uuid "cb67fc72-0d54-4c88-9d4b-b225f30b0f44"))
7598   (target "home")
7599   (type luks-device-mapping))
7600 @end example
7602 A RAID device formed of the partitions @file{/dev/sda1} and @file{/dev/sdb1}
7603 may be declared as follows:
7605 @example
7606 (mapped-device
7607   (source (list "/dev/sda1" "/dev/sdb1"))
7608   (target "/dev/md0")
7609   (type raid-device-mapping))
7610 @end example
7612 The @file{/dev/md0} device can then be used as the @code{device} of a
7613 @code{file-system} declaration (@pxref{File Systems}).
7614 Note that the RAID level need not be given; it is chosen during the
7615 initial creation and formatting of the RAID device and is determined
7616 automatically later.
7619 @node User Accounts
7620 @subsection User Accounts
7622 @cindex users
7623 @cindex accounts
7624 @cindex user accounts
7625 User accounts and groups are entirely managed through the
7626 @code{operating-system} declaration.  They are specified with the
7627 @code{user-account} and @code{user-group} forms:
7629 @example
7630 (user-account
7631   (name "alice")
7632   (group "users")
7633   (supplementary-groups '("wheel"   ;allow use of sudo, etc.
7634                           "audio"   ;sound card
7635                           "video"   ;video devices such as webcams
7636                           "cdrom")) ;the good ol' CD-ROM
7637   (comment "Bob's sister")
7638   (home-directory "/home/alice"))
7639 @end example
7641 When booting or upon completion of @command{guix system reconfigure},
7642 the system ensures that only the user accounts and groups specified in
7643 the @code{operating-system} declaration exist, and with the specified
7644 properties.  Thus, account or group creations or modifications made by
7645 directly invoking commands such as @command{useradd} are lost upon
7646 reconfiguration or reboot.  This ensures that the system remains exactly
7647 as declared.
7649 @deftp {Data Type} user-account
7650 Objects of this type represent user accounts.  The following members may
7651 be specified:
7653 @table @asis
7654 @item @code{name}
7655 The name of the user account.
7657 @item @code{group}
7658 @cindex groups
7659 This is the name (a string) or identifier (a number) of the user group
7660 this account belongs to.
7662 @item @code{supplementary-groups} (default: @code{'()})
7663 Optionally, this can be defined as a list of group names that this
7664 account belongs to.
7666 @item @code{uid} (default: @code{#f})
7667 This is the user ID for this account (a number), or @code{#f}.  In the
7668 latter case, a number is automatically chosen by the system when the
7669 account is created.
7671 @item @code{comment} (default: @code{""})
7672 A comment about the account, such as the account owner's full name.
7674 @item @code{home-directory}
7675 This is the name of the home directory for the account.
7677 @item @code{create-home-directory?} (default: @code{#t})
7678 Indicates whether the home directory of this account should be created
7679 if it does not exist yet.
7681 @item @code{shell} (default: Bash)
7682 This is a G-expression denoting the file name of a program to be used as
7683 the shell (@pxref{G-Expressions}).
7685 @item @code{system?} (default: @code{#f})
7686 This Boolean value indicates whether the account is a ``system''
7687 account.  System accounts are sometimes treated specially; for instance,
7688 graphical login managers do not list them.
7690 @anchor{user-account-password}
7691 @item @code{password} (default: @code{#f})
7692 You would normally leave this field to @code{#f}, initialize user
7693 passwords as @code{root} with the @command{passwd} command, and then let
7694 users change it with @command{passwd}.  Passwords set with
7695 @command{passwd} are of course preserved across reboot and
7696 reconfiguration.
7698 If you @emph{do} want to have a preset password for an account, then
7699 this field must contain the encrypted password, as a string.
7700 @xref{crypt,,, libc, The GNU C Library Reference Manual}, for more information
7701 on password encryption, and @ref{Encryption,,, guile, GNU Guile Reference
7702 Manual}, for information on Guile's @code{crypt} procedure.
7704 @end table
7705 @end deftp
7707 @cindex groups
7708 User group declarations are even simpler:
7710 @example
7711 (user-group (name "students"))
7712 @end example
7714 @deftp {Data Type} user-group
7715 This type is for, well, user groups.  There are just a few fields:
7717 @table @asis
7718 @item @code{name}
7719 The name of the group.
7721 @item @code{id} (default: @code{#f})
7722 The group identifier (a number).  If @code{#f}, a new number is
7723 automatically allocated when the group is created.
7725 @item @code{system?} (default: @code{#f})
7726 This Boolean value indicates whether the group is a ``system'' group.
7727 System groups have low numerical IDs.
7729 @item @code{password} (default: @code{#f})
7730 What, user groups can have a password?  Well, apparently yes.  Unless
7731 @code{#f}, this field specifies the password of the group.
7733 @end table
7734 @end deftp
7736 For convenience, a variable lists all the basic user groups one may
7737 expect:
7739 @defvr {Scheme Variable} %base-groups
7740 This is the list of basic user groups that users and/or packages expect
7741 to be present on the system.  This includes groups such as ``root'',
7742 ``wheel'', and ``users'', as well as groups used to control access to
7743 specific devices such as ``audio'', ``disk'', and ``cdrom''.
7744 @end defvr
7746 @defvr {Scheme Variable} %base-user-accounts
7747 This is the list of basic system accounts that programs may expect to
7748 find on a GNU/Linux system, such as the ``nobody'' account.
7750 Note that the ``root'' account is not included here.  It is a
7751 special-case and is automatically added whether or not it is specified.
7752 @end defvr
7754 @node Locales
7755 @subsection Locales
7757 @cindex locale
7758 A @dfn{locale} defines cultural conventions for a particular language
7759 and region of the world (@pxref{Locales,,, libc, The GNU C Library
7760 Reference Manual}).  Each locale has a name that typically has the form
7761 @code{@var{language}_@var{territory}.@var{codeset}}---e.g.,
7762 @code{fr_LU.utf8} designates the locale for the French language, with
7763 cultural conventions from Luxembourg, and using the UTF-8 encoding.
7765 @cindex locale definition
7766 Usually, you will want to specify the default locale for the machine
7767 using the @code{locale} field of the @code{operating-system} declaration
7768 (@pxref{operating-system Reference, @code{locale}}).
7770 The selected locale is automatically added to the @dfn{locale
7771 definitions} known to the system if needed, with its codeset inferred
7772 from its name---e.g., @code{bo_CN.utf8} will be assumed to use the
7773 @code{UTF-8} codeset.  Additional locale definitions can be specified in
7774 the @code{locale-definitions} slot of @code{operating-system}---this is
7775 useful, for instance, if the codeset could not be inferred from the
7776 locale name.  The default set of locale definitions includes some widely
7777 used locales, but not all the available locales, in order to save space.
7779 For instance, to add the North Frisian locale for Germany, the value of
7780 that field may be:
7782 @example
7783 (cons (locale-definition
7784         (name "fy_DE.utf8") (source "fy_DE"))
7785       %default-locale-definitions)
7786 @end example
7788 Likewise, to save space, one might want @code{locale-definitions} to
7789 list only the locales that are actually used, as in:
7791 @example
7792 (list (locale-definition
7793         (name "ja_JP.eucjp") (source "ja_JP")
7794         (charset "EUC-JP")))
7795 @end example
7797 @vindex LOCPATH
7798 The compiled locale definitions are available at
7799 @file{/run/current-system/locale/X.Y}, where @code{X.Y} is the libc
7800 version, which is the default location where the GNU@tie{}libc provided
7801 by Guix looks for locale data.  This can be overridden using the
7802 @code{LOCPATH} environment variable (@pxref{locales-and-locpath,
7803 @code{LOCPATH} and locale packages}).
7805 The @code{locale-definition} form is provided by the @code{(gnu system
7806 locale)} module.  Details are given below.
7808 @deftp {Data Type} locale-definition
7809 This is the data type of a locale definition.
7811 @table @asis
7813 @item @code{name}
7814 The name of the locale.  @xref{Locale Names,,, libc, The GNU C Library
7815 Reference Manual}, for more information on locale names.
7817 @item @code{source}
7818 The name of the source for that locale.  This is typically the
7819 @code{@var{language}_@var{territory}} part of the locale name.
7821 @item @code{charset} (default: @code{"UTF-8"})
7822 The ``character set'' or ``code set'' for that locale,
7823 @uref{http://www.iana.org/assignments/character-sets, as defined by
7824 IANA}.
7826 @end table
7827 @end deftp
7829 @defvr {Scheme Variable} %default-locale-definitions
7830 A list of commonly used UTF-8 locales, used as the default
7831 value of the @code{locale-definitions} field of @code{operating-system}
7832 declarations.
7834 @cindex locale name
7835 @cindex normalized codeset in locale names
7836 These locale definitions use the @dfn{normalized codeset} for the part
7837 that follows the dot in the name (@pxref{Using gettextized software,
7838 normalized codeset,, libc, The GNU C Library Reference Manual}).  So for
7839 instance it has @code{uk_UA.utf8} but @emph{not}, say,
7840 @code{uk_UA.UTF-8}.
7841 @end defvr
7843 @subsubsection Locale Data Compatibility Considerations
7845 @cindex incompatibility, of locale data
7846 @code{operating-system} declarations provide a @code{locale-libcs} field
7847 to specify the GNU@tie{}libc packages that are used to compile locale
7848 declarations (@pxref{operating-system Reference}).  ``Why would I
7849 care?'', you may ask.  Well, it turns out that the binary format of
7850 locale data is occasionally incompatible from one libc version to
7851 another.
7853 @c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
7854 @c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
7855 For instance, a program linked against libc version 2.21 is unable to
7856 read locale data produced with libc 2.22; worse, that program
7857 @emph{aborts} instead of simply ignoring the incompatible locale
7858 data@footnote{Versions 2.23 and later of GNU@tie{}libc will simply skip
7859 the incompatible locale data, which is already an improvement.}.
7860 Similarly, a program linked against libc 2.22 can read most, but not
7861 all, of the locale data from libc 2.21 (specifically, @code{LC_COLLATE}
7862 data is incompatible); thus calls to @code{setlocale} may fail, but
7863 programs will not abort.
7865 The ``problem'' in GuixSD is that users have a lot of freedom: They can
7866 choose whether and when to upgrade software in their profiles, and might
7867 be using a libc version different from the one the system administrator
7868 used to build the system-wide locale data.
7870 Fortunately, unprivileged users can also install their own locale data
7871 and define @var{GUIX_LOCPATH} accordingly (@pxref{locales-and-locpath,
7872 @code{GUIX_LOCPATH} and locale packages}).
7874 Still, it is best if the system-wide locale data at
7875 @file{/run/current-system/locale} is built for all the libc versions
7876 actually in use on the system, so that all the programs can access
7877 it---this is especially crucial on a multi-user system.  To do that, the
7878 administrator can specify several libc packages in the
7879 @code{locale-libcs} field of @code{operating-system}:
7881 @example
7882 (use-package-modules base)
7884 (operating-system
7885   ;; @dots{}
7886   (locale-libcs (list glibc-2.21 (canonical-package glibc))))
7887 @end example
7889 This example would lead to a system containing locale definitions for
7890 both libc 2.21 and the current version of libc in
7891 @file{/run/current-system/locale}.
7894 @node Services
7895 @subsection Services
7897 @cindex system services
7898 An important part of preparing an @code{operating-system} declaration is
7899 listing @dfn{system services} and their configuration (@pxref{Using the
7900 Configuration System}).  System services are typically daemons launched
7901 when the system boots, or other actions needed at that time---e.g.,
7902 configuring network access.
7904 GuixSD has a broad definition of ``service'' (@pxref{Service
7905 Composition}), but many services are managed by the GNU@tie{}Shepherd
7906 (@pxref{Shepherd Services}).  On a running system, the @command{herd}
7907 command allows you to list the available services, show their status,
7908 start and stop them, or do other specific operations (@pxref{Jump
7909 Start,,, shepherd, The GNU Shepherd Manual}).  For example:
7911 @example
7912 # herd status
7913 @end example
7915 The above command, run as @code{root}, lists the currently defined
7916 services.  The @command{herd doc} command shows a synopsis of the given
7917 service:
7919 @example
7920 # herd doc nscd
7921 Run libc's name service cache daemon (nscd).
7922 @end example
7924 The @command{start}, @command{stop}, and @command{restart} sub-commands
7925 have the effect you would expect.  For instance, the commands below stop
7926 the nscd service and restart the Xorg display server:
7928 @example
7929 # herd stop nscd
7930 Service nscd has been stopped.
7931 # herd restart xorg-server
7932 Service xorg-server has been stopped.
7933 Service xorg-server has been started.
7934 @end example
7936 The following sections document the available services, starting with
7937 the core services, that may be used in an @code{operating-system}
7938 declaration.
7940 @menu
7941 * Base Services::               Essential system services.
7942 * Scheduled Job Execution::     The mcron service.
7943 * Log Rotation::                The rottlog service.
7944 * Networking Services::         Network setup, SSH daemon, etc.
7945 * X Window::                    Graphical display.
7946 * Printing Services::           Local and remote printer support.
7947 * Desktop Services::            D-Bus and desktop services.
7948 * Database Services::           SQL databases.
7949 * Mail Services::               IMAP, POP3, SMTP, and all that.
7950 * Kerberos Services::           Kerberos services.
7951 * Web Services::                Web servers.
7952 * Network File System::         NFS related services.
7953 * Continuous Integration::      The Cuirass service.
7954 * Miscellaneous Services::      Other services.
7955 @end menu
7957 @node Base Services
7958 @subsubsection Base Services
7960 The @code{(gnu services base)} module provides definitions for the basic
7961 services that one expects from the system.  The services exported by
7962 this module are listed below.
7964 @defvr {Scheme Variable} %base-services
7965 This variable contains a list of basic services (@pxref{Service Types
7966 and Services}, for more information on service objects) one would
7967 expect from the system: a login service (mingetty) on each tty, syslogd,
7968 the libc name service cache daemon (nscd), the udev device manager, and
7969 more.
7971 This is the default value of the @code{services} field of
7972 @code{operating-system} declarations.  Usually, when customizing a
7973 system, you will want to append services to @var{%base-services}, like
7974 this:
7976 @example
7977 (cons* (avahi-service) (lsh-service) %base-services)
7978 @end example
7979 @end defvr
7981 @deffn {Scheme Procedure} host-name-service @var{name}
7982 Return a service that sets the host name to @var{name}.
7983 @end deffn
7985 @deffn {Scheme Procedure} login-service @var{config}
7986 Return a service to run login according to @var{config}, a
7987 @code{<login-configuration>} object, which specifies the message of the day,
7988 among other things.
7989 @end deffn
7991 @deftp {Data Type} login-configuration
7992 This is the data type representing the configuration of login.
7994 @table @asis
7996 @item @code{motd}
7997 @cindex message of the day
7998 A file-like object containing the ``message of the day''.
8000 @item @code{allow-empty-passwords?} (default: @code{#t})
8001 Allow empty passwords by default so that first-time users can log in when
8002 the 'root' account has just been created.
8004 @end table
8005 @end deftp
8007 @deffn {Scheme Procedure} mingetty-service @var{config}
8008 Return a service to run mingetty according to @var{config}, a
8009 @code{<mingetty-configuration>} object, which specifies the tty to run, among
8010 other things.
8011 @end deffn
8013 @deftp {Data Type} mingetty-configuration
8014 This is the data type representing the configuration of Mingetty, which
8015 implements console log-in.
8017 @table @asis
8019 @item @code{tty}
8020 The name of the console this Mingetty runs on---e.g., @code{"tty1"}.
8022 @item @code{auto-login} (default: @code{#f})
8023 When true, this field must be a string denoting the user name under
8024 which the system automatically logs in.  When it is @code{#f}, a
8025 user name and password must be entered to log in.
8027 @item @code{login-program} (default: @code{#f})
8028 This must be either @code{#f}, in which case the default log-in program
8029 is used (@command{login} from the Shadow tool suite), or a gexp denoting
8030 the name of the log-in program.
8032 @item @code{login-pause?} (default: @code{#f})
8033 When set to @code{#t} in conjunction with @var{auto-login}, the user
8034 will have to press a key before the log-in shell is launched.
8036 @item @code{mingetty} (default: @var{mingetty})
8037 The Mingetty package to use.
8039 @end table
8040 @end deftp
8042 @deffn {Scheme Procedure} kmscon-service-type @var{config}
8043 Return a service to run @uref{https://www.freedesktop.org/wiki/Software/kmscon,kmscon}
8044 according to @var{config}, a @code{<kmscon-configuration>} object, which
8045 specifies the tty to run, among other things.
8046 @end deffn
8048 @deftp {Data Type} kmscon-configuration
8049 This is the data type representing the configuration of Kmscon, which
8050 implements console log-in.
8052 @table @asis
8054 @item @code{virtual-terminal}
8055 The name of the console this Kmscon runs on---e.g., @code{"tty1"}.
8057 @item @code{login-program} (default: @code{#~(string-append #$shadow "/bin/login")})
8058 A gexp denoting the name of the log-in program. The default log-in program is
8059 @command{login} from the Shadow tool suite.
8061 @item @code{login-arguments} (default: @code{'("-p")})
8062 A list of arguments to pass to @command{login}.
8064 @item @code{hardware-acceleration?} (default: #f)
8065 Whether to use hardware acceleration.
8067 @item @code{kmscon} (default: @var{kmscon})
8068 The Kmscon package to use.
8070 @end table
8071 @end deftp
8073 @cindex name service cache daemon
8074 @cindex nscd
8075 @deffn {Scheme Procedure} nscd-service [@var{config}] [#:glibc glibc] @
8076                 [#:name-services '()]
8077 Return a service that runs the libc name service cache daemon (nscd) with the
8078 given @var{config}---an @code{<nscd-configuration>} object.  @xref{Name
8079 Service Switch}, for an example.
8080 @end deffn
8082 @defvr {Scheme Variable} %nscd-default-configuration
8083 This is the default @code{<nscd-configuration>} value (see below) used
8084 by @code{nscd-service}.  It uses the caches defined by
8085 @var{%nscd-default-caches}; see below.
8086 @end defvr
8088 @deftp {Data Type} nscd-configuration
8089 This is the data type representing the name service cache daemon (nscd)
8090 configuration.
8092 @table @asis
8094 @item @code{name-services} (default: @code{'()})
8095 List of packages denoting @dfn{name services} that must be visible to
8096 the nscd---e.g., @code{(list @var{nss-mdns})}.
8098 @item @code{glibc} (default: @var{glibc})
8099 Package object denoting the GNU C Library providing the @command{nscd}
8100 command.
8102 @item @code{log-file} (default: @code{"/var/log/nscd.log"})
8103 Name of the nscd log file.  This is where debugging output goes when
8104 @code{debug-level} is strictly positive.
8106 @item @code{debug-level} (default: @code{0})
8107 Integer denoting the debugging levels.  Higher numbers mean that more
8108 debugging output is logged.
8110 @item @code{caches} (default: @var{%nscd-default-caches})
8111 List of @code{<nscd-cache>} objects denoting things to be cached; see
8112 below.
8114 @end table
8115 @end deftp
8117 @deftp {Data Type} nscd-cache
8118 Data type representing a cache database of nscd and its parameters.
8120 @table @asis
8122 @item @code{database}
8123 This is a symbol representing the name of the database to be cached.
8124 Valid values are @code{passwd}, @code{group}, @code{hosts}, and
8125 @code{services}, which designate the corresponding NSS database
8126 (@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
8128 @item @code{positive-time-to-live}
8129 @itemx @code{negative-time-to-live} (default: @code{20})
8130 A number representing the number of seconds during which a positive or
8131 negative lookup result remains in cache.
8133 @item @code{check-files?} (default: @code{#t})
8134 Whether to check for updates of the files corresponding to
8135 @var{database}.
8137 For instance, when @var{database} is @code{hosts}, setting this flag
8138 instructs nscd to check for updates in @file{/etc/hosts} and to take
8139 them into account.
8141 @item @code{persistent?} (default: @code{#t})
8142 Whether the cache should be stored persistently on disk.
8144 @item @code{shared?} (default: @code{#t})
8145 Whether the cache should be shared among users.
8147 @item @code{max-database-size} (default: 32@tie{}MiB)
8148 Maximum size in bytes of the database cache.
8150 @c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
8151 @c settings, so leave them out.
8153 @end table
8154 @end deftp
8156 @defvr {Scheme Variable} %nscd-default-caches
8157 List of @code{<nscd-cache>} objects used by default by
8158 @code{nscd-configuration} (see above).
8160 It enables persistent and aggressive caching of service and host name
8161 lookups.  The latter provides better host name lookup performance,
8162 resilience in the face of unreliable name servers, and also better
8163 privacy---often the result of host name lookups is in local cache, so
8164 external name servers do not even need to be queried.
8165 @end defvr
8167 @anchor{syslog-configuration-type}
8168 @cindex syslog
8169 @cindex logging
8170 @deftp {Data Type} syslog-configuration
8171 This data type represents the configuration of the syslog daemon.
8173 @table @asis
8174 @item @code{syslogd} (default: @code{#~(string-append #$inetutils "/libexec/syslogd")})
8175 The syslog daemon to use.
8177 @item @code{config-file} (default: @code{%default-syslog.conf})
8178 The syslog configuration file to use.
8180 @end table
8181 @end deftp
8183 @anchor{syslog-service}
8184 @cindex syslog
8185 @deffn {Scheme Procedure} syslog-service @var{config}
8186 Return a service that runs a syslog daemon according to @var{config}.
8188 @xref{syslogd invocation,,, inetutils, GNU Inetutils}, for more
8189 information on the configuration file syntax.
8190 @end deffn
8192 @anchor{guix-configuration-type}
8193 @deftp {Data Type} guix-configuration
8194 This data type represents the configuration of the Guix build daemon.
8195 @xref{Invoking guix-daemon}, for more information.
8197 @table @asis
8198 @item @code{guix} (default: @var{guix})
8199 The Guix package to use.
8201 @item @code{build-group} (default: @code{"guixbuild"})
8202 Name of the group for build user accounts.
8204 @item @code{build-accounts} (default: @code{10})
8205 Number of build user accounts to create.
8207 @item @code{authorize-key?} (default: @code{#t})
8208 @cindex substitutes, authorization thereof
8209 Whether to authorize the substitute keys listed in
8210 @code{authorized-keys}---by default that of @code{hydra.gnu.org}
8211 (@pxref{Substitutes}).
8213 @vindex %default-authorized-guix-keys
8214 @item @code{authorized-keys} (default: @var{%default-authorized-guix-keys})
8215 The list of authorized key files for archive imports, as a list of
8216 string-valued gexps (@pxref{Invoking guix archive}).  By default, it
8217 contains that of @code{hydra.gnu.org} (@pxref{Substitutes}).
8219 @item @code{use-substitutes?} (default: @code{#t})
8220 Whether to use substitutes.
8222 @item @code{substitute-urls} (default: @var{%default-substitute-urls})
8223 The list of URLs where to look for substitutes by default.
8225 @item @code{extra-options} (default: @code{'()})
8226 List of extra command-line options for @command{guix-daemon}.
8228 @item @code{lsof} (default: @var{lsof})
8229 @itemx @code{lsh} (default: @var{lsh})
8230 The lsof and lsh packages to use.
8232 @end table
8233 @end deftp
8235 @deffn {Scheme Procedure} guix-service @var{config}
8236 Return a service that runs the Guix build daemon according to
8237 @var{config}.
8238 @end deffn
8240 @deffn {Scheme Procedure} udev-service [#:udev udev]
8241 Run @var{udev}, which populates the @file{/dev} directory dynamically.
8242 @end deffn
8244 @deffn {Scheme Procedure} urandom-seed-service @var{#f}
8245 Save some entropy in @var{%random-seed-file} to seed @file{/dev/urandom}
8246 when rebooting.
8247 @end deffn
8249 @defvr {Scheme Variable} %random-seed-file
8250 This is the name of the file where some random bytes are saved by
8251 @var{urandom-seed-service} to seed @file{/dev/urandom} when rebooting.
8252 It defaults to @file{/var/lib/random-seed}.
8253 @end defvr
8255 @cindex keymap
8256 @cindex keyboard
8257 @deffn {Scheme Procedure} console-keymap-service @var{files} ...
8258 @cindex keyboard layout
8259 Return a service to load console keymaps from @var{files} using
8260 @command{loadkeys} command.  Most likely, you want to load some default
8261 keymap, which can be done like this:
8263 @example
8264 (console-keymap-service "dvorak")
8265 @end example
8267 Or, for example, for a Swedish keyboard, you may need to combine
8268 the following keymaps:
8269 @example
8270 (console-keymap-service "se-lat6" "se-fi-lat6")
8271 @end example
8273 Also you can specify a full file name (or file names) of your keymap(s).
8274 See @code{man loadkeys} for details.
8276 @end deffn
8278 @cindex mouse
8279 @cindex gpm
8280 @deffn {Scheme Procedure} gpm-service [#:gpm @var{gpm}] @
8281           [#:options]
8282 Run @var{gpm}, the general-purpose mouse daemon, with the given
8283 command-line @var{options}.  GPM allows users to use the mouse in the console,
8284 notably to select, copy, and paste text.  The default value of @var{options}
8285 uses the @code{ps2} protocol, which works for both USB and PS/2 mice.
8287 This service is not part of @var{%base-services}.
8288 @end deffn
8290 @anchor{guix-publish-service}
8291 @deffn {Scheme Procedure} guix-publish-service [#:guix @var{guix}] @
8292            [#:port 80] [#:host "localhost"]
8293 Return a service that runs @command{guix publish} listening on @var{host}
8294 and @var{port} (@pxref{Invoking guix publish}).
8296 This assumes that @file{/etc/guix} already contains a signing key pair as
8297 created by @command{guix archive --generate-key} (@pxref{Invoking guix
8298 archive}).  If that is not the case, the service will fail to start.
8299 @end deffn
8301 @anchor{rngd-service}
8302 @deffn {Scheme Procedure} rngd-service [#:rng-tools @var{rng-tools}] @
8303             [#:device "/dev/hwrng"]
8304 Return a service that runs the @command{rngd} program from @var{rng-tools}
8305 to add @var{device} to the kernel's entropy pool.  The service will fail if
8306 @var{device} does not exist.
8307 @end deffn
8309 @anchor{pam-limits-service}
8310 @cindex session limits
8311 @cindex ulimit
8312 @cindex priority
8313 @deffn {Scheme Procedure} pam-limits-service [#:limits @var{limits}]
8315 Return a service that installs a configuration file for the
8316 @uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html,
8317 @code{pam_limits} module}.  The procedure optionally takes a list of
8318 @code{pam-limits-entry} values, which can be used to specify
8319 @code{ulimit} limits and nice priority limits to user sessions.
8321 The following limits definition sets two hard and soft limits for all
8322 login sessions of users in the @code{realtime} group:
8324 @example
8325 (pam-limits-service
8326  (list
8327   (pam-limits-entry "@@realtime" 'both 'rtprio 99)
8328   (pam-limits-entry "@@realtime" 'both 'memlock 'unlimited)))
8329 @end example
8331 The first entry increases the maximum realtime priority for
8332 non-privileged processes; the second entry lifts any restriction of the
8333 maximum address space that can be locked in memory.  These settings are
8334 commonly used for real-time audio systems.
8335 @end deffn
8337 @node Scheduled Job Execution
8338 @subsubsection Scheduled Job Execution
8340 @cindex cron
8341 @cindex mcron
8342 @cindex scheduling jobs
8343 The @code{(gnu services mcron)} module provides an interface to
8344 GNU@tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
8345 mcron, GNU@tie{}mcron}).  GNU@tie{}mcron is similar to the traditional
8346 Unix @command{cron} daemon; the main difference is that it is
8347 implemented in Guile Scheme, which provides a lot of flexibility when
8348 specifying the scheduling of jobs and their actions.
8350 The example below defines an operating system that runs the
8351 @command{updatedb} (@pxref{Invoking updatedb,,, find, Finding Files})
8352 and the @command{guix gc} commands (@pxref{Invoking guix gc}) daily, as
8353 well as the @command{mkid} command on behalf of an unprivileged user
8354 (@pxref{mkid invocation,,, idutils, ID Database Utilities}).  It uses
8355 gexps to introduce job definitions that are passed to mcron
8356 (@pxref{G-Expressions}).
8358 @lisp
8359 (use-modules (guix) (gnu) (gnu services mcron))
8360 (use-package-modules base idutils)
8362 (define updatedb-job
8363   ;; Run 'updatedb' at 3AM every day.  Here we write the
8364   ;; job's action as a Scheme procedure.
8365   #~(job '(next-hour '(3))
8366          (lambda ()
8367            (execl (string-append #$findutils "/bin/updatedb")
8368                   "updatedb"
8369                   "--prunepaths=/tmp /var/tmp /gnu/store"))))
8371 (define garbage-collector-job
8372   ;; Collect garbage 5 minutes after midnight every day.
8373   ;; The job's action is a shell command.
8374   #~(job "5 0 * * *"            ;Vixie cron syntax
8375          "guix gc -F 1G"))
8377 (define idutils-job
8378   ;; Update the index database as user "charlie" at 12:15PM
8379   ;; and 19:15PM.  This runs from the user's home directory.
8380   #~(job '(next-minute-from (next-hour '(12 19)) '(15))
8381          (string-append #$idutils "/bin/mkid src")
8382          #:user "charlie"))
8384 (operating-system
8385   ;; @dots{}
8386   (services (cons (mcron-service (list garbage-collector-job
8387                                        updatedb-job
8388                                        idutils-job))
8389                   %base-services)))
8390 @end lisp
8392 @xref{Guile Syntax, mcron job specifications,, mcron, GNU@tie{}mcron},
8393 for more information on mcron job specifications.  Below is the
8394 reference of the mcron service.
8396 @deffn {Scheme Procedure} mcron-service @var{jobs} [#:mcron @var{mcron2}]
8397 Return an mcron service running @var{mcron} that schedules @var{jobs}, a
8398 list of gexps denoting mcron job specifications.
8400 This is a shorthand for:
8401 @example
8402 (service mcron-service-type
8403          (mcron-configuration (mcron mcron) (jobs jobs)))
8404 @end example
8405 @end deffn
8407 @defvr {Scheme Variable} mcron-service-type
8408 This is the type of the @code{mcron} service, whose value is an
8409 @code{mcron-configuration} object.
8411 This service type can be the target of a service extension that provides
8412 it additional job specifications (@pxref{Service Composition}).  In
8413 other words, it is possible to define services that provide additional
8414 mcron jobs to run.
8415 @end defvr
8417 @deftp {Data Type} mcron-configuration
8418 Data type representing the configuration of mcron.
8420 @table @asis
8421 @item @code{mcron} (default: @var{mcron2})
8422 The mcron package to use.
8424 @item @code{jobs}
8425 This is a list of gexps (@pxref{G-Expressions}), where each gexp
8426 corresponds to an mcron job specification (@pxref{Syntax, mcron job
8427 specifications,, mcron, GNU@tie{}mcron}).
8428 @end table
8429 @end deftp
8432 @node Log Rotation
8433 @subsubsection Log Rotation
8435 @cindex rottlog
8436 @cindex log rotation
8437 @cindex logging
8438 Log files such as those found in @file{/var/log} tend to grow endlessly,
8439 so it's a good idea to @dfn{rotate} them once in a while---i.e., archive
8440 their contents in separate files, possibly compressed.  The @code{(gnu
8441 services admin)} module provides an interface to GNU@tie{}Rot[t]log, a
8442 log rotation tool (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}).
8444 The example below defines an operating system that provides log rotation
8445 with the default settings.
8447 @lisp
8448 (use-modules (guix) (gnu))
8449 (use-service-modules admin mcron)
8450 (use-package-modules base idutils)
8452 (operating-system
8453   ;; @dots{}
8454   (services (cons* (mcron-service)
8455                    (service rottlog-service-type (rottlog-configuration)) 
8456                    %base-services)))
8457 @end lisp
8459 @defvr {Scheme Variable} rottlog-service-type
8460 This is the type of the Rottlog service, whose value is a
8461 @code{rottlog-configuration} object.
8463 This service type can define mcron jobs (@pxref{Scheduled Job
8464 Execution}) to run the rottlog service.
8465 @end defvr
8467 @deftp {Data Type} rottlog-configuration
8468 Data type representing the configuration of rottlog.
8470 @table @asis
8471 @item @code{rottlog} (default: @code{rottlog})
8472 The Rottlog package to use.
8474 @item @code{rc-file} (default: @code{(file-append rottlog "/etc/rc")})
8475 The Rottlog configuration file to use (@pxref{Mandatory RC Variables,,,
8476 rottlog, GNU Rot[t]log Manual}).
8478 @item @code{periodic-rotations} (default: @code{`(("weekly" %default-rotatations))})
8479 A list of Rottlog period-name/period-config tuples.
8481 For example, taking an example from the Rottlog manual (@pxref{Period
8482 Related File Examples,,, rottlog, GNU Rot[t]log Manual}), a valid tuple
8483 might be:
8485 @example
8486 ("daily" ,(plain-file "daily"
8487                       "\
8488      /var/log/apache/* @{
8489         storedir apache-archives
8490         rotate 6
8491         notifempty
8492         nocompress
8493      @}"))
8494 @end example
8496 @item @code{jobs}
8497 This is a list of gexps where each gexp corresponds to an mcron job
8498 specification (@pxref{Scheduled Job Execution}).
8499 @end table
8500 @end deftp
8502 @defvr {Scheme Variable} %default-rotations
8503 Specifies weekly rotation of @var{%rotated-files} and
8504 @code{"/var/log/shepherd.log"}.
8505 @end defvr
8507 @defvr {Scheme Variable} %rotated-files
8508 The list of syslog-controlled files to be rotated.  By default it is:
8509 @code{'("/var/log/messages" "/var/log/secure")}.
8510 @end defvr
8512 @node Networking Services
8513 @subsubsection Networking Services
8515 The @code{(gnu services networking)} module provides services to configure
8516 the network interface.
8518 @cindex DHCP, networking service
8519 @deffn {Scheme Procedure} dhcp-client-service [#:dhcp @var{isc-dhcp}]
8520 Return a service that runs @var{dhcp}, a Dynamic Host Configuration
8521 Protocol (DHCP) client, on all the non-loopback network interfaces.
8522 @end deffn
8524 @deffn {Scheme Procedure} static-networking-service @var{interface} @var{ip} @
8525        [#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}]
8526 Return a service that starts @var{interface} with address @var{ip}.  If
8527 @var{netmask} is true, use it as the network mask.  If @var{gateway} is true,
8528 it must be a string specifying the default network gateway.
8529 @end deffn
8531 @cindex wicd
8532 @cindex wireless
8533 @cindex WiFi
8534 @cindex network management
8535 @deffn {Scheme Procedure} wicd-service [#:wicd @var{wicd}]
8536 Return a service that runs @url{https://launchpad.net/wicd,Wicd}, a network
8537 management daemon that aims to simplify wired and wireless networking.
8539 This service adds the @var{wicd} package to the global profile, providing
8540 several commands to interact with the daemon and configure networking:
8541 @command{wicd-client}, a graphical user interface, and the @command{wicd-cli}
8542 and @command{wicd-curses} user interfaces.
8543 @end deffn
8545 @cindex NetworkManager
8546 @deffn {Scheme Procedure} network-manager-service @
8547        [#:network-manager @var{network-manager}]
8548 Return a service that runs NetworkManager, a network connection manager
8549 attempting to keep network connectivity active when available.
8550 @end deffn
8552 @cindex Connman
8553 @deffn {Scheme Procedure} connman-service @
8554        [#:connman @var{connman}]
8555 Return a service that runs @url{https://01.org/connman,Connman}, a network
8556 connection manager.
8558 This service adds the @var{connman} package to the global profile, providing
8559 several the @command{connmanctl} command to interact with the daemon and
8560 configure networking."
8561 @end deffn
8563 @cindex WPA Supplicant
8564 @defvr {Scheme Variable} wpa-supplicant-service-type
8565 This is the service type to run @url{https://w1.fi/wpa_supplicant/,WPA
8566 supplicant}, an authentication daemon required to authenticate against
8567 encrypted WiFi or ethernet networks.  It is configured to listen for
8568 requests on D-Bus.
8570 The value of this service is the @code{wpa-supplicant} package to use.
8571 Thus, it can be instantiated like this:
8573 @lisp
8574 (use-modules (gnu services networking)
8575              (gnu packages admin))
8577 (service wpa-supplicant-type wpa-supplicant)
8578 @end lisp
8579 @end defvr
8581 @cindex NTP
8582 @cindex real time clock
8583 @deffn {Scheme Procedure} ntp-service [#:ntp @var{ntp}] @
8584   [#:servers @var{%ntp-servers}] @
8585   [#:allow-large-adjustment? #f]
8586 Return a service that runs the daemon from @var{ntp}, the
8587 @uref{http://www.ntp.org, Network Time Protocol package}.  The daemon will
8588 keep the system clock synchronized with that of @var{servers}.
8589 @var{allow-large-adjustment?} determines whether @command{ntpd} is allowed to
8590 make an initial adjustment of more than 1,000 seconds.
8591 @end deffn
8593 @defvr {Scheme Variable} %ntp-servers
8594 List of host names used as the default NTP servers.
8595 @end defvr
8597 @cindex Tor
8598 @deffn {Scheme Procedure} tor-service [@var{config-file}] [#:tor @var{tor}]
8599 Return a service to run the @uref{https://torproject.org, Tor} anonymous
8600 networking daemon.
8602 The daemon runs as the @code{tor} unprivileged user.  It is passed
8603 @var{config-file}, a file-like object, with an additional @code{User tor} line
8604 and lines for hidden services added via @code{tor-hidden-service}.  Run
8605 @command{man tor} for information about the configuration file.
8606 @end deffn
8608 @cindex hidden service
8609 @deffn {Scheme Procedure} tor-hidden-service @var{name} @var{mapping}
8610 Define a new Tor @dfn{hidden service} called @var{name} and implementing
8611 @var{mapping}.  @var{mapping} is a list of port/host tuples, such as:
8613 @example
8614  '((22 "127.0.0.1:22")
8615    (80 "127.0.0.1:8080"))
8616 @end example
8618 In this example, port 22 of the hidden service is mapped to local port 22, and
8619 port 80 is mapped to local port 8080.
8621 This creates a @file{/var/lib/tor/hidden-services/@var{name}} directory, where
8622 the @file{hostname} file contains the @code{.onion} host name for the hidden
8623 service.
8625 See @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, the Tor
8626 project's documentation} for more information.
8627 @end deffn
8629 @deffn {Scheme Procedure} bitlbee-service [#:bitlbee bitlbee] @
8630          [#:interface "127.0.0.1"] [#:port 6667] @
8631          [#:extra-settings ""]
8632 Return a service that runs @url{http://bitlbee.org,BitlBee}, a daemon that
8633 acts as a gateway between IRC and chat networks.
8635 The daemon will listen to the interface corresponding to the IP address
8636 specified in @var{interface}, on @var{port}.  @code{127.0.0.1} means that only
8637 local clients can connect, whereas @code{0.0.0.0} means that connections can
8638 come from any networking interface.
8640 In addition, @var{extra-settings} specifies a string to append to the
8641 configuration file.
8642 @end deffn
8644 Furthermore, @code{(gnu services ssh)} provides the following services.
8645 @cindex SSH
8646 @cindex SSH server
8648 @deffn {Scheme Procedure} lsh-service [#:host-key "/etc/lsh/host-key"] @
8649        [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
8650        [#:allow-empty-passwords? #f] [#:root-login? #f] @
8651        [#:syslog-output? #t] [#:x11-forwarding? #t] @
8652        [#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
8653        [#:public-key-authentication? #t] [#:initialize? #t]
8654 Run the @command{lshd} program from @var{lsh} to listen on port @var{port-number}.
8655 @var{host-key} must designate a file containing the host key, and readable
8656 only by root.
8658 When @var{daemonic?} is true, @command{lshd} will detach from the
8659 controlling terminal and log its output to syslogd, unless one sets
8660 @var{syslog-output?} to false.  Obviously, it also makes lsh-service
8661 depend on existence of syslogd service.  When @var{pid-file?} is true,
8662 @command{lshd} writes its PID to the file called @var{pid-file}.
8664 When @var{initialize?} is true, automatically create the seed and host key
8665 upon service activation if they do not exist yet.  This may take long and
8666 require interaction.
8668 When @var{initialize?} is false, it is up to the user to initialize the
8669 randomness generator (@pxref{lsh-make-seed,,, lsh, LSH Manual}), and to create
8670 a key pair with the private key stored in file @var{host-key} (@pxref{lshd
8671 basics,,, lsh, LSH Manual}).
8673 When @var{interfaces} is empty, lshd listens for connections on all the
8674 network interfaces; otherwise, @var{interfaces} must be a list of host names
8675 or addresses.
8677 @var{allow-empty-passwords?} specifies whether to accept log-ins with empty
8678 passwords, and @var{root-login?} specifies whether to accept log-ins as
8679 root.
8681 The other options should be self-descriptive.
8682 @end deffn
8684 @cindex SSH
8685 @cindex SSH server
8686 @deffn {Scheme Variable} openssh-service-type
8687 This is the type for the @uref{http://www.openssh.org, OpenSSH} secure
8688 shell daemon, @command{sshd}.  Its value must be an
8689 @code{openssh-configuration} record as in this example:
8691 @example
8692 (service openssh-service-type
8693          (openssh-configuration
8694            (x11-forwarding? #t)
8695            (permit-root-login 'without-password)))
8696 @end example
8698 See below for details about @code{openssh-configuration}.
8699 @end deffn
8701 @deftp {Data Type} openssh-configuration
8702 This is the configuration record for OpenSSH's @command{sshd}.
8704 @table @asis
8705 @item @code{pid-file} (default: @code{"/var/run/sshd.pid"})
8706 Name of the file where @command{sshd} writes its PID.
8708 @item @code{port-number} (default: @code{22})
8709 TCP port on which @command{sshd} listens for incoming connections.
8711 @item @code{permit-root-login} (default: @code{#f})
8712 This field determines whether and when to allow logins as root.  If
8713 @code{#f}, root logins are disallowed; if @code{#t}, they are allowed.
8714 If it's the symbol @code{'without-password}, then root logins are
8715 permitted but not with password-based authentication.
8717 @item @code{allow-empty-passwords?} (default: @code{#f})
8718 When true, users with empty passwords may log in.  When false, they may
8719 not.
8721 @item @code{password-authentication?} (default: @code{#t})
8722 When true, users may log in with their password.  When false, they have
8723 other authentication methods.
8725 @item @code{public-key-authentication?} (default: @code{#t})
8726 When true, users may log in using public key authentication.  When
8727 false, users have to use other authentication method.
8729 Authorized public keys are stored in @file{~/.ssh/authorized_keys}.
8730 This is used only by protocol version 2.
8732 @item @code{rsa-authentication?} (default: @code{#t})
8733 When true, users may log in using pure RSA authentication.  When false,
8734 users have to use other means of authentication.  This is used only by
8735 protocol 1.
8737 @item @code{x11-forwarding?} (default: @code{#f})
8738 When true, forwarding of X11 graphical client connections is
8739 enabled---in other words, @command{ssh} options @option{-X} and
8740 @option{-Y} will work.
8742 @item @code{protocol-number} (default: @code{2})
8743 The SSH protocol number to use.
8744 @end table
8745 @end deftp
8747 @deffn {Scheme Procedure} dropbear-service [@var{config}]
8748 Run the @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,Dropbear SSH
8749 daemon} with the given @var{config}, a @code{<dropbear-configuration>}
8750 object.
8752 For example, to specify a Dropbear service listening on port 1234, add
8753 this call to the operating system's @code{services} field:
8755 @example
8756 (dropbear-service (dropbear-configuration
8757                     (port-number 1234)))
8758 @end example
8759 @end deffn
8761 @deftp {Data Type} dropbear-configuration
8762 This data type represents the configuration of a Dropbear SSH daemon.
8764 @table @asis
8765 @item @code{dropbear} (default: @var{dropbear})
8766 The Dropbear package to use.
8768 @item @code{port-number} (default: 22)
8769 The TCP port where the daemon waits for incoming connections.
8771 @item @code{syslog-output?} (default: @code{#t})
8772 Whether to enable syslog output.
8774 @item @code{pid-file} (default: @code{"/var/run/dropbear.pid"})
8775 File name of the daemon's PID file.
8777 @item @code{root-login?} (default: @code{#f})
8778 Whether to allow @code{root} logins.
8780 @item @code{allow-empty-passwords?} (default: @code{#f})
8781 Whether to allow empty passwords.
8783 @item @code{password-authentication?} (default: @code{#t})
8784 Whether to enable password-based authentication.
8785 @end table
8786 @end deftp
8788 @defvr {Scheme Variable} %facebook-host-aliases
8789 This variable contains a string for use in @file{/etc/hosts}
8790 (@pxref{Host Names,,, libc, The GNU C Library Reference Manual}).  Each
8791 line contains a entry that maps a known server name of the Facebook
8792 on-line service---e.g., @code{www.facebook.com}---to the local
8793 host---@code{127.0.0.1} or its IPv6 equivalent, @code{::1}.
8795 This variable is typically used in the @code{hosts-file} field of an
8796 @code{operating-system} declaration (@pxref{operating-system Reference,
8797 @file{/etc/hosts}}):
8799 @example
8800 (use-modules (gnu) (guix))
8802 (operating-system
8803   (host-name "mymachine")
8804   ;; ...
8805   (hosts-file
8806     ;; Create a /etc/hosts file with aliases for "localhost"
8807     ;; and "mymachine", as well as for Facebook servers.
8808     (plain-file "hosts"
8809                 (string-append (local-host-aliases host-name)
8810                                %facebook-host-aliases))))
8811 @end example
8813 This mechanism can prevent programs running locally, such as Web
8814 browsers, from accessing Facebook.
8815 @end defvr
8817 The @code{(gnu services avahi)} provides the following definition.
8819 @deffn {Scheme Procedure} avahi-service [#:avahi @var{avahi}] @
8820           [#:host-name #f] [#:publish? #t] [#:ipv4? #t] @
8821           [#:ipv6? #t] [#:wide-area? #f] @
8822           [#:domains-to-browse '()] [#:debug? #f]
8823 Return a service that runs @command{avahi-daemon}, a system-wide
8824 mDNS/DNS-SD responder that allows for service discovery and
8825 "zero-configuration" host name lookups (see @uref{http://avahi.org/}), and
8826 extends the name service cache daemon (nscd) so that it can resolve
8827 @code{.local} host names using
8828 @uref{http://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}.  Additionally,
8829 add the @var{avahi} package to the system profile so that commands such as
8830 @command{avahi-browse} are directly usable.
8832 If @var{host-name} is different from @code{#f}, use that as the host name to
8833 publish for this machine; otherwise, use the machine's actual host name.
8835 When @var{publish?} is true, publishing of host names and services is allowed;
8836 in particular, avahi-daemon will publish the machine's host name and IP
8837 address via mDNS on the local network.
8839 When @var{wide-area?} is true, DNS-SD over unicast DNS is enabled.
8841 Boolean values @var{ipv4?} and @var{ipv6?} determine whether to use IPv4/IPv6
8842 sockets.
8843 @end deffn
8846 @node X Window
8847 @subsubsection X Window
8849 @cindex X11
8850 @cindex X Window System
8851 Support for the X Window graphical display system---specifically
8852 Xorg---is provided by the @code{(gnu services xorg)} module.  Note that
8853 there is no @code{xorg-service} procedure.  Instead, the X server is
8854 started by the @dfn{login manager}, currently SLiM.
8856 @deftp {Data Type} sddm-configuration
8857 This is the data type representing the sddm service configuration.
8859 @table @asis
8860 @item @code{display-server} (default: "x11")
8861 Select display server to use for the greeter. Valid values are "x11"
8862 or "wayland".
8864 @item @code{numlock} (default: "on")
8865 Valid values are "on", "off" or "none".
8867 @item @code{halt-command} (default @code{#~(string-apppend #$shepherd "/sbin/halt")})
8868 Command to run when halting.
8870 @item @code{reboot-command} (default @code{#~(string-append #$shepherd "/sbin/reboot")})
8871 Command to run when rebooting.
8873 @item @code{theme} (default "maldives")
8874 Theme to use. Default themes provided by SDDM are "elarun" or "maldives".
8876 @item @code{themes-directory} (default "/run/current-system/profile/share/sddm/themes")
8877 Directory to look for themes.
8879 @item @code{faces-directory} (default "/run/current-system/profile/share/sddm/faces")
8880 Directory to look for faces.
8882 @item @code{default-path} (default "/run/current-system/profile/bin")
8883 Default PATH to use.
8885 @item @code{minimum-uid} (default 1000)
8886 Minimum UID to display in SDDM.
8888 @item @code{maximum-uid} (default 2000)
8889 Maximum UID to display in SDDM
8891 @item @code{remember-last-user?} (default #t)
8892 Remember last user.
8894 @item @code{remember-last-session?} (default #t)
8895 Remember last session.
8897 @item @code{hide-users} (default "")
8898 Usernames to hide from SDDM greeter.
8900 @item @code{hide-shells} (default @code{#~(string-append #$shadow "/sbin/nologin")})
8901 Users with shells listed will be hidden from the SDDM greeter.
8903 @item @code{session-command} (default @code{#~(string-append #$sddm "/share/sddm/scripts/wayland-session")})
8904 Script to run before starting a wayland session.
8906 @item @code{sessions-directory} (default "/run/current-system/profile/share/wayland-sessions")
8907 Directory to look for desktop files starting wayland sessions.
8909 @item @code{xorg-server-path} (default @code{xorg-start-command})
8910 Path to xorg-server.
8912 @item @code{xauth-path} (default @code{#~(string-append #$xauth "/bin/xauth")})
8913 Path to xauth.
8915 @item @code{xephyr-path} (default @code{#~(string-append #$xorg-server "/bin/Xephyr")})
8916 Path to Xephyr.
8918 @item @code{xdisplay-start} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xsetup")})
8919 Script to run after starting xorg-server.
8921 @item @code{xdisplay-stop} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xstop")})
8922 Script to run before stopping xorg-server.
8924 @item @code{xsession-command} (default: @code{xinitr })
8925 Script to run before starting a X session.
8927 @item @code{xsessions-directory} (default: "/run/current-system/profile/share/xsessions")
8928 Directory to look for desktop files starting X sessions.
8930 @item @code{minimum-vt} (default: 7)
8931 Minimum VT to use.
8933 @item @code{xserver-arguments} (default "-nolisten tcp")
8934 Arguments to pass to xorg-server.
8936 @item @code{auto-login-user} (default "")
8937 User to use for auto-login.
8939 @item @code{auto-login-session} (default "")
8940 Desktop file to use for auto-login.
8942 @item @code{relogin?} (default #f)
8943 Relogin after logout.
8945 @end table
8946 @end deftp
8948 @cindex login manager
8949 @deffn {Scheme Procedure} sddm-service config
8950 Return a service that spawns the SDDM graphical login manager for config of
8951 type @code{<sddm-configuration>}.
8953 @example
8954   (sddm-service (sddm-configuration
8955                  (auto-login-user "Alice")
8956                  (auto-login-session "xfce.desktop")))
8957 @end example
8958 @end deffn
8960 @deffn {Scheme Procedure} slim-service [#:allow-empty-passwords? #f] @
8961   [#:auto-login? #f] [#:default-user ""] [#:startx] @
8962   [#:theme @var{%default-slim-theme}] @
8963   [#:theme-name @var{%default-slim-theme-name}]
8964 Return a service that spawns the SLiM graphical login manager, which in
8965 turn starts the X display server with @var{startx}, a command as returned by
8966 @code{xorg-start-command}.
8968 @cindex X session
8970 SLiM automatically looks for session types described by the @file{.desktop}
8971 files in @file{/run/current-system/profile/share/xsessions} and allows users
8972 to choose a session from the log-in screen using @kbd{F1}.  Packages such as
8973 @var{xfce}, @var{sawfish}, and @var{ratpoison} provide @file{.desktop} files;
8974 adding them to the system-wide set of packages automatically makes them
8975 available at the log-in screen.
8977 In addition, @file{~/.xsession} files are honored.  When available,
8978 @file{~/.xsession} must be an executable that starts a window manager
8979 and/or other X clients.
8981 When @var{allow-empty-passwords?} is true, allow logins with an empty
8982 password.  When @var{auto-login?} is true, log in automatically as
8983 @var{default-user}.
8985 If @var{theme} is @code{#f}, use the default log-in theme; otherwise
8986 @var{theme} must be a gexp denoting the name of a directory containing the
8987 theme to use.  In that case, @var{theme-name} specifies the name of the
8988 theme.
8989 @end deffn
8991 @defvr {Scheme Variable} %default-theme
8992 @defvrx {Scheme Variable} %default-theme-name
8993 The G-Expression denoting the default SLiM theme and its name.
8994 @end defvr
8996 @deffn {Scheme Procedure} xorg-start-command [#:guile] @
8997   [#:configuration-file #f] [#:xorg-server @var{xorg-server}]
8998 Return a derivation that builds a @var{guile} script to start the X server
8999 from @var{xorg-server}.  @var{configuration-file} is the server configuration
9000 file or a derivation that builds it; when omitted, the result of
9001 @code{xorg-configuration-file} is used.
9003 Usually the X server is started by a login manager.
9004 @end deffn
9006 @deffn {Scheme Procedure} xorg-configuration-file @
9007   [#:drivers '()] [#:resolutions '()] [#:extra-config '()]
9008 Return a configuration file for the Xorg server containing search paths for
9009 all the common drivers.
9011 @var{drivers} must be either the empty list, in which case Xorg chooses a
9012 graphics driver automatically, or a list of driver names that will be tried in
9013 this order---e.g., @code{(\"modesetting\" \"vesa\")}.
9015 Likewise, when @var{resolutions} is the empty list, Xorg chooses an
9016 appropriate screen resolution; otherwise, it must be a list of
9017 resolutions---e.g., @code{((1024 768) (640 480))}.
9019 Last, @var{extra-config} is a list of strings or objects appended to the
9020 @code{text-file*} argument list.  It is used to pass extra text to be added
9021 verbatim to the configuration file.
9022 @end deffn
9024 @deffn {Scheme Procedure} screen-locker-service @var{package} [@var{name}]
9025 Add @var{package}, a package for a screen-locker or screen-saver whose
9026 command is @var{program}, to the set of setuid programs and add a PAM entry
9027 for it.  For example:
9029 @lisp
9030 (screen-locker-service xlockmore "xlock")
9031 @end lisp
9033 makes the good ol' XlockMore usable.
9034 @end deffn
9037 @node Printing Services
9038 @subsubsection Printing Services
9040 The @code{(gnu services cups)} module provides a Guix service definition
9041 for the CUPS printing service.  To add printer support to a GuixSD
9042 system, add a @code{cups-service} to the operating system definition:
9044 @deffn {Scheme Variable} cups-service-type
9045 The service type for the CUPS print server.  Its value should be a valid
9046 CUPS configuration (see below).  For example:
9047 @example
9048 (service cups-service-type (cups-configuration))
9049 @end example
9050 @end deffn
9052 The CUPS configuration controls the basic things about your CUPS
9053 installation: what interfaces it listens on, what to do if a print job
9054 fails, how much logging to do, and so on.  To actually add a printer,
9055 you have to visit the @url{http://localhost:631} URL, or use a tool such
9056 as GNOME's printer configuration services.  By default, configuring a
9057 CUPS service will generate a self-signed certificate if needed, for
9058 secure connections to the print server.
9060 One way you might want to customize CUPS is to enable or disable the web
9061 interface.  You can do that directly, like this:
9063 @example
9064 (service cups-service-type
9065          (cups-configuration
9066            (web-interface? #f)))
9067 @end example
9069 The available configuration parameters follow.  Each parameter
9070 definition is preceded by its type; for example, @samp{string-list foo}
9071 indicates that the @code{foo} parameter should be specified as a list of
9072 strings.  There is also a way to specify the configuration as a string,
9073 if you have an old @code{cupsd.conf} file that you want to port over
9074 from some other system; see the end for more details.
9076 @c The following documentation was initially generated by
9077 @c (generate-documentation) in (gnu services cups).  Manually maintained
9078 @c documentation is better, so we shouldn't hesitate to edit below as
9079 @c needed.  However if the change you want to make to this documentation
9080 @c can be done in an automated way, it's probably easier to change
9081 @c (generate-documentation) than to make it below and have to deal with
9082 @c the churn as CUPS updates.
9085 Available @code{cups-configuration} fields are:
9087 @deftypevr {@code{cups-configuration} parameter} package cups
9088 The CUPS package.
9089 @end deftypevr
9091 @deftypevr {@code{cups-configuration} parameter} package-list extensions
9092 Drivers and other extensions to the CUPS package.
9093 @end deftypevr
9095 @deftypevr {@code{cups-configuration} parameter} files-configuration files-configuration
9096 Configuration of where to write logs, what directories to use for print
9097 spools, and related privileged configuration parameters.
9099 Available @code{files-configuration} fields are:
9101 @deftypevr {@code{files-configuration} parameter} log-location access-log
9102 Defines the access log filename.  Specifying a blank filename disables
9103 access log generation.  The value @code{stderr} causes log entries to be
9104 sent to the standard error file when the scheduler is running in the
9105 foreground, or to the system log daemon when run in the background.  The
9106 value @code{syslog} causes log entries to be sent to the system log
9107 daemon.  The server name may be included in filenames using the string
9108 @code{%s}, as in @code{/var/log/cups/%s-access_log}.
9110 Defaults to @samp{"/var/log/cups/access_log"}.
9111 @end deftypevr
9113 @deftypevr {@code{files-configuration} parameter} file-name cache-dir
9114 Where CUPS should cache data.
9116 Defaults to @samp{"/var/cache/cups"}.
9117 @end deftypevr
9119 @deftypevr {@code{files-configuration} parameter} string config-file-perm
9120 Specifies the permissions for all configuration files that the scheduler
9121 writes.
9123 Note that the permissions for the printers.conf file are currently
9124 masked to only allow access from the scheduler user (typically root).
9125 This is done because printer device URIs sometimes contain sensitive
9126 authentication information that should not be generally known on the
9127 system.  There is no way to disable this security feature.
9129 Defaults to @samp{"0640"}.
9130 @end deftypevr
9132 @deftypevr {@code{files-configuration} parameter} log-location error-log
9133 Defines the error log filename.  Specifying a blank filename disables
9134 access log generation.  The value @code{stderr} causes log entries to be
9135 sent to the standard error file when the scheduler is running in the
9136 foreground, or to the system log daemon when run in the background.  The
9137 value @code{syslog} causes log entries to be sent to the system log
9138 daemon.  The server name may be included in filenames using the string
9139 @code{%s}, as in @code{/var/log/cups/%s-error_log}.
9141 Defaults to @samp{"/var/log/cups/error_log"}.
9142 @end deftypevr
9144 @deftypevr {@code{files-configuration} parameter} string fatal-errors
9145 Specifies which errors are fatal, causing the scheduler to exit.  The
9146 kind strings are:
9148 @table @code
9149 @item none
9150 No errors are fatal.
9152 @item all
9153 All of the errors below are fatal.
9155 @item browse
9156 Browsing initialization errors are fatal, for example failed connections
9157 to the DNS-SD daemon.
9159 @item config
9160 Configuration file syntax errors are fatal.
9162 @item listen
9163 Listen or Port errors are fatal, except for IPv6 failures on the
9164 loopback or @code{any} addresses.
9166 @item log
9167 Log file creation or write errors are fatal.
9169 @item permissions
9170 Bad startup file permissions are fatal, for example shared TLS
9171 certificate and key files with world-read permissions.
9172 @end table
9174 Defaults to @samp{"all -browse"}.
9175 @end deftypevr
9177 @deftypevr {@code{files-configuration} parameter} boolean file-device?
9178 Specifies whether the file pseudo-device can be used for new printer
9179 queues.  The URI @uref{file:///dev/null} is always allowed.
9181 Defaults to @samp{#f}.
9182 @end deftypevr
9184 @deftypevr {@code{files-configuration} parameter} string group
9185 Specifies the group name or ID that will be used when executing external
9186 programs.
9188 Defaults to @samp{"lp"}.
9189 @end deftypevr
9191 @deftypevr {@code{files-configuration} parameter} string log-file-perm
9192 Specifies the permissions for all log files that the scheduler writes.
9194 Defaults to @samp{"0644"}.
9195 @end deftypevr
9197 @deftypevr {@code{files-configuration} parameter} log-location page-log
9198 Defines the page log filename.  Specifying a blank filename disables
9199 access log generation.  The value @code{stderr} causes log entries to be
9200 sent to the standard error file when the scheduler is running in the
9201 foreground, or to the system log daemon when run in the background.  The
9202 value @code{syslog} causes log entries to be sent to the system log
9203 daemon.  The server name may be included in filenames using the string
9204 @code{%s}, as in @code{/var/log/cups/%s-page_log}.
9206 Defaults to @samp{"/var/log/cups/page_log"}.
9207 @end deftypevr
9209 @deftypevr {@code{files-configuration} parameter} string remote-root
9210 Specifies the username that is associated with unauthenticated accesses
9211 by clients claiming to be the root user.  The default is @code{remroot}.
9213 Defaults to @samp{"remroot"}.
9214 @end deftypevr
9216 @deftypevr {@code{files-configuration} parameter} file-name request-root
9217 Specifies the directory that contains print jobs and other HTTP request
9218 data.
9220 Defaults to @samp{"/var/spool/cups"}.
9221 @end deftypevr
9223 @deftypevr {@code{files-configuration} parameter} sandboxing sandboxing
9224 Specifies the level of security sandboxing that is applied to print
9225 filters, backends, and other child processes of the scheduler; either
9226 @code{relaxed} or @code{strict}.  This directive is currently only
9227 used/supported on macOS.
9229 Defaults to @samp{strict}.
9230 @end deftypevr
9232 @deftypevr {@code{files-configuration} parameter} file-name server-keychain
9233 Specifies the location of TLS certificates and private keys.  CUPS will
9234 look for public and private keys in this directory: a @code{.crt} files
9235 for PEM-encoded certificates and corresponding @code{.key} files for
9236 PEM-encoded private keys.
9238 Defaults to @samp{"/etc/cups/ssl"}.
9239 @end deftypevr
9241 @deftypevr {@code{files-configuration} parameter} file-name server-root
9242 Specifies the directory containing the server configuration files.
9244 Defaults to @samp{"/etc/cups"}.
9245 @end deftypevr
9247 @deftypevr {@code{files-configuration} parameter} boolean sync-on-close?
9248 Specifies whether the scheduler calls fsync(2) after writing
9249 configuration or state files.
9251 Defaults to @samp{#f}.
9252 @end deftypevr
9254 @deftypevr {@code{files-configuration} parameter} space-separated-string-list system-group
9255 Specifies the group(s) to use for @code{@@SYSTEM} group authentication.
9256 @end deftypevr
9258 @deftypevr {@code{files-configuration} parameter} file-name temp-dir
9259 Specifies the directory where temporary files are stored.
9261 Defaults to @samp{"/var/spool/cups/tmp"}.
9262 @end deftypevr
9264 @deftypevr {@code{files-configuration} parameter} string user
9265 Specifies the user name or ID that is used when running external
9266 programs.
9268 Defaults to @samp{"lp"}.
9269 @end deftypevr
9270 @end deftypevr
9272 @deftypevr {@code{cups-configuration} parameter} access-log-level access-log-level
9273 Specifies the logging level for the AccessLog file.  The @code{config}
9274 level logs when printers and classes are added, deleted, or modified and
9275 when configuration files are accessed or updated.  The @code{actions}
9276 level logs when print jobs are submitted, held, released, modified, or
9277 canceled, and any of the conditions for @code{config}.  The @code{all}
9278 level logs all requests.
9280 Defaults to @samp{actions}.
9281 @end deftypevr
9283 @deftypevr {@code{cups-configuration} parameter} boolean auto-purge-jobs?
9284 Specifies whether to purge job history data automatically when it is no
9285 longer required for quotas.
9287 Defaults to @samp{#f}.
9288 @end deftypevr
9290 @deftypevr {@code{cups-configuration} parameter} browse-local-protocols browse-local-protocols
9291 Specifies which protocols to use for local printer sharing.
9293 Defaults to @samp{dnssd}.
9294 @end deftypevr
9296 @deftypevr {@code{cups-configuration} parameter} boolean browse-web-if?
9297 Specifies whether the CUPS web interface is advertised.
9299 Defaults to @samp{#f}.
9300 @end deftypevr
9302 @deftypevr {@code{cups-configuration} parameter} boolean browsing?
9303 Specifies whether shared printers are advertised.
9305 Defaults to @samp{#f}.
9306 @end deftypevr
9308 @deftypevr {@code{cups-configuration} parameter} string classification
9309 Specifies the security classification of the server.  Any valid banner
9310 name can be used, including "classified", "confidential", "secret",
9311 "topsecret", and "unclassified", or the banner can be omitted to disable
9312 secure printing functions.
9314 Defaults to @samp{""}.
9315 @end deftypevr
9317 @deftypevr {@code{cups-configuration} parameter} boolean classify-override?
9318 Specifies whether users may override the classification (cover page) of
9319 individual print jobs using the @code{job-sheets} option.
9321 Defaults to @samp{#f}.
9322 @end deftypevr
9324 @deftypevr {@code{cups-configuration} parameter} default-auth-type default-auth-type
9325 Specifies the default type of authentication to use.
9327 Defaults to @samp{Basic}.
9328 @end deftypevr
9330 @deftypevr {@code{cups-configuration} parameter} default-encryption default-encryption
9331 Specifies whether encryption will be used for authenticated requests.
9333 Defaults to @samp{Required}.
9334 @end deftypevr
9336 @deftypevr {@code{cups-configuration} parameter} string default-language
9337 Specifies the default language to use for text and web content.
9339 Defaults to @samp{"en"}.
9340 @end deftypevr
9342 @deftypevr {@code{cups-configuration} parameter} string default-paper-size
9343 Specifies the default paper size for new print queues.  @samp{"Auto"}
9344 uses a locale-specific default, while @samp{"None"} specifies there is
9345 no default paper size.  Specific size names are typically
9346 @samp{"Letter"} or @samp{"A4"}.
9348 Defaults to @samp{"Auto"}.
9349 @end deftypevr
9351 @deftypevr {@code{cups-configuration} parameter} string default-policy
9352 Specifies the default access policy to use.
9354 Defaults to @samp{"default"}.
9355 @end deftypevr
9357 @deftypevr {@code{cups-configuration} parameter} boolean default-shared?
9358 Specifies whether local printers are shared by default.
9360 Defaults to @samp{#t}.
9361 @end deftypevr
9363 @deftypevr {@code{cups-configuration} parameter} non-negative-integer dirty-clean-interval
9364 Specifies the delay for updating of configuration and state files, in
9365 seconds.  A value of 0 causes the update to happen as soon as possible,
9366 typically within a few milliseconds.
9368 Defaults to @samp{30}.
9369 @end deftypevr
9371 @deftypevr {@code{cups-configuration} parameter} error-policy error-policy
9372 Specifies what to do when an error occurs.  Possible values are
9373 @code{abort-job}, which will discard the failed print job;
9374 @code{retry-job}, which will retry the job at a later time;
9375 @code{retry-this-job}, which retries the failed job immediately; and
9376 @code{stop-printer}, which stops the printer.
9378 Defaults to @samp{stop-printer}.
9379 @end deftypevr
9381 @deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-limit
9382 Specifies the maximum cost of filters that are run concurrently, which
9383 can be used to minimize disk, memory, and CPU resource problems.  A
9384 limit of 0 disables filter limiting.  An average print to a
9385 non-PostScript printer needs a filter limit of about 200.  A PostScript
9386 printer needs about half that (100).  Setting the limit below these
9387 thresholds will effectively limit the scheduler to printing a single job
9388 at any time.
9390 Defaults to @samp{0}.
9391 @end deftypevr
9393 @deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-nice
9394 Specifies the scheduling priority of filters that are run to print a
9395 job.  The nice value ranges from 0, the highest priority, to 19, the
9396 lowest priority.
9398 Defaults to @samp{0}.
9399 @end deftypevr
9401 @deftypevr {@code{cups-configuration} parameter} host-name-lookups host-name-lookups
9402 Specifies whether to do reverse lookups on connecting clients.  The
9403 @code{double} setting causes @code{cupsd} to verify that the hostname
9404 resolved from the address matches one of the addresses returned for that
9405 hostname.  Double lookups also prevent clients with unregistered
9406 addresses from connecting to your server.  Only set this option to
9407 @code{#t} or @code{double} if absolutely required.
9409 Defaults to @samp{#f}.
9410 @end deftypevr
9412 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-kill-delay
9413 Specifies the number of seconds to wait before killing the filters and
9414 backend associated with a canceled or held job.
9416 Defaults to @samp{30}.
9417 @end deftypevr
9419 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-interval
9420 Specifies the interval between retries of jobs in seconds.  This is
9421 typically used for fax queues but can also be used with normal print
9422 queues whose error policy is @code{retry-job} or
9423 @code{retry-current-job}.
9425 Defaults to @samp{30}.
9426 @end deftypevr
9428 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-limit
9429 Specifies the number of retries that are done for jobs.  This is
9430 typically used for fax queues but can also be used with normal print
9431 queues whose error policy is @code{retry-job} or
9432 @code{retry-current-job}.
9434 Defaults to @samp{5}.
9435 @end deftypevr
9437 @deftypevr {@code{cups-configuration} parameter} boolean keep-alive?
9438 Specifies whether to support HTTP keep-alive connections.
9440 Defaults to @samp{#t}.
9441 @end deftypevr
9443 @deftypevr {@code{cups-configuration} parameter} non-negative-integer keep-alive-timeout
9444 Specifies how long an idle client connection remains open, in seconds.
9446 Defaults to @samp{30}.
9447 @end deftypevr
9449 @deftypevr {@code{cups-configuration} parameter} non-negative-integer limit-request-body
9450 Specifies the maximum size of print files, IPP requests, and HTML form
9451 data.  A limit of 0 disables the limit check.
9453 Defaults to @samp{0}.
9454 @end deftypevr
9456 @deftypevr {@code{cups-configuration} parameter} multiline-string-list listen
9457 Listens on the specified interfaces for connections.  Valid values are
9458 of the form @var{address}:@var{port}, where @var{address} is either an
9459 IPv6 address enclosed in brackets, an IPv4 address, or @code{*} to
9460 indicate all addresses.  Values can also be file names of local UNIX
9461 domain sockets.  The Listen directive is similar to the Port directive
9462 but allows you to restrict access to specific interfaces or networks.
9463 @end deftypevr
9465 @deftypevr {@code{cups-configuration} parameter} non-negative-integer listen-back-log
9466 Specifies the number of pending connections that will be allowed.  This
9467 normally only affects very busy servers that have reached the MaxClients
9468 limit, but can also be triggered by large numbers of simultaneous
9469 connections.  When the limit is reached, the operating system will
9470 refuse additional connections until the scheduler can accept the pending
9471 ones.
9473 Defaults to @samp{128}.
9474 @end deftypevr
9476 @deftypevr {@code{cups-configuration} parameter} location-access-control-list location-access-controls
9477 Specifies a set of additional access controls.
9479 Available @code{location-access-controls} fields are:
9481 @deftypevr {@code{location-access-controls} parameter} file-name path
9482 Specifies the URI path to which the access control applies.
9483 @end deftypevr
9485 @deftypevr {@code{location-access-controls} parameter} access-control-list access-controls
9486 Access controls for all access to this path, in the same format as the
9487 @code{access-controls} of @code{operation-access-control}.
9489 Defaults to @samp{()}.
9490 @end deftypevr
9492 @deftypevr {@code{location-access-controls} parameter} method-access-control-list method-access-controls
9493 Access controls for method-specific access to this path.
9495 Defaults to @samp{()}.
9497 Available @code{method-access-controls} fields are:
9499 @deftypevr {@code{method-access-controls} parameter} boolean reverse?
9500 If @code{#t}, apply access controls to all methods except the listed
9501 methods.  Otherwise apply to only the listed methods.
9503 Defaults to @samp{#f}.
9504 @end deftypevr
9506 @deftypevr {@code{method-access-controls} parameter} method-list methods
9507 Methods to which this access control applies.
9509 Defaults to @samp{()}.
9510 @end deftypevr
9512 @deftypevr {@code{method-access-controls} parameter} access-control-list access-controls
9513 Access control directives, as a list of strings.  Each string should be
9514 one directive, such as "Order allow,deny".
9516 Defaults to @samp{()}.
9517 @end deftypevr
9518 @end deftypevr
9519 @end deftypevr
9521 @deftypevr {@code{cups-configuration} parameter} non-negative-integer log-debug-history
9522 Specifies the number of debugging messages that are retained for logging
9523 if an error occurs in a print job.  Debug messages are logged regardless
9524 of the LogLevel setting.
9526 Defaults to @samp{100}.
9527 @end deftypevr
9529 @deftypevr {@code{cups-configuration} parameter} log-level log-level
9530 Specifies the level of logging for the ErrorLog file.  The value
9531 @code{none} stops all logging while @code{debug2} logs everything.
9533 Defaults to @samp{info}.
9534 @end deftypevr
9536 @deftypevr {@code{cups-configuration} parameter} log-time-format log-time-format
9537 Specifies the format of the date and time in the log files.  The value
9538 @code{standard} logs whole seconds while @code{usecs} logs microseconds.
9540 Defaults to @samp{standard}.
9541 @end deftypevr
9543 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients
9544 Specifies the maximum number of simultaneous clients that are allowed by
9545 the scheduler.
9547 Defaults to @samp{100}.
9548 @end deftypevr
9550 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients-per-host
9551 Specifies the maximum number of simultaneous clients that are allowed
9552 from a single address.
9554 Defaults to @samp{100}.
9555 @end deftypevr
9557 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-copies
9558 Specifies the maximum number of copies that a user can print of each
9559 job.
9561 Defaults to @samp{9999}.
9562 @end deftypevr
9564 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-hold-time
9565 Specifies the maximum time a job may remain in the @code{indefinite}
9566 hold state before it is canceled.  A value of 0 disables cancellation of
9567 held jobs.
9569 Defaults to @samp{0}.
9570 @end deftypevr
9572 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs
9573 Specifies the maximum number of simultaneous jobs that are allowed.  Set
9574 to 0 to allow an unlimited number of jobs.
9576 Defaults to @samp{500}.
9577 @end deftypevr
9579 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-printer
9580 Specifies the maximum number of simultaneous jobs that are allowed per
9581 printer.  A value of 0 allows up to MaxJobs jobs per printer.
9583 Defaults to @samp{0}.
9584 @end deftypevr
9586 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-user
9587 Specifies the maximum number of simultaneous jobs that are allowed per
9588 user.  A value of 0 allows up to MaxJobs jobs per user.
9590 Defaults to @samp{0}.
9591 @end deftypevr
9593 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-job-time
9594 Specifies the maximum time a job may take to print before it is
9595 canceled, in seconds.  Set to 0 to disable cancellation of "stuck" jobs.
9597 Defaults to @samp{10800}.
9598 @end deftypevr
9600 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-log-size
9601 Specifies the maximum size of the log files before they are rotated, in
9602 bytes.  The value 0 disables log rotation.
9604 Defaults to @samp{1048576}.
9605 @end deftypevr
9607 @deftypevr {@code{cups-configuration} parameter} non-negative-integer multiple-operation-timeout
9608 Specifies the maximum amount of time to allow between files in a
9609 multiple file print job, in seconds.
9611 Defaults to @samp{300}.
9612 @end deftypevr
9614 @deftypevr {@code{cups-configuration} parameter} string page-log-format
9615 Specifies the format of PageLog lines.  Sequences beginning with percent
9616 (@samp{%}) characters are replaced with the corresponding information,
9617 while all other characters are copied literally.  The following percent
9618 sequences are recognized:
9620 @table @samp
9621 @item %%
9622 insert a single percent character
9624 @item %@{name@}
9625 insert the value of the specified IPP attribute
9627 @item %C
9628 insert the number of copies for the current page
9630 @item %P
9631 insert the current page number
9633 @item %T
9634 insert the current date and time in common log format
9636 @item %j
9637 insert the job ID
9639 @item %p
9640 insert the printer name
9642 @item %u
9643 insert the username
9644 @end table
9646 A value of the empty string disables page logging.  The string @code{%p
9647 %u %j %T %P %C %@{job-billing@} %@{job-originating-host-name@}
9648 %@{job-name@} %@{media@} %@{sides@}} creates a page log with the
9649 standard items.
9651 Defaults to @samp{""}.
9652 @end deftypevr
9654 @deftypevr {@code{cups-configuration} parameter} environment-variables environment-variables
9655 Passes the specified environment variable(s) to child processes; a list
9656 of strings.
9658 Defaults to @samp{()}.
9659 @end deftypevr
9661 @deftypevr {@code{cups-configuration} parameter} policy-configuration-list policies
9662 Specifies named access control policies.
9664 Available @code{policy-configuration} fields are:
9666 @deftypevr {@code{policy-configuration} parameter} string name
9667 Name of the policy.
9668 @end deftypevr
9670 @deftypevr {@code{policy-configuration} parameter} string job-private-access
9671 Specifies an access list for a job's private values.  @code{@@ACL} maps
9672 to the printer's requesting-user-name-allowed or
9673 requesting-user-name-denied values.  @code{@@OWNER} maps to the job's
9674 owner.  @code{@@SYSTEM} maps to the groups listed for the
9675 @code{system-group} field of the @code{files-config} configuration,
9676 which is reified into the @code{cups-files.conf(5)} file.  Other
9677 possible elements of the access list include specific user names, and
9678 @code{@@@var{group}} to indicate members of a specific group.  The
9679 access list may also be simply @code{all} or @code{default}.
9681 Defaults to @samp{"@@OWNER @@SYSTEM"}.
9682 @end deftypevr
9684 @deftypevr {@code{policy-configuration} parameter} string job-private-values
9685 Specifies the list of job values to make private, or @code{all},
9686 @code{default}, or @code{none}.
9688 Defaults to @samp{"job-name job-originating-host-name
9689 job-originating-user-name phone"}.
9690 @end deftypevr
9692 @deftypevr {@code{policy-configuration} parameter} string subscription-private-access
9693 Specifies an access list for a subscription's private values.
9694 @code{@@ACL} maps to the printer's requesting-user-name-allowed or
9695 requesting-user-name-denied values.  @code{@@OWNER} maps to the job's
9696 owner.  @code{@@SYSTEM} maps to the groups listed for the
9697 @code{system-group} field of the @code{files-config} configuration,
9698 which is reified into the @code{cups-files.conf(5)} file.  Other
9699 possible elements of the access list include specific user names, and
9700 @code{@@@var{group}} to indicate members of a specific group.  The
9701 access list may also be simply @code{all} or @code{default}.
9703 Defaults to @samp{"@@OWNER @@SYSTEM"}.
9704 @end deftypevr
9706 @deftypevr {@code{policy-configuration} parameter} string subscription-private-values
9707 Specifies the list of job values to make private, or @code{all},
9708 @code{default}, or @code{none}.
9710 Defaults to @samp{"notify-events notify-pull-method notify-recipient-uri
9711 notify-subscriber-user-name notify-user-data"}.
9712 @end deftypevr
9714 @deftypevr {@code{policy-configuration} parameter} operation-access-control-list access-controls
9715 Access control by IPP operation.
9717 Defaults to @samp{()}.
9718 @end deftypevr
9719 @end deftypevr
9721 @deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-files
9722 Specifies whether job files (documents) are preserved after a job is
9723 printed.  If a numeric value is specified, job files are preserved for
9724 the indicated number of seconds after printing.  Otherwise a boolean
9725 value applies indefinitely.
9727 Defaults to @samp{86400}.
9728 @end deftypevr
9730 @deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-history
9731 Specifies whether the job history is preserved after a job is printed.
9732 If a numeric value is specified, the job history is preserved for the
9733 indicated number of seconds after printing.  If @code{#t}, the job
9734 history is preserved until the MaxJobs limit is reached.
9736 Defaults to @samp{#t}.
9737 @end deftypevr
9739 @deftypevr {@code{cups-configuration} parameter} non-negative-integer reload-timeout
9740 Specifies the amount of time to wait for job completion before
9741 restarting the scheduler.
9743 Defaults to @samp{30}.
9744 @end deftypevr
9746 @deftypevr {@code{cups-configuration} parameter} string rip-cache
9747 Specifies the maximum amount of memory to use when converting documents
9748 into bitmaps for a printer.
9750 Defaults to @samp{"128m"}.
9751 @end deftypevr
9753 @deftypevr {@code{cups-configuration} parameter} string server-admin
9754 Specifies the email address of the server administrator.
9756 Defaults to @samp{"root@@localhost.localdomain"}.
9757 @end deftypevr
9759 @deftypevr {@code{cups-configuration} parameter} host-name-list-or-* server-alias
9760 The ServerAlias directive is used for HTTP Host header validation when
9761 clients connect to the scheduler from external interfaces.  Using the
9762 special name @code{*} can expose your system to known browser-based DNS
9763 rebinding attacks, even when accessing sites through a firewall.  If the
9764 auto-discovery of alternate names does not work, we recommend listing
9765 each alternate name with a ServerAlias directive instead of using
9766 @code{*}.
9768 Defaults to @samp{*}.
9769 @end deftypevr
9771 @deftypevr {@code{cups-configuration} parameter} string server-name
9772 Specifies the fully-qualified host name of the server.
9774 Defaults to @samp{"localhost"}.
9775 @end deftypevr
9777 @deftypevr {@code{cups-configuration} parameter} server-tokens server-tokens
9778 Specifies what information is included in the Server header of HTTP
9779 responses.  @code{None} disables the Server header.  @code{ProductOnly}
9780 reports @code{CUPS}.  @code{Major} reports @code{CUPS 2}.  @code{Minor}
9781 reports @code{CUPS 2.0}.  @code{Minimal} reports @code{CUPS 2.0.0}.
9782 @code{OS} reports @code{CUPS 2.0.0 (@var{uname})} where @var{uname} is
9783 the output of the @code{uname} command.  @code{Full} reports @code{CUPS
9784 2.0.0 (@var{uname}) IPP/2.0}.
9786 Defaults to @samp{Minimal}.
9787 @end deftypevr
9789 @deftypevr {@code{cups-configuration} parameter} string set-env
9790 Set the specified environment variable to be passed to child processes.
9792 Defaults to @samp{"variable value"}.
9793 @end deftypevr
9795 @deftypevr {@code{cups-configuration} parameter} multiline-string-list ssl-listen
9796 Listens on the specified interfaces for encrypted connections.  Valid
9797 values are of the form @var{address}:@var{port}, where @var{address} is
9798 either an IPv6 address enclosed in brackets, an IPv4 address, or
9799 @code{*} to indicate all addresses.
9801 Defaults to @samp{()}.
9802 @end deftypevr
9804 @deftypevr {@code{cups-configuration} parameter} ssl-options ssl-options
9805 Sets encryption options.  By default, CUPS only supports encryption
9806 using TLS v1.0 or higher using known secure cipher suites.  The
9807 @code{AllowRC4} option enables the 128-bit RC4 cipher suites, which are
9808 required for some older clients that do not implement newer ones.  The
9809 @code{AllowSSL3} option enables SSL v3.0, which is required for some
9810 older clients that do not support TLS v1.0.
9812 Defaults to @samp{()}.
9813 @end deftypevr
9815 @deftypevr {@code{cups-configuration} parameter} boolean strict-conformance?
9816 Specifies whether the scheduler requires clients to strictly adhere to
9817 the IPP specifications.
9819 Defaults to @samp{#f}.
9820 @end deftypevr
9822 @deftypevr {@code{cups-configuration} parameter} non-negative-integer timeout
9823 Specifies the HTTP request timeout, in seconds.
9825 Defaults to @samp{300}.
9827 @end deftypevr
9829 @deftypevr {@code{cups-configuration} parameter} boolean web-interface?
9830 Specifies whether the web interface is enabled.
9832 Defaults to @samp{#f}.
9833 @end deftypevr
9835 At this point you're probably thinking ``oh dear, Guix manual, I like
9836 you but you can stop already with the configuration options''.  Indeed.
9837 However, one more point: it could be that you have an existing
9838 @code{cupsd.conf} that you want to use.  In that case, you can pass an
9839 @code{opaque-cups-configuration} as the configuration of a
9840 @code{cups-service-type}.
9842 Available @code{opaque-cups-configuration} fields are:
9844 @deftypevr {@code{opaque-cups-configuration} parameter} package cups
9845 The CUPS package.
9846 @end deftypevr
9848 @deftypevr {@code{opaque-cups-configuration} parameter} string cupsd.conf
9849 The contents of the @code{cupsd.conf}, as a string.
9850 @end deftypevr
9852 @deftypevr {@code{opaque-cups-configuration} parameter} string cups-files.conf
9853 The contents of the @code{cups-files.conf} file, as a string.
9854 @end deftypevr
9856 For example, if your @code{cupsd.conf} and @code{cups-files.conf} are in
9857 strings of the same name, you could instantiate a CUPS service like
9858 this:
9860 @example
9861 (service cups-service-type
9862          (opaque-cups-configuration
9863            (cupsd.conf cupsd.conf)
9864            (cups-files.conf cups-files.conf)))
9865 @end example
9868 @node Desktop Services
9869 @subsubsection Desktop Services
9871 The @code{(gnu services desktop)} module provides services that are
9872 usually useful in the context of a ``desktop'' setup---that is, on a
9873 machine running a graphical display server, possibly with graphical user
9874 interfaces, etc.  It also defines services that provide specific desktop
9875 environments like GNOME and XFCE.
9877 To simplify things, the module defines a variable containing the set of
9878 services that users typically expect on a machine with a graphical
9879 environment and networking:
9881 @defvr {Scheme Variable} %desktop-services
9882 This is a list of services that builds upon @var{%base-services} and
9883 adds or adjusts services for a typical ``desktop'' setup.
9885 In particular, it adds a graphical login manager (@pxref{X Window,
9886 @code{slim-service}}), screen lockers,
9887 a network management tool (@pxref{Networking
9888 Services, @code{wicd-service}}), energy and color management services,
9889 the @code{elogind} login and seat manager, the Polkit privilege service,
9890 the GeoClue location service, an NTP client (@pxref{Networking
9891 Services}), the Avahi daemon, and has the name service switch service
9892 configured to be able to use @code{nss-mdns} (@pxref{Name Service
9893 Switch, mDNS}).
9894 @end defvr
9896 The @var{%desktop-services} variable can be used as the @code{services}
9897 field of an @code{operating-system} declaration (@pxref{operating-system
9898 Reference, @code{services}}).
9900 Additionally, the @code{gnome-desktop-service} and
9901 @code{xfce-desktop-service} procedures can add GNOME and/or XFCE to a
9902 system.  To ``add GNOME'' means that system-level services like the
9903 backlight adjustment helpers and the power management utilities are
9904 added to the system, extending @code{polkit} and @code{dbus}
9905 appropriately, allowing GNOME to operate with elevated privileges on a
9906 limited number of special-purpose system interfaces.  Additionally,
9907 adding a service made by @code{gnome-desktop-service} adds the GNOME
9908 metapackage to the system profile.  Likewise, adding the XFCE service
9909 not only adds the @code{xfce} metapackage to the system profile, but it
9910 also gives the Thunar file manager the ability to open a ``root-mode''
9911 file management window, if the user authenticates using the
9912 administrator's password via the standard polkit graphical interface.
9914 @deffn {Scheme Procedure} gnome-desktop-service
9915 Return a service that adds the @code{gnome} package to the system
9916 profile, and extends polkit with the actions from
9917 @code{gnome-settings-daemon}.
9918 @end deffn
9920 @deffn {Scheme Procedure} xfce-desktop-service
9921 Return a service that adds the @code{xfce} package to the system profile,
9922 and extends polkit with the ability for @code{thunar} to manipulate the
9923 file system as root from within a user session, after the user has
9924 authenticated with the administrator's password.
9925 @end deffn
9927 Because the GNOME and XFCE desktop services pull in so many packages,
9928 the default @code{%desktop-services} variable doesn't include either of
9929 them by default.  To add GNOME or XFCE, just @code{cons} them onto
9930 @code{%desktop-services} in the @code{services} field of your
9931 @code{operating-system}:
9933 @example
9934 (use-modules (gnu))
9935 (use-service-modules desktop)
9936 (operating-system
9937   ...
9938   ;; cons* adds items to the list given as its last argument.
9939   (services (cons* (gnome-desktop-service)
9940                    (xfce-desktop-service)
9941                    %desktop-services))
9942   ...)
9943 @end example
9945 These desktop environments will then be available as options in the
9946 graphical login window.
9948 The actual service definitions included in @code{%desktop-services} and
9949 provided by @code{(gnu services dbus)} and @code{(gnu services desktop)}
9950 are described below.
9952 @deffn {Scheme Procedure} dbus-service [#:dbus @var{dbus}] [#:services '()]
9953 Return a service that runs the ``system bus'', using @var{dbus}, with
9954 support for @var{services}.
9956 @uref{http://dbus.freedesktop.org/, D-Bus} is an inter-process communication
9957 facility.  Its system bus is used to allow system services to communicate
9958 and to be notified of system-wide events.
9960 @var{services} must be a list of packages that provide an
9961 @file{etc/dbus-1/system.d} directory containing additional D-Bus configuration
9962 and policy files.  For example, to allow avahi-daemon to use the system bus,
9963 @var{services} must be equal to @code{(list avahi)}.
9964 @end deffn
9966 @deffn {Scheme Procedure} elogind-service [#:config @var{config}]
9967 Return a service that runs the @code{elogind} login and
9968 seat management daemon.  @uref{https://github.com/andywingo/elogind,
9969 Elogind} exposes a D-Bus interface that can be used to know which users
9970 are logged in, know what kind of sessions they have open, suspend the
9971 system, inhibit system suspend, reboot the system, and other tasks.
9973 Elogind handles most system-level power events for a computer, for
9974 example suspending the system when a lid is closed, or shutting it down
9975 when the power button is pressed.
9977 The @var{config} keyword argument specifies the configuration for
9978 elogind, and should be the result of an @code{(elogind-configuration
9979 (@var{parameter} @var{value})...)} invocation.  Available parameters and
9980 their default values are:
9982 @table @code
9983 @item kill-user-processes?
9984 @code{#f}
9985 @item kill-only-users
9986 @code{()}
9987 @item kill-exclude-users
9988 @code{("root")}
9989 @item inhibit-delay-max-seconds
9990 @code{5}
9991 @item handle-power-key
9992 @code{poweroff}
9993 @item handle-suspend-key
9994 @code{suspend}
9995 @item handle-hibernate-key
9996 @code{hibernate}
9997 @item handle-lid-switch
9998 @code{suspend}
9999 @item handle-lid-switch-docked
10000 @code{ignore}
10001 @item power-key-ignore-inhibited?
10002 @code{#f}
10003 @item suspend-key-ignore-inhibited?
10004 @code{#f}
10005 @item hibernate-key-ignore-inhibited?
10006 @code{#f}
10007 @item lid-switch-ignore-inhibited?
10008 @code{#t}
10009 @item holdoff-timeout-seconds
10010 @code{30}
10011 @item idle-action
10012 @code{ignore}
10013 @item idle-action-seconds
10014 @code{(* 30 60)}
10015 @item runtime-directory-size-percent
10016 @code{10}
10017 @item runtime-directory-size
10018 @code{#f}
10019 @item remove-ipc?
10020 @code{#t}
10021 @item suspend-state
10022 @code{("mem" "standby" "freeze")}
10023 @item suspend-mode
10024 @code{()}
10025 @item hibernate-state
10026 @code{("disk")}
10027 @item hibernate-mode
10028 @code{("platform" "shutdown")}
10029 @item hybrid-sleep-state
10030 @code{("disk")}
10031 @item hybrid-sleep-mode
10032 @code{("suspend" "platform" "shutdown")}
10033 @end table
10034 @end deffn
10036 @deffn {Scheme Procedure} polkit-service @
10037                          [#:polkit @var{polkit}]
10038 Return a service that runs the
10039 @uref{http://www.freedesktop.org/wiki/Software/polkit/, Polkit privilege
10040 management service}, which allows system administrators to grant access to
10041 privileged operations in a structured way.  By querying the Polkit service, a
10042 privileged system component can know when it should grant additional
10043 capabilities to ordinary users.  For example, an ordinary user can be granted
10044 the capability to suspend the system if the user is logged in locally.
10045 @end deffn
10047 @deffn {Scheme Procedure} upower-service [#:upower @var{upower}] @
10048                          [#:watts-up-pro? #f] @
10049                          [#:poll-batteries? #t] @
10050                          [#:ignore-lid? #f] @
10051                          [#:use-percentage-for-policy? #f] @
10052                          [#:percentage-low 10] @
10053                          [#:percentage-critical 3] @
10054                          [#:percentage-action 2] @
10055                          [#:time-low 1200] @
10056                          [#:time-critical 300] @
10057                          [#:time-action 120] @
10058                          [#:critical-power-action 'hybrid-sleep]
10059 Return a service that runs @uref{http://upower.freedesktop.org/,
10060 @command{upowerd}}, a system-wide monitor for power consumption and battery
10061 levels, with the given configuration settings.  It implements the
10062 @code{org.freedesktop.UPower} D-Bus interface, and is notably used by
10063 GNOME.
10064 @end deffn
10066 @deffn {Scheme Procedure} udisks-service [#:udisks @var{udisks}]
10067 Return a service for @uref{http://udisks.freedesktop.org/docs/latest/,
10068 UDisks}, a @dfn{disk management} daemon that provides user interfaces with
10069 notifications and ways to mount/unmount disks.  Programs that talk to UDisks
10070 include the @command{udisksctl} command, part of UDisks, and GNOME Disks.
10071 @end deffn
10073 @deffn {Scheme Procedure} colord-service [#:colord @var{colord}]
10074 Return a service that runs @command{colord}, a system service with a D-Bus
10075 interface to manage the color profiles of input and output devices such as
10076 screens and scanners.  It is notably used by the GNOME Color Manager graphical
10077 tool.  See @uref{http://www.freedesktop.org/software/colord/, the colord web
10078 site} for more information.
10079 @end deffn
10081 @deffn {Scheme Procedure} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()]
10082 Return a configuration allowing an application to access GeoClue
10083 location data.  @var{name} is the Desktop ID of the application, without
10084 the @code{.desktop} part.  If @var{allowed?} is true, the application
10085 will have access to location information by default.  The boolean
10086 @var{system?}  value indicates whether an application is a system component
10087 or not.  Finally @var{users} is a list of UIDs of all users for which
10088 this application is allowed location info access.  An empty users list
10089 means that all users are allowed.
10090 @end deffn
10092 @defvr {Scheme Variable} %standard-geoclue-applications
10093 The standard list of well-known GeoClue application configurations,
10094 granting authority to the GNOME date-and-time utility to ask for the
10095 current location in order to set the time zone, and allowing the
10096 IceCat and Epiphany web browsers to request location information.
10097 IceCat and Epiphany both query the user before allowing a web page to
10098 know the user's location.
10099 @end defvr
10101 @deffn {Scheme Procedure} geoclue-service [#:colord @var{colord}] @
10102                          [#:whitelist '()] @
10103                          [#:wifi-geolocation-url "https://location.services.mozilla.com/v1/geolocate?key=geoclue"] @
10104                          [#:submit-data? #f]
10105                          [#:wifi-submission-url "https://location.services.mozilla.com/v1/submit?key=geoclue"] @
10106                          [#:submission-nick "geoclue"] @
10107                          [#:applications %standard-geoclue-applications]
10108 Return a service that runs the GeoClue location service.  This service
10109 provides a D-Bus interface to allow applications to request access to a
10110 user's physical location, and optionally to add information to online
10111 location databases.  See
10112 @uref{https://wiki.freedesktop.org/www/Software/GeoClue/, the GeoClue
10113 web site} for more information.
10114 @end deffn
10116 @deffn {Scheme Procedure} bluetooth-service [#:bluez @var{bluez}]
10117 Return a service that runs the @command{bluetoothd} daemon, which manages
10118 all the Bluetooth devices and provides a number of D-Bus interfaces.
10120 Users need to be in the @code{lp} group to access the D-Bus service.
10121 @end deffn
10123 @node Database Services
10124 @subsubsection Database Services
10126 @cindex database
10127 @cindex SQL
10128 The @code{(gnu services databases)} module provides the following services.
10130 @deffn {Scheme Procedure} postgresql-service [#:postgresql postgresql] @
10131        [#:config-file] [#:data-directory ``/var/lib/postgresql/data'']
10132 Return a service that runs @var{postgresql}, the PostgreSQL database
10133 server.
10135 The PostgreSQL daemon loads its runtime configuration from
10136 @var{config-file} and stores the database cluster in
10137 @var{data-directory}.
10138 @end deffn
10140 @deffn {Scheme Procedure} mysql-service [#:config (mysql-configuration)]
10141 Return a service that runs @command{mysqld}, the MySQL or MariaDB
10142 database server.
10144 The optional @var{config} argument specifies the configuration for
10145 @command{mysqld}, which should be a @code{<mysql-configuration>} object.
10146 @end deffn
10148 @deftp {Data Type} mysql-configuration
10149 Data type representing the configuration of @var{mysql-service}.
10151 @table @asis
10152 @item @code{mysql} (default: @var{mariadb})
10153 Package object of the MySQL database server, can be either @var{mariadb}
10154 or @var{mysql}.
10156 For MySQL, a temporary root password will be displayed at activation time.
10157 For MariaDB, the root password is empty.
10158 @end table
10159 @end deftp
10161 @node Mail Services
10162 @subsubsection Mail Services
10164 @cindex mail
10165 @cindex email
10166 The @code{(gnu services mail)} module provides Guix service definitions
10167 for email services: IMAP, POP3, and LMTP servers, as well as mail
10168 transport agents (MTAs).  Lots of acronyms!  These services are detailed
10169 in the subsections below.
10171 @subsubheading Dovecot Service
10173 @deffn {Scheme Procedure} dovecot-service [#:config (dovecot-configuration)]
10174 Return a service that runs the Dovecot IMAP/POP3/LMTP mail server.
10175 @end deffn
10177 By default, Dovecot does not need much configuration; the default
10178 configuration object created by @code{(dovecot-configuration)} will
10179 suffice if your mail is delivered to @code{~/Maildir}.  A self-signed
10180 certificate will be generated for TLS-protected connections, though
10181 Dovecot will also listen on cleartext ports by default.  There are a
10182 number of options, though, which mail administrators might need to change,
10183 and as is the case with other services, Guix allows the system
10184 administrator to specify these parameters via a uniform Scheme interface.
10186 For example, to specify that mail is located at @code{maildir~/.mail},
10187 one would instantiate the Dovecot service like this:
10189 @example
10190 (dovecot-service #:config
10191                  (dovecot-configuration
10192                   (mail-location "maildir:~/.mail")))
10193 @end example
10195 The available configuration parameters follow.  Each parameter
10196 definition is preceded by its type; for example, @samp{string-list foo}
10197 indicates that the @code{foo} parameter should be specified as a list of
10198 strings.  There is also a way to specify the configuration as a string,
10199 if you have an old @code{dovecot.conf} file that you want to port over
10200 from some other system; see the end for more details.
10202 @c The following documentation was initially generated by
10203 @c (generate-documentation) in (gnu services mail).  Manually maintained
10204 @c documentation is better, so we shouldn't hesitate to edit below as
10205 @c needed.  However if the change you want to make to this documentation
10206 @c can be done in an automated way, it's probably easier to change
10207 @c (generate-documentation) than to make it below and have to deal with
10208 @c the churn as dovecot updates.
10210 Available @code{dovecot-configuration} fields are:
10212 @deftypevr {@code{dovecot-configuration} parameter} package dovecot
10213 The dovecot package.
10214 @end deftypevr
10216 @deftypevr {@code{dovecot-configuration} parameter} comma-separated-string-list listen
10217 A list of IPs or hosts where to listen for connections.  @samp{*}
10218 listens on all IPv4 interfaces, @samp{::} listens on all IPv6
10219 interfaces.  If you want to specify non-default ports or anything more
10220 complex, customize the address and port fields of the
10221 @samp{inet-listener} of the specific services you are interested in.
10222 @end deftypevr
10224 @deftypevr {@code{dovecot-configuration} parameter} protocol-configuration-list protocols
10225 List of protocols we want to serve.  Available protocols include
10226 @samp{imap}, @samp{pop3}, and @samp{lmtp}.
10228 Available @code{protocol-configuration} fields are:
10230 @deftypevr {@code{protocol-configuration} parameter} string name
10231 The name of the protocol.
10232 @end deftypevr
10234 @deftypevr {@code{protocol-configuration} parameter} string auth-socket-path
10235 UNIX socket path to the master authentication server to find users.
10236 This is used by imap (for shared users) and lda.
10237 It defaults to @samp{"/var/run/dovecot/auth-userdb"}.
10238 @end deftypevr
10240 @deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins
10241 Space separated list of plugins to load.
10242 @end deftypevr
10244 @deftypevr {@code{protocol-configuration} parameter} non-negative-integer mail-max-userip-connections
10245 Maximum number of IMAP connections allowed for a user from each IP
10246 address.  NOTE: The username is compared case-sensitively.
10247 Defaults to @samp{10}.
10248 @end deftypevr
10250 @end deftypevr
10252 @deftypevr {@code{dovecot-configuration} parameter} service-configuration-list services
10253 List of services to enable.  Available services include @samp{imap},
10254 @samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}, and
10255 @samp{lmtp}.
10257 Available @code{service-configuration} fields are:
10259 @deftypevr {@code{service-configuration} parameter} string kind
10260 The service kind.  Valid values include @code{director},
10261 @code{imap-login}, @code{pop3-login}, @code{lmtp}, @code{imap},
10262 @code{pop3}, @code{auth}, @code{auth-worker}, @code{dict},
10263 @code{tcpwrap}, @code{quota-warning}, or anything else.
10264 @end deftypevr
10266 @deftypevr {@code{service-configuration} parameter} listener-configuration-list listeners
10267 Listeners for the service.  A listener is either a
10268 @code{unix-listener-configuration}, a @code{fifo-listener-configuration}, or
10269 an @code{inet-listener-configuration}.
10270 Defaults to @samp{()}.
10272 Available @code{unix-listener-configuration} fields are:
10274 @deftypevr {@code{unix-listener-configuration} parameter} file-name path
10275 The file name on which to listen.
10276 @end deftypevr
10278 @deftypevr {@code{unix-listener-configuration} parameter} string mode
10279 The access mode for the socket.
10280 Defaults to @samp{"0600"}.
10281 @end deftypevr
10283 @deftypevr {@code{unix-listener-configuration} parameter} string user
10284 The user to own the socket.
10285 Defaults to @samp{""}.
10286 @end deftypevr
10288 @deftypevr {@code{unix-listener-configuration} parameter} string group
10289 The group to own the socket.
10290 Defaults to @samp{""}.
10291 @end deftypevr
10294 Available @code{fifo-listener-configuration} fields are:
10296 @deftypevr {@code{fifo-listener-configuration} parameter} file-name path
10297 The file name on which to listen.
10298 @end deftypevr
10300 @deftypevr {@code{fifo-listener-configuration} parameter} string mode
10301 The access mode for the socket.
10302 Defaults to @samp{"0600"}.
10303 @end deftypevr
10305 @deftypevr {@code{fifo-listener-configuration} parameter} string user
10306 The user to own the socket.
10307 Defaults to @samp{""}.
10308 @end deftypevr
10310 @deftypevr {@code{fifo-listener-configuration} parameter} string group
10311 The group to own the socket.
10312 Defaults to @samp{""}.
10313 @end deftypevr
10316 Available @code{inet-listener-configuration} fields are:
10318 @deftypevr {@code{inet-listener-configuration} parameter} string protocol
10319 The protocol to listen for.
10320 @end deftypevr
10322 @deftypevr {@code{inet-listener-configuration} parameter} string address
10323 The address on which to listen, or empty for all addresses.
10324 Defaults to @samp{""}.
10325 @end deftypevr
10327 @deftypevr {@code{inet-listener-configuration} parameter} non-negative-integer port
10328 The port on which to listen.
10329 @end deftypevr
10331 @deftypevr {@code{inet-listener-configuration} parameter} boolean ssl?
10332 Whether to use SSL for this service; @samp{yes}, @samp{no}, or
10333 @samp{required}.
10334 Defaults to @samp{#t}.
10335 @end deftypevr
10337 @end deftypevr
10339 @deftypevr {@code{service-configuration} parameter} non-negative-integer service-count
10340 Number of connections to handle before starting a new process.
10341 Typically the only useful values are 0 (unlimited) or 1.  1 is more
10342 secure, but 0 is faster.  <doc/wiki/LoginProcess.txt>.
10343 Defaults to @samp{1}.
10344 @end deftypevr
10346 @deftypevr {@code{service-configuration} parameter} non-negative-integer process-min-avail
10347 Number of processes to always keep waiting for more connections.
10348 Defaults to @samp{0}.
10349 @end deftypevr
10351 @deftypevr {@code{service-configuration} parameter} non-negative-integer vsz-limit
10352 If you set @samp{service-count 0}, you probably need to grow
10353 this.
10354 Defaults to @samp{256000000}.
10355 @end deftypevr
10357 @end deftypevr
10359 @deftypevr {@code{dovecot-configuration} parameter} dict-configuration dict
10360 Dict configuration, as created by the @code{dict-configuration}
10361 constructor.
10363 Available @code{dict-configuration} fields are:
10365 @deftypevr {@code{dict-configuration} parameter} free-form-fields entries
10366 A list of key-value pairs that this dict should hold.
10367 Defaults to @samp{()}.
10368 @end deftypevr
10370 @end deftypevr
10372 @deftypevr {@code{dovecot-configuration} parameter} passdb-configuration-list passdbs
10373 A list of passdb configurations, each one created by the
10374 @code{passdb-configuration} constructor.
10376 Available @code{passdb-configuration} fields are:
10378 @deftypevr {@code{passdb-configuration} parameter} string driver
10379 The driver that the passdb should use.  Valid values include
10380 @samp{pam}, @samp{passwd}, @samp{shadow}, @samp{bsdauth}, and
10381 @samp{static}.
10382 Defaults to @samp{"pam"}.
10383 @end deftypevr
10385 @deftypevr {@code{passdb-configuration} parameter} free-form-args args
10386 A list of key-value args to the passdb driver.
10387 Defaults to @samp{()}.
10388 @end deftypevr
10390 @end deftypevr
10392 @deftypevr {@code{dovecot-configuration} parameter} userdb-configuration-list userdbs
10393 List of userdb configurations, each one created by the
10394 @code{userdb-configuration} constructor.
10396 Available @code{userdb-configuration} fields are:
10398 @deftypevr {@code{userdb-configuration} parameter} string driver
10399 The driver that the userdb should use.  Valid values include
10400 @samp{passwd} and @samp{static}.
10401 Defaults to @samp{"passwd"}.
10402 @end deftypevr
10404 @deftypevr {@code{userdb-configuration} parameter} free-form-args args
10405 A list of key-value args to the userdb driver.
10406 Defaults to @samp{()}.
10407 @end deftypevr
10409 @deftypevr {@code{userdb-configuration} parameter} free-form-args override-fields
10410 Override fields from passwd.
10411 Defaults to @samp{()}.
10412 @end deftypevr
10414 @end deftypevr
10416 @deftypevr {@code{dovecot-configuration} parameter} plugin-configuration plugin-configuration
10417 Plug-in configuration, created by the @code{plugin-configuration}
10418 constructor.
10419 @end deftypevr
10421 @deftypevr {@code{dovecot-configuration} parameter} list-of-namespace-configuration namespaces
10422 List of namespaces.  Each item in the list is created by the
10423 @code{namespace-configuration} constructor.
10425 Available @code{namespace-configuration} fields are:
10427 @deftypevr {@code{namespace-configuration} parameter} string name
10428 Name for this namespace.
10429 @end deftypevr
10431 @deftypevr {@code{namespace-configuration} parameter} string type
10432 Namespace type: @samp{private}, @samp{shared} or @samp{public}.
10433 Defaults to @samp{"private"}.
10434 @end deftypevr
10436 @deftypevr {@code{namespace-configuration} parameter} string separator
10437 Hierarchy separator to use. You should use the same separator for
10438 all namespaces or some clients get confused.  @samp{/} is usually a good
10439 one.  The default however depends on the underlying mail storage
10440 format.
10441 Defaults to @samp{""}.
10442 @end deftypevr
10444 @deftypevr {@code{namespace-configuration} parameter} string prefix
10445 Prefix required to access this namespace.  This needs to be
10446 different for all namespaces. For example @samp{Public/}.
10447 Defaults to @samp{""}.
10448 @end deftypevr
10450 @deftypevr {@code{namespace-configuration} parameter} string location
10451 Physical location of the mailbox. This is in the same format as
10452 mail_location, which is also the default for it.
10453 Defaults to @samp{""}.
10454 @end deftypevr
10456 @deftypevr {@code{namespace-configuration} parameter} boolean inbox?
10457 There can be only one INBOX, and this setting defines which
10458 namespace has it.
10459 Defaults to @samp{#f}.
10460 @end deftypevr
10462 @deftypevr {@code{namespace-configuration} parameter} boolean hidden?
10463 If namespace is hidden, it's not advertised to clients via NAMESPACE
10464 extension. You'll most likely also want to set @samp{list? #f}.  This is mostly
10465 useful when converting from another server with different namespaces
10466 which you want to deprecate but still keep working.  For example you can
10467 create hidden namespaces with prefixes @samp{~/mail/}, @samp{~%u/mail/}
10468 and @samp{mail/}.
10469 Defaults to @samp{#f}.
10470 @end deftypevr
10472 @deftypevr {@code{namespace-configuration} parameter} boolean list?
10473 Show the mailboxes under this namespace with the LIST command. This
10474 makes the namespace visible for clients that do not support the NAMESPACE
10475 extension.  The special @code{children} value lists child mailboxes, but
10476 hides the namespace prefix.
10477 Defaults to @samp{#t}.
10478 @end deftypevr
10480 @deftypevr {@code{namespace-configuration} parameter} boolean subscriptions?
10481 Namespace handles its own subscriptions.  If set to @code{#f}, the
10482 parent namespace handles them.  The empty prefix should always have this
10483 as @code{#t}).
10484 Defaults to @samp{#t}.
10485 @end deftypevr
10487 @deftypevr {@code{namespace-configuration} parameter} mailbox-configuration-list mailboxes
10488 List of predefined mailboxes in this namespace.
10489 Defaults to @samp{()}.
10491 Available @code{mailbox-configuration} fields are:
10493 @deftypevr {@code{mailbox-configuration} parameter} string name
10494 Name for this mailbox.
10495 @end deftypevr
10497 @deftypevr {@code{mailbox-configuration} parameter} string auto
10498 @samp{create} will automatically create this mailbox.
10499 @samp{subscribe} will both create and subscribe to the mailbox.
10500 Defaults to @samp{"no"}.
10501 @end deftypevr
10503 @deftypevr {@code{mailbox-configuration} parameter} space-separated-string-list special-use
10504 List of IMAP @code{SPECIAL-USE} attributes as specified by RFC 6154.
10505 Valid values are @code{\All}, @code{\Archive}, @code{\Drafts},
10506 @code{\Flagged}, @code{\Junk}, @code{\Sent}, and @code{\Trash}.
10507 Defaults to @samp{()}.
10508 @end deftypevr
10510 @end deftypevr
10512 @end deftypevr
10514 @deftypevr {@code{dovecot-configuration} parameter} file-name base-dir
10515 Base directory where to store runtime data.
10516 Defaults to @samp{"/var/run/dovecot/"}.
10517 @end deftypevr
10519 @deftypevr {@code{dovecot-configuration} parameter} string login-greeting
10520 Greeting message for clients.
10521 Defaults to @samp{"Dovecot ready."}.
10522 @end deftypevr
10524 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-trusted-networks
10525 List of trusted network ranges.  Connections from these IPs are
10526 allowed to override their IP addresses and ports (for logging and for
10527 authentication checks).  @samp{disable-plaintext-auth} is also ignored
10528 for these networks.  Typically you would specify your IMAP proxy servers
10529 here.
10530 Defaults to @samp{()}.
10531 @end deftypevr
10533 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-access-sockets
10534 List of login access check sockets (e.g. tcpwrap).
10535 Defaults to @samp{()}.
10536 @end deftypevr
10538 @deftypevr {@code{dovecot-configuration} parameter} boolean verbose-proctitle?
10539 Show more verbose process titles (in ps).  Currently shows user name
10540 and IP address.  Useful for seeing who is actually using the IMAP
10541 processes (e.g. shared mailboxes or if the same uid is used for multiple
10542 accounts).
10543 Defaults to @samp{#f}.
10544 @end deftypevr
10546 @deftypevr {@code{dovecot-configuration} parameter} boolean shutdown-clients?
10547 Should all processes be killed when Dovecot master process shuts down.
10548 Setting this to @code{#f} means that Dovecot can be upgraded without
10549 forcing existing client connections to close (although that could also
10550 be a problem if the upgrade is e.g. due to a security fix).
10551 Defaults to @samp{#t}.
10552 @end deftypevr
10554 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer doveadm-worker-count
10555 If non-zero, run mail commands via this many connections to doveadm
10556 server, instead of running them directly in the same process.
10557 Defaults to @samp{0}.
10558 @end deftypevr
10560 @deftypevr {@code{dovecot-configuration} parameter} string doveadm-socket-path
10561 UNIX socket or host:port used for connecting to doveadm server.
10562 Defaults to @samp{"doveadm-server"}.
10563 @end deftypevr
10565 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list import-environment
10566 List of environment variables that are preserved on Dovecot startup
10567 and passed down to all of its child processes.  You can also give
10568 key=value pairs to always set specific settings.
10569 @end deftypevr
10571 @deftypevr {@code{dovecot-configuration} parameter} boolean disable-plaintext-auth?
10572 Disable LOGIN command and all other plaintext authentications unless
10573 SSL/TLS is used (LOGINDISABLED capability).  Note that if the remote IP
10574 matches the local IP (i.e. you're connecting from the same computer),
10575 the connection is considered secure and plaintext authentication is
10576 allowed.  See also ssl=required setting.
10577 Defaults to @samp{#t}.
10578 @end deftypevr
10580 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-cache-size
10581 Authentication cache size (e.g. @samp{#e10e6}).  0 means it's disabled.
10582 Note that bsdauth, PAM and vpopmail require @samp{cache-key} to be set
10583 for caching to be used.
10584 Defaults to @samp{0}.
10585 @end deftypevr
10587 @deftypevr {@code{dovecot-configuration} parameter} string auth-cache-ttl
10588 Time to live for cached data.  After TTL expires the cached record
10589 is no longer used, *except* if the main database lookup returns internal
10590 failure.  We also try to handle password changes automatically: If
10591 user's previous authentication was successful, but this one wasn't, the
10592 cache isn't used.  For now this works only with plaintext
10593 authentication.
10594 Defaults to @samp{"1 hour"}.
10595 @end deftypevr
10597 @deftypevr {@code{dovecot-configuration} parameter} string auth-cache-negative-ttl
10598 TTL for negative hits (user not found, password mismatch).
10599 0 disables caching them completely.
10600 Defaults to @samp{"1 hour"}.
10601 @end deftypevr
10603 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-realms
10604 List of realms for SASL authentication mechanisms that need them.
10605 You can leave it empty if you don't want to support multiple realms.
10606 Many clients simply use the first one listed here, so keep the default
10607 realm first.
10608 Defaults to @samp{()}.
10609 @end deftypevr
10611 @deftypevr {@code{dovecot-configuration} parameter} string auth-default-realm
10612 Default realm/domain to use if none was specified.  This is used for
10613 both SASL realms and appending @@domain to username in plaintext
10614 logins.
10615 Defaults to @samp{""}.
10616 @end deftypevr
10618 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-chars
10619 List of allowed characters in username.  If the user-given username
10620 contains a character not listed in here, the login automatically fails.
10621 This is just an extra check to make sure user can't exploit any
10622 potential quote escaping vulnerabilities with SQL/LDAP databases.  If
10623 you want to allow all characters, set this value to empty.
10624 Defaults to @samp{"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@@"}.
10625 @end deftypevr
10627 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-translation
10628 Username character translations before it's looked up from
10629 databases.  The value contains series of from -> to characters.  For
10630 example @samp{#@@/@@} means that @samp{#} and @samp{/} characters are
10631 translated to @samp{@@}.
10632 Defaults to @samp{""}.
10633 @end deftypevr
10635 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-format
10636 Username formatting before it's looked up from databases.  You can
10637 use the standard variables here, e.g. %Lu would lowercase the username,
10638 %n would drop away the domain if it was given, or @samp{%n-AT-%d} would
10639 change the @samp{@@} into @samp{-AT-}.  This translation is done after
10640 @samp{auth-username-translation} changes.
10641 Defaults to @samp{"%Lu"}.
10642 @end deftypevr
10644 @deftypevr {@code{dovecot-configuration} parameter} string auth-master-user-separator
10645 If you want to allow master users to log in by specifying the master
10646 username within the normal username string (i.e. not using SASL
10647 mechanism's support for it), you can specify the separator character
10648 here.  The format is then <username><separator><master username>.
10649 UW-IMAP uses @samp{*} as the separator, so that could be a good
10650 choice.
10651 Defaults to @samp{""}.
10652 @end deftypevr
10654 @deftypevr {@code{dovecot-configuration} parameter} string auth-anonymous-username
10655 Username to use for users logging in with ANONYMOUS SASL
10656 mechanism.
10657 Defaults to @samp{"anonymous"}.
10658 @end deftypevr
10660 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-worker-max-count
10661 Maximum number of dovecot-auth worker processes.  They're used to
10662 execute blocking passdb and userdb queries (e.g. MySQL and PAM).
10663 They're automatically created and destroyed as needed.
10664 Defaults to @samp{30}.
10665 @end deftypevr
10667 @deftypevr {@code{dovecot-configuration} parameter} string auth-gssapi-hostname
10668 Host name to use in GSSAPI principal names.  The default is to use
10669 the name returned by gethostname().  Use @samp{$ALL} (with quotes) to
10670 allow all keytab entries.
10671 Defaults to @samp{""}.
10672 @end deftypevr
10674 @deftypevr {@code{dovecot-configuration} parameter} string auth-krb5-keytab
10675 Kerberos keytab to use for the GSSAPI mechanism.  Will use the
10676 system default (usually @file{/etc/krb5.keytab}) if not specified.  You may
10677 need to change the auth service to run as root to be able to read this
10678 file.
10679 Defaults to @samp{""}.
10680 @end deftypevr
10682 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-use-winbind?
10683 Do NTLM and GSS-SPNEGO authentication using Samba's winbind daemon
10684 and @samp{ntlm-auth} helper.
10685 <doc/wiki/Authentication/Mechanisms/Winbind.txt>.
10686 Defaults to @samp{#f}.
10687 @end deftypevr
10689 @deftypevr {@code{dovecot-configuration} parameter} file-name auth-winbind-helper-path
10690 Path for Samba's @samp{ntlm-auth} helper binary.
10691 Defaults to @samp{"/usr/bin/ntlm_auth"}.
10692 @end deftypevr
10694 @deftypevr {@code{dovecot-configuration} parameter} string auth-failure-delay
10695 Time to delay before replying to failed authentications.
10696 Defaults to @samp{"2 secs"}.
10697 @end deftypevr
10699 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-require-client-cert?
10700 Require a valid SSL client certificate or the authentication
10701 fails.
10702 Defaults to @samp{#f}.
10703 @end deftypevr
10705 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-username-from-cert?
10706 Take the username from client's SSL certificate, using
10707 @code{X509_NAME_get_text_by_NID()} which returns the subject's DN's
10708 CommonName.
10709 Defaults to @samp{#f}.
10710 @end deftypevr
10712 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-mechanisms
10713 List of wanted authentication mechanisms.  Supported mechanisms are:
10714 @samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
10715 @samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
10716 @samp{otp}, @samp{skey}, and @samp{gss-spnego}.  NOTE: See also
10717 @samp{disable-plaintext-auth} setting.
10718 @end deftypevr
10720 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-servers
10721 List of IPs or hostnames to all director servers, including ourself.
10722 Ports can be specified as ip:port.  The default port is the same as what
10723 director service's @samp{inet-listener} is using.
10724 Defaults to @samp{()}.
10725 @end deftypevr
10727 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-mail-servers
10728 List of IPs or hostnames to all backend mail servers.  Ranges are
10729 allowed too, like 10.0.0.10-10.0.0.30.
10730 Defaults to @samp{()}.
10731 @end deftypevr
10733 @deftypevr {@code{dovecot-configuration} parameter} string director-user-expire
10734 How long to redirect users to a specific server after it no longer
10735 has any connections.
10736 Defaults to @samp{"15 min"}.
10737 @end deftypevr
10739 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer director-doveadm-port
10740 TCP/IP port that accepts doveadm connections (instead of director
10741 connections) If you enable this, you'll also need to add
10742 @samp{inet-listener} for the port.
10743 Defaults to @samp{0}.
10744 @end deftypevr
10746 @deftypevr {@code{dovecot-configuration} parameter} string director-username-hash
10747 How the username is translated before being hashed.  Useful values
10748 include %Ln if user can log in with or without @@domain, %Ld if mailboxes
10749 are shared within domain.
10750 Defaults to @samp{"%Lu"}.
10751 @end deftypevr
10753 @deftypevr {@code{dovecot-configuration} parameter} string log-path
10754 Log file to use for error messages.  @samp{syslog} logs to syslog,
10755 @samp{/dev/stderr} logs to stderr.
10756 Defaults to @samp{"syslog"}.
10757 @end deftypevr
10759 @deftypevr {@code{dovecot-configuration} parameter} string info-log-path
10760 Log file to use for informational messages.  Defaults to
10761 @samp{log-path}.
10762 Defaults to @samp{""}.
10763 @end deftypevr
10765 @deftypevr {@code{dovecot-configuration} parameter} string debug-log-path
10766 Log file to use for debug messages.  Defaults to
10767 @samp{info-log-path}.
10768 Defaults to @samp{""}.
10769 @end deftypevr
10771 @deftypevr {@code{dovecot-configuration} parameter} string syslog-facility
10772 Syslog facility to use if you're logging to syslog.  Usually if you
10773 don't want to use @samp{mail}, you'll use local0..local7.  Also other
10774 standard facilities are supported.
10775 Defaults to @samp{"mail"}.
10776 @end deftypevr
10778 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose?
10779 Log unsuccessful authentication attempts and the reasons why they
10780 failed.
10781 Defaults to @samp{#f}.
10782 @end deftypevr
10784 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose-passwords?
10785 In case of password mismatches, log the attempted password.  Valid
10786 values are no, plain and sha1.  sha1 can be useful for detecting brute
10787 force password attempts vs.  user simply trying the same password over
10788 and over again.  You can also truncate the value to n chars by appending
10789 ":n" (e.g. sha1:6).
10790 Defaults to @samp{#f}.
10791 @end deftypevr
10793 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug?
10794 Even more verbose logging for debugging purposes.  Shows for example
10795 SQL queries.
10796 Defaults to @samp{#f}.
10797 @end deftypevr
10799 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug-passwords?
10800 In case of password mismatches, log the passwords and used scheme so
10801 the problem can be debugged.  Enabling this also enables
10802 @samp{auth-debug}.
10803 Defaults to @samp{#f}.
10804 @end deftypevr
10806 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-debug?
10807 Enable mail process debugging.  This can help you figure out why
10808 Dovecot isn't finding your mails.
10809 Defaults to @samp{#f}.
10810 @end deftypevr
10812 @deftypevr {@code{dovecot-configuration} parameter} boolean verbose-ssl?
10813 Show protocol level SSL errors.
10814 Defaults to @samp{#f}.
10815 @end deftypevr
10817 @deftypevr {@code{dovecot-configuration} parameter} string log-timestamp
10818 Prefix for each line written to log file.  % codes are in
10819 strftime(3) format.
10820 Defaults to @samp{"\"%b %d %H:%M:%S \""}.
10821 @end deftypevr
10823 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-log-format-elements
10824 List of elements we want to log.  The elements which have a
10825 non-empty variable value are joined together to form a comma-separated
10826 string.
10827 @end deftypevr
10829 @deftypevr {@code{dovecot-configuration} parameter} string login-log-format
10830 Login log format.  %s contains @samp{login-log-format-elements}
10831 string, %$ contains the data we want to log.
10832 Defaults to @samp{"%$: %s"}.
10833 @end deftypevr
10835 @deftypevr {@code{dovecot-configuration} parameter} string mail-log-prefix
10836 Log prefix for mail processes.  See doc/wiki/Variables.txt for list
10837 of possible variables you can use.
10838 Defaults to @samp{"\"%s(%u): \""}.
10839 @end deftypevr
10841 @deftypevr {@code{dovecot-configuration} parameter} string deliver-log-format
10842 Format to use for logging mail deliveries.  You can use variables:
10843 @table @code
10844 @item %$
10845 Delivery status message (e.g. @samp{saved to INBOX})
10846 @item %m
10847 Message-ID
10848 @item %s
10849 Subject
10850 @item %f
10851 From address
10852 @item %p
10853 Physical size
10854 @item %w
10855 Virtual size.
10856 @end table
10857 Defaults to @samp{"msgid=%m: %$"}.
10858 @end deftypevr
10860 @deftypevr {@code{dovecot-configuration} parameter} string mail-location
10861 Location for users' mailboxes.  The default is empty, which means
10862 that Dovecot tries to find the mailboxes automatically.  This won't work
10863 if the user doesn't yet have any mail, so you should explicitly tell
10864 Dovecot the full location.
10866 If you're using mbox, giving a path to the INBOX
10867 file (e.g. /var/mail/%u) isn't enough.  You'll also need to tell Dovecot
10868 where the other mailboxes are kept.  This is called the "root mail
10869 directory", and it must be the first path given in the
10870 @samp{mail-location} setting.
10872 There are a few special variables you can use, eg.:
10874 @table @samp
10875 @item %u
10876 username
10877 @item %n
10878 user part in user@@domain, same as %u if there's no domain
10879 @item %d
10880 domain part in user@@domain, empty if there's no domain
10881 @item %h
10882 home director
10883 @end table
10885 See doc/wiki/Variables.txt for full list.  Some examples:
10886 @table @samp
10887 @item maildir:~/Maildir
10888 @item mbox:~/mail:INBOX=/var/mail/%u
10889 @item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
10890 @end table
10891 Defaults to @samp{""}.
10892 @end deftypevr
10894 @deftypevr {@code{dovecot-configuration} parameter} string mail-uid
10895 System user and group used to access mails.  If you use multiple,
10896 userdb can override these by returning uid or gid fields.  You can use
10897 either numbers or names.  <doc/wiki/UserIds.txt>.
10898 Defaults to @samp{""}.
10899 @end deftypevr
10901 @deftypevr {@code{dovecot-configuration} parameter} string mail-gid
10903 Defaults to @samp{""}.
10904 @end deftypevr
10906 @deftypevr {@code{dovecot-configuration} parameter} string mail-privileged-group
10907 Group to enable temporarily for privileged operations.  Currently
10908 this is used only with INBOX when either its initial creation or
10909 dotlocking fails.  Typically this is set to "mail" to give access to
10910 /var/mail.
10911 Defaults to @samp{""}.
10912 @end deftypevr
10914 @deftypevr {@code{dovecot-configuration} parameter} string mail-access-groups
10915 Grant access to these supplementary groups for mail processes.
10916 Typically these are used to set up access to shared mailboxes.  Note
10917 that it may be dangerous to set these if users can create
10918 symlinks (e.g. if "mail" group is set here, ln -s /var/mail ~/mail/var
10919 could allow a user to delete others' mailboxes, or ln -s
10920 /secret/shared/box ~/mail/mybox would allow reading it).
10921 Defaults to @samp{""}.
10922 @end deftypevr
10924 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-full-filesystem-access?
10925 Allow full file system access to clients.  There's no access checks
10926 other than what the operating system does for the active UID/GID.  It
10927 works with both maildir and mboxes, allowing you to prefix mailboxes
10928 names with e.g. /path/ or ~user/.
10929 Defaults to @samp{#f}.
10930 @end deftypevr
10932 @deftypevr {@code{dovecot-configuration} parameter} boolean mmap-disable?
10933 Don't use mmap() at all.  This is required if you store indexes to
10934 shared file systems (NFS or clustered file system).
10935 Defaults to @samp{#f}.
10936 @end deftypevr
10938 @deftypevr {@code{dovecot-configuration} parameter} boolean dotlock-use-excl?
10939 Rely on @samp{O_EXCL} to work when creating dotlock files.  NFS
10940 supports @samp{O_EXCL} since version 3, so this should be safe to use
10941 nowadays by default.
10942 Defaults to @samp{#t}.
10943 @end deftypevr
10945 @deftypevr {@code{dovecot-configuration} parameter} string mail-fsync
10946 When to use fsync() or fdatasync() calls:
10947 @table @code
10948 @item optimized
10949 Whenever necessary to avoid losing important data
10950 @item always
10951 Useful with e.g. NFS when write()s are delayed
10952 @item never
10953 Never use it (best performance, but crashes can lose data).
10954 @end table
10955 Defaults to @samp{"optimized"}.
10956 @end deftypevr
10958 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-storage?
10959 Mail storage exists in NFS.  Set this to yes to make Dovecot flush
10960 NFS caches whenever needed.  If you're using only a single mail server
10961 this isn't needed.
10962 Defaults to @samp{#f}.
10963 @end deftypevr
10965 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-index?
10966 Mail index files also exist in NFS.  Setting this to yes requires
10967 @samp{mmap-disable? #t} and @samp{fsync-disable? #f}.
10968 Defaults to @samp{#f}.
10969 @end deftypevr
10971 @deftypevr {@code{dovecot-configuration} parameter} string lock-method
10972 Locking method for index files.  Alternatives are fcntl, flock and
10973 dotlock.  Dotlocking uses some tricks which may create more disk I/O
10974 than other locking methods.  NFS users: flock doesn't work, remember to
10975 change @samp{mmap-disable}.
10976 Defaults to @samp{"fcntl"}.
10977 @end deftypevr
10979 @deftypevr {@code{dovecot-configuration} parameter} file-name mail-temp-dir
10980 Directory in which LDA/LMTP temporarily stores incoming mails >128
10982 Defaults to @samp{"/tmp"}.
10983 @end deftypevr
10985 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-uid
10986 Valid UID range for users.  This is mostly to make sure that users can't
10987 log in as daemons or other system users.  Note that denying root logins is
10988 hardcoded to dovecot binary and can't be done even if @samp{first-valid-uid}
10989 is set to 0.
10990 Defaults to @samp{500}.
10991 @end deftypevr
10993 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-uid
10995 Defaults to @samp{0}.
10996 @end deftypevr
10998 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-gid
10999 Valid GID range for users.  Users having non-valid GID as primary group ID
11000 aren't allowed to log in.  If user belongs to supplementary groups with
11001 non-valid GIDs, those groups are not set.
11002 Defaults to @samp{1}.
11003 @end deftypevr
11005 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-gid
11007 Defaults to @samp{0}.
11008 @end deftypevr
11010 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-max-keyword-length
11011 Maximum allowed length for mail keyword name.  It's only forced when
11012 trying to create new keywords.
11013 Defaults to @samp{50}.
11014 @end deftypevr
11016 @deftypevr {@code{dovecot-configuration} parameter} colon-separated-file-name-list valid-chroot-dirs
11017 List of directories under which chrooting is allowed for mail
11018 processes (i.e. /var/mail will allow chrooting to /var/mail/foo/bar
11019 too).  This setting doesn't affect @samp{login-chroot}
11020 @samp{mail-chroot} or auth chroot settings.  If this setting is empty,
11021 "/./" in home dirs are ignored.  WARNING: Never add directories here
11022 which local users can modify, that may lead to root exploit.  Usually
11023 this should be done only if you don't allow shell access for users.
11024 <doc/wiki/Chrooting.txt>.
11025 Defaults to @samp{()}.
11026 @end deftypevr
11028 @deftypevr {@code{dovecot-configuration} parameter} string mail-chroot
11029 Default chroot directory for mail processes.  This can be overridden
11030 for specific users in user database by giving /./ in user's home
11031 directory (e.g. /home/./user chroots into /home).  Note that usually
11032 there is no real need to do chrooting, Dovecot doesn't allow users to
11033 access files outside their mail directory anyway.  If your home
11034 directories are prefixed with the chroot directory, append "/." to
11035 @samp{mail-chroot}.  <doc/wiki/Chrooting.txt>.
11036 Defaults to @samp{""}.
11037 @end deftypevr
11039 @deftypevr {@code{dovecot-configuration} parameter} file-name auth-socket-path
11040 UNIX socket path to master authentication server to find users.
11041 This is used by imap (for shared users) and lda.
11042 Defaults to @samp{"/var/run/dovecot/auth-userdb"}.
11043 @end deftypevr
11045 @deftypevr {@code{dovecot-configuration} parameter} file-name mail-plugin-dir
11046 Directory where to look up mail plugins.
11047 Defaults to @samp{"/usr/lib/dovecot"}.
11048 @end deftypevr
11050 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mail-plugins
11051 List of plugins to load for all services.  Plugins specific to IMAP,
11052 LDA, etc. are added to this list in their own .conf files.
11053 Defaults to @samp{()}.
11054 @end deftypevr
11056 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-cache-min-mail-count
11057 The minimum number of mails in a mailbox before updates are done to
11058 cache file.  This allows optimizing Dovecot's behavior to do less disk
11059 writes at the cost of more disk reads.
11060 Defaults to @samp{0}.
11061 @end deftypevr
11063 @deftypevr {@code{dovecot-configuration} parameter} string mailbox-idle-check-interval
11064 When IDLE command is running, mailbox is checked once in a while to
11065 see if there are any new mails or other changes.  This setting defines
11066 the minimum time to wait between those checks.  Dovecot can also use
11067 dnotify, inotify and kqueue to find out immediately when changes
11068 occur.
11069 Defaults to @samp{"30 secs"}.
11070 @end deftypevr
11072 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-save-crlf?
11073 Save mails with CR+LF instead of plain LF.  This makes sending those
11074 mails take less CPU, especially with sendfile() syscall with Linux and
11075 FreeBSD.  But it also creates a bit more disk I/O which may just make it
11076 slower.  Also note that if other software reads the mboxes/maildirs,
11077 they may handle the extra CRs wrong and cause problems.
11078 Defaults to @samp{#f}.
11079 @end deftypevr
11081 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-stat-dirs?
11082 By default LIST command returns all entries in maildir beginning
11083 with a dot.  Enabling this option makes Dovecot return only entries
11084 which are directories.  This is done by stat()ing each entry, so it
11085 causes more disk I/O.
11086  (For systems setting struct @samp{dirent->d_type} this check is free
11087 and it's done always regardless of this setting).
11088 Defaults to @samp{#f}.
11089 @end deftypevr
11091 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-copy-with-hardlinks?
11092 When copying a message, do it with hard links whenever possible.
11093 This makes the performance much better, and it's unlikely to have any
11094 side effects.
11095 Defaults to @samp{#t}.
11096 @end deftypevr
11098 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-very-dirty-syncs?
11099 Assume Dovecot is the only MUA accessing Maildir: Scan cur/
11100 directory only when its mtime changes unexpectedly or when we can't find
11101 the mail otherwise.
11102 Defaults to @samp{#f}.
11103 @end deftypevr
11105 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-read-locks
11106 Which locking methods to use for locking mbox.  There are four
11107 available:
11109 @table @code
11110 @item dotlock
11111 Create <mailbox>.lock file.  This is the oldest and most NFS-safe
11112 solution.  If you want to use /var/mail/ like directory, the users will
11113 need write access to that directory.
11114 @item dotlock-try
11115 Same as dotlock, but if it fails because of permissions or because there
11116 isn't enough disk space, just skip it.
11117 @item fcntl
11118 Use this if possible.  Works with NFS too if lockd is used.
11119 @item flock
11120 May not exist in all systems.  Doesn't work with NFS.
11121 @item lockf
11122 May not exist in all systems.  Doesn't work with NFS.
11123 @end table
11125 You can use multiple locking methods; if you do the order they're declared
11126 in is important to avoid deadlocks if other MTAs/MUAs are using multiple
11127 locking methods as well.  Some operating systems don't allow using some of
11128 them simultaneously.
11129 @end deftypevr
11131 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-write-locks
11133 @end deftypevr
11135 @deftypevr {@code{dovecot-configuration} parameter} string mbox-lock-timeout
11136 Maximum time to wait for lock (all of them) before aborting.
11137 Defaults to @samp{"5 mins"}.
11138 @end deftypevr
11140 @deftypevr {@code{dovecot-configuration} parameter} string mbox-dotlock-change-timeout
11141 If dotlock exists but the mailbox isn't modified in any way,
11142 override the lock file after this much time.
11143 Defaults to @samp{"2 mins"}.
11144 @end deftypevr
11146 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-dirty-syncs?
11147 When mbox changes unexpectedly we have to fully read it to find out
11148 what changed.  If the mbox is large this can take a long time.  Since
11149 the change is usually just a newly appended mail, it'd be faster to
11150 simply read the new mails.  If this setting is enabled, Dovecot does
11151 this but still safely fallbacks to re-reading the whole mbox file
11152 whenever something in mbox isn't how it's expected to be.  The only real
11153 downside to this setting is that if some other MUA changes message
11154 flags, Dovecot doesn't notice it immediately.  Note that a full sync is
11155 done with SELECT, EXAMINE, EXPUNGE and CHECK commands.
11156 Defaults to @samp{#t}.
11157 @end deftypevr
11159 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-very-dirty-syncs?
11160 Like @samp{mbox-dirty-syncs}, but don't do full syncs even with SELECT,
11161 EXAMINE, EXPUNGE or CHECK commands.  If this is set,
11162 @samp{mbox-dirty-syncs} is ignored.
11163 Defaults to @samp{#f}.
11164 @end deftypevr
11166 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-lazy-writes?
11167 Delay writing mbox headers until doing a full write sync (EXPUNGE
11168 and CHECK commands and when closing the mailbox).  This is especially
11169 useful for POP3 where clients often delete all mails.  The downside is
11170 that our changes aren't immediately visible to other MUAs.
11171 Defaults to @samp{#t}.
11172 @end deftypevr
11174 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mbox-min-index-size
11175 If mbox size is smaller than this (e.g. 100k), don't write index
11176 files.  If an index file already exists it's still read, just not
11177 updated.
11178 Defaults to @samp{0}.
11179 @end deftypevr
11181 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mdbox-rotate-size
11182 Maximum dbox file size until it's rotated.
11183 Defaults to @samp{2000000}.
11184 @end deftypevr
11186 @deftypevr {@code{dovecot-configuration} parameter} string mdbox-rotate-interval
11187 Maximum dbox file age until it's rotated.  Typically in days.  Day
11188 begins from midnight, so 1d = today, 2d = yesterday, etc.  0 = check
11189 disabled.
11190 Defaults to @samp{"1d"}.
11191 @end deftypevr
11193 @deftypevr {@code{dovecot-configuration} parameter} boolean mdbox-preallocate-space?
11194 When creating new mdbox files, immediately preallocate their size to
11195 @samp{mdbox-rotate-size}.  This setting currently works only in Linux
11196 with some file systems (ext4, xfs).
11197 Defaults to @samp{#f}.
11198 @end deftypevr
11200 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-dir
11201 sdbox and mdbox support saving mail attachments to external files,
11202 which also allows single instance storage for them.  Other backends
11203 don't support this for now.
11205 WARNING: This feature hasn't been tested much yet.  Use at your own risk.
11207 Directory root where to store mail attachments.  Disabled, if empty.
11208 Defaults to @samp{""}.
11209 @end deftypevr
11211 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-attachment-min-size
11212 Attachments smaller than this aren't saved externally.  It's also
11213 possible to write a plugin to disable saving specific attachments
11214 externally.
11215 Defaults to @samp{128000}.
11216 @end deftypevr
11218 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-fs
11219 File system backend to use for saving attachments:
11220 @table @code
11221 @item posix
11222 No SiS done by Dovecot (but this might help FS's own deduplication)
11223 @item sis posix
11224 SiS with immediate byte-by-byte comparison during saving
11225 @item sis-queue posix
11226 SiS with delayed comparison and deduplication.
11227 @end table
11228 Defaults to @samp{"sis posix"}.
11229 @end deftypevr
11231 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-hash
11232 Hash format to use in attachment filenames.  You can add any text and
11233 variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}},
11234 @code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}.  Variables can be
11235 truncated, e.g. @code{%@{sha256:80@}} returns only first 80 bits.
11236 Defaults to @samp{"%@{sha1@}"}.
11237 @end deftypevr
11239 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-process-limit
11241 Defaults to @samp{100}.
11242 @end deftypevr
11244 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-client-limit
11246 Defaults to @samp{1000}.
11247 @end deftypevr
11249 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-vsz-limit
11250 Default VSZ (virtual memory size) limit for service processes.
11251 This is mainly intended to catch and kill processes that leak memory
11252 before they eat up everything.
11253 Defaults to @samp{256000000}.
11254 @end deftypevr
11256 @deftypevr {@code{dovecot-configuration} parameter} string default-login-user
11257 Login user is internally used by login processes.  This is the most
11258 untrusted user in Dovecot system.  It shouldn't have access to anything
11259 at all.
11260 Defaults to @samp{"dovenull"}.
11261 @end deftypevr
11263 @deftypevr {@code{dovecot-configuration} parameter} string default-internal-user
11264 Internal user is used by unprivileged processes.  It should be
11265 separate from login user, so that login processes can't disturb other
11266 processes.
11267 Defaults to @samp{"dovecot"}.
11268 @end deftypevr
11270 @deftypevr {@code{dovecot-configuration} parameter} string ssl?
11271 SSL/TLS support: yes, no, required.  <doc/wiki/SSL.txt>.
11272 Defaults to @samp{"required"}.
11273 @end deftypevr
11275 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cert
11276 PEM encoded X.509 SSL/TLS certificate (public key).
11277 Defaults to @samp{"</etc/dovecot/default.pem"}.
11278 @end deftypevr
11280 @deftypevr {@code{dovecot-configuration} parameter} string ssl-key
11281 PEM encoded SSL/TLS private key.  The key is opened before
11282 dropping root privileges, so keep the key file unreadable by anyone but
11283 root.
11284 Defaults to @samp{"</etc/dovecot/private/default.pem"}.
11285 @end deftypevr
11287 @deftypevr {@code{dovecot-configuration} parameter} string ssl-key-password
11288 If key file is password protected, give the password here.
11289 Alternatively give it when starting dovecot with -p parameter.  Since
11290 this file is often world-readable, you may want to place this setting
11291 instead to a different.
11292 Defaults to @samp{""}.
11293 @end deftypevr
11295 @deftypevr {@code{dovecot-configuration} parameter} string ssl-ca
11296 PEM encoded trusted certificate authority.  Set this only if you
11297 intend to use @samp{ssl-verify-client-cert? #t}.  The file should
11298 contain the CA certificate(s) followed by the matching
11299 CRL(s).  (e.g. @samp{ssl-ca </etc/ssl/certs/ca.pem}).
11300 Defaults to @samp{""}.
11301 @end deftypevr
11303 @deftypevr {@code{dovecot-configuration} parameter} boolean ssl-require-crl?
11304 Require that CRL check succeeds for client certificates.
11305 Defaults to @samp{#t}.
11306 @end deftypevr
11308 @deftypevr {@code{dovecot-configuration} parameter} boolean ssl-verify-client-cert?
11309 Request client to send a certificate.  If you also want to require
11310 it, set @samp{auth-ssl-require-client-cert? #t} in auth section.
11311 Defaults to @samp{#f}.
11312 @end deftypevr
11314 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cert-username-field
11315 Which field from certificate to use for username.  commonName and
11316 x500UniqueIdentifier are the usual choices.  You'll also need to set
11317 @samp{auth-ssl-username-from-cert? #t}.
11318 Defaults to @samp{"commonName"}.
11319 @end deftypevr
11321 @deftypevr {@code{dovecot-configuration} parameter} hours ssl-parameters-regenerate
11322 How often to regenerate the SSL parameters file.  Generation is
11323 quite CPU intensive operation.  The value is in hours, 0 disables
11324 regeneration entirely.
11325 Defaults to @samp{168}.
11326 @end deftypevr
11328 @deftypevr {@code{dovecot-configuration} parameter} string ssl-protocols
11329 SSL protocols to use.
11330 Defaults to @samp{"!SSLv2"}.
11331 @end deftypevr
11333 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cipher-list
11334 SSL ciphers to use.
11335 Defaults to @samp{"ALL:!LOW:!SSLv2:!EXP:!aNULL"}.
11336 @end deftypevr
11338 @deftypevr {@code{dovecot-configuration} parameter} string ssl-crypto-device
11339 SSL crypto device to use, for valid values run "openssl engine".
11340 Defaults to @samp{""}.
11341 @end deftypevr
11343 @deftypevr {@code{dovecot-configuration} parameter} string postmaster-address
11344 Address to use when sending rejection mails.
11345 %d expands to recipient domain.
11346 Defaults to @samp{"postmaster@@%d"}.
11347 @end deftypevr
11349 @deftypevr {@code{dovecot-configuration} parameter} string hostname
11350 Hostname to use in various parts of sent mails (e.g. in Message-Id)
11351 and in LMTP replies.  Default is the system's real hostname@@domain.
11352 Defaults to @samp{""}.
11353 @end deftypevr
11355 @deftypevr {@code{dovecot-configuration} parameter} boolean quota-full-tempfail?
11356 If user is over quota, return with temporary failure instead of
11357 bouncing the mail.
11358 Defaults to @samp{#f}.
11359 @end deftypevr
11361 @deftypevr {@code{dovecot-configuration} parameter} file-name sendmail-path
11362 Binary to use for sending mails.
11363 Defaults to @samp{"/usr/sbin/sendmail"}.
11364 @end deftypevr
11366 @deftypevr {@code{dovecot-configuration} parameter} string submission-host
11367 If non-empty, send mails via this SMTP host[:port] instead of
11368 sendmail.
11369 Defaults to @samp{""}.
11370 @end deftypevr
11372 @deftypevr {@code{dovecot-configuration} parameter} string rejection-subject
11373 Subject: header to use for rejection mails.  You can use the same
11374 variables as for @samp{rejection-reason} below.
11375 Defaults to @samp{"Rejected: %s"}.
11376 @end deftypevr
11378 @deftypevr {@code{dovecot-configuration} parameter} string rejection-reason
11379 Human readable error message for rejection mails.  You can use
11380 variables:
11382 @table @code
11383 @item %n
11384 CRLF
11385 @item %r
11386 reason
11387 @item %s
11388 original subject
11389 @item %t
11390 recipient
11391 @end table
11392 Defaults to @samp{"Your message to <%t> was automatically rejected:%n%r"}.
11393 @end deftypevr
11395 @deftypevr {@code{dovecot-configuration} parameter} string recipient-delimiter
11396 Delimiter character between local-part and detail in email
11397 address.
11398 Defaults to @samp{"+"}.
11399 @end deftypevr
11401 @deftypevr {@code{dovecot-configuration} parameter} string lda-original-recipient-header
11402 Header where the original recipient address (SMTP's RCPT TO:
11403 address) is taken from if not available elsewhere.  With dovecot-lda -a
11404 parameter overrides this.  A commonly used header for this is
11405 X-Original-To.
11406 Defaults to @samp{""}.
11407 @end deftypevr
11409 @deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autocreate?
11410 Should saving a mail to a nonexistent mailbox automatically create
11411 it?.
11412 Defaults to @samp{#f}.
11413 @end deftypevr
11415 @deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autosubscribe?
11416 Should automatically created mailboxes be also automatically
11417 subscribed?.
11418 Defaults to @samp{#f}.
11419 @end deftypevr
11421 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer imap-max-line-length
11422 Maximum IMAP command line length.  Some clients generate very long
11423 command lines with huge mailboxes, so you may need to raise this if you
11424 get "Too long argument" or "IMAP command line too large" errors
11425 often.
11426 Defaults to @samp{64000}.
11427 @end deftypevr
11429 @deftypevr {@code{dovecot-configuration} parameter} string imap-logout-format
11430 IMAP logout format string:
11431 @table @code
11432 @item %i
11433 total number of bytes read from client
11434 @item %o
11435 total number of bytes sent to client.
11436 @end table
11437 Defaults to @samp{"in=%i out=%o"}.
11438 @end deftypevr
11440 @deftypevr {@code{dovecot-configuration} parameter} string imap-capability
11441 Override the IMAP CAPABILITY response.  If the value begins with '+',
11442 add the given capabilities on top of the defaults (e.g. +XFOO XBAR).
11443 Defaults to @samp{""}.
11444 @end deftypevr
11446 @deftypevr {@code{dovecot-configuration} parameter} string imap-idle-notify-interval
11447 How long to wait between "OK Still here" notifications when client
11448 is IDLEing.
11449 Defaults to @samp{"2 mins"}.
11450 @end deftypevr
11452 @deftypevr {@code{dovecot-configuration} parameter} string imap-id-send
11453 ID field names and values to send to clients.  Using * as the value
11454 makes Dovecot use the default value.  The following fields have default
11455 values currently: name, version, os, os-version, support-url,
11456 support-email.
11457 Defaults to @samp{""}.
11458 @end deftypevr
11460 @deftypevr {@code{dovecot-configuration} parameter} string imap-id-log
11461 ID fields sent by client to log.  * means everything.
11462 Defaults to @samp{""}.
11463 @end deftypevr
11465 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list imap-client-workarounds
11466 Workarounds for various client bugs:
11468 @table @code
11469 @item delay-newmail
11470 Send EXISTS/RECENT new mail notifications only when replying to NOOP and
11471 CHECK commands.  Some clients ignore them otherwise, for example OSX
11472 Mail (<v2.1).  Outlook Express breaks more badly though, without this it
11473 may show user "Message no longer in server" errors.  Note that OE6
11474 still breaks even with this workaround if synchronization is set to
11475 "Headers Only".
11477 @item tb-extra-mailbox-sep
11478 Thunderbird gets somehow confused with LAYOUT=fs (mbox and dbox) and
11479 adds extra @samp{/} suffixes to mailbox names.  This option causes Dovecot to
11480 ignore the extra @samp{/} instead of treating it as invalid mailbox name.
11482 @item tb-lsub-flags
11483 Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g. mbox).
11484 This makes Thunderbird realize they aren't selectable and show them
11485 greyed out, instead of only later giving "not selectable" popup error.
11486 @end table
11487 Defaults to @samp{()}.
11488 @end deftypevr
11490 @deftypevr {@code{dovecot-configuration} parameter} string imap-urlauth-host
11491 Host allowed in URLAUTH URLs sent by client.  "*" allows all.
11492 Defaults to @samp{""}.
11493 @end deftypevr
11496 Whew!  Lots of configuration options.  The nice thing about it though is
11497 that GuixSD has a complete interface to Dovecot's configuration
11498 language.  This allows not only a nice way to declare configurations,
11499 but also offers reflective capabilities as well: users can write code to
11500 inspect and transform configurations from within Scheme.
11502 However, it could be that you just want to get a @code{dovecot.conf} up
11503 and running.  In that case, you can pass an
11504 @code{opaque-dovecot-configuration} as the @code{#:config} parameter to
11505 @code{dovecot-service}.  As its name indicates, an opaque configuration
11506 does not have easy reflective capabilities.
11508 Available @code{opaque-dovecot-configuration} fields are:
11510 @deftypevr {@code{opaque-dovecot-configuration} parameter} package dovecot
11511 The dovecot package.
11512 @end deftypevr
11514 @deftypevr {@code{opaque-dovecot-configuration} parameter} string string
11515 The contents of the @code{dovecot.conf}, as a string.
11516 @end deftypevr
11518 For example, if your @code{dovecot.conf} is just the empty string, you
11519 could instantiate a dovecot service like this:
11521 @example
11522 (dovecot-service #:config
11523                  (opaque-dovecot-configuration
11524                   (string "")))
11525 @end example
11527 @subsubheading OpenSMTPD Service
11529 @deffn {Scheme Variable} opensmtpd-service-type
11530 This is the type of the @uref{https://www.opensmtpd.org, OpenSMTPD}
11531 service, whose value should be an @code{opensmtpd-configuration} object
11532 as in this example:
11534 @example
11535 (service opensmtpd-service-type
11536          (opensmtpd-configuration
11537            (config-file (local-file "./my-smtpd.conf"))))
11538 @end example
11539 @end deffn
11541 @deftp {Data Type} opensmtpd-configuration
11542 Data type regresenting the configuration of opensmtpd.
11544 @table @asis
11545 @item @code{package} (default: @var{opensmtpd})
11546 Package object of the OpenSMTPD SMTP server.
11548 @item @code{config-file} (default: @var{%default-opensmtpd-file})
11549 File-like object of the OpenSMTPD configuration file to use.  By default
11550 it listens on the loopback network interface, and allows for mail from
11551 users and daemons on the local machine, as well as permitting email to
11552 remote servers.  Run @command{man smtpd.conf} for more information.
11554 @end table
11555 @end deftp
11557 @node Kerberos Services
11558 @subsubsection Kerberos Services
11559 @cindex Kerberos
11561 The @code{(gnu services kerberos)} module provides services relating to
11562 the authentication protocol @dfn{Kerberos}.
11564 @subsubheading Krb5 Service
11566 Programs using a Kerberos client library normally
11567 expect a configuration file in @file{/etc/krb5.conf}.
11568 This service generates such a file from a definition provided in the
11569 operating system declaration.
11570 It does not cause any daemon to be started.
11572 No ``keytab'' files are provided by this service---you must explicitly create them.
11573 This service is known to work with the MIT client library, @code{mit-krb5}.
11574 Other implementations have not been tested.
11576 @defvr {Scheme Variable} krb5-service-type
11577 A service type for Kerberos 5 clients.
11578 @end defvr
11580 @noindent
11581 Here is an example of its use:
11582 @lisp
11583 (service krb5-service-type
11584          (krb5-configuration
11585           (default-realm "EXAMPLE.COM")
11586           (allow-weak-crypto? #t)
11587           (realms (list
11588                    (krb5-realm
11589                     (name "EXAMPLE.COM")
11590                     (admin-server "groucho.example.com")
11591                     (kdc "karl.example.com"))
11592                    (krb5-realm
11593                     (name "ARGRX.EDU")
11594                     (admin-server "kerb-admin.argrx.edu")
11595                     (kdc "keys.argrx.edu"))))))
11596 @end lisp
11598 @noindent
11599 This example provides a Kerberos@tie{}5 client configuration which:
11600 @itemize
11601 @item Recognizes two realms, @i{viz:} ``EXAMPLE.COM'' and ``ARGRX.EDU'', both
11602 of which have distinct administration servers and key distribution centers;
11603 @item Will default to the realm ``EXAMPLE.COM'' if the realm is not explicitly
11604 specified by clients;
11605 @item Accepts services which only support encryption types known to be weak.
11606 @end itemize
11608 The @code{krb5-realm} and @code{krb5-configuration} types have many fields.
11609 Only the most commonly used ones are described here.
11610 For a full list, and more detailed explanation of each, see the MIT
11611 @uref{http://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html,,krb5.conf}
11612 documentation.
11615 @deftp {Data Type} krb5-realm
11616 @cindex realm, kerberos
11617 @table @asis
11618 @item @code{name}
11619 This field is a string identifying the name of the realm.
11620 A common convention is to use the fully qualified DNS name of your organization,
11621 converted to upper case.
11623 @item @code{admin-server}
11624 This field is a string identifying the host where the administration server is
11625 running.
11627 @item @code{kdc}
11628 This field is a string identifying the key distribution center
11629 for the realm.
11630 @end table
11631 @end deftp
11633 @deftp {Data Type} krb5-configuration
11635 @table @asis
11636 @item @code{allow-weak-crypto?} (default: @code{#f})
11637 If this flag is @code{#t} then services which only offer encryption algorithms
11638 known to be weak will be accepted.
11640 @item @code{default-realm} (default: @code{#f})
11641 This field should be a string identifying the default Kerberos
11642 realm for the client.
11643 You should set this field to the name of your Kerberos realm.
11644 If this value is @code{#f}
11645 then a realm must be specified with every Kerberos principal when invoking programs
11646 such as @command{kinit}.
11648 @item @code{realms}
11649 This should be a non-empty list of @code{krb5-realm} objects, which clients may
11650 access.
11651 Normally, one of them will have a @code{name} field matching the @code{default-realm}
11652 field.
11653 @end table
11654 @end deftp
11657 @subsubheading PAM krb5 Service
11658 @cindex pam-krb5
11660 The @code{pam-krb5} service allows for login authentication and password
11661 management via Kerberos.
11662 You will need this service if you want PAM enabled applications to authenticate
11663 users using Kerberos.
11665 @defvr {Scheme Variable} pam-krb5-service-type
11666 A service type for the Kerberos 5 PAM module.
11667 @end defvr
11669 @deftp {Data Type} pam-krb5-configuration
11670 Data type representing the configuration of the Kerberos 5 PAM module
11671 This type has the following parameters:
11672 @table @asis
11673 @item @code{pam-krb5} (default: @code{pam-krb5})
11674 The pam-krb5 package to use.
11676 @item @code{minimum-uid} (default: @code{1000})
11677 The smallest user ID for which Kerberos authentications should be attempted.
11678 Local accounts with lower values will silently fail to authenticate.
11679 @end table
11680 @end deftp
11683 @node Web Services
11684 @subsubsection Web Services
11686 @cindex web
11687 @cindex www
11688 @cindex HTTP
11689 The @code{(gnu services web)} module provides the following service:
11691 @deffn {Scheme Procedure} nginx-service [#:nginx nginx] @
11692        [#:log-directory ``/var/log/nginx''] @
11693        [#:run-directory ``/var/run/nginx''] @
11694        [#:vhost-list (list (nginx-vhost-configuration))] @
11695        [#:config-file]
11697 Return a service that runs @var{nginx}, the nginx web server.
11699 The nginx daemon loads its runtime configuration from @var{config-file}.
11700 Log files are written to @var{log-directory} and temporary runtime data
11701 files are written to @var{run-directory}.  For proper operation, these
11702 arguments should match what is in @var{config-file} to ensure that the
11703 directories are created when the service is activated.
11705 As an alternative to using a @var{config-file}, @var{vhost-list} can be
11706 used to specify the list of @dfn{virtual hosts} required on the host.  For
11707 this to work, use the default value for @var{config-file}.
11709 @end deffn
11711 @deftp {Data Type} nginx-vhost-configuration
11712 Data type representing the configuration of an nginx virtual host.
11713 This type has the following parameters:
11715 @table @asis
11716 @item @code{http-port} (default: @code{80})
11717 Nginx will listen for HTTP connection on this port.  Set it at @code{#f} if
11718 nginx should not listen for HTTP (non secure) connection for this
11719 @dfn{virtual host}.
11721 @item @code{https-port} (default: @code{443})
11722 Nginx will listen for HTTPS connection on this port.  Set it at @code{#f} if
11723 nginx should not listen for HTTPS (secure) connection for this @dfn{virtual host}.
11725 Note that nginx can listen for HTTP and HTTPS connections in the same
11726 @dfn{virtual host}.
11728 @item @code{server-name} (default: @code{(list 'default)})
11729 A list of server names this vhost represents. @code{'default} represents the
11730 default vhost for connections matching no other vhost.
11732 @item @code{root} (default: @code{"/srv/http"})
11733 Root of the website nginx will serve.
11735 @item @code{index} (default: @code{(list "index.html")})
11736 Index files to look for when clients ask for a directory.  If it cannot be found,
11737 Nginx will send the list of files in the directory.
11739 @item @code{ssl-certificate} (default: @code{"/etc/nginx/cert.pem"})
11740 Where to find the certificate for secure connections.  Set it to @code{#f} if
11741 you don't have a certificate or you don't want to use HTTPS.
11743 @item @code{ssl-certificate-key} (default: @code{"/etc/nginx/key.pem"})
11744 Where to find the private key for secure connections.  Set it to @code{#f} if
11745 you don't have a key or you don't want to use HTTPS.
11747 @item @code{server-tokens?} (default: @code{#f})
11748 Whether the server should add its configuration to response.
11750 @end table
11751 @end deftp
11753 @node Network File System
11754 @subsubsection Network File System
11755 @cindex NFS
11757 The @code{(gnu services nfs)} module provides the following services,
11758 which are most commonly used in relation to mounting or exporting
11759 directory trees as @dfn{network file systems} (NFS).
11761 @subsubheading RPC Bind Service
11762 @cindex rpcbind
11764 The RPC Bind service provides a facility to map program numbers into
11765 universal addresses.
11766 Many NFS related services use this facility.  Hence it is automatically
11767 started when a dependent service starts.
11769 @defvr {Scheme Variable} rpcbind-service-type
11770 A service type  for the RPC portmapper daemon.
11771 @end defvr
11774 @deftp {Data Type} rpcbind-configuration
11775 Data type representing the configuration of the RPC Bind Service.
11776 This type has the following parameters:
11777 @table @asis
11778 @item @code{rpcbind} (default: @code{rpcbind})
11779 The rpcbind package to use.
11781 @item @code{warm-start?} (default: @code{#t})
11782 If this parameter is @code{#t}, then the daemon will read a
11783 state file on startup thus reloading state information saved by a previous
11784 instance.
11785 @end table
11786 @end deftp
11789 @subsubheading Pipefs Pseudo File System
11790 @cindex pipefs
11791 @cindex rpc_pipefs
11793 The pipefs file system is used to transfer NFS related data
11794 between the kernel and user space programs.
11796 @defvr {Scheme Variable} pipefs-service-type
11797 A service type for the pipefs pseudo file system.
11798 @end defvr
11800 @deftp {Data Type} pipefs-configuration
11801 Data type representing the configuration of the pipefs pseudo file system service.
11802 This type has the following parameters:
11803 @table @asis
11804 @item @code{mount-point} (default: @code{"/var/lib/nfs/rpc_pipefs"})
11805 The directory to which the file system is to be attached.
11806 @end table
11807 @end deftp
11810 @subsubheading GSS Daemon Service
11811 @cindex GSSD
11812 @cindex GSS
11813 @cindex global security system
11815 The @dfn{global security system} (GSS) daemon provides strong security for RPC
11816 based protocols.
11817 Before exchanging RPC requests an RPC client must establish a security
11818 context.  Typically this is done using the Kerberos command @command{kinit}
11819 or automatically at login time using PAM services (@pxref{Kerberos Services}).
11821 @defvr {Scheme Variable} gss-service-type
11822 A service type for the Global Security System (GSS) daemon.
11823 @end defvr
11825 @deftp {Data Type} gss-configuration
11826 Data type representing the configuration of the GSS daemon service.
11827 This type has the following parameters:
11828 @table @asis
11829 @item @code{nfs-utils} (default: @code{nfs-utils})
11830 The package in which the @command{rpc.gssd} command is to be found.
11832 @item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
11833 The directory where the pipefs file system is mounted.
11835 @end table
11836 @end deftp
11839 @subsubheading IDMAP Daemon Service
11840 @cindex idmapd
11841 @cindex name mapper
11843 The idmap daemon service provides mapping between user IDs and user names.
11844 Typically it is required in order to access file systems mounted via NFSv4.
11846 @defvr {Scheme Variable} idmap-service-type
11847 A service type for the Identity Mapper (IDMAP) daemon.
11848 @end defvr
11850 @deftp {Data Type} idmap-configuration
11851 Data type representing the configuration of the IDMAP daemon service.
11852 This type has the following parameters:
11853 @table @asis
11854 @item @code{nfs-utils} (default: @code{nfs-utils})
11855 The package in which the @command{rpc.idmapd} command is to be found.
11857 @item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
11858 The directory where the pipefs file system is mounted.
11860 @item @code{domain} (default: @code{#f})
11861 The local NFSv4 domain name.
11862 This must be a string or @code{#f}.
11863 If it is @code{#f} then the daemon will use the host's fully qualified domain name.
11865 @end table
11866 @end deftp
11868 @node Continuous Integration
11869 @subsubsection Continuous Integration
11871 @cindex continuous integration
11872 @uref{https://notabug.org/mthl/cuirass, Cuirass} is a continuous
11873 integration tool for Guix.  It can be used both for development and for
11874 providing substitutes to others (@pxref{Substitutes}).
11876 The @code{(gnu services cuirass)} module provides the following service.
11878 @deffn {Scheme Procedure} cuirass-service @
11879        [#:config @code{(cuirass-configuration)}]
11880 Return a service that runs @command{cuirass}.
11882 The @var{#:config} keyword argument specifies the configuration for
11883 @command{cuirass}, which must be a @code{<cuirass-configuration>}
11884 object, by default it doesn't provide any build job.  If you want to
11885 provide your own configuration you will most likely use the
11886 @code{cuirass-configuration} special form which returns such objects.
11887 @end deffn
11889 In order to add build jobs you will have to set the
11890 @code{specifications} field.  Here is an example of a cuirass service
11891 defining a build job based on a specification that can be found in
11892 Cuirass source tree.
11894 @example
11895 (let ((spec `((#:name . "guix")
11896               (#:url . "git://git.savannah.gnu.org/guix.git")
11897               (#:load-path . ".")
11898               ;; Adapt to a valid absolute file name.
11899               (#:file . "/.../cuirass/tests/gnu-system.scm")
11900               (#:proc . hydra-jobs)
11901               (#:arguments (subset . "hello"))
11902               (#:branch . "master"))))
11903   (cuirass-service #:config (cuirass-configuration
11904                              (specifications (list spec)))))
11905 @end example
11907 While information related to build jobs are located directly in the
11908 specifications, global settings for the @command{cuirass} process are
11909 accessible in other @code{cuirass-configuration} fields.
11911 @deftp {Data Type} cuirass-configuration
11912 Data type representing the configuration of Cuirass.
11914 @table @asis
11915 @item @code{cache-directory} (default: @code{""})
11916 Location of the repository cache.
11918 @item @code{user} (default: @code{"cuirass"})
11919 Owner of the @code{cuirass} process.
11921 @item @code{group} (default: @code{"cuirass"})
11922 Owner's group of the @code{cuirass} process.
11924 @item @code{interval} (default: @code{60})
11925 Number of seconds between the poll of the repositories followed by the
11926 Cuirass jobs.
11928 @item @code{database} (default: @code{"/var/run/cuirass/cuirass.db"})
11929 Location of sqlite database which contains the build results and previously
11930 added specifications.
11932 @item @code{specifications} (default: @code{'()})
11933 A list of specifications, where a specification is an association list
11934 (@pxref{Associations Lists,,, guile, GNU Guile Reference Manual}) whose
11935 keys are keywords (@code{#:keyword-example}) as shown in the example
11936 above.
11938 @item @code{use-substitutes?} (default: @code{#f})
11939 This allows using substitutes to avoid building every dependencies of a job
11940 from source.
11942 @item @code{one-shot?} (default: @code{#f})
11943 Only evaluate specifications and build derivations once.
11944 @end table
11945 @end deftp
11947 @node Miscellaneous Services
11948 @subsubsection Miscellaneous Services
11951 @cindex lirc
11952 @subsubheading Lirc Service
11954 The @code{(gnu services lirc)} module provides the following service.
11956 @deffn {Scheme Procedure} lirc-service [#:lirc lirc] @
11957        [#:device #f] [#:driver #f] [#:config-file #f] @
11958        [#:extra-options '()]
11959 Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
11960 decodes infrared signals from remote controls.
11962 Optionally, @var{device}, @var{driver} and @var{config-file}
11963 (configuration file name) may be specified.  See @command{lircd} manual
11964 for details.
11966 Finally, @var{extra-options} is a list of additional command-line options
11967 passed to @command{lircd}.
11968 @end deffn
11970 @cindex spice
11971 @subsubheading Spice Service
11973 The @code{(gnu services spice)} module provides the following service.
11975 @deffn {Scheme Procedure} spice-vdagent-service [#:spice-vdagent]
11976 Returns a service that runs @url{http://www.spice-space.org,VDAGENT}, a daemon
11977 that enables sharing the clipboard with a vm and setting the guest display
11978 resolution when the graphical console window resizes.
11979 @end deffn
11981 @subsubsection Dictionary Services
11982 @cindex dictionary
11983 The @code{(gnu services dict)} module provides the following service:
11985 @deffn {Scheme Procedure} dicod-service [#:config (dicod-configuration)]
11986 Return a service that runs the @command{dicod} daemon, an implementation
11987 of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
11989 The optional @var{config} argument specifies the configuration for
11990 @command{dicod}, which should be a @code{<dicod-configuration>} object, by
11991 default it serves the GNU Collaborative International Dictonary of English.
11993 You can add @command{open localhost} to your @file{~/.dico} file to make
11994 @code{localhost} the default server for @command{dico} client
11995 (@pxref{Initialization File,,, dico, GNU Dico Manual}).
11996 @end deffn
11998 @deftp {Data Type} dicod-configuration
11999 Data type representing the configuration of dicod.
12001 @table @asis
12002 @item @code{dico} (default: @var{dico})
12003 Package object of the GNU Dico dictionary server.
12005 @item @code{interfaces} (default: @var{'("localhost")})
12006 This is the list of IP addresses and ports and possibly socket file
12007 names to listen to (@pxref{Server Settings, @code{listen} directive,,
12008 dico, GNU Dico Manual}).
12010 @item @code{databases} (default: @var{(list %dicod-database:gcide)})
12011 List of @code{<dicod-database>} objects denoting dictionaries to be served.
12012 @end table
12013 @end deftp
12015 @deftp {Data Type} dicod-database
12016 Data type representing a dictionary database.
12018 @table @asis
12019 @item @code{name}
12020 Name of the database, will be used in DICT commands.
12022 @item @code{module}
12023 Name of the dicod module used by this database
12024 (@pxref{Modules,,, dico, GNU Dico Manual}).
12026 @item @code{options}
12027 List of strings or gexps representing the arguments for the module handler
12028 (@pxref{Handlers,,, dico, GNU Dico Manual}).
12029 @end table
12030 @end deftp
12032 @defvr {Scheme Variable} %dicod-database:gcide
12033 A @code{<dicod-database>} object serving the GNU Collaborative International
12034 Dictonary of English using the @code{gcide} package.
12035 @end defvr
12037 @subsubsection Version Control
12039 The @code{(gnu services version-control)} module provides the following services:
12041 @subsubheading Git daemon service
12043 @deffn {Scheme Procedure} git-daemon-service [#:config (git-daemon-configuration)]
12045 Return a service that runs @command{git daemon}, a simple TCP server to
12046 expose repositiories over the Git protocol for annoymous access.
12048 The optional @var{config} argument should be a
12049 @code{<git-daemon-configuration>} object, by default it allows read-only
12050 access to exported@footnote{By creating the magic file
12051 "git-daemon-export-ok" in the repository directory.} repositories under
12052 @file{/srv/git}.
12054 @end deffn
12056 @deftp {Data Type} git-daemon-configuration
12057 Data type representing the configuration for @code{git-daemon-service}.
12059 @table @asis
12060 @item @code{package} (default: @var{git})
12061 Package object of the Git distributed version control system.
12063 @item @code{export-all?} (default: @var{#f})
12064 Whether to allow access for all Git repositories, even if they do not
12065 have the @file{git-daemon-export-ok} file.
12067 @item @code{base-path} (default: @file{/srv/git})
12068 Whether to remap all the path requests as relative to the given path.
12069 If you run git daemon with @var{(base-path "/srv/git")} on example.com,
12070 then if you later try to pull @code{git://example.com/hello.git}, git
12071 daemon will interpret the path as @code{/srv/git/hello.git}.
12073 @item @code{user-path} (default: @var{#f})
12074 Whether to allow @code{~user} notation to be used in requests.  When
12075 specified with empty string, requests to @code{git://host/~alice/foo} is
12076 taken as a request to access @code{foo} repository in the home directory
12077 of user @code{alice}.  If @var{(user-path "path")} is specified, the
12078 same request is taken as a request to access @code{path/foo} repository
12079 in the home directory of user @code{alice}.
12081 @item @code{listen} (default: @var{'()})
12082 Whether to listen on specific IP addresses or hostnames, defaults to
12083 all.
12085 @item @code{port} (default: @var{#f})
12086 Whether to listen on an alternative port, which defaults to 9418.
12088 @item @code{whitelist} (default: @var{'()})
12089 If not empty, only allow access to this list of directories.
12091 @item @code{extra-options} (default: @var{'()})
12092 Extra options will be passed to @code{git daemon}, please run
12093 @command{man git-daemon} for more information.
12095 @end table
12096 @end deftp
12098 @node Setuid Programs
12099 @subsection Setuid Programs
12101 @cindex setuid programs
12102 Some programs need to run with ``root'' privileges, even when they are
12103 launched by unprivileged users.  A notorious example is the
12104 @command{passwd} program, which users can run to change their
12105 password, and which needs to access the @file{/etc/passwd} and
12106 @file{/etc/shadow} files---something normally restricted to root, for
12107 obvious security reasons.  To address that, these executables are
12108 @dfn{setuid-root}, meaning that they always run with root privileges
12109 (@pxref{How Change Persona,,, libc, The GNU C Library Reference Manual},
12110 for more info about the setuid mechanism.)
12112 The store itself @emph{cannot} contain setuid programs: that would be a
12113 security issue since any user on the system can write derivations that
12114 populate the store (@pxref{The Store}).  Thus, a different mechanism is
12115 used: instead of changing the setuid bit directly on files that are in
12116 the store, we let the system administrator @emph{declare} which programs
12117 should be setuid root.
12119 The @code{setuid-programs} field of an @code{operating-system}
12120 declaration contains a list of G-expressions denoting the names of
12121 programs to be setuid-root (@pxref{Using the Configuration System}).
12122 For instance, the @command{passwd} program, which is part of the Shadow
12123 package, can be designated by this G-expression (@pxref{G-Expressions}):
12125 @example
12126 #~(string-append #$shadow "/bin/passwd")
12127 @end example
12129 A default set of setuid programs is defined by the
12130 @code{%setuid-programs} variable of the @code{(gnu system)} module.
12132 @defvr {Scheme Variable} %setuid-programs
12133 A list of G-expressions denoting common programs that are setuid-root.
12135 The list includes commands such as @command{passwd}, @command{ping},
12136 @command{su}, and @command{sudo}.
12137 @end defvr
12139 Under the hood, the actual setuid programs are created in the
12140 @file{/run/setuid-programs} directory at system activation time.  The
12141 files in this directory refer to the ``real'' binaries, which are in the
12142 store.
12144 @node X.509 Certificates
12145 @subsection X.509 Certificates
12147 @cindex HTTPS, certificates
12148 @cindex X.509 certificates
12149 @cindex TLS
12150 Web servers available over HTTPS (that is, HTTP over the transport-layer
12151 security mechanism, TLS) send client programs an @dfn{X.509 certificate}
12152 that the client can then use to @emph{authenticate} the server.  To do
12153 that, clients verify that the server's certificate is signed by a
12154 so-called @dfn{certificate authority} (CA).  But to verify the CA's
12155 signature, clients must have first acquired the CA's certificate.
12157 Web browsers such as GNU@tie{}IceCat include their own set of CA
12158 certificates, such that they are able to verify CA signatures
12159 out-of-the-box.
12161 However, most other programs that can talk HTTPS---@command{wget},
12162 @command{git}, @command{w3m}, etc.---need to be told where CA
12163 certificates can be found.
12165 @cindex @code{nss-certs}
12166 In GuixSD, this is done by adding a package that provides certificates
12167 to the @code{packages} field of the @code{operating-system} declaration
12168 (@pxref{operating-system Reference}).  GuixSD includes one such package,
12169 @code{nss-certs}, which is a set of CA certificates provided as part of
12170 Mozilla's Network Security Services.
12172 Note that it is @emph{not} part of @var{%base-packages}, so you need to
12173 explicitly add it.  The @file{/etc/ssl/certs} directory, which is where
12174 most applications and libraries look for certificates by default, points
12175 to the certificates installed globally.
12177 Unprivileged users, including users of Guix on a foreign distro,
12178 can also install their own certificate package in
12179 their profile.  A number of environment variables need to be defined so
12180 that applications and libraries know where to find them.  Namely, the
12181 OpenSSL library honors the @code{SSL_CERT_DIR} and @code{SSL_CERT_FILE}
12182 variables.  Some applications add their own environment variables; for
12183 instance, the Git version control system honors the certificate bundle
12184 pointed to by the @code{GIT_SSL_CAINFO} environment variable.  Thus, you
12185 would typically run something like:
12187 @example
12188 $ guix package -i nss-certs
12189 $ export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs"
12190 $ export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
12191 $ export GIT_SSL_CAINFO="$SSL_CERT_FILE"
12192 @end example
12194 @node Name Service Switch
12195 @subsection Name Service Switch
12197 @cindex name service switch
12198 @cindex NSS
12199 The @code{(gnu system nss)} module provides bindings to the
12200 configuration file of the libc @dfn{name service switch} or @dfn{NSS}
12201 (@pxref{NSS Configuration File,,, libc, The GNU C Library Reference
12202 Manual}).  In a nutshell, the NSS is a mechanism that allows libc to be
12203 extended with new ``name'' lookup methods for system databases, which
12204 includes host names, service names, user accounts, and more (@pxref{Name
12205 Service Switch, System Databases and Name Service Switch,, libc, The GNU
12206 C Library Reference Manual}).
12208 The NSS configuration specifies, for each system database, which lookup
12209 method is to be used, and how the various methods are chained
12210 together---for instance, under which circumstances NSS should try the
12211 next method in the list.  The NSS configuration is given in the
12212 @code{name-service-switch} field of @code{operating-system} declarations
12213 (@pxref{operating-system Reference, @code{name-service-switch}}).
12215 @cindex nss-mdns
12216 @cindex .local, host name lookup
12217 As an example, the declaration below configures the NSS to use the
12218 @uref{http://0pointer.de/lennart/projects/nss-mdns/, @code{nss-mdns}
12219 back-end}, which supports host name lookups over multicast DNS (mDNS)
12220 for host names ending in @code{.local}:
12222 @example
12223 (name-service-switch
12224    (hosts (list %files    ;first, check /etc/hosts
12226                 ;; If the above did not succeed, try
12227                 ;; with 'mdns_minimal'.
12228                 (name-service
12229                   (name "mdns_minimal")
12231                   ;; 'mdns_minimal' is authoritative for
12232                   ;; '.local'.  When it returns "not found",
12233                   ;; no need to try the next methods.
12234                   (reaction (lookup-specification
12235                              (not-found => return))))
12237                 ;; Then fall back to DNS.
12238                 (name-service
12239                   (name "dns"))
12241                 ;; Finally, try with the "full" 'mdns'.
12242                 (name-service
12243                   (name "mdns")))))
12244 @end example
12246 Do not worry: the @code{%mdns-host-lookup-nss} variable (see below)
12247 contains this configuration, so you will not have to type it if all you
12248 want is to have @code{.local} host lookup working.
12250 Note that, in this case, in addition to setting the
12251 @code{name-service-switch} of the @code{operating-system} declaration,
12252 you also need to use @code{avahi-service} (@pxref{Networking Services,
12253 @code{avahi-service}}), or @var{%desktop-services}, which includes it
12254 (@pxref{Desktop Services}).  Doing this makes @code{nss-mdns} accessible
12255 to the name service cache daemon (@pxref{Base Services,
12256 @code{nscd-service}}).
12258 For convenience, the following variables provide typical NSS
12259 configurations.
12261 @defvr {Scheme Variable} %default-nss
12262 This is the default name service switch configuration, a
12263 @code{name-service-switch} object.
12264 @end defvr
12266 @defvr {Scheme Variable} %mdns-host-lookup-nss
12267 This is the name service switch configuration with support for host name
12268 lookup over multicast DNS (mDNS) for host names ending in @code{.local}.
12269 @end defvr
12271 The reference for name service switch configuration is given below.  It
12272 is a direct mapping of the configuration file format of the C library , so
12273 please refer to the C library manual for more information (@pxref{NSS
12274 Configuration File,,, libc, The GNU C Library Reference Manual}).
12275 Compared to the configuration file format of libc NSS, it has the advantage
12276 not only of adding this warm parenthetic feel that we like, but also
12277 static checks: you will know about syntax errors and typos as soon as you
12278 run @command{guix system}.
12280 @deftp {Data Type} name-service-switch
12282 This is the data type representation the configuration of libc's name
12283 service switch (NSS).  Each field below represents one of the supported
12284 system databases.
12286 @table @code
12287 @item aliases
12288 @itemx ethers
12289 @itemx group
12290 @itemx gshadow
12291 @itemx hosts
12292 @itemx initgroups
12293 @itemx netgroup
12294 @itemx networks
12295 @itemx password
12296 @itemx public-key
12297 @itemx rpc
12298 @itemx services
12299 @itemx shadow
12300 The system databases handled by the NSS.  Each of these fields must be a
12301 list of @code{<name-service>} objects (see below).
12302 @end table
12303 @end deftp
12305 @deftp {Data Type} name-service
12307 This is the data type representing an actual name service and the
12308 associated lookup action.
12310 @table @code
12311 @item name
12312 A string denoting the name service (@pxref{Services in the NSS
12313 configuration,,, libc, The GNU C Library Reference Manual}).
12315 Note that name services listed here must be visible to nscd.  This is
12316 achieved by passing the @code{#:name-services} argument to
12317 @code{nscd-service} the list of packages providing the needed name
12318 services (@pxref{Base Services, @code{nscd-service}}).
12320 @item reaction
12321 An action specified using the @code{lookup-specification} macro
12322 (@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
12323 Reference Manual}).  For example:
12325 @example
12326 (lookup-specification (unavailable => continue)
12327                       (success => return))
12328 @end example
12329 @end table
12330 @end deftp
12332 @node Initial RAM Disk
12333 @subsection Initial RAM Disk
12335 @cindex initrd
12336 @cindex initial RAM disk
12337 For bootstrapping purposes, the Linux-Libre kernel is passed an
12338 @dfn{initial RAM disk}, or @dfn{initrd}.  An initrd contains a temporary
12339 root file system as well as an initialization script.  The latter is
12340 responsible for mounting the real root file system, and for loading any
12341 kernel modules that may be needed to achieve that.
12343 The @code{initrd} field of an @code{operating-system} declaration allows
12344 you to specify which initrd you would like to use.  The @code{(gnu
12345 system linux-initrd)} module provides two ways to build an initrd: the
12346 high-level @code{base-initrd} procedure, and the low-level
12347 @code{expression->initrd} procedure.
12349 The @code{base-initrd} procedure is intended to cover most common uses.
12350 For example, if you want to add a bunch of kernel modules to be loaded
12351 at boot time, you can define the @code{initrd} field of the operating
12352 system declaration like this:
12354 @example
12355 (initrd (lambda (file-systems . rest)
12356           ;; Create a standard initrd that has modules "foo.ko"
12357           ;; and "bar.ko", as well as their dependencies, in
12358           ;; addition to the modules available by default.
12359           (apply base-initrd file-systems
12360                  #:extra-modules '("foo" "bar")
12361                  rest)))
12362 @end example
12364 The @code{base-initrd} procedure also handles common use cases that
12365 involves using the system as a QEMU guest, or as a ``live'' system with
12366 volatile root file system.
12368 The initial RAM disk produced by @code{base-initrd} honors several
12369 options passed on the Linux kernel command line (that is, arguments
12370 passed @i{via} the @code{linux} command of GRUB, or the
12371 @code{-append} option of QEMU), notably:
12373 @table @code
12374 @item --load=@var{boot}
12375 Tell the initial RAM disk to load @var{boot}, a file containing a Scheme
12376 program, once it has mounted the root file system.
12378 GuixSD uses this option to yield control to a boot program that runs the
12379 service activation programs and then spawns the GNU@tie{}Shepherd, the
12380 initialization system.
12382 @item --root=@var{root}
12383 Mount @var{root} as the root file system.  @var{root} can be a
12384 device name like @code{/dev/sda1}, a partition label, or a partition
12385 UUID.
12387 @item --system=@var{system}
12388 Have @file{/run/booted-system} and @file{/run/current-system} point to
12389 @var{system}.
12391 @item modprobe.blacklist=@var{modules}@dots{}
12392 @cindex module, black-listing
12393 @cindex black list, of kernel modules
12394 Instruct the initial RAM disk as well as the @command{modprobe} command
12395 (from the kmod package) to refuse to load @var{modules}.  @var{modules}
12396 must be a comma-separated list of module names---e.g.,
12397 @code{usbkbd,9pnet}.
12399 @item --repl
12400 Start a read-eval-print loop (REPL) from the initial RAM disk before it
12401 tries to load kernel modules and to mount the root file system.  Our
12402 marketing team calls it @dfn{boot-to-Guile}.  The Schemer in you will
12403 love it.  @xref{Using Guile Interactively,,, guile, GNU Guile Reference
12404 Manual}, for more information on Guile's REPL.
12406 @end table
12408 Now that you know all the features that initial RAM disks produced by
12409 @code{base-initrd} provide, here is how to use it and customize it
12410 further.
12412 @cindex initrd
12413 @cindex initial RAM disk
12414 @deffn {Monadic Procedure} base-initrd @var{file-systems} @
12415        [#:qemu-networking? #f] [#:virtio? #t] [#:volatile-root? #f] @
12416        [#:extra-modules '()] [#:mapped-devices '()]
12417 Return a monadic derivation that builds a generic initrd.  @var{file-systems} is
12418 a list of file systems to be mounted by the initrd, possibly in addition to
12419 the root file system specified on the kernel command line via @code{--root}.
12420 @var{mapped-devices} is a list of device mappings to realize before
12421 @var{file-systems} are mounted (@pxref{Mapped Devices}).
12423 When @var{qemu-networking?} is true, set up networking with the standard QEMU
12424 parameters.  When @var{virtio?} is true, load additional modules so that the
12425 initrd can be used as a QEMU guest with para-virtualized I/O drivers.
12427 When @var{volatile-root?} is true, the root file system is writable but any changes
12428 to it are lost.
12430 The initrd is automatically populated with all the kernel modules necessary
12431 for @var{file-systems} and for the given options.  However, additional kernel
12432 modules can be listed in @var{extra-modules}.  They will be added to the initrd, and
12433 loaded at boot time in the order in which they appear.
12434 @end deffn
12436 Needless to say, the initrds we produce and use embed a
12437 statically-linked Guile, and the initialization program is a Guile
12438 program.  That gives a lot of flexibility.  The
12439 @code{expression->initrd} procedure builds such an initrd, given the
12440 program to run in that initrd.
12442 @deffn {Monadic Procedure} expression->initrd @var{exp} @
12443        [#:guile %guile-static-stripped] [#:name "guile-initrd"]
12444 Return a derivation that builds a Linux initrd (a gzipped cpio archive)
12445 containing @var{guile} and that evaluates @var{exp}, a G-expression,
12446 upon booting.  All the derivations referenced by @var{exp} are
12447 automatically copied to the initrd.
12448 @end deffn
12450 @node GRUB Configuration
12451 @subsection GRUB Configuration
12453 @cindex GRUB
12454 @cindex boot loader
12456 The operating system uses GNU@tie{}GRUB as its boot loader
12457 (@pxref{Overview, overview of GRUB,, grub, GNU GRUB Manual}).  It is
12458 configured using a @code{grub-configuration} declaration.  This data type
12459 is exported by the @code{(gnu system grub)} module and described below.
12461 @deftp {Data Type} grub-configuration
12462 The type of a GRUB configuration declaration.
12464 @table @asis
12466 @item @code{device}
12467 This is a string denoting the boot device.  It must be a device name
12468 understood by the @command{grub-install} command, such as
12469 @code{/dev/sda} or @code{(hd0)} (@pxref{Invoking grub-install,,, grub,
12470 GNU GRUB Manual}).
12472 @item @code{menu-entries} (default: @code{()})
12473 A possibly empty list of @code{menu-entry} objects (see below), denoting
12474 entries to appear in the GRUB boot menu, in addition to the current
12475 system entry and the entry pointing to previous system generations.
12477 @item @code{default-entry} (default: @code{0})
12478 The index of the default boot menu entry.  Index 0 is for the entry of the
12479 current system.
12481 @item @code{timeout} (default: @code{5})
12482 The number of seconds to wait for keyboard input before booting.  Set to
12483 0 to boot immediately, and to -1 to wait indefinitely.
12485 @item @code{theme} (default: @var{%default-theme})
12486 The @code{grub-theme} object describing the theme to use.
12487 @end table
12489 @end deftp
12491 @cindex dual boot
12492 @cindex boot menu
12493 Should you want to list additional boot menu entries @i{via} the
12494 @code{menu-entries} field above, you will need to create them with the
12495 @code{menu-entry} form.  For example, imagine you want to be able to
12496 boot another distro (hard to imagine!), you can define a menu entry
12497 along these lines:
12499 @example
12500 (menu-entry
12501   (label "The Other Distro")
12502   (linux "/boot/old/vmlinux-2.6.32")
12503   (linux-arguments '("root=/dev/sda2"))
12504   (initrd "/boot/old/initrd"))
12505 @end example
12507 Details below.
12509 @deftp {Data Type} menu-entry
12510 The type of an entry in the GRUB boot menu.
12512 @table @asis
12514 @item @code{label}
12515 The label to show in the menu---e.g., @code{"GNU"}.
12517 @item @code{linux}
12518 The Linux kernel image to boot, for example:
12520 @example
12521 (file-append linux-libre "/bzImage")
12522 @end example
12524 It is also possible to specify a device explicitly in the file path
12525 using GRUB's device naming convention (@pxref{Naming convention,,, grub,
12526 GNU GRUB manual}), for example:
12528 @example
12529 "(hd0,msdos1)/boot/vmlinuz"
12530 @end example
12532 If the device is specified explicitly as above, then the @code{device}
12533 field is ignored entirely.
12535 @item @code{linux-arguments} (default: @code{()})
12536 The list of extra Linux kernel command-line arguments---e.g.,
12537 @code{("console=ttyS0")}.
12539 @item @code{initrd}
12540 A G-Expression or string denoting the file name of the initial RAM disk
12541 to use (@pxref{G-Expressions}).
12543 @item @code{device} (default: @code{#f})
12544 The device where the kernel and initrd are to be found---i.e., the GRUB
12545 @dfn{root} for this menu entry (@pxref{root,,, grub, GNU GRUB manual}).
12547 This may be a file system label (a string), a file system UUID (a
12548 bytevector, @pxref{File Systems}), or @code{#f}, in which case GRUB will
12549 search the device containing the file specified by the @code{linux}
12550 field (@pxref{search,,, grub, GNU GRUB manual}).  It must @emph{not} be
12551 an OS device name such as @file{/dev/sda1}.
12553 @item @code{device-mount-point} (default: @code{"/"})
12554 The mount point of the above device on the system.  You probably do not
12555 need to change the default value.  GuixSD uses it to strip the prefix of
12556 store file names for systems where @file{/gnu} or @file{/gnu/store} is
12557 on a separate partition.
12559 @end table
12560 @end deftp
12562 @c FIXME: Write documentation once it's stable.
12563 Themes are created using the @code{grub-theme} form, which is not
12564 documented yet.
12566 @defvr {Scheme Variable} %default-theme
12567 This is the default GRUB theme used by the operating system, with a
12568 fancy background image displaying the GNU and Guix logos.
12569 @end defvr
12572 @node Invoking guix system
12573 @subsection Invoking @code{guix system}
12575 Once you have written an operating system declaration as seen in the
12576 previous section, it can be @dfn{instantiated} using the @command{guix
12577 system} command.  The synopsis is:
12579 @example
12580 guix system @var{options}@dots{} @var{action} @var{file}
12581 @end example
12583 @var{file} must be the name of a file containing an
12584 @code{operating-system} declaration.  @var{action} specifies how the
12585 operating system is instantiated.  Currently the following values are
12586 supported:
12588 @table @code
12589 @item reconfigure
12590 Build the operating system described in @var{file}, activate it, and
12591 switch to it@footnote{This action (and the related actions
12592 @code{switch-generation} and @code{roll-back}) are usable only on
12593 systems already running GuixSD.}.
12595 This effects all the configuration specified in @var{file}: user
12596 accounts, system services, global package list, setuid programs, etc.
12597 The command starts system services specified in @var{file} that are not
12598 currently running; if a service is currently running, it does not
12599 attempt to upgrade it since this would not be possible without stopping it
12600 first.
12602 It also adds a GRUB menu entry for the new OS configuration, and moves
12603 entries for older configurations to a submenu---unless
12604 @option{--no-grub} is passed.
12606 @quotation Note
12607 @c The paragraph below refers to the problem discussed at
12608 @c <http://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
12609 It is highly recommended to run @command{guix pull} once before you run
12610 @command{guix system reconfigure} for the first time (@pxref{Invoking
12611 guix pull}).  Failing to do that you would see an older version of Guix
12612 once @command{reconfigure} has completed.
12613 @end quotation
12615 @item switch-generation
12616 @cindex generations
12617 Switch to an existing system generation.  This action atomically
12618 switches the system profile to the specified system generation.  It also
12619 rearranges the system's existing GRUB menu entries.  It makes the menu
12620 entry for the specified system generation the default, and it moves the
12621 entries for the other generations to a submenu.  The next time the
12622 system boots, it will use the specified system generation.
12624 The target generation can be specified explicitly by its generation
12625 number.  For example, the following invocation would switch to system
12626 generation 7:
12628 @example
12629 guix system switch-generation 7
12630 @end example
12632 The target generation can also be specified relative to the current
12633 generation with the form @code{+N} or @code{-N}, where @code{+3} means
12634 ``3 generations ahead of the current generation,'' and @code{-1} means
12635 ``1 generation prior to the current generation.''  When specifying a
12636 negative value such as @code{-1}, you must precede it with @code{--} to
12637 prevent it from being parsed as an option.  For example:
12639 @example
12640 guix system switch-generation -- -1
12641 @end example
12643 Currently, the effect of invoking this action is @emph{only} to switch
12644 the system profile to an existing generation and rearrange the GRUB menu
12645 entries.  To actually start using the target system generation, you must
12646 reboot after running this action.  In the future, it will be updated to
12647 do the same things as @command{reconfigure}, like activating and
12648 deactivating services.
12650 This action will fail if the specified generation does not exist.
12652 @item roll-back
12653 @cindex rolling back
12654 Switch to the preceding system generation.  The next time the system
12655 boots, it will use the preceding system generation.  This is the inverse
12656 of @command{reconfigure}, and it is exactly the same as invoking
12657 @command{switch-generation} with an argument of @code{-1}.
12659 Currently, as with @command{switch-generation}, you must reboot after
12660 running this action to actually start using the preceding system
12661 generation.
12663 @item build
12664 Build the derivation of the operating system, which includes all the
12665 configuration files and programs needed to boot and run the system.
12666 This action does not actually install anything.
12668 @item init
12669 Populate the given directory with all the files necessary to run the
12670 operating system specified in @var{file}.  This is useful for first-time
12671 installations of GuixSD.  For instance:
12673 @example
12674 guix system init my-os-config.scm /mnt
12675 @end example
12677 copies to @file{/mnt} all the store items required by the configuration
12678 specified in @file{my-os-config.scm}.  This includes configuration
12679 files, packages, and so on.  It also creates other essential files
12680 needed for the system to operate correctly---e.g., the @file{/etc},
12681 @file{/var}, and @file{/run} directories, and the @file{/bin/sh} file.
12683 This command also installs GRUB on the device specified in
12684 @file{my-os-config}, unless the @option{--no-grub} option was passed.
12686 @item vm
12687 @cindex virtual machine
12688 @cindex VM
12689 @anchor{guix system vm}
12690 Build a virtual machine that contains the operating system declared in
12691 @var{file}, and return a script to run that virtual machine (VM).
12692 Arguments given to the script are passed to QEMU.
12694 The VM shares its store with the host system.
12696 Additional file systems can be shared between the host and the VM using
12697 the @code{--share} and @code{--expose} command-line options: the former
12698 specifies a directory to be shared with write access, while the latter
12699 provides read-only access to the shared directory.
12701 The example below creates a VM in which the user's home directory is
12702 accessible read-only, and where the @file{/exchange} directory is a
12703 read-write mapping of @file{$HOME/tmp} on the host:
12705 @example
12706 guix system vm my-config.scm \
12707    --expose=$HOME --share=$HOME/tmp=/exchange
12708 @end example
12710 On GNU/Linux, the default is to boot directly to the kernel; this has
12711 the advantage of requiring only a very tiny root disk image since the
12712 store of the host can then be mounted.
12714 The @code{--full-boot} option forces a complete boot sequence, starting
12715 with the bootloader.  This requires more disk space since a root image
12716 containing at least the kernel, initrd, and bootloader data files must
12717 be created.  The @code{--image-size} option can be used to specify the
12718 size of the image.
12720 @item vm-image
12721 @itemx disk-image
12722 Return a virtual machine or disk image of the operating system declared
12723 in @var{file} that stands alone.  Use the @option{--image-size} option
12724 to specify the size of the image.
12726 When using @code{vm-image}, the returned image is in qcow2 format, which
12727 the QEMU emulator can efficiently use. @xref{Running GuixSD in a VM},
12728 for more information on how to run the image in a virtual machine.
12730 When using @code{disk-image}, a raw disk image is produced; it can be
12731 copied as is to a USB stick, for instance.  Assuming @code{/dev/sdc} is
12732 the device corresponding to a USB stick, one can copy the image to it
12733 using the following command:
12735 @example
12736 # dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
12737 @end example
12739 @item container
12740 Return a script to run the operating system declared in @var{file}
12741 within a container.  Containers are a set of lightweight isolation
12742 mechanisms provided by the kernel Linux-libre.  Containers are
12743 substantially less resource-demanding than full virtual machines since
12744 the kernel, shared objects, and other resources can be shared with the
12745 host system; this also means they provide thinner isolation.
12747 Currently, the script must be run as root in order to support more than
12748 a single user and group.  The container shares its store with the host
12749 system.
12751 As with the @code{vm} action (@pxref{guix system vm}), additional file
12752 systems to be shared between the host and container can be specified
12753 using the @option{--share} and @option{--expose} options:
12755 @example
12756 guix system container my-config.scm \
12757    --expose=$HOME --share=$HOME/tmp=/exchange
12758 @end example
12760 @quotation Note
12761 This option requires Linux-libre 3.19 or newer.
12762 @end quotation
12764 @end table
12766 @var{options} can contain any of the common build options (@pxref{Common
12767 Build Options}).  In addition, @var{options} can contain one of the
12768 following:
12770 @table @option
12771 @item --system=@var{system}
12772 @itemx -s @var{system}
12773 Attempt to build for @var{system} instead of the host system type.
12774 This works as per @command{guix build} (@pxref{Invoking guix build}).
12776 @item --derivation
12777 @itemx -d
12778 Return the derivation file name of the given operating system without
12779 building anything.
12781 @item --image-size=@var{size}
12782 For the @code{vm-image} and @code{disk-image} actions, create an image
12783 of the given @var{size}.  @var{size} may be a number of bytes, or it may
12784 include a unit as a suffix (@pxref{Block size, size specifications,,
12785 coreutils, GNU Coreutils}).
12787 @item --on-error=@var{strategy}
12788 Apply @var{strategy} when an error occurs when reading @var{file}.
12789 @var{strategy} may be one of the following:
12791 @table @code
12792 @item nothing-special
12793 Report the error concisely and exit.  This is the default strategy.
12795 @item backtrace
12796 Likewise, but also display a backtrace.
12798 @item debug
12799 Report the error and enter Guile's debugger.  From there, you can run
12800 commands such as @code{,bt} to get a backtrace, @code{,locals} to
12801 display local variable values, and more generally inspect the state of the
12802 program.  @xref{Debug Commands,,, guile, GNU Guile Reference Manual}, for
12803 a list of available debugging commands.
12804 @end table
12805 @end table
12807 @quotation Note
12808 All the actions above, except @code{build} and @code{init},
12809 can use KVM support in the Linux-libre kernel.  Specifically, if the
12810 machine has hardware virtualization support, the corresponding
12811 KVM kernel module should be loaded, and the @file{/dev/kvm} device node
12812 must exist and be readable and writable by the user and by the
12813 build users of the daemon (@pxref{Build Environment Setup}).
12814 @end quotation
12816 Once you have built, configured, re-configured, and re-re-configured
12817 your GuixSD installation, you may find it useful to list the operating
12818 system generations available on disk---and that you can choose from the
12819 GRUB boot menu:
12821 @table @code
12823 @item list-generations
12824 List a summary of each generation of the operating system available on
12825 disk, in a human-readable way.  This is similar to the
12826 @option{--list-generations} option of @command{guix package}
12827 (@pxref{Invoking guix package}).
12829 Optionally, one can specify a pattern, with the same syntax that is used
12830 in @command{guix package --list-generations}, to restrict the list of
12831 generations displayed.  For instance, the following command displays
12832 generations that are up to 10 days old:
12834 @example
12835 $ guix system list-generations 10d
12836 @end example
12838 @end table
12840 The @command{guix system} command has even more to offer!  The following
12841 sub-commands allow you to visualize how your system services relate to
12842 each other:
12844 @anchor{system-extension-graph}
12845 @table @code
12847 @item extension-graph
12848 Emit in Dot/Graphviz format to standard output the @dfn{service
12849 extension graph} of the operating system defined in @var{file}
12850 (@pxref{Service Composition}, for more information on service
12851 extensions.)
12853 The command:
12855 @example
12856 $ guix system extension-graph @var{file} | dot -Tpdf > services.pdf
12857 @end example
12859 produces a PDF file showing the extension relations among services.
12861 @anchor{system-shepherd-graph}
12862 @item shepherd-graph
12863 Emit in Dot/Graphviz format to standard output the @dfn{dependency
12864 graph} of shepherd services of the operating system defined in
12865 @var{file}.  @xref{Shepherd Services}, for more information and for an
12866 example graph.
12868 @end table
12870 @node Running GuixSD in a VM
12871 @subsection Running GuixSD in a Virtual Machine
12873 @cindex virtual machine
12874 One way to run GuixSD in a virtual machine (VM) is to build a GuixSD
12875 virtual machine image using @command{guix system vm-image}
12876 (@pxref{Invoking guix system}).  The returned image is in qcow2 format,
12877 which the @uref{http://qemu.org/, QEMU emulator} can efficiently use.
12879 @cindex QEMU
12880 To run the image in QEMU, copy it out of the store (@pxref{The Store})
12881 and give yourself permission to write to the copy.  When invoking QEMU,
12882 you must choose a system emulator that is suitable for your hardware
12883 platform.  Here is a minimal QEMU invocation that will boot the result
12884 of @command{guix system vm-image} on x86_64 hardware:
12886 @example
12887 $ qemu-system-x86_64 \
12888    -net user -net nic,model=virtio \
12889    -enable-kvm -m 256 /tmp/qemu-image
12890 @end example
12892 Here is what each of these options means:
12894 @table @code
12895 @item qemu-system-x86_64
12896 This specifies the hardware platform to emulate.  This should match the
12897 host.
12899 @item -net user
12900 Enable the unprivileged user-mode network stack.  The guest OS can
12901 access the host but not vice versa.  This is the simplest way to get the
12902 guest OS online.
12904 @item -net nic,model=virtio
12905 You must create a network interface of a given model.  If you do not
12906 create a NIC, the boot will fail.  Assuming your hardware platform is
12907 x86_64, you can get a list of available NIC models by running
12908 @command{qemu-system-x86_64 -net nic,model=help}.
12910 @item -enable-kvm
12911 If your system has hardware virtualization extensions, enabling the
12912 virtual machine support (KVM) of the Linux kernel will make things run
12913 faster.
12915 @item -m 256
12916 RAM available to the guest OS, in mebibytes.  Defaults to 128@tie{}MiB,
12917 which may be insufficient for some operations.
12919 @item /tmp/qemu-image
12920 The file name of the qcow2 image.
12921 @end table
12923 The default @command{run-vm.sh} script that is returned by an invokation of
12924 @command{guix system vm} does not add a @command{-net user} flag by default.
12925 To get network access from within the vm add the @code{(dhcp-client-service)}
12926 to your system definition and start the VM using
12927 @command{`guix system vm config.scm` -net user}.  An important caveat of using
12928 @command{-net user} for networking is that @command{ping} will not work, because
12929 it uses the ICMP protocol.  You'll have to use a different command to check for
12930 network connectivity, like for example @command{curl}.
12932 @subsubsection Connecting Through SSH
12934 @cindex SSH
12935 @cindex SSH server
12936 To enable SSH inside a VM you need to add a SSH server like @code{(dropbear-service)}
12937 or @code{(lsh-service)} to your VM.  The @code{(lsh-service}) doesn't currently
12938 boot unsupervised.  It requires you to type some characters to initialize the
12939 randomness generator.  In addition you need to forward the SSH port, 22 by
12940 default, to the host.  You can do this with
12942 @example
12943 `guix system vm config.scm` -net user,hostfwd=tcp::10022-:22
12944 @end example
12946 To connect to the VM you can run
12948 @example
12949 ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022
12950 @end example
12952 The @command{-p} tells @command{ssh} the port you want to connect to.
12953 @command{-o UserKnownHostsFile=/dev/null} prevents @command{ssh} from complaining
12954 every time you modify your @command{config.scm} file and the
12955 @command{-o StrictHostKeyChecking=no} prevents you from having to allow a
12956 connection to an unknown host every time you connect.
12958 @subsubsection Using @command{virt-viewer} with Spice
12960 As an alternative to the default @command{qemu} graphical client you can
12961 use the @command{remote-viewer} from the @command{virt-viewer} package.  To
12962 connect pass the @command{-spice port=5930,disable-ticketing} flag to
12963 @command{qemu}.  See previous section for further information on how to do this.
12965 Spice also allows you to do some nice stuff like share your clipboard with your
12966 VM.  To enable that you'll also have to pass the following flags to @command{qemu}:
12968 @example
12969 -device virtio-serial-pci,id=virtio-serial0,max_ports=16,bus=pci.0,addr=0x5
12970 -chardev spicevmc,name=vdagent,id=vdagent
12971 -device virtserialport,nr=1,bus=virtio-serial0.0,chardev=vdagent,
12972 name=com.redhat.spice.0
12973 @end example
12975 You'll also need to add the @pxref{Miscellaneous Services, Spice service}.
12977 @node Defining Services
12978 @subsection Defining Services
12980 The previous sections show the available services and how one can combine
12981 them in an @code{operating-system} declaration.  But how do we define
12982 them in the first place?  And what is a service anyway?
12984 @menu
12985 * Service Composition::         The model for composing services.
12986 * Service Types and Services::  Types and services.
12987 * Service Reference::           API reference.
12988 * Shepherd Services::           A particular type of service.
12989 @end menu
12991 @node Service Composition
12992 @subsubsection Service Composition
12994 @cindex services
12995 @cindex daemons
12996 Here we define a @dfn{service} as, broadly, something that extends the
12997 functionality of the operating system.  Often a service is a process---a
12998 @dfn{daemon}---started when the system boots: a secure shell server, a
12999 Web server, the Guix build daemon, etc.  Sometimes a service is a daemon
13000 whose execution can be triggered by another daemon---e.g., an FTP server
13001 started by @command{inetd} or a D-Bus service activated by
13002 @command{dbus-daemon}.  Occasionally, a service does not map to a
13003 daemon.  For instance, the ``account'' service collects user accounts
13004 and makes sure they exist when the system runs; the ``udev'' service
13005 collects device management rules and makes them available to the eudev
13006 daemon; the @file{/etc} service populates the @file{/etc} directory
13007 of the system.
13009 @cindex service extensions
13010 GuixSD services are connected by @dfn{extensions}.  For instance, the
13011 secure shell service @emph{extends} the Shepherd---the GuixSD
13012 initialization system, running as PID@tie{}1---by giving it the command
13013 lines to start and stop the secure shell daemon (@pxref{Networking
13014 Services, @code{lsh-service}}); the UPower service extends the D-Bus
13015 service by passing it its @file{.service} specification, and extends the
13016 udev service by passing it device management rules (@pxref{Desktop
13017 Services, @code{upower-service}}); the Guix daemon service extends the
13018 Shepherd by passing it the command lines to start and stop the daemon,
13019 and extends the account service by passing it a list of required build
13020 user accounts (@pxref{Base Services}).
13022 All in all, services and their ``extends'' relations form a directed
13023 acyclic graph (DAG).  If we represent services as boxes and extensions
13024 as arrows, a typical system might provide something like this:
13026 @image{images/service-graph,,5in,Typical service extension graph.}
13028 @cindex system service
13029 At the bottom, we see the @dfn{system service}, which produces the
13030 directory containing everything to run and boot the system, as returned
13031 by the @command{guix system build} command.  @xref{Service Reference},
13032 to learn about the other service types shown here.
13033 @xref{system-extension-graph, the @command{guix system extension-graph}
13034 command}, for information on how to generate this representation for a
13035 particular operating system definition.
13037 @cindex service types
13038 Technically, developers can define @dfn{service types} to express these
13039 relations.  There can be any number of services of a given type on the
13040 system---for instance, a system running two instances of the GNU secure
13041 shell server (lsh) has two instances of @var{lsh-service-type}, with
13042 different parameters.
13044 The following section describes the programming interface for service
13045 types and services.
13047 @node Service Types and Services
13048 @subsubsection Service Types and Services
13050 A @dfn{service type} is a node in the DAG described above.  Let us start
13051 with a simple example, the service type for the Guix build daemon
13052 (@pxref{Invoking guix-daemon}):
13054 @example
13055 (define guix-service-type
13056   (service-type
13057    (name 'guix)
13058    (extensions
13059     (list (service-extension shepherd-root-service-type guix-shepherd-service)
13060           (service-extension account-service-type guix-accounts)
13061           (service-extension activation-service-type guix-activation)))))
13062 @end example
13064 @noindent
13065 It defines two things:
13067 @enumerate
13068 @item
13069 A name, whose sole purpose is to make inspection and debugging easier.
13071 @item
13072 A list of @dfn{service extensions}, where each extension designates the
13073 target service type and a procedure that, given the parameters of the
13074 service, returns a list of objects to extend the service of that type.
13076 Every service type has at least one service extension.  The only
13077 exception is the @dfn{boot service type}, which is the ultimate service.
13078 @end enumerate
13080 In this example, @var{guix-service-type} extends three services:
13082 @table @var
13083 @item shepherd-root-service-type
13084 The @var{guix-shepherd-service} procedure defines how the Shepherd
13085 service is extended.  Namely, it returns a @code{<shepherd-service>}
13086 object that defines how @command{guix-daemon} is started and stopped
13087 (@pxref{Shepherd Services}).
13089 @item account-service-type
13090 This extension for this service is computed by @var{guix-accounts},
13091 which returns a list of @code{user-group} and @code{user-account}
13092 objects representing the build user accounts (@pxref{Invoking
13093 guix-daemon}).
13095 @item activation-service-type
13096 Here @var{guix-activation} is a procedure that returns a gexp, which is
13097 a code snippet to run at ``activation time''---e.g., when the service is
13098 booted.
13099 @end table
13101 A service of this type is instantiated like this:
13103 @example
13104 (service guix-service-type
13105          (guix-configuration
13106            (build-accounts 5)
13107            (use-substitutes? #f)))
13108 @end example
13110 The second argument to the @code{service} form is a value representing
13111 the parameters of this specific service instance.
13112 @xref{guix-configuration-type, @code{guix-configuration}}, for
13113 information about the @code{guix-configuration} data type.
13115 @var{guix-service-type} is quite simple because it extends other
13116 services but is not extensible itself.
13118 @c @subsubsubsection Extensible Service Types
13120 The service type for an @emph{extensible} service looks like this:
13122 @example
13123 (define udev-service-type
13124   (service-type (name 'udev)
13125                 (extensions
13126                  (list (service-extension shepherd-root-service-type
13127                                           udev-shepherd-service)))
13129                 (compose concatenate)       ;concatenate the list of rules
13130                 (extend (lambda (config rules)
13131                           (match config
13132                             (($ <udev-configuration> udev initial-rules)
13133                              (udev-configuration
13134                               (udev udev)   ;the udev package to use
13135                               (rules (append initial-rules rules)))))))))
13136 @end example
13138 This is the service type for the
13139 @uref{https://wiki.gentoo.org/wiki/Project:Eudev, eudev device
13140 management daemon}.  Compared to the previous example, in addition to an
13141 extension of @var{shepherd-root-service-type}, we see two new fields:
13143 @table @code
13144 @item compose
13145 This is the procedure to @dfn{compose} the list of extensions to
13146 services of this type.
13148 Services can extend the udev service by passing it lists of rules; we
13149 compose those extensions simply by concatenating them.
13151 @item extend
13152 This procedure defines how the value of the service is @dfn{extended} with
13153 the composition of the extensions.
13155 Udev extensions are composed into a list of rules, but the udev service
13156 value is itself a @code{<udev-configuration>} record.  So here, we
13157 extend that record by appending the list of rules it contains to the
13158 list of contributed rules.
13159 @end table
13161 There can be only one instance of an extensible service type such as
13162 @var{udev-service-type}.  If there were more, the
13163 @code{service-extension} specifications would be ambiguous.
13165 Still here?  The next section provides a reference of the programming
13166 interface for services.
13168 @node Service Reference
13169 @subsubsection Service Reference
13171 We have seen an overview of service types (@pxref{Service Types and
13172 Services}).  This section provides a reference on how to manipulate
13173 services and service types.  This interface is provided by the
13174 @code{(gnu services)} module.
13176 @deffn {Scheme Procedure} service @var{type} @var{value}
13177 Return a new service of @var{type}, a @code{<service-type>} object (see
13178 below.)  @var{value} can be any object; it represents the parameters of
13179 this particular service instance.
13180 @end deffn
13182 @deffn {Scheme Procedure} service? @var{obj}
13183 Return true if @var{obj} is a service.
13184 @end deffn
13186 @deffn {Scheme Procedure} service-kind @var{service}
13187 Return the type of @var{service}---i.e., a @code{<service-type>} object.
13188 @end deffn
13190 @deffn {Scheme Procedure} service-parameters @var{service}
13191 Return the value associated with @var{service}.  It represents its
13192 parameters.
13193 @end deffn
13195 Here is an example of how a service is created and manipulated:
13197 @example
13198 (define s
13199   (service nginx-service-type
13200            (nginx-configuration
13201             (nginx nginx)
13202             (log-directory log-directory)
13203             (run-directory run-directory)
13204             (file config-file))))
13206 (service? s)
13207 @result{} #t
13209 (eq? (service-kind s) nginx-service-type)
13210 @result{} #t
13211 @end example
13213 The @code{modify-services} form provides a handy way to change the
13214 parameters of some of the services of a list such as
13215 @var{%base-services} (@pxref{Base Services, @code{%base-services}}).  It
13216 evaluates to a list of services.  Of course, you could always use
13217 standard list combinators such as @code{map} and @code{fold} to do that
13218 (@pxref{SRFI-1, List Library,, guile, GNU Guile Reference Manual});
13219 @code{modify-services} simply provides a more concise form for this
13220 common pattern.
13222 @deffn {Scheme Syntax} modify-services @var{services} @
13223   (@var{type} @var{variable} => @var{body}) @dots{}
13225 Modify the services listed in @var{services} according to the given
13226 clauses.  Each clause has the form:
13228 @example
13229 (@var{type} @var{variable} => @var{body})
13230 @end example
13232 where @var{type} is a service type---e.g.,
13233 @code{guix-service-type}---and @var{variable} is an identifier that is
13234 bound within the @var{body} to the service parameters---e.g., a
13235 @code{guix-configuration} instance---of the original service of that
13236 @var{type}.
13238 The @var{body} should evaluate to the new service parameters, which will
13239 be used to configure the new service.  This new service will replace the
13240 original in the resulting list.  Because a service's service parameters
13241 are created using @code{define-record-type*}, you can write a succinct
13242 @var{body} that evaluates to the new service parameters by using the
13243 @code{inherit} feature that @code{define-record-type*} provides.
13245 @xref{Using the Configuration System}, for example usage.
13247 @end deffn
13249 Next comes the programming interface for service types.  This is
13250 something you want to know when writing new service definitions, but not
13251 necessarily when simply looking for ways to customize your
13252 @code{operating-system} declaration.
13254 @deftp {Data Type} service-type
13255 @cindex service type
13256 This is the representation of a @dfn{service type} (@pxref{Service Types
13257 and Services}).
13259 @table @asis
13260 @item @code{name}
13261 This is a symbol, used only to simplify inspection and debugging.
13263 @item @code{extensions}
13264 A non-empty list of @code{<service-extension>} objects (see below).
13266 @item @code{compose} (default: @code{#f})
13267 If this is @code{#f}, then the service type denotes services that cannot
13268 be extended---i.e., services that do not receive ``values'' from other
13269 services.
13271 Otherwise, it must be a one-argument procedure.  The procedure is called
13272 by @code{fold-services} and is passed a list of values collected from
13273 extensions.  It must return a value that is a valid parameter value for
13274 the service instance.
13276 @item @code{extend} (default: @code{#f})
13277 If this is @code{#f}, services of this type cannot be extended.
13279 Otherwise, it must be a two-argument procedure: @code{fold-services}
13280 calls it, passing it the initial value of the service as the first argument
13281 and the result of applying @code{compose} to the extension values as the
13282 second argument.
13283 @end table
13285 @xref{Service Types and Services}, for examples.
13286 @end deftp
13288 @deffn {Scheme Procedure} service-extension @var{target-type} @
13289                               @var{compute}
13290 Return a new extension for services of type @var{target-type}.
13291 @var{compute} must be a one-argument procedure: @code{fold-services}
13292 calls it, passing it the value associated with the service that provides
13293 the extension; it must return a valid value for the target service.
13294 @end deffn
13296 @deffn {Scheme Procedure} service-extension? @var{obj}
13297 Return true if @var{obj} is a service extension.
13298 @end deffn
13300 Occasionally, you might want to simply extend an existing service.  This
13301 involves creating a new service type and specifying the extension of
13302 interest, which can be verbose; the @code{simple-service} procedure
13303 provides a shorthand for this.
13305 @deffn {Scheme Procedure} simple-service @var{name} @var{target} @var{value}
13306 Return a service that extends @var{target} with @var{value}.  This works
13307 by creating a singleton service type @var{name}, of which the returned
13308 service is an instance.
13310 For example, this extends mcron (@pxref{Scheduled Job Execution}) with
13311 an additional job:
13313 @example
13314 (simple-service 'my-mcron-job mcron-service-type
13315                 #~(job '(next-hour (3)) "guix gc -F 2G"))
13316 @end example
13317 @end deffn
13319 At the core of the service abstraction lies the @code{fold-services}
13320 procedure, which is responsible for ``compiling'' a list of services
13321 down to a single directory that contains everything needed to boot and
13322 run the system---the directory shown by the @command{guix system build}
13323 command (@pxref{Invoking guix system}).  In essence, it propagates
13324 service extensions down the service graph, updating each node parameters
13325 on the way, until it reaches the root node.
13327 @deffn {Scheme Procedure} fold-services @var{services} @
13328                             [#:target-type @var{system-service-type}]
13329 Fold @var{services} by propagating their extensions down to the root of
13330 type @var{target-type}; return the root service adjusted accordingly.
13331 @end deffn
13333 Lastly, the @code{(gnu services)} module also defines several essential
13334 service types, some of which are listed below.
13336 @defvr {Scheme Variable} system-service-type
13337 This is the root of the service graph.  It produces the system directory
13338 as returned by the @command{guix system build} command.
13339 @end defvr
13341 @defvr {Scheme Variable} boot-service-type
13342 The type of the ``boot service'', which produces the @dfn{boot script}.
13343 The boot script is what the initial RAM disk runs when booting.
13344 @end defvr
13346 @defvr {Scheme Variable} etc-service-type
13347 The type of the @file{/etc} service.  This service can be extended by
13348 passing it name/file tuples such as:
13350 @example
13351 (list `("issue" ,(plain-file "issue" "Welcome!\n")))
13352 @end example
13354 In this example, the effect would be to add an @file{/etc/issue} file
13355 pointing to the given file.
13356 @end defvr
13358 @defvr {Scheme Variable} setuid-program-service-type
13359 Type for the ``setuid-program service''.  This service collects lists of
13360 executable file names, passed as gexps, and adds them to the set of
13361 setuid-root programs on the system (@pxref{Setuid Programs}).
13362 @end defvr
13364 @defvr {Scheme Variable} profile-service-type
13365 Type of the service that populates the @dfn{system profile}---i.e., the
13366 programs under @file{/run/current-system/profile}.  Other services can
13367 extend it by passing it lists of packages to add to the system profile.
13368 @end defvr
13371 @node Shepherd Services
13372 @subsubsection Shepherd Services
13374 @cindex shepherd services
13375 @cindex PID 1
13376 @cindex init system
13377 The @code{(gnu services shepherd)} module provides a way to define
13378 services managed by the GNU@tie{}Shepherd, which is the GuixSD
13379 initialization system---the first process that is started when the
13380 system boots, also known as PID@tie{}1
13381 (@pxref{Introduction,,, shepherd, The GNU Shepherd Manual}).
13383 Services in the Shepherd can depend on each other.  For instance, the
13384 SSH daemon may need to be started after the syslog daemon has been
13385 started, which in turn can only happen once all the file systems have
13386 been mounted.  The simple operating system defined earlier (@pxref{Using
13387 the Configuration System}) results in a service graph like this:
13389 @image{images/shepherd-graph,,5in,Typical shepherd service graph.}
13391 You can actually generate such a graph for any operating system
13392 definition using the @command{guix system shepherd-graph} command
13393 (@pxref{system-shepherd-graph, @command{guix system shepherd-graph}}).
13395 The @var{%shepherd-root-service} is a service object representing
13396 PID@tie{}1, of type @var{shepherd-root-service-type}; it can be extended
13397 by passing it lists of @code{<shepherd-service>} objects.
13399 @deftp {Data Type} shepherd-service
13400 The data type representing a service managed by the Shepherd.
13402 @table @asis
13403 @item @code{provision}
13404 This is a list of symbols denoting what the service provides.
13406 These are the names that may be passed to @command{herd start},
13407 @command{herd status}, and similar commands (@pxref{Invoking herd,,,
13408 shepherd, The GNU Shepherd Manual}).  @xref{Slots of services, the
13409 @code{provides} slot,, shepherd, The GNU Shepherd Manual}, for details.
13411 @item @code{requirements} (default: @code{'()})
13412 List of symbols denoting the Shepherd services this one depends on.
13414 @item @code{respawn?} (default: @code{#t})
13415 Whether to restart the service when it stops, for instance when the
13416 underlying process dies.
13418 @item @code{start}
13419 @itemx @code{stop} (default: @code{#~(const #f)})
13420 The @code{start} and @code{stop} fields refer to the Shepherd's
13421 facilities to start and stop processes (@pxref{Service De- and
13422 Constructors,,, shepherd, The GNU Shepherd Manual}).  They are given as
13423 G-expressions that get expanded in the Shepherd configuration file
13424 (@pxref{G-Expressions}).
13426 @item @code{documentation}
13427 A documentation string, as shown when running:
13429 @example
13430 herd doc @var{service-name}
13431 @end example
13433 where @var{service-name} is one of the symbols in @var{provision}
13434 (@pxref{Invoking herd,,, shepherd, The GNU Shepherd Manual}).
13436 @item @code{modules} (default: @var{%default-modules})
13437 This is the list of modules that must be in scope when @code{start} and
13438 @code{stop} are evaluated.
13440 @end table
13441 @end deftp
13443 @defvr {Scheme Variable} shepherd-root-service-type
13444 The service type for the Shepherd ``root service''---i.e., PID@tie{}1.
13446 This is the service type that extensions target when they want to create
13447 shepherd services (@pxref{Service Types and Services}, for an example).
13448 Each extension must pass a list of @code{<shepherd-service>}.
13449 @end defvr
13451 @defvr {Scheme Variable} %shepherd-root-service
13452 This service represents PID@tie{}1.
13453 @end defvr
13456 @node Installing Debugging Files
13457 @section Installing Debugging Files
13459 @cindex debugging files
13460 Program binaries, as produced by the GCC compilers for instance, are
13461 typically written in the ELF format, with a section containing
13462 @dfn{debugging information}.  Debugging information is what allows the
13463 debugger, GDB, to map binary code to source code; it is required to
13464 debug a compiled program in good conditions.
13466 The problem with debugging information is that is takes up a fair amount
13467 of disk space.  For example, debugging information for the GNU C Library
13468 weighs in at more than 60 MiB.  Thus, as a user, keeping all the
13469 debugging info of all the installed programs is usually not an option.
13470 Yet, space savings should not come at the cost of an impediment to
13471 debugging---especially in the GNU system, which should make it easier
13472 for users to exert their computing freedom (@pxref{GNU Distribution}).
13474 Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a
13475 mechanism that allows users to get the best of both worlds: debugging
13476 information can be stripped from the binaries and stored in separate
13477 files.  GDB is then able to load debugging information from those files,
13478 when they are available (@pxref{Separate Debug Files,,, gdb, Debugging
13479 with GDB}).
13481 The GNU distribution takes advantage of this by storing debugging
13482 information in the @code{lib/debug} sub-directory of a separate package
13483 output unimaginatively called @code{debug} (@pxref{Packages with
13484 Multiple Outputs}).  Users can choose to install the @code{debug} output
13485 of a package when they need it.  For instance, the following command
13486 installs the debugging information for the GNU C Library and for GNU
13487 Guile:
13489 @example
13490 guix package -i glibc:debug guile:debug
13491 @end example
13493 GDB must then be told to look for debug files in the user's profile, by
13494 setting the @code{debug-file-directory} variable (consider setting it
13495 from the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with
13496 GDB}):
13498 @example
13499 (gdb) set debug-file-directory ~/.guix-profile/lib/debug
13500 @end example
13502 From there on, GDB will pick up debugging information from the
13503 @code{.debug} files under @file{~/.guix-profile/lib/debug}.
13505 In addition, you will most likely want GDB to be able to show the source
13506 code being debugged.  To do that, you will have to unpack the source
13507 code of the package of interest (obtained with @code{guix build
13508 --source}, @pxref{Invoking guix build}), and to point GDB to that source
13509 directory using the @code{directory} command (@pxref{Source Path,
13510 @code{directory},, gdb, Debugging with GDB}).
13512 @c XXX: keep me up-to-date
13513 The @code{debug} output mechanism in Guix is implemented by the
13514 @code{gnu-build-system} (@pxref{Build Systems}).  Currently, it is
13515 opt-in---debugging information is available only for the packages
13516 with definitions explicitly declaring a @code{debug} output.  This may be
13517 changed to opt-out in the future if our build farm servers can handle
13518 the load.  To check whether a package has a @code{debug} output, use
13519 @command{guix package --list-available} (@pxref{Invoking guix package}).
13522 @node Security Updates
13523 @section Security Updates
13525 @cindex security updates
13526 @cindex security vulnerabilities
13527 Occasionally, important security vulnerabilities are discovered in software
13528 packages and must be patched.  Guix developers try hard to keep track of
13529 known vulnerabilities and to apply fixes as soon as possible in the
13530 @code{master} branch of Guix (we do not yet provide a ``stable'' branch
13531 containing only security updates.)  The @command{guix lint} tool helps
13532 developers find out about vulnerable versions of software packages in the
13533 distribution:
13535 @smallexample
13536 $ guix lint -c cve
13537 gnu/packages/base.scm:652:2: glibc-2.21: probably vulnerable to CVE-2015-1781, CVE-2015-7547
13538 gnu/packages/gcc.scm:334:2: gcc-4.9.3: probably vulnerable to CVE-2015-5276
13539 gnu/packages/image.scm:312:2: openjpeg-2.1.0: probably vulnerable to CVE-2016-1923, CVE-2016-1924
13540 @dots{}
13541 @end smallexample
13543 @xref{Invoking guix lint}, for more information.
13545 @quotation Note
13546 As of version @value{VERSION}, the feature described below is considered
13547 ``beta''.
13548 @end quotation
13550 Guix follows a functional
13551 package management discipline (@pxref{Introduction}), which implies
13552 that, when a package is changed, @emph{every package that depends on it}
13553 must be rebuilt.  This can significantly slow down the deployment of
13554 fixes in core packages such as libc or Bash, since basically the whole
13555 distribution would need to be rebuilt.  Using pre-built binaries helps
13556 (@pxref{Substitutes}), but deployment may still take more time than
13557 desired.
13559 @cindex grafts
13560 To address this, Guix implements @dfn{grafts}, a mechanism that allows
13561 for fast deployment of critical updates without the costs associated
13562 with a whole-distribution rebuild.  The idea is to rebuild only the
13563 package that needs to be patched, and then to ``graft'' it onto packages
13564 explicitly installed by the user and that were previously referring to
13565 the original package.  The cost of grafting is typically very low, and
13566 order of magnitudes lower than a full rebuild of the dependency chain.
13568 @cindex replacements of packages, for grafts
13569 For instance, suppose a security update needs to be applied to Bash.
13570 Guix developers will provide a package definition for the ``fixed''
13571 Bash, say @var{bash-fixed}, in the usual way (@pxref{Defining
13572 Packages}).  Then, the original package definition is augmented with a
13573 @code{replacement} field pointing to the package containing the bug fix:
13575 @example
13576 (define bash
13577   (package
13578     (name "bash")
13579     ;; @dots{}
13580     (replacement bash-fixed)))
13581 @end example
13583 From there on, any package depending directly or indirectly on Bash---as
13584 reported by @command{guix gc --requisites} (@pxref{Invoking guix
13585 gc})---that is installed is automatically ``rewritten'' to refer to
13586 @var{bash-fixed} instead of @var{bash}.  This grafting process takes
13587 time proportional to the size of the package, usually less than a
13588 minute for an ``average'' package on a recent machine.  Grafting is
13589 recursive: when an indirect dependency requires grafting, then grafting
13590 ``propagates'' up to the package that the user is installing.
13592 Currently, the length of the name and version of the graft and that of
13593 the package it replaces (@var{bash-fixed} and @var{bash} in the example
13594 above) must be equal.  This restriction mostly comes from the fact that
13595 grafting works by patching files, including binary files, directly.
13596 Other restrictions may apply: for instance, when adding a graft to a
13597 package providing a shared library, the original shared library and its
13598 replacement must have the same @code{SONAME} and be binary-compatible.
13600 The @option{--no-grafts} command-line option allows you to forcefully
13601 avoid grafting (@pxref{Common Build Options, @option{--no-grafts}}).
13602 Thus, the command:
13604 @example
13605 guix build bash --no-grafts
13606 @end example
13608 @noindent
13609 returns the store file name of the original Bash, whereas:
13611 @example
13612 guix build bash
13613 @end example
13615 @noindent
13616 returns the store file name of the ``fixed'', replacement Bash.  This
13617 allows you to distinguish between the two variants of Bash.
13619 To verify which Bash your whole profile refers to, you can run
13620 (@pxref{Invoking guix gc}):
13622 @example
13623 guix gc -R `readlink -f ~/.guix-profile` | grep bash
13624 @end example
13626 @noindent
13627 @dots{} and compare the store file names that you get with those above.
13628 Likewise for a complete GuixSD system generation:
13630 @example
13631 guix gc -R `guix system build my-config.scm` | grep bash
13632 @end example
13634 Lastly, to check which Bash running processes are using, you can use the
13635 @command{lsof} command:
13637 @example
13638 lsof | grep /gnu/store/.*bash
13639 @end example
13642 @node Package Modules
13643 @section Package Modules
13645 From a programming viewpoint, the package definitions of the
13646 GNU distribution are provided by Guile modules in the @code{(gnu packages
13647 @dots{})} name space@footnote{Note that packages under the @code{(gnu
13648 packages @dots{})} module name space are not necessarily ``GNU
13649 packages''.  This module naming scheme follows the usual Guile module
13650 naming convention: @code{gnu} means that these modules are distributed
13651 as part of the GNU system, and @code{packages} identifies modules that
13652 define packages.}  (@pxref{Modules, Guile modules,, guile, GNU Guile
13653 Reference Manual}).  For instance, the @code{(gnu packages emacs)}
13654 module exports a variable named @code{emacs}, which is bound to a
13655 @code{<package>} object (@pxref{Defining Packages}).
13657 The @code{(gnu packages @dots{})} module name space is
13658 automatically scanned for packages by the command-line tools.  For
13659 instance, when running @code{guix package -i emacs}, all the @code{(gnu
13660 packages @dots{})} modules are scanned until one that exports a package
13661 object whose name is @code{emacs} is found.  This package search
13662 facility is implemented in the @code{(gnu packages)} module.
13664 @cindex customization, of packages
13665 @cindex package module search path
13666 Users can store package definitions in modules with different
13667 names---e.g., @code{(my-packages emacs)}@footnote{Note that the file
13668 name and module name must match.  For instance, the @code{(my-packages
13669 emacs)} module must be stored in a @file{my-packages/emacs.scm} file
13670 relative to the load path specified with @option{--load-path} or
13671 @code{GUIX_PACKAGE_PATH}.  @xref{Modules and the File System,,,
13672 guile, GNU Guile Reference Manual}, for details.}.  These package definitions
13673 will not be visible by default.  Users can invoke commands such as
13674 @command{guix package} and @command{guix build} with the
13675 @code{-e} option so that they know where to find the package.  Better
13676 yet, they can use the
13677 @code{-L} option of these commands to make those modules visible
13678 (@pxref{Invoking guix build, @code{--load-path}}), or define the
13679 @code{GUIX_PACKAGE_PATH} environment variable.  This environment
13680 variable makes it easy to extend or customize the distribution and is
13681 honored by all the user interfaces.
13683 @defvr {Environment Variable} GUIX_PACKAGE_PATH
13684 This is a colon-separated list of directories to search for additional
13685 package modules.  Directories listed in this variable take precedence
13686 over the own modules of the distribution.
13687 @end defvr
13689 The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}:
13690 each package is built based solely on other packages in the
13691 distribution.  The root of this dependency graph is a small set of
13692 @dfn{bootstrap binaries}, provided by the @code{(gnu packages
13693 bootstrap)} module.  For more information on bootstrapping,
13694 @pxref{Bootstrapping}.
13696 @node Packaging Guidelines
13697 @section Packaging Guidelines
13699 @cindex packages, creating
13700 The GNU distribution is nascent and may well lack some of your favorite
13701 packages.  This section describes how you can help make the distribution
13702 grow.  @xref{Contributing}, for additional information on how you can
13703 help.
13705 Free software packages are usually distributed in the form of
13706 @dfn{source code tarballs}---typically @file{tar.gz} files that contain
13707 all the source files.  Adding a package to the distribution means
13708 essentially two things: adding a @dfn{recipe} that describes how to
13709 build the package, including a list of other packages required to build
13710 it, and adding @dfn{package metadata} along with that recipe, such as a
13711 description and licensing information.
13713 In Guix all this information is embodied in @dfn{package definitions}.
13714 Package definitions provide a high-level view of the package.  They are
13715 written using the syntax of the Scheme programming language; in fact,
13716 for each package we define a variable bound to the package definition,
13717 and export that variable from a module (@pxref{Package Modules}).
13718 However, in-depth Scheme knowledge is @emph{not} a prerequisite for
13719 creating packages.  For more information on package definitions,
13720 @pxref{Defining Packages}.
13722 Once a package definition is in place, stored in a file in the Guix
13723 source tree, it can be tested using the @command{guix build} command
13724 (@pxref{Invoking guix build}).  For example, assuming the new package is
13725 called @code{gnew}, you may run this command from the Guix build tree
13726 (@pxref{Running Guix Before It Is Installed}):
13728 @example
13729 ./pre-inst-env guix build gnew --keep-failed
13730 @end example
13732 Using @code{--keep-failed} makes it easier to debug build failures since
13733 it provides access to the failed build tree.  Another useful
13734 command-line option when debugging is @code{--log-file}, to access the
13735 build log.
13737 If the package is unknown to the @command{guix} command, it may be that
13738 the source file contains a syntax error, or lacks a @code{define-public}
13739 clause to export the package variable.  To figure it out, you may load
13740 the module from Guile to get more information about the actual error:
13742 @example
13743 ./pre-inst-env guile -c '(use-modules (gnu packages gnew))'
13744 @end example
13746 Once your package builds correctly, please send us a patch
13747 (@pxref{Contributing}).  Well, if you need help, we will be happy to
13748 help you too.  Once the patch is committed in the Guix repository, the
13749 new package automatically gets built on the supported platforms by
13750 @url{http://hydra.gnu.org/jobset/gnu/master, our continuous integration
13751 system}.
13753 @cindex substituter
13754 Users can obtain the new package definition simply by running
13755 @command{guix pull} (@pxref{Invoking guix pull}).  When
13756 @code{hydra.gnu.org} is done building the package, installing the
13757 package automatically downloads binaries from there
13758 (@pxref{Substitutes}).  The only place where human intervention is
13759 needed is to review and apply the patch.
13762 @menu
13763 * Software Freedom::            What may go into the distribution.
13764 * Package Naming::              What's in a name?
13765 * Version Numbers::             When the name is not enough.
13766 * Synopses and Descriptions::   Helping users find the right package.
13767 * Python Modules::              Taming the snake.
13768 * Perl Modules::                Little pearls.
13769 * Java Packages::               Coffee break.
13770 * Fonts::                       Fond of fonts.
13771 @end menu
13773 @node Software Freedom
13774 @subsection Software Freedom
13776 @c Adapted from http://www.gnu.org/philosophy/philosophy.html.
13777 @cindex free software
13778 The GNU operating system has been developed so that users can have
13779 freedom in their computing.  GNU is @dfn{free software}, meaning that
13780 users have the @url{http://www.gnu.org/philosophy/free-sw.html,four
13781 essential freedoms}: to run the program, to study and change the program
13782 in source code form, to redistribute exact copies, and to distribute
13783 modified versions.  Packages found in the GNU distribution provide only
13784 software that conveys these four freedoms.
13786 In addition, the GNU distribution follow the
13787 @url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free
13788 software distribution guidelines}.  Among other things, these guidelines
13789 reject non-free firmware, recommendations of non-free software, and
13790 discuss ways to deal with trademarks and patents.
13792 Some otherwise free upstream package sources contain a small and optional
13793 subset that violates the above guidelines, for instance because this subset
13794 is itself non-free code.  When that happens, the offending items are removed
13795 with appropriate patches or code snippets in the @code{origin} form of the
13796 package (@pxref{Defining Packages}).  This way, @code{guix
13797 build --source} returns the ``freed'' source rather than the unmodified
13798 upstream source.
13801 @node Package Naming
13802 @subsection Package Naming
13804 @cindex package name
13805 A package has actually two names associated with it:
13806 First, there is the name of the @emph{Scheme variable}, the one following
13807 @code{define-public}.  By this name, the package can be made known in the
13808 Scheme code, for instance as input to another package.  Second, there is
13809 the string in the @code{name} field of a package definition.  This name
13810 is used by package management commands such as
13811 @command{guix package} and @command{guix build}.
13813 Both are usually the same and correspond to the lowercase conversion of
13814 the project name chosen upstream, with underscores replaced with
13815 hyphens.  For instance, GNUnet is available as @code{gnunet}, and
13816 SDL_net as @code{sdl-net}.
13818 We do not add @code{lib} prefixes for library packages, unless these are
13819 already part of the official project name.  But @pxref{Python
13820 Modules} and @ref{Perl Modules} for special rules concerning modules for
13821 the Python and Perl languages.
13823 Font package names are handled differently, @pxref{Fonts}.
13826 @node Version Numbers
13827 @subsection Version Numbers
13829 @cindex package version
13830 We usually package only the latest version of a given free software
13831 project.  But sometimes, for instance for incompatible library versions,
13832 two (or more) versions of the same package are needed.  These require
13833 different Scheme variable names.  We use the name as defined
13834 in @ref{Package Naming}
13835 for the most recent version; previous versions use the same name, suffixed
13836 by @code{-} and the smallest prefix of the version number that may
13837 distinguish the two versions.
13839 The name inside the package definition is the same for all versions of a
13840 package and does not contain any version number.
13842 For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as follows:
13844 @example
13845 (define-public gtk+
13846   (package
13847     (name "gtk+")
13848     (version "3.9.12")
13849     ...))
13850 (define-public gtk+-2
13851   (package
13852     (name "gtk+")
13853     (version "2.24.20")
13854     ...))
13855 @end example
13856 If we also wanted GTK+ 3.8.2, this would be packaged as
13857 @example
13858 (define-public gtk+-3.8
13859   (package
13860     (name "gtk+")
13861     (version "3.8.2")
13862     ...))
13863 @end example
13865 @c See <https://lists.gnu.org/archive/html/guix-devel/2016-01/msg00425.html>,
13866 @c for a discussion of what follows.
13867 @cindex version number, for VCS snapshots
13868 Occasionally, we package snapshots of upstream's version control system
13869 (VCS) instead of formal releases.  This should remain exceptional,
13870 because it is up to upstream developers to clarify what the stable
13871 release is.  Yet, it is sometimes necessary.  So, what should we put in
13872 the @code{version} field?
13874 Clearly, we need to make the commit identifier of the VCS snapshot
13875 visible in the version string, but we also need to make sure that the
13876 version string is monotonically increasing so that @command{guix package
13877 --upgrade} can determine which version is newer.  Since commit
13878 identifiers, notably with Git, are not monotonically increasing, we add
13879 a revision number that we increase each time we upgrade to a newer
13880 snapshot.  The resulting version string looks like this:
13882 @example
13883 2.0.11-3.cabba9e
13884   ^    ^    ^
13885   |    |    `-- upstream commit ID
13886   |    |
13887   |    `--- Guix package revision
13888   |
13889 latest upstream version
13890 @end example
13892 It is a good idea to strip commit identifiers in the @code{version}
13893 field to, say, 7 digits.  It avoids an aesthetic annoyance (assuming
13894 aesthetics have a role to play here) as well as problems related to OS
13895 limits such as the maximum shebang length (127 bytes for the Linux
13896 kernel.)  It is best to use the full commit identifiers in
13897 @code{origin}s, though, to avoid ambiguities.  A typical package
13898 definition may look like this:
13900 @example
13901 (define my-package
13902   (let ((commit "c3f29bc928d5900971f65965feaae59e1272a3f7")
13903         (revision "1"))          ;Guix package revision
13904     (package
13905       (version (string-append "0.9-" revision "."
13906                               (string-take commit 7)))
13907       (source (origin
13908                 (method git-fetch)
13909                 (uri (git-reference
13910                       (url "git://example.org/my-package.git")
13911                       (commit commit)))
13912                 (sha256 (base32 "1mbikn@dots{}"))
13913                 (file-name (string-append "my-package-" version
13914                                           "-checkout"))))
13915       ;; @dots{}
13916       )))
13917 @end example
13919 @node Synopses and Descriptions
13920 @subsection Synopses and Descriptions
13922 @cindex package description
13923 @cindex package synopsis
13924 As we have seen before, each package in GNU@tie{}Guix includes a
13925 synopsis and a description (@pxref{Defining Packages}).  Synopses and
13926 descriptions are important: They are what @command{guix package
13927 --search} searches, and a crucial piece of information to help users
13928 determine whether a given package suits their needs.  Consequently,
13929 packagers should pay attention to what goes into them.
13931 Synopses must start with a capital letter and must not end with a
13932 period.  They must not start with ``a'' or ``the'', which usually does
13933 not bring anything; for instance, prefer ``File-frobbing tool'' over ``A
13934 tool that frobs files''.  The synopsis should say what the package
13935 is---e.g., ``Core GNU utilities (file, text, shell)''---or what it is
13936 used for---e.g., the synopsis for GNU@tie{}grep is ``Print lines
13937 matching a pattern''.
13939 Keep in mind that the synopsis must be meaningful for a very wide
13940 audience.  For example, ``Manipulate alignments in the SAM format''
13941 might make sense for a seasoned bioinformatics researcher, but might be
13942 fairly unhelpful or even misleading to a non-specialized audience.  It
13943 is a good idea to come up with a synopsis that gives an idea of the
13944 application domain of the package.  In this example, this might give
13945 something like ``Manipulate nucleotide sequence alignments'', which
13946 hopefully gives the user a better idea of whether this is what they are
13947 looking for.
13949 Descriptions should take between five and ten lines.  Use full
13950 sentences, and avoid using acronyms without first introducing them.
13951 Please avoid marketing phrases such as ``world-leading'',
13952 ``industrial-strength'', and ``next-generation'', and avoid superlatives
13953 like ``the most advanced''---they are not helpful to users looking for a
13954 package and may even sound suspicious.  Instead, try to be factual,
13955 mentioning use cases and features.
13957 @cindex Texinfo markup, in package descriptions
13958 Descriptions can include Texinfo markup, which is useful to introduce
13959 ornaments such as @code{@@code} or @code{@@dfn}, bullet lists, or
13960 hyperlinks (@pxref{Overview,,, texinfo, GNU Texinfo}).  However you
13961 should be careful when using some characters for example @samp{@@} and
13962 curly braces which are the basic special characters in Texinfo
13963 (@pxref{Special Characters,,, texinfo, GNU Texinfo}).  User interfaces
13964 such as @command{guix package --show} take care of rendering it
13965 appropriately.
13967 Synopses and descriptions are translated by volunteers
13968 @uref{http://translationproject.org/domain/guix-packages.html, at the
13969 Translation Project} so that as many users as possible can read them in
13970 their native language.  User interfaces search them and display them in
13971 the language specified by the current locale.
13973 Translation is a lot of work so, as a packager, please pay even more
13974 attention to your synopses and descriptions as every change may entail
13975 additional work for translators.  In order to help them, it is possible
13976 to make recommendations or instructions visible to them by inserting
13977 special comments like this (@pxref{xgettext Invocation,,, gettext, GNU
13978 Gettext}):
13980 @example
13981 ;; TRANSLATORS: "X11 resize-and-rotate" should not be translated.
13982 (description "ARandR is designed to provide a simple visual front end
13983 for the X11 resize-and-rotate (RandR) extension. @dots{}")
13984 @end example
13987 @node Python Modules
13988 @subsection Python Modules
13990 @cindex python
13991 We currently package Python 2 and Python 3, under the Scheme variable names
13992 @code{python-2} and @code{python} as explained in @ref{Version Numbers}.
13993 To avoid confusion and naming clashes with other programming languages, it
13994 seems desirable that the name of a package for a Python module contains
13995 the word @code{python}.
13997 Some modules are compatible with only one version of Python, others with both.
13998 If the package Foo compiles only with Python 3, we name it
13999 @code{python-foo}; if it compiles only with Python 2, we name it
14000 @code{python2-foo}. If it is compatible with both versions, we create two
14001 packages with the corresponding names.
14003 If a project already contains the word @code{python}, we drop this;
14004 for instance, the module python-dateutil is packaged under the names
14005 @code{python-dateutil} and @code{python2-dateutil}.  If the project name
14006 starts with @code{py} (e.g. @code{pytz}), we keep it and prefix it as
14007 described above.
14009 @subsubsection Specifying Dependencies
14010 @cindex inputs, for Python packages
14012 Dependency information for Python packages is usually available in the
14013 package source tree, with varying degrees of accuracy: in the
14014 @file{setup.py} file, in @file{requirements.txt}, or in @file{tox.ini}.
14016 Your mission, when writing a recipe for a Python package, is to map
14017 these dependencies to the appropriate type of ``input'' (@pxref{package
14018 Reference, inputs}).  Although the @code{pypi} importer normally does a
14019 good job (@pxref{Invoking guix import}), you may want to check the
14020 following check list to determine which dependency goes where.
14022 @itemize
14024 @item
14025 We currently package Python 2 with @code{setuptools} and @code{pip}
14026 installed like Python 3.4 has per default.  Thus you don't need to
14027 specify either of these as an input.  @command{guix lint} will warn you
14028 if you do.
14030 @item
14031 Python dependencies required at run time go into
14032 @code{propagated-inputs}.  They are typically defined with the
14033 @code{install_requires} keyword in @file{setup.py}, or in the
14034 @file{requirements.txt} file.
14036 @item
14037 Python packages required only at build time---e.g., those listed with
14038 the @code{setup_requires} keyword in @file{setup.py}---or only for
14039 testing---e.g., those in @code{tests_require}---go into
14040 @code{native-inputs}.  The rationale is that (1) they do not need to be
14041 propagated because they are not needed at run time, and (2) in a
14042 cross-compilation context, it's the ``native'' input that we'd want.
14044 Examples are the @code{pytest}, @code{mock}, and @code{nose} test
14045 frameworks.  Of course if any of these packages is also required at
14046 run-time, it needs to go to @code{propagated-inputs}.
14048 @item
14049 Anything that does not fall in the previous categories goes to
14050 @code{inputs}, for example programs or C libraries required for building
14051 Python packages containing C extensions.
14053 @item
14054 If a Python package has optional dependencies (@code{extras_require}),
14055 it is up to you to decide whether to add them or not, based on their
14056 usefulness/overhead ratio (@pxref{Submitting Patches, @command{guix
14057 size}}).
14059 @end itemize
14062 @node Perl Modules
14063 @subsection Perl Modules
14065 @cindex perl
14066 Perl programs standing for themselves are named as any other package,
14067 using the lowercase upstream name.
14068 For Perl packages containing a single class, we use the lowercase class name,
14069 replace all occurrences of @code{::} by dashes and prepend the prefix
14070 @code{perl-}.
14071 So the class @code{XML::Parser} becomes @code{perl-xml-parser}.
14072 Modules containing several classes keep their lowercase upstream name and
14073 are also prepended by @code{perl-}.  Such modules tend to have the word
14074 @code{perl} somewhere in their name, which gets dropped in favor of the
14075 prefix.  For instance, @code{libwww-perl} becomes @code{perl-libwww}.
14078 @node Java Packages
14079 @subsection Java Packages
14081 @cindex java
14082 Java programs standing for themselves are named as any other package,
14083 using the lowercase upstream name.
14085 To avoid confusion and naming clashes with other programming languages,
14086 it is desirable that the name of a package for a Java package is
14087 prefixed with @code{java-}.  If a project already contains the word
14088 @code{java}, we drop this; for instance, the package @code{ngsjava} is
14089 packaged under the name @code{java-ngs}.
14091 For Java packages containing a single class or a small class hierarchy,
14092 we use the lowercase class name, replace all occurrences of @code{.} by
14093 dashes and prepend the prefix @code{java-}.  So the class
14094 @code{apache.commons.cli} becomes package
14095 @code{java-apache-commons-cli}.
14098 @node Fonts
14099 @subsection Fonts
14101 @cindex fonts
14102 For fonts that are in general not installed by a user for typesetting
14103 purposes, or that are distributed as part of a larger software package,
14104 we rely on the general packaging rules for software; for instance, this
14105 applies to the fonts delivered as part of the X.Org system or fonts that
14106 are part of TeX Live.
14108 To make it easier for a user to search for fonts, names for other packages
14109 containing only fonts are constructed as follows, independently of the
14110 upstream package name.
14112 The name of a package containing only one font family starts with
14113 @code{font-}; it is followed by the foundry name and a dash @code{-}
14114 if the foundry is known, and the font family name, in which spaces are
14115 replaced by dashes (and as usual, all upper case letters are transformed
14116 to lower case).
14117 For example, the Gentium font family by SIL is packaged under the name
14118 @code{font-sil-gentium}.
14120 For a package containing several font families, the name of the collection
14121 is used in the place of the font family name.
14122 For instance, the Liberation fonts consist of three families,
14123 Liberation Sans, Liberation Serif and Liberation Mono.
14124 These could be packaged separately under the names
14125 @code{font-liberation-sans} and so on; but as they are distributed together
14126 under a common name, we prefer to package them together as
14127 @code{font-liberation}.
14129 In the case where several formats of the same font family or font collection
14130 are packaged separately, a short form of the format, prepended by a dash,
14131 is added to the package name.  We use @code{-ttf} for TrueType fonts,
14132 @code{-otf} for OpenType fonts and @code{-type1} for PostScript Type 1
14133 fonts.
14137 @node Bootstrapping
14138 @section Bootstrapping
14140 @c Adapted from the ELS 2013 paper.
14142 @cindex bootstrapping
14144 Bootstrapping in our context refers to how the distribution gets built
14145 ``from nothing''.  Remember that the build environment of a derivation
14146 contains nothing but its declared inputs (@pxref{Introduction}).  So
14147 there's an obvious chicken-and-egg problem: how does the first package
14148 get built?  How does the first compiler get compiled?  Note that this is
14149 a question of interest only to the curious hacker, not to the regular
14150 user, so you can shamelessly skip this section if you consider yourself
14151 a ``regular user''.
14153 @cindex bootstrap binaries
14154 The GNU system is primarily made of C code, with libc at its core.  The
14155 GNU build system itself assumes the availability of a Bourne shell and
14156 command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
14157 `grep'.  Furthermore, build programs---programs that run
14158 @code{./configure}, @code{make}, etc.---are written in Guile Scheme
14159 (@pxref{Derivations}).  Consequently, to be able to build anything at
14160 all, from scratch, Guix relies on pre-built binaries of Guile, GCC,
14161 Binutils, libc, and the other packages mentioned above---the
14162 @dfn{bootstrap binaries}.
14164 These bootstrap binaries are ``taken for granted'', though we can also
14165 re-create them if needed (more on that later).
14167 @unnumberedsubsec Preparing to Use the Bootstrap Binaries
14169 @c As of Emacs 24.3, Info-mode displays the image, but since it's a
14170 @c large image, it's hard to scroll.  Oh well.
14171 @image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap derivations}
14173 The figure above shows the very beginning of the dependency graph of the
14174 distribution, corresponding to the package definitions of the @code{(gnu
14175 packages bootstrap)} module.  A similar figure can be generated with
14176 @command{guix graph} (@pxref{Invoking guix graph}), along the lines of:
14178 @example
14179 guix graph -t derivation \
14180   -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
14181   | dot -Tps > t.ps
14182 @end example
14184 At this level of detail, things are
14185 slightly complex.  First, Guile itself consists of an ELF executable,
14186 along with many source and compiled Scheme files that are dynamically
14187 loaded when it runs.  This gets stored in the @file{guile-2.0.7.tar.xz}
14188 tarball shown in this graph.  This tarball is part of Guix's ``source''
14189 distribution, and gets inserted into the store with @code{add-to-store}
14190 (@pxref{The Store}).
14192 But how do we write a derivation that unpacks this tarball and adds it
14193 to the store?  To solve this problem, the @code{guile-bootstrap-2.0.drv}
14194 derivation---the first one that gets built---uses @code{bash} as its
14195 builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
14196 @code{tar} to unpack the tarball.  Thus, @file{bash}, @file{tar},
14197 @file{xz}, and @file{mkdir} are statically-linked binaries, also part of
14198 the Guix source distribution, whose sole purpose is to allow the Guile
14199 tarball to be unpacked.
14201 Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning
14202 Guile that can be used to run subsequent build programs.  Its first task
14203 is to download tarballs containing the other pre-built binaries---this
14204 is what the @code{.tar.xz.drv} derivations do.  Guix modules such as
14205 @code{ftp-client.scm} are used for this purpose.  The
14206 @code{module-import.drv} derivations import those modules in a directory
14207 in the store, using the original layout.  The
14208 @code{module-import-compiled.drv} derivations compile those modules, and
14209 write them in an output directory with the right layout.  This
14210 corresponds to the @code{#:modules} argument of
14211 @code{build-expression->derivation} (@pxref{Derivations}).
14213 Finally, the various tarballs are unpacked by the
14214 derivations @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv},
14215 etc., at which point we have a working C tool chain.
14218 @unnumberedsubsec Building the Build Tools
14220 Bootstrapping is complete when we have a full tool chain that does not
14221 depend on the pre-built bootstrap tools discussed above.  This
14222 no-dependency requirement is verified by checking whether the files of
14223 the final tool chain contain references to the @file{/gnu/store}
14224 directories of the bootstrap inputs.  The process that leads to this
14225 ``final'' tool chain is described by the package definitions found in
14226 the @code{(gnu packages commencement)} module.
14228 The @command{guix graph} command allows us to ``zoom out'' compared to
14229 the graph above, by looking at the level of package objects instead of
14230 individual derivations---remember that a package may translate to
14231 several derivations, typically one derivation to download its source,
14232 one to build the Guile modules it needs, and one to actually build the
14233 package from source.  The command:
14235 @example
14236 guix graph -t bag \
14237   -e '(@@@@ (gnu packages commencement)
14238           glibc-final-with-bootstrap-bash)' | dot -Tps > t.ps
14239 @end example
14241 @noindent
14242 produces the dependency graph leading to the ``final'' C
14243 library@footnote{You may notice the @code{glibc-intermediate} label,
14244 suggesting that it is not @emph{quite} final, but as a good
14245 approximation, we will consider it final.}, depicted below.
14247 @image{images/bootstrap-packages,6in,,Dependency graph of the early packages}
14249 @c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
14250 The first tool that gets built with the bootstrap binaries is
14251 GNU@tie{}Make---noted @code{make-boot0} above---which is a prerequisite
14252 for all the following packages.  From there Findutils and Diffutils get
14253 built.
14255 Then come the first-stage Binutils and GCC, built as pseudo cross
14256 tools---i.e., with @code{--target} equal to @code{--host}.  They are
14257 used to build libc.  Thanks to this cross-build trick, this libc is
14258 guaranteed not to hold any reference to the initial tool chain.
14260 From there the final Binutils and GCC (not shown above) are built.
14261 GCC uses @code{ld}
14262 from the final Binutils, and links programs against the just-built libc.
14263 This tool chain is used to build the other packages used by Guix and by
14264 the GNU Build System: Guile, Bash, Coreutils, etc.
14266 And voilà!  At this point we have the complete set of build tools that
14267 the GNU Build System expects.  These are in the @code{%final-inputs}
14268 variable of the @code{(gnu packages commencement)} module, and are
14269 implicitly used by any package that uses @code{gnu-build-system}
14270 (@pxref{Build Systems, @code{gnu-build-system}}).
14273 @unnumberedsubsec Building the Bootstrap Binaries
14275 @cindex bootstrap binaries
14276 Because the final tool chain does not depend on the bootstrap binaries,
14277 those rarely need to be updated.  Nevertheless, it is useful to have an
14278 automated way to produce them, should an update occur, and this is what
14279 the @code{(gnu packages make-bootstrap)} module provides.
14281 The following command builds the tarballs containing the bootstrap
14282 binaries (Guile, Binutils, GCC, libc, and a tarball containing a mixture
14283 of Coreutils and other basic command-line tools):
14285 @example
14286 guix build bootstrap-tarballs
14287 @end example
14289 The generated tarballs are those that should be referred to in the
14290 @code{(gnu packages bootstrap)} module mentioned at the beginning of
14291 this section.
14293 Still here?  Then perhaps by now you've started to wonder: when do we
14294 reach a fixed point?  That is an interesting question!  The answer is
14295 unknown, but if you would like to investigate further (and have
14296 significant computational and storage resources to do so), then let us
14297 know.
14299 @node Porting
14300 @section Porting to a New Platform
14302 As discussed above, the GNU distribution is self-contained, and
14303 self-containment is achieved by relying on pre-built ``bootstrap
14304 binaries'' (@pxref{Bootstrapping}).  These binaries are specific to an
14305 operating system kernel, CPU architecture, and application binary
14306 interface (ABI).  Thus, to port the distribution to a platform that is
14307 not yet supported, one must build those bootstrap binaries, and update
14308 the @code{(gnu packages bootstrap)} module to use them on that platform.
14310 Fortunately, Guix can @emph{cross compile} those bootstrap binaries.
14311 When everything goes well, and assuming the GNU tool chain supports the
14312 target platform, this can be as simple as running a command like this
14313 one:
14315 @example
14316 guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
14317 @end example
14319 For this to work, the @code{glibc-dynamic-linker} procedure in
14320 @code{(gnu packages bootstrap)} must be augmented to return the right
14321 file name for libc's dynamic linker on that platform; likewise,
14322 @code{system->linux-architecture} in @code{(gnu packages linux)} must be
14323 taught about the new platform.
14325 Once these are built, the @code{(gnu packages bootstrap)} module needs
14326 to be updated to refer to these binaries on the target platform.  That
14327 is, the hashes and URLs of the bootstrap tarballs for the new platform
14328 must be added alongside those of the currently supported platforms.  The
14329 bootstrap Guile tarball is treated specially: it is expected to be
14330 available locally, and @file{gnu/local.mk} has rules do download it for
14331 the supported architectures; a rule for the new platform must be added
14332 as well.
14334 In practice, there may be some complications.  First, it may be that the
14335 extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
14336 above) is not recognized by all the GNU tools.  Typically, glibc
14337 recognizes some of these, whereas GCC uses an extra @code{--with-abi}
14338 configure flag (see @code{gcc.scm} for examples of how to handle this).
14339 Second, some of the required packages could fail to build for that
14340 platform.  Lastly, the generated binaries could be broken for some
14341 reason.
14343 @c *********************************************************************
14344 @include contributing.texi
14346 @c *********************************************************************
14347 @node Acknowledgments
14348 @chapter Acknowledgments
14350 Guix is based on the @uref{http://nixos.org/nix/, Nix package manager},
14351 which was designed and
14352 implemented by Eelco Dolstra, with contributions from other people (see
14353 the @file{nix/AUTHORS} file in Guix.)  Nix pioneered functional package
14354 management, and promoted unprecedented features, such as transactional
14355 package upgrades and rollbacks, per-user profiles, and referentially
14356 transparent build processes.  Without this work, Guix would not exist.
14358 The Nix-based software distributions, Nixpkgs and NixOS, have also been
14359 an inspiration for Guix.
14361 GNU@tie{}Guix itself is a collective work with contributions from a
14362 number of people.  See the @file{AUTHORS} file in Guix for more
14363 information on these fine people.  The @file{THANKS} file lists people
14364 who have helped by reporting bugs, taking care of the infrastructure,
14365 providing artwork and themes, making suggestions, and more---thank you!
14368 @c *********************************************************************
14369 @node GNU Free Documentation License
14370 @appendix GNU Free Documentation License
14371 @cindex license, GNU Free Documentation License
14372 @include fdl-1.3.texi
14374 @c *********************************************************************
14375 @node Concept Index
14376 @unnumbered Concept Index
14377 @printindex cp
14379 @node Programming Index
14380 @unnumbered Programming Index
14381 @syncodeindex tp fn
14382 @syncodeindex vr fn
14383 @printindex fn
14385 @bye
14387 @c Local Variables:
14388 @c ispell-local-dictionary: "american";
14389 @c End: