emacs: Add 'guix-search-by-name'.
[jackhill/guix/guix.git] / doc / guix.texi
CommitLineData
568717fd
LC
1\input texinfo
2@c -*-texinfo-*-
3
4@c %**start of header
5@setfilename guix.info
6@documentencoding UTF-8
f8348b91 7@settitle GNU Guix Reference Manual
568717fd
LC
8@c %**end of header
9
10@include version.texi
7df7a74e
NK
11
12@copying
db5a9444 13Copyright @copyright{} 2012, 2013, 2014, 2015, 2016 Ludovic Courtès@*
af8a56b8 14Copyright @copyright{} 2013, 2014 Andreas Enge@*
87eafdbd 15Copyright @copyright{} 2013 Nikita Karetnikov@*
8c01b9d0
ML
16Copyright @copyright{} 2015 Mathieu Lirzin@*
17Copyright @copyright{} 2014 Pierre-Antoine Rault@*
87eafdbd 18Copyright @copyright{} 2015 Taylan Ulrich Bayırlı/Kammer
dd816355 19Copyright @copyright{} 2015 Leo Famulari
7df7a74e
NK
20
21Permission is granted to copy, distribute and/or modify this document
22under the terms of the GNU Free Documentation License, Version 1.3 or
23any later version published by the Free Software Foundation; with no
24Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
25copy of the license is included in the section entitled ``GNU Free
26Documentation License''.
27@end copying
568717fd 28
eeaf4427 29@dircategory Package management
568717fd
LC
30@direntry
31* guix: (guix). Guix, the functional package manager.
e49951eb 32* guix package: (guix)Invoking guix package
eeaf4427 33 Managing packages with Guix.
e49951eb 34* guix build: (guix)Invoking guix build
568717fd 35 Building packages with Guix.
054e8576
LC
36* guix system: (guix)Invoking guix system
37 Managing the operating system configuration.
568717fd 38@end direntry
568717fd 39
372c4bbc
DT
40@dircategory Software development
41@direntry
42* guix environment: (guix)Invoking guix environment
43 Building development environments with Guix.
44@end direntry
45
568717fd 46@titlepage
7730d112
LC
47@title GNU Guix Reference Manual
48@subtitle Using the GNU Guix Functional Package Manager
2cbed07e 49@author The GNU Guix Developers
568717fd
LC
50
51@page
52@vskip 0pt plus 1filll
53Edition @value{EDITION} @*
54@value{UPDATED} @*
55
7df7a74e 56@insertcopying
568717fd
LC
57@end titlepage
58
568717fd
LC
59@contents
60
61@c *********************************************************************
62@node Top
f8348b91 63@top GNU Guix
568717fd 64
f8348b91
LC
65This document describes GNU Guix version @value{VERSION}, a functional
66package management tool written for the GNU system.
568717fd
LC
67
68@menu
69* Introduction:: What is Guix about?
bd5e766b 70* Installation:: Installing Guix.
eeaf4427 71* Package Management:: Package installation, upgrade, etc.
c554de89 72* Emacs Interface:: Using Guix from Emacs.
568717fd
LC
73* Programming Interface:: Using Guix in Scheme.
74* Utilities:: Package management commands.
a1ba8475 75* GNU Distribution:: Software for your friendly GNU system.
9bf3c1a7 76* Contributing:: Your help needed!
568717fd
LC
77
78* Acknowledgments:: Thanks!
79* GNU Free Documentation License:: The license of this manual.
80* Concept Index:: Concepts.
a85b83d2 81* Programming Index:: Data types, functions, and variables.
aaa3eaa9
LC
82
83@detailmenu
84 --- The Detailed Node Listing ---
85
86Installation
87
1b2b8177 88* Binary Installation:: Getting Guix running in no time!
aaa3eaa9 89* Requirements:: Software needed to build and run Guix.
ec0339cd 90* Running the Test Suite:: Testing Guix.
aaa3eaa9
LC
91* Setting Up the Daemon:: Preparing the build daemon's environment.
92* Invoking guix-daemon:: Running the build daemon.
0e2d0213 93* Application Setup:: Application-specific setup.
aaa3eaa9
LC
94
95Setting Up the Daemon
96
97* Build Environment Setup:: Preparing the isolated build environment.
98* Daemon Offload Setup:: Offloading builds to remote machines.
99
100Package Management
101
102* Features:: How Guix will make your life brighter.
103* Invoking guix package:: Package installation, removal, etc.
aaa3eaa9
LC
104* Substitutes:: Downloading pre-built binaries.
105* Packages with Multiple Outputs:: Single source package, multiple outputs.
106* Invoking guix gc:: Running the garbage collector.
107* Invoking guix pull:: Fetching the latest Guix and distribution.
108* Invoking guix archive:: Exporting and importing store files.
109
c554de89
AK
110Emacs Interface
111
112* Initial Setup: Emacs Initial Setup. Preparing @file{~/.emacs}.
113* Package Management: Emacs Package Management. Managing packages and generations.
9b0afb0d 114* Popup Interface: Emacs Popup Interface. Magit-like interface for guix commands.
c554de89 115* Prettify Mode: Emacs Prettify. Abbreviating @file{/gnu/store/@dots{}} file names.
34850cd5 116* Build Log Mode: Emacs Build Log. Highlighting Guix build logs.
187f80c6
AK
117* Completions: Emacs Completions. Completing @command{guix} shell command.
118* Development: Emacs Development. Tools for Guix developers.
32950fc8 119* Hydra: Emacs Hydra. Interface for Guix build farm.
c554de89 120
aaa3eaa9
LC
121Programming Interface
122
123* Defining Packages:: Defining new packages.
124* Build Systems:: Specifying how packages are built.
125* The Store:: Manipulating the package store.
126* Derivations:: Low-level interface to package derivations.
127* The Store Monad:: Purely functional interface to the store.
128* G-Expressions:: Manipulating build expressions.
129
92492b23
LC
130Defining Packages
131
132* package Reference:: The package data type.
133* origin Reference:: The origin data type.
134
aaa3eaa9
LC
135Utilities
136
137* Invoking guix build:: Building packages from the command line.
fcc58db6 138* Invoking guix edit:: Editing package definitions.
aaa3eaa9
LC
139* Invoking guix download:: Downloading a file and printing its hash.
140* Invoking guix hash:: Computing the cryptographic hash of a file.
141* Invoking guix import:: Importing package definitions.
142* Invoking guix refresh:: Updating package definitions.
143* Invoking guix lint:: Finding errors in package definitions.
fcc58db6 144* Invoking guix size:: Profiling disk usage.
88856916 145* Invoking guix graph:: Visualizing the graph of packages.
aaa3eaa9 146* Invoking guix environment:: Setting up development environments.
aff8ce7c 147* Invoking guix publish:: Sharing substitutes.
d23c20f1 148* Invoking guix challenge:: Challenging substitute servers.
32efa254 149* Invoking guix container:: Process isolation.
aaa3eaa9
LC
150
151GNU Distribution
152
153* System Installation:: Installing the whole operating system.
35ed9306 154* System Configuration:: Configuring the operating system.
aaa3eaa9
LC
155* Installing Debugging Files:: Feeding the debugger.
156* Security Updates:: Deploying security fixes quickly.
157* Package Modules:: Packages from the programmer's viewpoint.
158* Packaging Guidelines:: Growing the distribution.
159* Bootstrapping:: GNU/Linux built from scratch.
160* Porting:: Targeting another platform or kernel.
161
162System Configuration
163
164* Using the Configuration System:: Customizing your GNU system.
165* operating-system Reference:: Detail of operating-system declarations.
166* File Systems:: Configuring file system mounts.
167* Mapped Devices:: Block device extra processing.
168* User Accounts:: Specifying user accounts.
598e19dc 169* Locales:: Language and cultural convention settings.
aaa3eaa9
LC
170* Services:: Specifying system services.
171* Setuid Programs:: Programs running with root privileges.
1b2b8177 172* X.509 Certificates:: Authenticating HTTPS servers.
996ed739 173* Name Service Switch:: Configuring libc's name service switch.
aaa3eaa9
LC
174* Initial RAM Disk:: Linux-Libre bootstrapping.
175* GRUB Configuration:: Configuring the boot loader.
176* Invoking guix system:: Instantiating a system configuration.
177* Defining Services:: Adding new service definitions.
178
179Services
180
181* Base Services:: Essential system services.
182* Networking Services:: Network setup, SSH daemon, etc.
183* X Window:: Graphical display.
1b2b8177
LC
184* Desktop Services:: D-Bus and desktop services.
185* Database Services:: SQL databases.
d8c18af8 186* Mail Services:: IMAP, POP3, SMTP, and all that.
cbd02397 187* Web Services:: Web servers.
aa4ed923 188* Various Services:: Other services.
aaa3eaa9 189
0adfe95a
LC
190Defining Services
191
192* Service Composition:: The model for composing services.
193* Service Types and Services:: Types and services.
194* Service Reference:: API reference.
195* dmd Services:: A particular type of service.
196
aaa3eaa9
LC
197Packaging Guidelines
198
ec0339cd
LC
199* Software Freedom:: What may go into the distribution.
200* Package Naming:: What's in a name?
201* Version Numbers:: When the name is not enough.
cbd02397 202* Synopses and Descriptions:: Helping users find the right package.
ec0339cd
LC
203* Python Modules:: Taming the snake.
204* Perl Modules:: Little pearls.
205* Fonts:: Fond of fonts.
aaa3eaa9 206
8c01b9d0
ML
207Contributing
208
209* Building from Git:: The latest and greatest.
210* Running Guix Before It Is Installed:: Hacker tricks.
211* The Perfect Setup:: The right tools.
212* Coding Style:: Hygiene of the contributor.
213* Submitting Patches:: Share your work.
214
215Coding Style
216
217* Programming Paradigm:: How to compose your elements.
218* Modules:: Where to store your code?
219* Data Types and Pattern Matching:: Implementing data structures.
220* Formatting Code:: Writing conventions.
221
aaa3eaa9 222@end detailmenu
568717fd
LC
223@end menu
224
225@c *********************************************************************
226@node Introduction
227@chapter Introduction
228
c80e7e55
LC
229GNU Guix@footnote{``Guix'' is pronounced like ``geeks'', or ``ɡiːks''
230using the international phonetic alphabet (IPA).} is a functional
231package management tool for the GNU system. Package management consists
4bfc4ea3
NK
232of all activities that relate to building packages from sources,
233honoring their build-time and run-time dependencies,
c80e7e55
LC
234installing packages in user environments, upgrading installed packages
235to new versions or rolling back to a previous set, removing unused
236software packages, etc.
568717fd
LC
237
238@cindex functional package management
239The term @dfn{functional} refers to a specific package management
136787cb
LC
240discipline pioneered by Nix (@pxref{Acknowledgments}).
241In Guix, the package build and installation process is seen
4bfc4ea3
NK
242as a function, in the mathematical sense. That function takes inputs,
243such as build scripts, a compiler, and libraries, and
244returns an installed package. As a pure function, its result depends
568717fd
LC
245solely on its inputs---for instance, it cannot refer to software or
246scripts that were not explicitly passed as inputs. A build function
4bfc4ea3
NK
247always produces the same result when passed a given set of inputs. It
248cannot alter the system's environment in
568717fd
LC
249any way; for instance, it cannot create, modify, or delete files outside
250of its build and installation directories. This is achieved by running
e900c503 251build processes in isolated environments (or @dfn{containers}), where only their
4bfc4ea3 252explicit inputs are visible.
568717fd 253
e531ac2a 254@cindex store
568717fd 255The result of package build functions is @dfn{cached} in the file
e531ac2a
LC
256system, in a special directory called @dfn{the store} (@pxref{The
257Store}). Each package is installed in a directory of its own, in the
834129e0 258store---by default under @file{/gnu/store}. The directory name contains
568717fd
LC
259a hash of all the inputs used to build that package; thus, changing an
260input yields a different directory name.
261
262This approach is the foundation of Guix's salient features: support for
4bfc4ea3 263transactional package upgrade and rollback, per-user installation, and
eeaf4427 264garbage collection of packages (@pxref{Features}).
568717fd 265
4bfc4ea3 266Guix has a command-line interface, which allows users to build, install,
568717fd 267upgrade, and remove packages, as well as a Scheme programming interface.
568717fd 268
3ca2731c 269@cindex Guix System Distribution
4705641f 270@cindex GuixSD
a1ba8475 271Last but not least, Guix is used to build a distribution of the GNU
3ca2731c 272system, with many GNU and non-GNU free software packages. The Guix
4705641f
LC
273System Distribution, or GNU@tie{}GuixSD, takes advantage of the core
274properties of Guix at the system level. With GuixSD, users
3ca2731c
LC
275@emph{declare} all aspects of the operating system configuration, and
276Guix takes care of instantiating that configuration in a reproducible,
277stateless fashion. @xref{GNU Distribution}.
a1ba8475 278
bd5e766b
LC
279@c *********************************************************************
280@node Installation
281@chapter Installation
282
48febeb8
LC
283GNU Guix is available for download from its website at
284@url{http://www.gnu.org/software/guix/}. This section describes the
285software requirements of Guix, as well as how to install it and get
286ready to use it.
bd5e766b 287
5af6de3e
LC
288Note that this section is concerned with the installation of the package
289manager, which can be done on top of a running GNU/Linux system. If,
290instead, you want to install the complete GNU operating system,
6621cdb6 291@pxref{System Installation}.
5af6de3e 292
bd5e766b 293@menu
09722b11 294* Binary Installation:: Getting Guix running in no time!
bd5e766b 295* Requirements:: Software needed to build and run Guix.
ec0339cd 296* Running the Test Suite:: Testing Guix.
bd5e766b
LC
297* Setting Up the Daemon:: Preparing the build daemon's environment.
298* Invoking guix-daemon:: Running the build daemon.
0e2d0213 299* Application Setup:: Application-specific setup.
bd5e766b
LC
300@end menu
301
09722b11
LC
302@node Binary Installation
303@section Binary Installation
304
305This section describes how to install Guix on an arbitrary system from a
306self-contained tarball providing binaries for Guix and for all its
307dependencies. This is often quicker than installing from source, which
308is described in the next sections. The only requirement is to have
309GNU@tie{}tar and Xz.
310
311Installing goes along these lines:
312
313@enumerate
314@item
315Download the binary tarball from
daa8922a
LC
316@indicateurl{ftp://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz},
317where @var{system} is @code{x86_64-linux} for an @code{x86_64} machine
318already running the kernel Linux, and so on.
319
320Make sure to download the associated @file{.sig} file and to verify the
321authenticity of the tarball against it, along these lines:
322
323@example
324$ wget ftp://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
325$ gpg --verify guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
326@end example
327
328If that command fails because you don't have the required public key,
329then run this command to import it:
330
331@example
332$ gpg --keyserver keys.gnupg.net --recv-keys 3D9AEBB5
333@end example
334
335@noindent
336and rerun the @code{gpg --verify} command.
09722b11
LC
337
338@item
339As @code{root}, run:
340
341@example
5dc42964 342# cd /tmp
254b1c2e
LC
343# tar --warning=no-timestamp -xf \
344 guix-binary-@value{VERSION}.@var{system}.tar.xz
5dc42964 345# mv var/guix /var/ && mv gnu /
09722b11
LC
346@end example
347
7acd3439
LC
348This creates @file{/gnu/store} (@pxref{The Store}) and @file{/var/guix}.
349The latter contains a ready-to-use profile for @code{root} (see next
350step.)
09722b11 351
5dc3ce5f
LC
352Do @emph{not} unpack the tarball on a working Guix system since that
353would overwrite its own essential files.
354
254b1c2e 355The @code{--warning=no-timestamp} option makes sure GNU@tie{}tar does
e9ba6357
LC
356not emit warnings about ``implausibly old time stamps'' (such
357warnings were triggered by GNU@tie{}tar 1.26 and older; recent
358versions are fine.)
359They stem from the fact that all the
254b1c2e
LC
360files in the archive have their modification time set to zero (which
361means January 1st, 1970.) This is done on purpose to make sure the
362archive content is independent of its creation time, thus making it
363reproducible.
364
7acd3439
LC
365@item
366Make @code{root}'s profile available under @file{~/.guix-profile}:
367
368@example
369# ln -sf /var/guix/profiles/per-user/root/guix-profile \
370 ~root/.guix-profile
371@end example
372
43c33047
LC
373@item
374Create the group and user accounts for build users as explained below
375(@pxref{Build Environment Setup}).
376
09722b11 377@item
175ced41 378Run the daemon:
09722b11
LC
379
380@example
7acd3439 381# ~root/.guix-profile/bin/guix-daemon --build-users-group=guixbuild
09722b11
LC
382@end example
383
d2825c96
LC
384On hosts using the systemd init system, drop
385@file{~root/.guix-profile/lib/systemd/system/guix-daemon.service} in
386@file{/etc/systemd/system}.
387
ad227484
MDRS
388Likewise, on hosts using the Upstart init system, drop
389@file{~root/.guix-profile/lib/upstart/system/guix-daemon.conf} in
390@file{/etc/init}.
391
09722b11
LC
392@item
393Make the @command{guix} command available to other users on the machine,
394for instance with:
395
396@example
397# mkdir -p /usr/local/bin
398# cd /usr/local/bin
d72d05f9 399# ln -s /var/guix/profiles/per-user/root/guix-profile/bin/guix
09722b11 400@end example
39f8ed14
LC
401
402@item
403To use substitutes from @code{hydra.gnu.org} (@pxref{Substitutes}),
404authorize them:
405
406@example
7acd3439 407# guix archive --authorize < ~root/.guix-profile/share/guix/hydra.gnu.org.pub
39f8ed14 408@end example
09722b11
LC
409@end enumerate
410
53de532f
LC
411And that's it! For additional tips and tricks, @pxref{Application
412Setup}.
09722b11 413
5dc3ce5f 414The @code{guix} package must remain available in @code{root}'s
09722b11
LC
415profile, or it would become subject to garbage collection---in which
416case you would find yourself badly handicapped by the lack of the
417@command{guix} command.
418
39f8ed14
LC
419The tarball in question can be (re)produced and verified simply by
420running the following command in the Guix source tree:
09722b11
LC
421
422@example
423make guix-binary.@var{system}.tar.xz
424@end example
425
426
bd5e766b
LC
427@node Requirements
428@section Requirements
429
09722b11
LC
430This section lists requirements when building Guix from source. The
431build procedure for Guix is the same as for other GNU software, and is
432not covered here. Please see the files @file{README} and @file{INSTALL}
433in the Guix source tree for additional details.
434
bd5e766b
LC
435GNU Guix depends on the following packages:
436
437@itemize
47c66da0 438@item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.7 or later;
288dca55 439@item @url{http://gnupg.org/, GNU libgcrypt};
f0b98b84 440@item @url{http://www.gnu.org/software/make/, GNU Make}.
8a96bd4b
ID
441@end itemize
442
443The following dependencies are optional:
444
445@itemize
288dca55 446@item
8a96bd4b 447Installing
288dca55 448@url{http://savannah.nongnu.org/projects/guile-json/, Guile-JSON} will
2f7d2d91
LC
449allow you to use the @command{guix import pypi} command (@pxref{Invoking
450guix import}). It is of
288dca55 451interest primarily for developers and not for casual users.
8a96bd4b
ID
452@item
453Installing @uref{http://gnutls.org/, GnuTLS-Guile} will
454allow you to access @code{https} URLs with the @command{guix download}
d45dc6da
EB
455command (@pxref{Invoking guix download}), the @command{guix import pypi}
456command, and the @command{guix import cpan} command. This is primarily
457of interest to developers. @xref{Guile Preparations, how to install the
458GnuTLS bindings for Guile,, gnutls-guile, GnuTLS-Guile}.
bd5e766b
LC
459@end itemize
460
461Unless @code{--disable-daemon} was passed to @command{configure}, the
462following packages are also needed:
463
464@itemize
368d08f7
LC
465@item @url{http://sqlite.org, SQLite 3};
466@item @url{http://www.bzip.org, libbz2};
467@item @url{http://gcc.gnu.org, GCC's g++}, with support for the
468C++11 standard.
bd5e766b
LC
469@end itemize
470
4bfc4ea3
NK
471When a working installation of @url{http://nixos.org/nix/, the Nix package
472manager} is available, you
bd5e766b 473can instead configure Guix with @code{--disable-daemon}. In that case,
4bfc4ea3 474Nix replaces the three dependencies above.
bd5e766b 475
b22a12fd
LC
476Guix is compatible with Nix, so it is possible to share the same store
477between both. To do so, you must pass @command{configure} not only the
478same @code{--with-store-dir} value, but also the same
4bfc4ea3
NK
479@code{--localstatedir} value. The latter is essential because it
480specifies where the database that stores metadata about the store is
834129e0 481located, among other things. The default values for Nix are
b22a12fd 482@code{--with-store-dir=/nix/store} and @code{--localstatedir=/nix/var}.
4bfc4ea3
NK
483Note that @code{--disable-daemon} is not required if
484your goal is to share the store with Nix.
b22a12fd 485
ec0339cd
LC
486@node Running the Test Suite
487@section Running the Test Suite
488
489After a successful @command{configure} and @code{make} run, it is a good
490idea to run the test suite. It can help catch issues with the setup or
491environment, or bugs in Guix itself---and really, reporting test
492failures is a good way to help improve the software. To run the test
493suite, type:
494
495@example
496make check
497@end example
498
499Test cases can run in parallel: you can use the @code{-j} option of
500GNU@tie{}make to speed things up. The first run may take a few minutes
501on a recent machine; subsequent runs will be faster because the store
502that is created for test purposes will already have various things in
503cache.
504
505Upon failure, please email @email{bug-guix@@gnu.org} and attach the
506@file{test-suite.log} file. When @file{tests/@var{something}.scm}
507fails, please also attach the @file{@var{something}.log} file available
508in the top-level build directory. Please specify the Guix version being
509used as well as version numbers of the dependencies
510(@pxref{Requirements}) in your message.
511
bd5e766b
LC
512@node Setting Up the Daemon
513@section Setting Up the Daemon
514
515@cindex daemon
516Operations such as building a package or running the garbage collector
49e6291a 517are all performed by a specialized process, the @dfn{build daemon}, on
bd5e766b
LC
518behalf of clients. Only the daemon may access the store and its
519associated database. Thus, any operation that manipulates the store
520goes through the daemon. For instance, command-line tools such as
e49951eb 521@command{guix package} and @command{guix build} communicate with the
bd5e766b
LC
522daemon (@i{via} remote procedure calls) to instruct it what to do.
523
49e6291a 524The following sections explain how to prepare the build daemon's
225dafde
LC
525environment. Also @ref{Substitutes}, for information on how to allow
526the daemon to download pre-built binaries.
49e6291a
LC
527
528@menu
529* Build Environment Setup:: Preparing the isolated build environment.
530* Daemon Offload Setup:: Offloading builds to remote machines.
531@end menu
532
533@node Build Environment Setup
534@subsection Build Environment Setup
535
bd5e766b
LC
536In a standard multi-user setup, Guix and its daemon---the
537@command{guix-daemon} program---are installed by the system
834129e0 538administrator; @file{/gnu/store} is owned by @code{root} and
bd5e766b
LC
539@command{guix-daemon} runs as @code{root}. Unprivileged users may use
540Guix tools to build packages or otherwise access the store, and the
541daemon will do it on their behalf, ensuring that the store is kept in a
542consistent state, and allowing built packages to be shared among users.
543
544@cindex build users
545When @command{guix-daemon} runs as @code{root}, you may not want package
546build processes themselves to run as @code{root} too, for obvious
547security reasons. To avoid that, a special pool of @dfn{build users}
548should be created for use by build processes started by the daemon.
549These build users need not have a shell and a home directory: they will
550just be used when the daemon drops @code{root} privileges in build
551processes. Having several such users allows the daemon to launch
552distinct build processes under separate UIDs, which guarantees that they
553do not interfere with each other---an essential feature since builds are
554regarded as pure functions (@pxref{Introduction}).
555
556On a GNU/Linux system, a build user pool may be created like this (using
557Bash syntax and the @code{shadow} commands):
558
091196b3
LC
559@c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
560@c for why `-G' is needed.
bd5e766b 561@example
cfc149dc
LC
562# groupadd --system guixbuild
563# for i in `seq -w 1 10`;
bd5e766b 564 do
cfc149dc
LC
565 useradd -g guixbuild -G guixbuild \
566 -d /var/empty -s `which nologin` \
567 -c "Guix build user $i" --system \
568 guixbuilder$i;
bd5e766b
LC
569 done
570@end example
571
572@noindent
54eb03ab
LC
573The number of build users determines how many build jobs may run in
574parallel, as specified by the @option{--max-jobs} option
d2825c96
LC
575(@pxref{Invoking guix-daemon, @option{--max-jobs}}). The
576@code{guix-daemon} program may then be run as @code{root} with the
577following command@footnote{If your machine uses the systemd init system,
578dropping the @file{@var{prefix}/lib/systemd/system/guix-daemon.service}
579file in @file{/etc/systemd/system} will ensure that
ad227484
MDRS
580@command{guix-daemon} is automatically started. Similarly, if your
581machine uses the Upstart init system, drop the
582@file{@var{prefix}/lib/upstart/system/guix-daemon.conf}
583file in @file{/etc/init}.}:
bd5e766b
LC
584
585@example
cfc149dc 586# guix-daemon --build-users-group=guixbuild
bd5e766b
LC
587@end example
588
e900c503 589@cindex chroot
b095792f
LC
590@noindent
591This way, the daemon starts build processes in a chroot, under one of
cfc149dc 592the @code{guixbuilder} users. On GNU/Linux, by default, the chroot
6dc99317
LC
593environment contains nothing but:
594
595@c Keep this list in sync with libstore/build.cc! -----------------------
596@itemize
597@item
4743a4da
LC
598a minimal @code{/dev} directory, created mostly independently from the
599host @code{/dev}@footnote{``Mostly'', because while the set of files
600that appear in the chroot's @code{/dev} is fixed, most of these files
601can only be created if the host has them.};
602
603@item
604the @code{/proc} directory; it only shows the container's processes
605since a separate PID name space is used;
6dc99317
LC
606
607@item
608@file{/etc/passwd} with an entry for the current user and an entry for
609user @file{nobody};
610
611@item
612@file{/etc/group} with an entry for the user's group;
613
614@item
615@file{/etc/hosts} with an entry that maps @code{localhost} to
616@code{127.0.0.1};
617
618@item
619a writable @file{/tmp} directory.
620@end itemize
b095792f 621
cb960102
ED
622You can influence the directory where the daemon stores build trees
623@i{via} the @code{TMPDIR} environment variable. However, the build tree
7a57c96a 624within the chroot is always @file{/tmp/guix-build-@var{name}.drv-0},
cb960102
ED
625where @var{name} is the derivation name---e.g., @code{coreutils-8.24}.
626This way, the value of @code{TMPDIR} does not leak inside build
627environments, which avoids discrepancies in cases where build processes
628capture the name of their build tree.
629
1e2644bb
LC
630If you are installing Guix as an unprivileged user, it is still possible
631to run @command{guix-daemon} provided you pass @code{--disable-chroot}.
632However, build processes will not be isolated from one another, and not
633from the rest of the system. Thus, build processes may interfere with
634each other, and may access programs, libraries, and other files
635available on the system---making it much harder to view them as
636@emph{pure} functions.
bd5e766b 637
49e6291a
LC
638
639@node Daemon Offload Setup
640@subsection Using the Offload Facility
641
642@cindex offloading
4ec2e92d
LC
643@cindex build hook
644When desired, the build daemon can @dfn{offload}
645derivation builds to other machines
49e6291a
LC
646running Guix, using the @code{offload} @dfn{build hook}. When that
647feature is enabled, a list of user-specified build machines is read from
648@file{/etc/guix/machines.scm}; anytime a build is requested, for
649instance via @code{guix build}, the daemon attempts to offload it to one
650of the machines that satisfies the derivation's constraints, in
651particular its system type---e.g., @file{x86_64-linux}. Missing
652prerequisites for the build are copied over SSH to the target machine,
653which then proceeds with the build; upon success the output(s) of the
654build are copied back to the initial machine.
655
4ec2e92d 656The @file{/etc/guix/machines.scm} file typically looks like this:
49e6291a
LC
657
658@example
659(list (build-machine
660 (name "eightysix.example.org")
661 (system "x86_64-linux")
662 (user "bob")
663 (speed 2.)) ; incredibly fast!
664
665 (build-machine
666 (name "meeps.example.org")
667 (system "mips64el-linux")
668 (user "alice")
669 (private-key
670 (string-append (getenv "HOME")
c4fdfd6f 671 "/.lsh/identity-for-guix"))))
49e6291a
LC
672@end example
673
674@noindent
675In the example above we specify a list of two build machines, one for
676the @code{x86_64} architecture and one for the @code{mips64el}
4ec2e92d
LC
677architecture.
678
679In fact, this file is---not surprisingly!---a Scheme file that is
680evaluated when the @code{offload} hook is started. Its return value
681must be a list of @code{build-machine} objects. While this example
682shows a fixed list of build machines, one could imagine, say, using
683DNS-SD to return a list of potential build machines discovered in the
684local network (@pxref{Introduction, Guile-Avahi,, guile-avahi, Using
c678a4ee
LC
685Avahi in Guile Scheme Programs}). The @code{build-machine} data type is
686detailed below.
4ec2e92d 687
c678a4ee
LC
688@deftp {Data Type} build-machine
689This data type represents build machines the daemon may offload builds
690to. The important fields are:
49e6291a
LC
691
692@table @code
693
694@item name
695The remote machine's host name.
696
697@item system
c678a4ee 698The remote machine's system type---e.g., @code{"x86_64-linux"}.
49e6291a
LC
699
700@item user
701The user account to use when connecting to the remote machine over SSH.
702Note that the SSH key pair must @emph{not} be passphrase-protected, to
703allow non-interactive logins.
704
705@end table
706
4ec2e92d 707A number of optional fields may be specified:
49e6291a
LC
708
709@table @code
710
cecd72d5
LC
711@item port
712Port number of the machine's SSH server (default: 22).
713
49e6291a
LC
714@item private-key
715The SSH private key file to use when connecting to the machine.
716
c4fdfd6f
LC
717Currently offloading uses GNU@tie{}lsh as its SSH client
718(@pxref{Invoking lsh,,, GNU lsh Manual}). Thus, the key file here must
719be an lsh key file. This may change in the future, though.
720
49e6291a
LC
721@item parallel-builds
722The number of builds that may run in parallel on the machine (1 by
723default.)
724
725@item speed
726A ``relative speed factor''. The offload scheduler will tend to prefer
727machines with a higher speed factor.
728
729@item features
730A list of strings denoting specific features supported by the machine.
731An example is @code{"kvm"} for machines that have the KVM Linux modules
732and corresponding hardware support. Derivations can request features by
733name, and they will be scheduled on matching build machines.
734
735@end table
c678a4ee 736@end deftp
49e6291a
LC
737
738The @code{guix} command must be in the search path on the build
739machines, since offloading works by invoking the @code{guix archive} and
c4fdfd6f
LC
740@code{guix build} commands. In addition, the Guix modules must be in
741@code{$GUILE_LOAD_PATH} on the build machine---you can check whether
742this is the case by running:
743
744@example
745lsh build-machine guile -c '(use-modules (guix config))'
746@end example
49e6291a
LC
747
748There's one last thing to do once @file{machines.scm} is in place. As
749explained above, when offloading, files are transferred back and forth
c4fdfd6f
LC
750between the machine stores. For this to work, you first need to
751generate a key pair on each machine to allow the daemon to export signed
752archives of files from the store (@pxref{Invoking guix archive}):
49e6291a
LC
753
754@example
755# guix archive --generate-key
756@end example
757
758@noindent
c4fdfd6f
LC
759Each build machine must authorize the key of the master machine so that
760it accepts store items it receives from the master:
761
762@example
763# guix archive --authorize < master-public-key.txt
764@end example
765
766@noindent
767Likewise, the master machine must authorize the key of each build machine.
768
769All the fuss with keys is here to express pairwise mutual trust
770relations between the master and the build machines. Concretely, when
771the master receives files from a build machine (and @i{vice versa}), its
772build daemon can make sure they are genuine, have not been tampered
773with, and that they are signed by an authorized key.
49e6291a
LC
774
775
bd5e766b
LC
776@node Invoking guix-daemon
777@section Invoking @command{guix-daemon}
778
779The @command{guix-daemon} program implements all the functionality to
780access the store. This includes launching build processes, running the
781garbage collector, querying the availability of a build result, etc. It
782is normally run as @code{root} like this:
783
784@example
cfc149dc 785# guix-daemon --build-users-group=guixbuild
bd5e766b
LC
786@end example
787
788@noindent
081145cf 789For details on how to set it up, @pxref{Setting Up the Daemon}.
bd5e766b 790
e900c503
LC
791@cindex chroot
792@cindex container, build environment
793@cindex build environment
794@cindex reproducible builds
bd5e766b
LC
795By default, @command{guix-daemon} launches build processes under
796different UIDs, taken from the build group specified with
797@code{--build-users-group}. In addition, each build process is run in a
798chroot environment that only contains the subset of the store that the
799build process depends on, as specified by its derivation
800(@pxref{Programming Interface, derivation}), plus a set of specific
801system directories. By default, the latter contains @file{/dev} and
e900c503
LC
802@file{/dev/pts}. Furthermore, on GNU/Linux, the build environment is a
803@dfn{container}: in addition to having its own file system tree, it has
804a separate mount name space, its own PID name space, network name space,
805etc. This helps achieve reproducible builds (@pxref{Features}).
bd5e766b 806
cbc538fe
LC
807When the daemon performs a build on behalf of the user, it creates a
808build directory under @file{/tmp} or under the directory specified by
809its @code{TMPDIR} environment variable; this directory is shared with
810the container for the duration of the build. Be aware that using a
811directory other than @file{/tmp} can affect build results---for example,
812with a longer directory name, a build process that uses Unix-domain
813sockets might hit the name length limitation for @code{sun_path}, which
814it would otherwise not hit.
815
816The build directory is automatically deleted upon completion, unless the
817build failed and the client specified @option{--keep-failed}
818(@pxref{Invoking guix build, @option{--keep-failed}}).
819
bd5e766b
LC
820The following command-line options are supported:
821
822@table @code
823@item --build-users-group=@var{group}
824Take users from @var{group} to run build processes (@pxref{Setting Up
825the Daemon, build users}).
826
6858f9d1 827@item --no-substitutes
b5385b52 828@cindex substitutes
6858f9d1 829Do not use substitutes for build products. That is, always build things
c4202d60
LC
830locally instead of allowing downloads of pre-built binaries
831(@pxref{Substitutes}).
6858f9d1 832
b5385b52
LC
833By default substitutes are used, unless the client---such as the
834@command{guix package} command---is explicitly invoked with
835@code{--no-substitutes}.
836
837When the daemon runs with @code{--no-substitutes}, clients can still
838explicitly enable substitution @i{via} the @code{set-build-options}
839remote procedure call (@pxref{The Store}).
840
9176607e 841@item --substitute-urls=@var{urls}
f8a8e0fe 842@anchor{daemon-substitute-urls}
9176607e 843Consider @var{urls} the default whitespace-separated list of substitute
ae806096 844source URLs. When this option is omitted, @indicateurl{http://hydra.gnu.org}
9176607e
LC
845is used.
846
847This means that substitutes may be downloaded from @var{urls}, as long
848as they are signed by a trusted signature (@pxref{Substitutes}).
849
4ec2e92d
LC
850@cindex build hook
851@item --no-build-hook
852Do not use the @dfn{build hook}.
853
854The build hook is a helper program that the daemon can start and to
855which it submits build requests. This mechanism is used to offload
856builds to other machines (@pxref{Daemon Offload Setup}).
857
bd5e766b
LC
858@item --cache-failures
859Cache build failures. By default, only successful builds are cached.
860
30d9aa54
LC
861When this option is used, @command{guix gc --list-failures} can be used
862to query the set of store items marked as failed; @command{guix gc
863--clear-failures} removes store items from the set of cached failures.
864@xref{Invoking guix gc}.
865
bd5e766b
LC
866@item --cores=@var{n}
867@itemx -c @var{n}
868Use @var{n} CPU cores to build each derivation; @code{0} means as many
869as available.
870
6efc160e 871The default value is @code{0}, but it may be overridden by clients, such
e49951eb
MW
872as the @code{--cores} option of @command{guix build} (@pxref{Invoking
873guix build}).
bd5e766b
LC
874
875The effect is to define the @code{NIX_BUILD_CORES} environment variable
876in the build process, which can then use it to exploit internal
877parallelism---for instance, by running @code{make -j$NIX_BUILD_CORES}.
878
879@item --max-jobs=@var{n}
880@itemx -M @var{n}
881Allow at most @var{n} build jobs in parallel. The default value is
f6526eb3
LC
882@code{1}. Setting it to @code{0} means that no builds will be performed
883locally; instead, the daemon will offload builds (@pxref{Daemon Offload
884Setup}), or simply fail.
bd5e766b 885
ecf84b7c
LC
886@item --rounds=@var{N}
887Build each derivation @var{n} times in a row, and raise an error if
888consecutive build results are not bit-for-bit identical. Note that this
889setting can be overridden by clients such as @command{guix build}
890(@pxref{Invoking guix build}).
891
bd5e766b
LC
892@item --debug
893Produce debugging output.
894
895This is useful to debug daemon start-up issues, but then it may be
896overridden by clients, for example the @code{--verbosity} option of
e49951eb 897@command{guix build} (@pxref{Invoking guix build}).
bd5e766b
LC
898
899@item --chroot-directory=@var{dir}
900Add @var{dir} to the build chroot.
901
902Doing this may change the result of build processes---for instance if
903they use optional dependencies found in @var{dir} when it is available,
904and not otherwise. For that reason, it is not recommended to do so.
905Instead, make sure that each derivation declares all the inputs that it
906needs.
907
908@item --disable-chroot
909Disable chroot builds.
910
911Using this option is not recommended since, again, it would allow build
1e2644bb
LC
912processes to gain access to undeclared dependencies. It is necessary,
913though, when @command{guix-daemon} is running under an unprivileged user
914account.
bd5e766b
LC
915
916@item --disable-log-compression
917Disable compression of the build logs.
918
1da983b9
LC
919Unless @code{--lose-logs} is used, all the build logs are kept in the
920@var{localstatedir}. To save space, the daemon automatically compresses
921them with bzip2 by default. This option disables that.
922
ab3893d7
LC
923@item --disable-deduplication
924@cindex deduplication
bd5e766b
LC
925Disable automatic file ``deduplication'' in the store.
926
1da983b9 927By default, files added to the store are automatically ``deduplicated'':
ab3893d7
LC
928if a newly added file is identical to another one found in the store,
929the daemon makes the new file a hard link to the other file. This can
4988dd40 930noticeably reduce disk usage, at the expense of slightly increased
ab3893d7
LC
931input/output load at the end of a build process. This option disables
932this optimization.
1da983b9 933
6e37066e
LC
934@item --gc-keep-outputs[=yes|no]
935Tell whether the garbage collector (GC) must keep outputs of live
936derivations.
937
938When set to ``yes'', the GC will keep the outputs of any live derivation
939available in the store---the @code{.drv} files. The default is ``no'',
940meaning that derivation outputs are kept only if they are GC roots.
941
942@item --gc-keep-derivations[=yes|no]
943Tell whether the garbage collector (GC) must keep derivations
944corresponding to live outputs.
945
946When set to ``yes'', as is the case by default, the GC keeps
947derivations---i.e., @code{.drv} files---as long as at least one of their
948outputs is live. This allows users to keep track of the origins of
949items in their store. Setting it to ``no'' saves a bit of disk space.
950
951Note that when both @code{--gc-keep-derivations} and
952@code{--gc-keep-outputs} are used, the effect is to keep all the build
953prerequisites (the sources, compiler, libraries, and other build-time
954tools) of live objects in the store, regardless of whether these
955prerequisites are live. This is convenient for developers since it
956saves rebuilds or downloads.
957
bd5e766b
LC
958@item --impersonate-linux-2.6
959On Linux-based systems, impersonate Linux 2.6. This means that the
960kernel's @code{uname} system call will report 2.6 as the release number.
961
962This might be helpful to build programs that (usually wrongfully) depend
963on the kernel version number.
964
965@item --lose-logs
966Do not keep build logs. By default they are kept under
ce33631f 967@code{@var{localstatedir}/guix/log}.
bd5e766b
LC
968
969@item --system=@var{system}
970Assume @var{system} as the current system type. By default it is the
971architecture/kernel pair found at configure time, such as
972@code{x86_64-linux}.
b8d2aa26
LC
973
974@item --listen=@var{socket}
975Listen for connections on @var{socket}, the file name of a Unix-domain
976socket. The default socket is
977@file{@var{localstatedir}/daemon-socket/socket}. This option is only
978useful in exceptional circumstances, such as if you need to run several
979daemons on the same machine.
bd5e766b
LC
980@end table
981
982
0e2d0213
LC
983@node Application Setup
984@section Application Setup
985
85e57214
LC
986When using Guix on top of GNU/Linux distribution other than GuixSD---a
987so-called @dfn{foreign distro}---a few additional steps are needed to
988get everything in place. Here are some of them.
0e2d0213
LC
989
990@subsection Locales
991
5c3c1427 992@anchor{locales-and-locpath}
0e2d0213 993@cindex locales, when not on GuixSD
5c3c1427 994@vindex LOCPATH
85e57214 995@vindex GUIX_LOCPATH
0e2d0213
LC
996Packages installed @i{via} Guix will not use the host system's locale
997data. Instead, you must first install one of the locale packages
85e57214
LC
998available with Guix and then define the @code{GUIX_LOCPATH} environment
999variable:
0e2d0213
LC
1000
1001@example
1002$ guix package -i glibc-locales
85e57214 1003$ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
0e2d0213
LC
1004@end example
1005
1006Note that the @code{glibc-locales} package contains data for all the
1007locales supported by the GNU@tie{}libc and weighs in at around
1008110@tie{}MiB. Alternately, the @code{glibc-utf8-locales} is smaller but
1009limited to a few UTF-8 locales.
1010
85e57214
LC
1011The @code{GUIX_LOCPATH} variable plays a role similar to @code{LOCPATH}
1012(@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library Reference
1013Manual}). There are two important differences though:
1014
1015@enumerate
1016@item
1017@code{GUIX_LOCPATH} is honored only by Guix's libc, and not by the libc
1018provided by foreign distros. Thus, using @code{GUIX_LOCPATH} allows you
f9b9a033 1019to make sure the foreign distro's programs will not end up loading
85e57214
LC
1020incompatible locale data.
1021
1022@item
1023libc suffixes each entry of @code{GUIX_LOCPATH} with @code{/X.Y}, where
1024@code{X.Y} is the libc version---e.g., @code{2.22}. This means that,
1025should your Guix profile contain a mixture of programs linked against
1026different libc version, each libc version will only try to load locale
1027data in the right format.
1028@end enumerate
1029
1030This is important because the locale data format used by different libc
1031versions may be incompatible.
1032
0e2d0213
LC
1033@subsection X11 Fonts
1034
4988dd40 1035The majority of graphical applications use Fontconfig to locate and
0e2d0213
LC
1036load fonts and perform X11-client-side rendering. Guix's
1037@code{fontconfig} package looks for fonts in @file{$HOME/.guix-profile}
1038by default. Thus, to allow graphical applications installed with Guix
1039to display fonts, you will have to install fonts with Guix as well.
1040Essential font packages include @code{gs-fonts}, @code{font-dejavu}, and
8fe5b1d1 1041@code{font-gnu-freefont-ttf}.
0e2d0213 1042
5c36edc8
LC
1043To display text written in Chinese languages, Japanese, or Korean in
1044graphical applications, consider installing
1045@code{font-adobe-source-han-sans} or @code{font-wqy-zenhei}. The former
1046has multiple outputs, one per language family (@pxref{Packages with
1047Multiple Outputs}). For instance, the following command installs fonts
1048for Chinese languages:
1049
1050@example
1051guix package -i font-adobe-source-han-sans:cn
1052@end example
1053
0e2d0213
LC
1054@c TODO What else?
1055
eeaf4427
LC
1056@c *********************************************************************
1057@node Package Management
1058@chapter Package Management
1059
f8348b91 1060The purpose of GNU Guix is to allow users to easily install, upgrade, and
eeaf4427
LC
1061remove software packages, without having to know about their build
1062procedure or dependencies. Guix also goes beyond this obvious set of
1063features.
1064
1065This chapter describes the main features of Guix, as well as the package
c1941588 1066management tools it provides. Two user interfaces are provided for
c554de89
AK
1067routine package management tasks: A command-line interface described below
1068(@pxref{Invoking guix package, @code{guix package}}), as well as a visual user
1069interface in Emacs described in a subsequent chapter (@pxref{Emacs Interface}).
eeaf4427
LC
1070
1071@menu
1072* Features:: How Guix will make your life brighter.
e49951eb 1073* Invoking guix package:: Package installation, removal, etc.
c4202d60 1074* Substitutes:: Downloading pre-built binaries.
760c60d6 1075* Packages with Multiple Outputs:: Single source package, multiple outputs.
e49951eb 1076* Invoking guix gc:: Running the garbage collector.
f651b477 1077* Invoking guix pull:: Fetching the latest Guix and distribution.
760c60d6 1078* Invoking guix archive:: Exporting and importing store files.
eeaf4427
LC
1079@end menu
1080
1081@node Features
1082@section Features
1083
1084When using Guix, each package ends up in the @dfn{package store}, in its
1085own directory---something that resembles
9a130e19
AK
1086@file{/gnu/store/xxx-package-1.2}, where @code{xxx} is a base32 string
1087(note that Guix comes with an Emacs extension to shorten those file
081145cf 1088names, @pxref{Emacs Prettify}.)
eeaf4427
LC
1089
1090Instead of referring to these directories, users have their own
1091@dfn{profile}, which points to the packages that they actually want to
821b0015
LC
1092use. These profiles are stored within each user's home directory, at
1093@code{$HOME/.guix-profile}.
eeaf4427 1094
821b0015 1095For example, @code{alice} installs GCC 4.7.2. As a result,
eeaf4427 1096@file{/home/alice/.guix-profile/bin/gcc} points to
834129e0 1097@file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Now, on the same machine,
821b0015
LC
1098@code{bob} had already installed GCC 4.8.0. The profile of @code{bob}
1099simply continues to point to
834129e0 1100@file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc}---i.e., both versions of GCC
821b0015 1101coexist on the same system without any interference.
eeaf4427 1102
e49951eb
MW
1103The @command{guix package} command is the central tool to manage
1104packages (@pxref{Invoking guix package}). It operates on those per-user
821b0015 1105profiles, and can be used @emph{with normal user privileges}.
eeaf4427
LC
1106
1107The command provides the obvious install, remove, and upgrade
1108operations. Each invocation is actually a @emph{transaction}: either
ba55b1cb 1109the specified operation succeeds, or nothing happens. Thus, if the
e49951eb 1110@command{guix package} process is terminated during the transaction,
eeaf4427
LC
1111or if a power outage occurs during the transaction, then the user's
1112profile remains in its previous state, and remains usable.
1113
1114In addition, any package transaction may be @emph{rolled back}. So, if,
1115for example, an upgrade installs a new version of a package that turns
1116out to have a serious bug, users may roll back to the previous instance
4af2447e
LC
1117of their profile, which was known to work well. Similarly, the global
1118system configuration is subject to transactional upgrades and roll-back
1119(@pxref{Using the Configuration System}).
eeaf4427
LC
1120
1121All those packages in the package store may be @emph{garbage-collected}.
1122Guix can determine which packages are still referenced by the user
fe8ff028 1123profiles, and remove those that are provably no longer referenced
e49951eb 1124(@pxref{Invoking guix gc}). Users may also explicitly remove old
fe8ff028
LC
1125generations of their profile so that the packages they refer to can be
1126collected.
eeaf4427 1127
e900c503
LC
1128@cindex reproducibility
1129@cindex reproducible builds
eeaf4427
LC
1130Finally, Guix takes a @dfn{purely functional} approach to package
1131management, as described in the introduction (@pxref{Introduction}).
834129e0 1132Each @file{/gnu/store} package directory name contains a hash of all the
eeaf4427
LC
1133inputs that were used to build that package---compiler, libraries, build
1134scripts, etc. This direct correspondence allows users to make sure a
1135given package installation matches the current state of their
e900c503
LC
1136distribution. It also helps maximize @dfn{build reproducibility}:
1137thanks to the isolated build environments that are used, a given build
1138is likely to yield bit-identical files when performed on different
1139machines (@pxref{Invoking guix-daemon, container}).
eeaf4427 1140
c4202d60 1141@cindex substitutes
eeaf4427 1142This foundation allows Guix to support @dfn{transparent binary/source
c4202d60 1143deployment}. When a pre-built binary for a @file{/gnu/store} item is
18f2887b 1144available from an external source---a @dfn{substitute}, Guix just
c4202d60
LC
1145downloads it and unpacks it;
1146otherwise, it builds the package from source, locally
1147(@pxref{Substitutes}).
eeaf4427 1148
f5fd4fd2
LC
1149Control over the build environment is a feature that is also useful for
1150developers. The @command{guix environment} command allows developers of
1151a package to quickly set up the right development environment for their
1152package, without having to manually install the package's dependencies
1153in their profile (@pxref{Invoking guix environment}).
1154
e49951eb
MW
1155@node Invoking guix package
1156@section Invoking @command{guix package}
eeaf4427 1157
e49951eb 1158The @command{guix package} command is the tool that allows users to
eeaf4427
LC
1159install, upgrade, and remove packages, as well as rolling back to
1160previous configurations. It operates only on the user's own profile,
1161and works with normal user privileges (@pxref{Features}). Its syntax
1162is:
1163
1164@example
e49951eb 1165guix package @var{options}
eeaf4427
LC
1166@end example
1167
ba55b1cb 1168Primarily, @var{options} specifies the operations to be performed during
eeaf4427 1169the transaction. Upon completion, a new profile is created, but
99bd74d5 1170previous @dfn{generations} of the profile remain available, should the user
eeaf4427
LC
1171want to roll back.
1172
6447738c
MW
1173For example, to remove @code{lua} and install @code{guile} and
1174@code{guile-cairo} in a single transaction:
1175
1176@example
1177guix package -r lua -i guile guile-cairo
1178@end example
1179
99bd74d5
LC
1180@command{guix package} also supports a @dfn{declarative approach}
1181whereby the user specifies the exact set of packages to be available and
1182passes it @i{via} the @option{--manifest} option
1183(@pxref{profile-manifest, @option{--manifest}}).
1184
b9e5c0a9 1185For each user, a symlink to the user's default profile is automatically
0ec1af59 1186created in @file{$HOME/.guix-profile}. This symlink always points to the
b9e5c0a9
LC
1187current generation of the user's default profile. Thus, users can add
1188@file{$HOME/.guix-profile/bin} to their @code{PATH} environment
1189variable, and so on.
d664f1b4
LC
1190@cindex search paths
1191If you are not using the Guix System Distribution, consider adding the
1192following lines to your @file{~/.bash_profile} (@pxref{Bash Startup
1193Files,,, bash, The GNU Bash Reference Manual}) so that newly-spawned
1194shells get all the right environment variable definitions:
1195
1196@example
1197GUIX_PROFILE="$HOME/.guix-profile" \
1198source "$HOME/.guix-profile/etc/profile"
1199@end example
b9e5c0a9 1200
4379c35b
LC
1201In a multi-user setup, user profiles are stored in a place registered as
1202a @dfn{garbage-collector root}, which @file{$HOME/.guix-profile} points
1203to (@pxref{Invoking guix gc}). That directory is normally
0ec1af59
LC
1204@code{@var{localstatedir}/profiles/per-user/@var{user}}, where
1205@var{localstatedir} is the value passed to @code{configure} as
4379c35b
LC
1206@code{--localstatedir}, and @var{user} is the user name. The
1207@file{per-user} directory is created when @command{guix-daemon} is
1208started, and the @var{user} sub-directory is created by @command{guix
1209package}.
0ec1af59
LC
1210
1211The @var{options} can be among the following:
1212
eeaf4427
LC
1213@table @code
1214
6447738c
MW
1215@item --install=@var{package} @dots{}
1216@itemx -i @var{package} @dots{}
1217Install the specified @var{package}s.
eeaf4427 1218
6447738c 1219Each @var{package} may specify either a simple package name, such as
eeaf4427 1220@code{guile}, or a package name followed by a hyphen and version number,
724311a2
LC
1221such as @code{guile-1.8.8} or simply @code{guile-1.8} (in the latter
1222case, the newest version prefixed by @code{1.8} is selected.)
1223
1224If no version number is specified, the
dc5669cd
MW
1225newest available version will be selected. In addition, @var{package}
1226may contain a colon, followed by the name of one of the outputs of the
6e721c4d 1227package, as in @code{gcc:doc} or @code{binutils-2.22:lib}
e7f34eb0
LC
1228(@pxref{Packages with Multiple Outputs}). Packages with a corresponding
1229name (and optionally version) are searched for among the GNU
1230distribution modules (@pxref{Package Modules}).
eeaf4427 1231
461572cc
LC
1232@cindex propagated inputs
1233Sometimes packages have @dfn{propagated inputs}: these are dependencies
21461f27
LC
1234that automatically get installed along with the required package
1235(@pxref{package-propagated-inputs, @code{propagated-inputs} in
1236@code{package} objects}, for information about propagated inputs in
1237package definitions).
461572cc 1238
21461f27 1239@anchor{package-cmd-propagated-inputs}
461572cc
LC
1240An example is the GNU MPC library: its C header files refer to those of
1241the GNU MPFR library, which in turn refer to those of the GMP library.
1242Thus, when installing MPC, the MPFR and GMP libraries also get installed
1243in the profile; removing MPC also removes MPFR and GMP---unless they had
1244also been explicitly installed independently.
1245
ba7ea5ce 1246Besides, packages sometimes rely on the definition of environment
5924080d 1247variables for their search paths (see explanation of
ba7ea5ce 1248@code{--search-paths} below). Any missing or possibly incorrect
5924080d
LC
1249environment variable definitions are reported here.
1250
ef010c0f 1251@c XXX: keep me up-to-date
5924080d 1252Finally, when installing a GNU package, the tool reports the
ef010c0f
LC
1253availability of a newer upstream version. In the future, it may provide
1254the option of installing directly from the upstream version, even if
1255that version is not yet in the distribution.
1256
5d4b411f
LC
1257@item --install-from-expression=@var{exp}
1258@itemx -e @var{exp}
1259Install the package @var{exp} evaluates to.
1260
1261@var{exp} must be a Scheme expression that evaluates to a
1262@code{<package>} object. This option is notably useful to disambiguate
1263between same-named variants of a package, with expressions such as
1264@code{(@@ (gnu packages base) guile-final)}.
1265
1266Note that this option installs the first output of the specified
1267package, which may be insufficient when needing a specific output of a
1268multiple-output package.
1269
0d279400
DT
1270@item --install-from-file=@var{file}
1271@itemx -f @var{file}
1272Install the package that the code within @var{file} evaluates to.
1273
1274As an example, @var{file} might contain a definition like this
1275(@pxref{Defining Packages}):
1276
1277@example
1278@verbatiminclude package-hello.scm
1279@end example
1280
1281Developers may find it useful to include such a @file{package.scm} file
1282in the root of their project's source tree that can be used to test
1283development snapshots and create reproducible development environments
1284(@pxref{Invoking guix environment}).
1285
6447738c
MW
1286@item --remove=@var{package} @dots{}
1287@itemx -r @var{package} @dots{}
1288Remove the specified @var{package}s.
eeaf4427 1289
6447738c 1290As for @code{--install}, each @var{package} may specify a version number
13ed095c
LC
1291and/or output name in addition to the package name. For instance,
1292@code{-r glibc:debug} would remove the @code{debug} output of
1293@code{glibc}.
1294
6447738c
MW
1295@item --upgrade[=@var{regexp} @dots{}]
1296@itemx -u [@var{regexp} @dots{}]
1297Upgrade all the installed packages. If one or more @var{regexp}s are
1298specified, upgrade only installed packages whose name matches a
d5f01e48 1299@var{regexp}. Also see the @code{--do-not-upgrade} option below.
eeaf4427 1300
f651b477
LC
1301Note that this upgrades package to the latest version of packages found
1302in the distribution currently installed. To update your distribution,
1303you should regularly run @command{guix pull} (@pxref{Invoking guix
1304pull}).
1305
d5f01e48
MW
1306@item --do-not-upgrade[=@var{regexp} @dots{}]
1307When used together with the @code{--upgrade} option, do @emph{not}
1308upgrade any packages whose name matches a @var{regexp}. For example, to
1309upgrade all packages in the current profile except those containing the
1310substring ``emacs'':
1311
1312@example
1313$ guix package --upgrade . --do-not-upgrade emacs
1314@end example
1315
99bd74d5 1316@item @anchor{profile-manifest}--manifest=@var{file}
1b676447 1317@itemx -m @var{file}
99bd74d5
LC
1318@cindex profile declaration
1319@cindex profile manifest
1320Create a new generation of the profile from the manifest object
1b676447
DT
1321returned by the Scheme code in @var{file}.
1322
99bd74d5
LC
1323This allows you to @emph{declare} the profile's contents rather than
1324constructing it through a sequence of @code{--install} and similar
1325commands. The advantage is that @var{file} can be put under version
1326control, copied to different machines to reproduce the same profile, and
1327so on.
1328
1329@c FIXME: Add reference to (guix profile) documentation when available.
1330@var{file} must return a @dfn{manifest} object, which is roughly a list
1331of packages:
1b676447 1332
99bd74d5 1333@findex packages->manifest
1b676447 1334@example
99bd74d5 1335(use-package-modules guile emacs)
1b676447
DT
1336
1337(packages->manifest
99bd74d5
LC
1338 (list emacs
1339 guile-2.0
1b676447 1340 ;; Use a specific package output.
99bd74d5 1341 (list guile-2.0 "debug")))
1b676447
DT
1342@end example
1343
24e262f0
LC
1344@item --roll-back
1345Roll back to the previous @dfn{generation} of the profile---i.e., undo
1346the last transaction.
1347
1348When combined with options such as @code{--install}, roll back occurs
1349before any other actions.
1350
d9307267 1351When rolling back from the first generation that actually contains
4b2bc804
NK
1352installed packages, the profile is made to point to the @dfn{zeroth
1353generation}, which contains no files apart from its own meta-data.
d9307267 1354
82fe08ed
LC
1355Installing, removing, or upgrading packages from a generation that has
1356been rolled back to overwrites previous future generations. Thus, the
1357history of a profile's generations is always linear.
1358
b3bb82f1
AK
1359@item --switch-generation=@var{pattern}
1360@itemx -S @var{pattern}
1361Switch to a particular generation defined by @var{pattern}.
1362
1363@var{pattern} may be either a generation number or a number prefixed
1364with ``+'' or ``-''. The latter means: move forward/backward by a
1365specified number of generations. For example, if you want to return to
1366the latest generation after @code{--roll-back}, use
1367@code{--switch-generation=+1}.
1368
1369The difference between @code{--roll-back} and
1370@code{--switch-generation=-1} is that @code{--switch-generation} will
1371not make a zeroth generation, so if a specified generation does not
1372exist, the current generation will not be changed.
1373
dbc31ab2 1374@item --search-paths[=@var{kind}]
5924080d
LC
1375@cindex search paths
1376Report environment variable definitions, in Bash syntax, that may be
1377needed in order to use the set of installed packages. These environment
1378variables are used to specify @dfn{search paths} for files used by some
1379of the installed packages.
1380
1381For example, GCC needs the @code{CPATH} and @code{LIBRARY_PATH}
1382environment variables to be defined so it can look for headers and
1383libraries in the user's profile (@pxref{Environment Variables,,, gcc,
1384Using the GNU Compiler Collection (GCC)}). If GCC and, say, the C
1385library are installed in the profile, then @code{--search-paths} will
1386suggest setting these variables to @code{@var{profile}/include} and
1387@code{@var{profile}/lib}, respectively.
1388
dbc31ab2
LC
1389The typical use case is to define these environment variables in the
1390shell:
1391
1392@example
1393$ eval `guix package --search-paths`
1394@end example
1395
1396@var{kind} may be one of @code{exact}, @code{prefix}, or @code{suffix},
1397meaning that the returned environment variable definitions will either
1398be exact settings, or prefixes or suffixes of the current value of these
1399variables. When omitted, @var{kind} defaults to @code{exact}.
1400
fc2d2339
LC
1401This option can also be used to compute the @emph{combined} search paths
1402of several profiles. Consider this example:
1403
1404@example
1405$ guix package -p foo -i guile
1406$ guix package -p bar -i guile-json
1407$ guix package -p foo -p bar --search-paths
1408@end example
1409
1410The last command above reports about the @code{GUILE_LOAD_PATH}
1411variable, even though, taken individually, neither @file{foo} nor
1412@file{bar} would lead to that recommendation.
1413
1414
eeaf4427
LC
1415@item --profile=@var{profile}
1416@itemx -p @var{profile}
1417Use @var{profile} instead of the user's default profile.
1418
70915c1a
LC
1419@item --verbose
1420Produce verbose output. In particular, emit the environment's build log
1421on the standard error port.
1422
eeaf4427
LC
1423@item --bootstrap
1424Use the bootstrap Guile to build the profile. This option is only
1425useful to distribution developers.
1426
1427@end table
1428
e49951eb 1429In addition to these actions @command{guix package} supports the
733b4130
LC
1430following options to query the current state of a profile, or the
1431availability of packages:
eeaf4427 1432
733b4130
LC
1433@table @option
1434
acc08466
NK
1435@item --search=@var{regexp}
1436@itemx -s @var{regexp}
b110869d 1437@cindex searching for packages
5763ad92 1438List the available packages whose name, synopsis, or description matches
299112d3
LC
1439@var{regexp}. Print all the meta-data of matching packages in
1440@code{recutils} format (@pxref{Top, GNU recutils databases,, recutils,
1441GNU recutils manual}).
acc08466 1442
299112d3
LC
1443This allows specific fields to be extracted using the @command{recsel}
1444command, for instance:
1445
1446@example
e49951eb 1447$ guix package -s malloc | recsel -p name,version
299112d3
LC
1448name: glibc
1449version: 2.17
1450
1451name: libgc
1452version: 7.2alpha6
1453@end example
acc08466 1454
a12d92f5
LC
1455Similarly, to show the name of all the packages available under the
1456terms of the GNU@tie{}LGPL version 3:
1457
1458@example
1459$ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
1460name: elfutils
1461
1462name: gmp
1463@dots{}
1464@end example
1465
db5a9444
LC
1466It is also possible to refine search results using several @code{-s}
1467flags. For example, the following command returns a list of board
1468games:
1469
1470@example
1471$ guix package -s '\<board\>' -s game | recsel -p name
1472name: gnubg
1473@dots{}
1474@end example
1475
1476If we were to omit @code{-s game}, we would also get software packages
1477that deal with printed circuit boards; removing the angle brackets
1478around @code{board} would further add packages that have to do with
1479keyboards.
1480
b110869d
LC
1481And now for a more elaborate example. The following command searches
1482for cryptographic libraries, filters out Haskell, Perl, Python, and Ruby
1483libraries, and prints the name and synopsis of the matching packages:
1484
1485@example
1486$ guix package -s crypto -s library | \
1487 recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
1488@end example
1489
1490@noindent
1491@xref{Selection Expressions,,, recutils, GNU recutils manual}, for more
1492information on @dfn{selection expressions} for @code{recsel -e}.
1493
2aa6efb0
CR
1494@item --show=@var{package}
1495Show details about @var{package}, taken from the list of available packages, in
1496@code{recutils} format (@pxref{Top, GNU recutils databases,, recutils, GNU
1497recutils manual}).
1498
1499@example
1500$ guix package --show=python | recsel -p name,version
1501name: python
1502version: 2.7.6
1503
1504name: python
1505version: 3.3.5
1506@end example
1507
1508You may also specify the full name of a package to only get details about a
1509specific version of it:
1510@example
1511$ guix package --show=python-3.3.5 | recsel -p name,version
1512name: python
1513version: 3.3.5
1514@end example
1515
1516
1517
733b4130
LC
1518@item --list-installed[=@var{regexp}]
1519@itemx -I [@var{regexp}]
bd9bde1c
LC
1520List the currently installed packages in the specified profile, with the
1521most recently installed packages shown last. When @var{regexp} is
1522specified, list only installed packages whose name matches @var{regexp}.
733b4130
LC
1523
1524For each installed package, print the following items, separated by
1525tabs: the package name, its version string, the part of the package that
1526is installed (for instance, @code{out} for the default output,
1527@code{include} for its headers, etc.), and the path of this package in
1528the store.
1529
64fc89b6
LC
1530@item --list-available[=@var{regexp}]
1531@itemx -A [@var{regexp}]
5763ad92 1532List packages currently available in the distribution for this system
a1ba8475
LC
1533(@pxref{GNU Distribution}). When @var{regexp} is specified, list only
1534installed packages whose name matches @var{regexp}.
64fc89b6
LC
1535
1536For each package, print the following items separated by tabs: its name,
6e721c4d
LC
1537its version string, the parts of the package (@pxref{Packages with
1538Multiple Outputs}), and the source location of its definition.
64fc89b6 1539
f566d765
LC
1540@item --list-generations[=@var{pattern}]
1541@itemx -l [@var{pattern}]
1542Return a list of generations along with their creation dates; for each
1543generation, show the installed packages, with the most recently
4b2bc804
NK
1544installed packages shown last. Note that the zeroth generation is never
1545shown.
f566d765
LC
1546
1547For each installed package, print the following items, separated by
1548tabs: the name of a package, its version string, the part of the package
1549that is installed (@pxref{Packages with Multiple Outputs}), and the
1550location of this package in the store.
1551
1552When @var{pattern} is used, the command returns only matching
1553generations. Valid patterns include:
1554
1555@itemize
1556@item @emph{Integers and comma-separated integers}. Both patterns denote
1557generation numbers. For instance, @code{--list-generations=1} returns
1558the first one.
1559
1560And @code{--list-generations=1,8,2} outputs three generations in the
1561specified order. Neither spaces nor trailing commas are allowed.
1562
1563@item @emph{Ranges}. @code{--list-generations=2..9} prints the
1564specified generations and everything in between. Note that the start of
1565a range must be lesser than its end.
1566
1567It is also possible to omit the endpoint. For example,
1568@code{--list-generations=2..}, returns all generations starting from the
1569second one.
1570
1571@item @emph{Durations}. You can also get the last @emph{N}@tie{}days, weeks,
1572or months by passing an integer along with the first letter of the
d7ddb257
LC
1573duration. For example, @code{--list-generations=20d} lists generations
1574that are up to 20 days old.
f566d765
LC
1575@end itemize
1576
b7884ca3
NK
1577@item --delete-generations[=@var{pattern}]
1578@itemx -d [@var{pattern}]
d7ddb257
LC
1579When @var{pattern} is omitted, delete all generations except the current
1580one.
b7884ca3
NK
1581
1582This command accepts the same patterns as @option{--list-generations}.
d7ddb257
LC
1583When @var{pattern} is specified, delete the matching generations. When
1584@var{pattern} specifies a duration, generations @emph{older} than the
1585specified duration match. For instance, @code{--delete-generations=1m}
1586deletes generations that are more than one month old.
1587
391bdd8f
LC
1588If the current generation matches, it is @emph{not} deleted. Also, the
1589zeroth generation is never deleted.
b7884ca3 1590
1bb9900a
LC
1591Note that deleting generations prevents roll-back to them.
1592Consequently, this command must be used with care.
1593
733b4130 1594@end table
eeaf4427 1595
70ee5642
LC
1596Finally, since @command{guix package} may actually start build
1597processes, it supports all the common build options that @command{guix
1598build} supports (@pxref{Invoking guix build, common build options}).
1599
c4202d60
LC
1600@node Substitutes
1601@section Substitutes
1602
1603@cindex substitutes
1604@cindex pre-built binaries
1605Guix supports transparent source/binary deployment, which means that it
1606can either build things locally, or download pre-built items from a
1607server. We call these pre-built items @dfn{substitutes}---they are
1608substitutes for local build results. In many cases, downloading a
1609substitute is much faster than building things locally.
1610
1611Substitutes can be anything resulting from a derivation build
1612(@pxref{Derivations}). Of course, in the common case, they are
1613pre-built package binaries, but source tarballs, for instance, which
1614also result from derivation builds, can be available as substitutes.
1615
1616The @code{hydra.gnu.org} server is a front-end to a build farm that
1617builds packages from the GNU distribution continuously for some
32950fc8
AK
1618architectures, and makes them available as substitutes (@pxref{Emacs
1619Hydra}, for information on how to query the continuous integration
1620server). This is the
f8a8e0fe
LC
1621default source of substitutes; it can be overridden by passing the
1622@option{--substitute-urls} option either to @command{guix-daemon}
1623(@pxref{daemon-substitute-urls,, @code{guix-daemon --substitute-urls}})
1624or to client tools such as @command{guix package}
1625(@pxref{client-substitute-urls,, client @option{--substitute-urls}
1626option}).
c4202d60
LC
1627
1628@cindex security
1629@cindex digital signatures
1630To allow Guix to download substitutes from @code{hydra.gnu.org}, you
1631must add its public key to the access control list (ACL) of archive
1632imports, using the @command{guix archive} command (@pxref{Invoking guix
1633archive}). Doing so implies that you trust @code{hydra.gnu.org} to not
1634be compromised and to serve genuine substitutes.
1635
1636This public key is installed along with Guix, in
1637@code{@var{prefix}/share/guix/hydra.gnu.org.pub}, where @var{prefix} is
1638the installation prefix of Guix. If you installed Guix from source,
1639make sure you checked the GPG signature of
1640@file{guix-@value{VERSION}.tar.gz}, which contains this public key file.
1641Then, you can run something like this:
1642
1643@example
1644# guix archive --authorize < hydra.gnu.org.pub
1645@end example
1646
1647Once this is in place, the output of a command like @code{guix build}
1648should change from something like:
1649
1650@example
1651$ guix build emacs --dry-run
1652The following derivations would be built:
1653 /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
1654 /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
1655 /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
1656 /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
1657@dots{}
1658@end example
1659
1660@noindent
1661to something like:
1662
1663@example
1664$ guix build emacs --dry-run
1665The following files would be downloaded:
1666 /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
1667 /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
1668 /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
1669 /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
1670@dots{}
1671@end example
1672
1673@noindent
1674This indicates that substitutes from @code{hydra.gnu.org} are usable and
1675will be downloaded, when possible, for future builds.
1676
1677Guix ignores substitutes that are not signed, or that are not signed by
ef27aa9c 1678one of the keys listed in the ACL. It also detects and raises an error
c4202d60
LC
1679when attempting to use a substitute that has been tampered with.
1680
1681The substitute mechanism can be disabled globally by running
1682@code{guix-daemon} with @code{--no-substitutes} (@pxref{Invoking
1683guix-daemon}). It can also be disabled temporarily by passing the
1684@code{--no-substitutes} option to @command{guix package}, @command{guix
1685build}, and other command-line tools.
1686
1687
1688Today, each individual's control over their own computing is at the
1689mercy of institutions, corporations, and groups with enough power and
1690determination to subvert the computing infrastructure and exploit its
1691weaknesses. While using @code{hydra.gnu.org} substitutes can be
1692convenient, we encourage users to also build on their own, or even run
1693their own build farm, such that @code{hydra.gnu.org} is less of an
8ce229fc
LC
1694interesting target. One way to help is by publishing the software you
1695build using @command{guix publish} so that others have one more choice
1696of server to download substitutes from (@pxref{Invoking guix publish}).
c4202d60
LC
1697
1698Guix has the foundations to maximize build reproducibility
1699(@pxref{Features}). In most cases, independent builds of a given
1700package or derivation should yield bit-identical results. Thus, through
1701a diverse set of independent package builds, we can strengthen the
d23c20f1
LC
1702integrity of our systems. The @command{guix challenge} command aims to
1703help users assess substitute servers, and to assist developers in
1704finding out about non-deterministic package builds (@pxref{Invoking guix
a8d65643
LC
1705challenge}). Similarly, the @option{--check} option of @command{guix
1706build} allows users to check whether previously-installed substitutes
1707are genuine by rebuilding them locally (@pxref{build-check,
1708@command{guix build --check}}).
c4202d60
LC
1709
1710In the future, we want Guix to have support to publish and retrieve
1711binaries to/from other users, in a peer-to-peer fashion. If you would
1712like to discuss this project, join us on @email{guix-devel@@gnu.org}.
1713
1714
6e721c4d
LC
1715@node Packages with Multiple Outputs
1716@section Packages with Multiple Outputs
1717
1718@cindex multiple-output packages
1719@cindex package outputs
1720
1721Often, packages defined in Guix have a single @dfn{output}---i.e., the
1722source package leads exactly one directory in the store. When running
1723@command{guix package -i glibc}, one installs the default output of the
1724GNU libc package; the default output is called @code{out}, but its name
1725can be omitted as shown in this command. In this particular case, the
1726default output of @code{glibc} contains all the C header files, shared
1727libraries, static libraries, Info documentation, and other supporting
1728files.
1729
1730Sometimes it is more appropriate to separate the various types of files
1731produced from a single source package into separate outputs. For
1732instance, the GLib C library (used by GTK+ and related packages)
1733installs more than 20 MiB of reference documentation as HTML pages.
1734To save space for users who do not need it, the documentation goes to a
1735separate output, called @code{doc}. To install the main GLib output,
1736which contains everything but the documentation, one would run:
1737
1738@example
1739guix package -i glib
1740@end example
1741
1742The command to install its documentation is:
1743
1744@example
1745guix package -i glib:doc
1746@end example
1747
1748Some packages install programs with different ``dependency footprints''.
1749For instance, the WordNet package install both command-line tools and
1750graphical user interfaces (GUIs). The former depend solely on the C
1751library, whereas the latter depend on Tcl/Tk and the underlying X
1752libraries. In this case, we leave the command-line tools in the default
1753output, whereas the GUIs are in a separate output. This allows users
fcc58db6
LC
1754who do not need the GUIs to save space. The @command{guix size} command
1755can help find out about such situations (@pxref{Invoking guix size}).
88856916 1756@command{guix graph} can also be helpful (@pxref{Invoking guix graph}).
6e721c4d
LC
1757
1758There are several such multiple-output packages in the GNU distribution.
91ef73d4
LC
1759Other conventional output names include @code{lib} for libraries and
1760possibly header files, @code{bin} for stand-alone programs, and
1761@code{debug} for debugging information (@pxref{Installing Debugging
1762Files}). The outputs of a packages are listed in the third column of
1763the output of @command{guix package --list-available} (@pxref{Invoking
1764guix package}).
6e721c4d 1765
eeaf4427 1766
e49951eb
MW
1767@node Invoking guix gc
1768@section Invoking @command{guix gc}
fe8ff028
LC
1769
1770@cindex garbage collector
1771Packages that are installed but not used may be @dfn{garbage-collected}.
e49951eb 1772The @command{guix gc} command allows users to explicitly run the garbage
c22eb992
LC
1773collector to reclaim space from the @file{/gnu/store} directory. It is
1774the @emph{only} way to remove files from @file{/gnu/store}---removing
1775files or directories manually may break it beyond repair!
fe8ff028
LC
1776
1777The garbage collector has a set of known @dfn{roots}: any file under
834129e0 1778@file{/gnu/store} reachable from a root is considered @dfn{live} and
fe8ff028
LC
1779cannot be deleted; any other file is considered @dfn{dead} and may be
1780deleted. The set of garbage collector roots includes default user
e49951eb
MW
1781profiles, and may be augmented with @command{guix build --root}, for
1782example (@pxref{Invoking guix build}).
fe8ff028 1783
1bb9900a
LC
1784Prior to running @code{guix gc --collect-garbage} to make space, it is
1785often useful to remove old generations from user profiles; that way, old
1786package builds referenced by those generations can be reclaimed. This
1787is achieved by running @code{guix package --delete-generations}
1788(@pxref{Invoking guix package}).
1789
e49951eb 1790The @command{guix gc} command has three modes of operation: it can be
fe8ff028 1791used to garbage-collect any dead files (the default), to delete specific
7770aafc
LC
1792files (the @code{--delete} option), to print garbage-collector
1793information, or for more advanced queries. The garbage collection
1794options are as follows:
fe8ff028
LC
1795
1796@table @code
1797@item --collect-garbage[=@var{min}]
1798@itemx -C [@var{min}]
834129e0 1799Collect garbage---i.e., unreachable @file{/gnu/store} files and
fe8ff028
LC
1800sub-directories. This is the default operation when no option is
1801specified.
1802
1803When @var{min} is given, stop once @var{min} bytes have been collected.
1804@var{min} may be a number of bytes, or it may include a unit as a
4a44d7bb
LC
1805suffix, such as @code{MiB} for mebibytes and @code{GB} for gigabytes
1806(@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
fe8ff028
LC
1807
1808When @var{min} is omitted, collect all the garbage.
1809
1810@item --delete
1811@itemx -d
1812Attempt to delete all the store files and directories specified as
1813arguments. This fails if some of the files are not in the store, or if
1814they are still live.
1815
30d9aa54
LC
1816@item --list-failures
1817List store items corresponding to cached build failures.
1818
1819This prints nothing unless the daemon was started with
1820@option{--cache-failures} (@pxref{Invoking guix-daemon,
1821@option{--cache-failures}}).
1822
1823@item --clear-failures
1824Remove the specified store items from the failed-build cache.
1825
1826Again, this option only makes sense when the daemon is started with
1827@option{--cache-failures}. Otherwise, it does nothing.
1828
fe8ff028
LC
1829@item --list-dead
1830Show the list of dead files and directories still present in the
1831store---i.e., files and directories no longer reachable from any root.
1832
1833@item --list-live
1834Show the list of live store files and directories.
ba8b732d
LC
1835
1836@end table
1837
1838In addition, the references among existing store files can be queried:
1839
1840@table @code
1841
1842@item --references
1843@itemx --referrers
1844List the references (respectively, the referrers) of store files given
1845as arguments.
1846
8e59fdd5
LC
1847@item --requisites
1848@itemx -R
fcc58db6 1849@cindex closure
8e59fdd5
LC
1850List the requisites of the store files passed as arguments. Requisites
1851include the store files themselves, their references, and the references
1852of these, recursively. In other words, the returned list is the
1853@dfn{transitive closure} of the store files.
1854
fcc58db6 1855@xref{Invoking guix size}, for a tool to profile the size of an
88856916
LC
1856element's closure. @xref{Invoking guix graph}, for a tool to visualize
1857the graph of references.
fcc58db6 1858
fe8ff028
LC
1859@end table
1860
7770aafc
LC
1861Lastly, the following options allow you to check the integrity of the
1862store and to control disk usage.
1863
1864@table @option
1865
1866@item --verify[=@var{options}]
1867@cindex integrity, of the store
1868@cindex integrity checking
1869Verify the integrity of the store.
1870
1871By default, make sure that all the store items marked as valid in the
1872daemon's database actually exist in @file{/gnu/store}.
1873
1874When provided, @var{options} must a comma-separated list containing one
1875or more of @code{contents} and @code{repair}.
1876
1877When passing @option{--verify=contents}, the daemon will compute the
1878content hash of each store item and compare it against its hash in the
1879database. Hash mismatches are reported as data corruptions. Because it
1880traverses @emph{all the files in the store}, this command can take a
1881long time, especially on systems with a slow disk drive.
1882
1883@cindex repairing the store
1884Using @option{--verify=repair} or @option{--verify=contents,repair}
1885causes the daemon to try to repair corrupt store items by fetching
1886substitutes for them (@pxref{Substitutes}). Because repairing is not
1887atomic, and thus potentially dangerous, it is available only to the
1888system administrator.
1889
1890@item --optimize
1891@cindex deduplication
1892Optimize the store by hard-linking identical files---this is
1893@dfn{deduplication}.
1894
1895The daemon performs deduplication after each successful build or archive
1896import, unless it was started with @code{--disable-deduplication}
1897(@pxref{Invoking guix-daemon, @code{--disable-deduplication}}). Thus,
1898this option is primarily useful when the daemon was running with
1899@code{--disable-deduplication}.
1900
1901@end table
eeaf4427 1902
f651b477
LC
1903@node Invoking guix pull
1904@section Invoking @command{guix pull}
1905
1906Packages are installed or upgraded to the latest version available in
1907the distribution currently available on your local machine. To update
1908that distribution, along with the Guix tools, you must run @command{guix
1909pull}: the command downloads the latest Guix source code and package
1910descriptions, and deploys it.
1911
1912On completion, @command{guix package} will use packages and package
1913versions from this just-retrieved copy of Guix. Not only that, but all
1914the Guix commands and Scheme modules will also be taken from that latest
1915version. New @command{guix} sub-commands added by the update also
ef54b61d
AV
1916become available@footnote{Under the hood, @command{guix pull} updates
1917the @file{~/.config/guix/latest} symbolic link to point to the latest
1918Guix, and the @command{guix} command loads code from there.}.
f651b477
LC
1919
1920The @command{guix pull} command is usually invoked with no arguments,
1921but it supports the following options:
1922
1923@table @code
1924@item --verbose
1925Produce verbose output, writing build logs to the standard error output.
1926
ab5d72ad
LC
1927@item --url=@var{url}
1928Download the source tarball of Guix from @var{url}.
1929
1930By default, the tarball is taken from its canonical address at
1931@code{gnu.org}, for the stable branch of Guix.
1932
f651b477
LC
1933@item --bootstrap
1934Use the bootstrap Guile to build the latest Guix. This option is only
1935useful to Guix developers.
1936@end table
1937
760c60d6
LC
1938
1939@node Invoking guix archive
1940@section Invoking @command{guix archive}
1941
1942The @command{guix archive} command allows users to @dfn{export} files
1943from the store into a single archive, and to later @dfn{import} them.
1944In particular, it allows store files to be transferred from one machine
1945to another machine's store. For example, to transfer the @code{emacs}
1946package to a machine connected over SSH, one would run:
1947
1948@example
56607088 1949guix archive --export -r emacs | ssh the-machine guix archive --import
760c60d6
LC
1950@end example
1951
87236aed 1952@noindent
56607088
LC
1953Similarly, a complete user profile may be transferred from one machine
1954to another like this:
1955
1956@example
1957guix archive --export -r $(readlink -f ~/.guix-profile) | \
1958 ssh the-machine guix-archive --import
1959@end example
1960
1961@noindent
1962However, note that, in both examples, all of @code{emacs} and the
1963profile as well as all of their dependencies are transferred (due to
1964@code{-r}), regardless of what is already available in the target
1965machine's store. The @code{--missing} option can help figure out which
1966items are missing from the target's store.
87236aed 1967
760c60d6 1968Archives are stored in the ``Nix archive'' or ``Nar'' format, which is
0dbd88db
LC
1969comparable in spirit to `tar', but with a few noteworthy differences
1970that make it more appropriate for our purposes. First, rather than
1971recording all Unix meta-data for each file, the Nar format only mentions
1972the file type (regular, directory, or symbolic link); Unix permissions
1973and owner/group are dismissed. Second, the order in which directory
1974entries are stored always follows the order of file names according to
1975the C locale collation order. This makes archive production fully
1976deterministic.
1977
1978When exporting, the daemon digitally signs the contents of the archive,
1979and that digital signature is appended. When importing, the daemon
1980verifies the signature and rejects the import in case of an invalid
1981signature or if the signing key is not authorized.
760c60d6
LC
1982@c FIXME: Add xref to daemon doc about signatures.
1983
1984The main options are:
1985
1986@table @code
1987@item --export
1988Export the specified store files or packages (see below.) Write the
1989resulting archive to the standard output.
1990
56607088
LC
1991Dependencies are @emph{not} included in the output, unless
1992@code{--recursive} is passed.
1993
1994@item -r
1995@itemx --recursive
1996When combined with @code{--export}, this instructs @command{guix
1997archive} to include dependencies of the given items in the archive.
1998Thus, the resulting archive is self-contained: it contains the closure
1999of the exported store items.
2000
760c60d6
LC
2001@item --import
2002Read an archive from the standard input, and import the files listed
2003therein into the store. Abort if the archive has an invalid digital
f82cc5fd
LC
2004signature, or if it is signed by a public key not among the authorized
2005keys (see @code{--authorize} below.)
554f26ec 2006
87236aed
LC
2007@item --missing
2008Read a list of store file names from the standard input, one per line,
2009and write on the standard output the subset of these files missing from
2010the store.
2011
554f26ec 2012@item --generate-key[=@var{parameters}]
f82cc5fd 2013@cindex signing, archives
554f26ec
LC
2014Generate a new key pair for the daemons. This is a prerequisite before
2015archives can be exported with @code{--export}. Note that this operation
2016usually takes time, because it needs to gather enough entropy to
2017generate the key pair.
2018
2019The generated key pair is typically stored under @file{/etc/guix}, in
2020@file{signing-key.pub} (public key) and @file{signing-key.sec} (private
867d8473
LC
2021key, which must be kept secret.) When @var{parameters} is omitted,
2022an ECDSA key using the Ed25519 curve is generated, or, for Libgcrypt
2023versions before 1.6.0, it is a 4096-bit RSA key.
2024Alternately, @var{parameters} can specify
554f26ec
LC
2025@code{genkey} parameters suitable for Libgcrypt (@pxref{General
2026public-key related Functions, @code{gcry_pk_genkey},, gcrypt, The
2027Libgcrypt Reference Manual}).
f82cc5fd
LC
2028
2029@item --authorize
2030@cindex authorizing, archives
2031Authorize imports signed by the public key passed on standard input.
2032The public key must be in ``s-expression advanced format''---i.e., the
2033same format as the @file{signing-key.pub} file.
2034
2035The list of authorized keys is kept in the human-editable file
2036@file{/etc/guix/acl}. The file contains
2037@url{http://people.csail.mit.edu/rivest/Sexp.txt, ``advanced-format
2038s-expressions''} and is structured as an access-control list in the
2039@url{http://theworld.com/~cme/spki.txt, Simple Public-Key Infrastructure
2040(SPKI)}.
c6f8e9dd
LC
2041
2042@item --extract=@var{directory}
2043@itemx -x @var{directory}
2044Read a single-item archive as served by substitute servers
2045(@pxref{Substitutes}) and extract it to @var{directory}. This is a
2046low-level operation needed in only very narrow use cases; see below.
2047
2048For example, the following command extracts the substitute for Emacs
2049served by @code{hydra.gnu.org} to @file{/tmp/emacs}:
2050
2051@example
2052$ wget -O - \
2053 http://hydra.gnu.org/nar/@dots{}-emacs-24.5 \
2054 | bunzip2 | guix archive -x /tmp/emacs
2055@end example
2056
2057Single-item archives are different from multiple-item archives produced
2058by @command{guix archive --export}; they contain a single store item,
2059and they do @emph{not} embed a signature. Thus this operation does
2060@emph{no} signature verification and its output should be considered
2061unsafe.
2062
2063The primary purpose of this operation is to facilitate inspection of
2064archive contents coming from possibly untrusted substitute servers.
2065
760c60d6
LC
2066@end table
2067
2068To export store files as an archive to the standard output, run:
2069
2070@example
2071guix archive --export @var{options} @var{specifications}...
2072@end example
2073
2074@var{specifications} may be either store file names or package
2075specifications, as for @command{guix package} (@pxref{Invoking guix
2076package}). For instance, the following command creates an archive
2077containing the @code{gui} output of the @code{git} package and the main
2078output of @code{emacs}:
2079
2080@example
834129e0 2081guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
760c60d6
LC
2082@end example
2083
2084If the specified packages are not built yet, @command{guix archive}
2085automatically builds them. The build process may be controlled with the
2086same options that can be passed to the @command{guix build} command
70ee5642 2087(@pxref{Invoking guix build, common build options}).
760c60d6 2088
c554de89
AK
2089@c *********************************************************************
2090@include emacs.texi
760c60d6 2091
568717fd
LC
2092@c *********************************************************************
2093@node Programming Interface
2094@chapter Programming Interface
2095
3dc1970d
LC
2096GNU Guix provides several Scheme programming interfaces (APIs) to
2097define, build, and query packages. The first interface allows users to
2098write high-level package definitions. These definitions refer to
2099familiar packaging concepts, such as the name and version of a package,
2100its build system, and its dependencies. These definitions can then be
2101turned into concrete build actions.
2102
ba55b1cb 2103Build actions are performed by the Guix daemon, on behalf of users. In a
3dc1970d 2104standard setup, the daemon has write access to the store---the
834129e0 2105@file{/gnu/store} directory---whereas users do not. The recommended
3dc1970d
LC
2106setup also has the daemon perform builds in chroots, under a specific
2107build users, to minimize interference with the rest of the system.
2108
2109@cindex derivation
2110Lower-level APIs are available to interact with the daemon and the
2111store. To instruct the daemon to perform a build action, users actually
2112provide it with a @dfn{derivation}. A derivation is a low-level
2113representation of the build actions to be taken, and the environment in
2114which they should occur---derivations are to package definitions what
49ad317a
LC
2115assembly is to C programs. The term ``derivation'' comes from the fact
2116that build results @emph{derive} from them.
3dc1970d
LC
2117
2118This chapter describes all these APIs in turn, starting from high-level
2119package definitions.
2120
568717fd 2121@menu
b860f382 2122* Defining Packages:: Defining new packages.
7458bd0a 2123* Build Systems:: Specifying how packages are built.
b860f382
LC
2124* The Store:: Manipulating the package store.
2125* Derivations:: Low-level interface to package derivations.
2126* The Store Monad:: Purely functional interface to the store.
21b679f6 2127* G-Expressions:: Manipulating build expressions.
568717fd
LC
2128@end menu
2129
2130@node Defining Packages
2131@section Defining Packages
2132
3dc1970d
LC
2133The high-level interface to package definitions is implemented in the
2134@code{(guix packages)} and @code{(guix build-system)} modules. As an
2135example, the package definition, or @dfn{recipe}, for the GNU Hello
2136package looks like this:
2137
2138@example
e7f34eb0
LC
2139(define-module (gnu packages hello)
2140 #:use-module (guix packages)
2141 #:use-module (guix download)
2142 #:use-module (guix build-system gnu)
a6dcdcac
SB
2143 #:use-module (guix licenses)
2144 #:use-module (gnu packages gawk))
b22a12fd 2145
79f5dd59 2146(define-public hello
3dc1970d
LC
2147 (package
2148 (name "hello")
17d8e33f 2149 (version "2.10")
3dc1970d 2150 (source (origin
17d8e33f
ML
2151 (method url-fetch)
2152 (uri (string-append "mirror://gnu/hello/hello-" version
2153 ".tar.gz"))
2154 (sha256
2155 (base32
2156 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
3dc1970d 2157 (build-system gnu-build-system)
7458bd0a 2158 (arguments `(#:configure-flags '("--enable-silent-rules")))
3dc1970d 2159 (inputs `(("gawk" ,gawk)))
7458bd0a
LC
2160 (synopsis "Hello, GNU world: An example GNU package")
2161 (description "Guess what GNU Hello prints!")
3dc1970d 2162 (home-page "http://www.gnu.org/software/hello/")
b22a12fd 2163 (license gpl3+)))
3dc1970d
LC
2164@end example
2165
2166@noindent
2167Without being a Scheme expert, the reader may have guessed the meaning
e7f34eb0 2168of the various fields here. This expression binds variable @code{hello}
3dc1970d
LC
2169to a @code{<package>} object, which is essentially a record
2170(@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}).
2171This package object can be inspected using procedures found in the
2172@code{(guix packages)} module; for instance, @code{(package-name hello)}
2173returns---surprise!---@code{"hello"}.
2174
2f7d2d91
LC
2175With luck, you may be able to import part or all of the definition of
2176the package you are interested in from another repository, using the
2177@code{guix import} command (@pxref{Invoking guix import}).
2178
e7f34eb0
LC
2179In the example above, @var{hello} is defined into a module of its own,
2180@code{(gnu packages hello)}. Technically, this is not strictly
2181necessary, but it is convenient to do so: all the packages defined in
2182modules under @code{(gnu packages @dots{})} are automatically known to
2183the command-line tools (@pxref{Package Modules}).
2184
3dc1970d
LC
2185There are a few points worth noting in the above package definition:
2186
2187@itemize
2188@item
a2bf4907
LC
2189The @code{source} field of the package is an @code{<origin>} object
2190(@pxref{origin Reference}, for the complete reference).
3dc1970d
LC
2191Here, the @code{url-fetch} method from @code{(guix download)} is used,
2192meaning that the source is a file to be downloaded over FTP or HTTP.
2193
2194The @code{mirror://gnu} prefix instructs @code{url-fetch} to use one of
2195the GNU mirrors defined in @code{(guix download)}.
2196
2197The @code{sha256} field specifies the expected SHA256 hash of the file
2198being downloaded. It is mandatory, and allows Guix to check the
2199integrity of the file. The @code{(base32 @dots{})} form introduces the
6c365eca 2200base32 representation of the hash. You can obtain this information with
210cc920
LC
2201@code{guix download} (@pxref{Invoking guix download}) and @code{guix
2202hash} (@pxref{Invoking guix hash}).
3dc1970d 2203
f9cc8971
LC
2204@cindex patches
2205When needed, the @code{origin} form can also have a @code{patches} field
2206listing patches to be applied, and a @code{snippet} field giving a
2207Scheme expression to modify the source code.
2208
3dc1970d
LC
2209@item
2210@cindex GNU Build System
7458bd0a
LC
2211The @code{build-system} field specifies the procedure to build the
2212package (@pxref{Build Systems}). Here, @var{gnu-build-system}
2213represents the familiar GNU Build System, where packages may be
2214configured, built, and installed with the usual @code{./configure &&
2215make && make check && make install} command sequence.
2216
2217@item
2218The @code{arguments} field specifies options for the build system
2219(@pxref{Build Systems}). Here it is interpreted by
2220@var{gnu-build-system} as a request run @file{configure} with the
2221@code{--enable-silent-rules} flag.
3dc1970d
LC
2222
2223@item
2224The @code{inputs} field specifies inputs to the build process---i.e.,
2225build-time or run-time dependencies of the package. Here, we define an
2226input called @code{"gawk"} whose value is that of the @var{gawk}
2227variable; @var{gawk} is itself bound to a @code{<package>} object.
2228
2229Note that GCC, Coreutils, Bash, and other essential tools do not need to
2230be specified as inputs here. Instead, @var{gnu-build-system} takes care
7458bd0a 2231of ensuring that they are present (@pxref{Build Systems}).
3dc1970d
LC
2232
2233However, any other dependencies need to be specified in the
2234@code{inputs} field. Any dependency not specified here will simply be
2235unavailable to the build process, possibly leading to a build failure.
2236@end itemize
2237
87eafdbd
TUBK
2238@xref{package Reference}, for a full description of possible fields.
2239
2f7d2d91 2240Once a package definition is in place, the
e49951eb 2241package may actually be built using the @code{guix build} command-line
39bee8a2
LC
2242tool (@pxref{Invoking guix build}). You can easily jump back to the
2243package definition using the @command{guix edit} command
2244(@pxref{Invoking guix edit}).
2245@xref{Packaging Guidelines}, for
b4f5e0e8
CR
2246more information on how to test package definitions, and
2247@ref{Invoking guix lint}, for information on how to check a definition
2248for style conformance.
2249
7458bd0a
LC
2250Eventually, updating the package definition to a new upstream version
2251can be partly automated by the @command{guix refresh} command
2252(@pxref{Invoking guix refresh}).
3dc1970d
LC
2253
2254Behind the scenes, a derivation corresponding to the @code{<package>}
2255object is first computed by the @code{package-derivation} procedure.
834129e0 2256That derivation is stored in a @code{.drv} file under @file{/gnu/store}.
ba55b1cb 2257The build actions it prescribes may then be realized by using the
3dc1970d
LC
2258@code{build-derivations} procedure (@pxref{The Store}).
2259
2260@deffn {Scheme Procedure} package-derivation @var{store} @var{package} [@var{system}]
59688fc4
LC
2261Return the @code{<derivation>} object of @var{package} for @var{system}
2262(@pxref{Derivations}).
3dc1970d
LC
2263
2264@var{package} must be a valid @code{<package>} object, and @var{system}
2265must be a string denoting the target system type---e.g.,
2266@code{"x86_64-linux"} for an x86_64 Linux-based GNU system. @var{store}
2267must be a connection to the daemon, which operates on the store
2268(@pxref{The Store}).
2269@end deffn
568717fd 2270
9c1edabd
LC
2271@noindent
2272@cindex cross-compilation
2273Similarly, it is possible to compute a derivation that cross-builds a
2274package for some other system:
2275
2276@deffn {Scheme Procedure} package-cross-derivation @var{store} @
2277 @var{package} @var{target} [@var{system}]
59688fc4
LC
2278Return the @code{<derivation>} object of @var{package} cross-built from
2279@var{system} to @var{target}.
9c1edabd
LC
2280
2281@var{target} must be a valid GNU triplet denoting the target hardware
2282and operating system, such as @code{"mips64el-linux-gnu"}
2283(@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
2284Configure and Build System}).
2285@end deffn
2286
87eafdbd
TUBK
2287@menu
2288* package Reference :: The package data type.
2289* origin Reference:: The origin data type.
2290@end menu
2291
2292
2293@node package Reference
2294@subsection @code{package} Reference
2295
2296This section summarizes all the options available in @code{package}
2297declarations (@pxref{Defining Packages}).
2298
2299@deftp {Data Type} package
2300This is the data type representing a package recipe.
2301
2302@table @asis
2303@item @code{name}
2304The name of the package, as a string.
2305
2306@item @code{version}
2307The version of the package, as a string.
2308
2309@item @code{source}
2310An origin object telling how the source code for the package should be
2311acquired (@pxref{origin Reference}).
2312
2313@item @code{build-system}
2314The build system that should be used to build the package (@pxref{Build
2315Systems}).
2316
2317@item @code{arguments} (default: @code{'()})
2318The arguments that should be passed to the build system. This is a
2319list, typically containing sequential keyword-value pairs.
2320
2321@item @code{inputs} (default: @code{'()})
70650c68
LC
2322@itemx @code{native-inputs} (default: @code{'()})
2323@itemx @code{propagated-inputs} (default: @code{'()})
2324@cindex inputs, of packages
2325These fields list dependencies of the package. Each one is a list of
2326tuples, where each tuple has a label for the input (a string) as its
2327first element, a package, origin, or derivation as its second element,
2328and optionally the name of the output thereof that should be used, which
2329defaults to @code{"out"} (@pxref{Packages with Multiple Outputs}, for
2330more on package outputs). For example, the list below specifies 3
2331inputs:
87eafdbd 2332
70650c68
LC
2333@example
2334`(("libffi" ,libffi)
2335 ("libunistring" ,libunistring)
2336 ("glib:bin" ,glib "bin")) ;the "bin" output of Glib
2337@end example
2338
2339@cindex cross compilation, package dependencies
2340The distinction between @code{native-inputs} and @code{inputs} is
2341necessary when considering cross-compilation. When cross-compiling,
2342dependencies listed in @code{inputs} are built for the @emph{target}
2343architecture; conversely, dependencies listed in @code{native-inputs}
2344are built for the architecture of the @emph{build} machine.
2345
2346@code{native-inputs} is typically where you would list tools needed at
2347build time but not at run time, such as Autoconf, Automake, pkg-config,
2348Gettext, or Bison. @command{guix lint} can report likely mistakes in
2349this area (@pxref{Invoking guix lint}).
2350
2351@anchor{package-propagated-inputs}
2352Lastly, @code{propagated-inputs} is similar to @code{inputs}, but the
2353specified packages will be force-installed alongside the package they
2354belong to (@pxref{package-cmd-propagated-inputs, @command{guix
2355package}}, for information on how @command{guix package} deals with
2356propagated inputs.)
21461f27 2357
e0508b6b
LC
2358For example this is necessary when a C/C++ library needs headers of
2359another library to compile, or when a pkg-config file refers to another
2360one @i{via} its @code{Requires} field.
2361
2362Another example where @code{propagated-inputs} is useful is for
2363languages that lack a facility to record the run-time search path akin
2364to ELF's @code{RUNPATH}; this includes Guile, Python, Perl, GHC, and
2365more. To ensure that libraries written in those languages can find
2366library code they depend on at run time, run-time dependencies must be
2367listed in @code{propagated-inputs} rather than @code{inputs}.
87eafdbd 2368
87eafdbd
TUBK
2369@item @code{self-native-input?} (default: @code{#f})
2370This is a Boolean field telling whether the package should use itself as
2371a native input when cross-compiling.
2372
2373@item @code{outputs} (default: @code{'("out")})
2374The list of output names of the package. @xref{Packages with Multiple
2375Outputs}, for typical uses of additional outputs.
2376
2377@item @code{native-search-paths} (default: @code{'()})
2378@itemx @code{search-paths} (default: @code{'()})
2379A list of @code{search-path-specification} objects describing
2380search-path environment variables honored by the package.
2381
2382@item @code{replacement} (default: @code{#f})
2383This must either @code{#f} or a package object that will be used as a
2384@dfn{replacement} for this package. @xref{Security Updates, grafts},
2385for details.
2386
2387@item @code{synopsis}
2388A one-line description of the package.
2389
2390@item @code{description}
2391A more elaborate description of the package.
2392
2393@item @code{license}
2394The license of the package; a value from @code{(guix licenses)}.
2395
2396@item @code{home-page}
2397The URL to the home-page of the package, as a string.
2398
2399@item @code{supported-systems} (default: @var{%supported-systems})
2400The list of systems supported by the package, as strings of the form
2401@code{architecture-kernel}, for example @code{"x86_64-linux"}.
2402
2403@item @code{maintainers} (default: @code{'()})
2404The list of maintainers of the package, as @code{maintainer} objects.
2405
2406@item @code{location} (default: source location of the @code{package} form)
2407The source location of the package. It's useful to override this when
2408inheriting from another package, in which case this field is not
2409automatically corrected.
2410@end table
2411@end deftp
2412
2413
2414@node origin Reference
2415@subsection @code{origin} Reference
2416
2417This section summarizes all the options available in @code{origin}
2418declarations (@pxref{Defining Packages}).
2419
2420@deftp {Data Type} origin
2421This is the data type representing a source code origin.
2422
2423@table @asis
2424@item @code{uri}
2425An object containing the URI of the source. The object type depends on
2426the @code{method} (see below). For example, when using the
2427@var{url-fetch} method of @code{(guix download)}, the valid @code{uri}
2428values are: a URL represented as a string, or a list thereof.
2429
2430@item @code{method}
2431A procedure that will handle the URI.
2432
2433Examples include:
2434
2435@table @asis
2436@item @var{url-fetch} from @code{(guix download)}
2437download a file the HTTP, HTTPS, or FTP URL specified in the
2438@code{uri} field;
2439
2440@item @var{git-fetch} from @code{(guix git-download)}
2441clone the Git version control repository, and check out the revision
2442specified in the @code{uri} field as a @code{git-reference} object; a
2443@code{git-reference} looks like this:
2444
2445@example
2446(git-reference
2447 (url "git://git.debian.org/git/pkg-shadow/shadow")
2448 (commit "v4.1.5.1"))
2449@end example
2450@end table
2451
2452@item @code{sha256}
2453A bytevector containing the SHA-256 hash of the source. Typically the
2454@code{base32} form is used here to generate the bytevector from a
2455base-32 string.
2456
2457@item @code{file-name} (default: @code{#f})
2458The file name under which the source code should be saved. When this is
2459@code{#f}, a sensible default value will be used in most cases. In case
2460the source is fetched from a URL, the file name from the URL will be
2461used. For version control checkouts, it's recommended to provide the
2462file name explicitly because the default is not very descriptive.
2463
2464@item @code{patches} (default: @code{'()})
2465A list of file names containing patches to be applied to the source.
2466
2467@item @code{snippet} (default: @code{#f})
2468A quoted piece of code that will be run in the source directory to make
2469any modifications, which is sometimes more convenient than a patch.
2470
2471@item @code{patch-flags} (default: @code{'("-p1")})
2472A list of command-line flags that should be passed to the @code{patch}
2473command.
2474
2475@item @code{patch-inputs} (default: @code{#f})
2476Input packages or derivations to the patching process. When this is
2477@code{#f}, the usual set of inputs necessary for patching are provided,
2478such as GNU@tie{}Patch.
2479
2480@item @code{modules} (default: @code{'()})
2481A list of Guile modules that should be loaded during the patching
2482process and while running the code in the @code{snippet} field.
2483
2484@item @code{imported-modules} (default: @code{'()})
2485The list of Guile modules to import in the patch derivation, for use by
2486the @code{snippet}.
2487
2488@item @code{patch-guile} (default: @code{#f})
2489The Guile package that should be used in the patching process. When
2490this is @code{#f}, a sensible default is used.
2491@end table
2492@end deftp
2493
9c1edabd 2494
7458bd0a
LC
2495@node Build Systems
2496@section Build Systems
2497
2498@cindex build system
2499Each package definition specifies a @dfn{build system} and arguments for
2500that build system (@pxref{Defining Packages}). This @code{build-system}
2501field represents the build procedure of the package, as well implicit
2502dependencies of that build procedure.
2503
2504Build systems are @code{<build-system>} objects. The interface to
2505create and manipulate them is provided by the @code{(guix build-system)}
2506module, and actual build systems are exported by specific modules.
2507
f5fd4fd2 2508@cindex bag (low-level package representation)
0d5a559f
LC
2509Under the hood, build systems first compile package objects to
2510@dfn{bags}. A @dfn{bag} is like a package, but with less
2511ornamentation---in other words, a bag is a lower-level representation of
2512a package, which includes all the inputs of that package, including some
2513that were implicitly added by the build system. This intermediate
2514representation is then compiled to a derivation (@pxref{Derivations}).
2515
7458bd0a
LC
2516Build systems accept an optional list of @dfn{arguments}. In package
2517definitions, these are passed @i{via} the @code{arguments} field
2518(@pxref{Defining Packages}). They are typically keyword arguments
2519(@pxref{Optional Arguments, keyword arguments in Guile,, guile, GNU
2520Guile Reference Manual}). The value of these arguments is usually
2521evaluated in the @dfn{build stratum}---i.e., by a Guile process launched
2522by the daemon (@pxref{Derivations}).
2523
2524The main build system is @var{gnu-build-system}, which implements the
2525standard build procedure for GNU packages and many other packages. It
2526is provided by the @code{(guix build-system gnu)} module.
2527
2528@defvr {Scheme Variable} gnu-build-system
2529@var{gnu-build-system} represents the GNU Build System, and variants
2530thereof (@pxref{Configuration, configuration and makefile conventions,,
2531standards, GNU Coding Standards}).
2532
2533@cindex build phases
2534In a nutshell, packages using it configured, built, and installed with
2535the usual @code{./configure && make && make check && make install}
2536command sequence. In practice, a few additional steps are often needed.
2537All these steps are split up in separate @dfn{phases},
2538notably@footnote{Please see the @code{(guix build gnu-build-system)}
2539modules for more details about the build phases.}:
2540
2541@table @code
2542@item unpack
2543Unpack the source tarball, and change the current directory to the
2544extracted source tree. If the source is actually a directory, copy it
2545to the build tree, and enter that directory.
2546
2547@item patch-source-shebangs
2548Patch shebangs encountered in source files so they refer to the right
2549store file names. For instance, this changes @code{#!/bin/sh} to
2550@code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
2551
2552@item configure
2553Run the @file{configure} script with a number of default options, such
2554as @code{--prefix=/gnu/store/@dots{}}, as well as the options specified
2555by the @code{#:configure-flags} argument.
2556
2557@item build
2558Run @code{make} with the list of flags specified with
0917e80e 2559@code{#:make-flags}. If the @code{#:parallel-build?} argument is true
7458bd0a
LC
2560(the default), build with @code{make -j}.
2561
2562@item check
2563Run @code{make check}, or some other target specified with
2564@code{#:test-target}, unless @code{#:tests? #f} is passed. If the
2565@code{#:parallel-tests?} argument is true (the default), run @code{make
2566check -j}.
2567
2568@item install
2569Run @code{make install} with the flags listed in @code{#:make-flags}.
2570
2571@item patch-shebangs
2572Patch shebangs on the installed executable files.
2573
2574@item strip
2575Strip debugging symbols from ELF files (unless @code{#:strip-binaries?}
2576is false), copying them to the @code{debug} output when available
2577(@pxref{Installing Debugging Files}).
2578@end table
2579
2580@vindex %standard-phases
2581The build-side module @code{(guix build gnu-build-system)} defines
2582@var{%standard-phases} as the default list of build phases.
2583@var{%standard-phases} is a list of symbol/procedure pairs, where the
2584procedure implements the actual phase.
2585
2586The list of phases used for a particular package can be changed with the
2587@code{#:phases} parameter. For instance, passing:
2588
2589@example
2590#:phases (alist-delete 'configure %standard-phases)
2591@end example
2592
9bf404e9 2593means that all the phases described above will be used, except the
7458bd0a
LC
2594@code{configure} phase.
2595
2596In addition, this build system ensures that the ``standard'' environment
2597for GNU packages is available. This includes tools such as GCC, libc,
2598Coreutils, Bash, Make, Diffutils, grep, and sed (see the @code{(guix
2599build-system gnu)} module for a complete list.) We call these the
2600@dfn{implicit inputs} of a package, because package definitions don't
2601have to mention them.
2602@end defvr
2603
2604Other @code{<build-system>} objects are defined to support other
2605conventions and tools used by free software packages. They inherit most
2606of @var{gnu-build-system}, and differ mainly in the set of inputs
2607implicitly added to the build process, and in the list of phases
2608executed. Some of these build systems are listed below.
2609
2610@defvr {Scheme Variable} cmake-build-system
2611This variable is exported by @code{(guix build-system cmake)}. It
2612implements the build procedure for packages using the
2613@url{http://www.cmake.org, CMake build tool}.
2614
2615It automatically adds the @code{cmake} package to the set of inputs.
2616Which package is used can be specified with the @code{#:cmake}
2617parameter.
9849cfc1
LC
2618
2619The @code{#:configure-flags} parameter is taken as a list of flags
2620passed to the @command{cmake} command. The @code{#:build-type}
2621parameter specifies in abstract terms the flags passed to the compiler;
2622it defaults to @code{"RelWithDebInfo"} (short for ``release mode with
2623debugging information''), which roughly means that code is compiled with
2624@code{-O2 -g}, as is the case for Autoconf-based packages by default.
7458bd0a
LC
2625@end defvr
2626
3afcf52b
FB
2627@defvr {Scheme Variable} glib-or-gtk-build-system
2628This variable is exported by @code{(guix build-system glib-or-gtk)}. It
2629is intended for use with packages making use of GLib or GTK+.
2630
2631This build system adds the following two phases to the ones defined by
2632@var{gnu-build-system}:
2633
2634@table @code
2635@item glib-or-gtk-wrap
2636The phase @code{glib-or-gtk-wrap} ensures that programs found under
2637@file{bin/} are able to find GLib's ``schemas'' and
2638@uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, GTK+
2639modules}. This is achieved by wrapping the programs in launch scripts
2640that appropriately set the @code{XDG_DATA_DIRS} and @code{GTK_PATH}
2641environment variables.
2642
73aa8ddb
LC
2643It is possible to exclude specific package outputs from that wrapping
2644process by listing their names in the
2645@code{#:glib-or-gtk-wrap-excluded-outputs} parameter. This is useful
2646when an output is known not to contain any GLib or GTK+ binaries, and
2647where wrapping would gratuitously add a dependency of that output on
2648GLib and GTK+.
2649
3afcf52b
FB
2650@item glib-or-gtk-compile-schemas
2651The phase @code{glib-or-gtk-compile-schemas} makes sure that all GLib's
2652@uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
2653GSettings schemas} are compiled. Compilation is performed by the
2654@command{glib-compile-schemas} program. It is provided by the package
2655@code{glib:bin} which is automatically imported by the build system.
2656The @code{glib} package providing @command{glib-compile-schemas} can be
2657specified with the @code{#:glib} parameter.
2658@end table
2659
2660Both phases are executed after the @code{install} phase.
2661@end defvr
2662
7458bd0a
LC
2663@defvr {Scheme Variable} python-build-system
2664This variable is exported by @code{(guix build-system python)}. It
2665implements the more or less standard build procedure used by Python
2666packages, which consists in running @code{python setup.py build} and
2667then @code{python setup.py install --prefix=/gnu/store/@dots{}}.
2668
2669For packages that install stand-alone Python programs under @code{bin/},
2670it takes care of wrapping these programs so their @code{PYTHONPATH}
2671environment variable points to all the Python libraries they depend on.
2672
2673Which Python package is used can be specified with the @code{#:python}
2674parameter.
2675@end defvr
2676
2677@defvr {Scheme Variable} perl-build-system
2678This variable is exported by @code{(guix build-system perl)}. It
2d2a53fc
EB
2679implements the standard build procedure for Perl packages, which either
2680consists in running @code{perl Build.PL --prefix=/gnu/store/@dots{}},
2681followed by @code{Build} and @code{Build install}; or in running
2682@code{perl Makefile.PL PREFIX=/gnu/store/@dots{}}, followed by
2683@code{make} and @code{make install}; depending on which of
2684@code{Build.PL} or @code{Makefile.PL} is present in the package
2685distribution. Preference is given to the former if both @code{Build.PL}
2686and @code{Makefile.PL} exist in the package distribution. This
2687preference can be reversed by specifying @code{#t} for the
2688@code{#:make-maker?} parameter.
2689
2690The initial @code{perl Makefile.PL} or @code{perl Build.PL} invocation
2691passes flags specified by the @code{#:make-maker-flags} or
2692@code{#:module-build-flags} parameter, respectively.
7458bd0a
LC
2693
2694Which Perl package is used can be specified with @code{#:perl}.
2695@end defvr
2696
f8f3bef6
RW
2697@defvr {Scheme Variable} r-build-system
2698This variable is exported by @code{(guix build-system r)}. It
2699implements the build procedure used by @uref{http://r-project.org, R}
2700packages, which essentially is little more than running @code{R CMD
2701INSTALL --library=/gnu/store/@dots{}} in an environment where
2702@code{R_LIBS_SITE} contains the paths to all R package inputs. Tests
2703are run after installation using the R function
2704@code{tools::testInstalledPackage}.
2705@end defvr
2706
c08f9818
DT
2707@defvr {Scheme Variable} ruby-build-system
2708This variable is exported by @code{(guix build-system ruby)}. It
2709implements the RubyGems build procedure used by Ruby packages, which
2710involves running @code{gem build} followed by @code{gem install}.
2711
5dc87623
DT
2712The @code{source} field of a package that uses this build system
2713typically references a gem archive, since this is the format that Ruby
2714developers use when releasing their software. The build system unpacks
2715the gem archive, potentially patches the source, runs the test suite,
2716repackages the gem, and installs it. Additionally, directories and
2717tarballs may be referenced to allow building unreleased gems from Git or
2718a traditional source release tarball.
e83c6d00 2719
c08f9818 2720Which Ruby package is used can be specified with the @code{#:ruby}
6e9f2913
PP
2721parameter. A list of additional flags to be passed to the @command{gem}
2722command can be specified with the @code{#:gem-flags} parameter.
c08f9818 2723@end defvr
7458bd0a 2724
a677c726
RW
2725@defvr {Scheme Variable} waf-build-system
2726This variable is exported by @code{(guix build-system waf)}. It
2727implements a build procedure around the @code{waf} script. The common
2728phases---@code{configure}, @code{build}, and @code{install}---are
2729implemented by passing their names as arguments to the @code{waf}
2730script.
2731
2732The @code{waf} script is executed by the Python interpreter. Which
2733Python package is used to run the script can be specified with the
2734@code{#:python} parameter.
2735@end defvr
2736
14dfdf2e
FB
2737@defvr {Scheme Variable} haskell-build-system
2738This variable is exported by @code{(guix build-system haskell)}. It
2739implements the Cabal build procedure used by Haskell packages, which
2740involves running @code{runhaskell Setup.hs configure
2741--prefix=/gnu/store/@dots{}} and @code{runhaskell Setup.hs build}.
2742Instead of installing the package by running @code{runhaskell Setup.hs
2743install}, to avoid trying to register libraries in the read-only
2744compiler store directory, the build system uses @code{runhaskell
2745Setup.hs copy}, followed by @code{runhaskell Setup.hs register}. In
2746addition, the build system generates the package documentation by
2747running @code{runhaskell Setup.hs haddock}, unless @code{#:haddock? #f}
2748is passed. Optional Haddock parameters can be passed with the help of
2749the @code{#:haddock-flags} parameter. If the file @code{Setup.hs} is
2750not found, the build system looks for @code{Setup.lhs} instead.
2751
2752Which Haskell compiler is used can be specified with the @code{#:haskell}
a54bd6d7 2753parameter which defaults to @code{ghc}.
14dfdf2e
FB
2754@end defvr
2755
e9137a53
FB
2756@defvr {Scheme Variable} emacs-build-system
2757This variable is exported by @code{(guix build-system emacs)}. It
2758implements an installation procedure similar to the one of Emacs' own
2759packaging system (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
2760
2761It first creates the @code{@var{package}-autoloads.el} file, then it
2762byte compiles all Emacs Lisp files. Differently from the Emacs
2763packaging system, the Info documentation files are moved to the standard
2764documentation directory and the @file{dir} file is deleted. Each
2765package is installed in its own directory under
2766@file{share/emacs/site-lisp/guix.d}.
2767@end defvr
2768
7458bd0a
LC
2769Lastly, for packages that do not need anything as sophisticated, a
2770``trivial'' build system is provided. It is trivial in the sense that
2771it provides basically no support: it does not pull any implicit inputs,
2772and does not have a notion of build phases.
2773
2774@defvr {Scheme Variable} trivial-build-system
2775This variable is exported by @code{(guix build-system trivial)}.
2776
2777This build system requires a @code{#:builder} argument. This argument
2778must be a Scheme expression that builds the package's output(s)---as
2779with @code{build-expression->derivation} (@pxref{Derivations,
2780@code{build-expression->derivation}}).
2781@end defvr
2782
568717fd
LC
2783@node The Store
2784@section The Store
2785
e531ac2a
LC
2786@cindex store
2787@cindex store paths
2788
2789Conceptually, the @dfn{store} is where derivations that have been
834129e0 2790successfully built are stored---by default, under @file{/gnu/store}.
e531ac2a 2791Sub-directories in the store are referred to as @dfn{store paths}. The
4988dd40 2792store has an associated database that contains information such as the
e531ac2a
LC
2793store paths referred to by each store path, and the list of @emph{valid}
2794store paths---paths that result from a successful build.
2795
2796The store is always accessed by the daemon on behalf of its clients
2797(@pxref{Invoking guix-daemon}). To manipulate the store, clients
2798connect to the daemon over a Unix-domain socket, send it requests, and
2799read the result---these are remote procedure calls, or RPCs.
2800
2801The @code{(guix store)} module provides procedures to connect to the
2802daemon, and to perform RPCs. These are described below.
2803
2804@deffn {Scheme Procedure} open-connection [@var{file}] [#:reserve-space? #t]
2805Connect to the daemon over the Unix-domain socket at @var{file}. When
2806@var{reserve-space?} is true, instruct it to reserve a little bit of
2807extra space on the file system so that the garbage collector can still
2808operate, should the disk become full. Return a server object.
2809
2810@var{file} defaults to @var{%default-socket-path}, which is the normal
2811location given the options that were passed to @command{configure}.
2812@end deffn
2813
2814@deffn {Scheme Procedure} close-connection @var{server}
2815Close the connection to @var{server}.
2816@end deffn
2817
2818@defvr {Scheme Variable} current-build-output-port
2819This variable is bound to a SRFI-39 parameter, which refers to the port
2820where build and error logs sent by the daemon should be written.
2821@end defvr
2822
2823Procedures that make RPCs all take a server object as their first
2824argument.
2825
2826@deffn {Scheme Procedure} valid-path? @var{server} @var{path}
2827Return @code{#t} when @var{path} is a valid store path.
2828@end deffn
2829
cfbf9160 2830@deffn {Scheme Procedure} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
e531ac2a
LC
2831Add @var{text} under file @var{name} in the store, and return its store
2832path. @var{references} is the list of store paths referred to by the
2833resulting store path.
2834@end deffn
2835
874e6874 2836@deffn {Scheme Procedure} build-derivations @var{server} @var{derivations}
59688fc4
LC
2837Build @var{derivations} (a list of @code{<derivation>} objects or
2838derivation paths), and return when the worker is done building them.
2839Return @code{#t} on success.
874e6874
LC
2840@end deffn
2841
b860f382
LC
2842Note that the @code{(guix monads)} module provides a monad as well as
2843monadic versions of the above procedures, with the goal of making it
2844more convenient to work with code that accesses the store (@pxref{The
2845Store Monad}).
2846
e531ac2a
LC
2847@c FIXME
2848@i{This section is currently incomplete.}
568717fd
LC
2849
2850@node Derivations
2851@section Derivations
2852
874e6874
LC
2853@cindex derivations
2854Low-level build actions and the environment in which they are performed
2855are represented by @dfn{derivations}. A derivation contain the
2856following pieces of information:
2857
2858@itemize
2859@item
2860The outputs of the derivation---derivations produce at least one file or
2861directory in the store, but may produce more.
2862
2863@item
2864The inputs of the derivations, which may be other derivations or plain
2865files in the store (patches, build scripts, etc.)
2866
2867@item
2868The system type targeted by the derivation---e.g., @code{x86_64-linux}.
2869
2870@item
2871The file name of a build script in the store, along with the arguments
2872to be passed.
2873
2874@item
2875A list of environment variables to be defined.
2876
2877@end itemize
2878
2879@cindex derivation path
2880Derivations allow clients of the daemon to communicate build actions to
2881the store. They exist in two forms: as an in-memory representation,
2882both on the client- and daemon-side, and as files in the store whose
2883name end in @code{.drv}---these files are referred to as @dfn{derivation
2884paths}. Derivations paths can be passed to the @code{build-derivations}
2885procedure to perform the build actions they prescribe (@pxref{The
2886Store}).
2887
2888The @code{(guix derivations)} module provides a representation of
2889derivations as Scheme objects, along with procedures to create and
2890otherwise manipulate derivations. The lowest-level primitive to create
2891a derivation is the @code{derivation} procedure:
2892
1909431c
LC
2893@deffn {Scheme Procedure} derivation @var{store} @var{name} @var{builder} @
2894 @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
2096ef47 2895 [#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
1909431c 2896 [#:system (%current-system)] [#:references-graphs #f] @
4a6aeb67
LC
2897 [#:allowed-references #f] [#:leaked-env-vars #f] [#:local-build? #f] @
2898 [#:substitutable? #t]
59688fc4
LC
2899Build a derivation with the given arguments, and return the resulting
2900@code{<derivation>} object.
874e6874 2901
2096ef47 2902When @var{hash} and @var{hash-algo} are given, a
874e6874 2903@dfn{fixed-output derivation} is created---i.e., one whose result is
36bbbbd1
LC
2904known in advance, such as a file download. If, in addition,
2905@var{recursive?} is true, then that fixed output may be an executable
2906file or a directory and @var{hash} must be the hash of an archive
2907containing this output.
5b0c9d16 2908
858e9282 2909When @var{references-graphs} is true, it must be a list of file
5b0c9d16
LC
2910name/store path pairs. In that case, the reference graph of each store
2911path is exported in the build environment in the corresponding file, in
2912a simple text format.
1909431c 2913
b53be755
LC
2914When @var{allowed-references} is true, it must be a list of store items
2915or outputs that the derivation's output may refer to.
2916
c0468155
LC
2917When @var{leaked-env-vars} is true, it must be a list of strings
2918denoting environment variables that are allowed to ``leak'' from the
2919daemon's environment to the build environment. This is only applicable
2920to fixed-output derivations---i.e., when @var{hash} is true. The main
2921use is to allow variables such as @code{http_proxy} to be passed to
2922derivations that download files.
2923
1909431c
LC
2924When @var{local-build?} is true, declare that the derivation is not a
2925good candidate for offloading and should rather be built locally
2926(@pxref{Daemon Offload Setup}). This is the case for small derivations
2927where the costs of data transfers would outweigh the benefits.
4a6aeb67
LC
2928
2929When @var{substitutable?} is false, declare that substitutes of the
2930derivation's output should not be used (@pxref{Substitutes}). This is
2931useful, for instance, when building packages that capture details of the
2932host CPU instruction set.
874e6874
LC
2933@end deffn
2934
2935@noindent
2936Here's an example with a shell script as its builder, assuming
2937@var{store} is an open connection to the daemon, and @var{bash} points
2938to a Bash executable in the store:
2939
2940@lisp
2941(use-modules (guix utils)
2942 (guix store)
2943 (guix derivations))
2944
59688fc4
LC
2945(let ((builder ; add the Bash script to the store
2946 (add-text-to-store store "my-builder.sh"
2947 "echo hello world > $out\n" '())))
2948 (derivation store "foo"
2949 bash `("-e" ,builder)
21b679f6 2950 #:inputs `((,bash) (,builder))
59688fc4 2951 #:env-vars '(("HOME" . "/homeless"))))
834129e0 2952@result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
874e6874
LC
2953@end lisp
2954
21b679f6
LC
2955As can be guessed, this primitive is cumbersome to use directly. A
2956better approach is to write build scripts in Scheme, of course! The
2957best course of action for that is to write the build code as a
2958``G-expression'', and to pass it to @code{gexp->derivation}. For more
6621cdb6 2959information, @pxref{G-Expressions}.
21b679f6
LC
2960
2961Once upon a time, @code{gexp->derivation} did not exist and constructing
2962derivations with build code written in Scheme was achieved with
2963@code{build-expression->derivation}, documented below. This procedure
2964is now deprecated in favor of the much nicer @code{gexp->derivation}.
874e6874 2965
dd1a5a15
LC
2966@deffn {Scheme Procedure} build-expression->derivation @var{store} @
2967 @var{name} @var{exp} @
2968 [#:system (%current-system)] [#:inputs '()] @
2969 [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
36bbbbd1 2970 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
63a42824 2971 [#:references-graphs #f] [#:allowed-references #f] @
4a6aeb67 2972 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
874e6874
LC
2973Return a derivation that executes Scheme expression @var{exp} as a
2974builder for derivation @var{name}. @var{inputs} must be a list of
2975@code{(name drv-path sub-drv)} tuples; when @var{sub-drv} is omitted,
2976@code{"out"} is assumed. @var{modules} is a list of names of Guile
2977modules from the current search path to be copied in the store,
2978compiled, and made available in the load path during the execution of
2979@var{exp}---e.g., @code{((guix build utils) (guix build
2980gnu-build-system))}.
2981
2982@var{exp} is evaluated in an environment where @code{%outputs} is bound
2983to a list of output/path pairs, and where @code{%build-inputs} is bound
2984to a list of string/output-path pairs made from @var{inputs}.
2985Optionally, @var{env-vars} is a list of string pairs specifying the name
2986and value of environment variables visible to the builder. The builder
2987terminates by passing the result of @var{exp} to @code{exit}; thus, when
2988@var{exp} returns @code{#f}, the build is considered to have failed.
2989
2990@var{exp} is built using @var{guile-for-build} (a derivation). When
2991@var{guile-for-build} is omitted or is @code{#f}, the value of the
2992@code{%guile-for-build} fluid is used instead.
9c629a27 2993
63a42824 2994See the @code{derivation} procedure for the meaning of
4a6aeb67
LC
2995@var{references-graphs}, @var{allowed-references}, @var{local-build?},
2996and @var{substitutable?}.
874e6874
LC
2997@end deffn
2998
2999@noindent
3000Here's an example of a single-output derivation that creates a directory
3001containing one file:
3002
3003@lisp
3004(let ((builder '(let ((out (assoc-ref %outputs "out")))
834129e0 3005 (mkdir out) ; create /gnu/store/@dots{}-goo
874e6874
LC
3006 (call-with-output-file (string-append out "/test")
3007 (lambda (p)
3008 (display '(hello guix) p))))))
dd1a5a15 3009 (build-expression->derivation store "goo" builder))
874e6874 3010
834129e0 3011@result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
874e6874
LC
3012@end lisp
3013
568717fd 3014
b860f382
LC
3015@node The Store Monad
3016@section The Store Monad
3017
3018@cindex monad
3019
3020The procedures that operate on the store described in the previous
3021sections all take an open connection to the build daemon as their first
3022argument. Although the underlying model is functional, they either have
3023side effects or depend on the current state of the store.
3024
3025The former is inconvenient: the connection to the build daemon has to be
3026carried around in all those functions, making it impossible to compose
3027functions that do not take that parameter with functions that do. The
3028latter can be problematic: since store operations have side effects
3029and/or depend on external state, they have to be properly sequenced.
3030
3031@cindex monadic values
3032@cindex monadic functions
3033This is where the @code{(guix monads)} module comes in. This module
3034provides a framework for working with @dfn{monads}, and a particularly
3035useful monad for our uses, the @dfn{store monad}. Monads are a
3036construct that allows two things: associating ``context'' with values
3037(in our case, the context is the store), and building sequences of
561fb6c3 3038computations (here computations include accesses to the store.) Values
b860f382
LC
3039in a monad---values that carry this additional context---are called
3040@dfn{monadic values}; procedures that return such values are called
3041@dfn{monadic procedures}.
3042
3043Consider this ``normal'' procedure:
3044
3045@example
45adbd62
LC
3046(define (sh-symlink store)
3047 ;; Return a derivation that symlinks the 'bash' executable.
3048 (let* ((drv (package-derivation store bash))
3049 (out (derivation->output-path drv))
3050 (sh (string-append out "/bin/bash")))
3051 (build-expression->derivation store "sh"
3052 `(symlink ,sh %output))))
b860f382
LC
3053@end example
3054
c6f30b81
LC
3055Using @code{(guix monads)} and @code{(guix gexp)}, it may be rewritten
3056as a monadic function:
b860f382
LC
3057
3058@example
45adbd62 3059(define (sh-symlink)
b860f382 3060 ;; Same, but return a monadic value.
c6f30b81
LC
3061 (mlet %store-monad ((drv (package->derivation bash)))
3062 (gexp->derivation "sh"
3063 #~(symlink (string-append #$drv "/bin/bash")
3064 #$output))))
b860f382
LC
3065@end example
3066
c6f30b81
LC
3067There several things to note in the second version: the @code{store}
3068parameter is now implicit and is ``threaded'' in the calls to the
3069@code{package->derivation} and @code{gexp->derivation} monadic
3070procedures, and the monadic value returned by @code{package->derivation}
3071is @dfn{bound} using @code{mlet} instead of plain @code{let}.
3072
3073As it turns out, the call to @code{package->derivation} can even be
3074omitted since it will take place implicitly, as we will see later
3075(@pxref{G-Expressions}):
3076
3077@example
3078(define (sh-symlink)
3079 (gexp->derivation "sh"
3080 #~(symlink (string-append #$bash "/bin/bash")
3081 #$output)))
3082@end example
b860f382 3083
7ce21611
LC
3084@c See
3085@c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
3086@c for the funny quote.
3087Calling the monadic @code{sh-symlink} has no effect. As someone once
3088said, ``you exit a monad like you exit a building on fire: by running''.
3089So, to exit the monad and get the desired effect, one must use
3090@code{run-with-store}:
b860f382
LC
3091
3092@example
8e9aa37f
CAW
3093(run-with-store (open-connection) (sh-symlink))
3094@result{} /gnu/store/...-sh-symlink
b860f382
LC
3095@end example
3096
b9b86078
LC
3097Note that the @code{(guix monad-repl)} module extends Guile's REPL with
3098new ``meta-commands'' to make it easier to deal with monadic procedures:
3099@code{run-in-store}, and @code{enter-store-monad}. The former, is used
3100to ``run'' a single monadic value through the store:
3101
3102@example
3103scheme@@(guile-user)> ,run-in-store (package->derivation hello)
3104$1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
3105@end example
3106
3107The latter enters a recursive REPL, where all the return values are
3108automatically run through the store:
3109
3110@example
3111scheme@@(guile-user)> ,enter-store-monad
3112store-monad@@(guile-user) [1]> (package->derivation hello)
3113$2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
3114store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
3115$3 = "/gnu/store/@dots{}-foo"
3116store-monad@@(guile-user) [1]> ,q
3117scheme@@(guile-user)>
3118@end example
3119
3120@noindent
3121Note that non-monadic values cannot be returned in the
3122@code{store-monad} REPL.
3123
e87f0591
LC
3124The main syntactic forms to deal with monads in general are provided by
3125the @code{(guix monads)} module and are described below.
b860f382
LC
3126
3127@deffn {Scheme Syntax} with-monad @var{monad} @var{body} ...
3128Evaluate any @code{>>=} or @code{return} forms in @var{body} as being
3129in @var{monad}.
3130@end deffn
3131
3132@deffn {Scheme Syntax} return @var{val}
3133Return a monadic value that encapsulates @var{val}.
3134@end deffn
3135
751630c9 3136@deffn {Scheme Syntax} >>= @var{mval} @var{mproc} ...
b860f382 3137@dfn{Bind} monadic value @var{mval}, passing its ``contents'' to monadic
751630c9
LC
3138procedures @var{mproc}@dots{}@footnote{This operation is commonly
3139referred to as ``bind'', but that name denotes an unrelated procedure in
3140Guile. Thus we use this somewhat cryptic symbol inherited from the
3141Haskell language.}. There can be one @var{mproc} or several of them, as
3142in this example:
3143
3144@example
3145(run-with-state
3146 (with-monad %state-monad
3147 (>>= (return 1)
3148 (lambda (x) (return (+ 1 x)))
3149 (lambda (x) (return (* 2 x)))))
3150 'some-state)
3151
3152@result{} 4
3153@result{} some-state
3154@end example
b860f382
LC
3155@end deffn
3156
3157@deffn {Scheme Syntax} mlet @var{monad} ((@var{var} @var{mval}) ...) @
3158 @var{body} ...
3159@deffnx {Scheme Syntax} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
3160 @var{body} ...
3161Bind the variables @var{var} to the monadic values @var{mval} in
3162@var{body}. The form (@var{var} -> @var{val}) binds @var{var} to the
3163``normal'' value @var{val}, as per @code{let}.
3164
3165@code{mlet*} is to @code{mlet} what @code{let*} is to @code{let}
3166(@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
3167@end deffn
3168
405a9d4e
LC
3169@deffn {Scheme System} mbegin @var{monad} @var{mexp} ...
3170Bind @var{mexp} and the following monadic expressions in sequence,
3171returning the result of the last expression.
3172
3173This is akin to @code{mlet}, except that the return values of the
3174monadic expressions are ignored. In that sense, it is analogous to
3175@code{begin}, but applied to monadic expressions.
3176@end deffn
3177
561fb6c3
LC
3178@cindex state monad
3179The @code{(guix monads)} module provides the @dfn{state monad}, which
3180allows an additional value---the state---to be @emph{threaded} through
3181monadic procedure calls.
3182
3183@defvr {Scheme Variable} %state-monad
3184The state monad. Procedures in the state monad can access and change
3185the state that is threaded.
3186
3187Consider the example below. The @code{square} procedure returns a value
3188in the state monad. It returns the square of its argument, but also
3189increments the current state value:
3190
3191@example
3192(define (square x)
3193 (mlet %state-monad ((count (current-state)))
3194 (mbegin %state-monad
3195 (set-current-state (+ 1 count))
3196 (return (* x x)))))
3197
3198(run-with-state (sequence %state-monad (map square (iota 3))) 0)
3199@result{} (0 1 4)
3200@result{} 3
3201@end example
3202
3203When ``run'' through @var{%state-monad}, we obtain that additional state
3204value, which is the number of @code{square} calls.
3205@end defvr
3206
3207@deffn {Monadic Procedure} current-state
3208Return the current state as a monadic value.
3209@end deffn
3210
3211@deffn {Monadic Procedure} set-current-state @var{value}
3212Set the current state to @var{value} and return the previous state as a
3213monadic value.
3214@end deffn
3215
3216@deffn {Monadic Procedure} state-push @var{value}
3217Push @var{value} to the current state, which is assumed to be a list,
3218and return the previous state as a monadic value.
3219@end deffn
3220
3221@deffn {Monadic Procedure} state-pop
3222Pop a value from the current state and return it as a monadic value.
3223The state is assumed to be a list.
3224@end deffn
3225
3226@deffn {Scheme Procedure} run-with-state @var{mval} [@var{state}]
3227Run monadic value @var{mval} starting with @var{state} as the initial
3228state. Return two values: the resulting value, and the resulting state.
3229@end deffn
3230
e87f0591
LC
3231The main interface to the store monad, provided by the @code{(guix
3232store)} module, is as follows.
b860f382
LC
3233
3234@defvr {Scheme Variable} %store-monad
561fb6c3
LC
3235The store monad---an alias for @var{%state-monad}.
3236
3237Values in the store monad encapsulate accesses to the store. When its
3238effect is needed, a value of the store monad must be ``evaluated'' by
3239passing it to the @code{run-with-store} procedure (see below.)
b860f382
LC
3240@end defvr
3241
3242@deffn {Scheme Procedure} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
3243Run @var{mval}, a monadic value in the store monad, in @var{store}, an
3244open store connection.
3245@end deffn
3246
ad372953 3247@deffn {Monadic Procedure} text-file @var{name} @var{text} [@var{references}]
b860f382 3248Return as a monadic value the absolute file name in the store of the file
ad372953
LC
3249containing @var{text}, a string. @var{references} is a list of store items that the
3250resulting text file refers to; it defaults to the empty list.
45adbd62
LC
3251@end deffn
3252
0a90af15
LC
3253@deffn {Monadic Procedure} interned-file @var{file} [@var{name}] @
3254 [#:recursive? #t]
3255Return the name of @var{file} once interned in the store. Use
3256@var{name} as its store name, or the basename of @var{file} if
3257@var{name} is omitted.
3258
3259When @var{recursive?} is true, the contents of @var{file} are added
3260recursively; if @var{file} designates a flat file and @var{recursive?}
3261is true, its contents are added, and its permission bits are kept.
3262
3263The example below adds a file to the store, under two different names:
3264
3265@example
3266(run-with-store (open-connection)
3267 (mlet %store-monad ((a (interned-file "README"))
3268 (b (interned-file "README" "LEGU-MIN")))
3269 (return (list a b))))
3270
3271@result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
3272@end example
3273
3274@end deffn
3275
e87f0591
LC
3276The @code{(guix packages)} module exports the following package-related
3277monadic procedures:
3278
b860f382 3279@deffn {Monadic Procedure} package-file @var{package} [@var{file}] @
4231f05b
LC
3280 [#:system (%current-system)] [#:target #f] @
3281 [#:output "out"] Return as a monadic
b860f382
LC
3282value in the absolute file name of @var{file} within the @var{output}
3283directory of @var{package}. When @var{file} is omitted, return the name
4231f05b
LC
3284of the @var{output} directory of @var{package}. When @var{target} is
3285true, use it as a cross-compilation target triplet.
b860f382
LC
3286@end deffn
3287
b860f382 3288@deffn {Monadic Procedure} package->derivation @var{package} [@var{system}]
4231f05b
LC
3289@deffnx {Monadic Procedure} package->cross-derivation @var{package} @
3290 @var{target} [@var{system}]
3291Monadic version of @code{package-derivation} and
3292@code{package-cross-derivation} (@pxref{Defining Packages}).
b860f382
LC
3293@end deffn
3294
3295
21b679f6
LC
3296@node G-Expressions
3297@section G-Expressions
3298
3299@cindex G-expression
3300@cindex build code quoting
3301So we have ``derivations'', which represent a sequence of build actions
3302to be performed to produce an item in the store (@pxref{Derivations}).
3303Those build actions are performed when asking the daemon to actually
3304build the derivations; they are run by the daemon in a container
3305(@pxref{Invoking guix-daemon}).
3306
3307@cindex strata of code
3308It should come as no surprise that we like to write those build actions
3309in Scheme. When we do that, we end up with two @dfn{strata} of Scheme
3310code@footnote{The term @dfn{stratum} in this context was coined by
ef4ab0a4
LC
3311Manuel Serrano et al.@: in the context of their work on Hop. Oleg
3312Kiselyov, who has written insightful
3313@url{http://okmij.org/ftp/meta-programming/#meta-scheme, essays and code
3314on this topic}, refers to this kind of code generation as
3315@dfn{staging}.}: the ``host code''---code that defines packages, talks
3316to the daemon, etc.---and the ``build code''---code that actually
3317performs build actions, such as making directories, invoking
3318@command{make}, etc.
21b679f6
LC
3319
3320To describe a derivation and its build actions, one typically needs to
3321embed build code inside host code. It boils down to manipulating build
3322code as data, and Scheme's homoiconicity---code has a direct
3323representation as data---comes in handy for that. But we need more than
3324Scheme's normal @code{quasiquote} mechanism to construct build
3325expressions.
3326
3327The @code{(guix gexp)} module implements @dfn{G-expressions}, a form of
3328S-expressions adapted to build expressions. G-expressions, or
3329@dfn{gexps}, consist essentially in three syntactic forms: @code{gexp},
3330@code{ungexp}, and @code{ungexp-splicing} (or simply: @code{#~},
3331@code{#$}, and @code{#$@@}), which are comparable respectively to
3332@code{quasiquote}, @code{unquote}, and @code{unquote-splicing}
3333(@pxref{Expression Syntax, @code{quasiquote},, guile, GNU Guile
3334Reference Manual}). However, there are major differences:
3335
3336@itemize
3337@item
3338Gexps are meant to be written to a file and run or manipulated by other
3339processes.
3340
3341@item
b39fc6f7
LC
3342When a high-level object such as a package or derivation is unquoted
3343inside a gexp, the result is as if its output file name had been
3344introduced.
ff40e9b7 3345
21b679f6
LC
3346@item
3347Gexps carry information about the packages or derivations they refer to,
3348and these dependencies are automatically added as inputs to the build
3349processes that use them.
3350@end itemize
3351
c2b84676 3352@cindex lowering, of high-level objects in gexps
343eacbe
LC
3353This mechanism is not limited to package and derivation
3354objects: @dfn{compilers} able to ``lower'' other high-level objects to
c2b84676
LC
3355derivations or files in the store can be defined,
3356such that these objects can also be inserted
343eacbe
LC
3357into gexps. For example, a useful type of high-level object that can be
3358inserted in a gexp is ``file-like objects'', which make it easy to
3359add files to the store and refer to them in
558e8b11
LC
3360derivations and such (see @code{local-file} and @code{plain-file}
3361below.)
b39fc6f7 3362
21b679f6
LC
3363To illustrate the idea, here is an example of a gexp:
3364
3365@example
3366(define build-exp
3367 #~(begin
3368 (mkdir #$output)
3369 (chdir #$output)
aff8ce7c 3370 (symlink (string-append #$coreutils "/bin/ls")
21b679f6
LC
3371 "list-files")))
3372@end example
3373
3374This gexp can be passed to @code{gexp->derivation}; we obtain a
3375derivation that builds a directory containing exactly one symlink to
3376@file{/gnu/store/@dots{}-coreutils-8.22/bin/ls}:
3377
3378@example
3379(gexp->derivation "the-thing" build-exp)
3380@end example
3381
e20fd1bf 3382As one would expect, the @code{"/gnu/store/@dots{}-coreutils-8.22"} string is
21b679f6
LC
3383substituted to the reference to the @var{coreutils} package in the
3384actual build code, and @var{coreutils} is automatically made an input to
3385the derivation. Likewise, @code{#$output} (equivalent to @code{(ungexp
3386output)}) is replaced by a string containing the derivation's output
667b2508
LC
3387directory name.
3388
3389@cindex cross compilation
3390In a cross-compilation context, it is useful to distinguish between
3391references to the @emph{native} build of a package---that can run on the
3392host---versus references to cross builds of a package. To that end, the
3393@code{#+} plays the same role as @code{#$}, but is a reference to a
3394native package build:
3395
3396@example
3397(gexp->derivation "vi"
3398 #~(begin
3399 (mkdir #$output)
3400 (system* (string-append #+coreutils "/bin/ln")
3401 "-s"
3402 (string-append #$emacs "/bin/emacs")
3403 (string-append #$output "/bin/vi")))
3404 #:target "mips64el-linux")
3405@end example
3406
3407@noindent
3408In the example above, the native build of @var{coreutils} is used, so
3409that @command{ln} can actually run on the host; but then the
3410cross-compiled build of @var{emacs} is referenced.
3411
3412The syntactic form to construct gexps is summarized below.
21b679f6
LC
3413
3414@deffn {Scheme Syntax} #~@var{exp}
3415@deffnx {Scheme Syntax} (gexp @var{exp})
3416Return a G-expression containing @var{exp}. @var{exp} may contain one
3417or more of the following forms:
3418
3419@table @code
3420@item #$@var{obj}
3421@itemx (ungexp @var{obj})
b39fc6f7
LC
3422Introduce a reference to @var{obj}. @var{obj} may have one of the
3423supported types, for example a package or a
21b679f6
LC
3424derivation, in which case the @code{ungexp} form is replaced by its
3425output file name---e.g., @code{"/gnu/store/@dots{}-coreutils-8.22}.
3426
b39fc6f7
LC
3427If @var{obj} is a list, it is traversed and references to supported
3428objects are substituted similarly.
21b679f6
LC
3429
3430If @var{obj} is another gexp, its contents are inserted and its
3431dependencies are added to those of the containing gexp.
3432
3433If @var{obj} is another kind of object, it is inserted as is.
3434
b39fc6f7
LC
3435@item #$@var{obj}:@var{output}
3436@itemx (ungexp @var{obj} @var{output})
21b679f6 3437This is like the form above, but referring explicitly to the
b39fc6f7
LC
3438@var{output} of @var{obj}---this is useful when @var{obj} produces
3439multiple outputs (@pxref{Packages with Multiple Outputs}).
21b679f6 3440
667b2508
LC
3441@item #+@var{obj}
3442@itemx #+@var{obj}:output
3443@itemx (ungexp-native @var{obj})
3444@itemx (ungexp-native @var{obj} @var{output})
3445Same as @code{ungexp}, but produces a reference to the @emph{native}
3446build of @var{obj} when used in a cross compilation context.
3447
21b679f6
LC
3448@item #$output[:@var{output}]
3449@itemx (ungexp output [@var{output}])
3450Insert a reference to derivation output @var{output}, or to the main
3451output when @var{output} is omitted.
3452
3453This only makes sense for gexps passed to @code{gexp->derivation}.
3454
3455@item #$@@@var{lst}
3456@itemx (ungexp-splicing @var{lst})
3457Like the above, but splices the contents of @var{lst} inside the
3458containing list.
3459
667b2508
LC
3460@item #+@@@var{lst}
3461@itemx (ungexp-native-splicing @var{lst})
3462Like the above, but refers to native builds of the objects listed in
3463@var{lst}.
3464
21b679f6
LC
3465@end table
3466
3467G-expressions created by @code{gexp} or @code{#~} are run-time objects
3468of the @code{gexp?} type (see below.)
3469@end deffn
3470
3471@deffn {Scheme Procedure} gexp? @var{obj}
3472Return @code{#t} if @var{obj} is a G-expression.
3473@end deffn
3474
3475G-expressions are meant to be written to disk, either as code building
3476some derivation, or as plain files in the store. The monadic procedures
3477below allow you to do that (@pxref{The Store Monad}, for more
3478information about monads.)
3479
3480@deffn {Monadic Procedure} gexp->derivation @var{name} @var{exp} @
ce45eb4c 3481 [#:system (%current-system)] [#:target #f] [#:graft? #t] @
21b679f6
LC
3482 [#:hash #f] [#:hash-algo #f] @
3483 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
4684f301 3484 [#:module-path @var{%load-path}] @
c8351d9a 3485 [#:references-graphs #f] [#:allowed-references #f] @
c0468155 3486 [#:leaked-env-vars #f] @
0309e1b0 3487 [#:script-name (string-append @var{name} "-builder")] @
4a6aeb67 3488 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
21b679f6 3489Return a derivation @var{name} that runs @var{exp} (a gexp) with
0309e1b0
LC
3490@var{guile-for-build} (a derivation) on @var{system}; @var{exp} is
3491stored in a file called @var{script-name}. When @var{target} is true,
3492it is used as the cross-compilation target triplet for packages referred
3493to by @var{exp}.
21b679f6 3494
ce45eb4c
LC
3495Make @var{modules} available in the evaluation context of @var{exp};
3496@var{modules} is a list of names of Guile modules searched in
3497@var{module-path} to be copied in the store, compiled, and made available in
21b679f6
LC
3498the load path during the execution of @var{exp}---e.g., @code{((guix
3499build utils) (guix build gnu-build-system))}.
3500
ce45eb4c
LC
3501@var{graft?} determines whether packages referred to by @var{exp} should be grafted when
3502applicable.
3503
b53833b2
LC
3504When @var{references-graphs} is true, it must be a list of tuples of one of the
3505following forms:
3506
3507@example
3508(@var{file-name} @var{package})
3509(@var{file-name} @var{package} @var{output})
3510(@var{file-name} @var{derivation})
3511(@var{file-name} @var{derivation} @var{output})
3512(@var{file-name} @var{store-item})
3513@end example
3514
3515The right-hand-side of each element of @var{references-graphs} is automatically made
3516an input of the build process of @var{exp}. In the build environment, each
3517@var{file-name} contains the reference graph of the corresponding item, in a simple
3518text format.
3519
c8351d9a
LC
3520@var{allowed-references} must be either @code{#f} or a list of output names and packages.
3521In the latter case, the list denotes store items that the result is allowed to
3522refer to. Any reference to another store item will lead to a build error.
3523
e20fd1bf 3524The other arguments are as for @code{derivation} (@pxref{Derivations}).
21b679f6
LC
3525@end deffn
3526
343eacbe 3527@cindex file-like objects
e1c153e0
LC
3528The @code{local-file}, @code{plain-file}, @code{computed-file},
3529@code{program-file}, and @code{scheme-file} procedures below return
3530@dfn{file-like objects}. That is, when unquoted in a G-expression,
3531these objects lead to a file in the store. Consider this G-expression:
343eacbe
LC
3532
3533@example
3534#~(system* (string-append #$glibc "/sbin/nscd") "-f"
3535 #$(local-file "/tmp/my-nscd.conf"))
3536@end example
3537
3538The effect here is to ``intern'' @file{/tmp/my-nscd.conf} by copying it
3539to the store. Once expanded, for instance @i{via}
3540@code{gexp->derivation}, the G-expression refers to that copy under
3541@file{/gnu/store}; thus, modifying or removing the file in @file{/tmp}
3542does not have any effect on what the G-expression does.
3543@code{plain-file} can be used similarly; it differs in that the file
3544content is directly passed as a string.
3545
d9ae938f
LC
3546@deffn {Scheme Procedure} local-file @var{file} [@var{name}] @
3547 [#:recursive? #t]
3548Return an object representing local file @var{file} to add to the store; this
9d3994f7
LC
3549object can be used in a gexp. If @var{file} is a relative file name, it is looked
3550up relative to the source file where this form appears. @var{file} will be added to
3551the store under @var{name}--by default the base name of @var{file}.
d9ae938f
LC
3552
3553When @var{recursive?} is true, the contents of @var{file} are added recursively; if @var{file}
3554designates a flat file and @var{recursive?} is true, its contents are added, and its
3555permission bits are kept.
3556
3557This is the declarative counterpart of the @code{interned-file} monadic
3558procedure (@pxref{The Store Monad, @code{interned-file}}).
3559@end deffn
3560
558e8b11
LC
3561@deffn {Scheme Procedure} plain-file @var{name} @var{content}
3562Return an object representing a text file called @var{name} with the given
3563@var{content} (a string) to be added to the store.
3564
3565This is the declarative counterpart of @code{text-file}.
3566@end deffn
3567
91937029
LC
3568@deffn {Scheme Procedure} computed-file @var{name} @var{gexp} @
3569 [#:modules '()] [#:options '(#:local-build? #t)]
3570Return an object representing the store item @var{name}, a file or
3571directory computed by @var{gexp}. @var{modules} specifies the set of
3572modules visible in the execution context of @var{gexp}. @var{options}
3573is a list of additional arguments to pass to @code{gexp->derivation}.
3574
3575This is the declarative counterpart of @code{gexp->derivation}.
3576@end deffn
3577
21b679f6
LC
3578@deffn {Monadic Procedure} gexp->script @var{name} @var{exp}
3579Return an executable script @var{name} that runs @var{exp} using
3580@var{guile} with @var{modules} in its search path.
3581
3582The example below builds a script that simply invokes the @command{ls}
3583command:
3584
3585@example
3586(use-modules (guix gexp) (gnu packages base))
3587
3588(gexp->script "list-files"
3589 #~(execl (string-append #$coreutils "/bin/ls")
3590 "ls"))
3591@end example
3592
3593When ``running'' it through the store (@pxref{The Store Monad,
e20fd1bf 3594@code{run-with-store}}), we obtain a derivation that produces an
21b679f6
LC
3595executable file @file{/gnu/store/@dots{}-list-files} along these lines:
3596
3597@example
3598#!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
3599!#
3600(execl (string-append "/gnu/store/@dots{}-coreutils-8.22"/bin/ls")
3601 "ls")
3602@end example
3603@end deffn
3604
15a01c72
LC
3605@deffn {Scheme Procedure} program-file @var{name} @var{exp} @
3606 [#:modules '()] [#:guile #f]
3607Return an object representing the executable store item @var{name} that
3608runs @var{gexp}. @var{guile} is the Guile package used to execute that
3609script, and @var{modules} is the list of modules visible to that script.
3610
3611This is the declarative counterpart of @code{gexp->script}.
3612@end deffn
3613
21b679f6
LC
3614@deffn {Monadic Procedure} gexp->file @var{name} @var{exp}
3615Return a derivation that builds a file @var{name} containing @var{exp}.
3616
3617The resulting file holds references to all the dependencies of @var{exp}
3618or a subset thereof.
3619@end deffn
1ed19464 3620
e1c153e0
LC
3621@deffn {Scheme Procedure} scheme-file @var{name} @var{exp}
3622Return an object representing the Scheme file @var{name} that contains
3623@var{exp}.
3624
3625This is the declarative counterpart of @code{gexp->file}.
3626@end deffn
3627
1ed19464
LC
3628@deffn {Monadic Procedure} text-file* @var{name} @var{text} @dots{}
3629Return as a monadic value a derivation that builds a text file
3630containing all of @var{text}. @var{text} may list, in addition to
d9ae938f
LC
3631strings, objects of any type that can be used in a gexp: packages,
3632derivations, local file objects, etc. The resulting store file holds
3633references to all these.
1ed19464
LC
3634
3635This variant should be preferred over @code{text-file} anytime the file
3636to create will reference items from the store. This is typically the
3637case when building a configuration file that embeds store file names,
3638like this:
3639
3640@example
3641(define (profile.sh)
3642 ;; Return the name of a shell script in the store that
3643 ;; initializes the 'PATH' environment variable.
3644 (text-file* "profile.sh"
3645 "export PATH=" coreutils "/bin:"
3646 grep "/bin:" sed "/bin\n"))
3647@end example
3648
3649In this example, the resulting @file{/gnu/store/@dots{}-profile.sh} file
3650will references @var{coreutils}, @var{grep}, and @var{sed}, thereby
3651preventing them from being garbage-collected during its lifetime.
3652@end deffn
21b679f6 3653
b751cde3
LC
3654@deffn {Scheme Procedure} mixed-text-file @var{name} @var{text} @dots{}
3655Return an object representing store file @var{name} containing
3656@var{text}. @var{text} is a sequence of strings and file-like objects,
3657as in:
3658
3659@example
3660(mixed-text-file "profile"
3661 "export PATH=" coreutils "/bin:" grep "/bin")
3662@end example
3663
3664This is the declarative counterpart of @code{text-file*}.
3665@end deffn
3666
21b679f6
LC
3667Of course, in addition to gexps embedded in ``host'' code, there are
3668also modules containing build tools. To make it clear that they are
3669meant to be used in the build stratum, these modules are kept in the
3670@code{(guix build @dots{})} name space.
3671
c2b84676
LC
3672@cindex lowering, of high-level objects in gexps
3673Internally, high-level objects are @dfn{lowered}, using their compiler,
3674to either derivations or store items. For instance, lowering a package
3675yields a derivation, and lowering a @code{plain-file} yields a store
3676item. This is achieved using the @code{lower-object} monadic procedure.
3677
3678@deffn {Monadic Procedure} lower-object @var{obj} [@var{system}] @
3679 [#:target #f]
3680Return as a value in @var{%store-monad} the derivation or store item
3681corresponding to @var{obj} for @var{system}, cross-compiling for
3682@var{target} if @var{target} is true. @var{obj} must be an object that
3683has an associated gexp compiler, such as a @code{<package>}.
3684@end deffn
3685
21b679f6 3686
568717fd
LC
3687@c *********************************************************************
3688@node Utilities
3689@chapter Utilities
3690
210cc920
LC
3691This section describes tools primarily targeted at developers and users
3692who write new package definitions. They complement the Scheme
3693programming interface of Guix in a convenient way.
3694
568717fd 3695@menu
37166310 3696* Invoking guix build:: Building packages from the command line.
39bee8a2 3697* Invoking guix edit:: Editing package definitions.
210cc920 3698* Invoking guix download:: Downloading a file and printing its hash.
37166310 3699* Invoking guix hash:: Computing the cryptographic hash of a file.
2f7d2d91 3700* Invoking guix import:: Importing package definitions.
37166310 3701* Invoking guix refresh:: Updating package definitions.
b4f5e0e8 3702* Invoking guix lint:: Finding errors in package definitions.
fcc58db6 3703* Invoking guix size:: Profiling disk usage.
88856916 3704* Invoking guix graph:: Visualizing the graph of packages.
372c4bbc 3705* Invoking guix environment:: Setting up development environments.
aff8ce7c 3706* Invoking guix publish:: Sharing substitutes.
d23c20f1 3707* Invoking guix challenge:: Challenging substitute servers.
32efa254 3708* Invoking guix container:: Process isolation.
568717fd
LC
3709@end menu
3710
e49951eb
MW
3711@node Invoking guix build
3712@section Invoking @command{guix build}
568717fd 3713
e49951eb 3714The @command{guix build} command builds packages or derivations and
6798a8e4
LC
3715their dependencies, and prints the resulting store paths. Note that it
3716does not modify the user's profile---this is the job of the
e49951eb 3717@command{guix package} command (@pxref{Invoking guix package}). Thus,
6798a8e4
LC
3718it is mainly useful for distribution developers.
3719
3720The general syntax is:
c78bd12b
LC
3721
3722@example
e49951eb 3723guix build @var{options} @var{package-or-derivation}@dots{}
c78bd12b
LC
3724@end example
3725
3726@var{package-or-derivation} may be either the name of a package found in
5401dd75
LC
3727the software distribution such as @code{coreutils} or
3728@code{coreutils-8.20}, or a derivation such as
834129e0 3729@file{/gnu/store/@dots{}-coreutils-8.19.drv}. In the former case, a
e7f34eb0
LC
3730package with the corresponding name (and optionally version) is searched
3731for among the GNU distribution modules (@pxref{Package Modules}).
3732
3733Alternatively, the @code{--expression} option may be used to specify a
3734Scheme expression that evaluates to a package; this is useful when
3735disambiguation among several same-named packages or package variants is
3736needed.
c78bd12b
LC
3737
3738The @var{options} may be zero or more of the following:
3739
3740@table @code
3741
34a1783f
DT
3742@item --file=@var{file}
3743@itemx -f @var{file}
3744
3745Build the package or derivation that the code within @var{file}
3746evaluates to.
3747
3748As an example, @var{file} might contain a package definition like this
3749(@pxref{Defining Packages}):
3750
3751@example
3752@verbatiminclude package-hello.scm
3753@end example
3754
c78bd12b
LC
3755@item --expression=@var{expr}
3756@itemx -e @var{expr}
ac5de156 3757Build the package or derivation @var{expr} evaluates to.
c78bd12b 3758
5401dd75 3759For example, @var{expr} may be @code{(@@ (gnu packages guile)
c78bd12b
LC
3760guile-1.8)}, which unambiguously designates this specific variant of
3761version 1.8 of Guile.
3762
56b82106
LC
3763Alternately, @var{expr} may be a G-expression, in which case it is used
3764as a build program passed to @code{gexp->derivation}
3765(@pxref{G-Expressions}).
3766
3767Lastly, @var{expr} may refer to a zero-argument monadic procedure
ac5de156
LC
3768(@pxref{The Store Monad}). The procedure must return a derivation as a
3769monadic value, which is then passed through @code{run-with-store}.
3770
c78bd12b
LC
3771@item --source
3772@itemx -S
3773Build the packages' source derivations, rather than the packages
3774themselves.
3775
e49951eb 3776For instance, @code{guix build -S gcc} returns something like
834129e0 3777@file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, which is GCC's source tarball.
c78bd12b 3778
f9cc8971
LC
3779The returned source tarball is the result of applying any patches and
3780code snippets specified in the package's @code{origin} (@pxref{Defining
3781Packages}).
3782
2cdfe13d
EB
3783@item --sources
3784Fetch and return the source of @var{package-or-derivation} and all their
3785dependencies, recursively. This is a handy way to obtain a local copy
3786of all the source code needed to build @var{packages}, allowing you to
3787eventually build them even without network access. It is an extension
3788of the @code{--source} option and can accept one of the following
3789optional argument values:
3790
3791@table @code
3792@item package
3793This value causes the @code{--sources} option to behave in the same way
3794as the @code{--source} option.
3795
3796@item all
3797Build all packages' source derivations, including any source that might
3798be listed as @code{inputs}. This is the default value.
3799
3800@example
3801$ guix build --sources tzdata
3802The following derivations will be built:
3803 /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
3804 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
3805@end example
3806
3807@item transitive
3808Build all packages' source derivations, as well as all source
3809derivations for packages' transitive inputs. This can be used e.g. to
3810prefetch package source for later offline building.
3811
3812@example
3813$ guix build --sources=transitive tzdata
3814The following derivations will be built:
3815 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
3816 /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
3817 /gnu/store/@dots{}-grep-2.21.tar.xz.drv
3818 /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
3819 /gnu/store/@dots{}-make-4.1.tar.xz.drv
3820 /gnu/store/@dots{}-bash-4.3.tar.xz.drv
3821@dots{}
3822@end example
3823
3824@end table
3825
c78bd12b
LC
3826@item --system=@var{system}
3827@itemx -s @var{system}
3828Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
3829the host's system type.
3830
3831An example use of this is on Linux-based systems, which can emulate
3832different personalities. For instance, passing
3833@code{--system=i686-linux} on an @code{x86_64-linux} system allows users
3834to build packages in a complete 32-bit environment.
3835
e55ec43d
LC
3836@item --target=@var{triplet}
3837@cindex cross-compilation
3838Cross-build for @var{triplet}, which must be a valid GNU triplet, such
3839as @code{"mips64el-linux-gnu"} (@pxref{Configuration Names, GNU
3840configuration triplets,, configure, GNU Configure and Build System}).
3841
7f3673f2
LC
3842@item --with-source=@var{source}
3843Use @var{source} as the source of the corresponding package.
3844@var{source} must be a file name or a URL, as for @command{guix
3845download} (@pxref{Invoking guix download}).
3846
3847The ``corresponding package'' is taken to be one specified on the
3848command line whose name matches the base of @var{source}---e.g., if
3849@var{source} is @code{/src/guile-2.0.10.tar.gz}, the corresponding
3850package is @code{guile}. Likewise, the version string is inferred from
3851@var{source}; in the previous example, it's @code{2.0.10}.
3852
3853This option allows users to try out versions of packages other than the
3854one provided by the distribution. The example below downloads
3855@file{ed-1.7.tar.gz} from a GNU mirror and uses that as the source for
3856the @code{ed} package:
3857
3858@example
3859guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
3860@end example
3861
3862As a developer, @code{--with-source} makes it easy to test release
3863candidates:
3864
3865@example
3866guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
3867@end example
3868
a43b55f1
LC
3869@dots{} or to build from a checkout in a pristine environment:
3870
3871@example
3872$ git clone git://git.sv.gnu.org/guix.git
3873$ guix build guix --with-source=./guix
3874@end example
3875
a8d65643
LC
3876@anchor{build-check}
3877@item --check
3878@cindex determinism, checking
3879@cindex reproducibility, checking
3880Rebuild @var{package-or-derivation}, which are already available in the
3881store, and raise an error if the build results are not bit-for-bit
3882identical.
3883
3884This mechanism allows you to check whether previously-installed
3885substitutes are genuine (@pxref{Substitutes}), or whether a package's
3886build result is deterministic. @xref{Invoking guix challenge}, for more
3887background information and tools.
3888
05962f29
LC
3889@item --no-grafts
3890Do not ``graft'' packages. In practice, this means that package updates
3891available as grafts are not applied. @xref{Security Updates}, for more
3892information on grafts.
7f3673f2 3893
c78bd12b
LC
3894@item --derivations
3895@itemx -d
3896Return the derivation paths, not the output paths, of the given
3897packages.
3898
70ee5642
LC
3899@item --root=@var{file}
3900@itemx -r @var{file}
3901Make @var{file} a symlink to the result, and register it as a garbage
3902collector root.
3903
3904@item --log-file
3f208ad7 3905Return the build log file names or URLs for the given
70ee5642
LC
3906@var{package-or-derivation}s, or raise an error if build logs are
3907missing.
3908
3909This works regardless of how packages or derivations are specified. For
3910instance, the following invocations are equivalent:
3911
3912@example
3913guix build --log-file `guix build -d guile`
3914guix build --log-file `guix build guile`
3915guix build --log-file guile
3916guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
3917@end example
3918
3f208ad7
LC
3919If a log is unavailable locally, and unless @code{--no-substitutes} is
3920passed, the command looks for a corresponding log on one of the
3921substitute servers (as specified with @code{--substitute-urls}.)
70ee5642 3922
3f208ad7
LC
3923So for instance, let's say you want to see the build log of GDB on MIPS
3924but you're actually on an @code{x86_64} machine:
3925
3926@example
3927$ guix build --log-file gdb -s mips64el-linux
3928http://hydra.gnu.org/log/@dots{}-gdb-7.10
3929@end example
3930
3931You can freely access a huge library of build logs!
70ee5642
LC
3932@end table
3933
3934@cindex common build options
3935In addition, a number of options that control the build process are
3936common to @command{guix build} and other commands that can spawn builds,
3937such as @command{guix package} or @command{guix archive}. These are the
3938following:
3939
3940@table @code
3941
300868ba
LC
3942@item --load-path=@var{directory}
3943@itemx -L @var{directory}
3944Add @var{directory} to the front of the package module search path
3945(@pxref{Package Modules}).
3946
3947This allows users to define their own packages and make them visible to
3948the command-line tools.
3949
c78bd12b
LC
3950@item --keep-failed
3951@itemx -K
3952Keep the build tree of failed builds. Thus, if a build fail, its build
3953tree is kept under @file{/tmp}, in a directory whose name is shown at
3954the end of the build log. This is useful when debugging build issues.
3955
3956@item --dry-run
3957@itemx -n
3958Do not build the derivations.
3959
56b1f4b7
LC
3960@item --fallback
3961When substituting a pre-built binary fails, fall back to building
3962packages locally.
3963
f8a8e0fe
LC
3964@item --substitute-urls=@var{urls}
3965@anchor{client-substitute-urls}
3966Consider @var{urls} the whitespace-separated list of substitute source
3967URLs, overriding the default list of URLs of @command{guix-daemon}
3968(@pxref{daemon-substitute-urls,, @command{guix-daemon} URLs}).
3969
3970This means that substitutes may be downloaded from @var{urls}, provided
3971they are signed by a key authorized by the system administrator
3972(@pxref{Substitutes}).
3973
c78bd12b 3974@item --no-substitutes
b5385b52 3975Do not use substitutes for build products. That is, always build things
c4202d60
LC
3976locally instead of allowing downloads of pre-built binaries
3977(@pxref{Substitutes}).
c78bd12b 3978
5b74fe06
LC
3979@item --rounds=@var{n}
3980Build each derivation @var{n} times in a row, and raise an error if
3981consecutive build results are not bit-for-bit identical.
3982
3983This is a useful way to detect non-deterministic builds processes.
3984Non-deterministic build processes are a problem because they make it
3985practically impossible for users to @emph{verify} whether third-party
3986binaries are genuine. @xref{Invoking guix challenge}, for more.
3987
3988Note that, currently, the differing build results are not kept around,
3989so you will have to manually investigate in case of an error---e.g., by
3990stashing one of the build results with @code{guix archive --export},
3991then rebuilding, and finally comparing the two results.
3992
425b0bfc 3993@item --no-build-hook
4ec2e92d
LC
3994Do not attempt to offload builds @i{via} the daemon's ``build hook''
3995(@pxref{Daemon Offload Setup}). That is, always build things locally
3996instead of offloading builds to remote machines.
425b0bfc 3997
969e678e
LC
3998@item --max-silent-time=@var{seconds}
3999When the build or substitution process remains silent for more than
4000@var{seconds}, terminate it and report a build failure.
4001
002622b6
LC
4002@item --timeout=@var{seconds}
4003Likewise, when the build or substitution process lasts for more than
4004@var{seconds}, terminate it and report a build failure.
4005
4006By default there is no timeout. This behavior can be restored with
4007@code{--timeout=0}.
4008
07ab4bf1
LC
4009@item --verbosity=@var{level}
4010Use the given verbosity level. @var{level} must be an integer between 0
4011and 5; higher means more verbose output. Setting a level of 4 or more
4012may be helpful when debugging setup issues with the build daemon.
4013
70ee5642
LC
4014@item --cores=@var{n}
4015@itemx -c @var{n}
4016Allow the use of up to @var{n} CPU cores for the build. The special
4017value @code{0} means to use as many CPU cores as available.
bf421152 4018
f6526eb3
LC
4019@item --max-jobs=@var{n}
4020@itemx -M @var{n}
4021Allow at most @var{n} build jobs in parallel. @xref{Invoking
4022guix-daemon, @code{--max-jobs}}, for details about this option and the
4023equivalent @command{guix-daemon} option.
4024
c78bd12b
LC
4025@end table
4026
e49951eb 4027Behind the scenes, @command{guix build} is essentially an interface to
c78bd12b
LC
4028the @code{package-derivation} procedure of the @code{(guix packages)}
4029module, and to the @code{build-derivations} procedure of the @code{(guix
01d8ac64 4030derivations)} module.
c78bd12b 4031
16eb115e
DP
4032In addition to options explicitly passed on the command line,
4033@command{guix build} and other @command{guix} commands that support
4034building honor the @code{GUIX_BUILD_OPTIONS} environment variable.
4035
4036@defvr {Environment Variable} GUIX_BUILD_OPTIONS
4037Users can define this variable to a list of command line options that
4038will automatically be used by @command{guix build} and other
4039@command{guix} commands that can perform builds, as in the example
4040below:
4041
4042@example
4043$ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
4044@end example
4045
847391fe
DP
4046These options are parsed independently, and the result is appended to
4047the parsed command-line options.
16eb115e
DP
4048@end defvr
4049
4050
39bee8a2
LC
4051@node Invoking guix edit
4052@section Invoking @command{guix edit}
4053
4054@cindex package definition, editing
4055So many packages, so many source files! The @command{guix edit} command
4056facilitates the life of packagers by pointing their editor at the source
4057file containing the definition of the specified packages. For instance:
4058
4059@example
4060guix edit gcc-4.8 vim
4061@end example
4062
4063@noindent
6237b9fa
LC
4064launches the program specified in the @code{VISUAL} or in the
4065@code{EDITOR} environment variable to edit the recipe of GCC@tie{}4.8.4
4066and that of Vim.
39bee8a2
LC
4067
4068If you are using Emacs, note that the Emacs user interface provides
6248e326
AK
4069similar functionality in the ``package info'' and ``package list''
4070buffers created by @kbd{M-x guix-search-by-name} and similar commands
4071(@pxref{Emacs Commands}).
39bee8a2
LC
4072
4073
210cc920
LC
4074@node Invoking guix download
4075@section Invoking @command{guix download}
4076
4077When writing a package definition, developers typically need to download
4078the package's source tarball, compute its SHA256 hash, and write that
4079hash in the package definition (@pxref{Defining Packages}). The
4080@command{guix download} tool helps with this task: it downloads a file
4081from the given URI, adds it to the store, and prints both its file name
4082in the store and its SHA256 hash.
4083
4084The fact that the downloaded file is added to the store saves bandwidth:
4085when the developer eventually tries to build the newly defined package
4086with @command{guix build}, the source tarball will not have to be
4087downloaded again because it is already in the store. It is also a
4088convenient way to temporarily stash files, which may be deleted
4089eventually (@pxref{Invoking guix gc}).
4090
4091The @command{guix download} command supports the same URIs as used in
4092package definitions. In particular, it supports @code{mirror://} URIs.
4093@code{https} URIs (HTTP over TLS) are supported @emph{provided} the
4094Guile bindings for GnuTLS are available in the user's environment; when
537c8bb3
LC
4095they are not available, an error is raised. @xref{Guile Preparations,
4096how to install the GnuTLS bindings for Guile,, gnutls-guile,
4097GnuTLS-Guile}, for more information.
210cc920
LC
4098
4099The following option is available:
4100
4101@table @code
4102@item --format=@var{fmt}
4103@itemx -f @var{fmt}
4104Write the hash in the format specified by @var{fmt}. For more
081145cf 4105information on the valid values for @var{fmt}, @pxref{Invoking guix hash}.
210cc920
LC
4106@end table
4107
6c365eca
NK
4108@node Invoking guix hash
4109@section Invoking @command{guix hash}
4110
210cc920 4111The @command{guix hash} command computes the SHA256 hash of a file.
6c365eca
NK
4112It is primarily a convenience tool for anyone contributing to the
4113distribution: it computes the cryptographic hash of a file, which can be
4114used in the definition of a package (@pxref{Defining Packages}).
4115
4116The general syntax is:
4117
4118@example
4119guix hash @var{option} @var{file}
4120@end example
4121
4122@command{guix hash} has the following option:
4123
4124@table @code
4125
4126@item --format=@var{fmt}
4127@itemx -f @var{fmt}
210cc920 4128Write the hash in the format specified by @var{fmt}.
6c365eca
NK
4129
4130Supported formats: @code{nix-base32}, @code{base32}, @code{base16}
4131(@code{hex} and @code{hexadecimal} can be used as well).
4132
4133If the @option{--format} option is not specified, @command{guix hash}
4134will output the hash in @code{nix-base32}. This representation is used
4135in the definitions of packages.
4136
3140f2df
LC
4137@item --recursive
4138@itemx -r
4139Compute the hash on @var{file} recursively.
4140
4141In this case, the hash is computed on an archive containing @var{file},
4142including its children if it is a directory. Some of @var{file}'s
4143meta-data is part of the archive; for instance, when @var{file} is a
4144regular file, the hash is different depending on whether @var{file} is
4145executable or not. Meta-data such as time stamps has no impact on the
4146hash (@pxref{Invoking guix archive}).
4147@c FIXME: Replace xref above with xref to an ``Archive'' section when
4148@c it exists.
4149
6c365eca
NK
4150@end table
4151
2f7d2d91
LC
4152@node Invoking guix import
4153@section Invoking @command{guix import}
4154
4155@cindex importing packages
4156@cindex package import
4157@cindex package conversion
4158The @command{guix import} command is useful for people willing to add a
4159package to the distribution but who'd rather do as little work as
4160possible to get there---a legitimate demand. The command knows of a few
4161repositories from which it can ``import'' package meta-data. The result
4162is a package definition, or a template thereof, in the format we know
4163(@pxref{Defining Packages}).
4164
4165The general syntax is:
4166
4167@example
4168guix import @var{importer} @var{options}@dots{}
4169@end example
4170
4171@var{importer} specifies the source from which to import package
4172meta-data, and @var{options} specifies a package identifier and other
4173options specific to @var{importer}. Currently, the available
4174``importers'' are:
4175
4176@table @code
4177@item gnu
4178Import meta-data for the given GNU package. This provides a template
4179for the latest version of that GNU package, including the hash of its
4180source tarball, and its canonical synopsis and description.
4181
4182Additional information such as the package's dependencies and its
4183license needs to be figured out manually.
4184
4185For example, the following command returns a package definition for
4186GNU@tie{}Hello:
4187
4188@example
4189guix import gnu hello
4190@end example
4191
4192Specific command-line options are:
4193
4194@table @code
4195@item --key-download=@var{policy}
4196As for @code{guix refresh}, specify the policy to handle missing OpenPGP
4197keys when verifying the package's signature. @xref{Invoking guix
4198refresh, @code{--key-download}}.
4199@end table
4200
4201@item pypi
4202@cindex pypi
4203Import meta-data from the @uref{https://pypi.python.org/, Python Package
4204Index}@footnote{This functionality requires Guile-JSON to be installed.
4205@xref{Requirements}.}. Information is taken from the JSON-formatted
4206description available at @code{pypi.python.org} and usually includes all
4207the relevant information, including package dependencies.
4208
4209The command below imports meta-data for the @code{itsdangerous} Python
4210package:
4211
4212@example
4213guix import pypi itsdangerous
4214@end example
4215
3aae8145
DT
4216@item gem
4217@cindex gem
4218Import meta-data from @uref{https://rubygems.org/,
4219RubyGems}@footnote{This functionality requires Guile-JSON to be
4220installed. @xref{Requirements}.}. Information is taken from the
4221JSON-formatted description available at @code{rubygems.org} and includes
4222most relevant information, including runtime dependencies. There are
4223some caveats, however. The meta-data doesn't distinguish between
4224synopses and descriptions, so the same string is used for both fields.
4225Additionally, the details of non-Ruby dependencies required to build
4226native extensions is unavailable and left as an exercise to the
4227packager.
4228
4229The command below imports meta-data for the @code{rails} Ruby package:
4230
4231@example
4232guix import gem rails
4233@end example
4234
d45dc6da
EB
4235@item cpan
4236@cindex CPAN
4237Import meta-data from @uref{https://www.metacpan.org/, MetaCPAN}.
4238Information is taken from the JSON-formatted meta-data provided through
4239@uref{https://api.metacpan.org/, MetaCPAN's API} and includes most
66392e47
EB
4240relevant information, such as module dependencies. License information
4241should be checked closely. If Perl is available in the store, then the
4242@code{corelist} utility will be used to filter core modules out of the
4243list of dependencies.
d45dc6da
EB
4244
4245The command command below imports meta-data for the @code{Acme::Boolean}
4246Perl module:
4247
4248@example
4249guix import cpan Acme::Boolean
4250@end example
4251
e1248602
RW
4252@item cran
4253@cindex CRAN
4254Import meta-data from @uref{http://cran.r-project.org/, CRAN}, the
4255central repository for the @uref{http://r-project.org, GNU@tie{}R
4256statistical and graphical environment}.
4257
b1186502 4258Information is extracted from the package's DESCRIPTION file.
e1248602
RW
4259
4260The command command below imports meta-data for the @code{Cairo}
4261R package:
4262
4263@example
4264guix import cran Cairo
4265@end example
4266
2f7d2d91
LC
4267@item nix
4268Import meta-data from a local copy of the source of the
4269@uref{http://nixos.org/nixpkgs/, Nixpkgs distribution}@footnote{This
4270relies on the @command{nix-instantiate} command of
4271@uref{http://nixos.org/nix/, Nix}.}. Package definitions in Nixpkgs are
4272typically written in a mixture of Nix-language and Bash code. This
4273command only imports the high-level package structure that is written in
4274the Nix language. It normally includes all the basic fields of a
4275package definition.
4276
4277When importing a GNU package, the synopsis and descriptions are replaced
4278by their canonical upstream variant.
4279
961d0d2d
LC
4280Usually, you will first need to do:
4281
4282@example
4283export NIX_REMOTE=daemon
4284@end example
4285
4286@noindent
4287so that @command{nix-instantiate} does not try to open the Nix database.
4288
2f7d2d91
LC
4289As an example, the command below imports the package definition of
4290LibreOffice (more precisely, it imports the definition of the package
4291bound to the @code{libreoffice} top-level attribute):
4292
4293@example
4294guix import nix ~/path/to/nixpkgs libreoffice
4295@end example
863af4e1
FB
4296
4297@item hackage
4298@cindex hackage
4299Import meta-data from Haskell community's central package archive
4300@uref{https://hackage.haskell.org/, Hackage}. Information is taken from
4301Cabal files and includes all the relevant information, including package
4302dependencies.
4303
4304Specific command-line options are:
4305
4306@table @code
a4154748
FB
4307@item --stdin
4308@itemx -s
4309Read a Cabal file from the standard input.
863af4e1
FB
4310@item --no-test-dependencies
4311@itemx -t
a4154748
FB
4312Do not include dependencies required by the test suites only.
4313@item --cabal-environment=@var{alist}
4314@itemx -e @var{alist}
4315@var{alist} is a Scheme alist defining the environment in which the
4316Cabal conditionals are evaluated. The accepted keys are: @code{os},
4317@code{arch}, @code{impl} and a string representing the name of a flag.
4318The value associated with a flag has to be either the symbol
4319@code{true} or @code{false}. The value associated with other keys
4320has to conform to the Cabal file format definition. The default value
4321associated with the keys @code{os}, @code{arch} and @code{impl} is
4322@samp{linux}, @samp{x86_64} and @samp{ghc} respectively.
863af4e1
FB
4323@end table
4324
4325The command below imports meta-data for the latest version of the
a4154748
FB
4326@code{HTTP} Haskell package without including test dependencies and
4327specifying the value of the flag @samp{network-uri} as @code{false}:
863af4e1
FB
4328
4329@example
a4154748 4330guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
863af4e1
FB
4331@end example
4332
4333A specific package version may optionally be specified by following the
4334package name by a hyphen and a version number as in the following example:
4335
4336@example
4337guix import hackage mtl-2.1.3.1
4338@end example
7f74a931
FB
4339
4340@item elpa
4341@cindex elpa
4342Import meta-data from an Emacs Lisp Package Archive (ELPA) package
4343repository (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
4344
4345Specific command-line options are:
4346
4347@table @code
4348@item --archive=@var{repo}
4349@itemx -a @var{repo}
4350@var{repo} identifies the archive repository from which to retrieve the
4351information. Currently the supported repositories and their identifiers
4352are:
4353@itemize -
4354@item
840bd1d3 4355@uref{http://elpa.gnu.org/packages, GNU}, selected by the @code{gnu}
7f74a931
FB
4356identifier. This is the default.
4357
4358@item
840bd1d3 4359@uref{http://stable.melpa.org/packages, MELPA-Stable}, selected by the
7f74a931
FB
4360@code{melpa-stable} identifier.
4361
4362@item
840bd1d3 4363@uref{http://melpa.org/packages, MELPA}, selected by the @code{melpa}
7f74a931
FB
4364identifier.
4365@end itemize
4366@end table
2f7d2d91
LC
4367@end table
4368
4369The structure of the @command{guix import} code is modular. It would be
4370useful to have more importers for other package formats, and your help
4371is welcome here (@pxref{Contributing}).
4372
37166310
LC
4373@node Invoking guix refresh
4374@section Invoking @command{guix refresh}
4375
4376The primary audience of the @command{guix refresh} command is developers
4377of the GNU software distribution. By default, it reports any packages
4378provided by the distribution that are outdated compared to the latest
4379upstream version, like this:
4380
4381@example
4382$ guix refresh
4383gnu/packages/gettext.scm:29:13: gettext would be upgraded from 0.18.1.1 to 0.18.2.1
4384gnu/packages/glib.scm:77:12: glib would be upgraded from 2.34.3 to 2.37.0
4385@end example
4386
4387It does so by browsing each package's FTP directory and determining the
bcb571cb
LC
4388highest version number of the source tarballs therein. The command
4389knows how to update specific types of packages: GNU packages, ELPA
4390packages, etc.---see the documentation for @option{--type} below. The
4391are many packages, though, for which it lacks a method to determine
4392whether a new upstream release is available. However, the mechanism is
4393extensible, so feel free to get in touch with us to add a new method!
37166310
LC
4394
4395When passed @code{--update}, it modifies distribution source files to
4396update the version numbers and source tarball hashes of those packages'
4397recipes (@pxref{Defining Packages}). This is achieved by downloading
4398each package's latest source tarball and its associated OpenPGP
4399signature, authenticating the downloaded tarball against its signature
4400using @command{gpg}, and finally computing its hash. When the public
4401key used to sign the tarball is missing from the user's keyring, an
4402attempt is made to automatically retrieve it from a public key server;
4403when it's successful, the key is added to the user's keyring; otherwise,
4404@command{guix refresh} reports an error.
4405
4406The following options are supported:
4407
4408@table @code
4409
2d7fc7da
LC
4410@item --expression=@var{expr}
4411@itemx -e @var{expr}
4412Consider the package @var{expr} evaluates to.
4413
4414This is useful to precisely refer to a package, as in this example:
4415
4416@example
4417guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
4418@end example
4419
4420This command lists the dependents of the ``final'' libc (essentially all
4421the packages.)
4422
37166310
LC
4423@item --update
4424@itemx -u
38e16b49
LC
4425Update distribution source files (package recipes) in place. This is
4426usually run from a checkout of the Guix source tree (@pxref{Running
4427Guix Before It Is Installed}):
4428
4429@example
4430$ ./pre-inst-env guix refresh -s non-core
4431@end example
4432
081145cf 4433@xref{Defining Packages}, for more information on package definitions.
37166310
LC
4434
4435@item --select=[@var{subset}]
4436@itemx -s @var{subset}
4437Select all the packages in @var{subset}, one of @code{core} or
4438@code{non-core}.
4439
4440The @code{core} subset refers to all the packages at the core of the
4441distribution---i.e., packages that are used to build ``everything
4442else''. This includes GCC, libc, Binutils, Bash, etc. Usually,
4443changing one of these packages in the distribution entails a rebuild of
4444all the others. Thus, such updates are an inconvenience to users in
4445terms of build time or bandwidth used to achieve the upgrade.
4446
4447The @code{non-core} subset refers to the remaining packages. It is
4448typically useful in cases where an update of the core packages would be
4449inconvenient.
4450
bcb571cb
LC
4451@item --type=@var{updater}
4452@itemx -t @var{updater}
7191adc5
AK
4453Select only packages handled by @var{updater} (may be a comma-separated
4454list of updaters). Currently, @var{updater} may be one of:
bcb571cb
LC
4455
4456@table @code
4457@item gnu
4458the updater for GNU packages;
e80c0f85
LC
4459@item gnome
4460the updater for GNOME packages;
bcb571cb 4461@item elpa
d882c235
LC
4462the updater for @uref{http://elpa.gnu.org/, ELPA} packages;
4463@item cran
b9d044ef 4464the updater for @uref{http://cran.r-project.org/, CRAN} packages;
bab020d7 4465@item pypi
b9d044ef 4466the updater for @uref{https://pypi.python.org, PyPI} packages.
bcb571cb
LC
4467@end table
4468
4469For instance, the following commands only checks for updates of Emacs
d882c235 4470packages hosted at @code{elpa.gnu.org} and updates of CRAN packages:
bcb571cb
LC
4471
4472@example
7191adc5 4473$ guix refresh --type=elpa,cran
d882c235 4474gnu/packages/statistics.scm:819:13: r-testthat would be upgraded from 0.10.0 to 0.11.0
bcb571cb
LC
4475gnu/packages/emacs.scm:856:13: emacs-auctex would be upgraded from 11.88.6 to 11.88.9
4476@end example
4477
37166310
LC
4478@end table
4479
4480In addition, @command{guix refresh} can be passed one or more package
4481names, as in this example:
4482
4483@example
38e16b49 4484$ ./pre-inst-env guix refresh -u emacs idutils gcc-4.8.4
37166310
LC
4485@end example
4486
4487@noindent
4488The command above specifically updates the @code{emacs} and
4489@code{idutils} packages. The @code{--select} option would have no
4490effect in this case.
4491
7d193ec3
EB
4492When considering whether to upgrade a package, it is sometimes
4493convenient to know which packages would be affected by the upgrade and
4494should be checked for compatibility. For this the following option may
4495be used when passing @command{guix refresh} one or more package names:
4496
4497@table @code
4498
6ffa706b
AK
4499@item --list-updaters
4500@itemx -L
4501List available updaters and exit (see @option{--type} above.)
4502
7d193ec3
EB
4503@item --list-dependent
4504@itemx -l
4505List top-level dependent packages that would need to be rebuilt as a
4506result of upgrading one or more packages.
4507
4508@end table
4509
4510Be aware that the @code{--list-dependent} option only
4511@emph{approximates} the rebuilds that would be required as a result of
4512an upgrade. More rebuilds might be required under some circumstances.
4513
4514@example
7779ab61
LC
4515$ guix refresh --list-dependent flex
4516Building the following 120 packages would ensure 213 dependent packages are rebuilt:
4517hop-2.4.0 geiser-0.4 notmuch-0.18 mu-0.9.9.5 cflow-1.4 idutils-4.6 @dots{}
7d193ec3
EB
4518@end example
4519
4520The command above lists a set of packages that could be built to check
4521for compatibility with an upgraded @code{flex} package.
4522
f9230085
LC
4523The following options can be used to customize GnuPG operation:
4524
4525@table @code
4526
f9230085
LC
4527@item --gpg=@var{command}
4528Use @var{command} as the GnuPG 2.x command. @var{command} is searched
4529for in @code{$PATH}.
4530
2bc53ba9
LC
4531@item --key-download=@var{policy}
4532Handle missing OpenPGP keys according to @var{policy}, which may be one
4533of:
4534
4535@table @code
4536@item always
4537Always download missing OpenPGP keys from the key server, and add them
4538to the user's GnuPG keyring.
4539
4540@item never
4541Never try to download missing OpenPGP keys. Instead just bail out.
4542
4543@item interactive
4544When a package signed with an unknown OpenPGP key is encountered, ask
4545the user whether to download it or not. This is the default behavior.
4546@end table
4547
4548@item --key-server=@var{host}
4549Use @var{host} as the OpenPGP key server when importing a public key.
4550
f9230085
LC
4551@end table
4552
b4f5e0e8
CR
4553@node Invoking guix lint
4554@section Invoking @command{guix lint}
4555The @command{guix lint} is meant to help package developers avoid common
873c4085
LC
4556errors and use a consistent style. It runs a number of checks on a
4557given set of packages in order to find common mistakes in their
4558definitions. Available @dfn{checkers} include (see
4559@code{--list-checkers} for a complete list):
4560
4561@table @code
4562@item synopsis
4563@itemx description
4564Validate certain typographical and stylistic rules about package
4565descriptions and synopses.
4566
4567@item inputs-should-be-native
4568Identify inputs that should most likely be native inputs.
4569
4570@item source
4571@itemx home-page
50f5c46d 4572@itemx source-file-name
873c4085 4573Probe @code{home-page} and @code{source} URLs and report those that are
50f5c46d
EB
4574invalid. Check that the source file name is meaningful, e.g. is not
4575just a version number or ``git-checkout'', and should not have a
4576@code{file-name} declared (@pxref{origin Reference}).
40a7d4e5 4577
5432734b
LC
4578@item cve
4579Report known vulnerabilities found in the Common Vulnerabilities and
4580Exposures (CVE) database
4581@uref{https://nvd.nist.gov/download.cfm#CVE_FEED, published by the US
4582NIST}.
4583
40a7d4e5
LC
4584@item formatting
4585Warn about obvious source code formatting issues: trailing white space,
4586use of tabulations, etc.
873c4085 4587@end table
b4f5e0e8
CR
4588
4589The general syntax is:
4590
4591@example
4592guix lint @var{options} @var{package}@dots{}
4593@end example
4594
4595If no package is given on the command line, then all packages are checked.
4596The @var{options} may be zero or more of the following:
4597
4598@table @code
4599
dd7c013d
CR
4600@item --checkers
4601@itemx -c
4602Only enable the checkers specified in a comma-separated list using the
4603names returned by @code{--list-checkers}.
4604
b4f5e0e8
CR
4605@item --list-checkers
4606@itemx -l
4607List and describe all the available checkers that will be run on packages
4608and exit.
4609
4610@end table
37166310 4611
fcc58db6
LC
4612@node Invoking guix size
4613@section Invoking @command{guix size}
4614
4615The @command{guix size} command helps package developers profile the
4616disk usage of packages. It is easy to overlook the impact of an
4617additional dependency added to a package, or the impact of using a
4618single output for a package that could easily be split (@pxref{Packages
4619with Multiple Outputs}). These are the typical issues that
4620@command{guix size} can highlight.
4621
4622The command can be passed a package specification such as @code{gcc-4.8}
4623or @code{guile:debug}, or a file name in the store. Consider this
4624example:
4625
4626@example
4627$ guix size coreutils
4628store item total self
4629/gnu/store/@dots{}-coreutils-8.23 70.0 13.9 19.8%
4630/gnu/store/@dots{}-gmp-6.0.0a 55.3 2.5 3.6%
4631/gnu/store/@dots{}-acl-2.2.52 53.7 0.5 0.7%
4632/gnu/store/@dots{}-attr-2.4.46 53.2 0.3 0.5%
4633/gnu/store/@dots{}-gcc-4.8.4-lib 52.9 15.7 22.4%
4634/gnu/store/@dots{}-glibc-2.21 37.2 37.2 53.1%
4635@end example
4636
4637@cindex closure
4638The store items listed here constitute the @dfn{transitive closure} of
4639Coreutils---i.e., Coreutils and all its dependencies, recursively---as
4640would be returned by:
4641
4642@example
4643$ guix gc -R /gnu/store/@dots{}-coreutils-8.23
4644@end example
4645
4646Here the output shows 3 columns next to store items. The first column,
4647labeled ``total'', shows the size in mebibytes (MiB) of the closure of
4648the store item---that is, its own size plus the size of all its
4649dependencies. The next column, labeled ``self'', shows the size of the
4650item itself. The last column shows the ratio of the item's size to the
4651space occupied by all the items listed here.
4652
4653In this example, we see that the closure of Coreutils weighs in at
465470@tie{}MiB, half of which is taken by libc. (That libc represents a
4655large fraction of the closure is not a problem @i{per se} because it is
4656always available on the system anyway.)
4657
4658When the package passed to @command{guix size} is available in the
4659store, @command{guix size} queries the daemon to determine its
4660dependencies, and measures its size in the store, similar to @command{du
4661-ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
4662Coreutils}).
4663
4664When the given package is @emph{not} in the store, @command{guix size}
4665reports information based on information about the available substitutes
4666(@pxref{Substitutes}). This allows it to profile disk usage of store
4667items that are not even on disk, only available remotely.
4668
a8f996c6 4669The available options are:
fcc58db6
LC
4670
4671@table @option
4672
d490d06e
LC
4673@item --substitute-urls=@var{urls}
4674Use substitute information from @var{urls}.
4675@xref{client-substitute-urls, the same option for @code{guix build}}.
4676
a8f996c6
LC
4677@item --map-file=@var{file}
4678Write to @var{file} a graphical map of disk usage as a PNG file.
4679
4680For the example above, the map looks like this:
4681
4682@image{images/coreutils-size-map,5in,, map of Coreutils disk usage
4683produced by @command{guix size}}
4684
4685This option requires that
4686@uref{http://wingolog.org/software/guile-charting/, Guile-Charting} be
4687installed and visible in Guile's module search path. When that is not
4688the case, @command{guix size} fails as it tries to load it.
4689
fcc58db6
LC
4690@item --system=@var{system}
4691@itemx -s @var{system}
4692Consider packages for @var{system}---e.g., @code{x86_64-linux}.
4693
4694@end table
4695
88856916
LC
4696@node Invoking guix graph
4697@section Invoking @command{guix graph}
4698
4699@cindex DAG
4700Packages and their dependencies form a @dfn{graph}, specifically a
4701directed acyclic graph (DAG). It can quickly become difficult to have a
4702mental model of the package DAG, so the @command{guix graph} command is
4703here to provide a visual representation of the DAG. @command{guix
4704graph} emits a DAG representation in the input format of
4705@uref{http://www.graphviz.org/, Graphviz}, so its output can be passed
4706directly to Graphviz's @command{dot} command, for instance. The general
4707syntax is:
4708
4709@example
4710guix graph @var{options} @var{package}@dots{}
4711@end example
4712
4713For example, the following command generates a PDF file representing the
4714package DAG for the GNU@tie{}Core Utilities, showing its build-time
4715dependencies:
4716
4717@example
4718guix graph coreutils | dot -Tpdf > dag.pdf
4719@end example
4720
4721The output looks like this:
4722
4723@image{images/coreutils-graph,2in,,Dependency graph of the GNU Coreutils}
4724
4725Nice little graph, no?
4726
4727But there's more than one graph! The one above is concise: it's the
4728graph of package objects, omitting implicit inputs such as GCC, libc,
4729grep, etc. It's often useful to have such a concise graph, but
4730sometimes you want to see more details. @command{guix graph} supports
4731several types of graphs, allowing you to choose the level of details:
4732
4733@table @code
4734@item package
4735This is the default type, the one we used above. It shows the DAG of
4736package objects, excluding implicit dependencies. It is concise, but
4737filters out many details.
4738
4739@item bag-emerged
4740This is the package DAG, @emph{including} implicit inputs.
4741
4742For instance, the following command:
4743
4744@example
4745guix graph --type=bag-emerged coreutils | dot -Tpdf > dag.pdf
4746@end example
4747
4748... yields this bigger graph:
4749
4750@image{images/coreutils-bag-graph,,5in,Detailed dependency graph of the GNU Coreutils}
4751
4752At the bottom of the graph, we see all the implicit inputs of
4753@var{gnu-build-system} (@pxref{Build Systems, @code{gnu-build-system}}).
4754
4755Now, note that the dependencies of those implicit inputs---that is, the
4756@dfn{bootstrap dependencies} (@pxref{Bootstrapping})---are not shown
4757here, for conciseness.
4758
4759@item bag
4760Similar to @code{bag-emerged}, but this time including all the bootstrap
4761dependencies.
4762
38b92daa
LC
4763@item bag-with-origins
4764Similar to @code{bag}, but also showing origins and their dependencies.
4765
88856916
LC
4766@item derivations
4767This is the most detailed representation: It shows the DAG of
4768derivations (@pxref{Derivations}) and plain store items. Compared to
4769the above representation, many additional nodes are visible, including
4770builds scripts, patches, Guile modules, etc.
4771
4772@end table
4773
4774All the above types correspond to @emph{build-time dependencies}. The
4775following graph type represents the @emph{run-time dependencies}:
4776
4777@table @code
4778@item references
4779This is the graph of @dfn{references} of a package output, as returned
4780by @command{guix gc --references} (@pxref{Invoking guix gc}).
4781
4782If the given package output is not available in the store, @command{guix
4783graph} attempts to obtain dependency information from substitutes.
4784@end table
4785
4786The available options are the following:
4787
4788@table @option
4789@item --type=@var{type}
4790@itemx -t @var{type}
4791Produce a graph output of @var{type}, where @var{type} must be one of
4792the values listed above.
4793
4794@item --list-types
4795List the supported graph types.
4c8f997a
LC
4796
4797@item --expression=@var{expr}
4798@itemx -e @var{expr}
4799Consider the package @var{expr} evaluates to.
4800
4801This is useful to precisely refer to a package, as in this example:
4802
4803@example
4804guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
4805@end example
88856916
LC
4806@end table
4807
4808
372c4bbc
DT
4809@node Invoking guix environment
4810@section Invoking @command{guix environment}
4811
f5fd4fd2 4812@cindex reproducible build environments
fe36d84e 4813@cindex development environments
372c4bbc
DT
4814The purpose of @command{guix environment} is to assist hackers in
4815creating reproducible development environments without polluting their
4816package profile. The @command{guix environment} tool takes one or more
4817packages, builds all of the necessary inputs, and creates a shell
4818environment to use them.
4819
4820The general syntax is:
4821
4822@example
4823guix environment @var{options} @var{package}@dots{}
4824@end example
4825
fe36d84e
LC
4826The following example spawns a new shell set up for the development of
4827GNU@tie{}Guile:
372c4bbc
DT
4828
4829@example
4830guix environment guile
4831@end example
4832
4833If the specified packages are not built yet, @command{guix environment}
4834automatically builds them. The new shell's environment is an augmented
4835version of the environment that @command{guix environment} was run in.
4836It contains the necessary search paths for building the given package
4837added to the existing environment variables. To create a ``pure''
4838environment in which the original environment variables have been unset,
50500f7c
LC
4839use the @code{--pure} option@footnote{Users sometimes wrongfully augment
4840environment variables such as @code{PATH} in their @file{~/.bashrc}
4841file. As a consequence, when @code{guix environment} launches it, Bash
4842may read @file{~/.bashrc}, thereby introducing ``impurities'' in these
4843environment variables. It is an error to define such environment
4844variables in @file{.bashrc}; instead, they should be defined in
4845@file{.bash_profile}, which is sourced only by log-in shells.
4846@xref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}, for
4847details on Bash start-up files.}.
372c4bbc 4848
28de8d25
LC
4849@vindex GUIX_ENVIRONMENT
4850@command{guix environment} defines the @code{GUIX_ENVIRONMENT}
4851variable in the shell it spaws. This allows users to, say, define a
4852specific prompt for development environments in their @file{.bashrc}
4853(@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}):
4854
4855@example
4856if [ -n "$GUIX_ENVIRONMENT" ]
4857then
4858 export PS1="\u@@\h \w [dev]\$ "
4859fi
4860@end example
4861
372c4bbc
DT
4862Additionally, more than one package may be specified, in which case the
4863union of the inputs for the given packages are used. For example, the
4864command below spawns a shell where all of the dependencies of both Guile
4865and Emacs are available:
4866
4867@example
4868guix environment guile emacs
4869@end example
4870
1de2fe95
DT
4871Sometimes an interactive shell session is not desired. An arbitrary
4872command may be invoked by placing the @code{--} token to separate the
4873command from the rest of the arguments:
372c4bbc
DT
4874
4875@example
1de2fe95 4876guix environment guile -- make -j4
372c4bbc
DT
4877@end example
4878
fe36d84e
LC
4879In other situations, it is more convenient to specify the list of
4880packages needed in the environment. For example, the following command
4881runs @command{python} from an environment containing Python@tie{}2.7 and
4882NumPy:
4883
4884@example
1de2fe95 4885guix environment --ad-hoc python2-numpy python-2.7 -- python
fe36d84e
LC
4886@end example
4887
cc90fbbf
DT
4888Furthermore, one might want the dependencies of a package and also some
4889additional packages that are not build-time or runtime dependencies, but
4890are useful when developing nonetheless. Because of this, the
4891@code{--ad-hoc} flag is positional. Packages appearing before
4892@code{--ad-hoc} are interpreted as packages whose dependencies will be
4893added to the environment. Packages appearing after are interpreted as
4894packages that will be added to the environment directly. For example,
4895the following command creates a Guix development environment that
4896additionally includes Git and strace:
4897
4898@example
4899guix environment guix --ad-hoc git strace
4900@end example
4901
f535dcbe
DT
4902Sometimes it is desirable to isolate the environment as much as
4903possible, for maximal purity and reproducibility. In particular, when
4904using Guix on a host distro that is not GuixSD, it is desirable to
4905prevent access to @file{/usr/bin} and other system-wide resources from
4906the development environment. For example, the following command spawns
4907a Guile REPL in a ``container'' where only the store and the current
4908working directory are mounted:
4909
4910@example
4911guix environment --ad-hoc --container guile -- guile
4912@end example
4913
0f252e26 4914@quotation Note
cfd35b4e 4915The @code{--container} option requires Linux-libre 3.19 or newer.
0f252e26
DT
4916@end quotation
4917
fe36d84e 4918The available options are summarized below.
372c4bbc
DT
4919
4920@table @code
4921@item --expression=@var{expr}
4922@itemx -e @var{expr}
c9c282ce
DT
4923Create an environment for the package or list of packages that
4924@var{expr} evaluates to.
372c4bbc 4925
fe36d84e
LC
4926For example, running:
4927
4928@example
4929guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
4930@end example
4931
4932starts a shell with the environment for this specific variant of the
4933PETSc package.
4934
c9c282ce
DT
4935Running:
4936
4937@example
5c2b2f00 4938guix environment --ad-hoc -e '(@@ (gnu) %base-packages)'
c9c282ce
DT
4939@end example
4940
4941starts a shell with all the GuixSD base packages available.
4942
372c4bbc
DT
4943@item --load=@var{file}
4944@itemx -l @var{file}
c9c282ce
DT
4945Create an environment for the package or list of packages that the code
4946within @var{file} evaluates to.
372c4bbc 4947
fe36d84e
LC
4948As an example, @var{file} might contain a definition like this
4949(@pxref{Defining Packages}):
4950
4951@example
4952@verbatiminclude environment-gdb.scm
4953@end example
4954
a54bd6d7
DT
4955@item --ad-hoc
4956Include all specified packages in the resulting environment, as if an
4957@i{ad hoc} package were defined with them as inputs. This option is
4958useful for quickly creating an environment without having to write a
4959package expression to contain the desired inputs.
4960
4961For instance, the command:
4962
4963@example
1de2fe95 4964guix environment --ad-hoc guile guile-sdl -- guile
a54bd6d7
DT
4965@end example
4966
4967runs @command{guile} in an environment where Guile and Guile-SDL are
4968available.
4969
417c39f1
LC
4970Note that this example implicitly asks for the default output of
4971@code{guile} and @code{guile-sdl} but it is possible to ask for a
4972specific output---e.g., @code{glib:bin} asks for the @code{bin} output
4973of @code{glib} (@pxref{Packages with Multiple Outputs}).
4974
cc90fbbf
DT
4975This option may be composed with the default behavior of @command{guix
4976environment}. Packages appearing before @code{--ad-hoc} are interpreted
4977as packages whose dependencies will be added to the environment, the
4978default behavior. Packages appearing after are interpreted as packages
4979that will be added to the environment directly.
4980
372c4bbc
DT
4981@item --pure
4982Unset existing environment variables when building the new environment.
4983This has the effect of creating an environment in which search paths
4984only contain package inputs.
4985
4986@item --search-paths
4987Display the environment variable definitions that make up the
4988environment.
ce367ef3
LC
4989
4990@item --system=@var{system}
4991@itemx -s @var{system}
4992Attempt to build for @var{system}---e.g., @code{i686-linux}.
f535dcbe
DT
4993
4994@item --container
4995@itemx -C
4996@cindex container
4997Run @var{command} within an isolated container. The current working
56b6befb 4998directory outside the container is mapped inside the
f535dcbe
DT
4999container. Additionally, the spawned process runs as the current user
5000outside the container, but has root privileges in the context of the
5001container.
5002
5003@item --network
5004@itemx -N
5005For containers, share the network namespace with the host system.
5006Containers created without this flag only have access to the loopback
5007device.
5008
5009@item --expose=@var{source}[=@var{target}]
5010For containers, expose the file system @var{source} from the host system
5011as the read-only file system @var{target} within the container. If
5012@var{target} is not specified, @var{source} is used as the target mount
5013point in the container.
5014
5015The example below spawns a Guile REPL in a container in which the user's
5016home directory is accessible read-only via the @file{/exchange}
5017directory:
5018
5019@example
5020guix environment --container --expose=$HOME=/exchange guile -- guile
5021@end example
5022
5c2b2f00 5023@item --share=@var{source}[=@var{target}]
f535dcbe
DT
5024For containers, share the file system @var{source} from the host system
5025as the writable file system @var{target} within the container. If
5026@var{target} is not specified, @var{source} is used as the target mount
5027point in the container.
5028
5029The example below spawns a Guile REPL in a container in which the user's
5030home directory is accessible for both reading and writing via the
5031@file{/exchange} directory:
5032
5033@example
5034guix environment --container --share=$HOME=/exchange guile -- guile
5035@end example
372c4bbc
DT
5036@end table
5037
5038It also supports all of the common build options that @command{guix
5039build} supports (@pxref{Invoking guix build, common build options}).
5040
aff8ce7c
DT
5041@node Invoking guix publish
5042@section Invoking @command{guix publish}
5043
5044The purpose of @command{guix publish} is to enable users to easily share
8ce229fc
LC
5045their store with others, which can then use it as a substitute server
5046(@pxref{Substitutes}).
5047
5048When @command{guix publish} runs, it spawns an HTTP server which allows
5049anyone with network access to obtain substitutes from it. This means
5050that any machine running Guix can also act as if it were a build farm,
5051since the HTTP interface is compatible with Hydra, the software behind
5052the @code{hydra.gnu.org} build farm.
aff8ce7c
DT
5053
5054For security, each substitute is signed, allowing recipients to check
5055their authenticity and integrity (@pxref{Substitutes}). Because
5056@command{guix publish} uses the system's signing key, which is only
5463fe51
LC
5057readable by the system administrator, it must be started as root; the
5058@code{--user} option makes it drop root privileges early on.
aff8ce7c 5059
b18812b6
LC
5060The signing key pair must be generated before @command{guix publish} is
5061launched, using @command{guix archive --generate-key} (@pxref{Invoking
5062guix archive}).
5063
aff8ce7c
DT
5064The general syntax is:
5065
5066@example
5067guix publish @var{options}@dots{}
5068@end example
5069
5070Running @command{guix publish} without any additional arguments will
5071spawn an HTTP server on port 8080:
5072
5073@example
5074guix publish
5075@end example
5076
5077Once a publishing server has been authorized (@pxref{Invoking guix
5078archive}), the daemon may download substitutes from it:
5079
5080@example
5081guix-daemon --substitute-urls=http://example.org:8080
5082@end example
5083
5084The following options are available:
5085
5086@table @code
5087@item --port=@var{port}
5088@itemx -p @var{port}
5089Listen for HTTP requests on @var{port}.
5090
9e2292ef
LC
5091@item --listen=@var{host}
5092Listen on the network interface for @var{host}. The default is to
5093accept connections from any interface.
5094
5463fe51
LC
5095@item --user=@var{user}
5096@itemx -u @var{user}
5097Change privileges to @var{user} as soon as possible---i.e., once the
5098server socket is open and the signing key has been read.
5099
aff8ce7c
DT
5100@item --repl[=@var{port}]
5101@itemx -r [@var{port}]
5102Spawn a Guile REPL server (@pxref{REPL Servers,,, guile, GNU Guile
8ce229fc
LC
5103Reference Manual}) on @var{port} (37146 by default). This is used
5104primarily for debugging a running @command{guix publish} server.
aff8ce7c
DT
5105@end table
5106
1c52181f
LC
5107Enabling @command{guix publish} on a GuixSD system is a one-liner: just
5108add a call to @code{guix-publish-service} in the @code{services} field
5109of the @code{operating-system} declaration (@pxref{guix-publish-service,
5110@code{guix-publish-service}}).
5111
d23c20f1
LC
5112
5113@node Invoking guix challenge
5114@section Invoking @command{guix challenge}
5115
5116@cindex reproducible builds
5117@cindex verifiable builds
5118
5119Do the binaries provided by this server really correspond to the source
5120code it claims to build? Is this package's build process deterministic?
5121These are the questions the @command{guix challenge} command attempts to
5122answer.
5123
5124The former is obviously an important question: Before using a substitute
5125server (@pxref{Substitutes}), you'd rather @emph{verify} that it
5126provides the right binaries, and thus @emph{challenge} it. The latter
5127is what enables the former: If package builds are deterministic, then
5128independent builds of the package should yield the exact same result,
5129bit for bit; if a server provides a binary different from the one
5130obtained locally, it may be either corrupt or malicious.
5131
5132We know that the hash that shows up in @file{/gnu/store} file names is
5133the hash of all the inputs of the process that built the file or
5134directory---compilers, libraries, build scripts,
5135etc. (@pxref{Introduction}). Assuming deterministic build processes,
5136one store file name should map to exactly one build output.
5137@command{guix challenge} checks whether there is, indeed, a single
5138mapping by comparing the build outputs of several independent builds of
5139any given store item.
5140
5141The command's output looks like this:
5142
5143@smallexample
5144$ guix challenge --substitute-urls="http://hydra.gnu.org http://guix.example.org"
5145updating list of substitutes from 'http://hydra.gnu.org'... 100.0%
5146updating list of substitutes from 'http://guix.example.org'... 100.0%
5147/gnu/store/@dots{}-openssl-1.0.2d contents differ:
5148 local hash: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
5149 http://hydra.gnu.org/nar/@dots{}-openssl-1.0.2d: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
5150 http://guix.example.org/nar/@dots{}-openssl-1.0.2d: 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim
5151/gnu/store/@dots{}-git-2.5.0 contents differ:
5152 local hash: 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha
5153 http://hydra.gnu.org/nar/@dots{}-git-2.5.0: 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f
5154 http://guix.example.org/nar/@dots{}-git-2.5.0: 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73
5155/gnu/store/@dots{}-pius-2.1.1 contents differ:
5156 local hash: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
5157 http://hydra.gnu.org/nar/@dots{}-pius-2.1.1: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
5158 http://guix.example.org/nar/@dots{}-pius-2.1.1: 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs
5159@end smallexample
5160
5161@noindent
5162In this example, @command{guix challenge} first scans the store to
5163determine the set of locally-built derivations---as opposed to store
5164items that were downloaded from a substitute server---and then queries
5165all the substitute servers. It then reports those store items for which
5166the servers obtained a result different from the local build.
5167
5168@cindex non-determinism, in package builds
5169As an example, @code{guix.example.org} always gets a different answer.
5170Conversely, @code{hydra.gnu.org} agrees with local builds, except in the
5171case of Git. This might indicate that the build process of Git is
5172non-deterministic, meaning that its output varies as a function of
5173various things that Guix does not fully control, in spite of building
5174packages in isolated environments (@pxref{Features}). Most common
5175sources of non-determinism include the addition of timestamps in build
5176results, the inclusion of random numbers, and directory listings sorted
5177by inode number. See @uref{http://reproducible.debian.net/howto/}, for
5178more information.
5179
5180To find out what's wrong with this Git binary, we can do something along
5181these lines (@pxref{Invoking guix archive}):
5182
5183@example
5184$ wget -q -O - http://hydra.gnu.org/nar/@dots{}-git-2.5.0 \
5185 | guix archive -x /tmp/git
043f4698 5186$ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git
d23c20f1
LC
5187@end example
5188
5189This command shows the difference between the files resulting from the
5190local build, and the files resulting from the build on
5191@code{hydra.gnu.org} (@pxref{Overview, Comparing and Merging Files,,
5192diffutils, Comparing and Merging Files}). The @command{diff} command
5193works great for text files. When binary files differ, a better option
5194is @uref{http://diffoscope.org/, Diffoscope}, a tool that helps
5195visualize differences for all kinds of files.
5196
5197Once you've done that work, you can tell whether the differences are due
5198to a non-deterministic build process or to a malicious server. We try
5199hard to remove sources of non-determinism in packages to make it easier
5200to verify substitutes, but of course, this is a process, one that
5201involves not just Guix but a large part of the free software community.
5202In the meantime, @command{guix challenge} is one tool to help address
5203the problem.
5204
5205If you are writing packages for Guix, you are encouraged to check
5206whether @code{hydra.gnu.org} and other substitute servers obtain the
5207same build result as you did with:
5208
5209@example
5210$ guix challenge @var{package}
5211@end example
5212
5213@noindent
5214... where @var{package} is a package specification such as
5215@code{guile-2.0} or @code{glibc:debug}.
5216
5217The general syntax is:
5218
5219@example
5220guix challenge @var{options} [@var{packages}@dots{}]
5221@end example
5222
5223The one option that matters is:
5224
5225@table @code
5226
5227@item --substitute-urls=@var{urls}
5228Consider @var{urls} the whitespace-separated list of substitute source
5229URLs to compare to.
5230
5231@end table
5232
5233
32efa254
DT
5234@node Invoking guix container
5235@section Invoking @command{guix container}
5236@cindex container
5237
5238@quotation Note
5239As of version @value{VERSION}, this tool is experimental. The interface
5240is subject to radical change in the future.
5241@end quotation
5242
5243The purpose of @command{guix container} is to manipulate processes
5244running within an isolated environment, commonly known as a
46c36586 5245``container'', typically created by the @command{guix environment}
32efa254
DT
5246(@pxref{Invoking guix environment}) and @command{guix system container}
5247(@pxref{Invoking guix system}) commands.
5248
5249The general syntax is:
5250
5251@example
5252guix container @var{action} @var{options}@dots{}
5253@end example
5254
5255@var{action} specifies the operation to perform with a container, and
5256@var{options} specifies the context-specific arguments for the action.
5257
5258The following actions are available:
5259
5260@table @code
5261@item exec
5262Execute a command within the context of a running container.
5263
5264The syntax is:
5265
5266@example
5267guix container exec @var{pid} @var{program} @var{arguments}@dots{}
5268@end example
5269
5270@var{pid} specifies the process ID of the running container.
5271@var{program} specifies an executable file name within the container's
5272root file system. @var{arguments} are the additional options that will
5273be passed to @var{program}.
5274
5275The following command launches an interactive login shell inside a
5276GuixSD container, started by @command{guix system container}, and whose
5277process ID is 9001:
5278
5279@example
5280guix container exec 9001 /run/current-system/profile/bin/bash --login
5281@end example
5282
5283Note that the @var{pid} cannot be the parent process of a container. It
5284must be the container's PID 1 or one of its child processes.
5285
5286@end table
5287
a1ba8475
LC
5288@c *********************************************************************
5289@node GNU Distribution
5290@chapter GNU Distribution
5291
3ca2731c 5292@cindex Guix System Distribution
4705641f 5293@cindex GuixSD
3ca2731c
LC
5294Guix comes with a distribution of the GNU system consisting entirely of
5295free software@footnote{The term ``free'' here refers to the
a1ba8475 5296@url{http://www.gnu.org/philosophy/free-sw.html,freedom provided to
3ca2731c 5297users of that software}.}. The
35ed9306
LC
5298distribution can be installed on its own (@pxref{System Installation}),
5299but it is also possible to install Guix as a package manager on top of
5300an installed GNU/Linux system (@pxref{Installation}). To distinguish
3ca2731c 5301between the two, we refer to the standalone distribution as the Guix
4705641f 5302System Distribution, or GuixSD.
35ed9306
LC
5303
5304The distribution provides core GNU packages such as GNU libc, GCC, and
5305Binutils, as well as many GNU and non-GNU applications. The complete
5306list of available packages can be browsed
093ae1be 5307@url{http://www.gnu.org/software/guix/packages,on-line} or by
d03bb653 5308running @command{guix package} (@pxref{Invoking guix package}):
a1ba8475
LC
5309
5310@example
e49951eb 5311guix package --list-available
a1ba8475
LC
5312@end example
5313
35ed9306 5314Our goal has been to provide a practical 100% free software distribution of
401c53c4
LC
5315Linux-based and other variants of GNU, with a focus on the promotion and
5316tight integration of GNU components, and an emphasis on programs and
5317tools that help users exert that freedom.
5318
3ca2731c 5319Packages are currently available on the following platforms:
c320011d
LC
5320
5321@table @code
5322
5323@item x86_64-linux
5324Intel/AMD @code{x86_64} architecture, Linux-Libre kernel;
5325
5326@item i686-linux
5327Intel 32-bit architecture (IA32), Linux-Libre kernel;
5328
aa1e1947 5329@item armhf-linux
aa725117 5330ARMv7-A architecture with hard float, Thumb-2 and NEON,
aa1e1947
MW
5331using the EABI hard-float ABI, and Linux-Libre kernel.
5332
c320011d
LC
5333@item mips64el-linux
5334little-endian 64-bit MIPS processors, specifically the Loongson series,
5335n32 application binary interface (ABI), and Linux-Libre kernel.
5336
5337@end table
5338
4705641f 5339GuixSD itself is currently only available on @code{i686} and @code{x86_64}.
3ca2731c 5340
c320011d
LC
5341@noindent
5342For information on porting to other architectures or kernels,
5343@xref{Porting}.
5344
401c53c4 5345@menu
5af6de3e 5346* System Installation:: Installing the whole operating system.
35ed9306 5347* System Configuration:: Configuring the operating system.
91ef73d4 5348* Installing Debugging Files:: Feeding the debugger.
05962f29 5349* Security Updates:: Deploying security fixes quickly.
401c53c4 5350* Package Modules:: Packages from the programmer's viewpoint.
da7cabd4 5351* Packaging Guidelines:: Growing the distribution.
401c53c4 5352* Bootstrapping:: GNU/Linux built from scratch.
8b315a6d 5353* Porting:: Targeting another platform or kernel.
401c53c4
LC
5354@end menu
5355
5356Building this distribution is a cooperative effort, and you are invited
081145cf 5357to join! @xref{Contributing}, for information about how you can help.
401c53c4 5358
5af6de3e
LC
5359@node System Installation
5360@section System Installation
5361
3ca2731c
LC
5362@cindex Guix System Distribution
5363This section explains how to install the Guix System Distribution
5364on a machine. The Guix package manager can
35ed9306
LC
5365also be installed on top of a running GNU/Linux system,
5366@pxref{Installation}.
5af6de3e
LC
5367
5368@ifinfo
5369@c This paragraph is for people reading this from tty2 of the
5370@c installation image.
5371You're reading this documentation with an Info reader. For details on
5372how to use it, hit the @key{RET} key (``return'' or ``enter'') on the
6621cdb6 5373link that follows: @pxref{Help,,, info, Info: An Introduction}. Hit
5af6de3e
LC
5374@kbd{l} afterwards to come back here.
5375@end ifinfo
5376
8aaaae38
LC
5377@subsection Limitations
5378
4705641f 5379As of version @value{VERSION}, the Guix System Distribution (GuixSD) is
3ca2731c 5380not production-ready. It may contain bugs and lack important
8aaaae38
LC
5381features. Thus, if you are looking for a stable production system that
5382respects your freedom as a computer user, a good solution at this point
5383is to consider @url{http://www.gnu.org/distros/free-distros.html, one of
5384more established GNU/Linux distributions}. We hope you can soon switch
4705641f 5385to the GuixSD without fear, of course. In the meantime, you can
8aaaae38
LC
5386also keep using your distribution and try out the package manager on top
5387of it (@pxref{Installation}).
5388
5389Before you proceed with the installation, be aware of the following
5390noteworthy limitations applicable to version @value{VERSION}:
5391
5392@itemize
5393@item
5394The installation process does not include a graphical user interface and
5395requires familiarity with GNU/Linux (see the following subsections to
5396get a feel of what that means.)
5397
5398@item
093ae1be
LC
5399The system does not yet provide full GNOME and KDE desktops. Xfce and
5400Enlightenment are available though, if graphical desktop environments
5401are your thing, as well as a number of X11 window managers.
8aaaae38
LC
5402
5403@item
dbcb0ab1 5404Support for the Logical Volume Manager (LVM) is missing.
8aaaae38
LC
5405
5406@item
5407Few system services are currently supported out-of-the-box
5408(@pxref{Services}).
5409
5410@item
093ae1be 5411More than 2,000 packages are available, but you may
8aaaae38
LC
5412occasionally find that a useful package is missing.
5413@end itemize
5414
5415You've been warned. But more than a disclaimer, this is an invitation
5416to report issues (and success stories!), and join us in improving it.
5417@xref{Contributing}, for more info.
5af6de3e
LC
5418
5419@subsection USB Stick Installation
5420
5421An installation image for USB sticks can be downloaded from
4705641f 5422@indicateurl{ftp://alpha.gnu.org/gnu/guix/guixsd-usb-install-@value{VERSION}.@var{system}.xz},
5af6de3e
LC
5423where @var{system} is one of:
5424
5425@table @code
5426@item x86_64-linux
5427for a GNU/Linux system on Intel/AMD-compatible 64-bit CPUs;
5428
5429@item i686-linux
5430for a 32-bit GNU/Linux system on Intel-compatible CPUs.
5431@end table
5432
5433This image contains a single partition with the tools necessary for an
5434installation. It is meant to be copied @emph{as is} to a large-enough
5435USB stick.
5436
5437To copy the image to a USB stick, follow these steps:
5438
5439@enumerate
5440@item
5441Decompress the image using the @command{xz} command:
5442
5443@example
4705641f 5444xz -d guixsd-usb-install-@value{VERSION}.@var{system}.xz
5af6de3e
LC
5445@end example
5446
5447@item
5448Insert a USB stick of 1@tie{}GiB or more in your machine, and determine
5449its device name. Assuming that USB stick is known as @file{/dev/sdX},
5450copy the image with:
5451
5452@example
4705641f 5453dd if=guixsd-usb-install-@value{VERSION}.x86_64 of=/dev/sdX
5af6de3e
LC
5454@end example
5455
5456Access to @file{/dev/sdX} usually requires root privileges.
5457@end enumerate
5458
5459Once this is done, you should be able to reboot the system and boot from
5460the USB stick. The latter usually requires you to get in the BIOS' boot
5461menu, where you can choose to boot from the USB stick.
5462
5463@subsection Preparing for Installation
5464
5465Once you have successfully booted the image on the USB stick, you should
5466end up with a root prompt. Several console TTYs are configured and can
5467be used to run commands as root. TTY2 shows this documentation,
5468browsable using the Info reader commands (@pxref{Help,,, info, Info: An
ae7ffa9e
LC
5469Introduction}). The installation system runs the GPM mouse daemon,
5470which allows you to select text with the left mouse button and to paste
5471it with the middle button.
5af6de3e
LC
5472
5473To install the system, you would:
5474
5475@enumerate
5476
5477@item
235cba85
LC
5478Configure the network, by running:
5479
5480@example
5481ifconfig eno1 up && dhclient eno1
5482@end example
5483
5484to get an automatically assigned IP address from the wired
152dd61c 5485network interface controller@footnote{
95c559c1
LC
5486@c http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
5487The name @code{eno1} is for the first on-board Ethernet controller. The
5488interface name for an Ethernet controller that is in the first slot of
5489the first PCI bus, for instance, would be @code{enp1s0}. Use
235cba85 5490@command{ifconfig -a} to list all the available network interfaces.},
95c559c1 5491or using the @command{ifconfig} command.
5af6de3e
LC
5492
5493The system automatically loads drivers for your network interface
5494controllers.
5495
5496Setting up network access is almost always a requirement because the
5497image does not contain all the software and tools that may be needed.
5498
5499@item
316d65be
LC
5500Unless this has already been done, you must partition, and then format
5501the target partition.
5af6de3e 5502
7ab44369
LC
5503Preferably, assign partitions a label so that you can easily and
5504reliably refer to them in @code{file-system} declarations (@pxref{File
5505Systems}). This is typically done using the @code{-L} option of
5506@command{mkfs.ext4} and related commands.
5507
dd816355
LF
5508Be sure that your partition labels match the value of their respective
5509@code{device} fields in your @code{file-system} configuration, if your
5510@code{file-system} configuration sets the value of @code{title} to
5511@code{'label}, as do the example configurations found on the USB
5512installation image under @file{/etc/configuration} (@pxref{Using the
5513Configuration System}).
5514
316d65be
LC
5515@c FIXME: Uncomment this once GRUB fully supports encrypted roots.
5516@c A typical command sequence may be:
5517@c
5518@c @example
5519@c # fdisk /dev/sdX
5520@c @dots{} Create partitions etc.@dots{}
5521@c # cryptsetup luksFormat /dev/sdX1
5522@c # cryptsetup open --type luks /dev/sdX1 my-partition
5523@c # mkfs.ext4 -L my-root /dev/mapper/my-partition
5524@c @end example
6d6e6281 5525
5af6de3e 5526The installation image includes Parted (@pxref{Overview,,, parted, GNU
b419c7f5
LC
5527Parted User Manual}), @command{fdisk}, Cryptsetup/LUKS for disk
5528encryption, and e2fsprogs, the suite of tools to manipulate
5529ext2/ext3/ext4 file systems.
5af6de3e 5530
83a17b62
LC
5531@item
5532Once that is done, mount the target root partition under @file{/mnt}.
5533
5534@item
5535Lastly, run @code{deco start cow-store /mnt}.
5536
5537This will make @file{/gnu/store} copy-on-write, such that packages added
5538to it during the installation phase will be written to the target disk
5539rather than kept in memory.
5540
5af6de3e
LC
5541@end enumerate
5542
5af6de3e
LC
5543
5544@subsection Proceeding with the Installation
5545
5546With the target partitions ready, you now have to edit a file and
5547provide the declaration of the operating system to be installed. To
5548that end, the installation system comes with two text editors: GNU nano
5549(@pxref{Top,,, nano, GNU nano Manual}), and GNU Zile, an Emacs clone.
5550It is better to store that file on the target root file system, say, as
5551@file{/mnt/etc/config.scm}.
5552
dd51caac
LC
5553@xref{Using the Configuration System}, for examples of operating system
5554configurations. These examples are available under
5555@file{/etc/configuration} in the installation image, so you can copy
5556them and use them as a starting point for your own configuration.
5af6de3e 5557
dd51caac
LC
5558Once you are done preparing the configuration file, the new system must
5559be initialized (remember that the target root file system is mounted
5560under @file{/mnt}):
5af6de3e
LC
5561
5562@example
5563guix system init /mnt/etc/config.scm /mnt
5564@end example
5565
5566@noindent
5567This will copy all the necessary files, and install GRUB on
5568@file{/dev/sdX}, unless you pass the @option{--no-grub} option. For
6621cdb6 5569more information, @pxref{Invoking guix system}. This command may trigger
5af6de3e
LC
5570downloads or builds of missing packages, which can take some time.
5571
1bd4e6db
LC
5572Once that command has completed---and hopefully succeeded!---you can run
5573@command{reboot} and boot into the new system. The @code{root} password
5574in the new system is initially empty; other users' passwords need to be
5575initialized by running the @command{passwd} command as @code{root},
5576unless your configuration specifies otherwise
5577(@pxref{user-account-password, user account passwords}).
5578
5579Join us on @code{#guix} on the Freenode IRC network or on
5af6de3e
LC
5580@file{guix-devel@@gnu.org} to share your experience---good or not so
5581good.
5582
5583@subsection Building the Installation Image
5584
5585The installation image described above was built using the @command{guix
5586system} command, specifically:
5587
5588@example
8a225c66 5589guix system disk-image --image-size=850MiB gnu/system/install.scm
5af6de3e
LC
5590@end example
5591
5592@xref{Invoking guix system}, for more information. See
5593@file{gnu/system/install.scm} in the source tree for more information
5594about the installation image.
5595
cf4a9129
LC
5596@node System Configuration
5597@section System Configuration
b208a005 5598
cf4a9129 5599@cindex system configuration
3ca2731c 5600The Guix System Distribution supports a consistent whole-system configuration
cf4a9129
LC
5601mechanism. By that we mean that all aspects of the global system
5602configuration---such as the available system services, timezone and
5603locale settings, user accounts---are declared in a single place. Such
5604a @dfn{system configuration} can be @dfn{instantiated}---i.e., effected.
91ef73d4 5605
cf4a9129
LC
5606One of the advantages of putting all the system configuration under the
5607control of Guix is that it supports transactional system upgrades, and
5608makes it possible to roll-back to a previous system instantiation,
5609should something go wrong with the new one (@pxref{Features}). Another
5610one is that it makes it easy to replicate the exact same configuration
5611across different machines, or at different points in time, without
5612having to resort to additional administration tools layered on top of
5613the system's own tools.
5614@c Yes, we're talking of Puppet, Chef, & co. here. ↑
91ef73d4 5615
cf4a9129
LC
5616This section describes this mechanism. First we focus on the system
5617administrator's viewpoint---explaining how the system is configured and
5618instantiated. Then we show how this mechanism can be extended, for
5619instance to support new system services.
91ef73d4 5620
cf4a9129
LC
5621@menu
5622* Using the Configuration System:: Customizing your GNU system.
7313a52e 5623* operating-system Reference:: Detail of operating-system declarations.
cf4a9129 5624* File Systems:: Configuring file system mounts.
510f9d86 5625* Mapped Devices:: Block device extra processing.
cf4a9129 5626* User Accounts:: Specifying user accounts.
598e19dc 5627* Locales:: Language and cultural convention settings.
cf4a9129 5628* Services:: Specifying system services.
0ae8c15a 5629* Setuid Programs:: Programs running with root privileges.
efb5e833 5630* X.509 Certificates:: Authenticating HTTPS servers.
996ed739 5631* Name Service Switch:: Configuring libc's name service switch.
fd1b1fa2 5632* Initial RAM Disk:: Linux-Libre bootstrapping.
88faf933 5633* GRUB Configuration:: Configuring the boot loader.
cf4a9129
LC
5634* Invoking guix system:: Instantiating a system configuration.
5635* Defining Services:: Adding new service definitions.
5636@end menu
91ef73d4 5637
cf4a9129
LC
5638@node Using the Configuration System
5639@subsection Using the Configuration System
64d76fa6 5640
cf4a9129
LC
5641The operating system is configured by providing an
5642@code{operating-system} declaration in a file that can then be passed to
5643the @command{guix system} command (@pxref{Invoking guix system}). A
5644simple setup, with the default system services, the default Linux-Libre
5645kernel, initial RAM disk, and boot loader looks like this:
91ef73d4 5646
cf4a9129
LC
5647@findex operating-system
5648@lisp
dd51caac 5649@include os-config-bare-bones.texi
cf4a9129 5650@end lisp
401c53c4 5651
cf4a9129
LC
5652This example should be self-describing. Some of the fields defined
5653above, such as @code{host-name} and @code{bootloader}, are mandatory.
5654Others, such as @code{packages} and @code{services}, can be omitted, in
5655which case they get a default value.
e7f34eb0 5656
cf4a9129
LC
5657@vindex %base-packages
5658The @code{packages} field lists
5659packages that will be globally visible on the system, for all user
5660accounts---i.e., in every user's @code{PATH} environment variable---in
5661addition to the per-user profiles (@pxref{Invoking guix package}). The
5662@var{%base-packages} variable provides all the tools one would expect
5663for basic user and administrator tasks---including the GNU Core
5664Utilities, the GNU Networking Utilities, the GNU Zile lightweight text
5665editor, @command{find}, @command{grep}, etc. The example above adds
2e437e29 5666tcpdump to those, taken from the @code{(gnu packages admin)} module
cf4a9129 5667(@pxref{Package Modules}).
e7f34eb0 5668
f6c9fb1b
LC
5669@findex specification->package
5670Referring to packages by variable name, like @var{tcpdump} above, has
5671the advantage of being unambiguous; it also allows typos and such to be
5672diagnosed right away as ``unbound variables''. The downside is that one
5673needs to know which module defines which package, and to augment the
5674@code{use-package-modules} line accordingly. To avoid that, one can use
5675the @code{specification->package} procedure of the @code{(gnu packages)}
5676module, which returns the best package for a given name or name and
5677version:
5678
5679@lisp
5680(use-modules (gnu packages))
5681
5682(operating-system
5683 ;; ...
5684 (packages (append (map specification->package
5685 '("tcpdump" "htop" "gnupg-2.0"))
5686 %base-packages)))
5687@end lisp
5688
cf4a9129
LC
5689@vindex %base-services
5690The @code{services} field lists @dfn{system services} to be made
5691available when the system starts (@pxref{Services}).
5692The @code{operating-system} declaration above specifies that, in
5693addition to the basic services, we want the @command{lshd} secure shell
cd6f6c22
LC
5694daemon listening on port 2222 (@pxref{Networking Services,
5695@code{lsh-service}}). Under the hood,
cf4a9129
LC
5696@code{lsh-service} arranges so that @code{lshd} is started with the
5697right command-line options, possibly with supporting configuration files
cd6f6c22
LC
5698generated as needed (@pxref{Defining Services}).
5699
5700@cindex customization, of services
5701@findex modify-services
5702Occasionally, instead of using the base services as is, you will want to
5703customize them. For instance, to change the configuration of
5704@code{guix-daemon} and Mingetty (the console log-in), you may write the
5705following instead of @var{%base-services}:
5706
5707@lisp
5708(modify-services %base-services
5709 (guix-service-type config =>
5710 (guix-configuration
5711 (inherit config)
5712 (use-substitutes? #f)
5713 (extra-options '("--gc-keep-outputs"))))
5714 (mingetty-service-type config =>
5715 (mingetty-configuration
5716 (inherit config)
5717 (motd (plain-file "motd" "Hi there!")))))
5718@end lisp
5719
5720@noindent
5721The effect here is to change the options passed to @command{guix-daemon}
5722when it is started, as well as the ``message of the day'' that appears
5723when logging in at the console. @xref{Service Reference,
5724@code{modify-services}}, for more on that.
a1ba8475 5725
dd51caac 5726The configuration for a typical ``desktop'' usage, with the X11 display
cd6f6c22 5727server, a desktop environment, network management, power management, and
dd51caac
LC
5728more, would look like this:
5729
5730@lisp
5731@include os-config-desktop.texi
5732@end lisp
5733
5734@xref{Desktop Services}, for the exact list of services provided by
efb5e833
LC
5735@var{%desktop-services}. @xref{X.509 Certificates}, for background
5736information about the @code{nss-certs} package that is used here.
cd6f6c22
LC
5737@xref{operating-system Reference}, for details about all the available
5738@code{operating-system} fields.
dd51caac 5739
cf4a9129
LC
5740Assuming the above snippet is stored in the @file{my-system-config.scm}
5741file, the @command{guix system reconfigure my-system-config.scm} command
5742instantiates that configuration, and makes it the default GRUB boot
65797bff
LC
5743entry (@pxref{Invoking guix system}).
5744
5745The normal way to change the system's configuration is by updating this
5746file and re-running @command{guix system reconfigure}. One should never
5747have to touch files in @command{/etc} or to run commands that modify the
5748system state such as @command{useradd} or @command{grub-install}. In
5749fact, you must avoid that since that would not only void your warranty
5750but also prevent you from rolling back to previous versions of your
5751system, should you ever need to.
5752
5753@cindex roll-back, of the operating system
5754Speaking of roll-back, each time you run @command{guix system
5755reconfigure}, a new @dfn{generation} of the system is created---without
5756modifying or deleting previous generations. Old system generations get
5757an entry in the GRUB boot menu, allowing you to boot them in case
5758something went wrong with the latest generation. Reassuring, no? The
5759@command{guix system list-generations} command lists the system
5760generations available on disk.
b81e1947 5761
cf4a9129
LC
5762At the Scheme level, the bulk of an @code{operating-system} declaration
5763is instantiated with the following monadic procedure (@pxref{The Store
5764Monad}):
b81e1947 5765
cf4a9129
LC
5766@deffn {Monadic Procedure} operating-system-derivation os
5767Return a derivation that builds @var{os}, an @code{operating-system}
5768object (@pxref{Derivations}).
b81e1947 5769
cf4a9129
LC
5770The output of the derivation is a single directory that refers to all
5771the packages, configuration files, and other supporting files needed to
5772instantiate @var{os}.
5773@end deffn
b81e1947 5774
7313a52e
LC
5775@node operating-system Reference
5776@subsection @code{operating-system} Reference
5777
5778This section summarizes all the options available in
5779@code{operating-system} declarations (@pxref{Using the Configuration
5780System}).
5781
5782@deftp {Data Type} operating-system
5783This is the data type representing an operating system configuration.
5784By that, we mean all the global system configuration, not per-user
5785configuration (@pxref{Using the Configuration System}).
5786
5787@table @asis
5788@item @code{kernel} (default: @var{linux-libre})
fbb25e56 5789The package object of the operating system kernel to use@footnote{Currently
7313a52e
LC
5790only the Linux-libre kernel is supported. In the future, it will be
5791possible to use the GNU@tie{}Hurd.}.
5792
ee2a6304
LC
5793@item @code{kernel-arguments} (default: @code{'()})
5794List of strings or gexps representing additional arguments to pass on
5795the kernel's command-line---e.g., @code{("console=ttyS0")}.
5796
7313a52e 5797@item @code{bootloader}
88faf933 5798The system bootloader configuration object. @xref{GRUB Configuration}.
7313a52e
LC
5799
5800@item @code{initrd} (default: @code{base-initrd})
5801A two-argument monadic procedure that returns an initial RAM disk for
5802the Linux kernel. @xref{Initial RAM Disk}.
5803
f34c56be
LC
5804@item @code{firmware} (default: @var{%base-firmware})
5805@cindex firmware
5806List of firmware packages loadable by the operating system kernel.
5807
5808The default includes firmware needed for Atheros-based WiFi devices
5809(Linux-libre module @code{ath9k}.)
5810
7313a52e
LC
5811@item @code{host-name}
5812The host name.
5813
5814@item @code{hosts-file}
5815@cindex hosts file
24e02c28 5816A file-like object (@pxref{G-Expressions, file-like objects}) for use as
7313a52e 5817@file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library
24e02c28 5818Reference Manual}). The default is a file with entries for
7313a52e
LC
5819@code{localhost} and @var{host-name}.
5820
5821@item @code{mapped-devices} (default: @code{'()})
5822A list of mapped devices. @xref{Mapped Devices}.
5823
5824@item @code{file-systems}
5825A list of file systems. @xref{File Systems}.
5826
5827@item @code{swap-devices} (default: @code{'()})
5828@cindex swap devices
5829A list of strings identifying devices to be used for ``swap space''
5830(@pxref{Memory Concepts,,, libc, The GNU C Library Reference Manual}).
5831For example, @code{'("/dev/sda3")}.
5832
bf87f38a 5833@item @code{users} (default: @code{%base-user-accounts})
7313a52e
LC
5834@itemx @code{groups} (default: @var{%base-groups})
5835List of user accounts and groups. @xref{User Accounts}.
5836
5837@item @code{skeletons} (default: @code{(default-skeletons)})
5838A monadic list of pairs of target file name and files. These are the
5839files that will be used as skeletons as new accounts are created.
5840
5841For instance, a valid value may look like this:
5842
5843@example
5844(mlet %store-monad ((bashrc (text-file "bashrc" "\
5845 export PATH=$HOME/.guix-profile/bin")))
5846 (return `((".bashrc" ,bashrc))))
5847@end example
5848
5849@item @code{issue} (default: @var{%default-issue})
5850A string denoting the contents of the @file{/etc/issue} file, which is
5851what displayed when users log in on a text console.
5852
5853@item @code{packages} (default: @var{%base-packages})
5854The set of packages installed in the global profile, which is accessible
5855at @file{/run/current-system/profile}.
5856
5857The default set includes core utilities, but it is good practice to
5858install non-core utilities in user profiles (@pxref{Invoking guix
5859package}).
5860
5861@item @code{timezone}
5862A timezone identifying string---e.g., @code{"Europe/Paris"}.
5863
598e19dc
LC
5864@item @code{locale} (default: @code{"en_US.utf8"})
5865The name of the default locale (@pxref{Locale Names,,, libc, The GNU C
5866Library Reference Manual}). @xref{Locales}, for more information.
5867
5868@item @code{locale-definitions} (default: @var{%default-locale-definitions})
5869The list of locale definitions to be compiled and that may be used at
5870run time. @xref{Locales}.
7313a52e 5871
34760ae7
LC
5872@item @code{locale-libcs} (default: @code{(list @var{glibc})})
5873The list of GNU@tie{}libc packages whose locale data and tools are used
5874to build the locale definitions. @xref{Locales}, for compatibility
5875considerations that justify this option.
5876
996ed739
LC
5877@item @code{name-service-switch} (default: @var{%default-nss})
5878Configuration of libc's name service switch (NSS)---a
5879@code{<name-service-switch>} object. @xref{Name Service Switch}, for
5880details.
5881
7313a52e 5882@item @code{services} (default: @var{%base-services})
28d939af 5883A list of service objects denoting system services. @xref{Services}.
7313a52e
LC
5884
5885@item @code{pam-services} (default: @code{(base-pam-services)})
5886@cindex PAM
5887@cindex pluggable authentication modules
5888Linux @dfn{pluggable authentication module} (PAM) services.
5889@c FIXME: Add xref to PAM services section.
5890
5891@item @code{setuid-programs} (default: @var{%setuid-programs})
5892List of string-valued G-expressions denoting setuid programs.
5893@xref{Setuid Programs}.
5894
f5a9ffa0
AK
5895@item @code{sudoers-file} (default: @var{%sudoers-specification})
5896@cindex sudoers file
84765839
LC
5897The contents of the @file{/etc/sudoers} file as a file-like object
5898(@pxref{G-Expressions, @code{local-file} and @code{plain-file}}).
7313a52e
LC
5899
5900This file specifies which users can use the @command{sudo} command, what
5901they are allowed to do, and what privileges they may gain. The default
5902is that only @code{root} and members of the @code{wheel} group may use
5903@code{sudo}.
5904
5905@end table
5906@end deftp
5907
cf4a9129
LC
5908@node File Systems
5909@subsection File Systems
b81e1947 5910
cf4a9129
LC
5911The list of file systems to be mounted is specified in the
5912@code{file-systems} field of the operating system's declaration
5913(@pxref{Using the Configuration System}). Each file system is declared
5914using the @code{file-system} form, like this:
b81e1947
LC
5915
5916@example
cf4a9129
LC
5917(file-system
5918 (mount-point "/home")
5919 (device "/dev/sda3")
5920 (type "ext4"))
b81e1947
LC
5921@end example
5922
cf4a9129
LC
5923As usual, some of the fields are mandatory---those shown in the example
5924above---while others can be omitted. These are described below.
b81e1947 5925
cf4a9129
LC
5926@deftp {Data Type} file-system
5927Objects of this type represent file systems to be mounted. They
5928contain the following members:
5ff3c4b8 5929
cf4a9129
LC
5930@table @asis
5931@item @code{type}
5932This is a string specifying the type of the file system---e.g.,
5933@code{"ext4"}.
5ff3c4b8 5934
cf4a9129
LC
5935@item @code{mount-point}
5936This designates the place where the file system is to be mounted.
b81e1947 5937
cf4a9129
LC
5938@item @code{device}
5939This names the ``source'' of the file system. By default it is the name
5940of a node under @file{/dev}, but its meaning depends on the @code{title}
5941field described below.
401c53c4 5942
cf4a9129
LC
5943@item @code{title} (default: @code{'device})
5944This is a symbol that specifies how the @code{device} field is to be
5945interpreted.
401c53c4 5946
cf4a9129
LC
5947When it is the symbol @code{device}, then the @code{device} field is
5948interpreted as a file name; when it is @code{label}, then @code{device}
5949is interpreted as a partition label name; when it is @code{uuid},
5950@code{device} is interpreted as a partition unique identifier (UUID).
da7cabd4 5951
661a1d79
LC
5952UUIDs may be converted from their string representation (as shown by the
5953@command{tune2fs -l} command) using the @code{uuid} form, like this:
5954
5955@example
5956(file-system
5957 (mount-point "/home")
5958 (type "ext4")
5959 (title 'uuid)
5960 (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
5961@end example
5962
cf4a9129 5963The @code{label} and @code{uuid} options offer a way to refer to disk
661a1d79
LC
5964partitions without having to hard-code their actual device
5965name@footnote{Note that, while it is tempting to use
5966@file{/dev/disk/by-uuid} and similar device names to achieve the same
5967result, this is not recommended: These special device nodes are created
5968by the udev daemon and may be unavailable at the time the device is
5969mounted.}.
da7cabd4 5970
5f86a66e
LC
5971However, when a file system's source is a mapped device (@pxref{Mapped
5972Devices}), its @code{device} field @emph{must} refer to the mapped
5973device name---e.g., @file{/dev/mapper/root-partition}---and consequently
5974@code{title} must be set to @code{'device}. This is required so that
5975the system knows that mounting the file system depends on having the
5976corresponding device mapping established.
5977
cf4a9129
LC
5978@item @code{flags} (default: @code{'()})
5979This is a list of symbols denoting mount flags. Recognized flags
2c071ce9
LC
5980include @code{read-only}, @code{bind-mount}, @code{no-dev} (disallow
5981access to special files), @code{no-suid} (ignore setuid and setgid
5982bits), and @code{no-exec} (disallow program execution.)
da7cabd4 5983
cf4a9129
LC
5984@item @code{options} (default: @code{#f})
5985This is either @code{#f}, or a string denoting mount options.
da7cabd4 5986
be21979d
LC
5987@item @code{mount?} (default: @code{#t})
5988This value indicates whether to automatically mount the file system when
5989the system is brought up. When set to @code{#f}, the file system gets
5990an entry in @file{/etc/fstab} (read by the @command{mount} command) but
5991is not automatically mounted.
5992
cf4a9129
LC
5993@item @code{needed-for-boot?} (default: @code{#f})
5994This Boolean value indicates whether the file system is needed when
5995booting. If that is true, then the file system is mounted when the
5996initial RAM disk (initrd) is loaded. This is always the case, for
5997instance, for the root file system.
da7cabd4 5998
cf4a9129
LC
5999@item @code{check?} (default: @code{#t})
6000This Boolean indicates whether the file system needs to be checked for
6001errors before being mounted.
f9cc8971 6002
4e469051
LC
6003@item @code{create-mount-point?} (default: @code{#f})
6004When true, the mount point is created if it does not exist yet.
6005
e51710d1
LC
6006@item @code{dependencies} (default: @code{'()})
6007This is a list of @code{<file-system>} objects representing file systems
6008that must be mounted before (and unmounted after) this one.
6009
6010As an example, consider a hierarchy of mounts: @file{/sys/fs/cgroup} is
6011a dependency of @file{/sys/fs/cgroup/cpu} and
6012@file{/sys/fs/cgroup/memory}.
6013
cf4a9129
LC
6014@end table
6015@end deftp
da7cabd4 6016
a69576ea
LC
6017The @code{(gnu system file-systems)} exports the following useful
6018variables.
6019
6020@defvr {Scheme Variable} %base-file-systems
6021These are essential file systems that are required on normal systems,
cc0e575a 6022such as @var{%pseudo-terminal-file-system} and @var{%immutable-store} (see
3392ce5d
LC
6023below.) Operating system declarations should always contain at least
6024these.
a69576ea
LC
6025@end defvr
6026
7f239fd3
LC
6027@defvr {Scheme Variable} %pseudo-terminal-file-system
6028This is the file system to be mounted as @file{/dev/pts}. It supports
6029@dfn{pseudo-terminals} created @i{via} @code{openpty} and similar
6030functions (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference
6031Manual}). Pseudo-terminals are used by terminal emulators such as
6032@command{xterm}.
6033@end defvr
6034
db17ae5c
LC
6035@defvr {Scheme Variable} %shared-memory-file-system
6036This file system is mounted as @file{/dev/shm} and is used to support
6037memory sharing across processes (@pxref{Memory-mapped I/O,
6038@code{shm_open},, libc, The GNU C Library Reference Manual}).
6039@end defvr
6040
3392ce5d
LC
6041@defvr {Scheme Variable} %immutable-store
6042This file system performs a read-only ``bind mount'' of
6043@file{/gnu/store}, making it read-only for all the users including
6044@code{root}. This prevents against accidental modification by software
6045running as @code{root} or by system administrators.
6046
6047The daemon itself is still able to write to the store: it remounts it
6048read-write in its own ``name space.''
6049@end defvr
6050
a69576ea
LC
6051@defvr {Scheme Variable} %binary-format-file-system
6052The @code{binfmt_misc} file system, which allows handling of arbitrary
6053executable file types to be delegated to user space. This requires the
6054@code{binfmt.ko} kernel module to be loaded.
6055@end defvr
6056
6057@defvr {Scheme Variable} %fuse-control-file-system
6058The @code{fusectl} file system, which allows unprivileged users to mount
6059and unmount user-space FUSE file systems. This requires the
6060@code{fuse.ko} kernel module to be loaded.
6061@end defvr
6062
510f9d86
LC
6063@node Mapped Devices
6064@subsection Mapped Devices
6065
6066@cindex device mapping
6067@cindex mapped devices
6068The Linux kernel has a notion of @dfn{device mapping}: a block device,
6069such as a hard disk partition, can be @dfn{mapped} into another device,
6070with additional processing over the data that flows through
6071it@footnote{Note that the GNU@tie{}Hurd makes no difference between the
6072concept of a ``mapped device'' and that of a file system: both boil down
6073to @emph{translating} input/output operations made on a file to
6074operations on its backing store. Thus, the Hurd implements mapped
6075devices, like file systems, using the generic @dfn{translator} mechanism
6076(@pxref{Translators,,, hurd, The GNU Hurd Reference Manual}).}. A
6077typical example is encryption device mapping: all writes to the mapped
6078device are encrypted, and all reads are deciphered, transparently.
6079
6080Mapped devices are declared using the @code{mapped-device} form:
6081
6082@example
6083(mapped-device
6084 (source "/dev/sda3")
6085 (target "home")
6086 (type luks-device-mapping))
6087@end example
6088
6089@noindent
6090@cindex disk encryption
6091@cindex LUKS
6092This example specifies a mapping from @file{/dev/sda3} to
6093@file{/dev/mapper/home} using LUKS---the
6094@url{http://code.google.com/p/cryptsetup,Linux Unified Key Setup}, a
6095standard mechanism for disk encryption. The @file{/dev/mapper/home}
6096device can then be used as the @code{device} of a @code{file-system}
6097declaration (@pxref{File Systems}). The @code{mapped-device} form is
6098detailed below.
6099
6100@deftp {Data Type} mapped-device
6101Objects of this type represent device mappings that will be made when
6102the system boots up.
6103
9cb426b8
LC
6104@table @code
6105@item source
510f9d86
LC
6106This string specifies the name of the block device to be mapped, such as
6107@code{"/dev/sda3"}.
6108
9cb426b8 6109@item target
510f9d86
LC
6110This string specifies the name of the mapping to be established. For
6111example, specifying @code{"my-partition"} will lead to the creation of
6112the @code{"/dev/mapper/my-partition"} device.
6113
9cb426b8 6114@item type
510f9d86
LC
6115This must be a @code{mapped-device-kind} object, which specifies how
6116@var{source} is mapped to @var{target}.
6117@end table
6118@end deftp
6119
6120@defvr {Scheme Variable} luks-device-mapping
6121This defines LUKS block device encryption using the @command{cryptsetup}
6122command, from the same-named package. This relies on the
6123@code{dm-crypt} Linux kernel module.
6124@end defvr
6125
cf4a9129
LC
6126@node User Accounts
6127@subsection User Accounts
ee85f3db 6128
9bea87a5
LC
6129User accounts and groups are entirely managed through the
6130@code{operating-system} declaration. They are specified with the
6131@code{user-account} and @code{user-group} forms:
ee85f3db 6132
cf4a9129
LC
6133@example
6134(user-account
6135 (name "alice")
6136 (group "users")
24e752c0
LC
6137 (supplementary-groups '("wheel" ;allow use of sudo, etc.
6138 "audio" ;sound card
6139 "video" ;video devices such as webcams
6140 "cdrom")) ;the good ol' CD-ROM
cf4a9129
LC
6141 (comment "Bob's sister")
6142 (home-directory "/home/alice"))
6143@end example
25083588 6144
9bea87a5
LC
6145When booting or upon completion of @command{guix system reconfigure},
6146the system ensures that only the user accounts and groups specified in
6147the @code{operating-system} declaration exist, and with the specified
6148properties. Thus, account or group creations or modifications made by
6149directly invoking commands such as @command{useradd} are lost upon
6150reconfiguration or reboot. This ensures that the system remains exactly
6151as declared.
6152
cf4a9129
LC
6153@deftp {Data Type} user-account
6154Objects of this type represent user accounts. The following members may
6155be specified:
ee85f3db 6156
cf4a9129
LC
6157@table @asis
6158@item @code{name}
6159The name of the user account.
ee85f3db 6160
cf4a9129
LC
6161@item @code{group}
6162This is the name (a string) or identifier (a number) of the user group
6163this account belongs to.
ee85f3db 6164
cf4a9129
LC
6165@item @code{supplementary-groups} (default: @code{'()})
6166Optionally, this can be defined as a list of group names that this
6167account belongs to.
ee85f3db 6168
cf4a9129
LC
6169@item @code{uid} (default: @code{#f})
6170This is the user ID for this account (a number), or @code{#f}. In the
6171latter case, a number is automatically chosen by the system when the
6172account is created.
ee85f3db 6173
cf4a9129
LC
6174@item @code{comment} (default: @code{""})
6175A comment about the account, such as the account's owner full name.
c8c871d1 6176
cf4a9129
LC
6177@item @code{home-directory}
6178This is the name of the home directory for the account.
ee85f3db 6179
cf4a9129
LC
6180@item @code{shell} (default: Bash)
6181This is a G-expression denoting the file name of a program to be used as
6182the shell (@pxref{G-Expressions}).
ee85f3db 6183
cf4a9129
LC
6184@item @code{system?} (default: @code{#f})
6185This Boolean value indicates whether the account is a ``system''
6186account. System accounts are sometimes treated specially; for instance,
6187graphical login managers do not list them.
ee85f3db 6188
1bd4e6db 6189@anchor{user-account-password}
cf4a9129 6190@item @code{password} (default: @code{#f})
eb59595c
LC
6191You would normally leave this field to @code{#f}, initialize user
6192passwords as @code{root} with the @command{passwd} command, and then let
9bea87a5
LC
6193users change it with @command{passwd}. Passwords set with
6194@command{passwd} are of course preserved across reboot and
6195reconfiguration.
eb59595c
LC
6196
6197If you @emph{do} want to have a preset password for an account, then
6198this field must contain the encrypted password, as a string.
5d1f1177
LC
6199@xref{crypt,,, libc, The GNU C Library Reference Manual}, for more information
6200on password encryption, and @ref{Encryption,,, guile, GNU Guile Reference
eb59595c 6201Manual}, for information on Guile's @code{crypt} procedure.
c8c871d1 6202
cf4a9129
LC
6203@end table
6204@end deftp
ee85f3db 6205
cf4a9129 6206User group declarations are even simpler:
ee85f3db 6207
cf4a9129
LC
6208@example
6209(user-group (name "students"))
6210@end example
ee85f3db 6211
cf4a9129
LC
6212@deftp {Data Type} user-group
6213This type is for, well, user groups. There are just a few fields:
af8a56b8 6214
cf4a9129
LC
6215@table @asis
6216@item @code{name}
6217The group's name.
ee85f3db 6218
cf4a9129
LC
6219@item @code{id} (default: @code{#f})
6220The group identifier (a number). If @code{#f}, a new number is
6221automatically allocated when the group is created.
ee85f3db 6222
c8fa3426
LC
6223@item @code{system?} (default: @code{#f})
6224This Boolean value indicates whether the group is a ``system'' group.
6225System groups have low numerical IDs.
6226
cf4a9129
LC
6227@item @code{password} (default: @code{#f})
6228What, user groups can have a password? Well, apparently yes. Unless
6229@code{#f}, this field specifies the group's password.
ee85f3db 6230
cf4a9129
LC
6231@end table
6232@end deftp
401c53c4 6233
cf4a9129
LC
6234For convenience, a variable lists all the basic user groups one may
6235expect:
401c53c4 6236
cf4a9129
LC
6237@defvr {Scheme Variable} %base-groups
6238This is the list of basic user groups that users and/or packages expect
6239to be present on the system. This includes groups such as ``root'',
6240``wheel'', and ``users'', as well as groups used to control access to
6241specific devices such as ``audio'', ``disk'', and ``cdrom''.
6242@end defvr
401c53c4 6243
bf87f38a
LC
6244@defvr {Scheme Variable} %base-user-accounts
6245This is the list of basic system accounts that programs may expect to
6246find on a GNU/Linux system, such as the ``nobody'' account.
6247
6248Note that the ``root'' account is not included here. It is a
6249special-case and is automatically added whether or not it is specified.
6250@end defvr
6251
598e19dc
LC
6252@node Locales
6253@subsection Locales
6254
6255@cindex locale
6256A @dfn{locale} defines cultural conventions for a particular language
6257and region of the world (@pxref{Locales,,, libc, The GNU C Library
6258Reference Manual}). Each locale has a name that typically has the form
b2636518 6259@code{@var{language}_@var{territory}.@var{codeset}}---e.g.,
598e19dc
LC
6260@code{fr_LU.utf8} designates the locale for the French language, with
6261cultural conventions from Luxembourg, and using the UTF-8 encoding.
6262
6263@cindex locale definition
6264Usually, you will want to specify the default locale for the machine
6265using the @code{locale} field of the @code{operating-system} declaration
6266(@pxref{operating-system Reference, @code{locale}}).
6267
6268That locale must be among the @dfn{locale definitions} that are known to
6269the system---and these are specified in the @code{locale-definitions}
6270slot of @code{operating-system}. The default value includes locale
6271definition for some widely used locales, but not for all the available
6272locales, in order to save space.
6273
6274If the locale specified in the @code{locale} field is not among the
6275definitions listed in @code{locale-definitions}, @command{guix system}
6276raises an error. In that case, you should add the locale definition to
6277the @code{locale-definitions} field. For instance, to add the North
6278Frisian locale for Germany, the value of that field may be:
6279
6280@example
6281(cons (locale-definition
6282 (name "fy_DE.utf8") (source "fy_DE"))
6283 %default-locale-definitions)
6284@end example
6285
6286Likewise, to save space, one might want @code{locale-definitions} to
6287list only the locales that are actually used, as in:
6288
6289@example
6290(list (locale-definition
6291 (name "ja_JP.eucjp") (source "ja_JP")
6292 (charset "EUC-JP")))
6293@end example
6294
5c3c1427
LC
6295@vindex LOCPATH
6296The compiled locale definitions are available at
46bd6edd
LC
6297@file{/run/current-system/locale/X.Y}, where @code{X.Y} is the libc
6298version, which is the default location where the GNU@tie{}libc provided
6299by Guix looks for locale data. This can be overridden using the
6300@code{LOCPATH} environment variable (@pxref{locales-and-locpath,
5c3c1427
LC
6301@code{LOCPATH} and locale packages}).
6302
598e19dc
LC
6303The @code{locale-definition} form is provided by the @code{(gnu system
6304locale)} module. Details are given below.
6305
6306@deftp {Data Type} locale-definition
6307This is the data type of a locale definition.
6308
6309@table @asis
6310
6311@item @code{name}
6312The name of the locale. @xref{Locale Names,,, libc, The GNU C Library
6313Reference Manual}, for more information on locale names.
6314
6315@item @code{source}
6316The name of the source for that locale. This is typically the
6317@code{@var{language}_@var{territory}} part of the locale name.
6318
6319@item @code{charset} (default: @code{"UTF-8"})
6320The ``character set'' or ``code set'' for that locale,
6321@uref{http://www.iana.org/assignments/character-sets, as defined by
6322IANA}.
6323
6324@end table
6325@end deftp
6326
6327@defvr {Scheme Variable} %default-locale-definitions
b2636518
LC
6328An arbitrary list of commonly used UTF-8 locales, used as the default
6329value of the @code{locale-definitions} field of @code{operating-system}
598e19dc 6330declarations.
b2636518
LC
6331
6332@cindex locale name
6333@cindex normalized codeset in locale names
6334These locale definitions use the @dfn{normalized codeset} for the part
6335that follows the dot in the name (@pxref{Using gettextized software,
6336normalized codeset,, libc, The GNU C Library Reference Manual}). So for
6337instance it has @code{uk_UA.utf8} but @emph{not}, say,
6338@code{uk_UA.UTF-8}.
598e19dc 6339@end defvr
401c53c4 6340
34760ae7
LC
6341@subsubsection Locale Data Compatibility Considerations
6342
6343@cindex incompatibility, of locale data
6344@code{operating-system} declarations provide a @code{locale-libcs} field
6345to specify the GNU@tie{}libc packages that are used to compile locale
6346declarations (@pxref{operating-system Reference}). ``Why would I
6347care?'', you may ask. Well, it turns out that the binary format of
6348locale data is occasionally incompatible from one libc version to
6349another.
6350
6351@c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
6352@c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
6353For instance, a program linked against libc version 2.21 is unable to
6354read locale data produced with libc 2.22; worse, that program
6355@emph{aborts} instead of simply ignoring the incompatible locale
6356data@footnote{Versions 2.23 and later of GNU@tie{}libc will simply skip
6357the incompatible locale data, which is already an improvement.}.
6358Similarly, a program linked against libc 2.22 can read most, but not
6359all, the locale data from libc 2.21 (specifically, @code{LC_COLLATE}
6360data is incompatible); thus calls to @code{setlocale} may fail, but
6361programs will not abort.
6362
6363The ``problem'' in GuixSD is that users have a lot of freedom: They can
6364choose whether and when to upgrade software in their profiles, and might
6365be using a libc version different from the one the system administrator
6366used to build the system-wide locale data.
6367
6368Fortunately, unprivileged users can also install their own locale data
6369and define @var{GUIX_LOCPATH} accordingly (@pxref{locales-and-locpath,
6370@code{GUIX_LOCPATH} and locale packages}).
6371
6372Still, it is best if the system-wide locale data at
6373@file{/run/current-system/locale} is built for all the libc versions
6374actually in use on the system, so that all the programs can access
6375it---this is especially crucial on a multi-user system. To do that, the
6376administrator can specify several libc packages in the
6377@code{locale-libcs} field of @code{operating-system}:
6378
6379@example
6380(use-package-modules base)
6381
6382(operating-system
6383 ;; @dots{}
6384 (locale-libcs (list glibc-2.21 (canonical-package glibc))))
6385@end example
6386
6387This example would lead to a system containing locale definitions for
6388both libc 2.21 and the current version of libc in
6389@file{/run/current-system/locale}.
6390
6391
cf4a9129
LC
6392@node Services
6393@subsection Services
401c53c4 6394
cf4a9129
LC
6395@cindex system services
6396An important part of preparing an @code{operating-system} declaration is
6397listing @dfn{system services} and their configuration (@pxref{Using the
6398Configuration System}). System services are typically daemons launched
6399when the system boots, or other actions needed at that time---e.g.,
d8b94dbd
LC
6400configuring network access.
6401
6402Services are managed by GNU@tie{}dmd (@pxref{Introduction,,, dmd, GNU
6403dmd Manual}). On a running system, the @command{deco} command allows
6404you to list the available services, show their status, start and stop
6405them, or do other specific operations (@pxref{Jump Start,,, dmd, GNU dmd
6406Manual}). For example:
6407
6408@example
6409# deco status dmd
6410@end example
6411
6412The above command, run as @code{root}, lists the currently defined
6413services. The @command{deco doc} command shows a synopsis of the given
6414service:
6415
6416@example
6417# deco doc nscd
6418Run libc's name service cache daemon (nscd).
6419@end example
6420
6421The @command{start}, @command{stop}, and @command{restart} sub-commands
6422have the effect you would expect. For instance, the commands below stop
6423the nscd service and restart the Xorg display server:
6424
6425@example
6426# deco stop nscd
6427Service nscd has been stopped.
6428# deco restart xorg-server
6429Service xorg-server has been stopped.
6430Service xorg-server has been started.
6431@end example
401c53c4 6432
cf4a9129 6433The following sections document the available services, starting with
d8b94dbd
LC
6434the core services, that may be used in an @code{operating-system}
6435declaration.
401c53c4 6436
cf4a9129
LC
6437@menu
6438* Base Services:: Essential system services.
6439* Networking Services:: Network setup, SSH daemon, etc.
6440* X Window:: Graphical display.
fe1a39d3 6441* Desktop Services:: D-Bus and desktop services.
105369a4 6442* Database Services:: SQL databases.
d8c18af8 6443* Mail Services:: IMAP, POP3, SMTP, and all that.
58724c48 6444* Web Services:: Web servers.
aa4ed923 6445* Various Services:: Other services.
cf4a9129 6446@end menu
401c53c4 6447
cf4a9129
LC
6448@node Base Services
6449@subsubsection Base Services
a1ba8475 6450
cf4a9129
LC
6451The @code{(gnu services base)} module provides definitions for the basic
6452services that one expects from the system. The services exported by
6453this module are listed below.
401c53c4 6454
cf4a9129 6455@defvr {Scheme Variable} %base-services
31771497
LC
6456This variable contains a list of basic services (@pxref{Service Types
6457and Services}, for more information on service objects) one would
cf4a9129
LC
6458expect from the system: a login service (mingetty) on each tty, syslogd,
6459libc's name service cache daemon (nscd), the udev device manager, and
6460more.
401c53c4 6461
cf4a9129
LC
6462This is the default value of the @code{services} field of
6463@code{operating-system} declarations. Usually, when customizing a
6464system, you will want to append services to @var{%base-services}, like
6465this:
401c53c4 6466
cf4a9129 6467@example
fa1e31b8 6468(cons* (avahi-service) (lsh-service) %base-services)
cf4a9129
LC
6469@end example
6470@end defvr
401c53c4 6471
be1c2c54 6472@deffn {Scheme Procedure} host-name-service @var{name}
cf4a9129
LC
6473Return a service that sets the host name to @var{name}.
6474@end deffn
401c53c4 6475
66e4f01c
LC
6476@deffn {Scheme Procedure} mingetty-service @var{config}
6477Return a service to run mingetty according to @var{config}, a
6478@code{<mingetty-configuration>} object, which specifies the tty to run, among
6479other things.
cf4a9129 6480@end deffn
401c53c4 6481
66e4f01c
LC
6482@deftp {Data Type} mingetty-configuration
6483This is the data type representing the configuration of Mingetty, which
6484implements console log-in.
6485
6486@table @asis
6487
6488@item @code{tty}
6489The name of the console this Mingetty runs on---e.g., @code{"tty1"}.
6490
6491@item @code{motd}
6492A file-like object containing the ``message of the day''.
6493
6494@item @code{auto-login} (default: @code{#f})
6495When true, this field must be a string denoting the user name under
f9b9a033 6496which the system automatically logs in. When it is @code{#f}, a
66e4f01c
LC
6497user name and password must be entered to log in.
6498
6499@item @code{login-program} (default: @code{#f})
6500This must be either @code{#f}, in which case the default log-in program
6501is used (@command{login} from the Shadow tool suite), or a gexp denoting
6502the name of the log-in program.
6503
6504@item @code{login-pause?} (default: @code{#f})
6505When set to @code{#t} in conjunction with @var{auto-login}, the user
6506will have to press a key before the log-in shell is launched.
6507
6508@item @code{mingetty} (default: @var{mingetty})
6509The Mingetty package to use.
6510
6511@end table
6512@end deftp
6513
6454b333
LC
6514@cindex name service cache daemon
6515@cindex nscd
be1c2c54 6516@deffn {Scheme Procedure} nscd-service [@var{config}] [#:glibc glibc] @
4aee6e60 6517 [#:name-services '()]
b893f1ae
LC
6518Return a service that runs libc's name service cache daemon (nscd) with the
6519given @var{config}---an @code{<nscd-configuration>} object. @xref{Name
6520Service Switch}, for an example.
cf4a9129 6521@end deffn
401c53c4 6522
6454b333
LC
6523@defvr {Scheme Variable} %nscd-default-configuration
6524This is the default @code{<nscd-configuration>} value (see below) used
6525by @code{nscd-service}. This uses the caches defined by
6526@var{%nscd-default-caches}; see below.
6527@end defvr
6528
6529@deftp {Data Type} nscd-configuration
6530This is the type representing the name service cache daemon (nscd)
6531configuration.
6532
6533@table @asis
6534
b893f1ae
LC
6535@item @code{name-services} (default: @code{'()})
6536List of packages denoting @dfn{name services} that must be visible to
6537the nscd---e.g., @code{(list @var{nss-mdns})}.
6538
6539@item @code{glibc} (default: @var{glibc})
6540Package object denoting the GNU C Library providing the @command{nscd}
6541command.
6542
6454b333
LC
6543@item @code{log-file} (default: @code{"/var/log/nscd.log"})
6544Name of nscd's log file. This is where debugging output goes when
6545@code{debug-level} is strictly positive.
6546
6547@item @code{debug-level} (default: @code{0})
6548Integer denoting the debugging levels. Higher numbers mean more
6549debugging output is logged.
6550
6551@item @code{caches} (default: @var{%nscd-default-caches})
6552List of @code{<nscd-cache>} objects denoting things to be cached; see
6553below.
6554
6555@end table
6556@end deftp
6557
6558@deftp {Data Type} nscd-cache
6559Data type representing a cache database of nscd and its parameters.
6560
6561@table @asis
6562
6563@item @code{database}
6564This is a symbol representing the name of the database to be cached.
6565Valid values are @code{passwd}, @code{group}, @code{hosts}, and
6566@code{services}, which designate the corresponding NSS database
6567(@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
6568
6569@item @code{positive-time-to-live}
6570@itemx @code{negative-time-to-live} (default: @code{20})
6571A number representing the number of seconds during which a positive or
6572negative lookup result remains in cache.
6573
6574@item @code{check-files?} (default: @code{#t})
6575Whether to check for updates of the files corresponding to
6576@var{database}.
6577
6578For instance, when @var{database} is @code{hosts}, setting this flag
6579instructs nscd to check for updates in @file{/etc/hosts} and to take
6580them into account.
6581
6582@item @code{persistent?} (default: @code{#t})
6583Whether the cache should be stored persistently on disk.
6584
6585@item @code{shared?} (default: @code{#t})
6586Whether the cache should be shared among users.
6587
6588@item @code{max-database-size} (default: 32@tie{}MiB)
6589Maximum size in bytes of the database cache.
6590
6591@c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
6592@c settings, so leave them out.
6593
6594@end table
6595@end deftp
6596
6597@defvr {Scheme Variable} %nscd-default-caches
6598List of @code{<nscd-cache>} objects used by default by
6599@code{nscd-configuration} (see above.)
6600
6601It enables persistent and aggressive caching of service and host name
6602lookups. The latter provides better host name lookup performance,
6603resilience in the face of unreliable name servers, and also better
6604privacy---often the result of host name lookups is in local cache, so
6605external name servers do not even need to be queried.
6606@end defvr
6607
6608
be1c2c54 6609@deffn {Scheme Procedure} syslog-service [#:config-file #f]
1bb76f75
AK
6610Return a service that runs @code{syslogd}. If configuration file name
6611@var{config-file} is not specified, use some reasonable default
cf4a9129
LC
6612settings.
6613@end deffn
401c53c4 6614
0adfe95a
LC
6615@anchor{guix-configuration-type}
6616@deftp {Data Type} guix-configuration
6617This data type represents the configuration of the Guix build daemon.
6618@xref{Invoking guix-daemon}, for more information.
6619
6620@table @asis
6621@item @code{guix} (default: @var{guix})
6622The Guix package to use.
401c53c4 6623
0adfe95a
LC
6624@item @code{build-group} (default: @code{"guixbuild"})
6625Name of the group for build user accounts.
401c53c4 6626
0adfe95a
LC
6627@item @code{build-accounts} (default: @code{10})
6628Number of build user accounts to create.
401c53c4 6629
0adfe95a
LC
6630@item @code{authorize-key?} (default: @code{#t})
6631Whether to authorize the substitute key for @code{hydra.gnu.org}
6632(@pxref{Substitutes}).
6633
6634@item @code{use-substitutes?} (default: @code{#t})
6635Whether to use substitutes.
6636
b0b9f6e0
LC
6637@item @code{substitute-urls} (default: @var{%default-substitute-urls})
6638The list of URLs where to look for substitutes by default.
6639
0adfe95a
LC
6640@item @code{extra-options} (default: @code{'()})
6641List of extra command-line options for @command{guix-daemon}.
6642
6643@item @code{lsof} (default: @var{lsof})
6644@itemx @code{lsh} (default: @var{lsh})
6645The lsof and lsh packages to use.
6646
6647@end table
6648@end deftp
6649
6650@deffn {Scheme Procedure} guix-service @var{config}
6651Return a service that runs the Guix build daemon according to
6652@var{config}.
cf4a9129 6653@end deffn
a1ba8475 6654
be1c2c54 6655@deffn {Scheme Procedure} udev-service [#:udev udev]
cf4a9129
LC
6656Run @var{udev}, which populates the @file{/dev} directory dynamically.
6657@end deffn
401c53c4 6658
be1c2c54 6659@deffn {Scheme Procedure} console-keymap-service @var{file}
5eca9459
AK
6660Return a service to load console keymap from @var{file} using
6661@command{loadkeys} command.
6662@end deffn
6663
8664cc88
LC
6664@deffn {Scheme Procedure} gpm-service-type [#:gpm @var{gpm}] @
6665 [#:options]
6666Run @var{gpm}, the general-purpose mouse daemon, with the given
6667command-line @var{options}. GPM allows users to use the mouse in the console,
6668notably to select, copy, and paste text. The default value of @var{options}
6669uses the @code{ps2} protocol, which works for both USB and PS/2 mice.
6670
6671This service is not part of @var{%base-services}.
6672@end deffn
6673
1c52181f
LC
6674@anchor{guix-publish-service}
6675@deffn {Scheme Procedure} guix-publish-service [#:guix @var{guix}] @
6676 [#:port 80] [#:host "localhost"]
6677Return a service that runs @command{guix publish} listening on @var{host}
6678and @var{port} (@pxref{Invoking guix publish}).
6679
6680This assumes that @file{/etc/guix} already contains a signing key pair as
6681created by @command{guix archive --generate-key} (@pxref{Invoking guix
6682archive}). If that is not the case, the service will fail to start.
6683@end deffn
6684
a69576ea 6685
cf4a9129
LC
6686@node Networking Services
6687@subsubsection Networking Services
401c53c4 6688
fa1e31b8 6689The @code{(gnu services networking)} module provides services to configure
cf4a9129 6690the network interface.
a1ba8475 6691
a023cca8 6692@cindex DHCP, networking service
be1c2c54 6693@deffn {Scheme Procedure} dhcp-client-service [#:dhcp @var{isc-dhcp}]
a023cca8
LC
6694Return a service that runs @var{dhcp}, a Dynamic Host Configuration
6695Protocol (DHCP) client, on all the non-loopback network interfaces.
6696@end deffn
6697
be1c2c54 6698@deffn {Scheme Procedure} static-networking-service @var{interface} @var{ip} @
cf4a9129
LC
6699 [#:gateway #f] [#:name-services @code{'()}]
6700Return a service that starts @var{interface} with address @var{ip}. If
6701@var{gateway} is true, it must be a string specifying the default network
6702gateway.
6703@end deffn
8b315a6d 6704
b7d0c494 6705@cindex wicd
87f40011 6706@cindex network management
be1c2c54 6707@deffn {Scheme Procedure} wicd-service [#:wicd @var{wicd}]
87f40011
LC
6708Return a service that runs @url{https://launchpad.net/wicd,Wicd}, a network
6709management daemon that aims to simplify wired and wireless networking.
6710
6711This service adds the @var{wicd} package to the global profile, providing
6712several commands to interact with the daemon and configure networking:
6713@command{wicd-client}, a graphical user interface, and the @command{wicd-cli}
6714and @command{wicd-curses} user interfaces.
b7d0c494
MW
6715@end deffn
6716
c0a9589d
SB
6717@cindex NetworkManager
6718@deffn {Scheme Procedure} network-manager-service @
6719 [#:network-manager @var{network-manager}]
6720Return a service that runs NetworkManager, a network connection manager
6721that attempting to keep active network connectivity when available.
6722@end deffn
6723
be1c2c54 6724@deffn {Scheme Procedure} ntp-service [#:ntp @var{ntp}] @
63854bcb
LC
6725 [#:name-service @var{%ntp-servers}]
6726Return a service that runs the daemon from @var{ntp}, the
6727@uref{http://www.ntp.org, Network Time Protocol package}. The daemon will
6728keep the system clock synchronized with that of @var{servers}.
6729@end deffn
6730
6731@defvr {Scheme Variable} %ntp-servers
6732List of host names used as the default NTP servers.
6733@end defvr
6734
375c6108
LC
6735@deffn {Scheme Procedure} tor-service [@var{config-file}] [#:tor @var{tor}]
6736Return a service to run the @uref{https://torproject.org, Tor} anonymous
6737networking daemon.
8b315a6d 6738
375c6108 6739The daemon runs as the @code{tor} unprivileged user. It is passed
6331bde7
LC
6740@var{config-file}, a file-like object, with an additional @code{User tor} line
6741and lines for hidden services added via @code{tor-hidden-service}. Run
6742@command{man tor} for information about the configuration file.
6743@end deffn
6744
6745@deffn {Scheme Procedure} tor-hidden-service @var{name} @var{mapping}
6746Define a new Tor @dfn{hidden service} called @var{name} and implementing
6747@var{mapping}. @var{mapping} is a list of port/host tuples, such as:
6748
6749@example
6750 '((22 \"127.0.0.1:22\")
6751 (80 \"127.0.0.1:8080\"))
6752@end example
6753
6754In this example, port 22 of the hidden service is mapped to local port 22, and
6755port 80 is mapped to local port 8080.
6756
6629099a
LC
6757This creates a @file{/var/lib/tor/hidden-services/@var{name}} directory, where
6758the @file{hostname} file contains the @code{.onion} host name for the hidden
6331bde7
LC
6759service.
6760
6761See @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, the Tor
6762project's documentation} for more information.
cf4a9129 6763@end deffn
8b315a6d 6764
be1c2c54 6765@deffn {Scheme Procedure} bitlbee-service [#:bitlbee bitlbee] @
4627a464
LC
6766 [#:interface "127.0.0.1"] [#:port 6667] @
6767 [#:extra-settings ""]
6768Return a service that runs @url{http://bitlbee.org,BitlBee}, a daemon that
6769acts as a gateway between IRC and chat networks.
6770
6771The daemon will listen to the interface corresponding to the IP address
6772specified in @var{interface}, on @var{port}. @code{127.0.0.1} means that only
6773local clients can connect, whereas @code{0.0.0.0} means that connections can
6774come from any networking interface.
6775
6776In addition, @var{extra-settings} specifies a string to append to the
6777configuration file.
6778@end deffn
6779
f4391bec 6780Furthermore, @code{(gnu services ssh)} provides the following service.
8b315a6d 6781
be1c2c54 6782@deffn {Scheme Procedure} lsh-service [#:host-key "/etc/lsh/host-key"] @
5833bf33 6783 [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
cf4a9129
LC
6784 [#:allow-empty-passwords? #f] [#:root-login? #f] @
6785 [#:syslog-output? #t] [#:x11-forwarding? #t] @
6786 [#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
21cc905a 6787 [#:public-key-authentication? #t] [#:initialize? #t]
cf4a9129
LC
6788Run the @command{lshd} program from @var{lsh} to listen on port @var{port-number}.
6789@var{host-key} must designate a file containing the host key, and readable
6790only by root.
72e25e35 6791
5833bf33
DP
6792When @var{daemonic?} is true, @command{lshd} will detach from the
6793controlling terminal and log its output to syslogd, unless one sets
6794@var{syslog-output?} to false. Obviously, it also makes lsh-service
6795depend on existence of syslogd service. When @var{pid-file?} is true,
6796@command{lshd} writes its PID to the file called @var{pid-file}.
6797
cf4a9129
LC
6798When @var{initialize?} is true, automatically create the seed and host key
6799upon service activation if they do not exist yet. This may take long and
6800require interaction.
8b315a6d 6801
20dd519c
LC
6802When @var{initialize?} is false, it is up to the user to initialize the
6803randomness generator (@pxref{lsh-make-seed,,, lsh, LSH Manual}), and to create
6804a key pair with the private key stored in file @var{host-key} (@pxref{lshd
6805basics,,, lsh, LSH Manual}).
6806
cf4a9129
LC
6807When @var{interfaces} is empty, lshd listens for connections on all the
6808network interfaces; otherwise, @var{interfaces} must be a list of host names
6809or addresses.
9bf3c1a7 6810
20dd519c
LC
6811@var{allow-empty-passwords?} specifies whether to accept log-ins with empty
6812passwords, and @var{root-login?} specifies whether to accept log-ins as
cf4a9129 6813root.
4af2447e 6814
cf4a9129
LC
6815The other options should be self-descriptive.
6816@end deffn
4af2447e 6817
fa0c1d61
LC
6818@defvr {Scheme Variable} %facebook-host-aliases
6819This variable contains a string for use in @file{/etc/hosts}
6820(@pxref{Host Names,,, libc, The GNU C Library Reference Manual}). Each
6821line contains a entry that maps a known server name of the Facebook
6822on-line service---e.g., @code{www.facebook.com}---to the local
6823host---@code{127.0.0.1} or its IPv6 equivalent, @code{::1}.
6824
6825This variable is typically used in the @code{hosts-file} field of an
7313a52e
LC
6826@code{operating-system} declaration (@pxref{operating-system Reference,
6827@file{/etc/hosts}}):
fa0c1d61
LC
6828
6829@example
6830(use-modules (gnu) (guix))
6831
6832(operating-system
6833 (host-name "mymachine")
6834 ;; ...
6835 (hosts-file
6836 ;; Create a /etc/hosts file with aliases for "localhost"
6837 ;; and "mymachine", as well as for Facebook servers.
24e02c28
LC
6838 (plain-file "hosts"
6839 (string-append (local-host-aliases host-name)
6840 %facebook-host-aliases))))
fa0c1d61
LC
6841@end example
6842
6843This mechanism can prevent programs running locally, such as Web
6844browsers, from accessing Facebook.
6845@end defvr
6846
965a7332
LC
6847The @code{(gnu services avahi)} provides the following definition.
6848
be1c2c54 6849@deffn {Scheme Procedure} avahi-service [#:avahi @var{avahi}] @
965a7332
LC
6850 [#:host-name #f] [#:publish? #t] [#:ipv4? #t] @
6851 [#:ipv6? #t] [#:wide-area? #f] @
6852 [#:domains-to-browse '()]
6853Return a service that runs @command{avahi-daemon}, a system-wide
6854mDNS/DNS-SD responder that allows for service discovery and
cc9c1f39
LC
6855"zero-configuration" host name lookups (see @uref{http://avahi.org/}), and
6856extends the name service cache daemon (nscd) so that it can resolve
6857@code{.local} host names using
1065bed9
LC
6858@uref{http://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. Additionally,
6859add the @var{avahi} package to the system profile so that commands such as
6860@command{avahi-browse} are directly usable.
965a7332
LC
6861
6862If @var{host-name} is different from @code{#f}, use that as the host name to
6863publish for this machine; otherwise, use the machine's actual host name.
6864
6865When @var{publish?} is true, publishing of host names and services is allowed;
6866in particular, avahi-daemon will publish the machine's host name and IP
6867address via mDNS on the local network.
6868
6869When @var{wide-area?} is true, DNS-SD over unicast DNS is enabled.
6870
6871Boolean values @var{ipv4?} and @var{ipv6?} determine whether to use IPv4/IPv6
6872sockets.
6873@end deffn
6874
6875
cf4a9129
LC
6876@node X Window
6877@subsubsection X Window
68ad877c 6878
cf4a9129
LC
6879Support for the X Window graphical display system---specifically
6880Xorg---is provided by the @code{(gnu services xorg)} module. Note that
6881there is no @code{xorg-service} procedure. Instead, the X server is
6882started by the @dfn{login manager}, currently SLiM.
4af2447e 6883
be1c2c54 6884@deffn {Scheme Procedure} slim-service [#:allow-empty-passwords? #f] @
0ecc3bf3
LC
6885 [#:auto-login? #f] [#:default-user ""] [#:startx] @
6886 [#:theme @var{%default-slim-theme}] @
4bd43bbe 6887 [#:theme-name @var{%default-slim-theme-name}]
cf4a9129
LC
6888Return a service that spawns the SLiM graphical login manager, which in
6889turn starts the X display server with @var{startx}, a command as returned by
6890@code{xorg-start-command}.
4af2447e 6891
04e4e6ab
LC
6892@cindex X session
6893
6894SLiM automatically looks for session types described by the @file{.desktop}
6895files in @file{/run/current-system/profile/share/xsessions} and allows users
6896to choose a session from the log-in screen using @kbd{F1}. Packages such as
6897@var{xfce}, @var{sawfish}, and @var{ratpoison} provide @file{.desktop} files;
6898adding them to the system-wide set of packages automatically makes them
6899available at the log-in screen.
6900
6901In addition, @file{~/.xsession} files are honored. When available,
6902@file{~/.xsession} must be an executable that starts a window manager
6903and/or other X clients.
6904
cf4a9129
LC
6905When @var{allow-empty-passwords?} is true, allow logins with an empty
6906password. When @var{auto-login?} is true, log in automatically as
6907@var{default-user}.
0ecc3bf3
LC
6908
6909If @var{theme} is @code{#f}, the use the default log-in theme; otherwise
6910@var{theme} must be a gexp denoting the name of a directory containing the
6911theme to use. In that case, @var{theme-name} specifies the name of the
6912theme.
cf4a9129 6913@end deffn
4af2447e 6914
0ecc3bf3
LC
6915@defvr {Scheme Variable} %default-theme
6916@defvrx {Scheme Variable} %default-theme-name
6917The G-Expression denoting the default SLiM theme and its name.
6918@end defvr
6919
be1c2c54 6920@deffn {Scheme Procedure} xorg-start-command [#:guile] @
d1cdd7ba 6921 [#:configuration-file #f] [#:xorg-server @var{xorg-server}]
f703413e 6922Return a derivation that builds a @var{guile} script to start the X server
d1cdd7ba
LC
6923from @var{xorg-server}. @var{configuration-file} is the server configuration
6924file or a derivation that builds it; when omitted, the result of
6925@code{xorg-configuration-file} is used.
6926
6927Usually the X server is started by a login manager.
6928@end deffn
6929
be1c2c54 6930@deffn {Scheme Procedure} xorg-configuration-file @
12422c9d 6931 [#:drivers '()] [#:resolutions '()] [#:extra-config '()]
d1cdd7ba
LC
6932Return a configuration file for the Xorg server containing search paths for
6933all the common drivers.
f703413e
LC
6934
6935@var{drivers} must be either the empty list, in which case Xorg chooses a
6936graphics driver automatically, or a list of driver names that will be tried in
d1cdd7ba 6937this order---e.g., @code{(\"modesetting\" \"vesa\")}.
d2e59637
LC
6938
6939Likewise, when @var{resolutions} is the empty list, Xorg chooses an
6940appropriate screen resolution; otherwise, it must be a list of
6941resolutions---e.g., @code{((1024 768) (640 480))}.
12422c9d
LC
6942
6943Last, @var{extra-config} is a list of strings or objects appended to the
6944@code{text-file*} argument list. It is used to pass extra text to be added
6945verbatim to the configuration file.
f703413e 6946@end deffn
4af2447e 6947
6726282b
LC
6948@deffn {Scheme Procedure} screen-locker-service @var{package} [@var{name}]
6949Add @var{package}, a package for a screen-locker or screen-saver whose
6950command is @var{program}, to the set of setuid programs and add a PAM entry
6951for it. For example:
6952
6953@lisp
6954(screen-locker-service xlockmore "xlock")
6955@end lisp
6956
6957makes the good ol' XlockMore usable.
6958@end deffn
6959
6960
fe1a39d3
LC
6961@node Desktop Services
6962@subsubsection Desktop Services
aa4ed923 6963
fe1a39d3
LC
6964The @code{(gnu services desktop)} module provides services that are
6965usually useful in the context of a ``desktop'' setup---that is, on a
6966machine running a graphical display server, possibly with graphical user
6967interfaces, etc.
aa4ed923 6968
4467be21
LC
6969To simplify things, the module defines a variable containing the set of
6970services that users typically expect on a machine with a graphical
6971environment and networking:
6972
6973@defvr {Scheme Variable} %desktop-services
6974This is a list of services that builds upon @var{%base-services} and
6975adds or adjust services for a typical ``desktop'' setup.
6976
6977In particular, it adds a graphical login manager (@pxref{X Window,
6726282b
LC
6978@code{slim-service}}), screen lockers,
6979a network management tool (@pxref{Networking
4467be21 6980Services, @code{wicd-service}}), energy and color management services,
4650a77e 6981the @code{elogind} login and seat manager, the Polkit privilege service,
cee32ee4
AW
6982the GeoClue location service, an NTP client (@pxref{Networking
6983Services}), the Avahi daemon, and has the name service switch service
6984configured to be able to use @code{nss-mdns} (@pxref{Name Service
6985Switch, mDNS}).
4467be21
LC
6986@end defvr
6987
6988The @var{%desktop-services} variable can be used as the @code{services}
6989field of an @code{operating-system} declaration (@pxref{operating-system
6990Reference, @code{services}}).
6991
0adfe95a
LC
6992The actual service definitions provided by @code{(gnu services dbus)}
6993and @code{(gnu services desktop)} are described below.
4467be21 6994
0adfe95a 6995@deffn {Scheme Procedure} dbus-service [#:dbus @var{dbus}] [#:services '()]
fe1a39d3
LC
6996Return a service that runs the ``system bus'', using @var{dbus}, with
6997support for @var{services}.
aa4ed923 6998
fe1a39d3
LC
6999@uref{http://dbus.freedesktop.org/, D-Bus} is an inter-process communication
7000facility. Its system bus is used to allow system services to communicate
7001and be notified of system-wide events.
aa4ed923 7002
fe1a39d3
LC
7003@var{services} must be a list of packages that provide an
7004@file{etc/dbus-1/system.d} directory containing additional D-Bus configuration
7005and policy files. For example, to allow avahi-daemon to use the system bus,
7006@var{services} must be equal to @code{(list avahi)}.
aa4ed923
AK
7007@end deffn
7008
0adfe95a 7009@deffn {Scheme Procedure} elogind-service [#:config @var{config}]
4650a77e
AW
7010Return a service that runs the @code{elogind} login and
7011seat management daemon. @uref{https://github.com/andywingo/elogind,
7012Elogind} exposes a D-Bus interface that can be used to know which users
7013are logged in, know what kind of sessions they have open, suspend the
7014system, inhibit system suspend, reboot the system, and other tasks.
7015
7016Elogind handles most system-level power events for a computer, for
7017example suspending the system when a lid is closed, or shutting it down
7018when the power button is pressed.
7019
7020The @var{config} keyword argument specifies the configuration for
7021elogind, and should be the result of a @code{(elogind-configuration
7022(@var{parameter} @var{value})...)} invocation. Available parameters and
7023their default values are:
7024
7025@table @code
7026@item kill-user-processes?
7027@code{#f}
7028@item kill-only-users
7029@code{()}
7030@item kill-exclude-users
7031@code{("root")}
7032@item inhibit-delay-max-seconds
7033@code{5}
7034@item handle-power-key
7035@code{poweroff}
7036@item handle-suspend-key
7037@code{suspend}
7038@item handle-hibernate-key
7039@code{hibernate}
7040@item handle-lid-switch
7041@code{suspend}
7042@item handle-lid-switch-docked
7043@code{ignore}
7044@item power-key-ignore-inhibited?
7045@code{#f}
7046@item suspend-key-ignore-inhibited?
7047@code{#f}
7048@item hibernate-key-ignore-inhibited?
7049@code{#f}
7050@item lid-switch-ignore-inhibited?
7051@code{#t}
7052@item holdoff-timeout-seconds
7053@code{30}
7054@item idle-action
7055@code{ignore}
7056@item idle-action-seconds
7057@code{(* 30 60)}
7058@item runtime-directory-size-percent
7059@code{10}
7060@item runtime-directory-size
7061@code{#f}
7062@item remove-ipc?
7063@code{#t}
7064@item suspend-state
7065@code{("mem" "standby" "freeze")}
7066@item suspend-mode
7067@code{()}
7068@item hibernate-state
7069@code{("disk")}
7070@item hibernate-mode
7071@code{("platform" "shutdown")}
7072@item hybrid-sleep-state
7073@code{("disk")}
7074@item hybrid-sleep-mode
7075@code{("suspend" "platform" "shutdown")}
7076@end table
7077@end deffn
7078
be1c2c54 7079@deffn {Scheme Procedure} polkit-service @
4650a77e 7080 [#:polkit @var{polkit}]
222e3319
LC
7081Return a service that runs the
7082@uref{http://www.freedesktop.org/wiki/Software/polkit/, Polkit privilege
7083management service}, which allows system administrators to grant access to
7084privileged operations in a structured way. By querying the Polkit service, a
7085privileged system component can know when it should grant additional
7086capabilities to ordinary users. For example, an ordinary user can be granted
7087the capability to suspend the system if the user is logged in locally.
4650a77e
AW
7088@end deffn
7089
be1c2c54 7090@deffn {Scheme Procedure} upower-service [#:upower @var{upower}] @
be234128
AW
7091 [#:watts-up-pro? #f] @
7092 [#:poll-batteries? #t] @
7093 [#:ignore-lid? #f] @
7094 [#:use-percentage-for-policy? #f] @
7095 [#:percentage-low 10] @
7096 [#:percentage-critical 3] @
7097 [#:percentage-action 2] @
7098 [#:time-low 1200] @
7099 [#:time-critical 300] @
7100 [#:time-action 120] @
7101 [#:critical-power-action 'hybrid-sleep]
7102Return a service that runs @uref{http://upower.freedesktop.org/,
7103@command{upowerd}}, a system-wide monitor for power consumption and battery
7104levels, with the given configuration settings. It implements the
7105@code{org.freedesktop.UPower} D-Bus interface, and is notably used by
7106GNOME.
7107@end deffn
7108
2b9e0a94
LC
7109@deffn {Scheme Procedure} udisks-service [#:udisks @var{udisks}]
7110Return a service for @uref{http://udisks.freedesktop.org/docs/latest/,
7111UDisks}, a @dfn{disk management} daemon that provides user interfaces with
7112notifications and ways to mount/unmount disks. Programs that talk to UDisks
7113include the @command{udisksctl} command, part of UDisks, and GNOME Disks.
7114@end deffn
7115
be1c2c54 7116@deffn {Scheme Procedure} colord-service [#:colord @var{colord}]
7ce597ff
AW
7117Return a service that runs @command{colord}, a system service with a D-Bus
7118interface to manage the color profiles of input and output devices such as
7119screens and scanners. It is notably used by the GNOME Color Manager graphical
7120tool. See @uref{http://www.freedesktop.org/software/colord/, the colord web
7121site} for more information.
7122@end deffn
7123
cee32ee4
AW
7124@deffn {Scheme Procedure} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()]
7125Return an configuration allowing an application to access GeoClue
7126location data. @var{name} is the Desktop ID of the application, without
7127the @code{.desktop} part. If @var{allowed?} is true, the application
7128will have access to location information by default. The boolean
7129@var{system?} value indicates that an application is a system component
7130or not. Finally @var{users} is a list of UIDs of all users for which
7131this application is allowed location info access. An empty users list
7132means that all users are allowed.
7133@end deffn
7134
7135@defvr {Scheme Variable} %standard-geoclue-applications
7136The standard list of well-known GeoClue application configurations,
7137granting authority to GNOME's date-and-time utility to ask for the
7138current location in order to set the time zone, and allowing the Firefox
7139(IceCat) and Epiphany web browsers to request location information.
7140Firefox and Epiphany both query the user before allowing a web page to
7141know the user's location.
7142@end defvr
7143
be1c2c54 7144@deffn {Scheme Procedure} geoclue-service [#:colord @var{colord}] @
cee32ee4
AW
7145 [#:whitelist '()] @
7146 [#:wifi-geolocation-url "https://location.services.mozilla.com/v1/geolocate?key=geoclue"] @
7147 [#:submit-data? #f]
7148 [#:wifi-submission-url "https://location.services.mozilla.com/v1/submit?key=geoclue"] @
7149 [#:submission-nick "geoclue"] @
7150 [#:applications %standard-geoclue-applications]
7151Return a service that runs the GeoClue location service. This service
7152provides a D-Bus interface to allow applications to request access to a
7153user's physical location, and optionally to add information to online
7154location databases. See
7155@uref{https://wiki.freedesktop.org/www/Software/GeoClue/, the GeoClue
7156web site} for more information.
7157@end deffn
7158
105369a4
DT
7159@node Database Services
7160@subsubsection Database Services
7161
7162The @code{(gnu services databases)} module provides the following service.
7163
be1c2c54 7164@deffn {Scheme Procedure} postgresql-service [#:postgresql postgresql] @
105369a4
DT
7165 [#:config-file] [#:data-directory ``/var/lib/postgresql/data'']
7166Return a service that runs @var{postgresql}, the PostgreSQL database
7167server.
7168
7169The PostgreSQL daemon loads its runtime configuration from
7170@var{config-file} and stores the database cluster in
7171@var{data-directory}.
7172@end deffn
fe1a39d3 7173
d8c18af8
AW
7174@node Mail Services
7175@subsubsection Mail Services
7176
7177The @code{(gnu services mail)} module provides Guix service definitions
7178for mail services. Currently the only implemented service is Dovecot,
7179an IMAP, POP3, and LMTP server.
7180
7181Guix does not yet have a mail transfer agent (MTA), although for some
7182lightweight purposes the @code{esmtp} relay-only MTA may suffice. Help
7183is needed to properly integrate a full MTA, such as Postfix. Patches
7184welcome!
7185
7186To add an IMAP/POP3 server to a GuixSD system, add a
7187@code{dovecot-service} to the operating system definition:
7188
7189@deffn {Scheme Procedure} dovecot-service [#:config (dovecot-configuration)]
7190Return a service that runs the Dovecot IMAP/POP3/LMTP mail server.
7191@end deffn
7192
7193By default, Dovecot doesn't need much configuration; the default
7194configuration object created by @code{(dovecot-configuration)} will
7195suffice if your mail is delivered to @code{~/Maildir}. A self-signed
7196certificate will be generated for TLS-protected connections, though
7197Dovecot will also listen on cleartext ports by default. There are a
7198number of options though which mail administrators might need to change,
7199and as is the case with other services, Guix allows the system
7200administrator to specify these parameters via a uniform Scheme interface.
7201
7202For example, to specify that mail is located at @code{maildir~/.mail},
7203one would instantiate the Dovecot service like this:
7204
7205@example
7206(dovecot-service #:config
7207 (dovecot-configuration
7208 (mail-location "maildir:~/.mail")))
7209@end example
7210
7211The available configuration parameters follow. Each parameter
7212definition is preceded by its type; for example, @samp{string-list foo}
7213indicates that the @code{foo} parameter should be specified as a list of
7214strings. There is also a way to specify the configuration as a string,
7215if you have an old @code{dovecot.conf} file that you want to port over
7216from some other system; see the end for more details.
7217
7218@c The following documentation was initially generated by
7219@c (generate-documentation) in (gnu services mail). Manually maintained
7220@c documentation is better, so we shouldn't hesitate to edit below as
7221@c needed. However if the change you want to make to this documentation
7222@c can be done in an automated way, it's probably easier to change
7223@c (generate-documentation) than to make it below and have to deal with
7224@c the churn as dovecot updates.
7225
7226Available @code{dovecot-configuration} fields are:
7227
7228@deftypevr {@code{dovecot-configuration} parameter} package dovecot
7229The dovecot package.
7230@end deftypevr
7231
7232@deftypevr {@code{dovecot-configuration} parameter} comma-separated-string-list listen
7233A list of IPs or hosts where to listen in for connections. @samp{*}
7234listens in all IPv4 interfaces, @samp{::} listens in all IPv6
7235interfaces. If you want to specify non-default ports or anything more
7236complex, customize the address and port fields of the
7237@samp{inet-listener} of the specific services you are interested in.
7238@end deftypevr
7239
7240@deftypevr {@code{dovecot-configuration} parameter} protocol-configuration-list protocols
7241List of protocols we want to serve. Available protocols include
7242@samp{imap}, @samp{pop3}, and @samp{lmtp}.
7243
7244Available @code{protocol-configuration} fields are:
7245
7246@deftypevr {@code{protocol-configuration} parameter} string name
7247The name of the protocol.
7248@end deftypevr
7249
7250@deftypevr {@code{protocol-configuration} parameter} string auth-socket-path
7251UNIX socket path to master authentication server to find users.
7252This is used by imap (for shared users) and lda.
7253Defaults to @samp{"/var/run/dovecot/auth-userdb"}.
7254@end deftypevr
7255
7256@deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins
7257Space separated list of plugins to load.
7258@end deftypevr
7259
7260@deftypevr {@code{protocol-configuration} parameter} non-negative-integer mail-max-userip-connections
7261Maximum number of IMAP connections allowed for a user from each IP
7262address. NOTE: The username is compared case-sensitively.
7263Defaults to @samp{10}.
7264@end deftypevr
7265
7266@end deftypevr
7267
7268@deftypevr {@code{dovecot-configuration} parameter} service-configuration-list services
7269List of services to enable. Available services include @samp{imap},
7270@samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}, and
7271@samp{lmtp}.
7272
7273Available @code{service-configuration} fields are:
7274
7275@deftypevr {@code{service-configuration} parameter} string kind
7276The service kind. Valid values include @code{director},
7277@code{imap-login}, @code{pop3-login}, @code{lmtp}, @code{imap},
7278@code{pop3}, @code{auth}, @code{auth-worker}, @code{dict},
7279@code{tcpwrap}, @code{quota-warning}, or anything else.
7280@end deftypevr
7281
7282@deftypevr {@code{service-configuration} parameter} listener-configuration-list listeners
7283Listeners for the service. A listener is either an
7284@code{unix-listener-configuration}, a @code{fifo-listener-configuration}, or
7285an @code{inet-listener-configuration}.
7286Defaults to @samp{()}.
7287
7288Available @code{unix-listener-configuration} fields are:
7289
7290@deftypevr {@code{unix-listener-configuration} parameter} file-name path
7291The file name on which to listen.
7292@end deftypevr
7293
7294@deftypevr {@code{unix-listener-configuration} parameter} string mode
7295The access mode for the socket.
7296Defaults to @samp{"0600"}.
7297@end deftypevr
7298
7299@deftypevr {@code{unix-listener-configuration} parameter} string user
f9b9a033 7300The user to own the socket.
d8c18af8
AW
7301Defaults to @samp{""}.
7302@end deftypevr
7303
7304@deftypevr {@code{unix-listener-configuration} parameter} string group
7305The group to own the socket.
7306Defaults to @samp{""}.
7307@end deftypevr
7308
7309
7310Available @code{fifo-listener-configuration} fields are:
7311
7312@deftypevr {@code{fifo-listener-configuration} parameter} file-name path
7313The file name on which to listen.
7314@end deftypevr
7315
7316@deftypevr {@code{fifo-listener-configuration} parameter} string mode
7317The access mode for the socket.
7318Defaults to @samp{"0600"}.
7319@end deftypevr
7320
7321@deftypevr {@code{fifo-listener-configuration} parameter} string user
f9b9a033 7322The user to own the socket.
d8c18af8
AW
7323Defaults to @samp{""}.
7324@end deftypevr
7325
7326@deftypevr {@code{fifo-listener-configuration} parameter} string group
7327The group to own the socket.
7328Defaults to @samp{""}.
7329@end deftypevr
7330
7331
7332Available @code{inet-listener-configuration} fields are:
7333
7334@deftypevr {@code{inet-listener-configuration} parameter} string protocol
7335The protocol to listen for.
7336@end deftypevr
7337
7338@deftypevr {@code{inet-listener-configuration} parameter} string address
7339The address on which to listen, or empty for all addresses.
7340Defaults to @samp{""}.
7341@end deftypevr
7342
7343@deftypevr {@code{inet-listener-configuration} parameter} non-negative-integer port
7344The port on which to listen.
7345@end deftypevr
7346
7347@deftypevr {@code{inet-listener-configuration} parameter} boolean ssl?
7348Whether to use SSL for this service; @samp{yes}, @samp{no}, or
7349@samp{required}.
7350Defaults to @samp{#t}.
7351@end deftypevr
7352
7353@end deftypevr
7354
7355@deftypevr {@code{service-configuration} parameter} non-negative-integer service-count
7356Number of connections to handle before starting a new process.
7357Typically the only useful values are 0 (unlimited) or 1. 1 is more
7358secure, but 0 is faster. <doc/wiki/LoginProcess.txt>.
7359Defaults to @samp{1}.
7360@end deftypevr
7361
7362@deftypevr {@code{service-configuration} parameter} non-negative-integer process-min-avail
7363Number of processes to always keep waiting for more connections.
7364Defaults to @samp{0}.
7365@end deftypevr
7366
7367@deftypevr {@code{service-configuration} parameter} non-negative-integer vsz-limit
7368If you set @samp{service-count 0}, you probably need to grow
7369this.
7370Defaults to @samp{256000000}.
7371@end deftypevr
7372
7373@end deftypevr
7374
7375@deftypevr {@code{dovecot-configuration} parameter} dict-configuration dict
7376Dict configuration, as created by the @code{dict-configuration}
7377constructor.
7378
7379Available @code{dict-configuration} fields are:
7380
7381@deftypevr {@code{dict-configuration} parameter} free-form-fields entries
7382A list of key-value pairs that this dict should hold.
7383Defaults to @samp{()}.
7384@end deftypevr
7385
7386@end deftypevr
7387
7388@deftypevr {@code{dovecot-configuration} parameter} passdb-configuration-list passdbs
7389List of passdb configurations, each one created by the
7390@code{passdb-configuration} constructor.
7391
7392Available @code{passdb-configuration} fields are:
7393
7394@deftypevr {@code{passdb-configuration} parameter} string driver
7395The driver that the passdb should use. Valid values include
7396@samp{pam}, @samp{passwd}, @samp{shadow}, @samp{bsdauth}, and
7397@samp{static}.
7398Defaults to @samp{"pam"}.
7399@end deftypevr
7400
7401@deftypevr {@code{passdb-configuration} parameter} free-form-args args
7402A list of key-value args to the passdb driver.
7403Defaults to @samp{()}.
7404@end deftypevr
7405
7406@end deftypevr
7407
7408@deftypevr {@code{dovecot-configuration} parameter} userdb-configuration-list userdbs
7409List of userdb configurations, each one created by the
7410@code{userdb-configuration} constructor.
7411
7412Available @code{userdb-configuration} fields are:
7413
7414@deftypevr {@code{userdb-configuration} parameter} string driver
7415The driver that the userdb should use. Valid values include
7416@samp{passwd} and @samp{static}.
7417Defaults to @samp{"passwd"}.
7418@end deftypevr
7419
7420@deftypevr {@code{userdb-configuration} parameter} free-form-args args
7421A list of key-value args to the userdb driver.
7422Defaults to @samp{()}.
7423@end deftypevr
7424
7425@deftypevr {@code{userdb-configuration} parameter} free-form-args override-fields
7426Override fields from passwd.
7427Defaults to @samp{()}.
7428@end deftypevr
7429
7430@end deftypevr
7431
7432@deftypevr {@code{dovecot-configuration} parameter} plugin-configuration plugin-configuration
7433Plug-in configuration, created by the @code{plugin-configuration}
7434constructor.
7435@end deftypevr
7436
7437@deftypevr {@code{dovecot-configuration} parameter} list-of-namespace-configuration namespaces
7438List of namespaces. Each item in the list is created by the
7439@code{namespace-configuration} constructor.
7440
7441Available @code{namespace-configuration} fields are:
7442
7443@deftypevr {@code{namespace-configuration} parameter} string name
7444Name for this namespace.
7445@end deftypevr
7446
7447@deftypevr {@code{namespace-configuration} parameter} string type
7448Namespace type: @samp{private}, @samp{shared} or @samp{public}.
7449Defaults to @samp{"private"}.
7450@end deftypevr
7451
7452@deftypevr {@code{namespace-configuration} parameter} string separator
7453Hierarchy separator to use. You should use the same separator for
7454all namespaces or some clients get confused. @samp{/} is usually a good
7455one. The default however depends on the underlying mail storage
7456format.
7457Defaults to @samp{""}.
7458@end deftypevr
7459
7460@deftypevr {@code{namespace-configuration} parameter} string prefix
7461Prefix required to access this namespace. This needs to be
7462different for all namespaces. For example @samp{Public/}.
7463Defaults to @samp{""}.
7464@end deftypevr
7465
7466@deftypevr {@code{namespace-configuration} parameter} string location
7467Physical location of the mailbox. This is in same format as
7468mail_location, which is also the default for it.
7469Defaults to @samp{""}.
7470@end deftypevr
7471
7472@deftypevr {@code{namespace-configuration} parameter} boolean inbox?
7473There can be only one INBOX, and this setting defines which
7474namespace has it.
7475Defaults to @samp{#f}.
7476@end deftypevr
7477
7478@deftypevr {@code{namespace-configuration} parameter} boolean hidden?
7479If namespace is hidden, it's not advertised to clients via NAMESPACE
7480extension. You'll most likely also want to set @samp{list? #f}. This is mostly
7481useful when converting from another server with different namespaces
7482which you want to deprecate but still keep working. For example you can
7483create hidden namespaces with prefixes @samp{~/mail/}, @samp{~%u/mail/}
7484and @samp{mail/}.
7485Defaults to @samp{#f}.
7486@end deftypevr
7487
7488@deftypevr {@code{namespace-configuration} parameter} boolean list?
7489Show the mailboxes under this namespace with LIST command. This
7490makes the namespace visible for clients that don't support NAMESPACE
7491extension. The special @code{children} value lists child mailboxes, but
7492hides the namespace prefix.
7493Defaults to @samp{#t}.
7494@end deftypevr
7495
7496@deftypevr {@code{namespace-configuration} parameter} boolean subscriptions?
7497Namespace handles its own subscriptions. If set to @code{#f}, the
7498parent namespace handles them. The empty prefix should always have this
7499as @code{#t}.)
7500Defaults to @samp{#t}.
7501@end deftypevr
7502
7503@deftypevr {@code{namespace-configuration} parameter} mailbox-configuration-list mailboxes
7504List of predefined mailboxes in this namespace.
7505Defaults to @samp{()}.
7506
7507Available @code{mailbox-configuration} fields are:
7508
7509@deftypevr {@code{mailbox-configuration} parameter} string name
7510Name for this mailbox.
7511@end deftypevr
7512
7513@deftypevr {@code{mailbox-configuration} parameter} string auto
7514@samp{create} will automatically create this mailbox.
7515@samp{subscribe} will both create and subscribe to the mailbox.
7516Defaults to @samp{"no"}.
7517@end deftypevr
7518
7519@deftypevr {@code{mailbox-configuration} parameter} space-separated-string-list special-use
7520List of IMAP @code{SPECIAL-USE} attributes as specified by RFC 6154.
7521Valid values are @code{\All}, @code{\Archive}, @code{\Drafts},
7522@code{\Flagged}, @code{\Junk}, @code{\Sent}, and @code{\Trash}.
7523Defaults to @samp{()}.
7524@end deftypevr
7525
7526@end deftypevr
7527
7528@end deftypevr
7529
7530@deftypevr {@code{dovecot-configuration} parameter} file-name base-dir
7531Base directory where to store runtime data.
7532Defaults to @samp{"/var/run/dovecot/"}.
7533@end deftypevr
7534
7535@deftypevr {@code{dovecot-configuration} parameter} string login-greeting
7536Greeting message for clients.
7537Defaults to @samp{"Dovecot ready."}.
7538@end deftypevr
7539
7540@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-trusted-networks
7541List of trusted network ranges. Connections from these IPs are
7542allowed to override their IP addresses and ports (for logging and for
7543authentication checks). @samp{disable-plaintext-auth} is also ignored
7544for these networks. Typically you'd specify your IMAP proxy servers
7545here.
7546Defaults to @samp{()}.
7547@end deftypevr
7548
7549@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-access-sockets
7550List of login access check sockets (e.g. tcpwrap).
7551Defaults to @samp{()}.
7552@end deftypevr
7553
7554@deftypevr {@code{dovecot-configuration} parameter} boolean verbose-proctitle?
7555Show more verbose process titles (in ps). Currently shows user name
7556and IP address. Useful for seeing who are actually using the IMAP
7557processes (e.g. shared mailboxes or if same uid is used for multiple
7558accounts).
7559Defaults to @samp{#f}.
7560@end deftypevr
7561
7562@deftypevr {@code{dovecot-configuration} parameter} boolean shutdown-clients?
7563Should all processes be killed when Dovecot master process shuts down.
7564Setting this to @code{#f} means that Dovecot can be upgraded without
7565forcing existing client connections to close (although that could also
7566be a problem if the upgrade is e.g. because of a security fix).
7567Defaults to @samp{#t}.
7568@end deftypevr
7569
7570@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer doveadm-worker-count
7571If non-zero, run mail commands via this many connections to doveadm
7572server, instead of running them directly in the same process.
7573Defaults to @samp{0}.
7574@end deftypevr
7575
7576@deftypevr {@code{dovecot-configuration} parameter} string doveadm-socket-path
7577UNIX socket or host:port used for connecting to doveadm server.
7578Defaults to @samp{"doveadm-server"}.
7579@end deftypevr
7580
7581@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list import-environment
7582List of environment variables that are preserved on Dovecot startup
7583and passed down to all of its child processes. You can also give
7584key=value pairs to always set specific settings.
7585@end deftypevr
7586
7587@deftypevr {@code{dovecot-configuration} parameter} boolean disable-plaintext-auth?
7588Disable LOGIN command and all other plaintext authentications unless
7589SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
7590matches the local IP (i.e. you're connecting from the same computer),
7591the connection is considered secure and plaintext authentication is
7592allowed. See also ssl=required setting.
7593Defaults to @samp{#t}.
7594@end deftypevr
7595
7596@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-cache-size
7597Authentication cache size (e.g. @samp{#e10e6}). 0 means it's disabled.
7598Note that bsdauth, PAM and vpopmail require @samp{cache-key} to be set
7599for caching to be used.
7600Defaults to @samp{0}.
7601@end deftypevr
7602
7603@deftypevr {@code{dovecot-configuration} parameter} string auth-cache-ttl
7604Time to live for cached data. After TTL expires the cached record
7605is no longer used, *except* if the main database lookup returns internal
7606failure. We also try to handle password changes automatically: If
7607user's previous authentication was successful, but this one wasn't, the
7608cache isn't used. For now this works only with plaintext
7609authentication.
7610Defaults to @samp{"1 hour"}.
7611@end deftypevr
7612
7613@deftypevr {@code{dovecot-configuration} parameter} string auth-cache-negative-ttl
7614TTL for negative hits (user not found, password mismatch).
76150 disables caching them completely.
7616Defaults to @samp{"1 hour"}.
7617@end deftypevr
7618
7619@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-realms
7620List of realms for SASL authentication mechanisms that need them.
7621You can leave it empty if you don't want to support multiple realms.
7622Many clients simply use the first one listed here, so keep the default
7623realm first.
7624Defaults to @samp{()}.
7625@end deftypevr
7626
7627@deftypevr {@code{dovecot-configuration} parameter} string auth-default-realm
7628Default realm/domain to use if none was specified. This is used for
7629both SASL realms and appending @@domain to username in plaintext
7630logins.
7631Defaults to @samp{""}.
7632@end deftypevr
7633
7634@deftypevr {@code{dovecot-configuration} parameter} string auth-username-chars
7635List of allowed characters in username. If the user-given username
7636contains a character not listed in here, the login automatically fails.
7637This is just an extra check to make sure user can't exploit any
7638potential quote escaping vulnerabilities with SQL/LDAP databases. If
7639you want to allow all characters, set this value to empty.
7640Defaults to @samp{"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@@"}.
7641@end deftypevr
7642
7643@deftypevr {@code{dovecot-configuration} parameter} string auth-username-translation
7644Username character translations before it's looked up from
7645databases. The value contains series of from -> to characters. For
7646example @samp{#@@/@@} means that @samp{#} and @samp{/} characters are
7647translated to @samp{@@}.
7648Defaults to @samp{""}.
7649@end deftypevr
7650
7651@deftypevr {@code{dovecot-configuration} parameter} string auth-username-format
7652Username formatting before it's looked up from databases. You can
7653use the standard variables here, e.g. %Lu would lowercase the username,
7654%n would drop away the domain if it was given, or @samp{%n-AT-%d} would
7655change the @samp{@@} into @samp{-AT-}. This translation is done after
7656@samp{auth-username-translation} changes.
7657Defaults to @samp{"%Lu"}.
7658@end deftypevr
7659
7660@deftypevr {@code{dovecot-configuration} parameter} string auth-master-user-separator
7661If you want to allow master users to log in by specifying the master
7662username within the normal username string (i.e. not using SASL
7663mechanism's support for it), you can specify the separator character
7664here. The format is then <username><separator><master username>.
7665UW-IMAP uses @samp{*} as the separator, so that could be a good
7666choice.
7667Defaults to @samp{""}.
7668@end deftypevr
7669
7670@deftypevr {@code{dovecot-configuration} parameter} string auth-anonymous-username
7671Username to use for users logging in with ANONYMOUS SASL
7672mechanism.
7673Defaults to @samp{"anonymous"}.
7674@end deftypevr
7675
7676@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-worker-max-count
7677Maximum number of dovecot-auth worker processes. They're used to
7678execute blocking passdb and userdb queries (e.g. MySQL and PAM).
7679They're automatically created and destroyed as needed.
7680Defaults to @samp{30}.
7681@end deftypevr
7682
7683@deftypevr {@code{dovecot-configuration} parameter} string auth-gssapi-hostname
7684Host name to use in GSSAPI principal names. The default is to use
7685the name returned by gethostname(). Use @samp{$ALL} (with quotes) to
7686allow all keytab entries.
7687Defaults to @samp{""}.
7688@end deftypevr
7689
7690@deftypevr {@code{dovecot-configuration} parameter} string auth-krb5-keytab
7691Kerberos keytab to use for the GSSAPI mechanism. Will use the
7692system default (usually /etc/krb5.keytab) if not specified. You may
7693need to change the auth service to run as root to be able to read this
7694file.
7695Defaults to @samp{""}.
7696@end deftypevr
7697
7698@deftypevr {@code{dovecot-configuration} parameter} boolean auth-use-winbind?
7699Do NTLM and GSS-SPNEGO authentication using Samba's winbind daemon
7700and @samp{ntlm-auth} helper.
7701<doc/wiki/Authentication/Mechanisms/Winbind.txt>.
7702Defaults to @samp{#f}.
7703@end deftypevr
7704
7705@deftypevr {@code{dovecot-configuration} parameter} file-name auth-winbind-helper-path
7706Path for Samba's @samp{ntlm-auth} helper binary.
7707Defaults to @samp{"/usr/bin/ntlm_auth"}.
7708@end deftypevr
7709
7710@deftypevr {@code{dovecot-configuration} parameter} string auth-failure-delay
7711Time to delay before replying to failed authentications.
7712Defaults to @samp{"2 secs"}.
7713@end deftypevr
7714
7715@deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-require-client-cert?
7716Require a valid SSL client certificate or the authentication
7717fails.
7718Defaults to @samp{#f}.
7719@end deftypevr
7720
7721@deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-username-from-cert?
7722Take the username from client's SSL certificate, using
7723@code{X509_NAME_get_text_by_NID()} which returns the subject's DN's
7724CommonName.
7725Defaults to @samp{#f}.
7726@end deftypevr
7727
7728@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-mechanisms
7729List of wanted authentication mechanisms. Supported mechanisms are:
7730@samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
7731@samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
7732@samp{otp}, @samp{skey}, and @samp{gss-spnego}. NOTE: See also
7733@samp{disable-plaintext-auth} setting.
7734@end deftypevr
7735
7736@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-servers
7737List of IPs or hostnames to all director servers, including ourself.
7738Ports can be specified as ip:port. The default port is the same as what
7739director service's @samp{inet-listener} is using.
7740Defaults to @samp{()}.
7741@end deftypevr
7742
7743@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-mail-servers
7744List of IPs or hostnames to all backend mail servers. Ranges are
7745allowed too, like 10.0.0.10-10.0.0.30.
7746Defaults to @samp{()}.
7747@end deftypevr
7748
7749@deftypevr {@code{dovecot-configuration} parameter} string director-user-expire
7750How long to redirect users to a specific server after it no longer
7751has any connections.
7752Defaults to @samp{"15 min"}.
7753@end deftypevr
7754
7755@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer director-doveadm-port
7756TCP/IP port that accepts doveadm connections (instead of director
7757connections) If you enable this, you'll also need to add
7758@samp{inet-listener} for the port.
7759Defaults to @samp{0}.
7760@end deftypevr
7761
7762@deftypevr {@code{dovecot-configuration} parameter} string director-username-hash
7763How the username is translated before being hashed. Useful values
7764include %Ln if user can log in with or without @@domain, %Ld if mailboxes
7765are shared within domain.
7766Defaults to @samp{"%Lu"}.
7767@end deftypevr
7768
7769@deftypevr {@code{dovecot-configuration} parameter} string log-path
7770Log file to use for error messages. @samp{syslog} logs to syslog,
7771@samp{/dev/stderr} logs to stderr.
7772Defaults to @samp{"syslog"}.
7773@end deftypevr
7774
7775@deftypevr {@code{dovecot-configuration} parameter} string info-log-path
7776Log file to use for informational messages. Defaults to
7777@samp{log-path}.
7778Defaults to @samp{""}.
7779@end deftypevr
7780
7781@deftypevr {@code{dovecot-configuration} parameter} string debug-log-path
7782Log file to use for debug messages. Defaults to
7783@samp{info-log-path}.
7784Defaults to @samp{""}.
7785@end deftypevr
7786
7787@deftypevr {@code{dovecot-configuration} parameter} string syslog-facility
7788Syslog facility to use if you're logging to syslog. Usually if you
7789don't want to use @samp{mail}, you'll use local0..local7. Also other
7790standard facilities are supported.
7791Defaults to @samp{"mail"}.
7792@end deftypevr
7793
7794@deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose?
7795Log unsuccessful authentication attempts and the reasons why they
7796failed.
7797Defaults to @samp{#f}.
7798@end deftypevr
7799
7800@deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose-passwords?
7801In case of password mismatches, log the attempted password. Valid
7802values are no, plain and sha1. sha1 can be useful for detecting brute
7803force password attempts vs. user simply trying the same password over
7804and over again. You can also truncate the value to n chars by appending
7805":n" (e.g. sha1:6).
7806Defaults to @samp{#f}.
7807@end deftypevr
7808
7809@deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug?
7810Even more verbose logging for debugging purposes. Shows for example
7811SQL queries.
7812Defaults to @samp{#f}.
7813@end deftypevr
7814
7815@deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug-passwords?
7816In case of password mismatches, log the passwords and used scheme so
7817the problem can be debugged. Enabling this also enables
7818@samp{auth-debug}.
7819Defaults to @samp{#f}.
7820@end deftypevr
7821
7822@deftypevr {@code{dovecot-configuration} parameter} boolean mail-debug?
7823Enable mail process debugging. This can help you figure out why
7824Dovecot isn't finding your mails.
7825Defaults to @samp{#f}.
7826@end deftypevr
7827
7828@deftypevr {@code{dovecot-configuration} parameter} boolean verbose-ssl?
7829Show protocol level SSL errors.
7830Defaults to @samp{#f}.
7831@end deftypevr
7832
7833@deftypevr {@code{dovecot-configuration} parameter} string log-timestamp
7834Prefix for each line written to log file. % codes are in
7835strftime(3) format.
7836Defaults to @samp{"\"%b %d %H:%M:%S \""}.
7837@end deftypevr
7838
7839@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-log-format-elements
7840List of elements we want to log. The elements which have a
7841non-empty variable value are joined together to form a comma-separated
7842string.
7843@end deftypevr
7844
7845@deftypevr {@code{dovecot-configuration} parameter} string login-log-format
7846Login log format. %s contains @samp{login-log-format-elements}
7847string, %$ contains the data we want to log.
7848Defaults to @samp{"%$: %s"}.
7849@end deftypevr
7850
7851@deftypevr {@code{dovecot-configuration} parameter} string mail-log-prefix
7852Log prefix for mail processes. See doc/wiki/Variables.txt for list
7853of possible variables you can use.
7854Defaults to @samp{"\"%s(%u): \""}.
7855@end deftypevr
7856
7857@deftypevr {@code{dovecot-configuration} parameter} string deliver-log-format
7858Format to use for logging mail deliveries. You can use variables:
7859@table @code
7860@item %$
7861Delivery status message (e.g. @samp{saved to INBOX})
7862@item %m
7863Message-ID
7864@item %s
7865Subject
7866@item %f
7867From address
7868@item %p
7869Physical size
7870@item %w
7871Virtual size.
7872@end table
7873Defaults to @samp{"msgid=%m: %$"}.
7874@end deftypevr
7875
7876@deftypevr {@code{dovecot-configuration} parameter} string mail-location
7877Location for users' mailboxes. The default is empty, which means
7878that Dovecot tries to find the mailboxes automatically. This won't work
7879if the user doesn't yet have any mail, so you should explicitly tell
7880Dovecot the full location.
7881
7882If you're using mbox, giving a path to the INBOX
7883file (e.g. /var/mail/%u) isn't enough. You'll also need to tell Dovecot
7884where the other mailboxes are kept. This is called the "root mail
7885directory", and it must be the first path given in the
7886@samp{mail-location} setting.
7887
7888There are a few special variables you can use, eg.:
7889
7890@table @samp
7891@item %u
7892username
7893@item %n
7894user part in user@@domain, same as %u if there's no domain
7895@item %d
7896domain part in user@@domain, empty if there's no domain
7897@item %h
7898home director
7899@end table
7900
7901See doc/wiki/Variables.txt for full list. Some examples:
7902@table @samp
7903@item maildir:~/Maildir
7904@item mbox:~/mail:INBOX=/var/mail/%u
7905@item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
7906@end table
7907Defaults to @samp{""}.
7908@end deftypevr
7909
7910@deftypevr {@code{dovecot-configuration} parameter} string mail-uid
7911System user and group used to access mails. If you use multiple,
7912userdb can override these by returning uid or gid fields. You can use
7913either numbers or names. <doc/wiki/UserIds.txt>.
7914Defaults to @samp{""}.
7915@end deftypevr
7916
7917@deftypevr {@code{dovecot-configuration} parameter} string mail-gid
7918
7919Defaults to @samp{""}.
7920@end deftypevr
7921
7922@deftypevr {@code{dovecot-configuration} parameter} string mail-privileged-group
7923Group to enable temporarily for privileged operations. Currently
7924this is used only with INBOX when either its initial creation or
7925dotlocking fails. Typically this is set to "mail" to give access to
7926/var/mail.
7927Defaults to @samp{""}.
7928@end deftypevr
7929
7930@deftypevr {@code{dovecot-configuration} parameter} string mail-access-groups
7931Grant access to these supplementary groups for mail processes.
7932Typically these are used to set up access to shared mailboxes. Note
7933that it may be dangerous to set these if users can create
7934symlinks (e.g. if "mail" group is set here, ln -s /var/mail ~/mail/var
7935could allow a user to delete others' mailboxes, or ln -s
7936/secret/shared/box ~/mail/mybox would allow reading it).
7937Defaults to @samp{""}.
7938@end deftypevr
7939
7940@deftypevr {@code{dovecot-configuration} parameter} boolean mail-full-filesystem-access?
7941Allow full filesystem access to clients. There's no access checks
7942other than what the operating system does for the active UID/GID. It
7943works with both maildir and mboxes, allowing you to prefix mailboxes
7944names with e.g. /path/ or ~user/.
7945Defaults to @samp{#f}.
7946@end deftypevr
7947
7948@deftypevr {@code{dovecot-configuration} parameter} boolean mmap-disable?
7949Don't use mmap() at all. This is required if you store indexes to
7950shared filesystems (NFS or clustered filesystem).
7951Defaults to @samp{#f}.
7952@end deftypevr
7953
7954@deftypevr {@code{dovecot-configuration} parameter} boolean dotlock-use-excl?
7955Rely on @samp{O_EXCL} to work when creating dotlock files. NFS
7956supports @samp{O_EXCL} since version 3, so this should be safe to use
7957nowadays by default.
7958Defaults to @samp{#t}.
7959@end deftypevr
7960
7961@deftypevr {@code{dovecot-configuration} parameter} string mail-fsync
7962When to use fsync() or fdatasync() calls:
7963@table @code
7964@item optimized
7965Whenever necessary to avoid losing important data
7966@item always
7967Useful with e.g. NFS when write()s are delayed
7968@item never
7969Never use it (best performance, but crashes can lose data).
7970@end table
7971Defaults to @samp{"optimized"}.
7972@end deftypevr
7973
7974@deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-storage?
7975Mail storage exists in NFS. Set this to yes to make Dovecot flush
7976NFS caches whenever needed. If you're using only a single mail server
7977this isn't needed.
7978Defaults to @samp{#f}.
7979@end deftypevr
7980
7981@deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-index?
7982Mail index files also exist in NFS. Setting this to yes requires
7983@samp{mmap-disable? #t} and @samp{fsync-disable? #f}.
7984Defaults to @samp{#f}.
7985@end deftypevr
7986
7987@deftypevr {@code{dovecot-configuration} parameter} string lock-method
7988Locking method for index files. Alternatives are fcntl, flock and
7989dotlock. Dotlocking uses some tricks which may create more disk I/O
7990than other locking methods. NFS users: flock doesn't work, remember to
7991change @samp{mmap-disable}.
7992Defaults to @samp{"fcntl"}.
7993@end deftypevr
7994
7995@deftypevr {@code{dovecot-configuration} parameter} file-name mail-temp-dir
7996Directory in which LDA/LMTP temporarily stores incoming mails >128
7997kB.
7998Defaults to @samp{"/tmp"}.
7999@end deftypevr
8000
8001@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-uid
8002Valid UID range for users. This is mostly to make sure that users can't
8003log in as daemons or other system users. Note that denying root logins is
8004hardcoded to dovecot binary and can't be done even if @samp{first-valid-uid}
8005is set to 0.
8006Defaults to @samp{500}.
8007@end deftypevr
8008
8009@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-uid
8010
8011Defaults to @samp{0}.
8012@end deftypevr
8013
8014@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-gid
8015Valid GID range for users. Users having non-valid GID as primary group ID
8016aren't allowed to log in. If user belongs to supplementary groups with
8017non-valid GIDs, those groups are not set.
8018Defaults to @samp{1}.
8019@end deftypevr
8020
8021@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-gid
8022
8023Defaults to @samp{0}.
8024@end deftypevr
8025
8026@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-max-keyword-length
8027Maximum allowed length for mail keyword name. It's only forced when
8028trying to create new keywords.
8029Defaults to @samp{50}.
8030@end deftypevr
8031
8032@deftypevr {@code{dovecot-configuration} parameter} colon-separated-file-name-list valid-chroot-dirs
8033List of directories under which chrooting is allowed for mail
8034processes (i.e. /var/mail will allow chrooting to /var/mail/foo/bar
8035too). This setting doesn't affect @samp{login-chroot}
8036@samp{mail-chroot} or auth chroot settings. If this setting is empty,
8037"/./" in home dirs are ignored. WARNING: Never add directories here
8038which local users can modify, that may lead to root exploit. Usually
8039this should be done only if you don't allow shell access for users.
8040<doc/wiki/Chrooting.txt>.
8041Defaults to @samp{()}.
8042@end deftypevr
8043
8044@deftypevr {@code{dovecot-configuration} parameter} string mail-chroot
8045Default chroot directory for mail processes. This can be overridden
8046for specific users in user database by giving /./ in user's home
8047directory (e.g. /home/./user chroots into /home). Note that usually
8048there is no real need to do chrooting, Dovecot doesn't allow users to
8049access files outside their mail directory anyway. If your home
8050directories are prefixed with the chroot directory, append "/." to
8051@samp{mail-chroot}. <doc/wiki/Chrooting.txt>.
8052Defaults to @samp{""}.
8053@end deftypevr
8054
8055@deftypevr {@code{dovecot-configuration} parameter} file-name auth-socket-path
8056UNIX socket path to master authentication server to find users.
8057This is used by imap (for shared users) and lda.
8058Defaults to @samp{"/var/run/dovecot/auth-userdb"}.
8059@end deftypevr
8060
8061@deftypevr {@code{dovecot-configuration} parameter} file-name mail-plugin-dir
8062Directory where to look up mail plugins.
8063Defaults to @samp{"/usr/lib/dovecot"}.
8064@end deftypevr
8065
8066@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mail-plugins
8067List of plugins to load for all services. Plugins specific to IMAP,
8068LDA, etc. are added to this list in their own .conf files.
8069Defaults to @samp{()}.
8070@end deftypevr
8071
8072@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-cache-min-mail-count
8073The minimum number of mails in a mailbox before updates are done to
8074cache file. This allows optimizing Dovecot's behavior to do less disk
8075writes at the cost of more disk reads.
8076Defaults to @samp{0}.
8077@end deftypevr
8078
8079@deftypevr {@code{dovecot-configuration} parameter} string mailbox-idle-check-interval
8080When IDLE command is running, mailbox is checked once in a while to
8081see if there are any new mails or other changes. This setting defines
8082the minimum time to wait between those checks. Dovecot can also use
8083dnotify, inotify and kqueue to find out immediately when changes
8084occur.
8085Defaults to @samp{"30 secs"}.
8086@end deftypevr
8087
8088@deftypevr {@code{dovecot-configuration} parameter} boolean mail-save-crlf?
8089Save mails with CR+LF instead of plain LF. This makes sending those
8090mails take less CPU, especially with sendfile() syscall with Linux and
8091FreeBSD. But it also creates a bit more disk I/O which may just make it
8092slower. Also note that if other software reads the mboxes/maildirs,
8093they may handle the extra CRs wrong and cause problems.
8094Defaults to @samp{#f}.
8095@end deftypevr
8096
8097@deftypevr {@code{dovecot-configuration} parameter} boolean maildir-stat-dirs?
8098By default LIST command returns all entries in maildir beginning
8099with a dot. Enabling this option makes Dovecot return only entries
8100which are directories. This is done by stat()ing each entry, so it
8101causes more disk I/O.
8102 (For systems setting struct @samp{dirent->d_type} this check is free
8103and it's done always regardless of this setting).
8104Defaults to @samp{#f}.
8105@end deftypevr
8106
8107@deftypevr {@code{dovecot-configuration} parameter} boolean maildir-copy-with-hardlinks?
8108When copying a message, do it with hard links whenever possible.
8109This makes the performance much better, and it's unlikely to have any
8110side effects.
8111Defaults to @samp{#t}.
8112@end deftypevr
8113
8114@deftypevr {@code{dovecot-configuration} parameter} boolean maildir-very-dirty-syncs?
8115Assume Dovecot is the only MUA accessing Maildir: Scan cur/
8116directory only when its mtime changes unexpectedly or when we can't find
8117the mail otherwise.
8118Defaults to @samp{#f}.
8119@end deftypevr
8120
8121@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-read-locks
8122Which locking methods to use for locking mbox. There are four
8123available:
8124
8125@table @code
8126@item dotlock
8127Create <mailbox>.lock file. This is the oldest and most NFS-safe
8128solution. If you want to use /var/mail/ like directory, the users will
8129need write access to that directory.
8130@item dotlock-try
8131Same as dotlock, but if it fails because of permissions or because there
8132isn't enough disk space, just skip it.
8133@item fcntl
8134Use this if possible. Works with NFS too if lockd is used.
8135@item flock
8136May not exist in all systems. Doesn't work with NFS.
8137@item lockf
8138May not exist in all systems. Doesn't work with NFS.
8139@end table
8140
8141You can use multiple locking methods; if you do the order they're declared
8142in is important to avoid deadlocks if other MTAs/MUAs are using multiple
8143locking methods as well. Some operating systems don't allow using some of
8144them simultaneously.
8145@end deftypevr
8146
8147@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-write-locks
8148
8149@end deftypevr
8150
8151@deftypevr {@code{dovecot-configuration} parameter} string mbox-lock-timeout
8152Maximum time to wait for lock (all of them) before aborting.
8153Defaults to @samp{"5 mins"}.
8154@end deftypevr
8155
8156@deftypevr {@code{dovecot-configuration} parameter} string mbox-dotlock-change-timeout
8157If dotlock exists but the mailbox isn't modified in any way,
8158override the lock file after this much time.
8159Defaults to @samp{"2 mins"}.
8160@end deftypevr
8161
8162@deftypevr {@code{dovecot-configuration} parameter} boolean mbox-dirty-syncs?
8163When mbox changes unexpectedly we have to fully read it to find out
8164what changed. If the mbox is large this can take a long time. Since
8165the change is usually just a newly appended mail, it'd be faster to
8166simply read the new mails. If this setting is enabled, Dovecot does
8167this but still safely fallbacks to re-reading the whole mbox file
8168whenever something in mbox isn't how it's expected to be. The only real
8169downside to this setting is that if some other MUA changes message
8170flags, Dovecot doesn't notice it immediately. Note that a full sync is
8171done with SELECT, EXAMINE, EXPUNGE and CHECK commands.
8172Defaults to @samp{#t}.
8173@end deftypevr
8174
8175@deftypevr {@code{dovecot-configuration} parameter} boolean mbox-very-dirty-syncs?
8176Like @samp{mbox-dirty-syncs}, but don't do full syncs even with SELECT,
8177EXAMINE, EXPUNGE or CHECK commands. If this is set,
8178@samp{mbox-dirty-syncs} is ignored.
8179Defaults to @samp{#f}.
8180@end deftypevr
8181
8182@deftypevr {@code{dovecot-configuration} parameter} boolean mbox-lazy-writes?
8183Delay writing mbox headers until doing a full write sync (EXPUNGE
8184and CHECK commands and when closing the mailbox). This is especially
8185useful for POP3 where clients often delete all mails. The downside is
8186that our changes aren't immediately visible to other MUAs.
8187Defaults to @samp{#t}.
8188@end deftypevr
8189
8190@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mbox-min-index-size
8191If mbox size is smaller than this (e.g. 100k), don't write index
8192files. If an index file already exists it's still read, just not
8193updated.
8194Defaults to @samp{0}.
8195@end deftypevr
8196
8197@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mdbox-rotate-size
8198Maximum dbox file size until it's rotated.
8199Defaults to @samp{2000000}.
8200@end deftypevr
8201
8202@deftypevr {@code{dovecot-configuration} parameter} string mdbox-rotate-interval
8203Maximum dbox file age until it's rotated. Typically in days. Day
8204begins from midnight, so 1d = today, 2d = yesterday, etc. 0 = check
8205disabled.
8206Defaults to @samp{"1d"}.
8207@end deftypevr
8208
8209@deftypevr {@code{dovecot-configuration} parameter} boolean mdbox-preallocate-space?
8210When creating new mdbox files, immediately preallocate their size to
8211@samp{mdbox-rotate-size}. This setting currently works only in Linux
8212with some filesystems (ext4, xfs).
8213Defaults to @samp{#f}.
8214@end deftypevr
8215
8216@deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-dir
8217sdbox and mdbox support saving mail attachments to external files,
8218which also allows single instance storage for them. Other backends
8219don't support this for now.
8220
8221WARNING: This feature hasn't been tested much yet. Use at your own risk.
8222
8223Directory root where to store mail attachments. Disabled, if empty.
8224Defaults to @samp{""}.
8225@end deftypevr
8226
8227@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-attachment-min-size
8228Attachments smaller than this aren't saved externally. It's also
8229possible to write a plugin to disable saving specific attachments
8230externally.
8231Defaults to @samp{128000}.
8232@end deftypevr
8233
8234@deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-fs
8235Filesystem backend to use for saving attachments:
8236@table @code
8237@item posix
8238No SiS done by Dovecot (but this might help FS's own deduplication)
8239@item sis posix
8240SiS with immediate byte-by-byte comparison during saving
8241@item sis-queue posix
8242SiS with delayed comparison and deduplication.
8243@end table
8244Defaults to @samp{"sis posix"}.
8245@end deftypevr
8246
8247@deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-hash
8248Hash format to use in attachment filenames. You can add any text and
8249variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}},
8250@code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}. Variables can be
8251truncated, e.g. @code{%@{sha256:80@}} returns only first 80 bits.
8252Defaults to @samp{"%@{sha1@}"}.
8253@end deftypevr
8254
8255@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-process-limit
8256
8257Defaults to @samp{100}.
8258@end deftypevr
8259
8260@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-client-limit
8261
8262Defaults to @samp{1000}.
8263@end deftypevr
8264
8265@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-vsz-limit
8266Default VSZ (virtual memory size) limit for service processes.
8267This is mainly intended to catch and kill processes that leak memory
8268before they eat up everything.
8269Defaults to @samp{256000000}.
8270@end deftypevr
8271
8272@deftypevr {@code{dovecot-configuration} parameter} string default-login-user
8273Login user is internally used by login processes. This is the most
8274untrusted user in Dovecot system. It shouldn't have access to anything
8275at all.
8276Defaults to @samp{"dovenull"}.
8277@end deftypevr
8278
8279@deftypevr {@code{dovecot-configuration} parameter} string default-internal-user
8280Internal user is used by unprivileged processes. It should be
8281separate from login user, so that login processes can't disturb other
8282processes.
8283Defaults to @samp{"dovecot"}.
8284@end deftypevr
8285
8286@deftypevr {@code{dovecot-configuration} parameter} string ssl?
8287SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>.
8288Defaults to @samp{"required"}.
8289@end deftypevr
8290
8291@deftypevr {@code{dovecot-configuration} parameter} string ssl-cert
8292PEM encoded X.509 SSL/TLS certificate (public key).
8293Defaults to @samp{"</etc/dovecot/default.pem"}.
8294@end deftypevr
8295
8296@deftypevr {@code{dovecot-configuration} parameter} string ssl-key
8297PEM encoded SSL/TLS private key. The key is opened before
8298dropping root privileges, so keep the key file unreadable by anyone but
8299root.
8300Defaults to @samp{"</etc/dovecot/private/default.pem"}.
8301@end deftypevr
8302
8303@deftypevr {@code{dovecot-configuration} parameter} string ssl-key-password
8304If key file is password protected, give the password here.
8305Alternatively give it when starting dovecot with -p parameter. Since
8306this file is often world-readable, you may want to place this setting
8307instead to a different.
8308Defaults to @samp{""}.
8309@end deftypevr
8310
8311@deftypevr {@code{dovecot-configuration} parameter} string ssl-ca
8312PEM encoded trusted certificate authority. Set this only if you
8313intend to use @samp{ssl-verify-client-cert? #t}. The file should
8314contain the CA certificate(s) followed by the matching
8315CRL(s). (e.g. @samp{ssl-ca </etc/ssl/certs/ca.pem}).
8316Defaults to @samp{""}.
8317@end deftypevr
8318
8319@deftypevr {@code{dovecot-configuration} parameter} boolean ssl-require-crl?
8320Require that CRL check succeeds for client certificates.
8321Defaults to @samp{#t}.
8322@end deftypevr
8323
8324@deftypevr {@code{dovecot-configuration} parameter} boolean ssl-verify-client-cert?
8325Request client to send a certificate. If you also want to require
8326it, set @samp{auth-ssl-require-client-cert? #t} in auth section.
8327Defaults to @samp{#f}.
8328@end deftypevr
8329
8330@deftypevr {@code{dovecot-configuration} parameter} string ssl-cert-username-field
8331Which field from certificate to use for username. commonName and
8332x500UniqueIdentifier are the usual choices. You'll also need to set
8333@samp{auth-ssl-username-from-cert? #t}.
8334Defaults to @samp{"commonName"}.
8335@end deftypevr
8336
8337@deftypevr {@code{dovecot-configuration} parameter} hours ssl-parameters-regenerate
8338How often to regenerate the SSL parameters file. Generation is
8339quite CPU intensive operation. The value is in hours, 0 disables
8340regeneration entirely.
8341Defaults to @samp{168}.
8342@end deftypevr
8343
8344@deftypevr {@code{dovecot-configuration} parameter} string ssl-protocols
8345SSL protocols to use.
8346Defaults to @samp{"!SSLv2"}.
8347@end deftypevr
8348
8349@deftypevr {@code{dovecot-configuration} parameter} string ssl-cipher-list
8350SSL ciphers to use.
8351Defaults to @samp{"ALL:!LOW:!SSLv2:!EXP:!aNULL"}.
8352@end deftypevr
8353
8354@deftypevr {@code{dovecot-configuration} parameter} string ssl-crypto-device
8355SSL crypto device to use, for valid values run "openssl engine".
8356Defaults to @samp{""}.
8357@end deftypevr
8358
8359@deftypevr {@code{dovecot-configuration} parameter} string postmaster-address
8360Address to use when sending rejection mails.
8361Default is postmaster@@<your domain>. %d expands to recipient domain.
8362Defaults to @samp{""}.
8363@end deftypevr
8364
8365@deftypevr {@code{dovecot-configuration} parameter} string hostname
8366Hostname to use in various parts of sent mails (e.g. in Message-Id)
8367and in LMTP replies. Default is the system's real hostname@@domain.
8368Defaults to @samp{""}.
8369@end deftypevr
8370
8371@deftypevr {@code{dovecot-configuration} parameter} boolean quota-full-tempfail?
8372If user is over quota, return with temporary failure instead of
8373bouncing the mail.
8374Defaults to @samp{#f}.
8375@end deftypevr
8376
8377@deftypevr {@code{dovecot-configuration} parameter} file-name sendmail-path
8378Binary to use for sending mails.
8379Defaults to @samp{"/usr/sbin/sendmail"}.
8380@end deftypevr
8381
8382@deftypevr {@code{dovecot-configuration} parameter} string submission-host
8383If non-empty, send mails via this SMTP host[:port] instead of
8384sendmail.
8385Defaults to @samp{""}.
8386@end deftypevr
8387
8388@deftypevr {@code{dovecot-configuration} parameter} string rejection-subject
8389Subject: header to use for rejection mails. You can use the same
8390variables as for @samp{rejection-reason} below.
8391Defaults to @samp{"Rejected: %s"}.
8392@end deftypevr
8393
8394@deftypevr {@code{dovecot-configuration} parameter} string rejection-reason
8395Human readable error message for rejection mails. You can use
8396variables:
8397
8398@table @code
8399@item %n
8400CRLF
8401@item %r
8402reason
8403@item %s
8404original subject
8405@item %t
8406recipient
8407@end table
8408Defaults to @samp{"Your message to <%t> was automatically rejected:%n%r"}.
8409@end deftypevr
8410
8411@deftypevr {@code{dovecot-configuration} parameter} string recipient-delimiter
8412Delimiter character between local-part and detail in email
8413address.
8414Defaults to @samp{"+"}.
8415@end deftypevr
8416
8417@deftypevr {@code{dovecot-configuration} parameter} string lda-original-recipient-header
8418Header where the original recipient address (SMTP's RCPT TO:
8419address) is taken from if not available elsewhere. With dovecot-lda -a
8420parameter overrides this. A commonly used header for this is
8421X-Original-To.
8422Defaults to @samp{""}.
8423@end deftypevr
8424
8425@deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autocreate?
8426Should saving a mail to a nonexistent mailbox automatically create
8427it?.
8428Defaults to @samp{#f}.
8429@end deftypevr
8430
8431@deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autosubscribe?
8432Should automatically created mailboxes be also automatically
8433subscribed?.
8434Defaults to @samp{#f}.
8435@end deftypevr
8436
8437@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer imap-max-line-length
8438Maximum IMAP command line length. Some clients generate very long
8439command lines with huge mailboxes, so you may need to raise this if you
8440get "Too long argument" or "IMAP command line too large" errors
8441often.
8442Defaults to @samp{64000}.
8443@end deftypevr
8444
8445@deftypevr {@code{dovecot-configuration} parameter} string imap-logout-format
8446IMAP logout format string:
8447@table @code
8448@item %i
8449total number of bytes read from client
8450@item %o
8451total number of bytes sent to client.
8452@end table
8453Defaults to @samp{"in=%i out=%o"}.
8454@end deftypevr
8455
8456@deftypevr {@code{dovecot-configuration} parameter} string imap-capability
8457Override the IMAP CAPABILITY response. If the value begins with '+',
8458add the given capabilities on top of the defaults (e.g. +XFOO XBAR).
8459Defaults to @samp{""}.
8460@end deftypevr
8461
8462@deftypevr {@code{dovecot-configuration} parameter} string imap-idle-notify-interval
8463How long to wait between "OK Still here" notifications when client
8464is IDLEing.
8465Defaults to @samp{"2 mins"}.
8466@end deftypevr
8467
8468@deftypevr {@code{dovecot-configuration} parameter} string imap-id-send
8469ID field names and values to send to clients. Using * as the value
8470makes Dovecot use the default value. The following fields have default
8471values currently: name, version, os, os-version, support-url,
8472support-email.
8473Defaults to @samp{""}.
8474@end deftypevr
8475
8476@deftypevr {@code{dovecot-configuration} parameter} string imap-id-log
8477ID fields sent by client to log. * means everything.
8478Defaults to @samp{""}.
8479@end deftypevr
8480
8481@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list imap-client-workarounds
8482Workarounds for various client bugs:
8483
8484@table @code
8485@item delay-newmail
8486Send EXISTS/RECENT new mail notifications only when replying to NOOP and
8487CHECK commands. Some clients ignore them otherwise, for example OSX
8488Mail (<v2.1). Outlook Express breaks more badly though, without this it
8489may show user "Message no longer in server" errors. Note that OE6
8490still breaks even with this workaround if synchronization is set to
8491"Headers Only".
8492
8493@item tb-extra-mailbox-sep
8494Thunderbird gets somehow confused with LAYOUT=fs (mbox and dbox) and
8495adds extra @samp{/} suffixes to mailbox names. This option causes Dovecot to
8496ignore the extra @samp{/} instead of treating it as invalid mailbox name.
8497
8498@item tb-lsub-flags
8499Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g. mbox).
8500This makes Thunderbird realize they aren't selectable and show them
8501greyed out, instead of only later giving "not selectable" popup error.
8502@end table
8503Defaults to @samp{()}.
8504@end deftypevr
8505
8506@deftypevr {@code{dovecot-configuration} parameter} string imap-urlauth-host
8507Host allowed in URLAUTH URLs sent by client. "*" allows all.
8508Defaults to @samp{""}.
8509@end deftypevr
8510
8511
8512Whew! Lots of configuration options. The nice thing about it though is
8513that GuixSD has a complete interface to Dovecot's configuration
8514language. This allows not only a nice way to declare configurations,
8515but also offers reflective capabilities as well: users can write code to
8516inspect and transform configurations from within Scheme.
8517
8518However, it could be that you just want to get a @code{dovecot.conf} up
8519and running. In that case, you can pass an
8520@code{opaque-dovecot-configuration} as the @code{#:config} paramter to
8521@code{dovecot-service}. As its name indicates, an opaque configuration
8522does not have easy reflective capabilities.
8523
8524Available @code{opaque-dovecot-configuration} fields are:
8525
8526@deftypevr {@code{opaque-dovecot-configuration} parameter} package dovecot
8527The dovecot package.
8528@end deftypevr
8529
8530@deftypevr {@code{opaque-dovecot-configuration} parameter} string string
8531The contents of the @code{dovecot.conf}, as a string.
8532@end deftypevr
8533
8534For example, if your @code{dovecot.conf} is just the empty string, you
8535could instantiate a dovecot service like this:
8536
8537@example
8538(dovecot-service #:config
8539 (opaque-dovecot-configuration
8540 (string "")))
8541@end example
8542
58724c48
DT
8543@node Web Services
8544@subsubsection Web Services
8545
8546The @code{(gnu services web)} module provides the following service:
8547
be1c2c54 8548@deffn {Scheme Procedure} nginx-service [#:nginx nginx] @
58724c48
DT
8549 [#:log-directory ``/var/log/nginx''] @
8550 [#:run-directory ``/var/run/nginx''] @
8551 [#:config-file]
8552
8553Return a service that runs @var{nginx}, the nginx web server.
8554
8555The nginx daemon loads its runtime configuration from @var{config-file}.
8556Log files are written to @var{log-directory} and temporary runtime data
8557files are written to @var{run-directory}. For proper operation, these
8558arguments should match what is in @var{config-file} to ensure that the
8559directories are created when the service is activated.
8560
8561@end deffn
8562
fe1a39d3
LC
8563@node Various Services
8564@subsubsection Various Services
8565
8566The @code{(gnu services lirc)} module provides the following service.
8567
be1c2c54 8568@deffn {Scheme Procedure} lirc-service [#:lirc lirc] @
fe1a39d3
LC
8569 [#:device #f] [#:driver #f] [#:config-file #f] @
8570 [#:extra-options '()]
8571Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
8572decodes infrared signals from remote controls.
8573
8574Optionally, @var{device}, @var{driver} and @var{config-file}
8575(configuration file name) may be specified. See @command{lircd} manual
8576for details.
8577
8578Finally, @var{extra-options} is a list of additional command-line options
8579passed to @command{lircd}.
8580@end deffn
8581
8582
0ae8c15a
LC
8583@node Setuid Programs
8584@subsection Setuid Programs
8585
8586@cindex setuid programs
8587Some programs need to run with ``root'' privileges, even when they are
8588launched by unprivileged users. A notorious example is the
4d40227c
LC
8589@command{passwd} program, which users can run to change their
8590password, and which needs to access the @file{/etc/passwd} and
0ae8c15a
LC
8591@file{/etc/shadow} files---something normally restricted to root, for
8592obvious security reasons. To address that, these executables are
8593@dfn{setuid-root}, meaning that they always run with root privileges
8594(@pxref{How Change Persona,,, libc, The GNU C Library Reference Manual},
f7e4ae7f 8595for more info about the setuid mechanism.)
0ae8c15a
LC
8596
8597The store itself @emph{cannot} contain setuid programs: that would be a
8598security issue since any user on the system can write derivations that
8599populate the store (@pxref{The Store}). Thus, a different mechanism is
8600used: instead of changing the setuid bit directly on files that are in
8601the store, we let the system administrator @emph{declare} which programs
8602should be setuid root.
8603
8604The @code{setuid-programs} field of an @code{operating-system}
8605declaration contains a list of G-expressions denoting the names of
8606programs to be setuid-root (@pxref{Using the Configuration System}).
8607For instance, the @command{passwd} program, which is part of the Shadow
8608package, can be designated by this G-expression (@pxref{G-Expressions}):
8609
8610@example
8611#~(string-append #$shadow "/bin/passwd")
8612@end example
8613
8614A default set of setuid programs is defined by the
8615@code{%setuid-programs} variable of the @code{(gnu system)} module.
8616
8617@defvr {Scheme Variable} %setuid-programs
8618A list of G-expressions denoting common programs that are setuid-root.
8619
8620The list includes commands such as @command{passwd}, @command{ping},
8621@command{su}, and @command{sudo}.
8622@end defvr
8623
8624Under the hood, the actual setuid programs are created in the
8625@file{/run/setuid-programs} directory at system activation time. The
8626files in this directory refer to the ``real'' binaries, which are in the
8627store.
8628
efb5e833
LC
8629@node X.509 Certificates
8630@subsection X.509 Certificates
8631
8632@cindex HTTPS, certificates
8633@cindex X.509 certificates
8634@cindex TLS
8635Web servers available over HTTPS (that is, HTTP over the transport-layer
8636security mechanism, TLS) send client programs an @dfn{X.509 certificate}
8637that the client can then use to @emph{authenticate} the server. To do
8638that, clients verify that the server's certificate is signed by a
8639so-called @dfn{certificate authority} (CA). But to verify the CA's
8640signature, clients must have first acquired the CA's certificate.
8641
8642Web browsers such as GNU@tie{}IceCat include their own set of CA
8643certificates, such that they are able to verify CA signatures
8644out-of-the-box.
8645
8646However, most other programs that can talk HTTPS---@command{wget},
8647@command{git}, @command{w3m}, etc.---need to be told where CA
8648certificates can be found.
8649
8650@cindex @code{nss-certs}
8651In GuixSD, this is done by adding a package that provides certificates
8652to the @code{packages} field of the @code{operating-system} declaration
8653(@pxref{operating-system Reference}). GuixSD includes one such package,
8654@code{nss-certs}, which is a set of CA certificates provided as part of
8655Mozilla's Network Security Services.
8656
8657Note that it is @emph{not} part of @var{%base-packages}, so you need to
8658explicitly add it. The @file{/etc/ssl/certs} directory, which is where
8659most applications and libraries look for certificates by default, points
8660to the certificates installed globally.
8661
8662Unprivileged users can also install their own certificate package in
8663their profile. A number of environment variables need to be defined so
8664that applications and libraries know where to find them. Namely, the
8665OpenSSL library honors the @code{SSL_CERT_DIR} and @code{SSL_CERT_FILE}
8666variables. Some applications add their own environment variables; for
8667instance, the Git version control system honors the certificate bundle
8668pointed to by the @code{GIT_SSL_CAINFO} environment variable.
8669
8670
996ed739
LC
8671@node Name Service Switch
8672@subsection Name Service Switch
8673
8674@cindex name service switch
8675@cindex NSS
8676The @code{(gnu system nss)} module provides bindings to the
8677configuration file of libc's @dfn{name service switch} or @dfn{NSS}
8678(@pxref{NSS Configuration File,,, libc, The GNU C Library Reference
8679Manual}). In a nutshell, the NSS is a mechanism that allows libc to be
8680extended with new ``name'' lookup methods for system databases, which
8681includes host names, service names, user accounts, and more (@pxref{Name
8682Service Switch, System Databases and Name Service Switch,, libc, The GNU
8683C Library Reference Manual}).
8684
8685The NSS configuration specifies, for each system database, which lookup
8686method is to be used, and how the various methods are chained
8687together---for instance, under which circumstances NSS should try the
8688next method in the list. The NSS configuration is given in the
8689@code{name-service-switch} field of @code{operating-system} declarations
8690(@pxref{operating-system Reference, @code{name-service-switch}}).
8691
4c9050c6
LC
8692@cindex nss-mdns
8693@cindex .local, host name lookup
996ed739 8694As an example, the declaration below configures the NSS to use the
4c9050c6
LC
8695@uref{http://0pointer.de/lennart/projects/nss-mdns/, @code{nss-mdns}
8696back-end}, which supports host name lookups over multicast DNS (mDNS)
8697for host names ending in @code{.local}:
996ed739
LC
8698
8699@example
8700(name-service-switch
8701 (hosts (list %files ;first, check /etc/hosts
8702
8703 ;; If the above did not succeed, try
8704 ;; with 'mdns_minimal'.
8705 (name-service
8706 (name "mdns_minimal")
8707
8708 ;; 'mdns_minimal' is authoritative for
8709 ;; '.local'. When it returns "not found",
8710 ;; no need to try the next methods.
8711 (reaction (lookup-specification
8712 (not-found => return))))
8713
8714 ;; Then fall back to DNS.
8715 (name-service
8716 (name "dns"))
8717
8718 ;; Finally, try with the "full" 'mdns'.
8719 (name-service
8720 (name "mdns")))))
8721@end example
8722
15137a29
LC
8723Don't worry: the @code{%mdns-host-lookup-nss} variable (see below)
8724contains this configuration, so you won't have to type it if all you
8725want is to have @code{.local} host lookup working.
8726
4c9050c6
LC
8727Note that, in this case, in addition to setting the
8728@code{name-service-switch} of the @code{operating-system} declaration,
cc9c1f39
LC
8729you also need to use @code{avahi-service} (@pxref{Networking Services,
8730@code{avahi-service}}), or @var{%desktop-services}, which includes it
8731(@pxref{Desktop Services}). Doing this makes @code{nss-mdns} accessible
8732to the name service cache daemon (@pxref{Base Services,
8733@code{nscd-service}}).
15137a29
LC
8734
8735For convenience, the following variables provide typical NSS
8736configurations.
8737
8738@defvr {Scheme Variable} %default-nss
8739This is the default name service switch configuration, a
8740@code{name-service-switch} object.
8741@end defvr
8742
8743@defvr {Scheme Variable} %mdns-host-lookup-nss
8744This is the name service switch configuration with support for host name
8745lookup over multicast DNS (mDNS) for host names ending in @code{.local}.
8746@end defvr
4c9050c6 8747
996ed739
LC
8748The reference for name service switch configuration is given below. It
8749is a direct mapping of the C library's configuration file format, so
8750please refer to the C library manual for more information (@pxref{NSS
8751Configuration File,,, libc, The GNU C Library Reference Manual}).
8752Compared to libc's NSS configuration file format, it has the advantage
8753not only of adding this warm parenthetic feel that we like, but also
8754static checks: you'll know about syntax errors and typos as soon as you
8755run @command{guix system}.
8756
996ed739
LC
8757@deftp {Data Type} name-service-switch
8758
8759This is the data type representation the configuration of libc's name
8760service switch (NSS). Each field below represents one of the supported
8761system databases.
8762
8763@table @code
8764@item aliases
8765@itemx ethers
8766@itemx group
8767@itemx gshadow
8768@itemx hosts
8769@itemx initgroups
8770@itemx netgroup
8771@itemx networks
8772@itemx password
8773@itemx public-key
8774@itemx rpc
8775@itemx services
8776@itemx shadow
8777The system databases handled by the NSS. Each of these fields must be a
8778list of @code{<name-service>} objects (see below.)
8779@end table
8780@end deftp
8781
8782@deftp {Data Type} name-service
8783
8784This is the data type representing an actual name service and the
8785associated lookup action.
8786
8787@table @code
8788@item name
8789A string denoting the name service (@pxref{Services in the NSS
8790configuration,,, libc, The GNU C Library Reference Manual}).
8791
4aee6e60
LC
8792Note that name services listed here must be visible to nscd. This is
8793achieved by passing the @code{#:name-services} argument to
8794@code{nscd-service} the list of packages providing the needed name
8795services (@pxref{Base Services, @code{nscd-service}}).
8796
996ed739
LC
8797@item reaction
8798An action specified using the @code{lookup-specification} macro
8799(@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
8800Reference Manual}). For example:
8801
8802@example
8803(lookup-specification (unavailable => continue)
8804 (success => return))
8805@end example
8806@end table
8807@end deftp
0ae8c15a 8808
fd1b1fa2
LC
8809@node Initial RAM Disk
8810@subsection Initial RAM Disk
8811
8812@cindex initial RAM disk (initrd)
8813@cindex initrd (initial RAM disk)
8814For bootstrapping purposes, the Linux-Libre kernel is passed an
8815@dfn{initial RAM disk}, or @dfn{initrd}. An initrd contains a temporary
8816root file system, as well as an initialization script. The latter is
8817responsible for mounting the real root file system, and for loading any
8818kernel modules that may be needed to achieve that.
8819
8820The @code{initrd} field of an @code{operating-system} declaration allows
8821you to specify which initrd you would like to use. The @code{(gnu
8822system linux-initrd)} module provides two ways to build an initrd: the
8823high-level @code{base-initrd} procedure, and the low-level
8824@code{expression->initrd} procedure.
8825
8826The @code{base-initrd} procedure is intended to cover most common uses.
8827For example, if you want to add a bunch of kernel modules to be loaded
8828at boot time, you can define the @code{initrd} field of the operating
8829system declaration like this:
8830
8831@example
52ac153e 8832(initrd (lambda (file-systems . rest)
027981d6
LC
8833 ;; Create a standard initrd that has modules "foo.ko"
8834 ;; and "bar.ko", as well as their dependencies, in
8835 ;; addition to the modules available by default.
52ac153e 8836 (apply base-initrd file-systems
027981d6 8837 #:extra-modules '("foo" "bar")
52ac153e 8838 rest)))
fd1b1fa2
LC
8839@end example
8840
52ac153e
LC
8841The @code{base-initrd} procedure also handles common use cases that
8842involves using the system as a QEMU guest, or as a ``live'' system whose
8843root file system is volatile.
fd1b1fa2 8844
e90cf6c1
LC
8845The initial RAM disk produced by @code{base-initrd} honors several
8846options passed on the Linux kernel command line (that is, arguments
8847passed @i{via} GRUB's @code{linux} command, or with QEMU's
8848@code{-append} option), notably:
8849
8850@table @code
8851@item --load=@var{boot}
8852Tell the initial RAM disk to load @var{boot}, a file containing a Scheme
8853program, once it has mounted the root file system.
8854
8855GuixSD uses this option to yield control to a boot program that runs the
8856service activation programs and then spawns GNU@tie{}dmd, the
8857initialization system.
8858
8859@item --root=@var{root}
8860Mount @var{root} as the root file system. @var{root} can be a device
8861device name like @code{/dev/sda1}, a partition label, or a partition
8862UUID.
8863
8864@item --system=@var{system}
8865Have @file{/run/booted-system} and @file{/run/current-system} point to
8866@var{system}.
8867
8868@item modprobe.blacklist=@var{modules}@dots{}
8869@cindex module, black-listing
8870@cindex black list, of kernel modules
8871Instruct the initial RAM disk as well as the @command{modprobe} command
8872(from the kmod package) to refuse to load @var{modules}. @var{modules}
8873must be a comma-separated list of module names---e.g.,
8874@code{usbkbd,9pnet}.
8875
8876@item --repl
8877Start a read-eval-print loop (REPL) from the initial RAM disk before it
8878tries to load kernel modules and to mount the root file system. Our
8879marketing team calls it @dfn{boot-to-Guile}. The Schemer in you will
8880love it. @xref{Using Guile Interactively,,, guile, GNU Guile Reference
8881Manual}, for more information on Guile's REPL.
8882
8883@end table
8884
8885Now that you know all the features that initial RAM disks produced by
8886@code{base-initrd} provide, here is how to use it and customize it
8887further.
8888
fd1b1fa2
LC
8889@deffn {Monadic Procedure} base-initrd @var{file-systems} @
8890 [#:qemu-networking? #f] [#:virtio? #f] [#:volatile-root? #f] @
52ac153e 8891 [#:extra-modules '()] [#:mapped-devices '()]
fd1b1fa2
LC
8892Return a monadic derivation that builds a generic initrd. @var{file-systems} is
8893a list of file-systems to be mounted by the initrd, possibly in addition to
8894the root file system specified on the kernel command line via @code{--root}.
52ac153e
LC
8895@var{mapped-devices} is a list of device mappings to realize before
8896@var{file-systems} are mounted (@pxref{Mapped Devices}).
fd1b1fa2
LC
8897
8898When @var{qemu-networking?} is true, set up networking with the standard QEMU
8899parameters. When @var{virtio?} is true, load additional modules so the initrd can
8900be used as a QEMU guest with para-virtualized I/O drivers.
8901
8902When @var{volatile-root?} is true, the root file system is writable but any changes
8903to it are lost.
8904
8905The initrd is automatically populated with all the kernel modules necessary
8906for @var{file-systems} and for the given options. However, additional kernel
8907modules can be listed in @var{extra-modules}. They will be added to the initrd, and
8908loaded at boot time in the order in which they appear.
8909@end deffn
8910
8911Needless to say, the initrds we produce and use embed a
8912statically-linked Guile, and the initialization program is a Guile
8913program. That gives a lot of flexibility. The
8914@code{expression->initrd} procedure builds such an initrd, given the
8915program to run in that initrd.
8916
8917@deffn {Monadic Procedure} expression->initrd @var{exp} @
8918 [#:guile %guile-static-stripped] [#:name "guile-initrd"] @
42d10464 8919 [#:modules '()]
fd1b1fa2
LC
8920Return a derivation that builds a Linux initrd (a gzipped cpio archive)
8921containing @var{guile} and that evaluates @var{exp}, a G-expression,
df650fa8
LC
8922upon booting. All the derivations referenced by @var{exp} are
8923automatically copied to the initrd.
fd1b1fa2 8924
42d10464
LC
8925@var{modules} is a list of Guile module names to be embedded in the
8926initrd.
fd1b1fa2
LC
8927@end deffn
8928
88faf933
LC
8929@node GRUB Configuration
8930@subsection GRUB Configuration
8931
8932@cindex GRUB
8933@cindex boot loader
8934
8935The operating system uses GNU@tie{}GRUB as its boot loader
8936(@pxref{Overview, overview of GRUB,, grub, GNU GRUB Manual}). It is
8937configured using @code{grub-configuration} declarations. This data type
8938is exported by the @code{(gnu system grub)} module, and described below.
8939
8940@deftp {Data Type} grub-configuration
8941The type of a GRUB configuration declaration.
8942
8943@table @asis
8944
8945@item @code{device}
8946This is a string denoting the boot device. It must be a device name
8947understood by the @command{grub-install} command, such as
8948@code{/dev/sda} or @code{(hd0)} (@pxref{Invoking grub-install,,, grub,
8949GNU GRUB Manual}).
8950
8951@item @code{menu-entries} (default: @code{()})
8952A possibly empty list of @code{menu-entry} objects (see below), denoting
8953entries to appear in the GRUB boot menu, in addition to the current
8954system entry and the entry pointing to previous system generations.
8955
8956@item @code{default-entry} (default: @code{0})
8957The index of the default boot menu entry. Index 0 is for the current
8958system's entry.
8959
8960@item @code{timeout} (default: @code{5})
8961The number of seconds to wait for keyboard input before booting. Set to
89620 to boot immediately, and to -1 to wait indefinitely.
8963
8964@item @code{theme} (default: @var{%default-theme})
8965The @code{grub-theme} object describing the theme to use.
8966@end table
8967
8968@end deftp
8969
8970Should you want to list additional boot menu entries @i{via} the
8971@code{menu-entries} field above, you will need to create them with the
8972@code{menu-entry} form:
8973
8974@deftp {Data Type} menu-entry
8975The type of an entry in the GRUB boot menu.
8976
8977@table @asis
8978
8979@item @code{label}
35ed9306 8980The label to show in the menu---e.g., @code{"GNU"}.
88faf933
LC
8981
8982@item @code{linux}
8983The Linux kernel to boot.
8984
8985@item @code{linux-arguments} (default: @code{()})
8986The list of extra Linux kernel command-line arguments---e.g.,
8987@code{("console=ttyS0")}.
8988
8989@item @code{initrd}
8990A G-Expression or string denoting the file name of the initial RAM disk
8991to use (@pxref{G-Expressions}).
8992
8993@end table
8994@end deftp
8995
8996@c FIXME: Write documentation once it's stable.
8997Themes are created using the @code{grub-theme} form, which is not
8998documented yet.
8999
9000@defvr {Scheme Variable} %default-theme
9001This is the default GRUB theme used by the operating system, with a
9002fancy background image displaying the GNU and Guix logos.
9003@end defvr
9004
9005
cf4a9129
LC
9006@node Invoking guix system
9007@subsection Invoking @code{guix system}
0918e64a 9008
cf4a9129
LC
9009Once you have written an operating system declaration, as seen in the
9010previous section, it can be @dfn{instantiated} using the @command{guix
9011system} command. The synopsis is:
4af2447e 9012
cf4a9129
LC
9013@example
9014guix system @var{options}@dots{} @var{action} @var{file}
9015@end example
4af2447e 9016
cf4a9129
LC
9017@var{file} must be the name of a file containing an
9018@code{operating-system} declaration. @var{action} specifies how the
9019operating system is instantiate. Currently the following values are
9020supported:
4af2447e 9021
cf4a9129
LC
9022@table @code
9023@item reconfigure
9024Build the operating system described in @var{file}, activate it, and
9025switch to it@footnote{This action is usable only on systems already
65797bff 9026running GuixSD.}.
4af2447e 9027
cf4a9129
LC
9028This effects all the configuration specified in @var{file}: user
9029accounts, system services, global package list, setuid programs, etc.
4af2447e 9030
cf4a9129
LC
9031It also adds a GRUB menu entry for the new OS configuration, and moves
9032entries for older configurations to a submenu---unless
9033@option{--no-grub} is passed.
4af2447e 9034
bf2479c7
LC
9035@c The paragraph below refers to the problem discussed at
9036@c <http://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
9037It is highly recommended to run @command{guix pull} once before you run
9038@command{guix system reconfigure} for the first time (@pxref{Invoking
9039guix pull}). Failing to do that you would see an older version of Guix
9040once @command{reconfigure} has completed.
9041
cf4a9129
LC
9042@item build
9043Build the operating system's derivation, which includes all the
9044configuration files and programs needed to boot and run the system.
9045This action does not actually install anything.
113daf62 9046
cf4a9129
LC
9047@item init
9048Populate the given directory with all the files necessary to run the
9049operating system specified in @var{file}. This is useful for first-time
4705641f 9050installations of GuixSD. For instance:
113daf62
LC
9051
9052@example
cf4a9129 9053guix system init my-os-config.scm /mnt
113daf62
LC
9054@end example
9055
cf4a9129
LC
9056copies to @file{/mnt} all the store items required by the configuration
9057specified in @file{my-os-config.scm}. This includes configuration
9058files, packages, and so on. It also creates other essential files
9059needed for the system to operate correctly---e.g., the @file{/etc},
9060@file{/var}, and @file{/run} directories, and the @file{/bin/sh} file.
113daf62 9061
cf4a9129
LC
9062This command also installs GRUB on the device specified in
9063@file{my-os-config}, unless the @option{--no-grub} option was passed.
113daf62 9064
cf4a9129
LC
9065@item vm
9066@cindex virtual machine
0276f697 9067@cindex VM
f535dcbe 9068@anchor{guix system vm}
cf4a9129
LC
9069Build a virtual machine that contain the operating system declared in
9070@var{file}, and return a script to run that virtual machine (VM).
810568b3 9071Arguments given to the script are passed as is to QEMU.
113daf62 9072
cf4a9129 9073The VM shares its store with the host system.
113daf62 9074
0276f697
LC
9075Additional file systems can be shared between the host and the VM using
9076the @code{--share} and @code{--expose} command-line options: the former
9077specifies a directory to be shared with write access, while the latter
9078provides read-only access to the shared directory.
9079
9080The example below creates a VM in which the user's home directory is
9081accessible read-only, and where the @file{/exchange} directory is a
9082read-write mapping of the host's @file{$HOME/tmp}:
9083
9084@example
9085guix system vm my-config.scm \
9086 --expose=$HOME --share=$HOME/tmp=/exchange
9087@end example
9088
6aa260af
LC
9089On GNU/Linux, the default is to boot directly to the kernel; this has
9090the advantage of requiring only a very tiny root disk image since the
9091host's store can then be mounted.
9092
9093The @code{--full-boot} option forces a complete boot sequence, starting
9094with the bootloader. This requires more disk space since a root image
9095containing at least the kernel, initrd, and bootloader data files must
9096be created. The @code{--image-size} option can be used to specify the
9097image's size.
ab11f0be 9098
cf4a9129
LC
9099@item vm-image
9100@itemx disk-image
9101Return a virtual machine or disk image of the operating system declared
9102in @var{file} that stands alone. Use the @option{--image-size} option
9103to specify the size of the image.
113daf62 9104
cf4a9129
LC
9105When using @code{vm-image}, the returned image is in qcow2 format, which
9106the QEMU emulator can efficiently use.
113daf62 9107
cf4a9129
LC
9108When using @code{disk-image}, a raw disk image is produced; it can be
9109copied as is to a USB stick, for instance. Assuming @code{/dev/sdc} is
9110the device corresponding to a USB stick, one can copy the image on it
9111using the following command:
113daf62 9112
cf4a9129
LC
9113@example
9114# dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
9115@end example
113daf62 9116
1c8a81b1
DT
9117@item container
9118Return a script to run the operating system declared in @var{file}
9119within a container. Containers are a set of lightweight isolation
9120mechanisms provided by the kernel Linux-libre. Containers are
9121substantially less resource-demanding than full virtual machines since
9122the kernel, shared objects, and other resources can be shared with the
9123host system; this also means they provide thinner isolation.
9124
9125Currently, the script must be run as root in order to support more than
9126a single user and group. The container shares its store with the host
9127system.
9128
9129As with the @code{vm} action (@pxref{guix system vm}), additional file
9130systems to be shared between the host and container can be specified
9131using the @option{--share} and @option{--expose} options:
9132
9133@example
9134guix system container my-config.scm \
9135 --expose=$HOME --share=$HOME/tmp=/exchange
9136@end example
9137
0f252e26 9138@quotation Note
cfd35b4e 9139This option requires Linux-libre 3.19 or newer.
0f252e26
DT
9140@end quotation
9141
cf4a9129 9142@end table
113daf62 9143
cf4a9129
LC
9144@var{options} can contain any of the common build options provided by
9145@command{guix build} (@pxref{Invoking guix build}). In addition,
9146@var{options} can contain one of the following:
113daf62 9147
cf4a9129
LC
9148@table @option
9149@item --system=@var{system}
9150@itemx -s @var{system}
9151Attempt to build for @var{system} instead of the host's system type.
9152This works as per @command{guix build} (@pxref{Invoking guix build}).
113daf62 9153
f3f427c2
LC
9154@item --derivation
9155@itemx -d
9156Return the derivation file name of the given operating system without
9157building anything.
9158
cf4a9129
LC
9159@item --image-size=@var{size}
9160For the @code{vm-image} and @code{disk-image} actions, create an image
9161of the given @var{size}. @var{size} may be a number of bytes, or it may
4a44d7bb
LC
9162include a unit as a suffix (@pxref{Block size, size specifications,,
9163coreutils, GNU Coreutils}).
db030303
LC
9164
9165@item --on-error=@var{strategy}
9166Apply @var{strategy} when an error occurs when reading @var{file}.
9167@var{strategy} may be one of the following:
9168
9169@table @code
9170@item nothing-special
9171Report the error concisely and exit. This is the default strategy.
9172
9173@item backtrace
9174Likewise, but also display a backtrace.
9175
9176@item debug
9177Report the error and enter Guile's debugger. From there, you can run
9178commands such as @code{,bt} to get a backtrace, @code{,locals} to
9179display local variable values, and more generally inspect the program's
9180state. @xref{Debug Commands,,, guile, GNU Guile Reference Manual}, for
9181a list of available debugging commands.
9182@end table
113daf62 9183@end table
113daf62 9184
cf4a9129
LC
9185Note that all the actions above, except @code{build} and @code{init},
9186rely on KVM support in the Linux-Libre kernel. Specifically, the
9187machine should have hardware virtualization support, the corresponding
9188KVM kernel module should be loaded, and the @file{/dev/kvm} device node
9189must exist and be readable and writable by the user and by the daemon's
9190build users.
8451a568 9191
65797bff
LC
9192Once you have built, configured, re-configured, and re-re-configured
9193your GuixSD installation, you may find it useful to list the operating
9194system generations available on disk---and that you can choose from the
9195GRUB boot menu:
9196
9197@table @code
9198
9199@item list-generations
9200List a summary of each generation of the operating system available on
9201disk, in a human-readable way. This is similar to the
9202@option{--list-generations} option of @command{guix package}
9203(@pxref{Invoking guix package}).
9204
9205Optionally, one can specify a pattern, with the same syntax that is used
9206in @command{guix package --list-generations}, to restrict the list of
9207generations displayed. For instance, the following command displays
9208generations up to 10-day old:
9209
9210@example
9211$ guix system list-generations 10d
9212@end example
9213
9214@end table
9215
d6c3267a
LC
9216The @command{guix system} command has even more to offer! The following
9217sub-commands allow you to visualize how your system services relate to
9218each other:
9219
9220@anchor{system-extension-graph}
9221@table @code
9222
9223@item extension-graph
9224Emit in Dot/Graphviz format to standard output the @dfn{service
9225extension graph} of the operating system defined in @var{file}
9226(@pxref{Service Composition}, for more information on service
9227extensions.)
9228
9229The command:
9230
9231@example
9232$ guix system extension-graph @var{file} | dot -Tpdf > services.pdf
9233@end example
9234
9235produces a PDF file showing the extension relations among services.
9236
6f305ea5
LC
9237@anchor{system-dmd-graph}
9238@item dmd-graph
9239Emit in Dot/Graphviz format to standard output the @dfn{dependency
9240graph} of dmd services of the operating system defined in @var{file}.
9241@xref{dmd Services}, for more information and for an example graph.
9242
d6c3267a
LC
9243@end table
9244
9245
cf4a9129
LC
9246@node Defining Services
9247@subsection Defining Services
8451a568 9248
eb524192 9249The previous sections show the available services and how one can combine
0adfe95a
LC
9250them in an @code{operating-system} declaration. But how do we define
9251them in the first place? And what is a service anyway?
8451a568 9252
0adfe95a
LC
9253@menu
9254* Service Composition:: The model for composing services.
9255* Service Types and Services:: Types and services.
9256* Service Reference:: API reference.
9257* dmd Services:: A particular type of service.
9258@end menu
9259
9260@node Service Composition
9261@subsubsection Service Composition
9262
9263@cindex services
9264@cindex daemons
9265Here we define a @dfn{service} as, broadly, something that extends the
9266operating system's functionality. Often a service is a process---a
9267@dfn{daemon}---started when the system boots: a secure shell server, a
9268Web server, the Guix build daemon, etc. Sometimes a service is a daemon
9269whose execution can be triggered by another daemon---e.g., an FTP server
9270started by @command{inetd} or a D-Bus service activated by
9271@command{dbus-daemon}. Occasionally, a service does not map to a
9272daemon. For instance, the ``account'' service collects user accounts
9273and makes sure they exist when the system runs; the ``udev'' service
9274collects device management rules and makes them available to the eudev
9275daemon; the @file{/etc} service populates the system's @file{/etc}
9276directory.
9277
d6c3267a 9278@cindex service extensions
0adfe95a
LC
9279GuixSD services are connected by @dfn{extensions}. For instance, the
9280secure shell service @emph{extends} dmd---GuixSD's initialization system,
9281running as PID@tie{}1---by giving it the command lines to start and stop
9282the secure shell daemon (@pxref{Networking Services,
9283@code{lsh-service}}); the UPower service extends the D-Bus service by
9284passing it its @file{.service} specification, and extends the udev
9285service by passing it device management rules (@pxref{Desktop Services,
9286@code{upower-service}}); the Guix daemon service extends dmd by passing
9287it the command lines to start and stop the daemon, and extends the
9288account service by passing it a list of required build user accounts
9289(@pxref{Base Services}).
9290
9291All in all, services and their ``extends'' relations form a directed
9292acyclic graph (DAG). If we represent services as boxes and extensions
9293as arrows, a typical system might provide something like this:
9294
9295@image{images/service-graph,,5in,Typical service extension graph.}
9296
d62e201c
LC
9297@cindex system service
9298At the bottom, we see the @dfn{system service}, which produces the
9299directory containing everything to run and boot the system, as returned
9300by the @command{guix system build} command. @xref{Service Reference},
9301to learn about the other service types shown here.
d6c3267a
LC
9302@xref{system-extension-graph, the @command{guix system extension-graph}
9303command}, for information on how to generate this representation for a
9304particular operating system definition.
0adfe95a
LC
9305
9306@cindex service types
9307Technically, developers can define @dfn{service types} to express these
9308relations. There can be any number of services of a given type on the
9309system---for instance, a system running two instances of the GNU secure
9310shell server (lsh) has two instances of @var{lsh-service-type}, with
9311different parameters.
9312
9313The following section describes the programming interface for service
9314types and services.
9315
9316@node Service Types and Services
9317@subsubsection Service Types and Services
9318
9319A @dfn{service type} is a node in the DAG described above. Let us start
9320with a simple example, the service type for the Guix build daemon
9321(@pxref{Invoking guix-daemon}):
9322
9323@example
9324(define guix-service-type
9325 (service-type
9326 (name 'guix)
9327 (extensions
9328 (list (service-extension dmd-root-service-type guix-dmd-service)
9329 (service-extension account-service-type guix-accounts)
9330 (service-extension activation-service-type guix-activation)))))
9331@end example
8451a568 9332
cf4a9129 9333@noindent
0adfe95a
LC
9334It defines a two things:
9335
9336@enumerate
9337@item
9338A name, whose sole purpose is to make inspection and debugging easier.
9339
9340@item
9341A list of @dfn{service extensions}, where each extension designates the
9342target service type and a procedure that, given the service's
9343parameters, returns a list of object to extend the service of that type.
9344
9345Every service type has at least one service extension. The only
9346exception is the @dfn{boot service type}, which is the ultimate service.
9347@end enumerate
9348
9349In this example, @var{guix-service-type} extends three services:
9350
9351@table @var
9352@item dmd-root-service-type
9353The @var{guix-dmd-service} procedure defines how the dmd service is
9354extended. Namely, it returns a @code{<dmd-service>} object that defines
9355how @command{guix-daemon} is started and stopped (@pxref{dmd Services}).
9356
9357@item account-service-type
9358This extension for this service is computed by @var{guix-accounts},
9359which returns a list of @code{user-group} and @code{user-account}
9360objects representing the build user accounts (@pxref{Invoking
9361guix-daemon}).
9362
9363@item activation-service-type
9364Here @var{guix-activation} is a procedure that returns a gexp, which is
9365a code snippet to run at ``activation time''---e.g., when the service is
9366booted.
9367@end table
9368
9369A service of this type is instantiated like this:
9370
9371@example
9372(service guix-service-type
9373 (guix-configuration
9374 (build-accounts 5)
9375 (use-substitutes? #f)))
9376@end example
9377
9378The second argument to the @code{service} form is a value representing
9379the parameters of this specific service instance.
9380@xref{guix-configuration-type, @code{guix-configuration}}, for
9381information about the @code{guix-configuration} data type.
9382
9383@var{guix-service-type} is quite simple because it extends other
9384services but is not extensible itself.
9385
9386@c @subsubsubsection Extensible Service Types
9387
9388The service type for an @emph{extensible} service looks like this:
9389
9390@example
9391(define udev-service-type
9392 (service-type (name 'udev)
9393 (extensions
9394 (list (service-extension dmd-root-service-type
9395 udev-dmd-service)))
9396
9397 (compose concatenate) ;concatenate the list of rules
9398 (extend (lambda (config rules)
9399 (match config
9400 (($ <udev-configuration> udev initial-rules)
9401 (udev-configuration
9402 (udev udev) ;the udev package to use
9403 (rules (append initial-rules rules)))))))))
9404@end example
9405
9406This is the service type for the
9407@uref{https://wiki.gentoo.org/wiki/Project:Eudev, eudev device
9408management daemon}. Compared to the previous example, in addition to an
9409extension of @var{dmd-root-service-type}, we see two new fields:
9410
9411@table @code
9412@item compose
9413This is the procedure to @dfn{compose} the list of extensions to
9414services of this type.
9415
9416Services can extend the udev service by passing it lists of rules; we
9417compose those extensions simply by concatenating them.
9418
9419@item extend
9420This procedure defines how the service's value is @dfn{extended} with
9421the composition of the extensions.
9422
9423Udev extensions are composed into a list of rules, but the udev service
9424value is itself a @code{<udev-configuration>} record. So here, we
9425extend that record by appending the list of rules is contains to the
9426list of contributed rules.
9427@end table
9428
9429There can be only one instance of an extensible service type such as
9430@var{udev-service-type}. If there were more, the
9431@code{service-extension} specifications would be ambiguous.
9432
9433Still here? The next section provides a reference of the programming
9434interface for services.
9435
9436@node Service Reference
9437@subsubsection Service Reference
9438
9439We have seen an overview of service types (@pxref{Service Types and
9440Services}). This section provides a reference on how to manipulate
9441services and service types. This interface is provided by the
9442@code{(gnu services)} module.
9443
9444@deffn {Scheme Procedure} service @var{type} @var{value}
9445Return a new service of @var{type}, a @code{<service-type>} object (see
9446below.) @var{value} can be any object; it represents the parameters of
9447this particular service instance.
9448@end deffn
9449
9450@deffn {Scheme Procedure} service? @var{obj}
9451Return true if @var{obj} is a service.
9452@end deffn
8451a568 9453
0adfe95a
LC
9454@deffn {Scheme Procedure} service-kind @var{service}
9455Return the type of @var{service}---i.e., a @code{<service-type>} object.
9456@end deffn
9457
9458@deffn {Scheme Procedure} service-parameters @var{service}
9459Return the value associated with @var{service}. It represents its
9460parameters.
9461@end deffn
9462
9463Here is an example of how a service is created and manipulated:
9464
9465@example
9466(define s
9467 (service nginx-service-type
9468 (nginx-configuration
9469 (nginx nginx)
9470 (log-directory log-directory)
9471 (run-directory run-directory)
9472 (file config-file))))
9473
9474(service? s)
9475@result{} #t
9476
9477(eq? (service-kind s) nginx-service-type)
9478@result{} #t
9479@end example
9480
cd6f6c22
LC
9481The @code{modify-services} form provides a handy way to change the
9482parameters of some of the services of a list such as
9483@var{%base-services} (@pxref{Base Services, @code{%base-services}}). Of
9484course, you could always use standard list combinators such as
9485@code{map} and @code{fold} to do that (@pxref{SRFI-1, List Library,,
9486guile, GNU Guile Reference Manual}); @code{modify-services} simply
9487provides a more concise form for this common pattern.
9488
9489@deffn {Scheme Syntax} modify-services @var{services} @
9490 (@var{type} @var{variable} => @var{body}) @dots{}
9491
9492Modify the services listed in @var{services} according to the given
9493clauses. Each clause has the form:
9494
9495@example
9496(@var{type} @var{variable} => @var{body})
9497@end example
9498
9499where @var{type} is a service type, such as @var{guix-service-type}, and
9500@var{variable} is an identifier that is bound within @var{body} to the
9501value of the service of that @var{type}. @xref{Using the Configuration
9502System}, for an example.
9503
9504This is a shorthand for:
9505
9506@example
9507(map (lambda (service) @dots{}) @var{services})
9508@end example
9509@end deffn
9510
9511Next comes the programming interface for service types. This is
9512something you want to know when writing new service definitions, but not
9513necessarily when simply looking for ways to customize your
9514@code{operating-system} declaration.
9515
0adfe95a
LC
9516@deftp {Data Type} service-type
9517@cindex service type
9518This is the representation of a @dfn{service type} (@pxref{Service Types
9519and Services}).
9520
9521@table @asis
9522@item @code{name}
9523This is a symbol, used only to simplify inspection and debugging.
9524
9525@item @code{extensions}
9526A non-empty list of @code{<service-extension>} objects (see below.)
9527
9528@item @code{compose} (default: @code{#f})
9529If this is @code{#f}, then the service type denotes services that cannot
9530be extended---i.e., services that do not receive ``values'' from other
9531services.
9532
9533Otherwise, it must be a one-argument procedure. The procedure is called
9534by @code{fold-services} and is passed a list of values collected from
9535extensions. It must return a value that is a valid parameter value for
9536the service instance.
9537
9538@item @code{extend} (default: @code{#f})
9539If this is @code{#f}, services of this type cannot be extended.
9540
9541Otherwise, it must be a two-argument procedure: @code{fold-services}
9542calls it, passing it the service's initial value as the first argument
9543and the result of applying @code{compose} to the extension values as the
9544second argument.
9545@end table
9546
9547@xref{Service Types and Services}, for examples.
9548@end deftp
9549
9550@deffn {Scheme Procedure} service-extension @var{target-type} @
9551 @var{compute}
9552Return a new extension for services of type @var{target-type}.
9553@var{compute} must be a one-argument procedure: @code{fold-services}
9554calls it, passing it the value associated with the service that provides
9555the extension; it must return a valid value for the target service.
9556@end deffn
9557
9558@deffn {Scheme Procedure} service-extension? @var{obj}
9559Return true if @var{obj} is a service extension.
9560@end deffn
9561
9562At the core of the service abstraction lies the @code{fold-services}
9563procedure, which is responsible for ``compiling'' a list of services
d62e201c
LC
9564down to a single directory that contains everything needed to boot and
9565run the system---the directory shown by the @command{guix system build}
9566command (@pxref{Invoking guix system}). In essence, it propagates
9567service extensions down the service graph, updating each node parameters
9568on the way, until it reaches the root node.
0adfe95a
LC
9569
9570@deffn {Scheme Procedure} fold-services @var{services} @
d62e201c 9571 [#:target-type @var{system-service-type}]
0adfe95a
LC
9572Fold @var{services} by propagating their extensions down to the root of
9573type @var{target-type}; return the root service adjusted accordingly.
9574@end deffn
9575
9576Lastly, the @code{(gnu services)} module also defines several essential
9577service types, some of which are listed below.
9578
d62e201c
LC
9579@defvr {Scheme Variable} system-service-type
9580This is the root of the service graph. It produces the system directory
9581as returned by the @command{guix system build} command.
9582@end defvr
9583
0adfe95a 9584@defvr {Scheme Variable} boot-service-type
d62e201c
LC
9585The type of the ``boot service'', which produces the @dfn{boot script}.
9586The boot script is what the initial RAM disk runs when booting.
0adfe95a
LC
9587@end defvr
9588
9589@defvr {Scheme Variable} etc-service-type
9590The type of the @file{/etc} service. This service can be extended by
9591passing it name/file tuples such as:
9592
9593@example
9594(list `("issue" ,(plain-file "issue" "Welcome!\n")))
9595@end example
9596
9597In this example, the effect would be to add an @file{/etc/issue} file
9598pointing to the given file.
9599@end defvr
9600
9601@defvr {Scheme Variable} setuid-program-service-type
9602Type for the ``setuid-program service''. This service collects lists of
9603executable file names, passed as gexps, and adds them to the set of
9604setuid-root programs on the system (@pxref{Setuid Programs}).
9605@end defvr
9606
af4c3fd5
LC
9607@defvr {Scheme Variable} profile-service-type
9608Type of the service that populates the @dfn{system profile}---i.e., the
9609programs under @file{/run/current-system/profile}. Other services can
9610extend it by passing it lists of packages to add to the system profile.
9611@end defvr
9612
0adfe95a
LC
9613
9614@node dmd Services
9615@subsubsection dmd Services
9616
9617@cindex PID 1
9618@cindex init system
9619The @code{(gnu services dmd)} provides a way to define services managed
9620by GNU@tie{}dmd, which is GuixSD initialization system---the first
9621process that is started when the system boots, aka. PID@tie{}1
6f305ea5
LC
9622(@pxref{Introduction,,, dmd, GNU dmd Manual}).
9623
9624Services in dmd can depend on each other. For instance, the SSH daemon
9625may need to be started after the syslog daemon has been started, which
9626in turn can only happen once all the file systems have been mounted.
9627The simple operating system defined earlier (@pxref{Using the
9628Configuration System}) results in a service graph like this:
9629
9630@image{images/dmd-graph,,5in,Typical dmd service graph.}
9631
9632You can actually generate such a graph for any operating system
9633definition using the @command{guix system dmd-graph} command
9634(@pxref{system-dmd-graph, @command{guix system dmd-graph}}).
9635
9636The @var{%dmd-root-service} is a service object representing PID@tie{}1,
9637of type @var{dmd-root-service-type}; it can be extended by passing it
9638lists of @code{<dmd-service>} objects.
0adfe95a
LC
9639
9640@deftp {Data Type} dmd-service
9641The data type representing a service managed by dmd.
9642
9643@table @asis
9644@item @code{provision}
9645This is a list of symbols denoting what the service provides.
9646
9647These are the names that may be passed to @command{deco start},
9648@command{deco status}, and similar commands (@pxref{Invoking deco,,,
9649dmd, GNU dmd Manual}). @xref{Slots of services, the @code{provides}
9650slot,, dmd, GNU dmd Manual}, for details.
9651
9652@item @code{requirements} (default: @code{'()})
9653List of symbols denoting the dmd services this one depends on.
9654
9655@item @code{respawn?} (default: @code{#t})
9656Whether to restart the service when it stops, for instance when the
9657underlying process dies.
9658
9659@item @code{start}
9660@itemx @code{stop} (default: @code{#~(const #f)})
cf4a9129
LC
9661The @code{start} and @code{stop} fields refer to dmd's facilities to
9662start and stop processes (@pxref{Service De- and Constructors,,, dmd,
0adfe95a
LC
9663GNU dmd Manual}). They are given as G-expressions that get expanded in
9664the dmd configuration file (@pxref{G-Expressions}).
9665
9666@item @code{documentation}
9667A documentation string, as shown when running:
9668
9669@example
9670deco doc @var{service-name}
9671@end example
9672
9673where @var{service-name} is one of the symbols in @var{provision}
9674(@pxref{Invoking deco,,, dmd, GNU dmd Manual}).
fae685b9
LC
9675
9676@item @code{modules} (default: @var{%default-modules})
9677This is the list of modules that must be in scope when @code{start} and
9678@code{stop} are evaluated.
9679
9680@item @code{imported-modules} (default: @var{%default-imported-modules})
9681This is the list of modules to import in the execution environment of
9682dmd.
9683
0adfe95a
LC
9684@end table
9685@end deftp
9686
9687@defvr {Scheme Variable} dmd-root-service-type
9688The service type for the dmd ``root service''---i.e., PID@tie{}1.
9689
9690This is the service type that extensions target when they want to create
9691dmd services (@pxref{Service Types and Services}, for an example). Each
9692extension must pass a list of @code{<dmd-service>}.
9693@end defvr
9694
9695@defvr {Scheme Variable} %dmd-root-service
9696This service represents PID@tie{}1.
9697@end defvr
8451a568 9698
8451a568 9699
cf4a9129
LC
9700@node Installing Debugging Files
9701@section Installing Debugging Files
8451a568 9702
cf4a9129
LC
9703@cindex debugging files
9704Program binaries, as produced by the GCC compilers for instance, are
9705typically written in the ELF format, with a section containing
9706@dfn{debugging information}. Debugging information is what allows the
9707debugger, GDB, to map binary code to source code; it is required to
9708debug a compiled program in good conditions.
8451a568 9709
cf4a9129
LC
9710The problem with debugging information is that is takes up a fair amount
9711of disk space. For example, debugging information for the GNU C Library
9712weighs in at more than 60 MiB. Thus, as a user, keeping all the
9713debugging info of all the installed programs is usually not an option.
9714Yet, space savings should not come at the cost of an impediment to
9715debugging---especially in the GNU system, which should make it easier
9716for users to exert their computing freedom (@pxref{GNU Distribution}).
8451a568 9717
cf4a9129
LC
9718Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a
9719mechanism that allows users to get the best of both worlds: debugging
9720information can be stripped from the binaries and stored in separate
9721files. GDB is then able to load debugging information from those files,
9722when they are available (@pxref{Separate Debug Files,,, gdb, Debugging
9723with GDB}).
8451a568 9724
cf4a9129
LC
9725The GNU distribution takes advantage of this by storing debugging
9726information in the @code{lib/debug} sub-directory of a separate package
9727output unimaginatively called @code{debug} (@pxref{Packages with
9728Multiple Outputs}). Users can choose to install the @code{debug} output
9729of a package when they need it. For instance, the following command
9730installs the debugging information for the GNU C Library and for GNU
9731Guile:
8451a568
LC
9732
9733@example
cf4a9129 9734guix package -i glibc:debug guile:debug
8451a568
LC
9735@end example
9736
cf4a9129
LC
9737GDB must then be told to look for debug files in the user's profile, by
9738setting the @code{debug-file-directory} variable (consider setting it
9739from the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with
9740GDB}):
8451a568 9741
cf4a9129
LC
9742@example
9743(gdb) set debug-file-directory ~/.guix-profile/lib/debug
9744@end example
8451a568 9745
cf4a9129
LC
9746From there on, GDB will pick up debugging information from the
9747@code{.debug} files under @file{~/.guix-profile/lib/debug}.
8451a568 9748
cf4a9129
LC
9749In addition, you will most likely want GDB to be able to show the source
9750code being debugged. To do that, you will have to unpack the source
9751code of the package of interest (obtained with @code{guix build
9752--source}, @pxref{Invoking guix build}), and to point GDB to that source
9753directory using the @code{directory} command (@pxref{Source Path,
9754@code{directory},, gdb, Debugging with GDB}).
8451a568 9755
cf4a9129
LC
9756@c XXX: keep me up-to-date
9757The @code{debug} output mechanism in Guix is implemented by the
9758@code{gnu-build-system} (@pxref{Build Systems}). Currently, it is
9759opt-in---debugging information is available only for those packages
9760whose definition explicitly declares a @code{debug} output. This may be
9761changed to opt-out in the future, if our build farm servers can handle
9762the load. To check whether a package has a @code{debug} output, use
9763@command{guix package --list-available} (@pxref{Invoking guix package}).
8451a568 9764
8451a568 9765
05962f29
LC
9766@node Security Updates
9767@section Security Updates
9768
843858b8
LC
9769@quotation Note
9770As of version @value{VERSION}, the feature described in this section is
9771experimental.
9772@end quotation
05962f29
LC
9773
9774@cindex security updates
9775Occasionally, important security vulnerabilities are discovered in core
9776software packages and must be patched. Guix follows a functional
9777package management discipline (@pxref{Introduction}), which implies
9778that, when a package is changed, @emph{every package that depends on it}
9779must be rebuilt. This can significantly slow down the deployment of
9780fixes in core packages such as libc or Bash, since basically the whole
9781distribution would need to be rebuilt. Using pre-built binaries helps
9782(@pxref{Substitutes}), but deployment may still take more time than
9783desired.
9784
9785@cindex grafts
9786To address that, Guix implements @dfn{grafts}, a mechanism that allows
9787for fast deployment of critical updates without the costs associated
9788with a whole-distribution rebuild. The idea is to rebuild only the
9789package that needs to be patched, and then to ``graft'' it onto packages
9790explicitly installed by the user and that were previously referring to
9791the original package. The cost of grafting is typically very low, and
9792order of magnitudes lower than a full rebuild of the dependency chain.
9793
9794@cindex replacements of packages, for grafts
9795For instance, suppose a security update needs to be applied to Bash.
9796Guix developers will provide a package definition for the ``fixed''
9797Bash, say @var{bash-fixed}, in the usual way (@pxref{Defining
9798Packages}). Then, the original package definition is augmented with a
9799@code{replacement} field pointing to the package containing the bug fix:
9800
9801@example
9802(define bash
9803 (package
9804 (name "bash")
9805 ;; @dots{}
9806 (replacement bash-fixed)))
9807@end example
9808
9809From there on, any package depending directly or indirectly on Bash that
9810is installed will automatically be ``rewritten'' to refer to
9811@var{bash-fixed} instead of @var{bash}. This grafting process takes
9812time proportional to the size of the package, but expect less than a
9813minute for an ``average'' package on a recent machine.
9814
9815Currently, the graft and the package it replaces (@var{bash-fixed} and
9816@var{bash} in the example above) must have the exact same @code{name}
9817and @code{version} fields. This restriction mostly comes from the fact
9818that grafting works by patching files, including binary files, directly.
9819Other restrictions may apply: for instance, when adding a graft to a
9820package providing a shared library, the original shared library and its
9821replacement must have the same @code{SONAME} and be binary-compatible.
9822
9823
cf4a9129
LC
9824@node Package Modules
9825@section Package Modules
8451a568 9826
cf4a9129
LC
9827From a programming viewpoint, the package definitions of the
9828GNU distribution are provided by Guile modules in the @code{(gnu packages
9829@dots{})} name space@footnote{Note that packages under the @code{(gnu
9830packages @dots{})} module name space are not necessarily ``GNU
9831packages''. This module naming scheme follows the usual Guile module
9832naming convention: @code{gnu} means that these modules are distributed
9833as part of the GNU system, and @code{packages} identifies modules that
9834define packages.} (@pxref{Modules, Guile modules,, guile, GNU Guile
9835Reference Manual}). For instance, the @code{(gnu packages emacs)}
9836module exports a variable named @code{emacs}, which is bound to a
9837@code{<package>} object (@pxref{Defining Packages}).
113daf62 9838
300868ba 9839The @code{(gnu packages @dots{})} module name space is
cf4a9129
LC
9840automatically scanned for packages by the command-line tools. For
9841instance, when running @code{guix package -i emacs}, all the @code{(gnu
9842packages @dots{})} modules are scanned until one that exports a package
9843object whose name is @code{emacs} is found. This package search
9844facility is implemented in the @code{(gnu packages)} module.
113daf62 9845
300868ba 9846@cindex customization, of packages
8689901f 9847@cindex package module search path
cf4a9129 9848Users can store package definitions in modules with different
60142854 9849names---e.g., @code{(my-packages emacs)}@footnote{Note that the file
c95ded7e
LC
9850name and module name must match. For instance, the @code{(my-packages
9851emacs)} module must be stored in a @file{my-packages/emacs.scm} file
9852relative to the load path specified with @option{--load-path} or
9853@code{GUIX_PACKAGE_PATH}. @xref{Modules and the File System,,,
9854guile, GNU Guile Reference Manual}, for details.}. These package definitions
300868ba
LC
9855will not be visible by default. Thus, users can invoke commands such as
9856@command{guix package} and @command{guix build} have to be used with the
c95ded7e
LC
9857@code{-e} option so that they know where to find the package. Better
9858yet, they can use the
300868ba 9859@code{-L} option of these commands to make those modules visible
8689901f
LC
9860(@pxref{Invoking guix build, @code{--load-path}}), or define the
9861@code{GUIX_PACKAGE_PATH} environment variable. This environment
9862variable makes it easy to extend or customize the distribution and is
9863honored by all the user interfaces.
9864
9865@defvr {Environment Variable} GUIX_PACKAGE_PATH
9866This is a colon-separated list of directories to search for package
9867modules. Directories listed in this variable take precedence over the
9868distribution's own modules.
9869@end defvr
ef5dd60a 9870
cf4a9129
LC
9871The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}:
9872each package is built based solely on other packages in the
9873distribution. The root of this dependency graph is a small set of
9874@dfn{bootstrap binaries}, provided by the @code{(gnu packages
9875bootstrap)} module. For more information on bootstrapping,
081145cf 9876@pxref{Bootstrapping}.
ef5dd60a 9877
cf4a9129
LC
9878@node Packaging Guidelines
9879@section Packaging Guidelines
ef5dd60a 9880
cf4a9129
LC
9881The GNU distribution is nascent and may well lack some of your favorite
9882packages. This section describes how you can help make the distribution
9883grow. @xref{Contributing}, for additional information on how you can
9884help.
ef5dd60a 9885
cf4a9129
LC
9886Free software packages are usually distributed in the form of
9887@dfn{source code tarballs}---typically @file{tar.gz} files that contain
9888all the source files. Adding a package to the distribution means
9889essentially two things: adding a @dfn{recipe} that describes how to
9890build the package, including a list of other packages required to build
9891it, and adding @dfn{package meta-data} along with that recipe, such as a
9892description and licensing information.
ef5dd60a 9893
cf4a9129
LC
9894In Guix all this information is embodied in @dfn{package definitions}.
9895Package definitions provide a high-level view of the package. They are
9896written using the syntax of the Scheme programming language; in fact,
9897for each package we define a variable bound to the package definition,
9898and export that variable from a module (@pxref{Package Modules}).
9899However, in-depth Scheme knowledge is @emph{not} a prerequisite for
9900creating packages. For more information on package definitions,
081145cf 9901@pxref{Defining Packages}.
ef5dd60a 9902
cf4a9129
LC
9903Once a package definition is in place, stored in a file in the Guix
9904source tree, it can be tested using the @command{guix build} command
9905(@pxref{Invoking guix build}). For example, assuming the new package is
c71979f4
LC
9906called @code{gnew}, you may run this command from the Guix build tree
9907(@pxref{Running Guix Before It Is Installed}):
ef5dd60a
LC
9908
9909@example
cf4a9129 9910./pre-inst-env guix build gnew --keep-failed
ef5dd60a 9911@end example
ef5dd60a 9912
cf4a9129
LC
9913Using @code{--keep-failed} makes it easier to debug build failures since
9914it provides access to the failed build tree. Another useful
9915command-line option when debugging is @code{--log-file}, to access the
9916build log.
ef5dd60a 9917
cf4a9129
LC
9918If the package is unknown to the @command{guix} command, it may be that
9919the source file contains a syntax error, or lacks a @code{define-public}
9920clause to export the package variable. To figure it out, you may load
9921the module from Guile to get more information about the actual error:
ef5dd60a 9922
cf4a9129
LC
9923@example
9924./pre-inst-env guile -c '(use-modules (gnu packages gnew))'
9925@end example
ef5dd60a 9926
cf4a9129
LC
9927Once your package builds correctly, please send us a patch
9928(@pxref{Contributing}). Well, if you need help, we will be happy to
9929help you too. Once the patch is committed in the Guix repository, the
9930new package automatically gets built on the supported platforms by
2b1cee21 9931@url{http://hydra.gnu.org/jobset/gnu/master, our continuous integration
cf4a9129 9932system}.
ef5dd60a 9933
cf4a9129
LC
9934@cindex substituter
9935Users can obtain the new package definition simply by running
9936@command{guix pull} (@pxref{Invoking guix pull}). When
9937@code{hydra.gnu.org} is done building the package, installing the
9938package automatically downloads binaries from there
9939(@pxref{Substitutes}). The only place where human intervention is
9940needed is to review and apply the patch.
ef5dd60a 9941
ef5dd60a 9942
cf4a9129 9943@menu
ec0339cd
LC
9944* Software Freedom:: What may go into the distribution.
9945* Package Naming:: What's in a name?
9946* Version Numbers:: When the name is not enough.
cbd02397 9947* Synopses and Descriptions:: Helping users find the right package.
ec0339cd
LC
9948* Python Modules:: Taming the snake.
9949* Perl Modules:: Little pearls.
9950* Fonts:: Fond of fonts.
cf4a9129 9951@end menu
ef5dd60a 9952
cf4a9129
LC
9953@node Software Freedom
9954@subsection Software Freedom
ef5dd60a 9955
cf4a9129 9956@c Adapted from http://www.gnu.org/philosophy/philosophy.html.
c11a6eb1 9957
cf4a9129
LC
9958The GNU operating system has been developed so that users can have
9959freedom in their computing. GNU is @dfn{free software}, meaning that
9960users have the @url{http://www.gnu.org/philosophy/free-sw.html,four
9961essential freedoms}: to run the program, to study and change the program
9962in source code form, to redistribute exact copies, and to distribute
9963modified versions. Packages found in the GNU distribution provide only
9964software that conveys these four freedoms.
c11a6eb1 9965
cf4a9129
LC
9966In addition, the GNU distribution follow the
9967@url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free
9968software distribution guidelines}. Among other things, these guidelines
9969reject non-free firmware, recommendations of non-free software, and
9970discuss ways to deal with trademarks and patents.
ef5dd60a 9971
cf4a9129
LC
9972Some packages contain a small and optional subset that violates the
9973above guidelines, for instance because this subset is itself non-free
9974code. When that happens, the offending items are removed with
9975appropriate patches or code snippets in the package definition's
9976@code{origin} form (@pxref{Defining Packages}). That way, @code{guix
9977build --source} returns the ``freed'' source rather than the unmodified
9978upstream source.
ef5dd60a 9979
ef5dd60a 9980
cf4a9129
LC
9981@node Package Naming
9982@subsection Package Naming
ef5dd60a 9983
cf4a9129
LC
9984A package has actually two names associated with it:
9985First, there is the name of the @emph{Scheme variable}, the one following
9986@code{define-public}. By this name, the package can be made known in the
9987Scheme code, for instance as input to another package. Second, there is
9988the string in the @code{name} field of a package definition. This name
9989is used by package management commands such as
9990@command{guix package} and @command{guix build}.
ef5dd60a 9991
cf4a9129
LC
9992Both are usually the same and correspond to the lowercase conversion of
9993the project name chosen upstream, with underscores replaced with
9994hyphens. For instance, GNUnet is available as @code{gnunet}, and
9995SDL_net as @code{sdl-net}.
927097ef 9996
cf4a9129 9997We do not add @code{lib} prefixes for library packages, unless these are
081145cf 9998already part of the official project name. But @pxref{Python
cf4a9129
LC
9999Modules} and @ref{Perl Modules} for special rules concerning modules for
10000the Python and Perl languages.
927097ef 10001
1b366ee4 10002Font package names are handled differently, @pxref{Fonts}.
7fec52b7 10003
ef5dd60a 10004
cf4a9129
LC
10005@node Version Numbers
10006@subsection Version Numbers
ef5dd60a 10007
cf4a9129
LC
10008We usually package only the latest version of a given free software
10009project. But sometimes, for instance for incompatible library versions,
10010two (or more) versions of the same package are needed. These require
10011different Scheme variable names. We use the name as defined
10012in @ref{Package Naming}
10013for the most recent version; previous versions use the same name, suffixed
10014by @code{-} and the smallest prefix of the version number that may
10015distinguish the two versions.
ef5dd60a 10016
cf4a9129
LC
10017The name inside the package definition is the same for all versions of a
10018package and does not contain any version number.
ef5dd60a 10019
cf4a9129 10020For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as follows:
ef5dd60a 10021
cf4a9129
LC
10022@example
10023(define-public gtk+
10024 (package
17d8e33f
ML
10025 (name "gtk+")
10026 (version "3.9.12")
10027 ...))
cf4a9129
LC
10028(define-public gtk+-2
10029 (package
17d8e33f
ML
10030 (name "gtk+")
10031 (version "2.24.20")
10032 ...))
cf4a9129
LC
10033@end example
10034If we also wanted GTK+ 3.8.2, this would be packaged as
10035@example
10036(define-public gtk+-3.8
10037 (package
17d8e33f
ML
10038 (name "gtk+")
10039 (version "3.8.2")
10040 ...))
cf4a9129 10041@end example
ef5dd60a 10042
cbd02397
LC
10043@node Synopses and Descriptions
10044@subsection Synopses and Descriptions
10045
10046As we have seen before, each package in GNU@tie{}Guix includes a
10047synopsis and a description (@pxref{Defining Packages}). Synopses and
10048descriptions are important: They are what @command{guix package
10049--search} searches, and a crucial piece of information to help users
10050determine whether a given package suits their needs. Consequently,
10051packagers should pay attention to what goes into them.
10052
10053Synopses must start with a capital letter and must not end with a
10054period. They must not start with ``a'' or ``the'', which usually does
10055not bring anything; for instance, prefer ``File-frobbing tool'' over ``A
10056tool that frobs files''. The synopsis should say what the package
10057is---e.g., ``Core GNU utilities (file, text, shell)''---or what it is
10058used for---e.g., the synopsis for GNU@tie{}grep is ``Print lines
10059matching a pattern''.
10060
10061Keep in mind that the synopsis must be meaningful for a very wide
10062audience. For example, ``Manipulate alignments in the SAM format''
10063might make sense for a seasoned bioinformatics researcher, but might be
10064fairly unhelpful or even misleading to a non-specialized audience. It
10065is a good idea to come up with a synopsis that gives an idea of the
10066application domain of the package. In this example, this might give
10067something like ``Manipulate nucleotide sequence alignments'', which
10068hopefully gives the user a better idea of whether this is what they are
10069looking for.
10070
10071@cindex Texinfo markup, in package descriptions
10072Descriptions should take between five and ten lines. Use full
10073sentences, and avoid using acronyms without first introducing them.
10074Descriptions can include Texinfo markup, which is useful to introduce
10075ornaments such as @code{@@code} or @code{@@dfn}, bullet lists, or
ba7d6c76
ML
10076hyperlinks (@pxref{Overview,,, texinfo, GNU Texinfo}). However you
10077should be careful when using some characters for example @samp{@@} and
10078curly braces which are the basic special characters in Texinfo
10079(@pxref{Special Characters,,, texinfo, GNU Texinfo}). User interfaces
10080such as @command{guix package --show} take care of rendering it
10081appropriately.
cbd02397
LC
10082
10083Synopses and descriptions are translated by volunteers
10084@uref{http://translationproject.org/domain/guix-packages.html, at the
10085Translation Project} so that as many users as possible can read them in
10086their native language. User interfaces search them and display them in
10087the language specified by the current locale.
10088
10089Translation is a lot of work so, as a packager, please pay even more
10090attention to your synopses and descriptions as every change may entail
ba7d6c76 10091additional work for translators. In order to help them, it is possible
36743e71 10092to make recommendations or instructions visible to them by inserting
ba7d6c76
ML
10093special comments like this (@pxref{xgettext Invocation,,, gettext, GNU
10094Gettext}):
10095
10096@example
10097;; TRANSLATORS: "X11 resize-and-rotate" should not be translated.
10098(description "ARandR is designed to provide a simple visual front end
10099for the X11 resize-and-rotate (RandR) extension. @dots{}")
10100@end example
cbd02397 10101
ef5dd60a 10102
cf4a9129
LC
10103@node Python Modules
10104@subsection Python Modules
ef5dd60a 10105
cf4a9129
LC
10106We currently package Python 2 and Python 3, under the Scheme variable names
10107@code{python-2} and @code{python} as explained in @ref{Version Numbers}.
10108To avoid confusion and naming clashes with other programming languages, it
10109seems desirable that the name of a package for a Python module contains
10110the word @code{python}.
ef5dd60a 10111
cf4a9129
LC
10112Some modules are compatible with only one version of Python, others with both.
10113If the package Foo compiles only with Python 3, we name it
10114@code{python-foo}; if it compiles only with Python 2, we name it
10115@code{python2-foo}. If it is compatible with both versions, we create two
10116packages with the corresponding names.
ef5dd60a 10117
cf4a9129
LC
10118If a project already contains the word @code{python}, we drop this;
10119for instance, the module python-dateutil is packaged under the names
10120@code{python-dateutil} and @code{python2-dateutil}.
113daf62 10121
523e4896 10122
cf4a9129
LC
10123@node Perl Modules
10124@subsection Perl Modules
523e4896 10125
cf4a9129
LC
10126Perl programs standing for themselves are named as any other package,
10127using the lowercase upstream name.
10128For Perl packages containing a single class, we use the lowercase class name,
10129replace all occurrences of @code{::} by dashes and prepend the prefix
10130@code{perl-}.
10131So the class @code{XML::Parser} becomes @code{perl-xml-parser}.
10132Modules containing several classes keep their lowercase upstream name and
10133are also prepended by @code{perl-}. Such modules tend to have the word
10134@code{perl} somewhere in their name, which gets dropped in favor of the
10135prefix. For instance, @code{libwww-perl} becomes @code{perl-libwww}.
523e4896 10136
523e4896 10137
7fec52b7
AE
10138@node Fonts
10139@subsection Fonts
10140
10141For fonts that are in general not installed by a user for typesetting
10142purposes, or that are distributed as part of a larger software package,
10143we rely on the general packaging rules for software; for instance, this
10144applies to the fonts delivered as part of the X.Org system or fonts that
10145are part of TeX Live.
10146
10147To make it easier for a user to search for fonts, names for other packages
10148containing only fonts are constructed as follows, independently of the
10149upstream package name.
10150
10151The name of a package containing only one font family starts with
10152@code{font-}; it is followed by the foundry name and a dash @code{-}
10153if the foundry is known, and the font family name, in which spaces are
10154replaced by dashes (and as usual, all upper case letters are transformed
10155to lower case).
10156For example, the Gentium font family by SIL is packaged under the name
10157@code{font-sil-gentium}.
10158
10159For a package containing several font families, the name of the collection
10160is used in the place of the font family name.
10161For instance, the Liberation fonts consist of three families,
10162Liberation Sans, Liberation Serif and Liberation Mono.
10163These could be packaged separately under the names
10164@code{font-liberation-sans} and so on; but as they are distributed together
10165under a common name, we prefer to package them together as
10166@code{font-liberation}.
10167
10168In the case where several formats of the same font family or font collection
10169are packaged separately, a short form of the format, prepended by a dash,
10170is added to the package name. We use @code{-ttf} for TrueType fonts,
1b366ee4 10171@code{-otf} for OpenType fonts and @code{-type1} for PostScript Type 1
7fec52b7
AE
10172fonts.
10173
10174
b25937e3 10175
cf4a9129
LC
10176@node Bootstrapping
10177@section Bootstrapping
b25937e3 10178
cf4a9129 10179@c Adapted from the ELS 2013 paper.
b25937e3 10180
cf4a9129 10181@cindex bootstrapping
7889394e 10182
cf4a9129
LC
10183Bootstrapping in our context refers to how the distribution gets built
10184``from nothing''. Remember that the build environment of a derivation
10185contains nothing but its declared inputs (@pxref{Introduction}). So
10186there's an obvious chicken-and-egg problem: how does the first package
10187get built? How does the first compiler get compiled? Note that this is
10188a question of interest only to the curious hacker, not to the regular
10189user, so you can shamelessly skip this section if you consider yourself
10190a ``regular user''.
72b9d60d 10191
cf4a9129
LC
10192@cindex bootstrap binaries
10193The GNU system is primarily made of C code, with libc at its core. The
10194GNU build system itself assumes the availability of a Bourne shell and
10195command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
10196`grep'. Furthermore, build programs---programs that run
10197@code{./configure}, @code{make}, etc.---are written in Guile Scheme
10198(@pxref{Derivations}). Consequently, to be able to build anything at
10199all, from scratch, Guix relies on pre-built binaries of Guile, GCC,
10200Binutils, libc, and the other packages mentioned above---the
10201@dfn{bootstrap binaries}.
72b9d60d 10202
cf4a9129
LC
10203These bootstrap binaries are ``taken for granted'', though we can also
10204re-create them if needed (more on that later).
72b9d60d 10205
cf4a9129 10206@unnumberedsubsec Preparing to Use the Bootstrap Binaries
c79d54fe 10207
cf4a9129
LC
10208@c As of Emacs 24.3, Info-mode displays the image, but since it's a
10209@c large image, it's hard to scroll. Oh well.
10210@image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap derivations}
523e4896 10211
cf4a9129
LC
10212The figure above shows the very beginning of the dependency graph of the
10213distribution, corresponding to the package definitions of the @code{(gnu
d33fa0c7
LC
10214packages bootstrap)} module. A similar figure can be generated with
10215@command{guix graph} (@pxref{Invoking guix graph}), along the lines of:
10216
10217@example
10218guix graph -t derivation \
10219 -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
10220 | dot -Tps > t.ps
10221@end example
10222
10223At this level of detail, things are
cf4a9129
LC
10224slightly complex. First, Guile itself consists of an ELF executable,
10225along with many source and compiled Scheme files that are dynamically
10226loaded when it runs. This gets stored in the @file{guile-2.0.7.tar.xz}
10227tarball shown in this graph. This tarball is part of Guix's ``source''
10228distribution, and gets inserted into the store with @code{add-to-store}
10229(@pxref{The Store}).
2e7b5cea 10230
cf4a9129
LC
10231But how do we write a derivation that unpacks this tarball and adds it
10232to the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
10233derivation---the first one that gets built---uses @code{bash} as its
10234builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
10235@code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar},
10236@file{xz}, and @file{mkdir} are statically-linked binaries, also part of
10237the Guix source distribution, whose sole purpose is to allow the Guile
10238tarball to be unpacked.
fb729425 10239
cf4a9129
LC
10240Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning
10241Guile that can be used to run subsequent build programs. Its first task
10242is to download tarballs containing the other pre-built binaries---this
10243is what the @code{.tar.xz.drv} derivations do. Guix modules such as
10244@code{ftp-client.scm} are used for this purpose. The
10245@code{module-import.drv} derivations import those modules in a directory
10246in the store, using the original layout. The
10247@code{module-import-compiled.drv} derivations compile those modules, and
10248write them in an output directory with the right layout. This
10249corresponds to the @code{#:modules} argument of
10250@code{build-expression->derivation} (@pxref{Derivations}).
fb729425 10251
cf4a9129
LC
10252Finally, the various tarballs are unpacked by the
10253derivations @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv},
10254etc., at which point we have a working C tool chain.
fb729425 10255
fb729425 10256
cf4a9129 10257@unnumberedsubsec Building the Build Tools
523e4896 10258
cf4a9129
LC
10259Bootstrapping is complete when we have a full tool chain that does not
10260depend on the pre-built bootstrap tools discussed above. This
10261no-dependency requirement is verified by checking whether the files of
10262the final tool chain contain references to the @file{/gnu/store}
10263directories of the bootstrap inputs. The process that leads to this
10264``final'' tool chain is described by the package definitions found in
1f6f57df 10265the @code{(gnu packages commencement)} module.
df2ce343 10266
d33fa0c7
LC
10267The @command{guix graph} command allows us to ``zoom out'' compared to
10268the graph above, by looking at the level of package objects instead of
10269individual derivations---remember that a package may translate to
10270several derivations, typically one derivation to download its source,
10271one to build the Guile modules it needs, and one to actually build the
10272package from source. The command:
10273
10274@example
10275guix graph -t bag \
10276 -e '(@@@@ (gnu packages commencement)
10277 glibc-final-with-bootstrap-bash)' | dot -Tps > t.ps
10278@end example
10279
10280@noindent
10281produces the dependency graph leading to the ``final'' C
10282library@footnote{You may notice the @code{glibc-intermediate} label,
10283suggesting that it is not @emph{quite} final, but as a good
10284approximation, we will consider it final.}, depicted below.
10285
10286@image{images/bootstrap-packages,6in,,Dependency graph of the early packages}
10287
cf4a9129
LC
10288@c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
10289The first tool that gets built with the bootstrap binaries is
d33fa0c7
LC
10290GNU@tie{}Make---noted @code{make-boot0} above---which is a prerequisite
10291for all the following packages. From there Findutils and Diffutils get
10292built.
523e4896 10293
cf4a9129
LC
10294Then come the first-stage Binutils and GCC, built as pseudo cross
10295tools---i.e., with @code{--target} equal to @code{--host}. They are
10296used to build libc. Thanks to this cross-build trick, this libc is
10297guaranteed not to hold any reference to the initial tool chain.
4af2447e 10298
d33fa0c7
LC
10299From there the final Binutils and GCC (not shown above) are built.
10300GCC uses @code{ld}
cf4a9129
LC
10301from the final Binutils, and links programs against the just-built libc.
10302This tool chain is used to build the other packages used by Guix and by
10303the GNU Build System: Guile, Bash, Coreutils, etc.
4af2447e 10304
cf4a9129
LC
10305And voilà! At this point we have the complete set of build tools that
10306the GNU Build System expects. These are in the @code{%final-inputs}
dd164244
MW
10307variable of the @code{(gnu packages commencement)} module, and are
10308implicitly used by any package that uses @code{gnu-build-system}
1f6f57df 10309(@pxref{Build Systems, @code{gnu-build-system}}).
4af2447e 10310
4af2447e 10311
cf4a9129 10312@unnumberedsubsec Building the Bootstrap Binaries
4af2447e 10313
cf4a9129
LC
10314Because the final tool chain does not depend on the bootstrap binaries,
10315those rarely need to be updated. Nevertheless, it is useful to have an
10316automated way to produce them, should an update occur, and this is what
10317the @code{(gnu packages make-bootstrap)} module provides.
4af2447e 10318
cf4a9129
LC
10319The following command builds the tarballs containing the bootstrap
10320binaries (Guile, Binutils, GCC, libc, and a tarball containing a mixture
10321of Coreutils and other basic command-line tools):
4b2615e1 10322
cf4a9129
LC
10323@example
10324guix build bootstrap-tarballs
10325@end example
10326
10327The generated tarballs are those that should be referred to in the
10328@code{(gnu packages bootstrap)} module mentioned at the beginning of
10329this section.
10330
10331Still here? Then perhaps by now you've started to wonder: when do we
10332reach a fixed point? That is an interesting question! The answer is
10333unknown, but if you would like to investigate further (and have
10334significant computational and storage resources to do so), then let us
10335know.
10336
10337@node Porting
10338@section Porting to a New Platform
10339
10340As discussed above, the GNU distribution is self-contained, and
10341self-containment is achieved by relying on pre-built ``bootstrap
10342binaries'' (@pxref{Bootstrapping}). These binaries are specific to an
10343operating system kernel, CPU architecture, and application binary
10344interface (ABI). Thus, to port the distribution to a platform that is
10345not yet supported, one must build those bootstrap binaries, and update
10346the @code{(gnu packages bootstrap)} module to use them on that platform.
10347
10348Fortunately, Guix can @emph{cross compile} those bootstrap binaries.
10349When everything goes well, and assuming the GNU tool chain supports the
10350target platform, this can be as simple as running a command like this
10351one:
10352
10353@example
10354guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
10355@end example
10356
1c0c417d
LC
10357For this to work, the @code{glibc-dynamic-linker} procedure in
10358@code{(gnu packages bootstrap)} must be augmented to return the right
10359file name for libc's dynamic linker on that platform; likewise,
10360@code{system->linux-architecture} in @code{(gnu packages linux)} must be
10361taught about the new platform.
10362
cf4a9129 10363Once these are built, the @code{(gnu packages bootstrap)} module needs
1c0c417d
LC
10364to be updated to refer to these binaries on the target platform. That
10365is, the hashes and URLs of the bootstrap tarballs for the new platform
10366must be added alongside those of the currently supported platforms. The
10367bootstrap Guile tarball is treated specially: it is expected to be
10368available locally, and @file{gnu-system.am} has rules do download it for
10369the supported architectures; a rule for the new platform must be added
10370as well.
cf4a9129
LC
10371
10372In practice, there may be some complications. First, it may be that the
10373extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
10374above) is not recognized by all the GNU tools. Typically, glibc
10375recognizes some of these, whereas GCC uses an extra @code{--with-abi}
10376configure flag (see @code{gcc.scm} for examples of how to handle this).
10377Second, some of the required packages could fail to build for that
10378platform. Lastly, the generated binaries could be broken for some
10379reason.
4af2447e 10380
9bf3c1a7 10381@c *********************************************************************
8c01b9d0 10382@include contributing.texi
c78bd12b 10383
568717fd
LC
10384@c *********************************************************************
10385@node Acknowledgments
10386@chapter Acknowledgments
10387
136787cb
LC
10388Guix is based on the @uref{http://nixos.org/nix/, Nix package manager},
10389which was designed and
4c7ac9aa
LC
10390implemented by Eelco Dolstra, with contributions from other people (see
10391the @file{nix/AUTHORS} file in Guix.) Nix pioneered functional package
568717fd
LC
10392management, and promoted unprecedented features, such as transactional
10393package upgrades and rollbacks, per-user profiles, and referentially
10394transparent build processes. Without this work, Guix would not exist.
10395
10396The Nix-based software distributions, Nixpkgs and NixOS, have also been
10397an inspiration for Guix.
10398
4c7ac9aa
LC
10399GNU@tie{}Guix itself is a collective work with contributions from a
10400number of people. See the @file{AUTHORS} file in Guix for more
10401information on these fine people. The @file{THANKS} file lists people
10402who have helped by reporting bugs, taking care of the infrastructure,
10403providing artwork and themes, making suggestions, and more---thank you!
10404
10405
568717fd
LC
10406@c *********************************************************************
10407@node GNU Free Documentation License
10408@appendix GNU Free Documentation License
10409
10410@include fdl-1.3.texi
10411
10412@c *********************************************************************
10413@node Concept Index
10414@unnumbered Concept Index
10415@printindex cp
10416
a85b83d2
LC
10417@node Programming Index
10418@unnumbered Programming Index
10419@syncodeindex tp fn
10420@syncodeindex vr fn
568717fd
LC
10421@printindex fn
10422
10423@bye
10424
10425@c Local Variables:
10426@c ispell-local-dictionary: "american";
10427@c End: