gnu: tiled: Use 'modify-phases'.
[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@*
f97c9175 14Copyright @copyright{} 2013, 2014, 2016 Andreas Enge@*
87eafdbd 15Copyright @copyright{} 2013 Nikita Karetnikov@*
8c01b9d0
ML
16Copyright @copyright{} 2015 Mathieu Lirzin@*
17Copyright @copyright{} 2014 Pierre-Antoine Rault@*
97d76250
LF
18Copyright @copyright{} 2015 Taylan Ulrich Bayırlı/Kammer@*
19Copyright @copyright{} 2015, 2016 Leo Famulari
917a2a58 20Copyright @copyright{} 2016 Ben Woodcroft
7df7a74e
NK
21
22Permission is granted to copy, distribute and/or modify this document
23under the terms of the GNU Free Documentation License, Version 1.3 or
24any later version published by the Free Software Foundation; with no
25Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
26copy of the license is included in the section entitled ``GNU Free
27Documentation License''.
28@end copying
568717fd 29
eeaf4427 30@dircategory Package management
568717fd
LC
31@direntry
32* guix: (guix). Guix, the functional package manager.
e49951eb 33* guix package: (guix)Invoking guix package
eeaf4427 34 Managing packages with Guix.
e49951eb 35* guix build: (guix)Invoking guix build
568717fd 36 Building packages with Guix.
054e8576
LC
37* guix system: (guix)Invoking guix system
38 Managing the operating system configuration.
568717fd 39@end direntry
568717fd 40
372c4bbc
DT
41@dircategory Software development
42@direntry
43* guix environment: (guix)Invoking guix environment
44 Building development environments with Guix.
45@end direntry
46
568717fd 47@titlepage
7730d112
LC
48@title GNU Guix Reference Manual
49@subtitle Using the GNU Guix Functional Package Manager
2cbed07e 50@author The GNU Guix Developers
568717fd
LC
51
52@page
53@vskip 0pt plus 1filll
54Edition @value{EDITION} @*
55@value{UPDATED} @*
56
7df7a74e 57@insertcopying
568717fd
LC
58@end titlepage
59
568717fd
LC
60@contents
61
62@c *********************************************************************
63@node Top
f8348b91 64@top GNU Guix
568717fd 65
f8348b91
LC
66This document describes GNU Guix version @value{VERSION}, a functional
67package management tool written for the GNU system.
568717fd
LC
68
69@menu
70* Introduction:: What is Guix about?
bd5e766b 71* Installation:: Installing Guix.
eeaf4427 72* Package Management:: Package installation, upgrade, etc.
c554de89 73* Emacs Interface:: Using Guix from Emacs.
568717fd
LC
74* Programming Interface:: Using Guix in Scheme.
75* Utilities:: Package management commands.
a1ba8475 76* GNU Distribution:: Software for your friendly GNU system.
9bf3c1a7 77* Contributing:: Your help needed!
568717fd
LC
78
79* Acknowledgments:: Thanks!
80* GNU Free Documentation License:: The license of this manual.
81* Concept Index:: Concepts.
a85b83d2 82* Programming Index:: Data types, functions, and variables.
aaa3eaa9
LC
83
84@detailmenu
85 --- The Detailed Node Listing ---
86
87Installation
88
1b2b8177 89* Binary Installation:: Getting Guix running in no time!
aaa3eaa9 90* Requirements:: Software needed to build and run Guix.
ec0339cd 91* Running the Test Suite:: Testing Guix.
aaa3eaa9
LC
92* Setting Up the Daemon:: Preparing the build daemon's environment.
93* Invoking guix-daemon:: Running the build daemon.
0e2d0213 94* Application Setup:: Application-specific setup.
aaa3eaa9
LC
95
96Setting Up the Daemon
97
98* Build Environment Setup:: Preparing the isolated build environment.
99* Daemon Offload Setup:: Offloading builds to remote machines.
100
101Package Management
102
103* Features:: How Guix will make your life brighter.
104* Invoking guix package:: Package installation, removal, etc.
aaa3eaa9
LC
105* Substitutes:: Downloading pre-built binaries.
106* Packages with Multiple Outputs:: Single source package, multiple outputs.
107* Invoking guix gc:: Running the garbage collector.
108* Invoking guix pull:: Fetching the latest Guix and distribution.
109* Invoking guix archive:: Exporting and importing store files.
110
c554de89
AK
111Emacs Interface
112
113* Initial Setup: Emacs Initial Setup. Preparing @file{~/.emacs}.
114* Package Management: Emacs Package Management. Managing packages and generations.
687c9bc0 115* Licenses: Emacs Licenses. Interface for licenses of Guix packages.
9b0afb0d 116* Popup Interface: Emacs Popup Interface. Magit-like interface for guix commands.
c554de89 117* Prettify Mode: Emacs Prettify. Abbreviating @file{/gnu/store/@dots{}} file names.
34850cd5 118* Build Log Mode: Emacs Build Log. Highlighting Guix build logs.
187f80c6
AK
119* Completions: Emacs Completions. Completing @command{guix} shell command.
120* Development: Emacs Development. Tools for Guix developers.
32950fc8 121* Hydra: Emacs Hydra. Interface for Guix build farm.
c554de89 122
aaa3eaa9
LC
123Programming Interface
124
125* Defining Packages:: Defining new packages.
126* Build Systems:: Specifying how packages are built.
127* The Store:: Manipulating the package store.
128* Derivations:: Low-level interface to package derivations.
129* The Store Monad:: Purely functional interface to the store.
130* G-Expressions:: Manipulating build expressions.
131
92492b23
LC
132Defining Packages
133
134* package Reference:: The package data type.
135* origin Reference:: The origin data type.
136
aaa3eaa9
LC
137Utilities
138
139* Invoking guix build:: Building packages from the command line.
fcc58db6 140* Invoking guix edit:: Editing package definitions.
aaa3eaa9
LC
141* Invoking guix download:: Downloading a file and printing its hash.
142* Invoking guix hash:: Computing the cryptographic hash of a file.
143* Invoking guix import:: Importing package definitions.
144* Invoking guix refresh:: Updating package definitions.
145* Invoking guix lint:: Finding errors in package definitions.
fcc58db6 146* Invoking guix size:: Profiling disk usage.
88856916 147* Invoking guix graph:: Visualizing the graph of packages.
aaa3eaa9 148* Invoking guix environment:: Setting up development environments.
aff8ce7c 149* Invoking guix publish:: Sharing substitutes.
d23c20f1 150* Invoking guix challenge:: Challenging substitute servers.
32efa254 151* Invoking guix container:: Process isolation.
aaa3eaa9
LC
152
153GNU Distribution
154
155* System Installation:: Installing the whole operating system.
35ed9306 156* System Configuration:: Configuring the operating system.
aaa3eaa9
LC
157* Installing Debugging Files:: Feeding the debugger.
158* Security Updates:: Deploying security fixes quickly.
159* Package Modules:: Packages from the programmer's viewpoint.
160* Packaging Guidelines:: Growing the distribution.
161* Bootstrapping:: GNU/Linux built from scratch.
162* Porting:: Targeting another platform or kernel.
163
164System Configuration
165
166* Using the Configuration System:: Customizing your GNU system.
167* operating-system Reference:: Detail of operating-system declarations.
168* File Systems:: Configuring file system mounts.
169* Mapped Devices:: Block device extra processing.
170* User Accounts:: Specifying user accounts.
598e19dc 171* Locales:: Language and cultural convention settings.
aaa3eaa9
LC
172* Services:: Specifying system services.
173* Setuid Programs:: Programs running with root privileges.
1b2b8177 174* X.509 Certificates:: Authenticating HTTPS servers.
996ed739 175* Name Service Switch:: Configuring libc's name service switch.
aaa3eaa9
LC
176* Initial RAM Disk:: Linux-Libre bootstrapping.
177* GRUB Configuration:: Configuring the boot loader.
178* Invoking guix system:: Instantiating a system configuration.
97d76250 179* Running GuixSD in a VM:: How to run GuixSD in a virtual machine.
aaa3eaa9
LC
180* Defining Services:: Adding new service definitions.
181
182Services
183
184* Base Services:: Essential system services.
185* Networking Services:: Network setup, SSH daemon, etc.
186* X Window:: Graphical display.
1b2b8177
LC
187* Desktop Services:: D-Bus and desktop services.
188* Database Services:: SQL databases.
d8c18af8 189* Mail Services:: IMAP, POP3, SMTP, and all that.
cbd02397 190* Web Services:: Web servers.
aa4ed923 191* Various Services:: Other services.
aaa3eaa9 192
0adfe95a
LC
193Defining Services
194
195* Service Composition:: The model for composing services.
196* Service Types and Services:: Types and services.
197* Service Reference:: API reference.
dd17bc38 198* Shepherd Services:: A particular type of service.
0adfe95a 199
aaa3eaa9
LC
200Packaging Guidelines
201
ec0339cd
LC
202* Software Freedom:: What may go into the distribution.
203* Package Naming:: What's in a name?
204* Version Numbers:: When the name is not enough.
cbd02397 205* Synopses and Descriptions:: Helping users find the right package.
ec0339cd
LC
206* Python Modules:: Taming the snake.
207* Perl Modules:: Little pearls.
208* Fonts:: Fond of fonts.
aaa3eaa9 209
8c01b9d0
ML
210Contributing
211
212* Building from Git:: The latest and greatest.
213* Running Guix Before It Is Installed:: Hacker tricks.
214* The Perfect Setup:: The right tools.
215* Coding Style:: Hygiene of the contributor.
216* Submitting Patches:: Share your work.
217
218Coding Style
219
220* Programming Paradigm:: How to compose your elements.
221* Modules:: Where to store your code?
222* Data Types and Pattern Matching:: Implementing data structures.
223* Formatting Code:: Writing conventions.
224
aaa3eaa9 225@end detailmenu
568717fd
LC
226@end menu
227
228@c *********************************************************************
229@node Introduction
230@chapter Introduction
231
c80e7e55
LC
232GNU Guix@footnote{``Guix'' is pronounced like ``geeks'', or ``ɡiːks''
233using the international phonetic alphabet (IPA).} is a functional
234package management tool for the GNU system. Package management consists
4bfc4ea3
NK
235of all activities that relate to building packages from sources,
236honoring their build-time and run-time dependencies,
c80e7e55
LC
237installing packages in user environments, upgrading installed packages
238to new versions or rolling back to a previous set, removing unused
239software packages, etc.
568717fd
LC
240
241@cindex functional package management
242The term @dfn{functional} refers to a specific package management
136787cb
LC
243discipline pioneered by Nix (@pxref{Acknowledgments}).
244In Guix, the package build and installation process is seen
4bfc4ea3
NK
245as a function, in the mathematical sense. That function takes inputs,
246such as build scripts, a compiler, and libraries, and
247returns an installed package. As a pure function, its result depends
568717fd
LC
248solely on its inputs---for instance, it cannot refer to software or
249scripts that were not explicitly passed as inputs. A build function
4bfc4ea3 250always produces the same result when passed a given set of inputs. It
f97c9175 251cannot alter the environment of the running system in
568717fd
LC
252any way; for instance, it cannot create, modify, or delete files outside
253of its build and installation directories. This is achieved by running
e900c503 254build processes in isolated environments (or @dfn{containers}), where only their
4bfc4ea3 255explicit inputs are visible.
568717fd 256
e531ac2a 257@cindex store
568717fd 258The result of package build functions is @dfn{cached} in the file
e531ac2a 259system, in a special directory called @dfn{the store} (@pxref{The
f97c9175 260Store}). Each package is installed in a directory of its own in the
834129e0 261store---by default under @file{/gnu/store}. The directory name contains
568717fd
LC
262a hash of all the inputs used to build that package; thus, changing an
263input yields a different directory name.
264
f97c9175
AE
265This approach is the foundation for the salient features of Guix: support
266for transactional package upgrade and rollback, per-user installation, and
eeaf4427 267garbage collection of packages (@pxref{Features}).
568717fd 268
4bfc4ea3 269Guix has a command-line interface, which allows users to build, install,
568717fd 270upgrade, and remove packages, as well as a Scheme programming interface.
568717fd 271
3ca2731c 272@cindex Guix System Distribution
4705641f 273@cindex GuixSD
a1ba8475 274Last but not least, Guix is used to build a distribution of the GNU
3ca2731c 275system, with many GNU and non-GNU free software packages. The Guix
4705641f
LC
276System Distribution, or GNU@tie{}GuixSD, takes advantage of the core
277properties of Guix at the system level. With GuixSD, users
3ca2731c
LC
278@emph{declare} all aspects of the operating system configuration, and
279Guix takes care of instantiating that configuration in a reproducible,
280stateless fashion. @xref{GNU Distribution}.
a1ba8475 281
bd5e766b
LC
282@c *********************************************************************
283@node Installation
284@chapter Installation
285
48febeb8
LC
286GNU Guix is available for download from its website at
287@url{http://www.gnu.org/software/guix/}. This section describes the
288software requirements of Guix, as well as how to install it and get
289ready to use it.
bd5e766b 290
5af6de3e
LC
291Note that this section is concerned with the installation of the package
292manager, which can be done on top of a running GNU/Linux system. If,
293instead, you want to install the complete GNU operating system,
6621cdb6 294@pxref{System Installation}.
5af6de3e 295
bd5e766b 296@menu
09722b11 297* Binary Installation:: Getting Guix running in no time!
bd5e766b 298* Requirements:: Software needed to build and run Guix.
ec0339cd 299* Running the Test Suite:: Testing Guix.
bd5e766b
LC
300* Setting Up the Daemon:: Preparing the build daemon's environment.
301* Invoking guix-daemon:: Running the build daemon.
0e2d0213 302* Application Setup:: Application-specific setup.
bd5e766b
LC
303@end menu
304
09722b11
LC
305@node Binary Installation
306@section Binary Installation
307
308This section describes how to install Guix on an arbitrary system from a
309self-contained tarball providing binaries for Guix and for all its
310dependencies. This is often quicker than installing from source, which
311is described in the next sections. The only requirement is to have
312GNU@tie{}tar and Xz.
313
314Installing goes along these lines:
315
316@enumerate
317@item
318Download the binary tarball from
daa8922a
LC
319@indicateurl{ftp://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz},
320where @var{system} is @code{x86_64-linux} for an @code{x86_64} machine
321already running the kernel Linux, and so on.
322
323Make sure to download the associated @file{.sig} file and to verify the
324authenticity of the tarball against it, along these lines:
325
326@example
327$ wget ftp://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
328$ gpg --verify guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
329@end example
330
f97c9175 331If that command fails because you do not have the required public key,
daa8922a
LC
332then run this command to import it:
333
334@example
335$ gpg --keyserver keys.gnupg.net --recv-keys 3D9AEBB5
336@end example
337
338@noindent
339and rerun the @code{gpg --verify} command.
09722b11
LC
340
341@item
342As @code{root}, run:
343
344@example
5dc42964 345# cd /tmp
254b1c2e
LC
346# tar --warning=no-timestamp -xf \
347 guix-binary-@value{VERSION}.@var{system}.tar.xz
5dc42964 348# mv var/guix /var/ && mv gnu /
09722b11
LC
349@end example
350
7acd3439
LC
351This creates @file{/gnu/store} (@pxref{The Store}) and @file{/var/guix}.
352The latter contains a ready-to-use profile for @code{root} (see next
353step.)
09722b11 354
5dc3ce5f
LC
355Do @emph{not} unpack the tarball on a working Guix system since that
356would overwrite its own essential files.
357
254b1c2e 358The @code{--warning=no-timestamp} option makes sure GNU@tie{}tar does
e9ba6357
LC
359not emit warnings about ``implausibly old time stamps'' (such
360warnings were triggered by GNU@tie{}tar 1.26 and older; recent
361versions are fine.)
362They stem from the fact that all the
254b1c2e
LC
363files in the archive have their modification time set to zero (which
364means January 1st, 1970.) This is done on purpose to make sure the
365archive content is independent of its creation time, thus making it
366reproducible.
367
7acd3439
LC
368@item
369Make @code{root}'s profile available under @file{~/.guix-profile}:
370
371@example
372# ln -sf /var/guix/profiles/per-user/root/guix-profile \
373 ~root/.guix-profile
374@end example
375
43c33047
LC
376@item
377Create the group and user accounts for build users as explained below
378(@pxref{Build Environment Setup}).
379
09722b11 380@item
bf98aea9 381Run the daemon, and set it to automatically start on boot.
c8e26887 382
bf98aea9
LC
383If your host distro uses the systemd init system, this can be achieved
384with these commands:
c8e26887
GC
385
386@example
387# cp ~root/.guix-profile/lib/systemd/system/guix-daemon.service \
388 /etc/systemd/system/
389# systemctl start guix-daemon && systemctl enable guix-daemon
390@end example
391
392If your host distro uses the Upstart init system:
09722b11
LC
393
394@example
c8e26887 395# cp ~root/.guix-profile/lib/upstart/system/guix-daemon.conf /etc/init/
bf98aea9 396# start guix-daemon
09722b11
LC
397@end example
398
c8e26887
GC
399Otherwise, you can still start the daemon manually with:
400
401@example
402# ~root/.guix-profile/bin/guix-daemon --build-users-group=guixbuild
403@end example
d2825c96 404
09722b11
LC
405@item
406Make the @command{guix} command available to other users on the machine,
407for instance with:
408
409@example
410# mkdir -p /usr/local/bin
411# cd /usr/local/bin
d72d05f9 412# ln -s /var/guix/profiles/per-user/root/guix-profile/bin/guix
09722b11 413@end example
39f8ed14 414
aca738f3
LC
415It is also a good idea to make the Info version of this manual available
416there:
417
418@example
419# mkdir -p /usr/local/share/info
420# cd /usr/local/share/info
421# for i in /var/guix/profiles/per-user/root/guix-profile/share/info/* ;
422 do ln -s $i ; done
423@end example
424
425That way, assuming @file{/usr/local/share/info} is in the search path,
426running @command{info guix} will open this manual (@pxref{Other Info
427Directories,,, texinfo, GNU Texinfo}, for more details on changing the
428Info search path.)
429
39f8ed14
LC
430@item
431To use substitutes from @code{hydra.gnu.org} (@pxref{Substitutes}),
432authorize them:
433
434@example
7acd3439 435# guix archive --authorize < ~root/.guix-profile/share/guix/hydra.gnu.org.pub
39f8ed14 436@end example
09722b11
LC
437@end enumerate
438
bf98aea9 439This completes root-level install of Guix. Each user will need to
c8e26887
GC
440perform additional steps to make their Guix envionment ready for use,
441@pxref{Application Setup}.
09722b11 442
c8e26887
GC
443You can confirm that Guix is working by installing a sample package into
444the root profile:
09722b11
LC
445
446@example
c8e26887 447# guix package -i hello
09722b11
LC
448@end example
449
c8e26887
GC
450The @code{guix} package must remain available in @code{root}'s profile,
451or it would become subject to garbage collection---in which case you
452would find yourself badly handicapped by the lack of the @command{guix}
bf98aea9
LC
453command. In other words, do not remove @code{guix} by running
454@code{guix package -r guix}.
455
456The binary installation tarball can be (re)produced and verified simply
457by running the following command in the Guix source tree:
458
459@example
460make guix-binary.@var{system}.tar.xz
461@end example
c8e26887 462
09722b11 463
bd5e766b
LC
464@node Requirements
465@section Requirements
466
09722b11
LC
467This section lists requirements when building Guix from source. The
468build procedure for Guix is the same as for other GNU software, and is
469not covered here. Please see the files @file{README} and @file{INSTALL}
470in the Guix source tree for additional details.
471
bd5e766b
LC
472GNU Guix depends on the following packages:
473
474@itemize
47c66da0 475@item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.7 or later;
288dca55 476@item @url{http://gnupg.org/, GNU libgcrypt};
f0b98b84 477@item @url{http://www.gnu.org/software/make/, GNU Make}.
8a96bd4b
ID
478@end itemize
479
480The following dependencies are optional:
481
482@itemize
288dca55 483@item
8a96bd4b 484Installing
288dca55 485@url{http://savannah.nongnu.org/projects/guile-json/, Guile-JSON} will
2f7d2d91
LC
486allow you to use the @command{guix import pypi} command (@pxref{Invoking
487guix import}). It is of
288dca55 488interest primarily for developers and not for casual users.
8a96bd4b
ID
489@item
490Installing @uref{http://gnutls.org/, GnuTLS-Guile} will
491allow you to access @code{https} URLs with the @command{guix download}
d45dc6da
EB
492command (@pxref{Invoking guix download}), the @command{guix import pypi}
493command, and the @command{guix import cpan} command. This is primarily
494of interest to developers. @xref{Guile Preparations, how to install the
495GnuTLS bindings for Guile,, gnutls-guile, GnuTLS-Guile}.
bd5e766b
LC
496@end itemize
497
498Unless @code{--disable-daemon} was passed to @command{configure}, the
499following packages are also needed:
500
501@itemize
368d08f7
LC
502@item @url{http://sqlite.org, SQLite 3};
503@item @url{http://www.bzip.org, libbz2};
504@item @url{http://gcc.gnu.org, GCC's g++}, with support for the
505C++11 standard.
bd5e766b
LC
506@end itemize
507
4bfc4ea3
NK
508When a working installation of @url{http://nixos.org/nix/, the Nix package
509manager} is available, you
bd5e766b 510can instead configure Guix with @code{--disable-daemon}. In that case,
4bfc4ea3 511Nix replaces the three dependencies above.
bd5e766b 512
b22a12fd
LC
513Guix is compatible with Nix, so it is possible to share the same store
514between both. To do so, you must pass @command{configure} not only the
515same @code{--with-store-dir} value, but also the same
4bfc4ea3
NK
516@code{--localstatedir} value. The latter is essential because it
517specifies where the database that stores metadata about the store is
834129e0 518located, among other things. The default values for Nix are
b22a12fd 519@code{--with-store-dir=/nix/store} and @code{--localstatedir=/nix/var}.
4bfc4ea3
NK
520Note that @code{--disable-daemon} is not required if
521your goal is to share the store with Nix.
b22a12fd 522
ec0339cd
LC
523@node Running the Test Suite
524@section Running the Test Suite
525
526After a successful @command{configure} and @code{make} run, it is a good
527idea to run the test suite. It can help catch issues with the setup or
528environment, or bugs in Guix itself---and really, reporting test
529failures is a good way to help improve the software. To run the test
530suite, type:
531
532@example
533make check
534@end example
535
536Test cases can run in parallel: you can use the @code{-j} option of
537GNU@tie{}make to speed things up. The first run may take a few minutes
538on a recent machine; subsequent runs will be faster because the store
539that is created for test purposes will already have various things in
540cache.
541
a887fd8d
LC
542It is also possible to run a subset of the tests by defining the
543@code{TESTS} makefile variable as in this example:
544
545@example
546make check TESTS="tests/store.scm tests/cpio.scm"
547@end example
548
ec0339cd
LC
549Upon failure, please email @email{bug-guix@@gnu.org} and attach the
550@file{test-suite.log} file. When @file{tests/@var{something}.scm}
551fails, please also attach the @file{@var{something}.log} file available
552in the top-level build directory. Please specify the Guix version being
553used as well as version numbers of the dependencies
554(@pxref{Requirements}) in your message.
555
bd5e766b
LC
556@node Setting Up the Daemon
557@section Setting Up the Daemon
558
559@cindex daemon
560Operations such as building a package or running the garbage collector
49e6291a 561are all performed by a specialized process, the @dfn{build daemon}, on
bd5e766b
LC
562behalf of clients. Only the daemon may access the store and its
563associated database. Thus, any operation that manipulates the store
564goes through the daemon. For instance, command-line tools such as
e49951eb 565@command{guix package} and @command{guix build} communicate with the
bd5e766b
LC
566daemon (@i{via} remote procedure calls) to instruct it what to do.
567
49e6291a 568The following sections explain how to prepare the build daemon's
f97c9175 569environment. See also @ref{Substitutes}, for information on how to allow
225dafde 570the daemon to download pre-built binaries.
49e6291a
LC
571
572@menu
573* Build Environment Setup:: Preparing the isolated build environment.
574* Daemon Offload Setup:: Offloading builds to remote machines.
575@end menu
576
577@node Build Environment Setup
578@subsection Build Environment Setup
579
bd5e766b
LC
580In a standard multi-user setup, Guix and its daemon---the
581@command{guix-daemon} program---are installed by the system
834129e0 582administrator; @file{/gnu/store} is owned by @code{root} and
bd5e766b
LC
583@command{guix-daemon} runs as @code{root}. Unprivileged users may use
584Guix tools to build packages or otherwise access the store, and the
585daemon will do it on their behalf, ensuring that the store is kept in a
586consistent state, and allowing built packages to be shared among users.
587
588@cindex build users
589When @command{guix-daemon} runs as @code{root}, you may not want package
590build processes themselves to run as @code{root} too, for obvious
591security reasons. To avoid that, a special pool of @dfn{build users}
592should be created for use by build processes started by the daemon.
593These build users need not have a shell and a home directory: they will
594just be used when the daemon drops @code{root} privileges in build
595processes. Having several such users allows the daemon to launch
596distinct build processes under separate UIDs, which guarantees that they
597do not interfere with each other---an essential feature since builds are
598regarded as pure functions (@pxref{Introduction}).
599
600On a GNU/Linux system, a build user pool may be created like this (using
601Bash syntax and the @code{shadow} commands):
602
091196b3
LC
603@c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
604@c for why `-G' is needed.
bd5e766b 605@example
cfc149dc
LC
606# groupadd --system guixbuild
607# for i in `seq -w 1 10`;
bd5e766b 608 do
cfc149dc
LC
609 useradd -g guixbuild -G guixbuild \
610 -d /var/empty -s `which nologin` \
611 -c "Guix build user $i" --system \
612 guixbuilder$i;
bd5e766b
LC
613 done
614@end example
615
616@noindent
54eb03ab
LC
617The number of build users determines how many build jobs may run in
618parallel, as specified by the @option{--max-jobs} option
d2825c96
LC
619(@pxref{Invoking guix-daemon, @option{--max-jobs}}). The
620@code{guix-daemon} program may then be run as @code{root} with the
621following command@footnote{If your machine uses the systemd init system,
622dropping the @file{@var{prefix}/lib/systemd/system/guix-daemon.service}
623file in @file{/etc/systemd/system} will ensure that
ad227484
MDRS
624@command{guix-daemon} is automatically started. Similarly, if your
625machine uses the Upstart init system, drop the
626@file{@var{prefix}/lib/upstart/system/guix-daemon.conf}
627file in @file{/etc/init}.}:
bd5e766b
LC
628
629@example
cfc149dc 630# guix-daemon --build-users-group=guixbuild
bd5e766b
LC
631@end example
632
e900c503 633@cindex chroot
b095792f
LC
634@noindent
635This way, the daemon starts build processes in a chroot, under one of
cfc149dc 636the @code{guixbuilder} users. On GNU/Linux, by default, the chroot
6dc99317
LC
637environment contains nothing but:
638
639@c Keep this list in sync with libstore/build.cc! -----------------------
640@itemize
641@item
4743a4da
LC
642a minimal @code{/dev} directory, created mostly independently from the
643host @code{/dev}@footnote{``Mostly'', because while the set of files
644that appear in the chroot's @code{/dev} is fixed, most of these files
645can only be created if the host has them.};
646
647@item
f97c9175 648the @code{/proc} directory; it only shows the processes of the container
4743a4da 649since a separate PID name space is used;
6dc99317
LC
650
651@item
652@file{/etc/passwd} with an entry for the current user and an entry for
653user @file{nobody};
654
655@item
656@file{/etc/group} with an entry for the user's group;
657
658@item
659@file{/etc/hosts} with an entry that maps @code{localhost} to
660@code{127.0.0.1};
661
662@item
663a writable @file{/tmp} directory.
664@end itemize
b095792f 665
cb960102
ED
666You can influence the directory where the daemon stores build trees
667@i{via} the @code{TMPDIR} environment variable. However, the build tree
f97c9175 668within the chroot is always called @file{/tmp/guix-build-@var{name}.drv-0},
cb960102
ED
669where @var{name} is the derivation name---e.g., @code{coreutils-8.24}.
670This way, the value of @code{TMPDIR} does not leak inside build
671environments, which avoids discrepancies in cases where build processes
672capture the name of their build tree.
673
e0c941fe
LC
674@vindex http_proxy
675The daemon also honors the @code{http_proxy} environment variable for
676HTTP downloads it performs, be it for fixed-output derivations
677(@pxref{Derivations}) or for substitutes (@pxref{Substitutes}).
678
1e2644bb
LC
679If you are installing Guix as an unprivileged user, it is still possible
680to run @command{guix-daemon} provided you pass @code{--disable-chroot}.
681However, build processes will not be isolated from one another, and not
682from the rest of the system. Thus, build processes may interfere with
683each other, and may access programs, libraries, and other files
684available on the system---making it much harder to view them as
685@emph{pure} functions.
bd5e766b 686
49e6291a
LC
687
688@node Daemon Offload Setup
689@subsection Using the Offload Facility
690
691@cindex offloading
4ec2e92d
LC
692@cindex build hook
693When desired, the build daemon can @dfn{offload}
694derivation builds to other machines
49e6291a
LC
695running Guix, using the @code{offload} @dfn{build hook}. When that
696feature is enabled, a list of user-specified build machines is read from
f97c9175 697@file{/etc/guix/machines.scm}; every time a build is requested, for
49e6291a 698instance via @code{guix build}, the daemon attempts to offload it to one
f97c9175 699of the machines that satisfy the constraints of the derivation, in
49e6291a
LC
700particular its system type---e.g., @file{x86_64-linux}. Missing
701prerequisites for the build are copied over SSH to the target machine,
702which then proceeds with the build; upon success the output(s) of the
703build are copied back to the initial machine.
704
4ec2e92d 705The @file{/etc/guix/machines.scm} file typically looks like this:
49e6291a
LC
706
707@example
708(list (build-machine
709 (name "eightysix.example.org")
710 (system "x86_64-linux")
711 (user "bob")
712 (speed 2.)) ; incredibly fast!
713
714 (build-machine
715 (name "meeps.example.org")
716 (system "mips64el-linux")
717 (user "alice")
718 (private-key
719 (string-append (getenv "HOME")
c4fdfd6f 720 "/.lsh/identity-for-guix"))))
49e6291a
LC
721@end example
722
723@noindent
724In the example above we specify a list of two build machines, one for
725the @code{x86_64} architecture and one for the @code{mips64el}
4ec2e92d
LC
726architecture.
727
728In fact, this file is---not surprisingly!---a Scheme file that is
729evaluated when the @code{offload} hook is started. Its return value
730must be a list of @code{build-machine} objects. While this example
731shows a fixed list of build machines, one could imagine, say, using
732DNS-SD to return a list of potential build machines discovered in the
733local network (@pxref{Introduction, Guile-Avahi,, guile-avahi, Using
c678a4ee
LC
734Avahi in Guile Scheme Programs}). The @code{build-machine} data type is
735detailed below.
4ec2e92d 736
c678a4ee 737@deftp {Data Type} build-machine
f97c9175
AE
738This data type represents build machines to which the daemon may offload
739builds. The important fields are:
49e6291a
LC
740
741@table @code
742
743@item name
f97c9175 744The host name of the remote machine.
49e6291a
LC
745
746@item system
f97c9175 747The system type of the remote machine---e.g., @code{"x86_64-linux"}.
49e6291a
LC
748
749@item user
750The user account to use when connecting to the remote machine over SSH.
751Note that the SSH key pair must @emph{not} be passphrase-protected, to
752allow non-interactive logins.
753
754@end table
755
4ec2e92d 756A number of optional fields may be specified:
49e6291a
LC
757
758@table @code
759
cecd72d5 760@item port
f97c9175 761Port number of SSH server on the machine (default: 22).
cecd72d5 762
49e6291a
LC
763@item private-key
764The SSH private key file to use when connecting to the machine.
765
c4fdfd6f
LC
766Currently offloading uses GNU@tie{}lsh as its SSH client
767(@pxref{Invoking lsh,,, GNU lsh Manual}). Thus, the key file here must
768be an lsh key file. This may change in the future, though.
769
49e6291a
LC
770@item parallel-builds
771The number of builds that may run in parallel on the machine (1 by
772default.)
773
774@item speed
775A ``relative speed factor''. The offload scheduler will tend to prefer
776machines with a higher speed factor.
777
778@item features
779A list of strings denoting specific features supported by the machine.
780An example is @code{"kvm"} for machines that have the KVM Linux modules
781and corresponding hardware support. Derivations can request features by
782name, and they will be scheduled on matching build machines.
783
784@end table
c678a4ee 785@end deftp
49e6291a
LC
786
787The @code{guix} command must be in the search path on the build
788machines, since offloading works by invoking the @code{guix archive} and
c4fdfd6f
LC
789@code{guix build} commands. In addition, the Guix modules must be in
790@code{$GUILE_LOAD_PATH} on the build machine---you can check whether
791this is the case by running:
792
793@example
74273b6f 794lsh build-machine guile -c "'(use-modules (guix config))'"
c4fdfd6f 795@end example
49e6291a 796
f97c9175 797There is one last thing to do once @file{machines.scm} is in place. As
49e6291a 798explained above, when offloading, files are transferred back and forth
c4fdfd6f
LC
799between the machine stores. For this to work, you first need to
800generate a key pair on each machine to allow the daemon to export signed
801archives of files from the store (@pxref{Invoking guix archive}):
49e6291a
LC
802
803@example
804# guix archive --generate-key
805@end example
806
807@noindent
c4fdfd6f
LC
808Each build machine must authorize the key of the master machine so that
809it accepts store items it receives from the master:
810
811@example
812# guix archive --authorize < master-public-key.txt
813@end example
814
815@noindent
816Likewise, the master machine must authorize the key of each build machine.
817
818All the fuss with keys is here to express pairwise mutual trust
819relations between the master and the build machines. Concretely, when
820the master receives files from a build machine (and @i{vice versa}), its
821build daemon can make sure they are genuine, have not been tampered
822with, and that they are signed by an authorized key.
49e6291a
LC
823
824
bd5e766b
LC
825@node Invoking guix-daemon
826@section Invoking @command{guix-daemon}
827
828The @command{guix-daemon} program implements all the functionality to
829access the store. This includes launching build processes, running the
830garbage collector, querying the availability of a build result, etc. It
831is normally run as @code{root} like this:
832
833@example
cfc149dc 834# guix-daemon --build-users-group=guixbuild
bd5e766b
LC
835@end example
836
837@noindent
081145cf 838For details on how to set it up, @pxref{Setting Up the Daemon}.
bd5e766b 839
e900c503
LC
840@cindex chroot
841@cindex container, build environment
842@cindex build environment
843@cindex reproducible builds
bd5e766b
LC
844By default, @command{guix-daemon} launches build processes under
845different UIDs, taken from the build group specified with
846@code{--build-users-group}. In addition, each build process is run in a
847chroot environment that only contains the subset of the store that the
848build process depends on, as specified by its derivation
849(@pxref{Programming Interface, derivation}), plus a set of specific
850system directories. By default, the latter contains @file{/dev} and
e900c503
LC
851@file{/dev/pts}. Furthermore, on GNU/Linux, the build environment is a
852@dfn{container}: in addition to having its own file system tree, it has
853a separate mount name space, its own PID name space, network name space,
854etc. This helps achieve reproducible builds (@pxref{Features}).
bd5e766b 855
cbc538fe
LC
856When the daemon performs a build on behalf of the user, it creates a
857build directory under @file{/tmp} or under the directory specified by
858its @code{TMPDIR} environment variable; this directory is shared with
859the container for the duration of the build. Be aware that using a
860directory other than @file{/tmp} can affect build results---for example,
861with a longer directory name, a build process that uses Unix-domain
862sockets might hit the name length limitation for @code{sun_path}, which
863it would otherwise not hit.
864
865The build directory is automatically deleted upon completion, unless the
866build failed and the client specified @option{--keep-failed}
867(@pxref{Invoking guix build, @option{--keep-failed}}).
868
bd5e766b
LC
869The following command-line options are supported:
870
871@table @code
872@item --build-users-group=@var{group}
873Take users from @var{group} to run build processes (@pxref{Setting Up
874the Daemon, build users}).
875
6858f9d1 876@item --no-substitutes
b5385b52 877@cindex substitutes
6858f9d1 878Do not use substitutes for build products. That is, always build things
c4202d60
LC
879locally instead of allowing downloads of pre-built binaries
880(@pxref{Substitutes}).
6858f9d1 881
b5385b52
LC
882By default substitutes are used, unless the client---such as the
883@command{guix package} command---is explicitly invoked with
884@code{--no-substitutes}.
885
886When the daemon runs with @code{--no-substitutes}, clients can still
887explicitly enable substitution @i{via} the @code{set-build-options}
888remote procedure call (@pxref{The Store}).
889
9176607e 890@item --substitute-urls=@var{urls}
f8a8e0fe 891@anchor{daemon-substitute-urls}
9176607e 892Consider @var{urls} the default whitespace-separated list of substitute
ae806096 893source URLs. When this option is omitted, @indicateurl{http://hydra.gnu.org}
9176607e
LC
894is used.
895
896This means that substitutes may be downloaded from @var{urls}, as long
897as they are signed by a trusted signature (@pxref{Substitutes}).
898
4ec2e92d
LC
899@cindex build hook
900@item --no-build-hook
901Do not use the @dfn{build hook}.
902
903The build hook is a helper program that the daemon can start and to
904which it submits build requests. This mechanism is used to offload
905builds to other machines (@pxref{Daemon Offload Setup}).
906
bd5e766b
LC
907@item --cache-failures
908Cache build failures. By default, only successful builds are cached.
909
30d9aa54
LC
910When this option is used, @command{guix gc --list-failures} can be used
911to query the set of store items marked as failed; @command{guix gc
912--clear-failures} removes store items from the set of cached failures.
913@xref{Invoking guix gc}.
914
bd5e766b
LC
915@item --cores=@var{n}
916@itemx -c @var{n}
917Use @var{n} CPU cores to build each derivation; @code{0} means as many
918as available.
919
6efc160e 920The default value is @code{0}, but it may be overridden by clients, such
e49951eb
MW
921as the @code{--cores} option of @command{guix build} (@pxref{Invoking
922guix build}).
bd5e766b
LC
923
924The effect is to define the @code{NIX_BUILD_CORES} environment variable
925in the build process, which can then use it to exploit internal
926parallelism---for instance, by running @code{make -j$NIX_BUILD_CORES}.
927
928@item --max-jobs=@var{n}
929@itemx -M @var{n}
930Allow at most @var{n} build jobs in parallel. The default value is
f6526eb3
LC
931@code{1}. Setting it to @code{0} means that no builds will be performed
932locally; instead, the daemon will offload builds (@pxref{Daemon Offload
933Setup}), or simply fail.
bd5e766b 934
ecf84b7c
LC
935@item --rounds=@var{N}
936Build each derivation @var{n} times in a row, and raise an error if
937consecutive build results are not bit-for-bit identical. Note that this
938setting can be overridden by clients such as @command{guix build}
939(@pxref{Invoking guix build}).
940
bd5e766b
LC
941@item --debug
942Produce debugging output.
943
944This is useful to debug daemon start-up issues, but then it may be
945overridden by clients, for example the @code{--verbosity} option of
e49951eb 946@command{guix build} (@pxref{Invoking guix build}).
bd5e766b
LC
947
948@item --chroot-directory=@var{dir}
949Add @var{dir} to the build chroot.
950
951Doing this may change the result of build processes---for instance if
952they use optional dependencies found in @var{dir} when it is available,
953and not otherwise. For that reason, it is not recommended to do so.
954Instead, make sure that each derivation declares all the inputs that it
955needs.
956
957@item --disable-chroot
958Disable chroot builds.
959
960Using this option is not recommended since, again, it would allow build
1e2644bb
LC
961processes to gain access to undeclared dependencies. It is necessary,
962though, when @command{guix-daemon} is running under an unprivileged user
963account.
bd5e766b
LC
964
965@item --disable-log-compression
966Disable compression of the build logs.
967
1da983b9
LC
968Unless @code{--lose-logs} is used, all the build logs are kept in the
969@var{localstatedir}. To save space, the daemon automatically compresses
970them with bzip2 by default. This option disables that.
971
ab3893d7
LC
972@item --disable-deduplication
973@cindex deduplication
bd5e766b
LC
974Disable automatic file ``deduplication'' in the store.
975
1da983b9 976By default, files added to the store are automatically ``deduplicated'':
ab3893d7
LC
977if a newly added file is identical to another one found in the store,
978the daemon makes the new file a hard link to the other file. This can
4988dd40 979noticeably reduce disk usage, at the expense of slightly increased
ab3893d7
LC
980input/output load at the end of a build process. This option disables
981this optimization.
1da983b9 982
6e37066e
LC
983@item --gc-keep-outputs[=yes|no]
984Tell whether the garbage collector (GC) must keep outputs of live
985derivations.
986
987When set to ``yes'', the GC will keep the outputs of any live derivation
988available in the store---the @code{.drv} files. The default is ``no'',
989meaning that derivation outputs are kept only if they are GC roots.
990
991@item --gc-keep-derivations[=yes|no]
992Tell whether the garbage collector (GC) must keep derivations
993corresponding to live outputs.
994
995When set to ``yes'', as is the case by default, the GC keeps
996derivations---i.e., @code{.drv} files---as long as at least one of their
997outputs is live. This allows users to keep track of the origins of
998items in their store. Setting it to ``no'' saves a bit of disk space.
999
1000Note that when both @code{--gc-keep-derivations} and
1001@code{--gc-keep-outputs} are used, the effect is to keep all the build
1002prerequisites (the sources, compiler, libraries, and other build-time
1003tools) of live objects in the store, regardless of whether these
1004prerequisites are live. This is convenient for developers since it
1005saves rebuilds or downloads.
1006
bd5e766b
LC
1007@item --impersonate-linux-2.6
1008On Linux-based systems, impersonate Linux 2.6. This means that the
1009kernel's @code{uname} system call will report 2.6 as the release number.
1010
1011This might be helpful to build programs that (usually wrongfully) depend
1012on the kernel version number.
1013
1014@item --lose-logs
1015Do not keep build logs. By default they are kept under
ce33631f 1016@code{@var{localstatedir}/guix/log}.
bd5e766b
LC
1017
1018@item --system=@var{system}
1019Assume @var{system} as the current system type. By default it is the
1020architecture/kernel pair found at configure time, such as
1021@code{x86_64-linux}.
b8d2aa26
LC
1022
1023@item --listen=@var{socket}
1024Listen for connections on @var{socket}, the file name of a Unix-domain
1025socket. The default socket is
1026@file{@var{localstatedir}/daemon-socket/socket}. This option is only
1027useful in exceptional circumstances, such as if you need to run several
1028daemons on the same machine.
bd5e766b
LC
1029@end table
1030
1031
0e2d0213
LC
1032@node Application Setup
1033@section Application Setup
1034
85e57214
LC
1035When using Guix on top of GNU/Linux distribution other than GuixSD---a
1036so-called @dfn{foreign distro}---a few additional steps are needed to
1037get everything in place. Here are some of them.
0e2d0213
LC
1038
1039@subsection Locales
1040
5c3c1427 1041@anchor{locales-and-locpath}
0e2d0213 1042@cindex locales, when not on GuixSD
5c3c1427 1043@vindex LOCPATH
85e57214 1044@vindex GUIX_LOCPATH
f97c9175
AE
1045Packages installed @i{via} Guix will not use the locale data of the
1046host system. Instead, you must first install one of the locale packages
85e57214
LC
1047available with Guix and then define the @code{GUIX_LOCPATH} environment
1048variable:
0e2d0213
LC
1049
1050@example
1051$ guix package -i glibc-locales
85e57214 1052$ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
0e2d0213
LC
1053@end example
1054
1055Note that the @code{glibc-locales} package contains data for all the
1056locales supported by the GNU@tie{}libc and weighs in at around
f97c9175 1057110@tie{}MiB. Alternatively, the @code{glibc-utf8-locales} is smaller but
0e2d0213
LC
1058limited to a few UTF-8 locales.
1059
85e57214
LC
1060The @code{GUIX_LOCPATH} variable plays a role similar to @code{LOCPATH}
1061(@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library Reference
1062Manual}). There are two important differences though:
1063
1064@enumerate
1065@item
f97c9175 1066@code{GUIX_LOCPATH} is honored only by the libc in Guix, and not by the libc
85e57214 1067provided by foreign distros. Thus, using @code{GUIX_LOCPATH} allows you
f97c9175 1068to make sure the programs of the foreign distro will not end up loading
85e57214
LC
1069incompatible locale data.
1070
1071@item
1072libc suffixes each entry of @code{GUIX_LOCPATH} with @code{/X.Y}, where
1073@code{X.Y} is the libc version---e.g., @code{2.22}. This means that,
1074should your Guix profile contain a mixture of programs linked against
1075different libc version, each libc version will only try to load locale
1076data in the right format.
1077@end enumerate
1078
1079This is important because the locale data format used by different libc
1080versions may be incompatible.
1081
0e2d0213
LC
1082@subsection X11 Fonts
1083
4988dd40 1084The majority of graphical applications use Fontconfig to locate and
f97c9175
AE
1085load fonts and perform X11-client-side rendering. The @code{fontconfig}
1086package in Guix looks for fonts in @file{$HOME/.guix-profile}
0e2d0213 1087by default. Thus, to allow graphical applications installed with Guix
f97c9175 1088to display fonts, you have to install fonts with Guix as well.
0e2d0213 1089Essential font packages include @code{gs-fonts}, @code{font-dejavu}, and
8fe5b1d1 1090@code{font-gnu-freefont-ttf}.
0e2d0213 1091
5c36edc8
LC
1092To display text written in Chinese languages, Japanese, or Korean in
1093graphical applications, consider installing
1094@code{font-adobe-source-han-sans} or @code{font-wqy-zenhei}. The former
1095has multiple outputs, one per language family (@pxref{Packages with
1096Multiple Outputs}). For instance, the following command installs fonts
1097for Chinese languages:
1098
1099@example
1100guix package -i font-adobe-source-han-sans:cn
1101@end example
1102
6d97319c
AK
1103@subsection Emacs Packages
1104
1105When you install Emacs packages with Guix, the elisp files may be placed
1106either in @file{$HOME/.guix-profile/share/emacs/site-lisp/} or in
1107sub-directories of
1108@file{$HOME/.guix-profile/share/emacs/site-lisp/guix.d/}. The latter
1109directory exists because potentially there may exist thousands of Emacs
1110packages and storing all their files in a single directory may be not
1111reliable (because of name conflicts). So we think using a separate
1112directory for each package is a good idea. It is very similar to how
1113the Emacs package system organizes the file structure (@pxref{Package
1114Files,,, emacs, The GNU Emacs Manual}).
1115
1116By default, Emacs (installed with Guix) ``knows'' where these packages
f97c9175 1117are placed, so you do not need to perform any configuration. If, for
6d97319c 1118some reason, you want to avoid auto-loading Emacs packages installed
f97c9175 1119with Guix, you can do so by running Emacs with @code{--no-site-file}
6d97319c
AK
1120option (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
1121
0e2d0213
LC
1122@c TODO What else?
1123
eeaf4427
LC
1124@c *********************************************************************
1125@node Package Management
1126@chapter Package Management
1127
f8348b91 1128The purpose of GNU Guix is to allow users to easily install, upgrade, and
eeaf4427 1129remove software packages, without having to know about their build
f97c9175 1130procedures or dependencies. Guix also goes beyond this obvious set of
eeaf4427
LC
1131features.
1132
1133This chapter describes the main features of Guix, as well as the package
c1941588 1134management tools it provides. Two user interfaces are provided for
c554de89
AK
1135routine package management tasks: A command-line interface described below
1136(@pxref{Invoking guix package, @code{guix package}}), as well as a visual user
1137interface in Emacs described in a subsequent chapter (@pxref{Emacs Interface}).
eeaf4427
LC
1138
1139@menu
1140* Features:: How Guix will make your life brighter.
e49951eb 1141* Invoking guix package:: Package installation, removal, etc.
c4202d60 1142* Substitutes:: Downloading pre-built binaries.
760c60d6 1143* Packages with Multiple Outputs:: Single source package, multiple outputs.
e49951eb 1144* Invoking guix gc:: Running the garbage collector.
f651b477 1145* Invoking guix pull:: Fetching the latest Guix and distribution.
760c60d6 1146* Invoking guix archive:: Exporting and importing store files.
eeaf4427
LC
1147@end menu
1148
1149@node Features
1150@section Features
1151
1152When using Guix, each package ends up in the @dfn{package store}, in its
1153own directory---something that resembles
9a130e19
AK
1154@file{/gnu/store/xxx-package-1.2}, where @code{xxx} is a base32 string
1155(note that Guix comes with an Emacs extension to shorten those file
081145cf 1156names, @pxref{Emacs Prettify}.)
eeaf4427
LC
1157
1158Instead of referring to these directories, users have their own
1159@dfn{profile}, which points to the packages that they actually want to
821b0015
LC
1160use. These profiles are stored within each user's home directory, at
1161@code{$HOME/.guix-profile}.
eeaf4427 1162
821b0015 1163For example, @code{alice} installs GCC 4.7.2. As a result,
eeaf4427 1164@file{/home/alice/.guix-profile/bin/gcc} points to
834129e0 1165@file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Now, on the same machine,
821b0015
LC
1166@code{bob} had already installed GCC 4.8.0. The profile of @code{bob}
1167simply continues to point to
834129e0 1168@file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc}---i.e., both versions of GCC
821b0015 1169coexist on the same system without any interference.
eeaf4427 1170
e49951eb 1171The @command{guix package} command is the central tool to manage
f97c9175 1172packages (@pxref{Invoking guix package}). It operates on the per-user
821b0015 1173profiles, and can be used @emph{with normal user privileges}.
eeaf4427
LC
1174
1175The command provides the obvious install, remove, and upgrade
1176operations. Each invocation is actually a @emph{transaction}: either
ba55b1cb 1177the specified operation succeeds, or nothing happens. Thus, if the
e49951eb 1178@command{guix package} process is terminated during the transaction,
eeaf4427
LC
1179or if a power outage occurs during the transaction, then the user's
1180profile remains in its previous state, and remains usable.
1181
1182In addition, any package transaction may be @emph{rolled back}. So, if,
1183for example, an upgrade installs a new version of a package that turns
1184out to have a serious bug, users may roll back to the previous instance
4af2447e
LC
1185of their profile, which was known to work well. Similarly, the global
1186system configuration is subject to transactional upgrades and roll-back
1187(@pxref{Using the Configuration System}).
eeaf4427 1188
f97c9175
AE
1189All packages in the package store may be @emph{garbage-collected}.
1190Guix can determine which packages are still referenced by user
fe8ff028 1191profiles, and remove those that are provably no longer referenced
e49951eb 1192(@pxref{Invoking guix gc}). Users may also explicitly remove old
fe8ff028
LC
1193generations of their profile so that the packages they refer to can be
1194collected.
eeaf4427 1195
e900c503
LC
1196@cindex reproducibility
1197@cindex reproducible builds
eeaf4427
LC
1198Finally, Guix takes a @dfn{purely functional} approach to package
1199management, as described in the introduction (@pxref{Introduction}).
834129e0 1200Each @file{/gnu/store} package directory name contains a hash of all the
eeaf4427
LC
1201inputs that were used to build that package---compiler, libraries, build
1202scripts, etc. This direct correspondence allows users to make sure a
1203given package installation matches the current state of their
e900c503
LC
1204distribution. It also helps maximize @dfn{build reproducibility}:
1205thanks to the isolated build environments that are used, a given build
1206is likely to yield bit-identical files when performed on different
1207machines (@pxref{Invoking guix-daemon, container}).
eeaf4427 1208
c4202d60 1209@cindex substitutes
eeaf4427 1210This foundation allows Guix to support @dfn{transparent binary/source
c4202d60 1211deployment}. When a pre-built binary for a @file{/gnu/store} item is
18f2887b 1212available from an external source---a @dfn{substitute}, Guix just
c4202d60
LC
1213downloads it and unpacks it;
1214otherwise, it builds the package from source, locally
1215(@pxref{Substitutes}).
eeaf4427 1216
f5fd4fd2
LC
1217Control over the build environment is a feature that is also useful for
1218developers. The @command{guix environment} command allows developers of
1219a package to quickly set up the right development environment for their
f97c9175
AE
1220package, without having to manually install the dependencies of the
1221package into their profile (@pxref{Invoking guix environment}).
f5fd4fd2 1222
e49951eb
MW
1223@node Invoking guix package
1224@section Invoking @command{guix package}
eeaf4427 1225
e49951eb 1226The @command{guix package} command is the tool that allows users to
eeaf4427
LC
1227install, upgrade, and remove packages, as well as rolling back to
1228previous configurations. It operates only on the user's own profile,
1229and works with normal user privileges (@pxref{Features}). Its syntax
1230is:
1231
1232@example
e49951eb 1233guix package @var{options}
eeaf4427
LC
1234@end example
1235
ba55b1cb 1236Primarily, @var{options} specifies the operations to be performed during
eeaf4427 1237the transaction. Upon completion, a new profile is created, but
99bd74d5 1238previous @dfn{generations} of the profile remain available, should the user
eeaf4427
LC
1239want to roll back.
1240
6447738c
MW
1241For example, to remove @code{lua} and install @code{guile} and
1242@code{guile-cairo} in a single transaction:
1243
1244@example
1245guix package -r lua -i guile guile-cairo
1246@end example
1247
99bd74d5
LC
1248@command{guix package} also supports a @dfn{declarative approach}
1249whereby the user specifies the exact set of packages to be available and
1250passes it @i{via} the @option{--manifest} option
1251(@pxref{profile-manifest, @option{--manifest}}).
1252
b9e5c0a9 1253For each user, a symlink to the user's default profile is automatically
0ec1af59 1254created in @file{$HOME/.guix-profile}. This symlink always points to the
b9e5c0a9
LC
1255current generation of the user's default profile. Thus, users can add
1256@file{$HOME/.guix-profile/bin} to their @code{PATH} environment
1257variable, and so on.
d664f1b4
LC
1258@cindex search paths
1259If you are not using the Guix System Distribution, consider adding the
1260following lines to your @file{~/.bash_profile} (@pxref{Bash Startup
1261Files,,, bash, The GNU Bash Reference Manual}) so that newly-spawned
1262shells get all the right environment variable definitions:
1263
1264@example
1265GUIX_PROFILE="$HOME/.guix-profile" \
1266source "$HOME/.guix-profile/etc/profile"
1267@end example
b9e5c0a9 1268
4379c35b
LC
1269In a multi-user setup, user profiles are stored in a place registered as
1270a @dfn{garbage-collector root}, which @file{$HOME/.guix-profile} points
1271to (@pxref{Invoking guix gc}). That directory is normally
0ec1af59
LC
1272@code{@var{localstatedir}/profiles/per-user/@var{user}}, where
1273@var{localstatedir} is the value passed to @code{configure} as
4379c35b
LC
1274@code{--localstatedir}, and @var{user} is the user name. The
1275@file{per-user} directory is created when @command{guix-daemon} is
1276started, and the @var{user} sub-directory is created by @command{guix
1277package}.
0ec1af59
LC
1278
1279The @var{options} can be among the following:
1280
eeaf4427
LC
1281@table @code
1282
6447738c
MW
1283@item --install=@var{package} @dots{}
1284@itemx -i @var{package} @dots{}
1285Install the specified @var{package}s.
eeaf4427 1286
6447738c 1287Each @var{package} may specify either a simple package name, such as
eeaf4427 1288@code{guile}, or a package name followed by a hyphen and version number,
724311a2
LC
1289such as @code{guile-1.8.8} or simply @code{guile-1.8} (in the latter
1290case, the newest version prefixed by @code{1.8} is selected.)
1291
1292If no version number is specified, the
dc5669cd
MW
1293newest available version will be selected. In addition, @var{package}
1294may contain a colon, followed by the name of one of the outputs of the
6e721c4d 1295package, as in @code{gcc:doc} or @code{binutils-2.22:lib}
e7f34eb0
LC
1296(@pxref{Packages with Multiple Outputs}). Packages with a corresponding
1297name (and optionally version) are searched for among the GNU
1298distribution modules (@pxref{Package Modules}).
eeaf4427 1299
461572cc
LC
1300@cindex propagated inputs
1301Sometimes packages have @dfn{propagated inputs}: these are dependencies
21461f27
LC
1302that automatically get installed along with the required package
1303(@pxref{package-propagated-inputs, @code{propagated-inputs} in
1304@code{package} objects}, for information about propagated inputs in
1305package definitions).
461572cc 1306
21461f27 1307@anchor{package-cmd-propagated-inputs}
461572cc
LC
1308An example is the GNU MPC library: its C header files refer to those of
1309the GNU MPFR library, which in turn refer to those of the GMP library.
1310Thus, when installing MPC, the MPFR and GMP libraries also get installed
1311in the profile; removing MPC also removes MPFR and GMP---unless they had
f97c9175 1312also been explicitly installed by the user.
461572cc 1313
ba7ea5ce 1314Besides, packages sometimes rely on the definition of environment
5924080d 1315variables for their search paths (see explanation of
ba7ea5ce 1316@code{--search-paths} below). Any missing or possibly incorrect
5924080d
LC
1317environment variable definitions are reported here.
1318
ef010c0f 1319@c XXX: keep me up-to-date
5924080d 1320Finally, when installing a GNU package, the tool reports the
ef010c0f
LC
1321availability of a newer upstream version. In the future, it may provide
1322the option of installing directly from the upstream version, even if
1323that version is not yet in the distribution.
1324
5d4b411f
LC
1325@item --install-from-expression=@var{exp}
1326@itemx -e @var{exp}
1327Install the package @var{exp} evaluates to.
1328
1329@var{exp} must be a Scheme expression that evaluates to a
1330@code{<package>} object. This option is notably useful to disambiguate
1331between same-named variants of a package, with expressions such as
1332@code{(@@ (gnu packages base) guile-final)}.
1333
1334Note that this option installs the first output of the specified
1335package, which may be insufficient when needing a specific output of a
1336multiple-output package.
1337
0d279400
DT
1338@item --install-from-file=@var{file}
1339@itemx -f @var{file}
1340Install the package that the code within @var{file} evaluates to.
1341
1342As an example, @var{file} might contain a definition like this
1343(@pxref{Defining Packages}):
1344
1345@example
1346@verbatiminclude package-hello.scm
1347@end example
1348
1349Developers may find it useful to include such a @file{package.scm} file
f97c9175 1350in the root of their project source tree that can be used to test
0d279400
DT
1351development snapshots and create reproducible development environments
1352(@pxref{Invoking guix environment}).
1353
6447738c
MW
1354@item --remove=@var{package} @dots{}
1355@itemx -r @var{package} @dots{}
1356Remove the specified @var{package}s.
eeaf4427 1357
6447738c 1358As for @code{--install}, each @var{package} may specify a version number
13ed095c
LC
1359and/or output name in addition to the package name. For instance,
1360@code{-r glibc:debug} would remove the @code{debug} output of
1361@code{glibc}.
1362
6447738c
MW
1363@item --upgrade[=@var{regexp} @dots{}]
1364@itemx -u [@var{regexp} @dots{}]
1365Upgrade all the installed packages. If one or more @var{regexp}s are
1366specified, upgrade only installed packages whose name matches a
d5f01e48 1367@var{regexp}. Also see the @code{--do-not-upgrade} option below.
eeaf4427 1368
f651b477
LC
1369Note that this upgrades package to the latest version of packages found
1370in the distribution currently installed. To update your distribution,
1371you should regularly run @command{guix pull} (@pxref{Invoking guix
1372pull}).
1373
d5f01e48
MW
1374@item --do-not-upgrade[=@var{regexp} @dots{}]
1375When used together with the @code{--upgrade} option, do @emph{not}
1376upgrade any packages whose name matches a @var{regexp}. For example, to
1377upgrade all packages in the current profile except those containing the
1378substring ``emacs'':
1379
1380@example
1381$ guix package --upgrade . --do-not-upgrade emacs
1382@end example
1383
99bd74d5 1384@item @anchor{profile-manifest}--manifest=@var{file}
1b676447 1385@itemx -m @var{file}
99bd74d5
LC
1386@cindex profile declaration
1387@cindex profile manifest
1388Create a new generation of the profile from the manifest object
1b676447
DT
1389returned by the Scheme code in @var{file}.
1390
99bd74d5
LC
1391This allows you to @emph{declare} the profile's contents rather than
1392constructing it through a sequence of @code{--install} and similar
1393commands. The advantage is that @var{file} can be put under version
1394control, copied to different machines to reproduce the same profile, and
1395so on.
1396
1397@c FIXME: Add reference to (guix profile) documentation when available.
1398@var{file} must return a @dfn{manifest} object, which is roughly a list
1399of packages:
1b676447 1400
99bd74d5 1401@findex packages->manifest
1b676447 1402@example
99bd74d5 1403(use-package-modules guile emacs)
1b676447
DT
1404
1405(packages->manifest
99bd74d5
LC
1406 (list emacs
1407 guile-2.0
1b676447 1408 ;; Use a specific package output.
99bd74d5 1409 (list guile-2.0 "debug")))
1b676447
DT
1410@end example
1411
24e262f0
LC
1412@item --roll-back
1413Roll back to the previous @dfn{generation} of the profile---i.e., undo
1414the last transaction.
1415
1416When combined with options such as @code{--install}, roll back occurs
1417before any other actions.
1418
d9307267 1419When rolling back from the first generation that actually contains
4b2bc804 1420installed packages, the profile is made to point to the @dfn{zeroth
f97c9175 1421generation}, which contains no files apart from its own metadata.
d9307267 1422
f97c9175
AE
1423After having rolled back, installing, removing, or upgrading packages
1424overwrites previous future generations. Thus, the history of the
1425generations in a profile is always linear.
82fe08ed 1426
b3bb82f1
AK
1427@item --switch-generation=@var{pattern}
1428@itemx -S @var{pattern}
1429Switch to a particular generation defined by @var{pattern}.
1430
1431@var{pattern} may be either a generation number or a number prefixed
1432with ``+'' or ``-''. The latter means: move forward/backward by a
1433specified number of generations. For example, if you want to return to
1434the latest generation after @code{--roll-back}, use
1435@code{--switch-generation=+1}.
1436
1437The difference between @code{--roll-back} and
1438@code{--switch-generation=-1} is that @code{--switch-generation} will
1439not make a zeroth generation, so if a specified generation does not
1440exist, the current generation will not be changed.
1441
dbc31ab2 1442@item --search-paths[=@var{kind}]
5924080d
LC
1443@cindex search paths
1444Report environment variable definitions, in Bash syntax, that may be
1445needed in order to use the set of installed packages. These environment
1446variables are used to specify @dfn{search paths} for files used by some
1447of the installed packages.
1448
1449For example, GCC needs the @code{CPATH} and @code{LIBRARY_PATH}
1450environment variables to be defined so it can look for headers and
1451libraries in the user's profile (@pxref{Environment Variables,,, gcc,
1452Using the GNU Compiler Collection (GCC)}). If GCC and, say, the C
1453library are installed in the profile, then @code{--search-paths} will
1454suggest setting these variables to @code{@var{profile}/include} and
1455@code{@var{profile}/lib}, respectively.
1456
dbc31ab2
LC
1457The typical use case is to define these environment variables in the
1458shell:
1459
1460@example
1461$ eval `guix package --search-paths`
1462@end example
1463
1464@var{kind} may be one of @code{exact}, @code{prefix}, or @code{suffix},
1465meaning that the returned environment variable definitions will either
1466be exact settings, or prefixes or suffixes of the current value of these
1467variables. When omitted, @var{kind} defaults to @code{exact}.
1468
fc2d2339
LC
1469This option can also be used to compute the @emph{combined} search paths
1470of several profiles. Consider this example:
1471
1472@example
1473$ guix package -p foo -i guile
1474$ guix package -p bar -i guile-json
1475$ guix package -p foo -p bar --search-paths
1476@end example
1477
1478The last command above reports about the @code{GUILE_LOAD_PATH}
1479variable, even though, taken individually, neither @file{foo} nor
1480@file{bar} would lead to that recommendation.
1481
1482
eeaf4427
LC
1483@item --profile=@var{profile}
1484@itemx -p @var{profile}
1485Use @var{profile} instead of the user's default profile.
1486
70915c1a 1487@item --verbose
f97c9175
AE
1488Produce verbose output. In particular, emit the build log of the
1489environment on the standard error port.
70915c1a 1490
eeaf4427
LC
1491@item --bootstrap
1492Use the bootstrap Guile to build the profile. This option is only
1493useful to distribution developers.
1494
1495@end table
1496
f97c9175 1497In addition to these actions, @command{guix package} supports the
733b4130
LC
1498following options to query the current state of a profile, or the
1499availability of packages:
eeaf4427 1500
733b4130
LC
1501@table @option
1502
acc08466
NK
1503@item --search=@var{regexp}
1504@itemx -s @var{regexp}
b110869d 1505@cindex searching for packages
5763ad92 1506List the available packages whose name, synopsis, or description matches
f97c9175 1507@var{regexp}. Print all the metadata of matching packages in
299112d3
LC
1508@code{recutils} format (@pxref{Top, GNU recutils databases,, recutils,
1509GNU recutils manual}).
acc08466 1510
299112d3
LC
1511This allows specific fields to be extracted using the @command{recsel}
1512command, for instance:
1513
1514@example
e49951eb 1515$ guix package -s malloc | recsel -p name,version
299112d3
LC
1516name: glibc
1517version: 2.17
1518
1519name: libgc
1520version: 7.2alpha6
1521@end example
acc08466 1522
a12d92f5
LC
1523Similarly, to show the name of all the packages available under the
1524terms of the GNU@tie{}LGPL version 3:
1525
1526@example
1527$ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
1528name: elfutils
1529
1530name: gmp
1531@dots{}
1532@end example
1533
db5a9444
LC
1534It is also possible to refine search results using several @code{-s}
1535flags. For example, the following command returns a list of board
1536games:
1537
1538@example
1539$ guix package -s '\<board\>' -s game | recsel -p name
1540name: gnubg
1541@dots{}
1542@end example
1543
1544If we were to omit @code{-s game}, we would also get software packages
1545that deal with printed circuit boards; removing the angle brackets
1546around @code{board} would further add packages that have to do with
1547keyboards.
1548
b110869d
LC
1549And now for a more elaborate example. The following command searches
1550for cryptographic libraries, filters out Haskell, Perl, Python, and Ruby
1551libraries, and prints the name and synopsis of the matching packages:
1552
1553@example
1554$ guix package -s crypto -s library | \
1555 recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
1556@end example
1557
1558@noindent
1559@xref{Selection Expressions,,, recutils, GNU recutils manual}, for more
1560information on @dfn{selection expressions} for @code{recsel -e}.
1561
2aa6efb0
CR
1562@item --show=@var{package}
1563Show details about @var{package}, taken from the list of available packages, in
1564@code{recutils} format (@pxref{Top, GNU recutils databases,, recutils, GNU
1565recutils manual}).
1566
1567@example
1568$ guix package --show=python | recsel -p name,version
1569name: python
1570version: 2.7.6
1571
1572name: python
1573version: 3.3.5
1574@end example
1575
1576You may also specify the full name of a package to only get details about a
1577specific version of it:
1578@example
1579$ guix package --show=python-3.3.5 | recsel -p name,version
1580name: python
1581version: 3.3.5
1582@end example
1583
1584
1585
733b4130
LC
1586@item --list-installed[=@var{regexp}]
1587@itemx -I [@var{regexp}]
bd9bde1c
LC
1588List the currently installed packages in the specified profile, with the
1589most recently installed packages shown last. When @var{regexp} is
1590specified, list only installed packages whose name matches @var{regexp}.
733b4130
LC
1591
1592For each installed package, print the following items, separated by
1593tabs: the package name, its version string, the part of the package that
1594is installed (for instance, @code{out} for the default output,
1595@code{include} for its headers, etc.), and the path of this package in
1596the store.
1597
64fc89b6
LC
1598@item --list-available[=@var{regexp}]
1599@itemx -A [@var{regexp}]
5763ad92 1600List packages currently available in the distribution for this system
a1ba8475
LC
1601(@pxref{GNU Distribution}). When @var{regexp} is specified, list only
1602installed packages whose name matches @var{regexp}.
64fc89b6
LC
1603
1604For each package, print the following items separated by tabs: its name,
6e721c4d
LC
1605its version string, the parts of the package (@pxref{Packages with
1606Multiple Outputs}), and the source location of its definition.
64fc89b6 1607
f566d765
LC
1608@item --list-generations[=@var{pattern}]
1609@itemx -l [@var{pattern}]
1610Return a list of generations along with their creation dates; for each
1611generation, show the installed packages, with the most recently
4b2bc804
NK
1612installed packages shown last. Note that the zeroth generation is never
1613shown.
f566d765
LC
1614
1615For each installed package, print the following items, separated by
1616tabs: the name of a package, its version string, the part of the package
1617that is installed (@pxref{Packages with Multiple Outputs}), and the
1618location of this package in the store.
1619
1620When @var{pattern} is used, the command returns only matching
1621generations. Valid patterns include:
1622
1623@itemize
1624@item @emph{Integers and comma-separated integers}. Both patterns denote
1625generation numbers. For instance, @code{--list-generations=1} returns
1626the first one.
1627
1628And @code{--list-generations=1,8,2} outputs three generations in the
1629specified order. Neither spaces nor trailing commas are allowed.
1630
1631@item @emph{Ranges}. @code{--list-generations=2..9} prints the
1632specified generations and everything in between. Note that the start of
f97c9175 1633a range must be smaller than its end.
f566d765
LC
1634
1635It is also possible to omit the endpoint. For example,
1636@code{--list-generations=2..}, returns all generations starting from the
1637second one.
1638
1639@item @emph{Durations}. You can also get the last @emph{N}@tie{}days, weeks,
1640or months by passing an integer along with the first letter of the
d7ddb257
LC
1641duration. For example, @code{--list-generations=20d} lists generations
1642that are up to 20 days old.
f566d765
LC
1643@end itemize
1644
b7884ca3
NK
1645@item --delete-generations[=@var{pattern}]
1646@itemx -d [@var{pattern}]
d7ddb257
LC
1647When @var{pattern} is omitted, delete all generations except the current
1648one.
b7884ca3
NK
1649
1650This command accepts the same patterns as @option{--list-generations}.
d7ddb257
LC
1651When @var{pattern} is specified, delete the matching generations. When
1652@var{pattern} specifies a duration, generations @emph{older} than the
1653specified duration match. For instance, @code{--delete-generations=1m}
1654deletes generations that are more than one month old.
1655
391bdd8f
LC
1656If the current generation matches, it is @emph{not} deleted. Also, the
1657zeroth generation is never deleted.
b7884ca3 1658
f97c9175 1659Note that deleting generations prevents rolling back to them.
1bb9900a
LC
1660Consequently, this command must be used with care.
1661
733b4130 1662@end table
eeaf4427 1663
70ee5642 1664Finally, since @command{guix package} may actually start build
ccd7158d 1665processes, it supports all the common build options (@pxref{Common Build
f97c9175 1666Options}). It also supports package transformation options, such as
b8638f03
LC
1667@option{--with-source} (@pxref{Package Transformation Options}).
1668However, note that package transformations are lost when upgrading; to
f97c9175 1669preserve transformations across upgrades, you should define your own
b8638f03
LC
1670package variant in a Guile module and add it to @code{GUIX_PACKAGE_PATH}
1671(@pxref{Defining Packages}).
1672
70ee5642 1673
c4202d60
LC
1674@node Substitutes
1675@section Substitutes
1676
1677@cindex substitutes
1678@cindex pre-built binaries
1679Guix supports transparent source/binary deployment, which means that it
1680can either build things locally, or download pre-built items from a
1681server. We call these pre-built items @dfn{substitutes}---they are
1682substitutes for local build results. In many cases, downloading a
1683substitute is much faster than building things locally.
1684
1685Substitutes can be anything resulting from a derivation build
1686(@pxref{Derivations}). Of course, in the common case, they are
1687pre-built package binaries, but source tarballs, for instance, which
1688also result from derivation builds, can be available as substitutes.
1689
1690The @code{hydra.gnu.org} server is a front-end to a build farm that
1691builds packages from the GNU distribution continuously for some
32950fc8
AK
1692architectures, and makes them available as substitutes (@pxref{Emacs
1693Hydra}, for information on how to query the continuous integration
1694server). This is the
f8a8e0fe
LC
1695default source of substitutes; it can be overridden by passing the
1696@option{--substitute-urls} option either to @command{guix-daemon}
1697(@pxref{daemon-substitute-urls,, @code{guix-daemon --substitute-urls}})
1698or to client tools such as @command{guix package}
1699(@pxref{client-substitute-urls,, client @option{--substitute-urls}
1700option}).
c4202d60
LC
1701
1702@cindex security
1703@cindex digital signatures
1704To allow Guix to download substitutes from @code{hydra.gnu.org}, you
1705must add its public key to the access control list (ACL) of archive
1706imports, using the @command{guix archive} command (@pxref{Invoking guix
1707archive}). Doing so implies that you trust @code{hydra.gnu.org} to not
1708be compromised and to serve genuine substitutes.
1709
1710This public key is installed along with Guix, in
1711@code{@var{prefix}/share/guix/hydra.gnu.org.pub}, where @var{prefix} is
1712the installation prefix of Guix. If you installed Guix from source,
1713make sure you checked the GPG signature of
1714@file{guix-@value{VERSION}.tar.gz}, which contains this public key file.
1715Then, you can run something like this:
1716
1717@example
1718# guix archive --authorize < hydra.gnu.org.pub
1719@end example
1720
1721Once this is in place, the output of a command like @code{guix build}
1722should change from something like:
1723
1724@example
1725$ guix build emacs --dry-run
1726The following derivations would be built:
1727 /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
1728 /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
1729 /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
1730 /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
1731@dots{}
1732@end example
1733
1734@noindent
1735to something like:
1736
1737@example
1738$ guix build emacs --dry-run
1739The following files would be downloaded:
1740 /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
1741 /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
1742 /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
1743 /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
1744@dots{}
1745@end example
1746
1747@noindent
1748This indicates that substitutes from @code{hydra.gnu.org} are usable and
1749will be downloaded, when possible, for future builds.
1750
1751Guix ignores substitutes that are not signed, or that are not signed by
ef27aa9c 1752one of the keys listed in the ACL. It also detects and raises an error
c4202d60
LC
1753when attempting to use a substitute that has been tampered with.
1754
e0c941fe
LC
1755@vindex http_proxy
1756Substitutes are downloaded over HTTP. The @code{http_proxy} environment
1757variable can be set in the environment of @command{guix-daemon} and is
1758honored for downloads of substitutes. Note that the value of
1759@code{http_proxy} in the environment where @command{guix build},
1760@command{guix package}, and other client commands are run has
1761@emph{absolutely no effect}.
1762
c4202d60
LC
1763The substitute mechanism can be disabled globally by running
1764@code{guix-daemon} with @code{--no-substitutes} (@pxref{Invoking
1765guix-daemon}). It can also be disabled temporarily by passing the
1766@code{--no-substitutes} option to @command{guix package}, @command{guix
1767build}, and other command-line tools.
1768
1769
1770Today, each individual's control over their own computing is at the
1771mercy of institutions, corporations, and groups with enough power and
1772determination to subvert the computing infrastructure and exploit its
1773weaknesses. While using @code{hydra.gnu.org} substitutes can be
1774convenient, we encourage users to also build on their own, or even run
1775their own build farm, such that @code{hydra.gnu.org} is less of an
8ce229fc
LC
1776interesting target. One way to help is by publishing the software you
1777build using @command{guix publish} so that others have one more choice
1778of server to download substitutes from (@pxref{Invoking guix publish}).
c4202d60
LC
1779
1780Guix has the foundations to maximize build reproducibility
1781(@pxref{Features}). In most cases, independent builds of a given
1782package or derivation should yield bit-identical results. Thus, through
1783a diverse set of independent package builds, we can strengthen the
d23c20f1
LC
1784integrity of our systems. The @command{guix challenge} command aims to
1785help users assess substitute servers, and to assist developers in
1786finding out about non-deterministic package builds (@pxref{Invoking guix
a8d65643
LC
1787challenge}). Similarly, the @option{--check} option of @command{guix
1788build} allows users to check whether previously-installed substitutes
1789are genuine by rebuilding them locally (@pxref{build-check,
1790@command{guix build --check}}).
c4202d60
LC
1791
1792In the future, we want Guix to have support to publish and retrieve
1793binaries to/from other users, in a peer-to-peer fashion. If you would
1794like to discuss this project, join us on @email{guix-devel@@gnu.org}.
1795
1796
6e721c4d
LC
1797@node Packages with Multiple Outputs
1798@section Packages with Multiple Outputs
1799
1800@cindex multiple-output packages
1801@cindex package outputs
1802
1803Often, packages defined in Guix have a single @dfn{output}---i.e., the
f97c9175 1804source package leads to exactly one directory in the store. When running
6e721c4d
LC
1805@command{guix package -i glibc}, one installs the default output of the
1806GNU libc package; the default output is called @code{out}, but its name
1807can be omitted as shown in this command. In this particular case, the
1808default output of @code{glibc} contains all the C header files, shared
1809libraries, static libraries, Info documentation, and other supporting
1810files.
1811
1812Sometimes it is more appropriate to separate the various types of files
1813produced from a single source package into separate outputs. For
1814instance, the GLib C library (used by GTK+ and related packages)
1815installs more than 20 MiB of reference documentation as HTML pages.
1816To save space for users who do not need it, the documentation goes to a
1817separate output, called @code{doc}. To install the main GLib output,
1818which contains everything but the documentation, one would run:
1819
1820@example
1821guix package -i glib
1822@end example
1823
1824The command to install its documentation is:
1825
1826@example
1827guix package -i glib:doc
1828@end example
1829
1830Some packages install programs with different ``dependency footprints''.
f97c9175 1831For instance, the WordNet package installs both command-line tools and
6e721c4d
LC
1832graphical user interfaces (GUIs). The former depend solely on the C
1833library, whereas the latter depend on Tcl/Tk and the underlying X
1834libraries. In this case, we leave the command-line tools in the default
1835output, whereas the GUIs are in a separate output. This allows users
fcc58db6
LC
1836who do not need the GUIs to save space. The @command{guix size} command
1837can help find out about such situations (@pxref{Invoking guix size}).
88856916 1838@command{guix graph} can also be helpful (@pxref{Invoking guix graph}).
6e721c4d
LC
1839
1840There are several such multiple-output packages in the GNU distribution.
91ef73d4
LC
1841Other conventional output names include @code{lib} for libraries and
1842possibly header files, @code{bin} for stand-alone programs, and
1843@code{debug} for debugging information (@pxref{Installing Debugging
1844Files}). The outputs of a packages are listed in the third column of
1845the output of @command{guix package --list-available} (@pxref{Invoking
1846guix package}).
6e721c4d 1847
eeaf4427 1848
e49951eb
MW
1849@node Invoking guix gc
1850@section Invoking @command{guix gc}
fe8ff028
LC
1851
1852@cindex garbage collector
f97c9175 1853Packages that are installed, but not used, may be @dfn{garbage-collected}.
e49951eb 1854The @command{guix gc} command allows users to explicitly run the garbage
c22eb992
LC
1855collector to reclaim space from the @file{/gnu/store} directory. It is
1856the @emph{only} way to remove files from @file{/gnu/store}---removing
1857files or directories manually may break it beyond repair!
fe8ff028
LC
1858
1859The garbage collector has a set of known @dfn{roots}: any file under
834129e0 1860@file{/gnu/store} reachable from a root is considered @dfn{live} and
fe8ff028
LC
1861cannot be deleted; any other file is considered @dfn{dead} and may be
1862deleted. The set of garbage collector roots includes default user
e49951eb
MW
1863profiles, and may be augmented with @command{guix build --root}, for
1864example (@pxref{Invoking guix build}).
fe8ff028 1865
1bb9900a
LC
1866Prior to running @code{guix gc --collect-garbage} to make space, it is
1867often useful to remove old generations from user profiles; that way, old
1868package builds referenced by those generations can be reclaimed. This
1869is achieved by running @code{guix package --delete-generations}
1870(@pxref{Invoking guix package}).
1871
e49951eb 1872The @command{guix gc} command has three modes of operation: it can be
fe8ff028 1873used to garbage-collect any dead files (the default), to delete specific
7770aafc
LC
1874files (the @code{--delete} option), to print garbage-collector
1875information, or for more advanced queries. The garbage collection
1876options are as follows:
fe8ff028
LC
1877
1878@table @code
1879@item --collect-garbage[=@var{min}]
1880@itemx -C [@var{min}]
834129e0 1881Collect garbage---i.e., unreachable @file{/gnu/store} files and
fe8ff028
LC
1882sub-directories. This is the default operation when no option is
1883specified.
1884
1885When @var{min} is given, stop once @var{min} bytes have been collected.
1886@var{min} may be a number of bytes, or it may include a unit as a
4a44d7bb
LC
1887suffix, such as @code{MiB} for mebibytes and @code{GB} for gigabytes
1888(@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
fe8ff028
LC
1889
1890When @var{min} is omitted, collect all the garbage.
1891
1892@item --delete
1893@itemx -d
1894Attempt to delete all the store files and directories specified as
1895arguments. This fails if some of the files are not in the store, or if
1896they are still live.
1897
30d9aa54
LC
1898@item --list-failures
1899List store items corresponding to cached build failures.
1900
1901This prints nothing unless the daemon was started with
1902@option{--cache-failures} (@pxref{Invoking guix-daemon,
1903@option{--cache-failures}}).
1904
1905@item --clear-failures
1906Remove the specified store items from the failed-build cache.
1907
1908Again, this option only makes sense when the daemon is started with
1909@option{--cache-failures}. Otherwise, it does nothing.
1910
fe8ff028
LC
1911@item --list-dead
1912Show the list of dead files and directories still present in the
1913store---i.e., files and directories no longer reachable from any root.
1914
1915@item --list-live
1916Show the list of live store files and directories.
ba8b732d
LC
1917
1918@end table
1919
1920In addition, the references among existing store files can be queried:
1921
1922@table @code
1923
1924@item --references
1925@itemx --referrers
1926List the references (respectively, the referrers) of store files given
1927as arguments.
1928
8e59fdd5
LC
1929@item --requisites
1930@itemx -R
fcc58db6 1931@cindex closure
8e59fdd5
LC
1932List the requisites of the store files passed as arguments. Requisites
1933include the store files themselves, their references, and the references
1934of these, recursively. In other words, the returned list is the
1935@dfn{transitive closure} of the store files.
1936
f97c9175
AE
1937@xref{Invoking guix size}, for a tool to profile the size of the closure
1938of an element. @xref{Invoking guix graph}, for a tool to visualize
88856916 1939the graph of references.
fcc58db6 1940
fe8ff028
LC
1941@end table
1942
7770aafc
LC
1943Lastly, the following options allow you to check the integrity of the
1944store and to control disk usage.
1945
1946@table @option
1947
1948@item --verify[=@var{options}]
1949@cindex integrity, of the store
1950@cindex integrity checking
1951Verify the integrity of the store.
1952
1953By default, make sure that all the store items marked as valid in the
f97c9175 1954database of the daemon actually exist in @file{/gnu/store}.
7770aafc 1955
f97c9175 1956When provided, @var{options} must be a comma-separated list containing one
7770aafc
LC
1957or more of @code{contents} and @code{repair}.
1958
f97c9175
AE
1959When passing @option{--verify=contents}, the daemon computse the
1960content hash of each store item and compares it against its hash in the
7770aafc
LC
1961database. Hash mismatches are reported as data corruptions. Because it
1962traverses @emph{all the files in the store}, this command can take a
1963long time, especially on systems with a slow disk drive.
1964
1965@cindex repairing the store
1966Using @option{--verify=repair} or @option{--verify=contents,repair}
1967causes the daemon to try to repair corrupt store items by fetching
1968substitutes for them (@pxref{Substitutes}). Because repairing is not
1969atomic, and thus potentially dangerous, it is available only to the
1970system administrator.
1971
1972@item --optimize
1973@cindex deduplication
1974Optimize the store by hard-linking identical files---this is
1975@dfn{deduplication}.
1976
1977The daemon performs deduplication after each successful build or archive
1978import, unless it was started with @code{--disable-deduplication}
1979(@pxref{Invoking guix-daemon, @code{--disable-deduplication}}). Thus,
1980this option is primarily useful when the daemon was running with
1981@code{--disable-deduplication}.
1982
1983@end table
eeaf4427 1984
f651b477
LC
1985@node Invoking guix pull
1986@section Invoking @command{guix pull}
1987
1988Packages are installed or upgraded to the latest version available in
1989the distribution currently available on your local machine. To update
1990that distribution, along with the Guix tools, you must run @command{guix
1991pull}: the command downloads the latest Guix source code and package
1992descriptions, and deploys it.
1993
1994On completion, @command{guix package} will use packages and package
1995versions from this just-retrieved copy of Guix. Not only that, but all
1996the Guix commands and Scheme modules will also be taken from that latest
1997version. New @command{guix} sub-commands added by the update also
cb05108a
LC
1998become available.
1999
2000Any user can update their Guix copy using @command{guix pull}, and the
2001effect is limited to the user who run @command{guix pull}. For
2002instance, when user @code{root} runs @command{guix pull}, this has no
2003effect on the version of Guix that user @code{alice} sees, and vice
2004versa@footnote{Under the hood, @command{guix pull} updates the
2005@file{~/.config/guix/latest} symbolic link to point to the latest Guix,
2006and the @command{guix} command loads code from there.}.
f651b477
LC
2007
2008The @command{guix pull} command is usually invoked with no arguments,
2009but it supports the following options:
2010
2011@table @code
2012@item --verbose
2013Produce verbose output, writing build logs to the standard error output.
2014
ab5d72ad
LC
2015@item --url=@var{url}
2016Download the source tarball of Guix from @var{url}.
2017
2018By default, the tarball is taken from its canonical address at
2019@code{gnu.org}, for the stable branch of Guix.
2020
f651b477
LC
2021@item --bootstrap
2022Use the bootstrap Guile to build the latest Guix. This option is only
2023useful to Guix developers.
2024@end table
2025
760c60d6
LC
2026
2027@node Invoking guix archive
2028@section Invoking @command{guix archive}
2029
2030The @command{guix archive} command allows users to @dfn{export} files
2031from the store into a single archive, and to later @dfn{import} them.
2032In particular, it allows store files to be transferred from one machine
4d4c4816
AE
2033to the store on another machine.
2034
2035To export store files as an archive to standard output, run:
2036
2037@example
2038guix archive --export @var{options} @var{specifications}...
2039@end example
2040
2041@var{specifications} may be either store file names or package
2042specifications, as for @command{guix package} (@pxref{Invoking guix
2043package}). For instance, the following command creates an archive
2044containing the @code{gui} output of the @code{git} package and the main
2045output of @code{emacs}:
2046
2047@example
2048guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
2049@end example
2050
2051If the specified packages are not built yet, @command{guix archive}
2052automatically builds them. The build process may be controlled with the
2053common build options (@pxref{Common Build Options}).
2054
2055To transfer the @code{emacs} package to a machine connected over SSH,
2056one would run:
760c60d6
LC
2057
2058@example
56607088 2059guix archive --export -r emacs | ssh the-machine guix archive --import
760c60d6
LC
2060@end example
2061
87236aed 2062@noindent
56607088
LC
2063Similarly, a complete user profile may be transferred from one machine
2064to another like this:
2065
2066@example
2067guix archive --export -r $(readlink -f ~/.guix-profile) | \
2068 ssh the-machine guix-archive --import
2069@end example
2070
2071@noindent
2072However, note that, in both examples, all of @code{emacs} and the
2073profile as well as all of their dependencies are transferred (due to
f97c9175
AE
2074@code{-r}), regardless of what is already available in the store on the
2075target machine. The @code{--missing} option can help figure out which
2076items are missing from the target store.
87236aed 2077
760c60d6 2078Archives are stored in the ``Nix archive'' or ``Nar'' format, which is
0dbd88db
LC
2079comparable in spirit to `tar', but with a few noteworthy differences
2080that make it more appropriate for our purposes. First, rather than
f97c9175 2081recording all Unix metadata for each file, the Nar format only mentions
0dbd88db
LC
2082the file type (regular, directory, or symbolic link); Unix permissions
2083and owner/group are dismissed. Second, the order in which directory
2084entries are stored always follows the order of file names according to
2085the C locale collation order. This makes archive production fully
2086deterministic.
2087
2088When exporting, the daemon digitally signs the contents of the archive,
2089and that digital signature is appended. When importing, the daemon
2090verifies the signature and rejects the import in case of an invalid
2091signature or if the signing key is not authorized.
760c60d6
LC
2092@c FIXME: Add xref to daemon doc about signatures.
2093
2094The main options are:
2095
2096@table @code
2097@item --export
2098Export the specified store files or packages (see below.) Write the
2099resulting archive to the standard output.
2100
56607088
LC
2101Dependencies are @emph{not} included in the output, unless
2102@code{--recursive} is passed.
2103
2104@item -r
2105@itemx --recursive
2106When combined with @code{--export}, this instructs @command{guix
2107archive} to include dependencies of the given items in the archive.
2108Thus, the resulting archive is self-contained: it contains the closure
2109of the exported store items.
2110
760c60d6
LC
2111@item --import
2112Read an archive from the standard input, and import the files listed
2113therein into the store. Abort if the archive has an invalid digital
f82cc5fd
LC
2114signature, or if it is signed by a public key not among the authorized
2115keys (see @code{--authorize} below.)
554f26ec 2116
87236aed
LC
2117@item --missing
2118Read a list of store file names from the standard input, one per line,
2119and write on the standard output the subset of these files missing from
2120the store.
2121
554f26ec 2122@item --generate-key[=@var{parameters}]
f82cc5fd 2123@cindex signing, archives
f97c9175 2124Generate a new key pair for the daemon. This is a prerequisite before
554f26ec
LC
2125archives can be exported with @code{--export}. Note that this operation
2126usually takes time, because it needs to gather enough entropy to
2127generate the key pair.
2128
2129The generated key pair is typically stored under @file{/etc/guix}, in
2130@file{signing-key.pub} (public key) and @file{signing-key.sec} (private
867d8473
LC
2131key, which must be kept secret.) When @var{parameters} is omitted,
2132an ECDSA key using the Ed25519 curve is generated, or, for Libgcrypt
2133versions before 1.6.0, it is a 4096-bit RSA key.
f97c9175 2134Alternatively, @var{parameters} can specify
554f26ec
LC
2135@code{genkey} parameters suitable for Libgcrypt (@pxref{General
2136public-key related Functions, @code{gcry_pk_genkey},, gcrypt, The
2137Libgcrypt Reference Manual}).
f82cc5fd
LC
2138
2139@item --authorize
2140@cindex authorizing, archives
2141Authorize imports signed by the public key passed on standard input.
2142The public key must be in ``s-expression advanced format''---i.e., the
2143same format as the @file{signing-key.pub} file.
2144
2145The list of authorized keys is kept in the human-editable file
2146@file{/etc/guix/acl}. The file contains
2147@url{http://people.csail.mit.edu/rivest/Sexp.txt, ``advanced-format
2148s-expressions''} and is structured as an access-control list in the
2149@url{http://theworld.com/~cme/spki.txt, Simple Public-Key Infrastructure
2150(SPKI)}.
c6f8e9dd
LC
2151
2152@item --extract=@var{directory}
2153@itemx -x @var{directory}
2154Read a single-item archive as served by substitute servers
2155(@pxref{Substitutes}) and extract it to @var{directory}. This is a
2156low-level operation needed in only very narrow use cases; see below.
2157
2158For example, the following command extracts the substitute for Emacs
2159served by @code{hydra.gnu.org} to @file{/tmp/emacs}:
2160
2161@example
2162$ wget -O - \
2163 http://hydra.gnu.org/nar/@dots{}-emacs-24.5 \
2164 | bunzip2 | guix archive -x /tmp/emacs
2165@end example
2166
2167Single-item archives are different from multiple-item archives produced
2168by @command{guix archive --export}; they contain a single store item,
2169and they do @emph{not} embed a signature. Thus this operation does
2170@emph{no} signature verification and its output should be considered
2171unsafe.
2172
2173The primary purpose of this operation is to facilitate inspection of
2174archive contents coming from possibly untrusted substitute servers.
2175
760c60d6
LC
2176@end table
2177
c554de89
AK
2178@c *********************************************************************
2179@include emacs.texi
760c60d6 2180
568717fd
LC
2181@c *********************************************************************
2182@node Programming Interface
2183@chapter Programming Interface
2184
3dc1970d
LC
2185GNU Guix provides several Scheme programming interfaces (APIs) to
2186define, build, and query packages. The first interface allows users to
2187write high-level package definitions. These definitions refer to
2188familiar packaging concepts, such as the name and version of a package,
2189its build system, and its dependencies. These definitions can then be
2190turned into concrete build actions.
2191
ba55b1cb 2192Build actions are performed by the Guix daemon, on behalf of users. In a
3dc1970d 2193standard setup, the daemon has write access to the store---the
834129e0 2194@file{/gnu/store} directory---whereas users do not. The recommended
3dc1970d
LC
2195setup also has the daemon perform builds in chroots, under a specific
2196build users, to minimize interference with the rest of the system.
2197
2198@cindex derivation
2199Lower-level APIs are available to interact with the daemon and the
2200store. To instruct the daemon to perform a build action, users actually
2201provide it with a @dfn{derivation}. A derivation is a low-level
2202representation of the build actions to be taken, and the environment in
2203which they should occur---derivations are to package definitions what
49ad317a
LC
2204assembly is to C programs. The term ``derivation'' comes from the fact
2205that build results @emph{derive} from them.
3dc1970d
LC
2206
2207This chapter describes all these APIs in turn, starting from high-level
2208package definitions.
2209
568717fd 2210@menu
b860f382 2211* Defining Packages:: Defining new packages.
7458bd0a 2212* Build Systems:: Specifying how packages are built.
b860f382
LC
2213* The Store:: Manipulating the package store.
2214* Derivations:: Low-level interface to package derivations.
2215* The Store Monad:: Purely functional interface to the store.
21b679f6 2216* G-Expressions:: Manipulating build expressions.
568717fd
LC
2217@end menu
2218
2219@node Defining Packages
2220@section Defining Packages
2221
3dc1970d
LC
2222The high-level interface to package definitions is implemented in the
2223@code{(guix packages)} and @code{(guix build-system)} modules. As an
2224example, the package definition, or @dfn{recipe}, for the GNU Hello
2225package looks like this:
2226
2227@example
e7f34eb0
LC
2228(define-module (gnu packages hello)
2229 #:use-module (guix packages)
2230 #:use-module (guix download)
2231 #:use-module (guix build-system gnu)
a6dcdcac
SB
2232 #:use-module (guix licenses)
2233 #:use-module (gnu packages gawk))
b22a12fd 2234
79f5dd59 2235(define-public hello
3dc1970d
LC
2236 (package
2237 (name "hello")
17d8e33f 2238 (version "2.10")
3dc1970d 2239 (source (origin
17d8e33f
ML
2240 (method url-fetch)
2241 (uri (string-append "mirror://gnu/hello/hello-" version
2242 ".tar.gz"))
2243 (sha256
2244 (base32
2245 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
3dc1970d 2246 (build-system gnu-build-system)
7458bd0a 2247 (arguments `(#:configure-flags '("--enable-silent-rules")))
3dc1970d 2248 (inputs `(("gawk" ,gawk)))
7458bd0a
LC
2249 (synopsis "Hello, GNU world: An example GNU package")
2250 (description "Guess what GNU Hello prints!")
3dc1970d 2251 (home-page "http://www.gnu.org/software/hello/")
b22a12fd 2252 (license gpl3+)))
3dc1970d
LC
2253@end example
2254
2255@noindent
2256Without being a Scheme expert, the reader may have guessed the meaning
f97c9175
AE
2257of the various fields here. This expression binds the variable
2258@code{hello} to a @code{<package>} object, which is essentially a record
3dc1970d
LC
2259(@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}).
2260This package object can be inspected using procedures found in the
2261@code{(guix packages)} module; for instance, @code{(package-name hello)}
2262returns---surprise!---@code{"hello"}.
2263
2f7d2d91
LC
2264With luck, you may be able to import part or all of the definition of
2265the package you are interested in from another repository, using the
2266@code{guix import} command (@pxref{Invoking guix import}).
2267
f97c9175 2268In the example above, @var{hello} is defined in a module of its own,
e7f34eb0
LC
2269@code{(gnu packages hello)}. Technically, this is not strictly
2270necessary, but it is convenient to do so: all the packages defined in
2271modules under @code{(gnu packages @dots{})} are automatically known to
2272the command-line tools (@pxref{Package Modules}).
2273
3dc1970d
LC
2274There are a few points worth noting in the above package definition:
2275
2276@itemize
2277@item
a2bf4907
LC
2278The @code{source} field of the package is an @code{<origin>} object
2279(@pxref{origin Reference}, for the complete reference).
3dc1970d
LC
2280Here, the @code{url-fetch} method from @code{(guix download)} is used,
2281meaning that the source is a file to be downloaded over FTP or HTTP.
2282
2283The @code{mirror://gnu} prefix instructs @code{url-fetch} to use one of
2284the GNU mirrors defined in @code{(guix download)}.
2285
2286The @code{sha256} field specifies the expected SHA256 hash of the file
2287being downloaded. It is mandatory, and allows Guix to check the
2288integrity of the file. The @code{(base32 @dots{})} form introduces the
6c365eca 2289base32 representation of the hash. You can obtain this information with
210cc920
LC
2290@code{guix download} (@pxref{Invoking guix download}) and @code{guix
2291hash} (@pxref{Invoking guix hash}).
3dc1970d 2292
f9cc8971
LC
2293@cindex patches
2294When needed, the @code{origin} form can also have a @code{patches} field
2295listing patches to be applied, and a @code{snippet} field giving a
2296Scheme expression to modify the source code.
2297
3dc1970d
LC
2298@item
2299@cindex GNU Build System
7458bd0a
LC
2300The @code{build-system} field specifies the procedure to build the
2301package (@pxref{Build Systems}). Here, @var{gnu-build-system}
2302represents the familiar GNU Build System, where packages may be
2303configured, built, and installed with the usual @code{./configure &&
2304make && make check && make install} command sequence.
2305
2306@item
2307The @code{arguments} field specifies options for the build system
2308(@pxref{Build Systems}). Here it is interpreted by
2309@var{gnu-build-system} as a request run @file{configure} with the
2310@code{--enable-silent-rules} flag.
3dc1970d
LC
2311
2312@item
2313The @code{inputs} field specifies inputs to the build process---i.e.,
2314build-time or run-time dependencies of the package. Here, we define an
2315input called @code{"gawk"} whose value is that of the @var{gawk}
2316variable; @var{gawk} is itself bound to a @code{<package>} object.
2317
2318Note that GCC, Coreutils, Bash, and other essential tools do not need to
2319be specified as inputs here. Instead, @var{gnu-build-system} takes care
7458bd0a 2320of ensuring that they are present (@pxref{Build Systems}).
3dc1970d
LC
2321
2322However, any other dependencies need to be specified in the
2323@code{inputs} field. Any dependency not specified here will simply be
2324unavailable to the build process, possibly leading to a build failure.
2325@end itemize
2326
87eafdbd
TUBK
2327@xref{package Reference}, for a full description of possible fields.
2328
2f7d2d91 2329Once a package definition is in place, the
e49951eb 2330package may actually be built using the @code{guix build} command-line
39bee8a2
LC
2331tool (@pxref{Invoking guix build}). You can easily jump back to the
2332package definition using the @command{guix edit} command
2333(@pxref{Invoking guix edit}).
2334@xref{Packaging Guidelines}, for
b4f5e0e8
CR
2335more information on how to test package definitions, and
2336@ref{Invoking guix lint}, for information on how to check a definition
2337for style conformance.
2338
f97c9175 2339Finally, updating the package definition to a new upstream version
7458bd0a
LC
2340can be partly automated by the @command{guix refresh} command
2341(@pxref{Invoking guix refresh}).
3dc1970d
LC
2342
2343Behind the scenes, a derivation corresponding to the @code{<package>}
2344object is first computed by the @code{package-derivation} procedure.
834129e0 2345That derivation is stored in a @code{.drv} file under @file{/gnu/store}.
ba55b1cb 2346The build actions it prescribes may then be realized by using the
3dc1970d
LC
2347@code{build-derivations} procedure (@pxref{The Store}).
2348
2349@deffn {Scheme Procedure} package-derivation @var{store} @var{package} [@var{system}]
59688fc4
LC
2350Return the @code{<derivation>} object of @var{package} for @var{system}
2351(@pxref{Derivations}).
3dc1970d
LC
2352
2353@var{package} must be a valid @code{<package>} object, and @var{system}
2354must be a string denoting the target system type---e.g.,
2355@code{"x86_64-linux"} for an x86_64 Linux-based GNU system. @var{store}
2356must be a connection to the daemon, which operates on the store
2357(@pxref{The Store}).
2358@end deffn
568717fd 2359
9c1edabd
LC
2360@noindent
2361@cindex cross-compilation
2362Similarly, it is possible to compute a derivation that cross-builds a
2363package for some other system:
2364
2365@deffn {Scheme Procedure} package-cross-derivation @var{store} @
2366 @var{package} @var{target} [@var{system}]
59688fc4
LC
2367Return the @code{<derivation>} object of @var{package} cross-built from
2368@var{system} to @var{target}.
9c1edabd
LC
2369
2370@var{target} must be a valid GNU triplet denoting the target hardware
2371and operating system, such as @code{"mips64el-linux-gnu"}
2372(@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
2373Configure and Build System}).
2374@end deffn
2375
87eafdbd
TUBK
2376@menu
2377* package Reference :: The package data type.
2378* origin Reference:: The origin data type.
2379@end menu
2380
2381
2382@node package Reference
2383@subsection @code{package} Reference
2384
2385This section summarizes all the options available in @code{package}
2386declarations (@pxref{Defining Packages}).
2387
2388@deftp {Data Type} package
2389This is the data type representing a package recipe.
2390
2391@table @asis
2392@item @code{name}
2393The name of the package, as a string.
2394
2395@item @code{version}
2396The version of the package, as a string.
2397
2398@item @code{source}
2399An origin object telling how the source code for the package should be
2400acquired (@pxref{origin Reference}).
2401
2402@item @code{build-system}
2403The build system that should be used to build the package (@pxref{Build
2404Systems}).
2405
2406@item @code{arguments} (default: @code{'()})
2407The arguments that should be passed to the build system. This is a
2408list, typically containing sequential keyword-value pairs.
2409
2410@item @code{inputs} (default: @code{'()})
70650c68
LC
2411@itemx @code{native-inputs} (default: @code{'()})
2412@itemx @code{propagated-inputs} (default: @code{'()})
2413@cindex inputs, of packages
2414These fields list dependencies of the package. Each one is a list of
2415tuples, where each tuple has a label for the input (a string) as its
2416first element, a package, origin, or derivation as its second element,
2417and optionally the name of the output thereof that should be used, which
2418defaults to @code{"out"} (@pxref{Packages with Multiple Outputs}, for
f97c9175 2419more on package outputs). For example, the list below specifies three
70650c68 2420inputs:
87eafdbd 2421
70650c68
LC
2422@example
2423`(("libffi" ,libffi)
2424 ("libunistring" ,libunistring)
2425 ("glib:bin" ,glib "bin")) ;the "bin" output of Glib
2426@end example
2427
2428@cindex cross compilation, package dependencies
2429The distinction between @code{native-inputs} and @code{inputs} is
2430necessary when considering cross-compilation. When cross-compiling,
2431dependencies listed in @code{inputs} are built for the @emph{target}
2432architecture; conversely, dependencies listed in @code{native-inputs}
2433are built for the architecture of the @emph{build} machine.
2434
f97c9175
AE
2435@code{native-inputs} is typically used to list tools needed at
2436build time, but not at run time, such as Autoconf, Automake, pkg-config,
70650c68
LC
2437Gettext, or Bison. @command{guix lint} can report likely mistakes in
2438this area (@pxref{Invoking guix lint}).
2439
2440@anchor{package-propagated-inputs}
2441Lastly, @code{propagated-inputs} is similar to @code{inputs}, but the
f97c9175
AE
2442specified packages will be automatically installed alongside the package
2443they belong to (@pxref{package-cmd-propagated-inputs, @command{guix
70650c68
LC
2444package}}, for information on how @command{guix package} deals with
2445propagated inputs.)
21461f27 2446
e0508b6b
LC
2447For example this is necessary when a C/C++ library needs headers of
2448another library to compile, or when a pkg-config file refers to another
2449one @i{via} its @code{Requires} field.
2450
f97c9175
AE
2451Another example where @code{propagated-inputs} is useful is for languages
2452that lack a facility to record the run-time search path akin to the
2453@code{RUNPATH}of ELF files; this includes Guile, Python, Perl, GHC, and
e0508b6b
LC
2454more. To ensure that libraries written in those languages can find
2455library code they depend on at run time, run-time dependencies must be
2456listed in @code{propagated-inputs} rather than @code{inputs}.
87eafdbd 2457
87eafdbd
TUBK
2458@item @code{self-native-input?} (default: @code{#f})
2459This is a Boolean field telling whether the package should use itself as
2460a native input when cross-compiling.
2461
2462@item @code{outputs} (default: @code{'("out")})
2463The list of output names of the package. @xref{Packages with Multiple
2464Outputs}, for typical uses of additional outputs.
2465
2466@item @code{native-search-paths} (default: @code{'()})
2467@itemx @code{search-paths} (default: @code{'()})
2468A list of @code{search-path-specification} objects describing
2469search-path environment variables honored by the package.
2470
2471@item @code{replacement} (default: @code{#f})
f97c9175 2472This must be either @code{#f} or a package object that will be used as a
87eafdbd
TUBK
2473@dfn{replacement} for this package. @xref{Security Updates, grafts},
2474for details.
2475
2476@item @code{synopsis}
2477A one-line description of the package.
2478
2479@item @code{description}
2480A more elaborate description of the package.
2481
2482@item @code{license}
f97c9175
AE
2483The license of the package; a value from @code{(guix licenses)},
2484or a list of such values.
87eafdbd
TUBK
2485
2486@item @code{home-page}
2487The URL to the home-page of the package, as a string.
2488
2489@item @code{supported-systems} (default: @var{%supported-systems})
2490The list of systems supported by the package, as strings of the form
2491@code{architecture-kernel}, for example @code{"x86_64-linux"}.
2492
2493@item @code{maintainers} (default: @code{'()})
2494The list of maintainers of the package, as @code{maintainer} objects.
2495
2496@item @code{location} (default: source location of the @code{package} form)
f97c9175 2497The source location of the package. It is useful to override this when
87eafdbd
TUBK
2498inheriting from another package, in which case this field is not
2499automatically corrected.
2500@end table
2501@end deftp
2502
2503
2504@node origin Reference
2505@subsection @code{origin} Reference
2506
2507This section summarizes all the options available in @code{origin}
2508declarations (@pxref{Defining Packages}).
2509
2510@deftp {Data Type} origin
2511This is the data type representing a source code origin.
2512
2513@table @asis
2514@item @code{uri}
2515An object containing the URI of the source. The object type depends on
2516the @code{method} (see below). For example, when using the
2517@var{url-fetch} method of @code{(guix download)}, the valid @code{uri}
2518values are: a URL represented as a string, or a list thereof.
2519
2520@item @code{method}
f97c9175 2521A procedure that handles the URI.
87eafdbd
TUBK
2522
2523Examples include:
2524
2525@table @asis
2526@item @var{url-fetch} from @code{(guix download)}
f97c9175 2527download a file from the HTTP, HTTPS, or FTP URL specified in the
87eafdbd
TUBK
2528@code{uri} field;
2529
2530@item @var{git-fetch} from @code{(guix git-download)}
2531clone the Git version control repository, and check out the revision
2532specified in the @code{uri} field as a @code{git-reference} object; a
2533@code{git-reference} looks like this:
2534
2535@example
2536(git-reference
2537 (url "git://git.debian.org/git/pkg-shadow/shadow")
2538 (commit "v4.1.5.1"))
2539@end example
2540@end table
2541
2542@item @code{sha256}
2543A bytevector containing the SHA-256 hash of the source. Typically the
2544@code{base32} form is used here to generate the bytevector from a
2545base-32 string.
2546
2547@item @code{file-name} (default: @code{#f})
2548The file name under which the source code should be saved. When this is
2549@code{#f}, a sensible default value will be used in most cases. In case
2550the source is fetched from a URL, the file name from the URL will be
f97c9175 2551used. For version control checkouts, it is recommended to provide the
87eafdbd
TUBK
2552file name explicitly because the default is not very descriptive.
2553
2554@item @code{patches} (default: @code{'()})
2555A list of file names containing patches to be applied to the source.
2556
2557@item @code{snippet} (default: @code{#f})
2558A quoted piece of code that will be run in the source directory to make
2559any modifications, which is sometimes more convenient than a patch.
2560
2561@item @code{patch-flags} (default: @code{'("-p1")})
2562A list of command-line flags that should be passed to the @code{patch}
2563command.
2564
2565@item @code{patch-inputs} (default: @code{#f})
2566Input packages or derivations to the patching process. When this is
2567@code{#f}, the usual set of inputs necessary for patching are provided,
2568such as GNU@tie{}Patch.
2569
2570@item @code{modules} (default: @code{'()})
2571A list of Guile modules that should be loaded during the patching
2572process and while running the code in the @code{snippet} field.
2573
2574@item @code{imported-modules} (default: @code{'()})
2575The list of Guile modules to import in the patch derivation, for use by
2576the @code{snippet}.
2577
2578@item @code{patch-guile} (default: @code{#f})
2579The Guile package that should be used in the patching process. When
2580this is @code{#f}, a sensible default is used.
2581@end table
2582@end deftp
2583
9c1edabd 2584
7458bd0a
LC
2585@node Build Systems
2586@section Build Systems
2587
2588@cindex build system
2589Each package definition specifies a @dfn{build system} and arguments for
2590that build system (@pxref{Defining Packages}). This @code{build-system}
f97c9175 2591field represents the build procedure of the package, as well as implicit
7458bd0a
LC
2592dependencies of that build procedure.
2593
2594Build systems are @code{<build-system>} objects. The interface to
2595create and manipulate them is provided by the @code{(guix build-system)}
2596module, and actual build systems are exported by specific modules.
2597
f5fd4fd2 2598@cindex bag (low-level package representation)
0d5a559f
LC
2599Under the hood, build systems first compile package objects to
2600@dfn{bags}. A @dfn{bag} is like a package, but with less
2601ornamentation---in other words, a bag is a lower-level representation of
2602a package, which includes all the inputs of that package, including some
2603that were implicitly added by the build system. This intermediate
2604representation is then compiled to a derivation (@pxref{Derivations}).
2605
7458bd0a
LC
2606Build systems accept an optional list of @dfn{arguments}. In package
2607definitions, these are passed @i{via} the @code{arguments} field
2608(@pxref{Defining Packages}). They are typically keyword arguments
2609(@pxref{Optional Arguments, keyword arguments in Guile,, guile, GNU
2610Guile Reference Manual}). The value of these arguments is usually
2611evaluated in the @dfn{build stratum}---i.e., by a Guile process launched
2612by the daemon (@pxref{Derivations}).
2613
2614The main build system is @var{gnu-build-system}, which implements the
f97c9175 2615standard build procedure for GNU and many other packages. It
7458bd0a
LC
2616is provided by the @code{(guix build-system gnu)} module.
2617
2618@defvr {Scheme Variable} gnu-build-system
2619@var{gnu-build-system} represents the GNU Build System, and variants
2620thereof (@pxref{Configuration, configuration and makefile conventions,,
2621standards, GNU Coding Standards}).
2622
2623@cindex build phases
f97c9175 2624In a nutshell, packages using it are configured, built, and installed with
7458bd0a
LC
2625the usual @code{./configure && make && make check && make install}
2626command sequence. In practice, a few additional steps are often needed.
2627All these steps are split up in separate @dfn{phases},
2628notably@footnote{Please see the @code{(guix build gnu-build-system)}
2629modules for more details about the build phases.}:
2630
2631@table @code
2632@item unpack
2633Unpack the source tarball, and change the current directory to the
2634extracted source tree. If the source is actually a directory, copy it
2635to the build tree, and enter that directory.
2636
2637@item patch-source-shebangs
2638Patch shebangs encountered in source files so they refer to the right
2639store file names. For instance, this changes @code{#!/bin/sh} to
2640@code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
2641
2642@item configure
2643Run the @file{configure} script with a number of default options, such
2644as @code{--prefix=/gnu/store/@dots{}}, as well as the options specified
2645by the @code{#:configure-flags} argument.
2646
2647@item build
2648Run @code{make} with the list of flags specified with
0917e80e 2649@code{#:make-flags}. If the @code{#:parallel-build?} argument is true
7458bd0a
LC
2650(the default), build with @code{make -j}.
2651
2652@item check
2653Run @code{make check}, or some other target specified with
2654@code{#:test-target}, unless @code{#:tests? #f} is passed. If the
2655@code{#:parallel-tests?} argument is true (the default), run @code{make
2656check -j}.
2657
2658@item install
2659Run @code{make install} with the flags listed in @code{#:make-flags}.
2660
2661@item patch-shebangs
2662Patch shebangs on the installed executable files.
2663
2664@item strip
2665Strip debugging symbols from ELF files (unless @code{#:strip-binaries?}
2666is false), copying them to the @code{debug} output when available
2667(@pxref{Installing Debugging Files}).
2668@end table
2669
2670@vindex %standard-phases
2671The build-side module @code{(guix build gnu-build-system)} defines
2672@var{%standard-phases} as the default list of build phases.
2673@var{%standard-phases} is a list of symbol/procedure pairs, where the
2674procedure implements the actual phase.
2675
2676The list of phases used for a particular package can be changed with the
2677@code{#:phases} parameter. For instance, passing:
2678
2679@example
c2c5dc79 2680#:phases (modify-phases %standard-phases (delete 'configure))
7458bd0a
LC
2681@end example
2682
9bf404e9 2683means that all the phases described above will be used, except the
7458bd0a
LC
2684@code{configure} phase.
2685
2686In addition, this build system ensures that the ``standard'' environment
2687for GNU packages is available. This includes tools such as GCC, libc,
2688Coreutils, Bash, Make, Diffutils, grep, and sed (see the @code{(guix
f97c9175
AE
2689build-system gnu)} module for a complete list). We call these the
2690@dfn{implicit inputs} of a package, because package definitions do not
7458bd0a
LC
2691have to mention them.
2692@end defvr
2693
2694Other @code{<build-system>} objects are defined to support other
2695conventions and tools used by free software packages. They inherit most
2696of @var{gnu-build-system}, and differ mainly in the set of inputs
2697implicitly added to the build process, and in the list of phases
2698executed. Some of these build systems are listed below.
2699
2700@defvr {Scheme Variable} cmake-build-system
2701This variable is exported by @code{(guix build-system cmake)}. It
2702implements the build procedure for packages using the
2703@url{http://www.cmake.org, CMake build tool}.
2704
2705It automatically adds the @code{cmake} package to the set of inputs.
2706Which package is used can be specified with the @code{#:cmake}
2707parameter.
9849cfc1
LC
2708
2709The @code{#:configure-flags} parameter is taken as a list of flags
2710passed to the @command{cmake} command. The @code{#:build-type}
2711parameter specifies in abstract terms the flags passed to the compiler;
2712it defaults to @code{"RelWithDebInfo"} (short for ``release mode with
2713debugging information''), which roughly means that code is compiled with
2714@code{-O2 -g}, as is the case for Autoconf-based packages by default.
7458bd0a
LC
2715@end defvr
2716
3afcf52b
FB
2717@defvr {Scheme Variable} glib-or-gtk-build-system
2718This variable is exported by @code{(guix build-system glib-or-gtk)}. It
2719is intended for use with packages making use of GLib or GTK+.
2720
2721This build system adds the following two phases to the ones defined by
2722@var{gnu-build-system}:
2723
2724@table @code
2725@item glib-or-gtk-wrap
f97c9175
AE
2726The phase @code{glib-or-gtk-wrap} ensures that programs in
2727@file{bin/} are able to find GLib ``schemas'' and
3afcf52b
FB
2728@uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, GTK+
2729modules}. This is achieved by wrapping the programs in launch scripts
2730that appropriately set the @code{XDG_DATA_DIRS} and @code{GTK_PATH}
2731environment variables.
2732
73aa8ddb
LC
2733It is possible to exclude specific package outputs from that wrapping
2734process by listing their names in the
2735@code{#:glib-or-gtk-wrap-excluded-outputs} parameter. This is useful
2736when an output is known not to contain any GLib or GTK+ binaries, and
2737where wrapping would gratuitously add a dependency of that output on
2738GLib and GTK+.
2739
3afcf52b 2740@item glib-or-gtk-compile-schemas
f97c9175 2741The phase @code{glib-or-gtk-compile-schemas} makes sure that all
3afcf52b 2742@uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
f97c9175 2743GSettings schemas} of GLib are compiled. Compilation is performed by the
3afcf52b
FB
2744@command{glib-compile-schemas} program. It is provided by the package
2745@code{glib:bin} which is automatically imported by the build system.
2746The @code{glib} package providing @command{glib-compile-schemas} can be
2747specified with the @code{#:glib} parameter.
2748@end table
2749
2750Both phases are executed after the @code{install} phase.
2751@end defvr
2752
7458bd0a
LC
2753@defvr {Scheme Variable} python-build-system
2754This variable is exported by @code{(guix build-system python)}. It
2755implements the more or less standard build procedure used by Python
2756packages, which consists in running @code{python setup.py build} and
2757then @code{python setup.py install --prefix=/gnu/store/@dots{}}.
2758
2759For packages that install stand-alone Python programs under @code{bin/},
f97c9175 2760it takes care of wrapping these programs so that their @code{PYTHONPATH}
7458bd0a
LC
2761environment variable points to all the Python libraries they depend on.
2762
2763Which Python package is used can be specified with the @code{#:python}
2764parameter.
2765@end defvr
2766
2767@defvr {Scheme Variable} perl-build-system
2768This variable is exported by @code{(guix build-system perl)}. It
2d2a53fc
EB
2769implements the standard build procedure for Perl packages, which either
2770consists in running @code{perl Build.PL --prefix=/gnu/store/@dots{}},
2771followed by @code{Build} and @code{Build install}; or in running
2772@code{perl Makefile.PL PREFIX=/gnu/store/@dots{}}, followed by
f97c9175 2773@code{make} and @code{make install}, depending on which of
2d2a53fc
EB
2774@code{Build.PL} or @code{Makefile.PL} is present in the package
2775distribution. Preference is given to the former if both @code{Build.PL}
2776and @code{Makefile.PL} exist in the package distribution. This
2777preference can be reversed by specifying @code{#t} for the
2778@code{#:make-maker?} parameter.
2779
2780The initial @code{perl Makefile.PL} or @code{perl Build.PL} invocation
2781passes flags specified by the @code{#:make-maker-flags} or
2782@code{#:module-build-flags} parameter, respectively.
7458bd0a
LC
2783
2784Which Perl package is used can be specified with @code{#:perl}.
2785@end defvr
2786
f8f3bef6
RW
2787@defvr {Scheme Variable} r-build-system
2788This variable is exported by @code{(guix build-system r)}. It
2789implements the build procedure used by @uref{http://r-project.org, R}
2790packages, which essentially is little more than running @code{R CMD
2791INSTALL --library=/gnu/store/@dots{}} in an environment where
2792@code{R_LIBS_SITE} contains the paths to all R package inputs. Tests
2793are run after installation using the R function
2794@code{tools::testInstalledPackage}.
2795@end defvr
2796
c08f9818
DT
2797@defvr {Scheme Variable} ruby-build-system
2798This variable is exported by @code{(guix build-system ruby)}. It
2799implements the RubyGems build procedure used by Ruby packages, which
2800involves running @code{gem build} followed by @code{gem install}.
2801
5dc87623
DT
2802The @code{source} field of a package that uses this build system
2803typically references a gem archive, since this is the format that Ruby
2804developers use when releasing their software. The build system unpacks
2805the gem archive, potentially patches the source, runs the test suite,
2806repackages the gem, and installs it. Additionally, directories and
2807tarballs may be referenced to allow building unreleased gems from Git or
2808a traditional source release tarball.
e83c6d00 2809
c08f9818 2810Which Ruby package is used can be specified with the @code{#:ruby}
6e9f2913
PP
2811parameter. A list of additional flags to be passed to the @command{gem}
2812command can be specified with the @code{#:gem-flags} parameter.
c08f9818 2813@end defvr
7458bd0a 2814
a677c726
RW
2815@defvr {Scheme Variable} waf-build-system
2816This variable is exported by @code{(guix build-system waf)}. It
2817implements a build procedure around the @code{waf} script. The common
2818phases---@code{configure}, @code{build}, and @code{install}---are
2819implemented by passing their names as arguments to the @code{waf}
2820script.
2821
2822The @code{waf} script is executed by the Python interpreter. Which
2823Python package is used to run the script can be specified with the
2824@code{#:python} parameter.
2825@end defvr
2826
14dfdf2e
FB
2827@defvr {Scheme Variable} haskell-build-system
2828This variable is exported by @code{(guix build-system haskell)}. It
2829implements the Cabal build procedure used by Haskell packages, which
2830involves running @code{runhaskell Setup.hs configure
2831--prefix=/gnu/store/@dots{}} and @code{runhaskell Setup.hs build}.
2832Instead of installing the package by running @code{runhaskell Setup.hs
2833install}, to avoid trying to register libraries in the read-only
2834compiler store directory, the build system uses @code{runhaskell
2835Setup.hs copy}, followed by @code{runhaskell Setup.hs register}. In
2836addition, the build system generates the package documentation by
2837running @code{runhaskell Setup.hs haddock}, unless @code{#:haddock? #f}
2838is passed. Optional Haddock parameters can be passed with the help of
2839the @code{#:haddock-flags} parameter. If the file @code{Setup.hs} is
2840not found, the build system looks for @code{Setup.lhs} instead.
2841
2842Which Haskell compiler is used can be specified with the @code{#:haskell}
a54bd6d7 2843parameter which defaults to @code{ghc}.
14dfdf2e
FB
2844@end defvr
2845
e9137a53
FB
2846@defvr {Scheme Variable} emacs-build-system
2847This variable is exported by @code{(guix build-system emacs)}. It
f97c9175
AE
2848implements an installation procedure similar to the packaging system
2849of Emacs itself (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
e9137a53
FB
2850
2851It first creates the @code{@var{package}-autoloads.el} file, then it
2852byte compiles all Emacs Lisp files. Differently from the Emacs
2853packaging system, the Info documentation files are moved to the standard
2854documentation directory and the @file{dir} file is deleted. Each
2855package is installed in its own directory under
2856@file{share/emacs/site-lisp/guix.d}.
2857@end defvr
2858
7458bd0a
LC
2859Lastly, for packages that do not need anything as sophisticated, a
2860``trivial'' build system is provided. It is trivial in the sense that
2861it provides basically no support: it does not pull any implicit inputs,
2862and does not have a notion of build phases.
2863
2864@defvr {Scheme Variable} trivial-build-system
2865This variable is exported by @code{(guix build-system trivial)}.
2866
2867This build system requires a @code{#:builder} argument. This argument
f97c9175 2868must be a Scheme expression that builds the package output(s)---as
7458bd0a
LC
2869with @code{build-expression->derivation} (@pxref{Derivations,
2870@code{build-expression->derivation}}).
2871@end defvr
2872
568717fd
LC
2873@node The Store
2874@section The Store
2875
e531ac2a
LC
2876@cindex store
2877@cindex store paths
2878
f97c9175
AE
2879Conceptually, the @dfn{store} is the place where derivations that have
2880been built successfully are stored---by default, @file{/gnu/store}.
e531ac2a 2881Sub-directories in the store are referred to as @dfn{store paths}. The
4988dd40 2882store has an associated database that contains information such as the
e531ac2a
LC
2883store paths referred to by each store path, and the list of @emph{valid}
2884store paths---paths that result from a successful build.
2885
2886The store is always accessed by the daemon on behalf of its clients
2887(@pxref{Invoking guix-daemon}). To manipulate the store, clients
f97c9175
AE
2888connect to the daemon over a Unix-domain socket, send requests to it,
2889and read the result---these are remote procedure calls, or RPCs.
e531ac2a
LC
2890
2891The @code{(guix store)} module provides procedures to connect to the
2892daemon, and to perform RPCs. These are described below.
2893
2894@deffn {Scheme Procedure} open-connection [@var{file}] [#:reserve-space? #t]
2895Connect to the daemon over the Unix-domain socket at @var{file}. When
2896@var{reserve-space?} is true, instruct it to reserve a little bit of
2897extra space on the file system so that the garbage collector can still
f97c9175 2898operate should the disk become full. Return a server object.
e531ac2a
LC
2899
2900@var{file} defaults to @var{%default-socket-path}, which is the normal
2901location given the options that were passed to @command{configure}.
2902@end deffn
2903
2904@deffn {Scheme Procedure} close-connection @var{server}
2905Close the connection to @var{server}.
2906@end deffn
2907
2908@defvr {Scheme Variable} current-build-output-port
2909This variable is bound to a SRFI-39 parameter, which refers to the port
2910where build and error logs sent by the daemon should be written.
2911@end defvr
2912
2913Procedures that make RPCs all take a server object as their first
2914argument.
2915
2916@deffn {Scheme Procedure} valid-path? @var{server} @var{path}
06b76acc
LC
2917@cindex invalid store items
2918Return @code{#t} when @var{path} designates a valid store item and
2919@code{#f} otherwise (an invalid item may exist on disk but still be
2920invalid, for instance because it is the result of an aborted or failed
2921build.)
2922
2923A @code{&nix-protocol-error} condition is raised if @var{path} is not
2924prefixed by the store directory (@file{/gnu/store}).
e531ac2a
LC
2925@end deffn
2926
cfbf9160 2927@deffn {Scheme Procedure} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
e531ac2a
LC
2928Add @var{text} under file @var{name} in the store, and return its store
2929path. @var{references} is the list of store paths referred to by the
2930resulting store path.
2931@end deffn
2932
874e6874 2933@deffn {Scheme Procedure} build-derivations @var{server} @var{derivations}
59688fc4
LC
2934Build @var{derivations} (a list of @code{<derivation>} objects or
2935derivation paths), and return when the worker is done building them.
2936Return @code{#t} on success.
874e6874
LC
2937@end deffn
2938
b860f382
LC
2939Note that the @code{(guix monads)} module provides a monad as well as
2940monadic versions of the above procedures, with the goal of making it
2941more convenient to work with code that accesses the store (@pxref{The
2942Store Monad}).
2943
e531ac2a
LC
2944@c FIXME
2945@i{This section is currently incomplete.}
568717fd
LC
2946
2947@node Derivations
2948@section Derivations
2949
874e6874
LC
2950@cindex derivations
2951Low-level build actions and the environment in which they are performed
2952are represented by @dfn{derivations}. A derivation contain the
2953following pieces of information:
2954
2955@itemize
2956@item
2957The outputs of the derivation---derivations produce at least one file or
2958directory in the store, but may produce more.
2959
2960@item
2961The inputs of the derivations, which may be other derivations or plain
2962files in the store (patches, build scripts, etc.)
2963
2964@item
2965The system type targeted by the derivation---e.g., @code{x86_64-linux}.
2966
2967@item
2968The file name of a build script in the store, along with the arguments
2969to be passed.
2970
2971@item
2972A list of environment variables to be defined.
2973
2974@end itemize
2975
2976@cindex derivation path
2977Derivations allow clients of the daemon to communicate build actions to
2978the store. They exist in two forms: as an in-memory representation,
2979both on the client- and daemon-side, and as files in the store whose
2980name end in @code{.drv}---these files are referred to as @dfn{derivation
2981paths}. Derivations paths can be passed to the @code{build-derivations}
2982procedure to perform the build actions they prescribe (@pxref{The
2983Store}).
2984
2985The @code{(guix derivations)} module provides a representation of
2986derivations as Scheme objects, along with procedures to create and
2987otherwise manipulate derivations. The lowest-level primitive to create
2988a derivation is the @code{derivation} procedure:
2989
1909431c
LC
2990@deffn {Scheme Procedure} derivation @var{store} @var{name} @var{builder} @
2991 @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
2096ef47 2992 [#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
1909431c 2993 [#:system (%current-system)] [#:references-graphs #f] @
4a6aeb67
LC
2994 [#:allowed-references #f] [#:leaked-env-vars #f] [#:local-build? #f] @
2995 [#:substitutable? #t]
59688fc4
LC
2996Build a derivation with the given arguments, and return the resulting
2997@code{<derivation>} object.
874e6874 2998
2096ef47 2999When @var{hash} and @var{hash-algo} are given, a
874e6874 3000@dfn{fixed-output derivation} is created---i.e., one whose result is
36bbbbd1
LC
3001known in advance, such as a file download. If, in addition,
3002@var{recursive?} is true, then that fixed output may be an executable
3003file or a directory and @var{hash} must be the hash of an archive
3004containing this output.
5b0c9d16 3005
858e9282 3006When @var{references-graphs} is true, it must be a list of file
5b0c9d16
LC
3007name/store path pairs. In that case, the reference graph of each store
3008path is exported in the build environment in the corresponding file, in
3009a simple text format.
1909431c 3010
b53be755
LC
3011When @var{allowed-references} is true, it must be a list of store items
3012or outputs that the derivation's output may refer to.
3013
c0468155
LC
3014When @var{leaked-env-vars} is true, it must be a list of strings
3015denoting environment variables that are allowed to ``leak'' from the
3016daemon's environment to the build environment. This is only applicable
3017to fixed-output derivations---i.e., when @var{hash} is true. The main
3018use is to allow variables such as @code{http_proxy} to be passed to
3019derivations that download files.
3020
1909431c
LC
3021When @var{local-build?} is true, declare that the derivation is not a
3022good candidate for offloading and should rather be built locally
3023(@pxref{Daemon Offload Setup}). This is the case for small derivations
3024where the costs of data transfers would outweigh the benefits.
4a6aeb67
LC
3025
3026When @var{substitutable?} is false, declare that substitutes of the
3027derivation's output should not be used (@pxref{Substitutes}). This is
3028useful, for instance, when building packages that capture details of the
3029host CPU instruction set.
874e6874
LC
3030@end deffn
3031
3032@noindent
3033Here's an example with a shell script as its builder, assuming
3034@var{store} is an open connection to the daemon, and @var{bash} points
3035to a Bash executable in the store:
3036
3037@lisp
3038(use-modules (guix utils)
3039 (guix store)
3040 (guix derivations))
3041
59688fc4
LC
3042(let ((builder ; add the Bash script to the store
3043 (add-text-to-store store "my-builder.sh"
3044 "echo hello world > $out\n" '())))
3045 (derivation store "foo"
3046 bash `("-e" ,builder)
21b679f6 3047 #:inputs `((,bash) (,builder))
59688fc4 3048 #:env-vars '(("HOME" . "/homeless"))))
834129e0 3049@result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
874e6874
LC
3050@end lisp
3051
21b679f6
LC
3052As can be guessed, this primitive is cumbersome to use directly. A
3053better approach is to write build scripts in Scheme, of course! The
3054best course of action for that is to write the build code as a
3055``G-expression'', and to pass it to @code{gexp->derivation}. For more
6621cdb6 3056information, @pxref{G-Expressions}.
21b679f6 3057
f2fadbc1
AE
3058Once upon a time, @code{gexp->derivation} did not exist and constructing
3059derivations with build code written in Scheme was achieved with
3060@code{build-expression->derivation}, documented below. This procedure
3061is now deprecated in favor of the much nicer @code{gexp->derivation}.
3062
3063@deffn {Scheme Procedure} build-expression->derivation @var{store} @
3064 @var{name} @var{exp} @
3065 [#:system (%current-system)] [#:inputs '()] @
3066 [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
3067 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
3068 [#:references-graphs #f] [#:allowed-references #f] @
3069 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
3070Return a derivation that executes Scheme expression @var{exp} as a
3071builder for derivation @var{name}. @var{inputs} must be a list of
3072@code{(name drv-path sub-drv)} tuples; when @var{sub-drv} is omitted,
3073@code{"out"} is assumed. @var{modules} is a list of names of Guile
3074modules from the current search path to be copied in the store,
3075compiled, and made available in the load path during the execution of
3076@var{exp}---e.g., @code{((guix build utils) (guix build
3077gnu-build-system))}.
3078
3079@var{exp} is evaluated in an environment where @code{%outputs} is bound
3080to a list of output/path pairs, and where @code{%build-inputs} is bound
3081to a list of string/output-path pairs made from @var{inputs}.
3082Optionally, @var{env-vars} is a list of string pairs specifying the name
3083and value of environment variables visible to the builder. The builder
3084terminates by passing the result of @var{exp} to @code{exit}; thus, when
3085@var{exp} returns @code{#f}, the build is considered to have failed.
3086
3087@var{exp} is built using @var{guile-for-build} (a derivation). When
3088@var{guile-for-build} is omitted or is @code{#f}, the value of the
3089@code{%guile-for-build} fluid is used instead.
3090
3091See the @code{derivation} procedure for the meaning of
3092@var{references-graphs}, @var{allowed-references}, @var{local-build?},
3093and @var{substitutable?}.
3094@end deffn
3095
3096@noindent
3097Here's an example of a single-output derivation that creates a directory
3098containing one file:
3099
3100@lisp
3101(let ((builder '(let ((out (assoc-ref %outputs "out")))
3102 (mkdir out) ; create /gnu/store/@dots{}-goo
3103 (call-with-output-file (string-append out "/test")
3104 (lambda (p)
3105 (display '(hello guix) p))))))
3106 (build-expression->derivation store "goo" builder))
3107
3108@result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
3109@end lisp
3110
568717fd 3111
b860f382
LC
3112@node The Store Monad
3113@section The Store Monad
3114
3115@cindex monad
3116
3117The procedures that operate on the store described in the previous
3118sections all take an open connection to the build daemon as their first
3119argument. Although the underlying model is functional, they either have
3120side effects or depend on the current state of the store.
3121
3122The former is inconvenient: the connection to the build daemon has to be
3123carried around in all those functions, making it impossible to compose
3124functions that do not take that parameter with functions that do. The
3125latter can be problematic: since store operations have side effects
3126and/or depend on external state, they have to be properly sequenced.
3127
3128@cindex monadic values
3129@cindex monadic functions
3130This is where the @code{(guix monads)} module comes in. This module
3131provides a framework for working with @dfn{monads}, and a particularly
3132useful monad for our uses, the @dfn{store monad}. Monads are a
3133construct that allows two things: associating ``context'' with values
3134(in our case, the context is the store), and building sequences of
561fb6c3 3135computations (here computations include accesses to the store.) Values
b860f382
LC
3136in a monad---values that carry this additional context---are called
3137@dfn{monadic values}; procedures that return such values are called
3138@dfn{monadic procedures}.
3139
3140Consider this ``normal'' procedure:
3141
3142@example
45adbd62
LC
3143(define (sh-symlink store)
3144 ;; Return a derivation that symlinks the 'bash' executable.
3145 (let* ((drv (package-derivation store bash))
3146 (out (derivation->output-path drv))
3147 (sh (string-append out "/bin/bash")))
3148 (build-expression->derivation store "sh"
3149 `(symlink ,sh %output))))
b860f382
LC
3150@end example
3151
c6f30b81
LC
3152Using @code{(guix monads)} and @code{(guix gexp)}, it may be rewritten
3153as a monadic function:
b860f382
LC
3154
3155@example
45adbd62 3156(define (sh-symlink)
b860f382 3157 ;; Same, but return a monadic value.
c6f30b81
LC
3158 (mlet %store-monad ((drv (package->derivation bash)))
3159 (gexp->derivation "sh"
3160 #~(symlink (string-append #$drv "/bin/bash")
3161 #$output))))
b860f382
LC
3162@end example
3163
c6f30b81
LC
3164There several things to note in the second version: the @code{store}
3165parameter is now implicit and is ``threaded'' in the calls to the
3166@code{package->derivation} and @code{gexp->derivation} monadic
3167procedures, and the monadic value returned by @code{package->derivation}
3168is @dfn{bound} using @code{mlet} instead of plain @code{let}.
3169
3170As it turns out, the call to @code{package->derivation} can even be
3171omitted since it will take place implicitly, as we will see later
3172(@pxref{G-Expressions}):
3173
3174@example
3175(define (sh-symlink)
3176 (gexp->derivation "sh"
3177 #~(symlink (string-append #$bash "/bin/bash")
3178 #$output)))
3179@end example
b860f382 3180
7ce21611
LC
3181@c See
3182@c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
3183@c for the funny quote.
3184Calling the monadic @code{sh-symlink} has no effect. As someone once
3185said, ``you exit a monad like you exit a building on fire: by running''.
3186So, to exit the monad and get the desired effect, one must use
3187@code{run-with-store}:
b860f382
LC
3188
3189@example
8e9aa37f
CAW
3190(run-with-store (open-connection) (sh-symlink))
3191@result{} /gnu/store/...-sh-symlink
b860f382
LC
3192@end example
3193
f97c9175 3194Note that the @code{(guix monad-repl)} module extends the Guile REPL with
b9b86078 3195new ``meta-commands'' to make it easier to deal with monadic procedures:
f97c9175 3196@code{run-in-store}, and @code{enter-store-monad}. The former is used
b9b86078
LC
3197to ``run'' a single monadic value through the store:
3198
3199@example
3200scheme@@(guile-user)> ,run-in-store (package->derivation hello)
3201$1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
3202@end example
3203
3204The latter enters a recursive REPL, where all the return values are
3205automatically run through the store:
3206
3207@example
3208scheme@@(guile-user)> ,enter-store-monad
3209store-monad@@(guile-user) [1]> (package->derivation hello)
3210$2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
3211store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
3212$3 = "/gnu/store/@dots{}-foo"
3213store-monad@@(guile-user) [1]> ,q
3214scheme@@(guile-user)>
3215@end example
3216
3217@noindent
3218Note that non-monadic values cannot be returned in the
3219@code{store-monad} REPL.
3220
e87f0591
LC
3221The main syntactic forms to deal with monads in general are provided by
3222the @code{(guix monads)} module and are described below.
b860f382
LC
3223
3224@deffn {Scheme Syntax} with-monad @var{monad} @var{body} ...
3225Evaluate any @code{>>=} or @code{return} forms in @var{body} as being
3226in @var{monad}.
3227@end deffn
3228
3229@deffn {Scheme Syntax} return @var{val}
3230Return a monadic value that encapsulates @var{val}.
3231@end deffn
3232
751630c9 3233@deffn {Scheme Syntax} >>= @var{mval} @var{mproc} ...
b860f382 3234@dfn{Bind} monadic value @var{mval}, passing its ``contents'' to monadic
751630c9
LC
3235procedures @var{mproc}@dots{}@footnote{This operation is commonly
3236referred to as ``bind'', but that name denotes an unrelated procedure in
3237Guile. Thus we use this somewhat cryptic symbol inherited from the
3238Haskell language.}. There can be one @var{mproc} or several of them, as
3239in this example:
3240
3241@example
3242(run-with-state
3243 (with-monad %state-monad
3244 (>>= (return 1)
3245 (lambda (x) (return (+ 1 x)))
3246 (lambda (x) (return (* 2 x)))))
3247 'some-state)
3248
3249@result{} 4
3250@result{} some-state
3251@end example
b860f382
LC
3252@end deffn
3253
3254@deffn {Scheme Syntax} mlet @var{monad} ((@var{var} @var{mval}) ...) @
3255 @var{body} ...
3256@deffnx {Scheme Syntax} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
3257 @var{body} ...
3258Bind the variables @var{var} to the monadic values @var{mval} in
3259@var{body}. The form (@var{var} -> @var{val}) binds @var{var} to the
3260``normal'' value @var{val}, as per @code{let}.
3261
3262@code{mlet*} is to @code{mlet} what @code{let*} is to @code{let}
3263(@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
3264@end deffn
3265
405a9d4e
LC
3266@deffn {Scheme System} mbegin @var{monad} @var{mexp} ...
3267Bind @var{mexp} and the following monadic expressions in sequence,
3268returning the result of the last expression.
3269
3270This is akin to @code{mlet}, except that the return values of the
3271monadic expressions are ignored. In that sense, it is analogous to
3272@code{begin}, but applied to monadic expressions.
3273@end deffn
3274
561fb6c3
LC
3275@cindex state monad
3276The @code{(guix monads)} module provides the @dfn{state monad}, which
3277allows an additional value---the state---to be @emph{threaded} through
3278monadic procedure calls.
3279
3280@defvr {Scheme Variable} %state-monad
3281The state monad. Procedures in the state monad can access and change
3282the state that is threaded.
3283
3284Consider the example below. The @code{square} procedure returns a value
3285in the state monad. It returns the square of its argument, but also
3286increments the current state value:
3287
3288@example
3289(define (square x)
3290 (mlet %state-monad ((count (current-state)))
3291 (mbegin %state-monad
3292 (set-current-state (+ 1 count))
3293 (return (* x x)))))
3294
3295(run-with-state (sequence %state-monad (map square (iota 3))) 0)
3296@result{} (0 1 4)
3297@result{} 3
3298@end example
3299
3300When ``run'' through @var{%state-monad}, we obtain that additional state
3301value, which is the number of @code{square} calls.
3302@end defvr
3303
3304@deffn {Monadic Procedure} current-state
3305Return the current state as a monadic value.
3306@end deffn
3307
3308@deffn {Monadic Procedure} set-current-state @var{value}
3309Set the current state to @var{value} and return the previous state as a
3310monadic value.
3311@end deffn
3312
3313@deffn {Monadic Procedure} state-push @var{value}
3314Push @var{value} to the current state, which is assumed to be a list,
3315and return the previous state as a monadic value.
3316@end deffn
3317
3318@deffn {Monadic Procedure} state-pop
3319Pop a value from the current state and return it as a monadic value.
3320The state is assumed to be a list.
3321@end deffn
3322
3323@deffn {Scheme Procedure} run-with-state @var{mval} [@var{state}]
3324Run monadic value @var{mval} starting with @var{state} as the initial
3325state. Return two values: the resulting value, and the resulting state.
3326@end deffn
3327
e87f0591
LC
3328The main interface to the store monad, provided by the @code{(guix
3329store)} module, is as follows.
b860f382
LC
3330
3331@defvr {Scheme Variable} %store-monad
561fb6c3
LC
3332The store monad---an alias for @var{%state-monad}.
3333
3334Values in the store monad encapsulate accesses to the store. When its
3335effect is needed, a value of the store monad must be ``evaluated'' by
3336passing it to the @code{run-with-store} procedure (see below.)
b860f382
LC
3337@end defvr
3338
3339@deffn {Scheme Procedure} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
3340Run @var{mval}, a monadic value in the store monad, in @var{store}, an
3341open store connection.
3342@end deffn
3343
ad372953 3344@deffn {Monadic Procedure} text-file @var{name} @var{text} [@var{references}]
b860f382 3345Return as a monadic value the absolute file name in the store of the file
ad372953
LC
3346containing @var{text}, a string. @var{references} is a list of store items that the
3347resulting text file refers to; it defaults to the empty list.
45adbd62
LC
3348@end deffn
3349
0a90af15
LC
3350@deffn {Monadic Procedure} interned-file @var{file} [@var{name}] @
3351 [#:recursive? #t]
3352Return the name of @var{file} once interned in the store. Use
3353@var{name} as its store name, or the basename of @var{file} if
3354@var{name} is omitted.
3355
3356When @var{recursive?} is true, the contents of @var{file} are added
3357recursively; if @var{file} designates a flat file and @var{recursive?}
3358is true, its contents are added, and its permission bits are kept.
3359
3360The example below adds a file to the store, under two different names:
3361
3362@example
3363(run-with-store (open-connection)
3364 (mlet %store-monad ((a (interned-file "README"))
3365 (b (interned-file "README" "LEGU-MIN")))
3366 (return (list a b))))
3367
3368@result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
3369@end example
3370
3371@end deffn
3372
e87f0591
LC
3373The @code{(guix packages)} module exports the following package-related
3374monadic procedures:
3375
b860f382 3376@deffn {Monadic Procedure} package-file @var{package} [@var{file}] @
4231f05b 3377 [#:system (%current-system)] [#:target #f] @
f97c9175
AE
3378 [#:output "out"]
3379Return as a monadic
b860f382
LC
3380value in the absolute file name of @var{file} within the @var{output}
3381directory of @var{package}. When @var{file} is omitted, return the name
4231f05b
LC
3382of the @var{output} directory of @var{package}. When @var{target} is
3383true, use it as a cross-compilation target triplet.
b860f382
LC
3384@end deffn
3385
b860f382 3386@deffn {Monadic Procedure} package->derivation @var{package} [@var{system}]
4231f05b
LC
3387@deffnx {Monadic Procedure} package->cross-derivation @var{package} @
3388 @var{target} [@var{system}]
3389Monadic version of @code{package-derivation} and
3390@code{package-cross-derivation} (@pxref{Defining Packages}).
b860f382
LC
3391@end deffn
3392
3393
21b679f6
LC
3394@node G-Expressions
3395@section G-Expressions
3396
3397@cindex G-expression
3398@cindex build code quoting
3399So we have ``derivations'', which represent a sequence of build actions
3400to be performed to produce an item in the store (@pxref{Derivations}).
f97c9175 3401These build actions are performed when asking the daemon to actually
21b679f6
LC
3402build the derivations; they are run by the daemon in a container
3403(@pxref{Invoking guix-daemon}).
3404
3405@cindex strata of code
f97c9175 3406It should come as no surprise that we like to write these build actions
21b679f6
LC
3407in Scheme. When we do that, we end up with two @dfn{strata} of Scheme
3408code@footnote{The term @dfn{stratum} in this context was coined by
ef4ab0a4
LC
3409Manuel Serrano et al.@: in the context of their work on Hop. Oleg
3410Kiselyov, who has written insightful
3411@url{http://okmij.org/ftp/meta-programming/#meta-scheme, essays and code
3412on this topic}, refers to this kind of code generation as
3413@dfn{staging}.}: the ``host code''---code that defines packages, talks
3414to the daemon, etc.---and the ``build code''---code that actually
3415performs build actions, such as making directories, invoking
3416@command{make}, etc.
21b679f6
LC
3417
3418To describe a derivation and its build actions, one typically needs to
3419embed build code inside host code. It boils down to manipulating build
f97c9175 3420code as data, and the homoiconicity of Scheme---code has a direct
21b679f6 3421representation as data---comes in handy for that. But we need more than
f97c9175 3422the normal @code{quasiquote} mechanism in Scheme to construct build
21b679f6
LC
3423expressions.
3424
3425The @code{(guix gexp)} module implements @dfn{G-expressions}, a form of
3426S-expressions adapted to build expressions. G-expressions, or
f97c9175 3427@dfn{gexps}, consist essentially of three syntactic forms: @code{gexp},
21b679f6 3428@code{ungexp}, and @code{ungexp-splicing} (or simply: @code{#~},
f97c9175
AE
3429@code{#$}, and @code{#$@@}), which are comparable to
3430@code{quasiquote}, @code{unquote}, and @code{unquote-splicing},
3431respectivel (@pxref{Expression Syntax, @code{quasiquote},, guile,
3432GNU Guile Reference Manual}). However, there are major differences:
21b679f6
LC
3433
3434@itemize
3435@item
3436Gexps are meant to be written to a file and run or manipulated by other
3437processes.
3438
3439@item
b39fc6f7
LC
3440When a high-level object such as a package or derivation is unquoted
3441inside a gexp, the result is as if its output file name had been
3442introduced.
ff40e9b7 3443
21b679f6
LC
3444@item
3445Gexps carry information about the packages or derivations they refer to,
3446and these dependencies are automatically added as inputs to the build
3447processes that use them.
3448@end itemize
3449
c2b84676 3450@cindex lowering, of high-level objects in gexps
343eacbe
LC
3451This mechanism is not limited to package and derivation
3452objects: @dfn{compilers} able to ``lower'' other high-level objects to
c2b84676
LC
3453derivations or files in the store can be defined,
3454such that these objects can also be inserted
f97c9175 3455into gexps. For example, a useful type of high-level objects that can be
343eacbe 3456inserted in a gexp is ``file-like objects'', which make it easy to
f97c9175 3457add files to the store and to refer to them in
558e8b11
LC
3458derivations and such (see @code{local-file} and @code{plain-file}
3459below.)
b39fc6f7 3460
21b679f6
LC
3461To illustrate the idea, here is an example of a gexp:
3462
3463@example
3464(define build-exp
3465 #~(begin
3466 (mkdir #$output)
3467 (chdir #$output)
aff8ce7c 3468 (symlink (string-append #$coreutils "/bin/ls")
21b679f6
LC
3469 "list-files")))
3470@end example
3471
3472This gexp can be passed to @code{gexp->derivation}; we obtain a
3473derivation that builds a directory containing exactly one symlink to
3474@file{/gnu/store/@dots{}-coreutils-8.22/bin/ls}:
3475
3476@example
3477(gexp->derivation "the-thing" build-exp)
3478@end example
3479
e20fd1bf 3480As one would expect, the @code{"/gnu/store/@dots{}-coreutils-8.22"} string is
21b679f6
LC
3481substituted to the reference to the @var{coreutils} package in the
3482actual build code, and @var{coreutils} is automatically made an input to
3483the derivation. Likewise, @code{#$output} (equivalent to @code{(ungexp
f97c9175
AE
3484output)}) is replaced by a string containing the directory name of the
3485output of the derivation.
667b2508
LC
3486
3487@cindex cross compilation
3488In a cross-compilation context, it is useful to distinguish between
3489references to the @emph{native} build of a package---that can run on the
3490host---versus references to cross builds of a package. To that end, the
3491@code{#+} plays the same role as @code{#$}, but is a reference to a
3492native package build:
3493
3494@example
3495(gexp->derivation "vi"
3496 #~(begin
3497 (mkdir #$output)
3498 (system* (string-append #+coreutils "/bin/ln")
3499 "-s"
3500 (string-append #$emacs "/bin/emacs")
3501 (string-append #$output "/bin/vi")))
3502 #:target "mips64el-linux")
3503@end example
3504
3505@noindent
3506In the example above, the native build of @var{coreutils} is used, so
3507that @command{ln} can actually run on the host; but then the
3508cross-compiled build of @var{emacs} is referenced.
3509
3510The syntactic form to construct gexps is summarized below.
21b679f6
LC
3511
3512@deffn {Scheme Syntax} #~@var{exp}
3513@deffnx {Scheme Syntax} (gexp @var{exp})
3514Return a G-expression containing @var{exp}. @var{exp} may contain one
3515or more of the following forms:
3516
3517@table @code
3518@item #$@var{obj}
3519@itemx (ungexp @var{obj})
b39fc6f7
LC
3520Introduce a reference to @var{obj}. @var{obj} may have one of the
3521supported types, for example a package or a
21b679f6
LC
3522derivation, in which case the @code{ungexp} form is replaced by its
3523output file name---e.g., @code{"/gnu/store/@dots{}-coreutils-8.22}.
3524
b39fc6f7
LC
3525If @var{obj} is a list, it is traversed and references to supported
3526objects are substituted similarly.
21b679f6
LC
3527
3528If @var{obj} is another gexp, its contents are inserted and its
3529dependencies are added to those of the containing gexp.
3530
3531If @var{obj} is another kind of object, it is inserted as is.
3532
b39fc6f7
LC
3533@item #$@var{obj}:@var{output}
3534@itemx (ungexp @var{obj} @var{output})
21b679f6 3535This is like the form above, but referring explicitly to the
b39fc6f7
LC
3536@var{output} of @var{obj}---this is useful when @var{obj} produces
3537multiple outputs (@pxref{Packages with Multiple Outputs}).
21b679f6 3538
667b2508
LC
3539@item #+@var{obj}
3540@itemx #+@var{obj}:output
3541@itemx (ungexp-native @var{obj})
3542@itemx (ungexp-native @var{obj} @var{output})
3543Same as @code{ungexp}, but produces a reference to the @emph{native}
3544build of @var{obj} when used in a cross compilation context.
3545
21b679f6
LC
3546@item #$output[:@var{output}]
3547@itemx (ungexp output [@var{output}])
3548Insert a reference to derivation output @var{output}, or to the main
3549output when @var{output} is omitted.
3550
3551This only makes sense for gexps passed to @code{gexp->derivation}.
3552
3553@item #$@@@var{lst}
3554@itemx (ungexp-splicing @var{lst})
3555Like the above, but splices the contents of @var{lst} inside the
3556containing list.
3557
667b2508
LC
3558@item #+@@@var{lst}
3559@itemx (ungexp-native-splicing @var{lst})
3560Like the above, but refers to native builds of the objects listed in
3561@var{lst}.
3562
21b679f6
LC
3563@end table
3564
3565G-expressions created by @code{gexp} or @code{#~} are run-time objects
3566of the @code{gexp?} type (see below.)
3567@end deffn
3568
3569@deffn {Scheme Procedure} gexp? @var{obj}
3570Return @code{#t} if @var{obj} is a G-expression.
3571@end deffn
3572
3573G-expressions are meant to be written to disk, either as code building
3574some derivation, or as plain files in the store. The monadic procedures
3575below allow you to do that (@pxref{The Store Monad}, for more
3576information about monads.)
3577
3578@deffn {Monadic Procedure} gexp->derivation @var{name} @var{exp} @
ce45eb4c 3579 [#:system (%current-system)] [#:target #f] [#:graft? #t] @
21b679f6
LC
3580 [#:hash #f] [#:hash-algo #f] @
3581 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
4684f301 3582 [#:module-path @var{%load-path}] @
c8351d9a 3583 [#:references-graphs #f] [#:allowed-references #f] @
c0468155 3584 [#:leaked-env-vars #f] @
0309e1b0 3585 [#:script-name (string-append @var{name} "-builder")] @
4a6aeb67 3586 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
21b679f6 3587Return a derivation @var{name} that runs @var{exp} (a gexp) with
0309e1b0
LC
3588@var{guile-for-build} (a derivation) on @var{system}; @var{exp} is
3589stored in a file called @var{script-name}. When @var{target} is true,
3590it is used as the cross-compilation target triplet for packages referred
3591to by @var{exp}.
21b679f6 3592
ce45eb4c
LC
3593Make @var{modules} available in the evaluation context of @var{exp};
3594@var{modules} is a list of names of Guile modules searched in
3595@var{module-path} to be copied in the store, compiled, and made available in
21b679f6
LC
3596the load path during the execution of @var{exp}---e.g., @code{((guix
3597build utils) (guix build gnu-build-system))}.
3598
ce45eb4c
LC
3599@var{graft?} determines whether packages referred to by @var{exp} should be grafted when
3600applicable.
3601
b53833b2
LC
3602When @var{references-graphs} is true, it must be a list of tuples of one of the
3603following forms:
3604
3605@example
3606(@var{file-name} @var{package})
3607(@var{file-name} @var{package} @var{output})
3608(@var{file-name} @var{derivation})
3609(@var{file-name} @var{derivation} @var{output})
3610(@var{file-name} @var{store-item})
3611@end example
3612
3613The right-hand-side of each element of @var{references-graphs} is automatically made
3614an input of the build process of @var{exp}. In the build environment, each
3615@var{file-name} contains the reference graph of the corresponding item, in a simple
3616text format.
3617
c8351d9a
LC
3618@var{allowed-references} must be either @code{#f} or a list of output names and packages.
3619In the latter case, the list denotes store items that the result is allowed to
3620refer to. Any reference to another store item will lead to a build error.
3621
e20fd1bf 3622The other arguments are as for @code{derivation} (@pxref{Derivations}).
21b679f6
LC
3623@end deffn
3624
343eacbe 3625@cindex file-like objects
e1c153e0
LC
3626The @code{local-file}, @code{plain-file}, @code{computed-file},
3627@code{program-file}, and @code{scheme-file} procedures below return
3628@dfn{file-like objects}. That is, when unquoted in a G-expression,
3629these objects lead to a file in the store. Consider this G-expression:
343eacbe
LC
3630
3631@example
3632#~(system* (string-append #$glibc "/sbin/nscd") "-f"
3633 #$(local-file "/tmp/my-nscd.conf"))
3634@end example
3635
3636The effect here is to ``intern'' @file{/tmp/my-nscd.conf} by copying it
3637to the store. Once expanded, for instance @i{via}
3638@code{gexp->derivation}, the G-expression refers to that copy under
3639@file{/gnu/store}; thus, modifying or removing the file in @file{/tmp}
3640does not have any effect on what the G-expression does.
3641@code{plain-file} can be used similarly; it differs in that the file
3642content is directly passed as a string.
3643
d9ae938f
LC
3644@deffn {Scheme Procedure} local-file @var{file} [@var{name}] @
3645 [#:recursive? #t]
3646Return an object representing local file @var{file} to add to the store; this
9d3994f7
LC
3647object can be used in a gexp. If @var{file} is a relative file name, it is looked
3648up relative to the source file where this form appears. @var{file} will be added to
3649the store under @var{name}--by default the base name of @var{file}.
d9ae938f
LC
3650
3651When @var{recursive?} is true, the contents of @var{file} are added recursively; if @var{file}
3652designates a flat file and @var{recursive?} is true, its contents are added, and its
3653permission bits are kept.
3654
3655This is the declarative counterpart of the @code{interned-file} monadic
3656procedure (@pxref{The Store Monad, @code{interned-file}}).
3657@end deffn
3658
558e8b11
LC
3659@deffn {Scheme Procedure} plain-file @var{name} @var{content}
3660Return an object representing a text file called @var{name} with the given
3661@var{content} (a string) to be added to the store.
3662
3663This is the declarative counterpart of @code{text-file}.
3664@end deffn
3665
91937029
LC
3666@deffn {Scheme Procedure} computed-file @var{name} @var{gexp} @
3667 [#:modules '()] [#:options '(#:local-build? #t)]
3668Return an object representing the store item @var{name}, a file or
3669directory computed by @var{gexp}. @var{modules} specifies the set of
3670modules visible in the execution context of @var{gexp}. @var{options}
3671is a list of additional arguments to pass to @code{gexp->derivation}.
3672
3673This is the declarative counterpart of @code{gexp->derivation}.
3674@end deffn
3675
21b679f6
LC
3676@deffn {Monadic Procedure} gexp->script @var{name} @var{exp}
3677Return an executable script @var{name} that runs @var{exp} using
3678@var{guile} with @var{modules} in its search path.
3679
3680The example below builds a script that simply invokes the @command{ls}
3681command:
3682
3683@example
3684(use-modules (guix gexp) (gnu packages base))
3685
3686(gexp->script "list-files"
3687 #~(execl (string-append #$coreutils "/bin/ls")
3688 "ls"))
3689@end example
3690
3691When ``running'' it through the store (@pxref{The Store Monad,
e20fd1bf 3692@code{run-with-store}}), we obtain a derivation that produces an
21b679f6
LC
3693executable file @file{/gnu/store/@dots{}-list-files} along these lines:
3694
3695@example
3696#!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
3697!#
3698(execl (string-append "/gnu/store/@dots{}-coreutils-8.22"/bin/ls")
3699 "ls")
3700@end example
3701@end deffn
3702
15a01c72
LC
3703@deffn {Scheme Procedure} program-file @var{name} @var{exp} @
3704 [#:modules '()] [#:guile #f]
3705Return an object representing the executable store item @var{name} that
3706runs @var{gexp}. @var{guile} is the Guile package used to execute that
3707script, and @var{modules} is the list of modules visible to that script.
3708
3709This is the declarative counterpart of @code{gexp->script}.
3710@end deffn
3711
21b679f6
LC
3712@deffn {Monadic Procedure} gexp->file @var{name} @var{exp}
3713Return a derivation that builds a file @var{name} containing @var{exp}.
3714
3715The resulting file holds references to all the dependencies of @var{exp}
3716or a subset thereof.
3717@end deffn
1ed19464 3718
e1c153e0
LC
3719@deffn {Scheme Procedure} scheme-file @var{name} @var{exp}
3720Return an object representing the Scheme file @var{name} that contains
3721@var{exp}.
3722
3723This is the declarative counterpart of @code{gexp->file}.
3724@end deffn
3725
1ed19464
LC
3726@deffn {Monadic Procedure} text-file* @var{name} @var{text} @dots{}
3727Return as a monadic value a derivation that builds a text file
3728containing all of @var{text}. @var{text} may list, in addition to
d9ae938f
LC
3729strings, objects of any type that can be used in a gexp: packages,
3730derivations, local file objects, etc. The resulting store file holds
3731references to all these.
1ed19464
LC
3732
3733This variant should be preferred over @code{text-file} anytime the file
3734to create will reference items from the store. This is typically the
3735case when building a configuration file that embeds store file names,
3736like this:
3737
3738@example
3739(define (profile.sh)
3740 ;; Return the name of a shell script in the store that
3741 ;; initializes the 'PATH' environment variable.
3742 (text-file* "profile.sh"
3743 "export PATH=" coreutils "/bin:"
3744 grep "/bin:" sed "/bin\n"))
3745@end example
3746
3747In this example, the resulting @file{/gnu/store/@dots{}-profile.sh} file
3748will references @var{coreutils}, @var{grep}, and @var{sed}, thereby
3749preventing them from being garbage-collected during its lifetime.
3750@end deffn
21b679f6 3751
b751cde3
LC
3752@deffn {Scheme Procedure} mixed-text-file @var{name} @var{text} @dots{}
3753Return an object representing store file @var{name} containing
3754@var{text}. @var{text} is a sequence of strings and file-like objects,
3755as in:
3756
3757@example
3758(mixed-text-file "profile"
3759 "export PATH=" coreutils "/bin:" grep "/bin")
3760@end example
3761
3762This is the declarative counterpart of @code{text-file*}.
3763@end deffn
3764
21b679f6
LC
3765Of course, in addition to gexps embedded in ``host'' code, there are
3766also modules containing build tools. To make it clear that they are
3767meant to be used in the build stratum, these modules are kept in the
3768@code{(guix build @dots{})} name space.
3769
c2b84676
LC
3770@cindex lowering, of high-level objects in gexps
3771Internally, high-level objects are @dfn{lowered}, using their compiler,
3772to either derivations or store items. For instance, lowering a package
3773yields a derivation, and lowering a @code{plain-file} yields a store
3774item. This is achieved using the @code{lower-object} monadic procedure.
3775
3776@deffn {Monadic Procedure} lower-object @var{obj} [@var{system}] @
3777 [#:target #f]
3778Return as a value in @var{%store-monad} the derivation or store item
3779corresponding to @var{obj} for @var{system}, cross-compiling for
3780@var{target} if @var{target} is true. @var{obj} must be an object that
3781has an associated gexp compiler, such as a @code{<package>}.
3782@end deffn
3783
21b679f6 3784
568717fd
LC
3785@c *********************************************************************
3786@node Utilities
3787@chapter Utilities
3788
210cc920
LC
3789This section describes tools primarily targeted at developers and users
3790who write new package definitions. They complement the Scheme
3791programming interface of Guix in a convenient way.
3792
568717fd 3793@menu
37166310 3794* Invoking guix build:: Building packages from the command line.
39bee8a2 3795* Invoking guix edit:: Editing package definitions.
210cc920 3796* Invoking guix download:: Downloading a file and printing its hash.
37166310 3797* Invoking guix hash:: Computing the cryptographic hash of a file.
2f7d2d91 3798* Invoking guix import:: Importing package definitions.
37166310 3799* Invoking guix refresh:: Updating package definitions.
b4f5e0e8 3800* Invoking guix lint:: Finding errors in package definitions.
fcc58db6 3801* Invoking guix size:: Profiling disk usage.
88856916 3802* Invoking guix graph:: Visualizing the graph of packages.
372c4bbc 3803* Invoking guix environment:: Setting up development environments.
aff8ce7c 3804* Invoking guix publish:: Sharing substitutes.
d23c20f1 3805* Invoking guix challenge:: Challenging substitute servers.
32efa254 3806* Invoking guix container:: Process isolation.
568717fd
LC
3807@end menu
3808
e49951eb
MW
3809@node Invoking guix build
3810@section Invoking @command{guix build}
568717fd 3811
e49951eb 3812The @command{guix build} command builds packages or derivations and
6798a8e4
LC
3813their dependencies, and prints the resulting store paths. Note that it
3814does not modify the user's profile---this is the job of the
e49951eb 3815@command{guix package} command (@pxref{Invoking guix package}). Thus,
6798a8e4
LC
3816it is mainly useful for distribution developers.
3817
3818The general syntax is:
c78bd12b
LC
3819
3820@example
e49951eb 3821guix build @var{options} @var{package-or-derivation}@dots{}
c78bd12b
LC
3822@end example
3823
f97c9175 3824As an example, the following command builds the latest versions of Emacs
ccd7158d
LC
3825and of Guile, displays their build logs, and finally displays the
3826resulting directories:
3827
3828@example
3829guix build emacs guile
3830@end example
3831
3832Similarly, the following command builds all the available packages:
3833
3834@example
3835guix build --keep-going \
3836 `guix package -A | cut -f1,2 --output-delimiter=@@`
3837@end example
3838
c78bd12b 3839@var{package-or-derivation} may be either the name of a package found in
5401dd75
LC
3840the software distribution such as @code{coreutils} or
3841@code{coreutils-8.20}, or a derivation such as
834129e0 3842@file{/gnu/store/@dots{}-coreutils-8.19.drv}. In the former case, a
e7f34eb0
LC
3843package with the corresponding name (and optionally version) is searched
3844for among the GNU distribution modules (@pxref{Package Modules}).
3845
3846Alternatively, the @code{--expression} option may be used to specify a
3847Scheme expression that evaluates to a package; this is useful when
3848disambiguation among several same-named packages or package variants is
3849needed.
c78bd12b 3850
ccd7158d
LC
3851There may be zero or more @var{options}. The available options are
3852described in the subsections below.
3853
3854@menu
3855* Common Build Options:: Build options for most commands.
88ad6ded 3856* Package Transformation Options:: Creating variants of packages.
ccd7158d
LC
3857* Additional Build Options:: Options specific to 'guix build'.
3858@end menu
3859
3860@node Common Build Options
3861@subsection Common Build Options
3862
3863A number of options that control the build process are common to
3864@command{guix build} and other commands that can spawn builds, such as
3865@command{guix package} or @command{guix archive}. These are the
3866following:
3867
3868@table @code
3869
3870@item --load-path=@var{directory}
3871@itemx -L @var{directory}
3872Add @var{directory} to the front of the package module search path
3873(@pxref{Package Modules}).
3874
3875This allows users to define their own packages and make them visible to
3876the command-line tools.
3877
3878@item --keep-failed
3879@itemx -K
3880Keep the build tree of failed builds. Thus, if a build fail, its build
3881tree is kept under @file{/tmp}, in a directory whose name is shown at
3882the end of the build log. This is useful when debugging build issues.
3883
3884@item --keep-going
3885@itemx -k
3886Keep going when some of the derivations fail to build; return only once
3887all the builds have either completed or failed.
3888
3889The default behavior is to stop as soon as one of the specified
3890derivations has failed.
3891
3892@item --dry-run
3893@itemx -n
3894Do not build the derivations.
3895
3896@item --fallback
3897When substituting a pre-built binary fails, fall back to building
3898packages locally.
3899
3900@item --substitute-urls=@var{urls}
3901@anchor{client-substitute-urls}
3902Consider @var{urls} the whitespace-separated list of substitute source
3903URLs, overriding the default list of URLs of @command{guix-daemon}
3904(@pxref{daemon-substitute-urls,, @command{guix-daemon} URLs}).
3905
3906This means that substitutes may be downloaded from @var{urls}, provided
3907they are signed by a key authorized by the system administrator
3908(@pxref{Substitutes}).
3909
3910@item --no-substitutes
3911Do not use substitutes for build products. That is, always build things
3912locally instead of allowing downloads of pre-built binaries
3913(@pxref{Substitutes}).
3914
3915@item --rounds=@var{n}
3916Build each derivation @var{n} times in a row, and raise an error if
3917consecutive build results are not bit-for-bit identical.
3918
3919This is a useful way to detect non-deterministic builds processes.
3920Non-deterministic build processes are a problem because they make it
3921practically impossible for users to @emph{verify} whether third-party
3922binaries are genuine. @xref{Invoking guix challenge}, for more.
3923
3924Note that, currently, the differing build results are not kept around,
3925so you will have to manually investigate in case of an error---e.g., by
3926stashing one of the build results with @code{guix archive --export},
3927then rebuilding, and finally comparing the two results.
3928
3929@item --no-build-hook
f97c9175 3930Do not attempt to offload builds @i{via} the ``build hook'' of the daemon
ccd7158d
LC
3931(@pxref{Daemon Offload Setup}). That is, always build things locally
3932instead of offloading builds to remote machines.
3933
3934@item --max-silent-time=@var{seconds}
3935When the build or substitution process remains silent for more than
3936@var{seconds}, terminate it and report a build failure.
3937
3938@item --timeout=@var{seconds}
3939Likewise, when the build or substitution process lasts for more than
3940@var{seconds}, terminate it and report a build failure.
3941
3942By default there is no timeout. This behavior can be restored with
3943@code{--timeout=0}.
3944
3945@item --verbosity=@var{level}
3946Use the given verbosity level. @var{level} must be an integer between 0
3947and 5; higher means more verbose output. Setting a level of 4 or more
3948may be helpful when debugging setup issues with the build daemon.
3949
3950@item --cores=@var{n}
3951@itemx -c @var{n}
3952Allow the use of up to @var{n} CPU cores for the build. The special
3953value @code{0} means to use as many CPU cores as available.
3954
3955@item --max-jobs=@var{n}
3956@itemx -M @var{n}
3957Allow at most @var{n} build jobs in parallel. @xref{Invoking
3958guix-daemon, @code{--max-jobs}}, for details about this option and the
3959equivalent @command{guix-daemon} option.
3960
3961@end table
3962
3963Behind the scenes, @command{guix build} is essentially an interface to
3964the @code{package-derivation} procedure of the @code{(guix packages)}
3965module, and to the @code{build-derivations} procedure of the @code{(guix
3966derivations)} module.
3967
3968In addition to options explicitly passed on the command line,
3969@command{guix build} and other @command{guix} commands that support
3970building honor the @code{GUIX_BUILD_OPTIONS} environment variable.
3971
3972@defvr {Environment Variable} GUIX_BUILD_OPTIONS
3973Users can define this variable to a list of command line options that
3974will automatically be used by @command{guix build} and other
3975@command{guix} commands that can perform builds, as in the example
3976below:
3977
3978@example
3979$ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
3980@end example
3981
3982These options are parsed independently, and the result is appended to
3983the parsed command-line options.
3984@end defvr
3985
88ad6ded
LC
3986
3987@node Package Transformation Options
3988@subsection Package Transformation Options
3989
3990@cindex package variants
3991Another set of command-line options supported by @command{guix build}
b8638f03 3992and also @command{guix package} are @dfn{package transformation
f97c9175 3993options}. These are options that make it possible to define @dfn{package
b8638f03
LC
3994variants}---for instance, packages built from different source code.
3995This is a convenient way to create customized packages on the fly
3996without having to type in the definitions of package variants
3997(@pxref{Defining Packages}).
88ad6ded
LC
3998
3999@table @code
4000
4001@item --with-source=@var{source}
4002Use @var{source} as the source of the corresponding package.
4003@var{source} must be a file name or a URL, as for @command{guix
4004download} (@pxref{Invoking guix download}).
4005
f97c9175
AE
4006The ``corresponding package'' is taken to be the one specified on the
4007command line the name of which matches the base of @var{source}---e.g.,
4008if @var{source} is @code{/src/guile-2.0.10.tar.gz}, the corresponding
88ad6ded 4009package is @code{guile}. Likewise, the version string is inferred from
f97c9175 4010@var{source}; in the previous example, it is @code{2.0.10}.
88ad6ded
LC
4011
4012This option allows users to try out versions of packages other than the
4013one provided by the distribution. The example below downloads
4014@file{ed-1.7.tar.gz} from a GNU mirror and uses that as the source for
4015the @code{ed} package:
4016
4017@example
4018guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
4019@end example
4020
4021As a developer, @code{--with-source} makes it easy to test release
4022candidates:
4023
4024@example
4025guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
4026@end example
4027
4028@dots{} or to build from a checkout in a pristine environment:
4029
4030@example
4031$ git clone git://git.sv.gnu.org/guix.git
4032$ guix build guix --with-source=./guix
4033@end example
4034
47c0f92c
LC
4035@item --with-input=@var{package}=@var{replacement}
4036Replace dependency on @var{package} by a dependency on
4037@var{replacement}. @var{package} must be a package name, and
4038@var{replacement} must be a package specification such as @code{guile}
4039or @code{guile@@1.8}.
4040
f97c9175 4041For instance, the following command builds Guix, but replaces its
47c0f92c
LC
4042dependency on the current stable version of Guile with a dependency on
4043the development version of Guile, @code{guile-next}:
4044
4045@example
4046guix build --with-input=guile=guile-next guix
4047@end example
4048
4049This is a recursive, deep replacement. So in this example, both
4050@code{guix} and its dependency @code{guile-json} (which also depends on
4051@code{guile}) get rebuilt against @code{guile-next}.
4052
4053However, implicit inputs are left unchanged.
88ad6ded
LC
4054@end table
4055
ccd7158d
LC
4056@node Additional Build Options
4057@subsection Additional Build Options
4058
4059The command-line options presented below are specific to @command{guix
4060build}.
c78bd12b
LC
4061
4062@table @code
4063
34a1783f
DT
4064@item --file=@var{file}
4065@itemx -f @var{file}
4066
4067Build the package or derivation that the code within @var{file}
4068evaluates to.
4069
4070As an example, @var{file} might contain a package definition like this
4071(@pxref{Defining Packages}):
4072
4073@example
4074@verbatiminclude package-hello.scm
4075@end example
4076
c78bd12b
LC
4077@item --expression=@var{expr}
4078@itemx -e @var{expr}
ac5de156 4079Build the package or derivation @var{expr} evaluates to.
c78bd12b 4080
5401dd75 4081For example, @var{expr} may be @code{(@@ (gnu packages guile)
c78bd12b
LC
4082guile-1.8)}, which unambiguously designates this specific variant of
4083version 1.8 of Guile.
4084
f97c9175 4085Alternatively, @var{expr} may be a G-expression, in which case it is used
56b82106
LC
4086as a build program passed to @code{gexp->derivation}
4087(@pxref{G-Expressions}).
4088
4089Lastly, @var{expr} may refer to a zero-argument monadic procedure
ac5de156
LC
4090(@pxref{The Store Monad}). The procedure must return a derivation as a
4091monadic value, which is then passed through @code{run-with-store}.
4092
c78bd12b
LC
4093@item --source
4094@itemx -S
f97c9175 4095Build the source derivations of the packages, rather than the packages
c78bd12b
LC
4096themselves.
4097
e49951eb 4098For instance, @code{guix build -S gcc} returns something like
f97c9175
AE
4099@file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, which is the GCC
4100source tarball.
c78bd12b 4101
f9cc8971 4102The returned source tarball is the result of applying any patches and
f97c9175 4103code snippets specified in the package @code{origin} (@pxref{Defining
f9cc8971
LC
4104Packages}).
4105
2cdfe13d
EB
4106@item --sources
4107Fetch and return the source of @var{package-or-derivation} and all their
4108dependencies, recursively. This is a handy way to obtain a local copy
4109of all the source code needed to build @var{packages}, allowing you to
4110eventually build them even without network access. It is an extension
4111of the @code{--source} option and can accept one of the following
4112optional argument values:
4113
4114@table @code
4115@item package
4116This value causes the @code{--sources} option to behave in the same way
4117as the @code{--source} option.
4118
4119@item all
f97c9175
AE
4120Build the source derivations of all packages, including any source that
4121might be listed as @code{inputs}. This is the default value.
2cdfe13d
EB
4122
4123@example
4124$ guix build --sources tzdata
4125The following derivations will be built:
4126 /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
4127 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
4128@end example
4129
4130@item transitive
f97c9175
AE
4131Build the source derivations of all packages, as well of all transitive
4132inputs to the packages. This can be used e.g. to
2cdfe13d
EB
4133prefetch package source for later offline building.
4134
4135@example
4136$ guix build --sources=transitive tzdata
4137The following derivations will be built:
4138 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
4139 /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
4140 /gnu/store/@dots{}-grep-2.21.tar.xz.drv
4141 /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
4142 /gnu/store/@dots{}-make-4.1.tar.xz.drv
4143 /gnu/store/@dots{}-bash-4.3.tar.xz.drv
4144@dots{}
4145@end example
4146
4147@end table
4148
c78bd12b
LC
4149@item --system=@var{system}
4150@itemx -s @var{system}
4151Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
f97c9175 4152the system type of the build host.
c78bd12b
LC
4153
4154An example use of this is on Linux-based systems, which can emulate
4155different personalities. For instance, passing
4156@code{--system=i686-linux} on an @code{x86_64-linux} system allows users
4157to build packages in a complete 32-bit environment.
4158
e55ec43d
LC
4159@item --target=@var{triplet}
4160@cindex cross-compilation
4161Cross-build for @var{triplet}, which must be a valid GNU triplet, such
4162as @code{"mips64el-linux-gnu"} (@pxref{Configuration Names, GNU
4163configuration triplets,, configure, GNU Configure and Build System}).
4164
a8d65643
LC
4165@anchor{build-check}
4166@item --check
4167@cindex determinism, checking
4168@cindex reproducibility, checking
4169Rebuild @var{package-or-derivation}, which are already available in the
4170store, and raise an error if the build results are not bit-for-bit
4171identical.
4172
f97c9175
AE
4173This mechanism allows you to check whether previously installed
4174substitutes are genuine (@pxref{Substitutes}), or whether the build result
4175of a package is deterministic. @xref{Invoking guix challenge}, for more
a8d65643
LC
4176background information and tools.
4177
05962f29
LC
4178@item --no-grafts
4179Do not ``graft'' packages. In practice, this means that package updates
4180available as grafts are not applied. @xref{Security Updates}, for more
4181information on grafts.
7f3673f2 4182
c78bd12b
LC
4183@item --derivations
4184@itemx -d
4185Return the derivation paths, not the output paths, of the given
4186packages.
4187
70ee5642
LC
4188@item --root=@var{file}
4189@itemx -r @var{file}
4190Make @var{file} a symlink to the result, and register it as a garbage
4191collector root.
4192
4193@item --log-file
3f208ad7 4194Return the build log file names or URLs for the given
f97c9175 4195@var{package-or-derivation}, or raise an error if build logs are
70ee5642
LC
4196missing.
4197
4198This works regardless of how packages or derivations are specified. For
4199instance, the following invocations are equivalent:
4200
4201@example
4202guix build --log-file `guix build -d guile`
4203guix build --log-file `guix build guile`
4204guix build --log-file guile
4205guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
4206@end example
4207
3f208ad7
LC
4208If a log is unavailable locally, and unless @code{--no-substitutes} is
4209passed, the command looks for a corresponding log on one of the
4210substitute servers (as specified with @code{--substitute-urls}.)
70ee5642 4211
f97c9175
AE
4212So for instance, imagine you want to see the build log of GDB on MIPS,
4213but you are actually on an @code{x86_64} machine:
3f208ad7
LC
4214
4215@example
4216$ guix build --log-file gdb -s mips64el-linux
4217http://hydra.gnu.org/log/@dots{}-gdb-7.10
4218@end example
4219
4220You can freely access a huge library of build logs!
70ee5642
LC
4221@end table
4222
16eb115e 4223
39bee8a2
LC
4224@node Invoking guix edit
4225@section Invoking @command{guix edit}
4226
4227@cindex package definition, editing
4228So many packages, so many source files! The @command{guix edit} command
4229facilitates the life of packagers by pointing their editor at the source
4230file containing the definition of the specified packages. For instance:
4231
4232@example
4233guix edit gcc-4.8 vim
4234@end example
4235
4236@noindent
6237b9fa
LC
4237launches the program specified in the @code{VISUAL} or in the
4238@code{EDITOR} environment variable to edit the recipe of GCC@tie{}4.8.4
4239and that of Vim.
39bee8a2 4240
f97c9175 4241If you are using Emacs, note that the Emacs user interface provides the
7c1b1ae2 4242@kbd{M-x guix-edit} command and a similar functionality in the ``package
f97c9175 4243info'' and ``package list'' buffers created by the @kbd{M-x
7c1b1ae2 4244guix-search-by-name} and similar commands (@pxref{Emacs Commands}).
39bee8a2
LC
4245
4246
210cc920
LC
4247@node Invoking guix download
4248@section Invoking @command{guix download}
4249
4250When writing a package definition, developers typically need to download
f97c9175 4251a source tarball, compute its SHA256 hash, and write that
210cc920
LC
4252hash in the package definition (@pxref{Defining Packages}). The
4253@command{guix download} tool helps with this task: it downloads a file
4254from the given URI, adds it to the store, and prints both its file name
4255in the store and its SHA256 hash.
4256
4257The fact that the downloaded file is added to the store saves bandwidth:
4258when the developer eventually tries to build the newly defined package
4259with @command{guix build}, the source tarball will not have to be
4260downloaded again because it is already in the store. It is also a
4261convenient way to temporarily stash files, which may be deleted
4262eventually (@pxref{Invoking guix gc}).
4263
4264The @command{guix download} command supports the same URIs as used in
4265package definitions. In particular, it supports @code{mirror://} URIs.
4266@code{https} URIs (HTTP over TLS) are supported @emph{provided} the
4267Guile bindings for GnuTLS are available in the user's environment; when
537c8bb3
LC
4268they are not available, an error is raised. @xref{Guile Preparations,
4269how to install the GnuTLS bindings for Guile,, gnutls-guile,
4270GnuTLS-Guile}, for more information.
210cc920
LC
4271
4272The following option is available:
4273
4274@table @code
4275@item --format=@var{fmt}
4276@itemx -f @var{fmt}
4277Write the hash in the format specified by @var{fmt}. For more
081145cf 4278information on the valid values for @var{fmt}, @pxref{Invoking guix hash}.
210cc920
LC
4279@end table
4280
6c365eca
NK
4281@node Invoking guix hash
4282@section Invoking @command{guix hash}
4283
210cc920 4284The @command{guix hash} command computes the SHA256 hash of a file.
6c365eca
NK
4285It is primarily a convenience tool for anyone contributing to the
4286distribution: it computes the cryptographic hash of a file, which can be
4287used in the definition of a package (@pxref{Defining Packages}).
4288
4289The general syntax is:
4290
4291@example
4292guix hash @var{option} @var{file}
4293@end example
4294
4295@command{guix hash} has the following option:
4296
4297@table @code
4298
4299@item --format=@var{fmt}
4300@itemx -f @var{fmt}
210cc920 4301Write the hash in the format specified by @var{fmt}.
6c365eca
NK
4302
4303Supported formats: @code{nix-base32}, @code{base32}, @code{base16}
4304(@code{hex} and @code{hexadecimal} can be used as well).
4305
4306If the @option{--format} option is not specified, @command{guix hash}
4307will output the hash in @code{nix-base32}. This representation is used
4308in the definitions of packages.
4309
3140f2df
LC
4310@item --recursive
4311@itemx -r
4312Compute the hash on @var{file} recursively.
4313
4314In this case, the hash is computed on an archive containing @var{file},
f97c9175
AE
4315including its children if it is a directory. Some of the metadata of
4316@var{file} is part of the archive; for instance, when @var{file} is a
3140f2df 4317regular file, the hash is different depending on whether @var{file} is
f97c9175 4318executable or not. Metadata such as time stamps has no impact on the
3140f2df
LC
4319hash (@pxref{Invoking guix archive}).
4320@c FIXME: Replace xref above with xref to an ``Archive'' section when
4321@c it exists.
4322
6c365eca
NK
4323@end table
4324
2f7d2d91
LC
4325@node Invoking guix import
4326@section Invoking @command{guix import}
4327
4328@cindex importing packages
4329@cindex package import
4330@cindex package conversion
f97c9175
AE
4331The @command{guix import} command is useful for people who would like to
4332add a package to the distribution with as little work as
4333possible---a legitimate demand. The command knows of a few
4334repositories from which it can ``import'' package metadata. The result
2f7d2d91
LC
4335is a package definition, or a template thereof, in the format we know
4336(@pxref{Defining Packages}).
4337
4338The general syntax is:
4339
4340@example
4341guix import @var{importer} @var{options}@dots{}
4342@end example
4343
4344@var{importer} specifies the source from which to import package
f97c9175 4345metadata, and @var{options} specifies a package identifier and other
2f7d2d91
LC
4346options specific to @var{importer}. Currently, the available
4347``importers'' are:
4348
4349@table @code
4350@item gnu
f97c9175 4351Import metadata for the given GNU package. This provides a template
2f7d2d91
LC
4352for the latest version of that GNU package, including the hash of its
4353source tarball, and its canonical synopsis and description.
4354
f97c9175 4355Additional information such as the package dependencies and its
2f7d2d91
LC
4356license needs to be figured out manually.
4357
4358For example, the following command returns a package definition for
4359GNU@tie{}Hello:
4360
4361@example
4362guix import gnu hello
4363@end example
4364
4365Specific command-line options are:
4366
4367@table @code
4368@item --key-download=@var{policy}
4369As for @code{guix refresh}, specify the policy to handle missing OpenPGP
f97c9175 4370keys when verifying the package signature. @xref{Invoking guix
2f7d2d91
LC
4371refresh, @code{--key-download}}.
4372@end table
4373
4374@item pypi
4375@cindex pypi
f97c9175 4376Import metadata from the @uref{https://pypi.python.org/, Python Package
2f7d2d91
LC
4377Index}@footnote{This functionality requires Guile-JSON to be installed.
4378@xref{Requirements}.}. Information is taken from the JSON-formatted
4379description available at @code{pypi.python.org} and usually includes all
4380the relevant information, including package dependencies.
4381
f97c9175 4382The command below imports metadata for the @code{itsdangerous} Python
2f7d2d91
LC
4383package:
4384
4385@example
4386guix import pypi itsdangerous
4387@end example
4388
3aae8145
DT
4389@item gem
4390@cindex gem
f97c9175 4391Import metadata from @uref{https://rubygems.org/,
3aae8145
DT
4392RubyGems}@footnote{This functionality requires Guile-JSON to be
4393installed. @xref{Requirements}.}. Information is taken from the
4394JSON-formatted description available at @code{rubygems.org} and includes
4395most relevant information, including runtime dependencies. There are
f97c9175 4396some caveats, however. The metadata doesn't distinguish between
3aae8145
DT
4397synopses and descriptions, so the same string is used for both fields.
4398Additionally, the details of non-Ruby dependencies required to build
4399native extensions is unavailable and left as an exercise to the
4400packager.
4401
f97c9175 4402The command below imports metadata for the @code{rails} Ruby package:
3aae8145
DT
4403
4404@example
4405guix import gem rails
4406@end example
4407
d45dc6da
EB
4408@item cpan
4409@cindex CPAN
3c192e4e
AE
4410Import metadata from @uref{https://www.metacpan.org/, MetaCPAN}@footnote{This
4411functionality requires Guile-JSON to be installed.
4412@xref{Requirements}.}.
f97c9175 4413Information is taken from the JSON-formatted metadata provided through
d45dc6da 4414@uref{https://api.metacpan.org/, MetaCPAN's API} and includes most
66392e47
EB
4415relevant information, such as module dependencies. License information
4416should be checked closely. If Perl is available in the store, then the
4417@code{corelist} utility will be used to filter core modules out of the
4418list of dependencies.
d45dc6da 4419
f97c9175 4420The command command below imports metadata for the @code{Acme::Boolean}
d45dc6da
EB
4421Perl module:
4422
4423@example
4424guix import cpan Acme::Boolean
4425@end example
4426
e1248602
RW
4427@item cran
4428@cindex CRAN
d0bd632f 4429@cindex Bioconductor
f97c9175 4430Import metadata from @uref{http://cran.r-project.org/, CRAN}, the
e1248602
RW
4431central repository for the @uref{http://r-project.org, GNU@tie{}R
4432statistical and graphical environment}.
4433
f97c9175 4434Information is extracted from the @code{DESCRIPTION} file of the package.
e1248602 4435
f97c9175 4436The command command below imports metadata for the @code{Cairo}
e1248602
RW
4437R package:
4438
4439@example
4440guix import cran Cairo
4441@end example
4442
f97c9175 4443When @code{--archive=bioconductor} is added, metadata is imported from
d0bd632f
RW
4444@uref{http://www.bioconductor.org/, Bioconductor}, a repository of R
4445packages for for the analysis and comprehension of high-throughput
4446genomic data in bioinformatics.
4447
f97c9175 4448Information is extracted from the @code{DESCRIPTION} file of a package
d0bd632f
RW
4449published on the web interface of the Bioconductor SVN repository.
4450
f97c9175 4451The command below imports metadata for the @code{GenomicRanges}
d0bd632f
RW
4452R package:
4453
4454@example
4455guix import cran --archive=bioconductor GenomicRanges
4456@end example
4457
2f7d2d91 4458@item nix
f97c9175 4459Import metadata from a local copy of the source of the
2f7d2d91
LC
4460@uref{http://nixos.org/nixpkgs/, Nixpkgs distribution}@footnote{This
4461relies on the @command{nix-instantiate} command of
4462@uref{http://nixos.org/nix/, Nix}.}. Package definitions in Nixpkgs are
4463typically written in a mixture of Nix-language and Bash code. This
4464command only imports the high-level package structure that is written in
4465the Nix language. It normally includes all the basic fields of a
4466package definition.
4467
4468When importing a GNU package, the synopsis and descriptions are replaced
4469by their canonical upstream variant.
4470
961d0d2d
LC
4471Usually, you will first need to do:
4472
4473@example
4474export NIX_REMOTE=daemon
4475@end example
4476
4477@noindent
4478so that @command{nix-instantiate} does not try to open the Nix database.
4479
2f7d2d91
LC
4480As an example, the command below imports the package definition of
4481LibreOffice (more precisely, it imports the definition of the package
4482bound to the @code{libreoffice} top-level attribute):
4483
4484@example
4485guix import nix ~/path/to/nixpkgs libreoffice
4486@end example
863af4e1
FB
4487
4488@item hackage
4489@cindex hackage
f97c9175 4490Import metadata from the Haskell community's central package archive
863af4e1
FB
4491@uref{https://hackage.haskell.org/, Hackage}. Information is taken from
4492Cabal files and includes all the relevant information, including package
4493dependencies.
4494
4495Specific command-line options are:
4496
4497@table @code
a4154748
FB
4498@item --stdin
4499@itemx -s
f97c9175 4500Read a Cabal file from standard input.
863af4e1
FB
4501@item --no-test-dependencies
4502@itemx -t
f97c9175 4503Do not include dependencies required only by the test suites.
a4154748
FB
4504@item --cabal-environment=@var{alist}
4505@itemx -e @var{alist}
4506@var{alist} is a Scheme alist defining the environment in which the
4507Cabal conditionals are evaluated. The accepted keys are: @code{os},
4508@code{arch}, @code{impl} and a string representing the name of a flag.
4509The value associated with a flag has to be either the symbol
4510@code{true} or @code{false}. The value associated with other keys
4511has to conform to the Cabal file format definition. The default value
4512associated with the keys @code{os}, @code{arch} and @code{impl} is
f97c9175 4513@samp{linux}, @samp{x86_64} and @samp{ghc}, respectively.
863af4e1
FB
4514@end table
4515
f97c9175 4516The command below imports metadata for the latest version of the
a4154748
FB
4517@code{HTTP} Haskell package without including test dependencies and
4518specifying the value of the flag @samp{network-uri} as @code{false}:
863af4e1
FB
4519
4520@example
a4154748 4521guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
863af4e1
FB
4522@end example
4523
4524A specific package version may optionally be specified by following the
4525package name by a hyphen and a version number as in the following example:
4526
4527@example
4528guix import hackage mtl-2.1.3.1
4529@end example
7f74a931
FB
4530
4531@item elpa
4532@cindex elpa
f97c9175 4533Import metadata from an Emacs Lisp Package Archive (ELPA) package
7f74a931
FB
4534repository (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
4535
4536Specific command-line options are:
4537
4538@table @code
4539@item --archive=@var{repo}
4540@itemx -a @var{repo}
4541@var{repo} identifies the archive repository from which to retrieve the
4542information. Currently the supported repositories and their identifiers
4543are:
4544@itemize -
4545@item
840bd1d3 4546@uref{http://elpa.gnu.org/packages, GNU}, selected by the @code{gnu}
7f74a931
FB
4547identifier. This is the default.
4548
4549@item
840bd1d3 4550@uref{http://stable.melpa.org/packages, MELPA-Stable}, selected by the
7f74a931
FB
4551@code{melpa-stable} identifier.
4552
4553@item
840bd1d3 4554@uref{http://melpa.org/packages, MELPA}, selected by the @code{melpa}
7f74a931
FB
4555identifier.
4556@end itemize
4557@end table
2f7d2d91
LC
4558@end table
4559
4560The structure of the @command{guix import} code is modular. It would be
4561useful to have more importers for other package formats, and your help
4562is welcome here (@pxref{Contributing}).
4563
37166310
LC
4564@node Invoking guix refresh
4565@section Invoking @command{guix refresh}
4566
4567The primary audience of the @command{guix refresh} command is developers
4568of the GNU software distribution. By default, it reports any packages
4569provided by the distribution that are outdated compared to the latest
4570upstream version, like this:
4571
4572@example
4573$ guix refresh
4574gnu/packages/gettext.scm:29:13: gettext would be upgraded from 0.18.1.1 to 0.18.2.1
4575gnu/packages/glib.scm:77:12: glib would be upgraded from 2.34.3 to 2.37.0
4576@end example
4577
f97c9175
AE
4578It does so by browsing the FTP directory of each package and determining
4579the highest version number of the source tarballs therein. The command
bcb571cb
LC
4580knows how to update specific types of packages: GNU packages, ELPA
4581packages, etc.---see the documentation for @option{--type} below. The
4582are many packages, though, for which it lacks a method to determine
4583whether a new upstream release is available. However, the mechanism is
4584extensible, so feel free to get in touch with us to add a new method!
37166310
LC
4585
4586When passed @code{--update}, it modifies distribution source files to
f97c9175 4587update the version numbers and source tarball hashes of those package
37166310
LC
4588recipes (@pxref{Defining Packages}). This is achieved by downloading
4589each package's latest source tarball and its associated OpenPGP
4590signature, authenticating the downloaded tarball against its signature
4591using @command{gpg}, and finally computing its hash. When the public
4592key used to sign the tarball is missing from the user's keyring, an
4593attempt is made to automatically retrieve it from a public key server;
f97c9175 4594when this is successful, the key is added to the user's keyring; otherwise,
37166310
LC
4595@command{guix refresh} reports an error.
4596
4597The following options are supported:
4598
4599@table @code
4600
2d7fc7da
LC
4601@item --expression=@var{expr}
4602@itemx -e @var{expr}
4603Consider the package @var{expr} evaluates to.
4604
4605This is useful to precisely refer to a package, as in this example:
4606
4607@example
4608guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
4609@end example
4610
4611This command lists the dependents of the ``final'' libc (essentially all
4612the packages.)
4613
37166310
LC
4614@item --update
4615@itemx -u
38e16b49
LC
4616Update distribution source files (package recipes) in place. This is
4617usually run from a checkout of the Guix source tree (@pxref{Running
4618Guix Before It Is Installed}):
4619
4620@example
4621$ ./pre-inst-env guix refresh -s non-core
4622@end example
4623
081145cf 4624@xref{Defining Packages}, for more information on package definitions.
37166310
LC
4625
4626@item --select=[@var{subset}]
4627@itemx -s @var{subset}
4628Select all the packages in @var{subset}, one of @code{core} or
4629@code{non-core}.
4630
4631The @code{core} subset refers to all the packages at the core of the
4632distribution---i.e., packages that are used to build ``everything
4633else''. This includes GCC, libc, Binutils, Bash, etc. Usually,
4634changing one of these packages in the distribution entails a rebuild of
4635all the others. Thus, such updates are an inconvenience to users in
4636terms of build time or bandwidth used to achieve the upgrade.
4637
4638The @code{non-core} subset refers to the remaining packages. It is
4639typically useful in cases where an update of the core packages would be
4640inconvenient.
4641
bcb571cb
LC
4642@item --type=@var{updater}
4643@itemx -t @var{updater}
7191adc5
AK
4644Select only packages handled by @var{updater} (may be a comma-separated
4645list of updaters). Currently, @var{updater} may be one of:
bcb571cb
LC
4646
4647@table @code
4648@item gnu
4649the updater for GNU packages;
e80c0f85
LC
4650@item gnome
4651the updater for GNOME packages;
62061d6b
AW
4652@item xorg
4653the updater for X.org packages;
bcb571cb 4654@item elpa
d882c235
LC
4655the updater for @uref{http://elpa.gnu.org/, ELPA} packages;
4656@item cran
b9d044ef 4657the updater for @uref{http://cran.r-project.org/, CRAN} packages;
d0bd632f
RW
4658@item bioconductor
4659the updater for @uref{http://www.bioconductor.org/, Bioconductor} R packages;
bab020d7 4660@item pypi
b9d044ef 4661the updater for @uref{https://pypi.python.org, PyPI} packages.
fbc5b815
BW
4662@item gem
4663the updater for @uref{https://rubygems.org, RubyGems} packages.
917a2a58
BW
4664@item github
4665the updater for @uref{https://github.com, GitHub} packages.
bcb571cb
LC
4666@end table
4667
f97c9175
AE
4668For instance, the following command only checks for updates of Emacs
4669packages hosted at @code{elpa.gnu.org} and for updates of CRAN packages:
bcb571cb
LC
4670
4671@example
7191adc5 4672$ guix refresh --type=elpa,cran
d882c235 4673gnu/packages/statistics.scm:819:13: r-testthat would be upgraded from 0.10.0 to 0.11.0
bcb571cb
LC
4674gnu/packages/emacs.scm:856:13: emacs-auctex would be upgraded from 11.88.6 to 11.88.9
4675@end example
4676
37166310
LC
4677@end table
4678
4679In addition, @command{guix refresh} can be passed one or more package
4680names, as in this example:
4681
4682@example
38e16b49 4683$ ./pre-inst-env guix refresh -u emacs idutils gcc-4.8.4
37166310
LC
4684@end example
4685
4686@noindent
4687The command above specifically updates the @code{emacs} and
4688@code{idutils} packages. The @code{--select} option would have no
4689effect in this case.
4690
7d193ec3
EB
4691When considering whether to upgrade a package, it is sometimes
4692convenient to know which packages would be affected by the upgrade and
4693should be checked for compatibility. For this the following option may
4694be used when passing @command{guix refresh} one or more package names:
4695
4696@table @code
4697
6ffa706b
AK
4698@item --list-updaters
4699@itemx -L
4700List available updaters and exit (see @option{--type} above.)
4701
7d193ec3
EB
4702@item --list-dependent
4703@itemx -l
4704List top-level dependent packages that would need to be rebuilt as a
4705result of upgrading one or more packages.
4706
4707@end table
4708
4709Be aware that the @code{--list-dependent} option only
4710@emph{approximates} the rebuilds that would be required as a result of
4711an upgrade. More rebuilds might be required under some circumstances.
4712
4713@example
7779ab61
LC
4714$ guix refresh --list-dependent flex
4715Building the following 120 packages would ensure 213 dependent packages are rebuilt:
4716hop-2.4.0 geiser-0.4 notmuch-0.18 mu-0.9.9.5 cflow-1.4 idutils-4.6 @dots{}
7d193ec3
EB
4717@end example
4718
4719The command above lists a set of packages that could be built to check
4720for compatibility with an upgraded @code{flex} package.
4721
f9230085
LC
4722The following options can be used to customize GnuPG operation:
4723
4724@table @code
4725
f9230085
LC
4726@item --gpg=@var{command}
4727Use @var{command} as the GnuPG 2.x command. @var{command} is searched
4728for in @code{$PATH}.
4729
2bc53ba9
LC
4730@item --key-download=@var{policy}
4731Handle missing OpenPGP keys according to @var{policy}, which may be one
4732of:
4733
4734@table @code
4735@item always
4736Always download missing OpenPGP keys from the key server, and add them
4737to the user's GnuPG keyring.
4738
4739@item never
4740Never try to download missing OpenPGP keys. Instead just bail out.
4741
4742@item interactive
4743When a package signed with an unknown OpenPGP key is encountered, ask
4744the user whether to download it or not. This is the default behavior.
4745@end table
4746
4747@item --key-server=@var{host}
4748Use @var{host} as the OpenPGP key server when importing a public key.
4749
f9230085
LC
4750@end table
4751
917a2a58
BW
4752The @code{github} updater uses the
4753@uref{https://developer.github.com/v3/, GitHub API} to query for new
4754releases. When used repeatedly e.g. when refreshing all packages,
4755GitHub will eventually refuse to answer any further API requests. By
4756default 60 API requests per hour are allowed, and a full refresh on all
4757GitHub packages in Guix requires more than this. Authentication with
4758GitHub through the use of an API token alleviates these limits. To use
4759an API token, set the environment variable @code{GUIX_GITHUB_TOKEN} to a
4760token procured from @uref{https://github.com/settings/tokens} or
4761otherwise.
4762
4763
b4f5e0e8
CR
4764@node Invoking guix lint
4765@section Invoking @command{guix lint}
f97c9175
AE
4766The @command{guix lint} command is meant to help package developers avoid
4767common errors and use a consistent style. It runs a number of checks on
4768a given set of packages in order to find common mistakes in their
873c4085
LC
4769definitions. Available @dfn{checkers} include (see
4770@code{--list-checkers} for a complete list):
4771
4772@table @code
4773@item synopsis
4774@itemx description
4775Validate certain typographical and stylistic rules about package
4776descriptions and synopses.
4777
4778@item inputs-should-be-native
4779Identify inputs that should most likely be native inputs.
4780
4781@item source
4782@itemx home-page
50f5c46d 4783@itemx source-file-name
873c4085 4784Probe @code{home-page} and @code{source} URLs and report those that are
50f5c46d 4785invalid. Check that the source file name is meaningful, e.g. is not
f97c9175
AE
4786just a version number or ``git-checkout'', without a declared
4787@code{file-name} (@pxref{origin Reference}).
40a7d4e5 4788
5432734b
LC
4789@item cve
4790Report known vulnerabilities found in the Common Vulnerabilities and
4791Exposures (CVE) database
4792@uref{https://nvd.nist.gov/download.cfm#CVE_FEED, published by the US
4793NIST}.
4794
40a7d4e5
LC
4795@item formatting
4796Warn about obvious source code formatting issues: trailing white space,
4797use of tabulations, etc.
873c4085 4798@end table
b4f5e0e8
CR
4799
4800The general syntax is:
4801
4802@example
4803guix lint @var{options} @var{package}@dots{}
4804@end example
4805
4806If no package is given on the command line, then all packages are checked.
4807The @var{options} may be zero or more of the following:
4808
4809@table @code
f97c9175
AE
4810@item --list-checkers
4811@itemx -l
4812List and describe all the available checkers that will be run on packages
4813and exit.
b4f5e0e8 4814
dd7c013d
CR
4815@item --checkers
4816@itemx -c
4817Only enable the checkers specified in a comma-separated list using the
4818names returned by @code{--list-checkers}.
4819
b4f5e0e8 4820@end table
37166310 4821
fcc58db6
LC
4822@node Invoking guix size
4823@section Invoking @command{guix size}
4824
4825The @command{guix size} command helps package developers profile the
4826disk usage of packages. It is easy to overlook the impact of an
4827additional dependency added to a package, or the impact of using a
4828single output for a package that could easily be split (@pxref{Packages
f97c9175 4829with Multiple Outputs}). Such are the typical issues that
fcc58db6
LC
4830@command{guix size} can highlight.
4831
4832The command can be passed a package specification such as @code{gcc-4.8}
4833or @code{guile:debug}, or a file name in the store. Consider this
4834example:
4835
4836@example
4837$ guix size coreutils
4838store item total self
4839/gnu/store/@dots{}-coreutils-8.23 70.0 13.9 19.8%
4840/gnu/store/@dots{}-gmp-6.0.0a 55.3 2.5 3.6%
4841/gnu/store/@dots{}-acl-2.2.52 53.7 0.5 0.7%
4842/gnu/store/@dots{}-attr-2.4.46 53.2 0.3 0.5%
4843/gnu/store/@dots{}-gcc-4.8.4-lib 52.9 15.7 22.4%
4844/gnu/store/@dots{}-glibc-2.21 37.2 37.2 53.1%
4845@end example
4846
4847@cindex closure
4848The store items listed here constitute the @dfn{transitive closure} of
4849Coreutils---i.e., Coreutils and all its dependencies, recursively---as
4850would be returned by:
4851
4852@example
4853$ guix gc -R /gnu/store/@dots{}-coreutils-8.23
4854@end example
4855
f97c9175 4856Here the output shows three columns next to store items. The first column,
fcc58db6
LC
4857labeled ``total'', shows the size in mebibytes (MiB) of the closure of
4858the store item---that is, its own size plus the size of all its
4859dependencies. The next column, labeled ``self'', shows the size of the
f97c9175
AE
4860item itself. The last column shows the ratio of the size of the item
4861itself to the space occupied by all the items listed here.
fcc58db6
LC
4862
4863In this example, we see that the closure of Coreutils weighs in at
486470@tie{}MiB, half of which is taken by libc. (That libc represents a
4865large fraction of the closure is not a problem @i{per se} because it is
4866always available on the system anyway.)
4867
4868When the package passed to @command{guix size} is available in the
4869store, @command{guix size} queries the daemon to determine its
4870dependencies, and measures its size in the store, similar to @command{du
4871-ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
4872Coreutils}).
4873
4874When the given package is @emph{not} in the store, @command{guix size}
f97c9175
AE
4875reports information based on the available substitutes
4876(@pxref{Substitutes}). This makes it possible it to profile disk usage of
4877store items that are not even on disk, only available remotely.
fcc58db6 4878
a8f996c6 4879The available options are:
fcc58db6
LC
4880
4881@table @option
4882
d490d06e
LC
4883@item --substitute-urls=@var{urls}
4884Use substitute information from @var{urls}.
4885@xref{client-substitute-urls, the same option for @code{guix build}}.
4886
a8f996c6 4887@item --map-file=@var{file}
f97c9175 4888Write a graphical map of disk usage in PNG format to @var{file}.
a8f996c6
LC
4889
4890For the example above, the map looks like this:
4891
4892@image{images/coreutils-size-map,5in,, map of Coreutils disk usage
4893produced by @command{guix size}}
4894
4895This option requires that
4896@uref{http://wingolog.org/software/guile-charting/, Guile-Charting} be
4897installed and visible in Guile's module search path. When that is not
4898the case, @command{guix size} fails as it tries to load it.
4899
fcc58db6
LC
4900@item --system=@var{system}
4901@itemx -s @var{system}
4902Consider packages for @var{system}---e.g., @code{x86_64-linux}.
4903
4904@end table
4905
88856916
LC
4906@node Invoking guix graph
4907@section Invoking @command{guix graph}
4908
4909@cindex DAG
4910Packages and their dependencies form a @dfn{graph}, specifically a
4911directed acyclic graph (DAG). It can quickly become difficult to have a
f97c9175
AE
4912mental model of the package DAG, so the @command{guix graph} command
4913provides a visual representation of the DAG. @command{guix graph}
4914emits a DAG representation in the input format of
88856916 4915@uref{http://www.graphviz.org/, Graphviz}, so its output can be passed
f97c9175 4916directly to the @command{dot} command of Graphviz. The general
88856916
LC
4917syntax is:
4918
4919@example
4920guix graph @var{options} @var{package}@dots{}
4921@end example
4922
4923For example, the following command generates a PDF file representing the
4924package DAG for the GNU@tie{}Core Utilities, showing its build-time
4925dependencies:
4926
4927@example
4928guix graph coreutils | dot -Tpdf > dag.pdf
4929@end example
4930
4931The output looks like this:
4932
4933@image{images/coreutils-graph,2in,,Dependency graph of the GNU Coreutils}
4934
4935Nice little graph, no?
4936
f97c9175 4937But there is more than one graph! The one above is concise: it is the
88856916 4938graph of package objects, omitting implicit inputs such as GCC, libc,
f97c9175
AE
4939grep, etc. It is often useful to have such a concise graph, but
4940sometimes one may want to see more details. @command{guix graph} supports
4941several types of graphs, allowing you to choose the level of detail:
88856916
LC
4942
4943@table @code
4944@item package
f97c9175 4945This is the default type used in the example above. It shows the DAG of
88856916
LC
4946package objects, excluding implicit dependencies. It is concise, but
4947filters out many details.
4948
4949@item bag-emerged
4950This is the package DAG, @emph{including} implicit inputs.
4951
4952For instance, the following command:
4953
4954@example
4955guix graph --type=bag-emerged coreutils | dot -Tpdf > dag.pdf
4956@end example
4957
4958... yields this bigger graph:
4959
4960@image{images/coreutils-bag-graph,,5in,Detailed dependency graph of the GNU Coreutils}
4961
4962At the bottom of the graph, we see all the implicit inputs of
4963@var{gnu-build-system} (@pxref{Build Systems, @code{gnu-build-system}}).
4964
f97c9175 4965Now, note that the dependencies of these implicit inputs---that is, the
88856916
LC
4966@dfn{bootstrap dependencies} (@pxref{Bootstrapping})---are not shown
4967here, for conciseness.
4968
4969@item bag
4970Similar to @code{bag-emerged}, but this time including all the bootstrap
4971dependencies.
4972
38b92daa
LC
4973@item bag-with-origins
4974Similar to @code{bag}, but also showing origins and their dependencies.
4975
88856916
LC
4976@item derivations
4977This is the most detailed representation: It shows the DAG of
4978derivations (@pxref{Derivations}) and plain store items. Compared to
4979the above representation, many additional nodes are visible, including
f97c9175 4980build scripts, patches, Guile modules, etc.
88856916
LC
4981
4982@end table
4983
f97c9175 4984All the types above correspond to @emph{build-time dependencies}. The
88856916
LC
4985following graph type represents the @emph{run-time dependencies}:
4986
4987@table @code
4988@item references
4989This is the graph of @dfn{references} of a package output, as returned
4990by @command{guix gc --references} (@pxref{Invoking guix gc}).
4991
4992If the given package output is not available in the store, @command{guix
4993graph} attempts to obtain dependency information from substitutes.
4994@end table
4995
4996The available options are the following:
4997
4998@table @option
4999@item --type=@var{type}
5000@itemx -t @var{type}
5001Produce a graph output of @var{type}, where @var{type} must be one of
5002the values listed above.
5003
5004@item --list-types
5005List the supported graph types.
4c8f997a
LC
5006
5007@item --expression=@var{expr}
5008@itemx -e @var{expr}
5009Consider the package @var{expr} evaluates to.
5010
5011This is useful to precisely refer to a package, as in this example:
5012
5013@example
5014guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
5015@end example
88856916
LC
5016@end table
5017
5018
372c4bbc
DT
5019@node Invoking guix environment
5020@section Invoking @command{guix environment}
5021
f5fd4fd2 5022@cindex reproducible build environments
fe36d84e 5023@cindex development environments
372c4bbc
DT
5024The purpose of @command{guix environment} is to assist hackers in
5025creating reproducible development environments without polluting their
5026package profile. The @command{guix environment} tool takes one or more
f97c9175 5027packages, builds all of their inputs, and creates a shell
372c4bbc
DT
5028environment to use them.
5029
5030The general syntax is:
5031
5032@example
5033guix environment @var{options} @var{package}@dots{}
5034@end example
5035
fe36d84e
LC
5036The following example spawns a new shell set up for the development of
5037GNU@tie{}Guile:
372c4bbc
DT
5038
5039@example
5040guix environment guile
5041@end example
5042
f97c9175
AE
5043If the needed dependencies are not built yet, @command{guix environment}
5044automatically builds them. The environment of the new shell is an augmented
372c4bbc
DT
5045version of the environment that @command{guix environment} was run in.
5046It contains the necessary search paths for building the given package
5047added to the existing environment variables. To create a ``pure''
f97c9175 5048environment, in which the original environment variables have been unset,
50500f7c
LC
5049use the @code{--pure} option@footnote{Users sometimes wrongfully augment
5050environment variables such as @code{PATH} in their @file{~/.bashrc}
5051file. As a consequence, when @code{guix environment} launches it, Bash
5052may read @file{~/.bashrc}, thereby introducing ``impurities'' in these
5053environment variables. It is an error to define such environment
5054variables in @file{.bashrc}; instead, they should be defined in
5055@file{.bash_profile}, which is sourced only by log-in shells.
5056@xref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}, for
5057details on Bash start-up files.}.
372c4bbc 5058
28de8d25
LC
5059@vindex GUIX_ENVIRONMENT
5060@command{guix environment} defines the @code{GUIX_ENVIRONMENT}
f97c9175 5061variable in the shell it spawns. This allows users to, say, define a
28de8d25
LC
5062specific prompt for development environments in their @file{.bashrc}
5063(@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}):
5064
5065@example
5066if [ -n "$GUIX_ENVIRONMENT" ]
5067then
5068 export PS1="\u@@\h \w [dev]\$ "
5069fi
5070@end example
5071
372c4bbc
DT
5072Additionally, more than one package may be specified, in which case the
5073union of the inputs for the given packages are used. For example, the
5074command below spawns a shell where all of the dependencies of both Guile
5075and Emacs are available:
5076
5077@example
5078guix environment guile emacs
5079@end example
5080
1de2fe95
DT
5081Sometimes an interactive shell session is not desired. An arbitrary
5082command may be invoked by placing the @code{--} token to separate the
5083command from the rest of the arguments:
372c4bbc
DT
5084
5085@example
1de2fe95 5086guix environment guile -- make -j4
372c4bbc
DT
5087@end example
5088
fe36d84e
LC
5089In other situations, it is more convenient to specify the list of
5090packages needed in the environment. For example, the following command
5091runs @command{python} from an environment containing Python@tie{}2.7 and
5092NumPy:
5093
5094@example
1de2fe95 5095guix environment --ad-hoc python2-numpy python-2.7 -- python
fe36d84e
LC
5096@end example
5097
cc90fbbf
DT
5098Furthermore, one might want the dependencies of a package and also some
5099additional packages that are not build-time or runtime dependencies, but
5100are useful when developing nonetheless. Because of this, the
5101@code{--ad-hoc} flag is positional. Packages appearing before
5102@code{--ad-hoc} are interpreted as packages whose dependencies will be
5103added to the environment. Packages appearing after are interpreted as
5104packages that will be added to the environment directly. For example,
5105the following command creates a Guix development environment that
5106additionally includes Git and strace:
5107
5108@example
5109guix environment guix --ad-hoc git strace
5110@end example
5111
f535dcbe
DT
5112Sometimes it is desirable to isolate the environment as much as
5113possible, for maximal purity and reproducibility. In particular, when
5114using Guix on a host distro that is not GuixSD, it is desirable to
5115prevent access to @file{/usr/bin} and other system-wide resources from
5116the development environment. For example, the following command spawns
5117a Guile REPL in a ``container'' where only the store and the current
5118working directory are mounted:
5119
5120@example
5121guix environment --ad-hoc --container guile -- guile
5122@end example
5123
0f252e26 5124@quotation Note
cfd35b4e 5125The @code{--container} option requires Linux-libre 3.19 or newer.
0f252e26
DT
5126@end quotation
5127
fe36d84e 5128The available options are summarized below.
372c4bbc
DT
5129
5130@table @code
5131@item --expression=@var{expr}
5132@itemx -e @var{expr}
c9c282ce
DT
5133Create an environment for the package or list of packages that
5134@var{expr} evaluates to.
372c4bbc 5135
fe36d84e
LC
5136For example, running:
5137
5138@example
5139guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
5140@end example
5141
5142starts a shell with the environment for this specific variant of the
5143PETSc package.
5144
c9c282ce
DT
5145Running:
5146
5147@example
5c2b2f00 5148guix environment --ad-hoc -e '(@@ (gnu) %base-packages)'
c9c282ce
DT
5149@end example
5150
5151starts a shell with all the GuixSD base packages available.
5152
779aa003
DT
5153The above commands only the use default output of the given packages.
5154To select other outputs, two element tuples can be specified:
5155
5156@example
5157guix environment --ad-hoc -e '(list (@ (gnu packages bash) bash) "include")'
5158@end example
5159
372c4bbc
DT
5160@item --load=@var{file}
5161@itemx -l @var{file}
c9c282ce
DT
5162Create an environment for the package or list of packages that the code
5163within @var{file} evaluates to.
372c4bbc 5164
fe36d84e
LC
5165As an example, @var{file} might contain a definition like this
5166(@pxref{Defining Packages}):
5167
5168@example
5169@verbatiminclude environment-gdb.scm
5170@end example
5171
a54bd6d7
DT
5172@item --ad-hoc
5173Include all specified packages in the resulting environment, as if an
5174@i{ad hoc} package were defined with them as inputs. This option is
5175useful for quickly creating an environment without having to write a
5176package expression to contain the desired inputs.
5177
5178For instance, the command:
5179
5180@example
1de2fe95 5181guix environment --ad-hoc guile guile-sdl -- guile
a54bd6d7
DT
5182@end example
5183
5184runs @command{guile} in an environment where Guile and Guile-SDL are
5185available.
5186
417c39f1 5187Note that this example implicitly asks for the default output of
f97c9175 5188@code{guile} and @code{guile-sdl}, but it is possible to ask for a
417c39f1
LC
5189specific output---e.g., @code{glib:bin} asks for the @code{bin} output
5190of @code{glib} (@pxref{Packages with Multiple Outputs}).
5191
cc90fbbf
DT
5192This option may be composed with the default behavior of @command{guix
5193environment}. Packages appearing before @code{--ad-hoc} are interpreted
5194as packages whose dependencies will be added to the environment, the
5195default behavior. Packages appearing after are interpreted as packages
5196that will be added to the environment directly.
5197
372c4bbc
DT
5198@item --pure
5199Unset existing environment variables when building the new environment.
5200This has the effect of creating an environment in which search paths
5201only contain package inputs.
5202
5203@item --search-paths
5204Display the environment variable definitions that make up the
5205environment.
ce367ef3
LC
5206
5207@item --system=@var{system}
5208@itemx -s @var{system}
5209Attempt to build for @var{system}---e.g., @code{i686-linux}.
f535dcbe
DT
5210
5211@item --container
5212@itemx -C
5213@cindex container
5214Run @var{command} within an isolated container. The current working
56b6befb 5215directory outside the container is mapped inside the
f535dcbe
DT
5216container. Additionally, the spawned process runs as the current user
5217outside the container, but has root privileges in the context of the
5218container.
5219
5220@item --network
5221@itemx -N
5222For containers, share the network namespace with the host system.
5223Containers created without this flag only have access to the loopback
5224device.
5225
5226@item --expose=@var{source}[=@var{target}]
5227For containers, expose the file system @var{source} from the host system
5228as the read-only file system @var{target} within the container. If
5229@var{target} is not specified, @var{source} is used as the target mount
5230point in the container.
5231
5232The example below spawns a Guile REPL in a container in which the user's
5233home directory is accessible read-only via the @file{/exchange}
5234directory:
5235
5236@example
5237guix environment --container --expose=$HOME=/exchange guile -- guile
5238@end example
5239
5c2b2f00 5240@item --share=@var{source}[=@var{target}]
f535dcbe
DT
5241For containers, share the file system @var{source} from the host system
5242as the writable file system @var{target} within the container. If
5243@var{target} is not specified, @var{source} is used as the target mount
5244point in the container.
5245
5246The example below spawns a Guile REPL in a container in which the user's
5247home directory is accessible for both reading and writing via the
5248@file{/exchange} directory:
5249
5250@example
5251guix environment --container --share=$HOME=/exchange guile -- guile
5252@end example
372c4bbc
DT
5253@end table
5254
5255It also supports all of the common build options that @command{guix
ccd7158d 5256build} supports (@pxref{Common Build Options}).
372c4bbc 5257
aff8ce7c
DT
5258@node Invoking guix publish
5259@section Invoking @command{guix publish}
5260
5261The purpose of @command{guix publish} is to enable users to easily share
f97c9175 5262their store with others, who can then use it as a substitute server
8ce229fc
LC
5263(@pxref{Substitutes}).
5264
5265When @command{guix publish} runs, it spawns an HTTP server which allows
5266anyone with network access to obtain substitutes from it. This means
5267that any machine running Guix can also act as if it were a build farm,
5268since the HTTP interface is compatible with Hydra, the software behind
5269the @code{hydra.gnu.org} build farm.
aff8ce7c
DT
5270
5271For security, each substitute is signed, allowing recipients to check
5272their authenticity and integrity (@pxref{Substitutes}). Because
f97c9175 5273@command{guix publish} uses the signing key of the system, which is only
5463fe51
LC
5274readable by the system administrator, it must be started as root; the
5275@code{--user} option makes it drop root privileges early on.
aff8ce7c 5276
b18812b6
LC
5277The signing key pair must be generated before @command{guix publish} is
5278launched, using @command{guix archive --generate-key} (@pxref{Invoking
5279guix archive}).
5280
aff8ce7c
DT
5281The general syntax is:
5282
5283@example
5284guix publish @var{options}@dots{}
5285@end example
5286
5287Running @command{guix publish} without any additional arguments will
5288spawn an HTTP server on port 8080:
5289
5290@example
5291guix publish
5292@end example
5293
5294Once a publishing server has been authorized (@pxref{Invoking guix
5295archive}), the daemon may download substitutes from it:
5296
5297@example
5298guix-daemon --substitute-urls=http://example.org:8080
5299@end example
5300
5301The following options are available:
5302
5303@table @code
5304@item --port=@var{port}
5305@itemx -p @var{port}
5306Listen for HTTP requests on @var{port}.
5307
9e2292ef
LC
5308@item --listen=@var{host}
5309Listen on the network interface for @var{host}. The default is to
5310accept connections from any interface.
5311
5463fe51
LC
5312@item --user=@var{user}
5313@itemx -u @var{user}
5314Change privileges to @var{user} as soon as possible---i.e., once the
5315server socket is open and the signing key has been read.
5316
aff8ce7c
DT
5317@item --repl[=@var{port}]
5318@itemx -r [@var{port}]
5319Spawn a Guile REPL server (@pxref{REPL Servers,,, guile, GNU Guile
8ce229fc
LC
5320Reference Manual}) on @var{port} (37146 by default). This is used
5321primarily for debugging a running @command{guix publish} server.
aff8ce7c
DT
5322@end table
5323
1c52181f
LC
5324Enabling @command{guix publish} on a GuixSD system is a one-liner: just
5325add a call to @code{guix-publish-service} in the @code{services} field
5326of the @code{operating-system} declaration (@pxref{guix-publish-service,
5327@code{guix-publish-service}}).
5328
d23c20f1
LC
5329
5330@node Invoking guix challenge
5331@section Invoking @command{guix challenge}
5332
5333@cindex reproducible builds
5334@cindex verifiable builds
5335
5336Do the binaries provided by this server really correspond to the source
f97c9175 5337code it claims to build? Is a package build process deterministic?
d23c20f1
LC
5338These are the questions the @command{guix challenge} command attempts to
5339answer.
5340
5341The former is obviously an important question: Before using a substitute
f97c9175 5342server (@pxref{Substitutes}), one had better @emph{verify} that it
d23c20f1
LC
5343provides the right binaries, and thus @emph{challenge} it. The latter
5344is what enables the former: If package builds are deterministic, then
5345independent builds of the package should yield the exact same result,
5346bit for bit; if a server provides a binary different from the one
5347obtained locally, it may be either corrupt or malicious.
5348
5349We know that the hash that shows up in @file{/gnu/store} file names is
5350the hash of all the inputs of the process that built the file or
5351directory---compilers, libraries, build scripts,
5352etc. (@pxref{Introduction}). Assuming deterministic build processes,
5353one store file name should map to exactly one build output.
5354@command{guix challenge} checks whether there is, indeed, a single
5355mapping by comparing the build outputs of several independent builds of
5356any given store item.
5357
f97c9175 5358The command output looks like this:
d23c20f1
LC
5359
5360@smallexample
5361$ guix challenge --substitute-urls="http://hydra.gnu.org http://guix.example.org"
5362updating list of substitutes from 'http://hydra.gnu.org'... 100.0%
5363updating list of substitutes from 'http://guix.example.org'... 100.0%
5364/gnu/store/@dots{}-openssl-1.0.2d contents differ:
5365 local hash: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
5366 http://hydra.gnu.org/nar/@dots{}-openssl-1.0.2d: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
5367 http://guix.example.org/nar/@dots{}-openssl-1.0.2d: 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim
5368/gnu/store/@dots{}-git-2.5.0 contents differ:
5369 local hash: 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha
5370 http://hydra.gnu.org/nar/@dots{}-git-2.5.0: 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f
5371 http://guix.example.org/nar/@dots{}-git-2.5.0: 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73
5372/gnu/store/@dots{}-pius-2.1.1 contents differ:
5373 local hash: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
5374 http://hydra.gnu.org/nar/@dots{}-pius-2.1.1: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
5375 http://guix.example.org/nar/@dots{}-pius-2.1.1: 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs
5376@end smallexample
5377
5378@noindent
5379In this example, @command{guix challenge} first scans the store to
5380determine the set of locally-built derivations---as opposed to store
5381items that were downloaded from a substitute server---and then queries
5382all the substitute servers. It then reports those store items for which
5383the servers obtained a result different from the local build.
5384
5385@cindex non-determinism, in package builds
5386As an example, @code{guix.example.org} always gets a different answer.
5387Conversely, @code{hydra.gnu.org} agrees with local builds, except in the
5388case of Git. This might indicate that the build process of Git is
5389non-deterministic, meaning that its output varies as a function of
5390various things that Guix does not fully control, in spite of building
5391packages in isolated environments (@pxref{Features}). Most common
5392sources of non-determinism include the addition of timestamps in build
5393results, the inclusion of random numbers, and directory listings sorted
5394by inode number. See @uref{http://reproducible.debian.net/howto/}, for
5395more information.
5396
f97c9175 5397To find out what is wrong with this Git binary, we can do something along
d23c20f1
LC
5398these lines (@pxref{Invoking guix archive}):
5399
5400@example
5401$ wget -q -O - http://hydra.gnu.org/nar/@dots{}-git-2.5.0 \
5402 | guix archive -x /tmp/git
043f4698 5403$ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git
d23c20f1
LC
5404@end example
5405
5406This command shows the difference between the files resulting from the
5407local build, and the files resulting from the build on
5408@code{hydra.gnu.org} (@pxref{Overview, Comparing and Merging Files,,
5409diffutils, Comparing and Merging Files}). The @command{diff} command
5410works great for text files. When binary files differ, a better option
5411is @uref{http://diffoscope.org/, Diffoscope}, a tool that helps
5412visualize differences for all kinds of files.
5413
f97c9175 5414Once you have done that work, you can tell whether the differences are due
d23c20f1
LC
5415to a non-deterministic build process or to a malicious server. We try
5416hard to remove sources of non-determinism in packages to make it easier
f97c9175
AE
5417to verify substitutes, but of course, this is a process that
5418involves not just Guix, but a large part of the free software community.
d23c20f1
LC
5419In the meantime, @command{guix challenge} is one tool to help address
5420the problem.
5421
5422If you are writing packages for Guix, you are encouraged to check
5423whether @code{hydra.gnu.org} and other substitute servers obtain the
5424same build result as you did with:
5425
5426@example
5427$ guix challenge @var{package}
5428@end example
5429
5430@noindent
f97c9175 5431where @var{package} is a package specification such as
d23c20f1
LC
5432@code{guile-2.0} or @code{glibc:debug}.
5433
5434The general syntax is:
5435
5436@example
5437guix challenge @var{options} [@var{packages}@dots{}]
5438@end example
5439
5440The one option that matters is:
5441
5442@table @code
5443
5444@item --substitute-urls=@var{urls}
5445Consider @var{urls} the whitespace-separated list of substitute source
5446URLs to compare to.
5447
5448@end table
5449
5450
32efa254
DT
5451@node Invoking guix container
5452@section Invoking @command{guix container}
5453@cindex container
5454
5455@quotation Note
5456As of version @value{VERSION}, this tool is experimental. The interface
5457is subject to radical change in the future.
5458@end quotation
5459
5460The purpose of @command{guix container} is to manipulate processes
5461running within an isolated environment, commonly known as a
46c36586 5462``container'', typically created by the @command{guix environment}
32efa254
DT
5463(@pxref{Invoking guix environment}) and @command{guix system container}
5464(@pxref{Invoking guix system}) commands.
5465
5466The general syntax is:
5467
5468@example
5469guix container @var{action} @var{options}@dots{}
5470@end example
5471
5472@var{action} specifies the operation to perform with a container, and
5473@var{options} specifies the context-specific arguments for the action.
5474
5475The following actions are available:
5476
5477@table @code
5478@item exec
5479Execute a command within the context of a running container.
5480
5481The syntax is:
5482
5483@example
5484guix container exec @var{pid} @var{program} @var{arguments}@dots{}
5485@end example
5486
5487@var{pid} specifies the process ID of the running container.
f97c9175
AE
5488@var{program} specifies an executable file name within the root file
5489system of the container. @var{arguments} are the additional options that
5490will be passed to @var{program}.
32efa254
DT
5491
5492The following command launches an interactive login shell inside a
5493GuixSD container, started by @command{guix system container}, and whose
5494process ID is 9001:
5495
5496@example
5497guix container exec 9001 /run/current-system/profile/bin/bash --login
5498@end example
5499
5500Note that the @var{pid} cannot be the parent process of a container. It
f97c9175 5501must be PID 1 of the container or one of its child processes.
32efa254
DT
5502
5503@end table
5504
a1ba8475
LC
5505@c *********************************************************************
5506@node GNU Distribution
5507@chapter GNU Distribution
5508
3ca2731c 5509@cindex Guix System Distribution
4705641f 5510@cindex GuixSD
3ca2731c
LC
5511Guix comes with a distribution of the GNU system consisting entirely of
5512free software@footnote{The term ``free'' here refers to the
a1ba8475 5513@url{http://www.gnu.org/philosophy/free-sw.html,freedom provided to
3ca2731c 5514users of that software}.}. The
35ed9306
LC
5515distribution can be installed on its own (@pxref{System Installation}),
5516but it is also possible to install Guix as a package manager on top of
5517an installed GNU/Linux system (@pxref{Installation}). To distinguish
3ca2731c 5518between the two, we refer to the standalone distribution as the Guix
4705641f 5519System Distribution, or GuixSD.
35ed9306
LC
5520
5521The distribution provides core GNU packages such as GNU libc, GCC, and
5522Binutils, as well as many GNU and non-GNU applications. The complete
5523list of available packages can be browsed
093ae1be 5524@url{http://www.gnu.org/software/guix/packages,on-line} or by
d03bb653 5525running @command{guix package} (@pxref{Invoking guix package}):
a1ba8475
LC
5526
5527@example
e49951eb 5528guix package --list-available
a1ba8475
LC
5529@end example
5530
f97c9175 5531Our goal is to provide a practical 100% free software distribution of
401c53c4
LC
5532Linux-based and other variants of GNU, with a focus on the promotion and
5533tight integration of GNU components, and an emphasis on programs and
5534tools that help users exert that freedom.
5535
3ca2731c 5536Packages are currently available on the following platforms:
c320011d
LC
5537
5538@table @code
5539
5540@item x86_64-linux
5541Intel/AMD @code{x86_64} architecture, Linux-Libre kernel;
5542
5543@item i686-linux
5544Intel 32-bit architecture (IA32), Linux-Libre kernel;
5545
aa1e1947 5546@item armhf-linux
aa725117 5547ARMv7-A architecture with hard float, Thumb-2 and NEON,
f97c9175
AE
5548using the EABI hard-float application binary interface (ABI),
5549and Linux-Libre kernel.
aa1e1947 5550
c320011d
LC
5551@item mips64el-linux
5552little-endian 64-bit MIPS processors, specifically the Loongson series,
f97c9175 5553n32 ABI, and Linux-Libre kernel.
c320011d
LC
5554
5555@end table
5556
4705641f 5557GuixSD itself is currently only available on @code{i686} and @code{x86_64}.
3ca2731c 5558
c320011d
LC
5559@noindent
5560For information on porting to other architectures or kernels,
f97c9175 5561@pxref{Porting}.
c320011d 5562
401c53c4 5563@menu
5af6de3e 5564* System Installation:: Installing the whole operating system.
35ed9306 5565* System Configuration:: Configuring the operating system.
91ef73d4 5566* Installing Debugging Files:: Feeding the debugger.
05962f29 5567* Security Updates:: Deploying security fixes quickly.
401c53c4 5568* Package Modules:: Packages from the programmer's viewpoint.
da7cabd4 5569* Packaging Guidelines:: Growing the distribution.
401c53c4 5570* Bootstrapping:: GNU/Linux built from scratch.
8b315a6d 5571* Porting:: Targeting another platform or kernel.
401c53c4
LC
5572@end menu
5573
5574Building this distribution is a cooperative effort, and you are invited
081145cf 5575to join! @xref{Contributing}, for information about how you can help.
401c53c4 5576
5af6de3e
LC
5577@node System Installation
5578@section System Installation
5579
3ca2731c
LC
5580@cindex Guix System Distribution
5581This section explains how to install the Guix System Distribution
5582on a machine. The Guix package manager can
35ed9306
LC
5583also be installed on top of a running GNU/Linux system,
5584@pxref{Installation}.
5af6de3e
LC
5585
5586@ifinfo
5587@c This paragraph is for people reading this from tty2 of the
5588@c installation image.
5589You're reading this documentation with an Info reader. For details on
5590how to use it, hit the @key{RET} key (``return'' or ``enter'') on the
6621cdb6 5591link that follows: @pxref{Help,,, info, Info: An Introduction}. Hit
5af6de3e
LC
5592@kbd{l} afterwards to come back here.
5593@end ifinfo
5594
dedb8d5e
LC
5595@menu
5596* Limitations:: What you can expect.
5597* USB Stick Installation:: Preparing the installation medium.
5598* Preparing for Installation:: Networking, partitioning, etc.
5599* Proceeding with the Installation:: The real thing.
5600* Building the Installation Image:: How this comes to be.
5601@end menu
5602
5603@node Limitations
8aaaae38
LC
5604@subsection Limitations
5605
4705641f 5606As of version @value{VERSION}, the Guix System Distribution (GuixSD) is
3ca2731c 5607not production-ready. It may contain bugs and lack important
8aaaae38
LC
5608features. Thus, if you are looking for a stable production system that
5609respects your freedom as a computer user, a good solution at this point
5610is to consider @url{http://www.gnu.org/distros/free-distros.html, one of
f97c9175 5611the more established GNU/Linux distributions}. We hope you can soon switch
4705641f 5612to the GuixSD without fear, of course. In the meantime, you can
8aaaae38
LC
5613also keep using your distribution and try out the package manager on top
5614of it (@pxref{Installation}).
5615
5616Before you proceed with the installation, be aware of the following
5617noteworthy limitations applicable to version @value{VERSION}:
5618
5619@itemize
5620@item
5621The installation process does not include a graphical user interface and
5622requires familiarity with GNU/Linux (see the following subsections to
5623get a feel of what that means.)
5624
5625@item
093ae1be 5626The system does not yet provide full GNOME and KDE desktops. Xfce and
f97c9175 5627Enlightenment are available, though, if graphical desktop environments
093ae1be 5628are your thing, as well as a number of X11 window managers.
8aaaae38
LC
5629
5630@item
dbcb0ab1 5631Support for the Logical Volume Manager (LVM) is missing.
8aaaae38
LC
5632
5633@item
5634Few system services are currently supported out-of-the-box
5635(@pxref{Services}).
5636
5637@item
dedb8d5e 5638More than 3,000 packages are available, but you may
8aaaae38
LC
5639occasionally find that a useful package is missing.
5640@end itemize
5641
f97c9175
AE
5642You have been warned! But more than a disclaimer, this is an invitation
5643to report issues (and success stories!), and to join us in improving it.
8aaaae38 5644@xref{Contributing}, for more info.
5af6de3e 5645
dedb8d5e 5646@node USB Stick Installation
5af6de3e
LC
5647@subsection USB Stick Installation
5648
5649An installation image for USB sticks can be downloaded from
4705641f 5650@indicateurl{ftp://alpha.gnu.org/gnu/guix/guixsd-usb-install-@value{VERSION}.@var{system}.xz},
5af6de3e
LC
5651where @var{system} is one of:
5652
5653@table @code
5654@item x86_64-linux
5655for a GNU/Linux system on Intel/AMD-compatible 64-bit CPUs;
5656
5657@item i686-linux
5658for a 32-bit GNU/Linux system on Intel-compatible CPUs.
5659@end table
5660
5661This image contains a single partition with the tools necessary for an
5662installation. It is meant to be copied @emph{as is} to a large-enough
5663USB stick.
5664
5665To copy the image to a USB stick, follow these steps:
5666
5667@enumerate
5668@item
5669Decompress the image using the @command{xz} command:
5670
5671@example
4705641f 5672xz -d guixsd-usb-install-@value{VERSION}.@var{system}.xz
5af6de3e
LC
5673@end example
5674
5675@item
f97c9175
AE
5676Insert a USB stick of 1@tie{}GiB or more into your machine, and determine
5677its device name. Assuming that the USB stick is known as @file{/dev/sdX},
5af6de3e
LC
5678copy the image with:
5679
5680@example
4705641f 5681dd if=guixsd-usb-install-@value{VERSION}.x86_64 of=/dev/sdX
5af6de3e
LC
5682@end example
5683
5684Access to @file{/dev/sdX} usually requires root privileges.
5685@end enumerate
5686
5687Once this is done, you should be able to reboot the system and boot from
5688the USB stick. The latter usually requires you to get in the BIOS' boot
5689menu, where you can choose to boot from the USB stick.
5690
dedb8d5e 5691@node Preparing for Installation
5af6de3e
LC
5692@subsection Preparing for Installation
5693
5694Once you have successfully booted the image on the USB stick, you should
5695end up with a root prompt. Several console TTYs are configured and can
5696be used to run commands as root. TTY2 shows this documentation,
5697browsable using the Info reader commands (@pxref{Help,,, info, Info: An
ae7ffa9e
LC
5698Introduction}). The installation system runs the GPM mouse daemon,
5699which allows you to select text with the left mouse button and to paste
5700it with the middle button.
5af6de3e 5701
dedb8d5e 5702@subsubsection Keyboard Layout
5af6de3e 5703
dedb8d5e
LC
5704@cindex keyboard layout
5705The installation image uses the US qwerty keyboard layout. If you want
5706to change it, you can use the @command{loadkeys} command. For example,
5707the following command selects the Dvorak keyboard layout:
5af6de3e 5708
dedb8d5e
LC
5709@example
5710loadkeys dvorak
5711@end example
5712
5713See the files under @file{/run/current-system/profile/share/keymaps} for
5714a list of available keyboard layouts. Run @command{man loadkeys} for
5715more information.
5716
5717@subsubsection Networking
5718
5719Run the following command see what your network interfaces are called:
235cba85
LC
5720
5721@example
dedb8d5e 5722ifconfig -a
235cba85
LC
5723@end example
5724
95c559c1 5725@c http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
dedb8d5e
LC
5726Wired interfaces have a name starting with @samp{e}; for example, the
5727interface corresponding to the first on-board Ethernet controller is
5728called @samp{eno1}. Wireless interfaces have a name starting with
5729@samp{w}, like @samp{w1p2s0}.
5730
5731@table @asis
5732@item Wired connection
5733To configure a wired network run the following command, substituting
5734@var{interface} with the name of the wired interface you want to use.
5735
5736@example
5737ifconfig @var{interface} up
5738@end example
5739
5740@item Wireless connection
5741To configure wireless networking, you can create a configuration file
5742for the @command{wpa_supplicant} configuration tool (its location is not
5743important) using one of the available text editors such as
5744@command{zile}:
5745
5746@example
5747zile wpa_supplicant.conf
5748@end example
5749
5750As an example, the following stanza can go to this file and will work
5751for many wireless networks, provided you give the actual SSID and
5752passphrase for the network you are connecting to:
5753
5754@example
5755network=@{
5756 ssid=@var{my-ssid}
5757 key_mgmt=WPA-PSK
5758 psk="the network's secret passphrase"
5759@}
5760@end example
5761
5762Start the wireless service and run it in the background with the
5763following command (substitute @var{interface} with the name of the
5764network interface you want to use):
5765
5766@example
5767wpa_supplicant -c wpa_supplicant.conf -i @var{interface} -B
5768@end example
5769
5770Run @command{man wpa_supplication} for more information.
5771@end table
5772
5773At this point, you need to acquire an IP address. On a network where IP
5774addresses are automatically assigned @i{via} DHCP, you can run:
5775
5776@example
5777dhclient @var{interface}
5778@end example
5af6de3e 5779
dedb8d5e
LC
5780Try to ping a server to see if networking is up and running:
5781
5782@example
5783ping -c 3 gnu.org
5784@end example
5af6de3e
LC
5785
5786Setting up network access is almost always a requirement because the
5787image does not contain all the software and tools that may be needed.
5788
dedb8d5e
LC
5789@subsubsection Disk Partitioning
5790
5791Unless this has already been done, the next step is to partition, and
5792then format the target partition(s).
5793
5794The installation image includes several partitioning tools, including
5795Parted (@pxref{Overview,,, parted, GNU Parted User Manual}),
5796@command{fdisk}, and @command{cfdisk}. Run it and set up your disk with
5797the partition layout you want:
5798
5799@example
5800cfdisk
5801@end example
5802
5803Once you are done partitioning the target hard disk drive, you have to
5804create a file system on the relevant partition(s)@footnote{Currently
5805GuixSD pretty much assumes an ext4 file system. In particular, code
5806that reads partition UUIDs and labels only works with ext4. This will
5807be fixed in the future.}.
5af6de3e 5808
7ab44369
LC
5809Preferably, assign partitions a label so that you can easily and
5810reliably refer to them in @code{file-system} declarations (@pxref{File
5811Systems}). This is typically done using the @code{-L} option of
dedb8d5e
LC
5812@command{mkfs.ext4} and related commands. So, assuming the target root
5813partition lives at @file{/dev/sda1}, a file system with the label
5814@code{my-root} can be created with:
7ab44369 5815
dedb8d5e
LC
5816@example
5817mkfs.ext4 -L my-root /dev/sda1
5818@end example
dd816355 5819
316d65be
LC
5820@c FIXME: Uncomment this once GRUB fully supports encrypted roots.
5821@c A typical command sequence may be:
5822@c
5823@c @example
5824@c # fdisk /dev/sdX
5825@c @dots{} Create partitions etc.@dots{}
5826@c # cryptsetup luksFormat /dev/sdX1
5827@c # cryptsetup open --type luks /dev/sdX1 my-partition
5828@c # mkfs.ext4 -L my-root /dev/mapper/my-partition
5829@c @end example
6d6e6281 5830
dedb8d5e
LC
5831In addition to e2fsprogs, the suite of tools to manipulate
5832ext2/ext3/ext4 file systems, the installation image includes
5833Cryptsetup/LUKS for disk encryption.
5af6de3e 5834
dedb8d5e
LC
5835Once that is done, mount the target root partition under @file{/mnt}
5836with a command like (again, assuming @file{/dev/sda1} is the root
5837partition):
83a17b62 5838
dedb8d5e
LC
5839@example
5840mount /dev/sda1 /mnt
5841@end example
83a17b62 5842
dedb8d5e
LC
5843@node Proceeding with the Installation
5844@subsection Proceeding with the Installation
83a17b62 5845
dedb8d5e
LC
5846With the target partitions ready and the target root mounted on
5847@file{/mnt}, we're ready to go. First, run:
5af6de3e 5848
dedb8d5e
LC
5849@example
5850herd start cow-store /mnt
5851@end example
5af6de3e 5852
dedb8d5e
LC
5853This makes @file{/gnu/store} copy-on-write, such that packages added to
5854it during the installation phase are written to the target disk rather
5855than kept in memory.
5af6de3e 5856
dedb8d5e 5857Next, you have to edit a file and
5af6de3e
LC
5858provide the declaration of the operating system to be installed. To
5859that end, the installation system comes with two text editors: GNU nano
5860(@pxref{Top,,, nano, GNU nano Manual}), and GNU Zile, an Emacs clone.
5861It is better to store that file on the target root file system, say, as
5862@file{/mnt/etc/config.scm}.
5863
dedb8d5e
LC
5864@xref{Using the Configuration System}, for an overview of the
5865configuration file. The example configurations discussed in that
5866section are available under @file{/etc/configuration} in the
5867installation image. Thus, to get started with a system configuration
5868providing a graphical display server (a ``desktop'' system), you can run
5869something along these lines:
5870
5871@example
5872# mkdir /mnt/etc
5873# cp /etc/configuration/desktop.scm /mnt/etc/config.scm
5874# zile /mnt/etc/config.scm
5875@end example
5876
5877You should pay attention to what your configuration file contains, and
5878in particular:
5879
5880@itemize
5881@item
5882Make sure the @code{grub-configuration} form refers to the device you
5883want to install GRUB on.
5884
5885@item
5886Be sure that your partition labels match the value of their respective
5887@code{device} fields in your @code{file-system} configuration, assuming
5888your @code{file-system} configuration sets the value of @code{title} to
5889@code{'label}.
5890@end itemize
5af6de3e 5891
dd51caac
LC
5892Once you are done preparing the configuration file, the new system must
5893be initialized (remember that the target root file system is mounted
5894under @file{/mnt}):
5af6de3e
LC
5895
5896@example
5897guix system init /mnt/etc/config.scm /mnt
5898@end example
5899
5900@noindent
dedb8d5e 5901This copies all the necessary files and installs GRUB on
5af6de3e 5902@file{/dev/sdX}, unless you pass the @option{--no-grub} option. For
6621cdb6 5903more information, @pxref{Invoking guix system}. This command may trigger
5af6de3e
LC
5904downloads or builds of missing packages, which can take some time.
5905
1bd4e6db
LC
5906Once that command has completed---and hopefully succeeded!---you can run
5907@command{reboot} and boot into the new system. The @code{root} password
5908in the new system is initially empty; other users' passwords need to be
5909initialized by running the @command{passwd} command as @code{root},
5910unless your configuration specifies otherwise
5911(@pxref{user-account-password, user account passwords}).
5912
5913Join us on @code{#guix} on the Freenode IRC network or on
5af6de3e
LC
5914@file{guix-devel@@gnu.org} to share your experience---good or not so
5915good.
5916
dedb8d5e 5917@node Building the Installation Image
5af6de3e
LC
5918@subsection Building the Installation Image
5919
5920The installation image described above was built using the @command{guix
5921system} command, specifically:
5922
5923@example
8a225c66 5924guix system disk-image --image-size=850MiB gnu/system/install.scm
5af6de3e
LC
5925@end example
5926
5927@xref{Invoking guix system}, for more information. See
5928@file{gnu/system/install.scm} in the source tree for more information
5929about the installation image.
5930
cf4a9129
LC
5931@node System Configuration
5932@section System Configuration
b208a005 5933
cf4a9129 5934@cindex system configuration
3ca2731c 5935The Guix System Distribution supports a consistent whole-system configuration
cf4a9129
LC
5936mechanism. By that we mean that all aspects of the global system
5937configuration---such as the available system services, timezone and
5938locale settings, user accounts---are declared in a single place. Such
5939a @dfn{system configuration} can be @dfn{instantiated}---i.e., effected.
91ef73d4 5940
cf4a9129
LC
5941One of the advantages of putting all the system configuration under the
5942control of Guix is that it supports transactional system upgrades, and
5943makes it possible to roll-back to a previous system instantiation,
5944should something go wrong with the new one (@pxref{Features}). Another
5945one is that it makes it easy to replicate the exact same configuration
5946across different machines, or at different points in time, without
5947having to resort to additional administration tools layered on top of
5948the system's own tools.
5949@c Yes, we're talking of Puppet, Chef, & co. here. ↑
91ef73d4 5950
cf4a9129
LC
5951This section describes this mechanism. First we focus on the system
5952administrator's viewpoint---explaining how the system is configured and
5953instantiated. Then we show how this mechanism can be extended, for
5954instance to support new system services.
91ef73d4 5955
cf4a9129
LC
5956@menu
5957* Using the Configuration System:: Customizing your GNU system.
7313a52e 5958* operating-system Reference:: Detail of operating-system declarations.
cf4a9129 5959* File Systems:: Configuring file system mounts.
510f9d86 5960* Mapped Devices:: Block device extra processing.
cf4a9129 5961* User Accounts:: Specifying user accounts.
598e19dc 5962* Locales:: Language and cultural convention settings.
cf4a9129 5963* Services:: Specifying system services.
0ae8c15a 5964* Setuid Programs:: Programs running with root privileges.
efb5e833 5965* X.509 Certificates:: Authenticating HTTPS servers.
996ed739 5966* Name Service Switch:: Configuring libc's name service switch.
fd1b1fa2 5967* Initial RAM Disk:: Linux-Libre bootstrapping.
88faf933 5968* GRUB Configuration:: Configuring the boot loader.
cf4a9129 5969* Invoking guix system:: Instantiating a system configuration.
97d76250 5970* Running GuixSD in a VM:: How to run GuixSD in a virtual machine.
cf4a9129
LC
5971* Defining Services:: Adding new service definitions.
5972@end menu
91ef73d4 5973
cf4a9129
LC
5974@node Using the Configuration System
5975@subsection Using the Configuration System
64d76fa6 5976
cf4a9129
LC
5977The operating system is configured by providing an
5978@code{operating-system} declaration in a file that can then be passed to
5979the @command{guix system} command (@pxref{Invoking guix system}). A
5980simple setup, with the default system services, the default Linux-Libre
5981kernel, initial RAM disk, and boot loader looks like this:
91ef73d4 5982
cf4a9129
LC
5983@findex operating-system
5984@lisp
dd51caac 5985@include os-config-bare-bones.texi
cf4a9129 5986@end lisp
401c53c4 5987
cf4a9129
LC
5988This example should be self-describing. Some of the fields defined
5989above, such as @code{host-name} and @code{bootloader}, are mandatory.
5990Others, such as @code{packages} and @code{services}, can be omitted, in
5991which case they get a default value.
e7f34eb0 5992
5d94ac51
LC
5993Below we discuss the effect of some of the most important fields
5994(@pxref{operating-system Reference}, for details about all the available
5995fields), and how to @dfn{instantiate} the operating system using
5996@command{guix system}.
5997
5998@unnumberedsubsubsec Globally-Visible Packages
5999
cf4a9129 6000@vindex %base-packages
5d94ac51
LC
6001The @code{packages} field lists packages that will be globally visible
6002on the system, for all user accounts---i.e., in every user's @code{PATH}
6003environment variable---in addition to the per-user profiles
6004(@pxref{Invoking guix package}). The @var{%base-packages} variable
6005provides all the tools one would expect for basic user and administrator
6006tasks---including the GNU Core Utilities, the GNU Networking Utilities,
6007the GNU Zile lightweight text editor, @command{find}, @command{grep},
6008etc. The example above adds tcpdump to those, taken from the @code{(gnu
6009packages admin)} module (@pxref{Package Modules}).
e7f34eb0 6010
f6c9fb1b
LC
6011@findex specification->package
6012Referring to packages by variable name, like @var{tcpdump} above, has
6013the advantage of being unambiguous; it also allows typos and such to be
6014diagnosed right away as ``unbound variables''. The downside is that one
6015needs to know which module defines which package, and to augment the
6016@code{use-package-modules} line accordingly. To avoid that, one can use
6017the @code{specification->package} procedure of the @code{(gnu packages)}
6018module, which returns the best package for a given name or name and
6019version:
6020
6021@lisp
6022(use-modules (gnu packages))
6023
6024(operating-system
6025 ;; ...
6026 (packages (append (map specification->package
6027 '("tcpdump" "htop" "gnupg-2.0"))
6028 %base-packages)))
6029@end lisp
6030
5d94ac51
LC
6031@unnumberedsubsubsec System Services
6032
cf4a9129
LC
6033@vindex %base-services
6034The @code{services} field lists @dfn{system services} to be made
6035available when the system starts (@pxref{Services}).
6036The @code{operating-system} declaration above specifies that, in
6037addition to the basic services, we want the @command{lshd} secure shell
cd6f6c22
LC
6038daemon listening on port 2222 (@pxref{Networking Services,
6039@code{lsh-service}}). Under the hood,
cf4a9129
LC
6040@code{lsh-service} arranges so that @code{lshd} is started with the
6041right command-line options, possibly with supporting configuration files
cd6f6c22
LC
6042generated as needed (@pxref{Defining Services}).
6043
6044@cindex customization, of services
6045@findex modify-services
6046Occasionally, instead of using the base services as is, you will want to
6047customize them. For instance, to change the configuration of
6048@code{guix-daemon} and Mingetty (the console log-in), you may write the
6049following instead of @var{%base-services}:
6050
6051@lisp
6052(modify-services %base-services
6053 (guix-service-type config =>
6054 (guix-configuration
6055 (inherit config)
6056 (use-substitutes? #f)
6057 (extra-options '("--gc-keep-outputs"))))
6058 (mingetty-service-type config =>
6059 (mingetty-configuration
6060 (inherit config)
6061 (motd (plain-file "motd" "Hi there!")))))
6062@end lisp
6063
6064@noindent
6065The effect here is to change the options passed to @command{guix-daemon}
6066when it is started, as well as the ``message of the day'' that appears
6067when logging in at the console. @xref{Service Reference,
6068@code{modify-services}}, for more on that.
a1ba8475 6069
dd51caac 6070The configuration for a typical ``desktop'' usage, with the X11 display
cd6f6c22 6071server, a desktop environment, network management, power management, and
dd51caac
LC
6072more, would look like this:
6073
6074@lisp
6075@include os-config-desktop.texi
6076@end lisp
6077
6078@xref{Desktop Services}, for the exact list of services provided by
efb5e833
LC
6079@var{%desktop-services}. @xref{X.509 Certificates}, for background
6080information about the @code{nss-certs} package that is used here.
dd51caac 6081
5d94ac51
LC
6082Again, @var{%desktop-services} is just a list of service objects. If
6083you want to remove services from there, you can do so using the
6084procedures for list filtering (@pxref{SRFI-1 Filtering and
6085Partitioning,,, guile, GNU Guile Reference Manual}). For instance, the
6086following expression returns a list that contains all the services in
6087@var{%desktop-services} minus the Avahi service:
6088
6089@example
6090(remove (lambda (service)
6091 (eq? (service-kind service) avahi-service-type))
6092 %desktop-services)
6093@end example
6094
6095@unnumberedsubsubsec Instantiating the System
6096
6097Assuming the @code{operating-system} declaration
6098is stored in the @file{my-system-config.scm}
cf4a9129
LC
6099file, the @command{guix system reconfigure my-system-config.scm} command
6100instantiates that configuration, and makes it the default GRUB boot
65797bff
LC
6101entry (@pxref{Invoking guix system}).
6102
6103The normal way to change the system's configuration is by updating this
6104file and re-running @command{guix system reconfigure}. One should never
6105have to touch files in @command{/etc} or to run commands that modify the
6106system state such as @command{useradd} or @command{grub-install}. In
6107fact, you must avoid that since that would not only void your warranty
6108but also prevent you from rolling back to previous versions of your
6109system, should you ever need to.
6110
6111@cindex roll-back, of the operating system
6112Speaking of roll-back, each time you run @command{guix system
6113reconfigure}, a new @dfn{generation} of the system is created---without
6114modifying or deleting previous generations. Old system generations get
6115an entry in the GRUB boot menu, allowing you to boot them in case
6116something went wrong with the latest generation. Reassuring, no? The
6117@command{guix system list-generations} command lists the system
6118generations available on disk.
b81e1947 6119
5d94ac51
LC
6120@unnumberedsubsubsec The Programming Interface
6121
cf4a9129
LC
6122At the Scheme level, the bulk of an @code{operating-system} declaration
6123is instantiated with the following monadic procedure (@pxref{The Store
6124Monad}):
b81e1947 6125
cf4a9129
LC
6126@deffn {Monadic Procedure} operating-system-derivation os
6127Return a derivation that builds @var{os}, an @code{operating-system}
6128object (@pxref{Derivations}).
b81e1947 6129
cf4a9129
LC
6130The output of the derivation is a single directory that refers to all
6131the packages, configuration files, and other supporting files needed to
6132instantiate @var{os}.
6133@end deffn
b81e1947 6134
5d94ac51
LC
6135This procedure is provided by the @code{(gnu system)} module. Along
6136with @code{(gnu services)} (@pxref{Services}), this module contains the
6137guts of GuixSD. Make sure to visit it!
6138
6139
7313a52e
LC
6140@node operating-system Reference
6141@subsection @code{operating-system} Reference
6142
6143This section summarizes all the options available in
6144@code{operating-system} declarations (@pxref{Using the Configuration
6145System}).
6146
6147@deftp {Data Type} operating-system
6148This is the data type representing an operating system configuration.
6149By that, we mean all the global system configuration, not per-user
6150configuration (@pxref{Using the Configuration System}).
6151
6152@table @asis
6153@item @code{kernel} (default: @var{linux-libre})
fbb25e56 6154The package object of the operating system kernel to use@footnote{Currently
7313a52e
LC
6155only the Linux-libre kernel is supported. In the future, it will be
6156possible to use the GNU@tie{}Hurd.}.
6157
ee2a6304
LC
6158@item @code{kernel-arguments} (default: @code{'()})
6159List of strings or gexps representing additional arguments to pass on
6160the kernel's command-line---e.g., @code{("console=ttyS0")}.
6161
7313a52e 6162@item @code{bootloader}
88faf933 6163The system bootloader configuration object. @xref{GRUB Configuration}.
7313a52e
LC
6164
6165@item @code{initrd} (default: @code{base-initrd})
6166A two-argument monadic procedure that returns an initial RAM disk for
6167the Linux kernel. @xref{Initial RAM Disk}.
6168
f34c56be
LC
6169@item @code{firmware} (default: @var{%base-firmware})
6170@cindex firmware
6171List of firmware packages loadable by the operating system kernel.
6172
6173The default includes firmware needed for Atheros-based WiFi devices
6174(Linux-libre module @code{ath9k}.)
6175
7313a52e
LC
6176@item @code{host-name}
6177The host name.
6178
6179@item @code{hosts-file}
6180@cindex hosts file
24e02c28 6181A file-like object (@pxref{G-Expressions, file-like objects}) for use as
7313a52e 6182@file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library
24e02c28 6183Reference Manual}). The default is a file with entries for
7313a52e
LC
6184@code{localhost} and @var{host-name}.
6185
6186@item @code{mapped-devices} (default: @code{'()})
6187A list of mapped devices. @xref{Mapped Devices}.
6188
6189@item @code{file-systems}
6190A list of file systems. @xref{File Systems}.
6191
6192@item @code{swap-devices} (default: @code{'()})
6193@cindex swap devices
6194A list of strings identifying devices to be used for ``swap space''
6195(@pxref{Memory Concepts,,, libc, The GNU C Library Reference Manual}).
6196For example, @code{'("/dev/sda3")}.
6197
bf87f38a 6198@item @code{users} (default: @code{%base-user-accounts})
7313a52e
LC
6199@itemx @code{groups} (default: @var{%base-groups})
6200List of user accounts and groups. @xref{User Accounts}.
6201
6202@item @code{skeletons} (default: @code{(default-skeletons)})
6203A monadic list of pairs of target file name and files. These are the
6204files that will be used as skeletons as new accounts are created.
6205
6206For instance, a valid value may look like this:
6207
6208@example
6209(mlet %store-monad ((bashrc (text-file "bashrc" "\
6210 export PATH=$HOME/.guix-profile/bin")))
6211 (return `((".bashrc" ,bashrc))))
6212@end example
6213
6214@item @code{issue} (default: @var{%default-issue})
6215A string denoting the contents of the @file{/etc/issue} file, which is
6216what displayed when users log in on a text console.
6217
6218@item @code{packages} (default: @var{%base-packages})
6219The set of packages installed in the global profile, which is accessible
6220at @file{/run/current-system/profile}.
6221
6222The default set includes core utilities, but it is good practice to
6223install non-core utilities in user profiles (@pxref{Invoking guix
6224package}).
6225
6226@item @code{timezone}
6227A timezone identifying string---e.g., @code{"Europe/Paris"}.
6228
17c20385
LC
6229You can run the @command{tzselect} command to find out which timezone
6230string corresponds to your region. Choosing an invalid timezone name
6231causes @command{guix system} to fail.
6232
598e19dc
LC
6233@item @code{locale} (default: @code{"en_US.utf8"})
6234The name of the default locale (@pxref{Locale Names,,, libc, The GNU C
6235Library Reference Manual}). @xref{Locales}, for more information.
6236
6237@item @code{locale-definitions} (default: @var{%default-locale-definitions})
6238The list of locale definitions to be compiled and that may be used at
6239run time. @xref{Locales}.
7313a52e 6240
34760ae7
LC
6241@item @code{locale-libcs} (default: @code{(list @var{glibc})})
6242The list of GNU@tie{}libc packages whose locale data and tools are used
6243to build the locale definitions. @xref{Locales}, for compatibility
6244considerations that justify this option.
6245
996ed739
LC
6246@item @code{name-service-switch} (default: @var{%default-nss})
6247Configuration of libc's name service switch (NSS)---a
6248@code{<name-service-switch>} object. @xref{Name Service Switch}, for
6249details.
6250
7313a52e 6251@item @code{services} (default: @var{%base-services})
28d939af 6252A list of service objects denoting system services. @xref{Services}.
7313a52e
LC
6253
6254@item @code{pam-services} (default: @code{(base-pam-services)})
6255@cindex PAM
6256@cindex pluggable authentication modules
6257Linux @dfn{pluggable authentication module} (PAM) services.
6258@c FIXME: Add xref to PAM services section.
6259
6260@item @code{setuid-programs} (default: @var{%setuid-programs})
6261List of string-valued G-expressions denoting setuid programs.
6262@xref{Setuid Programs}.
6263
f5a9ffa0
AK
6264@item @code{sudoers-file} (default: @var{%sudoers-specification})
6265@cindex sudoers file
84765839
LC
6266The contents of the @file{/etc/sudoers} file as a file-like object
6267(@pxref{G-Expressions, @code{local-file} and @code{plain-file}}).
7313a52e
LC
6268
6269This file specifies which users can use the @command{sudo} command, what
6270they are allowed to do, and what privileges they may gain. The default
6271is that only @code{root} and members of the @code{wheel} group may use
6272@code{sudo}.
6273
6274@end table
6275@end deftp
6276
cf4a9129
LC
6277@node File Systems
6278@subsection File Systems
b81e1947 6279
cf4a9129
LC
6280The list of file systems to be mounted is specified in the
6281@code{file-systems} field of the operating system's declaration
6282(@pxref{Using the Configuration System}). Each file system is declared
6283using the @code{file-system} form, like this:
b81e1947
LC
6284
6285@example
cf4a9129
LC
6286(file-system
6287 (mount-point "/home")
6288 (device "/dev/sda3")
6289 (type "ext4"))
b81e1947
LC
6290@end example
6291
cf4a9129
LC
6292As usual, some of the fields are mandatory---those shown in the example
6293above---while others can be omitted. These are described below.
b81e1947 6294
cf4a9129
LC
6295@deftp {Data Type} file-system
6296Objects of this type represent file systems to be mounted. They
6297contain the following members:
5ff3c4b8 6298
cf4a9129
LC
6299@table @asis
6300@item @code{type}
6301This is a string specifying the type of the file system---e.g.,
6302@code{"ext4"}.
5ff3c4b8 6303
cf4a9129
LC
6304@item @code{mount-point}
6305This designates the place where the file system is to be mounted.
b81e1947 6306
cf4a9129
LC
6307@item @code{device}
6308This names the ``source'' of the file system. By default it is the name
6309of a node under @file{/dev}, but its meaning depends on the @code{title}
6310field described below.
401c53c4 6311
cf4a9129
LC
6312@item @code{title} (default: @code{'device})
6313This is a symbol that specifies how the @code{device} field is to be
6314interpreted.
401c53c4 6315
cf4a9129
LC
6316When it is the symbol @code{device}, then the @code{device} field is
6317interpreted as a file name; when it is @code{label}, then @code{device}
6318is interpreted as a partition label name; when it is @code{uuid},
6319@code{device} is interpreted as a partition unique identifier (UUID).
da7cabd4 6320
661a1d79 6321UUIDs may be converted from their string representation (as shown by the
0767f6a6
LC
6322@command{tune2fs -l} command) using the @code{uuid} form@footnote{The
6323@code{uuid} form expects 16-byte UUIDs as defined in
6324@uref{https://tools.ietf.org/html/rfc4122, RFC@tie{}4122}. This is the
6325form of UUID used by the ext2 family of file systems and others, but it
6326is different from ``UUIDs'' found in FAT file systems, for instance.},
6327like this:
661a1d79
LC
6328
6329@example
6330(file-system
6331 (mount-point "/home")
6332 (type "ext4")
6333 (title 'uuid)
6334 (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
6335@end example
6336
cf4a9129 6337The @code{label} and @code{uuid} options offer a way to refer to disk
661a1d79
LC
6338partitions without having to hard-code their actual device
6339name@footnote{Note that, while it is tempting to use
6340@file{/dev/disk/by-uuid} and similar device names to achieve the same
6341result, this is not recommended: These special device nodes are created
6342by the udev daemon and may be unavailable at the time the device is
6343mounted.}.
da7cabd4 6344
5f86a66e
LC
6345However, when a file system's source is a mapped device (@pxref{Mapped
6346Devices}), its @code{device} field @emph{must} refer to the mapped
6347device name---e.g., @file{/dev/mapper/root-partition}---and consequently
6348@code{title} must be set to @code{'device}. This is required so that
6349the system knows that mounting the file system depends on having the
6350corresponding device mapping established.
6351
cf4a9129
LC
6352@item @code{flags} (default: @code{'()})
6353This is a list of symbols denoting mount flags. Recognized flags
2c071ce9
LC
6354include @code{read-only}, @code{bind-mount}, @code{no-dev} (disallow
6355access to special files), @code{no-suid} (ignore setuid and setgid
6356bits), and @code{no-exec} (disallow program execution.)
da7cabd4 6357
cf4a9129
LC
6358@item @code{options} (default: @code{#f})
6359This is either @code{#f}, or a string denoting mount options.
da7cabd4 6360
be21979d
LC
6361@item @code{mount?} (default: @code{#t})
6362This value indicates whether to automatically mount the file system when
6363the system is brought up. When set to @code{#f}, the file system gets
6364an entry in @file{/etc/fstab} (read by the @command{mount} command) but
6365is not automatically mounted.
6366
cf4a9129
LC
6367@item @code{needed-for-boot?} (default: @code{#f})
6368This Boolean value indicates whether the file system is needed when
6369booting. If that is true, then the file system is mounted when the
6370initial RAM disk (initrd) is loaded. This is always the case, for
6371instance, for the root file system.
da7cabd4 6372
cf4a9129
LC
6373@item @code{check?} (default: @code{#t})
6374This Boolean indicates whether the file system needs to be checked for
6375errors before being mounted.
f9cc8971 6376
4e469051
LC
6377@item @code{create-mount-point?} (default: @code{#f})
6378When true, the mount point is created if it does not exist yet.
6379
e51710d1
LC
6380@item @code{dependencies} (default: @code{'()})
6381This is a list of @code{<file-system>} objects representing file systems
6382that must be mounted before (and unmounted after) this one.
6383
6384As an example, consider a hierarchy of mounts: @file{/sys/fs/cgroup} is
6385a dependency of @file{/sys/fs/cgroup/cpu} and
6386@file{/sys/fs/cgroup/memory}.
6387
cf4a9129
LC
6388@end table
6389@end deftp
da7cabd4 6390
a69576ea
LC
6391The @code{(gnu system file-systems)} exports the following useful
6392variables.
6393
6394@defvr {Scheme Variable} %base-file-systems
6395These are essential file systems that are required on normal systems,
cc0e575a 6396such as @var{%pseudo-terminal-file-system} and @var{%immutable-store} (see
3392ce5d
LC
6397below.) Operating system declarations should always contain at least
6398these.
a69576ea
LC
6399@end defvr
6400
7f239fd3
LC
6401@defvr {Scheme Variable} %pseudo-terminal-file-system
6402This is the file system to be mounted as @file{/dev/pts}. It supports
6403@dfn{pseudo-terminals} created @i{via} @code{openpty} and similar
6404functions (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference
6405Manual}). Pseudo-terminals are used by terminal emulators such as
6406@command{xterm}.
6407@end defvr
6408
db17ae5c
LC
6409@defvr {Scheme Variable} %shared-memory-file-system
6410This file system is mounted as @file{/dev/shm} and is used to support
6411memory sharing across processes (@pxref{Memory-mapped I/O,
6412@code{shm_open},, libc, The GNU C Library Reference Manual}).
6413@end defvr
6414
3392ce5d
LC
6415@defvr {Scheme Variable} %immutable-store
6416This file system performs a read-only ``bind mount'' of
6417@file{/gnu/store}, making it read-only for all the users including
6418@code{root}. This prevents against accidental modification by software
6419running as @code{root} or by system administrators.
6420
6421The daemon itself is still able to write to the store: it remounts it
6422read-write in its own ``name space.''
6423@end defvr
6424
a69576ea
LC
6425@defvr {Scheme Variable} %binary-format-file-system
6426The @code{binfmt_misc} file system, which allows handling of arbitrary
6427executable file types to be delegated to user space. This requires the
6428@code{binfmt.ko} kernel module to be loaded.
6429@end defvr
6430
6431@defvr {Scheme Variable} %fuse-control-file-system
6432The @code{fusectl} file system, which allows unprivileged users to mount
6433and unmount user-space FUSE file systems. This requires the
6434@code{fuse.ko} kernel module to be loaded.
6435@end defvr
6436
510f9d86
LC
6437@node Mapped Devices
6438@subsection Mapped Devices
6439
6440@cindex device mapping
6441@cindex mapped devices
6442The Linux kernel has a notion of @dfn{device mapping}: a block device,
6443such as a hard disk partition, can be @dfn{mapped} into another device,
6444with additional processing over the data that flows through
6445it@footnote{Note that the GNU@tie{}Hurd makes no difference between the
6446concept of a ``mapped device'' and that of a file system: both boil down
6447to @emph{translating} input/output operations made on a file to
6448operations on its backing store. Thus, the Hurd implements mapped
6449devices, like file systems, using the generic @dfn{translator} mechanism
6450(@pxref{Translators,,, hurd, The GNU Hurd Reference Manual}).}. A
6451typical example is encryption device mapping: all writes to the mapped
6452device are encrypted, and all reads are deciphered, transparently.
6453
6454Mapped devices are declared using the @code{mapped-device} form:
6455
6456@example
6457(mapped-device
6458 (source "/dev/sda3")
6459 (target "home")
6460 (type luks-device-mapping))
6461@end example
6462
6463@noindent
6464@cindex disk encryption
6465@cindex LUKS
6466This example specifies a mapping from @file{/dev/sda3} to
6467@file{/dev/mapper/home} using LUKS---the
6468@url{http://code.google.com/p/cryptsetup,Linux Unified Key Setup}, a
6469standard mechanism for disk encryption. The @file{/dev/mapper/home}
6470device can then be used as the @code{device} of a @code{file-system}
6471declaration (@pxref{File Systems}). The @code{mapped-device} form is
6472detailed below.
6473
6474@deftp {Data Type} mapped-device
6475Objects of this type represent device mappings that will be made when
6476the system boots up.
6477
9cb426b8
LC
6478@table @code
6479@item source
510f9d86
LC
6480This string specifies the name of the block device to be mapped, such as
6481@code{"/dev/sda3"}.
6482
9cb426b8 6483@item target
510f9d86
LC
6484This string specifies the name of the mapping to be established. For
6485example, specifying @code{"my-partition"} will lead to the creation of
6486the @code{"/dev/mapper/my-partition"} device.
6487
9cb426b8 6488@item type
510f9d86
LC
6489This must be a @code{mapped-device-kind} object, which specifies how
6490@var{source} is mapped to @var{target}.
6491@end table
6492@end deftp
6493
6494@defvr {Scheme Variable} luks-device-mapping
6495This defines LUKS block device encryption using the @command{cryptsetup}
6496command, from the same-named package. This relies on the
6497@code{dm-crypt} Linux kernel module.
6498@end defvr
6499
cf4a9129
LC
6500@node User Accounts
6501@subsection User Accounts
ee85f3db 6502
9bea87a5
LC
6503User accounts and groups are entirely managed through the
6504@code{operating-system} declaration. They are specified with the
6505@code{user-account} and @code{user-group} forms:
ee85f3db 6506
cf4a9129
LC
6507@example
6508(user-account
6509 (name "alice")
6510 (group "users")
24e752c0
LC
6511 (supplementary-groups '("wheel" ;allow use of sudo, etc.
6512 "audio" ;sound card
6513 "video" ;video devices such as webcams
6514 "cdrom")) ;the good ol' CD-ROM
cf4a9129
LC
6515 (comment "Bob's sister")
6516 (home-directory "/home/alice"))
6517@end example
25083588 6518
9bea87a5
LC
6519When booting or upon completion of @command{guix system reconfigure},
6520the system ensures that only the user accounts and groups specified in
6521the @code{operating-system} declaration exist, and with the specified
6522properties. Thus, account or group creations or modifications made by
6523directly invoking commands such as @command{useradd} are lost upon
6524reconfiguration or reboot. This ensures that the system remains exactly
6525as declared.
6526
cf4a9129
LC
6527@deftp {Data Type} user-account
6528Objects of this type represent user accounts. The following members may
6529be specified:
ee85f3db 6530
cf4a9129
LC
6531@table @asis
6532@item @code{name}
6533The name of the user account.
ee85f3db 6534
cf4a9129
LC
6535@item @code{group}
6536This is the name (a string) or identifier (a number) of the user group
6537this account belongs to.
ee85f3db 6538
cf4a9129
LC
6539@item @code{supplementary-groups} (default: @code{'()})
6540Optionally, this can be defined as a list of group names that this
6541account belongs to.
ee85f3db 6542
cf4a9129
LC
6543@item @code{uid} (default: @code{#f})
6544This is the user ID for this account (a number), or @code{#f}. In the
6545latter case, a number is automatically chosen by the system when the
6546account is created.
ee85f3db 6547
cf4a9129
LC
6548@item @code{comment} (default: @code{""})
6549A comment about the account, such as the account's owner full name.
c8c871d1 6550
cf4a9129
LC
6551@item @code{home-directory}
6552This is the name of the home directory for the account.
ee85f3db 6553
cf4a9129
LC
6554@item @code{shell} (default: Bash)
6555This is a G-expression denoting the file name of a program to be used as
6556the shell (@pxref{G-Expressions}).
ee85f3db 6557
cf4a9129
LC
6558@item @code{system?} (default: @code{#f})
6559This Boolean value indicates whether the account is a ``system''
6560account. System accounts are sometimes treated specially; for instance,
6561graphical login managers do not list them.
ee85f3db 6562
1bd4e6db 6563@anchor{user-account-password}
cf4a9129 6564@item @code{password} (default: @code{#f})
eb59595c
LC
6565You would normally leave this field to @code{#f}, initialize user
6566passwords as @code{root} with the @command{passwd} command, and then let
9bea87a5
LC
6567users change it with @command{passwd}. Passwords set with
6568@command{passwd} are of course preserved across reboot and
6569reconfiguration.
eb59595c
LC
6570
6571If you @emph{do} want to have a preset password for an account, then
6572this field must contain the encrypted password, as a string.
5d1f1177
LC
6573@xref{crypt,,, libc, The GNU C Library Reference Manual}, for more information
6574on password encryption, and @ref{Encryption,,, guile, GNU Guile Reference
eb59595c 6575Manual}, for information on Guile's @code{crypt} procedure.
c8c871d1 6576
cf4a9129
LC
6577@end table
6578@end deftp
ee85f3db 6579
cf4a9129 6580User group declarations are even simpler:
ee85f3db 6581
cf4a9129
LC
6582@example
6583(user-group (name "students"))
6584@end example
ee85f3db 6585
cf4a9129
LC
6586@deftp {Data Type} user-group
6587This type is for, well, user groups. There are just a few fields:
af8a56b8 6588
cf4a9129
LC
6589@table @asis
6590@item @code{name}
6591The group's name.
ee85f3db 6592
cf4a9129
LC
6593@item @code{id} (default: @code{#f})
6594The group identifier (a number). If @code{#f}, a new number is
6595automatically allocated when the group is created.
ee85f3db 6596
c8fa3426
LC
6597@item @code{system?} (default: @code{#f})
6598This Boolean value indicates whether the group is a ``system'' group.
6599System groups have low numerical IDs.
6600
cf4a9129
LC
6601@item @code{password} (default: @code{#f})
6602What, user groups can have a password? Well, apparently yes. Unless
6603@code{#f}, this field specifies the group's password.
ee85f3db 6604
cf4a9129
LC
6605@end table
6606@end deftp
401c53c4 6607
cf4a9129
LC
6608For convenience, a variable lists all the basic user groups one may
6609expect:
401c53c4 6610
cf4a9129
LC
6611@defvr {Scheme Variable} %base-groups
6612This is the list of basic user groups that users and/or packages expect
6613to be present on the system. This includes groups such as ``root'',
6614``wheel'', and ``users'', as well as groups used to control access to
6615specific devices such as ``audio'', ``disk'', and ``cdrom''.
6616@end defvr
401c53c4 6617
bf87f38a
LC
6618@defvr {Scheme Variable} %base-user-accounts
6619This is the list of basic system accounts that programs may expect to
6620find on a GNU/Linux system, such as the ``nobody'' account.
6621
6622Note that the ``root'' account is not included here. It is a
6623special-case and is automatically added whether or not it is specified.
6624@end defvr
6625
598e19dc
LC
6626@node Locales
6627@subsection Locales
6628
6629@cindex locale
6630A @dfn{locale} defines cultural conventions for a particular language
6631and region of the world (@pxref{Locales,,, libc, The GNU C Library
6632Reference Manual}). Each locale has a name that typically has the form
b2636518 6633@code{@var{language}_@var{territory}.@var{codeset}}---e.g.,
598e19dc
LC
6634@code{fr_LU.utf8} designates the locale for the French language, with
6635cultural conventions from Luxembourg, and using the UTF-8 encoding.
6636
6637@cindex locale definition
6638Usually, you will want to specify the default locale for the machine
6639using the @code{locale} field of the @code{operating-system} declaration
6640(@pxref{operating-system Reference, @code{locale}}).
6641
f5582b2c
LC
6642The selected locale is automatically added to the @dfn{locale
6643definitions} known to the system if needed, with its codeset inferred
6644from its name---e.g., @code{bo_CN.utf8} will be assumed to use the
6645@code{UTF-8} codeset. Additional locale definitions can be specified in
6646the @code{locale-definitions} slot of @code{operating-system}---this is
6647useful, for instance, if the codeset could not be inferred from the
6648locale name. The default set of locale definitions includes some widely
6649used locales, but not all the available locales, in order to save space.
6650
6651For instance, to add the North Frisian locale for Germany, the value of
6652that field may be:
598e19dc
LC
6653
6654@example
6655(cons (locale-definition
6656 (name "fy_DE.utf8") (source "fy_DE"))
6657 %default-locale-definitions)
6658@end example
6659
6660Likewise, to save space, one might want @code{locale-definitions} to
6661list only the locales that are actually used, as in:
6662
6663@example
6664(list (locale-definition
6665 (name "ja_JP.eucjp") (source "ja_JP")
6666 (charset "EUC-JP")))
6667@end example
6668
5c3c1427
LC
6669@vindex LOCPATH
6670The compiled locale definitions are available at
46bd6edd
LC
6671@file{/run/current-system/locale/X.Y}, where @code{X.Y} is the libc
6672version, which is the default location where the GNU@tie{}libc provided
6673by Guix looks for locale data. This can be overridden using the
6674@code{LOCPATH} environment variable (@pxref{locales-and-locpath,
5c3c1427
LC
6675@code{LOCPATH} and locale packages}).
6676
598e19dc
LC
6677The @code{locale-definition} form is provided by the @code{(gnu system
6678locale)} module. Details are given below.
6679
6680@deftp {Data Type} locale-definition
6681This is the data type of a locale definition.
6682
6683@table @asis
6684
6685@item @code{name}
6686The name of the locale. @xref{Locale Names,,, libc, The GNU C Library
6687Reference Manual}, for more information on locale names.
6688
6689@item @code{source}
6690The name of the source for that locale. This is typically the
6691@code{@var{language}_@var{territory}} part of the locale name.
6692
6693@item @code{charset} (default: @code{"UTF-8"})
6694The ``character set'' or ``code set'' for that locale,
6695@uref{http://www.iana.org/assignments/character-sets, as defined by
6696IANA}.
6697
6698@end table
6699@end deftp
6700
6701@defvr {Scheme Variable} %default-locale-definitions
b2636518
LC
6702An arbitrary list of commonly used UTF-8 locales, used as the default
6703value of the @code{locale-definitions} field of @code{operating-system}
598e19dc 6704declarations.
b2636518
LC
6705
6706@cindex locale name
6707@cindex normalized codeset in locale names
6708These locale definitions use the @dfn{normalized codeset} for the part
6709that follows the dot in the name (@pxref{Using gettextized software,
6710normalized codeset,, libc, The GNU C Library Reference Manual}). So for
6711instance it has @code{uk_UA.utf8} but @emph{not}, say,
6712@code{uk_UA.UTF-8}.
598e19dc 6713@end defvr
401c53c4 6714
34760ae7
LC
6715@subsubsection Locale Data Compatibility Considerations
6716
6717@cindex incompatibility, of locale data
6718@code{operating-system} declarations provide a @code{locale-libcs} field
6719to specify the GNU@tie{}libc packages that are used to compile locale
6720declarations (@pxref{operating-system Reference}). ``Why would I
6721care?'', you may ask. Well, it turns out that the binary format of
6722locale data is occasionally incompatible from one libc version to
6723another.
6724
6725@c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
6726@c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
6727For instance, a program linked against libc version 2.21 is unable to
6728read locale data produced with libc 2.22; worse, that program
6729@emph{aborts} instead of simply ignoring the incompatible locale
6730data@footnote{Versions 2.23 and later of GNU@tie{}libc will simply skip
6731the incompatible locale data, which is already an improvement.}.
6732Similarly, a program linked against libc 2.22 can read most, but not
6733all, the locale data from libc 2.21 (specifically, @code{LC_COLLATE}
6734data is incompatible); thus calls to @code{setlocale} may fail, but
6735programs will not abort.
6736
6737The ``problem'' in GuixSD is that users have a lot of freedom: They can
6738choose whether and when to upgrade software in their profiles, and might
6739be using a libc version different from the one the system administrator
6740used to build the system-wide locale data.
6741
6742Fortunately, unprivileged users can also install their own locale data
6743and define @var{GUIX_LOCPATH} accordingly (@pxref{locales-and-locpath,
6744@code{GUIX_LOCPATH} and locale packages}).
6745
6746Still, it is best if the system-wide locale data at
6747@file{/run/current-system/locale} is built for all the libc versions
6748actually in use on the system, so that all the programs can access
6749it---this is especially crucial on a multi-user system. To do that, the
6750administrator can specify several libc packages in the
6751@code{locale-libcs} field of @code{operating-system}:
6752
6753@example
6754(use-package-modules base)
6755
6756(operating-system
6757 ;; @dots{}
6758 (locale-libcs (list glibc-2.21 (canonical-package glibc))))
6759@end example
6760
6761This example would lead to a system containing locale definitions for
6762both libc 2.21 and the current version of libc in
6763@file{/run/current-system/locale}.
6764
6765
cf4a9129
LC
6766@node Services
6767@subsection Services
401c53c4 6768
cf4a9129
LC
6769@cindex system services
6770An important part of preparing an @code{operating-system} declaration is
6771listing @dfn{system services} and their configuration (@pxref{Using the
6772Configuration System}). System services are typically daemons launched
6773when the system boots, or other actions needed at that time---e.g.,
d8b94dbd
LC
6774configuring network access.
6775
dd17bc38
AK
6776Services are managed by the GNU@tie{}Shepherd (@pxref{Introduction,,,
6777shepherd, The GNU Shepherd Manual}). On a running system, the
6778@command{herd} command allows you to list the available services, show
6779their status, start and stop them, or do other specific operations
6780(@pxref{Jump Start,,, shepherd, The GNU Shepherd Manual}). For example:
d8b94dbd
LC
6781
6782@example
dd17bc38 6783# herd status
d8b94dbd
LC
6784@end example
6785
6786The above command, run as @code{root}, lists the currently defined
dd17bc38 6787services. The @command{herd doc} command shows a synopsis of the given
d8b94dbd
LC
6788service:
6789
6790@example
dd17bc38 6791# herd doc nscd
d8b94dbd
LC
6792Run libc's name service cache daemon (nscd).
6793@end example
6794
6795The @command{start}, @command{stop}, and @command{restart} sub-commands
6796have the effect you would expect. For instance, the commands below stop
6797the nscd service and restart the Xorg display server:
6798
6799@example
dd17bc38 6800# herd stop nscd
d8b94dbd 6801Service nscd has been stopped.
dd17bc38 6802# herd restart xorg-server
d8b94dbd
LC
6803Service xorg-server has been stopped.
6804Service xorg-server has been started.
6805@end example
401c53c4 6806
cf4a9129 6807The following sections document the available services, starting with
d8b94dbd
LC
6808the core services, that may be used in an @code{operating-system}
6809declaration.
401c53c4 6810
cf4a9129
LC
6811@menu
6812* Base Services:: Essential system services.
6813* Networking Services:: Network setup, SSH daemon, etc.
6814* X Window:: Graphical display.
fe1a39d3 6815* Desktop Services:: D-Bus and desktop services.
105369a4 6816* Database Services:: SQL databases.
d8c18af8 6817* Mail Services:: IMAP, POP3, SMTP, and all that.
58724c48 6818* Web Services:: Web servers.
aa4ed923 6819* Various Services:: Other services.
cf4a9129 6820@end menu
401c53c4 6821
cf4a9129
LC
6822@node Base Services
6823@subsubsection Base Services
a1ba8475 6824
cf4a9129
LC
6825The @code{(gnu services base)} module provides definitions for the basic
6826services that one expects from the system. The services exported by
6827this module are listed below.
401c53c4 6828
cf4a9129 6829@defvr {Scheme Variable} %base-services
31771497
LC
6830This variable contains a list of basic services (@pxref{Service Types
6831and Services}, for more information on service objects) one would
cf4a9129
LC
6832expect from the system: a login service (mingetty) on each tty, syslogd,
6833libc's name service cache daemon (nscd), the udev device manager, and
6834more.
401c53c4 6835
cf4a9129
LC
6836This is the default value of the @code{services} field of
6837@code{operating-system} declarations. Usually, when customizing a
6838system, you will want to append services to @var{%base-services}, like
6839this:
401c53c4 6840
cf4a9129 6841@example
fa1e31b8 6842(cons* (avahi-service) (lsh-service) %base-services)
cf4a9129
LC
6843@end example
6844@end defvr
401c53c4 6845
be1c2c54 6846@deffn {Scheme Procedure} host-name-service @var{name}
cf4a9129
LC
6847Return a service that sets the host name to @var{name}.
6848@end deffn
401c53c4 6849
66e4f01c
LC
6850@deffn {Scheme Procedure} mingetty-service @var{config}
6851Return a service to run mingetty according to @var{config}, a
6852@code{<mingetty-configuration>} object, which specifies the tty to run, among
6853other things.
cf4a9129 6854@end deffn
401c53c4 6855
66e4f01c
LC
6856@deftp {Data Type} mingetty-configuration
6857This is the data type representing the configuration of Mingetty, which
6858implements console log-in.
6859
6860@table @asis
6861
6862@item @code{tty}
6863The name of the console this Mingetty runs on---e.g., @code{"tty1"}.
6864
6865@item @code{motd}
6866A file-like object containing the ``message of the day''.
6867
6868@item @code{auto-login} (default: @code{#f})
6869When true, this field must be a string denoting the user name under
f9b9a033 6870which the system automatically logs in. When it is @code{#f}, a
66e4f01c
LC
6871user name and password must be entered to log in.
6872
6873@item @code{login-program} (default: @code{#f})
6874This must be either @code{#f}, in which case the default log-in program
6875is used (@command{login} from the Shadow tool suite), or a gexp denoting
6876the name of the log-in program.
6877
6878@item @code{login-pause?} (default: @code{#f})
6879When set to @code{#t} in conjunction with @var{auto-login}, the user
6880will have to press a key before the log-in shell is launched.
6881
6882@item @code{mingetty} (default: @var{mingetty})
6883The Mingetty package to use.
6884
6885@end table
6886@end deftp
6887
6454b333
LC
6888@cindex name service cache daemon
6889@cindex nscd
be1c2c54 6890@deffn {Scheme Procedure} nscd-service [@var{config}] [#:glibc glibc] @
4aee6e60 6891 [#:name-services '()]
b893f1ae
LC
6892Return a service that runs libc's name service cache daemon (nscd) with the
6893given @var{config}---an @code{<nscd-configuration>} object. @xref{Name
6894Service Switch}, for an example.
cf4a9129 6895@end deffn
401c53c4 6896
6454b333
LC
6897@defvr {Scheme Variable} %nscd-default-configuration
6898This is the default @code{<nscd-configuration>} value (see below) used
6899by @code{nscd-service}. This uses the caches defined by
6900@var{%nscd-default-caches}; see below.
6901@end defvr
6902
6903@deftp {Data Type} nscd-configuration
6904This is the type representing the name service cache daemon (nscd)
6905configuration.
6906
6907@table @asis
6908
b893f1ae
LC
6909@item @code{name-services} (default: @code{'()})
6910List of packages denoting @dfn{name services} that must be visible to
6911the nscd---e.g., @code{(list @var{nss-mdns})}.
6912
6913@item @code{glibc} (default: @var{glibc})
6914Package object denoting the GNU C Library providing the @command{nscd}
6915command.
6916
6454b333
LC
6917@item @code{log-file} (default: @code{"/var/log/nscd.log"})
6918Name of nscd's log file. This is where debugging output goes when
6919@code{debug-level} is strictly positive.
6920
6921@item @code{debug-level} (default: @code{0})
6922Integer denoting the debugging levels. Higher numbers mean more
6923debugging output is logged.
6924
6925@item @code{caches} (default: @var{%nscd-default-caches})
6926List of @code{<nscd-cache>} objects denoting things to be cached; see
6927below.
6928
6929@end table
6930@end deftp
6931
6932@deftp {Data Type} nscd-cache
6933Data type representing a cache database of nscd and its parameters.
6934
6935@table @asis
6936
6937@item @code{database}
6938This is a symbol representing the name of the database to be cached.
6939Valid values are @code{passwd}, @code{group}, @code{hosts}, and
6940@code{services}, which designate the corresponding NSS database
6941(@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
6942
6943@item @code{positive-time-to-live}
6944@itemx @code{negative-time-to-live} (default: @code{20})
6945A number representing the number of seconds during which a positive or
6946negative lookup result remains in cache.
6947
6948@item @code{check-files?} (default: @code{#t})
6949Whether to check for updates of the files corresponding to
6950@var{database}.
6951
6952For instance, when @var{database} is @code{hosts}, setting this flag
6953instructs nscd to check for updates in @file{/etc/hosts} and to take
6954them into account.
6955
6956@item @code{persistent?} (default: @code{#t})
6957Whether the cache should be stored persistently on disk.
6958
6959@item @code{shared?} (default: @code{#t})
6960Whether the cache should be shared among users.
6961
6962@item @code{max-database-size} (default: 32@tie{}MiB)
6963Maximum size in bytes of the database cache.
6964
6965@c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
6966@c settings, so leave them out.
6967
6968@end table
6969@end deftp
6970
6971@defvr {Scheme Variable} %nscd-default-caches
6972List of @code{<nscd-cache>} objects used by default by
6973@code{nscd-configuration} (see above.)
6974
6975It enables persistent and aggressive caching of service and host name
6976lookups. The latter provides better host name lookup performance,
6977resilience in the face of unreliable name servers, and also better
6978privacy---often the result of host name lookups is in local cache, so
6979external name servers do not even need to be queried.
6980@end defvr
6981
6982
be1c2c54 6983@deffn {Scheme Procedure} syslog-service [#:config-file #f]
1bb76f75
AK
6984Return a service that runs @code{syslogd}. If configuration file name
6985@var{config-file} is not specified, use some reasonable default
cf4a9129
LC
6986settings.
6987@end deffn
401c53c4 6988
0adfe95a
LC
6989@anchor{guix-configuration-type}
6990@deftp {Data Type} guix-configuration
6991This data type represents the configuration of the Guix build daemon.
6992@xref{Invoking guix-daemon}, for more information.
6993
6994@table @asis
6995@item @code{guix} (default: @var{guix})
6996The Guix package to use.
401c53c4 6997
0adfe95a
LC
6998@item @code{build-group} (default: @code{"guixbuild"})
6999Name of the group for build user accounts.
401c53c4 7000
0adfe95a
LC
7001@item @code{build-accounts} (default: @code{10})
7002Number of build user accounts to create.
401c53c4 7003
0adfe95a
LC
7004@item @code{authorize-key?} (default: @code{#t})
7005Whether to authorize the substitute key for @code{hydra.gnu.org}
7006(@pxref{Substitutes}).
7007
7008@item @code{use-substitutes?} (default: @code{#t})
7009Whether to use substitutes.
7010
b0b9f6e0
LC
7011@item @code{substitute-urls} (default: @var{%default-substitute-urls})
7012The list of URLs where to look for substitutes by default.
7013
0adfe95a
LC
7014@item @code{extra-options} (default: @code{'()})
7015List of extra command-line options for @command{guix-daemon}.
7016
7017@item @code{lsof} (default: @var{lsof})
7018@itemx @code{lsh} (default: @var{lsh})
7019The lsof and lsh packages to use.
7020
7021@end table
7022@end deftp
7023
7024@deffn {Scheme Procedure} guix-service @var{config}
7025Return a service that runs the Guix build daemon according to
7026@var{config}.
cf4a9129 7027@end deffn
a1ba8475 7028
be1c2c54 7029@deffn {Scheme Procedure} udev-service [#:udev udev]
cf4a9129
LC
7030Run @var{udev}, which populates the @file{/dev} directory dynamically.
7031@end deffn
401c53c4 7032
be1c2c54 7033@deffn {Scheme Procedure} console-keymap-service @var{file}
dedb8d5e 7034@cindex keyboard layout
5eca9459
AK
7035Return a service to load console keymap from @var{file} using
7036@command{loadkeys} command.
7037@end deffn
7038
8664cc88
LC
7039@deffn {Scheme Procedure} gpm-service-type [#:gpm @var{gpm}] @
7040 [#:options]
7041Run @var{gpm}, the general-purpose mouse daemon, with the given
7042command-line @var{options}. GPM allows users to use the mouse in the console,
7043notably to select, copy, and paste text. The default value of @var{options}
7044uses the @code{ps2} protocol, which works for both USB and PS/2 mice.
7045
7046This service is not part of @var{%base-services}.
7047@end deffn
7048
1c52181f
LC
7049@anchor{guix-publish-service}
7050@deffn {Scheme Procedure} guix-publish-service [#:guix @var{guix}] @
7051 [#:port 80] [#:host "localhost"]
7052Return a service that runs @command{guix publish} listening on @var{host}
7053and @var{port} (@pxref{Invoking guix publish}).
7054
7055This assumes that @file{/etc/guix} already contains a signing key pair as
7056created by @command{guix archive --generate-key} (@pxref{Invoking guix
7057archive}). If that is not the case, the service will fail to start.
7058@end deffn
7059
a69576ea 7060
cf4a9129
LC
7061@node Networking Services
7062@subsubsection Networking Services
401c53c4 7063
fa1e31b8 7064The @code{(gnu services networking)} module provides services to configure
cf4a9129 7065the network interface.
a1ba8475 7066
a023cca8 7067@cindex DHCP, networking service
be1c2c54 7068@deffn {Scheme Procedure} dhcp-client-service [#:dhcp @var{isc-dhcp}]
a023cca8
LC
7069Return a service that runs @var{dhcp}, a Dynamic Host Configuration
7070Protocol (DHCP) client, on all the non-loopback network interfaces.
7071@end deffn
7072
be1c2c54 7073@deffn {Scheme Procedure} static-networking-service @var{interface} @var{ip} @
cf4a9129
LC
7074 [#:gateway #f] [#:name-services @code{'()}]
7075Return a service that starts @var{interface} with address @var{ip}. If
7076@var{gateway} is true, it must be a string specifying the default network
7077gateway.
7078@end deffn
8b315a6d 7079
b7d0c494 7080@cindex wicd
87f40011 7081@cindex network management
be1c2c54 7082@deffn {Scheme Procedure} wicd-service [#:wicd @var{wicd}]
87f40011
LC
7083Return a service that runs @url{https://launchpad.net/wicd,Wicd}, a network
7084management daemon that aims to simplify wired and wireless networking.
7085
7086This service adds the @var{wicd} package to the global profile, providing
7087several commands to interact with the daemon and configure networking:
7088@command{wicd-client}, a graphical user interface, and the @command{wicd-cli}
7089and @command{wicd-curses} user interfaces.
b7d0c494
MW
7090@end deffn
7091
c0a9589d
SB
7092@cindex NetworkManager
7093@deffn {Scheme Procedure} network-manager-service @
7094 [#:network-manager @var{network-manager}]
7095Return a service that runs NetworkManager, a network connection manager
7096that attempting to keep active network connectivity when available.
7097@end deffn
7098
be1c2c54 7099@deffn {Scheme Procedure} ntp-service [#:ntp @var{ntp}] @
63854bcb
LC
7100 [#:name-service @var{%ntp-servers}]
7101Return a service that runs the daemon from @var{ntp}, the
7102@uref{http://www.ntp.org, Network Time Protocol package}. The daemon will
7103keep the system clock synchronized with that of @var{servers}.
7104@end deffn
7105
7106@defvr {Scheme Variable} %ntp-servers
7107List of host names used as the default NTP servers.
7108@end defvr
7109
375c6108
LC
7110@deffn {Scheme Procedure} tor-service [@var{config-file}] [#:tor @var{tor}]
7111Return a service to run the @uref{https://torproject.org, Tor} anonymous
7112networking daemon.
8b315a6d 7113
375c6108 7114The daemon runs as the @code{tor} unprivileged user. It is passed
6331bde7
LC
7115@var{config-file}, a file-like object, with an additional @code{User tor} line
7116and lines for hidden services added via @code{tor-hidden-service}. Run
7117@command{man tor} for information about the configuration file.
7118@end deffn
7119
24a8ef3b 7120@cindex hidden service
6331bde7
LC
7121@deffn {Scheme Procedure} tor-hidden-service @var{name} @var{mapping}
7122Define a new Tor @dfn{hidden service} called @var{name} and implementing
7123@var{mapping}. @var{mapping} is a list of port/host tuples, such as:
7124
7125@example
24a8ef3b
LC
7126 '((22 "127.0.0.1:22")
7127 (80 "127.0.0.1:8080"))
6331bde7
LC
7128@end example
7129
7130In this example, port 22 of the hidden service is mapped to local port 22, and
7131port 80 is mapped to local port 8080.
7132
6629099a
LC
7133This creates a @file{/var/lib/tor/hidden-services/@var{name}} directory, where
7134the @file{hostname} file contains the @code{.onion} host name for the hidden
6331bde7
LC
7135service.
7136
7137See @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, the Tor
7138project's documentation} for more information.
cf4a9129 7139@end deffn
8b315a6d 7140
be1c2c54 7141@deffn {Scheme Procedure} bitlbee-service [#:bitlbee bitlbee] @
4627a464
LC
7142 [#:interface "127.0.0.1"] [#:port 6667] @
7143 [#:extra-settings ""]
7144Return a service that runs @url{http://bitlbee.org,BitlBee}, a daemon that
7145acts as a gateway between IRC and chat networks.
7146
7147The daemon will listen to the interface corresponding to the IP address
7148specified in @var{interface}, on @var{port}. @code{127.0.0.1} means that only
7149local clients can connect, whereas @code{0.0.0.0} means that connections can
7150come from any networking interface.
7151
7152In addition, @var{extra-settings} specifies a string to append to the
7153configuration file.
7154@end deffn
7155
f4391bec 7156Furthermore, @code{(gnu services ssh)} provides the following service.
8b315a6d 7157
be1c2c54 7158@deffn {Scheme Procedure} lsh-service [#:host-key "/etc/lsh/host-key"] @
5833bf33 7159 [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
cf4a9129
LC
7160 [#:allow-empty-passwords? #f] [#:root-login? #f] @
7161 [#:syslog-output? #t] [#:x11-forwarding? #t] @
7162 [#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
21cc905a 7163 [#:public-key-authentication? #t] [#:initialize? #t]
cf4a9129
LC
7164Run the @command{lshd} program from @var{lsh} to listen on port @var{port-number}.
7165@var{host-key} must designate a file containing the host key, and readable
7166only by root.
72e25e35 7167
5833bf33
DP
7168When @var{daemonic?} is true, @command{lshd} will detach from the
7169controlling terminal and log its output to syslogd, unless one sets
7170@var{syslog-output?} to false. Obviously, it also makes lsh-service
7171depend on existence of syslogd service. When @var{pid-file?} is true,
7172@command{lshd} writes its PID to the file called @var{pid-file}.
7173
cf4a9129
LC
7174When @var{initialize?} is true, automatically create the seed and host key
7175upon service activation if they do not exist yet. This may take long and
7176require interaction.
8b315a6d 7177
20dd519c
LC
7178When @var{initialize?} is false, it is up to the user to initialize the
7179randomness generator (@pxref{lsh-make-seed,,, lsh, LSH Manual}), and to create
7180a key pair with the private key stored in file @var{host-key} (@pxref{lshd
7181basics,,, lsh, LSH Manual}).
7182
cf4a9129
LC
7183When @var{interfaces} is empty, lshd listens for connections on all the
7184network interfaces; otherwise, @var{interfaces} must be a list of host names
7185or addresses.
9bf3c1a7 7186
20dd519c
LC
7187@var{allow-empty-passwords?} specifies whether to accept log-ins with empty
7188passwords, and @var{root-login?} specifies whether to accept log-ins as
cf4a9129 7189root.
4af2447e 7190
cf4a9129
LC
7191The other options should be self-descriptive.
7192@end deffn
4af2447e 7193
fa0c1d61
LC
7194@defvr {Scheme Variable} %facebook-host-aliases
7195This variable contains a string for use in @file{/etc/hosts}
7196(@pxref{Host Names,,, libc, The GNU C Library Reference Manual}). Each
7197line contains a entry that maps a known server name of the Facebook
7198on-line service---e.g., @code{www.facebook.com}---to the local
7199host---@code{127.0.0.1} or its IPv6 equivalent, @code{::1}.
7200
7201This variable is typically used in the @code{hosts-file} field of an
7313a52e
LC
7202@code{operating-system} declaration (@pxref{operating-system Reference,
7203@file{/etc/hosts}}):
fa0c1d61
LC
7204
7205@example
7206(use-modules (gnu) (guix))
7207
7208(operating-system
7209 (host-name "mymachine")
7210 ;; ...
7211 (hosts-file
7212 ;; Create a /etc/hosts file with aliases for "localhost"
7213 ;; and "mymachine", as well as for Facebook servers.
24e02c28
LC
7214 (plain-file "hosts"
7215 (string-append (local-host-aliases host-name)
7216 %facebook-host-aliases))))
fa0c1d61
LC
7217@end example
7218
7219This mechanism can prevent programs running locally, such as Web
7220browsers, from accessing Facebook.
7221@end defvr
7222
965a7332
LC
7223The @code{(gnu services avahi)} provides the following definition.
7224
be1c2c54 7225@deffn {Scheme Procedure} avahi-service [#:avahi @var{avahi}] @
965a7332
LC
7226 [#:host-name #f] [#:publish? #t] [#:ipv4? #t] @
7227 [#:ipv6? #t] [#:wide-area? #f] @
7228 [#:domains-to-browse '()]
7229Return a service that runs @command{avahi-daemon}, a system-wide
7230mDNS/DNS-SD responder that allows for service discovery and
cc9c1f39
LC
7231"zero-configuration" host name lookups (see @uref{http://avahi.org/}), and
7232extends the name service cache daemon (nscd) so that it can resolve
7233@code{.local} host names using
1065bed9
LC
7234@uref{http://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. Additionally,
7235add the @var{avahi} package to the system profile so that commands such as
7236@command{avahi-browse} are directly usable.
965a7332
LC
7237
7238If @var{host-name} is different from @code{#f}, use that as the host name to
7239publish for this machine; otherwise, use the machine's actual host name.
7240
7241When @var{publish?} is true, publishing of host names and services is allowed;
7242in particular, avahi-daemon will publish the machine's host name and IP
7243address via mDNS on the local network.
7244
7245When @var{wide-area?} is true, DNS-SD over unicast DNS is enabled.
7246
7247Boolean values @var{ipv4?} and @var{ipv6?} determine whether to use IPv4/IPv6
7248sockets.
7249@end deffn
7250
7251
cf4a9129
LC
7252@node X Window
7253@subsubsection X Window
68ad877c 7254
cf4a9129
LC
7255Support for the X Window graphical display system---specifically
7256Xorg---is provided by the @code{(gnu services xorg)} module. Note that
7257there is no @code{xorg-service} procedure. Instead, the X server is
7258started by the @dfn{login manager}, currently SLiM.
4af2447e 7259
be1c2c54 7260@deffn {Scheme Procedure} slim-service [#:allow-empty-passwords? #f] @
0ecc3bf3
LC
7261 [#:auto-login? #f] [#:default-user ""] [#:startx] @
7262 [#:theme @var{%default-slim-theme}] @
4bd43bbe 7263 [#:theme-name @var{%default-slim-theme-name}]
cf4a9129
LC
7264Return a service that spawns the SLiM graphical login manager, which in
7265turn starts the X display server with @var{startx}, a command as returned by
7266@code{xorg-start-command}.
4af2447e 7267
04e4e6ab
LC
7268@cindex X session
7269
7270SLiM automatically looks for session types described by the @file{.desktop}
7271files in @file{/run/current-system/profile/share/xsessions} and allows users
7272to choose a session from the log-in screen using @kbd{F1}. Packages such as
7273@var{xfce}, @var{sawfish}, and @var{ratpoison} provide @file{.desktop} files;
7274adding them to the system-wide set of packages automatically makes them
7275available at the log-in screen.
7276
7277In addition, @file{~/.xsession} files are honored. When available,
7278@file{~/.xsession} must be an executable that starts a window manager
7279and/or other X clients.
7280
cf4a9129
LC
7281When @var{allow-empty-passwords?} is true, allow logins with an empty
7282password. When @var{auto-login?} is true, log in automatically as
7283@var{default-user}.
0ecc3bf3
LC
7284
7285If @var{theme} is @code{#f}, the use the default log-in theme; otherwise
7286@var{theme} must be a gexp denoting the name of a directory containing the
7287theme to use. In that case, @var{theme-name} specifies the name of the
7288theme.
cf4a9129 7289@end deffn
4af2447e 7290
0ecc3bf3
LC
7291@defvr {Scheme Variable} %default-theme
7292@defvrx {Scheme Variable} %default-theme-name
7293The G-Expression denoting the default SLiM theme and its name.
7294@end defvr
7295
be1c2c54 7296@deffn {Scheme Procedure} xorg-start-command [#:guile] @
d1cdd7ba 7297 [#:configuration-file #f] [#:xorg-server @var{xorg-server}]
f703413e 7298Return a derivation that builds a @var{guile} script to start the X server
d1cdd7ba
LC
7299from @var{xorg-server}. @var{configuration-file} is the server configuration
7300file or a derivation that builds it; when omitted, the result of
7301@code{xorg-configuration-file} is used.
7302
7303Usually the X server is started by a login manager.
7304@end deffn
7305
be1c2c54 7306@deffn {Scheme Procedure} xorg-configuration-file @
12422c9d 7307 [#:drivers '()] [#:resolutions '()] [#:extra-config '()]
d1cdd7ba
LC
7308Return a configuration file for the Xorg server containing search paths for
7309all the common drivers.
f703413e
LC
7310
7311@var{drivers} must be either the empty list, in which case Xorg chooses a
7312graphics driver automatically, or a list of driver names that will be tried in
d1cdd7ba 7313this order---e.g., @code{(\"modesetting\" \"vesa\")}.
d2e59637
LC
7314
7315Likewise, when @var{resolutions} is the empty list, Xorg chooses an
7316appropriate screen resolution; otherwise, it must be a list of
7317resolutions---e.g., @code{((1024 768) (640 480))}.
12422c9d
LC
7318
7319Last, @var{extra-config} is a list of strings or objects appended to the
7320@code{text-file*} argument list. It is used to pass extra text to be added
7321verbatim to the configuration file.
f703413e 7322@end deffn
4af2447e 7323
6726282b
LC
7324@deffn {Scheme Procedure} screen-locker-service @var{package} [@var{name}]
7325Add @var{package}, a package for a screen-locker or screen-saver whose
7326command is @var{program}, to the set of setuid programs and add a PAM entry
7327for it. For example:
7328
7329@lisp
7330(screen-locker-service xlockmore "xlock")
7331@end lisp
7332
7333makes the good ol' XlockMore usable.
7334@end deffn
7335
7336
fe1a39d3
LC
7337@node Desktop Services
7338@subsubsection Desktop Services
aa4ed923 7339
fe1a39d3
LC
7340The @code{(gnu services desktop)} module provides services that are
7341usually useful in the context of a ``desktop'' setup---that is, on a
7342machine running a graphical display server, possibly with graphical user
7343interfaces, etc.
aa4ed923 7344
4467be21
LC
7345To simplify things, the module defines a variable containing the set of
7346services that users typically expect on a machine with a graphical
7347environment and networking:
7348
7349@defvr {Scheme Variable} %desktop-services
7350This is a list of services that builds upon @var{%base-services} and
7351adds or adjust services for a typical ``desktop'' setup.
7352
7353In particular, it adds a graphical login manager (@pxref{X Window,
6726282b
LC
7354@code{slim-service}}), screen lockers,
7355a network management tool (@pxref{Networking
4467be21 7356Services, @code{wicd-service}}), energy and color management services,
4650a77e 7357the @code{elogind} login and seat manager, the Polkit privilege service,
cee32ee4
AW
7358the GeoClue location service, an NTP client (@pxref{Networking
7359Services}), the Avahi daemon, and has the name service switch service
7360configured to be able to use @code{nss-mdns} (@pxref{Name Service
7361Switch, mDNS}).
4467be21
LC
7362@end defvr
7363
7364The @var{%desktop-services} variable can be used as the @code{services}
7365field of an @code{operating-system} declaration (@pxref{operating-system
7366Reference, @code{services}}).
7367
0adfe95a
LC
7368The actual service definitions provided by @code{(gnu services dbus)}
7369and @code{(gnu services desktop)} are described below.
4467be21 7370
0adfe95a 7371@deffn {Scheme Procedure} dbus-service [#:dbus @var{dbus}] [#:services '()]
fe1a39d3
LC
7372Return a service that runs the ``system bus'', using @var{dbus}, with
7373support for @var{services}.
aa4ed923 7374
fe1a39d3
LC
7375@uref{http://dbus.freedesktop.org/, D-Bus} is an inter-process communication
7376facility. Its system bus is used to allow system services to communicate
7377and be notified of system-wide events.
aa4ed923 7378
fe1a39d3
LC
7379@var{services} must be a list of packages that provide an
7380@file{etc/dbus-1/system.d} directory containing additional D-Bus configuration
7381and policy files. For example, to allow avahi-daemon to use the system bus,
7382@var{services} must be equal to @code{(list avahi)}.
aa4ed923
AK
7383@end deffn
7384
0adfe95a 7385@deffn {Scheme Procedure} elogind-service [#:config @var{config}]
4650a77e
AW
7386Return a service that runs the @code{elogind} login and
7387seat management daemon. @uref{https://github.com/andywingo/elogind,
7388Elogind} exposes a D-Bus interface that can be used to know which users
7389are logged in, know what kind of sessions they have open, suspend the
7390system, inhibit system suspend, reboot the system, and other tasks.
7391
7392Elogind handles most system-level power events for a computer, for
7393example suspending the system when a lid is closed, or shutting it down
7394when the power button is pressed.
7395
7396The @var{config} keyword argument specifies the configuration for
7397elogind, and should be the result of a @code{(elogind-configuration
7398(@var{parameter} @var{value})...)} invocation. Available parameters and
7399their default values are:
7400
7401@table @code
7402@item kill-user-processes?
7403@code{#f}
7404@item kill-only-users
7405@code{()}
7406@item kill-exclude-users
7407@code{("root")}
7408@item inhibit-delay-max-seconds
7409@code{5}
7410@item handle-power-key
7411@code{poweroff}
7412@item handle-suspend-key
7413@code{suspend}
7414@item handle-hibernate-key
7415@code{hibernate}
7416@item handle-lid-switch
7417@code{suspend}
7418@item handle-lid-switch-docked
7419@code{ignore}
7420@item power-key-ignore-inhibited?
7421@code{#f}
7422@item suspend-key-ignore-inhibited?
7423@code{#f}
7424@item hibernate-key-ignore-inhibited?
7425@code{#f}
7426@item lid-switch-ignore-inhibited?
7427@code{#t}
7428@item holdoff-timeout-seconds
7429@code{30}
7430@item idle-action
7431@code{ignore}
7432@item idle-action-seconds
7433@code{(* 30 60)}
7434@item runtime-directory-size-percent
7435@code{10}
7436@item runtime-directory-size
7437@code{#f}
7438@item remove-ipc?
7439@code{#t}
7440@item suspend-state
7441@code{("mem" "standby" "freeze")}
7442@item suspend-mode
7443@code{()}
7444@item hibernate-state
7445@code{("disk")}
7446@item hibernate-mode
7447@code{("platform" "shutdown")}
7448@item hybrid-sleep-state
7449@code{("disk")}
7450@item hybrid-sleep-mode
7451@code{("suspend" "platform" "shutdown")}
7452@end table
7453@end deffn
7454
be1c2c54 7455@deffn {Scheme Procedure} polkit-service @
4650a77e 7456 [#:polkit @var{polkit}]
222e3319
LC
7457Return a service that runs the
7458@uref{http://www.freedesktop.org/wiki/Software/polkit/, Polkit privilege
7459management service}, which allows system administrators to grant access to
7460privileged operations in a structured way. By querying the Polkit service, a
7461privileged system component can know when it should grant additional
7462capabilities to ordinary users. For example, an ordinary user can be granted
7463the capability to suspend the system if the user is logged in locally.
4650a77e
AW
7464@end deffn
7465
be1c2c54 7466@deffn {Scheme Procedure} upower-service [#:upower @var{upower}] @
be234128
AW
7467 [#:watts-up-pro? #f] @
7468 [#:poll-batteries? #t] @
7469 [#:ignore-lid? #f] @
7470 [#:use-percentage-for-policy? #f] @
7471 [#:percentage-low 10] @
7472 [#:percentage-critical 3] @
7473 [#:percentage-action 2] @
7474 [#:time-low 1200] @
7475 [#:time-critical 300] @
7476 [#:time-action 120] @
7477 [#:critical-power-action 'hybrid-sleep]
7478Return a service that runs @uref{http://upower.freedesktop.org/,
7479@command{upowerd}}, a system-wide monitor for power consumption and battery
7480levels, with the given configuration settings. It implements the
7481@code{org.freedesktop.UPower} D-Bus interface, and is notably used by
7482GNOME.
7483@end deffn
7484
2b9e0a94
LC
7485@deffn {Scheme Procedure} udisks-service [#:udisks @var{udisks}]
7486Return a service for @uref{http://udisks.freedesktop.org/docs/latest/,
7487UDisks}, a @dfn{disk management} daemon that provides user interfaces with
7488notifications and ways to mount/unmount disks. Programs that talk to UDisks
7489include the @command{udisksctl} command, part of UDisks, and GNOME Disks.
7490@end deffn
7491
be1c2c54 7492@deffn {Scheme Procedure} colord-service [#:colord @var{colord}]
7ce597ff
AW
7493Return a service that runs @command{colord}, a system service with a D-Bus
7494interface to manage the color profiles of input and output devices such as
7495screens and scanners. It is notably used by the GNOME Color Manager graphical
7496tool. See @uref{http://www.freedesktop.org/software/colord/, the colord web
7497site} for more information.
7498@end deffn
7499
cee32ee4
AW
7500@deffn {Scheme Procedure} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()]
7501Return an configuration allowing an application to access GeoClue
7502location data. @var{name} is the Desktop ID of the application, without
7503the @code{.desktop} part. If @var{allowed?} is true, the application
7504will have access to location information by default. The boolean
7505@var{system?} value indicates that an application is a system component
7506or not. Finally @var{users} is a list of UIDs of all users for which
7507this application is allowed location info access. An empty users list
7508means that all users are allowed.
7509@end deffn
7510
7511@defvr {Scheme Variable} %standard-geoclue-applications
7512The standard list of well-known GeoClue application configurations,
7513granting authority to GNOME's date-and-time utility to ask for the
7514current location in order to set the time zone, and allowing the Firefox
7515(IceCat) and Epiphany web browsers to request location information.
7516Firefox and Epiphany both query the user before allowing a web page to
7517know the user's location.
7518@end defvr
7519
be1c2c54 7520@deffn {Scheme Procedure} geoclue-service [#:colord @var{colord}] @
cee32ee4
AW
7521 [#:whitelist '()] @
7522 [#:wifi-geolocation-url "https://location.services.mozilla.com/v1/geolocate?key=geoclue"] @
7523 [#:submit-data? #f]
7524 [#:wifi-submission-url "https://location.services.mozilla.com/v1/submit?key=geoclue"] @
7525 [#:submission-nick "geoclue"] @
7526 [#:applications %standard-geoclue-applications]
7527Return a service that runs the GeoClue location service. This service
7528provides a D-Bus interface to allow applications to request access to a
7529user's physical location, and optionally to add information to online
7530location databases. See
7531@uref{https://wiki.freedesktop.org/www/Software/GeoClue/, the GeoClue
7532web site} for more information.
7533@end deffn
7534
105369a4
DT
7535@node Database Services
7536@subsubsection Database Services
7537
7538The @code{(gnu services databases)} module provides the following service.
7539
be1c2c54 7540@deffn {Scheme Procedure} postgresql-service [#:postgresql postgresql] @
105369a4
DT
7541 [#:config-file] [#:data-directory ``/var/lib/postgresql/data'']
7542Return a service that runs @var{postgresql}, the PostgreSQL database
7543server.
7544
7545The PostgreSQL daemon loads its runtime configuration from
7546@var{config-file} and stores the database cluster in
7547@var{data-directory}.
7548@end deffn
fe1a39d3 7549
d8c18af8
AW
7550@node Mail Services
7551@subsubsection Mail Services
7552
7553The @code{(gnu services mail)} module provides Guix service definitions
7554for mail services. Currently the only implemented service is Dovecot,
7555an IMAP, POP3, and LMTP server.
7556
7557Guix does not yet have a mail transfer agent (MTA), although for some
7558lightweight purposes the @code{esmtp} relay-only MTA may suffice. Help
7559is needed to properly integrate a full MTA, such as Postfix. Patches
7560welcome!
7561
7562To add an IMAP/POP3 server to a GuixSD system, add a
7563@code{dovecot-service} to the operating system definition:
7564
7565@deffn {Scheme Procedure} dovecot-service [#:config (dovecot-configuration)]
7566Return a service that runs the Dovecot IMAP/POP3/LMTP mail server.
7567@end deffn
7568
7569By default, Dovecot doesn't need much configuration; the default
7570configuration object created by @code{(dovecot-configuration)} will
7571suffice if your mail is delivered to @code{~/Maildir}. A self-signed
7572certificate will be generated for TLS-protected connections, though
7573Dovecot will also listen on cleartext ports by default. There are a
7574number of options though which mail administrators might need to change,
7575and as is the case with other services, Guix allows the system
7576administrator to specify these parameters via a uniform Scheme interface.
7577
7578For example, to specify that mail is located at @code{maildir~/.mail},
7579one would instantiate the Dovecot service like this:
7580
7581@example
7582(dovecot-service #:config
7583 (dovecot-configuration
7584 (mail-location "maildir:~/.mail")))
7585@end example
7586
7587The available configuration parameters follow. Each parameter
7588definition is preceded by its type; for example, @samp{string-list foo}
7589indicates that the @code{foo} parameter should be specified as a list of
7590strings. There is also a way to specify the configuration as a string,
7591if you have an old @code{dovecot.conf} file that you want to port over
7592from some other system; see the end for more details.
7593
7594@c The following documentation was initially generated by
7595@c (generate-documentation) in (gnu services mail). Manually maintained
7596@c documentation is better, so we shouldn't hesitate to edit below as
7597@c needed. However if the change you want to make to this documentation
7598@c can be done in an automated way, it's probably easier to change
7599@c (generate-documentation) than to make it below and have to deal with
7600@c the churn as dovecot updates.
7601
7602Available @code{dovecot-configuration} fields are:
7603
7604@deftypevr {@code{dovecot-configuration} parameter} package dovecot
7605The dovecot package.
7606@end deftypevr
7607
7608@deftypevr {@code{dovecot-configuration} parameter} comma-separated-string-list listen
7609A list of IPs or hosts where to listen in for connections. @samp{*}
7610listens in all IPv4 interfaces, @samp{::} listens in all IPv6
7611interfaces. If you want to specify non-default ports or anything more
7612complex, customize the address and port fields of the
7613@samp{inet-listener} of the specific services you are interested in.
7614@end deftypevr
7615
7616@deftypevr {@code{dovecot-configuration} parameter} protocol-configuration-list protocols
7617List of protocols we want to serve. Available protocols include
7618@samp{imap}, @samp{pop3}, and @samp{lmtp}.
7619
7620Available @code{protocol-configuration} fields are:
7621
7622@deftypevr {@code{protocol-configuration} parameter} string name
7623The name of the protocol.
7624@end deftypevr
7625
7626@deftypevr {@code{protocol-configuration} parameter} string auth-socket-path
7627UNIX socket path to master authentication server to find users.
7628This is used by imap (for shared users) and lda.
7629Defaults to @samp{"/var/run/dovecot/auth-userdb"}.
7630@end deftypevr
7631
7632@deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins
7633Space separated list of plugins to load.
7634@end deftypevr
7635
7636@deftypevr {@code{protocol-configuration} parameter} non-negative-integer mail-max-userip-connections
7637Maximum number of IMAP connections allowed for a user from each IP
7638address. NOTE: The username is compared case-sensitively.
7639Defaults to @samp{10}.
7640@end deftypevr
7641
7642@end deftypevr
7643
7644@deftypevr {@code{dovecot-configuration} parameter} service-configuration-list services
7645List of services to enable. Available services include @samp{imap},
7646@samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}, and
7647@samp{lmtp}.
7648
7649Available @code{service-configuration} fields are:
7650
7651@deftypevr {@code{service-configuration} parameter} string kind
7652The service kind. Valid values include @code{director},
7653@code{imap-login}, @code{pop3-login}, @code{lmtp}, @code{imap},
7654@code{pop3}, @code{auth}, @code{auth-worker}, @code{dict},
7655@code{tcpwrap}, @code{quota-warning}, or anything else.
7656@end deftypevr
7657
7658@deftypevr {@code{service-configuration} parameter} listener-configuration-list listeners
7659Listeners for the service. A listener is either an
7660@code{unix-listener-configuration}, a @code{fifo-listener-configuration}, or
7661an @code{inet-listener-configuration}.
7662Defaults to @samp{()}.
7663
7664Available @code{unix-listener-configuration} fields are:
7665
7666@deftypevr {@code{unix-listener-configuration} parameter} file-name path
7667The file name on which to listen.
7668@end deftypevr
7669
7670@deftypevr {@code{unix-listener-configuration} parameter} string mode
7671The access mode for the socket.
7672Defaults to @samp{"0600"}.
7673@end deftypevr
7674
7675@deftypevr {@code{unix-listener-configuration} parameter} string user
f9b9a033 7676The user to own the socket.
d8c18af8
AW
7677Defaults to @samp{""}.
7678@end deftypevr
7679
7680@deftypevr {@code{unix-listener-configuration} parameter} string group
7681The group to own the socket.
7682Defaults to @samp{""}.
7683@end deftypevr
7684
7685
7686Available @code{fifo-listener-configuration} fields are:
7687
7688@deftypevr {@code{fifo-listener-configuration} parameter} file-name path
7689The file name on which to listen.
7690@end deftypevr
7691
7692@deftypevr {@code{fifo-listener-configuration} parameter} string mode
7693The access mode for the socket.
7694Defaults to @samp{"0600"}.
7695@end deftypevr
7696
7697@deftypevr {@code{fifo-listener-configuration} parameter} string user
f9b9a033 7698The user to own the socket.
d8c18af8
AW
7699Defaults to @samp{""}.
7700@end deftypevr
7701
7702@deftypevr {@code{fifo-listener-configuration} parameter} string group
7703The group to own the socket.
7704Defaults to @samp{""}.
7705@end deftypevr
7706
7707
7708Available @code{inet-listener-configuration} fields are:
7709
7710@deftypevr {@code{inet-listener-configuration} parameter} string protocol
7711The protocol to listen for.
7712@end deftypevr
7713
7714@deftypevr {@code{inet-listener-configuration} parameter} string address
7715The address on which to listen, or empty for all addresses.
7716Defaults to @samp{""}.
7717@end deftypevr
7718
7719@deftypevr {@code{inet-listener-configuration} parameter} non-negative-integer port
7720The port on which to listen.
7721@end deftypevr
7722
7723@deftypevr {@code{inet-listener-configuration} parameter} boolean ssl?
7724Whether to use SSL for this service; @samp{yes}, @samp{no}, or
7725@samp{required}.
7726Defaults to @samp{#t}.
7727@end deftypevr
7728
7729@end deftypevr
7730
7731@deftypevr {@code{service-configuration} parameter} non-negative-integer service-count
7732Number of connections to handle before starting a new process.
7733Typically the only useful values are 0 (unlimited) or 1. 1 is more
7734secure, but 0 is faster. <doc/wiki/LoginProcess.txt>.
7735Defaults to @samp{1}.
7736@end deftypevr
7737
7738@deftypevr {@code{service-configuration} parameter} non-negative-integer process-min-avail
7739Number of processes to always keep waiting for more connections.
7740Defaults to @samp{0}.
7741@end deftypevr
7742
7743@deftypevr {@code{service-configuration} parameter} non-negative-integer vsz-limit
7744If you set @samp{service-count 0}, you probably need to grow
7745this.
7746Defaults to @samp{256000000}.
7747@end deftypevr
7748
7749@end deftypevr
7750
7751@deftypevr {@code{dovecot-configuration} parameter} dict-configuration dict
7752Dict configuration, as created by the @code{dict-configuration}
7753constructor.
7754
7755Available @code{dict-configuration} fields are:
7756
7757@deftypevr {@code{dict-configuration} parameter} free-form-fields entries
7758A list of key-value pairs that this dict should hold.
7759Defaults to @samp{()}.
7760@end deftypevr
7761
7762@end deftypevr
7763
7764@deftypevr {@code{dovecot-configuration} parameter} passdb-configuration-list passdbs
7765List of passdb configurations, each one created by the
7766@code{passdb-configuration} constructor.
7767
7768Available @code{passdb-configuration} fields are:
7769
7770@deftypevr {@code{passdb-configuration} parameter} string driver
7771The driver that the passdb should use. Valid values include
7772@samp{pam}, @samp{passwd}, @samp{shadow}, @samp{bsdauth}, and
7773@samp{static}.
7774Defaults to @samp{"pam"}.
7775@end deftypevr
7776
7777@deftypevr {@code{passdb-configuration} parameter} free-form-args args
7778A list of key-value args to the passdb driver.
7779Defaults to @samp{()}.
7780@end deftypevr
7781
7782@end deftypevr
7783
7784@deftypevr {@code{dovecot-configuration} parameter} userdb-configuration-list userdbs
7785List of userdb configurations, each one created by the
7786@code{userdb-configuration} constructor.
7787
7788Available @code{userdb-configuration} fields are:
7789
7790@deftypevr {@code{userdb-configuration} parameter} string driver
7791The driver that the userdb should use. Valid values include
7792@samp{passwd} and @samp{static}.
7793Defaults to @samp{"passwd"}.
7794@end deftypevr
7795
7796@deftypevr {@code{userdb-configuration} parameter} free-form-args args
7797A list of key-value args to the userdb driver.
7798Defaults to @samp{()}.
7799@end deftypevr
7800
7801@deftypevr {@code{userdb-configuration} parameter} free-form-args override-fields
7802Override fields from passwd.
7803Defaults to @samp{()}.
7804@end deftypevr
7805
7806@end deftypevr
7807
7808@deftypevr {@code{dovecot-configuration} parameter} plugin-configuration plugin-configuration
7809Plug-in configuration, created by the @code{plugin-configuration}
7810constructor.
7811@end deftypevr
7812
7813@deftypevr {@code{dovecot-configuration} parameter} list-of-namespace-configuration namespaces
7814List of namespaces. Each item in the list is created by the
7815@code{namespace-configuration} constructor.
7816
7817Available @code{namespace-configuration} fields are:
7818
7819@deftypevr {@code{namespace-configuration} parameter} string name
7820Name for this namespace.
7821@end deftypevr
7822
7823@deftypevr {@code{namespace-configuration} parameter} string type
7824Namespace type: @samp{private}, @samp{shared} or @samp{public}.
7825Defaults to @samp{"private"}.
7826@end deftypevr
7827
7828@deftypevr {@code{namespace-configuration} parameter} string separator
7829Hierarchy separator to use. You should use the same separator for
7830all namespaces or some clients get confused. @samp{/} is usually a good
7831one. The default however depends on the underlying mail storage
7832format.
7833Defaults to @samp{""}.
7834@end deftypevr
7835
7836@deftypevr {@code{namespace-configuration} parameter} string prefix
7837Prefix required to access this namespace. This needs to be
7838different for all namespaces. For example @samp{Public/}.
7839Defaults to @samp{""}.
7840@end deftypevr
7841
7842@deftypevr {@code{namespace-configuration} parameter} string location
7843Physical location of the mailbox. This is in same format as
7844mail_location, which is also the default for it.
7845Defaults to @samp{""}.
7846@end deftypevr
7847
7848@deftypevr {@code{namespace-configuration} parameter} boolean inbox?
7849There can be only one INBOX, and this setting defines which
7850namespace has it.
7851Defaults to @samp{#f}.
7852@end deftypevr
7853
7854@deftypevr {@code{namespace-configuration} parameter} boolean hidden?
7855If namespace is hidden, it's not advertised to clients via NAMESPACE
7856extension. You'll most likely also want to set @samp{list? #f}. This is mostly
7857useful when converting from another server with different namespaces
7858which you want to deprecate but still keep working. For example you can
7859create hidden namespaces with prefixes @samp{~/mail/}, @samp{~%u/mail/}
7860and @samp{mail/}.
7861Defaults to @samp{#f}.
7862@end deftypevr
7863
7864@deftypevr {@code{namespace-configuration} parameter} boolean list?
7865Show the mailboxes under this namespace with LIST command. This
7866makes the namespace visible for clients that don't support NAMESPACE
7867extension. The special @code{children} value lists child mailboxes, but
7868hides the namespace prefix.
7869Defaults to @samp{#t}.
7870@end deftypevr
7871
7872@deftypevr {@code{namespace-configuration} parameter} boolean subscriptions?
7873Namespace handles its own subscriptions. If set to @code{#f}, the
7874parent namespace handles them. The empty prefix should always have this
7875as @code{#t}.)
7876Defaults to @samp{#t}.
7877@end deftypevr
7878
7879@deftypevr {@code{namespace-configuration} parameter} mailbox-configuration-list mailboxes
7880List of predefined mailboxes in this namespace.
7881Defaults to @samp{()}.
7882
7883Available @code{mailbox-configuration} fields are:
7884
7885@deftypevr {@code{mailbox-configuration} parameter} string name
7886Name for this mailbox.
7887@end deftypevr
7888
7889@deftypevr {@code{mailbox-configuration} parameter} string auto
7890@samp{create} will automatically create this mailbox.
7891@samp{subscribe} will both create and subscribe to the mailbox.
7892Defaults to @samp{"no"}.
7893@end deftypevr
7894
7895@deftypevr {@code{mailbox-configuration} parameter} space-separated-string-list special-use
7896List of IMAP @code{SPECIAL-USE} attributes as specified by RFC 6154.
7897Valid values are @code{\All}, @code{\Archive}, @code{\Drafts},
7898@code{\Flagged}, @code{\Junk}, @code{\Sent}, and @code{\Trash}.
7899Defaults to @samp{()}.
7900@end deftypevr
7901
7902@end deftypevr
7903
7904@end deftypevr
7905
7906@deftypevr {@code{dovecot-configuration} parameter} file-name base-dir
7907Base directory where to store runtime data.
7908Defaults to @samp{"/var/run/dovecot/"}.
7909@end deftypevr
7910
7911@deftypevr {@code{dovecot-configuration} parameter} string login-greeting
7912Greeting message for clients.
7913Defaults to @samp{"Dovecot ready."}.
7914@end deftypevr
7915
7916@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-trusted-networks
7917List of trusted network ranges. Connections from these IPs are
7918allowed to override their IP addresses and ports (for logging and for
7919authentication checks). @samp{disable-plaintext-auth} is also ignored
7920for these networks. Typically you'd specify your IMAP proxy servers
7921here.
7922Defaults to @samp{()}.
7923@end deftypevr
7924
7925@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-access-sockets
7926List of login access check sockets (e.g. tcpwrap).
7927Defaults to @samp{()}.
7928@end deftypevr
7929
7930@deftypevr {@code{dovecot-configuration} parameter} boolean verbose-proctitle?
7931Show more verbose process titles (in ps). Currently shows user name
7932and IP address. Useful for seeing who are actually using the IMAP
7933processes (e.g. shared mailboxes or if same uid is used for multiple
7934accounts).
7935Defaults to @samp{#f}.
7936@end deftypevr
7937
7938@deftypevr {@code{dovecot-configuration} parameter} boolean shutdown-clients?
7939Should all processes be killed when Dovecot master process shuts down.
7940Setting this to @code{#f} means that Dovecot can be upgraded without
7941forcing existing client connections to close (although that could also
7942be a problem if the upgrade is e.g. because of a security fix).
7943Defaults to @samp{#t}.
7944@end deftypevr
7945
7946@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer doveadm-worker-count
7947If non-zero, run mail commands via this many connections to doveadm
7948server, instead of running them directly in the same process.
7949Defaults to @samp{0}.
7950@end deftypevr
7951
7952@deftypevr {@code{dovecot-configuration} parameter} string doveadm-socket-path
7953UNIX socket or host:port used for connecting to doveadm server.
7954Defaults to @samp{"doveadm-server"}.
7955@end deftypevr
7956
7957@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list import-environment
7958List of environment variables that are preserved on Dovecot startup
7959and passed down to all of its child processes. You can also give
7960key=value pairs to always set specific settings.
7961@end deftypevr
7962
7963@deftypevr {@code{dovecot-configuration} parameter} boolean disable-plaintext-auth?
7964Disable LOGIN command and all other plaintext authentications unless
7965SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
7966matches the local IP (i.e. you're connecting from the same computer),
7967the connection is considered secure and plaintext authentication is
7968allowed. See also ssl=required setting.
7969Defaults to @samp{#t}.
7970@end deftypevr
7971
7972@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-cache-size
7973Authentication cache size (e.g. @samp{#e10e6}). 0 means it's disabled.
7974Note that bsdauth, PAM and vpopmail require @samp{cache-key} to be set
7975for caching to be used.
7976Defaults to @samp{0}.
7977@end deftypevr
7978
7979@deftypevr {@code{dovecot-configuration} parameter} string auth-cache-ttl
7980Time to live for cached data. After TTL expires the cached record
7981is no longer used, *except* if the main database lookup returns internal
7982failure. We also try to handle password changes automatically: If
7983user's previous authentication was successful, but this one wasn't, the
7984cache isn't used. For now this works only with plaintext
7985authentication.
7986Defaults to @samp{"1 hour"}.
7987@end deftypevr
7988
7989@deftypevr {@code{dovecot-configuration} parameter} string auth-cache-negative-ttl
7990TTL for negative hits (user not found, password mismatch).
79910 disables caching them completely.
7992Defaults to @samp{"1 hour"}.
7993@end deftypevr
7994
7995@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-realms
7996List of realms for SASL authentication mechanisms that need them.
7997You can leave it empty if you don't want to support multiple realms.
7998Many clients simply use the first one listed here, so keep the default
7999realm first.
8000Defaults to @samp{()}.
8001@end deftypevr
8002
8003@deftypevr {@code{dovecot-configuration} parameter} string auth-default-realm
8004Default realm/domain to use if none was specified. This is used for
8005both SASL realms and appending @@domain to username in plaintext
8006logins.
8007Defaults to @samp{""}.
8008@end deftypevr
8009
8010@deftypevr {@code{dovecot-configuration} parameter} string auth-username-chars
8011List of allowed characters in username. If the user-given username
8012contains a character not listed in here, the login automatically fails.
8013This is just an extra check to make sure user can't exploit any
8014potential quote escaping vulnerabilities with SQL/LDAP databases. If
8015you want to allow all characters, set this value to empty.
8016Defaults to @samp{"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@@"}.
8017@end deftypevr
8018
8019@deftypevr {@code{dovecot-configuration} parameter} string auth-username-translation
8020Username character translations before it's looked up from
8021databases. The value contains series of from -> to characters. For
8022example @samp{#@@/@@} means that @samp{#} and @samp{/} characters are
8023translated to @samp{@@}.
8024Defaults to @samp{""}.
8025@end deftypevr
8026
8027@deftypevr {@code{dovecot-configuration} parameter} string auth-username-format
8028Username formatting before it's looked up from databases. You can
8029use the standard variables here, e.g. %Lu would lowercase the username,
8030%n would drop away the domain if it was given, or @samp{%n-AT-%d} would
8031change the @samp{@@} into @samp{-AT-}. This translation is done after
8032@samp{auth-username-translation} changes.
8033Defaults to @samp{"%Lu"}.
8034@end deftypevr
8035
8036@deftypevr {@code{dovecot-configuration} parameter} string auth-master-user-separator
8037If you want to allow master users to log in by specifying the master
8038username within the normal username string (i.e. not using SASL
8039mechanism's support for it), you can specify the separator character
8040here. The format is then <username><separator><master username>.
8041UW-IMAP uses @samp{*} as the separator, so that could be a good
8042choice.
8043Defaults to @samp{""}.
8044@end deftypevr
8045
8046@deftypevr {@code{dovecot-configuration} parameter} string auth-anonymous-username
8047Username to use for users logging in with ANONYMOUS SASL
8048mechanism.
8049Defaults to @samp{"anonymous"}.
8050@end deftypevr
8051
8052@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-worker-max-count
8053Maximum number of dovecot-auth worker processes. They're used to
8054execute blocking passdb and userdb queries (e.g. MySQL and PAM).
8055They're automatically created and destroyed as needed.
8056Defaults to @samp{30}.
8057@end deftypevr
8058
8059@deftypevr {@code{dovecot-configuration} parameter} string auth-gssapi-hostname
8060Host name to use in GSSAPI principal names. The default is to use
8061the name returned by gethostname(). Use @samp{$ALL} (with quotes) to
8062allow all keytab entries.
8063Defaults to @samp{""}.
8064@end deftypevr
8065
8066@deftypevr {@code{dovecot-configuration} parameter} string auth-krb5-keytab
8067Kerberos keytab to use for the GSSAPI mechanism. Will use the
8068system default (usually /etc/krb5.keytab) if not specified. You may
8069need to change the auth service to run as root to be able to read this
8070file.
8071Defaults to @samp{""}.
8072@end deftypevr
8073
8074@deftypevr {@code{dovecot-configuration} parameter} boolean auth-use-winbind?
8075Do NTLM and GSS-SPNEGO authentication using Samba's winbind daemon
8076and @samp{ntlm-auth} helper.
8077<doc/wiki/Authentication/Mechanisms/Winbind.txt>.
8078Defaults to @samp{#f}.
8079@end deftypevr
8080
8081@deftypevr {@code{dovecot-configuration} parameter} file-name auth-winbind-helper-path
8082Path for Samba's @samp{ntlm-auth} helper binary.
8083Defaults to @samp{"/usr/bin/ntlm_auth"}.
8084@end deftypevr
8085
8086@deftypevr {@code{dovecot-configuration} parameter} string auth-failure-delay
8087Time to delay before replying to failed authentications.
8088Defaults to @samp{"2 secs"}.
8089@end deftypevr
8090
8091@deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-require-client-cert?
8092Require a valid SSL client certificate or the authentication
8093fails.
8094Defaults to @samp{#f}.
8095@end deftypevr
8096
8097@deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-username-from-cert?
8098Take the username from client's SSL certificate, using
8099@code{X509_NAME_get_text_by_NID()} which returns the subject's DN's
8100CommonName.
8101Defaults to @samp{#f}.
8102@end deftypevr
8103
8104@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-mechanisms
8105List of wanted authentication mechanisms. Supported mechanisms are:
8106@samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
8107@samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
8108@samp{otp}, @samp{skey}, and @samp{gss-spnego}. NOTE: See also
8109@samp{disable-plaintext-auth} setting.
8110@end deftypevr
8111
8112@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-servers
8113List of IPs or hostnames to all director servers, including ourself.
8114Ports can be specified as ip:port. The default port is the same as what
8115director service's @samp{inet-listener} is using.
8116Defaults to @samp{()}.
8117@end deftypevr
8118
8119@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-mail-servers
8120List of IPs or hostnames to all backend mail servers. Ranges are
8121allowed too, like 10.0.0.10-10.0.0.30.
8122Defaults to @samp{()}.
8123@end deftypevr
8124
8125@deftypevr {@code{dovecot-configuration} parameter} string director-user-expire
8126How long to redirect users to a specific server after it no longer
8127has any connections.
8128Defaults to @samp{"15 min"}.
8129@end deftypevr
8130
8131@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer director-doveadm-port
8132TCP/IP port that accepts doveadm connections (instead of director
8133connections) If you enable this, you'll also need to add
8134@samp{inet-listener} for the port.
8135Defaults to @samp{0}.
8136@end deftypevr
8137
8138@deftypevr {@code{dovecot-configuration} parameter} string director-username-hash
8139How the username is translated before being hashed. Useful values
8140include %Ln if user can log in with or without @@domain, %Ld if mailboxes
8141are shared within domain.
8142Defaults to @samp{"%Lu"}.
8143@end deftypevr
8144
8145@deftypevr {@code{dovecot-configuration} parameter} string log-path
8146Log file to use for error messages. @samp{syslog} logs to syslog,
8147@samp{/dev/stderr} logs to stderr.
8148Defaults to @samp{"syslog"}.
8149@end deftypevr
8150
8151@deftypevr {@code{dovecot-configuration} parameter} string info-log-path
8152Log file to use for informational messages. Defaults to
8153@samp{log-path}.
8154Defaults to @samp{""}.
8155@end deftypevr
8156
8157@deftypevr {@code{dovecot-configuration} parameter} string debug-log-path
8158Log file to use for debug messages. Defaults to
8159@samp{info-log-path}.
8160Defaults to @samp{""}.
8161@end deftypevr
8162
8163@deftypevr {@code{dovecot-configuration} parameter} string syslog-facility
8164Syslog facility to use if you're logging to syslog. Usually if you
8165don't want to use @samp{mail}, you'll use local0..local7. Also other
8166standard facilities are supported.
8167Defaults to @samp{"mail"}.
8168@end deftypevr
8169
8170@deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose?
8171Log unsuccessful authentication attempts and the reasons why they
8172failed.
8173Defaults to @samp{#f}.
8174@end deftypevr
8175
8176@deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose-passwords?
8177In case of password mismatches, log the attempted password. Valid
8178values are no, plain and sha1. sha1 can be useful for detecting brute
8179force password attempts vs. user simply trying the same password over
8180and over again. You can also truncate the value to n chars by appending
8181":n" (e.g. sha1:6).
8182Defaults to @samp{#f}.
8183@end deftypevr
8184
8185@deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug?
8186Even more verbose logging for debugging purposes. Shows for example
8187SQL queries.
8188Defaults to @samp{#f}.
8189@end deftypevr
8190
8191@deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug-passwords?
8192In case of password mismatches, log the passwords and used scheme so
8193the problem can be debugged. Enabling this also enables
8194@samp{auth-debug}.
8195Defaults to @samp{#f}.
8196@end deftypevr
8197
8198@deftypevr {@code{dovecot-configuration} parameter} boolean mail-debug?
8199Enable mail process debugging. This can help you figure out why
8200Dovecot isn't finding your mails.
8201Defaults to @samp{#f}.
8202@end deftypevr
8203
8204@deftypevr {@code{dovecot-configuration} parameter} boolean verbose-ssl?
8205Show protocol level SSL errors.
8206Defaults to @samp{#f}.
8207@end deftypevr
8208
8209@deftypevr {@code{dovecot-configuration} parameter} string log-timestamp
8210Prefix for each line written to log file. % codes are in
8211strftime(3) format.
8212Defaults to @samp{"\"%b %d %H:%M:%S \""}.
8213@end deftypevr
8214
8215@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-log-format-elements
8216List of elements we want to log. The elements which have a
8217non-empty variable value are joined together to form a comma-separated
8218string.
8219@end deftypevr
8220
8221@deftypevr {@code{dovecot-configuration} parameter} string login-log-format
8222Login log format. %s contains @samp{login-log-format-elements}
8223string, %$ contains the data we want to log.
8224Defaults to @samp{"%$: %s"}.
8225@end deftypevr
8226
8227@deftypevr {@code{dovecot-configuration} parameter} string mail-log-prefix
8228Log prefix for mail processes. See doc/wiki/Variables.txt for list
8229of possible variables you can use.
8230Defaults to @samp{"\"%s(%u): \""}.
8231@end deftypevr
8232
8233@deftypevr {@code{dovecot-configuration} parameter} string deliver-log-format
8234Format to use for logging mail deliveries. You can use variables:
8235@table @code
8236@item %$
8237Delivery status message (e.g. @samp{saved to INBOX})
8238@item %m
8239Message-ID
8240@item %s
8241Subject
8242@item %f
8243From address
8244@item %p
8245Physical size
8246@item %w
8247Virtual size.
8248@end table
8249Defaults to @samp{"msgid=%m: %$"}.
8250@end deftypevr
8251
8252@deftypevr {@code{dovecot-configuration} parameter} string mail-location
8253Location for users' mailboxes. The default is empty, which means
8254that Dovecot tries to find the mailboxes automatically. This won't work
8255if the user doesn't yet have any mail, so you should explicitly tell
8256Dovecot the full location.
8257
8258If you're using mbox, giving a path to the INBOX
8259file (e.g. /var/mail/%u) isn't enough. You'll also need to tell Dovecot
8260where the other mailboxes are kept. This is called the "root mail
8261directory", and it must be the first path given in the
8262@samp{mail-location} setting.
8263
8264There are a few special variables you can use, eg.:
8265
8266@table @samp
8267@item %u
8268username
8269@item %n
8270user part in user@@domain, same as %u if there's no domain
8271@item %d
8272domain part in user@@domain, empty if there's no domain
8273@item %h
8274home director
8275@end table
8276
8277See doc/wiki/Variables.txt for full list. Some examples:
8278@table @samp
8279@item maildir:~/Maildir
8280@item mbox:~/mail:INBOX=/var/mail/%u
8281@item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
8282@end table
8283Defaults to @samp{""}.
8284@end deftypevr
8285
8286@deftypevr {@code{dovecot-configuration} parameter} string mail-uid
8287System user and group used to access mails. If you use multiple,
8288userdb can override these by returning uid or gid fields. You can use
8289either numbers or names. <doc/wiki/UserIds.txt>.
8290Defaults to @samp{""}.
8291@end deftypevr
8292
8293@deftypevr {@code{dovecot-configuration} parameter} string mail-gid
8294
8295Defaults to @samp{""}.
8296@end deftypevr
8297
8298@deftypevr {@code{dovecot-configuration} parameter} string mail-privileged-group
8299Group to enable temporarily for privileged operations. Currently
8300this is used only with INBOX when either its initial creation or
8301dotlocking fails. Typically this is set to "mail" to give access to
8302/var/mail.
8303Defaults to @samp{""}.
8304@end deftypevr
8305
8306@deftypevr {@code{dovecot-configuration} parameter} string mail-access-groups
8307Grant access to these supplementary groups for mail processes.
8308Typically these are used to set up access to shared mailboxes. Note
8309that it may be dangerous to set these if users can create
8310symlinks (e.g. if "mail" group is set here, ln -s /var/mail ~/mail/var
8311could allow a user to delete others' mailboxes, or ln -s
8312/secret/shared/box ~/mail/mybox would allow reading it).
8313Defaults to @samp{""}.
8314@end deftypevr
8315
8316@deftypevr {@code{dovecot-configuration} parameter} boolean mail-full-filesystem-access?
8317Allow full filesystem access to clients. There's no access checks
8318other than what the operating system does for the active UID/GID. It
8319works with both maildir and mboxes, allowing you to prefix mailboxes
8320names with e.g. /path/ or ~user/.
8321Defaults to @samp{#f}.
8322@end deftypevr
8323
8324@deftypevr {@code{dovecot-configuration} parameter} boolean mmap-disable?
8325Don't use mmap() at all. This is required if you store indexes to
8326shared filesystems (NFS or clustered filesystem).
8327Defaults to @samp{#f}.
8328@end deftypevr
8329
8330@deftypevr {@code{dovecot-configuration} parameter} boolean dotlock-use-excl?
8331Rely on @samp{O_EXCL} to work when creating dotlock files. NFS
8332supports @samp{O_EXCL} since version 3, so this should be safe to use
8333nowadays by default.
8334Defaults to @samp{#t}.
8335@end deftypevr
8336
8337@deftypevr {@code{dovecot-configuration} parameter} string mail-fsync
8338When to use fsync() or fdatasync() calls:
8339@table @code
8340@item optimized
8341Whenever necessary to avoid losing important data
8342@item always
8343Useful with e.g. NFS when write()s are delayed
8344@item never
8345Never use it (best performance, but crashes can lose data).
8346@end table
8347Defaults to @samp{"optimized"}.
8348@end deftypevr
8349
8350@deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-storage?
8351Mail storage exists in NFS. Set this to yes to make Dovecot flush
8352NFS caches whenever needed. If you're using only a single mail server
8353this isn't needed.
8354Defaults to @samp{#f}.
8355@end deftypevr
8356
8357@deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-index?
8358Mail index files also exist in NFS. Setting this to yes requires
8359@samp{mmap-disable? #t} and @samp{fsync-disable? #f}.
8360Defaults to @samp{#f}.
8361@end deftypevr
8362
8363@deftypevr {@code{dovecot-configuration} parameter} string lock-method
8364Locking method for index files. Alternatives are fcntl, flock and
8365dotlock. Dotlocking uses some tricks which may create more disk I/O
8366than other locking methods. NFS users: flock doesn't work, remember to
8367change @samp{mmap-disable}.
8368Defaults to @samp{"fcntl"}.
8369@end deftypevr
8370
8371@deftypevr {@code{dovecot-configuration} parameter} file-name mail-temp-dir
8372Directory in which LDA/LMTP temporarily stores incoming mails >128
8373kB.
8374Defaults to @samp{"/tmp"}.
8375@end deftypevr
8376
8377@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-uid
8378Valid UID range for users. This is mostly to make sure that users can't
8379log in as daemons or other system users. Note that denying root logins is
8380hardcoded to dovecot binary and can't be done even if @samp{first-valid-uid}
8381is set to 0.
8382Defaults to @samp{500}.
8383@end deftypevr
8384
8385@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-uid
8386
8387Defaults to @samp{0}.
8388@end deftypevr
8389
8390@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-gid
8391Valid GID range for users. Users having non-valid GID as primary group ID
8392aren't allowed to log in. If user belongs to supplementary groups with
8393non-valid GIDs, those groups are not set.
8394Defaults to @samp{1}.
8395@end deftypevr
8396
8397@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-gid
8398
8399Defaults to @samp{0}.
8400@end deftypevr
8401
8402@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-max-keyword-length
8403Maximum allowed length for mail keyword name. It's only forced when
8404trying to create new keywords.
8405Defaults to @samp{50}.
8406@end deftypevr
8407
8408@deftypevr {@code{dovecot-configuration} parameter} colon-separated-file-name-list valid-chroot-dirs
8409List of directories under which chrooting is allowed for mail
8410processes (i.e. /var/mail will allow chrooting to /var/mail/foo/bar
8411too). This setting doesn't affect @samp{login-chroot}
8412@samp{mail-chroot} or auth chroot settings. If this setting is empty,
8413"/./" in home dirs are ignored. WARNING: Never add directories here
8414which local users can modify, that may lead to root exploit. Usually
8415this should be done only if you don't allow shell access for users.
8416<doc/wiki/Chrooting.txt>.
8417Defaults to @samp{()}.
8418@end deftypevr
8419
8420@deftypevr {@code{dovecot-configuration} parameter} string mail-chroot
8421Default chroot directory for mail processes. This can be overridden
8422for specific users in user database by giving /./ in user's home
8423directory (e.g. /home/./user chroots into /home). Note that usually
8424there is no real need to do chrooting, Dovecot doesn't allow users to
8425access files outside their mail directory anyway. If your home
8426directories are prefixed with the chroot directory, append "/." to
8427@samp{mail-chroot}. <doc/wiki/Chrooting.txt>.
8428Defaults to @samp{""}.
8429@end deftypevr
8430
8431@deftypevr {@code{dovecot-configuration} parameter} file-name auth-socket-path
8432UNIX socket path to master authentication server to find users.
8433This is used by imap (for shared users) and lda.
8434Defaults to @samp{"/var/run/dovecot/auth-userdb"}.
8435@end deftypevr
8436
8437@deftypevr {@code{dovecot-configuration} parameter} file-name mail-plugin-dir
8438Directory where to look up mail plugins.
8439Defaults to @samp{"/usr/lib/dovecot"}.
8440@end deftypevr
8441
8442@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mail-plugins
8443List of plugins to load for all services. Plugins specific to IMAP,
8444LDA, etc. are added to this list in their own .conf files.
8445Defaults to @samp{()}.
8446@end deftypevr
8447
8448@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-cache-min-mail-count
8449The minimum number of mails in a mailbox before updates are done to
8450cache file. This allows optimizing Dovecot's behavior to do less disk
8451writes at the cost of more disk reads.
8452Defaults to @samp{0}.
8453@end deftypevr
8454
8455@deftypevr {@code{dovecot-configuration} parameter} string mailbox-idle-check-interval
8456When IDLE command is running, mailbox is checked once in a while to
8457see if there are any new mails or other changes. This setting defines
8458the minimum time to wait between those checks. Dovecot can also use
8459dnotify, inotify and kqueue to find out immediately when changes
8460occur.
8461Defaults to @samp{"30 secs"}.
8462@end deftypevr
8463
8464@deftypevr {@code{dovecot-configuration} parameter} boolean mail-save-crlf?
8465Save mails with CR+LF instead of plain LF. This makes sending those
8466mails take less CPU, especially with sendfile() syscall with Linux and
8467FreeBSD. But it also creates a bit more disk I/O which may just make it
8468slower. Also note that if other software reads the mboxes/maildirs,
8469they may handle the extra CRs wrong and cause problems.
8470Defaults to @samp{#f}.
8471@end deftypevr
8472
8473@deftypevr {@code{dovecot-configuration} parameter} boolean maildir-stat-dirs?
8474By default LIST command returns all entries in maildir beginning
8475with a dot. Enabling this option makes Dovecot return only entries
8476which are directories. This is done by stat()ing each entry, so it
8477causes more disk I/O.
8478 (For systems setting struct @samp{dirent->d_type} this check is free
8479and it's done always regardless of this setting).
8480Defaults to @samp{#f}.
8481@end deftypevr
8482
8483@deftypevr {@code{dovecot-configuration} parameter} boolean maildir-copy-with-hardlinks?
8484When copying a message, do it with hard links whenever possible.
8485This makes the performance much better, and it's unlikely to have any
8486side effects.
8487Defaults to @samp{#t}.
8488@end deftypevr
8489
8490@deftypevr {@code{dovecot-configuration} parameter} boolean maildir-very-dirty-syncs?
8491Assume Dovecot is the only MUA accessing Maildir: Scan cur/
8492directory only when its mtime changes unexpectedly or when we can't find
8493the mail otherwise.
8494Defaults to @samp{#f}.
8495@end deftypevr
8496
8497@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-read-locks
8498Which locking methods to use for locking mbox. There are four
8499available:
8500
8501@table @code
8502@item dotlock
8503Create <mailbox>.lock file. This is the oldest and most NFS-safe
8504solution. If you want to use /var/mail/ like directory, the users will
8505need write access to that directory.
8506@item dotlock-try
8507Same as dotlock, but if it fails because of permissions or because there
8508isn't enough disk space, just skip it.
8509@item fcntl
8510Use this if possible. Works with NFS too if lockd is used.
8511@item flock
8512May not exist in all systems. Doesn't work with NFS.
8513@item lockf
8514May not exist in all systems. Doesn't work with NFS.
8515@end table
8516
8517You can use multiple locking methods; if you do the order they're declared
8518in is important to avoid deadlocks if other MTAs/MUAs are using multiple
8519locking methods as well. Some operating systems don't allow using some of
8520them simultaneously.
8521@end deftypevr
8522
8523@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-write-locks
8524
8525@end deftypevr
8526
8527@deftypevr {@code{dovecot-configuration} parameter} string mbox-lock-timeout
8528Maximum time to wait for lock (all of them) before aborting.
8529Defaults to @samp{"5 mins"}.
8530@end deftypevr
8531
8532@deftypevr {@code{dovecot-configuration} parameter} string mbox-dotlock-change-timeout
8533If dotlock exists but the mailbox isn't modified in any way,
8534override the lock file after this much time.
8535Defaults to @samp{"2 mins"}.
8536@end deftypevr
8537
8538@deftypevr {@code{dovecot-configuration} parameter} boolean mbox-dirty-syncs?
8539When mbox changes unexpectedly we have to fully read it to find out
8540what changed. If the mbox is large this can take a long time. Since
8541the change is usually just a newly appended mail, it'd be faster to
8542simply read the new mails. If this setting is enabled, Dovecot does
8543this but still safely fallbacks to re-reading the whole mbox file
8544whenever something in mbox isn't how it's expected to be. The only real
8545downside to this setting is that if some other MUA changes message
8546flags, Dovecot doesn't notice it immediately. Note that a full sync is
8547done with SELECT, EXAMINE, EXPUNGE and CHECK commands.
8548Defaults to @samp{#t}.
8549@end deftypevr
8550
8551@deftypevr {@code{dovecot-configuration} parameter} boolean mbox-very-dirty-syncs?
8552Like @samp{mbox-dirty-syncs}, but don't do full syncs even with SELECT,
8553EXAMINE, EXPUNGE or CHECK commands. If this is set,
8554@samp{mbox-dirty-syncs} is ignored.
8555Defaults to @samp{#f}.
8556@end deftypevr
8557
8558@deftypevr {@code{dovecot-configuration} parameter} boolean mbox-lazy-writes?
8559Delay writing mbox headers until doing a full write sync (EXPUNGE
8560and CHECK commands and when closing the mailbox). This is especially
8561useful for POP3 where clients often delete all mails. The downside is
8562that our changes aren't immediately visible to other MUAs.
8563Defaults to @samp{#t}.
8564@end deftypevr
8565
8566@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mbox-min-index-size
8567If mbox size is smaller than this (e.g. 100k), don't write index
8568files. If an index file already exists it's still read, just not
8569updated.
8570Defaults to @samp{0}.
8571@end deftypevr
8572
8573@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mdbox-rotate-size
8574Maximum dbox file size until it's rotated.
8575Defaults to @samp{2000000}.
8576@end deftypevr
8577
8578@deftypevr {@code{dovecot-configuration} parameter} string mdbox-rotate-interval
8579Maximum dbox file age until it's rotated. Typically in days. Day
8580begins from midnight, so 1d = today, 2d = yesterday, etc. 0 = check
8581disabled.
8582Defaults to @samp{"1d"}.
8583@end deftypevr
8584
8585@deftypevr {@code{dovecot-configuration} parameter} boolean mdbox-preallocate-space?
8586When creating new mdbox files, immediately preallocate their size to
8587@samp{mdbox-rotate-size}. This setting currently works only in Linux
8588with some filesystems (ext4, xfs).
8589Defaults to @samp{#f}.
8590@end deftypevr
8591
8592@deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-dir
8593sdbox and mdbox support saving mail attachments to external files,
8594which also allows single instance storage for them. Other backends
8595don't support this for now.
8596
8597WARNING: This feature hasn't been tested much yet. Use at your own risk.
8598
8599Directory root where to store mail attachments. Disabled, if empty.
8600Defaults to @samp{""}.
8601@end deftypevr
8602
8603@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-attachment-min-size
8604Attachments smaller than this aren't saved externally. It's also
8605possible to write a plugin to disable saving specific attachments
8606externally.
8607Defaults to @samp{128000}.
8608@end deftypevr
8609
8610@deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-fs
8611Filesystem backend to use for saving attachments:
8612@table @code
8613@item posix
8614No SiS done by Dovecot (but this might help FS's own deduplication)
8615@item sis posix
8616SiS with immediate byte-by-byte comparison during saving
8617@item sis-queue posix
8618SiS with delayed comparison and deduplication.
8619@end table
8620Defaults to @samp{"sis posix"}.
8621@end deftypevr
8622
8623@deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-hash
8624Hash format to use in attachment filenames. You can add any text and
8625variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}},
8626@code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}. Variables can be
8627truncated, e.g. @code{%@{sha256:80@}} returns only first 80 bits.
8628Defaults to @samp{"%@{sha1@}"}.
8629@end deftypevr
8630
8631@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-process-limit
8632
8633Defaults to @samp{100}.
8634@end deftypevr
8635
8636@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-client-limit
8637
8638Defaults to @samp{1000}.
8639@end deftypevr
8640
8641@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-vsz-limit
8642Default VSZ (virtual memory size) limit for service processes.
8643This is mainly intended to catch and kill processes that leak memory
8644before they eat up everything.
8645Defaults to @samp{256000000}.
8646@end deftypevr
8647
8648@deftypevr {@code{dovecot-configuration} parameter} string default-login-user
8649Login user is internally used by login processes. This is the most
8650untrusted user in Dovecot system. It shouldn't have access to anything
8651at all.
8652Defaults to @samp{"dovenull"}.
8653@end deftypevr
8654
8655@deftypevr {@code{dovecot-configuration} parameter} string default-internal-user
8656Internal user is used by unprivileged processes. It should be
8657separate from login user, so that login processes can't disturb other
8658processes.
8659Defaults to @samp{"dovecot"}.
8660@end deftypevr
8661
8662@deftypevr {@code{dovecot-configuration} parameter} string ssl?
8663SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>.
8664Defaults to @samp{"required"}.
8665@end deftypevr
8666
8667@deftypevr {@code{dovecot-configuration} parameter} string ssl-cert
8668PEM encoded X.509 SSL/TLS certificate (public key).
8669Defaults to @samp{"</etc/dovecot/default.pem"}.
8670@end deftypevr
8671
8672@deftypevr {@code{dovecot-configuration} parameter} string ssl-key
8673PEM encoded SSL/TLS private key. The key is opened before
8674dropping root privileges, so keep the key file unreadable by anyone but
8675root.
8676Defaults to @samp{"</etc/dovecot/private/default.pem"}.
8677@end deftypevr
8678
8679@deftypevr {@code{dovecot-configuration} parameter} string ssl-key-password
8680If key file is password protected, give the password here.
8681Alternatively give it when starting dovecot with -p parameter. Since
8682this file is often world-readable, you may want to place this setting
8683instead to a different.
8684Defaults to @samp{""}.
8685@end deftypevr
8686
8687@deftypevr {@code{dovecot-configuration} parameter} string ssl-ca
8688PEM encoded trusted certificate authority. Set this only if you
8689intend to use @samp{ssl-verify-client-cert? #t}. The file should
8690contain the CA certificate(s) followed by the matching
8691CRL(s). (e.g. @samp{ssl-ca </etc/ssl/certs/ca.pem}).
8692Defaults to @samp{""}.
8693@end deftypevr
8694
8695@deftypevr {@code{dovecot-configuration} parameter} boolean ssl-require-crl?
8696Require that CRL check succeeds for client certificates.
8697Defaults to @samp{#t}.
8698@end deftypevr
8699
8700@deftypevr {@code{dovecot-configuration} parameter} boolean ssl-verify-client-cert?
8701Request client to send a certificate. If you also want to require
8702it, set @samp{auth-ssl-require-client-cert? #t} in auth section.
8703Defaults to @samp{#f}.
8704@end deftypevr
8705
8706@deftypevr {@code{dovecot-configuration} parameter} string ssl-cert-username-field
8707Which field from certificate to use for username. commonName and
8708x500UniqueIdentifier are the usual choices. You'll also need to set
8709@samp{auth-ssl-username-from-cert? #t}.
8710Defaults to @samp{"commonName"}.
8711@end deftypevr
8712
8713@deftypevr {@code{dovecot-configuration} parameter} hours ssl-parameters-regenerate
8714How often to regenerate the SSL parameters file. Generation is
8715quite CPU intensive operation. The value is in hours, 0 disables
8716regeneration entirely.
8717Defaults to @samp{168}.
8718@end deftypevr
8719
8720@deftypevr {@code{dovecot-configuration} parameter} string ssl-protocols
8721SSL protocols to use.
8722Defaults to @samp{"!SSLv2"}.
8723@end deftypevr
8724
8725@deftypevr {@code{dovecot-configuration} parameter} string ssl-cipher-list
8726SSL ciphers to use.
8727Defaults to @samp{"ALL:!LOW:!SSLv2:!EXP:!aNULL"}.
8728@end deftypevr
8729
8730@deftypevr {@code{dovecot-configuration} parameter} string ssl-crypto-device
8731SSL crypto device to use, for valid values run "openssl engine".
8732Defaults to @samp{""}.
8733@end deftypevr
8734
8735@deftypevr {@code{dovecot-configuration} parameter} string postmaster-address
8736Address to use when sending rejection mails.
8737Default is postmaster@@<your domain>. %d expands to recipient domain.
8738Defaults to @samp{""}.
8739@end deftypevr
8740
8741@deftypevr {@code{dovecot-configuration} parameter} string hostname
8742Hostname to use in various parts of sent mails (e.g. in Message-Id)
8743and in LMTP replies. Default is the system's real hostname@@domain.
8744Defaults to @samp{""}.
8745@end deftypevr
8746
8747@deftypevr {@code{dovecot-configuration} parameter} boolean quota-full-tempfail?
8748If user is over quota, return with temporary failure instead of
8749bouncing the mail.
8750Defaults to @samp{#f}.
8751@end deftypevr
8752
8753@deftypevr {@code{dovecot-configuration} parameter} file-name sendmail-path
8754Binary to use for sending mails.
8755Defaults to @samp{"/usr/sbin/sendmail"}.
8756@end deftypevr
8757
8758@deftypevr {@code{dovecot-configuration} parameter} string submission-host
8759If non-empty, send mails via this SMTP host[:port] instead of
8760sendmail.
8761Defaults to @samp{""}.
8762@end deftypevr
8763
8764@deftypevr {@code{dovecot-configuration} parameter} string rejection-subject
8765Subject: header to use for rejection mails. You can use the same
8766variables as for @samp{rejection-reason} below.
8767Defaults to @samp{"Rejected: %s"}.
8768@end deftypevr
8769
8770@deftypevr {@code{dovecot-configuration} parameter} string rejection-reason
8771Human readable error message for rejection mails. You can use
8772variables:
8773
8774@table @code
8775@item %n
8776CRLF
8777@item %r
8778reason
8779@item %s
8780original subject
8781@item %t
8782recipient
8783@end table
8784Defaults to @samp{"Your message to <%t> was automatically rejected:%n%r"}.
8785@end deftypevr
8786
8787@deftypevr {@code{dovecot-configuration} parameter} string recipient-delimiter
8788Delimiter character between local-part and detail in email
8789address.
8790Defaults to @samp{"+"}.
8791@end deftypevr
8792
8793@deftypevr {@code{dovecot-configuration} parameter} string lda-original-recipient-header
8794Header where the original recipient address (SMTP's RCPT TO:
8795address) is taken from if not available elsewhere. With dovecot-lda -a
8796parameter overrides this. A commonly used header for this is
8797X-Original-To.
8798Defaults to @samp{""}.
8799@end deftypevr
8800
8801@deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autocreate?
8802Should saving a mail to a nonexistent mailbox automatically create
8803it?.
8804Defaults to @samp{#f}.
8805@end deftypevr
8806
8807@deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autosubscribe?
8808Should automatically created mailboxes be also automatically
8809subscribed?.
8810Defaults to @samp{#f}.
8811@end deftypevr
8812
8813@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer imap-max-line-length
8814Maximum IMAP command line length. Some clients generate very long
8815command lines with huge mailboxes, so you may need to raise this if you
8816get "Too long argument" or "IMAP command line too large" errors
8817often.
8818Defaults to @samp{64000}.
8819@end deftypevr
8820
8821@deftypevr {@code{dovecot-configuration} parameter} string imap-logout-format
8822IMAP logout format string:
8823@table @code
8824@item %i
8825total number of bytes read from client
8826@item %o
8827total number of bytes sent to client.
8828@end table
8829Defaults to @samp{"in=%i out=%o"}.
8830@end deftypevr
8831
8832@deftypevr {@code{dovecot-configuration} parameter} string imap-capability
8833Override the IMAP CAPABILITY response. If the value begins with '+',
8834add the given capabilities on top of the defaults (e.g. +XFOO XBAR).
8835Defaults to @samp{""}.
8836@end deftypevr
8837
8838@deftypevr {@code{dovecot-configuration} parameter} string imap-idle-notify-interval
8839How long to wait between "OK Still here" notifications when client
8840is IDLEing.
8841Defaults to @samp{"2 mins"}.
8842@end deftypevr
8843
8844@deftypevr {@code{dovecot-configuration} parameter} string imap-id-send
8845ID field names and values to send to clients. Using * as the value
8846makes Dovecot use the default value. The following fields have default
8847values currently: name, version, os, os-version, support-url,
8848support-email.
8849Defaults to @samp{""}.
8850@end deftypevr
8851
8852@deftypevr {@code{dovecot-configuration} parameter} string imap-id-log
8853ID fields sent by client to log. * means everything.
8854Defaults to @samp{""}.
8855@end deftypevr
8856
8857@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list imap-client-workarounds
8858Workarounds for various client bugs:
8859
8860@table @code
8861@item delay-newmail
8862Send EXISTS/RECENT new mail notifications only when replying to NOOP and
8863CHECK commands. Some clients ignore them otherwise, for example OSX
8864Mail (<v2.1). Outlook Express breaks more badly though, without this it
8865may show user "Message no longer in server" errors. Note that OE6
8866still breaks even with this workaround if synchronization is set to
8867"Headers Only".
8868
8869@item tb-extra-mailbox-sep
8870Thunderbird gets somehow confused with LAYOUT=fs (mbox and dbox) and
8871adds extra @samp{/} suffixes to mailbox names. This option causes Dovecot to
8872ignore the extra @samp{/} instead of treating it as invalid mailbox name.
8873
8874@item tb-lsub-flags
8875Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g. mbox).
8876This makes Thunderbird realize they aren't selectable and show them
8877greyed out, instead of only later giving "not selectable" popup error.
8878@end table
8879Defaults to @samp{()}.
8880@end deftypevr
8881
8882@deftypevr {@code{dovecot-configuration} parameter} string imap-urlauth-host
8883Host allowed in URLAUTH URLs sent by client. "*" allows all.
8884Defaults to @samp{""}.
8885@end deftypevr
8886
8887
8888Whew! Lots of configuration options. The nice thing about it though is
8889that GuixSD has a complete interface to Dovecot's configuration
8890language. This allows not only a nice way to declare configurations,
8891but also offers reflective capabilities as well: users can write code to
8892inspect and transform configurations from within Scheme.
8893
8894However, it could be that you just want to get a @code{dovecot.conf} up
8895and running. In that case, you can pass an
8896@code{opaque-dovecot-configuration} as the @code{#:config} paramter to
8897@code{dovecot-service}. As its name indicates, an opaque configuration
8898does not have easy reflective capabilities.
8899
8900Available @code{opaque-dovecot-configuration} fields are:
8901
8902@deftypevr {@code{opaque-dovecot-configuration} parameter} package dovecot
8903The dovecot package.
8904@end deftypevr
8905
8906@deftypevr {@code{opaque-dovecot-configuration} parameter} string string
8907The contents of the @code{dovecot.conf}, as a string.
8908@end deftypevr
8909
8910For example, if your @code{dovecot.conf} is just the empty string, you
8911could instantiate a dovecot service like this:
8912
8913@example
8914(dovecot-service #:config
8915 (opaque-dovecot-configuration
8916 (string "")))
8917@end example
8918
58724c48
DT
8919@node Web Services
8920@subsubsection Web Services
8921
8922The @code{(gnu services web)} module provides the following service:
8923
be1c2c54 8924@deffn {Scheme Procedure} nginx-service [#:nginx nginx] @
58724c48
DT
8925 [#:log-directory ``/var/log/nginx''] @
8926 [#:run-directory ``/var/run/nginx''] @
8927 [#:config-file]
8928
8929Return a service that runs @var{nginx}, the nginx web server.
8930
8931The nginx daemon loads its runtime configuration from @var{config-file}.
8932Log files are written to @var{log-directory} and temporary runtime data
8933files are written to @var{run-directory}. For proper operation, these
8934arguments should match what is in @var{config-file} to ensure that the
8935directories are created when the service is activated.
8936
8937@end deffn
8938
fe1a39d3
LC
8939@node Various Services
8940@subsubsection Various Services
8941
8942The @code{(gnu services lirc)} module provides the following service.
8943
be1c2c54 8944@deffn {Scheme Procedure} lirc-service [#:lirc lirc] @
fe1a39d3
LC
8945 [#:device #f] [#:driver #f] [#:config-file #f] @
8946 [#:extra-options '()]
8947Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
8948decodes infrared signals from remote controls.
8949
8950Optionally, @var{device}, @var{driver} and @var{config-file}
8951(configuration file name) may be specified. See @command{lircd} manual
8952for details.
8953
8954Finally, @var{extra-options} is a list of additional command-line options
8955passed to @command{lircd}.
8956@end deffn
8957
8958
0ae8c15a
LC
8959@node Setuid Programs
8960@subsection Setuid Programs
8961
8962@cindex setuid programs
8963Some programs need to run with ``root'' privileges, even when they are
8964launched by unprivileged users. A notorious example is the
4d40227c
LC
8965@command{passwd} program, which users can run to change their
8966password, and which needs to access the @file{/etc/passwd} and
0ae8c15a
LC
8967@file{/etc/shadow} files---something normally restricted to root, for
8968obvious security reasons. To address that, these executables are
8969@dfn{setuid-root}, meaning that they always run with root privileges
8970(@pxref{How Change Persona,,, libc, The GNU C Library Reference Manual},
f7e4ae7f 8971for more info about the setuid mechanism.)
0ae8c15a
LC
8972
8973The store itself @emph{cannot} contain setuid programs: that would be a
8974security issue since any user on the system can write derivations that
8975populate the store (@pxref{The Store}). Thus, a different mechanism is
8976used: instead of changing the setuid bit directly on files that are in
8977the store, we let the system administrator @emph{declare} which programs
8978should be setuid root.
8979
8980The @code{setuid-programs} field of an @code{operating-system}
8981declaration contains a list of G-expressions denoting the names of
8982programs to be setuid-root (@pxref{Using the Configuration System}).
8983For instance, the @command{passwd} program, which is part of the Shadow
8984package, can be designated by this G-expression (@pxref{G-Expressions}):
8985
8986@example
8987#~(string-append #$shadow "/bin/passwd")
8988@end example
8989
8990A default set of setuid programs is defined by the
8991@code{%setuid-programs} variable of the @code{(gnu system)} module.
8992
8993@defvr {Scheme Variable} %setuid-programs
8994A list of G-expressions denoting common programs that are setuid-root.
8995
8996The list includes commands such as @command{passwd}, @command{ping},
8997@command{su}, and @command{sudo}.
8998@end defvr
8999
9000Under the hood, the actual setuid programs are created in the
9001@file{/run/setuid-programs} directory at system activation time. The
9002files in this directory refer to the ``real'' binaries, which are in the
9003store.
9004
efb5e833
LC
9005@node X.509 Certificates
9006@subsection X.509 Certificates
9007
9008@cindex HTTPS, certificates
9009@cindex X.509 certificates
9010@cindex TLS
9011Web servers available over HTTPS (that is, HTTP over the transport-layer
9012security mechanism, TLS) send client programs an @dfn{X.509 certificate}
9013that the client can then use to @emph{authenticate} the server. To do
9014that, clients verify that the server's certificate is signed by a
9015so-called @dfn{certificate authority} (CA). But to verify the CA's
9016signature, clients must have first acquired the CA's certificate.
9017
9018Web browsers such as GNU@tie{}IceCat include their own set of CA
9019certificates, such that they are able to verify CA signatures
9020out-of-the-box.
9021
9022However, most other programs that can talk HTTPS---@command{wget},
9023@command{git}, @command{w3m}, etc.---need to be told where CA
9024certificates can be found.
9025
9026@cindex @code{nss-certs}
9027In GuixSD, this is done by adding a package that provides certificates
9028to the @code{packages} field of the @code{operating-system} declaration
9029(@pxref{operating-system Reference}). GuixSD includes one such package,
9030@code{nss-certs}, which is a set of CA certificates provided as part of
9031Mozilla's Network Security Services.
9032
9033Note that it is @emph{not} part of @var{%base-packages}, so you need to
9034explicitly add it. The @file{/etc/ssl/certs} directory, which is where
9035most applications and libraries look for certificates by default, points
9036to the certificates installed globally.
9037
9038Unprivileged users can also install their own certificate package in
9039their profile. A number of environment variables need to be defined so
9040that applications and libraries know where to find them. Namely, the
9041OpenSSL library honors the @code{SSL_CERT_DIR} and @code{SSL_CERT_FILE}
9042variables. Some applications add their own environment variables; for
9043instance, the Git version control system honors the certificate bundle
9044pointed to by the @code{GIT_SSL_CAINFO} environment variable.
9045
9046
996ed739
LC
9047@node Name Service Switch
9048@subsection Name Service Switch
9049
9050@cindex name service switch
9051@cindex NSS
9052The @code{(gnu system nss)} module provides bindings to the
9053configuration file of libc's @dfn{name service switch} or @dfn{NSS}
9054(@pxref{NSS Configuration File,,, libc, The GNU C Library Reference
9055Manual}). In a nutshell, the NSS is a mechanism that allows libc to be
9056extended with new ``name'' lookup methods for system databases, which
9057includes host names, service names, user accounts, and more (@pxref{Name
9058Service Switch, System Databases and Name Service Switch,, libc, The GNU
9059C Library Reference Manual}).
9060
9061The NSS configuration specifies, for each system database, which lookup
9062method is to be used, and how the various methods are chained
9063together---for instance, under which circumstances NSS should try the
9064next method in the list. The NSS configuration is given in the
9065@code{name-service-switch} field of @code{operating-system} declarations
9066(@pxref{operating-system Reference, @code{name-service-switch}}).
9067
4c9050c6
LC
9068@cindex nss-mdns
9069@cindex .local, host name lookup
996ed739 9070As an example, the declaration below configures the NSS to use the
4c9050c6
LC
9071@uref{http://0pointer.de/lennart/projects/nss-mdns/, @code{nss-mdns}
9072back-end}, which supports host name lookups over multicast DNS (mDNS)
9073for host names ending in @code{.local}:
996ed739
LC
9074
9075@example
9076(name-service-switch
9077 (hosts (list %files ;first, check /etc/hosts
9078
9079 ;; If the above did not succeed, try
9080 ;; with 'mdns_minimal'.
9081 (name-service
9082 (name "mdns_minimal")
9083
9084 ;; 'mdns_minimal' is authoritative for
9085 ;; '.local'. When it returns "not found",
9086 ;; no need to try the next methods.
9087 (reaction (lookup-specification
9088 (not-found => return))))
9089
9090 ;; Then fall back to DNS.
9091 (name-service
9092 (name "dns"))
9093
9094 ;; Finally, try with the "full" 'mdns'.
9095 (name-service
9096 (name "mdns")))))
9097@end example
9098
15137a29
LC
9099Don't worry: the @code{%mdns-host-lookup-nss} variable (see below)
9100contains this configuration, so you won't have to type it if all you
9101want is to have @code{.local} host lookup working.
9102
4c9050c6
LC
9103Note that, in this case, in addition to setting the
9104@code{name-service-switch} of the @code{operating-system} declaration,
cc9c1f39
LC
9105you also need to use @code{avahi-service} (@pxref{Networking Services,
9106@code{avahi-service}}), or @var{%desktop-services}, which includes it
9107(@pxref{Desktop Services}). Doing this makes @code{nss-mdns} accessible
9108to the name service cache daemon (@pxref{Base Services,
9109@code{nscd-service}}).
15137a29
LC
9110
9111For convenience, the following variables provide typical NSS
9112configurations.
9113
9114@defvr {Scheme Variable} %default-nss
9115This is the default name service switch configuration, a
9116@code{name-service-switch} object.
9117@end defvr
9118
9119@defvr {Scheme Variable} %mdns-host-lookup-nss
9120This is the name service switch configuration with support for host name
9121lookup over multicast DNS (mDNS) for host names ending in @code{.local}.
9122@end defvr
4c9050c6 9123
996ed739
LC
9124The reference for name service switch configuration is given below. It
9125is a direct mapping of the C library's configuration file format, so
9126please refer to the C library manual for more information (@pxref{NSS
9127Configuration File,,, libc, The GNU C Library Reference Manual}).
9128Compared to libc's NSS configuration file format, it has the advantage
9129not only of adding this warm parenthetic feel that we like, but also
9130static checks: you'll know about syntax errors and typos as soon as you
9131run @command{guix system}.
9132
996ed739
LC
9133@deftp {Data Type} name-service-switch
9134
9135This is the data type representation the configuration of libc's name
9136service switch (NSS). Each field below represents one of the supported
9137system databases.
9138
9139@table @code
9140@item aliases
9141@itemx ethers
9142@itemx group
9143@itemx gshadow
9144@itemx hosts
9145@itemx initgroups
9146@itemx netgroup
9147@itemx networks
9148@itemx password
9149@itemx public-key
9150@itemx rpc
9151@itemx services
9152@itemx shadow
9153The system databases handled by the NSS. Each of these fields must be a
9154list of @code{<name-service>} objects (see below.)
9155@end table
9156@end deftp
9157
9158@deftp {Data Type} name-service
9159
9160This is the data type representing an actual name service and the
9161associated lookup action.
9162
9163@table @code
9164@item name
9165A string denoting the name service (@pxref{Services in the NSS
9166configuration,,, libc, The GNU C Library Reference Manual}).
9167
4aee6e60
LC
9168Note that name services listed here must be visible to nscd. This is
9169achieved by passing the @code{#:name-services} argument to
9170@code{nscd-service} the list of packages providing the needed name
9171services (@pxref{Base Services, @code{nscd-service}}).
9172
996ed739
LC
9173@item reaction
9174An action specified using the @code{lookup-specification} macro
9175(@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
9176Reference Manual}). For example:
9177
9178@example
9179(lookup-specification (unavailable => continue)
9180 (success => return))
9181@end example
9182@end table
9183@end deftp
0ae8c15a 9184
fd1b1fa2
LC
9185@node Initial RAM Disk
9186@subsection Initial RAM Disk
9187
9188@cindex initial RAM disk (initrd)
9189@cindex initrd (initial RAM disk)
9190For bootstrapping purposes, the Linux-Libre kernel is passed an
9191@dfn{initial RAM disk}, or @dfn{initrd}. An initrd contains a temporary
9192root file system, as well as an initialization script. The latter is
9193responsible for mounting the real root file system, and for loading any
9194kernel modules that may be needed to achieve that.
9195
9196The @code{initrd} field of an @code{operating-system} declaration allows
9197you to specify which initrd you would like to use. The @code{(gnu
9198system linux-initrd)} module provides two ways to build an initrd: the
9199high-level @code{base-initrd} procedure, and the low-level
9200@code{expression->initrd} procedure.
9201
9202The @code{base-initrd} procedure is intended to cover most common uses.
9203For example, if you want to add a bunch of kernel modules to be loaded
9204at boot time, you can define the @code{initrd} field of the operating
9205system declaration like this:
9206
9207@example
52ac153e 9208(initrd (lambda (file-systems . rest)
027981d6
LC
9209 ;; Create a standard initrd that has modules "foo.ko"
9210 ;; and "bar.ko", as well as their dependencies, in
9211 ;; addition to the modules available by default.
52ac153e 9212 (apply base-initrd file-systems
027981d6 9213 #:extra-modules '("foo" "bar")
52ac153e 9214 rest)))
fd1b1fa2
LC
9215@end example
9216
52ac153e
LC
9217The @code{base-initrd} procedure also handles common use cases that
9218involves using the system as a QEMU guest, or as a ``live'' system whose
9219root file system is volatile.
fd1b1fa2 9220
e90cf6c1
LC
9221The initial RAM disk produced by @code{base-initrd} honors several
9222options passed on the Linux kernel command line (that is, arguments
9223passed @i{via} GRUB's @code{linux} command, or with QEMU's
9224@code{-append} option), notably:
9225
9226@table @code
9227@item --load=@var{boot}
9228Tell the initial RAM disk to load @var{boot}, a file containing a Scheme
9229program, once it has mounted the root file system.
9230
9231GuixSD uses this option to yield control to a boot program that runs the
dd17bc38 9232service activation programs and then spawns the GNU@tie{}Shepherd, the
e90cf6c1
LC
9233initialization system.
9234
9235@item --root=@var{root}
9236Mount @var{root} as the root file system. @var{root} can be a device
9237device name like @code{/dev/sda1}, a partition label, or a partition
9238UUID.
9239
9240@item --system=@var{system}
9241Have @file{/run/booted-system} and @file{/run/current-system} point to
9242@var{system}.
9243
9244@item modprobe.blacklist=@var{modules}@dots{}
9245@cindex module, black-listing
9246@cindex black list, of kernel modules
9247Instruct the initial RAM disk as well as the @command{modprobe} command
9248(from the kmod package) to refuse to load @var{modules}. @var{modules}
9249must be a comma-separated list of module names---e.g.,
9250@code{usbkbd,9pnet}.
9251
9252@item --repl
9253Start a read-eval-print loop (REPL) from the initial RAM disk before it
9254tries to load kernel modules and to mount the root file system. Our
9255marketing team calls it @dfn{boot-to-Guile}. The Schemer in you will
9256love it. @xref{Using Guile Interactively,,, guile, GNU Guile Reference
9257Manual}, for more information on Guile's REPL.
9258
9259@end table
9260
9261Now that you know all the features that initial RAM disks produced by
9262@code{base-initrd} provide, here is how to use it and customize it
9263further.
9264
fd1b1fa2 9265@deffn {Monadic Procedure} base-initrd @var{file-systems} @
9059b97d 9266 [#:qemu-networking? #f] [#:virtio? #t] [#:volatile-root? #f] @
52ac153e 9267 [#:extra-modules '()] [#:mapped-devices '()]
fd1b1fa2
LC
9268Return a monadic derivation that builds a generic initrd. @var{file-systems} is
9269a list of file-systems to be mounted by the initrd, possibly in addition to
9270the root file system specified on the kernel command line via @code{--root}.
52ac153e
LC
9271@var{mapped-devices} is a list of device mappings to realize before
9272@var{file-systems} are mounted (@pxref{Mapped Devices}).
fd1b1fa2
LC
9273
9274When @var{qemu-networking?} is true, set up networking with the standard QEMU
9275parameters. When @var{virtio?} is true, load additional modules so the initrd can
9276be used as a QEMU guest with para-virtualized I/O drivers.
9277
9278When @var{volatile-root?} is true, the root file system is writable but any changes
9279to it are lost.
9280
9281The initrd is automatically populated with all the kernel modules necessary
9282for @var{file-systems} and for the given options. However, additional kernel
9283modules can be listed in @var{extra-modules}. They will be added to the initrd, and
9284loaded at boot time in the order in which they appear.
9285@end deffn
9286
9287Needless to say, the initrds we produce and use embed a
9288statically-linked Guile, and the initialization program is a Guile
9289program. That gives a lot of flexibility. The
9290@code{expression->initrd} procedure builds such an initrd, given the
9291program to run in that initrd.
9292
9293@deffn {Monadic Procedure} expression->initrd @var{exp} @
9294 [#:guile %guile-static-stripped] [#:name "guile-initrd"] @
42d10464 9295 [#:modules '()]
fd1b1fa2
LC
9296Return a derivation that builds a Linux initrd (a gzipped cpio archive)
9297containing @var{guile} and that evaluates @var{exp}, a G-expression,
df650fa8
LC
9298upon booting. All the derivations referenced by @var{exp} are
9299automatically copied to the initrd.
fd1b1fa2 9300
42d10464
LC
9301@var{modules} is a list of Guile module names to be embedded in the
9302initrd.
fd1b1fa2
LC
9303@end deffn
9304
88faf933
LC
9305@node GRUB Configuration
9306@subsection GRUB Configuration
9307
9308@cindex GRUB
9309@cindex boot loader
9310
9311The operating system uses GNU@tie{}GRUB as its boot loader
9312(@pxref{Overview, overview of GRUB,, grub, GNU GRUB Manual}). It is
9313configured using @code{grub-configuration} declarations. This data type
9314is exported by the @code{(gnu system grub)} module, and described below.
9315
9316@deftp {Data Type} grub-configuration
9317The type of a GRUB configuration declaration.
9318
9319@table @asis
9320
9321@item @code{device}
9322This is a string denoting the boot device. It must be a device name
9323understood by the @command{grub-install} command, such as
9324@code{/dev/sda} or @code{(hd0)} (@pxref{Invoking grub-install,,, grub,
9325GNU GRUB Manual}).
9326
9327@item @code{menu-entries} (default: @code{()})
9328A possibly empty list of @code{menu-entry} objects (see below), denoting
9329entries to appear in the GRUB boot menu, in addition to the current
9330system entry and the entry pointing to previous system generations.
9331
9332@item @code{default-entry} (default: @code{0})
9333The index of the default boot menu entry. Index 0 is for the current
9334system's entry.
9335
9336@item @code{timeout} (default: @code{5})
9337The number of seconds to wait for keyboard input before booting. Set to
93380 to boot immediately, and to -1 to wait indefinitely.
9339
9340@item @code{theme} (default: @var{%default-theme})
9341The @code{grub-theme} object describing the theme to use.
9342@end table
9343
9344@end deftp
9345
9346Should you want to list additional boot menu entries @i{via} the
9347@code{menu-entries} field above, you will need to create them with the
9348@code{menu-entry} form:
9349
9350@deftp {Data Type} menu-entry
9351The type of an entry in the GRUB boot menu.
9352
9353@table @asis
9354
9355@item @code{label}
35ed9306 9356The label to show in the menu---e.g., @code{"GNU"}.
88faf933
LC
9357
9358@item @code{linux}
9359The Linux kernel to boot.
9360
9361@item @code{linux-arguments} (default: @code{()})
9362The list of extra Linux kernel command-line arguments---e.g.,
9363@code{("console=ttyS0")}.
9364
9365@item @code{initrd}
9366A G-Expression or string denoting the file name of the initial RAM disk
9367to use (@pxref{G-Expressions}).
9368
9369@end table
9370@end deftp
9371
9372@c FIXME: Write documentation once it's stable.
9373Themes are created using the @code{grub-theme} form, which is not
9374documented yet.
9375
9376@defvr {Scheme Variable} %default-theme
9377This is the default GRUB theme used by the operating system, with a
9378fancy background image displaying the GNU and Guix logos.
9379@end defvr
9380
9381
cf4a9129
LC
9382@node Invoking guix system
9383@subsection Invoking @code{guix system}
0918e64a 9384
cf4a9129
LC
9385Once you have written an operating system declaration, as seen in the
9386previous section, it can be @dfn{instantiated} using the @command{guix
9387system} command. The synopsis is:
4af2447e 9388
cf4a9129
LC
9389@example
9390guix system @var{options}@dots{} @var{action} @var{file}
9391@end example
4af2447e 9392
cf4a9129
LC
9393@var{file} must be the name of a file containing an
9394@code{operating-system} declaration. @var{action} specifies how the
a40424bd 9395operating system is instantiated. Currently the following values are
cf4a9129 9396supported:
4af2447e 9397
cf4a9129
LC
9398@table @code
9399@item reconfigure
9400Build the operating system described in @var{file}, activate it, and
9401switch to it@footnote{This action is usable only on systems already
65797bff 9402running GuixSD.}.
4af2447e 9403
cf4a9129
LC
9404This effects all the configuration specified in @var{file}: user
9405accounts, system services, global package list, setuid programs, etc.
240b57f0
LC
9406The command starts system services specified in @var{file} that are not
9407currently running; if a service is currently running, it does not
9408attempt to upgrade it since it would not be possible without stopping it
9409first.
4af2447e 9410
cf4a9129
LC
9411It also adds a GRUB menu entry for the new OS configuration, and moves
9412entries for older configurations to a submenu---unless
9413@option{--no-grub} is passed.
4af2447e 9414
240b57f0 9415@quotation Note
bf2479c7
LC
9416@c The paragraph below refers to the problem discussed at
9417@c <http://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
9418It is highly recommended to run @command{guix pull} once before you run
9419@command{guix system reconfigure} for the first time (@pxref{Invoking
9420guix pull}). Failing to do that you would see an older version of Guix
9421once @command{reconfigure} has completed.
240b57f0 9422@end quotation
bf2479c7 9423
cf4a9129
LC
9424@item build
9425Build the operating system's derivation, which includes all the
9426configuration files and programs needed to boot and run the system.
9427This action does not actually install anything.
113daf62 9428
cf4a9129
LC
9429@item init
9430Populate the given directory with all the files necessary to run the
9431operating system specified in @var{file}. This is useful for first-time
4705641f 9432installations of GuixSD. For instance:
113daf62
LC
9433
9434@example
cf4a9129 9435guix system init my-os-config.scm /mnt
113daf62
LC
9436@end example
9437
cf4a9129
LC
9438copies to @file{/mnt} all the store items required by the configuration
9439specified in @file{my-os-config.scm}. This includes configuration
9440files, packages, and so on. It also creates other essential files
9441needed for the system to operate correctly---e.g., the @file{/etc},
9442@file{/var}, and @file{/run} directories, and the @file{/bin/sh} file.
113daf62 9443
cf4a9129
LC
9444This command also installs GRUB on the device specified in
9445@file{my-os-config}, unless the @option{--no-grub} option was passed.
113daf62 9446
cf4a9129
LC
9447@item vm
9448@cindex virtual machine
0276f697 9449@cindex VM
f535dcbe 9450@anchor{guix system vm}
cf4a9129
LC
9451Build a virtual machine that contain the operating system declared in
9452@var{file}, and return a script to run that virtual machine (VM).
810568b3 9453Arguments given to the script are passed as is to QEMU.
113daf62 9454
cf4a9129 9455The VM shares its store with the host system.
113daf62 9456
0276f697
LC
9457Additional file systems can be shared between the host and the VM using
9458the @code{--share} and @code{--expose} command-line options: the former
9459specifies a directory to be shared with write access, while the latter
9460provides read-only access to the shared directory.
9461
9462The example below creates a VM in which the user's home directory is
9463accessible read-only, and where the @file{/exchange} directory is a
9464read-write mapping of the host's @file{$HOME/tmp}:
9465
9466@example
9467guix system vm my-config.scm \
9468 --expose=$HOME --share=$HOME/tmp=/exchange
9469@end example
9470
6aa260af
LC
9471On GNU/Linux, the default is to boot directly to the kernel; this has
9472the advantage of requiring only a very tiny root disk image since the
9473host's store can then be mounted.
9474
9475The @code{--full-boot} option forces a complete boot sequence, starting
9476with the bootloader. This requires more disk space since a root image
9477containing at least the kernel, initrd, and bootloader data files must
9478be created. The @code{--image-size} option can be used to specify the
9479image's size.
ab11f0be 9480
cf4a9129
LC
9481@item vm-image
9482@itemx disk-image
9483Return a virtual machine or disk image of the operating system declared
9484in @var{file} that stands alone. Use the @option{--image-size} option
9485to specify the size of the image.
113daf62 9486
cf4a9129 9487When using @code{vm-image}, the returned image is in qcow2 format, which
97d76250
LF
9488the QEMU emulator can efficiently use. @xref{Running GuixSD in a VM},
9489for more information on how to run the image in a virtual machine.
113daf62 9490
cf4a9129
LC
9491When using @code{disk-image}, a raw disk image is produced; it can be
9492copied as is to a USB stick, for instance. Assuming @code{/dev/sdc} is
9493the device corresponding to a USB stick, one can copy the image on it
9494using the following command:
113daf62 9495
cf4a9129
LC
9496@example
9497# dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
9498@end example
113daf62 9499
1c8a81b1
DT
9500@item container
9501Return a script to run the operating system declared in @var{file}
9502within a container. Containers are a set of lightweight isolation
9503mechanisms provided by the kernel Linux-libre. Containers are
9504substantially less resource-demanding than full virtual machines since
9505the kernel, shared objects, and other resources can be shared with the
9506host system; this also means they provide thinner isolation.
9507
9508Currently, the script must be run as root in order to support more than
9509a single user and group. The container shares its store with the host
9510system.
9511
9512As with the @code{vm} action (@pxref{guix system vm}), additional file
9513systems to be shared between the host and container can be specified
9514using the @option{--share} and @option{--expose} options:
9515
9516@example
9517guix system container my-config.scm \
9518 --expose=$HOME --share=$HOME/tmp=/exchange
9519@end example
9520
0f252e26 9521@quotation Note
cfd35b4e 9522This option requires Linux-libre 3.19 or newer.
0f252e26
DT
9523@end quotation
9524
cf4a9129 9525@end table
113daf62 9526
ccd7158d
LC
9527@var{options} can contain any of the common build options (@pxref{Common
9528Build Options}). In addition, @var{options} can contain one of the
9529following:
113daf62 9530
cf4a9129
LC
9531@table @option
9532@item --system=@var{system}
9533@itemx -s @var{system}
9534Attempt to build for @var{system} instead of the host's system type.
9535This works as per @command{guix build} (@pxref{Invoking guix build}).
113daf62 9536
f3f427c2
LC
9537@item --derivation
9538@itemx -d
9539Return the derivation file name of the given operating system without
9540building anything.
9541
cf4a9129
LC
9542@item --image-size=@var{size}
9543For the @code{vm-image} and @code{disk-image} actions, create an image
9544of the given @var{size}. @var{size} may be a number of bytes, or it may
4a44d7bb
LC
9545include a unit as a suffix (@pxref{Block size, size specifications,,
9546coreutils, GNU Coreutils}).
db030303
LC
9547
9548@item --on-error=@var{strategy}
9549Apply @var{strategy} when an error occurs when reading @var{file}.
9550@var{strategy} may be one of the following:
9551
9552@table @code
9553@item nothing-special
9554Report the error concisely and exit. This is the default strategy.
9555
9556@item backtrace
9557Likewise, but also display a backtrace.
9558
9559@item debug
9560Report the error and enter Guile's debugger. From there, you can run
9561commands such as @code{,bt} to get a backtrace, @code{,locals} to
9562display local variable values, and more generally inspect the program's
9563state. @xref{Debug Commands,,, guile, GNU Guile Reference Manual}, for
9564a list of available debugging commands.
9565@end table
113daf62 9566@end table
113daf62 9567
cf4a9129
LC
9568Note that all the actions above, except @code{build} and @code{init},
9569rely on KVM support in the Linux-Libre kernel. Specifically, the
9570machine should have hardware virtualization support, the corresponding
9571KVM kernel module should be loaded, and the @file{/dev/kvm} device node
9572must exist and be readable and writable by the user and by the daemon's
9573build users.
8451a568 9574
65797bff
LC
9575Once you have built, configured, re-configured, and re-re-configured
9576your GuixSD installation, you may find it useful to list the operating
9577system generations available on disk---and that you can choose from the
9578GRUB boot menu:
9579
9580@table @code
9581
9582@item list-generations
9583List a summary of each generation of the operating system available on
9584disk, in a human-readable way. This is similar to the
9585@option{--list-generations} option of @command{guix package}
9586(@pxref{Invoking guix package}).
9587
9588Optionally, one can specify a pattern, with the same syntax that is used
9589in @command{guix package --list-generations}, to restrict the list of
9590generations displayed. For instance, the following command displays
9591generations up to 10-day old:
9592
9593@example
9594$ guix system list-generations 10d
9595@end example
9596
9597@end table
9598
d6c3267a
LC
9599The @command{guix system} command has even more to offer! The following
9600sub-commands allow you to visualize how your system services relate to
9601each other:
9602
9603@anchor{system-extension-graph}
9604@table @code
9605
9606@item extension-graph
9607Emit in Dot/Graphviz format to standard output the @dfn{service
9608extension graph} of the operating system defined in @var{file}
9609(@pxref{Service Composition}, for more information on service
9610extensions.)
9611
9612The command:
9613
9614@example
9615$ guix system extension-graph @var{file} | dot -Tpdf > services.pdf
9616@end example
9617
9618produces a PDF file showing the extension relations among services.
9619
710fa231
AK
9620@anchor{system-shepherd-graph}
9621@item shepherd-graph
6f305ea5 9622Emit in Dot/Graphviz format to standard output the @dfn{dependency
dd17bc38
AK
9623graph} of shepherd services of the operating system defined in
9624@var{file}. @xref{Shepherd Services}, for more information and for an
9625example graph.
6f305ea5 9626
d6c3267a
LC
9627@end table
9628
97d76250 9629@node Running GuixSD in a VM
70ac09a5 9630@subsection Running GuixSD in a Virtual Machine
97d76250
LF
9631
9632One way to run GuixSD in a virtual machine (VM) is to build a GuixSD
9633virtual machine image using @command{guix system vm-image}
9634(@pxref{Invoking guix system}). The returned image is in qcow2 format,
9635which the @uref{http://qemu.org/, QEMU emulator} can efficiently use.
9636
9637To run the image in QEMU, copy it out of the store (@pxref{The Store})
9638and give yourself permission to write to the copy. When invoking QEMU,
9639you must choose a system emulator that is suitable for your hardware
9640platform. Here is a minimal QEMU invocation that will boot the result
9641of @command{guix system vm-image} on x86_64 hardware:
9642
9643@example
9644$ qemu-system-x86_64 \
9645 -net user -net nic,model=virtio \
9646 -enable-kvm -m 256 /tmp/qemu-image
9647@end example
9648
9649Here is what each of these options means:
9650
9651@table @code
9652@item qemu-system-x86_64
9653This specifies the hardware platform to emulate. This should match the
9654host.
9655
9656@item -net user
9657Enable the unprivileged user-mode network stack. The guest OS can
9658access the host but not vice versa. This is the simplest way to get the
9659guest OS online. If you don't choose a network stack, the boot will
9660fail.
9661
9662@item -net nic,model=virtio
9663You must create a network interface of a given model. If you don't
9664create a NIC, the boot will fail. Assuming your hardware platform is
9665x86_64, you can get a list of available NIC models by running
9666@command{qemu-system-x86_64 -net nic,model=help}.
9667
9668@item -enable-kvm
9669If your system has hardware virtualization extensions, enabling the
9670Linux kernel's virtual machine support (KVM) will make things run
9671faster.
9672
9673@item -m 256
9674RAM available to the guest OS, in mebibytes. Defaults to 128@tie{}MiB,
9675which may be insufficent for some operations.
9676
9677@item /tmp/qemu-image
9678The file name of the qcow2 image.
9679@end table
d6c3267a 9680
cf4a9129
LC
9681@node Defining Services
9682@subsection Defining Services
8451a568 9683
eb524192 9684The previous sections show the available services and how one can combine
0adfe95a
LC
9685them in an @code{operating-system} declaration. But how do we define
9686them in the first place? And what is a service anyway?
8451a568 9687
0adfe95a
LC
9688@menu
9689* Service Composition:: The model for composing services.
9690* Service Types and Services:: Types and services.
9691* Service Reference:: API reference.
dd17bc38 9692* Shepherd Services:: A particular type of service.
0adfe95a
LC
9693@end menu
9694
9695@node Service Composition
9696@subsubsection Service Composition
9697
9698@cindex services
9699@cindex daemons
9700Here we define a @dfn{service} as, broadly, something that extends the
9701operating system's functionality. Often a service is a process---a
9702@dfn{daemon}---started when the system boots: a secure shell server, a
9703Web server, the Guix build daemon, etc. Sometimes a service is a daemon
9704whose execution can be triggered by another daemon---e.g., an FTP server
9705started by @command{inetd} or a D-Bus service activated by
9706@command{dbus-daemon}. Occasionally, a service does not map to a
9707daemon. For instance, the ``account'' service collects user accounts
9708and makes sure they exist when the system runs; the ``udev'' service
9709collects device management rules and makes them available to the eudev
9710daemon; the @file{/etc} service populates the system's @file{/etc}
9711directory.
9712
d6c3267a 9713@cindex service extensions
0adfe95a 9714GuixSD services are connected by @dfn{extensions}. For instance, the
dd17bc38
AK
9715secure shell service @emph{extends} the Shepherd---GuixSD's
9716initialization system, running as PID@tie{}1---by giving it the command
9717lines to start and stop the secure shell daemon (@pxref{Networking
9718Services, @code{lsh-service}}); the UPower service extends the D-Bus
9719service by passing it its @file{.service} specification, and extends the
9720udev service by passing it device management rules (@pxref{Desktop
9721Services, @code{upower-service}}); the Guix daemon service extends the
9722Shepherd by passing it the command lines to start and stop the daemon,
9723and extends the account service by passing it a list of required build
9724user accounts (@pxref{Base Services}).
0adfe95a
LC
9725
9726All in all, services and their ``extends'' relations form a directed
9727acyclic graph (DAG). If we represent services as boxes and extensions
9728as arrows, a typical system might provide something like this:
9729
9730@image{images/service-graph,,5in,Typical service extension graph.}
9731
d62e201c
LC
9732@cindex system service
9733At the bottom, we see the @dfn{system service}, which produces the
9734directory containing everything to run and boot the system, as returned
9735by the @command{guix system build} command. @xref{Service Reference},
9736to learn about the other service types shown here.
d6c3267a
LC
9737@xref{system-extension-graph, the @command{guix system extension-graph}
9738command}, for information on how to generate this representation for a
9739particular operating system definition.
0adfe95a
LC
9740
9741@cindex service types
9742Technically, developers can define @dfn{service types} to express these
9743relations. There can be any number of services of a given type on the
9744system---for instance, a system running two instances of the GNU secure
9745shell server (lsh) has two instances of @var{lsh-service-type}, with
9746different parameters.
9747
9748The following section describes the programming interface for service
9749types and services.
9750
9751@node Service Types and Services
9752@subsubsection Service Types and Services
9753
9754A @dfn{service type} is a node in the DAG described above. Let us start
9755with a simple example, the service type for the Guix build daemon
9756(@pxref{Invoking guix-daemon}):
9757
9758@example
9759(define guix-service-type
9760 (service-type
9761 (name 'guix)
9762 (extensions
d4053c71 9763 (list (service-extension shepherd-root-service-type guix-shepherd-service)
0adfe95a
LC
9764 (service-extension account-service-type guix-accounts)
9765 (service-extension activation-service-type guix-activation)))))
9766@end example
8451a568 9767
cf4a9129 9768@noindent
0adfe95a
LC
9769It defines a two things:
9770
9771@enumerate
9772@item
9773A name, whose sole purpose is to make inspection and debugging easier.
9774
9775@item
9776A list of @dfn{service extensions}, where each extension designates the
9777target service type and a procedure that, given the service's
9778parameters, returns a list of object to extend the service of that type.
9779
9780Every service type has at least one service extension. The only
9781exception is the @dfn{boot service type}, which is the ultimate service.
9782@end enumerate
9783
9784In this example, @var{guix-service-type} extends three services:
9785
9786@table @var
d4053c71
AK
9787@item shepherd-root-service-type
9788The @var{guix-shepherd-service} procedure defines how the Shepherd
9789service is extended. Namely, it returns a @code{<shepherd-service>}
9790object that defines how @command{guix-daemon} is started and stopped
9791(@pxref{Shepherd Services}).
0adfe95a
LC
9792
9793@item account-service-type
9794This extension for this service is computed by @var{guix-accounts},
9795which returns a list of @code{user-group} and @code{user-account}
9796objects representing the build user accounts (@pxref{Invoking
9797guix-daemon}).
9798
9799@item activation-service-type
9800Here @var{guix-activation} is a procedure that returns a gexp, which is
9801a code snippet to run at ``activation time''---e.g., when the service is
9802booted.
9803@end table
9804
9805A service of this type is instantiated like this:
9806
9807@example
9808(service guix-service-type
9809 (guix-configuration
9810 (build-accounts 5)
9811 (use-substitutes? #f)))
9812@end example
9813
9814The second argument to the @code{service} form is a value representing
9815the parameters of this specific service instance.
9816@xref{guix-configuration-type, @code{guix-configuration}}, for
9817information about the @code{guix-configuration} data type.
9818
9819@var{guix-service-type} is quite simple because it extends other
9820services but is not extensible itself.
9821
9822@c @subsubsubsection Extensible Service Types
9823
9824The service type for an @emph{extensible} service looks like this:
9825
9826@example
9827(define udev-service-type
9828 (service-type (name 'udev)
9829 (extensions
d4053c71
AK
9830 (list (service-extension shepherd-root-service-type
9831 udev-shepherd-service)))
0adfe95a
LC
9832
9833 (compose concatenate) ;concatenate the list of rules
9834 (extend (lambda (config rules)
9835 (match config
9836 (($ <udev-configuration> udev initial-rules)
9837 (udev-configuration
9838 (udev udev) ;the udev package to use
9839 (rules (append initial-rules rules)))))))))
9840@end example
9841
9842This is the service type for the
9843@uref{https://wiki.gentoo.org/wiki/Project:Eudev, eudev device
9844management daemon}. Compared to the previous example, in addition to an
d4053c71 9845extension of @var{shepherd-root-service-type}, we see two new fields:
0adfe95a
LC
9846
9847@table @code
9848@item compose
9849This is the procedure to @dfn{compose} the list of extensions to
9850services of this type.
9851
9852Services can extend the udev service by passing it lists of rules; we
9853compose those extensions simply by concatenating them.
9854
9855@item extend
9856This procedure defines how the service's value is @dfn{extended} with
9857the composition of the extensions.
9858
9859Udev extensions are composed into a list of rules, but the udev service
9860value is itself a @code{<udev-configuration>} record. So here, we
a40424bd 9861extend that record by appending the list of rules it contains to the
0adfe95a
LC
9862list of contributed rules.
9863@end table
9864
9865There can be only one instance of an extensible service type such as
9866@var{udev-service-type}. If there were more, the
9867@code{service-extension} specifications would be ambiguous.
9868
9869Still here? The next section provides a reference of the programming
9870interface for services.
9871
9872@node Service Reference
9873@subsubsection Service Reference
9874
9875We have seen an overview of service types (@pxref{Service Types and
9876Services}). This section provides a reference on how to manipulate
9877services and service types. This interface is provided by the
9878@code{(gnu services)} module.
9879
9880@deffn {Scheme Procedure} service @var{type} @var{value}
9881Return a new service of @var{type}, a @code{<service-type>} object (see
9882below.) @var{value} can be any object; it represents the parameters of
9883this particular service instance.
9884@end deffn
9885
9886@deffn {Scheme Procedure} service? @var{obj}
9887Return true if @var{obj} is a service.
9888@end deffn
8451a568 9889
0adfe95a
LC
9890@deffn {Scheme Procedure} service-kind @var{service}
9891Return the type of @var{service}---i.e., a @code{<service-type>} object.
9892@end deffn
9893
9894@deffn {Scheme Procedure} service-parameters @var{service}
9895Return the value associated with @var{service}. It represents its
9896parameters.
9897@end deffn
9898
9899Here is an example of how a service is created and manipulated:
9900
9901@example
9902(define s
9903 (service nginx-service-type
9904 (nginx-configuration
9905 (nginx nginx)
9906 (log-directory log-directory)
9907 (run-directory run-directory)
9908 (file config-file))))
9909
9910(service? s)
9911@result{} #t
9912
9913(eq? (service-kind s) nginx-service-type)
9914@result{} #t
9915@end example
9916
cd6f6c22
LC
9917The @code{modify-services} form provides a handy way to change the
9918parameters of some of the services of a list such as
9919@var{%base-services} (@pxref{Base Services, @code{%base-services}}). Of
9920course, you could always use standard list combinators such as
9921@code{map} and @code{fold} to do that (@pxref{SRFI-1, List Library,,
9922guile, GNU Guile Reference Manual}); @code{modify-services} simply
9923provides a more concise form for this common pattern.
9924
9925@deffn {Scheme Syntax} modify-services @var{services} @
9926 (@var{type} @var{variable} => @var{body}) @dots{}
9927
9928Modify the services listed in @var{services} according to the given
9929clauses. Each clause has the form:
9930
9931@example
9932(@var{type} @var{variable} => @var{body})
9933@end example
9934
9935where @var{type} is a service type, such as @var{guix-service-type}, and
9936@var{variable} is an identifier that is bound within @var{body} to the
9937value of the service of that @var{type}. @xref{Using the Configuration
9938System}, for an example.
9939
9940This is a shorthand for:
9941
9942@example
9943(map (lambda (service) @dots{}) @var{services})
9944@end example
9945@end deffn
9946
9947Next comes the programming interface for service types. This is
9948something you want to know when writing new service definitions, but not
9949necessarily when simply looking for ways to customize your
9950@code{operating-system} declaration.
9951
0adfe95a
LC
9952@deftp {Data Type} service-type
9953@cindex service type
9954This is the representation of a @dfn{service type} (@pxref{Service Types
9955and Services}).
9956
9957@table @asis
9958@item @code{name}
9959This is a symbol, used only to simplify inspection and debugging.
9960
9961@item @code{extensions}
9962A non-empty list of @code{<service-extension>} objects (see below.)
9963
9964@item @code{compose} (default: @code{#f})
9965If this is @code{#f}, then the service type denotes services that cannot
9966be extended---i.e., services that do not receive ``values'' from other
9967services.
9968
9969Otherwise, it must be a one-argument procedure. The procedure is called
9970by @code{fold-services} and is passed a list of values collected from
9971extensions. It must return a value that is a valid parameter value for
9972the service instance.
9973
9974@item @code{extend} (default: @code{#f})
9975If this is @code{#f}, services of this type cannot be extended.
9976
9977Otherwise, it must be a two-argument procedure: @code{fold-services}
9978calls it, passing it the service's initial value as the first argument
9979and the result of applying @code{compose} to the extension values as the
9980second argument.
9981@end table
9982
9983@xref{Service Types and Services}, for examples.
9984@end deftp
9985
9986@deffn {Scheme Procedure} service-extension @var{target-type} @
9987 @var{compute}
9988Return a new extension for services of type @var{target-type}.
9989@var{compute} must be a one-argument procedure: @code{fold-services}
9990calls it, passing it the value associated with the service that provides
9991the extension; it must return a valid value for the target service.
9992@end deffn
9993
9994@deffn {Scheme Procedure} service-extension? @var{obj}
9995Return true if @var{obj} is a service extension.
9996@end deffn
9997
9998At the core of the service abstraction lies the @code{fold-services}
9999procedure, which is responsible for ``compiling'' a list of services
d62e201c
LC
10000down to a single directory that contains everything needed to boot and
10001run the system---the directory shown by the @command{guix system build}
10002command (@pxref{Invoking guix system}). In essence, it propagates
10003service extensions down the service graph, updating each node parameters
10004on the way, until it reaches the root node.
0adfe95a
LC
10005
10006@deffn {Scheme Procedure} fold-services @var{services} @
d62e201c 10007 [#:target-type @var{system-service-type}]
0adfe95a
LC
10008Fold @var{services} by propagating their extensions down to the root of
10009type @var{target-type}; return the root service adjusted accordingly.
10010@end deffn
10011
10012Lastly, the @code{(gnu services)} module also defines several essential
10013service types, some of which are listed below.
10014
d62e201c
LC
10015@defvr {Scheme Variable} system-service-type
10016This is the root of the service graph. It produces the system directory
10017as returned by the @command{guix system build} command.
10018@end defvr
10019
0adfe95a 10020@defvr {Scheme Variable} boot-service-type
d62e201c
LC
10021The type of the ``boot service'', which produces the @dfn{boot script}.
10022The boot script is what the initial RAM disk runs when booting.
0adfe95a
LC
10023@end defvr
10024
10025@defvr {Scheme Variable} etc-service-type
10026The type of the @file{/etc} service. This service can be extended by
10027passing it name/file tuples such as:
10028
10029@example
10030(list `("issue" ,(plain-file "issue" "Welcome!\n")))
10031@end example
10032
10033In this example, the effect would be to add an @file{/etc/issue} file
10034pointing to the given file.
10035@end defvr
10036
10037@defvr {Scheme Variable} setuid-program-service-type
10038Type for the ``setuid-program service''. This service collects lists of
10039executable file names, passed as gexps, and adds them to the set of
10040setuid-root programs on the system (@pxref{Setuid Programs}).
10041@end defvr
10042
af4c3fd5
LC
10043@defvr {Scheme Variable} profile-service-type
10044Type of the service that populates the @dfn{system profile}---i.e., the
10045programs under @file{/run/current-system/profile}. Other services can
10046extend it by passing it lists of packages to add to the system profile.
10047@end defvr
10048
0adfe95a 10049
dd17bc38
AK
10050@node Shepherd Services
10051@subsubsection Shepherd Services
0adfe95a
LC
10052
10053@cindex PID 1
10054@cindex init system
a40424bd
CM
10055The @code{(gnu services shepherd)} module provides a way to define
10056services managed by the GNU@tie{}Shepherd, which is the GuixSD
10057initialization system---the first process that is started when the
10058system boots, aka. PID@tie{}1 (@pxref{Introduction,,, shepherd, The GNU
10059Shepherd Manual}).
6f305ea5 10060
dd17bc38
AK
10061Services in the Shepherd can depend on each other. For instance, the
10062SSH daemon may need to be started after the syslog daemon has been
10063started, which in turn can only happen once all the file systems have
10064been mounted. The simple operating system defined earlier (@pxref{Using
10065the Configuration System}) results in a service graph like this:
6f305ea5 10066
710fa231 10067@image{images/shepherd-graph,,5in,Typical shepherd service graph.}
6f305ea5
LC
10068
10069You can actually generate such a graph for any operating system
710fa231
AK
10070definition using the @command{guix system shepherd-graph} command
10071(@pxref{system-shepherd-graph, @command{guix system shepherd-graph}}).
6f305ea5 10072
d4053c71
AK
10073The @var{%shepherd-root-service} is a service object representing
10074PID@tie{}1, of type @var{shepherd-root-service-type}; it can be extended
10075by passing it lists of @code{<shepherd-service>} objects.
0adfe95a 10076
d4053c71 10077@deftp {Data Type} shepherd-service
dd17bc38 10078The data type representing a service managed by the Shepherd.
0adfe95a
LC
10079
10080@table @asis
10081@item @code{provision}
10082This is a list of symbols denoting what the service provides.
10083
dd17bc38
AK
10084These are the names that may be passed to @command{herd start},
10085@command{herd status}, and similar commands (@pxref{Invoking herd,,,
10086shepherd, The GNU Shepherd Manual}). @xref{Slots of services, the
10087@code{provides} slot,, shepherd, The GNU Shepherd Manual}, for details.
0adfe95a
LC
10088
10089@item @code{requirements} (default: @code{'()})
dd17bc38 10090List of symbols denoting the Shepherd services this one depends on.
0adfe95a
LC
10091
10092@item @code{respawn?} (default: @code{#t})
10093Whether to restart the service when it stops, for instance when the
10094underlying process dies.
10095
10096@item @code{start}
10097@itemx @code{stop} (default: @code{#~(const #f)})
dd17bc38
AK
10098The @code{start} and @code{stop} fields refer to the Shepherd's
10099facilities to start and stop processes (@pxref{Service De- and
10100Constructors,,, shepherd, The GNU Shepherd Manual}). They are given as
10101G-expressions that get expanded in the Shepherd configuration file
10102(@pxref{G-Expressions}).
0adfe95a
LC
10103
10104@item @code{documentation}
10105A documentation string, as shown when running:
10106
10107@example
dd17bc38 10108herd doc @var{service-name}
0adfe95a
LC
10109@end example
10110
10111where @var{service-name} is one of the symbols in @var{provision}
dd17bc38 10112(@pxref{Invoking herd,,, shepherd, The GNU Shepherd Manual}).
fae685b9
LC
10113
10114@item @code{modules} (default: @var{%default-modules})
10115This is the list of modules that must be in scope when @code{start} and
10116@code{stop} are evaluated.
10117
10118@item @code{imported-modules} (default: @var{%default-imported-modules})
10119This is the list of modules to import in the execution environment of
dd17bc38 10120the Shepherd.
fae685b9 10121
0adfe95a
LC
10122@end table
10123@end deftp
10124
d4053c71 10125@defvr {Scheme Variable} shepherd-root-service-type
dd17bc38 10126The service type for the Shepherd ``root service''---i.e., PID@tie{}1.
0adfe95a
LC
10127
10128This is the service type that extensions target when they want to create
dd17bc38 10129shepherd services (@pxref{Service Types and Services}, for an example).
d4053c71 10130Each extension must pass a list of @code{<shepherd-service>}.
0adfe95a
LC
10131@end defvr
10132
d4053c71 10133@defvr {Scheme Variable} %shepherd-root-service
0adfe95a
LC
10134This service represents PID@tie{}1.
10135@end defvr
8451a568 10136
8451a568 10137
cf4a9129
LC
10138@node Installing Debugging Files
10139@section Installing Debugging Files
8451a568 10140
cf4a9129
LC
10141@cindex debugging files
10142Program binaries, as produced by the GCC compilers for instance, are
10143typically written in the ELF format, with a section containing
10144@dfn{debugging information}. Debugging information is what allows the
10145debugger, GDB, to map binary code to source code; it is required to
10146debug a compiled program in good conditions.
8451a568 10147
cf4a9129
LC
10148The problem with debugging information is that is takes up a fair amount
10149of disk space. For example, debugging information for the GNU C Library
10150weighs in at more than 60 MiB. Thus, as a user, keeping all the
10151debugging info of all the installed programs is usually not an option.
10152Yet, space savings should not come at the cost of an impediment to
10153debugging---especially in the GNU system, which should make it easier
10154for users to exert their computing freedom (@pxref{GNU Distribution}).
8451a568 10155
cf4a9129
LC
10156Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a
10157mechanism that allows users to get the best of both worlds: debugging
10158information can be stripped from the binaries and stored in separate
10159files. GDB is then able to load debugging information from those files,
10160when they are available (@pxref{Separate Debug Files,,, gdb, Debugging
10161with GDB}).
8451a568 10162
cf4a9129
LC
10163The GNU distribution takes advantage of this by storing debugging
10164information in the @code{lib/debug} sub-directory of a separate package
10165output unimaginatively called @code{debug} (@pxref{Packages with
10166Multiple Outputs}). Users can choose to install the @code{debug} output
10167of a package when they need it. For instance, the following command
10168installs the debugging information for the GNU C Library and for GNU
10169Guile:
8451a568
LC
10170
10171@example
cf4a9129 10172guix package -i glibc:debug guile:debug
8451a568
LC
10173@end example
10174
cf4a9129
LC
10175GDB must then be told to look for debug files in the user's profile, by
10176setting the @code{debug-file-directory} variable (consider setting it
10177from the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with
10178GDB}):
8451a568 10179
cf4a9129
LC
10180@example
10181(gdb) set debug-file-directory ~/.guix-profile/lib/debug
10182@end example
8451a568 10183
cf4a9129
LC
10184From there on, GDB will pick up debugging information from the
10185@code{.debug} files under @file{~/.guix-profile/lib/debug}.
8451a568 10186
cf4a9129
LC
10187In addition, you will most likely want GDB to be able to show the source
10188code being debugged. To do that, you will have to unpack the source
10189code of the package of interest (obtained with @code{guix build
10190--source}, @pxref{Invoking guix build}), and to point GDB to that source
10191directory using the @code{directory} command (@pxref{Source Path,
10192@code{directory},, gdb, Debugging with GDB}).
8451a568 10193
cf4a9129
LC
10194@c XXX: keep me up-to-date
10195The @code{debug} output mechanism in Guix is implemented by the
10196@code{gnu-build-system} (@pxref{Build Systems}). Currently, it is
10197opt-in---debugging information is available only for those packages
10198whose definition explicitly declares a @code{debug} output. This may be
10199changed to opt-out in the future, if our build farm servers can handle
10200the load. To check whether a package has a @code{debug} output, use
10201@command{guix package --list-available} (@pxref{Invoking guix package}).
8451a568 10202
8451a568 10203
05962f29
LC
10204@node Security Updates
10205@section Security Updates
10206
843858b8
LC
10207@quotation Note
10208As of version @value{VERSION}, the feature described in this section is
10209experimental.
10210@end quotation
05962f29
LC
10211
10212@cindex security updates
10213Occasionally, important security vulnerabilities are discovered in core
10214software packages and must be patched. Guix follows a functional
10215package management discipline (@pxref{Introduction}), which implies
10216that, when a package is changed, @emph{every package that depends on it}
10217must be rebuilt. This can significantly slow down the deployment of
10218fixes in core packages such as libc or Bash, since basically the whole
10219distribution would need to be rebuilt. Using pre-built binaries helps
10220(@pxref{Substitutes}), but deployment may still take more time than
10221desired.
10222
10223@cindex grafts
10224To address that, Guix implements @dfn{grafts}, a mechanism that allows
10225for fast deployment of critical updates without the costs associated
10226with a whole-distribution rebuild. The idea is to rebuild only the
10227package that needs to be patched, and then to ``graft'' it onto packages
10228explicitly installed by the user and that were previously referring to
10229the original package. The cost of grafting is typically very low, and
10230order of magnitudes lower than a full rebuild of the dependency chain.
10231
10232@cindex replacements of packages, for grafts
10233For instance, suppose a security update needs to be applied to Bash.
10234Guix developers will provide a package definition for the ``fixed''
10235Bash, say @var{bash-fixed}, in the usual way (@pxref{Defining
10236Packages}). Then, the original package definition is augmented with a
10237@code{replacement} field pointing to the package containing the bug fix:
10238
10239@example
10240(define bash
10241 (package
10242 (name "bash")
10243 ;; @dots{}
10244 (replacement bash-fixed)))
10245@end example
10246
10247From there on, any package depending directly or indirectly on Bash that
10248is installed will automatically be ``rewritten'' to refer to
10249@var{bash-fixed} instead of @var{bash}. This grafting process takes
10250time proportional to the size of the package, but expect less than a
10251minute for an ``average'' package on a recent machine.
10252
10253Currently, the graft and the package it replaces (@var{bash-fixed} and
10254@var{bash} in the example above) must have the exact same @code{name}
10255and @code{version} fields. This restriction mostly comes from the fact
10256that grafting works by patching files, including binary files, directly.
10257Other restrictions may apply: for instance, when adding a graft to a
10258package providing a shared library, the original shared library and its
10259replacement must have the same @code{SONAME} and be binary-compatible.
10260
10261
cf4a9129
LC
10262@node Package Modules
10263@section Package Modules
8451a568 10264
cf4a9129
LC
10265From a programming viewpoint, the package definitions of the
10266GNU distribution are provided by Guile modules in the @code{(gnu packages
10267@dots{})} name space@footnote{Note that packages under the @code{(gnu
10268packages @dots{})} module name space are not necessarily ``GNU
10269packages''. This module naming scheme follows the usual Guile module
10270naming convention: @code{gnu} means that these modules are distributed
10271as part of the GNU system, and @code{packages} identifies modules that
10272define packages.} (@pxref{Modules, Guile modules,, guile, GNU Guile
10273Reference Manual}). For instance, the @code{(gnu packages emacs)}
10274module exports a variable named @code{emacs}, which is bound to a
10275@code{<package>} object (@pxref{Defining Packages}).
113daf62 10276
300868ba 10277The @code{(gnu packages @dots{})} module name space is
cf4a9129
LC
10278automatically scanned for packages by the command-line tools. For
10279instance, when running @code{guix package -i emacs}, all the @code{(gnu
10280packages @dots{})} modules are scanned until one that exports a package
10281object whose name is @code{emacs} is found. This package search
10282facility is implemented in the @code{(gnu packages)} module.
113daf62 10283
300868ba 10284@cindex customization, of packages
8689901f 10285@cindex package module search path
cf4a9129 10286Users can store package definitions in modules with different
60142854 10287names---e.g., @code{(my-packages emacs)}@footnote{Note that the file
c95ded7e
LC
10288name and module name must match. For instance, the @code{(my-packages
10289emacs)} module must be stored in a @file{my-packages/emacs.scm} file
10290relative to the load path specified with @option{--load-path} or
10291@code{GUIX_PACKAGE_PATH}. @xref{Modules and the File System,,,
10292guile, GNU Guile Reference Manual}, for details.}. These package definitions
300868ba
LC
10293will not be visible by default. Thus, users can invoke commands such as
10294@command{guix package} and @command{guix build} have to be used with the
c95ded7e
LC
10295@code{-e} option so that they know where to find the package. Better
10296yet, they can use the
300868ba 10297@code{-L} option of these commands to make those modules visible
8689901f
LC
10298(@pxref{Invoking guix build, @code{--load-path}}), or define the
10299@code{GUIX_PACKAGE_PATH} environment variable. This environment
10300variable makes it easy to extend or customize the distribution and is
10301honored by all the user interfaces.
10302
10303@defvr {Environment Variable} GUIX_PACKAGE_PATH
10304This is a colon-separated list of directories to search for package
10305modules. Directories listed in this variable take precedence over the
10306distribution's own modules.
10307@end defvr
ef5dd60a 10308
cf4a9129
LC
10309The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}:
10310each package is built based solely on other packages in the
10311distribution. The root of this dependency graph is a small set of
10312@dfn{bootstrap binaries}, provided by the @code{(gnu packages
10313bootstrap)} module. For more information on bootstrapping,
081145cf 10314@pxref{Bootstrapping}.
ef5dd60a 10315
cf4a9129
LC
10316@node Packaging Guidelines
10317@section Packaging Guidelines
ef5dd60a 10318
cf4a9129
LC
10319The GNU distribution is nascent and may well lack some of your favorite
10320packages. This section describes how you can help make the distribution
10321grow. @xref{Contributing}, for additional information on how you can
10322help.
ef5dd60a 10323
cf4a9129
LC
10324Free software packages are usually distributed in the form of
10325@dfn{source code tarballs}---typically @file{tar.gz} files that contain
10326all the source files. Adding a package to the distribution means
10327essentially two things: adding a @dfn{recipe} that describes how to
10328build the package, including a list of other packages required to build
f97c9175 10329it, and adding @dfn{package metadata} along with that recipe, such as a
cf4a9129 10330description and licensing information.
ef5dd60a 10331
cf4a9129
LC
10332In Guix all this information is embodied in @dfn{package definitions}.
10333Package definitions provide a high-level view of the package. They are
10334written using the syntax of the Scheme programming language; in fact,
10335for each package we define a variable bound to the package definition,
10336and export that variable from a module (@pxref{Package Modules}).
10337However, in-depth Scheme knowledge is @emph{not} a prerequisite for
10338creating packages. For more information on package definitions,
081145cf 10339@pxref{Defining Packages}.
ef5dd60a 10340
cf4a9129
LC
10341Once a package definition is in place, stored in a file in the Guix
10342source tree, it can be tested using the @command{guix build} command
10343(@pxref{Invoking guix build}). For example, assuming the new package is
c71979f4
LC
10344called @code{gnew}, you may run this command from the Guix build tree
10345(@pxref{Running Guix Before It Is Installed}):
ef5dd60a
LC
10346
10347@example
cf4a9129 10348./pre-inst-env guix build gnew --keep-failed
ef5dd60a 10349@end example
ef5dd60a 10350
cf4a9129
LC
10351Using @code{--keep-failed} makes it easier to debug build failures since
10352it provides access to the failed build tree. Another useful
10353command-line option when debugging is @code{--log-file}, to access the
10354build log.
ef5dd60a 10355
cf4a9129
LC
10356If the package is unknown to the @command{guix} command, it may be that
10357the source file contains a syntax error, or lacks a @code{define-public}
10358clause to export the package variable. To figure it out, you may load
10359the module from Guile to get more information about the actual error:
ef5dd60a 10360
cf4a9129
LC
10361@example
10362./pre-inst-env guile -c '(use-modules (gnu packages gnew))'
10363@end example
ef5dd60a 10364
cf4a9129
LC
10365Once your package builds correctly, please send us a patch
10366(@pxref{Contributing}). Well, if you need help, we will be happy to
10367help you too. Once the patch is committed in the Guix repository, the
10368new package automatically gets built on the supported platforms by
2b1cee21 10369@url{http://hydra.gnu.org/jobset/gnu/master, our continuous integration
cf4a9129 10370system}.
ef5dd60a 10371
cf4a9129
LC
10372@cindex substituter
10373Users can obtain the new package definition simply by running
10374@command{guix pull} (@pxref{Invoking guix pull}). When
10375@code{hydra.gnu.org} is done building the package, installing the
10376package automatically downloads binaries from there
10377(@pxref{Substitutes}). The only place where human intervention is
10378needed is to review and apply the patch.
ef5dd60a 10379
ef5dd60a 10380
cf4a9129 10381@menu
ec0339cd
LC
10382* Software Freedom:: What may go into the distribution.
10383* Package Naming:: What's in a name?
10384* Version Numbers:: When the name is not enough.
cbd02397 10385* Synopses and Descriptions:: Helping users find the right package.
ec0339cd
LC
10386* Python Modules:: Taming the snake.
10387* Perl Modules:: Little pearls.
10388* Fonts:: Fond of fonts.
cf4a9129 10389@end menu
ef5dd60a 10390
cf4a9129
LC
10391@node Software Freedom
10392@subsection Software Freedom
ef5dd60a 10393
cf4a9129 10394@c Adapted from http://www.gnu.org/philosophy/philosophy.html.
c11a6eb1 10395
cf4a9129
LC
10396The GNU operating system has been developed so that users can have
10397freedom in their computing. GNU is @dfn{free software}, meaning that
10398users have the @url{http://www.gnu.org/philosophy/free-sw.html,four
10399essential freedoms}: to run the program, to study and change the program
10400in source code form, to redistribute exact copies, and to distribute
10401modified versions. Packages found in the GNU distribution provide only
10402software that conveys these four freedoms.
c11a6eb1 10403
cf4a9129
LC
10404In addition, the GNU distribution follow the
10405@url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free
10406software distribution guidelines}. Among other things, these guidelines
10407reject non-free firmware, recommendations of non-free software, and
10408discuss ways to deal with trademarks and patents.
ef5dd60a 10409
cf4a9129
LC
10410Some packages contain a small and optional subset that violates the
10411above guidelines, for instance because this subset is itself non-free
10412code. When that happens, the offending items are removed with
10413appropriate patches or code snippets in the package definition's
10414@code{origin} form (@pxref{Defining Packages}). That way, @code{guix
10415build --source} returns the ``freed'' source rather than the unmodified
10416upstream source.
ef5dd60a 10417
ef5dd60a 10418
cf4a9129
LC
10419@node Package Naming
10420@subsection Package Naming
ef5dd60a 10421
cf4a9129
LC
10422A package has actually two names associated with it:
10423First, there is the name of the @emph{Scheme variable}, the one following
10424@code{define-public}. By this name, the package can be made known in the
10425Scheme code, for instance as input to another package. Second, there is
10426the string in the @code{name} field of a package definition. This name
10427is used by package management commands such as
10428@command{guix package} and @command{guix build}.
ef5dd60a 10429
cf4a9129
LC
10430Both are usually the same and correspond to the lowercase conversion of
10431the project name chosen upstream, with underscores replaced with
10432hyphens. For instance, GNUnet is available as @code{gnunet}, and
10433SDL_net as @code{sdl-net}.
927097ef 10434
cf4a9129 10435We do not add @code{lib} prefixes for library packages, unless these are
081145cf 10436already part of the official project name. But @pxref{Python
cf4a9129
LC
10437Modules} and @ref{Perl Modules} for special rules concerning modules for
10438the Python and Perl languages.
927097ef 10439
1b366ee4 10440Font package names are handled differently, @pxref{Fonts}.
7fec52b7 10441
ef5dd60a 10442
cf4a9129
LC
10443@node Version Numbers
10444@subsection Version Numbers
ef5dd60a 10445
cf4a9129
LC
10446We usually package only the latest version of a given free software
10447project. But sometimes, for instance for incompatible library versions,
10448two (or more) versions of the same package are needed. These require
10449different Scheme variable names. We use the name as defined
10450in @ref{Package Naming}
10451for the most recent version; previous versions use the same name, suffixed
10452by @code{-} and the smallest prefix of the version number that may
10453distinguish the two versions.
ef5dd60a 10454
cf4a9129
LC
10455The name inside the package definition is the same for all versions of a
10456package and does not contain any version number.
ef5dd60a 10457
cf4a9129 10458For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as follows:
ef5dd60a 10459
cf4a9129
LC
10460@example
10461(define-public gtk+
10462 (package
17d8e33f
ML
10463 (name "gtk+")
10464 (version "3.9.12")
10465 ...))
cf4a9129
LC
10466(define-public gtk+-2
10467 (package
17d8e33f
ML
10468 (name "gtk+")
10469 (version "2.24.20")
10470 ...))
cf4a9129
LC
10471@end example
10472If we also wanted GTK+ 3.8.2, this would be packaged as
10473@example
10474(define-public gtk+-3.8
10475 (package
17d8e33f
ML
10476 (name "gtk+")
10477 (version "3.8.2")
10478 ...))
cf4a9129 10479@end example
ef5dd60a 10480
880d647d
LC
10481@c See <https://lists.gnu.org/archive/html/guix-devel/2016-01/msg00425.html>,
10482@c for a discussion of what follows.
10483@cindex version number, for VCS snapshots
10484Occasionally, we package snapshots of upstream's version control system
10485(VCS) instead of formal releases. This should remain exceptional,
10486because it is up to upstream developers to clarify what the stable
10487release is. Yet, it is sometimes necessary. So, what should we put in
10488the @code{version} field?
10489
10490Clearly, we need to make the commit identifier of the VCS snapshot
10491visible in the version string, but we also need to make sure that the
10492version string is monotonically increasing so that @command{guix package
10493--upgrade} can determine which version is newer. Since commit
10494identifiers, notably with Git, are not monotonically increasing, we add
10495a revision number that we increase each time we upgrade to a newer
10496snapshot. The resulting version string looks like this:
10497
10498@example
104992.0.11-3.cabba9e
10500 ^ ^ ^
10501 | | `-- upstream commit ID
10502 | |
10503 | `--- Guix package revision
10504 |
10505latest upstream version
10506@end example
10507
10508It is a good idea to strip commit identifiers in the @code{version}
10509field to, say, 7 digits. It avoids an aesthetic annoyance (assuming
10510aesthetics have a role to play here) as well as problems related to OS
10511limits such as the maximum shebang length (127 bytes for the Linux
10512kernel.) It is best to use the full commit identifiers in
561360a5
LC
10513@code{origin}s, though, to avoid ambiguities. A typical package
10514definition may look like this:
10515
10516@example
10517(define my-package
10518 (let ((commit "c3f29bc928d5900971f65965feaae59e1272a3f7"))
10519 (package
10520 (version (string-append "0.9-1."
10521 (string-take commit 7)))
10522 (source (origin
10523 (method git-fetch)
10524 (uri (git-reference
10525 (url "git://example.org/my-package.git")
10526 (commit commit)))
10527 (sha256 (base32 "1mbikn@dots{}"))
10528 (file-name (string-append "my-package-" version
10529 "-checkout"))))
10530 ;; @dots{}
10531 )))
10532@end example
880d647d 10533
cbd02397
LC
10534@node Synopses and Descriptions
10535@subsection Synopses and Descriptions
10536
10537As we have seen before, each package in GNU@tie{}Guix includes a
10538synopsis and a description (@pxref{Defining Packages}). Synopses and
10539descriptions are important: They are what @command{guix package
10540--search} searches, and a crucial piece of information to help users
10541determine whether a given package suits their needs. Consequently,
10542packagers should pay attention to what goes into them.
10543
10544Synopses must start with a capital letter and must not end with a
10545period. They must not start with ``a'' or ``the'', which usually does
10546not bring anything; for instance, prefer ``File-frobbing tool'' over ``A
10547tool that frobs files''. The synopsis should say what the package
10548is---e.g., ``Core GNU utilities (file, text, shell)''---or what it is
10549used for---e.g., the synopsis for GNU@tie{}grep is ``Print lines
10550matching a pattern''.
10551
10552Keep in mind that the synopsis must be meaningful for a very wide
10553audience. For example, ``Manipulate alignments in the SAM format''
10554might make sense for a seasoned bioinformatics researcher, but might be
10555fairly unhelpful or even misleading to a non-specialized audience. It
10556is a good idea to come up with a synopsis that gives an idea of the
10557application domain of the package. In this example, this might give
10558something like ``Manipulate nucleotide sequence alignments'', which
10559hopefully gives the user a better idea of whether this is what they are
10560looking for.
10561
10562@cindex Texinfo markup, in package descriptions
10563Descriptions should take between five and ten lines. Use full
10564sentences, and avoid using acronyms without first introducing them.
10565Descriptions can include Texinfo markup, which is useful to introduce
10566ornaments such as @code{@@code} or @code{@@dfn}, bullet lists, or
ba7d6c76
ML
10567hyperlinks (@pxref{Overview,,, texinfo, GNU Texinfo}). However you
10568should be careful when using some characters for example @samp{@@} and
10569curly braces which are the basic special characters in Texinfo
10570(@pxref{Special Characters,,, texinfo, GNU Texinfo}). User interfaces
10571such as @command{guix package --show} take care of rendering it
10572appropriately.
cbd02397
LC
10573
10574Synopses and descriptions are translated by volunteers
10575@uref{http://translationproject.org/domain/guix-packages.html, at the
10576Translation Project} so that as many users as possible can read them in
10577their native language. User interfaces search them and display them in
10578the language specified by the current locale.
10579
10580Translation is a lot of work so, as a packager, please pay even more
10581attention to your synopses and descriptions as every change may entail
ba7d6c76 10582additional work for translators. In order to help them, it is possible
36743e71 10583to make recommendations or instructions visible to them by inserting
ba7d6c76
ML
10584special comments like this (@pxref{xgettext Invocation,,, gettext, GNU
10585Gettext}):
10586
10587@example
10588;; TRANSLATORS: "X11 resize-and-rotate" should not be translated.
10589(description "ARandR is designed to provide a simple visual front end
10590for the X11 resize-and-rotate (RandR) extension. @dots{}")
10591@end example
cbd02397 10592
ef5dd60a 10593
cf4a9129
LC
10594@node Python Modules
10595@subsection Python Modules
ef5dd60a 10596
cf4a9129
LC
10597We currently package Python 2 and Python 3, under the Scheme variable names
10598@code{python-2} and @code{python} as explained in @ref{Version Numbers}.
10599To avoid confusion and naming clashes with other programming languages, it
10600seems desirable that the name of a package for a Python module contains
10601the word @code{python}.
ef5dd60a 10602
cf4a9129
LC
10603Some modules are compatible with only one version of Python, others with both.
10604If the package Foo compiles only with Python 3, we name it
10605@code{python-foo}; if it compiles only with Python 2, we name it
10606@code{python2-foo}. If it is compatible with both versions, we create two
10607packages with the corresponding names.
ef5dd60a 10608
cf4a9129
LC
10609If a project already contains the word @code{python}, we drop this;
10610for instance, the module python-dateutil is packaged under the names
10611@code{python-dateutil} and @code{python2-dateutil}.
113daf62 10612
523e4896 10613
cf4a9129
LC
10614@node Perl Modules
10615@subsection Perl Modules
523e4896 10616
cf4a9129
LC
10617Perl programs standing for themselves are named as any other package,
10618using the lowercase upstream name.
10619For Perl packages containing a single class, we use the lowercase class name,
10620replace all occurrences of @code{::} by dashes and prepend the prefix
10621@code{perl-}.
10622So the class @code{XML::Parser} becomes @code{perl-xml-parser}.
10623Modules containing several classes keep their lowercase upstream name and
10624are also prepended by @code{perl-}. Such modules tend to have the word
10625@code{perl} somewhere in their name, which gets dropped in favor of the
10626prefix. For instance, @code{libwww-perl} becomes @code{perl-libwww}.
523e4896 10627
523e4896 10628
7fec52b7
AE
10629@node Fonts
10630@subsection Fonts
10631
10632For fonts that are in general not installed by a user for typesetting
10633purposes, or that are distributed as part of a larger software package,
10634we rely on the general packaging rules for software; for instance, this
10635applies to the fonts delivered as part of the X.Org system or fonts that
10636are part of TeX Live.
10637
10638To make it easier for a user to search for fonts, names for other packages
10639containing only fonts are constructed as follows, independently of the
10640upstream package name.
10641
10642The name of a package containing only one font family starts with
10643@code{font-}; it is followed by the foundry name and a dash @code{-}
10644if the foundry is known, and the font family name, in which spaces are
10645replaced by dashes (and as usual, all upper case letters are transformed
10646to lower case).
10647For example, the Gentium font family by SIL is packaged under the name
10648@code{font-sil-gentium}.
10649
10650For a package containing several font families, the name of the collection
10651is used in the place of the font family name.
10652For instance, the Liberation fonts consist of three families,
10653Liberation Sans, Liberation Serif and Liberation Mono.
10654These could be packaged separately under the names
10655@code{font-liberation-sans} and so on; but as they are distributed together
10656under a common name, we prefer to package them together as
10657@code{font-liberation}.
10658
10659In the case where several formats of the same font family or font collection
10660are packaged separately, a short form of the format, prepended by a dash,
10661is added to the package name. We use @code{-ttf} for TrueType fonts,
1b366ee4 10662@code{-otf} for OpenType fonts and @code{-type1} for PostScript Type 1
7fec52b7
AE
10663fonts.
10664
10665
b25937e3 10666
cf4a9129
LC
10667@node Bootstrapping
10668@section Bootstrapping
b25937e3 10669
cf4a9129 10670@c Adapted from the ELS 2013 paper.
b25937e3 10671
cf4a9129 10672@cindex bootstrapping
7889394e 10673
cf4a9129
LC
10674Bootstrapping in our context refers to how the distribution gets built
10675``from nothing''. Remember that the build environment of a derivation
10676contains nothing but its declared inputs (@pxref{Introduction}). So
10677there's an obvious chicken-and-egg problem: how does the first package
10678get built? How does the first compiler get compiled? Note that this is
10679a question of interest only to the curious hacker, not to the regular
10680user, so you can shamelessly skip this section if you consider yourself
10681a ``regular user''.
72b9d60d 10682
cf4a9129
LC
10683@cindex bootstrap binaries
10684The GNU system is primarily made of C code, with libc at its core. The
10685GNU build system itself assumes the availability of a Bourne shell and
10686command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
10687`grep'. Furthermore, build programs---programs that run
10688@code{./configure}, @code{make}, etc.---are written in Guile Scheme
10689(@pxref{Derivations}). Consequently, to be able to build anything at
10690all, from scratch, Guix relies on pre-built binaries of Guile, GCC,
10691Binutils, libc, and the other packages mentioned above---the
10692@dfn{bootstrap binaries}.
72b9d60d 10693
cf4a9129
LC
10694These bootstrap binaries are ``taken for granted'', though we can also
10695re-create them if needed (more on that later).
72b9d60d 10696
cf4a9129 10697@unnumberedsubsec Preparing to Use the Bootstrap Binaries
c79d54fe 10698
cf4a9129
LC
10699@c As of Emacs 24.3, Info-mode displays the image, but since it's a
10700@c large image, it's hard to scroll. Oh well.
10701@image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap derivations}
523e4896 10702
cf4a9129
LC
10703The figure above shows the very beginning of the dependency graph of the
10704distribution, corresponding to the package definitions of the @code{(gnu
d33fa0c7
LC
10705packages bootstrap)} module. A similar figure can be generated with
10706@command{guix graph} (@pxref{Invoking guix graph}), along the lines of:
10707
10708@example
10709guix graph -t derivation \
10710 -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
10711 | dot -Tps > t.ps
10712@end example
10713
10714At this level of detail, things are
cf4a9129
LC
10715slightly complex. First, Guile itself consists of an ELF executable,
10716along with many source and compiled Scheme files that are dynamically
10717loaded when it runs. This gets stored in the @file{guile-2.0.7.tar.xz}
10718tarball shown in this graph. This tarball is part of Guix's ``source''
10719distribution, and gets inserted into the store with @code{add-to-store}
10720(@pxref{The Store}).
2e7b5cea 10721
cf4a9129
LC
10722But how do we write a derivation that unpacks this tarball and adds it
10723to the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
10724derivation---the first one that gets built---uses @code{bash} as its
10725builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
10726@code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar},
10727@file{xz}, and @file{mkdir} are statically-linked binaries, also part of
10728the Guix source distribution, whose sole purpose is to allow the Guile
10729tarball to be unpacked.
fb729425 10730
cf4a9129
LC
10731Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning
10732Guile that can be used to run subsequent build programs. Its first task
10733is to download tarballs containing the other pre-built binaries---this
10734is what the @code{.tar.xz.drv} derivations do. Guix modules such as
10735@code{ftp-client.scm} are used for this purpose. The
10736@code{module-import.drv} derivations import those modules in a directory
10737in the store, using the original layout. The
10738@code{module-import-compiled.drv} derivations compile those modules, and
10739write them in an output directory with the right layout. This
10740corresponds to the @code{#:modules} argument of
10741@code{build-expression->derivation} (@pxref{Derivations}).
fb729425 10742
cf4a9129
LC
10743Finally, the various tarballs are unpacked by the
10744derivations @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv},
10745etc., at which point we have a working C tool chain.
fb729425 10746
fb729425 10747
cf4a9129 10748@unnumberedsubsec Building the Build Tools
523e4896 10749
cf4a9129
LC
10750Bootstrapping is complete when we have a full tool chain that does not
10751depend on the pre-built bootstrap tools discussed above. This
10752no-dependency requirement is verified by checking whether the files of
10753the final tool chain contain references to the @file{/gnu/store}
10754directories of the bootstrap inputs. The process that leads to this
10755``final'' tool chain is described by the package definitions found in
1f6f57df 10756the @code{(gnu packages commencement)} module.
df2ce343 10757
d33fa0c7
LC
10758The @command{guix graph} command allows us to ``zoom out'' compared to
10759the graph above, by looking at the level of package objects instead of
10760individual derivations---remember that a package may translate to
10761several derivations, typically one derivation to download its source,
10762one to build the Guile modules it needs, and one to actually build the
10763package from source. The command:
10764
10765@example
10766guix graph -t bag \
10767 -e '(@@@@ (gnu packages commencement)
10768 glibc-final-with-bootstrap-bash)' | dot -Tps > t.ps
10769@end example
10770
10771@noindent
10772produces the dependency graph leading to the ``final'' C
10773library@footnote{You may notice the @code{glibc-intermediate} label,
10774suggesting that it is not @emph{quite} final, but as a good
10775approximation, we will consider it final.}, depicted below.
10776
10777@image{images/bootstrap-packages,6in,,Dependency graph of the early packages}
10778
cf4a9129
LC
10779@c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
10780The first tool that gets built with the bootstrap binaries is
d33fa0c7
LC
10781GNU@tie{}Make---noted @code{make-boot0} above---which is a prerequisite
10782for all the following packages. From there Findutils and Diffutils get
10783built.
523e4896 10784
cf4a9129
LC
10785Then come the first-stage Binutils and GCC, built as pseudo cross
10786tools---i.e., with @code{--target} equal to @code{--host}. They are
10787used to build libc. Thanks to this cross-build trick, this libc is
10788guaranteed not to hold any reference to the initial tool chain.
4af2447e 10789
d33fa0c7
LC
10790From there the final Binutils and GCC (not shown above) are built.
10791GCC uses @code{ld}
cf4a9129
LC
10792from the final Binutils, and links programs against the just-built libc.
10793This tool chain is used to build the other packages used by Guix and by
10794the GNU Build System: Guile, Bash, Coreutils, etc.
4af2447e 10795
cf4a9129
LC
10796And voilà! At this point we have the complete set of build tools that
10797the GNU Build System expects. These are in the @code{%final-inputs}
dd164244
MW
10798variable of the @code{(gnu packages commencement)} module, and are
10799implicitly used by any package that uses @code{gnu-build-system}
1f6f57df 10800(@pxref{Build Systems, @code{gnu-build-system}}).
4af2447e 10801
4af2447e 10802
cf4a9129 10803@unnumberedsubsec Building the Bootstrap Binaries
4af2447e 10804
cf4a9129
LC
10805Because the final tool chain does not depend on the bootstrap binaries,
10806those rarely need to be updated. Nevertheless, it is useful to have an
10807automated way to produce them, should an update occur, and this is what
10808the @code{(gnu packages make-bootstrap)} module provides.
4af2447e 10809
cf4a9129
LC
10810The following command builds the tarballs containing the bootstrap
10811binaries (Guile, Binutils, GCC, libc, and a tarball containing a mixture
10812of Coreutils and other basic command-line tools):
4b2615e1 10813
cf4a9129
LC
10814@example
10815guix build bootstrap-tarballs
10816@end example
10817
10818The generated tarballs are those that should be referred to in the
10819@code{(gnu packages bootstrap)} module mentioned at the beginning of
10820this section.
10821
10822Still here? Then perhaps by now you've started to wonder: when do we
10823reach a fixed point? That is an interesting question! The answer is
10824unknown, but if you would like to investigate further (and have
10825significant computational and storage resources to do so), then let us
10826know.
10827
10828@node Porting
10829@section Porting to a New Platform
10830
10831As discussed above, the GNU distribution is self-contained, and
10832self-containment is achieved by relying on pre-built ``bootstrap
10833binaries'' (@pxref{Bootstrapping}). These binaries are specific to an
10834operating system kernel, CPU architecture, and application binary
10835interface (ABI). Thus, to port the distribution to a platform that is
10836not yet supported, one must build those bootstrap binaries, and update
10837the @code{(gnu packages bootstrap)} module to use them on that platform.
10838
10839Fortunately, Guix can @emph{cross compile} those bootstrap binaries.
10840When everything goes well, and assuming the GNU tool chain supports the
10841target platform, this can be as simple as running a command like this
10842one:
10843
10844@example
10845guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
10846@end example
10847
1c0c417d
LC
10848For this to work, the @code{glibc-dynamic-linker} procedure in
10849@code{(gnu packages bootstrap)} must be augmented to return the right
10850file name for libc's dynamic linker on that platform; likewise,
10851@code{system->linux-architecture} in @code{(gnu packages linux)} must be
10852taught about the new platform.
10853
cf4a9129 10854Once these are built, the @code{(gnu packages bootstrap)} module needs
1c0c417d
LC
10855to be updated to refer to these binaries on the target platform. That
10856is, the hashes and URLs of the bootstrap tarballs for the new platform
10857must be added alongside those of the currently supported platforms. The
10858bootstrap Guile tarball is treated specially: it is expected to be
10859available locally, and @file{gnu-system.am} has rules do download it for
10860the supported architectures; a rule for the new platform must be added
10861as well.
cf4a9129
LC
10862
10863In practice, there may be some complications. First, it may be that the
10864extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
10865above) is not recognized by all the GNU tools. Typically, glibc
10866recognizes some of these, whereas GCC uses an extra @code{--with-abi}
10867configure flag (see @code{gcc.scm} for examples of how to handle this).
10868Second, some of the required packages could fail to build for that
10869platform. Lastly, the generated binaries could be broken for some
10870reason.
4af2447e 10871
9bf3c1a7 10872@c *********************************************************************
8c01b9d0 10873@include contributing.texi
c78bd12b 10874
568717fd
LC
10875@c *********************************************************************
10876@node Acknowledgments
10877@chapter Acknowledgments
10878
136787cb
LC
10879Guix is based on the @uref{http://nixos.org/nix/, Nix package manager},
10880which was designed and
4c7ac9aa
LC
10881implemented by Eelco Dolstra, with contributions from other people (see
10882the @file{nix/AUTHORS} file in Guix.) Nix pioneered functional package
568717fd
LC
10883management, and promoted unprecedented features, such as transactional
10884package upgrades and rollbacks, per-user profiles, and referentially
10885transparent build processes. Without this work, Guix would not exist.
10886
10887The Nix-based software distributions, Nixpkgs and NixOS, have also been
10888an inspiration for Guix.
10889
4c7ac9aa
LC
10890GNU@tie{}Guix itself is a collective work with contributions from a
10891number of people. See the @file{AUTHORS} file in Guix for more
10892information on these fine people. The @file{THANKS} file lists people
10893who have helped by reporting bugs, taking care of the infrastructure,
10894providing artwork and themes, making suggestions, and more---thank you!
10895
10896
568717fd
LC
10897@c *********************************************************************
10898@node GNU Free Documentation License
10899@appendix GNU Free Documentation License
10900
10901@include fdl-1.3.texi
10902
10903@c *********************************************************************
10904@node Concept Index
10905@unnumbered Concept Index
10906@printindex cp
10907
a85b83d2
LC
10908@node Programming Index
10909@unnumbered Programming Index
10910@syncodeindex tp fn
10911@syncodeindex vr fn
568717fd
LC
10912@printindex fn
10913
10914@bye
10915
10916@c Local Variables:
10917@c ispell-local-dictionary: "american";
10918@c End: