Merge remote-tracking branch 'origin/master' into core-updates
[jackhill/guix/guix.git] / doc / guix.texi
1 \input texinfo
2 @c -*-texinfo-*-
3
4 @c %**start of header
5 @setfilename guix.info
6 @documentencoding UTF-8
7 @settitle GNU Guix Reference Manual
8 @c %**end of header
9
10 @include version.texi
11
12 @c Identifier of the OpenPGP key used to sign tarballs and such.
13 @set OPENPGP-SIGNING-KEY-ID 090B11993D9AEBB5
14
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 ng0
29
30 Permission is granted to copy, distribute and/or modify this document
31 under the terms of the GNU Free Documentation License, Version 1.3 or
32 any later version published by the Free Software Foundation; with no
33 Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
34 copy of the license is included in the section entitled ``GNU Free
35 Documentation License''.
36 @end copying
37
38 @dircategory System administration
39 @direntry
40 * Guix: (guix). Manage installed software and system configuration.
41 * guix package: (guix)Invoking guix package. Installing, removing, and upgrading packages.
42 * guix build: (guix)Invoking guix build. Building packages.
43 * guix gc: (guix)Invoking guix gc. Reclaiming unused disk space.
44 * guix pull: (guix)Invoking guix pull. Update the list of available packages.
45 * guix system: (guix)Invoking guix system. Manage the operating system configuration.
46 @end direntry
47
48 @dircategory Software development
49 @direntry
50 * guix environment: (guix)Invoking guix environment. Building development environments with Guix.
51 @end direntry
52
53 @dircategory Emacs
54 @direntry
55 * Guix user interface: (guix)Emacs Interface. Package management from the comfort of Emacs.
56 @end direntry
57
58
59 @titlepage
60 @title GNU Guix Reference Manual
61 @subtitle Using the GNU Guix Functional Package Manager
62 @author The GNU Guix Developers
63
64 @page
65 @vskip 0pt plus 1filll
66 Edition @value{EDITION} @*
67 @value{UPDATED} @*
68
69 @insertcopying
70 @end titlepage
71
72 @contents
73
74 @c *********************************************************************
75 @node Top
76 @top GNU Guix
77
78 This document describes GNU Guix version @value{VERSION}, a functional
79 package management tool written for the GNU system.
80
81 @menu
82 * Introduction:: What is Guix about?
83 * Installation:: Installing Guix.
84 * Package Management:: Package installation, upgrade, etc.
85 * Emacs Interface:: Using Guix from Emacs.
86 * Programming Interface:: Using Guix in Scheme.
87 * Utilities:: Package management commands.
88 * GNU Distribution:: Software for your friendly GNU system.
89 * Contributing:: Your help needed!
90
91 * Acknowledgments:: Thanks!
92 * GNU Free Documentation License:: The license of this manual.
93 * Concept Index:: Concepts.
94 * Programming Index:: Data types, functions, and variables.
95
96 @detailmenu
97 --- The Detailed Node Listing ---
98
99 Installation
100
101 * Binary Installation:: Getting Guix running in no time!
102 * Requirements:: Software needed to build and run Guix.
103 * Running the Test Suite:: Testing Guix.
104 * Setting Up the Daemon:: Preparing the build daemon's environment.
105 * Invoking guix-daemon:: Running the build daemon.
106 * Application Setup:: Application-specific setup.
107
108 Setting Up the Daemon
109
110 * Build Environment Setup:: Preparing the isolated build environment.
111 * Daemon Offload Setup:: Offloading builds to remote machines.
112
113 Package Management
114
115 * Features:: How Guix will make your life brighter.
116 * Invoking guix package:: Package installation, removal, etc.
117 * Substitutes:: Downloading pre-built binaries.
118 * Packages with Multiple Outputs:: Single source package, multiple outputs.
119 * Invoking guix gc:: Running the garbage collector.
120 * Invoking guix pull:: Fetching the latest Guix and distribution.
121 * Invoking guix archive:: Exporting and importing store files.
122
123 Emacs Interface
124
125 * Initial Setup: Emacs Initial Setup. Preparing @file{~/.emacs}.
126 * Package Management: Emacs Package Management. Managing packages and generations.
127 * Licenses: Emacs Licenses. Interface for licenses of Guix packages.
128 * Package Source Locations: Emacs Package Locations. Interface for package location files.
129 * Popup Interface: Emacs Popup Interface. Magit-like interface for guix commands.
130 * Prettify Mode: Emacs Prettify. Abbreviating @file{/gnu/store/@dots{}} file names.
131 * Build Log Mode: Emacs Build Log. Highlighting Guix build logs.
132 * Completions: Emacs Completions. Completing @command{guix} shell command.
133 * Development: Emacs Development. Tools for Guix developers.
134 * Hydra: Emacs Hydra. Interface for Guix build farm.
135
136 Programming Interface
137
138 * Defining Packages:: Defining new packages.
139 * Build Systems:: Specifying how packages are built.
140 * The Store:: Manipulating the package store.
141 * Derivations:: Low-level interface to package derivations.
142 * The Store Monad:: Purely functional interface to the store.
143 * G-Expressions:: Manipulating build expressions.
144
145 Defining Packages
146
147 * package Reference:: The package data type.
148 * origin Reference:: The origin data type.
149
150 Utilities
151
152 * Invoking guix build:: Building packages from the command line.
153 * Invoking guix edit:: Editing package definitions.
154 * Invoking guix download:: Downloading a file and printing its hash.
155 * Invoking guix hash:: Computing the cryptographic hash of a file.
156 * Invoking guix import:: Importing package definitions.
157 * Invoking guix refresh:: Updating package definitions.
158 * Invoking guix lint:: Finding errors in package definitions.
159 * Invoking guix size:: Profiling disk usage.
160 * Invoking guix graph:: Visualizing the graph of packages.
161 * Invoking guix environment:: Setting up development environments.
162 * Invoking guix publish:: Sharing substitutes.
163 * Invoking guix challenge:: Challenging substitute servers.
164 * Invoking guix container:: Process isolation.
165
166 Invoking @command{guix build}
167
168 * Common Build Options:: Build options for most commands.
169 * Package Transformation Options:: Creating variants of packages.
170 * Additional Build Options:: Options specific to 'guix build'.
171
172 GNU Distribution
173
174 * System Installation:: Installing the whole operating system.
175 * System Configuration:: Configuring the operating system.
176 * Installing Debugging Files:: Feeding the debugger.
177 * Security Updates:: Deploying security fixes quickly.
178 * Package Modules:: Packages from the programmer's viewpoint.
179 * Packaging Guidelines:: Growing the distribution.
180 * Bootstrapping:: GNU/Linux built from scratch.
181 * Porting:: Targeting another platform or kernel.
182
183 System Installation
184
185 * Limitations:: What you can expect.
186 * Hardware Considerations:: Supported hardware.
187 * USB Stick Installation:: Preparing the installation medium.
188 * Preparing for Installation:: Networking, partitioning, etc.
189 * Proceeding with the Installation:: The real thing.
190 * Building the Installation Image:: How this comes to be.
191
192 System Configuration
193
194 * Using the Configuration System:: Customizing your GNU system.
195 * operating-system Reference:: Detail of operating-system declarations.
196 * File Systems:: Configuring file system mounts.
197 * Mapped Devices:: Block device extra processing.
198 * User Accounts:: Specifying user accounts.
199 * Locales:: Language and cultural convention settings.
200 * Services:: Specifying system services.
201 * Setuid Programs:: Programs running with root privileges.
202 * X.509 Certificates:: Authenticating HTTPS servers.
203 * Name Service Switch:: Configuring libc's name service switch.
204 * Initial RAM Disk:: Linux-Libre bootstrapping.
205 * GRUB Configuration:: Configuring the boot loader.
206 * Invoking guix system:: Instantiating a system configuration.
207 * Running GuixSD in a VM:: How to run GuixSD in a virtual machine.
208 * Defining Services:: Adding new service definitions.
209
210 Services
211
212 * Base Services:: Essential system services.
213 * Scheduled Job Execution:: The mcron service.
214 * Networking Services:: Network setup, SSH daemon, etc.
215 * X Window:: Graphical display.
216 * Desktop Services:: D-Bus and desktop services.
217 * Database Services:: SQL databases.
218 * Mail Services:: IMAP, POP3, SMTP, and all that.
219 * Web Services:: Web servers.
220 * Various Services:: Other services.
221
222 Defining Services
223
224 * Service Composition:: The model for composing services.
225 * Service Types and Services:: Types and services.
226 * Service Reference:: API reference.
227 * Shepherd Services:: A particular type of service.
228
229 Packaging Guidelines
230
231 * Software Freedom:: What may go into the distribution.
232 * Package Naming:: What's in a name?
233 * Version Numbers:: When the name is not enough.
234 * Synopses and Descriptions:: Helping users find the right package.
235 * Python Modules:: Taming the snake.
236 * Perl Modules:: Little pearls.
237 * Java Packages:: Coffee break.
238 * Fonts:: Fond of fonts.
239
240 Contributing
241
242 * Building from Git:: The latest and greatest.
243 * Running Guix Before It Is Installed:: Hacker tricks.
244 * The Perfect Setup:: The right tools.
245 * Coding Style:: Hygiene of the contributor.
246 * Submitting Patches:: Share your work.
247
248 Coding Style
249
250 * Programming Paradigm:: How to compose your elements.
251 * Modules:: Where to store your code?
252 * Data Types and Pattern Matching:: Implementing data structures.
253 * Formatting Code:: Writing conventions.
254
255 @end detailmenu
256 @end menu
257
258 @c *********************************************************************
259 @node Introduction
260 @chapter Introduction
261
262 @cindex purpose
263 GNU Guix@footnote{``Guix'' is pronounced like ``geeks'', or ``ɡiːks''
264 using the international phonetic alphabet (IPA).} is a package
265 management tool for the GNU system. Guix makes it easy for unprivileged
266 users to install, upgrade, or remove packages, to roll back to a
267 previous package set, to build packages from source, and generally
268 assists with the creation and maintenance of software environments.
269
270 @cindex user interfaces
271 Guix provides a command-line package management interface
272 (@pxref{Invoking guix package}), a set of command-line utilities
273 (@pxref{Utilities}), a visual user interface in Emacs (@pxref{Emacs
274 Interface}), as well as Scheme programming interfaces
275 (@pxref{Programming Interface}).
276 @cindex build daemon
277 Its @dfn{build daemon} is responsible for building packages on behalf of
278 users (@pxref{Setting Up the Daemon}) and for downloading pre-built
279 binaries from authorized sources (@pxref{Substitutes}).
280
281 @cindex extensibility of the distribution
282 @cindex customization of packages
283 Guix includes package definitions for many GNU and non-GNU packages, all
284 of which @uref{https://www.gnu.org/philosophy/free-sw.html, respect the
285 user's computing freedom}. It is @emph{extensible}: users can write
286 their own package definitions (@pxref{Defining Packages}) and make them
287 available as independent package modules (@pxref{Package Modules}). It
288 is also @emph{customizable}: users can @emph{derive} specialized package
289 definitions from existing ones, including from the command line
290 (@pxref{Package Transformation Options}).
291
292 @cindex Guix System Distribution
293 @cindex GuixSD
294 You can install GNU@tie{}Guix on top of an existing GNU/Linux system
295 where it complements the available tools without interference
296 (@pxref{Installation}), or you can use it as part of the standalone
297 @dfn{Guix System Distribution} or GuixSD (@pxref{GNU Distribution}).
298 With GNU@tie{}GuixSD, you @emph{declare} all aspects of the operating
299 system configuration and Guix takes care of instantiating the
300 configuration in a transactional, reproducible, and stateless fashion
301 (@pxref{System Configuration}).
302
303 @cindex functional package management
304 Under the hood, Guix implements the @dfn{functional package management}
305 discipline pioneered by Nix (@pxref{Acknowledgments}).
306 In Guix, the package build and installation process is seen
307 as a @emph{function}, in the mathematical sense. That function takes inputs,
308 such as build scripts, a compiler, and libraries, and
309 returns an installed package. As a pure function, its result depends
310 solely on its inputs---for instance, it cannot refer to software or
311 scripts that were not explicitly passed as inputs. A build function
312 always produces the same result when passed a given set of inputs. It
313 cannot alter the environment of the running system in
314 any way; for instance, it cannot create, modify, or delete files outside
315 of its build and installation directories. This is achieved by running
316 build processes in isolated environments (or @dfn{containers}), where only their
317 explicit inputs are visible.
318
319 @cindex store
320 The result of package build functions is @dfn{cached} in the file
321 system, in a special directory called @dfn{the store} (@pxref{The
322 Store}). Each package is installed in a directory of its own in the
323 store---by default under @file{/gnu/store}. The directory name contains
324 a hash of all the inputs used to build that package; thus, changing an
325 input yields a different directory name.
326
327 This approach is the foundation for the salient features of Guix: support
328 for transactional package upgrade and rollback, per-user installation, and
329 garbage collection of packages (@pxref{Features}).
330
331
332 @c *********************************************************************
333 @node Installation
334 @chapter Installation
335
336 GNU Guix is available for download from its website at
337 @url{http://www.gnu.org/software/guix/}. This section describes the
338 software requirements of Guix, as well as how to install it and get
339 ready to use it.
340
341 Note that this section is concerned with the installation of the package
342 manager, which can be done on top of a running GNU/Linux system. If,
343 instead, you want to install the complete GNU operating system,
344 @pxref{System Installation}.
345
346 @cindex foreign distro
347 When installed on a running GNU/Linux system---thereafter called a
348 @dfn{foreign distro}---GNU@tie{}Guix complements the available tools
349 without interference. Its data lives exclusively in two directories,
350 usually @file{/gnu/store} and @file{/var/guix}; other files on your
351 system, such as @file{/etc}, are left untouched.
352
353 @menu
354 * Binary Installation:: Getting Guix running in no time!
355 * Requirements:: Software needed to build and run Guix.
356 * Running the Test Suite:: Testing Guix.
357 * Setting Up the Daemon:: Preparing the build daemon's environment.
358 * Invoking guix-daemon:: Running the build daemon.
359 * Application Setup:: Application-specific setup.
360 @end menu
361
362 @node Binary Installation
363 @section Binary Installation
364
365 This section describes how to install Guix on an arbitrary system from a
366 self-contained tarball providing binaries for Guix and for all its
367 dependencies. This is often quicker than installing from source, which
368 is described in the next sections. The only requirement is to have
369 GNU@tie{}tar and Xz.
370
371 Installing goes along these lines:
372
373 @enumerate
374 @item
375 Download the binary tarball from
376 @indicateurl{ftp://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz},
377 where @var{system} is @code{x86_64-linux} for an @code{x86_64} machine
378 already running the kernel Linux, and so on.
379
380 @c The following is somewhat duplicated in ``System Installation''.
381 Make sure to download the associated @file{.sig} file and to verify the
382 authenticity of the tarball against it, along these lines:
383
384 @example
385 $ wget ftp://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
386 $ gpg --verify guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
387 @end example
388
389 If that command fails because you do not have the required public key,
390 then run this command to import it:
391
392 @example
393 $ gpg --keyserver pgp.mit.edu --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
394 @end example
395
396 @noindent
397 and rerun the @code{gpg --verify} command.
398 @c end authentication part
399
400 @item
401 As @code{root}, run:
402
403 @example
404 # cd /tmp
405 # tar --warning=no-timestamp -xf \
406 guix-binary-@value{VERSION}.@var{system}.tar.xz
407 # mv var/guix /var/ && mv gnu /
408 @end example
409
410 This creates @file{/gnu/store} (@pxref{The Store}) and @file{/var/guix}.
411 The latter contains a ready-to-use profile for @code{root} (see next
412 step.)
413
414 Do @emph{not} unpack the tarball on a working Guix system since that
415 would overwrite its own essential files.
416
417 The @code{--warning=no-timestamp} option makes sure GNU@tie{}tar does
418 not emit warnings about ``implausibly old time stamps'' (such
419 warnings were triggered by GNU@tie{}tar 1.26 and older; recent
420 versions are fine.)
421 They stem from the fact that all the
422 files in the archive have their modification time set to zero (which
423 means January 1st, 1970.) This is done on purpose to make sure the
424 archive content is independent of its creation time, thus making it
425 reproducible.
426
427 @item
428 Make @code{root}'s profile available under @file{~/.guix-profile}:
429
430 @example
431 # ln -sf /var/guix/profiles/per-user/root/guix-profile \
432 ~root/.guix-profile
433 @end example
434
435 @item
436 Create the group and user accounts for build users as explained below
437 (@pxref{Build Environment Setup}).
438
439 @item
440 Run the daemon, and set it to automatically start on boot.
441
442 If your host distro uses the systemd init system, this can be achieved
443 with these commands:
444
445 @example
446 # cp ~root/.guix-profile/lib/systemd/system/guix-daemon.service \
447 /etc/systemd/system/
448 # systemctl start guix-daemon && systemctl enable guix-daemon
449 @end example
450
451 If your host distro uses the Upstart init system:
452
453 @example
454 # cp ~root/.guix-profile/lib/upstart/system/guix-daemon.conf /etc/init/
455 # start guix-daemon
456 @end example
457
458 Otherwise, you can still start the daemon manually with:
459
460 @example
461 # ~root/.guix-profile/bin/guix-daemon --build-users-group=guixbuild
462 @end example
463
464 @item
465 Make the @command{guix} command available to other users on the machine,
466 for instance with:
467
468 @example
469 # mkdir -p /usr/local/bin
470 # cd /usr/local/bin
471 # ln -s /var/guix/profiles/per-user/root/guix-profile/bin/guix
472 @end example
473
474 It is also a good idea to make the Info version of this manual available
475 there:
476
477 @example
478 # mkdir -p /usr/local/share/info
479 # cd /usr/local/share/info
480 # for i in /var/guix/profiles/per-user/root/guix-profile/share/info/* ;
481 do ln -s $i ; done
482 @end example
483
484 That way, assuming @file{/usr/local/share/info} is in the search path,
485 running @command{info guix} will open this manual (@pxref{Other Info
486 Directories,,, texinfo, GNU Texinfo}, for more details on changing the
487 Info search path.)
488
489 @item
490 To use substitutes from @code{hydra.gnu.org} or one of its mirrors
491 (@pxref{Substitutes}), authorize them:
492
493 @example
494 # guix archive --authorize < ~root/.guix-profile/share/guix/hydra.gnu.org.pub
495 @end example
496 @end enumerate
497
498 This completes root-level install of Guix. Each user will need to
499 perform additional steps to make their Guix envionment ready for use,
500 @pxref{Application Setup}.
501
502 You can confirm that Guix is working by installing a sample package into
503 the root profile:
504
505 @example
506 # guix package -i hello
507 @end example
508
509 The @code{guix} package must remain available in @code{root}'s profile,
510 or it would become subject to garbage collection---in which case you
511 would find yourself badly handicapped by the lack of the @command{guix}
512 command. In other words, do not remove @code{guix} by running
513 @code{guix package -r guix}.
514
515 The binary installation tarball can be (re)produced and verified simply
516 by running the following command in the Guix source tree:
517
518 @example
519 make guix-binary.@var{system}.tar.xz
520 @end example
521
522
523 @node Requirements
524 @section Requirements
525
526 This section lists requirements when building Guix from source. The
527 build procedure for Guix is the same as for other GNU software, and is
528 not covered here. Please see the files @file{README} and @file{INSTALL}
529 in the Guix source tree for additional details.
530
531 GNU Guix depends on the following packages:
532
533 @itemize
534 @item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.7 or later;
535 @item @url{http://gnupg.org/, GNU libgcrypt};
536 @item @url{http://www.gnu.org/software/make/, GNU Make}.
537 @end itemize
538
539 The following dependencies are optional:
540
541 @itemize
542 @item
543 Installing @uref{http://gnutls.org/, GnuTLS-Guile} will allow you to
544 access @code{https} URLs for substitutes, which is highly recommended
545 (@pxref{Substitutes}). It also allows you to access HTTPS URLs with the
546 @command{guix download} command (@pxref{Invoking guix download}), the
547 @command{guix import pypi} command, and the @command{guix import cpan}
548 command. @xref{Guile Preparations, how to install the GnuTLS bindings
549 for Guile,, gnutls-guile, GnuTLS-Guile}.
550
551 @item
552 Installing
553 @url{http://savannah.nongnu.org/projects/guile-json/, Guile-JSON} will
554 allow you to use the @command{guix import pypi} command (@pxref{Invoking
555 guix import}). It is of
556 interest primarily for developers and not for casual users.
557
558 @item
559 When @url{http://zlib.net, zlib} is available, @command{guix publish}
560 can compress build byproducts (@pxref{Invoking guix publish}).
561 @end itemize
562
563 Unless @code{--disable-daemon} was passed to @command{configure}, the
564 following packages are also needed:
565
566 @itemize
567 @item @url{http://sqlite.org, SQLite 3};
568 @item @url{http://www.bzip.org, libbz2};
569 @item @url{http://gcc.gnu.org, GCC's g++}, with support for the
570 C++11 standard.
571 @end itemize
572
573 When configuring Guix on a system that already has a Guix installation,
574 be sure to specify the same state directory as the existing installation
575 using the @code{--localstatedir} option of the @command{configure}
576 script (@pxref{Directory Variables, @code{localstatedir},, standards,
577 GNU Coding Standards}). The @command{configure} script protects against
578 unintended misconfiguration of @var{localstatedir} so you do not
579 inadvertently corrupt your store (@pxref{The Store}).
580
581 When a working installation of @url{http://nixos.org/nix/, the Nix package
582 manager} is available, you
583 can instead configure Guix with @code{--disable-daemon}. In that case,
584 Nix replaces the three dependencies above.
585
586 Guix is compatible with Nix, so it is possible to share the same store
587 between both. To do so, you must pass @command{configure} not only the
588 same @code{--with-store-dir} value, but also the same
589 @code{--localstatedir} value. The latter is essential because it
590 specifies where the database that stores metadata about the store is
591 located, among other things. The default values for Nix are
592 @code{--with-store-dir=/nix/store} and @code{--localstatedir=/nix/var}.
593 Note that @code{--disable-daemon} is not required if
594 your goal is to share the store with Nix.
595
596 @node Running the Test Suite
597 @section Running the Test Suite
598
599 After a successful @command{configure} and @code{make} run, it is a good
600 idea to run the test suite. It can help catch issues with the setup or
601 environment, or bugs in Guix itself---and really, reporting test
602 failures is a good way to help improve the software. To run the test
603 suite, type:
604
605 @example
606 make check
607 @end example
608
609 Test cases can run in parallel: you can use the @code{-j} option of
610 GNU@tie{}make to speed things up. The first run may take a few minutes
611 on a recent machine; subsequent runs will be faster because the store
612 that is created for test purposes will already have various things in
613 cache.
614
615 It is also possible to run a subset of the tests by defining the
616 @code{TESTS} makefile variable as in this example:
617
618 @example
619 make check TESTS="tests/store.scm tests/cpio.scm"
620 @end example
621
622 By default, tests results are displayed at a file level. In order to
623 see the details of every individual test cases, it is possible to define
624 the @code{SCM_LOG_DRIVER_FLAGS} makefile variable as in this example:
625
626 @example
627 make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no"
628 @end example
629
630 Upon failure, please email @email{bug-guix@@gnu.org} and attach the
631 @file{test-suite.log} file. Please specify the Guix version being used
632 as well as version numbers of the dependencies (@pxref{Requirements}) in
633 your message.
634
635 Guix also comes with a whole-system test suite that tests complete
636 GuixSD operating system instances. It can only run on systems where
637 Guix is already installed, using:
638
639 @example
640 make check-system
641 @end example
642
643 @noindent
644 or, again, by defining @code{TESTS} to select a subset of tests to run:
645
646 @example
647 make check-system TESTS="basic mcron"
648 @end example
649
650 These system tests are defined in the @code{(gnu tests @dots{})}
651 modules. They work by running the operating systems under test with
652 lightweight instrumentation in a virtual machine (VM). They can be
653 computationally intensive or rather cheap, depending on whether
654 substitutes are available for their dependencies (@pxref{Substitutes}).
655 Some of them require a lot of storage space to hold VM images.
656
657 Again in case of test failures, please send @email{bug-guix@@gnu.org}
658 all the details.
659
660 @node Setting Up the Daemon
661 @section Setting Up the Daemon
662
663 @cindex daemon
664 Operations such as building a package or running the garbage collector
665 are all performed by a specialized process, the @dfn{build daemon}, on
666 behalf of clients. Only the daemon may access the store and its
667 associated database. Thus, any operation that manipulates the store
668 goes through the daemon. For instance, command-line tools such as
669 @command{guix package} and @command{guix build} communicate with the
670 daemon (@i{via} remote procedure calls) to instruct it what to do.
671
672 The following sections explain how to prepare the build daemon's
673 environment. See also @ref{Substitutes}, for information on how to allow
674 the daemon to download pre-built binaries.
675
676 @menu
677 * Build Environment Setup:: Preparing the isolated build environment.
678 * Daemon Offload Setup:: Offloading builds to remote machines.
679 @end menu
680
681 @node Build Environment Setup
682 @subsection Build Environment Setup
683
684 In a standard multi-user setup, Guix and its daemon---the
685 @command{guix-daemon} program---are installed by the system
686 administrator; @file{/gnu/store} is owned by @code{root} and
687 @command{guix-daemon} runs as @code{root}. Unprivileged users may use
688 Guix tools to build packages or otherwise access the store, and the
689 daemon will do it on their behalf, ensuring that the store is kept in a
690 consistent state, and allowing built packages to be shared among users.
691
692 @cindex build users
693 When @command{guix-daemon} runs as @code{root}, you may not want package
694 build processes themselves to run as @code{root} too, for obvious
695 security reasons. To avoid that, a special pool of @dfn{build users}
696 should be created for use by build processes started by the daemon.
697 These build users need not have a shell and a home directory: they will
698 just be used when the daemon drops @code{root} privileges in build
699 processes. Having several such users allows the daemon to launch
700 distinct build processes under separate UIDs, which guarantees that they
701 do not interfere with each other---an essential feature since builds are
702 regarded as pure functions (@pxref{Introduction}).
703
704 On a GNU/Linux system, a build user pool may be created like this (using
705 Bash syntax and the @code{shadow} commands):
706
707 @c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
708 @c for why `-G' is needed.
709 @example
710 # groupadd --system guixbuild
711 # for i in `seq -w 1 10`;
712 do
713 useradd -g guixbuild -G guixbuild \
714 -d /var/empty -s `which nologin` \
715 -c "Guix build user $i" --system \
716 guixbuilder$i;
717 done
718 @end example
719
720 @noindent
721 The number of build users determines how many build jobs may run in
722 parallel, as specified by the @option{--max-jobs} option
723 (@pxref{Invoking guix-daemon, @option{--max-jobs}}). To use
724 @command{guix system vm} and related commands, you may need to add the
725 build users to the @code{kvm} group so they can access @file{/dev/kvm},
726 using @code{-G guixbuild,kvm} instead of @code{-G guixbuild}
727 (@pxref{Invoking guix system}).
728
729 The @code{guix-daemon} program may then be run as @code{root} with the
730 following command@footnote{If your machine uses the systemd init system,
731 dropping the @file{@var{prefix}/lib/systemd/system/guix-daemon.service}
732 file in @file{/etc/systemd/system} will ensure that
733 @command{guix-daemon} is automatically started. Similarly, if your
734 machine uses the Upstart init system, drop the
735 @file{@var{prefix}/lib/upstart/system/guix-daemon.conf}
736 file in @file{/etc/init}.}:
737
738 @example
739 # guix-daemon --build-users-group=guixbuild
740 @end example
741
742 @cindex chroot
743 @noindent
744 This way, the daemon starts build processes in a chroot, under one of
745 the @code{guixbuilder} users. On GNU/Linux, by default, the chroot
746 environment contains nothing but:
747
748 @c Keep this list in sync with libstore/build.cc! -----------------------
749 @itemize
750 @item
751 a minimal @code{/dev} directory, created mostly independently from the
752 host @code{/dev}@footnote{``Mostly'', because while the set of files
753 that appear in the chroot's @code{/dev} is fixed, most of these files
754 can only be created if the host has them.};
755
756 @item
757 the @code{/proc} directory; it only shows the processes of the container
758 since a separate PID name space is used;
759
760 @item
761 @file{/etc/passwd} with an entry for the current user and an entry for
762 user @file{nobody};
763
764 @item
765 @file{/etc/group} with an entry for the user's group;
766
767 @item
768 @file{/etc/hosts} with an entry that maps @code{localhost} to
769 @code{127.0.0.1};
770
771 @item
772 a writable @file{/tmp} directory.
773 @end itemize
774
775 You can influence the directory where the daemon stores build trees
776 @i{via} the @code{TMPDIR} environment variable. However, the build tree
777 within the chroot is always called @file{/tmp/guix-build-@var{name}.drv-0},
778 where @var{name} is the derivation name---e.g., @code{coreutils-8.24}.
779 This way, the value of @code{TMPDIR} does not leak inside build
780 environments, which avoids discrepancies in cases where build processes
781 capture the name of their build tree.
782
783 @vindex http_proxy
784 The daemon also honors the @code{http_proxy} environment variable for
785 HTTP downloads it performs, be it for fixed-output derivations
786 (@pxref{Derivations}) or for substitutes (@pxref{Substitutes}).
787
788 If you are installing Guix as an unprivileged user, it is still possible
789 to run @command{guix-daemon} provided you pass @code{--disable-chroot}.
790 However, build processes will not be isolated from one another, and not
791 from the rest of the system. Thus, build processes may interfere with
792 each other, and may access programs, libraries, and other files
793 available on the system---making it much harder to view them as
794 @emph{pure} functions.
795
796
797 @node Daemon Offload Setup
798 @subsection Using the Offload Facility
799
800 @cindex offloading
801 @cindex build hook
802 When desired, the build daemon can @dfn{offload}
803 derivation builds to other machines
804 running Guix, using the @code{offload} @dfn{build hook}. When that
805 feature is enabled, a list of user-specified build machines is read from
806 @file{/etc/guix/machines.scm}; every time a build is requested, for
807 instance via @code{guix build}, the daemon attempts to offload it to one
808 of the machines that satisfy the constraints of the derivation, in
809 particular its system type---e.g., @file{x86_64-linux}. Missing
810 prerequisites for the build are copied over SSH to the target machine,
811 which then proceeds with the build; upon success the output(s) of the
812 build are copied back to the initial machine.
813
814 The @file{/etc/guix/machines.scm} file typically looks like this:
815
816 @example
817 (list (build-machine
818 (name "eightysix.example.org")
819 (system "x86_64-linux")
820 (user "bob")
821 (speed 2.)) ; incredibly fast!
822
823 (build-machine
824 (name "meeps.example.org")
825 (system "mips64el-linux")
826 (user "alice")
827 (private-key
828 (string-append (getenv "HOME")
829 "/.lsh/identity-for-guix"))))
830 @end example
831
832 @noindent
833 In the example above we specify a list of two build machines, one for
834 the @code{x86_64} architecture and one for the @code{mips64el}
835 architecture.
836
837 In fact, this file is---not surprisingly!---a Scheme file that is
838 evaluated when the @code{offload} hook is started. Its return value
839 must be a list of @code{build-machine} objects. While this example
840 shows a fixed list of build machines, one could imagine, say, using
841 DNS-SD to return a list of potential build machines discovered in the
842 local network (@pxref{Introduction, Guile-Avahi,, guile-avahi, Using
843 Avahi in Guile Scheme Programs}). The @code{build-machine} data type is
844 detailed below.
845
846 @deftp {Data Type} build-machine
847 This data type represents build machines to which the daemon may offload
848 builds. The important fields are:
849
850 @table @code
851
852 @item name
853 The host name of the remote machine.
854
855 @item system
856 The system type of the remote machine---e.g., @code{"x86_64-linux"}.
857
858 @item user
859 The user account to use when connecting to the remote machine over SSH.
860 Note that the SSH key pair must @emph{not} be passphrase-protected, to
861 allow non-interactive logins.
862
863 @end table
864
865 A number of optional fields may be specified:
866
867 @table @code
868
869 @item port
870 Port number of SSH server on the machine (default: 22).
871
872 @item private-key
873 The SSH private key file to use when connecting to the machine.
874
875 Currently offloading uses GNU@tie{}lsh as its SSH client
876 (@pxref{Invoking lsh,,, GNU lsh Manual}). Thus, the key file here must
877 be an lsh key file. This may change in the future, though.
878
879 @item parallel-builds
880 The number of builds that may run in parallel on the machine (1 by
881 default.)
882
883 @item speed
884 A ``relative speed factor''. The offload scheduler will tend to prefer
885 machines with a higher speed factor.
886
887 @item features
888 A list of strings denoting specific features supported by the machine.
889 An example is @code{"kvm"} for machines that have the KVM Linux modules
890 and corresponding hardware support. Derivations can request features by
891 name, and they will be scheduled on matching build machines.
892
893 @end table
894 @end deftp
895
896 The @code{guix} command must be in the search path on the build
897 machines, since offloading works by invoking the @code{guix archive} and
898 @code{guix build} commands. In addition, the Guix modules must be in
899 @code{$GUILE_LOAD_PATH} on the build machine---you can check whether
900 this is the case by running:
901
902 @example
903 lsh build-machine guile -c "'(use-modules (guix config))'"
904 @end example
905
906 There is one last thing to do once @file{machines.scm} is in place. As
907 explained above, when offloading, files are transferred back and forth
908 between the machine stores. For this to work, you first need to
909 generate a key pair on each machine to allow the daemon to export signed
910 archives of files from the store (@pxref{Invoking guix archive}):
911
912 @example
913 # guix archive --generate-key
914 @end example
915
916 @noindent
917 Each build machine must authorize the key of the master machine so that
918 it accepts store items it receives from the master:
919
920 @example
921 # guix archive --authorize < master-public-key.txt
922 @end example
923
924 @noindent
925 Likewise, the master machine must authorize the key of each build machine.
926
927 All the fuss with keys is here to express pairwise mutual trust
928 relations between the master and the build machines. Concretely, when
929 the master receives files from a build machine (and @i{vice versa}), its
930 build daemon can make sure they are genuine, have not been tampered
931 with, and that they are signed by an authorized key.
932
933
934 @node Invoking guix-daemon
935 @section Invoking @command{guix-daemon}
936
937 The @command{guix-daemon} program implements all the functionality to
938 access the store. This includes launching build processes, running the
939 garbage collector, querying the availability of a build result, etc. It
940 is normally run as @code{root} like this:
941
942 @example
943 # guix-daemon --build-users-group=guixbuild
944 @end example
945
946 @noindent
947 For details on how to set it up, @pxref{Setting Up the Daemon}.
948
949 @cindex chroot
950 @cindex container, build environment
951 @cindex build environment
952 @cindex reproducible builds
953 By default, @command{guix-daemon} launches build processes under
954 different UIDs, taken from the build group specified with
955 @code{--build-users-group}. In addition, each build process is run in a
956 chroot environment that only contains the subset of the store that the
957 build process depends on, as specified by its derivation
958 (@pxref{Programming Interface, derivation}), plus a set of specific
959 system directories. By default, the latter contains @file{/dev} and
960 @file{/dev/pts}. Furthermore, on GNU/Linux, the build environment is a
961 @dfn{container}: in addition to having its own file system tree, it has
962 a separate mount name space, its own PID name space, network name space,
963 etc. This helps achieve reproducible builds (@pxref{Features}).
964
965 When the daemon performs a build on behalf of the user, it creates a
966 build directory under @file{/tmp} or under the directory specified by
967 its @code{TMPDIR} environment variable; this directory is shared with
968 the container for the duration of the build. Be aware that using a
969 directory other than @file{/tmp} can affect build results---for example,
970 with a longer directory name, a build process that uses Unix-domain
971 sockets might hit the name length limitation for @code{sun_path}, which
972 it would otherwise not hit.
973
974 The build directory is automatically deleted upon completion, unless the
975 build failed and the client specified @option{--keep-failed}
976 (@pxref{Invoking guix build, @option{--keep-failed}}).
977
978 The following command-line options are supported:
979
980 @table @code
981 @item --build-users-group=@var{group}
982 Take users from @var{group} to run build processes (@pxref{Setting Up
983 the Daemon, build users}).
984
985 @item --no-substitutes
986 @cindex substitutes
987 Do not use substitutes for build products. That is, always build things
988 locally instead of allowing downloads of pre-built binaries
989 (@pxref{Substitutes}).
990
991 By default substitutes are used, unless the client---such as the
992 @command{guix package} command---is explicitly invoked with
993 @code{--no-substitutes}.
994
995 When the daemon runs with @code{--no-substitutes}, clients can still
996 explicitly enable substitution @i{via} the @code{set-build-options}
997 remote procedure call (@pxref{The Store}).
998
999 @item --substitute-urls=@var{urls}
1000 @anchor{daemon-substitute-urls}
1001 Consider @var{urls} the default whitespace-separated list of substitute
1002 source URLs. When this option is omitted,
1003 @indicateurl{https://mirror.hydra.gnu.org https://hydra.gnu.org} is used
1004 (@code{mirror.hydra.gnu.org} is a mirror of @code{hydra.gnu.org}).
1005
1006 This means that substitutes may be downloaded from @var{urls}, as long
1007 as they are signed by a trusted signature (@pxref{Substitutes}).
1008
1009 @cindex build hook
1010 @item --no-build-hook
1011 Do not use the @dfn{build hook}.
1012
1013 The build hook is a helper program that the daemon can start and to
1014 which it submits build requests. This mechanism is used to offload
1015 builds to other machines (@pxref{Daemon Offload Setup}).
1016
1017 @item --cache-failures
1018 Cache build failures. By default, only successful builds are cached.
1019
1020 When this option is used, @command{guix gc --list-failures} can be used
1021 to query the set of store items marked as failed; @command{guix gc
1022 --clear-failures} removes store items from the set of cached failures.
1023 @xref{Invoking guix gc}.
1024
1025 @item --cores=@var{n}
1026 @itemx -c @var{n}
1027 Use @var{n} CPU cores to build each derivation; @code{0} means as many
1028 as available.
1029
1030 The default value is @code{0}, but it may be overridden by clients, such
1031 as the @code{--cores} option of @command{guix build} (@pxref{Invoking
1032 guix build}).
1033
1034 The effect is to define the @code{NIX_BUILD_CORES} environment variable
1035 in the build process, which can then use it to exploit internal
1036 parallelism---for instance, by running @code{make -j$NIX_BUILD_CORES}.
1037
1038 @item --max-jobs=@var{n}
1039 @itemx -M @var{n}
1040 Allow at most @var{n} build jobs in parallel. The default value is
1041 @code{1}. Setting it to @code{0} means that no builds will be performed
1042 locally; instead, the daemon will offload builds (@pxref{Daemon Offload
1043 Setup}), or simply fail.
1044
1045 @item --rounds=@var{N}
1046 Build each derivation @var{n} times in a row, and raise an error if
1047 consecutive build results are not bit-for-bit identical. Note that this
1048 setting can be overridden by clients such as @command{guix build}
1049 (@pxref{Invoking guix build}).
1050
1051 When used in conjunction with @option{--keep-failed}, the differing
1052 output is kept in the store, under @file{/gnu/store/@dots{}-check}.
1053 This makes it easy to look for differences between the two results.
1054
1055 @item --debug
1056 Produce debugging output.
1057
1058 This is useful to debug daemon start-up issues, but then it may be
1059 overridden by clients, for example the @code{--verbosity} option of
1060 @command{guix build} (@pxref{Invoking guix build}).
1061
1062 @item --chroot-directory=@var{dir}
1063 Add @var{dir} to the build chroot.
1064
1065 Doing this may change the result of build processes---for instance if
1066 they use optional dependencies found in @var{dir} when it is available,
1067 and not otherwise. For that reason, it is not recommended to do so.
1068 Instead, make sure that each derivation declares all the inputs that it
1069 needs.
1070
1071 @item --disable-chroot
1072 Disable chroot builds.
1073
1074 Using this option is not recommended since, again, it would allow build
1075 processes to gain access to undeclared dependencies. It is necessary,
1076 though, when @command{guix-daemon} is running under an unprivileged user
1077 account.
1078
1079 @item --disable-log-compression
1080 Disable compression of the build logs.
1081
1082 Unless @code{--lose-logs} is used, all the build logs are kept in the
1083 @var{localstatedir}. To save space, the daemon automatically compresses
1084 them with bzip2 by default. This option disables that.
1085
1086 @item --disable-deduplication
1087 @cindex deduplication
1088 Disable automatic file ``deduplication'' in the store.
1089
1090 By default, files added to the store are automatically ``deduplicated'':
1091 if a newly added file is identical to another one found in the store,
1092 the daemon makes the new file a hard link to the other file. This can
1093 noticeably reduce disk usage, at the expense of slightly increased
1094 input/output load at the end of a build process. This option disables
1095 this optimization.
1096
1097 @item --gc-keep-outputs[=yes|no]
1098 Tell whether the garbage collector (GC) must keep outputs of live
1099 derivations.
1100
1101 When set to ``yes'', the GC will keep the outputs of any live derivation
1102 available in the store---the @code{.drv} files. The default is ``no'',
1103 meaning that derivation outputs are kept only if they are GC roots.
1104
1105 @item --gc-keep-derivations[=yes|no]
1106 Tell whether the garbage collector (GC) must keep derivations
1107 corresponding to live outputs.
1108
1109 When set to ``yes'', as is the case by default, the GC keeps
1110 derivations---i.e., @code{.drv} files---as long as at least one of their
1111 outputs is live. This allows users to keep track of the origins of
1112 items in their store. Setting it to ``no'' saves a bit of disk space.
1113
1114 Note that when both @code{--gc-keep-derivations} and
1115 @code{--gc-keep-outputs} are used, the effect is to keep all the build
1116 prerequisites (the sources, compiler, libraries, and other build-time
1117 tools) of live objects in the store, regardless of whether these
1118 prerequisites are live. This is convenient for developers since it
1119 saves rebuilds or downloads.
1120
1121 @item --impersonate-linux-2.6
1122 On Linux-based systems, impersonate Linux 2.6. This means that the
1123 kernel's @code{uname} system call will report 2.6 as the release number.
1124
1125 This might be helpful to build programs that (usually wrongfully) depend
1126 on the kernel version number.
1127
1128 @item --lose-logs
1129 Do not keep build logs. By default they are kept under
1130 @code{@var{localstatedir}/guix/log}.
1131
1132 @item --system=@var{system}
1133 Assume @var{system} as the current system type. By default it is the
1134 architecture/kernel pair found at configure time, such as
1135 @code{x86_64-linux}.
1136
1137 @item --listen=@var{socket}
1138 Listen for connections on @var{socket}, the file name of a Unix-domain
1139 socket. The default socket is
1140 @file{@var{localstatedir}/daemon-socket/socket}. This option is only
1141 useful in exceptional circumstances, such as if you need to run several
1142 daemons on the same machine.
1143 @end table
1144
1145
1146 @node Application Setup
1147 @section Application Setup
1148
1149 @cindex foreign distro
1150 When using Guix on top of GNU/Linux distribution other than GuixSD---a
1151 so-called @dfn{foreign distro}---a few additional steps are needed to
1152 get everything in place. Here are some of them.
1153
1154 @subsection Locales
1155
1156 @anchor{locales-and-locpath}
1157 @cindex locales, when not on GuixSD
1158 @vindex LOCPATH
1159 @vindex GUIX_LOCPATH
1160 Packages installed @i{via} Guix will not use the locale data of the
1161 host system. Instead, you must first install one of the locale packages
1162 available with Guix and then define the @code{GUIX_LOCPATH} environment
1163 variable:
1164
1165 @example
1166 $ guix package -i glibc-locales
1167 $ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
1168 @end example
1169
1170 Note that the @code{glibc-locales} package contains data for all the
1171 locales supported by the GNU@tie{}libc and weighs in at around
1172 110@tie{}MiB. Alternatively, the @code{glibc-utf8-locales} is smaller but
1173 limited to a few UTF-8 locales.
1174
1175 The @code{GUIX_LOCPATH} variable plays a role similar to @code{LOCPATH}
1176 (@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library Reference
1177 Manual}). There are two important differences though:
1178
1179 @enumerate
1180 @item
1181 @code{GUIX_LOCPATH} is honored only by the libc in Guix, and not by the libc
1182 provided by foreign distros. Thus, using @code{GUIX_LOCPATH} allows you
1183 to make sure the programs of the foreign distro will not end up loading
1184 incompatible locale data.
1185
1186 @item
1187 libc suffixes each entry of @code{GUIX_LOCPATH} with @code{/X.Y}, where
1188 @code{X.Y} is the libc version---e.g., @code{2.22}. This means that,
1189 should your Guix profile contain a mixture of programs linked against
1190 different libc version, each libc version will only try to load locale
1191 data in the right format.
1192 @end enumerate
1193
1194 This is important because the locale data format used by different libc
1195 versions may be incompatible.
1196
1197 @subsection X11 Fonts
1198
1199 The majority of graphical applications use Fontconfig to locate and
1200 load fonts and perform X11-client-side rendering. The @code{fontconfig}
1201 package in Guix looks for fonts in @file{$HOME/.guix-profile}
1202 by default. Thus, to allow graphical applications installed with Guix
1203 to display fonts, you have to install fonts with Guix as well.
1204 Essential font packages include @code{gs-fonts}, @code{font-dejavu}, and
1205 @code{font-gnu-freefont-ttf}.
1206
1207 To display text written in Chinese languages, Japanese, or Korean in
1208 graphical applications, consider installing
1209 @code{font-adobe-source-han-sans} or @code{font-wqy-zenhei}. The former
1210 has multiple outputs, one per language family (@pxref{Packages with
1211 Multiple Outputs}). For instance, the following command installs fonts
1212 for Chinese languages:
1213
1214 @example
1215 guix package -i font-adobe-source-han-sans:cn
1216 @end example
1217
1218 Older programs such as @command{xterm} do not use Fontconfig and instead
1219 rely on server-side font rendering. Such programs require to specify a
1220 full name of a font using XLFD (X Logical Font Description), like this:
1221
1222 @example
1223 -*-dejavu sans-medium-r-normal-*-*-100-*-*-*-*-*-1
1224 @end example
1225
1226 To be able to use such full names for the TrueType fonts installed in
1227 your Guix profile, you need to extend the font path of the X server:
1228
1229 @example
1230 xset +fp ~/.guix-profile/share/fonts/truetype
1231 @end example
1232
1233 After that, you can run @code{xlsfonts} (from @code{xlsfonts} package)
1234 to make sure your TrueType fonts are listed there.
1235
1236 @subsection X.509 Certificates
1237
1238 The @code{nss-certs} package provides X.509 certificates, which allow
1239 programs to authenticate Web servers accessed over HTTPS.
1240
1241 When using Guix on a foreign distro, you can install this package and
1242 define the relevant environment variables so that packages know where to
1243 look for certificates. @pxref{X.509 Certificates}, for detailed
1244 information.
1245
1246 @subsection Emacs Packages
1247
1248 When you install Emacs packages with Guix, the elisp files may be placed
1249 either in @file{$HOME/.guix-profile/share/emacs/site-lisp/} or in
1250 sub-directories of
1251 @file{$HOME/.guix-profile/share/emacs/site-lisp/guix.d/}. The latter
1252 directory exists because potentially there may exist thousands of Emacs
1253 packages and storing all their files in a single directory may be not
1254 reliable (because of name conflicts). So we think using a separate
1255 directory for each package is a good idea. It is very similar to how
1256 the Emacs package system organizes the file structure (@pxref{Package
1257 Files,,, emacs, The GNU Emacs Manual}).
1258
1259 By default, Emacs (installed with Guix) ``knows'' where these packages
1260 are placed, so you do not need to perform any configuration. If, for
1261 some reason, you want to avoid auto-loading Emacs packages installed
1262 with Guix, you can do so by running Emacs with @code{--no-site-file}
1263 option (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
1264
1265 @c TODO What else?
1266
1267 @c *********************************************************************
1268 @node Package Management
1269 @chapter Package Management
1270
1271 The purpose of GNU Guix is to allow users to easily install, upgrade, and
1272 remove software packages, without having to know about their build
1273 procedures or dependencies. Guix also goes beyond this obvious set of
1274 features.
1275
1276 This chapter describes the main features of Guix, as well as the package
1277 management tools it provides. Two user interfaces are provided for
1278 routine package management tasks: A command-line interface described below
1279 (@pxref{Invoking guix package, @code{guix package}}), as well as a visual user
1280 interface in Emacs described in a subsequent chapter (@pxref{Emacs Interface}).
1281
1282 @menu
1283 * Features:: How Guix will make your life brighter.
1284 * Invoking guix package:: Package installation, removal, etc.
1285 * Substitutes:: Downloading pre-built binaries.
1286 * Packages with Multiple Outputs:: Single source package, multiple outputs.
1287 * Invoking guix gc:: Running the garbage collector.
1288 * Invoking guix pull:: Fetching the latest Guix and distribution.
1289 * Invoking guix archive:: Exporting and importing store files.
1290 @end menu
1291
1292 @node Features
1293 @section Features
1294
1295 When using Guix, each package ends up in the @dfn{package store}, in its
1296 own directory---something that resembles
1297 @file{/gnu/store/xxx-package-1.2}, where @code{xxx} is a base32 string
1298 (note that Guix comes with an Emacs extension to shorten those file
1299 names, @pxref{Emacs Prettify}.)
1300
1301 Instead of referring to these directories, users have their own
1302 @dfn{profile}, which points to the packages that they actually want to
1303 use. These profiles are stored within each user's home directory, at
1304 @code{$HOME/.guix-profile}.
1305
1306 For example, @code{alice} installs GCC 4.7.2. As a result,
1307 @file{/home/alice/.guix-profile/bin/gcc} points to
1308 @file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Now, on the same machine,
1309 @code{bob} had already installed GCC 4.8.0. The profile of @code{bob}
1310 simply continues to point to
1311 @file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc}---i.e., both versions of GCC
1312 coexist on the same system without any interference.
1313
1314 The @command{guix package} command is the central tool to manage
1315 packages (@pxref{Invoking guix package}). It operates on the per-user
1316 profiles, and can be used @emph{with normal user privileges}.
1317
1318 The command provides the obvious install, remove, and upgrade
1319 operations. Each invocation is actually a @emph{transaction}: either
1320 the specified operation succeeds, or nothing happens. Thus, if the
1321 @command{guix package} process is terminated during the transaction,
1322 or if a power outage occurs during the transaction, then the user's
1323 profile remains in its previous state, and remains usable.
1324
1325 In addition, any package transaction may be @emph{rolled back}. So, if,
1326 for example, an upgrade installs a new version of a package that turns
1327 out to have a serious bug, users may roll back to the previous instance
1328 of their profile, which was known to work well. Similarly, the global
1329 system configuration on GuixSD is subject to
1330 transactional upgrades and roll-back
1331 (@pxref{Using the Configuration System}).
1332
1333 All packages in the package store may be @emph{garbage-collected}.
1334 Guix can determine which packages are still referenced by user
1335 profiles, and remove those that are provably no longer referenced
1336 (@pxref{Invoking guix gc}). Users may also explicitly remove old
1337 generations of their profile so that the packages they refer to can be
1338 collected.
1339
1340 @cindex reproducibility
1341 @cindex reproducible builds
1342 Finally, Guix takes a @dfn{purely functional} approach to package
1343 management, as described in the introduction (@pxref{Introduction}).
1344 Each @file{/gnu/store} package directory name contains a hash of all the
1345 inputs that were used to build that package---compiler, libraries, build
1346 scripts, etc. This direct correspondence allows users to make sure a
1347 given package installation matches the current state of their
1348 distribution. It also helps maximize @dfn{build reproducibility}:
1349 thanks to the isolated build environments that are used, a given build
1350 is likely to yield bit-identical files when performed on different
1351 machines (@pxref{Invoking guix-daemon, container}).
1352
1353 @cindex substitutes
1354 This foundation allows Guix to support @dfn{transparent binary/source
1355 deployment}. When a pre-built binary for a @file{/gnu/store} item is
1356 available from an external source---a @dfn{substitute}, Guix just
1357 downloads it and unpacks it;
1358 otherwise, it builds the package from source, locally
1359 (@pxref{Substitutes}). Because build results are usually bit-for-bit
1360 reproducible, users do not have to trust servers that provide
1361 substitutes: they can force a local build and @emph{challenge} providers
1362 (@pxref{Invoking guix challenge}).
1363
1364 Control over the build environment is a feature that is also useful for
1365 developers. The @command{guix environment} command allows developers of
1366 a package to quickly set up the right development environment for their
1367 package, without having to manually install the dependencies of the
1368 package into their profile (@pxref{Invoking guix environment}).
1369
1370 @node Invoking guix package
1371 @section Invoking @command{guix package}
1372
1373 The @command{guix package} command is the tool that allows users to
1374 install, upgrade, and remove packages, as well as rolling back to
1375 previous configurations. It operates only on the user's own profile,
1376 and works with normal user privileges (@pxref{Features}). Its syntax
1377 is:
1378
1379 @example
1380 guix package @var{options}
1381 @end example
1382
1383 Primarily, @var{options} specifies the operations to be performed during
1384 the transaction. Upon completion, a new profile is created, but
1385 previous @dfn{generations} of the profile remain available, should the user
1386 want to roll back.
1387
1388 For example, to remove @code{lua} and install @code{guile} and
1389 @code{guile-cairo} in a single transaction:
1390
1391 @example
1392 guix package -r lua -i guile guile-cairo
1393 @end example
1394
1395 @command{guix package} also supports a @dfn{declarative approach}
1396 whereby the user specifies the exact set of packages to be available and
1397 passes it @i{via} the @option{--manifest} option
1398 (@pxref{profile-manifest, @option{--manifest}}).
1399
1400 For each user, a symlink to the user's default profile is automatically
1401 created in @file{$HOME/.guix-profile}. This symlink always points to the
1402 current generation of the user's default profile. Thus, users can add
1403 @file{$HOME/.guix-profile/bin} to their @code{PATH} environment
1404 variable, and so on.
1405 @cindex search paths
1406 If you are not using the Guix System Distribution, consider adding the
1407 following lines to your @file{~/.bash_profile} (@pxref{Bash Startup
1408 Files,,, bash, The GNU Bash Reference Manual}) so that newly-spawned
1409 shells get all the right environment variable definitions:
1410
1411 @example
1412 GUIX_PROFILE="$HOME/.guix-profile" \
1413 source "$HOME/.guix-profile/etc/profile"
1414 @end example
1415
1416 In a multi-user setup, user profiles are stored in a place registered as
1417 a @dfn{garbage-collector root}, which @file{$HOME/.guix-profile} points
1418 to (@pxref{Invoking guix gc}). That directory is normally
1419 @code{@var{localstatedir}/profiles/per-user/@var{user}}, where
1420 @var{localstatedir} is the value passed to @code{configure} as
1421 @code{--localstatedir}, and @var{user} is the user name. The
1422 @file{per-user} directory is created when @command{guix-daemon} is
1423 started, and the @var{user} sub-directory is created by @command{guix
1424 package}.
1425
1426 The @var{options} can be among the following:
1427
1428 @table @code
1429
1430 @item --install=@var{package} @dots{}
1431 @itemx -i @var{package} @dots{}
1432 Install the specified @var{package}s.
1433
1434 Each @var{package} may specify either a simple package name, such as
1435 @code{guile}, or a package name followed by an at-sign and version number,
1436 such as @code{guile@@1.8.8} or simply @code{guile@@1.8} (in the latter
1437 case, the newest version prefixed by @code{1.8} is selected.)
1438
1439 If no version number is specified, the
1440 newest available version will be selected. In addition, @var{package}
1441 may contain a colon, followed by the name of one of the outputs of the
1442 package, as in @code{gcc:doc} or @code{binutils@@2.22:lib}
1443 (@pxref{Packages with Multiple Outputs}). Packages with a corresponding
1444 name (and optionally version) are searched for among the GNU
1445 distribution modules (@pxref{Package Modules}).
1446
1447 @cindex propagated inputs
1448 Sometimes packages have @dfn{propagated inputs}: these are dependencies
1449 that automatically get installed along with the required package
1450 (@pxref{package-propagated-inputs, @code{propagated-inputs} in
1451 @code{package} objects}, for information about propagated inputs in
1452 package definitions).
1453
1454 @anchor{package-cmd-propagated-inputs}
1455 An example is the GNU MPC library: its C header files refer to those of
1456 the GNU MPFR library, which in turn refer to those of the GMP library.
1457 Thus, when installing MPC, the MPFR and GMP libraries also get installed
1458 in the profile; removing MPC also removes MPFR and GMP---unless they had
1459 also been explicitly installed by the user.
1460
1461 Besides, packages sometimes rely on the definition of environment
1462 variables for their search paths (see explanation of
1463 @code{--search-paths} below). Any missing or possibly incorrect
1464 environment variable definitions are reported here.
1465
1466 @item --install-from-expression=@var{exp}
1467 @itemx -e @var{exp}
1468 Install the package @var{exp} evaluates to.
1469
1470 @var{exp} must be a Scheme expression that evaluates to a
1471 @code{<package>} object. This option is notably useful to disambiguate
1472 between same-named variants of a package, with expressions such as
1473 @code{(@@ (gnu packages base) guile-final)}.
1474
1475 Note that this option installs the first output of the specified
1476 package, which may be insufficient when needing a specific output of a
1477 multiple-output package.
1478
1479 @item --install-from-file=@var{file}
1480 @itemx -f @var{file}
1481 Install the package that the code within @var{file} evaluates to.
1482
1483 As an example, @var{file} might contain a definition like this
1484 (@pxref{Defining Packages}):
1485
1486 @example
1487 @verbatiminclude package-hello.scm
1488 @end example
1489
1490 Developers may find it useful to include such a @file{guix.scm} file
1491 in the root of their project source tree that can be used to test
1492 development snapshots and create reproducible development environments
1493 (@pxref{Invoking guix environment}).
1494
1495 @item --remove=@var{package} @dots{}
1496 @itemx -r @var{package} @dots{}
1497 Remove the specified @var{package}s.
1498
1499 As for @code{--install}, each @var{package} may specify a version number
1500 and/or output name in addition to the package name. For instance,
1501 @code{-r glibc:debug} would remove the @code{debug} output of
1502 @code{glibc}.
1503
1504 @item --upgrade[=@var{regexp} @dots{}]
1505 @itemx -u [@var{regexp} @dots{}]
1506 Upgrade all the installed packages. If one or more @var{regexp}s are
1507 specified, upgrade only installed packages whose name matches a
1508 @var{regexp}. Also see the @code{--do-not-upgrade} option below.
1509
1510 Note that this upgrades package to the latest version of packages found
1511 in the distribution currently installed. To update your distribution,
1512 you should regularly run @command{guix pull} (@pxref{Invoking guix
1513 pull}).
1514
1515 @item --do-not-upgrade[=@var{regexp} @dots{}]
1516 When used together with the @code{--upgrade} option, do @emph{not}
1517 upgrade any packages whose name matches a @var{regexp}. For example, to
1518 upgrade all packages in the current profile except those containing the
1519 substring ``emacs'':
1520
1521 @example
1522 $ guix package --upgrade . --do-not-upgrade emacs
1523 @end example
1524
1525 @item @anchor{profile-manifest}--manifest=@var{file}
1526 @itemx -m @var{file}
1527 @cindex profile declaration
1528 @cindex profile manifest
1529 Create a new generation of the profile from the manifest object
1530 returned by the Scheme code in @var{file}.
1531
1532 This allows you to @emph{declare} the profile's contents rather than
1533 constructing it through a sequence of @code{--install} and similar
1534 commands. The advantage is that @var{file} can be put under version
1535 control, copied to different machines to reproduce the same profile, and
1536 so on.
1537
1538 @c FIXME: Add reference to (guix profile) documentation when available.
1539 @var{file} must return a @dfn{manifest} object, which is roughly a list
1540 of packages:
1541
1542 @findex packages->manifest
1543 @example
1544 (use-package-modules guile emacs)
1545
1546 (packages->manifest
1547 (list emacs
1548 guile-2.0
1549 ;; Use a specific package output.
1550 (list guile-2.0 "debug")))
1551 @end example
1552
1553 @item --roll-back
1554 Roll back to the previous @dfn{generation} of the profile---i.e., undo
1555 the last transaction.
1556
1557 When combined with options such as @code{--install}, roll back occurs
1558 before any other actions.
1559
1560 When rolling back from the first generation that actually contains
1561 installed packages, the profile is made to point to the @dfn{zeroth
1562 generation}, which contains no files apart from its own metadata.
1563
1564 After having rolled back, installing, removing, or upgrading packages
1565 overwrites previous future generations. Thus, the history of the
1566 generations in a profile is always linear.
1567
1568 @item --switch-generation=@var{pattern}
1569 @itemx -S @var{pattern}
1570 Switch to a particular generation defined by @var{pattern}.
1571
1572 @var{pattern} may be either a generation number or a number prefixed
1573 with ``+'' or ``-''. The latter means: move forward/backward by a
1574 specified number of generations. For example, if you want to return to
1575 the latest generation after @code{--roll-back}, use
1576 @code{--switch-generation=+1}.
1577
1578 The difference between @code{--roll-back} and
1579 @code{--switch-generation=-1} is that @code{--switch-generation} will
1580 not make a zeroth generation, so if a specified generation does not
1581 exist, the current generation will not be changed.
1582
1583 @item --search-paths[=@var{kind}]
1584 @cindex search paths
1585 Report environment variable definitions, in Bash syntax, that may be
1586 needed in order to use the set of installed packages. These environment
1587 variables are used to specify @dfn{search paths} for files used by some
1588 of the installed packages.
1589
1590 For example, GCC needs the @code{CPATH} and @code{LIBRARY_PATH}
1591 environment variables to be defined so it can look for headers and
1592 libraries in the user's profile (@pxref{Environment Variables,,, gcc,
1593 Using the GNU Compiler Collection (GCC)}). If GCC and, say, the C
1594 library are installed in the profile, then @code{--search-paths} will
1595 suggest setting these variables to @code{@var{profile}/include} and
1596 @code{@var{profile}/lib}, respectively.
1597
1598 The typical use case is to define these environment variables in the
1599 shell:
1600
1601 @example
1602 $ eval `guix package --search-paths`
1603 @end example
1604
1605 @var{kind} may be one of @code{exact}, @code{prefix}, or @code{suffix},
1606 meaning that the returned environment variable definitions will either
1607 be exact settings, or prefixes or suffixes of the current value of these
1608 variables. When omitted, @var{kind} defaults to @code{exact}.
1609
1610 This option can also be used to compute the @emph{combined} search paths
1611 of several profiles. Consider this example:
1612
1613 @example
1614 $ guix package -p foo -i guile
1615 $ guix package -p bar -i guile-json
1616 $ guix package -p foo -p bar --search-paths
1617 @end example
1618
1619 The last command above reports about the @code{GUILE_LOAD_PATH}
1620 variable, even though, taken individually, neither @file{foo} nor
1621 @file{bar} would lead to that recommendation.
1622
1623
1624 @item --profile=@var{profile}
1625 @itemx -p @var{profile}
1626 Use @var{profile} instead of the user's default profile.
1627
1628 @item --verbose
1629 Produce verbose output. In particular, emit the build log of the
1630 environment on the standard error port.
1631
1632 @item --bootstrap
1633 Use the bootstrap Guile to build the profile. This option is only
1634 useful to distribution developers.
1635
1636 @end table
1637
1638 In addition to these actions, @command{guix package} supports the
1639 following options to query the current state of a profile, or the
1640 availability of packages:
1641
1642 @table @option
1643
1644 @item --search=@var{regexp}
1645 @itemx -s @var{regexp}
1646 @cindex searching for packages
1647 List the available packages whose name, synopsis, or description matches
1648 @var{regexp}. Print all the metadata of matching packages in
1649 @code{recutils} format (@pxref{Top, GNU recutils databases,, recutils,
1650 GNU recutils manual}).
1651
1652 This allows specific fields to be extracted using the @command{recsel}
1653 command, for instance:
1654
1655 @example
1656 $ guix package -s malloc | recsel -p name,version
1657 name: glibc
1658 version: 2.17
1659
1660 name: libgc
1661 version: 7.2alpha6
1662 @end example
1663
1664 Similarly, to show the name of all the packages available under the
1665 terms of the GNU@tie{}LGPL version 3:
1666
1667 @example
1668 $ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
1669 name: elfutils
1670
1671 name: gmp
1672 @dots{}
1673 @end example
1674
1675 It is also possible to refine search results using several @code{-s}
1676 flags. For example, the following command returns a list of board
1677 games:
1678
1679 @example
1680 $ guix package -s '\<board\>' -s game | recsel -p name
1681 name: gnubg
1682 @dots{}
1683 @end example
1684
1685 If we were to omit @code{-s game}, we would also get software packages
1686 that deal with printed circuit boards; removing the angle brackets
1687 around @code{board} would further add packages that have to do with
1688 keyboards.
1689
1690 And now for a more elaborate example. The following command searches
1691 for cryptographic libraries, filters out Haskell, Perl, Python, and Ruby
1692 libraries, and prints the name and synopsis of the matching packages:
1693
1694 @example
1695 $ guix package -s crypto -s library | \
1696 recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
1697 @end example
1698
1699 @noindent
1700 @xref{Selection Expressions,,, recutils, GNU recutils manual}, for more
1701 information on @dfn{selection expressions} for @code{recsel -e}.
1702
1703 @item --show=@var{package}
1704 Show details about @var{package}, taken from the list of available packages, in
1705 @code{recutils} format (@pxref{Top, GNU recutils databases,, recutils, GNU
1706 recutils manual}).
1707
1708 @example
1709 $ guix package --show=python | recsel -p name,version
1710 name: python
1711 version: 2.7.6
1712
1713 name: python
1714 version: 3.3.5
1715 @end example
1716
1717 You may also specify the full name of a package to only get details about a
1718 specific version of it:
1719 @example
1720 $ guix package --show=python-3.3.5 | recsel -p name,version
1721 name: python
1722 version: 3.3.5
1723 @end example
1724
1725
1726
1727 @item --list-installed[=@var{regexp}]
1728 @itemx -I [@var{regexp}]
1729 List the currently installed packages in the specified profile, with the
1730 most recently installed packages shown last. When @var{regexp} is
1731 specified, list only installed packages whose name matches @var{regexp}.
1732
1733 For each installed package, print the following items, separated by
1734 tabs: the package name, its version string, the part of the package that
1735 is installed (for instance, @code{out} for the default output,
1736 @code{include} for its headers, etc.), and the path of this package in
1737 the store.
1738
1739 @item --list-available[=@var{regexp}]
1740 @itemx -A [@var{regexp}]
1741 List packages currently available in the distribution for this system
1742 (@pxref{GNU Distribution}). When @var{regexp} is specified, list only
1743 installed packages whose name matches @var{regexp}.
1744
1745 For each package, print the following items separated by tabs: its name,
1746 its version string, the parts of the package (@pxref{Packages with
1747 Multiple Outputs}), and the source location of its definition.
1748
1749 @item --list-generations[=@var{pattern}]
1750 @itemx -l [@var{pattern}]
1751 Return a list of generations along with their creation dates; for each
1752 generation, show the installed packages, with the most recently
1753 installed packages shown last. Note that the zeroth generation is never
1754 shown.
1755
1756 For each installed package, print the following items, separated by
1757 tabs: the name of a package, its version string, the part of the package
1758 that is installed (@pxref{Packages with Multiple Outputs}), and the
1759 location of this package in the store.
1760
1761 When @var{pattern} is used, the command returns only matching
1762 generations. Valid patterns include:
1763
1764 @itemize
1765 @item @emph{Integers and comma-separated integers}. Both patterns denote
1766 generation numbers. For instance, @code{--list-generations=1} returns
1767 the first one.
1768
1769 And @code{--list-generations=1,8,2} outputs three generations in the
1770 specified order. Neither spaces nor trailing commas are allowed.
1771
1772 @item @emph{Ranges}. @code{--list-generations=2..9} prints the
1773 specified generations and everything in between. Note that the start of
1774 a range must be smaller than its end.
1775
1776 It is also possible to omit the endpoint. For example,
1777 @code{--list-generations=2..}, returns all generations starting from the
1778 second one.
1779
1780 @item @emph{Durations}. You can also get the last @emph{N}@tie{}days, weeks,
1781 or months by passing an integer along with the first letter of the
1782 duration. For example, @code{--list-generations=20d} lists generations
1783 that are up to 20 days old.
1784 @end itemize
1785
1786 @item --delete-generations[=@var{pattern}]
1787 @itemx -d [@var{pattern}]
1788 When @var{pattern} is omitted, delete all generations except the current
1789 one.
1790
1791 This command accepts the same patterns as @option{--list-generations}.
1792 When @var{pattern} is specified, delete the matching generations. When
1793 @var{pattern} specifies a duration, generations @emph{older} than the
1794 specified duration match. For instance, @code{--delete-generations=1m}
1795 deletes generations that are more than one month old.
1796
1797 If the current generation matches, it is @emph{not} deleted. Also, the
1798 zeroth generation is never deleted.
1799
1800 Note that deleting generations prevents rolling back to them.
1801 Consequently, this command must be used with care.
1802
1803 @end table
1804
1805 Finally, since @command{guix package} may actually start build
1806 processes, it supports all the common build options (@pxref{Common Build
1807 Options}). It also supports package transformation options, such as
1808 @option{--with-source} (@pxref{Package Transformation Options}).
1809 However, note that package transformations are lost when upgrading; to
1810 preserve transformations across upgrades, you should define your own
1811 package variant in a Guile module and add it to @code{GUIX_PACKAGE_PATH}
1812 (@pxref{Defining Packages}).
1813
1814
1815 @node Substitutes
1816 @section Substitutes
1817
1818 @cindex substitutes
1819 @cindex pre-built binaries
1820 Guix supports transparent source/binary deployment, which means that it
1821 can either build things locally, or download pre-built items from a
1822 server. We call these pre-built items @dfn{substitutes}---they are
1823 substitutes for local build results. In many cases, downloading a
1824 substitute is much faster than building things locally.
1825
1826 Substitutes can be anything resulting from a derivation build
1827 (@pxref{Derivations}). Of course, in the common case, they are
1828 pre-built package binaries, but source tarballs, for instance, which
1829 also result from derivation builds, can be available as substitutes.
1830
1831 The @code{hydra.gnu.org} server is a front-end to a build farm that
1832 builds packages from the GNU distribution continuously for some
1833 architectures, and makes them available as substitutes (@pxref{Emacs
1834 Hydra}, for information on how to query the continuous integration
1835 server). This is the
1836 default source of substitutes; it can be overridden by passing the
1837 @option{--substitute-urls} option either to @command{guix-daemon}
1838 (@pxref{daemon-substitute-urls,, @code{guix-daemon --substitute-urls}})
1839 or to client tools such as @command{guix package}
1840 (@pxref{client-substitute-urls,, client @option{--substitute-urls}
1841 option}).
1842
1843 Substitute URLs can be either HTTP or HTTPS@footnote{For HTTPS access,
1844 the Guile bindings of GnuTLS must be installed. @xref{Requirements}.}
1845 HTTPS is recommended because communications are encrypted; conversely,
1846 using HTTP makes all communications visible to an eavesdropper, who
1847 could use the information gathered to determine, for instance, whether
1848 your system has unpatched security vulnerabilities.
1849
1850 @cindex security
1851 @cindex digital signatures
1852 To allow Guix to download substitutes from @code{hydra.gnu.org} or a
1853 mirror thereof, you
1854 must add its public key to the access control list (ACL) of archive
1855 imports, using the @command{guix archive} command (@pxref{Invoking guix
1856 archive}). Doing so implies that you trust @code{hydra.gnu.org} to not
1857 be compromised and to serve genuine substitutes.
1858
1859 This public key is installed along with Guix, in
1860 @code{@var{prefix}/share/guix/hydra.gnu.org.pub}, where @var{prefix} is
1861 the installation prefix of Guix. If you installed Guix from source,
1862 make sure you checked the GPG signature of
1863 @file{guix-@value{VERSION}.tar.gz}, which contains this public key file.
1864 Then, you can run something like this:
1865
1866 @example
1867 # guix archive --authorize < hydra.gnu.org.pub
1868 @end example
1869
1870 Once this is in place, the output of a command like @code{guix build}
1871 should change from something like:
1872
1873 @example
1874 $ guix build emacs --dry-run
1875 The following derivations would be built:
1876 /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
1877 /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
1878 /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
1879 /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
1880 @dots{}
1881 @end example
1882
1883 @noindent
1884 to something like:
1885
1886 @example
1887 $ guix build emacs --dry-run
1888 The following files would be downloaded:
1889 /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
1890 /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
1891 /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
1892 /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
1893 @dots{}
1894 @end example
1895
1896 @noindent
1897 This indicates that substitutes from @code{hydra.gnu.org} are usable and
1898 will be downloaded, when possible, for future builds.
1899
1900 Guix ignores substitutes that are not signed, or that are not signed by
1901 one of the keys listed in the ACL. It also detects and raises an error
1902 when attempting to use a substitute that has been tampered with.
1903
1904 @vindex http_proxy
1905 Substitutes are downloaded over HTTP or HTTPS.
1906 The @code{http_proxy} environment
1907 variable can be set in the environment of @command{guix-daemon} and is
1908 honored for downloads of substitutes. Note that the value of
1909 @code{http_proxy} in the environment where @command{guix build},
1910 @command{guix package}, and other client commands are run has
1911 @emph{absolutely no effect}.
1912
1913 When using HTTPS, the server's X.509 certificate is @emph{not} validated
1914 (in other words, the server is not authenticated), contrary to what
1915 HTTPS clients such as Web browsers usually do. This is because Guix
1916 authenticates substitute information itself, as explained above, which
1917 is what we care about (whereas X.509 certificates are about
1918 authenticating bindings between domain names and public keys.)
1919
1920 The substitute mechanism can be disabled globally by running
1921 @code{guix-daemon} with @code{--no-substitutes} (@pxref{Invoking
1922 guix-daemon}). It can also be disabled temporarily by passing the
1923 @code{--no-substitutes} option to @command{guix package}, @command{guix
1924 build}, and other command-line tools.
1925
1926
1927 @unnumberedsubsec On Trusting Binaries
1928
1929 Today, each individual's control over their own computing is at the
1930 mercy of institutions, corporations, and groups with enough power and
1931 determination to subvert the computing infrastructure and exploit its
1932 weaknesses. While using @code{hydra.gnu.org} substitutes can be
1933 convenient, we encourage users to also build on their own, or even run
1934 their own build farm, such that @code{hydra.gnu.org} is less of an
1935 interesting target. One way to help is by publishing the software you
1936 build using @command{guix publish} so that others have one more choice
1937 of server to download substitutes from (@pxref{Invoking guix publish}).
1938
1939 Guix has the foundations to maximize build reproducibility
1940 (@pxref{Features}). In most cases, independent builds of a given
1941 package or derivation should yield bit-identical results. Thus, through
1942 a diverse set of independent package builds, we can strengthen the
1943 integrity of our systems. The @command{guix challenge} command aims to
1944 help users assess substitute servers, and to assist developers in
1945 finding out about non-deterministic package builds (@pxref{Invoking guix
1946 challenge}). Similarly, the @option{--check} option of @command{guix
1947 build} allows users to check whether previously-installed substitutes
1948 are genuine by rebuilding them locally (@pxref{build-check,
1949 @command{guix build --check}}).
1950
1951 In the future, we want Guix to have support to publish and retrieve
1952 binaries to/from other users, in a peer-to-peer fashion. If you would
1953 like to discuss this project, join us on @email{guix-devel@@gnu.org}.
1954
1955
1956 @node Packages with Multiple Outputs
1957 @section Packages with Multiple Outputs
1958
1959 @cindex multiple-output packages
1960 @cindex package outputs
1961
1962 Often, packages defined in Guix have a single @dfn{output}---i.e., the
1963 source package leads to exactly one directory in the store. When running
1964 @command{guix package -i glibc}, one installs the default output of the
1965 GNU libc package; the default output is called @code{out}, but its name
1966 can be omitted as shown in this command. In this particular case, the
1967 default output of @code{glibc} contains all the C header files, shared
1968 libraries, static libraries, Info documentation, and other supporting
1969 files.
1970
1971 Sometimes it is more appropriate to separate the various types of files
1972 produced from a single source package into separate outputs. For
1973 instance, the GLib C library (used by GTK+ and related packages)
1974 installs more than 20 MiB of reference documentation as HTML pages.
1975 To save space for users who do not need it, the documentation goes to a
1976 separate output, called @code{doc}. To install the main GLib output,
1977 which contains everything but the documentation, one would run:
1978
1979 @example
1980 guix package -i glib
1981 @end example
1982
1983 The command to install its documentation is:
1984
1985 @example
1986 guix package -i glib:doc
1987 @end example
1988
1989 Some packages install programs with different ``dependency footprints''.
1990 For instance, the WordNet package installs both command-line tools and
1991 graphical user interfaces (GUIs). The former depend solely on the C
1992 library, whereas the latter depend on Tcl/Tk and the underlying X
1993 libraries. In this case, we leave the command-line tools in the default
1994 output, whereas the GUIs are in a separate output. This allows users
1995 who do not need the GUIs to save space. The @command{guix size} command
1996 can help find out about such situations (@pxref{Invoking guix size}).
1997 @command{guix graph} can also be helpful (@pxref{Invoking guix graph}).
1998
1999 There are several such multiple-output packages in the GNU distribution.
2000 Other conventional output names include @code{lib} for libraries and
2001 possibly header files, @code{bin} for stand-alone programs, and
2002 @code{debug} for debugging information (@pxref{Installing Debugging
2003 Files}). The outputs of a packages are listed in the third column of
2004 the output of @command{guix package --list-available} (@pxref{Invoking
2005 guix package}).
2006
2007
2008 @node Invoking guix gc
2009 @section Invoking @command{guix gc}
2010
2011 @cindex garbage collector
2012 Packages that are installed, but not used, may be @dfn{garbage-collected}.
2013 The @command{guix gc} command allows users to explicitly run the garbage
2014 collector to reclaim space from the @file{/gnu/store} directory. It is
2015 the @emph{only} way to remove files from @file{/gnu/store}---removing
2016 files or directories manually may break it beyond repair!
2017
2018 The garbage collector has a set of known @dfn{roots}: any file under
2019 @file{/gnu/store} reachable from a root is considered @dfn{live} and
2020 cannot be deleted; any other file is considered @dfn{dead} and may be
2021 deleted. The set of garbage collector roots includes default user
2022 profiles, and may be augmented with @command{guix build --root}, for
2023 example (@pxref{Invoking guix build}).
2024
2025 Prior to running @code{guix gc --collect-garbage} to make space, it is
2026 often useful to remove old generations from user profiles; that way, old
2027 package builds referenced by those generations can be reclaimed. This
2028 is achieved by running @code{guix package --delete-generations}
2029 (@pxref{Invoking guix package}).
2030
2031 The @command{guix gc} command has three modes of operation: it can be
2032 used to garbage-collect any dead files (the default), to delete specific
2033 files (the @code{--delete} option), to print garbage-collector
2034 information, or for more advanced queries. The garbage collection
2035 options are as follows:
2036
2037 @table @code
2038 @item --collect-garbage[=@var{min}]
2039 @itemx -C [@var{min}]
2040 Collect garbage---i.e., unreachable @file{/gnu/store} files and
2041 sub-directories. This is the default operation when no option is
2042 specified.
2043
2044 When @var{min} is given, stop once @var{min} bytes have been collected.
2045 @var{min} may be a number of bytes, or it may include a unit as a
2046 suffix, such as @code{MiB} for mebibytes and @code{GB} for gigabytes
2047 (@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
2048
2049 When @var{min} is omitted, collect all the garbage.
2050
2051 @item --free-space=@var{free}
2052 @itemx -F @var{free}
2053 Collect garbage until @var{free} space is available under
2054 @file{/gnu/store}, if possible; @var{free} denotes storage space, such
2055 as @code{500MiB}, as described above.
2056
2057 When @var{free} or more is already available in @file{/gnu/store}, do
2058 nothing and exit immediately.
2059
2060 @item --delete
2061 @itemx -d
2062 Attempt to delete all the store files and directories specified as
2063 arguments. This fails if some of the files are not in the store, or if
2064 they are still live.
2065
2066 @item --list-failures
2067 List store items corresponding to cached build failures.
2068
2069 This prints nothing unless the daemon was started with
2070 @option{--cache-failures} (@pxref{Invoking guix-daemon,
2071 @option{--cache-failures}}).
2072
2073 @item --clear-failures
2074 Remove the specified store items from the failed-build cache.
2075
2076 Again, this option only makes sense when the daemon is started with
2077 @option{--cache-failures}. Otherwise, it does nothing.
2078
2079 @item --list-dead
2080 Show the list of dead files and directories still present in the
2081 store---i.e., files and directories no longer reachable from any root.
2082
2083 @item --list-live
2084 Show the list of live store files and directories.
2085
2086 @end table
2087
2088 In addition, the references among existing store files can be queried:
2089
2090 @table @code
2091
2092 @item --references
2093 @itemx --referrers
2094 List the references (respectively, the referrers) of store files given
2095 as arguments.
2096
2097 @item --requisites
2098 @itemx -R
2099 @cindex closure
2100 List the requisites of the store files passed as arguments. Requisites
2101 include the store files themselves, their references, and the references
2102 of these, recursively. In other words, the returned list is the
2103 @dfn{transitive closure} of the store files.
2104
2105 @xref{Invoking guix size}, for a tool to profile the size of the closure
2106 of an element. @xref{Invoking guix graph}, for a tool to visualize
2107 the graph of references.
2108
2109 @end table
2110
2111 Lastly, the following options allow you to check the integrity of the
2112 store and to control disk usage.
2113
2114 @table @option
2115
2116 @item --verify[=@var{options}]
2117 @cindex integrity, of the store
2118 @cindex integrity checking
2119 Verify the integrity of the store.
2120
2121 By default, make sure that all the store items marked as valid in the
2122 database of the daemon actually exist in @file{/gnu/store}.
2123
2124 When provided, @var{options} must be a comma-separated list containing one
2125 or more of @code{contents} and @code{repair}.
2126
2127 When passing @option{--verify=contents}, the daemon computse the
2128 content hash of each store item and compares it against its hash in the
2129 database. Hash mismatches are reported as data corruptions. Because it
2130 traverses @emph{all the files in the store}, this command can take a
2131 long time, especially on systems with a slow disk drive.
2132
2133 @cindex repairing the store
2134 Using @option{--verify=repair} or @option{--verify=contents,repair}
2135 causes the daemon to try to repair corrupt store items by fetching
2136 substitutes for them (@pxref{Substitutes}). Because repairing is not
2137 atomic, and thus potentially dangerous, it is available only to the
2138 system administrator.
2139
2140 @item --optimize
2141 @cindex deduplication
2142 Optimize the store by hard-linking identical files---this is
2143 @dfn{deduplication}.
2144
2145 The daemon performs deduplication after each successful build or archive
2146 import, unless it was started with @code{--disable-deduplication}
2147 (@pxref{Invoking guix-daemon, @code{--disable-deduplication}}). Thus,
2148 this option is primarily useful when the daemon was running with
2149 @code{--disable-deduplication}.
2150
2151 @end table
2152
2153 @node Invoking guix pull
2154 @section Invoking @command{guix pull}
2155
2156 Packages are installed or upgraded to the latest version available in
2157 the distribution currently available on your local machine. To update
2158 that distribution, along with the Guix tools, you must run @command{guix
2159 pull}: the command downloads the latest Guix source code and package
2160 descriptions, and deploys it.
2161
2162 On completion, @command{guix package} will use packages and package
2163 versions from this just-retrieved copy of Guix. Not only that, but all
2164 the Guix commands and Scheme modules will also be taken from that latest
2165 version. New @command{guix} sub-commands added by the update also
2166 become available.
2167
2168 Any user can update their Guix copy using @command{guix pull}, and the
2169 effect is limited to the user who run @command{guix pull}. For
2170 instance, when user @code{root} runs @command{guix pull}, this has no
2171 effect on the version of Guix that user @code{alice} sees, and vice
2172 versa@footnote{Under the hood, @command{guix pull} updates the
2173 @file{~/.config/guix/latest} symbolic link to point to the latest Guix,
2174 and the @command{guix} command loads code from there.}.
2175
2176 The @command{guix pull} command is usually invoked with no arguments,
2177 but it supports the following options:
2178
2179 @table @code
2180 @item --verbose
2181 Produce verbose output, writing build logs to the standard error output.
2182
2183 @item --url=@var{url}
2184 Download the source tarball of Guix from @var{url}.
2185
2186 By default, the tarball is taken from its canonical address at
2187 @code{gnu.org}, for the stable branch of Guix.
2188
2189 @item --bootstrap
2190 Use the bootstrap Guile to build the latest Guix. This option is only
2191 useful to Guix developers.
2192 @end table
2193
2194
2195 @node Invoking guix archive
2196 @section Invoking @command{guix archive}
2197
2198 The @command{guix archive} command allows users to @dfn{export} files
2199 from the store into a single archive, and to later @dfn{import} them.
2200 In particular, it allows store files to be transferred from one machine
2201 to the store on another machine.
2202
2203 To export store files as an archive to standard output, run:
2204
2205 @example
2206 guix archive --export @var{options} @var{specifications}...
2207 @end example
2208
2209 @var{specifications} may be either store file names or package
2210 specifications, as for @command{guix package} (@pxref{Invoking guix
2211 package}). For instance, the following command creates an archive
2212 containing the @code{gui} output of the @code{git} package and the main
2213 output of @code{emacs}:
2214
2215 @example
2216 guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
2217 @end example
2218
2219 If the specified packages are not built yet, @command{guix archive}
2220 automatically builds them. The build process may be controlled with the
2221 common build options (@pxref{Common Build Options}).
2222
2223 To transfer the @code{emacs} package to a machine connected over SSH,
2224 one would run:
2225
2226 @example
2227 guix archive --export -r emacs | ssh the-machine guix archive --import
2228 @end example
2229
2230 @noindent
2231 Similarly, a complete user profile may be transferred from one machine
2232 to another like this:
2233
2234 @example
2235 guix archive --export -r $(readlink -f ~/.guix-profile) | \
2236 ssh the-machine guix-archive --import
2237 @end example
2238
2239 @noindent
2240 However, note that, in both examples, all of @code{emacs} and the
2241 profile as well as all of their dependencies are transferred (due to
2242 @code{-r}), regardless of what is already available in the store on the
2243 target machine. The @code{--missing} option can help figure out which
2244 items are missing from the target store.
2245
2246 Archives are stored in the ``Nix archive'' or ``Nar'' format, which is
2247 comparable in spirit to `tar', but with a few noteworthy differences
2248 that make it more appropriate for our purposes. First, rather than
2249 recording all Unix metadata for each file, the Nar format only mentions
2250 the file type (regular, directory, or symbolic link); Unix permissions
2251 and owner/group are dismissed. Second, the order in which directory
2252 entries are stored always follows the order of file names according to
2253 the C locale collation order. This makes archive production fully
2254 deterministic.
2255
2256 When exporting, the daemon digitally signs the contents of the archive,
2257 and that digital signature is appended. When importing, the daemon
2258 verifies the signature and rejects the import in case of an invalid
2259 signature or if the signing key is not authorized.
2260 @c FIXME: Add xref to daemon doc about signatures.
2261
2262 The main options are:
2263
2264 @table @code
2265 @item --export
2266 Export the specified store files or packages (see below.) Write the
2267 resulting archive to the standard output.
2268
2269 Dependencies are @emph{not} included in the output, unless
2270 @code{--recursive} is passed.
2271
2272 @item -r
2273 @itemx --recursive
2274 When combined with @code{--export}, this instructs @command{guix
2275 archive} to include dependencies of the given items in the archive.
2276 Thus, the resulting archive is self-contained: it contains the closure
2277 of the exported store items.
2278
2279 @item --import
2280 Read an archive from the standard input, and import the files listed
2281 therein into the store. Abort if the archive has an invalid digital
2282 signature, or if it is signed by a public key not among the authorized
2283 keys (see @code{--authorize} below.)
2284
2285 @item --missing
2286 Read a list of store file names from the standard input, one per line,
2287 and write on the standard output the subset of these files missing from
2288 the store.
2289
2290 @item --generate-key[=@var{parameters}]
2291 @cindex signing, archives
2292 Generate a new key pair for the daemon. This is a prerequisite before
2293 archives can be exported with @code{--export}. Note that this operation
2294 usually takes time, because it needs to gather enough entropy to
2295 generate the key pair.
2296
2297 The generated key pair is typically stored under @file{/etc/guix}, in
2298 @file{signing-key.pub} (public key) and @file{signing-key.sec} (private
2299 key, which must be kept secret.) When @var{parameters} is omitted,
2300 an ECDSA key using the Ed25519 curve is generated, or, for Libgcrypt
2301 versions before 1.6.0, it is a 4096-bit RSA key.
2302 Alternatively, @var{parameters} can specify
2303 @code{genkey} parameters suitable for Libgcrypt (@pxref{General
2304 public-key related Functions, @code{gcry_pk_genkey},, gcrypt, The
2305 Libgcrypt Reference Manual}).
2306
2307 @item --authorize
2308 @cindex authorizing, archives
2309 Authorize imports signed by the public key passed on standard input.
2310 The public key must be in ``s-expression advanced format''---i.e., the
2311 same format as the @file{signing-key.pub} file.
2312
2313 The list of authorized keys is kept in the human-editable file
2314 @file{/etc/guix/acl}. The file contains
2315 @url{http://people.csail.mit.edu/rivest/Sexp.txt, ``advanced-format
2316 s-expressions''} and is structured as an access-control list in the
2317 @url{http://theworld.com/~cme/spki.txt, Simple Public-Key Infrastructure
2318 (SPKI)}.
2319
2320 @item --extract=@var{directory}
2321 @itemx -x @var{directory}
2322 Read a single-item archive as served by substitute servers
2323 (@pxref{Substitutes}) and extract it to @var{directory}. This is a
2324 low-level operation needed in only very narrow use cases; see below.
2325
2326 For example, the following command extracts the substitute for Emacs
2327 served by @code{hydra.gnu.org} to @file{/tmp/emacs}:
2328
2329 @example
2330 $ wget -O - \
2331 https://hydra.gnu.org/nar/@dots{}-emacs-24.5 \
2332 | bunzip2 | guix archive -x /tmp/emacs
2333 @end example
2334
2335 Single-item archives are different from multiple-item archives produced
2336 by @command{guix archive --export}; they contain a single store item,
2337 and they do @emph{not} embed a signature. Thus this operation does
2338 @emph{no} signature verification and its output should be considered
2339 unsafe.
2340
2341 The primary purpose of this operation is to facilitate inspection of
2342 archive contents coming from possibly untrusted substitute servers.
2343
2344 @end table
2345
2346 @c *********************************************************************
2347 @include emacs.texi
2348
2349 @c *********************************************************************
2350 @node Programming Interface
2351 @chapter Programming Interface
2352
2353 GNU Guix provides several Scheme programming interfaces (APIs) to
2354 define, build, and query packages. The first interface allows users to
2355 write high-level package definitions. These definitions refer to
2356 familiar packaging concepts, such as the name and version of a package,
2357 its build system, and its dependencies. These definitions can then be
2358 turned into concrete build actions.
2359
2360 Build actions are performed by the Guix daemon, on behalf of users. In a
2361 standard setup, the daemon has write access to the store---the
2362 @file{/gnu/store} directory---whereas users do not. The recommended
2363 setup also has the daemon perform builds in chroots, under a specific
2364 build users, to minimize interference with the rest of the system.
2365
2366 @cindex derivation
2367 Lower-level APIs are available to interact with the daemon and the
2368 store. To instruct the daemon to perform a build action, users actually
2369 provide it with a @dfn{derivation}. A derivation is a low-level
2370 representation of the build actions to be taken, and the environment in
2371 which they should occur---derivations are to package definitions what
2372 assembly is to C programs. The term ``derivation'' comes from the fact
2373 that build results @emph{derive} from them.
2374
2375 This chapter describes all these APIs in turn, starting from high-level
2376 package definitions.
2377
2378 @menu
2379 * Defining Packages:: Defining new packages.
2380 * Build Systems:: Specifying how packages are built.
2381 * The Store:: Manipulating the package store.
2382 * Derivations:: Low-level interface to package derivations.
2383 * The Store Monad:: Purely functional interface to the store.
2384 * G-Expressions:: Manipulating build expressions.
2385 @end menu
2386
2387 @node Defining Packages
2388 @section Defining Packages
2389
2390 The high-level interface to package definitions is implemented in the
2391 @code{(guix packages)} and @code{(guix build-system)} modules. As an
2392 example, the package definition, or @dfn{recipe}, for the GNU Hello
2393 package looks like this:
2394
2395 @example
2396 (define-module (gnu packages hello)
2397 #:use-module (guix packages)
2398 #:use-module (guix download)
2399 #:use-module (guix build-system gnu)
2400 #:use-module (guix licenses)
2401 #:use-module (gnu packages gawk))
2402
2403 (define-public hello
2404 (package
2405 (name "hello")
2406 (version "2.10")
2407 (source (origin
2408 (method url-fetch)
2409 (uri (string-append "mirror://gnu/hello/hello-" version
2410 ".tar.gz"))
2411 (sha256
2412 (base32
2413 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
2414 (build-system gnu-build-system)
2415 (arguments '(#:configure-flags '("--enable-silent-rules")))
2416 (inputs `(("gawk" ,gawk)))
2417 (synopsis "Hello, GNU world: An example GNU package")
2418 (description "Guess what GNU Hello prints!")
2419 (home-page "http://www.gnu.org/software/hello/")
2420 (license gpl3+)))
2421 @end example
2422
2423 @noindent
2424 Without being a Scheme expert, the reader may have guessed the meaning
2425 of the various fields here. This expression binds the variable
2426 @code{hello} to a @code{<package>} object, which is essentially a record
2427 (@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}).
2428 This package object can be inspected using procedures found in the
2429 @code{(guix packages)} module; for instance, @code{(package-name hello)}
2430 returns---surprise!---@code{"hello"}.
2431
2432 With luck, you may be able to import part or all of the definition of
2433 the package you are interested in from another repository, using the
2434 @code{guix import} command (@pxref{Invoking guix import}).
2435
2436 In the example above, @var{hello} is defined in a module of its own,
2437 @code{(gnu packages hello)}. Technically, this is not strictly
2438 necessary, but it is convenient to do so: all the packages defined in
2439 modules under @code{(gnu packages @dots{})} are automatically known to
2440 the command-line tools (@pxref{Package Modules}).
2441
2442 There are a few points worth noting in the above package definition:
2443
2444 @itemize
2445 @item
2446 The @code{source} field of the package is an @code{<origin>} object
2447 (@pxref{origin Reference}, for the complete reference).
2448 Here, the @code{url-fetch} method from @code{(guix download)} is used,
2449 meaning that the source is a file to be downloaded over FTP or HTTP.
2450
2451 The @code{mirror://gnu} prefix instructs @code{url-fetch} to use one of
2452 the GNU mirrors defined in @code{(guix download)}.
2453
2454 The @code{sha256} field specifies the expected SHA256 hash of the file
2455 being downloaded. It is mandatory, and allows Guix to check the
2456 integrity of the file. The @code{(base32 @dots{})} form introduces the
2457 base32 representation of the hash. You can obtain this information with
2458 @code{guix download} (@pxref{Invoking guix download}) and @code{guix
2459 hash} (@pxref{Invoking guix hash}).
2460
2461 @cindex patches
2462 When needed, the @code{origin} form can also have a @code{patches} field
2463 listing patches to be applied, and a @code{snippet} field giving a
2464 Scheme expression to modify the source code.
2465
2466 @item
2467 @cindex GNU Build System
2468 The @code{build-system} field specifies the procedure to build the
2469 package (@pxref{Build Systems}). Here, @var{gnu-build-system}
2470 represents the familiar GNU Build System, where packages may be
2471 configured, built, and installed with the usual @code{./configure &&
2472 make && make check && make install} command sequence.
2473
2474 @item
2475 The @code{arguments} field specifies options for the build system
2476 (@pxref{Build Systems}). Here it is interpreted by
2477 @var{gnu-build-system} as a request run @file{configure} with the
2478 @code{--enable-silent-rules} flag.
2479
2480 @cindex quote
2481 @cindex quoting
2482 @findex '
2483 @findex quote
2484 What about these quote (@code{'}) characters? They are Scheme syntax to
2485 introduce a literal list; @code{'} is synonymous with @code{quote}.
2486 @xref{Expression Syntax, quoting,, guile, GNU Guile Reference Manual},
2487 for details. Here the value of the @code{arguments} field is a list of
2488 arguments passed to the build system down the road, as with @code{apply}
2489 (@pxref{Fly Evaluation, @code{apply},, guile, GNU Guile Reference
2490 Manual}).
2491
2492 The hash-colon (@code{#:}) sequence defines a Scheme @dfn{keyword}
2493 (@pxref{Keywords,,, guile, GNU Guile Reference Manual}), and
2494 @code{#:configure-flags} is a keyword used to pass a keyword argument
2495 to the build system (@pxref{Coding With Keywords,,, guile, GNU Guile
2496 Reference Manual}).
2497
2498 @item
2499 The @code{inputs} field specifies inputs to the build process---i.e.,
2500 build-time or run-time dependencies of the package. Here, we define an
2501 input called @code{"gawk"} whose value is that of the @var{gawk}
2502 variable; @var{gawk} is itself bound to a @code{<package>} object.
2503
2504 @cindex backquote (quasiquote)
2505 @findex `
2506 @findex quasiquote
2507 @cindex comma (unquote)
2508 @findex ,
2509 @findex unquote
2510 @findex ,@@
2511 @findex unquote-splicing
2512 Again, @code{`} (a backquote, synonymous with @code{quasiquote}) allows
2513 us to introduce a literal list in the @code{inputs} field, while
2514 @code{,} (a comma, synonymous with @code{unquote}) allows us to insert a
2515 value in that list (@pxref{Expression Syntax, unquote,, guile, GNU Guile
2516 Reference Manual}).
2517
2518 Note that GCC, Coreutils, Bash, and other essential tools do not need to
2519 be specified as inputs here. Instead, @var{gnu-build-system} takes care
2520 of ensuring that they are present (@pxref{Build Systems}).
2521
2522 However, any other dependencies need to be specified in the
2523 @code{inputs} field. Any dependency not specified here will simply be
2524 unavailable to the build process, possibly leading to a build failure.
2525 @end itemize
2526
2527 @xref{package Reference}, for a full description of possible fields.
2528
2529 Once a package definition is in place, the
2530 package may actually be built using the @code{guix build} command-line
2531 tool (@pxref{Invoking guix build}). You can easily jump back to the
2532 package definition using the @command{guix edit} command
2533 (@pxref{Invoking guix edit}).
2534 @xref{Packaging Guidelines}, for
2535 more information on how to test package definitions, and
2536 @ref{Invoking guix lint}, for information on how to check a definition
2537 for style conformance.
2538
2539 Finally, updating the package definition to a new upstream version
2540 can be partly automated by the @command{guix refresh} command
2541 (@pxref{Invoking guix refresh}).
2542
2543 Behind the scenes, a derivation corresponding to the @code{<package>}
2544 object is first computed by the @code{package-derivation} procedure.
2545 That derivation is stored in a @code{.drv} file under @file{/gnu/store}.
2546 The build actions it prescribes may then be realized by using the
2547 @code{build-derivations} procedure (@pxref{The Store}).
2548
2549 @deffn {Scheme Procedure} package-derivation @var{store} @var{package} [@var{system}]
2550 Return the @code{<derivation>} object of @var{package} for @var{system}
2551 (@pxref{Derivations}).
2552
2553 @var{package} must be a valid @code{<package>} object, and @var{system}
2554 must be a string denoting the target system type---e.g.,
2555 @code{"x86_64-linux"} for an x86_64 Linux-based GNU system. @var{store}
2556 must be a connection to the daemon, which operates on the store
2557 (@pxref{The Store}).
2558 @end deffn
2559
2560 @noindent
2561 @cindex cross-compilation
2562 Similarly, it is possible to compute a derivation that cross-builds a
2563 package for some other system:
2564
2565 @deffn {Scheme Procedure} package-cross-derivation @var{store} @
2566 @var{package} @var{target} [@var{system}]
2567 Return the @code{<derivation>} object of @var{package} cross-built from
2568 @var{system} to @var{target}.
2569
2570 @var{target} must be a valid GNU triplet denoting the target hardware
2571 and operating system, such as @code{"mips64el-linux-gnu"}
2572 (@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
2573 Configure and Build System}).
2574 @end deffn
2575
2576 @menu
2577 * package Reference :: The package data type.
2578 * origin Reference:: The origin data type.
2579 @end menu
2580
2581
2582 @node package Reference
2583 @subsection @code{package} Reference
2584
2585 This section summarizes all the options available in @code{package}
2586 declarations (@pxref{Defining Packages}).
2587
2588 @deftp {Data Type} package
2589 This is the data type representing a package recipe.
2590
2591 @table @asis
2592 @item @code{name}
2593 The name of the package, as a string.
2594
2595 @item @code{version}
2596 The version of the package, as a string.
2597
2598 @item @code{source}
2599 An object telling how the source code for the package should be
2600 acquired. Most of the time, this is an @code{origin} object, which
2601 denotes a file fetched from the Internet (@pxref{origin Reference}). It
2602 can also be any other ``file-like'' object such as a @code{local-file},
2603 which denotes a file from the local file system (@pxref{G-Expressions,
2604 @code{local-file}}).
2605
2606 @item @code{build-system}
2607 The build system that should be used to build the package (@pxref{Build
2608 Systems}).
2609
2610 @item @code{arguments} (default: @code{'()})
2611 The arguments that should be passed to the build system. This is a
2612 list, typically containing sequential keyword-value pairs.
2613
2614 @item @code{inputs} (default: @code{'()})
2615 @itemx @code{native-inputs} (default: @code{'()})
2616 @itemx @code{propagated-inputs} (default: @code{'()})
2617 @cindex inputs, of packages
2618 These fields list dependencies of the package. Each one is a list of
2619 tuples, where each tuple has a label for the input (a string) as its
2620 first element, a package, origin, or derivation as its second element,
2621 and optionally the name of the output thereof that should be used, which
2622 defaults to @code{"out"} (@pxref{Packages with Multiple Outputs}, for
2623 more on package outputs). For example, the list below specifies three
2624 inputs:
2625
2626 @example
2627 `(("libffi" ,libffi)
2628 ("libunistring" ,libunistring)
2629 ("glib:bin" ,glib "bin")) ;the "bin" output of Glib
2630 @end example
2631
2632 @cindex cross compilation, package dependencies
2633 The distinction between @code{native-inputs} and @code{inputs} is
2634 necessary when considering cross-compilation. When cross-compiling,
2635 dependencies listed in @code{inputs} are built for the @emph{target}
2636 architecture; conversely, dependencies listed in @code{native-inputs}
2637 are built for the architecture of the @emph{build} machine.
2638
2639 @code{native-inputs} is typically used to list tools needed at
2640 build time, but not at run time, such as Autoconf, Automake, pkg-config,
2641 Gettext, or Bison. @command{guix lint} can report likely mistakes in
2642 this area (@pxref{Invoking guix lint}).
2643
2644 @anchor{package-propagated-inputs}
2645 Lastly, @code{propagated-inputs} is similar to @code{inputs}, but the
2646 specified packages will be automatically installed alongside the package
2647 they belong to (@pxref{package-cmd-propagated-inputs, @command{guix
2648 package}}, for information on how @command{guix package} deals with
2649 propagated inputs.)
2650
2651 For example this is necessary when a C/C++ library needs headers of
2652 another library to compile, or when a pkg-config file refers to another
2653 one @i{via} its @code{Requires} field.
2654
2655 Another example where @code{propagated-inputs} is useful is for languages
2656 that lack a facility to record the run-time search path akin to the
2657 @code{RUNPATH} of ELF files; this includes Guile, Python, Perl, GHC, and
2658 more. To ensure that libraries written in those languages can find
2659 library code they depend on at run time, run-time dependencies must be
2660 listed in @code{propagated-inputs} rather than @code{inputs}.
2661
2662 @item @code{self-native-input?} (default: @code{#f})
2663 This is a Boolean field telling whether the package should use itself as
2664 a native input when cross-compiling.
2665
2666 @item @code{outputs} (default: @code{'("out")})
2667 The list of output names of the package. @xref{Packages with Multiple
2668 Outputs}, for typical uses of additional outputs.
2669
2670 @item @code{native-search-paths} (default: @code{'()})
2671 @itemx @code{search-paths} (default: @code{'()})
2672 A list of @code{search-path-specification} objects describing
2673 search-path environment variables honored by the package.
2674
2675 @item @code{replacement} (default: @code{#f})
2676 This must be either @code{#f} or a package object that will be used as a
2677 @dfn{replacement} for this package. @xref{Security Updates, grafts},
2678 for details.
2679
2680 @item @code{synopsis}
2681 A one-line description of the package.
2682
2683 @item @code{description}
2684 A more elaborate description of the package.
2685
2686 @item @code{license}
2687 The license of the package; a value from @code{(guix licenses)},
2688 or a list of such values.
2689
2690 @item @code{home-page}
2691 The URL to the home-page of the package, as a string.
2692
2693 @item @code{supported-systems} (default: @var{%supported-systems})
2694 The list of systems supported by the package, as strings of the form
2695 @code{architecture-kernel}, for example @code{"x86_64-linux"}.
2696
2697 @item @code{maintainers} (default: @code{'()})
2698 The list of maintainers of the package, as @code{maintainer} objects.
2699
2700 @item @code{location} (default: source location of the @code{package} form)
2701 The source location of the package. It is useful to override this when
2702 inheriting from another package, in which case this field is not
2703 automatically corrected.
2704 @end table
2705 @end deftp
2706
2707
2708 @node origin Reference
2709 @subsection @code{origin} Reference
2710
2711 This section summarizes all the options available in @code{origin}
2712 declarations (@pxref{Defining Packages}).
2713
2714 @deftp {Data Type} origin
2715 This is the data type representing a source code origin.
2716
2717 @table @asis
2718 @item @code{uri}
2719 An object containing the URI of the source. The object type depends on
2720 the @code{method} (see below). For example, when using the
2721 @var{url-fetch} method of @code{(guix download)}, the valid @code{uri}
2722 values are: a URL represented as a string, or a list thereof.
2723
2724 @item @code{method}
2725 A procedure that handles the URI.
2726
2727 Examples include:
2728
2729 @table @asis
2730 @item @var{url-fetch} from @code{(guix download)}
2731 download a file from the HTTP, HTTPS, or FTP URL specified in the
2732 @code{uri} field;
2733
2734 @vindex git-fetch
2735 @item @var{git-fetch} from @code{(guix git-download)}
2736 clone the Git version control repository, and check out the revision
2737 specified in the @code{uri} field as a @code{git-reference} object; a
2738 @code{git-reference} looks like this:
2739
2740 @example
2741 (git-reference
2742 (url "git://git.debian.org/git/pkg-shadow/shadow")
2743 (commit "v4.1.5.1"))
2744 @end example
2745 @end table
2746
2747 @item @code{sha256}
2748 A bytevector containing the SHA-256 hash of the source. Typically the
2749 @code{base32} form is used here to generate the bytevector from a
2750 base-32 string.
2751
2752 You can obtain this information using @code{guix download}
2753 (@pxref{Invoking guix download}) or @code{guix hash} (@pxref{Invoking
2754 guix hash}).
2755
2756 @item @code{file-name} (default: @code{#f})
2757 The file name under which the source code should be saved. When this is
2758 @code{#f}, a sensible default value will be used in most cases. In case
2759 the source is fetched from a URL, the file name from the URL will be
2760 used. For version control checkouts, it is recommended to provide the
2761 file name explicitly because the default is not very descriptive.
2762
2763 @item @code{patches} (default: @code{'()})
2764 A list of file names containing patches to be applied to the source.
2765
2766 @item @code{snippet} (default: @code{#f})
2767 A G-expression (@pxref{G-Expressions}) or S-expression that will be run
2768 in the source directory. This is a convenient way to modify the source,
2769 sometimes more convenient than a patch.
2770
2771 @item @code{patch-flags} (default: @code{'("-p1")})
2772 A list of command-line flags that should be passed to the @code{patch}
2773 command.
2774
2775 @item @code{patch-inputs} (default: @code{#f})
2776 Input packages or derivations to the patching process. When this is
2777 @code{#f}, the usual set of inputs necessary for patching are provided,
2778 such as GNU@tie{}Patch.
2779
2780 @item @code{modules} (default: @code{'()})
2781 A list of Guile modules that should be loaded during the patching
2782 process and while running the code in the @code{snippet} field.
2783
2784 @item @code{patch-guile} (default: @code{#f})
2785 The Guile package that should be used in the patching process. When
2786 this is @code{#f}, a sensible default is used.
2787 @end table
2788 @end deftp
2789
2790
2791 @node Build Systems
2792 @section Build Systems
2793
2794 @cindex build system
2795 Each package definition specifies a @dfn{build system} and arguments for
2796 that build system (@pxref{Defining Packages}). This @code{build-system}
2797 field represents the build procedure of the package, as well as implicit
2798 dependencies of that build procedure.
2799
2800 Build systems are @code{<build-system>} objects. The interface to
2801 create and manipulate them is provided by the @code{(guix build-system)}
2802 module, and actual build systems are exported by specific modules.
2803
2804 @cindex bag (low-level package representation)
2805 Under the hood, build systems first compile package objects to
2806 @dfn{bags}. A @dfn{bag} is like a package, but with less
2807 ornamentation---in other words, a bag is a lower-level representation of
2808 a package, which includes all the inputs of that package, including some
2809 that were implicitly added by the build system. This intermediate
2810 representation is then compiled to a derivation (@pxref{Derivations}).
2811
2812 Build systems accept an optional list of @dfn{arguments}. In package
2813 definitions, these are passed @i{via} the @code{arguments} field
2814 (@pxref{Defining Packages}). They are typically keyword arguments
2815 (@pxref{Optional Arguments, keyword arguments in Guile,, guile, GNU
2816 Guile Reference Manual}). The value of these arguments is usually
2817 evaluated in the @dfn{build stratum}---i.e., by a Guile process launched
2818 by the daemon (@pxref{Derivations}).
2819
2820 The main build system is @var{gnu-build-system}, which implements the
2821 standard build procedure for GNU and many other packages. It
2822 is provided by the @code{(guix build-system gnu)} module.
2823
2824 @defvr {Scheme Variable} gnu-build-system
2825 @var{gnu-build-system} represents the GNU Build System, and variants
2826 thereof (@pxref{Configuration, configuration and makefile conventions,,
2827 standards, GNU Coding Standards}).
2828
2829 @cindex build phases
2830 In a nutshell, packages using it are configured, built, and installed with
2831 the usual @code{./configure && make && make check && make install}
2832 command sequence. In practice, a few additional steps are often needed.
2833 All these steps are split up in separate @dfn{phases},
2834 notably@footnote{Please see the @code{(guix build gnu-build-system)}
2835 modules for more details about the build phases.}:
2836
2837 @table @code
2838 @item unpack
2839 Unpack the source tarball, and change the current directory to the
2840 extracted source tree. If the source is actually a directory, copy it
2841 to the build tree, and enter that directory.
2842
2843 @item patch-source-shebangs
2844 Patch shebangs encountered in source files so they refer to the right
2845 store file names. For instance, this changes @code{#!/bin/sh} to
2846 @code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
2847
2848 @item configure
2849 Run the @file{configure} script with a number of default options, such
2850 as @code{--prefix=/gnu/store/@dots{}}, as well as the options specified
2851 by the @code{#:configure-flags} argument.
2852
2853 @item build
2854 Run @code{make} with the list of flags specified with
2855 @code{#:make-flags}. If the @code{#:parallel-build?} argument is true
2856 (the default), build with @code{make -j}.
2857
2858 @item check
2859 Run @code{make check}, or some other target specified with
2860 @code{#:test-target}, unless @code{#:tests? #f} is passed. If the
2861 @code{#:parallel-tests?} argument is true (the default), run @code{make
2862 check -j}.
2863
2864 @item install
2865 Run @code{make install} with the flags listed in @code{#:make-flags}.
2866
2867 @item patch-shebangs
2868 Patch shebangs on the installed executable files.
2869
2870 @item strip
2871 Strip debugging symbols from ELF files (unless @code{#:strip-binaries?}
2872 is false), copying them to the @code{debug} output when available
2873 (@pxref{Installing Debugging Files}).
2874 @end table
2875
2876 @vindex %standard-phases
2877 The build-side module @code{(guix build gnu-build-system)} defines
2878 @var{%standard-phases} as the default list of build phases.
2879 @var{%standard-phases} is a list of symbol/procedure pairs, where the
2880 procedure implements the actual phase.
2881
2882 The list of phases used for a particular package can be changed with the
2883 @code{#:phases} parameter. For instance, passing:
2884
2885 @example
2886 #:phases (modify-phases %standard-phases (delete 'configure))
2887 @end example
2888
2889 means that all the phases described above will be used, except the
2890 @code{configure} phase.
2891
2892 In addition, this build system ensures that the ``standard'' environment
2893 for GNU packages is available. This includes tools such as GCC, libc,
2894 Coreutils, Bash, Make, Diffutils, grep, and sed (see the @code{(guix
2895 build-system gnu)} module for a complete list). We call these the
2896 @dfn{implicit inputs} of a package, because package definitions do not
2897 have to mention them.
2898 @end defvr
2899
2900 Other @code{<build-system>} objects are defined to support other
2901 conventions and tools used by free software packages. They inherit most
2902 of @var{gnu-build-system}, and differ mainly in the set of inputs
2903 implicitly added to the build process, and in the list of phases
2904 executed. Some of these build systems are listed below.
2905
2906 @defvr {Scheme Variable} ant-build-system
2907 This variable is exported by @code{(guix build-system ant)}. It
2908 implements the build procedure for Java packages that can be built with
2909 @url{http://ant.apache.org/, Ant build tool}.
2910
2911 It adds both @code{ant} and the @dfn{Java Development Kit} (JDK) as
2912 provided by the @code{icedtea} package to the set of inputs. Different
2913 packages can be specified with the @code{#:ant} and @code{#:jdk}
2914 parameters, respectively.
2915
2916 When the original package does not provide a suitable Ant build file,
2917 the parameter @code{#:jar-name} can be used to generate a minimal Ant
2918 build file @file{build.xml} with tasks to build the specified jar
2919 archive.
2920
2921 The parameter @code{#:build-target} can be used to specify the Ant task
2922 that should be run during the @code{build} phase. By default the
2923 ``jar'' task will be run.
2924
2925 @end defvr
2926
2927 @defvr {Scheme Variable} cmake-build-system
2928 This variable is exported by @code{(guix build-system cmake)}. It
2929 implements the build procedure for packages using the
2930 @url{http://www.cmake.org, CMake build tool}.
2931
2932 It automatically adds the @code{cmake} package to the set of inputs.
2933 Which package is used can be specified with the @code{#:cmake}
2934 parameter.
2935
2936 The @code{#:configure-flags} parameter is taken as a list of flags
2937 passed to the @command{cmake} command. The @code{#:build-type}
2938 parameter specifies in abstract terms the flags passed to the compiler;
2939 it defaults to @code{"RelWithDebInfo"} (short for ``release mode with
2940 debugging information''), which roughly means that code is compiled with
2941 @code{-O2 -g}, as is the case for Autoconf-based packages by default.
2942 @end defvr
2943
2944 @defvr {Scheme Variable} glib-or-gtk-build-system
2945 This variable is exported by @code{(guix build-system glib-or-gtk)}. It
2946 is intended for use with packages making use of GLib or GTK+.
2947
2948 This build system adds the following two phases to the ones defined by
2949 @var{gnu-build-system}:
2950
2951 @table @code
2952 @item glib-or-gtk-wrap
2953 The phase @code{glib-or-gtk-wrap} ensures that programs in
2954 @file{bin/} are able to find GLib ``schemas'' and
2955 @uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, GTK+
2956 modules}. This is achieved by wrapping the programs in launch scripts
2957 that appropriately set the @code{XDG_DATA_DIRS} and @code{GTK_PATH}
2958 environment variables.
2959
2960 It is possible to exclude specific package outputs from that wrapping
2961 process by listing their names in the
2962 @code{#:glib-or-gtk-wrap-excluded-outputs} parameter. This is useful
2963 when an output is known not to contain any GLib or GTK+ binaries, and
2964 where wrapping would gratuitously add a dependency of that output on
2965 GLib and GTK+.
2966
2967 @item glib-or-gtk-compile-schemas
2968 The phase @code{glib-or-gtk-compile-schemas} makes sure that all
2969 @uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
2970 GSettings schemas} of GLib are compiled. Compilation is performed by the
2971 @command{glib-compile-schemas} program. It is provided by the package
2972 @code{glib:bin} which is automatically imported by the build system.
2973 The @code{glib} package providing @command{glib-compile-schemas} can be
2974 specified with the @code{#:glib} parameter.
2975 @end table
2976
2977 Both phases are executed after the @code{install} phase.
2978 @end defvr
2979
2980 @defvr {Scheme Variable} python-build-system
2981 This variable is exported by @code{(guix build-system python)}. It
2982 implements the more or less standard build procedure used by Python
2983 packages, which consists in running @code{python setup.py build} and
2984 then @code{python setup.py install --prefix=/gnu/store/@dots{}}.
2985
2986 For packages that install stand-alone Python programs under @code{bin/},
2987 it takes care of wrapping these programs so that their @code{PYTHONPATH}
2988 environment variable points to all the Python libraries they depend on.
2989
2990 Which Python package is used to perform the build can be specified with
2991 the @code{#:python} parameter. This is a useful way to force a package
2992 to be built for a specific version of the Python interpreter, which
2993 might be necessary if the package is only compatible with a single
2994 interpreter version.
2995 @end defvr
2996
2997 @defvr {Scheme Variable} perl-build-system
2998 This variable is exported by @code{(guix build-system perl)}. It
2999 implements the standard build procedure for Perl packages, which either
3000 consists in running @code{perl Build.PL --prefix=/gnu/store/@dots{}},
3001 followed by @code{Build} and @code{Build install}; or in running
3002 @code{perl Makefile.PL PREFIX=/gnu/store/@dots{}}, followed by
3003 @code{make} and @code{make install}, depending on which of
3004 @code{Build.PL} or @code{Makefile.PL} is present in the package
3005 distribution. Preference is given to the former if both @code{Build.PL}
3006 and @code{Makefile.PL} exist in the package distribution. This
3007 preference can be reversed by specifying @code{#t} for the
3008 @code{#:make-maker?} parameter.
3009
3010 The initial @code{perl Makefile.PL} or @code{perl Build.PL} invocation
3011 passes flags specified by the @code{#:make-maker-flags} or
3012 @code{#:module-build-flags} parameter, respectively.
3013
3014 Which Perl package is used can be specified with @code{#:perl}.
3015 @end defvr
3016
3017 @defvr {Scheme Variable} r-build-system
3018 This variable is exported by @code{(guix build-system r)}. It
3019 implements the build procedure used by @uref{http://r-project.org, R}
3020 packages, which essentially is little more than running @code{R CMD
3021 INSTALL --library=/gnu/store/@dots{}} in an environment where
3022 @code{R_LIBS_SITE} contains the paths to all R package inputs. Tests
3023 are run after installation using the R function
3024 @code{tools::testInstalledPackage}.
3025 @end defvr
3026
3027 @defvr {Scheme Variable} ruby-build-system
3028 This variable is exported by @code{(guix build-system ruby)}. It
3029 implements the RubyGems build procedure used by Ruby packages, which
3030 involves running @code{gem build} followed by @code{gem install}.
3031
3032 The @code{source} field of a package that uses this build system
3033 typically references a gem archive, since this is the format that Ruby
3034 developers use when releasing their software. The build system unpacks
3035 the gem archive, potentially patches the source, runs the test suite,
3036 repackages the gem, and installs it. Additionally, directories and
3037 tarballs may be referenced to allow building unreleased gems from Git or
3038 a traditional source release tarball.
3039
3040 Which Ruby package is used can be specified with the @code{#:ruby}
3041 parameter. A list of additional flags to be passed to the @command{gem}
3042 command can be specified with the @code{#:gem-flags} parameter.
3043 @end defvr
3044
3045 @defvr {Scheme Variable} waf-build-system
3046 This variable is exported by @code{(guix build-system waf)}. It
3047 implements a build procedure around the @code{waf} script. The common
3048 phases---@code{configure}, @code{build}, and @code{install}---are
3049 implemented by passing their names as arguments to the @code{waf}
3050 script.
3051
3052 The @code{waf} script is executed by the Python interpreter. Which
3053 Python package is used to run the script can be specified with the
3054 @code{#:python} parameter.
3055 @end defvr
3056
3057 @defvr {Scheme Variable} haskell-build-system
3058 This variable is exported by @code{(guix build-system haskell)}. It
3059 implements the Cabal build procedure used by Haskell packages, which
3060 involves running @code{runhaskell Setup.hs configure
3061 --prefix=/gnu/store/@dots{}} and @code{runhaskell Setup.hs build}.
3062 Instead of installing the package by running @code{runhaskell Setup.hs
3063 install}, to avoid trying to register libraries in the read-only
3064 compiler store directory, the build system uses @code{runhaskell
3065 Setup.hs copy}, followed by @code{runhaskell Setup.hs register}. In
3066 addition, the build system generates the package documentation by
3067 running @code{runhaskell Setup.hs haddock}, unless @code{#:haddock? #f}
3068 is passed. Optional Haddock parameters can be passed with the help of
3069 the @code{#:haddock-flags} parameter. If the file @code{Setup.hs} is
3070 not found, the build system looks for @code{Setup.lhs} instead.
3071
3072 Which Haskell compiler is used can be specified with the @code{#:haskell}
3073 parameter which defaults to @code{ghc}.
3074 @end defvr
3075
3076 @defvr {Scheme Variable} emacs-build-system
3077 This variable is exported by @code{(guix build-system emacs)}. It
3078 implements an installation procedure similar to the packaging system
3079 of Emacs itself (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
3080
3081 It first creates the @code{@var{package}-autoloads.el} file, then it
3082 byte compiles all Emacs Lisp files. Differently from the Emacs
3083 packaging system, the Info documentation files are moved to the standard
3084 documentation directory and the @file{dir} file is deleted. Each
3085 package is installed in its own directory under
3086 @file{share/emacs/site-lisp/guix.d}.
3087 @end defvr
3088
3089 Lastly, for packages that do not need anything as sophisticated, a
3090 ``trivial'' build system is provided. It is trivial in the sense that
3091 it provides basically no support: it does not pull any implicit inputs,
3092 and does not have a notion of build phases.
3093
3094 @defvr {Scheme Variable} trivial-build-system
3095 This variable is exported by @code{(guix build-system trivial)}.
3096
3097 This build system requires a @code{#:builder} argument. This argument
3098 must be a Scheme expression that builds the package output(s)---as
3099 with @code{build-expression->derivation} (@pxref{Derivations,
3100 @code{build-expression->derivation}}).
3101 @end defvr
3102
3103 @node The Store
3104 @section The Store
3105
3106 @cindex store
3107 @cindex store items
3108 @cindex store paths
3109
3110 Conceptually, the @dfn{store} is the place where derivations that have
3111 been built successfully are stored---by default, @file{/gnu/store}.
3112 Sub-directories in the store are referred to as @dfn{store items} or
3113 sometimes @dfn{store paths}. The store has an associated database that
3114 contains information such as the store paths referred to by each store
3115 path, and the list of @emph{valid} store items---results of successful
3116 builds. This database resides in @file{@var{localstatedir}/guix/db},
3117 where @var{localstatedir} is the state directory specified @i{via}
3118 @option{--localstatedir} at configure time, usually @file{/var}.
3119
3120 The store is @emph{always} accessed by the daemon on behalf of its clients
3121 (@pxref{Invoking guix-daemon}). To manipulate the store, clients
3122 connect to the daemon over a Unix-domain socket, send requests to it,
3123 and read the result---these are remote procedure calls, or RPCs.
3124
3125 @quotation Note
3126 Users must @emph{never} modify files under @file{/gnu/store} directly.
3127 This would lead to inconsistencies and break the immutability
3128 assumptions of Guix's functional model (@pxref{Introduction}).
3129
3130 @xref{Invoking guix gc, @command{guix gc --verify}}, for information on
3131 how to check the integrity of the store and attempt recovery from
3132 accidental modifications.
3133 @end quotation
3134
3135 The @code{(guix store)} module provides procedures to connect to the
3136 daemon, and to perform RPCs. These are described below.
3137
3138 @deffn {Scheme Procedure} open-connection [@var{file}] [#:reserve-space? #t]
3139 Connect to the daemon over the Unix-domain socket at @var{file}. When
3140 @var{reserve-space?} is true, instruct it to reserve a little bit of
3141 extra space on the file system so that the garbage collector can still
3142 operate should the disk become full. Return a server object.
3143
3144 @var{file} defaults to @var{%default-socket-path}, which is the normal
3145 location given the options that were passed to @command{configure}.
3146 @end deffn
3147
3148 @deffn {Scheme Procedure} close-connection @var{server}
3149 Close the connection to @var{server}.
3150 @end deffn
3151
3152 @defvr {Scheme Variable} current-build-output-port
3153 This variable is bound to a SRFI-39 parameter, which refers to the port
3154 where build and error logs sent by the daemon should be written.
3155 @end defvr
3156
3157 Procedures that make RPCs all take a server object as their first
3158 argument.
3159
3160 @deffn {Scheme Procedure} valid-path? @var{server} @var{path}
3161 @cindex invalid store items
3162 Return @code{#t} when @var{path} designates a valid store item and
3163 @code{#f} otherwise (an invalid item may exist on disk but still be
3164 invalid, for instance because it is the result of an aborted or failed
3165 build.)
3166
3167 A @code{&nix-protocol-error} condition is raised if @var{path} is not
3168 prefixed by the store directory (@file{/gnu/store}).
3169 @end deffn
3170
3171 @deffn {Scheme Procedure} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
3172 Add @var{text} under file @var{name} in the store, and return its store
3173 path. @var{references} is the list of store paths referred to by the
3174 resulting store path.
3175 @end deffn
3176
3177 @deffn {Scheme Procedure} build-derivations @var{server} @var{derivations}
3178 Build @var{derivations} (a list of @code{<derivation>} objects or
3179 derivation paths), and return when the worker is done building them.
3180 Return @code{#t} on success.
3181 @end deffn
3182
3183 Note that the @code{(guix monads)} module provides a monad as well as
3184 monadic versions of the above procedures, with the goal of making it
3185 more convenient to work with code that accesses the store (@pxref{The
3186 Store Monad}).
3187
3188 @c FIXME
3189 @i{This section is currently incomplete.}
3190
3191 @node Derivations
3192 @section Derivations
3193
3194 @cindex derivations
3195 Low-level build actions and the environment in which they are performed
3196 are represented by @dfn{derivations}. A derivation contains the
3197 following pieces of information:
3198
3199 @itemize
3200 @item
3201 The outputs of the derivation---derivations produce at least one file or
3202 directory in the store, but may produce more.
3203
3204 @item
3205 The inputs of the derivations, which may be other derivations or plain
3206 files in the store (patches, build scripts, etc.)
3207
3208 @item
3209 The system type targeted by the derivation---e.g., @code{x86_64-linux}.
3210
3211 @item
3212 The file name of a build script in the store, along with the arguments
3213 to be passed.
3214
3215 @item
3216 A list of environment variables to be defined.
3217
3218 @end itemize
3219
3220 @cindex derivation path
3221 Derivations allow clients of the daemon to communicate build actions to
3222 the store. They exist in two forms: as an in-memory representation,
3223 both on the client- and daemon-side, and as files in the store whose
3224 name end in @code{.drv}---these files are referred to as @dfn{derivation
3225 paths}. Derivations paths can be passed to the @code{build-derivations}
3226 procedure to perform the build actions they prescribe (@pxref{The
3227 Store}).
3228
3229 The @code{(guix derivations)} module provides a representation of
3230 derivations as Scheme objects, along with procedures to create and
3231 otherwise manipulate derivations. The lowest-level primitive to create
3232 a derivation is the @code{derivation} procedure:
3233
3234 @deffn {Scheme Procedure} derivation @var{store} @var{name} @var{builder} @
3235 @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
3236 [#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
3237 [#:system (%current-system)] [#:references-graphs #f] @
3238 [#:allowed-references #f] [#:disallowed-references #f] @
3239 [#:leaked-env-vars #f] [#:local-build? #f] @
3240 [#:substitutable? #t]
3241 Build a derivation with the given arguments, and return the resulting
3242 @code{<derivation>} object.
3243
3244 When @var{hash} and @var{hash-algo} are given, a
3245 @dfn{fixed-output derivation} is created---i.e., one whose result is
3246 known in advance, such as a file download. If, in addition,
3247 @var{recursive?} is true, then that fixed output may be an executable
3248 file or a directory and @var{hash} must be the hash of an archive
3249 containing this output.
3250
3251 When @var{references-graphs} is true, it must be a list of file
3252 name/store path pairs. In that case, the reference graph of each store
3253 path is exported in the build environment in the corresponding file, in
3254 a simple text format.
3255
3256 When @var{allowed-references} is true, it must be a list of store items
3257 or outputs that the derivation's output may refer to. Likewise,
3258 @var{disallowed-references}, if true, must be a list of things the
3259 outputs may @emph{not} refer to.
3260
3261 When @var{leaked-env-vars} is true, it must be a list of strings
3262 denoting environment variables that are allowed to ``leak'' from the
3263 daemon's environment to the build environment. This is only applicable
3264 to fixed-output derivations---i.e., when @var{hash} is true. The main
3265 use is to allow variables such as @code{http_proxy} to be passed to
3266 derivations that download files.
3267
3268 When @var{local-build?} is true, declare that the derivation is not a
3269 good candidate for offloading and should rather be built locally
3270 (@pxref{Daemon Offload Setup}). This is the case for small derivations
3271 where the costs of data transfers would outweigh the benefits.
3272
3273 When @var{substitutable?} is false, declare that substitutes of the
3274 derivation's output should not be used (@pxref{Substitutes}). This is
3275 useful, for instance, when building packages that capture details of the
3276 host CPU instruction set.
3277 @end deffn
3278
3279 @noindent
3280 Here's an example with a shell script as its builder, assuming
3281 @var{store} is an open connection to the daemon, and @var{bash} points
3282 to a Bash executable in the store:
3283
3284 @lisp
3285 (use-modules (guix utils)
3286 (guix store)
3287 (guix derivations))
3288
3289 (let ((builder ; add the Bash script to the store
3290 (add-text-to-store store "my-builder.sh"
3291 "echo hello world > $out\n" '())))
3292 (derivation store "foo"
3293 bash `("-e" ,builder)
3294 #:inputs `((,bash) (,builder))
3295 #:env-vars '(("HOME" . "/homeless"))))
3296 @result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
3297 @end lisp
3298
3299 As can be guessed, this primitive is cumbersome to use directly. A
3300 better approach is to write build scripts in Scheme, of course! The
3301 best course of action for that is to write the build code as a
3302 ``G-expression'', and to pass it to @code{gexp->derivation}. For more
3303 information, @pxref{G-Expressions}.
3304
3305 Once upon a time, @code{gexp->derivation} did not exist and constructing
3306 derivations with build code written in Scheme was achieved with
3307 @code{build-expression->derivation}, documented below. This procedure
3308 is now deprecated in favor of the much nicer @code{gexp->derivation}.
3309
3310 @deffn {Scheme Procedure} build-expression->derivation @var{store} @
3311 @var{name} @var{exp} @
3312 [#:system (%current-system)] [#:inputs '()] @
3313 [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
3314 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
3315 [#:references-graphs #f] [#:allowed-references #f] @
3316 [#:disallowed-references #f] @
3317 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
3318 Return a derivation that executes Scheme expression @var{exp} as a
3319 builder for derivation @var{name}. @var{inputs} must be a list of
3320 @code{(name drv-path sub-drv)} tuples; when @var{sub-drv} is omitted,
3321 @code{"out"} is assumed. @var{modules} is a list of names of Guile
3322 modules from the current search path to be copied in the store,
3323 compiled, and made available in the load path during the execution of
3324 @var{exp}---e.g., @code{((guix build utils) (guix build
3325 gnu-build-system))}.
3326
3327 @var{exp} is evaluated in an environment where @code{%outputs} is bound
3328 to a list of output/path pairs, and where @code{%build-inputs} is bound
3329 to a list of string/output-path pairs made from @var{inputs}.
3330 Optionally, @var{env-vars} is a list of string pairs specifying the name
3331 and value of environment variables visible to the builder. The builder
3332 terminates by passing the result of @var{exp} to @code{exit}; thus, when
3333 @var{exp} returns @code{#f}, the build is considered to have failed.
3334
3335 @var{exp} is built using @var{guile-for-build} (a derivation). When
3336 @var{guile-for-build} is omitted or is @code{#f}, the value of the
3337 @code{%guile-for-build} fluid is used instead.
3338
3339 See the @code{derivation} procedure for the meaning of
3340 @var{references-graphs}, @var{allowed-references},
3341 @var{disallowed-references}, @var{local-build?}, and
3342 @var{substitutable?}.
3343 @end deffn
3344
3345 @noindent
3346 Here's an example of a single-output derivation that creates a directory
3347 containing one file:
3348
3349 @lisp
3350 (let ((builder '(let ((out (assoc-ref %outputs "out")))
3351 (mkdir out) ; create /gnu/store/@dots{}-goo
3352 (call-with-output-file (string-append out "/test")
3353 (lambda (p)
3354 (display '(hello guix) p))))))
3355 (build-expression->derivation store "goo" builder))
3356
3357 @result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
3358 @end lisp
3359
3360
3361 @node The Store Monad
3362 @section The Store Monad
3363
3364 @cindex monad
3365
3366 The procedures that operate on the store described in the previous
3367 sections all take an open connection to the build daemon as their first
3368 argument. Although the underlying model is functional, they either have
3369 side effects or depend on the current state of the store.
3370
3371 The former is inconvenient: the connection to the build daemon has to be
3372 carried around in all those functions, making it impossible to compose
3373 functions that do not take that parameter with functions that do. The
3374 latter can be problematic: since store operations have side effects
3375 and/or depend on external state, they have to be properly sequenced.
3376
3377 @cindex monadic values
3378 @cindex monadic functions
3379 This is where the @code{(guix monads)} module comes in. This module
3380 provides a framework for working with @dfn{monads}, and a particularly
3381 useful monad for our uses, the @dfn{store monad}. Monads are a
3382 construct that allows two things: associating ``context'' with values
3383 (in our case, the context is the store), and building sequences of
3384 computations (here computations include accesses to the store). Values
3385 in a monad---values that carry this additional context---are called
3386 @dfn{monadic values}; procedures that return such values are called
3387 @dfn{monadic procedures}.
3388
3389 Consider this ``normal'' procedure:
3390
3391 @example
3392 (define (sh-symlink store)
3393 ;; Return a derivation that symlinks the 'bash' executable.
3394 (let* ((drv (package-derivation store bash))
3395 (out (derivation->output-path drv))
3396 (sh (string-append out "/bin/bash")))
3397 (build-expression->derivation store "sh"
3398 `(symlink ,sh %output))))
3399 @end example
3400
3401 Using @code{(guix monads)} and @code{(guix gexp)}, it may be rewritten
3402 as a monadic function:
3403
3404 @example
3405 (define (sh-symlink)
3406 ;; Same, but return a monadic value.
3407 (mlet %store-monad ((drv (package->derivation bash)))
3408 (gexp->derivation "sh"
3409 #~(symlink (string-append #$drv "/bin/bash")
3410 #$output))))
3411 @end example
3412
3413 There are several things to note in the second version: the @code{store}
3414 parameter is now implicit and is ``threaded'' in the calls to the
3415 @code{package->derivation} and @code{gexp->derivation} monadic
3416 procedures, and the monadic value returned by @code{package->derivation}
3417 is @dfn{bound} using @code{mlet} instead of plain @code{let}.
3418
3419 As it turns out, the call to @code{package->derivation} can even be
3420 omitted since it will take place implicitly, as we will see later
3421 (@pxref{G-Expressions}):
3422
3423 @example
3424 (define (sh-symlink)
3425 (gexp->derivation "sh"
3426 #~(symlink (string-append #$bash "/bin/bash")
3427 #$output)))
3428 @end example
3429
3430 @c See
3431 @c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
3432 @c for the funny quote.
3433 Calling the monadic @code{sh-symlink} has no effect. As someone once
3434 said, ``you exit a monad like you exit a building on fire: by running''.
3435 So, to exit the monad and get the desired effect, one must use
3436 @code{run-with-store}:
3437
3438 @example
3439 (run-with-store (open-connection) (sh-symlink))
3440 @result{} /gnu/store/...-sh-symlink
3441 @end example
3442
3443 Note that the @code{(guix monad-repl)} module extends the Guile REPL with
3444 new ``meta-commands'' to make it easier to deal with monadic procedures:
3445 @code{run-in-store}, and @code{enter-store-monad}. The former is used
3446 to ``run'' a single monadic value through the store:
3447
3448 @example
3449 scheme@@(guile-user)> ,run-in-store (package->derivation hello)
3450 $1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
3451 @end example
3452
3453 The latter enters a recursive REPL, where all the return values are
3454 automatically run through the store:
3455
3456 @example
3457 scheme@@(guile-user)> ,enter-store-monad
3458 store-monad@@(guile-user) [1]> (package->derivation hello)
3459 $2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
3460 store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
3461 $3 = "/gnu/store/@dots{}-foo"
3462 store-monad@@(guile-user) [1]> ,q
3463 scheme@@(guile-user)>
3464 @end example
3465
3466 @noindent
3467 Note that non-monadic values cannot be returned in the
3468 @code{store-monad} REPL.
3469
3470 The main syntactic forms to deal with monads in general are provided by
3471 the @code{(guix monads)} module and are described below.
3472
3473 @deffn {Scheme Syntax} with-monad @var{monad} @var{body} ...
3474 Evaluate any @code{>>=} or @code{return} forms in @var{body} as being
3475 in @var{monad}.
3476 @end deffn
3477
3478 @deffn {Scheme Syntax} return @var{val}
3479 Return a monadic value that encapsulates @var{val}.
3480 @end deffn
3481
3482 @deffn {Scheme Syntax} >>= @var{mval} @var{mproc} ...
3483 @dfn{Bind} monadic value @var{mval}, passing its ``contents'' to monadic
3484 procedures @var{mproc}@dots{}@footnote{This operation is commonly
3485 referred to as ``bind'', but that name denotes an unrelated procedure in
3486 Guile. Thus we use this somewhat cryptic symbol inherited from the
3487 Haskell language.}. There can be one @var{mproc} or several of them, as
3488 in this example:
3489
3490 @example
3491 (run-with-state
3492 (with-monad %state-monad
3493 (>>= (return 1)
3494 (lambda (x) (return (+ 1 x)))
3495 (lambda (x) (return (* 2 x)))))
3496 'some-state)
3497
3498 @result{} 4
3499 @result{} some-state
3500 @end example
3501 @end deffn
3502
3503 @deffn {Scheme Syntax} mlet @var{monad} ((@var{var} @var{mval}) ...) @
3504 @var{body} ...
3505 @deffnx {Scheme Syntax} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
3506 @var{body} ...
3507 Bind the variables @var{var} to the monadic values @var{mval} in
3508 @var{body}. The form (@var{var} -> @var{val}) binds @var{var} to the
3509 ``normal'' value @var{val}, as per @code{let}.
3510
3511 @code{mlet*} is to @code{mlet} what @code{let*} is to @code{let}
3512 (@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
3513 @end deffn
3514
3515 @deffn {Scheme System} mbegin @var{monad} @var{mexp} ...
3516 Bind @var{mexp} and the following monadic expressions in sequence,
3517 returning the result of the last expression.
3518
3519 This is akin to @code{mlet}, except that the return values of the
3520 monadic expressions are ignored. In that sense, it is analogous to
3521 @code{begin}, but applied to monadic expressions.
3522 @end deffn
3523
3524 @cindex state monad
3525 The @code{(guix monads)} module provides the @dfn{state monad}, which
3526 allows an additional value---the state---to be @emph{threaded} through
3527 monadic procedure calls.
3528
3529 @defvr {Scheme Variable} %state-monad
3530 The state monad. Procedures in the state monad can access and change
3531 the state that is threaded.
3532
3533 Consider the example below. The @code{square} procedure returns a value
3534 in the state monad. It returns the square of its argument, but also
3535 increments the current state value:
3536
3537 @example
3538 (define (square x)
3539 (mlet %state-monad ((count (current-state)))
3540 (mbegin %state-monad
3541 (set-current-state (+ 1 count))
3542 (return (* x x)))))
3543
3544 (run-with-state (sequence %state-monad (map square (iota 3))) 0)
3545 @result{} (0 1 4)
3546 @result{} 3
3547 @end example
3548
3549 When ``run'' through @var{%state-monad}, we obtain that additional state
3550 value, which is the number of @code{square} calls.
3551 @end defvr
3552
3553 @deffn {Monadic Procedure} current-state
3554 Return the current state as a monadic value.
3555 @end deffn
3556
3557 @deffn {Monadic Procedure} set-current-state @var{value}
3558 Set the current state to @var{value} and return the previous state as a
3559 monadic value.
3560 @end deffn
3561
3562 @deffn {Monadic Procedure} state-push @var{value}
3563 Push @var{value} to the current state, which is assumed to be a list,
3564 and return the previous state as a monadic value.
3565 @end deffn
3566
3567 @deffn {Monadic Procedure} state-pop
3568 Pop a value from the current state and return it as a monadic value.
3569 The state is assumed to be a list.
3570 @end deffn
3571
3572 @deffn {Scheme Procedure} run-with-state @var{mval} [@var{state}]
3573 Run monadic value @var{mval} starting with @var{state} as the initial
3574 state. Return two values: the resulting value, and the resulting state.
3575 @end deffn
3576
3577 The main interface to the store monad, provided by the @code{(guix
3578 store)} module, is as follows.
3579
3580 @defvr {Scheme Variable} %store-monad
3581 The store monad---an alias for @var{%state-monad}.
3582
3583 Values in the store monad encapsulate accesses to the store. When its
3584 effect is needed, a value of the store monad must be ``evaluated'' by
3585 passing it to the @code{run-with-store} procedure (see below.)
3586 @end defvr
3587
3588 @deffn {Scheme Procedure} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
3589 Run @var{mval}, a monadic value in the store monad, in @var{store}, an
3590 open store connection.
3591 @end deffn
3592
3593 @deffn {Monadic Procedure} text-file @var{name} @var{text} [@var{references}]
3594 Return as a monadic value the absolute file name in the store of the file
3595 containing @var{text}, a string. @var{references} is a list of store items that the
3596 resulting text file refers to; it defaults to the empty list.
3597 @end deffn
3598
3599 @deffn {Monadic Procedure} interned-file @var{file} [@var{name}] @
3600 [#:recursive? #t] [#:select? (const #t)]
3601 Return the name of @var{file} once interned in the store. Use
3602 @var{name} as its store name, or the basename of @var{file} if
3603 @var{name} is omitted.
3604
3605 When @var{recursive?} is true, the contents of @var{file} are added
3606 recursively; if @var{file} designates a flat file and @var{recursive?}
3607 is true, its contents are added, and its permission bits are kept.
3608
3609 When @var{recursive?} is true, call @code{(@var{select?} @var{file}
3610 @var{stat})} for each directory entry, where @var{file} is the entry's
3611 absolute file name and @var{stat} is the result of @code{lstat}; exclude
3612 entries for which @var{select?} does not return true.
3613
3614 The example below adds a file to the store, under two different names:
3615
3616 @example
3617 (run-with-store (open-connection)
3618 (mlet %store-monad ((a (interned-file "README"))
3619 (b (interned-file "README" "LEGU-MIN")))
3620 (return (list a b))))
3621
3622 @result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
3623 @end example
3624
3625 @end deffn
3626
3627 The @code{(guix packages)} module exports the following package-related
3628 monadic procedures:
3629
3630 @deffn {Monadic Procedure} package-file @var{package} [@var{file}] @
3631 [#:system (%current-system)] [#:target #f] @
3632 [#:output "out"]
3633 Return as a monadic
3634 value in the absolute file name of @var{file} within the @var{output}
3635 directory of @var{package}. When @var{file} is omitted, return the name
3636 of the @var{output} directory of @var{package}. When @var{target} is
3637 true, use it as a cross-compilation target triplet.
3638 @end deffn
3639
3640 @deffn {Monadic Procedure} package->derivation @var{package} [@var{system}]
3641 @deffnx {Monadic Procedure} package->cross-derivation @var{package} @
3642 @var{target} [@var{system}]
3643 Monadic version of @code{package-derivation} and
3644 @code{package-cross-derivation} (@pxref{Defining Packages}).
3645 @end deffn
3646
3647
3648 @node G-Expressions
3649 @section G-Expressions
3650
3651 @cindex G-expression
3652 @cindex build code quoting
3653 So we have ``derivations'', which represent a sequence of build actions
3654 to be performed to produce an item in the store (@pxref{Derivations}).
3655 These build actions are performed when asking the daemon to actually
3656 build the derivations; they are run by the daemon in a container
3657 (@pxref{Invoking guix-daemon}).
3658
3659 @cindex strata of code
3660 It should come as no surprise that we like to write these build actions
3661 in Scheme. When we do that, we end up with two @dfn{strata} of Scheme
3662 code@footnote{The term @dfn{stratum} in this context was coined by
3663 Manuel Serrano et al.@: in the context of their work on Hop. Oleg
3664 Kiselyov, who has written insightful
3665 @url{http://okmij.org/ftp/meta-programming/#meta-scheme, essays and code
3666 on this topic}, refers to this kind of code generation as
3667 @dfn{staging}.}: the ``host code''---code that defines packages, talks
3668 to the daemon, etc.---and the ``build code''---code that actually
3669 performs build actions, such as making directories, invoking
3670 @command{make}, etc.
3671
3672 To describe a derivation and its build actions, one typically needs to
3673 embed build code inside host code. It boils down to manipulating build
3674 code as data, and the homoiconicity of Scheme---code has a direct
3675 representation as data---comes in handy for that. But we need more than
3676 the normal @code{quasiquote} mechanism in Scheme to construct build
3677 expressions.
3678
3679 The @code{(guix gexp)} module implements @dfn{G-expressions}, a form of
3680 S-expressions adapted to build expressions. G-expressions, or
3681 @dfn{gexps}, consist essentially of three syntactic forms: @code{gexp},
3682 @code{ungexp}, and @code{ungexp-splicing} (or simply: @code{#~},
3683 @code{#$}, and @code{#$@@}), which are comparable to
3684 @code{quasiquote}, @code{unquote}, and @code{unquote-splicing},
3685 respectively (@pxref{Expression Syntax, @code{quasiquote},, guile,
3686 GNU Guile Reference Manual}). However, there are major differences:
3687
3688 @itemize
3689 @item
3690 Gexps are meant to be written to a file and run or manipulated by other
3691 processes.
3692
3693 @item
3694 When a high-level object such as a package or derivation is unquoted
3695 inside a gexp, the result is as if its output file name had been
3696 introduced.
3697
3698 @item
3699 Gexps carry information about the packages or derivations they refer to,
3700 and these dependencies are automatically added as inputs to the build
3701 processes that use them.
3702 @end itemize
3703
3704 @cindex lowering, of high-level objects in gexps
3705 This mechanism is not limited to package and derivation
3706 objects: @dfn{compilers} able to ``lower'' other high-level objects to
3707 derivations or files in the store can be defined,
3708 such that these objects can also be inserted
3709 into gexps. For example, a useful type of high-level objects that can be
3710 inserted in a gexp is ``file-like objects'', which make it easy to
3711 add files to the store and to refer to them in
3712 derivations and such (see @code{local-file} and @code{plain-file}
3713 below.)
3714
3715 To illustrate the idea, here is an example of a gexp:
3716
3717 @example
3718 (define build-exp
3719 #~(begin
3720 (mkdir #$output)
3721 (chdir #$output)
3722 (symlink (string-append #$coreutils "/bin/ls")
3723 "list-files")))
3724 @end example
3725
3726 This gexp can be passed to @code{gexp->derivation}; we obtain a
3727 derivation that builds a directory containing exactly one symlink to
3728 @file{/gnu/store/@dots{}-coreutils-8.22/bin/ls}:
3729
3730 @example
3731 (gexp->derivation "the-thing" build-exp)
3732 @end example
3733
3734 As one would expect, the @code{"/gnu/store/@dots{}-coreutils-8.22"} string is
3735 substituted to the reference to the @var{coreutils} package in the
3736 actual build code, and @var{coreutils} is automatically made an input to
3737 the derivation. Likewise, @code{#$output} (equivalent to @code{(ungexp
3738 output)}) is replaced by a string containing the directory name of the
3739 output of the derivation.
3740
3741 @cindex cross compilation
3742 In a cross-compilation context, it is useful to distinguish between
3743 references to the @emph{native} build of a package---that can run on the
3744 host---versus references to cross builds of a package. To that end, the
3745 @code{#+} plays the same role as @code{#$}, but is a reference to a
3746 native package build:
3747
3748 @example
3749 (gexp->derivation "vi"
3750 #~(begin
3751 (mkdir #$output)
3752 (system* (string-append #+coreutils "/bin/ln")
3753 "-s"
3754 (string-append #$emacs "/bin/emacs")
3755 (string-append #$output "/bin/vi")))
3756 #:target "mips64el-linux")
3757 @end example
3758
3759 @noindent
3760 In the example above, the native build of @var{coreutils} is used, so
3761 that @command{ln} can actually run on the host; but then the
3762 cross-compiled build of @var{emacs} is referenced.
3763
3764 @cindex imported modules, for gexps
3765 @findex with-imported-modules
3766 Another gexp feature is @dfn{imported modules}: sometimes you want to be
3767 able to use certain Guile modules from the ``host environment'' in the
3768 gexp, so those modules should be imported in the ``build environment''.
3769 The @code{with-imported-modules} form allows you to express that:
3770
3771 @example
3772 (let ((build (with-imported-modules '((guix build utils))
3773 #~(begin
3774 (use-modules (guix build utils))
3775 (mkdir-p (string-append #$output "/bin"))))))
3776 (gexp->derivation "empty-dir"
3777 #~(begin
3778 #$build
3779 (display "success!\n")
3780 #t)))
3781 @end example
3782
3783 @noindent
3784 In this example, the @code{(guix build utils)} module is automatically
3785 pulled into the isolated build environment of our gexp, such that
3786 @code{(use-modules (guix build utils))} works as expected.
3787
3788 The syntactic form to construct gexps is summarized below.
3789
3790 @deffn {Scheme Syntax} #~@var{exp}
3791 @deffnx {Scheme Syntax} (gexp @var{exp})
3792 Return a G-expression containing @var{exp}. @var{exp} may contain one
3793 or more of the following forms:
3794
3795 @table @code
3796 @item #$@var{obj}
3797 @itemx (ungexp @var{obj})
3798 Introduce a reference to @var{obj}. @var{obj} may have one of the
3799 supported types, for example a package or a
3800 derivation, in which case the @code{ungexp} form is replaced by its
3801 output file name---e.g., @code{"/gnu/store/@dots{}-coreutils-8.22}.
3802
3803 If @var{obj} is a list, it is traversed and references to supported
3804 objects are substituted similarly.
3805
3806 If @var{obj} is another gexp, its contents are inserted and its
3807 dependencies are added to those of the containing gexp.
3808
3809 If @var{obj} is another kind of object, it is inserted as is.
3810
3811 @item #$@var{obj}:@var{output}
3812 @itemx (ungexp @var{obj} @var{output})
3813 This is like the form above, but referring explicitly to the
3814 @var{output} of @var{obj}---this is useful when @var{obj} produces
3815 multiple outputs (@pxref{Packages with Multiple Outputs}).
3816
3817 @item #+@var{obj}
3818 @itemx #+@var{obj}:output
3819 @itemx (ungexp-native @var{obj})
3820 @itemx (ungexp-native @var{obj} @var{output})
3821 Same as @code{ungexp}, but produces a reference to the @emph{native}
3822 build of @var{obj} when used in a cross compilation context.
3823
3824 @item #$output[:@var{output}]
3825 @itemx (ungexp output [@var{output}])
3826 Insert a reference to derivation output @var{output}, or to the main
3827 output when @var{output} is omitted.
3828
3829 This only makes sense for gexps passed to @code{gexp->derivation}.
3830
3831 @item #$@@@var{lst}
3832 @itemx (ungexp-splicing @var{lst})
3833 Like the above, but splices the contents of @var{lst} inside the
3834 containing list.
3835
3836 @item #+@@@var{lst}
3837 @itemx (ungexp-native-splicing @var{lst})
3838 Like the above, but refers to native builds of the objects listed in
3839 @var{lst}.
3840
3841 @end table
3842
3843 G-expressions created by @code{gexp} or @code{#~} are run-time objects
3844 of the @code{gexp?} type (see below.)
3845 @end deffn
3846
3847 @deffn {Scheme Syntax} with-imported-modules @var{modules} @var{body}@dots{}
3848 Mark the gexps defined in @var{body}@dots{} as requiring @var{modules}
3849 in their execution environment. @var{modules} must be a list of Guile
3850 module names, such as @code{'((guix build utils) (guix build gremlin))}.
3851
3852 This form has @emph{lexical} scope: it has an effect on the gexps
3853 directly defined in @var{body}@dots{}, but not on those defined, say, in
3854 procedures called from @var{body}@dots{}.
3855 @end deffn
3856
3857 @deffn {Scheme Procedure} gexp? @var{obj}
3858 Return @code{#t} if @var{obj} is a G-expression.
3859 @end deffn
3860
3861 G-expressions are meant to be written to disk, either as code building
3862 some derivation, or as plain files in the store. The monadic procedures
3863 below allow you to do that (@pxref{The Store Monad}, for more
3864 information about monads.)
3865
3866 @deffn {Monadic Procedure} gexp->derivation @var{name} @var{exp} @
3867 [#:system (%current-system)] [#:target #f] [#:graft? #t] @
3868 [#:hash #f] [#:hash-algo #f] @
3869 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
3870 [#:module-path @var{%load-path}] @
3871 [#:references-graphs #f] [#:allowed-references #f] @
3872 [#:disallowed-references #f] @
3873 [#:leaked-env-vars #f] @
3874 [#:script-name (string-append @var{name} "-builder")] @
3875 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
3876 Return a derivation @var{name} that runs @var{exp} (a gexp) with
3877 @var{guile-for-build} (a derivation) on @var{system}; @var{exp} is
3878 stored in a file called @var{script-name}. When @var{target} is true,
3879 it is used as the cross-compilation target triplet for packages referred
3880 to by @var{exp}.
3881
3882 @var{modules} is deprecated in favor of @code{with-imported-modules}.
3883 Its meaning is to
3884 make @var{modules} available in the evaluation context of @var{exp};
3885 @var{modules} is a list of names of Guile modules searched in
3886 @var{module-path} to be copied in the store, compiled, and made available in
3887 the load path during the execution of @var{exp}---e.g., @code{((guix
3888 build utils) (guix build gnu-build-system))}.
3889
3890 @var{graft?} determines whether packages referred to by @var{exp} should be grafted when
3891 applicable.
3892
3893 When @var{references-graphs} is true, it must be a list of tuples of one of the
3894 following forms:
3895
3896 @example
3897 (@var{file-name} @var{package})
3898 (@var{file-name} @var{package} @var{output})
3899 (@var{file-name} @var{derivation})
3900 (@var{file-name} @var{derivation} @var{output})
3901 (@var{file-name} @var{store-item})
3902 @end example
3903
3904 The right-hand-side of each element of @var{references-graphs} is automatically made
3905 an input of the build process of @var{exp}. In the build environment, each
3906 @var{file-name} contains the reference graph of the corresponding item, in a simple
3907 text format.
3908
3909 @var{allowed-references} must be either @code{#f} or a list of output names and packages.
3910 In the latter case, the list denotes store items that the result is allowed to
3911 refer to. Any reference to another store item will lead to a build error.
3912 Similarly for @var{disallowed-references}, which can list items that must not be
3913 referenced by the outputs.
3914
3915 The other arguments are as for @code{derivation} (@pxref{Derivations}).
3916 @end deffn
3917
3918 @cindex file-like objects
3919 The @code{local-file}, @code{plain-file}, @code{computed-file},
3920 @code{program-file}, and @code{scheme-file} procedures below return
3921 @dfn{file-like objects}. That is, when unquoted in a G-expression,
3922 these objects lead to a file in the store. Consider this G-expression:
3923
3924 @example
3925 #~(system* (string-append #$glibc "/sbin/nscd") "-f"
3926 #$(local-file "/tmp/my-nscd.conf"))
3927 @end example
3928
3929 The effect here is to ``intern'' @file{/tmp/my-nscd.conf} by copying it
3930 to the store. Once expanded, for instance @i{via}
3931 @code{gexp->derivation}, the G-expression refers to that copy under
3932 @file{/gnu/store}; thus, modifying or removing the file in @file{/tmp}
3933 does not have any effect on what the G-expression does.
3934 @code{plain-file} can be used similarly; it differs in that the file
3935 content is directly passed as a string.
3936
3937 @deffn {Scheme Procedure} local-file @var{file} [@var{name}] @
3938 [#:recursive? #f] [#:select? (const #t)]
3939 Return an object representing local file @var{file} to add to the store; this
3940 object can be used in a gexp. If @var{file} is a relative file name, it is looked
3941 up relative to the source file where this form appears. @var{file} will be added to
3942 the store under @var{name}--by default the base name of @var{file}.
3943
3944 When @var{recursive?} is true, the contents of @var{file} are added recursively; if @var{file}
3945 designates a flat file and @var{recursive?} is true, its contents are added, and its
3946 permission bits are kept.
3947
3948 When @var{recursive?} is true, call @code{(@var{select?} @var{file}
3949 @var{stat})} for each directory entry, where @var{file} is the entry's
3950 absolute file name and @var{stat} is the result of @code{lstat}; exclude
3951 entries for which @var{select?} does not return true.
3952
3953 This is the declarative counterpart of the @code{interned-file} monadic
3954 procedure (@pxref{The Store Monad, @code{interned-file}}).
3955 @end deffn
3956
3957 @deffn {Scheme Procedure} plain-file @var{name} @var{content}
3958 Return an object representing a text file called @var{name} with the given
3959 @var{content} (a string) to be added to the store.
3960
3961 This is the declarative counterpart of @code{text-file}.
3962 @end deffn
3963
3964 @deffn {Scheme Procedure} computed-file @var{name} @var{gexp} @
3965 [#:options '(#:local-build? #t)]
3966 Return an object representing the store item @var{name}, a file or
3967 directory computed by @var{gexp}. @var{options}
3968 is a list of additional arguments to pass to @code{gexp->derivation}.
3969
3970 This is the declarative counterpart of @code{gexp->derivation}.
3971 @end deffn
3972
3973 @deffn {Monadic Procedure} gexp->script @var{name} @var{exp}
3974 Return an executable script @var{name} that runs @var{exp} using
3975 @var{guile}, with @var{exp}'s imported modules in its search path.
3976
3977 The example below builds a script that simply invokes the @command{ls}
3978 command:
3979
3980 @example
3981 (use-modules (guix gexp) (gnu packages base))
3982
3983 (gexp->script "list-files"
3984 #~(execl (string-append #$coreutils "/bin/ls")
3985 "ls"))
3986 @end example
3987
3988 When ``running'' it through the store (@pxref{The Store Monad,
3989 @code{run-with-store}}), we obtain a derivation that produces an
3990 executable file @file{/gnu/store/@dots{}-list-files} along these lines:
3991
3992 @example
3993 #!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
3994 !#
3995 (execl (string-append "/gnu/store/@dots{}-coreutils-8.22"/bin/ls")
3996 "ls")
3997 @end example
3998 @end deffn
3999
4000 @deffn {Scheme Procedure} program-file @var{name} @var{exp} @
4001 [#:guile #f]
4002 Return an object representing the executable store item @var{name} that
4003 runs @var{gexp}. @var{guile} is the Guile package used to execute that
4004 script.
4005
4006 This is the declarative counterpart of @code{gexp->script}.
4007 @end deffn
4008
4009 @deffn {Monadic Procedure} gexp->file @var{name} @var{exp} @
4010 [#:set-load-path? #t]
4011 Return a derivation that builds a file @var{name} containing @var{exp}.
4012 When @var{set-load-path?} is true, emit code in the resulting file to
4013 set @code{%load-path} and @code{%load-compiled-path} to honor
4014 @var{exp}'s imported modules.
4015
4016 The resulting file holds references to all the dependencies of @var{exp}
4017 or a subset thereof.
4018 @end deffn
4019
4020 @deffn {Scheme Procedure} scheme-file @var{name} @var{exp}
4021 Return an object representing the Scheme file @var{name} that contains
4022 @var{exp}.
4023
4024 This is the declarative counterpart of @code{gexp->file}.
4025 @end deffn
4026
4027 @deffn {Monadic Procedure} text-file* @var{name} @var{text} @dots{}
4028 Return as a monadic value a derivation that builds a text file
4029 containing all of @var{text}. @var{text} may list, in addition to
4030 strings, objects of any type that can be used in a gexp: packages,
4031 derivations, local file objects, etc. The resulting store file holds
4032 references to all these.
4033
4034 This variant should be preferred over @code{text-file} anytime the file
4035 to create will reference items from the store. This is typically the
4036 case when building a configuration file that embeds store file names,
4037 like this:
4038
4039 @example
4040 (define (profile.sh)
4041 ;; Return the name of a shell script in the store that
4042 ;; initializes the 'PATH' environment variable.
4043 (text-file* "profile.sh"
4044 "export PATH=" coreutils "/bin:"
4045 grep "/bin:" sed "/bin\n"))
4046 @end example
4047
4048 In this example, the resulting @file{/gnu/store/@dots{}-profile.sh} file
4049 will reference @var{coreutils}, @var{grep}, and @var{sed}, thereby
4050 preventing them from being garbage-collected during its lifetime.
4051 @end deffn
4052
4053 @deffn {Scheme Procedure} mixed-text-file @var{name} @var{text} @dots{}
4054 Return an object representing store file @var{name} containing
4055 @var{text}. @var{text} is a sequence of strings and file-like objects,
4056 as in:
4057
4058 @example
4059 (mixed-text-file "profile"
4060 "export PATH=" coreutils "/bin:" grep "/bin")
4061 @end example
4062
4063 This is the declarative counterpart of @code{text-file*}.
4064 @end deffn
4065
4066 Of course, in addition to gexps embedded in ``host'' code, there are
4067 also modules containing build tools. To make it clear that they are
4068 meant to be used in the build stratum, these modules are kept in the
4069 @code{(guix build @dots{})} name space.
4070
4071 @cindex lowering, of high-level objects in gexps
4072 Internally, high-level objects are @dfn{lowered}, using their compiler,
4073 to either derivations or store items. For instance, lowering a package
4074 yields a derivation, and lowering a @code{plain-file} yields a store
4075 item. This is achieved using the @code{lower-object} monadic procedure.
4076
4077 @deffn {Monadic Procedure} lower-object @var{obj} [@var{system}] @
4078 [#:target #f]
4079 Return as a value in @var{%store-monad} the derivation or store item
4080 corresponding to @var{obj} for @var{system}, cross-compiling for
4081 @var{target} if @var{target} is true. @var{obj} must be an object that
4082 has an associated gexp compiler, such as a @code{<package>}.
4083 @end deffn
4084
4085
4086 @c *********************************************************************
4087 @node Utilities
4088 @chapter Utilities
4089
4090 This section describes Guix command-line utilities. Some of them are
4091 primarily targeted at developers and users who write new package
4092 definitions, while others are more generally useful. They complement
4093 the Scheme programming interface of Guix in a convenient way.
4094
4095 @menu
4096 * Invoking guix build:: Building packages from the command line.
4097 * Invoking guix edit:: Editing package definitions.
4098 * Invoking guix download:: Downloading a file and printing its hash.
4099 * Invoking guix hash:: Computing the cryptographic hash of a file.
4100 * Invoking guix import:: Importing package definitions.
4101 * Invoking guix refresh:: Updating package definitions.
4102 * Invoking guix lint:: Finding errors in package definitions.
4103 * Invoking guix size:: Profiling disk usage.
4104 * Invoking guix graph:: Visualizing the graph of packages.
4105 * Invoking guix environment:: Setting up development environments.
4106 * Invoking guix publish:: Sharing substitutes.
4107 * Invoking guix challenge:: Challenging substitute servers.
4108 * Invoking guix container:: Process isolation.
4109 @end menu
4110
4111 @node Invoking guix build
4112 @section Invoking @command{guix build}
4113
4114 The @command{guix build} command builds packages or derivations and
4115 their dependencies, and prints the resulting store paths. Note that it
4116 does not modify the user's profile---this is the job of the
4117 @command{guix package} command (@pxref{Invoking guix package}). Thus,
4118 it is mainly useful for distribution developers.
4119
4120 The general syntax is:
4121
4122 @example
4123 guix build @var{options} @var{package-or-derivation}@dots{}
4124 @end example
4125
4126 As an example, the following command builds the latest versions of Emacs
4127 and of Guile, displays their build logs, and finally displays the
4128 resulting directories:
4129
4130 @example
4131 guix build emacs guile
4132 @end example
4133
4134 Similarly, the following command builds all the available packages:
4135
4136 @example
4137 guix build --quiet --keep-going \
4138 `guix package -A | cut -f1,2 --output-delimiter=@@`
4139 @end example
4140
4141 @var{package-or-derivation} may be either the name of a package found in
4142 the software distribution such as @code{coreutils} or
4143 @code{coreutils-8.20}, or a derivation such as
4144 @file{/gnu/store/@dots{}-coreutils-8.19.drv}. In the former case, a
4145 package with the corresponding name (and optionally version) is searched
4146 for among the GNU distribution modules (@pxref{Package Modules}).
4147
4148 Alternatively, the @code{--expression} option may be used to specify a
4149 Scheme expression that evaluates to a package; this is useful when
4150 disambiguating among several same-named packages or package variants is
4151 needed.
4152
4153 There may be zero or more @var{options}. The available options are
4154 described in the subsections below.
4155
4156 @menu
4157 * Common Build Options:: Build options for most commands.
4158 * Package Transformation Options:: Creating variants of packages.
4159 * Additional Build Options:: Options specific to 'guix build'.
4160 @end menu
4161
4162 @node Common Build Options
4163 @subsection Common Build Options
4164
4165 A number of options that control the build process are common to
4166 @command{guix build} and other commands that can spawn builds, such as
4167 @command{guix package} or @command{guix archive}. These are the
4168 following:
4169
4170 @table @code
4171
4172 @item --load-path=@var{directory}
4173 @itemx -L @var{directory}
4174 Add @var{directory} to the front of the package module search path
4175 (@pxref{Package Modules}).
4176
4177 This allows users to define their own packages and make them visible to
4178 the command-line tools.
4179
4180 @item --keep-failed
4181 @itemx -K
4182 Keep the build tree of failed builds. Thus, if a build fails, its build
4183 tree is kept under @file{/tmp}, in a directory whose name is shown at
4184 the end of the build log. This is useful when debugging build issues.
4185
4186 @item --keep-going
4187 @itemx -k
4188 Keep going when some of the derivations fail to build; return only once
4189 all the builds have either completed or failed.
4190
4191 The default behavior is to stop as soon as one of the specified
4192 derivations has failed.
4193
4194 @item --dry-run
4195 @itemx -n
4196 Do not build the derivations.
4197
4198 @item --fallback
4199 When substituting a pre-built binary fails, fall back to building
4200 packages locally.
4201
4202 @item --substitute-urls=@var{urls}
4203 @anchor{client-substitute-urls}
4204 Consider @var{urls} the whitespace-separated list of substitute source
4205 URLs, overriding the default list of URLs of @command{guix-daemon}
4206 (@pxref{daemon-substitute-urls,, @command{guix-daemon} URLs}).
4207
4208 This means that substitutes may be downloaded from @var{urls}, provided
4209 they are signed by a key authorized by the system administrator
4210 (@pxref{Substitutes}).
4211
4212 When @var{urls} is the empty string, substitutes are effectively
4213 disabled.
4214
4215 @item --no-substitutes
4216 Do not use substitutes for build products. That is, always build things
4217 locally instead of allowing downloads of pre-built binaries
4218 (@pxref{Substitutes}).
4219
4220 @item --no-grafts
4221 Do not ``graft'' packages. In practice, this means that package updates
4222 available as grafts are not applied. @xref{Security Updates}, for more
4223 information on grafts.
4224
4225 @item --rounds=@var{n}
4226 Build each derivation @var{n} times in a row, and raise an error if
4227 consecutive build results are not bit-for-bit identical.
4228
4229 This is a useful way to detect non-deterministic builds processes.
4230 Non-deterministic build processes are a problem because they make it
4231 practically impossible for users to @emph{verify} whether third-party
4232 binaries are genuine. @xref{Invoking guix challenge}, for more.
4233
4234 Note that, currently, the differing build results are not kept around,
4235 so you will have to manually investigate in case of an error---e.g., by
4236 stashing one of the build results with @code{guix archive --export}
4237 (@pxref{Invoking guix archive}), then rebuilding, and finally comparing
4238 the two results.
4239
4240 @item --no-build-hook
4241 Do not attempt to offload builds @i{via} the ``build hook'' of the daemon
4242 (@pxref{Daemon Offload Setup}). That is, always build things locally
4243 instead of offloading builds to remote machines.
4244
4245 @item --max-silent-time=@var{seconds}
4246 When the build or substitution process remains silent for more than
4247 @var{seconds}, terminate it and report a build failure.
4248
4249 @item --timeout=@var{seconds}
4250 Likewise, when the build or substitution process lasts for more than
4251 @var{seconds}, terminate it and report a build failure.
4252
4253 By default there is no timeout. This behavior can be restored with
4254 @code{--timeout=0}.
4255
4256 @item --verbosity=@var{level}
4257 Use the given verbosity level. @var{level} must be an integer between 0
4258 and 5; higher means more verbose output. Setting a level of 4 or more
4259 may be helpful when debugging setup issues with the build daemon.
4260
4261 @item --cores=@var{n}
4262 @itemx -c @var{n}
4263 Allow the use of up to @var{n} CPU cores for the build. The special
4264 value @code{0} means to use as many CPU cores as available.
4265
4266 @item --max-jobs=@var{n}
4267 @itemx -M @var{n}
4268 Allow at most @var{n} build jobs in parallel. @xref{Invoking
4269 guix-daemon, @code{--max-jobs}}, for details about this option and the
4270 equivalent @command{guix-daemon} option.
4271
4272 @end table
4273
4274 Behind the scenes, @command{guix build} is essentially an interface to
4275 the @code{package-derivation} procedure of the @code{(guix packages)}
4276 module, and to the @code{build-derivations} procedure of the @code{(guix
4277 derivations)} module.
4278
4279 In addition to options explicitly passed on the command line,
4280 @command{guix build} and other @command{guix} commands that support
4281 building honor the @code{GUIX_BUILD_OPTIONS} environment variable.
4282
4283 @defvr {Environment Variable} GUIX_BUILD_OPTIONS
4284 Users can define this variable to a list of command line options that
4285 will automatically be used by @command{guix build} and other
4286 @command{guix} commands that can perform builds, as in the example
4287 below:
4288
4289 @example
4290 $ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
4291 @end example
4292
4293 These options are parsed independently, and the result is appended to
4294 the parsed command-line options.
4295 @end defvr
4296
4297
4298 @node Package Transformation Options
4299 @subsection Package Transformation Options
4300
4301 @cindex package variants
4302 Another set of command-line options supported by @command{guix build}
4303 and also @command{guix package} are @dfn{package transformation
4304 options}. These are options that make it possible to define @dfn{package
4305 variants}---for instance, packages built from different source code.
4306 This is a convenient way to create customized packages on the fly
4307 without having to type in the definitions of package variants
4308 (@pxref{Defining Packages}).
4309
4310 @table @code
4311
4312 @item --with-source=@var{source}
4313 Use @var{source} as the source of the corresponding package.
4314 @var{source} must be a file name or a URL, as for @command{guix
4315 download} (@pxref{Invoking guix download}).
4316
4317 The ``corresponding package'' is taken to be the one specified on the
4318 command line the name of which matches the base of @var{source}---e.g.,
4319 if @var{source} is @code{/src/guile-2.0.10.tar.gz}, the corresponding
4320 package is @code{guile}. Likewise, the version string is inferred from
4321 @var{source}; in the previous example, it is @code{2.0.10}.
4322
4323 This option allows users to try out versions of packages other than the
4324 one provided by the distribution. The example below downloads
4325 @file{ed-1.7.tar.gz} from a GNU mirror and uses that as the source for
4326 the @code{ed} package:
4327
4328 @example
4329 guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
4330 @end example
4331
4332 As a developer, @code{--with-source} makes it easy to test release
4333 candidates:
4334
4335 @example
4336 guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
4337 @end example
4338
4339 @dots{} or to build from a checkout in a pristine environment:
4340
4341 @example
4342 $ git clone git://git.sv.gnu.org/guix.git
4343 $ guix build guix --with-source=./guix
4344 @end example
4345
4346 @item --with-input=@var{package}=@var{replacement}
4347 Replace dependency on @var{package} by a dependency on
4348 @var{replacement}. @var{package} must be a package name, and
4349 @var{replacement} must be a package specification such as @code{guile}
4350 or @code{guile@@1.8}.
4351
4352 For instance, the following command builds Guix, but replaces its
4353 dependency on the current stable version of Guile with a dependency on
4354 the development version of Guile, @code{guile-next}:
4355
4356 @example
4357 guix build --with-input=guile=guile-next guix
4358 @end example
4359
4360 This is a recursive, deep replacement. So in this example, both
4361 @code{guix} and its dependency @code{guile-json} (which also depends on
4362 @code{guile}) get rebuilt against @code{guile-next}.
4363
4364 However, implicit inputs are left unchanged.
4365 @end table
4366
4367 @node Additional Build Options
4368 @subsection Additional Build Options
4369
4370 The command-line options presented below are specific to @command{guix
4371 build}.
4372
4373 @table @code
4374
4375 @item --quiet
4376 @itemx -q
4377 Build quietly, without displaying the build log. Upon completion, the
4378 build log is kept in @file{/var} (or similar) and can always be
4379 retrieved using the @option{--log-file} option.
4380
4381 @item --file=@var{file}
4382 @itemx -f @var{file}
4383
4384 Build the package or derivation that the code within @var{file}
4385 evaluates to.
4386
4387 As an example, @var{file} might contain a package definition like this
4388 (@pxref{Defining Packages}):
4389
4390 @example
4391 @verbatiminclude package-hello.scm
4392 @end example
4393
4394 @item --expression=@var{expr}
4395 @itemx -e @var{expr}
4396 Build the package or derivation @var{expr} evaluates to.
4397
4398 For example, @var{expr} may be @code{(@@ (gnu packages guile)
4399 guile-1.8)}, which unambiguously designates this specific variant of
4400 version 1.8 of Guile.
4401
4402 Alternatively, @var{expr} may be a G-expression, in which case it is used
4403 as a build program passed to @code{gexp->derivation}
4404 (@pxref{G-Expressions}).
4405
4406 Lastly, @var{expr} may refer to a zero-argument monadic procedure
4407 (@pxref{The Store Monad}). The procedure must return a derivation as a
4408 monadic value, which is then passed through @code{run-with-store}.
4409
4410 @item --source
4411 @itemx -S
4412 Build the source derivations of the packages, rather than the packages
4413 themselves.
4414
4415 For instance, @code{guix build -S gcc} returns something like
4416 @file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, which is the GCC
4417 source tarball.
4418
4419 The returned source tarball is the result of applying any patches and
4420 code snippets specified in the package @code{origin} (@pxref{Defining
4421 Packages}).
4422
4423 @item --sources
4424 Fetch and return the source of @var{package-or-derivation} and all their
4425 dependencies, recursively. This is a handy way to obtain a local copy
4426 of all the source code needed to build @var{packages}, allowing you to
4427 eventually build them even without network access. It is an extension
4428 of the @code{--source} option and can accept one of the following
4429 optional argument values:
4430
4431 @table @code
4432 @item package
4433 This value causes the @code{--sources} option to behave in the same way
4434 as the @code{--source} option.
4435
4436 @item all
4437 Build the source derivations of all packages, including any source that
4438 might be listed as @code{inputs}. This is the default value.
4439
4440 @example
4441 $ guix build --sources tzdata
4442 The following derivations will be built:
4443 /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
4444 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
4445 @end example
4446
4447 @item transitive
4448 Build the source derivations of all packages, as well of all transitive
4449 inputs to the packages. This can be used e.g. to
4450 prefetch package source for later offline building.
4451
4452 @example
4453 $ guix build --sources=transitive tzdata
4454 The following derivations will be built:
4455 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
4456 /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
4457 /gnu/store/@dots{}-grep-2.21.tar.xz.drv
4458 /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
4459 /gnu/store/@dots{}-make-4.1.tar.xz.drv
4460 /gnu/store/@dots{}-bash-4.3.tar.xz.drv
4461 @dots{}
4462 @end example
4463
4464 @end table
4465
4466 @item --system=@var{system}
4467 @itemx -s @var{system}
4468 Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
4469 the system type of the build host.
4470
4471 An example use of this is on Linux-based systems, which can emulate
4472 different personalities. For instance, passing
4473 @code{--system=i686-linux} on an @code{x86_64-linux} system allows users
4474 to build packages in a complete 32-bit environment.
4475
4476 @item --target=@var{triplet}
4477 @cindex cross-compilation
4478 Cross-build for @var{triplet}, which must be a valid GNU triplet, such
4479 as @code{"mips64el-linux-gnu"} (@pxref{Configuration Names, GNU
4480 configuration triplets,, configure, GNU Configure and Build System}).
4481
4482 @anchor{build-check}
4483 @item --check
4484 @cindex determinism, checking
4485 @cindex reproducibility, checking
4486 Rebuild @var{package-or-derivation}, which are already available in the
4487 store, and raise an error if the build results are not bit-for-bit
4488 identical.
4489
4490 This mechanism allows you to check whether previously installed
4491 substitutes are genuine (@pxref{Substitutes}), or whether the build result
4492 of a package is deterministic. @xref{Invoking guix challenge}, for more
4493 background information and tools.
4494
4495 When used in conjunction with @option{--keep-failed}, the differing
4496 output is kept in the store, under @file{/gnu/store/@dots{}-check}.
4497 This makes it easy to look for differences between the two results.
4498
4499 @item --derivations
4500 @itemx -d
4501 Return the derivation paths, not the output paths, of the given
4502 packages.
4503
4504 @item --root=@var{file}
4505 @itemx -r @var{file}
4506 Make @var{file} a symlink to the result, and register it as a garbage
4507 collector root.
4508
4509 @item --log-file
4510 Return the build log file names or URLs for the given
4511 @var{package-or-derivation}, or raise an error if build logs are
4512 missing.
4513
4514 This works regardless of how packages or derivations are specified. For
4515 instance, the following invocations are equivalent:
4516
4517 @example
4518 guix build --log-file `guix build -d guile`
4519 guix build --log-file `guix build guile`
4520 guix build --log-file guile
4521 guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
4522 @end example
4523
4524 If a log is unavailable locally, and unless @code{--no-substitutes} is
4525 passed, the command looks for a corresponding log on one of the
4526 substitute servers (as specified with @code{--substitute-urls}.)
4527
4528 So for instance, imagine you want to see the build log of GDB on MIPS,
4529 but you are actually on an @code{x86_64} machine:
4530
4531 @example
4532 $ guix build --log-file gdb -s mips64el-linux
4533 https://hydra.gnu.org/log/@dots{}-gdb-7.10
4534 @end example
4535
4536 You can freely access a huge library of build logs!
4537 @end table
4538
4539
4540 @node Invoking guix edit
4541 @section Invoking @command{guix edit}
4542
4543 @cindex package definition, editing
4544 So many packages, so many source files! The @command{guix edit} command
4545 facilitates the life of users and packagers by pointing their editor at
4546 the source file containing the definition of the specified packages.
4547 For instance:
4548
4549 @example
4550 guix edit gcc@@4.9 vim
4551 @end example
4552
4553 @noindent
4554 launches the program specified in the @code{VISUAL} or in the
4555 @code{EDITOR} environment variable to view the recipe of GCC@tie{}4.9.3
4556 and that of Vim.
4557
4558 If you are using a Guix Git checkout (@pxref{Building from Git}), or
4559 have created your own packages on @code{GUIX_PACKAGE_PATH}
4560 (@pxref{Defining Packages}), you will be able to edit the package
4561 recipes. Otherwise, you will be able to examine the read-only recipes
4562 for packages currently in the store.
4563
4564 If you are using Emacs, note that the Emacs user interface provides the
4565 @kbd{M-x guix-edit} command and a similar functionality in the ``package
4566 info'' and ``package list'' buffers created by the @kbd{M-x
4567 guix-search-by-name} and similar commands (@pxref{Emacs Commands}).
4568
4569
4570 @node Invoking guix download
4571 @section Invoking @command{guix download}
4572
4573 When writing a package definition, developers typically need to download
4574 a source tarball, compute its SHA256 hash, and write that
4575 hash in the package definition (@pxref{Defining Packages}). The
4576 @command{guix download} tool helps with this task: it downloads a file
4577 from the given URI, adds it to the store, and prints both its file name
4578 in the store and its SHA256 hash.
4579
4580 The fact that the downloaded file is added to the store saves bandwidth:
4581 when the developer eventually tries to build the newly defined package
4582 with @command{guix build}, the source tarball will not have to be
4583 downloaded again because it is already in the store. It is also a
4584 convenient way to temporarily stash files, which may be deleted
4585 eventually (@pxref{Invoking guix gc}).
4586
4587 The @command{guix download} command supports the same URIs as used in
4588 package definitions. In particular, it supports @code{mirror://} URIs.
4589 @code{https} URIs (HTTP over TLS) are supported @emph{provided} the
4590 Guile bindings for GnuTLS are available in the user's environment; when
4591 they are not available, an error is raised. @xref{Guile Preparations,
4592 how to install the GnuTLS bindings for Guile,, gnutls-guile,
4593 GnuTLS-Guile}, for more information.
4594
4595 The following option is available:
4596
4597 @table @code
4598 @item --format=@var{fmt}
4599 @itemx -f @var{fmt}
4600 Write the hash in the format specified by @var{fmt}. For more
4601 information on the valid values for @var{fmt}, @pxref{Invoking guix hash}.
4602 @end table
4603
4604 @node Invoking guix hash
4605 @section Invoking @command{guix hash}
4606
4607 The @command{guix hash} command computes the SHA256 hash of a file.
4608 It is primarily a convenience tool for anyone contributing to the
4609 distribution: it computes the cryptographic hash of a file, which can be
4610 used in the definition of a package (@pxref{Defining Packages}).
4611
4612 The general syntax is:
4613
4614 @example
4615 guix hash @var{option} @var{file}
4616 @end example
4617
4618 @command{guix hash} has the following option:
4619
4620 @table @code
4621
4622 @item --format=@var{fmt}
4623 @itemx -f @var{fmt}
4624 Write the hash in the format specified by @var{fmt}.
4625
4626 Supported formats: @code{nix-base32}, @code{base32}, @code{base16}
4627 (@code{hex} and @code{hexadecimal} can be used as well).
4628
4629 If the @option{--format} option is not specified, @command{guix hash}
4630 will output the hash in @code{nix-base32}. This representation is used
4631 in the definitions of packages.
4632
4633 @item --recursive
4634 @itemx -r
4635 Compute the hash on @var{file} recursively.
4636
4637 In this case, the hash is computed on an archive containing @var{file},
4638 including its children if it is a directory. Some of the metadata of
4639 @var{file} is part of the archive; for instance, when @var{file} is a
4640 regular file, the hash is different depending on whether @var{file} is
4641 executable or not. Metadata such as time stamps has no impact on the
4642 hash (@pxref{Invoking guix archive}).
4643 @c FIXME: Replace xref above with xref to an ``Archive'' section when
4644 @c it exists.
4645
4646 @vindex git-fetch
4647 As an example, here is how you would compute the hash of a Git checkout,
4648 which is useful when using the @code{git-fetch} method (@pxref{origin
4649 Reference}):
4650
4651 @example
4652 $ git clone http://example.org/foo.git
4653 $ cd foo
4654 $ rm -rf .git
4655 $ guix hash -r .
4656 @end example
4657 @end table
4658
4659 @node Invoking guix import
4660 @section Invoking @command{guix import}
4661
4662 @cindex importing packages
4663 @cindex package import
4664 @cindex package conversion
4665 The @command{guix import} command is useful for people who would like to
4666 add a package to the distribution with as little work as
4667 possible---a legitimate demand. The command knows of a few
4668 repositories from which it can ``import'' package metadata. The result
4669 is a package definition, or a template thereof, in the format we know
4670 (@pxref{Defining Packages}).
4671
4672 The general syntax is:
4673
4674 @example
4675 guix import @var{importer} @var{options}@dots{}
4676 @end example
4677
4678 @var{importer} specifies the source from which to import package
4679 metadata, and @var{options} specifies a package identifier and other
4680 options specific to @var{importer}. Currently, the available
4681 ``importers'' are:
4682
4683 @table @code
4684 @item gnu
4685 Import metadata for the given GNU package. This provides a template
4686 for the latest version of that GNU package, including the hash of its
4687 source tarball, and its canonical synopsis and description.
4688
4689 Additional information such as the package dependencies and its
4690 license needs to be figured out manually.
4691
4692 For example, the following command returns a package definition for
4693 GNU@tie{}Hello:
4694
4695 @example
4696 guix import gnu hello
4697 @end example
4698
4699 Specific command-line options are:
4700
4701 @table @code
4702 @item --key-download=@var{policy}
4703 As for @code{guix refresh}, specify the policy to handle missing OpenPGP
4704 keys when verifying the package signature. @xref{Invoking guix
4705 refresh, @code{--key-download}}.
4706 @end table
4707
4708 @item pypi
4709 @cindex pypi
4710 Import metadata from the @uref{https://pypi.python.org/, Python Package
4711 Index}@footnote{This functionality requires Guile-JSON to be installed.
4712 @xref{Requirements}.}. Information is taken from the JSON-formatted
4713 description available at @code{pypi.python.org} and usually includes all
4714 the relevant information, including package dependencies. For maximum
4715 efficiency, it is recommended to install the @command{unzip} utility, so
4716 that the importer can unzip Python wheels and gather data from them.
4717
4718 The command below imports metadata for the @code{itsdangerous} Python
4719 package:
4720
4721 @example
4722 guix import pypi itsdangerous
4723 @end example
4724
4725 @item gem
4726 @cindex gem
4727 Import metadata from @uref{https://rubygems.org/,
4728 RubyGems}@footnote{This functionality requires Guile-JSON to be
4729 installed. @xref{Requirements}.}. Information is taken from the
4730 JSON-formatted description available at @code{rubygems.org} and includes
4731 most relevant information, including runtime dependencies. There are
4732 some caveats, however. The metadata doesn't distinguish between
4733 synopses and descriptions, so the same string is used for both fields.
4734 Additionally, the details of non-Ruby dependencies required to build
4735 native extensions is unavailable and left as an exercise to the
4736 packager.
4737
4738 The command below imports metadata for the @code{rails} Ruby package:
4739
4740 @example
4741 guix import gem rails
4742 @end example
4743
4744 @item cpan
4745 @cindex CPAN
4746 Import metadata from @uref{https://www.metacpan.org/, MetaCPAN}@footnote{This
4747 functionality requires Guile-JSON to be installed.
4748 @xref{Requirements}.}.
4749 Information is taken from the JSON-formatted metadata provided through
4750 @uref{https://api.metacpan.org/, MetaCPAN's API} and includes most
4751 relevant information, such as module dependencies. License information
4752 should be checked closely. If Perl is available in the store, then the
4753 @code{corelist} utility will be used to filter core modules out of the
4754 list of dependencies.
4755
4756 The command command below imports metadata for the @code{Acme::Boolean}
4757 Perl module:
4758
4759 @example
4760 guix import cpan Acme::Boolean
4761 @end example
4762
4763 @item cran
4764 @cindex CRAN
4765 @cindex Bioconductor
4766 Import metadata from @uref{http://cran.r-project.org/, CRAN}, the
4767 central repository for the @uref{http://r-project.org, GNU@tie{}R
4768 statistical and graphical environment}.
4769
4770 Information is extracted from the @code{DESCRIPTION} file of the package.
4771
4772 The command command below imports metadata for the @code{Cairo}
4773 R package:
4774
4775 @example
4776 guix import cran Cairo
4777 @end example
4778
4779 When @code{--archive=bioconductor} is added, metadata is imported from
4780 @uref{http://www.bioconductor.org/, Bioconductor}, a repository of R
4781 packages for for the analysis and comprehension of high-throughput
4782 genomic data in bioinformatics.
4783
4784 Information is extracted from the @code{DESCRIPTION} file of a package
4785 published on the web interface of the Bioconductor SVN repository.
4786
4787 The command below imports metadata for the @code{GenomicRanges}
4788 R package:
4789
4790 @example
4791 guix import cran --archive=bioconductor GenomicRanges
4792 @end example
4793
4794 @item nix
4795 Import metadata from a local copy of the source of the
4796 @uref{http://nixos.org/nixpkgs/, Nixpkgs distribution}@footnote{This
4797 relies on the @command{nix-instantiate} command of
4798 @uref{http://nixos.org/nix/, Nix}.}. Package definitions in Nixpkgs are
4799 typically written in a mixture of Nix-language and Bash code. This
4800 command only imports the high-level package structure that is written in
4801 the Nix language. It normally includes all the basic fields of a
4802 package definition.
4803
4804 When importing a GNU package, the synopsis and descriptions are replaced
4805 by their canonical upstream variant.
4806
4807 Usually, you will first need to do:
4808
4809 @example
4810 export NIX_REMOTE=daemon
4811 @end example
4812
4813 @noindent
4814 so that @command{nix-instantiate} does not try to open the Nix database.
4815
4816 As an example, the command below imports the package definition of
4817 LibreOffice (more precisely, it imports the definition of the package
4818 bound to the @code{libreoffice} top-level attribute):
4819
4820 @example
4821 guix import nix ~/path/to/nixpkgs libreoffice
4822 @end example
4823
4824 @item hackage
4825 @cindex hackage
4826 Import metadata from the Haskell community's central package archive
4827 @uref{https://hackage.haskell.org/, Hackage}. Information is taken from
4828 Cabal files and includes all the relevant information, including package
4829 dependencies.
4830
4831 Specific command-line options are:
4832
4833 @table @code
4834 @item --stdin
4835 @itemx -s
4836 Read a Cabal file from standard input.
4837 @item --no-test-dependencies
4838 @itemx -t
4839 Do not include dependencies required only by the test suites.
4840 @item --cabal-environment=@var{alist}
4841 @itemx -e @var{alist}
4842 @var{alist} is a Scheme alist defining the environment in which the
4843 Cabal conditionals are evaluated. The accepted keys are: @code{os},
4844 @code{arch}, @code{impl} and a string representing the name of a flag.
4845 The value associated with a flag has to be either the symbol
4846 @code{true} or @code{false}. The value associated with other keys
4847 has to conform to the Cabal file format definition. The default value
4848 associated with the keys @code{os}, @code{arch} and @code{impl} is
4849 @samp{linux}, @samp{x86_64} and @samp{ghc}, respectively.
4850 @end table
4851
4852 The command below imports metadata for the latest version of the
4853 @code{HTTP} Haskell package without including test dependencies and
4854 specifying the value of the flag @samp{network-uri} as @code{false}:
4855
4856 @example
4857 guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
4858 @end example
4859
4860 A specific package version may optionally be specified by following the
4861 package name by an at-sign and a version number as in the following example:
4862
4863 @example
4864 guix import hackage mtl@@2.1.3.1
4865 @end example
4866
4867 @item elpa
4868 @cindex elpa
4869 Import metadata from an Emacs Lisp Package Archive (ELPA) package
4870 repository (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
4871
4872 Specific command-line options are:
4873
4874 @table @code
4875 @item --archive=@var{repo}
4876 @itemx -a @var{repo}
4877 @var{repo} identifies the archive repository from which to retrieve the
4878 information. Currently the supported repositories and their identifiers
4879 are:
4880 @itemize -
4881 @item
4882 @uref{http://elpa.gnu.org/packages, GNU}, selected by the @code{gnu}
4883 identifier. This is the default.
4884
4885 @item
4886 @uref{http://stable.melpa.org/packages, MELPA-Stable}, selected by the
4887 @code{melpa-stable} identifier.
4888
4889 @item
4890 @uref{http://melpa.org/packages, MELPA}, selected by the @code{melpa}
4891 identifier.
4892 @end itemize
4893 @end table
4894 @end table
4895
4896 The structure of the @command{guix import} code is modular. It would be
4897 useful to have more importers for other package formats, and your help
4898 is welcome here (@pxref{Contributing}).
4899
4900 @node Invoking guix refresh
4901 @section Invoking @command{guix refresh}
4902
4903 The primary audience of the @command{guix refresh} command is developers
4904 of the GNU software distribution. By default, it reports any packages
4905 provided by the distribution that are outdated compared to the latest
4906 upstream version, like this:
4907
4908 @example
4909 $ guix refresh
4910 gnu/packages/gettext.scm:29:13: gettext would be upgraded from 0.18.1.1 to 0.18.2.1
4911 gnu/packages/glib.scm:77:12: glib would be upgraded from 2.34.3 to 2.37.0
4912 @end example
4913
4914 It does so by browsing the FTP directory of each package and determining
4915 the highest version number of the source tarballs therein. The command
4916 knows how to update specific types of packages: GNU packages, ELPA
4917 packages, etc.---see the documentation for @option{--type} below. The
4918 are many packages, though, for which it lacks a method to determine
4919 whether a new upstream release is available. However, the mechanism is
4920 extensible, so feel free to get in touch with us to add a new method!
4921
4922 When passed @code{--update}, it modifies distribution source files to
4923 update the version numbers and source tarball hashes of those package
4924 recipes (@pxref{Defining Packages}). This is achieved by downloading
4925 each package's latest source tarball and its associated OpenPGP
4926 signature, authenticating the downloaded tarball against its signature
4927 using @command{gpg}, and finally computing its hash. When the public
4928 key used to sign the tarball is missing from the user's keyring, an
4929 attempt is made to automatically retrieve it from a public key server;
4930 when this is successful, the key is added to the user's keyring; otherwise,
4931 @command{guix refresh} reports an error.
4932
4933 The following options are supported:
4934
4935 @table @code
4936
4937 @item --expression=@var{expr}
4938 @itemx -e @var{expr}
4939 Consider the package @var{expr} evaluates to.
4940
4941 This is useful to precisely refer to a package, as in this example:
4942
4943 @example
4944 guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
4945 @end example
4946
4947 This command lists the dependents of the ``final'' libc (essentially all
4948 the packages.)
4949
4950 @item --update
4951 @itemx -u
4952 Update distribution source files (package recipes) in place. This is
4953 usually run from a checkout of the Guix source tree (@pxref{Running
4954 Guix Before It Is Installed}):
4955
4956 @example
4957 $ ./pre-inst-env guix refresh -s non-core
4958 @end example
4959
4960 @xref{Defining Packages}, for more information on package definitions.
4961
4962 @item --select=[@var{subset}]
4963 @itemx -s @var{subset}
4964 Select all the packages in @var{subset}, one of @code{core} or
4965 @code{non-core}.
4966
4967 The @code{core} subset refers to all the packages at the core of the
4968 distribution---i.e., packages that are used to build ``everything
4969 else''. This includes GCC, libc, Binutils, Bash, etc. Usually,
4970 changing one of these packages in the distribution entails a rebuild of
4971 all the others. Thus, such updates are an inconvenience to users in
4972 terms of build time or bandwidth used to achieve the upgrade.
4973
4974 The @code{non-core} subset refers to the remaining packages. It is
4975 typically useful in cases where an update of the core packages would be
4976 inconvenient.
4977
4978 @item --type=@var{updater}
4979 @itemx -t @var{updater}
4980 Select only packages handled by @var{updater} (may be a comma-separated
4981 list of updaters). Currently, @var{updater} may be one of:
4982
4983 @table @code
4984 @item gnu
4985 the updater for GNU packages;
4986 @item gnome
4987 the updater for GNOME packages;
4988 @item xorg
4989 the updater for X.org packages;
4990 @item elpa
4991 the updater for @uref{http://elpa.gnu.org/, ELPA} packages;
4992 @item cran
4993 the updater for @uref{http://cran.r-project.org/, CRAN} packages;
4994 @item bioconductor
4995 the updater for @uref{http://www.bioconductor.org/, Bioconductor} R packages;
4996 @item pypi
4997 the updater for @uref{https://pypi.python.org, PyPI} packages.
4998 @item gem
4999 the updater for @uref{https://rubygems.org, RubyGems} packages.
5000 @item github
5001 the updater for @uref{https://github.com, GitHub} packages.
5002 @item hackage
5003 the updater for @uref{https://hackage.haskell.org, Hackage} packages.
5004 @end table
5005
5006 For instance, the following command only checks for updates of Emacs
5007 packages hosted at @code{elpa.gnu.org} and for updates of CRAN packages:
5008
5009 @example
5010 $ guix refresh --type=elpa,cran
5011 gnu/packages/statistics.scm:819:13: r-testthat would be upgraded from 0.10.0 to 0.11.0
5012 gnu/packages/emacs.scm:856:13: emacs-auctex would be upgraded from 11.88.6 to 11.88.9
5013 @end example
5014
5015 @end table
5016
5017 In addition, @command{guix refresh} can be passed one or more package
5018 names, as in this example:
5019
5020 @example
5021 $ ./pre-inst-env guix refresh -u emacs idutils gcc-4.8.4
5022 @end example
5023
5024 @noindent
5025 The command above specifically updates the @code{emacs} and
5026 @code{idutils} packages. The @code{--select} option would have no
5027 effect in this case.
5028
5029 When considering whether to upgrade a package, it is sometimes
5030 convenient to know which packages would be affected by the upgrade and
5031 should be checked for compatibility. For this the following option may
5032 be used when passing @command{guix refresh} one or more package names:
5033
5034 @table @code
5035
5036 @item --list-updaters
5037 @itemx -L
5038 List available updaters and exit (see @option{--type} above.)
5039
5040 @item --list-dependent
5041 @itemx -l
5042 List top-level dependent packages that would need to be rebuilt as a
5043 result of upgrading one or more packages.
5044
5045 @end table
5046
5047 Be aware that the @code{--list-dependent} option only
5048 @emph{approximates} the rebuilds that would be required as a result of
5049 an upgrade. More rebuilds might be required under some circumstances.
5050
5051 @example
5052 $ guix refresh --list-dependent flex
5053 Building the following 120 packages would ensure 213 dependent packages are rebuilt:
5054 hop-2.4.0 geiser-0.4 notmuch-0.18 mu-0.9.9.5 cflow-1.4 idutils-4.6 @dots{}
5055 @end example
5056
5057 The command above lists a set of packages that could be built to check
5058 for compatibility with an upgraded @code{flex} package.
5059
5060 The following options can be used to customize GnuPG operation:
5061
5062 @table @code
5063
5064 @item --gpg=@var{command}
5065 Use @var{command} as the GnuPG 2.x command. @var{command} is searched
5066 for in @code{$PATH}.
5067
5068 @item --key-download=@var{policy}
5069 Handle missing OpenPGP keys according to @var{policy}, which may be one
5070 of:
5071
5072 @table @code
5073 @item always
5074 Always download missing OpenPGP keys from the key server, and add them
5075 to the user's GnuPG keyring.
5076
5077 @item never
5078 Never try to download missing OpenPGP keys. Instead just bail out.
5079
5080 @item interactive
5081 When a package signed with an unknown OpenPGP key is encountered, ask
5082 the user whether to download it or not. This is the default behavior.
5083 @end table
5084
5085 @item --key-server=@var{host}
5086 Use @var{host} as the OpenPGP key server when importing a public key.
5087
5088 @end table
5089
5090 The @code{github} updater uses the
5091 @uref{https://developer.github.com/v3/, GitHub API} to query for new
5092 releases. When used repeatedly e.g. when refreshing all packages,
5093 GitHub will eventually refuse to answer any further API requests. By
5094 default 60 API requests per hour are allowed, and a full refresh on all
5095 GitHub packages in Guix requires more than this. Authentication with
5096 GitHub through the use of an API token alleviates these limits. To use
5097 an API token, set the environment variable @code{GUIX_GITHUB_TOKEN} to a
5098 token procured from @uref{https://github.com/settings/tokens} or
5099 otherwise.
5100
5101
5102 @node Invoking guix lint
5103 @section Invoking @command{guix lint}
5104 The @command{guix lint} command is meant to help package developers avoid
5105 common errors and use a consistent style. It runs a number of checks on
5106 a given set of packages in order to find common mistakes in their
5107 definitions. Available @dfn{checkers} include (see
5108 @code{--list-checkers} for a complete list):
5109
5110 @table @code
5111 @item synopsis
5112 @itemx description
5113 Validate certain typographical and stylistic rules about package
5114 descriptions and synopses.
5115
5116 @item inputs-should-be-native
5117 Identify inputs that should most likely be native inputs.
5118
5119 @item source
5120 @itemx home-page
5121 @itemx source-file-name
5122 Probe @code{home-page} and @code{source} URLs and report those that are
5123 invalid. Check that the source file name is meaningful, e.g. is not
5124 just a version number or ``git-checkout'', without a declared
5125 @code{file-name} (@pxref{origin Reference}).
5126
5127 @item cve
5128 @cindex security vulnerabilities
5129 @cindex CVE, Common Vulnerabilities and Exposures
5130 Report known vulnerabilities found in the Common Vulnerabilities and
5131 Exposures (CVE) databases of the current and past year
5132 @uref{https://nvd.nist.gov/download.cfm#CVE_FEED, published by the US
5133 NIST}.
5134
5135 To view information about a particular vulnerability, visit pages such as:
5136
5137 @itemize
5138 @item
5139 @indicateurl{https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-YYYY-ABCD}
5140 @item
5141 @indicateurl{https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-YYYY-ABCD}
5142 @end itemize
5143
5144 @noindent
5145 where @code{CVE-YYYY-ABCD} is the CVE identifier---e.g.,
5146 @code{CVE-2015-7554}.
5147
5148 Package developers can specify in package recipes the
5149 @uref{https://nvd.nist.gov/cpe.cfm,Common Platform Enumeration (CPE)}
5150 name and version of the package when they differ from the name that Guix
5151 uses, as in this example:
5152
5153 @example
5154 (package
5155 (name "grub")
5156 ;; @dots{}
5157 ;; CPE calls this package "grub2".
5158 (properties '((cpe-name . "grub2"))))
5159 @end example
5160
5161 @item formatting
5162 Warn about obvious source code formatting issues: trailing white space,
5163 use of tabulations, etc.
5164 @end table
5165
5166 The general syntax is:
5167
5168 @example
5169 guix lint @var{options} @var{package}@dots{}
5170 @end example
5171
5172 If no package is given on the command line, then all packages are checked.
5173 The @var{options} may be zero or more of the following:
5174
5175 @table @code
5176 @item --list-checkers
5177 @itemx -l
5178 List and describe all the available checkers that will be run on packages
5179 and exit.
5180
5181 @item --checkers
5182 @itemx -c
5183 Only enable the checkers specified in a comma-separated list using the
5184 names returned by @code{--list-checkers}.
5185
5186 @end table
5187
5188 @node Invoking guix size
5189 @section Invoking @command{guix size}
5190
5191 The @command{guix size} command helps package developers profile the
5192 disk usage of packages. It is easy to overlook the impact of an
5193 additional dependency added to a package, or the impact of using a
5194 single output for a package that could easily be split (@pxref{Packages
5195 with Multiple Outputs}). Such are the typical issues that
5196 @command{guix size} can highlight.
5197
5198 The command can be passed a package specification such as @code{gcc-4.8}
5199 or @code{guile:debug}, or a file name in the store. Consider this
5200 example:
5201
5202 @example
5203 $ guix size coreutils
5204 store item total self
5205 /gnu/store/@dots{}-coreutils-8.23 70.0 13.9 19.8%
5206 /gnu/store/@dots{}-gmp-6.0.0a 55.3 2.5 3.6%
5207 /gnu/store/@dots{}-acl-2.2.52 53.7 0.5 0.7%
5208 /gnu/store/@dots{}-attr-2.4.46 53.2 0.3 0.5%
5209 /gnu/store/@dots{}-gcc-4.8.4-lib 52.9 15.7 22.4%
5210 /gnu/store/@dots{}-glibc-2.21 37.2 37.2 53.1%
5211 @end example
5212
5213 @cindex closure
5214 The store items listed here constitute the @dfn{transitive closure} of
5215 Coreutils---i.e., Coreutils and all its dependencies, recursively---as
5216 would be returned by:
5217
5218 @example
5219 $ guix gc -R /gnu/store/@dots{}-coreutils-8.23
5220 @end example
5221
5222 Here the output shows three columns next to store items. The first column,
5223 labeled ``total'', shows the size in mebibytes (MiB) of the closure of
5224 the store item---that is, its own size plus the size of all its
5225 dependencies. The next column, labeled ``self'', shows the size of the
5226 item itself. The last column shows the ratio of the size of the item
5227 itself to the space occupied by all the items listed here.
5228
5229 In this example, we see that the closure of Coreutils weighs in at
5230 70@tie{}MiB, half of which is taken by libc. (That libc represents a
5231 large fraction of the closure is not a problem @i{per se} because it is
5232 always available on the system anyway.)
5233
5234 When the package passed to @command{guix size} is available in the
5235 store, @command{guix size} queries the daemon to determine its
5236 dependencies, and measures its size in the store, similar to @command{du
5237 -ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
5238 Coreutils}).
5239
5240 When the given package is @emph{not} in the store, @command{guix size}
5241 reports information based on the available substitutes
5242 (@pxref{Substitutes}). This makes it possible it to profile disk usage of
5243 store items that are not even on disk, only available remotely.
5244
5245 You can also specify several package names:
5246
5247 @example
5248 $ guix size coreutils grep sed bash
5249 store item total self
5250 /gnu/store/@dots{}-coreutils-8.24 77.8 13.8 13.4%
5251 /gnu/store/@dots{}-grep-2.22 73.1 0.8 0.8%
5252 /gnu/store/@dots{}-bash-4.3.42 72.3 4.7 4.6%
5253 /gnu/store/@dots{}-readline-6.3 67.6 1.2 1.2%
5254 @dots{}
5255 total: 102.3 MiB
5256 @end example
5257
5258 @noindent
5259 In this example we see that the combination of the four packages takes
5260 102.3@tie{}MiB in total, which is much less than the sum of each closure
5261 since they have a lot of dependencies in common.
5262
5263 The available options are:
5264
5265 @table @option
5266
5267 @item --substitute-urls=@var{urls}
5268 Use substitute information from @var{urls}.
5269 @xref{client-substitute-urls, the same option for @code{guix build}}.
5270
5271 @item --map-file=@var{file}
5272 Write a graphical map of disk usage in PNG format to @var{file}.
5273
5274 For the example above, the map looks like this:
5275
5276 @image{images/coreutils-size-map,5in,, map of Coreutils disk usage
5277 produced by @command{guix size}}
5278
5279 This option requires that
5280 @uref{http://wingolog.org/software/guile-charting/, Guile-Charting} be
5281 installed and visible in Guile's module search path. When that is not
5282 the case, @command{guix size} fails as it tries to load it.
5283
5284 @item --system=@var{system}
5285 @itemx -s @var{system}
5286 Consider packages for @var{system}---e.g., @code{x86_64-linux}.
5287
5288 @end table
5289
5290 @node Invoking guix graph
5291 @section Invoking @command{guix graph}
5292
5293 @cindex DAG
5294 Packages and their dependencies form a @dfn{graph}, specifically a
5295 directed acyclic graph (DAG). It can quickly become difficult to have a
5296 mental model of the package DAG, so the @command{guix graph} command
5297 provides a visual representation of the DAG. @command{guix graph}
5298 emits a DAG representation in the input format of
5299 @uref{http://www.graphviz.org/, Graphviz}, so its output can be passed
5300 directly to the @command{dot} command of Graphviz. The general
5301 syntax is:
5302
5303 @example
5304 guix graph @var{options} @var{package}@dots{}
5305 @end example
5306
5307 For example, the following command generates a PDF file representing the
5308 package DAG for the GNU@tie{}Core Utilities, showing its build-time
5309 dependencies:
5310
5311 @example
5312 guix graph coreutils | dot -Tpdf > dag.pdf
5313 @end example
5314
5315 The output looks like this:
5316
5317 @image{images/coreutils-graph,2in,,Dependency graph of the GNU Coreutils}
5318
5319 Nice little graph, no?
5320
5321 But there is more than one graph! The one above is concise: it is the
5322 graph of package objects, omitting implicit inputs such as GCC, libc,
5323 grep, etc. It is often useful to have such a concise graph, but
5324 sometimes one may want to see more details. @command{guix graph} supports
5325 several types of graphs, allowing you to choose the level of detail:
5326
5327 @table @code
5328 @item package
5329 This is the default type used in the example above. It shows the DAG of
5330 package objects, excluding implicit dependencies. It is concise, but
5331 filters out many details.
5332
5333 @item bag-emerged
5334 This is the package DAG, @emph{including} implicit inputs.
5335
5336 For instance, the following command:
5337
5338 @example
5339 guix graph --type=bag-emerged coreutils | dot -Tpdf > dag.pdf
5340 @end example
5341
5342 ... yields this bigger graph:
5343
5344 @image{images/coreutils-bag-graph,,5in,Detailed dependency graph of the GNU Coreutils}
5345
5346 At the bottom of the graph, we see all the implicit inputs of
5347 @var{gnu-build-system} (@pxref{Build Systems, @code{gnu-build-system}}).
5348
5349 Now, note that the dependencies of these implicit inputs---that is, the
5350 @dfn{bootstrap dependencies} (@pxref{Bootstrapping})---are not shown
5351 here, for conciseness.
5352
5353 @item bag
5354 Similar to @code{bag-emerged}, but this time including all the bootstrap
5355 dependencies.
5356
5357 @item bag-with-origins
5358 Similar to @code{bag}, but also showing origins and their dependencies.
5359
5360 @item derivations
5361 This is the most detailed representation: It shows the DAG of
5362 derivations (@pxref{Derivations}) and plain store items. Compared to
5363 the above representation, many additional nodes are visible, including
5364 build scripts, patches, Guile modules, etc.
5365
5366 For this type of graph, it is also possible to pass a @file{.drv} file
5367 name instead of a package name, as in:
5368
5369 @example
5370 guix graph -t derivation `guix system build -d my-config.scm`
5371 @end example
5372 @end table
5373
5374 All the types above correspond to @emph{build-time dependencies}. The
5375 following graph type represents the @emph{run-time dependencies}:
5376
5377 @table @code
5378 @item references
5379 This is the graph of @dfn{references} of a package output, as returned
5380 by @command{guix gc --references} (@pxref{Invoking guix gc}).
5381
5382 If the given package output is not available in the store, @command{guix
5383 graph} attempts to obtain dependency information from substitutes.
5384
5385 Here you can also pass a store file name instead of a package name. For
5386 example, the command below produces the reference graph of your profile
5387 (which can be big!):
5388
5389 @example
5390 guix graph -t references `readlink -f ~/.guix-profile`
5391 @end example
5392 @end table
5393
5394 The available options are the following:
5395
5396 @table @option
5397 @item --type=@var{type}
5398 @itemx -t @var{type}
5399 Produce a graph output of @var{type}, where @var{type} must be one of
5400 the values listed above.
5401
5402 @item --list-types
5403 List the supported graph types.
5404
5405 @item --expression=@var{expr}
5406 @itemx -e @var{expr}
5407 Consider the package @var{expr} evaluates to.
5408
5409 This is useful to precisely refer to a package, as in this example:
5410
5411 @example
5412 guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
5413 @end example
5414 @end table
5415
5416
5417 @node Invoking guix environment
5418 @section Invoking @command{guix environment}
5419
5420 @cindex reproducible build environments
5421 @cindex development environments
5422 The purpose of @command{guix environment} is to assist hackers in
5423 creating reproducible development environments without polluting their
5424 package profile. The @command{guix environment} tool takes one or more
5425 packages, builds all of their inputs, and creates a shell
5426 environment to use them.
5427
5428 The general syntax is:
5429
5430 @example
5431 guix environment @var{options} @var{package}@dots{}
5432 @end example
5433
5434 The following example spawns a new shell set up for the development of
5435 GNU@tie{}Guile:
5436
5437 @example
5438 guix environment guile
5439 @end example
5440
5441 If the needed dependencies are not built yet, @command{guix environment}
5442 automatically builds them. The environment of the new shell is an augmented
5443 version of the environment that @command{guix environment} was run in.
5444 It contains the necessary search paths for building the given package
5445 added to the existing environment variables. To create a ``pure''
5446 environment, in which the original environment variables have been unset,
5447 use the @code{--pure} option@footnote{Users sometimes wrongfully augment
5448 environment variables such as @code{PATH} in their @file{~/.bashrc}
5449 file. As a consequence, when @code{guix environment} launches it, Bash
5450 may read @file{~/.bashrc}, thereby introducing ``impurities'' in these
5451 environment variables. It is an error to define such environment
5452 variables in @file{.bashrc}; instead, they should be defined in
5453 @file{.bash_profile}, which is sourced only by log-in shells.
5454 @xref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}, for
5455 details on Bash start-up files.}.
5456
5457 @vindex GUIX_ENVIRONMENT
5458 @command{guix environment} defines the @code{GUIX_ENVIRONMENT}
5459 variable in the shell it spawns; its value is the file name of the
5460 profile of this environment. This allows users to, say, define a
5461 specific prompt for development environments in their @file{.bashrc}
5462 (@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}):
5463
5464 @example
5465 if [ -n "$GUIX_ENVIRONMENT" ]
5466 then
5467 export PS1="\u@@\h \w [dev]\$ "
5468 fi
5469 @end example
5470
5471 @noindent
5472 ... or to browse the profile:
5473
5474 @example
5475 $ ls "$GUIX_ENVIRONMENT/bin"
5476 @end example
5477
5478 Additionally, more than one package may be specified, in which case the
5479 union of the inputs for the given packages are used. For example, the
5480 command below spawns a shell where all of the dependencies of both Guile
5481 and Emacs are available:
5482
5483 @example
5484 guix environment guile emacs
5485 @end example
5486
5487 Sometimes an interactive shell session is not desired. An arbitrary
5488 command may be invoked by placing the @code{--} token to separate the
5489 command from the rest of the arguments:
5490
5491 @example
5492 guix environment guile -- make -j4
5493 @end example
5494
5495 In other situations, it is more convenient to specify the list of
5496 packages needed in the environment. For example, the following command
5497 runs @command{python} from an environment containing Python@tie{}2.7 and
5498 NumPy:
5499
5500 @example
5501 guix environment --ad-hoc python2-numpy python-2.7 -- python
5502 @end example
5503
5504 Furthermore, one might want the dependencies of a package and also some
5505 additional packages that are not build-time or runtime dependencies, but
5506 are useful when developing nonetheless. Because of this, the
5507 @code{--ad-hoc} flag is positional. Packages appearing before
5508 @code{--ad-hoc} are interpreted as packages whose dependencies will be
5509 added to the environment. Packages appearing after are interpreted as
5510 packages that will be added to the environment directly. For example,
5511 the following command creates a Guix development environment that
5512 additionally includes Git and strace:
5513
5514 @example
5515 guix environment guix --ad-hoc git strace
5516 @end example
5517
5518 Sometimes it is desirable to isolate the environment as much as
5519 possible, for maximal purity and reproducibility. In particular, when
5520 using Guix on a host distro that is not GuixSD, it is desirable to
5521 prevent access to @file{/usr/bin} and other system-wide resources from
5522 the development environment. For example, the following command spawns
5523 a Guile REPL in a ``container'' where only the store and the current
5524 working directory are mounted:
5525
5526 @example
5527 guix environment --ad-hoc --container guile -- guile
5528 @end example
5529
5530 @quotation Note
5531 The @code{--container} option requires Linux-libre 3.19 or newer.
5532 @end quotation
5533
5534 The available options are summarized below.
5535
5536 @table @code
5537 @item --expression=@var{expr}
5538 @itemx -e @var{expr}
5539 Create an environment for the package or list of packages that
5540 @var{expr} evaluates to.
5541
5542 For example, running:
5543
5544 @example
5545 guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
5546 @end example
5547
5548 starts a shell with the environment for this specific variant of the
5549 PETSc package.
5550
5551 Running:
5552
5553 @example
5554 guix environment --ad-hoc -e '(@@ (gnu) %base-packages)'
5555 @end example
5556
5557 starts a shell with all the GuixSD base packages available.
5558
5559 The above commands only the use default output of the given packages.
5560 To select other outputs, two element tuples can be specified:
5561
5562 @example
5563 guix environment --ad-hoc -e '(list (@ (gnu packages bash) bash) "include")'
5564 @end example
5565
5566 @item --load=@var{file}
5567 @itemx -l @var{file}
5568 Create an environment for the package or list of packages that the code
5569 within @var{file} evaluates to.
5570
5571 As an example, @var{file} might contain a definition like this
5572 (@pxref{Defining Packages}):
5573
5574 @example
5575 @verbatiminclude environment-gdb.scm
5576 @end example
5577
5578 @item --ad-hoc
5579 Include all specified packages in the resulting environment, as if an
5580 @i{ad hoc} package were defined with them as inputs. This option is
5581 useful for quickly creating an environment without having to write a
5582 package expression to contain the desired inputs.
5583
5584 For instance, the command:
5585
5586 @example
5587 guix environment --ad-hoc guile guile-sdl -- guile
5588 @end example
5589
5590 runs @command{guile} in an environment where Guile and Guile-SDL are
5591 available.
5592
5593 Note that this example implicitly asks for the default output of
5594 @code{guile} and @code{guile-sdl}, but it is possible to ask for a
5595 specific output---e.g., @code{glib:bin} asks for the @code{bin} output
5596 of @code{glib} (@pxref{Packages with Multiple Outputs}).
5597
5598 This option may be composed with the default behavior of @command{guix
5599 environment}. Packages appearing before @code{--ad-hoc} are interpreted
5600 as packages whose dependencies will be added to the environment, the
5601 default behavior. Packages appearing after are interpreted as packages
5602 that will be added to the environment directly.
5603
5604 @item --pure
5605 Unset existing environment variables when building the new environment.
5606 This has the effect of creating an environment in which search paths
5607 only contain package inputs.
5608
5609 @item --search-paths
5610 Display the environment variable definitions that make up the
5611 environment.
5612
5613 @item --system=@var{system}
5614 @itemx -s @var{system}
5615 Attempt to build for @var{system}---e.g., @code{i686-linux}.
5616
5617 @item --container
5618 @itemx -C
5619 @cindex container
5620 Run @var{command} within an isolated container. The current working
5621 directory outside the container is mapped inside the container.
5622 Additionally, a dummy home directory is created that matches the current
5623 user's home directory, and @file{/etc/passwd} is configured accordingly.
5624 The spawned process runs as the current user outside the container, but
5625 has root privileges in the context of the container.
5626
5627 @item --network
5628 @itemx -N
5629 For containers, share the network namespace with the host system.
5630 Containers created without this flag only have access to the loopback
5631 device.
5632
5633 @item --expose=@var{source}[=@var{target}]
5634 For containers, expose the file system @var{source} from the host system
5635 as the read-only file system @var{target} within the container. If
5636 @var{target} is not specified, @var{source} is used as the target mount
5637 point in the container.
5638
5639 The example below spawns a Guile REPL in a container in which the user's
5640 home directory is accessible read-only via the @file{/exchange}
5641 directory:
5642
5643 @example
5644 guix environment --container --expose=$HOME=/exchange guile -- guile
5645 @end example
5646
5647 @item --share=@var{source}[=@var{target}]
5648 For containers, share the file system @var{source} from the host system
5649 as the writable file system @var{target} within the container. If
5650 @var{target} is not specified, @var{source} is used as the target mount
5651 point in the container.
5652
5653 The example below spawns a Guile REPL in a container in which the user's
5654 home directory is accessible for both reading and writing via the
5655 @file{/exchange} directory:
5656
5657 @example
5658 guix environment --container --share=$HOME=/exchange guile -- guile
5659 @end example
5660 @end table
5661
5662 It also supports all of the common build options that @command{guix
5663 build} supports (@pxref{Common Build Options}).
5664
5665 @node Invoking guix publish
5666 @section Invoking @command{guix publish}
5667
5668 The purpose of @command{guix publish} is to enable users to easily share
5669 their store with others, who can then use it as a substitute server
5670 (@pxref{Substitutes}).
5671
5672 When @command{guix publish} runs, it spawns an HTTP server which allows
5673 anyone with network access to obtain substitutes from it. This means
5674 that any machine running Guix can also act as if it were a build farm,
5675 since the HTTP interface is compatible with Hydra, the software behind
5676 the @code{hydra.gnu.org} build farm.
5677
5678 For security, each substitute is signed, allowing recipients to check
5679 their authenticity and integrity (@pxref{Substitutes}). Because
5680 @command{guix publish} uses the signing key of the system, which is only
5681 readable by the system administrator, it must be started as root; the
5682 @code{--user} option makes it drop root privileges early on.
5683
5684 The signing key pair must be generated before @command{guix publish} is
5685 launched, using @command{guix archive --generate-key} (@pxref{Invoking
5686 guix archive}).
5687
5688 The general syntax is:
5689
5690 @example
5691 guix publish @var{options}@dots{}
5692 @end example
5693
5694 Running @command{guix publish} without any additional arguments will
5695 spawn an HTTP server on port 8080:
5696
5697 @example
5698 guix publish
5699 @end example
5700
5701 Once a publishing server has been authorized (@pxref{Invoking guix
5702 archive}), the daemon may download substitutes from it:
5703
5704 @example
5705 guix-daemon --substitute-urls=http://example.org:8080
5706 @end example
5707
5708 As a bonus, @command{guix publish} also serves as a content-addressed
5709 mirror for source files referenced in @code{origin} records
5710 (@pxref{origin Reference}). For instance, assuming @command{guix
5711 publish} is running on @code{example.org}, the following URL returns the
5712 raw @file{hello-2.10.tar.gz} file with the given SHA256 hash
5713 (represented in @code{nix-base32} format, @pxref{Invoking guix hash}):
5714
5715 @example
5716 http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1@dots{}ndq1i
5717 @end example
5718
5719 Obviously, these URLs only work for files that are in the store; in
5720 other cases, they return 404 (``Not Found'').
5721
5722 The following options are available:
5723
5724 @table @code
5725 @item --port=@var{port}
5726 @itemx -p @var{port}
5727 Listen for HTTP requests on @var{port}.
5728
5729 @item --listen=@var{host}
5730 Listen on the network interface for @var{host}. The default is to
5731 accept connections from any interface.
5732
5733 @item --user=@var{user}
5734 @itemx -u @var{user}
5735 Change privileges to @var{user} as soon as possible---i.e., once the
5736 server socket is open and the signing key has been read.
5737
5738 @item --compression[=@var{level}]
5739 @itemx -C [@var{level}]
5740 Compress data using the given @var{level}. When @var{level} is zero,
5741 disable compression. The range 1 to 9 corresponds to different gzip
5742 compression levels: 1 is the fastest, and 9 is the best (CPU-intensive).
5743 The default is 3.
5744
5745 Compression occurs on the fly and the compressed streams are not
5746 cached. Thus, to reduce load on the machine that runs @command{guix
5747 publish}, it may be a good idea to choose a low compression level, or to
5748 run @command{guix publish} behind a caching proxy.
5749
5750 @item --ttl=@var{ttl}
5751 Produce @code{Cache-Control} HTTP headers that advertise a time-to-live
5752 (TTL) of @var{ttl}. @var{ttl} must denote a duration: @code{5d} means 5
5753 days, @code{1m} means 1 month, and so on.
5754
5755 This allows the user's Guix to keep substitute information in cache for
5756 @var{ttl}. However, note that @code{guix publish} does not itself
5757 guarantee that the store items it provides will indeed remain available
5758 for as long as @var{ttl}.
5759
5760 @item --repl[=@var{port}]
5761 @itemx -r [@var{port}]
5762 Spawn a Guile REPL server (@pxref{REPL Servers,,, guile, GNU Guile
5763 Reference Manual}) on @var{port} (37146 by default). This is used
5764 primarily for debugging a running @command{guix publish} server.
5765 @end table
5766
5767 Enabling @command{guix publish} on a GuixSD system is a one-liner: just
5768 add a call to @code{guix-publish-service} in the @code{services} field
5769 of the @code{operating-system} declaration (@pxref{guix-publish-service,
5770 @code{guix-publish-service}}).
5771
5772
5773 @node Invoking guix challenge
5774 @section Invoking @command{guix challenge}
5775
5776 @cindex reproducible builds
5777 @cindex verifiable builds
5778
5779 Do the binaries provided by this server really correspond to the source
5780 code it claims to build? Is a package build process deterministic?
5781 These are the questions the @command{guix challenge} command attempts to
5782 answer.
5783
5784 The former is obviously an important question: Before using a substitute
5785 server (@pxref{Substitutes}), one had better @emph{verify} that it
5786 provides the right binaries, and thus @emph{challenge} it. The latter
5787 is what enables the former: If package builds are deterministic, then
5788 independent builds of the package should yield the exact same result,
5789 bit for bit; if a server provides a binary different from the one
5790 obtained locally, it may be either corrupt or malicious.
5791
5792 We know that the hash that shows up in @file{/gnu/store} file names is
5793 the hash of all the inputs of the process that built the file or
5794 directory---compilers, libraries, build scripts,
5795 etc. (@pxref{Introduction}). Assuming deterministic build processes,
5796 one store file name should map to exactly one build output.
5797 @command{guix challenge} checks whether there is, indeed, a single
5798 mapping by comparing the build outputs of several independent builds of
5799 any given store item.
5800
5801 The command output looks like this:
5802
5803 @smallexample
5804 $ guix challenge --substitute-urls="https://hydra.gnu.org https://guix.example.org"
5805 updating list of substitutes from 'https://hydra.gnu.org'... 100.0%
5806 updating list of substitutes from 'https://guix.example.org'... 100.0%
5807 /gnu/store/@dots{}-openssl-1.0.2d contents differ:
5808 local hash: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
5809 https://hydra.gnu.org/nar/@dots{}-openssl-1.0.2d: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
5810 https://guix.example.org/nar/@dots{}-openssl-1.0.2d: 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim
5811 /gnu/store/@dots{}-git-2.5.0 contents differ:
5812 local hash: 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha
5813 https://hydra.gnu.org/nar/@dots{}-git-2.5.0: 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f
5814 https://guix.example.org/nar/@dots{}-git-2.5.0: 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73
5815 /gnu/store/@dots{}-pius-2.1.1 contents differ:
5816 local hash: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
5817 https://hydra.gnu.org/nar/@dots{}-pius-2.1.1: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
5818 https://guix.example.org/nar/@dots{}-pius-2.1.1: 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs
5819 @end smallexample
5820
5821 @noindent
5822 In this example, @command{guix challenge} first scans the store to
5823 determine the set of locally-built derivations---as opposed to store
5824 items that were downloaded from a substitute server---and then queries
5825 all the substitute servers. It then reports those store items for which
5826 the servers obtained a result different from the local build.
5827
5828 @cindex non-determinism, in package builds
5829 As an example, @code{guix.example.org} always gets a different answer.
5830 Conversely, @code{hydra.gnu.org} agrees with local builds, except in the
5831 case of Git. This might indicate that the build process of Git is
5832 non-deterministic, meaning that its output varies as a function of
5833 various things that Guix does not fully control, in spite of building
5834 packages in isolated environments (@pxref{Features}). Most common
5835 sources of non-determinism include the addition of timestamps in build
5836 results, the inclusion of random numbers, and directory listings sorted
5837 by inode number. See @uref{https://reproducible-builds.org/docs/}, for
5838 more information.
5839
5840 To find out what is wrong with this Git binary, we can do something along
5841 these lines (@pxref{Invoking guix archive}):
5842
5843 @example
5844 $ wget -q -O - https://hydra.gnu.org/nar/@dots{}-git-2.5.0 \
5845 | guix archive -x /tmp/git
5846 $ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git
5847 @end example
5848
5849 This command shows the difference between the files resulting from the
5850 local build, and the files resulting from the build on
5851 @code{hydra.gnu.org} (@pxref{Overview, Comparing and Merging Files,,
5852 diffutils, Comparing and Merging Files}). The @command{diff} command
5853 works great for text files. When binary files differ, a better option
5854 is @uref{https://diffoscope.org/, Diffoscope}, a tool that helps
5855 visualize differences for all kinds of files.
5856
5857 Once you have done that work, you can tell whether the differences are due
5858 to a non-deterministic build process or to a malicious server. We try
5859 hard to remove sources of non-determinism in packages to make it easier
5860 to verify substitutes, but of course, this is a process that
5861 involves not just Guix, but a large part of the free software community.
5862 In the meantime, @command{guix challenge} is one tool to help address
5863 the problem.
5864
5865 If you are writing packages for Guix, you are encouraged to check
5866 whether @code{hydra.gnu.org} and other substitute servers obtain the
5867 same build result as you did with:
5868
5869 @example
5870 $ guix challenge @var{package}
5871 @end example
5872
5873 @noindent
5874 where @var{package} is a package specification such as
5875 @code{guile@@2.0} or @code{glibc:debug}.
5876
5877 The general syntax is:
5878
5879 @example
5880 guix challenge @var{options} [@var{packages}@dots{}]
5881 @end example
5882
5883 When a difference is found between the hash of a locally-built item and
5884 that of a server-provided substitute, or among substitutes provided by
5885 different servers, the command displays it as in the example above and
5886 its exit code is 2 (other non-zero exit codes denote other kinds of
5887 errors.)
5888
5889 The one option that matters is:
5890
5891 @table @code
5892
5893 @item --substitute-urls=@var{urls}
5894 Consider @var{urls} the whitespace-separated list of substitute source
5895 URLs to compare to.
5896
5897 @end table
5898
5899
5900 @node Invoking guix container
5901 @section Invoking @command{guix container}
5902 @cindex container
5903
5904 @quotation Note
5905 As of version @value{VERSION}, this tool is experimental. The interface
5906 is subject to radical change in the future.
5907 @end quotation
5908
5909 The purpose of @command{guix container} is to manipulate processes
5910 running within an isolated environment, commonly known as a
5911 ``container'', typically created by the @command{guix environment}
5912 (@pxref{Invoking guix environment}) and @command{guix system container}
5913 (@pxref{Invoking guix system}) commands.
5914
5915 The general syntax is:
5916
5917 @example
5918 guix container @var{action} @var{options}@dots{}
5919 @end example
5920
5921 @var{action} specifies the operation to perform with a container, and
5922 @var{options} specifies the context-specific arguments for the action.
5923
5924 The following actions are available:
5925
5926 @table @code
5927 @item exec
5928 Execute a command within the context of a running container.
5929
5930 The syntax is:
5931
5932 @example
5933 guix container exec @var{pid} @var{program} @var{arguments}@dots{}
5934 @end example
5935
5936 @var{pid} specifies the process ID of the running container.
5937 @var{program} specifies an executable file name within the root file
5938 system of the container. @var{arguments} are the additional options that
5939 will be passed to @var{program}.
5940
5941 The following command launches an interactive login shell inside a
5942 GuixSD container, started by @command{guix system container}, and whose
5943 process ID is 9001:
5944
5945 @example
5946 guix container exec 9001 /run/current-system/profile/bin/bash --login
5947 @end example
5948
5949 Note that the @var{pid} cannot be the parent process of a container. It
5950 must be PID 1 of the container or one of its child processes.
5951
5952 @end table
5953
5954 @c *********************************************************************
5955 @node GNU Distribution
5956 @chapter GNU Distribution
5957
5958 @cindex Guix System Distribution
5959 @cindex GuixSD
5960 Guix comes with a distribution of the GNU system consisting entirely of
5961 free software@footnote{The term ``free'' here refers to the
5962 @url{http://www.gnu.org/philosophy/free-sw.html,freedom provided to
5963 users of that software}.}. The
5964 distribution can be installed on its own (@pxref{System Installation}),
5965 but it is also possible to install Guix as a package manager on top of
5966 an installed GNU/Linux system (@pxref{Installation}). To distinguish
5967 between the two, we refer to the standalone distribution as the Guix
5968 System Distribution, or GuixSD.
5969
5970 The distribution provides core GNU packages such as GNU libc, GCC, and
5971 Binutils, as well as many GNU and non-GNU applications. The complete
5972 list of available packages can be browsed
5973 @url{http://www.gnu.org/software/guix/packages,on-line} or by
5974 running @command{guix package} (@pxref{Invoking guix package}):
5975
5976 @example
5977 guix package --list-available
5978 @end example
5979
5980 Our goal is to provide a practical 100% free software distribution of
5981 Linux-based and other variants of GNU, with a focus on the promotion and
5982 tight integration of GNU components, and an emphasis on programs and
5983 tools that help users exert that freedom.
5984
5985 Packages are currently available on the following platforms:
5986
5987 @table @code
5988
5989 @item x86_64-linux
5990 Intel/AMD @code{x86_64} architecture, Linux-Libre kernel;
5991
5992 @item i686-linux
5993 Intel 32-bit architecture (IA32), Linux-Libre kernel;
5994
5995 @item armhf-linux
5996 ARMv7-A architecture with hard float, Thumb-2 and NEON,
5997 using the EABI hard-float application binary interface (ABI),
5998 and Linux-Libre kernel.
5999
6000 @item mips64el-linux
6001 little-endian 64-bit MIPS processors, specifically the Loongson series,
6002 n32 ABI, and Linux-Libre kernel.
6003
6004 @end table
6005
6006 GuixSD itself is currently only available on @code{i686} and @code{x86_64}.
6007
6008 @noindent
6009 For information on porting to other architectures or kernels,
6010 @pxref{Porting}.
6011
6012 @menu
6013 * System Installation:: Installing the whole operating system.
6014 * System Configuration:: Configuring the operating system.
6015 * Installing Debugging Files:: Feeding the debugger.
6016 * Security Updates:: Deploying security fixes quickly.
6017 * Package Modules:: Packages from the programmer's viewpoint.
6018 * Packaging Guidelines:: Growing the distribution.
6019 * Bootstrapping:: GNU/Linux built from scratch.
6020 * Porting:: Targeting another platform or kernel.
6021 @end menu
6022
6023 Building this distribution is a cooperative effort, and you are invited
6024 to join! @xref{Contributing}, for information about how you can help.
6025
6026 @node System Installation
6027 @section System Installation
6028
6029 @cindex Guix System Distribution
6030 This section explains how to install the Guix System Distribution
6031 on a machine. The Guix package manager can
6032 also be installed on top of a running GNU/Linux system,
6033 @pxref{Installation}.
6034
6035 @ifinfo
6036 @quotation Note
6037 @c This paragraph is for people reading this from tty2 of the
6038 @c installation image.
6039 You are reading this documentation with an Info reader. For details on
6040 how to use it, hit the @key{RET} key (``return'' or ``enter'') on the
6041 link that follows: @pxref{Top, Info reader,, info-stnd, Stand-alone GNU
6042 Info}. Hit @kbd{l} afterwards to come back here.
6043
6044 Alternately, run @command{info info} in another tty to keep the manual
6045 available.
6046 @end quotation
6047 @end ifinfo
6048
6049 @menu
6050 * Limitations:: What you can expect.
6051 * Hardware Considerations:: Supported hardware.
6052 * USB Stick Installation:: Preparing the installation medium.
6053 * Preparing for Installation:: Networking, partitioning, etc.
6054 * Proceeding with the Installation:: The real thing.
6055 * Building the Installation Image:: How this comes to be.
6056 @end menu
6057
6058 @node Limitations
6059 @subsection Limitations
6060
6061 As of version @value{VERSION}, the Guix System Distribution (GuixSD) is
6062 not production-ready. It may contain bugs and lack important
6063 features. Thus, if you are looking for a stable production system that
6064 respects your freedom as a computer user, a good solution at this point
6065 is to consider @url{http://www.gnu.org/distros/free-distros.html, one of
6066 the more established GNU/Linux distributions}. We hope you can soon switch
6067 to the GuixSD without fear, of course. In the meantime, you can
6068 also keep using your distribution and try out the package manager on top
6069 of it (@pxref{Installation}).
6070
6071 Before you proceed with the installation, be aware of the following
6072 noteworthy limitations applicable to version @value{VERSION}:
6073
6074 @itemize
6075 @item
6076 The installation process does not include a graphical user interface and
6077 requires familiarity with GNU/Linux (see the following subsections to
6078 get a feel of what that means.)
6079
6080 @item
6081 Support for the Logical Volume Manager (LVM) is missing.
6082
6083 @item
6084 Few system services are currently supported out-of-the-box
6085 (@pxref{Services}).
6086
6087 @item
6088 More than 3,200 packages are available, but you may
6089 occasionally find that a useful package is missing.
6090
6091 @item
6092 GNOME, Xfce, and Enlightenment are available (@pxref{Desktop Services}),
6093 as well as a number of X11 window managers. However, some graphical
6094 applications may be missing, as well as KDE.
6095 @end itemize
6096
6097 You have been warned! But more than a disclaimer, this is an invitation
6098 to report issues (and success stories!), and to join us in improving it.
6099 @xref{Contributing}, for more info.
6100
6101
6102 @node Hardware Considerations
6103 @subsection Hardware Considerations
6104
6105 @cindex hardware support on GuixSD
6106 GNU@tie{}GuixSD focuses on respecting the user's computing freedom. It
6107 builds around the kernel Linux-libre, which means that only hardware for
6108 which free software drivers and firmware exist is supported. Nowadays,
6109 a wide range of off-the-shelf hardware is supported on
6110 GNU/Linux-libre---from keyboards to graphics cards to scanners and
6111 Ethernet controllers. Unfortunately, there are still areas where
6112 hardware vendors deny users control over their own computing, and such
6113 hardware is not supported on GuixSD.
6114
6115 @cindex WiFi, hardware support
6116 One of the main areas where free drivers or firmware are lacking is WiFi
6117 devices. WiFi devices known to work include those using Atheros chips
6118 (AR9271 and AR7010), which corresponds to the @code{ath9k} Linux-libre
6119 driver, and for which free firmware exists and is available
6120 out-of-the-box on GuixSD, as part of @var{%base-firmware}
6121 (@pxref{operating-system Reference, @code{firmware}}).
6122
6123 @cindex RYF, Respects Your Freedom
6124 The @uref{https://www.fsf.org/, Free Software Foundation} runs
6125 @uref{https://www.fsf.org/ryf, @dfn{Respects Your Freedom}} (RYF), a
6126 certification program for hardware products that respect your freedom
6127 and your privacy and ensure that you have control over your device. We
6128 encourage you to check the list of RYF-certified devices.
6129
6130 Another useful resource is the @uref{https://www.h-node.org/, H-Node}
6131 web site. It contains a catalog of hardware devices with information
6132 about their support in GNU/Linux.
6133
6134
6135 @node USB Stick Installation
6136 @subsection USB Stick Installation
6137
6138 An installation image for USB sticks can be downloaded from
6139 @indicateurl{ftp://alpha.gnu.org/gnu/guix/guixsd-usb-install-@value{VERSION}.@var{system}.xz},
6140 where @var{system} is one of:
6141
6142 @table @code
6143 @item x86_64-linux
6144 for a GNU/Linux system on Intel/AMD-compatible 64-bit CPUs;
6145
6146 @item i686-linux
6147 for a 32-bit GNU/Linux system on Intel-compatible CPUs.
6148 @end table
6149
6150 @c start duplication of authentication part from ``Binary Installation''
6151 Make sure to download the associated @file{.sig} file and to verify the
6152 authenticity of the image against it, along these lines:
6153
6154 @example
6155 $ wget ftp://alpha.gnu.org/gnu/guix/guixsd-usb-install-@value{VERSION}.@var{system}.xz.sig
6156 $ gpg --verify guixsd-usb-install-@value{VERSION}.@var{system}.xz.sig
6157 @end example
6158
6159 If that command fails because you do not have the required public key,
6160 then run this command to import it:
6161
6162 @example
6163 $ gpg --keyserver pgp.mit.edu --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
6164 @end example
6165
6166 @noindent
6167 and rerun the @code{gpg --verify} command.
6168 @c end duplication
6169
6170 This image contains a single partition with the tools necessary for an
6171 installation. It is meant to be copied @emph{as is} to a large-enough
6172 USB stick.
6173
6174 To copy the image to a USB stick, follow these steps:
6175
6176 @enumerate
6177 @item
6178 Decompress the image using the @command{xz} command:
6179
6180 @example
6181 xz -d guixsd-usb-install-@value{VERSION}.@var{system}.xz
6182 @end example
6183
6184 @item
6185 Insert a USB stick of 1@tie{}GiB or more into your machine, and determine
6186 its device name. Assuming that the USB stick is known as @file{/dev/sdX},
6187 copy the image with:
6188
6189 @example
6190 dd if=guixsd-usb-install-@value{VERSION}.x86_64 of=/dev/sdX
6191 @end example
6192
6193 Access to @file{/dev/sdX} usually requires root privileges.
6194 @end enumerate
6195
6196 Once this is done, you should be able to reboot the system and boot from
6197 the USB stick. The latter usually requires you to get in the BIOS' boot
6198 menu, where you can choose to boot from the USB stick.
6199
6200 @node Preparing for Installation
6201 @subsection Preparing for Installation
6202
6203 Once you have successfully booted the image on the USB stick, you should
6204 end up with a root prompt. Several console TTYs are configured and can
6205 be used to run commands as root. TTY2 shows this documentation,
6206 browsable using the Info reader commands (@pxref{Top,,, info-stnd,
6207 Stand-alone GNU Info}). The installation system runs the GPM mouse
6208 daemon, which allows you to select text with the left mouse button and
6209 to paste it with the middle button.
6210
6211 @quotation Note
6212 Installation requires access to the Internet so that any missing
6213 dependencies of your system configuration can be downloaded. See the
6214 ``Networking'' section below.
6215 @end quotation
6216
6217 The installation system includes many common tools needed for this task.
6218 But it is also a full-blown GuixSD system, which means that you can
6219 install additional packages, should you need it, using @command{guix
6220 package} (@pxref{Invoking guix package}).
6221
6222 @subsubsection Keyboard Layout
6223
6224 @cindex keyboard layout
6225 The installation image uses the US qwerty keyboard layout. If you want
6226 to change it, you can use the @command{loadkeys} command. For example,
6227 the following command selects the Dvorak keyboard layout:
6228
6229 @example
6230 loadkeys dvorak
6231 @end example
6232
6233 See the files under @file{/run/current-system/profile/share/keymaps} for
6234 a list of available keyboard layouts. Run @command{man loadkeys} for
6235 more information.
6236
6237 @subsubsection Networking
6238
6239 Run the following command see what your network interfaces are called:
6240
6241 @example
6242 ifconfig -a
6243 @end example
6244
6245 @noindent
6246 @dots{} or, using the GNU/Linux-specific @command{ip} command:
6247
6248 @example
6249 ip a
6250 @end example
6251
6252 @c http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
6253 Wired interfaces have a name starting with @samp{e}; for example, the
6254 interface corresponding to the first on-board Ethernet controller is
6255 called @samp{eno1}. Wireless interfaces have a name starting with
6256 @samp{w}, like @samp{w1p2s0}.
6257
6258 @table @asis
6259 @item Wired connection
6260 To configure a wired network run the following command, substituting
6261 @var{interface} with the name of the wired interface you want to use.
6262
6263 @example
6264 ifconfig @var{interface} up
6265 @end example
6266
6267 @item Wireless connection
6268 To configure wireless networking, you can create a configuration file
6269 for the @command{wpa_supplicant} configuration tool (its location is not
6270 important) using one of the available text editors such as
6271 @command{zile}:
6272
6273 @example
6274 zile wpa_supplicant.conf
6275 @end example
6276
6277 As an example, the following stanza can go to this file and will work
6278 for many wireless networks, provided you give the actual SSID and
6279 passphrase for the network you are connecting to:
6280
6281 @example
6282 network=@{
6283 ssid="@var{my-ssid}"
6284 key_mgmt=WPA-PSK
6285 psk="the network's secret passphrase"
6286 @}
6287 @end example
6288
6289 Start the wireless service and run it in the background with the
6290 following command (substitute @var{interface} with the name of the
6291 network interface you want to use):
6292
6293 @example
6294 wpa_supplicant -c wpa_supplicant.conf -i @var{interface} -B
6295 @end example
6296
6297 Run @command{man wpa_supplicant} for more information.
6298 @end table
6299
6300 At this point, you need to acquire an IP address. On a network where IP
6301 addresses are automatically assigned @i{via} DHCP, you can run:
6302
6303 @example
6304 dhclient -v @var{interface}
6305 @end example
6306
6307 Try to ping a server to see if networking is up and running:
6308
6309 @example
6310 ping -c 3 gnu.org
6311 @end example
6312
6313 Setting up network access is almost always a requirement because the
6314 image does not contain all the software and tools that may be needed.
6315
6316 @subsubsection Disk Partitioning
6317
6318 Unless this has already been done, the next step is to partition, and
6319 then format the target partition(s).
6320
6321 The installation image includes several partitioning tools, including
6322 Parted (@pxref{Overview,,, parted, GNU Parted User Manual}),
6323 @command{fdisk}, and @command{cfdisk}. Run it and set up your disk with
6324 the partition layout you want:
6325
6326 @example
6327 cfdisk
6328 @end example
6329
6330 Once you are done partitioning the target hard disk drive, you have to
6331 create a file system on the relevant partition(s)@footnote{Currently
6332 GuixSD pretty much assumes an ext4 file system. In particular, code
6333 that reads partition UUIDs and labels only works with ext4. This will
6334 be fixed in the future.}.
6335
6336 Preferably, assign partitions a label so that you can easily and
6337 reliably refer to them in @code{file-system} declarations (@pxref{File
6338 Systems}). This is typically done using the @code{-L} option of
6339 @command{mkfs.ext4} and related commands. So, assuming the target root
6340 partition lives at @file{/dev/sda1}, a file system with the label
6341 @code{my-root} can be created with:
6342
6343 @example
6344 mkfs.ext4 -L my-root /dev/sda1
6345 @end example
6346
6347 @c FIXME: Uncomment this once GRUB fully supports encrypted roots.
6348 @c A typical command sequence may be:
6349 @c
6350 @c @example
6351 @c # fdisk /dev/sdX
6352 @c @dots{} Create partitions etc.@dots{}
6353 @c # cryptsetup luksFormat /dev/sdX1
6354 @c # cryptsetup open --type luks /dev/sdX1 my-partition
6355 @c # mkfs.ext4 -L my-root /dev/mapper/my-partition
6356 @c @end example
6357
6358 In addition to e2fsprogs, the suite of tools to manipulate
6359 ext2/ext3/ext4 file systems, the installation image includes
6360 Cryptsetup/LUKS for disk encryption.
6361
6362 Once that is done, mount the target root partition under @file{/mnt}
6363 with a command like (again, assuming @file{/dev/sda1} is the root
6364 partition):
6365
6366 @example
6367 mount /dev/sda1 /mnt
6368 @end example
6369
6370 Finally, if you plan to use one or more swap partitions (@pxref{Memory
6371 Concepts, swap space,, libc, The GNU C Library Reference Manual}), make
6372 sure to initialize them with @command{mkswap}. Assuming you have one
6373 swap partition on @file{/dev/sda2}, you would run:
6374
6375 @example
6376 mkswap /dev/sda2
6377 @end example
6378
6379 @node Proceeding with the Installation
6380 @subsection Proceeding with the Installation
6381
6382 With the target partitions ready and the target root mounted on
6383 @file{/mnt}, we're ready to go. First, run:
6384
6385 @example
6386 herd start cow-store /mnt
6387 @end example
6388
6389 This makes @file{/gnu/store} copy-on-write, such that packages added to it
6390 during the installation phase are written to the target disk on @file{/mnt}
6391 rather than kept in memory. This is necessary because the first phase of
6392 the @command{guix system init} command (see below) entails downloads or
6393 builds to @file{/gnu/store} which, initially, is an in-memory file system.
6394
6395 Next, you have to edit a file and
6396 provide the declaration of the operating system to be installed. To
6397 that end, the installation system comes with two text editors: GNU nano
6398 (@pxref{Top,,, nano, GNU nano Manual}), and GNU Zile, an Emacs clone.
6399 We strongly recommend storing that file on the target root file system, say,
6400 as @file{/mnt/etc/config.scm}. Failing to do that, you will have lost your
6401 configuration file once you have rebooted into the newly-installed system.
6402
6403 @xref{Using the Configuration System}, for an overview of the
6404 configuration file. The example configurations discussed in that
6405 section are available under @file{/etc/configuration} in the
6406 installation image. Thus, to get started with a system configuration
6407 providing a graphical display server (a ``desktop'' system), you can run
6408 something along these lines:
6409
6410 @example
6411 # mkdir /mnt/etc
6412 # cp /etc/configuration/desktop.scm /mnt/etc/config.scm
6413 # zile /mnt/etc/config.scm
6414 @end example
6415
6416 You should pay attention to what your configuration file contains, and
6417 in particular:
6418
6419 @itemize
6420 @item
6421 Make sure the @code{grub-configuration} form refers to the device you
6422 want to install GRUB on.
6423
6424 @item
6425 Be sure that your partition labels match the value of their respective
6426 @code{device} fields in your @code{file-system} configuration, assuming
6427 your @code{file-system} configuration sets the value of @code{title} to
6428 @code{'label}.
6429 @end itemize
6430
6431 Once you are done preparing the configuration file, the new system must
6432 be initialized (remember that the target root file system is mounted
6433 under @file{/mnt}):
6434
6435 @example
6436 guix system init /mnt/etc/config.scm /mnt
6437 @end example
6438
6439 @noindent
6440 This copies all the necessary files and installs GRUB on
6441 @file{/dev/sdX}, unless you pass the @option{--no-grub} option. For
6442 more information, @pxref{Invoking guix system}. This command may trigger
6443 downloads or builds of missing packages, which can take some time.
6444
6445 Once that command has completed---and hopefully succeeded!---you can run
6446 @command{reboot} and boot into the new system. The @code{root} password
6447 in the new system is initially empty; other users' passwords need to be
6448 initialized by running the @command{passwd} command as @code{root},
6449 unless your configuration specifies otherwise
6450 (@pxref{user-account-password, user account passwords}).
6451
6452 Join us on @code{#guix} on the Freenode IRC network or on
6453 @file{guix-devel@@gnu.org} to share your experience---good or not so
6454 good.
6455
6456 @node Building the Installation Image
6457 @subsection Building the Installation Image
6458
6459 The installation image described above was built using the @command{guix
6460 system} command, specifically:
6461
6462 @c FIXME: 1G is too much; see <http://bugs.gnu.org/23077>.
6463 @example
6464 guix system disk-image --image-size=1G gnu/system/install.scm
6465 @end example
6466
6467 Have a look at @file{gnu/system/install.scm} in the source tree,
6468 and see also @ref{Invoking guix system} for more information
6469 about the installation image.
6470
6471 @node System Configuration
6472 @section System Configuration
6473
6474 @cindex system configuration
6475 The Guix System Distribution supports a consistent whole-system configuration
6476 mechanism. By that we mean that all aspects of the global system
6477 configuration---such as the available system services, timezone and
6478 locale settings, user accounts---are declared in a single place. Such
6479 a @dfn{system configuration} can be @dfn{instantiated}---i.e., effected.
6480
6481 One of the advantages of putting all the system configuration under the
6482 control of Guix is that it supports transactional system upgrades, and
6483 makes it possible to roll back to a previous system instantiation,
6484 should something go wrong with the new one (@pxref{Features}). Another
6485 advantage is that it makes it easy to replicate the exact same configuration
6486 across different machines, or at different points in time, without
6487 having to resort to additional administration tools layered on top of
6488 the own tools of the system.
6489 @c Yes, we're talking of Puppet, Chef, & co. here. ↑
6490
6491 This section describes this mechanism. First we focus on the system
6492 administrator's viewpoint---explaining how the system is configured and
6493 instantiated. Then we show how this mechanism can be extended, for
6494 instance to support new system services.
6495
6496 @menu
6497 * Using the Configuration System:: Customizing your GNU system.
6498 * operating-system Reference:: Detail of operating-system declarations.
6499 * File Systems:: Configuring file system mounts.
6500 * Mapped Devices:: Block device extra processing.
6501 * User Accounts:: Specifying user accounts.
6502 * Locales:: Language and cultural convention settings.
6503 * Services:: Specifying system services.
6504 * Setuid Programs:: Programs running with root privileges.
6505 * X.509 Certificates:: Authenticating HTTPS servers.
6506 * Name Service Switch:: Configuring libc's name service switch.
6507 * Initial RAM Disk:: Linux-Libre bootstrapping.
6508 * GRUB Configuration:: Configuring the boot loader.
6509 * Invoking guix system:: Instantiating a system configuration.
6510 * Running GuixSD in a VM:: How to run GuixSD in a virtual machine.
6511 * Defining Services:: Adding new service definitions.
6512 @end menu
6513
6514 @node Using the Configuration System
6515 @subsection Using the Configuration System
6516
6517 The operating system is configured by providing an
6518 @code{operating-system} declaration in a file that can then be passed to
6519 the @command{guix system} command (@pxref{Invoking guix system}). A
6520 simple setup, with the default system services, the default Linux-Libre
6521 kernel, initial RAM disk, and boot loader looks like this:
6522
6523 @findex operating-system
6524 @lisp
6525 @include os-config-bare-bones.texi
6526 @end lisp
6527
6528 This example should be self-describing. Some of the fields defined
6529 above, such as @code{host-name} and @code{bootloader}, are mandatory.
6530 Others, such as @code{packages} and @code{services}, can be omitted, in
6531 which case they get a default value.
6532
6533 Below we discuss the effect of some of the most important fields
6534 (@pxref{operating-system Reference}, for details about all the available
6535 fields), and how to @dfn{instantiate} the operating system using
6536 @command{guix system}.
6537
6538 @unnumberedsubsubsec Globally-Visible Packages
6539
6540 @vindex %base-packages
6541 The @code{packages} field lists packages that will be globally visible
6542 on the system, for all user accounts---i.e., in every user's @code{PATH}
6543 environment variable---in addition to the per-user profiles
6544 (@pxref{Invoking guix package}). The @var{%base-packages} variable
6545 provides all the tools one would expect for basic user and administrator
6546 tasks---including the GNU Core Utilities, the GNU Networking Utilities,
6547 the GNU Zile lightweight text editor, @command{find}, @command{grep},
6548 etc. The example above adds tcpdump to those, taken from the @code{(gnu
6549 packages admin)} module (@pxref{Package Modules}).
6550
6551 @findex specification->package
6552 Referring to packages by variable name, like @var{tcpdump} above, has
6553 the advantage of being unambiguous; it also allows typos and such to be
6554 diagnosed right away as ``unbound variables''. The downside is that one
6555 needs to know which module defines which package, and to augment the
6556 @code{use-package-modules} line accordingly. To avoid that, one can use
6557 the @code{specification->package} procedure of the @code{(gnu packages)}
6558 module, which returns the best package for a given name or name and
6559 version:
6560
6561 @lisp
6562 (use-modules (gnu packages))
6563
6564 (operating-system
6565 ;; ...
6566 (packages (append (map specification->package
6567 '("tcpdump" "htop" "gnupg@@2.0"))
6568 %base-packages)))
6569 @end lisp
6570
6571 @unnumberedsubsubsec System Services
6572
6573 @vindex %base-services
6574 The @code{services} field lists @dfn{system services} to be made
6575 available when the system starts (@pxref{Services}).
6576 The @code{operating-system} declaration above specifies that, in
6577 addition to the basic services, we want the @command{lshd} secure shell
6578 daemon listening on port 2222 (@pxref{Networking Services,
6579 @code{lsh-service}}). Under the hood,
6580 @code{lsh-service} arranges so that @code{lshd} is started with the
6581 right command-line options, possibly with supporting configuration files
6582 generated as needed (@pxref{Defining Services}).
6583
6584 @cindex customization, of services
6585 @findex modify-services
6586 Occasionally, instead of using the base services as is, you will want to
6587 customize them. To do this, use @code{modify-services} (@pxref{Service
6588 Reference, @code{modify-services}}) to modify the list.
6589
6590 For example, suppose you want to modify @code{guix-daemon} and Mingetty
6591 (the console log-in) in the @var{%base-services} list (@pxref{Base
6592 Services, @code{%base-services}}). To do that, you can write the
6593 following in your operating system declaration:
6594
6595 @lisp
6596 (define %my-services
6597 ;; My very own list of services.
6598 (modify-services %base-services
6599 (guix-service-type config =>
6600 (guix-configuration
6601 (inherit config)
6602 (use-substitutes? #f)
6603 (extra-options '("--gc-keep-derivations"))))
6604 (mingetty-service-type config =>
6605 (mingetty-configuration
6606 (inherit config)
6607 (motd (plain-file "motd" "Howdy!"))))))
6608
6609 (operating-system
6610 ;; @dots{}
6611 (services %my-services))
6612 @end lisp
6613
6614 This changes the configuration---i.e., the service parameters---of the
6615 @code{guix-service-type} instance, and that of all the
6616 @code{mingetty-service-type} instances in the @var{%base-services} list.
6617 Observe how this is accomplished: first, we arrange for the original
6618 configuration to be bound to the identifier @code{config} in the
6619 @var{body}, and then we write the @var{body} so that it evaluates to the
6620 desired configuration. In particular, notice how we use @code{inherit}
6621 to create a new configuration which has the same values as the old
6622 configuration, but with a few modifications.
6623
6624 The configuration for a typical ``desktop'' usage, with the X11 display
6625 server, GNOME and Xfce (users can choose which of these desktop
6626 environments to use at the log-in screen by pressing @kbd{F1}), network
6627 management, power management, and more, would look like this:
6628
6629 @lisp
6630 @include os-config-desktop.texi
6631 @end lisp
6632
6633 A graphical environment with a choice of lightweight window managers
6634 instead of full-blown desktop environments would look like this:
6635
6636 @lisp
6637 @include os-config-lightweight-desktop.texi
6638 @end lisp
6639
6640 @xref{Desktop Services}, for the exact list of services provided by
6641 @var{%desktop-services}. @xref{X.509 Certificates}, for background
6642 information about the @code{nss-certs} package that is used here.
6643
6644 Again, @var{%desktop-services} is just a list of service objects. If
6645 you want to remove services from there, you can do so using the
6646 procedures for list filtering (@pxref{SRFI-1 Filtering and
6647 Partitioning,,, guile, GNU Guile Reference Manual}). For instance, the
6648 following expression returns a list that contains all the services in
6649 @var{%desktop-services} minus the Avahi service:
6650
6651 @example
6652 (remove (lambda (service)
6653 (eq? (service-kind service) avahi-service-type))
6654 %desktop-services)
6655 @end example
6656
6657 @unnumberedsubsubsec Instantiating the System
6658
6659 Assuming the @code{operating-system} declaration
6660 is stored in the @file{my-system-config.scm}
6661 file, the @command{guix system reconfigure my-system-config.scm} command
6662 instantiates that configuration, and makes it the default GRUB boot
6663 entry (@pxref{Invoking guix system}).
6664
6665 The normal way to change the system configuration is by updating this
6666 file and re-running @command{guix system reconfigure}. One should never
6667 have to touch files in @command{/etc} or to run commands that modify the
6668 system state such as @command{useradd} or @command{grub-install}. In
6669 fact, you must avoid that since that would not only void your warranty
6670 but also prevent you from rolling back to previous versions of your
6671 system, should you ever need to.
6672
6673 @cindex roll-back, of the operating system
6674 Speaking of roll-back, each time you run @command{guix system
6675 reconfigure}, a new @dfn{generation} of the system is created---without
6676 modifying or deleting previous generations. Old system generations get
6677 an entry in the GRUB boot menu, allowing you to boot them in case
6678 something went wrong with the latest generation. Reassuring, no? The
6679 @command{guix system list-generations} command lists the system
6680 generations available on disk.
6681
6682 @unnumberedsubsubsec The Programming Interface
6683
6684 At the Scheme level, the bulk of an @code{operating-system} declaration
6685 is instantiated with the following monadic procedure (@pxref{The Store
6686 Monad}):
6687
6688 @deffn {Monadic Procedure} operating-system-derivation os
6689 Return a derivation that builds @var{os}, an @code{operating-system}
6690 object (@pxref{Derivations}).
6691
6692 The output of the derivation is a single directory that refers to all
6693 the packages, configuration files, and other supporting files needed to
6694 instantiate @var{os}.
6695 @end deffn
6696
6697 This procedure is provided by the @code{(gnu system)} module. Along
6698 with @code{(gnu services)} (@pxref{Services}), this module contains the
6699 guts of GuixSD. Make sure to visit it!
6700
6701
6702 @node operating-system Reference
6703 @subsection @code{operating-system} Reference
6704
6705 This section summarizes all the options available in
6706 @code{operating-system} declarations (@pxref{Using the Configuration
6707 System}).
6708
6709 @deftp {Data Type} operating-system
6710 This is the data type representing an operating system configuration.
6711 By that, we mean all the global system configuration, not per-user
6712 configuration (@pxref{Using the Configuration System}).
6713
6714 @table @asis
6715 @item @code{kernel} (default: @var{linux-libre})
6716 The package object of the operating system kernel to use@footnote{Currently
6717 only the Linux-libre kernel is supported. In the future, it will be
6718 possible to use the GNU@tie{}Hurd.}.
6719
6720 @item @code{kernel-arguments} (default: @code{'()})
6721 List of strings or gexps representing additional arguments to pass on
6722 the command-line of the kernel---e.g., @code{("console=ttyS0")}.
6723
6724 @item @code{bootloader}
6725 The system bootloader configuration object. @xref{GRUB Configuration}.
6726
6727 @item @code{initrd} (default: @code{base-initrd})
6728 A two-argument monadic procedure that returns an initial RAM disk for
6729 the Linux kernel. @xref{Initial RAM Disk}.
6730
6731 @item @code{firmware} (default: @var{%base-firmware})
6732 @cindex firmware
6733 List of firmware packages loadable by the operating system kernel.
6734
6735 The default includes firmware needed for Atheros-based WiFi devices
6736 (Linux-libre module @code{ath9k}). @xref{Hardware Considerations}, for
6737 more info on supported hardware.
6738
6739 @item @code{host-name}
6740 The host name.
6741
6742 @item @code{hosts-file}
6743 @cindex hosts file
6744 A file-like object (@pxref{G-Expressions, file-like objects}) for use as
6745 @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library
6746 Reference Manual}). The default is a file with entries for
6747 @code{localhost} and @var{host-name}.
6748
6749 @item @code{mapped-devices} (default: @code{'()})
6750 A list of mapped devices. @xref{Mapped Devices}.
6751
6752 @item @code{file-systems}
6753 A list of file systems. @xref{File Systems}.
6754
6755 @item @code{swap-devices} (default: @code{'()})
6756 @cindex swap devices
6757 A list of strings identifying devices to be used for ``swap space''
6758 (@pxref{Memory Concepts,,, libc, The GNU C Library Reference Manual}).
6759 For example, @code{'("/dev/sda3")}.
6760
6761 @item @code{users} (default: @code{%base-user-accounts})
6762 @itemx @code{groups} (default: @var{%base-groups})
6763 List of user accounts and groups. @xref{User Accounts}.
6764
6765 @item @code{skeletons} (default: @code{(default-skeletons)})
6766 A list target file name/file-like object tuples (@pxref{G-Expressions,
6767 file-like objects}). These are the skeleton files that will be added to
6768 the home directory of newly-created user accounts.
6769
6770 For instance, a valid value may look like this:
6771
6772 @example
6773 `((".bashrc" ,(plain-file "bashrc" "echo Hello\n"))
6774 (".guile" ,(plain-file "guile"
6775 "(use-modules (ice-9 readline))
6776 (activate-readline)")))
6777 @end example
6778
6779 @item @code{issue} (default: @var{%default-issue})
6780 A string denoting the contents of the @file{/etc/issue} file, which is
6781 displayed when users log in on a text console.
6782
6783 @item @code{packages} (default: @var{%base-packages})
6784 The set of packages installed in the global profile, which is accessible
6785 at @file{/run/current-system/profile}.
6786
6787 The default set includes core utilities and it is good practice to
6788 install non-core utilities in user profiles (@pxref{Invoking guix
6789 package}).
6790
6791 @item @code{timezone}
6792 A timezone identifying string---e.g., @code{"Europe/Paris"}.
6793
6794 You can run the @command{tzselect} command to find out which timezone
6795 string corresponds to your region. Choosing an invalid timezone name
6796 causes @command{guix system} to fail.
6797
6798 @item @code{locale} (default: @code{"en_US.utf8"})
6799 The name of the default locale (@pxref{Locale Names,,, libc, The GNU C
6800 Library Reference Manual}). @xref{Locales}, for more information.
6801
6802 @item @code{locale-definitions} (default: @var{%default-locale-definitions})
6803 The list of locale definitions to be compiled and that may be used at
6804 run time. @xref{Locales}.
6805
6806 @item @code{locale-libcs} (default: @code{(list @var{glibc})})
6807 The list of GNU@tie{}libc packages whose locale data and tools are used
6808 to build the locale definitions. @xref{Locales}, for compatibility
6809 considerations that justify this option.
6810
6811 @item @code{name-service-switch} (default: @var{%default-nss})
6812 Configuration of the libc name service switch (NSS)---a
6813 @code{<name-service-switch>} object. @xref{Name Service Switch}, for
6814 details.
6815
6816 @item @code{services} (default: @var{%base-services})
6817 A list of service objects denoting system services. @xref{Services}.
6818
6819 @item @code{pam-services} (default: @code{(base-pam-services)})
6820 @cindex PAM
6821 @cindex pluggable authentication modules
6822 Linux @dfn{pluggable authentication module} (PAM) services.
6823 @c FIXME: Add xref to PAM services section.
6824
6825 @item @code{setuid-programs} (default: @var{%setuid-programs})
6826 List of string-valued G-expressions denoting setuid programs.
6827 @xref{Setuid Programs}.
6828
6829 @item @code{sudoers-file} (default: @var{%sudoers-specification})
6830 @cindex sudoers file
6831 The contents of the @file{/etc/sudoers} file as a file-like object
6832 (@pxref{G-Expressions, @code{local-file} and @code{plain-file}}).
6833
6834 This file specifies which users can use the @command{sudo} command, what
6835 they are allowed to do, and what privileges they may gain. The default
6836 is that only @code{root} and members of the @code{wheel} group may use
6837 @code{sudo}.
6838
6839 @end table
6840 @end deftp
6841
6842 @node File Systems
6843 @subsection File Systems
6844
6845 The list of file systems to be mounted is specified in the
6846 @code{file-systems} field of the operating system declaration
6847 (@pxref{Using the Configuration System}). Each file system is declared
6848 using the @code{file-system} form, like this:
6849
6850 @example
6851 (file-system
6852 (mount-point "/home")
6853 (device "/dev/sda3")
6854 (type "ext4"))
6855 @end example
6856
6857 As usual, some of the fields are mandatory---those shown in the example
6858 above---while others can be omitted. These are described below.
6859
6860 @deftp {Data Type} file-system
6861 Objects of this type represent file systems to be mounted. They
6862 contain the following members:
6863
6864 @table @asis
6865 @item @code{type}
6866 This is a string specifying the type of the file system---e.g.,
6867 @code{"ext4"}.
6868
6869 @item @code{mount-point}
6870 This designates the place where the file system is to be mounted.
6871
6872 @item @code{device}
6873 This names the ``source'' of the file system. By default it is the name
6874 of a node under @file{/dev}, but its meaning depends on the @code{title}
6875 field described below.
6876
6877 @item @code{title} (default: @code{'device})
6878 This is a symbol that specifies how the @code{device} field is to be
6879 interpreted.
6880
6881 When it is the symbol @code{device}, then the @code{device} field is
6882 interpreted as a file name; when it is @code{label}, then @code{device}
6883 is interpreted as a partition label name; when it is @code{uuid},
6884 @code{device} is interpreted as a partition unique identifier (UUID).
6885
6886 UUIDs may be converted from their string representation (as shown by the
6887 @command{tune2fs -l} command) using the @code{uuid} form@footnote{The
6888 @code{uuid} form expects 16-byte UUIDs as defined in
6889 @uref{https://tools.ietf.org/html/rfc4122, RFC@tie{}4122}. This is the
6890 form of UUID used by the ext2 family of file systems and others, but it
6891 is different from ``UUIDs'' found in FAT file systems, for instance.},
6892 like this:
6893
6894 @example
6895 (file-system
6896 (mount-point "/home")
6897 (type "ext4")
6898 (title 'uuid)
6899 (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
6900 @end example
6901
6902 The @code{label} and @code{uuid} options offer a way to refer to disk
6903 partitions without having to hard-code their actual device
6904 name@footnote{Note that, while it is tempting to use
6905 @file{/dev/disk/by-uuid} and similar device names to achieve the same
6906 result, this is not recommended: These special device nodes are created
6907 by the udev daemon and may be unavailable at the time the device is
6908 mounted.}.
6909
6910 However, when the source of a file system is a mapped device (@pxref{Mapped
6911 Devices}), its @code{device} field @emph{must} refer to the mapped
6912 device name---e.g., @file{/dev/mapper/root-partition}---and consequently
6913 @code{title} must be set to @code{'device}. This is required so that
6914 the system knows that mounting the file system depends on having the
6915 corresponding device mapping established.
6916
6917 @item @code{flags} (default: @code{'()})
6918 This is a list of symbols denoting mount flags. Recognized flags
6919 include @code{read-only}, @code{bind-mount}, @code{no-dev} (disallow
6920 access to special files), @code{no-suid} (ignore setuid and setgid
6921 bits), and @code{no-exec} (disallow program execution.)
6922
6923 @item @code{options} (default: @code{#f})
6924 This is either @code{#f}, or a string denoting mount options.
6925
6926 @item @code{mount?} (default: @code{#t})
6927 This value indicates whether to automatically mount the file system when
6928 the system is brought up. When set to @code{#f}, the file system gets
6929 an entry in @file{/etc/fstab} (read by the @command{mount} command) but
6930 is not automatically mounted.
6931
6932 @item @code{needed-for-boot?} (default: @code{#f})
6933 This Boolean value indicates whether the file system is needed when
6934 booting. If that is true, then the file system is mounted when the
6935 initial RAM disk (initrd) is loaded. This is always the case, for
6936 instance, for the root file system.
6937
6938 @item @code{check?} (default: @code{#t})
6939 This Boolean indicates whether the file system needs to be checked for
6940 errors before being mounted.
6941
6942 @item @code{create-mount-point?} (default: @code{#f})
6943 When true, the mount point is created if it does not exist yet.
6944
6945 @item @code{dependencies} (default: @code{'()})
6946 This is a list of @code{<file-system>} objects representing file systems
6947 that must be mounted before (and unmounted after) this one.
6948
6949 As an example, consider a hierarchy of mounts: @file{/sys/fs/cgroup} is
6950 a dependency of @file{/sys/fs/cgroup/cpu} and
6951 @file{/sys/fs/cgroup/memory}.
6952
6953 @end table
6954 @end deftp
6955
6956 The @code{(gnu system file-systems)} exports the following useful
6957 variables.
6958
6959 @defvr {Scheme Variable} %base-file-systems
6960 These are essential file systems that are required on normal systems,
6961 such as @var{%pseudo-terminal-file-system} and @var{%immutable-store} (see
6962 below.) Operating system declarations should always contain at least
6963 these.
6964 @end defvr
6965
6966 @defvr {Scheme Variable} %pseudo-terminal-file-system
6967 This is the file system to be mounted as @file{/dev/pts}. It supports
6968 @dfn{pseudo-terminals} created @i{via} @code{openpty} and similar
6969 functions (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference
6970 Manual}). Pseudo-terminals are used by terminal emulators such as
6971 @command{xterm}.
6972 @end defvr
6973
6974 @defvr {Scheme Variable} %shared-memory-file-system
6975 This file system is mounted as @file{/dev/shm} and is used to support
6976 memory sharing across processes (@pxref{Memory-mapped I/O,
6977 @code{shm_open},, libc, The GNU C Library Reference Manual}).
6978 @end defvr
6979
6980 @defvr {Scheme Variable} %immutable-store
6981 This file system performs a read-only ``bind mount'' of
6982 @file{/gnu/store}, making it read-only for all the users including
6983 @code{root}. This prevents against accidental modification by software
6984 running as @code{root} or by system administrators.
6985
6986 The daemon itself is still able to write to the store: it remounts it
6987 read-write in its own ``name space.''
6988 @end defvr
6989
6990 @defvr {Scheme Variable} %binary-format-file-system
6991 The @code{binfmt_misc} file system, which allows handling of arbitrary
6992 executable file types to be delegated to user space. This requires the
6993 @code{binfmt.ko} kernel module to be loaded.
6994 @end defvr
6995
6996 @defvr {Scheme Variable} %fuse-control-file-system
6997 The @code{fusectl} file system, which allows unprivileged users to mount
6998 and unmount user-space FUSE file systems. This requires the
6999 @code{fuse.ko} kernel module to be loaded.
7000 @end defvr
7001
7002 @node Mapped Devices
7003 @subsection Mapped Devices
7004
7005 @cindex device mapping
7006 @cindex mapped devices
7007 The Linux kernel has a notion of @dfn{device mapping}: a block device,
7008 such as a hard disk partition, can be @dfn{mapped} into another device,
7009 usually in @code{/dev/mapper/},
7010 with additional processing over the data that flows through
7011 it@footnote{Note that the GNU@tie{}Hurd makes no difference between the
7012 concept of a ``mapped device'' and that of a file system: both boil down
7013 to @emph{translating} input/output operations made on a file to
7014 operations on its backing store. Thus, the Hurd implements mapped
7015 devices, like file systems, using the generic @dfn{translator} mechanism
7016 (@pxref{Translators,,, hurd, The GNU Hurd Reference Manual}).}. A
7017 typical example is encryption device mapping: all writes to the mapped
7018 device are encrypted, and all reads are deciphered, transparently.
7019 Guix extends this notion by considering any device or set of devices that
7020 are @dfn{transformed} in some way to create a new device; for instance,
7021 RAID devices are obtained by @dfn{assembling} several other devices, such
7022 as hard disks or partitions, into a new one that behaves as one partition.
7023 Other examples, not yet implemented, are LVM logical volumes.
7024
7025 Mapped devices are declared using the @code{mapped-device} form,
7026 defined as follows; for examples, see below.
7027
7028 @deftp {Data Type} mapped-device
7029 Objects of this type represent device mappings that will be made when
7030 the system boots up.
7031
7032 @table @code
7033 @item source
7034 This is either a string specifying the name of the block device to be mapped,
7035 such as @code{"/dev/sda3"}, or a list of such strings when several devices
7036 need to be assembled for creating a new one.
7037
7038 @item target
7039 This string specifies the name of the resulting mapped device. For
7040 kernel mappers such as encrypted devices of type @code{luks-device-mapping},
7041 specifying @code{"my-partition"} leads to the creation of
7042 the @code{"/dev/mapper/my-partition"} device.
7043 For RAID devices of type @code{raid-device-mapping}, the full device name
7044 such as @code{"/dev/md0"} needs to be given.
7045
7046 @item type
7047 This must be a @code{mapped-device-kind} object, which specifies how
7048 @var{source} is mapped to @var{target}.
7049 @end table
7050 @end deftp
7051
7052 @defvr {Scheme Variable} luks-device-mapping
7053 This defines LUKS block device encryption using the @command{cryptsetup}
7054 command from the package with the same name. It relies on the
7055 @code{dm-crypt} Linux kernel module.
7056 @end defvr
7057
7058 @defvr {Scheme Variable} raid-device-mapping
7059 This defines a RAID device, which is assembled using the @code{mdadm}
7060 command from the package with the same name. It requires a Linux kernel
7061 module for the appropriate RAID level to be loaded, such as @code{raid456}
7062 for RAID-4, RAID-5 or RAID-6, or @code{raid10} for RAID-10.
7063 @end defvr
7064
7065 @cindex disk encryption
7066 @cindex LUKS
7067 The following example specifies a mapping from @file{/dev/sda3} to
7068 @file{/dev/mapper/home} using LUKS---the
7069 @url{http://code.google.com/p/cryptsetup,Linux Unified Key Setup}, a
7070 standard mechanism for disk encryption.
7071 The @file{/dev/mapper/home}
7072 device can then be used as the @code{device} of a @code{file-system}
7073 declaration (@pxref{File Systems}).
7074
7075 @example
7076 (mapped-device
7077 (source "/dev/sda3")
7078 (target "home")
7079 (type luks-device-mapping))
7080 @end example
7081
7082 Alternatively, to become independent of device numbering, one may obtain
7083 the LUKS UUID (@dfn{unique identifier}) of the source device by a
7084 command like:
7085
7086 @example
7087 cryptsetup luksUUID /dev/sda3
7088 @end example
7089
7090 and use it as follows:
7091
7092 @example
7093 (mapped-device
7094 (source (uuid "cb67fc72-0d54-4c88-9d4b-b225f30b0f44"))
7095 (target "home")
7096 (type luks-device-mapping))
7097 @end example
7098
7099 A RAID device formed of the partitions @file{/dev/sda1} and @file{/dev/sdb1}
7100 may be declared as follows:
7101
7102 @example
7103 (mapped-device
7104 (source (list "/dev/sda1" "/dev/sdb1"))
7105 (target "/dev/md0")
7106 (type raid-device-mapping))
7107 @end example
7108
7109 The @file{/dev/md0} device can then be used as the @code{device} of a
7110 @code{file-system} declaration (@pxref{File Systems}).
7111 Note that the RAID level need not be given; it is chosen during the
7112 initial creation and formatting of the RAID device and is determined
7113 automatically later.
7114
7115
7116 @node User Accounts
7117 @subsection User Accounts
7118
7119 User accounts and groups are entirely managed through the
7120 @code{operating-system} declaration. They are specified with the
7121 @code{user-account} and @code{user-group} forms:
7122
7123 @example
7124 (user-account
7125 (name "alice")
7126 (group "users")
7127 (supplementary-groups '("wheel" ;allow use of sudo, etc.
7128 "audio" ;sound card
7129 "video" ;video devices such as webcams
7130 "cdrom")) ;the good ol' CD-ROM
7131 (comment "Bob's sister")
7132 (home-directory "/home/alice"))
7133 @end example
7134
7135 When booting or upon completion of @command{guix system reconfigure},
7136 the system ensures that only the user accounts and groups specified in
7137 the @code{operating-system} declaration exist, and with the specified
7138 properties. Thus, account or group creations or modifications made by
7139 directly invoking commands such as @command{useradd} are lost upon
7140 reconfiguration or reboot. This ensures that the system remains exactly
7141 as declared.
7142
7143 @deftp {Data Type} user-account
7144 Objects of this type represent user accounts. The following members may
7145 be specified:
7146
7147 @table @asis
7148 @item @code{name}
7149 The name of the user account.
7150
7151 @item @code{group}
7152 This is the name (a string) or identifier (a number) of the user group
7153 this account belongs to.
7154
7155 @item @code{supplementary-groups} (default: @code{'()})
7156 Optionally, this can be defined as a list of group names that this
7157 account belongs to.
7158
7159 @item @code{uid} (default: @code{#f})
7160 This is the user ID for this account (a number), or @code{#f}. In the
7161 latter case, a number is automatically chosen by the system when the
7162 account is created.
7163
7164 @item @code{comment} (default: @code{""})
7165 A comment about the account, such as the account owner's full name.
7166
7167 @item @code{home-directory}
7168 This is the name of the home directory for the account.
7169
7170 @item @code{shell} (default: Bash)
7171 This is a G-expression denoting the file name of a program to be used as
7172 the shell (@pxref{G-Expressions}).
7173
7174 @item @code{system?} (default: @code{#f})
7175 This Boolean value indicates whether the account is a ``system''
7176 account. System accounts are sometimes treated specially; for instance,
7177 graphical login managers do not list them.
7178
7179 @anchor{user-account-password}
7180 @item @code{password} (default: @code{#f})
7181 You would normally leave this field to @code{#f}, initialize user
7182 passwords as @code{root} with the @command{passwd} command, and then let
7183 users change it with @command{passwd}. Passwords set with
7184 @command{passwd} are of course preserved across reboot and
7185 reconfiguration.
7186
7187 If you @emph{do} want to have a preset password for an account, then
7188 this field must contain the encrypted password, as a string.
7189 @xref{crypt,,, libc, The GNU C Library Reference Manual}, for more information
7190 on password encryption, and @ref{Encryption,,, guile, GNU Guile Reference
7191 Manual}, for information on Guile's @code{crypt} procedure.
7192
7193 @end table
7194 @end deftp
7195
7196 User group declarations are even simpler:
7197
7198 @example
7199 (user-group (name "students"))
7200 @end example
7201
7202 @deftp {Data Type} user-group
7203 This type is for, well, user groups. There are just a few fields:
7204
7205 @table @asis
7206 @item @code{name}
7207 The name of the group.
7208
7209 @item @code{id} (default: @code{#f})
7210 The group identifier (a number). If @code{#f}, a new number is
7211 automatically allocated when the group is created.
7212
7213 @item @code{system?} (default: @code{#f})
7214 This Boolean value indicates whether the group is a ``system'' group.
7215 System groups have low numerical IDs.
7216
7217 @item @code{password} (default: @code{#f})
7218 What, user groups can have a password? Well, apparently yes. Unless
7219 @code{#f}, this field specifies the password of the group.
7220
7221 @end table
7222 @end deftp
7223
7224 For convenience, a variable lists all the basic user groups one may
7225 expect:
7226
7227 @defvr {Scheme Variable} %base-groups
7228 This is the list of basic user groups that users and/or packages expect
7229 to be present on the system. This includes groups such as ``root'',
7230 ``wheel'', and ``users'', as well as groups used to control access to
7231 specific devices such as ``audio'', ``disk'', and ``cdrom''.
7232 @end defvr
7233
7234 @defvr {Scheme Variable} %base-user-accounts
7235 This is the list of basic system accounts that programs may expect to
7236 find on a GNU/Linux system, such as the ``nobody'' account.
7237
7238 Note that the ``root'' account is not included here. It is a
7239 special-case and is automatically added whether or not it is specified.
7240 @end defvr
7241
7242 @node Locales
7243 @subsection Locales
7244
7245 @cindex locale
7246 A @dfn{locale} defines cultural conventions for a particular language
7247 and region of the world (@pxref{Locales,,, libc, The GNU C Library
7248 Reference Manual}). Each locale has a name that typically has the form
7249 @code{@var{language}_@var{territory}.@var{codeset}}---e.g.,
7250 @code{fr_LU.utf8} designates the locale for the French language, with
7251 cultural conventions from Luxembourg, and using the UTF-8 encoding.
7252
7253 @cindex locale definition
7254 Usually, you will want to specify the default locale for the machine
7255 using the @code{locale} field of the @code{operating-system} declaration
7256 (@pxref{operating-system Reference, @code{locale}}).
7257
7258 The selected locale is automatically added to the @dfn{locale
7259 definitions} known to the system if needed, with its codeset inferred
7260 from its name---e.g., @code{bo_CN.utf8} will be assumed to use the
7261 @code{UTF-8} codeset. Additional locale definitions can be specified in
7262 the @code{locale-definitions} slot of @code{operating-system}---this is
7263 useful, for instance, if the codeset could not be inferred from the
7264 locale name. The default set of locale definitions includes some widely
7265 used locales, but not all the available locales, in order to save space.
7266
7267 For instance, to add the North Frisian locale for Germany, the value of
7268 that field may be:
7269
7270 @example
7271 (cons (locale-definition
7272 (name "fy_DE.utf8") (source "fy_DE"))
7273 %default-locale-definitions)
7274 @end example
7275
7276 Likewise, to save space, one might want @code{locale-definitions} to
7277 list only the locales that are actually used, as in:
7278
7279 @example
7280 (list (locale-definition
7281 (name "ja_JP.eucjp") (source "ja_JP")
7282 (charset "EUC-JP")))
7283 @end example
7284
7285 @vindex LOCPATH
7286 The compiled locale definitions are available at
7287 @file{/run/current-system/locale/X.Y}, where @code{X.Y} is the libc
7288 version, which is the default location where the GNU@tie{}libc provided
7289 by Guix looks for locale data. This can be overridden using the
7290 @code{LOCPATH} environment variable (@pxref{locales-and-locpath,
7291 @code{LOCPATH} and locale packages}).
7292
7293 The @code{locale-definition} form is provided by the @code{(gnu system
7294 locale)} module. Details are given below.
7295
7296 @deftp {Data Type} locale-definition
7297 This is the data type of a locale definition.
7298
7299 @table @asis
7300
7301 @item @code{name}
7302 The name of the locale. @xref{Locale Names,,, libc, The GNU C Library
7303 Reference Manual}, for more information on locale names.
7304
7305 @item @code{source}
7306 The name of the source for that locale. This is typically the
7307 @code{@var{language}_@var{territory}} part of the locale name.
7308
7309 @item @code{charset} (default: @code{"UTF-8"})
7310 The ``character set'' or ``code set'' for that locale,
7311 @uref{http://www.iana.org/assignments/character-sets, as defined by
7312 IANA}.
7313
7314 @end table
7315 @end deftp
7316
7317 @defvr {Scheme Variable} %default-locale-definitions
7318 A list of commonly used UTF-8 locales, used as the default
7319 value of the @code{locale-definitions} field of @code{operating-system}
7320 declarations.
7321
7322 @cindex locale name
7323 @cindex normalized codeset in locale names
7324 These locale definitions use the @dfn{normalized codeset} for the part
7325 that follows the dot in the name (@pxref{Using gettextized software,
7326 normalized codeset,, libc, The GNU C Library Reference Manual}). So for
7327 instance it has @code{uk_UA.utf8} but @emph{not}, say,
7328 @code{uk_UA.UTF-8}.
7329 @end defvr
7330
7331 @subsubsection Locale Data Compatibility Considerations
7332
7333 @cindex incompatibility, of locale data
7334 @code{operating-system} declarations provide a @code{locale-libcs} field
7335 to specify the GNU@tie{}libc packages that are used to compile locale
7336 declarations (@pxref{operating-system Reference}). ``Why would I
7337 care?'', you may ask. Well, it turns out that the binary format of
7338 locale data is occasionally incompatible from one libc version to
7339 another.
7340
7341 @c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
7342 @c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
7343 For instance, a program linked against libc version 2.21 is unable to
7344 read locale data produced with libc 2.22; worse, that program
7345 @emph{aborts} instead of simply ignoring the incompatible locale
7346 data@footnote{Versions 2.23 and later of GNU@tie{}libc will simply skip
7347 the incompatible locale data, which is already an improvement.}.
7348 Similarly, a program linked against libc 2.22 can read most, but not
7349 all, the locale data from libc 2.21 (specifically, @code{LC_COLLATE}
7350 data is incompatible); thus calls to @code{setlocale} may fail, but
7351 programs will not abort.
7352
7353 The ``problem'' in GuixSD is that users have a lot of freedom: They can
7354 choose whether and when to upgrade software in their profiles, and might
7355 be using a libc version different from the one the system administrator
7356 used to build the system-wide locale data.
7357
7358 Fortunately, unprivileged users can also install their own locale data
7359 and define @var{GUIX_LOCPATH} accordingly (@pxref{locales-and-locpath,
7360 @code{GUIX_LOCPATH} and locale packages}).
7361
7362 Still, it is best if the system-wide locale data at
7363 @file{/run/current-system/locale} is built for all the libc versions
7364 actually in use on the system, so that all the programs can access
7365 it---this is especially crucial on a multi-user system. To do that, the
7366 administrator can specify several libc packages in the
7367 @code{locale-libcs} field of @code{operating-system}:
7368
7369 @example
7370 (use-package-modules base)
7371
7372 (operating-system
7373 ;; @dots{}
7374 (locale-libcs (list glibc-2.21 (canonical-package glibc))))
7375 @end example
7376
7377 This example would lead to a system containing locale definitions for
7378 both libc 2.21 and the current version of libc in
7379 @file{/run/current-system/locale}.
7380
7381
7382 @node Services
7383 @subsection Services
7384
7385 @cindex system services
7386 An important part of preparing an @code{operating-system} declaration is
7387 listing @dfn{system services} and their configuration (@pxref{Using the
7388 Configuration System}). System services are typically daemons launched
7389 when the system boots, or other actions needed at that time---e.g.,
7390 configuring network access.
7391
7392 Services are managed by the GNU@tie{}Shepherd (@pxref{Introduction,,,
7393 shepherd, The GNU Shepherd Manual}). On a running system, the
7394 @command{herd} command allows you to list the available services, show
7395 their status, start and stop them, or do other specific operations
7396 (@pxref{Jump Start,,, shepherd, The GNU Shepherd Manual}). For example:
7397
7398 @example
7399 # herd status
7400 @end example
7401
7402 The above command, run as @code{root}, lists the currently defined
7403 services. The @command{herd doc} command shows a synopsis of the given
7404 service:
7405
7406 @example
7407 # herd doc nscd
7408 Run libc's name service cache daemon (nscd).
7409 @end example
7410
7411 The @command{start}, @command{stop}, and @command{restart} sub-commands
7412 have the effect you would expect. For instance, the commands below stop
7413 the nscd service and restart the Xorg display server:
7414
7415 @example
7416 # herd stop nscd
7417 Service nscd has been stopped.
7418 # herd restart xorg-server
7419 Service xorg-server has been stopped.
7420 Service xorg-server has been started.
7421 @end example
7422
7423 The following sections document the available services, starting with
7424 the core services, that may be used in an @code{operating-system}
7425 declaration.
7426
7427 @menu
7428 * Base Services:: Essential system services.
7429 * Scheduled Job Execution:: The mcron service.
7430 * Networking Services:: Network setup, SSH daemon, etc.
7431 * X Window:: Graphical display.
7432 * Desktop Services:: D-Bus and desktop services.
7433 * Database Services:: SQL databases.
7434 * Mail Services:: IMAP, POP3, SMTP, and all that.
7435 * Web Services:: Web servers.
7436 * Various Services:: Other services.
7437 @end menu
7438
7439 @node Base Services
7440 @subsubsection Base Services
7441
7442 The @code{(gnu services base)} module provides definitions for the basic
7443 services that one expects from the system. The services exported by
7444 this module are listed below.
7445
7446 @defvr {Scheme Variable} %base-services
7447 This variable contains a list of basic services (@pxref{Service Types
7448 and Services}, for more information on service objects) one would
7449 expect from the system: a login service (mingetty) on each tty, syslogd,
7450 the libc name service cache daemon (nscd), the udev device manager, and
7451 more.
7452
7453 This is the default value of the @code{services} field of
7454 @code{operating-system} declarations. Usually, when customizing a
7455 system, you will want to append services to @var{%base-services}, like
7456 this:
7457
7458 @example
7459 (cons* (avahi-service) (lsh-service) %base-services)
7460 @end example
7461 @end defvr
7462
7463 @deffn {Scheme Procedure} host-name-service @var{name}
7464 Return a service that sets the host name to @var{name}.
7465 @end deffn
7466
7467 @deffn {Scheme Procedure} mingetty-service @var{config}
7468 Return a service to run mingetty according to @var{config}, a
7469 @code{<mingetty-configuration>} object, which specifies the tty to run, among
7470 other things.
7471 @end deffn
7472
7473 @deftp {Data Type} mingetty-configuration
7474 This is the data type representing the configuration of Mingetty, which
7475 implements console log-in.
7476
7477 @table @asis
7478
7479 @item @code{tty}
7480 The name of the console this Mingetty runs on---e.g., @code{"tty1"}.
7481
7482 @item @code{motd}
7483 A file-like object containing the ``message of the day''.
7484
7485 @item @code{auto-login} (default: @code{#f})
7486 When true, this field must be a string denoting the user name under
7487 which the system automatically logs in. When it is @code{#f}, a
7488 user name and password must be entered to log in.
7489
7490 @item @code{login-program} (default: @code{#f})
7491 This must be either @code{#f}, in which case the default log-in program
7492 is used (@command{login} from the Shadow tool suite), or a gexp denoting
7493 the name of the log-in program.
7494
7495 @item @code{login-pause?} (default: @code{#f})
7496 When set to @code{#t} in conjunction with @var{auto-login}, the user
7497 will have to press a key before the log-in shell is launched.
7498
7499 @item @code{mingetty} (default: @var{mingetty})
7500 The Mingetty package to use.
7501
7502 @end table
7503 @end deftp
7504
7505 @cindex name service cache daemon
7506 @cindex nscd
7507 @deffn {Scheme Procedure} nscd-service [@var{config}] [#:glibc glibc] @
7508 [#:name-services '()]
7509 Return a service that runs the libc name service cache daemon (nscd) with the
7510 given @var{config}---an @code{<nscd-configuration>} object. @xref{Name
7511 Service Switch}, for an example.
7512 @end deffn
7513
7514 @defvr {Scheme Variable} %nscd-default-configuration
7515 This is the default @code{<nscd-configuration>} value (see below) used
7516 by @code{nscd-service}. It uses the caches defined by
7517 @var{%nscd-default-caches}; see below.
7518 @end defvr
7519
7520 @deftp {Data Type} nscd-configuration
7521 This is the data type representing the name service cache daemon (nscd)
7522 configuration.
7523
7524 @table @asis
7525
7526 @item @code{name-services} (default: @code{'()})
7527 List of packages denoting @dfn{name services} that must be visible to
7528 the nscd---e.g., @code{(list @var{nss-mdns})}.
7529
7530 @item @code{glibc} (default: @var{glibc})
7531 Package object denoting the GNU C Library providing the @command{nscd}
7532 command.
7533
7534 @item @code{log-file} (default: @code{"/var/log/nscd.log"})
7535 Name of the nscd log file. This is where debugging output goes when
7536 @code{debug-level} is strictly positive.
7537
7538 @item @code{debug-level} (default: @code{0})
7539 Integer denoting the debugging levels. Higher numbers mean that more
7540 debugging output is logged.
7541
7542 @item @code{caches} (default: @var{%nscd-default-caches})
7543 List of @code{<nscd-cache>} objects denoting things to be cached; see
7544 below.
7545
7546 @end table
7547 @end deftp
7548
7549 @deftp {Data Type} nscd-cache
7550 Data type representing a cache database of nscd and its parameters.
7551
7552 @table @asis
7553
7554 @item @code{database}
7555 This is a symbol representing the name of the database to be cached.
7556 Valid values are @code{passwd}, @code{group}, @code{hosts}, and
7557 @code{services}, which designate the corresponding NSS database
7558 (@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
7559
7560 @item @code{positive-time-to-live}
7561 @itemx @code{negative-time-to-live} (default: @code{20})
7562 A number representing the number of seconds during which a positive or
7563 negative lookup result remains in cache.
7564
7565 @item @code{check-files?} (default: @code{#t})
7566 Whether to check for updates of the files corresponding to
7567 @var{database}.
7568
7569 For instance, when @var{database} is @code{hosts}, setting this flag
7570 instructs nscd to check for updates in @file{/etc/hosts} and to take
7571 them into account.
7572
7573 @item @code{persistent?} (default: @code{#t})
7574 Whether the cache should be stored persistently on disk.
7575
7576 @item @code{shared?} (default: @code{#t})
7577 Whether the cache should be shared among users.
7578
7579 @item @code{max-database-size} (default: 32@tie{}MiB)
7580 Maximum size in bytes of the database cache.
7581
7582 @c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
7583 @c settings, so leave them out.
7584
7585 @end table
7586 @end deftp
7587
7588 @defvr {Scheme Variable} %nscd-default-caches
7589 List of @code{<nscd-cache>} objects used by default by
7590 @code{nscd-configuration} (see above).
7591
7592 It enables persistent and aggressive caching of service and host name
7593 lookups. The latter provides better host name lookup performance,
7594 resilience in the face of unreliable name servers, and also better
7595 privacy---often the result of host name lookups is in local cache, so
7596 external name servers do not even need to be queried.
7597 @end defvr
7598
7599
7600 @deffn {Scheme Procedure} syslog-service @
7601 [#:config-file @var{%default-syslog.conf}]
7602 Return a service that runs @command{syslogd}. If the configuration file
7603 name @var{config-file} is not specified, use some reasonable default
7604 settings.
7605
7606 @xref{syslogd invocation,,, inetutils, GNU Inetutils}, for more
7607 information on the configuration file syntax.
7608 @end deffn
7609
7610 @anchor{guix-configuration-type}
7611 @deftp {Data Type} guix-configuration
7612 This data type represents the configuration of the Guix build daemon.
7613 @xref{Invoking guix-daemon}, for more information.
7614
7615 @table @asis
7616 @item @code{guix} (default: @var{guix})
7617 The Guix package to use.
7618
7619 @item @code{build-group} (default: @code{"guixbuild"})
7620 Name of the group for build user accounts.
7621
7622 @item @code{build-accounts} (default: @code{10})
7623 Number of build user accounts to create.
7624
7625 @item @code{authorize-key?} (default: @code{#t})
7626 Whether to authorize the substitute key for @code{hydra.gnu.org}
7627 (@pxref{Substitutes}).
7628
7629 @item @code{use-substitutes?} (default: @code{#t})
7630 Whether to use substitutes.
7631
7632 @item @code{substitute-urls} (default: @var{%default-substitute-urls})
7633 The list of URLs where to look for substitutes by default.
7634
7635 @item @code{extra-options} (default: @code{'()})
7636 List of extra command-line options for @command{guix-daemon}.
7637
7638 @item @code{lsof} (default: @var{lsof})
7639 @itemx @code{lsh} (default: @var{lsh})
7640 The lsof and lsh packages to use.
7641
7642 @end table
7643 @end deftp
7644
7645 @deffn {Scheme Procedure} guix-service @var{config}
7646 Return a service that runs the Guix build daemon according to
7647 @var{config}.
7648 @end deffn
7649
7650 @deffn {Scheme Procedure} udev-service [#:udev udev]
7651 Run @var{udev}, which populates the @file{/dev} directory dynamically.
7652 @end deffn
7653
7654 @deffn {Scheme Procedure} urandom-seed-service @var{#f}
7655 Save some entropy in @var{%random-seed-file} to seed @file{/dev/urandom}
7656 when rebooting.
7657 @end deffn
7658
7659 @defvr {Scheme Variable} %random-seed-file
7660 This is the name of the file where some random bytes are saved by
7661 @var{urandom-seed-service} to seed @file{/dev/urandom} when rebooting.
7662 It defaults to @file{/var/lib/random-seed}.
7663 @end defvr
7664
7665 @deffn {Scheme Procedure} console-keymap-service @var{files} ...
7666 @cindex keyboard layout
7667 Return a service to load console keymaps from @var{files} using
7668 @command{loadkeys} command. Most likely, you want to load some default
7669 keymap, which can be done like this:
7670
7671 @example
7672 (console-keymap-service "dvorak")
7673 @end example
7674
7675 Or, for example, for a Swedish keyboard, you may need to combine
7676 the following keymaps:
7677 @example
7678 (console-keymap-service "se-lat6" "se-fi-lat6")
7679 @end example
7680
7681 Also you can specify a full file name (or file names) of your keymap(s).
7682 See @code{man loadkeys} for details.
7683
7684 @end deffn
7685
7686 @deffn {Scheme Procedure} gpm-service [#:gpm @var{gpm}] @
7687 [#:options]
7688 Run @var{gpm}, the general-purpose mouse daemon, with the given
7689 command-line @var{options}. GPM allows users to use the mouse in the console,
7690 notably to select, copy, and paste text. The default value of @var{options}
7691 uses the @code{ps2} protocol, which works for both USB and PS/2 mice.
7692
7693 This service is not part of @var{%base-services}.
7694 @end deffn
7695
7696 @anchor{guix-publish-service}
7697 @deffn {Scheme Procedure} guix-publish-service [#:guix @var{guix}] @
7698 [#:port 80] [#:host "localhost"]
7699 Return a service that runs @command{guix publish} listening on @var{host}
7700 and @var{port} (@pxref{Invoking guix publish}).
7701
7702 This assumes that @file{/etc/guix} already contains a signing key pair as
7703 created by @command{guix archive --generate-key} (@pxref{Invoking guix
7704 archive}). If that is not the case, the service will fail to start.
7705 @end deffn
7706
7707 @anchor{rngd-service}
7708 @deffn {Scheme Procedure} rngd-service [#:rng-tools @var{rng-tools}] @
7709 [#:device "/dev/hwrng"]
7710 Return a service that runs the @command{rngd} program from @var{rng-tools}
7711 to add @var{device} to the kernel's entropy pool. The service will fail if
7712 @var{device} does not exist.
7713 @end deffn
7714
7715 @anchor{pam-limits-service}
7716 @cindex session limits
7717 @cindex ulimit
7718 @cindex priority
7719 @deffn {Scheme Procedure} pam-limits-service [#:limits @var{limits}]
7720
7721 Return a service that installs a configuration file for the
7722 @uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html,
7723 @code{pam_limits} module}. The procedure optionally takes a list of
7724 @code{pam-limits-entry} values, which can be used to specify
7725 @code{ulimit} limits and nice priority limits to user sessions.
7726
7727 The following limits definition sets two hard and soft limits for all
7728 login sessions of users in the @code{realtime} group:
7729
7730 @example
7731 (pam-limits-service
7732 (list
7733 (pam-limits-entry "@@realtime" 'both 'rtprio 99)
7734 (pam-limits-entry "@@realtime" 'both 'memlock 'unlimited)))
7735 @end example
7736
7737 The first entry increases the maximum realtime priority for
7738 non-privileged processes; the second entry lifts any restriction of the
7739 maximum address space that can be locked in memory. These settings are
7740 commonly used for real-time audio systems.
7741 @end deffn
7742
7743 @node Scheduled Job Execution
7744 @subsubsection Scheduled Job Execution
7745
7746 @cindex cron
7747 @cindex scheduling jobs
7748 The @code{(gnu services mcron)} module provides an interface to
7749 GNU@tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
7750 mcron, GNU@tie{}mcron}). GNU@tie{}mcron is similar to the traditional
7751 Unix @command{cron} daemon; the main difference is that it is
7752 implemented in Guile Scheme, which provides a lot of flexibility when
7753 specifying the scheduling of jobs and their actions.
7754
7755 The example below defines an operating system that runs the
7756 @command{updatedb} (@pxref{Invoking updatedb,,, find, Finding Files})
7757 and the @command{guix gc} commands (@pxref{Invoking guix gc}) daily, as
7758 well as the @command{mkid} command on behalf of an unprivileged user
7759 (@pxref{mkid invocation,,, idutils, ID Database Utilities}). It uses
7760 gexps to introduce job definitions that are passed to mcron
7761 (@pxref{G-Expressions}).
7762
7763 @lisp
7764 (use-modules (guix) (gnu) (gnu services mcron))
7765 (use-package-modules base idutils)
7766
7767 (define updatedb-job
7768 ;; Run 'updatedb' at 3AM every day. Here we write the
7769 ;; job's action as a Scheme procedure.
7770 #~(job '(next-hour '(3))
7771 (lambda ()
7772 (execl (string-append #$findutils "/bin/updatedb")
7773 "updatedb"
7774 "--prunepaths=/tmp /var/tmp /gnu/store"))))
7775
7776 (define garbage-collector-job
7777 ;; Collect garbage 5 minutes after midnight every day.
7778 ;; The job's action is a shell command.
7779 #~(job "5 0 * * *" ;Vixie cron syntax
7780 "guix gc -F 1G"))
7781
7782 (define idutils-jobs
7783 ;; Update the index database as user "charlie" at 12:15PM
7784 ;; and 19:15PM. This runs from the user's home directory.
7785 #~(job '(next-minute-from (next-hour '(12 19)) '(15))
7786 (string-append #$idutils "/bin/mkid src")
7787 #:user "charlie"))
7788
7789 (operating-system
7790 ;; @dots{}
7791 (services (cons (mcron-service (list garbage-collector-job
7792 updatedb-job
7793 idutils-job))
7794 %base-services)))
7795 @end lisp
7796
7797 @xref{Guile Syntax, mcron job specifications,, mcron, GNU@tie{}mcron},
7798 for more information on mcron job specifications. Below is the
7799 reference of the mcron service.
7800
7801 @deffn {Scheme Procedure} mcron-service @var{jobs} [#:mcron @var{mcron2}]
7802 Return an mcron service running @var{mcron} that schedules @var{jobs}, a
7803 list of gexps denoting mcron job specifications.
7804
7805 This is a shorthand for:
7806 @example
7807 (service mcron-service-type
7808 (mcron-configuration (mcron mcron) (jobs jobs)))
7809 @end example
7810 @end deffn
7811
7812 @defvr {Scheme Variable} mcron-service-type
7813 This is the type of the @code{mcron} service, whose value is an
7814 @code{mcron-configuration} object.
7815
7816 This service type can be the target of a service extension that provides
7817 it additional job specifications (@pxref{Service Composition}). In
7818 other words, it is possible to define services that provide addition
7819 mcron jobs to run.
7820 @end defvr
7821
7822 @deftp {Data Type} mcron-configuration
7823 Data type representing the configuration of mcron.
7824
7825 @table @asis
7826 @item @code{mcron} (default: @var{mcron2})
7827 The mcron package to use.
7828
7829 @item @code{jobs}
7830 This is a list of gexps (@pxref{G-Expressions}), where each gexp
7831 corresponds to an mcron job specification (@pxref{Syntax, mcron job
7832 specifications,, mcron, GNU@tie{}mcron}).
7833 @end table
7834 @end deftp
7835
7836
7837 @node Networking Services
7838 @subsubsection Networking Services
7839
7840 The @code{(gnu services networking)} module provides services to configure
7841 the network interface.
7842
7843 @cindex DHCP, networking service
7844 @deffn {Scheme Procedure} dhcp-client-service [#:dhcp @var{isc-dhcp}]
7845 Return a service that runs @var{dhcp}, a Dynamic Host Configuration
7846 Protocol (DHCP) client, on all the non-loopback network interfaces.
7847 @end deffn
7848
7849 @deffn {Scheme Procedure} static-networking-service @var{interface} @var{ip} @
7850 [#:gateway #f] [#:name-servers @code{'()}]
7851 Return a service that starts @var{interface} with address @var{ip}. If
7852 @var{gateway} is true, it must be a string specifying the default network
7853 gateway.
7854 @end deffn
7855
7856 @cindex wicd
7857 @cindex network management
7858 @deffn {Scheme Procedure} wicd-service [#:wicd @var{wicd}]
7859 Return a service that runs @url{https://launchpad.net/wicd,Wicd}, a network
7860 management daemon that aims to simplify wired and wireless networking.
7861
7862 This service adds the @var{wicd} package to the global profile, providing
7863 several commands to interact with the daemon and configure networking:
7864 @command{wicd-client}, a graphical user interface, and the @command{wicd-cli}
7865 and @command{wicd-curses} user interfaces.
7866 @end deffn
7867
7868 @cindex NetworkManager
7869 @deffn {Scheme Procedure} network-manager-service @
7870 [#:network-manager @var{network-manager}]
7871 Return a service that runs NetworkManager, a network connection manager
7872 attempting to keep network connectivity active when available.
7873 @end deffn
7874
7875 @cindex Connman
7876 @deffn {Scheme Procedure} connman-service @
7877 [#:connman @var{connman}]
7878 Return a service that runs @url{https://01.org/connman,Connman}, a network
7879 connection manager.
7880
7881 This service adds the @var{connman} package to the global profile, providing
7882 several the @command{connmanctl} command to interact with the daemon and
7883 configure networking."
7884 @end deffn
7885
7886 @deffn {Scheme Procedure} ntp-service [#:ntp @var{ntp}] @
7887 [#:name-service @var{%ntp-servers}]
7888 Return a service that runs the daemon from @var{ntp}, the
7889 @uref{http://www.ntp.org, Network Time Protocol package}. The daemon will
7890 keep the system clock synchronized with that of @var{servers}.
7891 @end deffn
7892
7893 @defvr {Scheme Variable} %ntp-servers
7894 List of host names used as the default NTP servers.
7895 @end defvr
7896
7897 @deffn {Scheme Procedure} tor-service [@var{config-file}] [#:tor @var{tor}]
7898 Return a service to run the @uref{https://torproject.org, Tor} anonymous
7899 networking daemon.
7900
7901 The daemon runs as the @code{tor} unprivileged user. It is passed
7902 @var{config-file}, a file-like object, with an additional @code{User tor} line
7903 and lines for hidden services added via @code{tor-hidden-service}. Run
7904 @command{man tor} for information about the configuration file.
7905 @end deffn
7906
7907 @cindex hidden service
7908 @deffn {Scheme Procedure} tor-hidden-service @var{name} @var{mapping}
7909 Define a new Tor @dfn{hidden service} called @var{name} and implementing
7910 @var{mapping}. @var{mapping} is a list of port/host tuples, such as:
7911
7912 @example
7913 '((22 "127.0.0.1:22")
7914 (80 "127.0.0.1:8080"))
7915 @end example
7916
7917 In this example, port 22 of the hidden service is mapped to local port 22, and
7918 port 80 is mapped to local port 8080.
7919
7920 This creates a @file{/var/lib/tor/hidden-services/@var{name}} directory, where
7921 the @file{hostname} file contains the @code{.onion} host name for the hidden
7922 service.
7923
7924 See @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, the Tor
7925 project's documentation} for more information.
7926 @end deffn
7927
7928 @deffn {Scheme Procedure} bitlbee-service [#:bitlbee bitlbee] @
7929 [#:interface "127.0.0.1"] [#:port 6667] @
7930 [#:extra-settings ""]
7931 Return a service that runs @url{http://bitlbee.org,BitlBee}, a daemon that
7932 acts as a gateway between IRC and chat networks.
7933
7934 The daemon will listen to the interface corresponding to the IP address
7935 specified in @var{interface}, on @var{port}. @code{127.0.0.1} means that only
7936 local clients can connect, whereas @code{0.0.0.0} means that connections can
7937 come from any networking interface.
7938
7939 In addition, @var{extra-settings} specifies a string to append to the
7940 configuration file.
7941 @end deffn
7942
7943 Furthermore, @code{(gnu services ssh)} provides the following services.
7944
7945 @deffn {Scheme Procedure} lsh-service [#:host-key "/etc/lsh/host-key"] @
7946 [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
7947 [#:allow-empty-passwords? #f] [#:root-login? #f] @
7948 [#:syslog-output? #t] [#:x11-forwarding? #t] @
7949 [#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
7950 [#:public-key-authentication? #t] [#:initialize? #t]
7951 Run the @command{lshd} program from @var{lsh} to listen on port @var{port-number}.
7952 @var{host-key} must designate a file containing the host key, and readable
7953 only by root.
7954
7955 When @var{daemonic?} is true, @command{lshd} will detach from the
7956 controlling terminal and log its output to syslogd, unless one sets
7957 @var{syslog-output?} to false. Obviously, it also makes lsh-service
7958 depend on existence of syslogd service. When @var{pid-file?} is true,
7959 @command{lshd} writes its PID to the file called @var{pid-file}.
7960
7961 When @var{initialize?} is true, automatically create the seed and host key
7962 upon service activation if they do not exist yet. This may take long and
7963 require interaction.
7964
7965 When @var{initialize?} is false, it is up to the user to initialize the
7966 randomness generator (@pxref{lsh-make-seed,,, lsh, LSH Manual}), and to create
7967 a key pair with the private key stored in file @var{host-key} (@pxref{lshd
7968 basics,,, lsh, LSH Manual}).
7969
7970 When @var{interfaces} is empty, lshd listens for connections on all the
7971 network interfaces; otherwise, @var{interfaces} must be a list of host names
7972 or addresses.
7973
7974 @var{allow-empty-passwords?} specifies whether to accept log-ins with empty
7975 passwords, and @var{root-login?} specifies whether to accept log-ins as
7976 root.
7977
7978 The other options should be self-descriptive.
7979 @end deffn
7980
7981 @deffn {Scheme Procedure} dropbear-service [@var{config}]
7982 Run the @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,Dropbear SSH
7983 daemon} with the given @var{config}, a @code{<dropbear-configuration>}
7984 object.
7985
7986 For example, to specify a Dropbear service listening on port 1234, add
7987 this call to the operating system's @code{services} field:
7988
7989 @example
7990 (dropbear-service (dropbear-configuration
7991 (port-number 1234)))
7992 @end example
7993 @end deffn
7994
7995 @deftp {Data Type} dropbear-configuration
7996 This data type represents the configuration of a Dropbear SSH daemon.
7997
7998 @table @asis
7999 @item @code{dropbear} (default: @var{dropbear})
8000 The Dropbear package to use.
8001
8002 @item @code{port-number} (default: 22)
8003 The TCP port where the daemon waits for incoming connections.
8004
8005 @item @code{syslog-output?} (default: @code{#t})
8006 Whether to enable syslog output.
8007
8008 @item @code{pid-file} (default: @code{"/var/run/dropbear.pid"})
8009 File name of the daemon's PID file.
8010
8011 @item @code{root-login?} (default: @code{#f})
8012 Whether to allow @code{root} logins.
8013
8014 @item @code{allow-empty-passwords?} (default: @code{#f})
8015 Whether to allow empty passwords.
8016
8017 @item @code{password-authentication?} (default: @code{#t})
8018 Whether to enable password-based authentication.
8019 @end table
8020 @end deftp
8021
8022 @defvr {Scheme Variable} %facebook-host-aliases
8023 This variable contains a string for use in @file{/etc/hosts}
8024 (@pxref{Host Names,,, libc, The GNU C Library Reference Manual}). Each
8025 line contains a entry that maps a known server name of the Facebook
8026 on-line service---e.g., @code{www.facebook.com}---to the local
8027 host---@code{127.0.0.1} or its IPv6 equivalent, @code{::1}.
8028
8029 This variable is typically used in the @code{hosts-file} field of an
8030 @code{operating-system} declaration (@pxref{operating-system Reference,
8031 @file{/etc/hosts}}):
8032
8033 @example
8034 (use-modules (gnu) (guix))
8035
8036 (operating-system
8037 (host-name "mymachine")
8038 ;; ...
8039 (hosts-file
8040 ;; Create a /etc/hosts file with aliases for "localhost"
8041 ;; and "mymachine", as well as for Facebook servers.
8042 (plain-file "hosts"
8043 (string-append (local-host-aliases host-name)
8044 %facebook-host-aliases))))
8045 @end example
8046
8047 This mechanism can prevent programs running locally, such as Web
8048 browsers, from accessing Facebook.
8049 @end defvr
8050
8051 The @code{(gnu services avahi)} provides the following definition.
8052
8053 @deffn {Scheme Procedure} avahi-service [#:avahi @var{avahi}] @
8054 [#:host-name #f] [#:publish? #t] [#:ipv4? #t] @
8055 [#:ipv6? #t] [#:wide-area? #f] @
8056 [#:domains-to-browse '()] [#:debug? #f]
8057 Return a service that runs @command{avahi-daemon}, a system-wide
8058 mDNS/DNS-SD responder that allows for service discovery and
8059 "zero-configuration" host name lookups (see @uref{http://avahi.org/}), and
8060 extends the name service cache daemon (nscd) so that it can resolve
8061 @code{.local} host names using
8062 @uref{http://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. Additionally,
8063 add the @var{avahi} package to the system profile so that commands such as
8064 @command{avahi-browse} are directly usable.
8065
8066 If @var{host-name} is different from @code{#f}, use that as the host name to
8067 publish for this machine; otherwise, use the machine's actual host name.
8068
8069 When @var{publish?} is true, publishing of host names and services is allowed;
8070 in particular, avahi-daemon will publish the machine's host name and IP
8071 address via mDNS on the local network.
8072
8073 When @var{wide-area?} is true, DNS-SD over unicast DNS is enabled.
8074
8075 Boolean values @var{ipv4?} and @var{ipv6?} determine whether to use IPv4/IPv6
8076 sockets.
8077 @end deffn
8078
8079
8080 @node X Window
8081 @subsubsection X Window
8082
8083 Support for the X Window graphical display system---specifically
8084 Xorg---is provided by the @code{(gnu services xorg)} module. Note that
8085 there is no @code{xorg-service} procedure. Instead, the X server is
8086 started by the @dfn{login manager}, currently SLiM.
8087
8088 @deffn {Scheme Procedure} slim-service [#:allow-empty-passwords? #f] @
8089 [#:auto-login? #f] [#:default-user ""] [#:startx] @
8090 [#:theme @var{%default-slim-theme}] @
8091 [#:theme-name @var{%default-slim-theme-name}]
8092 Return a service that spawns the SLiM graphical login manager, which in
8093 turn starts the X display server with @var{startx}, a command as returned by
8094 @code{xorg-start-command}.
8095
8096 @cindex X session
8097
8098 SLiM automatically looks for session types described by the @file{.desktop}
8099 files in @file{/run/current-system/profile/share/xsessions} and allows users
8100 to choose a session from the log-in screen using @kbd{F1}. Packages such as
8101 @var{xfce}, @var{sawfish}, and @var{ratpoison} provide @file{.desktop} files;
8102 adding them to the system-wide set of packages automatically makes them
8103 available at the log-in screen.
8104
8105 In addition, @file{~/.xsession} files are honored. When available,
8106 @file{~/.xsession} must be an executable that starts a window manager
8107 and/or other X clients.
8108
8109 When @var{allow-empty-passwords?} is true, allow logins with an empty
8110 password. When @var{auto-login?} is true, log in automatically as
8111 @var{default-user}.
8112
8113 If @var{theme} is @code{#f}, use the default log-in theme; otherwise
8114 @var{theme} must be a gexp denoting the name of a directory containing the
8115 theme to use. In that case, @var{theme-name} specifies the name of the
8116 theme.
8117 @end deffn
8118
8119 @defvr {Scheme Variable} %default-theme
8120 @defvrx {Scheme Variable} %default-theme-name
8121 The G-Expression denoting the default SLiM theme and its name.
8122 @end defvr
8123
8124 @deffn {Scheme Procedure} xorg-start-command [#:guile] @
8125 [#:configuration-file #f] [#:xorg-server @var{xorg-server}]
8126 Return a derivation that builds a @var{guile} script to start the X server
8127 from @var{xorg-server}. @var{configuration-file} is the server configuration
8128 file or a derivation that builds it; when omitted, the result of
8129 @code{xorg-configuration-file} is used.
8130
8131 Usually the X server is started by a login manager.
8132 @end deffn
8133
8134 @deffn {Scheme Procedure} xorg-configuration-file @
8135 [#:drivers '()] [#:resolutions '()] [#:extra-config '()]
8136 Return a configuration file for the Xorg server containing search paths for
8137 all the common drivers.
8138
8139 @var{drivers} must be either the empty list, in which case Xorg chooses a
8140 graphics driver automatically, or a list of driver names that will be tried in
8141 this order---e.g., @code{(\"modesetting\" \"vesa\")}.
8142
8143 Likewise, when @var{resolutions} is the empty list, Xorg chooses an
8144 appropriate screen resolution; otherwise, it must be a list of
8145 resolutions---e.g., @code{((1024 768) (640 480))}.
8146
8147 Last, @var{extra-config} is a list of strings or objects appended to the
8148 @code{text-file*} argument list. It is used to pass extra text to be added
8149 verbatim to the configuration file.
8150 @end deffn
8151
8152 @deffn {Scheme Procedure} screen-locker-service @var{package} [@var{name}]
8153 Add @var{package}, a package for a screen-locker or screen-saver whose
8154 command is @var{program}, to the set of setuid programs and add a PAM entry
8155 for it. For example:
8156
8157 @lisp
8158 (screen-locker-service xlockmore "xlock")
8159 @end lisp
8160
8161 makes the good ol' XlockMore usable.
8162 @end deffn
8163
8164
8165 @node Desktop Services
8166 @subsubsection Desktop Services
8167
8168 The @code{(gnu services desktop)} module provides services that are
8169 usually useful in the context of a ``desktop'' setup---that is, on a
8170 machine running a graphical display server, possibly with graphical user
8171 interfaces, etc. It also defines services that provide specific desktop
8172 environments like GNOME and XFCE.
8173
8174 To simplify things, the module defines a variable containing the set of
8175 services that users typically expect on a machine with a graphical
8176 environment and networking:
8177
8178 @defvr {Scheme Variable} %desktop-services
8179 This is a list of services that builds upon @var{%base-services} and
8180 adds or adjusts services for a typical ``desktop'' setup.
8181
8182 In particular, it adds a graphical login manager (@pxref{X Window,
8183 @code{slim-service}}), screen lockers,
8184 a network management tool (@pxref{Networking
8185 Services, @code{wicd-service}}), energy and color management services,
8186 the @code{elogind} login and seat manager, the Polkit privilege service,
8187 the GeoClue location service, an NTP client (@pxref{Networking
8188 Services}), the Avahi daemon, and has the name service switch service
8189 configured to be able to use @code{nss-mdns} (@pxref{Name Service
8190 Switch, mDNS}).
8191 @end defvr
8192
8193 The @var{%desktop-services} variable can be used as the @code{services}
8194 field of an @code{operating-system} declaration (@pxref{operating-system
8195 Reference, @code{services}}).
8196
8197 Additionally, the @code{gnome-desktop-service} and
8198 @code{xfce-desktop-service} procedures can add GNOME and/or XFCE to a
8199 system. To ``add GNOME'' means that system-level services like the
8200 backlight adjustment helpers and the power management utilities are
8201 added to the system, extending @code{polkit} and @code{dbus}
8202 appropriately, allowing GNOME to operate with elevated privileges on a
8203 limited number of special-purpose system interfaces. Additionally,
8204 adding a service made by @code{gnome-desktop-service} adds the GNOME
8205 metapackage to the system profile. Likewise, adding the XFCE service
8206 not only adds the @code{xfce} metapackage to the system profile, but it
8207 also gives the Thunar file manager the ability to open a ``root-mode''
8208 file management window, if the user authenticates using the
8209 administrator's password via the standard polkit graphical interface.
8210
8211 @deffn {Scheme Procedure} gnome-desktop-service
8212 Return a service that adds the @code{gnome} package to the system
8213 profile, and extends polkit with the actions from
8214 @code{gnome-settings-daemon}.
8215 @end deffn
8216
8217 @deffn {Scheme Procedure} xfce-desktop-service
8218 Return a service that adds the @code{xfce} package to the system profile,
8219 and extends polkit with the abilit for @code{thunar} to manipulate the
8220 file system as root from within a user session, after the user has
8221 authenticated with the administrator's password.
8222 @end deffn
8223
8224 Because the GNOME and XFCE desktop services pull in so many packages,
8225 the default @code{%desktop-services} variable doesn't include either of
8226 them by default. To add GNOME or XFCE, just @code{cons} them onto
8227 @code{%desktop-services} in the @code{services} field of your
8228 @code{operating-system}:
8229
8230 @example
8231 (use-modules (gnu))
8232 (use-service-modules desktop)
8233 (operating-system
8234 ...
8235 ;; cons* adds items to the list given as its last argument.
8236 (services (cons* (gnome-desktop-service)
8237 (xfce-desktop-service)
8238 %desktop-services))
8239 ...)
8240 @end example
8241
8242 These desktop environments will then be available as options in the
8243 graphical login window.
8244
8245 The actual service definitions included in @code{%desktop-services} and
8246 provided by @code{(gnu services dbus)} and @code{(gnu services desktop)}
8247 are described below.
8248
8249 @deffn {Scheme Procedure} dbus-service [#:dbus @var{dbus}] [#:services '()]
8250 Return a service that runs the ``system bus'', using @var{dbus}, with
8251 support for @var{services}.
8252
8253 @uref{http://dbus.freedesktop.org/, D-Bus} is an inter-process communication
8254 facility. Its system bus is used to allow system services to communicate
8255 and to be notified of system-wide events.
8256
8257 @var{services} must be a list of packages that provide an
8258 @file{etc/dbus-1/system.d} directory containing additional D-Bus configuration
8259 and policy files. For example, to allow avahi-daemon to use the system bus,
8260 @var{services} must be equal to @code{(list avahi)}.
8261 @end deffn
8262
8263 @deffn {Scheme Procedure} elogind-service [#:config @var{config}]
8264 Return a service that runs the @code{elogind} login and
8265 seat management daemon. @uref{https://github.com/andywingo/elogind,
8266 Elogind} exposes a D-Bus interface that can be used to know which users
8267 are logged in, know what kind of sessions they have open, suspend the
8268 system, inhibit system suspend, reboot the system, and other tasks.
8269
8270 Elogind handles most system-level power events for a computer, for
8271 example suspending the system when a lid is closed, or shutting it down
8272 when the power button is pressed.
8273
8274 The @var{config} keyword argument specifies the configuration for
8275 elogind, and should be the result of an @code{(elogind-configuration
8276 (@var{parameter} @var{value})...)} invocation. Available parameters and
8277 their default values are:
8278
8279 @table @code
8280 @item kill-user-processes?
8281 @code{#f}
8282 @item kill-only-users
8283 @code{()}
8284 @item kill-exclude-users
8285 @code{("root")}
8286 @item inhibit-delay-max-seconds
8287 @code{5}
8288 @item handle-power-key
8289 @code{poweroff}
8290 @item handle-suspend-key
8291 @code{suspend}
8292 @item handle-hibernate-key
8293 @code{hibernate}
8294 @item handle-lid-switch
8295 @code{suspend}
8296 @item handle-lid-switch-docked
8297 @code{ignore}
8298 @item power-key-ignore-inhibited?
8299 @code{#f}
8300 @item suspend-key-ignore-inhibited?
8301 @code{#f}
8302 @item hibernate-key-ignore-inhibited?
8303 @code{#f}
8304 @item lid-switch-ignore-inhibited?
8305 @code{#t}
8306 @item holdoff-timeout-seconds
8307 @code{30}
8308 @item idle-action
8309 @code{ignore}
8310 @item idle-action-seconds
8311 @code{(* 30 60)}
8312 @item runtime-directory-size-percent
8313 @code{10}
8314 @item runtime-directory-size
8315 @code{#f}
8316 @item remove-ipc?
8317 @code{#t}
8318 @item suspend-state
8319 @code{("mem" "standby" "freeze")}
8320 @item suspend-mode
8321 @code{()}
8322 @item hibernate-state
8323 @code{("disk")}
8324 @item hibernate-mode
8325 @code{("platform" "shutdown")}
8326 @item hybrid-sleep-state
8327 @code{("disk")}
8328 @item hybrid-sleep-mode
8329 @code{("suspend" "platform" "shutdown")}
8330 @end table
8331 @end deffn
8332
8333 @deffn {Scheme Procedure} polkit-service @
8334 [#:polkit @var{polkit}]
8335 Return a service that runs the
8336 @uref{http://www.freedesktop.org/wiki/Software/polkit/, Polkit privilege
8337 management service}, which allows system administrators to grant access to
8338 privileged operations in a structured way. By querying the Polkit service, a
8339 privileged system component can know when it should grant additional
8340 capabilities to ordinary users. For example, an ordinary user can be granted
8341 the capability to suspend the system if the user is logged in locally.
8342 @end deffn
8343
8344 @deffn {Scheme Procedure} upower-service [#:upower @var{upower}] @
8345 [#:watts-up-pro? #f] @
8346 [#:poll-batteries? #t] @
8347 [#:ignore-lid? #f] @
8348 [#:use-percentage-for-policy? #f] @
8349 [#:percentage-low 10] @
8350 [#:percentage-critical 3] @
8351 [#:percentage-action 2] @
8352 [#:time-low 1200] @
8353 [#:time-critical 300] @
8354 [#:time-action 120] @
8355 [#:critical-power-action 'hybrid-sleep]
8356 Return a service that runs @uref{http://upower.freedesktop.org/,
8357 @command{upowerd}}, a system-wide monitor for power consumption and battery
8358 levels, with the given configuration settings. It implements the
8359 @code{org.freedesktop.UPower} D-Bus interface, and is notably used by
8360 GNOME.
8361 @end deffn
8362
8363 @deffn {Scheme Procedure} udisks-service [#:udisks @var{udisks}]
8364 Return a service for @uref{http://udisks.freedesktop.org/docs/latest/,
8365 UDisks}, a @dfn{disk management} daemon that provides user interfaces with
8366 notifications and ways to mount/unmount disks. Programs that talk to UDisks
8367 include the @command{udisksctl} command, part of UDisks, and GNOME Disks.
8368 @end deffn
8369
8370 @deffn {Scheme Procedure} colord-service [#:colord @var{colord}]
8371 Return a service that runs @command{colord}, a system service with a D-Bus
8372 interface to manage the color profiles of input and output devices such as
8373 screens and scanners. It is notably used by the GNOME Color Manager graphical
8374 tool. See @uref{http://www.freedesktop.org/software/colord/, the colord web
8375 site} for more information.
8376 @end deffn
8377
8378 @deffn {Scheme Procedure} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()]
8379 Return a configuration allowing an application to access GeoClue
8380 location data. @var{name} is the Desktop ID of the application, without
8381 the @code{.desktop} part. If @var{allowed?} is true, the application
8382 will have access to location information by default. The boolean
8383 @var{system?} value indicates whether an application is a system component
8384 or not. Finally @var{users} is a list of UIDs of all users for which
8385 this application is allowed location info access. An empty users list
8386 means that all users are allowed.
8387 @end deffn
8388
8389 @defvr {Scheme Variable} %standard-geoclue-applications
8390 The standard list of well-known GeoClue application configurations,
8391 granting authority to the GNOME date-and-time utility to ask for the
8392 current location in order to set the time zone, and allowing the
8393 IceCat and Epiphany web browsers to request location information.
8394 IceCat and Epiphany both query the user before allowing a web page to
8395 know the user's location.
8396 @end defvr
8397
8398 @deffn {Scheme Procedure} geoclue-service [#:colord @var{colord}] @
8399 [#:whitelist '()] @
8400 [#:wifi-geolocation-url "https://location.services.mozilla.com/v1/geolocate?key=geoclue"] @
8401 [#:submit-data? #f]
8402 [#:wifi-submission-url "https://location.services.mozilla.com/v1/submit?key=geoclue"] @
8403 [#:submission-nick "geoclue"] @
8404 [#:applications %standard-geoclue-applications]
8405 Return a service that runs the GeoClue location service. This service
8406 provides a D-Bus interface to allow applications to request access to a
8407 user's physical location, and optionally to add information to online
8408 location databases. See
8409 @uref{https://wiki.freedesktop.org/www/Software/GeoClue/, the GeoClue
8410 web site} for more information.
8411 @end deffn
8412
8413 @deffn {Scheme Procedure} bluetooth-service [#:bluez @var{bluez}]
8414 Return a service that runs the @command{bluetoothd} daemon, which manages
8415 all the Bluetooth devices and provides a number of D-Bus interfaces.
8416
8417 Users need to be in the @code{lp} group to access the D-Bus service.
8418 @end deffn
8419
8420 @node Database Services
8421 @subsubsection Database Services
8422
8423 The @code{(gnu services databases)} module provides the following services.
8424
8425 @deffn {Scheme Procedure} postgresql-service [#:postgresql postgresql] @
8426 [#:config-file] [#:data-directory ``/var/lib/postgresql/data'']
8427 Return a service that runs @var{postgresql}, the PostgreSQL database
8428 server.
8429
8430 The PostgreSQL daemon loads its runtime configuration from
8431 @var{config-file} and stores the database cluster in
8432 @var{data-directory}.
8433 @end deffn
8434
8435 @deffn {Scheme Procedure} mysql-service [#:config (mysql-configuration)]
8436 Return a service that runs @command{mysqld}, the MySQL or MariaDB
8437 database server.
8438
8439 The optional @var{config} argument specifies the configuration for
8440 @command{mysqld}, which should be a @code{<mysql-configuraiton>} object.
8441 @end deffn
8442
8443 @deftp {Data Type} mysql-configuration
8444 Data type representing the configuration of @var{mysql-service}.
8445
8446 @table @asis
8447 @item @code{mysql} (default: @var{mariadb})
8448 Package object of the MySQL database server, can be either @var{mariadb}
8449 or @var{mysql}.
8450
8451 For MySQL, a temorary root password will be displayed at activation time.
8452 For MariaDB, the root password is empty.
8453 @end table
8454 @end deftp
8455
8456 @node Mail Services
8457 @subsubsection Mail Services
8458
8459 The @code{(gnu services mail)} module provides Guix service definitions
8460 for mail services. Currently the only implemented service is Dovecot,
8461 an IMAP, POP3, and LMTP server.
8462
8463 Guix does not yet have a mail transfer agent (MTA), although for some
8464 lightweight purposes the @code{esmtp} relay-only MTA may suffice. Help
8465 is needed to properly integrate a full MTA, such as Postfix. Patches
8466 welcome!
8467
8468 To add an IMAP/POP3 server to a GuixSD system, add a
8469 @code{dovecot-service} to the operating system definition:
8470
8471 @deffn {Scheme Procedure} dovecot-service [#:config (dovecot-configuration)]
8472 Return a service that runs the Dovecot IMAP/POP3/LMTP mail server.
8473 @end deffn
8474
8475 By default, Dovecot does not need much configuration; the default
8476 configuration object created by @code{(dovecot-configuration)} will
8477 suffice if your mail is delivered to @code{~/Maildir}. A self-signed
8478 certificate will be generated for TLS-protected connections, though
8479 Dovecot will also listen on cleartext ports by default. There are a
8480 number of options, though, which mail administrators might need to change,
8481 and as is the case with other services, Guix allows the system
8482 administrator to specify these parameters via a uniform Scheme interface.
8483
8484 For example, to specify that mail is located at @code{maildir~/.mail},
8485 one would instantiate the Dovecot service like this:
8486
8487 @example
8488 (dovecot-service #:config
8489 (dovecot-configuration
8490 (mail-location "maildir:~/.mail")))
8491 @end example
8492
8493 The available configuration parameters follow. Each parameter
8494 definition is preceded by its type; for example, @samp{string-list foo}
8495 indicates that the @code{foo} parameter should be specified as a list of
8496 strings. There is also a way to specify the configuration as a string,
8497 if you have an old @code{dovecot.conf} file that you want to port over
8498 from some other system; see the end for more details.
8499
8500 @c The following documentation was initially generated by
8501 @c (generate-documentation) in (gnu services mail). Manually maintained
8502 @c documentation is better, so we shouldn't hesitate to edit below as
8503 @c needed. However if the change you want to make to this documentation
8504 @c can be done in an automated way, it's probably easier to change
8505 @c (generate-documentation) than to make it below and have to deal with
8506 @c the churn as dovecot updates.
8507
8508 Available @code{dovecot-configuration} fields are:
8509
8510 @deftypevr {@code{dovecot-configuration} parameter} package dovecot
8511 The dovecot package.
8512 @end deftypevr
8513
8514 @deftypevr {@code{dovecot-configuration} parameter} comma-separated-string-list listen
8515 A list of IPs or hosts where to listen for connections. @samp{*}
8516 listens on all IPv4 interfaces, @samp{::} listens on all IPv6
8517 interfaces. If you want to specify non-default ports or anything more
8518 complex, customize the address and port fields of the
8519 @samp{inet-listener} of the specific services you are interested in.
8520 @end deftypevr
8521
8522 @deftypevr {@code{dovecot-configuration} parameter} protocol-configuration-list protocols
8523 List of protocols we want to serve. Available protocols include
8524 @samp{imap}, @samp{pop3}, and @samp{lmtp}.
8525
8526 Available @code{protocol-configuration} fields are:
8527
8528 @deftypevr {@code{protocol-configuration} parameter} string name
8529 The name of the protocol.
8530 @end deftypevr
8531
8532 @deftypevr {@code{protocol-configuration} parameter} string auth-socket-path
8533 UNIX socket path to the master authentication server to find users.
8534 This is used by imap (for shared users) and lda.
8535 It defaults to @samp{"/var/run/dovecot/auth-userdb"}.
8536 @end deftypevr
8537
8538 @deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins
8539 Space separated list of plugins to load.
8540 @end deftypevr
8541
8542 @deftypevr {@code{protocol-configuration} parameter} non-negative-integer mail-max-userip-connections
8543 Maximum number of IMAP connections allowed for a user from each IP
8544 address. NOTE: The username is compared case-sensitively.
8545 Defaults to @samp{10}.
8546 @end deftypevr
8547
8548 @end deftypevr
8549
8550 @deftypevr {@code{dovecot-configuration} parameter} service-configuration-list services
8551 List of services to enable. Available services include @samp{imap},
8552 @samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}, and
8553 @samp{lmtp}.
8554
8555 Available @code{service-configuration} fields are:
8556
8557 @deftypevr {@code{service-configuration} parameter} string kind
8558 The service kind. Valid values include @code{director},
8559 @code{imap-login}, @code{pop3-login}, @code{lmtp}, @code{imap},
8560 @code{pop3}, @code{auth}, @code{auth-worker}, @code{dict},
8561 @code{tcpwrap}, @code{quota-warning}, or anything else.
8562 @end deftypevr
8563
8564 @deftypevr {@code{service-configuration} parameter} listener-configuration-list listeners
8565 Listeners for the service. A listener is either a
8566 @code{unix-listener-configuration}, a @code{fifo-listener-configuration}, or
8567 an @code{inet-listener-configuration}.
8568 Defaults to @samp{()}.
8569
8570 Available @code{unix-listener-configuration} fields are:
8571
8572 @deftypevr {@code{unix-listener-configuration} parameter} file-name path
8573 The file name on which to listen.
8574 @end deftypevr
8575
8576 @deftypevr {@code{unix-listener-configuration} parameter} string mode
8577 The access mode for the socket.
8578 Defaults to @samp{"0600"}.
8579 @end deftypevr
8580
8581 @deftypevr {@code{unix-listener-configuration} parameter} string user
8582 The user to own the socket.
8583 Defaults to @samp{""}.
8584 @end deftypevr
8585
8586 @deftypevr {@code{unix-listener-configuration} parameter} string group
8587 The group to own the socket.
8588 Defaults to @samp{""}.
8589 @end deftypevr
8590
8591
8592 Available @code{fifo-listener-configuration} fields are:
8593
8594 @deftypevr {@code{fifo-listener-configuration} parameter} file-name path
8595 The file name on which to listen.
8596 @end deftypevr
8597
8598 @deftypevr {@code{fifo-listener-configuration} parameter} string mode
8599 The access mode for the socket.
8600 Defaults to @samp{"0600"}.
8601 @end deftypevr
8602
8603 @deftypevr {@code{fifo-listener-configuration} parameter} string user
8604 The user to own the socket.
8605 Defaults to @samp{""}.
8606 @end deftypevr
8607
8608 @deftypevr {@code{fifo-listener-configuration} parameter} string group
8609 The group to own the socket.
8610 Defaults to @samp{""}.
8611 @end deftypevr
8612
8613
8614 Available @code{inet-listener-configuration} fields are:
8615
8616 @deftypevr {@code{inet-listener-configuration} parameter} string protocol
8617 The protocol to listen for.
8618 @end deftypevr
8619
8620 @deftypevr {@code{inet-listener-configuration} parameter} string address
8621 The address on which to listen, or empty for all addresses.
8622 Defaults to @samp{""}.
8623 @end deftypevr
8624
8625 @deftypevr {@code{inet-listener-configuration} parameter} non-negative-integer port
8626 The port on which to listen.
8627 @end deftypevr
8628
8629 @deftypevr {@code{inet-listener-configuration} parameter} boolean ssl?
8630 Whether to use SSL for this service; @samp{yes}, @samp{no}, or
8631 @samp{required}.
8632 Defaults to @samp{#t}.
8633 @end deftypevr
8634
8635 @end deftypevr
8636
8637 @deftypevr {@code{service-configuration} parameter} non-negative-integer service-count
8638 Number of connections to handle before starting a new process.
8639 Typically the only useful values are 0 (unlimited) or 1. 1 is more
8640 secure, but 0 is faster. <doc/wiki/LoginProcess.txt>.
8641 Defaults to @samp{1}.
8642 @end deftypevr
8643
8644 @deftypevr {@code{service-configuration} parameter} non-negative-integer process-min-avail
8645 Number of processes to always keep waiting for more connections.
8646 Defaults to @samp{0}.
8647 @end deftypevr
8648
8649 @deftypevr {@code{service-configuration} parameter} non-negative-integer vsz-limit
8650 If you set @samp{service-count 0}, you probably need to grow
8651 this.
8652 Defaults to @samp{256000000}.
8653 @end deftypevr
8654
8655 @end deftypevr
8656
8657 @deftypevr {@code{dovecot-configuration} parameter} dict-configuration dict
8658 Dict configuration, as created by the @code{dict-configuration}
8659 constructor.
8660
8661 Available @code{dict-configuration} fields are:
8662
8663 @deftypevr {@code{dict-configuration} parameter} free-form-fields entries
8664 A list of key-value pairs that this dict should hold.
8665 Defaults to @samp{()}.
8666 @end deftypevr
8667
8668 @end deftypevr
8669
8670 @deftypevr {@code{dovecot-configuration} parameter} passdb-configuration-list passdbs
8671 A list of passdb configurations, each one created by the
8672 @code{passdb-configuration} constructor.
8673
8674 Available @code{passdb-configuration} fields are:
8675
8676 @deftypevr {@code{passdb-configuration} parameter} string driver
8677 The driver that the passdb should use. Valid values include
8678 @samp{pam}, @samp{passwd}, @samp{shadow}, @samp{bsdauth}, and
8679 @samp{static}.
8680 Defaults to @samp{"pam"}.
8681 @end deftypevr
8682
8683 @deftypevr {@code{passdb-configuration} parameter} free-form-args args
8684 A list of key-value args to the passdb driver.
8685 Defaults to @samp{()}.
8686 @end deftypevr
8687
8688 @end deftypevr
8689
8690 @deftypevr {@code{dovecot-configuration} parameter} userdb-configuration-list userdbs
8691 List of userdb configurations, each one created by the
8692 @code{userdb-configuration} constructor.
8693
8694 Available @code{userdb-configuration} fields are:
8695
8696 @deftypevr {@code{userdb-configuration} parameter} string driver
8697 The driver that the userdb should use. Valid values include
8698 @samp{passwd} and @samp{static}.
8699 Defaults to @samp{"passwd"}.
8700 @end deftypevr
8701
8702 @deftypevr {@code{userdb-configuration} parameter} free-form-args args
8703 A list of key-value args to the userdb driver.
8704 Defaults to @samp{()}.
8705 @end deftypevr
8706
8707 @deftypevr {@code{userdb-configuration} parameter} free-form-args override-fields
8708 Override fields from passwd.
8709 Defaults to @samp{()}.
8710 @end deftypevr
8711
8712 @end deftypevr
8713
8714 @deftypevr {@code{dovecot-configuration} parameter} plugin-configuration plugin-configuration
8715 Plug-in configuration, created by the @code{plugin-configuration}
8716 constructor.
8717 @end deftypevr
8718
8719 @deftypevr {@code{dovecot-configuration} parameter} list-of-namespace-configuration namespaces
8720 List of namespaces. Each item in the list is created by the
8721 @code{namespace-configuration} constructor.
8722
8723 Available @code{namespace-configuration} fields are:
8724
8725 @deftypevr {@code{namespace-configuration} parameter} string name
8726 Name for this namespace.
8727 @end deftypevr
8728
8729 @deftypevr {@code{namespace-configuration} parameter} string type
8730 Namespace type: @samp{private}, @samp{shared} or @samp{public}.
8731 Defaults to @samp{"private"}.
8732 @end deftypevr
8733
8734 @deftypevr {@code{namespace-configuration} parameter} string separator
8735 Hierarchy separator to use. You should use the same separator for
8736 all namespaces or some clients get confused. @samp{/} is usually a good
8737 one. The default however depends on the underlying mail storage
8738 format.
8739 Defaults to @samp{""}.
8740 @end deftypevr
8741
8742 @deftypevr {@code{namespace-configuration} parameter} string prefix
8743 Prefix required to access this namespace. This needs to be
8744 different for all namespaces. For example @samp{Public/}.
8745 Defaults to @samp{""}.
8746 @end deftypevr
8747
8748 @deftypevr {@code{namespace-configuration} parameter} string location
8749 Physical location of the mailbox. This is in the same format as
8750 mail_location, which is also the default for it.
8751 Defaults to @samp{""}.
8752 @end deftypevr
8753
8754 @deftypevr {@code{namespace-configuration} parameter} boolean inbox?
8755 There can be only one INBOX, and this setting defines which
8756 namespace has it.
8757 Defaults to @samp{#f}.
8758 @end deftypevr
8759
8760 @deftypevr {@code{namespace-configuration} parameter} boolean hidden?
8761 If namespace is hidden, it's not advertised to clients via NAMESPACE
8762 extension. You'll most likely also want to set @samp{list? #f}. This is mostly
8763 useful when converting from another server with different namespaces
8764 which you want to deprecate but still keep working. For example you can
8765 create hidden namespaces with prefixes @samp{~/mail/}, @samp{~%u/mail/}
8766 and @samp{mail/}.
8767 Defaults to @samp{#f}.
8768 @end deftypevr
8769
8770 @deftypevr {@code{namespace-configuration} parameter} boolean list?
8771 Show the mailboxes under this namespace with the LIST command. This
8772 makes the namespace visible for clients that do not support the NAMESPACE
8773 extension. The special @code{children} value lists child mailboxes, but
8774 hides the namespace prefix.
8775 Defaults to @samp{#t}.
8776 @end deftypevr
8777
8778 @deftypevr {@code{namespace-configuration} parameter} boolean subscriptions?
8779 Namespace handles its own subscriptions. If set to @code{#f}, the
8780 parent namespace handles them. The empty prefix should always have this
8781 as @code{#t}).
8782 Defaults to @samp{#t}.
8783 @end deftypevr
8784
8785 @deftypevr {@code{namespace-configuration} parameter} mailbox-configuration-list mailboxes
8786 List of predefined mailboxes in this namespace.
8787 Defaults to @samp{()}.
8788
8789 Available @code{mailbox-configuration} fields are:
8790
8791 @deftypevr {@code{mailbox-configuration} parameter} string name
8792 Name for this mailbox.
8793 @end deftypevr
8794
8795 @deftypevr {@code{mailbox-configuration} parameter} string auto
8796 @samp{create} will automatically create this mailbox.
8797 @samp{subscribe} will both create and subscribe to the mailbox.
8798 Defaults to @samp{"no"}.
8799 @end deftypevr
8800
8801 @deftypevr {@code{mailbox-configuration} parameter} space-separated-string-list special-use
8802 List of IMAP @code{SPECIAL-USE} attributes as specified by RFC 6154.
8803 Valid values are @code{\All}, @code{\Archive}, @code{\Drafts},
8804 @code{\Flagged}, @code{\Junk}, @code{\Sent}, and @code{\Trash}.
8805 Defaults to @samp{()}.
8806 @end deftypevr
8807
8808 @end deftypevr
8809
8810 @end deftypevr
8811
8812 @deftypevr {@code{dovecot-configuration} parameter} file-name base-dir
8813 Base directory where to store runtime data.
8814 Defaults to @samp{"/var/run/dovecot/"}.
8815 @end deftypevr
8816
8817 @deftypevr {@code{dovecot-configuration} parameter} string login-greeting
8818 Greeting message for clients.
8819 Defaults to @samp{"Dovecot ready."}.
8820 @end deftypevr
8821
8822 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-trusted-networks
8823 List of trusted network ranges. Connections from these IPs are
8824 allowed to override their IP addresses and ports (for logging and for
8825 authentication checks). @samp{disable-plaintext-auth} is also ignored
8826 for these networks. Typically you would specify your IMAP proxy servers
8827 here.
8828 Defaults to @samp{()}.
8829 @end deftypevr
8830
8831 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-access-sockets
8832 List of login access check sockets (e.g. tcpwrap).
8833 Defaults to @samp{()}.
8834 @end deftypevr
8835
8836 @deftypevr {@code{dovecot-configuration} parameter} boolean verbose-proctitle?
8837 Show more verbose process titles (in ps). Currently shows user name
8838 and IP address. Useful for seeing who is actually using the IMAP
8839 processes (e.g. shared mailboxes or if the same uid is used for multiple
8840 accounts).
8841 Defaults to @samp{#f}.
8842 @end deftypevr
8843
8844 @deftypevr {@code{dovecot-configuration} parameter} boolean shutdown-clients?
8845 Should all processes be killed when Dovecot master process shuts down.
8846 Setting this to @code{#f} means that Dovecot can be upgraded without
8847 forcing existing client connections to close (although that could also
8848 be a problem if the upgrade is e.g. due to a security fix).
8849 Defaults to @samp{#t}.
8850 @end deftypevr
8851
8852 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer doveadm-worker-count
8853 If non-zero, run mail commands via this many connections to doveadm
8854 server, instead of running them directly in the same process.
8855 Defaults to @samp{0}.
8856 @end deftypevr
8857
8858 @deftypevr {@code{dovecot-configuration} parameter} string doveadm-socket-path
8859 UNIX socket or host:port used for connecting to doveadm server.
8860 Defaults to @samp{"doveadm-server"}.
8861 @end deftypevr
8862
8863 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list import-environment
8864 List of environment variables that are preserved on Dovecot startup
8865 and passed down to all of its child processes. You can also give
8866 key=value pairs to always set specific settings.
8867 @end deftypevr
8868
8869 @deftypevr {@code{dovecot-configuration} parameter} boolean disable-plaintext-auth?
8870 Disable LOGIN command and all other plaintext authentications unless
8871 SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
8872 matches the local IP (i.e. you're connecting from the same computer),
8873 the connection is considered secure and plaintext authentication is
8874 allowed. See also ssl=required setting.
8875 Defaults to @samp{#t}.
8876 @end deftypevr
8877
8878 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-cache-size
8879 Authentication cache size (e.g. @samp{#e10e6}). 0 means it's disabled.
8880 Note that bsdauth, PAM and vpopmail require @samp{cache-key} to be set
8881 for caching to be used.
8882 Defaults to @samp{0}.
8883 @end deftypevr
8884
8885 @deftypevr {@code{dovecot-configuration} parameter} string auth-cache-ttl
8886 Time to live for cached data. After TTL expires the cached record
8887 is no longer used, *except* if the main database lookup returns internal
8888 failure. We also try to handle password changes automatically: If
8889 user's previous authentication was successful, but this one wasn't, the
8890 cache isn't used. For now this works only with plaintext
8891 authentication.
8892 Defaults to @samp{"1 hour"}.
8893 @end deftypevr
8894
8895 @deftypevr {@code{dovecot-configuration} parameter} string auth-cache-negative-ttl
8896 TTL for negative hits (user not found, password mismatch).
8897 0 disables caching them completely.
8898 Defaults to @samp{"1 hour"}.
8899 @end deftypevr
8900
8901 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-realms
8902 List of realms for SASL authentication mechanisms that need them.
8903 You can leave it empty if you don't want to support multiple realms.
8904 Many clients simply use the first one listed here, so keep the default
8905 realm first.
8906 Defaults to @samp{()}.
8907 @end deftypevr
8908
8909 @deftypevr {@code{dovecot-configuration} parameter} string auth-default-realm
8910 Default realm/domain to use if none was specified. This is used for
8911 both SASL realms and appending @@domain to username in plaintext
8912 logins.
8913 Defaults to @samp{""}.
8914 @end deftypevr
8915
8916 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-chars
8917 List of allowed characters in username. If the user-given username
8918 contains a character not listed in here, the login automatically fails.
8919 This is just an extra check to make sure user can't exploit any
8920 potential quote escaping vulnerabilities with SQL/LDAP databases. If
8921 you want to allow all characters, set this value to empty.
8922 Defaults to @samp{"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@@"}.
8923 @end deftypevr
8924
8925 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-translation
8926 Username character translations before it's looked up from
8927 databases. The value contains series of from -> to characters. For
8928 example @samp{#@@/@@} means that @samp{#} and @samp{/} characters are
8929 translated to @samp{@@}.
8930 Defaults to @samp{""}.
8931 @end deftypevr
8932
8933 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-format
8934 Username formatting before it's looked up from databases. You can
8935 use the standard variables here, e.g. %Lu would lowercase the username,
8936 %n would drop away the domain if it was given, or @samp{%n-AT-%d} would
8937 change the @samp{@@} into @samp{-AT-}. This translation is done after
8938 @samp{auth-username-translation} changes.
8939 Defaults to @samp{"%Lu"}.
8940 @end deftypevr
8941
8942 @deftypevr {@code{dovecot-configuration} parameter} string auth-master-user-separator
8943 If you want to allow master users to log in by specifying the master
8944 username within the normal username string (i.e. not using SASL
8945 mechanism's support for it), you can specify the separator character
8946 here. The format is then <username><separator><master username>.
8947 UW-IMAP uses @samp{*} as the separator, so that could be a good
8948 choice.
8949 Defaults to @samp{""}.
8950 @end deftypevr
8951
8952 @deftypevr {@code{dovecot-configuration} parameter} string auth-anonymous-username
8953 Username to use for users logging in with ANONYMOUS SASL
8954 mechanism.
8955 Defaults to @samp{"anonymous"}.
8956 @end deftypevr
8957
8958 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-worker-max-count
8959 Maximum number of dovecot-auth worker processes. They're used to
8960 execute blocking passdb and userdb queries (e.g. MySQL and PAM).
8961 They're automatically created and destroyed as needed.
8962 Defaults to @samp{30}.
8963 @end deftypevr
8964
8965 @deftypevr {@code{dovecot-configuration} parameter} string auth-gssapi-hostname
8966 Host name to use in GSSAPI principal names. The default is to use
8967 the name returned by gethostname(). Use @samp{$ALL} (with quotes) to
8968 allow all keytab entries.
8969 Defaults to @samp{""}.
8970 @end deftypevr
8971
8972 @deftypevr {@code{dovecot-configuration} parameter} string auth-krb5-keytab
8973 Kerberos keytab to use for the GSSAPI mechanism. Will use the
8974 system default (usually /etc/krb5.keytab) if not specified. You may
8975 need to change the auth service to run as root to be able to read this
8976 file.
8977 Defaults to @samp{""}.
8978 @end deftypevr
8979
8980 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-use-winbind?
8981 Do NTLM and GSS-SPNEGO authentication using Samba's winbind daemon
8982 and @samp{ntlm-auth} helper.
8983 <doc/wiki/Authentication/Mechanisms/Winbind.txt>.
8984 Defaults to @samp{#f}.
8985 @end deftypevr
8986
8987 @deftypevr {@code{dovecot-configuration} parameter} file-name auth-winbind-helper-path
8988 Path for Samba's @samp{ntlm-auth} helper binary.
8989 Defaults to @samp{"/usr/bin/ntlm_auth"}.
8990 @end deftypevr
8991
8992 @deftypevr {@code{dovecot-configuration} parameter} string auth-failure-delay
8993 Time to delay before replying to failed authentications.
8994 Defaults to @samp{"2 secs"}.
8995 @end deftypevr
8996
8997 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-require-client-cert?
8998 Require a valid SSL client certificate or the authentication
8999 fails.
9000 Defaults to @samp{#f}.
9001 @end deftypevr
9002
9003 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-username-from-cert?
9004 Take the username from client's SSL certificate, using
9005 @code{X509_NAME_get_text_by_NID()} which returns the subject's DN's
9006 CommonName.
9007 Defaults to @samp{#f}.
9008 @end deftypevr
9009
9010 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-mechanisms
9011 List of wanted authentication mechanisms. Supported mechanisms are:
9012 @samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
9013 @samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
9014 @samp{otp}, @samp{skey}, and @samp{gss-spnego}. NOTE: See also
9015 @samp{disable-plaintext-auth} setting.
9016 @end deftypevr
9017
9018 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-servers
9019 List of IPs or hostnames to all director servers, including ourself.
9020 Ports can be specified as ip:port. The default port is the same as what
9021 director service's @samp{inet-listener} is using.
9022 Defaults to @samp{()}.
9023 @end deftypevr
9024
9025 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-mail-servers
9026 List of IPs or hostnames to all backend mail servers. Ranges are
9027 allowed too, like 10.0.0.10-10.0.0.30.
9028 Defaults to @samp{()}.
9029 @end deftypevr
9030
9031 @deftypevr {@code{dovecot-configuration} parameter} string director-user-expire
9032 How long to redirect users to a specific server after it no longer
9033 has any connections.
9034 Defaults to @samp{"15 min"}.
9035 @end deftypevr
9036
9037 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer director-doveadm-port
9038 TCP/IP port that accepts doveadm connections (instead of director
9039 connections) If you enable this, you'll also need to add
9040 @samp{inet-listener} for the port.
9041 Defaults to @samp{0}.
9042 @end deftypevr
9043
9044 @deftypevr {@code{dovecot-configuration} parameter} string director-username-hash
9045 How the username is translated before being hashed. Useful values
9046 include %Ln if user can log in with or without @@domain, %Ld if mailboxes
9047 are shared within domain.
9048 Defaults to @samp{"%Lu"}.
9049 @end deftypevr
9050
9051 @deftypevr {@code{dovecot-configuration} parameter} string log-path
9052 Log file to use for error messages. @samp{syslog} logs to syslog,
9053 @samp{/dev/stderr} logs to stderr.
9054 Defaults to @samp{"syslog"}.
9055 @end deftypevr
9056
9057 @deftypevr {@code{dovecot-configuration} parameter} string info-log-path
9058 Log file to use for informational messages. Defaults to
9059 @samp{log-path}.
9060 Defaults to @samp{""}.
9061 @end deftypevr
9062
9063 @deftypevr {@code{dovecot-configuration} parameter} string debug-log-path
9064 Log file to use for debug messages. Defaults to
9065 @samp{info-log-path}.
9066 Defaults to @samp{""}.
9067 @end deftypevr
9068
9069 @deftypevr {@code{dovecot-configuration} parameter} string syslog-facility
9070 Syslog facility to use if you're logging to syslog. Usually if you
9071 don't want to use @samp{mail}, you'll use local0..local7. Also other
9072 standard facilities are supported.
9073 Defaults to @samp{"mail"}.
9074 @end deftypevr
9075
9076 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose?
9077 Log unsuccessful authentication attempts and the reasons why they
9078 failed.
9079 Defaults to @samp{#f}.
9080 @end deftypevr
9081
9082 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose-passwords?
9083 In case of password mismatches, log the attempted password. Valid
9084 values are no, plain and sha1. sha1 can be useful for detecting brute
9085 force password attempts vs. user simply trying the same password over
9086 and over again. You can also truncate the value to n chars by appending
9087 ":n" (e.g. sha1:6).
9088 Defaults to @samp{#f}.
9089 @end deftypevr
9090
9091 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug?
9092 Even more verbose logging for debugging purposes. Shows for example
9093 SQL queries.
9094 Defaults to @samp{#f}.
9095 @end deftypevr
9096
9097 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug-passwords?
9098 In case of password mismatches, log the passwords and used scheme so
9099 the problem can be debugged. Enabling this also enables
9100 @samp{auth-debug}.
9101 Defaults to @samp{#f}.
9102 @end deftypevr
9103
9104 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-debug?
9105 Enable mail process debugging. This can help you figure out why
9106 Dovecot isn't finding your mails.
9107 Defaults to @samp{#f}.
9108 @end deftypevr
9109
9110 @deftypevr {@code{dovecot-configuration} parameter} boolean verbose-ssl?
9111 Show protocol level SSL errors.
9112 Defaults to @samp{#f}.
9113 @end deftypevr
9114
9115 @deftypevr {@code{dovecot-configuration} parameter} string log-timestamp
9116 Prefix for each line written to log file. % codes are in
9117 strftime(3) format.
9118 Defaults to @samp{"\"%b %d %H:%M:%S \""}.
9119 @end deftypevr
9120
9121 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-log-format-elements
9122 List of elements we want to log. The elements which have a
9123 non-empty variable value are joined together to form a comma-separated
9124 string.
9125 @end deftypevr
9126
9127 @deftypevr {@code{dovecot-configuration} parameter} string login-log-format
9128 Login log format. %s contains @samp{login-log-format-elements}
9129 string, %$ contains the data we want to log.
9130 Defaults to @samp{"%$: %s"}.
9131 @end deftypevr
9132
9133 @deftypevr {@code{dovecot-configuration} parameter} string mail-log-prefix
9134 Log prefix for mail processes. See doc/wiki/Variables.txt for list
9135 of possible variables you can use.
9136 Defaults to @samp{"\"%s(%u): \""}.
9137 @end deftypevr
9138
9139 @deftypevr {@code{dovecot-configuration} parameter} string deliver-log-format
9140 Format to use for logging mail deliveries. You can use variables:
9141 @table @code
9142 @item %$
9143 Delivery status message (e.g. @samp{saved to INBOX})
9144 @item %m
9145 Message-ID
9146 @item %s
9147 Subject
9148 @item %f
9149 From address
9150 @item %p
9151 Physical size
9152 @item %w
9153 Virtual size.
9154 @end table
9155 Defaults to @samp{"msgid=%m: %$"}.
9156 @end deftypevr
9157
9158 @deftypevr {@code{dovecot-configuration} parameter} string mail-location
9159 Location for users' mailboxes. The default is empty, which means
9160 that Dovecot tries to find the mailboxes automatically. This won't work
9161 if the user doesn't yet have any mail, so you should explicitly tell
9162 Dovecot the full location.
9163
9164 If you're using mbox, giving a path to the INBOX
9165 file (e.g. /var/mail/%u) isn't enough. You'll also need to tell Dovecot
9166 where the other mailboxes are kept. This is called the "root mail
9167 directory", and it must be the first path given in the
9168 @samp{mail-location} setting.
9169
9170 There are a few special variables you can use, eg.:
9171
9172 @table @samp
9173 @item %u
9174 username
9175 @item %n
9176 user part in user@@domain, same as %u if there's no domain
9177 @item %d
9178 domain part in user@@domain, empty if there's no domain
9179 @item %h
9180 home director
9181 @end table
9182
9183 See doc/wiki/Variables.txt for full list. Some examples:
9184 @table @samp
9185 @item maildir:~/Maildir
9186 @item mbox:~/mail:INBOX=/var/mail/%u
9187 @item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
9188 @end table
9189 Defaults to @samp{""}.
9190 @end deftypevr
9191
9192 @deftypevr {@code{dovecot-configuration} parameter} string mail-uid
9193 System user and group used to access mails. If you use multiple,
9194 userdb can override these by returning uid or gid fields. You can use
9195 either numbers or names. <doc/wiki/UserIds.txt>.
9196 Defaults to @samp{""}.
9197 @end deftypevr
9198
9199 @deftypevr {@code{dovecot-configuration} parameter} string mail-gid
9200
9201 Defaults to @samp{""}.
9202 @end deftypevr
9203
9204 @deftypevr {@code{dovecot-configuration} parameter} string mail-privileged-group
9205 Group to enable temporarily for privileged operations. Currently
9206 this is used only with INBOX when either its initial creation or
9207 dotlocking fails. Typically this is set to "mail" to give access to
9208 /var/mail.
9209 Defaults to @samp{""}.
9210 @end deftypevr
9211
9212 @deftypevr {@code{dovecot-configuration} parameter} string mail-access-groups
9213 Grant access to these supplementary groups for mail processes.
9214 Typically these are used to set up access to shared mailboxes. Note
9215 that it may be dangerous to set these if users can create
9216 symlinks (e.g. if "mail" group is set here, ln -s /var/mail ~/mail/var
9217 could allow a user to delete others' mailboxes, or ln -s
9218 /secret/shared/box ~/mail/mybox would allow reading it).
9219 Defaults to @samp{""}.
9220 @end deftypevr
9221
9222 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-full-filesystem-access?
9223 Allow full filesystem access to clients. There's no access checks
9224 other than what the operating system does for the active UID/GID. It
9225 works with both maildir and mboxes, allowing you to prefix mailboxes
9226 names with e.g. /path/ or ~user/.
9227 Defaults to @samp{#f}.
9228 @end deftypevr
9229
9230 @deftypevr {@code{dovecot-configuration} parameter} boolean mmap-disable?
9231 Don't use mmap() at all. This is required if you store indexes to
9232 shared filesystems (NFS or clustered filesystem).
9233 Defaults to @samp{#f}.
9234 @end deftypevr
9235
9236 @deftypevr {@code{dovecot-configuration} parameter} boolean dotlock-use-excl?
9237 Rely on @samp{O_EXCL} to work when creating dotlock files. NFS
9238 supports @samp{O_EXCL} since version 3, so this should be safe to use
9239 nowadays by default.
9240 Defaults to @samp{#t}.
9241 @end deftypevr
9242
9243 @deftypevr {@code{dovecot-configuration} parameter} string mail-fsync
9244 When to use fsync() or fdatasync() calls:
9245 @table @code
9246 @item optimized
9247 Whenever necessary to avoid losing important data
9248 @item always
9249 Useful with e.g. NFS when write()s are delayed
9250 @item never
9251 Never use it (best performance, but crashes can lose data).
9252 @end table
9253 Defaults to @samp{"optimized"}.
9254 @end deftypevr
9255
9256 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-storage?
9257 Mail storage exists in NFS. Set this to yes to make Dovecot flush
9258 NFS caches whenever needed. If you're using only a single mail server
9259 this isn't needed.
9260 Defaults to @samp{#f}.
9261 @end deftypevr
9262
9263 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-index?
9264 Mail index files also exist in NFS. Setting this to yes requires
9265 @samp{mmap-disable? #t} and @samp{fsync-disable? #f}.
9266 Defaults to @samp{#f}.
9267 @end deftypevr
9268
9269 @deftypevr {@code{dovecot-configuration} parameter} string lock-method
9270 Locking method for index files. Alternatives are fcntl, flock and
9271 dotlock. Dotlocking uses some tricks which may create more disk I/O
9272 than other locking methods. NFS users: flock doesn't work, remember to
9273 change @samp{mmap-disable}.
9274 Defaults to @samp{"fcntl"}.
9275 @end deftypevr
9276
9277 @deftypevr {@code{dovecot-configuration} parameter} file-name mail-temp-dir
9278 Directory in which LDA/LMTP temporarily stores incoming mails >128
9279 kB.
9280 Defaults to @samp{"/tmp"}.
9281 @end deftypevr
9282
9283 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-uid
9284 Valid UID range for users. This is mostly to make sure that users can't
9285 log in as daemons or other system users. Note that denying root logins is
9286 hardcoded to dovecot binary and can't be done even if @samp{first-valid-uid}
9287 is set to 0.
9288 Defaults to @samp{500}.
9289 @end deftypevr
9290
9291 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-uid
9292
9293 Defaults to @samp{0}.
9294 @end deftypevr
9295
9296 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-gid
9297 Valid GID range for users. Users having non-valid GID as primary group ID
9298 aren't allowed to log in. If user belongs to supplementary groups with
9299 non-valid GIDs, those groups are not set.
9300 Defaults to @samp{1}.
9301 @end deftypevr
9302
9303 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-gid
9304
9305 Defaults to @samp{0}.
9306 @end deftypevr
9307
9308 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-max-keyword-length
9309 Maximum allowed length for mail keyword name. It's only forced when
9310 trying to create new keywords.
9311 Defaults to @samp{50}.
9312 @end deftypevr
9313
9314 @deftypevr {@code{dovecot-configuration} parameter} colon-separated-file-name-list valid-chroot-dirs
9315 List of directories under which chrooting is allowed for mail
9316 processes (i.e. /var/mail will allow chrooting to /var/mail/foo/bar
9317 too). This setting doesn't affect @samp{login-chroot}
9318 @samp{mail-chroot} or auth chroot settings. If this setting is empty,
9319 "/./" in home dirs are ignored. WARNING: Never add directories here
9320 which local users can modify, that may lead to root exploit. Usually
9321 this should be done only if you don't allow shell access for users.
9322 <doc/wiki/Chrooting.txt>.
9323 Defaults to @samp{()}.
9324 @end deftypevr
9325
9326 @deftypevr {@code{dovecot-configuration} parameter} string mail-chroot
9327 Default chroot directory for mail processes. This can be overridden
9328 for specific users in user database by giving /./ in user's home
9329 directory (e.g. /home/./user chroots into /home). Note that usually
9330 there is no real need to do chrooting, Dovecot doesn't allow users to
9331 access files outside their mail directory anyway. If your home
9332 directories are prefixed with the chroot directory, append "/." to
9333 @samp{mail-chroot}. <doc/wiki/Chrooting.txt>.
9334 Defaults to @samp{""}.
9335 @end deftypevr
9336
9337 @deftypevr {@code{dovecot-configuration} parameter} file-name auth-socket-path
9338 UNIX socket path to master authentication server to find users.
9339 This is used by imap (for shared users) and lda.
9340 Defaults to @samp{"/var/run/dovecot/auth-userdb"}.
9341 @end deftypevr
9342
9343 @deftypevr {@code{dovecot-configuration} parameter} file-name mail-plugin-dir
9344 Directory where to look up mail plugins.
9345 Defaults to @samp{"/usr/lib/dovecot"}.
9346 @end deftypevr
9347
9348 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mail-plugins
9349 List of plugins to load for all services. Plugins specific to IMAP,
9350 LDA, etc. are added to this list in their own .conf files.
9351 Defaults to @samp{()}.
9352 @end deftypevr
9353
9354 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-cache-min-mail-count
9355 The minimum number of mails in a mailbox before updates are done to
9356 cache file. This allows optimizing Dovecot's behavior to do less disk
9357 writes at the cost of more disk reads.
9358 Defaults to @samp{0}.
9359 @end deftypevr
9360
9361 @deftypevr {@code{dovecot-configuration} parameter} string mailbox-idle-check-interval
9362 When IDLE command is running, mailbox is checked once in a while to
9363 see if there are any new mails or other changes. This setting defines
9364 the minimum time to wait between those checks. Dovecot can also use
9365 dnotify, inotify and kqueue to find out immediately when changes
9366 occur.
9367 Defaults to @samp{"30 secs"}.
9368 @end deftypevr
9369
9370 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-save-crlf?
9371 Save mails with CR+LF instead of plain LF. This makes sending those
9372 mails take less CPU, especially with sendfile() syscall with Linux and
9373 FreeBSD. But it also creates a bit more disk I/O which may just make it
9374 slower. Also note that if other software reads the mboxes/maildirs,
9375 they may handle the extra CRs wrong and cause problems.
9376 Defaults to @samp{#f}.
9377 @end deftypevr
9378
9379 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-stat-dirs?
9380 By default LIST command returns all entries in maildir beginning
9381 with a dot. Enabling this option makes Dovecot return only entries
9382 which are directories. This is done by stat()ing each entry, so it
9383 causes more disk I/O.
9384 (For systems setting struct @samp{dirent->d_type} this check is free
9385 and it's done always regardless of this setting).
9386 Defaults to @samp{#f}.
9387 @end deftypevr
9388
9389 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-copy-with-hardlinks?
9390 When copying a message, do it with hard links whenever possible.
9391 This makes the performance much better, and it's unlikely to have any
9392 side effects.
9393 Defaults to @samp{#t}.
9394 @end deftypevr
9395
9396 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-very-dirty-syncs?
9397 Assume Dovecot is the only MUA accessing Maildir: Scan cur/
9398 directory only when its mtime changes unexpectedly or when we can't find
9399 the mail otherwise.
9400 Defaults to @samp{#f}.
9401 @end deftypevr
9402
9403 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-read-locks
9404 Which locking methods to use for locking mbox. There are four
9405 available:
9406
9407 @table @code
9408 @item dotlock
9409 Create <mailbox>.lock file. This is the oldest and most NFS-safe
9410 solution. If you want to use /var/mail/ like directory, the users will
9411 need write access to that directory.
9412 @item dotlock-try
9413 Same as dotlock, but if it fails because of permissions or because there
9414 isn't enough disk space, just skip it.
9415 @item fcntl
9416 Use this if possible. Works with NFS too if lockd is used.
9417 @item flock
9418 May not exist in all systems. Doesn't work with NFS.
9419 @item lockf
9420 May not exist in all systems. Doesn't work with NFS.
9421 @end table
9422
9423 You can use multiple locking methods; if you do the order they're declared
9424 in is important to avoid deadlocks if other MTAs/MUAs are using multiple
9425 locking methods as well. Some operating systems don't allow using some of
9426 them simultaneously.
9427 @end deftypevr
9428
9429 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-write-locks
9430
9431 @end deftypevr
9432
9433 @deftypevr {@code{dovecot-configuration} parameter} string mbox-lock-timeout
9434 Maximum time to wait for lock (all of them) before aborting.
9435 Defaults to @samp{"5 mins"}.
9436 @end deftypevr
9437
9438 @deftypevr {@code{dovecot-configuration} parameter} string mbox-dotlock-change-timeout
9439 If dotlock exists but the mailbox isn't modified in any way,
9440 override the lock file after this much time.
9441 Defaults to @samp{"2 mins"}.
9442 @end deftypevr
9443
9444 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-dirty-syncs?
9445 When mbox changes unexpectedly we have to fully read it to find out
9446 what changed. If the mbox is large this can take a long time. Since
9447 the change is usually just a newly appended mail, it'd be faster to
9448 simply read the new mails. If this setting is enabled, Dovecot does
9449 this but still safely fallbacks to re-reading the whole mbox file
9450 whenever something in mbox isn't how it's expected to be. The only real
9451 downside to this setting is that if some other MUA changes message
9452 flags, Dovecot doesn't notice it immediately. Note that a full sync is
9453 done with SELECT, EXAMINE, EXPUNGE and CHECK commands.
9454 Defaults to @samp{#t}.
9455 @end deftypevr
9456
9457 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-very-dirty-syncs?
9458 Like @samp{mbox-dirty-syncs}, but don't do full syncs even with SELECT,
9459 EXAMINE, EXPUNGE or CHECK commands. If this is set,
9460 @samp{mbox-dirty-syncs} is ignored.
9461 Defaults to @samp{#f}.
9462 @end deftypevr
9463
9464 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-lazy-writes?
9465 Delay writing mbox headers until doing a full write sync (EXPUNGE
9466 and CHECK commands and when closing the mailbox). This is especially
9467 useful for POP3 where clients often delete all mails. The downside is
9468 that our changes aren't immediately visible to other MUAs.
9469 Defaults to @samp{#t}.
9470 @end deftypevr
9471
9472 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mbox-min-index-size
9473 If mbox size is smaller than this (e.g. 100k), don't write index
9474 files. If an index file already exists it's still read, just not
9475 updated.
9476 Defaults to @samp{0}.
9477 @end deftypevr
9478
9479 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mdbox-rotate-size
9480 Maximum dbox file size until it's rotated.
9481 Defaults to @samp{2000000}.
9482 @end deftypevr
9483
9484 @deftypevr {@code{dovecot-configuration} parameter} string mdbox-rotate-interval
9485 Maximum dbox file age until it's rotated. Typically in days. Day
9486 begins from midnight, so 1d = today, 2d = yesterday, etc. 0 = check
9487 disabled.
9488 Defaults to @samp{"1d"}.
9489 @end deftypevr
9490
9491 @deftypevr {@code{dovecot-configuration} parameter} boolean mdbox-preallocate-space?
9492 When creating new mdbox files, immediately preallocate their size to
9493 @samp{mdbox-rotate-size}. This setting currently works only in Linux
9494 with some filesystems (ext4, xfs).
9495 Defaults to @samp{#f}.
9496 @end deftypevr
9497
9498 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-dir
9499 sdbox and mdbox support saving mail attachments to external files,
9500 which also allows single instance storage for them. Other backends
9501 don't support this for now.
9502
9503 WARNING: This feature hasn't been tested much yet. Use at your own risk.
9504
9505 Directory root where to store mail attachments. Disabled, if empty.
9506 Defaults to @samp{""}.
9507 @end deftypevr
9508
9509 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-attachment-min-size
9510 Attachments smaller than this aren't saved externally. It's also
9511 possible to write a plugin to disable saving specific attachments
9512 externally.
9513 Defaults to @samp{128000}.
9514 @end deftypevr
9515
9516 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-fs
9517 Filesystem backend to use for saving attachments:
9518 @table @code
9519 @item posix
9520 No SiS done by Dovecot (but this might help FS's own deduplication)
9521 @item sis posix
9522 SiS with immediate byte-by-byte comparison during saving
9523 @item sis-queue posix
9524 SiS with delayed comparison and deduplication.
9525 @end table
9526 Defaults to @samp{"sis posix"}.
9527 @end deftypevr
9528
9529 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-hash
9530 Hash format to use in attachment filenames. You can add any text and
9531 variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}},
9532 @code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}. Variables can be
9533 truncated, e.g. @code{%@{sha256:80@}} returns only first 80 bits.
9534 Defaults to @samp{"%@{sha1@}"}.
9535 @end deftypevr
9536
9537 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-process-limit
9538
9539 Defaults to @samp{100}.
9540 @end deftypevr
9541
9542 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-client-limit
9543
9544 Defaults to @samp{1000}.
9545 @end deftypevr
9546
9547 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-vsz-limit
9548 Default VSZ (virtual memory size) limit for service processes.
9549 This is mainly intended to catch and kill processes that leak memory
9550 before they eat up everything.
9551 Defaults to @samp{256000000}.
9552 @end deftypevr
9553
9554 @deftypevr {@code{dovecot-configuration} parameter} string default-login-user
9555 Login user is internally used by login processes. This is the most
9556 untrusted user in Dovecot system. It shouldn't have access to anything
9557 at all.
9558 Defaults to @samp{"dovenull"}.
9559 @end deftypevr
9560
9561 @deftypevr {@code{dovecot-configuration} parameter} string default-internal-user
9562 Internal user is used by unprivileged processes. It should be
9563 separate from login user, so that login processes can't disturb other
9564 processes.
9565 Defaults to @samp{"dovecot"}.
9566 @end deftypevr
9567
9568 @deftypevr {@code{dovecot-configuration} parameter} string ssl?
9569 SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>.
9570 Defaults to @samp{"required"}.
9571 @end deftypevr
9572
9573 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cert
9574 PEM encoded X.509 SSL/TLS certificate (public key).
9575 Defaults to @samp{"</etc/dovecot/default.pem"}.
9576 @end deftypevr
9577
9578 @deftypevr {@code{dovecot-configuration} parameter} string ssl-key
9579 PEM encoded SSL/TLS private key. The key is opened before
9580 dropping root privileges, so keep the key file unreadable by anyone but
9581 root.
9582 Defaults to @samp{"</etc/dovecot/private/default.pem"}.
9583 @end deftypevr
9584
9585 @deftypevr {@code{dovecot-configuration} parameter} string ssl-key-password
9586 If key file is password protected, give the password here.
9587 Alternatively give it when starting dovecot with -p parameter. Since
9588 this file is often world-readable, you may want to place this setting
9589 instead to a different.
9590 Defaults to @samp{""}.
9591 @end deftypevr
9592
9593 @deftypevr {@code{dovecot-configuration} parameter} string ssl-ca
9594 PEM encoded trusted certificate authority. Set this only if you
9595 intend to use @samp{ssl-verify-client-cert? #t}. The file should
9596 contain the CA certificate(s) followed by the matching
9597 CRL(s). (e.g. @samp{ssl-ca </etc/ssl/certs/ca.pem}).
9598 Defaults to @samp{""}.
9599 @end deftypevr
9600
9601 @deftypevr {@code{dovecot-configuration} parameter} boolean ssl-require-crl?
9602 Require that CRL check succeeds for client certificates.
9603 Defaults to @samp{#t}.
9604 @end deftypevr
9605
9606 @deftypevr {@code{dovecot-configuration} parameter} boolean ssl-verify-client-cert?
9607 Request client to send a certificate. If you also want to require
9608 it, set @samp{auth-ssl-require-client-cert? #t} in auth section.
9609 Defaults to @samp{#f}.
9610 @end deftypevr
9611
9612 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cert-username-field
9613 Which field from certificate to use for username. commonName and
9614 x500UniqueIdentifier are the usual choices. You'll also need to set
9615 @samp{auth-ssl-username-from-cert? #t}.
9616 Defaults to @samp{"commonName"}.
9617 @end deftypevr
9618
9619 @deftypevr {@code{dovecot-configuration} parameter} hours ssl-parameters-regenerate
9620 How often to regenerate the SSL parameters file. Generation is
9621 quite CPU intensive operation. The value is in hours, 0 disables
9622 regeneration entirely.
9623 Defaults to @samp{168}.
9624 @end deftypevr
9625
9626 @deftypevr {@code{dovecot-configuration} parameter} string ssl-protocols
9627 SSL protocols to use.
9628 Defaults to @samp{"!SSLv2"}.
9629 @end deftypevr
9630
9631 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cipher-list
9632 SSL ciphers to use.
9633 Defaults to @samp{"ALL:!LOW:!SSLv2:!EXP:!aNULL"}.
9634 @end deftypevr
9635
9636 @deftypevr {@code{dovecot-configuration} parameter} string ssl-crypto-device
9637 SSL crypto device to use, for valid values run "openssl engine".
9638 Defaults to @samp{""}.
9639 @end deftypevr
9640
9641 @deftypevr {@code{dovecot-configuration} parameter} string postmaster-address
9642 Address to use when sending rejection mails.
9643 Default is postmaster@@<your domain>. %d expands to recipient domain.
9644 Defaults to @samp{""}.
9645 @end deftypevr
9646
9647 @deftypevr {@code{dovecot-configuration} parameter} string hostname
9648 Hostname to use in various parts of sent mails (e.g. in Message-Id)
9649 and in LMTP replies. Default is the system's real hostname@@domain.
9650 Defaults to @samp{""}.
9651 @end deftypevr
9652
9653 @deftypevr {@code{dovecot-configuration} parameter} boolean quota-full-tempfail?
9654 If user is over quota, return with temporary failure instead of
9655 bouncing the mail.
9656 Defaults to @samp{#f}.
9657 @end deftypevr
9658
9659 @deftypevr {@code{dovecot-configuration} parameter} file-name sendmail-path
9660 Binary to use for sending mails.
9661 Defaults to @samp{"/usr/sbin/sendmail"}.
9662 @end deftypevr
9663
9664 @deftypevr {@code{dovecot-configuration} parameter} string submission-host
9665 If non-empty, send mails via this SMTP host[:port] instead of
9666 sendmail.
9667 Defaults to @samp{""}.
9668 @end deftypevr
9669
9670 @deftypevr {@code{dovecot-configuration} parameter} string rejection-subject
9671 Subject: header to use for rejection mails. You can use the same
9672 variables as for @samp{rejection-reason} below.
9673 Defaults to @samp{"Rejected: %s"}.
9674 @end deftypevr
9675
9676 @deftypevr {@code{dovecot-configuration} parameter} string rejection-reason
9677 Human readable error message for rejection mails. You can use
9678 variables:
9679
9680 @table @code
9681 @item %n
9682 CRLF
9683 @item %r
9684 reason
9685 @item %s
9686 original subject
9687 @item %t
9688 recipient
9689 @end table
9690 Defaults to @samp{"Your message to <%t> was automatically rejected:%n%r"}.
9691 @end deftypevr
9692
9693 @deftypevr {@code{dovecot-configuration} parameter} string recipient-delimiter
9694 Delimiter character between local-part and detail in email
9695 address.
9696 Defaults to @samp{"+"}.
9697 @end deftypevr
9698
9699 @deftypevr {@code{dovecot-configuration} parameter} string lda-original-recipient-header
9700 Header where the original recipient address (SMTP's RCPT TO:
9701 address) is taken from if not available elsewhere. With dovecot-lda -a
9702 parameter overrides this. A commonly used header for this is
9703 X-Original-To.
9704 Defaults to @samp{""}.
9705 @end deftypevr
9706
9707 @deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autocreate?
9708 Should saving a mail to a nonexistent mailbox automatically create
9709 it?.
9710 Defaults to @samp{#f}.
9711 @end deftypevr
9712
9713 @deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autosubscribe?
9714 Should automatically created mailboxes be also automatically
9715 subscribed?.
9716 Defaults to @samp{#f}.
9717 @end deftypevr
9718
9719 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer imap-max-line-length
9720 Maximum IMAP command line length. Some clients generate very long
9721 command lines with huge mailboxes, so you may need to raise this if you
9722 get "Too long argument" or "IMAP command line too large" errors
9723 often.
9724 Defaults to @samp{64000}.
9725 @end deftypevr
9726
9727 @deftypevr {@code{dovecot-configuration} parameter} string imap-logout-format
9728 IMAP logout format string:
9729 @table @code
9730 @item %i
9731 total number of bytes read from client
9732 @item %o
9733 total number of bytes sent to client.
9734 @end table
9735 Defaults to @samp{"in=%i out=%o"}.
9736 @end deftypevr
9737
9738 @deftypevr {@code{dovecot-configuration} parameter} string imap-capability
9739 Override the IMAP CAPABILITY response. If the value begins with '+',
9740 add the given capabilities on top of the defaults (e.g. +XFOO XBAR).
9741 Defaults to @samp{""}.
9742 @end deftypevr
9743
9744 @deftypevr {@code{dovecot-configuration} parameter} string imap-idle-notify-interval
9745 How long to wait between "OK Still here" notifications when client
9746 is IDLEing.
9747 Defaults to @samp{"2 mins"}.
9748 @end deftypevr
9749
9750 @deftypevr {@code{dovecot-configuration} parameter} string imap-id-send
9751 ID field names and values to send to clients. Using * as the value
9752 makes Dovecot use the default value. The following fields have default
9753 values currently: name, version, os, os-version, support-url,
9754 support-email.
9755 Defaults to @samp{""}.
9756 @end deftypevr
9757
9758 @deftypevr {@code{dovecot-configuration} parameter} string imap-id-log
9759 ID fields sent by client to log. * means everything.
9760 Defaults to @samp{""}.
9761 @end deftypevr
9762
9763 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list imap-client-workarounds
9764 Workarounds for various client bugs:
9765
9766 @table @code
9767 @item delay-newmail
9768 Send EXISTS/RECENT new mail notifications only when replying to NOOP and
9769 CHECK commands. Some clients ignore them otherwise, for example OSX
9770 Mail (<v2.1). Outlook Express breaks more badly though, without this it
9771 may show user "Message no longer in server" errors. Note that OE6
9772 still breaks even with this workaround if synchronization is set to
9773 "Headers Only".
9774
9775 @item tb-extra-mailbox-sep
9776 Thunderbird gets somehow confused with LAYOUT=fs (mbox and dbox) and
9777 adds extra @samp{/} suffixes to mailbox names. This option causes Dovecot to
9778 ignore the extra @samp{/} instead of treating it as invalid mailbox name.
9779
9780 @item tb-lsub-flags
9781 Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g. mbox).
9782 This makes Thunderbird realize they aren't selectable and show them
9783 greyed out, instead of only later giving "not selectable" popup error.
9784 @end table
9785 Defaults to @samp{()}.
9786 @end deftypevr
9787
9788 @deftypevr {@code{dovecot-configuration} parameter} string imap-urlauth-host
9789 Host allowed in URLAUTH URLs sent by client. "*" allows all.
9790 Defaults to @samp{""}.
9791 @end deftypevr
9792
9793
9794 Whew! Lots of configuration options. The nice thing about it though is
9795 that GuixSD has a complete interface to Dovecot's configuration
9796 language. This allows not only a nice way to declare configurations,
9797 but also offers reflective capabilities as well: users can write code to
9798 inspect and transform configurations from within Scheme.
9799
9800 However, it could be that you just want to get a @code{dovecot.conf} up
9801 and running. In that case, you can pass an
9802 @code{opaque-dovecot-configuration} as the @code{#:config} paramter to
9803 @code{dovecot-service}. As its name indicates, an opaque configuration
9804 does not have easy reflective capabilities.
9805
9806 Available @code{opaque-dovecot-configuration} fields are:
9807
9808 @deftypevr {@code{opaque-dovecot-configuration} parameter} package dovecot
9809 The dovecot package.
9810 @end deftypevr
9811
9812 @deftypevr {@code{opaque-dovecot-configuration} parameter} string string
9813 The contents of the @code{dovecot.conf}, as a string.
9814 @end deftypevr
9815
9816 For example, if your @code{dovecot.conf} is just the empty string, you
9817 could instantiate a dovecot service like this:
9818
9819 @example
9820 (dovecot-service #:config
9821 (opaque-dovecot-configuration
9822 (string "")))
9823 @end example
9824
9825 @node Web Services
9826 @subsubsection Web Services
9827
9828 The @code{(gnu services web)} module provides the following service:
9829
9830 @deffn {Scheme Procedure} nginx-service [#:nginx nginx] @
9831 [#:log-directory ``/var/log/nginx''] @
9832 [#:run-directory ``/var/run/nginx''] @
9833 [#:config-file]
9834
9835 Return a service that runs @var{nginx}, the nginx web server.
9836
9837 The nginx daemon loads its runtime configuration from @var{config-file}.
9838 Log files are written to @var{log-directory} and temporary runtime data
9839 files are written to @var{run-directory}. For proper operation, these
9840 arguments should match what is in @var{config-file} to ensure that the
9841 directories are created when the service is activated.
9842
9843 @end deffn
9844
9845 @node Various Services
9846 @subsubsection Various Services
9847
9848 The @code{(gnu services lirc)} module provides the following service.
9849
9850 @deffn {Scheme Procedure} lirc-service [#:lirc lirc] @
9851 [#:device #f] [#:driver #f] [#:config-file #f] @
9852 [#:extra-options '()]
9853 Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
9854 decodes infrared signals from remote controls.
9855
9856 Optionally, @var{device}, @var{driver} and @var{config-file}
9857 (configuration file name) may be specified. See @command{lircd} manual
9858 for details.
9859
9860 Finally, @var{extra-options} is a list of additional command-line options
9861 passed to @command{lircd}.
9862 @end deffn
9863
9864 @subsubsection Dictionary Services
9865 The @code{(gnu services dict)} module provides the following service:
9866
9867 @deffn {Scheme Procedure} dicod-service [#:config (dicod-configuration)]
9868 Return a service that runs the @command{dicod} daemon, an implementation
9869 of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
9870
9871 The optional @var{config} argument specifies the configuration for
9872 @command{dicod}, which should be a @code{<dicod-configuration>} object, by
9873 default it serves the GNU Collaborative International Dictonary of English.
9874
9875 You can add @command{open localhost} to your @file{~/.dico} file to make
9876 @code{localhost} the default server for @command{dico} client
9877 (@pxref{Initialization File,,, dico, GNU Dico Manual}).
9878 @end deffn
9879
9880 @deftp {Data Type} dicod-configuration
9881 Data type representing the configuration of dicod.
9882
9883 @table @asis
9884 @item @code{dico} (default: @var{dico})
9885 Package object of the GNU Dico dictionary server.
9886
9887 @item @code{interfaces} (default: @var{'("localhost")})
9888 This is the list of IP addresses and ports and possibly socket file
9889 names to listen to (@pxref{Server Settings, @code{listen} directive,,
9890 dico, GNU Dico Manual}).
9891
9892 @item @code{databases} (default: @var{(list %dicod-database:gcide)})
9893 List of @code{<dicod-database>} objects denoting dictionaries to be served.
9894 @end table
9895 @end deftp
9896
9897 @deftp {Data Type} dicod-database
9898 Data type representing a dictionary database.
9899
9900 @table @asis
9901 @item @code{name}
9902 Name of the database, will be used in DICT commands.
9903
9904 @item @code{module}
9905 Name of the dicod module used by this database
9906 (@pxref{Modules,,, dico, GNU Dico Manual}).
9907
9908 @item @code{options}
9909 List of strings or gexps representing the arguments for the module handler
9910 (@pxref{Handlers,,, dico, GNU Dico Manual}).
9911 @end table
9912 @end deftp
9913
9914 @defvr {Scheme Variable} %dicod-database:gcide
9915 A @code{<dicod-database>} object serving the GNU Collaborative International
9916 Dictonary of English using the @code{gcide} package.
9917 @end defvr
9918
9919 @node Setuid Programs
9920 @subsection Setuid Programs
9921
9922 @cindex setuid programs
9923 Some programs need to run with ``root'' privileges, even when they are
9924 launched by unprivileged users. A notorious example is the
9925 @command{passwd} program, which users can run to change their
9926 password, and which needs to access the @file{/etc/passwd} and
9927 @file{/etc/shadow} files---something normally restricted to root, for
9928 obvious security reasons. To address that, these executables are
9929 @dfn{setuid-root}, meaning that they always run with root privileges
9930 (@pxref{How Change Persona,,, libc, The GNU C Library Reference Manual},
9931 for more info about the setuid mechanism.)
9932
9933 The store itself @emph{cannot} contain setuid programs: that would be a
9934 security issue since any user on the system can write derivations that
9935 populate the store (@pxref{The Store}). Thus, a different mechanism is
9936 used: instead of changing the setuid bit directly on files that are in
9937 the store, we let the system administrator @emph{declare} which programs
9938 should be setuid root.
9939
9940 The @code{setuid-programs} field of an @code{operating-system}
9941 declaration contains a list of G-expressions denoting the names of
9942 programs to be setuid-root (@pxref{Using the Configuration System}).
9943 For instance, the @command{passwd} program, which is part of the Shadow
9944 package, can be designated by this G-expression (@pxref{G-Expressions}):
9945
9946 @example
9947 #~(string-append #$shadow "/bin/passwd")
9948 @end example
9949
9950 A default set of setuid programs is defined by the
9951 @code{%setuid-programs} variable of the @code{(gnu system)} module.
9952
9953 @defvr {Scheme Variable} %setuid-programs
9954 A list of G-expressions denoting common programs that are setuid-root.
9955
9956 The list includes commands such as @command{passwd}, @command{ping},
9957 @command{su}, and @command{sudo}.
9958 @end defvr
9959
9960 Under the hood, the actual setuid programs are created in the
9961 @file{/run/setuid-programs} directory at system activation time. The
9962 files in this directory refer to the ``real'' binaries, which are in the
9963 store.
9964
9965 @node X.509 Certificates
9966 @subsection X.509 Certificates
9967
9968 @cindex HTTPS, certificates
9969 @cindex X.509 certificates
9970 @cindex TLS
9971 Web servers available over HTTPS (that is, HTTP over the transport-layer
9972 security mechanism, TLS) send client programs an @dfn{X.509 certificate}
9973 that the client can then use to @emph{authenticate} the server. To do
9974 that, clients verify that the server's certificate is signed by a
9975 so-called @dfn{certificate authority} (CA). But to verify the CA's
9976 signature, clients must have first acquired the CA's certificate.
9977
9978 Web browsers such as GNU@tie{}IceCat include their own set of CA
9979 certificates, such that they are able to verify CA signatures
9980 out-of-the-box.
9981
9982 However, most other programs that can talk HTTPS---@command{wget},
9983 @command{git}, @command{w3m}, etc.---need to be told where CA
9984 certificates can be found.
9985
9986 @cindex @code{nss-certs}
9987 In GuixSD, this is done by adding a package that provides certificates
9988 to the @code{packages} field of the @code{operating-system} declaration
9989 (@pxref{operating-system Reference}). GuixSD includes one such package,
9990 @code{nss-certs}, which is a set of CA certificates provided as part of
9991 Mozilla's Network Security Services.
9992
9993 Note that it is @emph{not} part of @var{%base-packages}, so you need to
9994 explicitly add it. The @file{/etc/ssl/certs} directory, which is where
9995 most applications and libraries look for certificates by default, points
9996 to the certificates installed globally.
9997
9998 Unprivileged users, including users of Guix on a foreign distro,
9999 can also install their own certificate package in
10000 their profile. A number of environment variables need to be defined so
10001 that applications and libraries know where to find them. Namely, the
10002 OpenSSL library honors the @code{SSL_CERT_DIR} and @code{SSL_CERT_FILE}
10003 variables. Some applications add their own environment variables; for
10004 instance, the Git version control system honors the certificate bundle
10005 pointed to by the @code{GIT_SSL_CAINFO} environment variable. Thus, you
10006 would typically run something like:
10007
10008 @example
10009 $ guix package -i nss-certs
10010 $ export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs"
10011 $ export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
10012 $ export GIT_SSL_CAINFO="$SSL_CERT_FILE"
10013 @end example
10014
10015 @node Name Service Switch
10016 @subsection Name Service Switch
10017
10018 @cindex name service switch
10019 @cindex NSS
10020 The @code{(gnu system nss)} module provides bindings to the
10021 configuration file of the libc @dfn{name service switch} or @dfn{NSS}
10022 (@pxref{NSS Configuration File,,, libc, The GNU C Library Reference
10023 Manual}). In a nutshell, the NSS is a mechanism that allows libc to be
10024 extended with new ``name'' lookup methods for system databases, which
10025 includes host names, service names, user accounts, and more (@pxref{Name
10026 Service Switch, System Databases and Name Service Switch,, libc, The GNU
10027 C Library Reference Manual}).
10028
10029 The NSS configuration specifies, for each system database, which lookup
10030 method is to be used, and how the various methods are chained
10031 together---for instance, under which circumstances NSS should try the
10032 next method in the list. The NSS configuration is given in the
10033 @code{name-service-switch} field of @code{operating-system} declarations
10034 (@pxref{operating-system Reference, @code{name-service-switch}}).
10035
10036 @cindex nss-mdns
10037 @cindex .local, host name lookup
10038 As an example, the declaration below configures the NSS to use the
10039 @uref{http://0pointer.de/lennart/projects/nss-mdns/, @code{nss-mdns}
10040 back-end}, which supports host name lookups over multicast DNS (mDNS)
10041 for host names ending in @code{.local}:
10042
10043 @example
10044 (name-service-switch
10045 (hosts (list %files ;first, check /etc/hosts
10046
10047 ;; If the above did not succeed, try
10048 ;; with 'mdns_minimal'.
10049 (name-service
10050 (name "mdns_minimal")
10051
10052 ;; 'mdns_minimal' is authoritative for
10053 ;; '.local'. When it returns "not found",
10054 ;; no need to try the next methods.
10055 (reaction (lookup-specification
10056 (not-found => return))))
10057
10058 ;; Then fall back to DNS.
10059 (name-service
10060 (name "dns"))
10061
10062 ;; Finally, try with the "full" 'mdns'.
10063 (name-service
10064 (name "mdns")))))
10065 @end example
10066
10067 Do not worry: the @code{%mdns-host-lookup-nss} variable (see below)
10068 contains this configuration, so you will not have to type it if all you
10069 want is to have @code{.local} host lookup working.
10070
10071 Note that, in this case, in addition to setting the
10072 @code{name-service-switch} of the @code{operating-system} declaration,
10073 you also need to use @code{avahi-service} (@pxref{Networking Services,
10074 @code{avahi-service}}), or @var{%desktop-services}, which includes it
10075 (@pxref{Desktop Services}). Doing this makes @code{nss-mdns} accessible
10076 to the name service cache daemon (@pxref{Base Services,
10077 @code{nscd-service}}).
10078
10079 For convenience, the following variables provide typical NSS
10080 configurations.
10081
10082 @defvr {Scheme Variable} %default-nss
10083 This is the default name service switch configuration, a
10084 @code{name-service-switch} object.
10085 @end defvr
10086
10087 @defvr {Scheme Variable} %mdns-host-lookup-nss
10088 This is the name service switch configuration with support for host name
10089 lookup over multicast DNS (mDNS) for host names ending in @code{.local}.
10090 @end defvr
10091
10092 The reference for name service switch configuration is given below. It
10093 is a direct mapping of the configuration file format of the C library , so
10094 please refer to the C library manual for more information (@pxref{NSS
10095 Configuration File,,, libc, The GNU C Library Reference Manual}).
10096 Compared to the configuration file format of libc NSS, it has the advantage
10097 not only of adding this warm parenthetic feel that we like, but also
10098 static checks: you will know about syntax errors and typos as soon as you
10099 run @command{guix system}.
10100
10101 @deftp {Data Type} name-service-switch
10102
10103 This is the data type representation the configuration of libc's name
10104 service switch (NSS). Each field below represents one of the supported
10105 system databases.
10106
10107 @table @code
10108 @item aliases
10109 @itemx ethers
10110 @itemx group
10111 @itemx gshadow
10112 @itemx hosts
10113 @itemx initgroups
10114 @itemx netgroup
10115 @itemx networks
10116 @itemx password
10117 @itemx public-key
10118 @itemx rpc
10119 @itemx services
10120 @itemx shadow
10121 The system databases handled by the NSS. Each of these fields must be a
10122 list of @code{<name-service>} objects (see below).
10123 @end table
10124 @end deftp
10125
10126 @deftp {Data Type} name-service
10127
10128 This is the data type representing an actual name service and the
10129 associated lookup action.
10130
10131 @table @code
10132 @item name
10133 A string denoting the name service (@pxref{Services in the NSS
10134 configuration,,, libc, The GNU C Library Reference Manual}).
10135
10136 Note that name services listed here must be visible to nscd. This is
10137 achieved by passing the @code{#:name-services} argument to
10138 @code{nscd-service} the list of packages providing the needed name
10139 services (@pxref{Base Services, @code{nscd-service}}).
10140
10141 @item reaction
10142 An action specified using the @code{lookup-specification} macro
10143 (@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
10144 Reference Manual}). For example:
10145
10146 @example
10147 (lookup-specification (unavailable => continue)
10148 (success => return))
10149 @end example
10150 @end table
10151 @end deftp
10152
10153 @node Initial RAM Disk
10154 @subsection Initial RAM Disk
10155
10156 @cindex initial RAM disk (initrd)
10157 @cindex initrd (initial RAM disk)
10158 For bootstrapping purposes, the Linux-Libre kernel is passed an
10159 @dfn{initial RAM disk}, or @dfn{initrd}. An initrd contains a temporary
10160 root file system as well as an initialization script. The latter is
10161 responsible for mounting the real root file system, and for loading any
10162 kernel modules that may be needed to achieve that.
10163
10164 The @code{initrd} field of an @code{operating-system} declaration allows
10165 you to specify which initrd you would like to use. The @code{(gnu
10166 system linux-initrd)} module provides two ways to build an initrd: the
10167 high-level @code{base-initrd} procedure, and the low-level
10168 @code{expression->initrd} procedure.
10169
10170 The @code{base-initrd} procedure is intended to cover most common uses.
10171 For example, if you want to add a bunch of kernel modules to be loaded
10172 at boot time, you can define the @code{initrd} field of the operating
10173 system declaration like this:
10174
10175 @example
10176 (initrd (lambda (file-systems . rest)
10177 ;; Create a standard initrd that has modules "foo.ko"
10178 ;; and "bar.ko", as well as their dependencies, in
10179 ;; addition to the modules available by default.
10180 (apply base-initrd file-systems
10181 #:extra-modules '("foo" "bar")
10182 rest)))
10183 @end example
10184
10185 The @code{base-initrd} procedure also handles common use cases that
10186 involves using the system as a QEMU guest, or as a ``live'' system with
10187 volatile root file system.
10188
10189 The initial RAM disk produced by @code{base-initrd} honors several
10190 options passed on the Linux kernel command line (that is, arguments
10191 passed @i{via} the @code{linux} command of GRUB, or the
10192 @code{-append} option) of QEMU, notably:
10193
10194 @table @code
10195 @item --load=@var{boot}
10196 Tell the initial RAM disk to load @var{boot}, a file containing a Scheme
10197 program, once it has mounted the root file system.
10198
10199 GuixSD uses this option to yield control to a boot program that runs the
10200 service activation programs and then spawns the GNU@tie{}Shepherd, the
10201 initialization system.
10202
10203 @item --root=@var{root}
10204 Mount @var{root} as the root file system. @var{root} can be a
10205 device name like @code{/dev/sda1}, a partition label, or a partition
10206 UUID.
10207
10208 @item --system=@var{system}
10209 Have @file{/run/booted-system} and @file{/run/current-system} point to
10210 @var{system}.
10211
10212 @item modprobe.blacklist=@var{modules}@dots{}
10213 @cindex module, black-listing
10214 @cindex black list, of kernel modules
10215 Instruct the initial RAM disk as well as the @command{modprobe} command
10216 (from the kmod package) to refuse to load @var{modules}. @var{modules}
10217 must be a comma-separated list of module names---e.g.,
10218 @code{usbkbd,9pnet}.
10219
10220 @item --repl
10221 Start a read-eval-print loop (REPL) from the initial RAM disk before it
10222 tries to load kernel modules and to mount the root file system. Our
10223 marketing team calls it @dfn{boot-to-Guile}. The Schemer in you will
10224 love it. @xref{Using Guile Interactively,,, guile, GNU Guile Reference
10225 Manual}, for more information on Guile's REPL.
10226
10227 @end table
10228
10229 Now that you know all the features that initial RAM disks produced by
10230 @code{base-initrd} provide, here is how to use it and customize it
10231 further.
10232
10233 @deffn {Monadic Procedure} base-initrd @var{file-systems} @
10234 [#:qemu-networking? #f] [#:virtio? #t] [#:volatile-root? #f] @
10235 [#:extra-modules '()] [#:mapped-devices '()]
10236 Return a monadic derivation that builds a generic initrd. @var{file-systems} is
10237 a list of file systems to be mounted by the initrd, possibly in addition to
10238 the root file system specified on the kernel command line via @code{--root}.
10239 @var{mapped-devices} is a list of device mappings to realize before
10240 @var{file-systems} are mounted (@pxref{Mapped Devices}).
10241
10242 When @var{qemu-networking?} is true, set up networking with the standard QEMU
10243 parameters. When @var{virtio?} is true, load additional modules so that the
10244 initrd can be used as a QEMU guest with para-virtualized I/O drivers.
10245
10246 When @var{volatile-root?} is true, the root file system is writable but any changes
10247 to it are lost.
10248
10249 The initrd is automatically populated with all the kernel modules necessary
10250 for @var{file-systems} and for the given options. However, additional kernel
10251 modules can be listed in @var{extra-modules}. They will be added to the initrd, and
10252 loaded at boot time in the order in which they appear.
10253 @end deffn
10254
10255 Needless to say, the initrds we produce and use embed a
10256 statically-linked Guile, and the initialization program is a Guile
10257 program. That gives a lot of flexibility. The
10258 @code{expression->initrd} procedure builds such an initrd, given the
10259 program to run in that initrd.
10260
10261 @deffn {Monadic Procedure} expression->initrd @var{exp} @
10262 [#:guile %guile-static-stripped] [#:name "guile-initrd"]
10263 Return a derivation that builds a Linux initrd (a gzipped cpio archive)
10264 containing @var{guile} and that evaluates @var{exp}, a G-expression,
10265 upon booting. All the derivations referenced by @var{exp} are
10266 automatically copied to the initrd.
10267 @end deffn
10268
10269 @node GRUB Configuration
10270 @subsection GRUB Configuration
10271
10272 @cindex GRUB
10273 @cindex boot loader
10274
10275 The operating system uses GNU@tie{}GRUB as its boot loader
10276 (@pxref{Overview, overview of GRUB,, grub, GNU GRUB Manual}). It is
10277 configured using a @code{grub-configuration} declaration. This data type
10278 is exported by the @code{(gnu system grub)} module and described below.
10279
10280 @deftp {Data Type} grub-configuration
10281 The type of a GRUB configuration declaration.
10282
10283 @table @asis
10284
10285 @item @code{device}
10286 This is a string denoting the boot device. It must be a device name
10287 understood by the @command{grub-install} command, such as
10288 @code{/dev/sda} or @code{(hd0)} (@pxref{Invoking grub-install,,, grub,
10289 GNU GRUB Manual}).
10290
10291 @item @code{menu-entries} (default: @code{()})
10292 A possibly empty list of @code{menu-entry} objects (see below), denoting
10293 entries to appear in the GRUB boot menu, in addition to the current
10294 system entry and the entry pointing to previous system generations.
10295
10296 @item @code{default-entry} (default: @code{0})
10297 The index of the default boot menu entry. Index 0 is for the entry of the
10298 current system.
10299
10300 @item @code{timeout} (default: @code{5})
10301 The number of seconds to wait for keyboard input before booting. Set to
10302 0 to boot immediately, and to -1 to wait indefinitely.
10303
10304 @item @code{theme} (default: @var{%default-theme})
10305 The @code{grub-theme} object describing the theme to use.
10306 @end table
10307
10308 @end deftp
10309
10310 Should you want to list additional boot menu entries @i{via} the
10311 @code{menu-entries} field above, you will need to create them with the
10312 @code{menu-entry} form:
10313
10314 @deftp {Data Type} menu-entry
10315 The type of an entry in the GRUB boot menu.
10316
10317 @table @asis
10318
10319 @item @code{label}
10320 The label to show in the menu---e.g., @code{"GNU"}.
10321
10322 @item @code{linux}
10323 The Linux kernel to boot.
10324
10325 @item @code{linux-arguments} (default: @code{()})
10326 The list of extra Linux kernel command-line arguments---e.g.,
10327 @code{("console=ttyS0")}.
10328
10329 @item @code{initrd}
10330 A G-Expression or string denoting the file name of the initial RAM disk
10331 to use (@pxref{G-Expressions}).
10332
10333 @end table
10334 @end deftp
10335
10336 @c FIXME: Write documentation once it's stable.
10337 Themes are created using the @code{grub-theme} form, which is not
10338 documented yet.
10339
10340 @defvr {Scheme Variable} %default-theme
10341 This is the default GRUB theme used by the operating system, with a
10342 fancy background image displaying the GNU and Guix logos.
10343 @end defvr
10344
10345
10346 @node Invoking guix system
10347 @subsection Invoking @code{guix system}
10348
10349 Once you have written an operating system declaration as seen in the
10350 previous section, it can be @dfn{instantiated} using the @command{guix
10351 system} command. The synopsis is:
10352
10353 @example
10354 guix system @var{options}@dots{} @var{action} @var{file}
10355 @end example
10356
10357 @var{file} must be the name of a file containing an
10358 @code{operating-system} declaration. @var{action} specifies how the
10359 operating system is instantiated. Currently the following values are
10360 supported:
10361
10362 @table @code
10363 @item reconfigure
10364 Build the operating system described in @var{file}, activate it, and
10365 switch to it@footnote{This action is usable only on systems already
10366 running GuixSD.}.
10367
10368 This effects all the configuration specified in @var{file}: user
10369 accounts, system services, global package list, setuid programs, etc.
10370 The command starts system services specified in @var{file} that are not
10371 currently running; if a service is currently running, it does not
10372 attempt to upgrade it since this would not be possible without stopping it
10373 first.
10374
10375 It also adds a GRUB menu entry for the new OS configuration, and moves
10376 entries for older configurations to a submenu---unless
10377 @option{--no-grub} is passed.
10378
10379 @quotation Note
10380 @c The paragraph below refers to the problem discussed at
10381 @c <http://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
10382 It is highly recommended to run @command{guix pull} once before you run
10383 @command{guix system reconfigure} for the first time (@pxref{Invoking
10384 guix pull}). Failing to do that you would see an older version of Guix
10385 once @command{reconfigure} has completed.
10386 @end quotation
10387
10388 @item build
10389 Build the derivation of the operating system, which includes all the
10390 configuration files and programs needed to boot and run the system.
10391 This action does not actually install anything.
10392
10393 @item init
10394 Populate the given directory with all the files necessary to run the
10395 operating system specified in @var{file}. This is useful for first-time
10396 installations of GuixSD. For instance:
10397
10398 @example
10399 guix system init my-os-config.scm /mnt
10400 @end example
10401
10402 copies to @file{/mnt} all the store items required by the configuration
10403 specified in @file{my-os-config.scm}. This includes configuration
10404 files, packages, and so on. It also creates other essential files
10405 needed for the system to operate correctly---e.g., the @file{/etc},
10406 @file{/var}, and @file{/run} directories, and the @file{/bin/sh} file.
10407
10408 This command also installs GRUB on the device specified in
10409 @file{my-os-config}, unless the @option{--no-grub} option was passed.
10410
10411 @item vm
10412 @cindex virtual machine
10413 @cindex VM
10414 @anchor{guix system vm}
10415 Build a virtual machine that contains the operating system declared in
10416 @var{file}, and return a script to run that virtual machine (VM).
10417 Arguments given to the script are passed to QEMU.
10418
10419 The VM shares its store with the host system.
10420
10421 Additional file systems can be shared between the host and the VM using
10422 the @code{--share} and @code{--expose} command-line options: the former
10423 specifies a directory to be shared with write access, while the latter
10424 provides read-only access to the shared directory.
10425
10426 The example below creates a VM in which the user's home directory is
10427 accessible read-only, and where the @file{/exchange} directory is a
10428 read-write mapping of @file{$HOME/tmp} on the host:
10429
10430 @example
10431 guix system vm my-config.scm \
10432 --expose=$HOME --share=$HOME/tmp=/exchange
10433 @end example
10434
10435 On GNU/Linux, the default is to boot directly to the kernel; this has
10436 the advantage of requiring only a very tiny root disk image since the
10437 store of the host can then be mounted.
10438
10439 The @code{--full-boot} option forces a complete boot sequence, starting
10440 with the bootloader. This requires more disk space since a root image
10441 containing at least the kernel, initrd, and bootloader data files must
10442 be created. The @code{--image-size} option can be used to specify the
10443 size of the image.
10444
10445 @item vm-image
10446 @itemx disk-image
10447 Return a virtual machine or disk image of the operating system declared
10448 in @var{file} that stands alone. Use the @option{--image-size} option
10449 to specify the size of the image.
10450
10451 When using @code{vm-image}, the returned image is in qcow2 format, which
10452 the QEMU emulator can efficiently use. @xref{Running GuixSD in a VM},
10453 for more information on how to run the image in a virtual machine.
10454
10455 When using @code{disk-image}, a raw disk image is produced; it can be
10456 copied as is to a USB stick, for instance. Assuming @code{/dev/sdc} is
10457 the device corresponding to a USB stick, one can copy the image to it
10458 using the following command:
10459
10460 @example
10461 # dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
10462 @end example
10463
10464 @item container
10465 Return a script to run the operating system declared in @var{file}
10466 within a container. Containers are a set of lightweight isolation
10467 mechanisms provided by the kernel Linux-libre. Containers are
10468 substantially less resource-demanding than full virtual machines since
10469 the kernel, shared objects, and other resources can be shared with the
10470 host system; this also means they provide thinner isolation.
10471
10472 Currently, the script must be run as root in order to support more than
10473 a single user and group. The container shares its store with the host
10474 system.
10475
10476 As with the @code{vm} action (@pxref{guix system vm}), additional file
10477 systems to be shared between the host and container can be specified
10478 using the @option{--share} and @option{--expose} options:
10479
10480 @example
10481 guix system container my-config.scm \
10482 --expose=$HOME --share=$HOME/tmp=/exchange
10483 @end example
10484
10485 @quotation Note
10486 This option requires Linux-libre 3.19 or newer.
10487 @end quotation
10488
10489 @end table
10490
10491 @var{options} can contain any of the common build options (@pxref{Common
10492 Build Options}). In addition, @var{options} can contain one of the
10493 following:
10494
10495 @table @option
10496 @item --system=@var{system}
10497 @itemx -s @var{system}
10498 Attempt to build for @var{system} instead of the host system type.
10499 This works as per @command{guix build} (@pxref{Invoking guix build}).
10500
10501 @item --derivation
10502 @itemx -d
10503 Return the derivation file name of the given operating system without
10504 building anything.
10505
10506 @item --image-size=@var{size}
10507 For the @code{vm-image} and @code{disk-image} actions, create an image
10508 of the given @var{size}. @var{size} may be a number of bytes, or it may
10509 include a unit as a suffix (@pxref{Block size, size specifications,,
10510 coreutils, GNU Coreutils}).
10511
10512 @item --on-error=@var{strategy}
10513 Apply @var{strategy} when an error occurs when reading @var{file}.
10514 @var{strategy} may be one of the following:
10515
10516 @table @code
10517 @item nothing-special
10518 Report the error concisely and exit. This is the default strategy.
10519
10520 @item backtrace
10521 Likewise, but also display a backtrace.
10522
10523 @item debug
10524 Report the error and enter Guile's debugger. From there, you can run
10525 commands such as @code{,bt} to get a backtrace, @code{,locals} to
10526 display local variable values, and more generally inspect the state of the
10527 program. @xref{Debug Commands,,, guile, GNU Guile Reference Manual}, for
10528 a list of available debugging commands.
10529 @end table
10530 @end table
10531
10532 @quotation Note
10533 All the actions above, except @code{build} and @code{init},
10534 can use KVM support in the Linux-libre kernel. Specifically, if the
10535 machine has hardware virtualization support, the corresponding
10536 KVM kernel module should be loaded, and the @file{/dev/kvm} device node
10537 must exist and be readable and writable by the user and by the
10538 build users of the daemon (@pxref{Build Environment Setup}).
10539 @end quotation
10540
10541 Once you have built, configured, re-configured, and re-re-configured
10542 your GuixSD installation, you may find it useful to list the operating
10543 system generations available on disk---and that you can choose from the
10544 GRUB boot menu:
10545
10546 @table @code
10547
10548 @item list-generations
10549 List a summary of each generation of the operating system available on
10550 disk, in a human-readable way. This is similar to the
10551 @option{--list-generations} option of @command{guix package}
10552 (@pxref{Invoking guix package}).
10553
10554 Optionally, one can specify a pattern, with the same syntax that is used
10555 in @command{guix package --list-generations}, to restrict the list of
10556 generations displayed. For instance, the following command displays
10557 generations that are up to 10 days old:
10558
10559 @example
10560 $ guix system list-generations 10d
10561 @end example
10562
10563 @end table
10564
10565 The @command{guix system} command has even more to offer! The following
10566 sub-commands allow you to visualize how your system services relate to
10567 each other:
10568
10569 @anchor{system-extension-graph}
10570 @table @code
10571
10572 @item extension-graph
10573 Emit in Dot/Graphviz format to standard output the @dfn{service
10574 extension graph} of the operating system defined in @var{file}
10575 (@pxref{Service Composition}, for more information on service
10576 extensions.)
10577
10578 The command:
10579
10580 @example
10581 $ guix system extension-graph @var{file} | dot -Tpdf > services.pdf
10582 @end example
10583
10584 produces a PDF file showing the extension relations among services.
10585
10586 @anchor{system-shepherd-graph}
10587 @item shepherd-graph
10588 Emit in Dot/Graphviz format to standard output the @dfn{dependency
10589 graph} of shepherd services of the operating system defined in
10590 @var{file}. @xref{Shepherd Services}, for more information and for an
10591 example graph.
10592
10593 @end table
10594
10595 @node Running GuixSD in a VM
10596 @subsection Running GuixSD in a Virtual Machine
10597
10598 One way to run GuixSD in a virtual machine (VM) is to build a GuixSD
10599 virtual machine image using @command{guix system vm-image}
10600 (@pxref{Invoking guix system}). The returned image is in qcow2 format,
10601 which the @uref{http://qemu.org/, QEMU emulator} can efficiently use.
10602
10603 To run the image in QEMU, copy it out of the store (@pxref{The Store})
10604 and give yourself permission to write to the copy. When invoking QEMU,
10605 you must choose a system emulator that is suitable for your hardware
10606 platform. Here is a minimal QEMU invocation that will boot the result
10607 of @command{guix system vm-image} on x86_64 hardware:
10608
10609 @example
10610 $ qemu-system-x86_64 \
10611 -net user -net nic,model=virtio \
10612 -enable-kvm -m 256 /tmp/qemu-image
10613 @end example
10614
10615 Here is what each of these options means:
10616
10617 @table @code
10618 @item qemu-system-x86_64
10619 This specifies the hardware platform to emulate. This should match the
10620 host.
10621
10622 @item -net user
10623 Enable the unprivileged user-mode network stack. The guest OS can
10624 access the host but not vice versa. This is the simplest way to get the
10625 guest OS online. If you do not choose a network stack, the boot will
10626 fail.
10627
10628 @item -net nic,model=virtio
10629 You must create a network interface of a given model. If you do not
10630 create a NIC, the boot will fail. Assuming your hardware platform is
10631 x86_64, you can get a list of available NIC models by running
10632 @command{qemu-system-x86_64 -net nic,model=help}.
10633
10634 @item -enable-kvm
10635 If your system has hardware virtualization extensions, enabling the
10636 virtual machine support (KVM) of the Linux kernel will make things run
10637 faster.
10638
10639 @item -m 256
10640 RAM available to the guest OS, in mebibytes. Defaults to 128@tie{}MiB,
10641 which may be insufficent for some operations.
10642
10643 @item /tmp/qemu-image
10644 The file name of the qcow2 image.
10645 @end table
10646
10647 @node Defining Services
10648 @subsection Defining Services
10649
10650 The previous sections show the available services and how one can combine
10651 them in an @code{operating-system} declaration. But how do we define
10652 them in the first place? And what is a service anyway?
10653
10654 @menu
10655 * Service Composition:: The model for composing services.
10656 * Service Types and Services:: Types and services.
10657 * Service Reference:: API reference.
10658 * Shepherd Services:: A particular type of service.
10659 @end menu
10660
10661 @node Service Composition
10662 @subsubsection Service Composition
10663
10664 @cindex services
10665 @cindex daemons
10666 Here we define a @dfn{service} as, broadly, something that extends the
10667 functionality of the operating system. Often a service is a process---a
10668 @dfn{daemon}---started when the system boots: a secure shell server, a
10669 Web server, the Guix build daemon, etc. Sometimes a service is a daemon
10670 whose execution can be triggered by another daemon---e.g., an FTP server
10671 started by @command{inetd} or a D-Bus service activated by
10672 @command{dbus-daemon}. Occasionally, a service does not map to a
10673 daemon. For instance, the ``account'' service collects user accounts
10674 and makes sure they exist when the system runs; the ``udev'' service
10675 collects device management rules and makes them available to the eudev
10676 daemon; the @file{/etc} service populates the @file{/etc} directory
10677 of the system.
10678
10679 @cindex service extensions
10680 GuixSD services are connected by @dfn{extensions}. For instance, the
10681 secure shell service @emph{extends} the Shepherd---the GuixSD
10682 initialization system, running as PID@tie{}1---by giving it the command
10683 lines to start and stop the secure shell daemon (@pxref{Networking
10684 Services, @code{lsh-service}}); the UPower service extends the D-Bus
10685 service by passing it its @file{.service} specification, and extends the
10686 udev service by passing it device management rules (@pxref{Desktop
10687 Services, @code{upower-service}}); the Guix daemon service extends the
10688 Shepherd by passing it the command lines to start and stop the daemon,
10689 and extends the account service by passing it a list of required build
10690 user accounts (@pxref{Base Services}).
10691
10692 All in all, services and their ``extends'' relations form a directed
10693 acyclic graph (DAG). If we represent services as boxes and extensions
10694 as arrows, a typical system might provide something like this:
10695
10696 @image{images/service-graph,,5in,Typical service extension graph.}
10697
10698 @cindex system service
10699 At the bottom, we see the @dfn{system service}, which produces the
10700 directory containing everything to run and boot the system, as returned
10701 by the @command{guix system build} command. @xref{Service Reference},
10702 to learn about the other service types shown here.
10703 @xref{system-extension-graph, the @command{guix system extension-graph}
10704 command}, for information on how to generate this representation for a
10705 particular operating system definition.
10706
10707 @cindex service types
10708 Technically, developers can define @dfn{service types} to express these
10709 relations. There can be any number of services of a given type on the
10710 system---for instance, a system running two instances of the GNU secure
10711 shell server (lsh) has two instances of @var{lsh-service-type}, with
10712 different parameters.
10713
10714 The following section describes the programming interface for service
10715 types and services.
10716
10717 @node Service Types and Services
10718 @subsubsection Service Types and Services
10719
10720 A @dfn{service type} is a node in the DAG described above. Let us start
10721 with a simple example, the service type for the Guix build daemon
10722 (@pxref{Invoking guix-daemon}):
10723
10724 @example
10725 (define guix-service-type
10726 (service-type
10727 (name 'guix)
10728 (extensions
10729 (list (service-extension shepherd-root-service-type guix-shepherd-service)
10730 (service-extension account-service-type guix-accounts)
10731 (service-extension activation-service-type guix-activation)))))
10732 @end example
10733
10734 @noindent
10735 It defines two things:
10736
10737 @enumerate
10738 @item
10739 A name, whose sole purpose is to make inspection and debugging easier.
10740
10741 @item
10742 A list of @dfn{service extensions}, where each extension designates the
10743 target service type and a procedure that, given the parameters of the
10744 service, returns a list of objects to extend the service of that type.
10745
10746 Every service type has at least one service extension. The only
10747 exception is the @dfn{boot service type}, which is the ultimate service.
10748 @end enumerate
10749
10750 In this example, @var{guix-service-type} extends three services:
10751
10752 @table @var
10753 @item shepherd-root-service-type
10754 The @var{guix-shepherd-service} procedure defines how the Shepherd
10755 service is extended. Namely, it returns a @code{<shepherd-service>}
10756 object that defines how @command{guix-daemon} is started and stopped
10757 (@pxref{Shepherd Services}).
10758
10759 @item account-service-type
10760 This extension for this service is computed by @var{guix-accounts},
10761 which returns a list of @code{user-group} and @code{user-account}
10762 objects representing the build user accounts (@pxref{Invoking
10763 guix-daemon}).
10764
10765 @item activation-service-type
10766 Here @var{guix-activation} is a procedure that returns a gexp, which is
10767 a code snippet to run at ``activation time''---e.g., when the service is
10768 booted.
10769 @end table
10770
10771 A service of this type is instantiated like this:
10772
10773 @example
10774 (service guix-service-type
10775 (guix-configuration
10776 (build-accounts 5)
10777 (use-substitutes? #f)))
10778 @end example
10779
10780 The second argument to the @code{service} form is a value representing
10781 the parameters of this specific service instance.
10782 @xref{guix-configuration-type, @code{guix-configuration}}, for
10783 information about the @code{guix-configuration} data type.
10784
10785 @var{guix-service-type} is quite simple because it extends other
10786 services but is not extensible itself.
10787
10788 @c @subsubsubsection Extensible Service Types
10789
10790 The service type for an @emph{extensible} service looks like this:
10791
10792 @example
10793 (define udev-service-type
10794 (service-type (name 'udev)
10795 (extensions
10796 (list (service-extension shepherd-root-service-type
10797 udev-shepherd-service)))
10798
10799 (compose concatenate) ;concatenate the list of rules
10800 (extend (lambda (config rules)
10801 (match config
10802 (($ <udev-configuration> udev initial-rules)
10803 (udev-configuration
10804 (udev udev) ;the udev package to use
10805 (rules (append initial-rules rules)))))))))
10806 @end example
10807
10808 This is the service type for the
10809 @uref{https://wiki.gentoo.org/wiki/Project:Eudev, eudev device
10810 management daemon}. Compared to the previous example, in addition to an
10811 extension of @var{shepherd-root-service-type}, we see two new fields:
10812
10813 @table @code
10814 @item compose
10815 This is the procedure to @dfn{compose} the list of extensions to
10816 services of this type.
10817
10818 Services can extend the udev service by passing it lists of rules; we
10819 compose those extensions simply by concatenating them.
10820
10821 @item extend
10822 This procedure defines how the value of the service is @dfn{extended} with
10823 the composition of the extensions.
10824
10825 Udev extensions are composed into a list of rules, but the udev service
10826 value is itself a @code{<udev-configuration>} record. So here, we
10827 extend that record by appending the list of rules it contains to the
10828 list of contributed rules.
10829 @end table
10830
10831 There can be only one instance of an extensible service type such as
10832 @var{udev-service-type}. If there were more, the
10833 @code{service-extension} specifications would be ambiguous.
10834
10835 Still here? The next section provides a reference of the programming
10836 interface for services.
10837
10838 @node Service Reference
10839 @subsubsection Service Reference
10840
10841 We have seen an overview of service types (@pxref{Service Types and
10842 Services}). This section provides a reference on how to manipulate
10843 services and service types. This interface is provided by the
10844 @code{(gnu services)} module.
10845
10846 @deffn {Scheme Procedure} service @var{type} @var{value}
10847 Return a new service of @var{type}, a @code{<service-type>} object (see
10848 below.) @var{value} can be any object; it represents the parameters of
10849 this particular service instance.
10850 @end deffn
10851
10852 @deffn {Scheme Procedure} service? @var{obj}
10853 Return true if @var{obj} is a service.
10854 @end deffn
10855
10856 @deffn {Scheme Procedure} service-kind @var{service}
10857 Return the type of @var{service}---i.e., a @code{<service-type>} object.
10858 @end deffn
10859
10860 @deffn {Scheme Procedure} service-parameters @var{service}
10861 Return the value associated with @var{service}. It represents its
10862 parameters.
10863 @end deffn
10864
10865 Here is an example of how a service is created and manipulated:
10866
10867 @example
10868 (define s
10869 (service nginx-service-type
10870 (nginx-configuration
10871 (nginx nginx)
10872 (log-directory log-directory)
10873 (run-directory run-directory)
10874 (file config-file))))
10875
10876 (service? s)
10877 @result{} #t
10878
10879 (eq? (service-kind s) nginx-service-type)
10880 @result{} #t
10881 @end example
10882
10883 The @code{modify-services} form provides a handy way to change the
10884 parameters of some of the services of a list such as
10885 @var{%base-services} (@pxref{Base Services, @code{%base-services}}). It
10886 evalutes to a list of services. Of course, you could always use
10887 standard list combinators such as @code{map} and @code{fold} to do that
10888 (@pxref{SRFI-1, List Library,, guile, GNU Guile Reference Manual});
10889 @code{modify-services} simply provides a more concise form for this
10890 common pattern.
10891
10892 @deffn {Scheme Syntax} modify-services @var{services} @
10893 (@var{type} @var{variable} => @var{body}) @dots{}
10894
10895 Modify the services listed in @var{services} according to the given
10896 clauses. Each clause has the form:
10897
10898 @example
10899 (@var{type} @var{variable} => @var{body})
10900 @end example
10901
10902 where @var{type} is a service type---e.g.,
10903 @code{guix-service-type}---and @var{variable} is an identifier that is
10904 bound within the @var{body} to the service parameters---e.g., a
10905 @code{guix-configuration} instance---of the original service of that
10906 @var{type}.
10907
10908 The @var{body} should evaluate to the new service parameters, which will
10909 be used to configure the new service. This new service will replace the
10910 original in the resulting list. Because a service's service parameters
10911 are created using @code{define-record-type*}, you can write a succint
10912 @var{body} that evaluates to the new service parameters by using the
10913 @code{inherit} feature that @code{define-record-type*} provides.
10914
10915 @xref{Using the Configuration System}, for example usage.
10916
10917 @end deffn
10918
10919 Next comes the programming interface for service types. This is
10920 something you want to know when writing new service definitions, but not
10921 necessarily when simply looking for ways to customize your
10922 @code{operating-system} declaration.
10923
10924 @deftp {Data Type} service-type
10925 @cindex service type
10926 This is the representation of a @dfn{service type} (@pxref{Service Types
10927 and Services}).
10928
10929 @table @asis
10930 @item @code{name}
10931 This is a symbol, used only to simplify inspection and debugging.
10932
10933 @item @code{extensions}
10934 A non-empty list of @code{<service-extension>} objects (see below).
10935
10936 @item @code{compose} (default: @code{#f})
10937 If this is @code{#f}, then the service type denotes services that cannot
10938 be extended---i.e., services that do not receive ``values'' from other
10939 services.
10940
10941 Otherwise, it must be a one-argument procedure. The procedure is called
10942 by @code{fold-services} and is passed a list of values collected from
10943 extensions. It must return a value that is a valid parameter value for
10944 the service instance.
10945
10946 @item @code{extend} (default: @code{#f})
10947 If this is @code{#f}, services of this type cannot be extended.
10948
10949 Otherwise, it must be a two-argument procedure: @code{fold-services}
10950 calls it, passing it the initial value of the service as the first argument
10951 and the result of applying @code{compose} to the extension values as the
10952 second argument.
10953 @end table
10954
10955 @xref{Service Types and Services}, for examples.
10956 @end deftp
10957
10958 @deffn {Scheme Procedure} service-extension @var{target-type} @
10959 @var{compute}
10960 Return a new extension for services of type @var{target-type}.
10961 @var{compute} must be a one-argument procedure: @code{fold-services}
10962 calls it, passing it the value associated with the service that provides
10963 the extension; it must return a valid value for the target service.
10964 @end deffn
10965
10966 @deffn {Scheme Procedure} service-extension? @var{obj}
10967 Return true if @var{obj} is a service extension.
10968 @end deffn
10969
10970 At the core of the service abstraction lies the @code{fold-services}
10971 procedure, which is responsible for ``compiling'' a list of services
10972 down to a single directory that contains everything needed to boot and
10973 run the system---the directory shown by the @command{guix system build}
10974 command (@pxref{Invoking guix system}). In essence, it propagates
10975 service extensions down the service graph, updating each node parameters
10976 on the way, until it reaches the root node.
10977
10978 @deffn {Scheme Procedure} fold-services @var{services} @
10979 [#:target-type @var{system-service-type}]
10980 Fold @var{services} by propagating their extensions down to the root of
10981 type @var{target-type}; return the root service adjusted accordingly.
10982 @end deffn
10983
10984 Lastly, the @code{(gnu services)} module also defines several essential
10985 service types, some of which are listed below.
10986
10987 @defvr {Scheme Variable} system-service-type
10988 This is the root of the service graph. It produces the system directory
10989 as returned by the @command{guix system build} command.
10990 @end defvr
10991
10992 @defvr {Scheme Variable} boot-service-type
10993 The type of the ``boot service'', which produces the @dfn{boot script}.
10994 The boot script is what the initial RAM disk runs when booting.
10995 @end defvr
10996
10997 @defvr {Scheme Variable} etc-service-type
10998 The type of the @file{/etc} service. This service can be extended by
10999 passing it name/file tuples such as:
11000
11001 @example
11002 (list `("issue" ,(plain-file "issue" "Welcome!\n")))
11003 @end example
11004
11005 In this example, the effect would be to add an @file{/etc/issue} file
11006 pointing to the given file.
11007 @end defvr
11008
11009 @defvr {Scheme Variable} setuid-program-service-type
11010 Type for the ``setuid-program service''. This service collects lists of
11011 executable file names, passed as gexps, and adds them to the set of
11012 setuid-root programs on the system (@pxref{Setuid Programs}).
11013 @end defvr
11014
11015 @defvr {Scheme Variable} profile-service-type
11016 Type of the service that populates the @dfn{system profile}---i.e., the
11017 programs under @file{/run/current-system/profile}. Other services can
11018 extend it by passing it lists of packages to add to the system profile.
11019 @end defvr
11020
11021
11022 @node Shepherd Services
11023 @subsubsection Shepherd Services
11024
11025 @cindex PID 1
11026 @cindex init system
11027 The @code{(gnu services shepherd)} module provides a way to define
11028 services managed by the GNU@tie{}Shepherd, which is the GuixSD
11029 initialization system---the first process that is started when the
11030 system boots, also known as PID@tie{}1
11031 (@pxref{Introduction,,, shepherd, The GNU Shepherd Manual}).
11032
11033 Services in the Shepherd can depend on each other. For instance, the
11034 SSH daemon may need to be started after the syslog daemon has been
11035 started, which in turn can only happen once all the file systems have
11036 been mounted. The simple operating system defined earlier (@pxref{Using
11037 the Configuration System}) results in a service graph like this:
11038
11039 @image{images/shepherd-graph,,5in,Typical shepherd service graph.}
11040
11041 You can actually generate such a graph for any operating system
11042 definition using the @command{guix system shepherd-graph} command
11043 (@pxref{system-shepherd-graph, @command{guix system shepherd-graph}}).
11044
11045 The @var{%shepherd-root-service} is a service object representing
11046 PID@tie{}1, of type @var{shepherd-root-service-type}; it can be extended
11047 by passing it lists of @code{<shepherd-service>} objects.
11048
11049 @deftp {Data Type} shepherd-service
11050 The data type representing a service managed by the Shepherd.
11051
11052 @table @asis
11053 @item @code{provision}
11054 This is a list of symbols denoting what the service provides.
11055
11056 These are the names that may be passed to @command{herd start},
11057 @command{herd status}, and similar commands (@pxref{Invoking herd,,,
11058 shepherd, The GNU Shepherd Manual}). @xref{Slots of services, the
11059 @code{provides} slot,, shepherd, The GNU Shepherd Manual}, for details.
11060
11061 @item @code{requirements} (default: @code{'()})
11062 List of symbols denoting the Shepherd services this one depends on.
11063
11064 @item @code{respawn?} (default: @code{#t})
11065 Whether to restart the service when it stops, for instance when the
11066 underlying process dies.
11067
11068 @item @code{start}
11069 @itemx @code{stop} (default: @code{#~(const #f)})
11070 The @code{start} and @code{stop} fields refer to the Shepherd's
11071 facilities to start and stop processes (@pxref{Service De- and
11072 Constructors,,, shepherd, The GNU Shepherd Manual}). They are given as
11073 G-expressions that get expanded in the Shepherd configuration file
11074 (@pxref{G-Expressions}).
11075
11076 @item @code{documentation}
11077 A documentation string, as shown when running:
11078
11079 @example
11080 herd doc @var{service-name}
11081 @end example
11082
11083 where @var{service-name} is one of the symbols in @var{provision}
11084 (@pxref{Invoking herd,,, shepherd, The GNU Shepherd Manual}).
11085
11086 @item @code{modules} (default: @var{%default-modules})
11087 This is the list of modules that must be in scope when @code{start} and
11088 @code{stop} are evaluated.
11089
11090 @end table
11091 @end deftp
11092
11093 @defvr {Scheme Variable} shepherd-root-service-type
11094 The service type for the Shepherd ``root service''---i.e., PID@tie{}1.
11095
11096 This is the service type that extensions target when they want to create
11097 shepherd services (@pxref{Service Types and Services}, for an example).
11098 Each extension must pass a list of @code{<shepherd-service>}.
11099 @end defvr
11100
11101 @defvr {Scheme Variable} %shepherd-root-service
11102 This service represents PID@tie{}1.
11103 @end defvr
11104
11105
11106 @node Installing Debugging Files
11107 @section Installing Debugging Files
11108
11109 @cindex debugging files
11110 Program binaries, as produced by the GCC compilers for instance, are
11111 typically written in the ELF format, with a section containing
11112 @dfn{debugging information}. Debugging information is what allows the
11113 debugger, GDB, to map binary code to source code; it is required to
11114 debug a compiled program in good conditions.
11115
11116 The problem with debugging information is that is takes up a fair amount
11117 of disk space. For example, debugging information for the GNU C Library
11118 weighs in at more than 60 MiB. Thus, as a user, keeping all the
11119 debugging info of all the installed programs is usually not an option.
11120 Yet, space savings should not come at the cost of an impediment to
11121 debugging---especially in the GNU system, which should make it easier
11122 for users to exert their computing freedom (@pxref{GNU Distribution}).
11123
11124 Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a
11125 mechanism that allows users to get the best of both worlds: debugging
11126 information can be stripped from the binaries and stored in separate
11127 files. GDB is then able to load debugging information from those files,
11128 when they are available (@pxref{Separate Debug Files,,, gdb, Debugging
11129 with GDB}).
11130
11131 The GNU distribution takes advantage of this by storing debugging
11132 information in the @code{lib/debug} sub-directory of a separate package
11133 output unimaginatively called @code{debug} (@pxref{Packages with
11134 Multiple Outputs}). Users can choose to install the @code{debug} output
11135 of a package when they need it. For instance, the following command
11136 installs the debugging information for the GNU C Library and for GNU
11137 Guile:
11138
11139 @example
11140 guix package -i glibc:debug guile:debug
11141 @end example
11142
11143 GDB must then be told to look for debug files in the user's profile, by
11144 setting the @code{debug-file-directory} variable (consider setting it
11145 from the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with
11146 GDB}):
11147
11148 @example
11149 (gdb) set debug-file-directory ~/.guix-profile/lib/debug
11150 @end example
11151
11152 From there on, GDB will pick up debugging information from the
11153 @code{.debug} files under @file{~/.guix-profile/lib/debug}.
11154
11155 In addition, you will most likely want GDB to be able to show the source
11156 code being debugged. To do that, you will have to unpack the source
11157 code of the package of interest (obtained with @code{guix build
11158 --source}, @pxref{Invoking guix build}), and to point GDB to that source
11159 directory using the @code{directory} command (@pxref{Source Path,
11160 @code{directory},, gdb, Debugging with GDB}).
11161
11162 @c XXX: keep me up-to-date
11163 The @code{debug} output mechanism in Guix is implemented by the
11164 @code{gnu-build-system} (@pxref{Build Systems}). Currently, it is
11165 opt-in---debugging information is available only for the packages
11166 with definitions explicitly declaring a @code{debug} output. This may be
11167 changed to opt-out in the future if our build farm servers can handle
11168 the load. To check whether a package has a @code{debug} output, use
11169 @command{guix package --list-available} (@pxref{Invoking guix package}).
11170
11171
11172 @node Security Updates
11173 @section Security Updates
11174
11175 @cindex security updates
11176 @cindex security vulnerabilities
11177 Occasionally, important security vulnerabilities are discovered in software
11178 packages and must be patched. Guix developers try hard to keep track of
11179 known vulnerabilities and to apply fixes as soon as possible in the
11180 @code{master} branch of Guix (we do not yet provide a ``stable'' branch
11181 containing only security updates.) The @command{guix lint} tool helps
11182 developers find out about vulnerable versions of software packages in the
11183 distribution:
11184
11185 @smallexample
11186 $ guix lint -c cve
11187 gnu/packages/base.scm:652:2: glibc-2.21: probably vulnerable to CVE-2015-1781, CVE-2015-7547
11188 gnu/packages/gcc.scm:334:2: gcc-4.9.3: probably vulnerable to CVE-2015-5276
11189 gnu/packages/image.scm:312:2: openjpeg-2.1.0: probably vulnerable to CVE-2016-1923, CVE-2016-1924
11190 @dots{}
11191 @end smallexample
11192
11193 @xref{Invoking guix lint}, for more information.
11194
11195 @quotation Note
11196 As of version @value{VERSION}, the feature described below is considered
11197 ``beta''.
11198 @end quotation
11199
11200 Guix follows a functional
11201 package management discipline (@pxref{Introduction}), which implies
11202 that, when a package is changed, @emph{every package that depends on it}
11203 must be rebuilt. This can significantly slow down the deployment of
11204 fixes in core packages such as libc or Bash, since basically the whole
11205 distribution would need to be rebuilt. Using pre-built binaries helps
11206 (@pxref{Substitutes}), but deployment may still take more time than
11207 desired.
11208
11209 @cindex grafts
11210 To address this, Guix implements @dfn{grafts}, a mechanism that allows
11211 for fast deployment of critical updates without the costs associated
11212 with a whole-distribution rebuild. The idea is to rebuild only the
11213 package that needs to be patched, and then to ``graft'' it onto packages
11214 explicitly installed by the user and that were previously referring to
11215 the original package. The cost of grafting is typically very low, and
11216 order of magnitudes lower than a full rebuild of the dependency chain.
11217
11218 @cindex replacements of packages, for grafts
11219 For instance, suppose a security update needs to be applied to Bash.
11220 Guix developers will provide a package definition for the ``fixed''
11221 Bash, say @var{bash-fixed}, in the usual way (@pxref{Defining
11222 Packages}). Then, the original package definition is augmented with a
11223 @code{replacement} field pointing to the package containing the bug fix:
11224
11225 @example
11226 (define bash
11227 (package
11228 (name "bash")
11229 ;; @dots{}
11230 (replacement bash-fixed)))
11231 @end example
11232
11233 From there on, any package depending directly or indirectly on Bash---as
11234 reported by @command{guix gc --requisites} (@pxref{Invoking guix
11235 gc})---that is installed is automatically ``rewritten'' to refer to
11236 @var{bash-fixed} instead of @var{bash}. This grafting process takes
11237 time proportional to the size of the package, usually less than a
11238 minute for an ``average'' package on a recent machine. Grafting is
11239 recursive: when an indirect dependency requires grafting, then grafting
11240 ``propagates'' up to the package that the user is installing.
11241
11242 Currently, the graft and the package it replaces (@var{bash-fixed} and
11243 @var{bash} in the example above) must have the exact same @code{name}
11244 and @code{version} fields. This restriction mostly comes from the fact
11245 that grafting works by patching files, including binary files, directly.
11246 Other restrictions may apply: for instance, when adding a graft to a
11247 package providing a shared library, the original shared library and its
11248 replacement must have the same @code{SONAME} and be binary-compatible.
11249
11250 The @option{--no-grafts} command-line option allows you to forcefully
11251 avoid grafting (@pxref{Common Build Options, @option{--no-grafts}}).
11252 Thus, the command:
11253
11254 @example
11255 guix build bash --no-grafts
11256 @end example
11257
11258 @noindent
11259 returns the store file name of the original Bash, whereas:
11260
11261 @example
11262 guix build bash
11263 @end example
11264
11265 @noindent
11266 returns the store file name of the ``fixed'', replacement Bash. This
11267 allows you to distinguish between the two variants of Bash.
11268
11269 To verify which Bash your whole profile refers to, you can run
11270 (@pxref{Invoking guix gc}):
11271
11272 @example
11273 guix gc -R `readlink -f ~/.guix-profile` | grep bash
11274 @end example
11275
11276 @noindent
11277 @dots{} and compare the store file names that you get with those above.
11278 Likewise for a complete GuixSD system generation:
11279
11280 @example
11281 guix gc -R `guix system build my-config.scm` | grep bash
11282 @end example
11283
11284 Lastly, to check which Bash running processes are using, you can use the
11285 @command{lsof} command:
11286
11287 @example
11288 lsof | grep /gnu/store/.*bash
11289 @end example
11290
11291
11292 @node Package Modules
11293 @section Package Modules
11294
11295 From a programming viewpoint, the package definitions of the
11296 GNU distribution are provided by Guile modules in the @code{(gnu packages
11297 @dots{})} name space@footnote{Note that packages under the @code{(gnu
11298 packages @dots{})} module name space are not necessarily ``GNU
11299 packages''. This module naming scheme follows the usual Guile module
11300 naming convention: @code{gnu} means that these modules are distributed
11301 as part of the GNU system, and @code{packages} identifies modules that
11302 define packages.} (@pxref{Modules, Guile modules,, guile, GNU Guile
11303 Reference Manual}). For instance, the @code{(gnu packages emacs)}
11304 module exports a variable named @code{emacs}, which is bound to a
11305 @code{<package>} object (@pxref{Defining Packages}).
11306
11307 The @code{(gnu packages @dots{})} module name space is
11308 automatically scanned for packages by the command-line tools. For
11309 instance, when running @code{guix package -i emacs}, all the @code{(gnu
11310 packages @dots{})} modules are scanned until one that exports a package
11311 object whose name is @code{emacs} is found. This package search
11312 facility is implemented in the @code{(gnu packages)} module.
11313
11314 @cindex customization, of packages
11315 @cindex package module search path
11316 Users can store package definitions in modules with different
11317 names---e.g., @code{(my-packages emacs)}@footnote{Note that the file
11318 name and module name must match. For instance, the @code{(my-packages
11319 emacs)} module must be stored in a @file{my-packages/emacs.scm} file
11320 relative to the load path specified with @option{--load-path} or
11321 @code{GUIX_PACKAGE_PATH}. @xref{Modules and the File System,,,
11322 guile, GNU Guile Reference Manual}, for details.}. These package definitions
11323 will not be visible by default. Users can invoke commands such as
11324 @command{guix package} and @command{guix build} with the
11325 @code{-e} option so that they know where to find the package. Better
11326 yet, they can use the
11327 @code{-L} option of these commands to make those modules visible
11328 (@pxref{Invoking guix build, @code{--load-path}}), or define the
11329 @code{GUIX_PACKAGE_PATH} environment variable. This environment
11330 variable makes it easy to extend or customize the distribution and is
11331 honored by all the user interfaces.
11332
11333 @defvr {Environment Variable} GUIX_PACKAGE_PATH
11334 This is a colon-separated list of directories to search for additional
11335 package modules. Directories listed in this variable take precedence
11336 over the own modules of the distribution.
11337 @end defvr
11338
11339 The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}:
11340 each package is built based solely on other packages in the
11341 distribution. The root of this dependency graph is a small set of
11342 @dfn{bootstrap binaries}, provided by the @code{(gnu packages
11343 bootstrap)} module. For more information on bootstrapping,
11344 @pxref{Bootstrapping}.
11345
11346 @node Packaging Guidelines
11347 @section Packaging Guidelines
11348
11349 The GNU distribution is nascent and may well lack some of your favorite
11350 packages. This section describes how you can help make the distribution
11351 grow. @xref{Contributing}, for additional information on how you can
11352 help.
11353
11354 Free software packages are usually distributed in the form of
11355 @dfn{source code tarballs}---typically @file{tar.gz} files that contain
11356 all the source files. Adding a package to the distribution means
11357 essentially two things: adding a @dfn{recipe} that describes how to
11358 build the package, including a list of other packages required to build
11359 it, and adding @dfn{package metadata} along with that recipe, such as a
11360 description and licensing information.
11361
11362 In Guix all this information is embodied in @dfn{package definitions}.
11363 Package definitions provide a high-level view of the package. They are
11364 written using the syntax of the Scheme programming language; in fact,
11365 for each package we define a variable bound to the package definition,
11366 and export that variable from a module (@pxref{Package Modules}).
11367 However, in-depth Scheme knowledge is @emph{not} a prerequisite for
11368 creating packages. For more information on package definitions,
11369 @pxref{Defining Packages}.
11370
11371 Once a package definition is in place, stored in a file in the Guix
11372 source tree, it can be tested using the @command{guix build} command
11373 (@pxref{Invoking guix build}). For example, assuming the new package is
11374 called @code{gnew}, you may run this command from the Guix build tree
11375 (@pxref{Running Guix Before It Is Installed}):
11376
11377 @example
11378 ./pre-inst-env guix build gnew --keep-failed
11379 @end example
11380
11381 Using @code{--keep-failed} makes it easier to debug build failures since
11382 it provides access to the failed build tree. Another useful
11383 command-line option when debugging is @code{--log-file}, to access the
11384 build log.
11385
11386 If the package is unknown to the @command{guix} command, it may be that
11387 the source file contains a syntax error, or lacks a @code{define-public}
11388 clause to export the package variable. To figure it out, you may load
11389 the module from Guile to get more information about the actual error:
11390
11391 @example
11392 ./pre-inst-env guile -c '(use-modules (gnu packages gnew))'
11393 @end example
11394
11395 Once your package builds correctly, please send us a patch
11396 (@pxref{Contributing}). Well, if you need help, we will be happy to
11397 help you too. Once the patch is committed in the Guix repository, the
11398 new package automatically gets built on the supported platforms by
11399 @url{http://hydra.gnu.org/jobset/gnu/master, our continuous integration
11400 system}.
11401
11402 @cindex substituter
11403 Users can obtain the new package definition simply by running
11404 @command{guix pull} (@pxref{Invoking guix pull}). When
11405 @code{hydra.gnu.org} is done building the package, installing the
11406 package automatically downloads binaries from there
11407 (@pxref{Substitutes}). The only place where human intervention is
11408 needed is to review and apply the patch.
11409
11410
11411 @menu
11412 * Software Freedom:: What may go into the distribution.
11413 * Package Naming:: What's in a name?
11414 * Version Numbers:: When the name is not enough.
11415 * Synopses and Descriptions:: Helping users find the right package.
11416 * Python Modules:: Taming the snake.
11417 * Perl Modules:: Little pearls.
11418 * Java Packages:: Coffee break.
11419 * Fonts:: Fond of fonts.
11420 @end menu
11421
11422 @node Software Freedom
11423 @subsection Software Freedom
11424
11425 @c Adapted from http://www.gnu.org/philosophy/philosophy.html.
11426
11427 The GNU operating system has been developed so that users can have
11428 freedom in their computing. GNU is @dfn{free software}, meaning that
11429 users have the @url{http://www.gnu.org/philosophy/free-sw.html,four
11430 essential freedoms}: to run the program, to study and change the program
11431 in source code form, to redistribute exact copies, and to distribute
11432 modified versions. Packages found in the GNU distribution provide only
11433 software that conveys these four freedoms.
11434
11435 In addition, the GNU distribution follow the
11436 @url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free
11437 software distribution guidelines}. Among other things, these guidelines
11438 reject non-free firmware, recommendations of non-free software, and
11439 discuss ways to deal with trademarks and patents.
11440
11441 Some otherwise free upstream package sources contain a small and optional
11442 subset that violates the above guidelines, for instance because this subset
11443 is itself non-free code. When that happens, the offending items are removed
11444 with appropriate patches or code snippets in the @code{origin} form of the
11445 package (@pxref{Defining Packages}). This way, @code{guix
11446 build --source} returns the ``freed'' source rather than the unmodified
11447 upstream source.
11448
11449
11450 @node Package Naming
11451 @subsection Package Naming
11452
11453 A package has actually two names associated with it:
11454 First, there is the name of the @emph{Scheme variable}, the one following
11455 @code{define-public}. By this name, the package can be made known in the
11456 Scheme code, for instance as input to another package. Second, there is
11457 the string in the @code{name} field of a package definition. This name
11458 is used by package management commands such as
11459 @command{guix package} and @command{guix build}.
11460
11461 Both are usually the same and correspond to the lowercase conversion of
11462 the project name chosen upstream, with underscores replaced with
11463 hyphens. For instance, GNUnet is available as @code{gnunet}, and
11464 SDL_net as @code{sdl-net}.
11465
11466 We do not add @code{lib} prefixes for library packages, unless these are
11467 already part of the official project name. But @pxref{Python
11468 Modules} and @ref{Perl Modules} for special rules concerning modules for
11469 the Python and Perl languages.
11470
11471 Font package names are handled differently, @pxref{Fonts}.
11472
11473
11474 @node Version Numbers
11475 @subsection Version Numbers
11476
11477 We usually package only the latest version of a given free software
11478 project. But sometimes, for instance for incompatible library versions,
11479 two (or more) versions of the same package are needed. These require
11480 different Scheme variable names. We use the name as defined
11481 in @ref{Package Naming}
11482 for the most recent version; previous versions use the same name, suffixed
11483 by @code{-} and the smallest prefix of the version number that may
11484 distinguish the two versions.
11485
11486 The name inside the package definition is the same for all versions of a
11487 package and does not contain any version number.
11488
11489 For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as follows:
11490
11491 @example
11492 (define-public gtk+
11493 (package
11494 (name "gtk+")
11495 (version "3.9.12")
11496 ...))
11497 (define-public gtk+-2
11498 (package
11499 (name "gtk+")
11500 (version "2.24.20")
11501 ...))
11502 @end example
11503 If we also wanted GTK+ 3.8.2, this would be packaged as
11504 @example
11505 (define-public gtk+-3.8
11506 (package
11507 (name "gtk+")
11508 (version "3.8.2")
11509 ...))
11510 @end example
11511
11512 @c See <https://lists.gnu.org/archive/html/guix-devel/2016-01/msg00425.html>,
11513 @c for a discussion of what follows.
11514 @cindex version number, for VCS snapshots
11515 Occasionally, we package snapshots of upstream's version control system
11516 (VCS) instead of formal releases. This should remain exceptional,
11517 because it is up to upstream developers to clarify what the stable
11518 release is. Yet, it is sometimes necessary. So, what should we put in
11519 the @code{version} field?
11520
11521 Clearly, we need to make the commit identifier of the VCS snapshot
11522 visible in the version string, but we also need to make sure that the
11523 version string is monotonically increasing so that @command{guix package
11524 --upgrade} can determine which version is newer. Since commit
11525 identifiers, notably with Git, are not monotonically increasing, we add
11526 a revision number that we increase each time we upgrade to a newer
11527 snapshot. The resulting version string looks like this:
11528
11529 @example
11530 2.0.11-3.cabba9e
11531 ^ ^ ^
11532 | | `-- upstream commit ID
11533 | |
11534 | `--- Guix package revision
11535 |
11536 latest upstream version
11537 @end example
11538
11539 It is a good idea to strip commit identifiers in the @code{version}
11540 field to, say, 7 digits. It avoids an aesthetic annoyance (assuming
11541 aesthetics have a role to play here) as well as problems related to OS
11542 limits such as the maximum shebang length (127 bytes for the Linux
11543 kernel.) It is best to use the full commit identifiers in
11544 @code{origin}s, though, to avoid ambiguities. A typical package
11545 definition may look like this:
11546
11547 @example
11548 (define my-package
11549 (let ((commit "c3f29bc928d5900971f65965feaae59e1272a3f7")
11550 (revision "1")) ;Guix package revision
11551 (package
11552 (version (string-append "0.9-" revision "."
11553 (string-take commit 7)))
11554 (source (origin
11555 (method git-fetch)
11556 (uri (git-reference
11557 (url "git://example.org/my-package.git")
11558 (commit commit)))
11559 (sha256 (base32 "1mbikn@dots{}"))
11560 (file-name (string-append "my-package-" version
11561 "-checkout"))))
11562 ;; @dots{}
11563 )))
11564 @end example
11565
11566 @node Synopses and Descriptions
11567 @subsection Synopses and Descriptions
11568
11569 As we have seen before, each package in GNU@tie{}Guix includes a
11570 synopsis and a description (@pxref{Defining Packages}). Synopses and
11571 descriptions are important: They are what @command{guix package
11572 --search} searches, and a crucial piece of information to help users
11573 determine whether a given package suits their needs. Consequently,
11574 packagers should pay attention to what goes into them.
11575
11576 Synopses must start with a capital letter and must not end with a
11577 period. They must not start with ``a'' or ``the'', which usually does
11578 not bring anything; for instance, prefer ``File-frobbing tool'' over ``A
11579 tool that frobs files''. The synopsis should say what the package
11580 is---e.g., ``Core GNU utilities (file, text, shell)''---or what it is
11581 used for---e.g., the synopsis for GNU@tie{}grep is ``Print lines
11582 matching a pattern''.
11583
11584 Keep in mind that the synopsis must be meaningful for a very wide
11585 audience. For example, ``Manipulate alignments in the SAM format''
11586 might make sense for a seasoned bioinformatics researcher, but might be
11587 fairly unhelpful or even misleading to a non-specialized audience. It
11588 is a good idea to come up with a synopsis that gives an idea of the
11589 application domain of the package. In this example, this might give
11590 something like ``Manipulate nucleotide sequence alignments'', which
11591 hopefully gives the user a better idea of whether this is what they are
11592 looking for.
11593
11594 Descriptions should take between five and ten lines. Use full
11595 sentences, and avoid using acronyms without first introducing them.
11596 Please avoid marketing phrases such as ``world-leading'',
11597 ``industrial-strength'', and ``next-generation'', and avoid superlatives
11598 like ``the most advanced''---they are not helpful to users looking for a
11599 package and may even sound suspicious. Instead, try to be factual,
11600 mentioning use cases and features.
11601
11602 @cindex Texinfo markup, in package descriptions
11603 Descriptions can include Texinfo markup, which is useful to introduce
11604 ornaments such as @code{@@code} or @code{@@dfn}, bullet lists, or
11605 hyperlinks (@pxref{Overview,,, texinfo, GNU Texinfo}). However you
11606 should be careful when using some characters for example @samp{@@} and
11607 curly braces which are the basic special characters in Texinfo
11608 (@pxref{Special Characters,,, texinfo, GNU Texinfo}). User interfaces
11609 such as @command{guix package --show} take care of rendering it
11610 appropriately.
11611
11612 Synopses and descriptions are translated by volunteers
11613 @uref{http://translationproject.org/domain/guix-packages.html, at the
11614 Translation Project} so that as many users as possible can read them in
11615 their native language. User interfaces search them and display them in
11616 the language specified by the current locale.
11617
11618 Translation is a lot of work so, as a packager, please pay even more
11619 attention to your synopses and descriptions as every change may entail
11620 additional work for translators. In order to help them, it is possible
11621 to make recommendations or instructions visible to them by inserting
11622 special comments like this (@pxref{xgettext Invocation,,, gettext, GNU
11623 Gettext}):
11624
11625 @example
11626 ;; TRANSLATORS: "X11 resize-and-rotate" should not be translated.
11627 (description "ARandR is designed to provide a simple visual front end
11628 for the X11 resize-and-rotate (RandR) extension. @dots{}")
11629 @end example
11630
11631
11632 @node Python Modules
11633 @subsection Python Modules
11634
11635 We currently package Python 2 and Python 3, under the Scheme variable names
11636 @code{python-2} and @code{python} as explained in @ref{Version Numbers}.
11637 To avoid confusion and naming clashes with other programming languages, it
11638 seems desirable that the name of a package for a Python module contains
11639 the word @code{python}.
11640
11641 Some modules are compatible with only one version of Python, others with both.
11642 If the package Foo compiles only with Python 3, we name it
11643 @code{python-foo}; if it compiles only with Python 2, we name it
11644 @code{python2-foo}. If it is compatible with both versions, we create two
11645 packages with the corresponding names.
11646
11647 If a project already contains the word @code{python}, we drop this;
11648 for instance, the module python-dateutil is packaged under the names
11649 @code{python-dateutil} and @code{python2-dateutil}. If the project name
11650 starts with @code{py} (e.g. @code{pytz}), we keep it and prefix it as
11651 described above.
11652
11653
11654 @node Perl Modules
11655 @subsection Perl Modules
11656
11657 Perl programs standing for themselves are named as any other package,
11658 using the lowercase upstream name.
11659 For Perl packages containing a single class, we use the lowercase class name,
11660 replace all occurrences of @code{::} by dashes and prepend the prefix
11661 @code{perl-}.
11662 So the class @code{XML::Parser} becomes @code{perl-xml-parser}.
11663 Modules containing several classes keep their lowercase upstream name and
11664 are also prepended by @code{perl-}. Such modules tend to have the word
11665 @code{perl} somewhere in their name, which gets dropped in favor of the
11666 prefix. For instance, @code{libwww-perl} becomes @code{perl-libwww}.
11667
11668
11669 @node Java Packages
11670 @subsection Java Packages
11671
11672 Java programs standing for themselves are named as any other package,
11673 using the lowercase upstream name.
11674
11675 To avoid confusion and naming clashes with other programming languages,
11676 it is desirable that the name of a package for a Java package is
11677 prefixed with @code{java-}. If a project already contains the word
11678 @code{java}, we drop this; for instance, the package @code{ngsjava} is
11679 packaged under the name @code{java-ngs}.
11680
11681 For Java packages containing a single class or a small class hierarchy,
11682 we use the lowercase class name, replace all occurrences of @code{.} by
11683 dashes and prepend the prefix @code{java-}. So the class
11684 @code{apache.commons.cli} becomes package
11685 @code{java-apache-commons-cli}.
11686
11687
11688 @node Fonts
11689 @subsection Fonts
11690
11691 For fonts that are in general not installed by a user for typesetting
11692 purposes, or that are distributed as part of a larger software package,
11693 we rely on the general packaging rules for software; for instance, this
11694 applies to the fonts delivered as part of the X.Org system or fonts that
11695 are part of TeX Live.
11696
11697 To make it easier for a user to search for fonts, names for other packages
11698 containing only fonts are constructed as follows, independently of the
11699 upstream package name.
11700
11701 The name of a package containing only one font family starts with
11702 @code{font-}; it is followed by the foundry name and a dash @code{-}
11703 if the foundry is known, and the font family name, in which spaces are
11704 replaced by dashes (and as usual, all upper case letters are transformed
11705 to lower case).
11706 For example, the Gentium font family by SIL is packaged under the name
11707 @code{font-sil-gentium}.
11708
11709 For a package containing several font families, the name of the collection
11710 is used in the place of the font family name.
11711 For instance, the Liberation fonts consist of three families,
11712 Liberation Sans, Liberation Serif and Liberation Mono.
11713 These could be packaged separately under the names
11714 @code{font-liberation-sans} and so on; but as they are distributed together
11715 under a common name, we prefer to package them together as
11716 @code{font-liberation}.
11717
11718 In the case where several formats of the same font family or font collection
11719 are packaged separately, a short form of the format, prepended by a dash,
11720 is added to the package name. We use @code{-ttf} for TrueType fonts,
11721 @code{-otf} for OpenType fonts and @code{-type1} for PostScript Type 1
11722 fonts.
11723
11724
11725
11726 @node Bootstrapping
11727 @section Bootstrapping
11728
11729 @c Adapted from the ELS 2013 paper.
11730
11731 @cindex bootstrapping
11732
11733 Bootstrapping in our context refers to how the distribution gets built
11734 ``from nothing''. Remember that the build environment of a derivation
11735 contains nothing but its declared inputs (@pxref{Introduction}). So
11736 there's an obvious chicken-and-egg problem: how does the first package
11737 get built? How does the first compiler get compiled? Note that this is
11738 a question of interest only to the curious hacker, not to the regular
11739 user, so you can shamelessly skip this section if you consider yourself
11740 a ``regular user''.
11741
11742 @cindex bootstrap binaries
11743 The GNU system is primarily made of C code, with libc at its core. The
11744 GNU build system itself assumes the availability of a Bourne shell and
11745 command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
11746 `grep'. Furthermore, build programs---programs that run
11747 @code{./configure}, @code{make}, etc.---are written in Guile Scheme
11748 (@pxref{Derivations}). Consequently, to be able to build anything at
11749 all, from scratch, Guix relies on pre-built binaries of Guile, GCC,
11750 Binutils, libc, and the other packages mentioned above---the
11751 @dfn{bootstrap binaries}.
11752
11753 These bootstrap binaries are ``taken for granted'', though we can also
11754 re-create them if needed (more on that later).
11755
11756 @unnumberedsubsec Preparing to Use the Bootstrap Binaries
11757
11758 @c As of Emacs 24.3, Info-mode displays the image, but since it's a
11759 @c large image, it's hard to scroll. Oh well.
11760 @image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap derivations}
11761
11762 The figure above shows the very beginning of the dependency graph of the
11763 distribution, corresponding to the package definitions of the @code{(gnu
11764 packages bootstrap)} module. A similar figure can be generated with
11765 @command{guix graph} (@pxref{Invoking guix graph}), along the lines of:
11766
11767 @example
11768 guix graph -t derivation \
11769 -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
11770 | dot -Tps > t.ps
11771 @end example
11772
11773 At this level of detail, things are
11774 slightly complex. First, Guile itself consists of an ELF executable,
11775 along with many source and compiled Scheme files that are dynamically
11776 loaded when it runs. This gets stored in the @file{guile-2.0.7.tar.xz}
11777 tarball shown in this graph. This tarball is part of Guix's ``source''
11778 distribution, and gets inserted into the store with @code{add-to-store}
11779 (@pxref{The Store}).
11780
11781 But how do we write a derivation that unpacks this tarball and adds it
11782 to the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
11783 derivation---the first one that gets built---uses @code{bash} as its
11784 builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
11785 @code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar},
11786 @file{xz}, and @file{mkdir} are statically-linked binaries, also part of
11787 the Guix source distribution, whose sole purpose is to allow the Guile
11788 tarball to be unpacked.
11789
11790 Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning
11791 Guile that can be used to run subsequent build programs. Its first task
11792 is to download tarballs containing the other pre-built binaries---this
11793 is what the @code{.tar.xz.drv} derivations do. Guix modules such as
11794 @code{ftp-client.scm} are used for this purpose. The
11795 @code{module-import.drv} derivations import those modules in a directory
11796 in the store, using the original layout. The
11797 @code{module-import-compiled.drv} derivations compile those modules, and
11798 write them in an output directory with the right layout. This
11799 corresponds to the @code{#:modules} argument of
11800 @code{build-expression->derivation} (@pxref{Derivations}).
11801
11802 Finally, the various tarballs are unpacked by the
11803 derivations @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv},
11804 etc., at which point we have a working C tool chain.
11805
11806
11807 @unnumberedsubsec Building the Build Tools
11808
11809 Bootstrapping is complete when we have a full tool chain that does not
11810 depend on the pre-built bootstrap tools discussed above. This
11811 no-dependency requirement is verified by checking whether the files of
11812 the final tool chain contain references to the @file{/gnu/store}
11813 directories of the bootstrap inputs. The process that leads to this
11814 ``final'' tool chain is described by the package definitions found in
11815 the @code{(gnu packages commencement)} module.
11816
11817 The @command{guix graph} command allows us to ``zoom out'' compared to
11818 the graph above, by looking at the level of package objects instead of
11819 individual derivations---remember that a package may translate to
11820 several derivations, typically one derivation to download its source,
11821 one to build the Guile modules it needs, and one to actually build the
11822 package from source. The command:
11823
11824 @example
11825 guix graph -t bag \
11826 -e '(@@@@ (gnu packages commencement)
11827 glibc-final-with-bootstrap-bash)' | dot -Tps > t.ps
11828 @end example
11829
11830 @noindent
11831 produces the dependency graph leading to the ``final'' C
11832 library@footnote{You may notice the @code{glibc-intermediate} label,
11833 suggesting that it is not @emph{quite} final, but as a good
11834 approximation, we will consider it final.}, depicted below.
11835
11836 @image{images/bootstrap-packages,6in,,Dependency graph of the early packages}
11837
11838 @c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
11839 The first tool that gets built with the bootstrap binaries is
11840 GNU@tie{}Make---noted @code{make-boot0} above---which is a prerequisite
11841 for all the following packages. From there Findutils and Diffutils get
11842 built.
11843
11844 Then come the first-stage Binutils and GCC, built as pseudo cross
11845 tools---i.e., with @code{--target} equal to @code{--host}. They are
11846 used to build libc. Thanks to this cross-build trick, this libc is
11847 guaranteed not to hold any reference to the initial tool chain.
11848
11849 From there the final Binutils and GCC (not shown above) are built.
11850 GCC uses @code{ld}
11851 from the final Binutils, and links programs against the just-built libc.
11852 This tool chain is used to build the other packages used by Guix and by
11853 the GNU Build System: Guile, Bash, Coreutils, etc.
11854
11855 And voilà! At this point we have the complete set of build tools that
11856 the GNU Build System expects. These are in the @code{%final-inputs}
11857 variable of the @code{(gnu packages commencement)} module, and are
11858 implicitly used by any package that uses @code{gnu-build-system}
11859 (@pxref{Build Systems, @code{gnu-build-system}}).
11860
11861
11862 @unnumberedsubsec Building the Bootstrap Binaries
11863
11864 Because the final tool chain does not depend on the bootstrap binaries,
11865 those rarely need to be updated. Nevertheless, it is useful to have an
11866 automated way to produce them, should an update occur, and this is what
11867 the @code{(gnu packages make-bootstrap)} module provides.
11868
11869 The following command builds the tarballs containing the bootstrap
11870 binaries (Guile, Binutils, GCC, libc, and a tarball containing a mixture
11871 of Coreutils and other basic command-line tools):
11872
11873 @example
11874 guix build bootstrap-tarballs
11875 @end example
11876
11877 The generated tarballs are those that should be referred to in the
11878 @code{(gnu packages bootstrap)} module mentioned at the beginning of
11879 this section.
11880
11881 Still here? Then perhaps by now you've started to wonder: when do we
11882 reach a fixed point? That is an interesting question! The answer is
11883 unknown, but if you would like to investigate further (and have
11884 significant computational and storage resources to do so), then let us
11885 know.
11886
11887 @node Porting
11888 @section Porting to a New Platform
11889
11890 As discussed above, the GNU distribution is self-contained, and
11891 self-containment is achieved by relying on pre-built ``bootstrap
11892 binaries'' (@pxref{Bootstrapping}). These binaries are specific to an
11893 operating system kernel, CPU architecture, and application binary
11894 interface (ABI). Thus, to port the distribution to a platform that is
11895 not yet supported, one must build those bootstrap binaries, and update
11896 the @code{(gnu packages bootstrap)} module to use them on that platform.
11897
11898 Fortunately, Guix can @emph{cross compile} those bootstrap binaries.
11899 When everything goes well, and assuming the GNU tool chain supports the
11900 target platform, this can be as simple as running a command like this
11901 one:
11902
11903 @example
11904 guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
11905 @end example
11906
11907 For this to work, the @code{glibc-dynamic-linker} procedure in
11908 @code{(gnu packages bootstrap)} must be augmented to return the right
11909 file name for libc's dynamic linker on that platform; likewise,
11910 @code{system->linux-architecture} in @code{(gnu packages linux)} must be
11911 taught about the new platform.
11912
11913 Once these are built, the @code{(gnu packages bootstrap)} module needs
11914 to be updated to refer to these binaries on the target platform. That
11915 is, the hashes and URLs of the bootstrap tarballs for the new platform
11916 must be added alongside those of the currently supported platforms. The
11917 bootstrap Guile tarball is treated specially: it is expected to be
11918 available locally, and @file{gnu/local.mk} has rules do download it for
11919 the supported architectures; a rule for the new platform must be added
11920 as well.
11921
11922 In practice, there may be some complications. First, it may be that the
11923 extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
11924 above) is not recognized by all the GNU tools. Typically, glibc
11925 recognizes some of these, whereas GCC uses an extra @code{--with-abi}
11926 configure flag (see @code{gcc.scm} for examples of how to handle this).
11927 Second, some of the required packages could fail to build for that
11928 platform. Lastly, the generated binaries could be broken for some
11929 reason.
11930
11931 @c *********************************************************************
11932 @include contributing.texi
11933
11934 @c *********************************************************************
11935 @node Acknowledgments
11936 @chapter Acknowledgments
11937
11938 Guix is based on the @uref{http://nixos.org/nix/, Nix package manager},
11939 which was designed and
11940 implemented by Eelco Dolstra, with contributions from other people (see
11941 the @file{nix/AUTHORS} file in Guix.) Nix pioneered functional package
11942 management, and promoted unprecedented features, such as transactional
11943 package upgrades and rollbacks, per-user profiles, and referentially
11944 transparent build processes. Without this work, Guix would not exist.
11945
11946 The Nix-based software distributions, Nixpkgs and NixOS, have also been
11947 an inspiration for Guix.
11948
11949 GNU@tie{}Guix itself is a collective work with contributions from a
11950 number of people. See the @file{AUTHORS} file in Guix for more
11951 information on these fine people. The @file{THANKS} file lists people
11952 who have helped by reporting bugs, taking care of the infrastructure,
11953 providing artwork and themes, making suggestions, and more---thank you!
11954
11955
11956 @c *********************************************************************
11957 @node GNU Free Documentation License
11958 @appendix GNU Free Documentation License
11959
11960 @include fdl-1.3.texi
11961
11962 @c *********************************************************************
11963 @node Concept Index
11964 @unnumbered Concept Index
11965 @printindex cp
11966
11967 @node Programming Index
11968 @unnumbered Programming Index
11969 @syncodeindex tp fn
11970 @syncodeindex vr fn
11971 @printindex fn
11972
11973 @bye
11974
11975 @c Local Variables:
11976 @c ispell-local-dictionary: "american";
11977 @c End: