gnu: system: Move file-system->spec to (gnu system file-systems).
[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
4379c35b 13Copyright @copyright{} 2012, 2013, 2014, 2015 Ludovic Courtès@*
af8a56b8 14Copyright @copyright{} 2013, 2014 Andreas Enge@*
87eafdbd 15Copyright @copyright{} 2013 Nikita Karetnikov@*
8c01b9d0
ML
16Copyright @copyright{} 2015 Mathieu Lirzin@*
17Copyright @copyright{} 2014 Pierre-Antoine Rault@*
87eafdbd 18Copyright @copyright{} 2015 Taylan Ulrich Bayırlı/Kammer
7df7a74e
NK
19
20Permission is granted to copy, distribute and/or modify this document
21under the terms of the GNU Free Documentation License, Version 1.3 or
22any later version published by the Free Software Foundation; with no
23Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
24copy of the license is included in the section entitled ``GNU Free
25Documentation License''.
26@end copying
568717fd 27
eeaf4427 28@dircategory Package management
568717fd
LC
29@direntry
30* guix: (guix). Guix, the functional package manager.
e49951eb 31* guix package: (guix)Invoking guix package
eeaf4427 32 Managing packages with Guix.
e49951eb 33* guix build: (guix)Invoking guix build
568717fd 34 Building packages with Guix.
054e8576
LC
35* guix system: (guix)Invoking guix system
36 Managing the operating system configuration.
568717fd 37@end direntry
568717fd 38
372c4bbc
DT
39@dircategory Software development
40@direntry
41* guix environment: (guix)Invoking guix environment
42 Building development environments with Guix.
43@end direntry
44
568717fd 45@titlepage
7730d112
LC
46@title GNU Guix Reference Manual
47@subtitle Using the GNU Guix Functional Package Manager
568717fd 48@author Ludovic Courtès
da7cabd4 49@author Andreas Enge
acc08466 50@author Nikita Karetnikov
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.
568717fd
LC
73* Programming Interface:: Using Guix in Scheme.
74* Utilities:: Package management commands.
a1ba8475 75* GNU Distribution:: Software for your friendly GNU system.
9bf3c1a7 76* Contributing:: Your help needed!
568717fd
LC
77
78* Acknowledgments:: Thanks!
79* GNU Free Documentation License:: The license of this manual.
80* Concept Index:: Concepts.
a85b83d2 81* Programming Index:: Data types, functions, and variables.
aaa3eaa9
LC
82
83@detailmenu
84 --- The Detailed Node Listing ---
85
86Installation
87
1b2b8177 88* Binary Installation:: Getting Guix running in no time!
aaa3eaa9 89* Requirements:: Software needed to build and run Guix.
ec0339cd 90* Running the Test Suite:: Testing Guix.
aaa3eaa9
LC
91* Setting Up the Daemon:: Preparing the build daemon's environment.
92* Invoking guix-daemon:: Running the build daemon.
0e2d0213 93* Application Setup:: Application-specific setup.
aaa3eaa9
LC
94
95Setting Up the Daemon
96
97* Build Environment Setup:: Preparing the isolated build environment.
98* Daemon Offload Setup:: Offloading builds to remote machines.
99
100Package Management
101
102* Features:: How Guix will make your life brighter.
103* Invoking guix package:: Package installation, removal, etc.
104* Emacs Interface:: Package management from Emacs.
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
111Programming Interface
112
113* Defining Packages:: Defining new packages.
114* Build Systems:: Specifying how packages are built.
115* The Store:: Manipulating the package store.
116* Derivations:: Low-level interface to package derivations.
117* The Store Monad:: Purely functional interface to the store.
118* G-Expressions:: Manipulating build expressions.
119
92492b23
LC
120Defining Packages
121
122* package Reference:: The package data type.
123* origin Reference:: The origin data type.
124
aaa3eaa9
LC
125Utilities
126
127* Invoking guix build:: Building packages from the command line.
fcc58db6 128* Invoking guix edit:: Editing package definitions.
aaa3eaa9
LC
129* Invoking guix download:: Downloading a file and printing its hash.
130* Invoking guix hash:: Computing the cryptographic hash of a file.
131* Invoking guix import:: Importing package definitions.
132* Invoking guix refresh:: Updating package definitions.
133* Invoking guix lint:: Finding errors in package definitions.
fcc58db6 134* Invoking guix size:: Profiling disk usage.
aaa3eaa9 135* Invoking guix environment:: Setting up development environments.
aff8ce7c 136* Invoking guix publish:: Sharing substitutes.
aaa3eaa9
LC
137
138GNU Distribution
139
140* System Installation:: Installing the whole operating system.
35ed9306 141* System Configuration:: Configuring the operating system.
aaa3eaa9
LC
142* Installing Debugging Files:: Feeding the debugger.
143* Security Updates:: Deploying security fixes quickly.
144* Package Modules:: Packages from the programmer's viewpoint.
145* Packaging Guidelines:: Growing the distribution.
146* Bootstrapping:: GNU/Linux built from scratch.
147* Porting:: Targeting another platform or kernel.
148
149System Configuration
150
151* Using the Configuration System:: Customizing your GNU system.
152* operating-system Reference:: Detail of operating-system declarations.
153* File Systems:: Configuring file system mounts.
154* Mapped Devices:: Block device extra processing.
155* User Accounts:: Specifying user accounts.
598e19dc 156* Locales:: Language and cultural convention settings.
aaa3eaa9
LC
157* Services:: Specifying system services.
158* Setuid Programs:: Programs running with root privileges.
1b2b8177 159* X.509 Certificates:: Authenticating HTTPS servers.
996ed739 160* Name Service Switch:: Configuring libc's name service switch.
aaa3eaa9
LC
161* Initial RAM Disk:: Linux-Libre bootstrapping.
162* GRUB Configuration:: Configuring the boot loader.
163* Invoking guix system:: Instantiating a system configuration.
164* Defining Services:: Adding new service definitions.
165
166Services
167
168* Base Services:: Essential system services.
169* Networking Services:: Network setup, SSH daemon, etc.
170* X Window:: Graphical display.
1b2b8177
LC
171* Desktop Services:: D-Bus and desktop services.
172* Database Services:: SQL databases.
aa4ed923 173* Various Services:: Other services.
aaa3eaa9
LC
174
175Packaging Guidelines
176
ec0339cd
LC
177* Software Freedom:: What may go into the distribution.
178* Package Naming:: What's in a name?
179* Version Numbers:: When the name is not enough.
180* Python Modules:: Taming the snake.
181* Perl Modules:: Little pearls.
182* Fonts:: Fond of fonts.
aaa3eaa9 183
8c01b9d0
ML
184Contributing
185
186* Building from Git:: The latest and greatest.
187* Running Guix Before It Is Installed:: Hacker tricks.
188* The Perfect Setup:: The right tools.
189* Coding Style:: Hygiene of the contributor.
190* Submitting Patches:: Share your work.
191
192Coding Style
193
194* Programming Paradigm:: How to compose your elements.
195* Modules:: Where to store your code?
196* Data Types and Pattern Matching:: Implementing data structures.
197* Formatting Code:: Writing conventions.
198
aaa3eaa9 199@end detailmenu
568717fd
LC
200@end menu
201
202@c *********************************************************************
203@node Introduction
204@chapter Introduction
205
c80e7e55
LC
206GNU Guix@footnote{``Guix'' is pronounced like ``geeks'', or ``ɡiːks''
207using the international phonetic alphabet (IPA).} is a functional
208package management tool for the GNU system. Package management consists
4bfc4ea3
NK
209of all activities that relate to building packages from sources,
210honoring their build-time and run-time dependencies,
c80e7e55
LC
211installing packages in user environments, upgrading installed packages
212to new versions or rolling back to a previous set, removing unused
213software packages, etc.
568717fd
LC
214
215@cindex functional package management
216The term @dfn{functional} refers to a specific package management
217discipline. In Guix, the package build and installation process is seen
4bfc4ea3
NK
218as a function, in the mathematical sense. That function takes inputs,
219such as build scripts, a compiler, and libraries, and
220returns an installed package. As a pure function, its result depends
568717fd
LC
221solely on its inputs---for instance, it cannot refer to software or
222scripts that were not explicitly passed as inputs. A build function
4bfc4ea3
NK
223always produces the same result when passed a given set of inputs. It
224cannot alter the system's environment in
568717fd
LC
225any way; for instance, it cannot create, modify, or delete files outside
226of its build and installation directories. This is achieved by running
e900c503 227build processes in isolated environments (or @dfn{containers}), where only their
4bfc4ea3 228explicit inputs are visible.
568717fd 229
e531ac2a 230@cindex store
568717fd 231The result of package build functions is @dfn{cached} in the file
e531ac2a
LC
232system, in a special directory called @dfn{the store} (@pxref{The
233Store}). Each package is installed in a directory of its own, in the
834129e0 234store---by default under @file{/gnu/store}. The directory name contains
568717fd
LC
235a hash of all the inputs used to build that package; thus, changing an
236input yields a different directory name.
237
238This approach is the foundation of Guix's salient features: support for
4bfc4ea3 239transactional package upgrade and rollback, per-user installation, and
eeaf4427 240garbage collection of packages (@pxref{Features}).
568717fd 241
4bfc4ea3 242Guix has a command-line interface, which allows users to build, install,
568717fd 243upgrade, and remove packages, as well as a Scheme programming interface.
568717fd 244
3ca2731c 245@cindex Guix System Distribution
4705641f 246@cindex GuixSD
a1ba8475 247Last but not least, Guix is used to build a distribution of the GNU
3ca2731c 248system, with many GNU and non-GNU free software packages. The Guix
4705641f
LC
249System Distribution, or GNU@tie{}GuixSD, takes advantage of the core
250properties of Guix at the system level. With GuixSD, users
3ca2731c
LC
251@emph{declare} all aspects of the operating system configuration, and
252Guix takes care of instantiating that configuration in a reproducible,
253stateless fashion. @xref{GNU Distribution}.
a1ba8475 254
bd5e766b
LC
255@c *********************************************************************
256@node Installation
257@chapter Installation
258
48febeb8
LC
259GNU Guix is available for download from its website at
260@url{http://www.gnu.org/software/guix/}. This section describes the
261software requirements of Guix, as well as how to install it and get
262ready to use it.
bd5e766b 263
5af6de3e
LC
264Note that this section is concerned with the installation of the package
265manager, which can be done on top of a running GNU/Linux system. If,
266instead, you want to install the complete GNU operating system,
6621cdb6 267@pxref{System Installation}.
5af6de3e 268
bd5e766b 269@menu
09722b11 270* Binary Installation:: Getting Guix running in no time!
bd5e766b 271* Requirements:: Software needed to build and run Guix.
ec0339cd 272* Running the Test Suite:: Testing Guix.
bd5e766b
LC
273* Setting Up the Daemon:: Preparing the build daemon's environment.
274* Invoking guix-daemon:: Running the build daemon.
0e2d0213 275* Application Setup:: Application-specific setup.
bd5e766b
LC
276@end menu
277
09722b11
LC
278@node Binary Installation
279@section Binary Installation
280
281This section describes how to install Guix on an arbitrary system from a
282self-contained tarball providing binaries for Guix and for all its
283dependencies. This is often quicker than installing from source, which
284is described in the next sections. The only requirement is to have
285GNU@tie{}tar and Xz.
286
287Installing goes along these lines:
288
289@enumerate
290@item
291Download the binary tarball from
ae806096 292@indicateurl{ftp://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz}@footnote{As
09722b11
LC
293usual, make sure to download the associated @file{.sig} file and to
294verify the authenticity of the tarball against it!}, where @var{system}
295is @code{x86_64-linux} for an @code{x86_64} machine already running the
296kernel Linux, and so on.
297
298@item
299As @code{root}, run:
300
301@example
5dc42964 302# cd /tmp
b91d7f0f 303# tar xf guix-binary-@value{VERSION}.@var{system}.tar.xz
5dc42964 304# mv var/guix /var/ && mv gnu /
09722b11
LC
305@end example
306
7acd3439
LC
307This creates @file{/gnu/store} (@pxref{The Store}) and @file{/var/guix}.
308The latter contains a ready-to-use profile for @code{root} (see next
309step.)
09722b11 310
5dc3ce5f
LC
311Do @emph{not} unpack the tarball on a working Guix system since that
312would overwrite its own essential files.
313
7acd3439
LC
314@item
315Make @code{root}'s profile available under @file{~/.guix-profile}:
316
317@example
318# ln -sf /var/guix/profiles/per-user/root/guix-profile \
319 ~root/.guix-profile
320@end example
321
09722b11 322@item
175ced41 323Run the daemon:
09722b11
LC
324
325@example
7acd3439 326# ~root/.guix-profile/bin/guix-daemon --build-users-group=guixbuild
09722b11
LC
327@end example
328
329@item
330Make the @command{guix} command available to other users on the machine,
331for instance with:
332
333@example
334# mkdir -p /usr/local/bin
335# cd /usr/local/bin
d72d05f9 336# ln -s /var/guix/profiles/per-user/root/guix-profile/bin/guix
09722b11 337@end example
39f8ed14
LC
338
339@item
340To use substitutes from @code{hydra.gnu.org} (@pxref{Substitutes}),
341authorize them:
342
343@example
7acd3439 344# guix archive --authorize < ~root/.guix-profile/share/guix/hydra.gnu.org.pub
39f8ed14 345@end example
09722b11
LC
346@end enumerate
347
348And that's it!
349
5dc3ce5f 350The @code{guix} package must remain available in @code{root}'s
09722b11
LC
351profile, or it would become subject to garbage collection---in which
352case you would find yourself badly handicapped by the lack of the
353@command{guix} command.
354
39f8ed14
LC
355The tarball in question can be (re)produced and verified simply by
356running the following command in the Guix source tree:
09722b11
LC
357
358@example
359make guix-binary.@var{system}.tar.xz
360@end example
361
362
bd5e766b
LC
363@node Requirements
364@section Requirements
365
09722b11
LC
366This section lists requirements when building Guix from source. The
367build procedure for Guix is the same as for other GNU software, and is
368not covered here. Please see the files @file{README} and @file{INSTALL}
369in the Guix source tree for additional details.
370
bd5e766b
LC
371GNU Guix depends on the following packages:
372
373@itemize
47c66da0 374@item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.7 or later;
288dca55 375@item @url{http://gnupg.org/, GNU libgcrypt};
f0b98b84 376@item @url{http://www.gnu.org/software/make/, GNU Make}.
8a96bd4b
ID
377@end itemize
378
379The following dependencies are optional:
380
381@itemize
288dca55 382@item
8a96bd4b 383Installing
288dca55 384@url{http://savannah.nongnu.org/projects/guile-json/, Guile-JSON} will
2f7d2d91
LC
385allow you to use the @command{guix import pypi} command (@pxref{Invoking
386guix import}). It is of
288dca55 387interest primarily for developers and not for casual users.
8a96bd4b
ID
388@item
389Installing @uref{http://gnutls.org/, GnuTLS-Guile} will
390allow you to access @code{https} URLs with the @command{guix download}
d45dc6da
EB
391command (@pxref{Invoking guix download}), the @command{guix import pypi}
392command, and the @command{guix import cpan} command. This is primarily
393of interest to developers. @xref{Guile Preparations, how to install the
394GnuTLS bindings for Guile,, gnutls-guile, GnuTLS-Guile}.
bd5e766b
LC
395@end itemize
396
397Unless @code{--disable-daemon} was passed to @command{configure}, the
398following packages are also needed:
399
400@itemize
368d08f7
LC
401@item @url{http://sqlite.org, SQLite 3};
402@item @url{http://www.bzip.org, libbz2};
403@item @url{http://gcc.gnu.org, GCC's g++}, with support for the
404C++11 standard.
bd5e766b
LC
405@end itemize
406
4bfc4ea3
NK
407When a working installation of @url{http://nixos.org/nix/, the Nix package
408manager} is available, you
bd5e766b 409can instead configure Guix with @code{--disable-daemon}. In that case,
4bfc4ea3 410Nix replaces the three dependencies above.
bd5e766b 411
b22a12fd
LC
412Guix is compatible with Nix, so it is possible to share the same store
413between both. To do so, you must pass @command{configure} not only the
414same @code{--with-store-dir} value, but also the same
4bfc4ea3
NK
415@code{--localstatedir} value. The latter is essential because it
416specifies where the database that stores metadata about the store is
834129e0 417located, among other things. The default values for Nix are
b22a12fd 418@code{--with-store-dir=/nix/store} and @code{--localstatedir=/nix/var}.
4bfc4ea3
NK
419Note that @code{--disable-daemon} is not required if
420your goal is to share the store with Nix.
b22a12fd 421
ec0339cd
LC
422@node Running the Test Suite
423@section Running the Test Suite
424
425After a successful @command{configure} and @code{make} run, it is a good
426idea to run the test suite. It can help catch issues with the setup or
427environment, or bugs in Guix itself---and really, reporting test
428failures is a good way to help improve the software. To run the test
429suite, type:
430
431@example
432make check
433@end example
434
435Test cases can run in parallel: you can use the @code{-j} option of
436GNU@tie{}make to speed things up. The first run may take a few minutes
437on a recent machine; subsequent runs will be faster because the store
438that is created for test purposes will already have various things in
439cache.
440
441Upon failure, please email @email{bug-guix@@gnu.org} and attach the
442@file{test-suite.log} file. When @file{tests/@var{something}.scm}
443fails, please also attach the @file{@var{something}.log} file available
444in the top-level build directory. Please specify the Guix version being
445used as well as version numbers of the dependencies
446(@pxref{Requirements}) in your message.
447
bd5e766b
LC
448@node Setting Up the Daemon
449@section Setting Up the Daemon
450
451@cindex daemon
452Operations such as building a package or running the garbage collector
49e6291a 453are all performed by a specialized process, the @dfn{build daemon}, on
bd5e766b
LC
454behalf of clients. Only the daemon may access the store and its
455associated database. Thus, any operation that manipulates the store
456goes through the daemon. For instance, command-line tools such as
e49951eb 457@command{guix package} and @command{guix build} communicate with the
bd5e766b
LC
458daemon (@i{via} remote procedure calls) to instruct it what to do.
459
49e6291a 460The following sections explain how to prepare the build daemon's
225dafde
LC
461environment. Also @ref{Substitutes}, for information on how to allow
462the daemon to download pre-built binaries.
49e6291a
LC
463
464@menu
465* Build Environment Setup:: Preparing the isolated build environment.
466* Daemon Offload Setup:: Offloading builds to remote machines.
467@end menu
468
469@node Build Environment Setup
470@subsection Build Environment Setup
471
bd5e766b
LC
472In a standard multi-user setup, Guix and its daemon---the
473@command{guix-daemon} program---are installed by the system
834129e0 474administrator; @file{/gnu/store} is owned by @code{root} and
bd5e766b
LC
475@command{guix-daemon} runs as @code{root}. Unprivileged users may use
476Guix tools to build packages or otherwise access the store, and the
477daemon will do it on their behalf, ensuring that the store is kept in a
478consistent state, and allowing built packages to be shared among users.
479
480@cindex build users
481When @command{guix-daemon} runs as @code{root}, you may not want package
482build processes themselves to run as @code{root} too, for obvious
483security reasons. To avoid that, a special pool of @dfn{build users}
484should be created for use by build processes started by the daemon.
485These build users need not have a shell and a home directory: they will
486just be used when the daemon drops @code{root} privileges in build
487processes. Having several such users allows the daemon to launch
488distinct build processes under separate UIDs, which guarantees that they
489do not interfere with each other---an essential feature since builds are
490regarded as pure functions (@pxref{Introduction}).
491
492On a GNU/Linux system, a build user pool may be created like this (using
493Bash syntax and the @code{shadow} commands):
494
091196b3
LC
495@c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
496@c for why `-G' is needed.
bd5e766b 497@example
cfc149dc
LC
498# groupadd --system guixbuild
499# for i in `seq -w 1 10`;
bd5e766b 500 do
cfc149dc
LC
501 useradd -g guixbuild -G guixbuild \
502 -d /var/empty -s `which nologin` \
503 -c "Guix build user $i" --system \
504 guixbuilder$i;
bd5e766b
LC
505 done
506@end example
507
508@noindent
54eb03ab
LC
509The number of build users determines how many build jobs may run in
510parallel, as specified by the @option{--max-jobs} option
511(@pxref{Invoking guix-daemon, @option{--max-jobs}}).
bd5e766b
LC
512The @code{guix-daemon} program may then be run as @code{root} with:
513
514@example
cfc149dc 515# guix-daemon --build-users-group=guixbuild
bd5e766b
LC
516@end example
517
e900c503 518@cindex chroot
b095792f
LC
519@noindent
520This way, the daemon starts build processes in a chroot, under one of
cfc149dc 521the @code{guixbuilder} users. On GNU/Linux, by default, the chroot
6dc99317
LC
522environment contains nothing but:
523
524@c Keep this list in sync with libstore/build.cc! -----------------------
525@itemize
526@item
4743a4da
LC
527a minimal @code{/dev} directory, created mostly independently from the
528host @code{/dev}@footnote{``Mostly'', because while the set of files
529that appear in the chroot's @code{/dev} is fixed, most of these files
530can only be created if the host has them.};
531
532@item
533the @code{/proc} directory; it only shows the container's processes
534since a separate PID name space is used;
6dc99317
LC
535
536@item
537@file{/etc/passwd} with an entry for the current user and an entry for
538user @file{nobody};
539
540@item
541@file{/etc/group} with an entry for the user's group;
542
543@item
544@file{/etc/hosts} with an entry that maps @code{localhost} to
545@code{127.0.0.1};
546
547@item
548a writable @file{/tmp} directory.
549@end itemize
b095792f 550
1e2644bb
LC
551If you are installing Guix as an unprivileged user, it is still possible
552to run @command{guix-daemon} provided you pass @code{--disable-chroot}.
553However, build processes will not be isolated from one another, and not
554from the rest of the system. Thus, build processes may interfere with
555each other, and may access programs, libraries, and other files
556available on the system---making it much harder to view them as
557@emph{pure} functions.
bd5e766b 558
49e6291a
LC
559
560@node Daemon Offload Setup
561@subsection Using the Offload Facility
562
563@cindex offloading
4ec2e92d
LC
564@cindex build hook
565When desired, the build daemon can @dfn{offload}
566derivation builds to other machines
49e6291a
LC
567running Guix, using the @code{offload} @dfn{build hook}. When that
568feature is enabled, a list of user-specified build machines is read from
569@file{/etc/guix/machines.scm}; anytime a build is requested, for
570instance via @code{guix build}, the daemon attempts to offload it to one
571of the machines that satisfies the derivation's constraints, in
572particular its system type---e.g., @file{x86_64-linux}. Missing
573prerequisites for the build are copied over SSH to the target machine,
574which then proceeds with the build; upon success the output(s) of the
575build are copied back to the initial machine.
576
4ec2e92d 577The @file{/etc/guix/machines.scm} file typically looks like this:
49e6291a
LC
578
579@example
580(list (build-machine
581 (name "eightysix.example.org")
582 (system "x86_64-linux")
583 (user "bob")
584 (speed 2.)) ; incredibly fast!
585
586 (build-machine
587 (name "meeps.example.org")
588 (system "mips64el-linux")
589 (user "alice")
590 (private-key
591 (string-append (getenv "HOME")
592 "/.ssh/id-rsa-for-guix"))))
593@end example
594
595@noindent
596In the example above we specify a list of two build machines, one for
597the @code{x86_64} architecture and one for the @code{mips64el}
4ec2e92d
LC
598architecture.
599
600In fact, this file is---not surprisingly!---a Scheme file that is
601evaluated when the @code{offload} hook is started. Its return value
602must be a list of @code{build-machine} objects. While this example
603shows a fixed list of build machines, one could imagine, say, using
604DNS-SD to return a list of potential build machines discovered in the
605local network (@pxref{Introduction, Guile-Avahi,, guile-avahi, Using
c678a4ee
LC
606Avahi in Guile Scheme Programs}). The @code{build-machine} data type is
607detailed below.
4ec2e92d 608
c678a4ee
LC
609@deftp {Data Type} build-machine
610This data type represents build machines the daemon may offload builds
611to. The important fields are:
49e6291a
LC
612
613@table @code
614
615@item name
616The remote machine's host name.
617
618@item system
c678a4ee 619The remote machine's system type---e.g., @code{"x86_64-linux"}.
49e6291a
LC
620
621@item user
622The user account to use when connecting to the remote machine over SSH.
623Note that the SSH key pair must @emph{not} be passphrase-protected, to
624allow non-interactive logins.
625
626@end table
627
4ec2e92d 628A number of optional fields may be specified:
49e6291a
LC
629
630@table @code
631
cecd72d5
LC
632@item port
633Port number of the machine's SSH server (default: 22).
634
49e6291a
LC
635@item private-key
636The SSH private key file to use when connecting to the machine.
637
638@item parallel-builds
639The number of builds that may run in parallel on the machine (1 by
640default.)
641
642@item speed
643A ``relative speed factor''. The offload scheduler will tend to prefer
644machines with a higher speed factor.
645
646@item features
647A list of strings denoting specific features supported by the machine.
648An example is @code{"kvm"} for machines that have the KVM Linux modules
649and corresponding hardware support. Derivations can request features by
650name, and they will be scheduled on matching build machines.
651
652@end table
c678a4ee 653@end deftp
49e6291a
LC
654
655The @code{guix} command must be in the search path on the build
656machines, since offloading works by invoking the @code{guix archive} and
657@code{guix build} commands.
658
659There's one last thing to do once @file{machines.scm} is in place. As
660explained above, when offloading, files are transferred back and forth
661between the machine stores. For this to work, you need to generate a
662key pair to allow the daemon to export signed archives of files from the
663store (@pxref{Invoking guix archive}):
664
665@example
666# guix archive --generate-key
667@end example
668
669@noindent
670Thus, when receiving files, a machine's build daemon can make sure they
671are genuine, have not been tampered with, and that they are signed by an
672authorized key.
673
674
bd5e766b
LC
675@node Invoking guix-daemon
676@section Invoking @command{guix-daemon}
677
678The @command{guix-daemon} program implements all the functionality to
679access the store. This includes launching build processes, running the
680garbage collector, querying the availability of a build result, etc. It
681is normally run as @code{root} like this:
682
683@example
cfc149dc 684# guix-daemon --build-users-group=guixbuild
bd5e766b
LC
685@end example
686
687@noindent
081145cf 688For details on how to set it up, @pxref{Setting Up the Daemon}.
bd5e766b 689
e900c503
LC
690@cindex chroot
691@cindex container, build environment
692@cindex build environment
693@cindex reproducible builds
bd5e766b
LC
694By default, @command{guix-daemon} launches build processes under
695different UIDs, taken from the build group specified with
696@code{--build-users-group}. In addition, each build process is run in a
697chroot environment that only contains the subset of the store that the
698build process depends on, as specified by its derivation
699(@pxref{Programming Interface, derivation}), plus a set of specific
700system directories. By default, the latter contains @file{/dev} and
e900c503
LC
701@file{/dev/pts}. Furthermore, on GNU/Linux, the build environment is a
702@dfn{container}: in addition to having its own file system tree, it has
703a separate mount name space, its own PID name space, network name space,
704etc. This helps achieve reproducible builds (@pxref{Features}).
bd5e766b 705
cbc538fe
LC
706When the daemon performs a build on behalf of the user, it creates a
707build directory under @file{/tmp} or under the directory specified by
708its @code{TMPDIR} environment variable; this directory is shared with
709the container for the duration of the build. Be aware that using a
710directory other than @file{/tmp} can affect build results---for example,
711with a longer directory name, a build process that uses Unix-domain
712sockets might hit the name length limitation for @code{sun_path}, which
713it would otherwise not hit.
714
715The build directory is automatically deleted upon completion, unless the
716build failed and the client specified @option{--keep-failed}
717(@pxref{Invoking guix build, @option{--keep-failed}}).
718
bd5e766b
LC
719The following command-line options are supported:
720
721@table @code
722@item --build-users-group=@var{group}
723Take users from @var{group} to run build processes (@pxref{Setting Up
724the Daemon, build users}).
725
6858f9d1 726@item --no-substitutes
b5385b52 727@cindex substitutes
6858f9d1 728Do not use substitutes for build products. That is, always build things
c4202d60
LC
729locally instead of allowing downloads of pre-built binaries
730(@pxref{Substitutes}).
6858f9d1 731
b5385b52
LC
732By default substitutes are used, unless the client---such as the
733@command{guix package} command---is explicitly invoked with
734@code{--no-substitutes}.
735
736When the daemon runs with @code{--no-substitutes}, clients can still
737explicitly enable substitution @i{via} the @code{set-build-options}
738remote procedure call (@pxref{The Store}).
739
9176607e
LC
740@item --substitute-urls=@var{urls}
741Consider @var{urls} the default whitespace-separated list of substitute
ae806096 742source URLs. When this option is omitted, @indicateurl{http://hydra.gnu.org}
9176607e
LC
743is used.
744
745This means that substitutes may be downloaded from @var{urls}, as long
746as they are signed by a trusted signature (@pxref{Substitutes}).
747
4ec2e92d
LC
748@cindex build hook
749@item --no-build-hook
750Do not use the @dfn{build hook}.
751
752The build hook is a helper program that the daemon can start and to
753which it submits build requests. This mechanism is used to offload
754builds to other machines (@pxref{Daemon Offload Setup}).
755
bd5e766b
LC
756@item --cache-failures
757Cache build failures. By default, only successful builds are cached.
758
759@item --cores=@var{n}
760@itemx -c @var{n}
761Use @var{n} CPU cores to build each derivation; @code{0} means as many
762as available.
763
6efc160e 764The default value is @code{0}, but it may be overridden by clients, such
e49951eb
MW
765as the @code{--cores} option of @command{guix build} (@pxref{Invoking
766guix build}).
bd5e766b
LC
767
768The effect is to define the @code{NIX_BUILD_CORES} environment variable
769in the build process, which can then use it to exploit internal
770parallelism---for instance, by running @code{make -j$NIX_BUILD_CORES}.
771
772@item --max-jobs=@var{n}
773@itemx -M @var{n}
774Allow at most @var{n} build jobs in parallel. The default value is
f6526eb3
LC
775@code{1}. Setting it to @code{0} means that no builds will be performed
776locally; instead, the daemon will offload builds (@pxref{Daemon Offload
777Setup}), or simply fail.
bd5e766b
LC
778
779@item --debug
780Produce debugging output.
781
782This is useful to debug daemon start-up issues, but then it may be
783overridden by clients, for example the @code{--verbosity} option of
e49951eb 784@command{guix build} (@pxref{Invoking guix build}).
bd5e766b
LC
785
786@item --chroot-directory=@var{dir}
787Add @var{dir} to the build chroot.
788
789Doing this may change the result of build processes---for instance if
790they use optional dependencies found in @var{dir} when it is available,
791and not otherwise. For that reason, it is not recommended to do so.
792Instead, make sure that each derivation declares all the inputs that it
793needs.
794
795@item --disable-chroot
796Disable chroot builds.
797
798Using this option is not recommended since, again, it would allow build
1e2644bb
LC
799processes to gain access to undeclared dependencies. It is necessary,
800though, when @command{guix-daemon} is running under an unprivileged user
801account.
bd5e766b
LC
802
803@item --disable-log-compression
804Disable compression of the build logs.
805
1da983b9
LC
806Unless @code{--lose-logs} is used, all the build logs are kept in the
807@var{localstatedir}. To save space, the daemon automatically compresses
808them with bzip2 by default. This option disables that.
809
ab3893d7
LC
810@item --disable-deduplication
811@cindex deduplication
bd5e766b
LC
812Disable automatic file ``deduplication'' in the store.
813
1da983b9 814By default, files added to the store are automatically ``deduplicated'':
ab3893d7
LC
815if a newly added file is identical to another one found in the store,
816the daemon makes the new file a hard link to the other file. This can
817noticeably reduce disk usage, at the expense of slightly increasde
818input/output load at the end of a build process. This option disables
819this optimization.
1da983b9 820
6e37066e
LC
821@item --gc-keep-outputs[=yes|no]
822Tell whether the garbage collector (GC) must keep outputs of live
823derivations.
824
825When set to ``yes'', the GC will keep the outputs of any live derivation
826available in the store---the @code{.drv} files. The default is ``no'',
827meaning that derivation outputs are kept only if they are GC roots.
828
829@item --gc-keep-derivations[=yes|no]
830Tell whether the garbage collector (GC) must keep derivations
831corresponding to live outputs.
832
833When set to ``yes'', as is the case by default, the GC keeps
834derivations---i.e., @code{.drv} files---as long as at least one of their
835outputs is live. This allows users to keep track of the origins of
836items in their store. Setting it to ``no'' saves a bit of disk space.
837
838Note that when both @code{--gc-keep-derivations} and
839@code{--gc-keep-outputs} are used, the effect is to keep all the build
840prerequisites (the sources, compiler, libraries, and other build-time
841tools) of live objects in the store, regardless of whether these
842prerequisites are live. This is convenient for developers since it
843saves rebuilds or downloads.
844
bd5e766b
LC
845@item --impersonate-linux-2.6
846On Linux-based systems, impersonate Linux 2.6. This means that the
847kernel's @code{uname} system call will report 2.6 as the release number.
848
849This might be helpful to build programs that (usually wrongfully) depend
850on the kernel version number.
851
852@item --lose-logs
853Do not keep build logs. By default they are kept under
ce33631f 854@code{@var{localstatedir}/guix/log}.
bd5e766b
LC
855
856@item --system=@var{system}
857Assume @var{system} as the current system type. By default it is the
858architecture/kernel pair found at configure time, such as
859@code{x86_64-linux}.
b8d2aa26
LC
860
861@item --listen=@var{socket}
862Listen for connections on @var{socket}, the file name of a Unix-domain
863socket. The default socket is
864@file{@var{localstatedir}/daemon-socket/socket}. This option is only
865useful in exceptional circumstances, such as if you need to run several
866daemons on the same machine.
bd5e766b
LC
867@end table
868
869
0e2d0213
LC
870@node Application Setup
871@section Application Setup
872
873When using Guix on top of GNU/Linux distribution other than GuixSD, a
874few additional steps are needed to get everything in place. Here are
875some of them.
876
877@subsection Locales
878
879@cindex locales, when not on GuixSD
880Packages installed @i{via} Guix will not use the host system's locale
881data. Instead, you must first install one of the locale packages
882available with Guix and then define the @code{LOCPATH} environment
883variable (@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library
884Reference Manual}):
885
886@example
887$ guix package -i glibc-locales
888$ export LOCPATH=$HOME/.guix-profile/lib/locale
889@end example
890
891Note that the @code{glibc-locales} package contains data for all the
892locales supported by the GNU@tie{}libc and weighs in at around
893110@tie{}MiB. Alternately, the @code{glibc-utf8-locales} is smaller but
894limited to a few UTF-8 locales.
895
896@subsection X11 Fonts
897
898The majority of graphical applications uses Fontconfig to locate and
899load fonts and perform X11-client-side rendering. Guix's
900@code{fontconfig} package looks for fonts in @file{$HOME/.guix-profile}
901by default. Thus, to allow graphical applications installed with Guix
902to display fonts, you will have to install fonts with Guix as well.
903Essential font packages include @code{gs-fonts}, @code{font-dejavu}, and
904@code{font-gnu-freefont}.
905
906@c TODO What else?
907
eeaf4427
LC
908@c *********************************************************************
909@node Package Management
910@chapter Package Management
911
f8348b91 912The purpose of GNU Guix is to allow users to easily install, upgrade, and
eeaf4427
LC
913remove software packages, without having to know about their build
914procedure or dependencies. Guix also goes beyond this obvious set of
915features.
916
917This chapter describes the main features of Guix, as well as the package
c1941588
LC
918management tools it provides. Two user interfaces are provided for
919routine package management tasks: a command-line interface
920(@pxref{Invoking guix package, @code{guix package}}), and a visual user
921interface in Emacs (@pxref{Emacs Interface}).
eeaf4427
LC
922
923@menu
924* Features:: How Guix will make your life brighter.
e49951eb 925* Invoking guix package:: Package installation, removal, etc.
457f60fa 926* Emacs Interface:: Package management from Emacs.
c4202d60 927* Substitutes:: Downloading pre-built binaries.
760c60d6 928* Packages with Multiple Outputs:: Single source package, multiple outputs.
e49951eb 929* Invoking guix gc:: Running the garbage collector.
f651b477 930* Invoking guix pull:: Fetching the latest Guix and distribution.
760c60d6 931* Invoking guix archive:: Exporting and importing store files.
eeaf4427
LC
932@end menu
933
934@node Features
935@section Features
936
937When using Guix, each package ends up in the @dfn{package store}, in its
938own directory---something that resembles
9a130e19
AK
939@file{/gnu/store/xxx-package-1.2}, where @code{xxx} is a base32 string
940(note that Guix comes with an Emacs extension to shorten those file
081145cf 941names, @pxref{Emacs Prettify}.)
eeaf4427
LC
942
943Instead of referring to these directories, users have their own
944@dfn{profile}, which points to the packages that they actually want to
821b0015
LC
945use. These profiles are stored within each user's home directory, at
946@code{$HOME/.guix-profile}.
eeaf4427 947
821b0015 948For example, @code{alice} installs GCC 4.7.2. As a result,
eeaf4427 949@file{/home/alice/.guix-profile/bin/gcc} points to
834129e0 950@file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Now, on the same machine,
821b0015
LC
951@code{bob} had already installed GCC 4.8.0. The profile of @code{bob}
952simply continues to point to
834129e0 953@file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc}---i.e., both versions of GCC
821b0015 954coexist on the same system without any interference.
eeaf4427 955
e49951eb
MW
956The @command{guix package} command is the central tool to manage
957packages (@pxref{Invoking guix package}). It operates on those per-user
821b0015 958profiles, and can be used @emph{with normal user privileges}.
eeaf4427
LC
959
960The command provides the obvious install, remove, and upgrade
961operations. Each invocation is actually a @emph{transaction}: either
ba55b1cb 962the specified operation succeeds, or nothing happens. Thus, if the
e49951eb 963@command{guix package} process is terminated during the transaction,
eeaf4427
LC
964or if a power outage occurs during the transaction, then the user's
965profile remains in its previous state, and remains usable.
966
967In addition, any package transaction may be @emph{rolled back}. So, if,
968for example, an upgrade installs a new version of a package that turns
969out to have a serious bug, users may roll back to the previous instance
4af2447e
LC
970of their profile, which was known to work well. Similarly, the global
971system configuration is subject to transactional upgrades and roll-back
972(@pxref{Using the Configuration System}).
eeaf4427
LC
973
974All those packages in the package store may be @emph{garbage-collected}.
975Guix can determine which packages are still referenced by the user
fe8ff028 976profiles, and remove those that are provably no longer referenced
e49951eb 977(@pxref{Invoking guix gc}). Users may also explicitly remove old
fe8ff028
LC
978generations of their profile so that the packages they refer to can be
979collected.
eeaf4427 980
e900c503
LC
981@cindex reproducibility
982@cindex reproducible builds
eeaf4427
LC
983Finally, Guix takes a @dfn{purely functional} approach to package
984management, as described in the introduction (@pxref{Introduction}).
834129e0 985Each @file{/gnu/store} package directory name contains a hash of all the
eeaf4427
LC
986inputs that were used to build that package---compiler, libraries, build
987scripts, etc. This direct correspondence allows users to make sure a
988given package installation matches the current state of their
e900c503
LC
989distribution. It also helps maximize @dfn{build reproducibility}:
990thanks to the isolated build environments that are used, a given build
991is likely to yield bit-identical files when performed on different
992machines (@pxref{Invoking guix-daemon, container}).
eeaf4427 993
c4202d60 994@cindex substitutes
eeaf4427 995This foundation allows Guix to support @dfn{transparent binary/source
c4202d60 996deployment}. When a pre-built binary for a @file{/gnu/store} item is
18f2887b 997available from an external source---a @dfn{substitute}, Guix just
c4202d60
LC
998downloads it and unpacks it;
999otherwise, it builds the package from source, locally
1000(@pxref{Substitutes}).
eeaf4427 1001
f5fd4fd2
LC
1002Control over the build environment is a feature that is also useful for
1003developers. The @command{guix environment} command allows developers of
1004a package to quickly set up the right development environment for their
1005package, without having to manually install the package's dependencies
1006in their profile (@pxref{Invoking guix environment}).
1007
e49951eb
MW
1008@node Invoking guix package
1009@section Invoking @command{guix package}
eeaf4427 1010
e49951eb 1011The @command{guix package} command is the tool that allows users to
eeaf4427
LC
1012install, upgrade, and remove packages, as well as rolling back to
1013previous configurations. It operates only on the user's own profile,
1014and works with normal user privileges (@pxref{Features}). Its syntax
1015is:
1016
1017@example
e49951eb 1018guix package @var{options}
eeaf4427
LC
1019@end example
1020
ba55b1cb 1021Primarily, @var{options} specifies the operations to be performed during
eeaf4427 1022the transaction. Upon completion, a new profile is created, but
99bd74d5 1023previous @dfn{generations} of the profile remain available, should the user
eeaf4427
LC
1024want to roll back.
1025
6447738c
MW
1026For example, to remove @code{lua} and install @code{guile} and
1027@code{guile-cairo} in a single transaction:
1028
1029@example
1030guix package -r lua -i guile guile-cairo
1031@end example
1032
99bd74d5
LC
1033@command{guix package} also supports a @dfn{declarative approach}
1034whereby the user specifies the exact set of packages to be available and
1035passes it @i{via} the @option{--manifest} option
1036(@pxref{profile-manifest, @option{--manifest}}).
1037
b9e5c0a9 1038For each user, a symlink to the user's default profile is automatically
0ec1af59 1039created in @file{$HOME/.guix-profile}. This symlink always points to the
b9e5c0a9
LC
1040current generation of the user's default profile. Thus, users can add
1041@file{$HOME/.guix-profile/bin} to their @code{PATH} environment
1042variable, and so on.
d664f1b4
LC
1043@cindex search paths
1044If you are not using the Guix System Distribution, consider adding the
1045following lines to your @file{~/.bash_profile} (@pxref{Bash Startup
1046Files,,, bash, The GNU Bash Reference Manual}) so that newly-spawned
1047shells get all the right environment variable definitions:
1048
1049@example
1050GUIX_PROFILE="$HOME/.guix-profile" \
1051source "$HOME/.guix-profile/etc/profile"
1052@end example
b9e5c0a9 1053
4379c35b
LC
1054In a multi-user setup, user profiles are stored in a place registered as
1055a @dfn{garbage-collector root}, which @file{$HOME/.guix-profile} points
1056to (@pxref{Invoking guix gc}). That directory is normally
0ec1af59
LC
1057@code{@var{localstatedir}/profiles/per-user/@var{user}}, where
1058@var{localstatedir} is the value passed to @code{configure} as
4379c35b
LC
1059@code{--localstatedir}, and @var{user} is the user name. The
1060@file{per-user} directory is created when @command{guix-daemon} is
1061started, and the @var{user} sub-directory is created by @command{guix
1062package}.
0ec1af59
LC
1063
1064The @var{options} can be among the following:
1065
eeaf4427
LC
1066@table @code
1067
6447738c
MW
1068@item --install=@var{package} @dots{}
1069@itemx -i @var{package} @dots{}
1070Install the specified @var{package}s.
eeaf4427 1071
6447738c 1072Each @var{package} may specify either a simple package name, such as
eeaf4427 1073@code{guile}, or a package name followed by a hyphen and version number,
724311a2
LC
1074such as @code{guile-1.8.8} or simply @code{guile-1.8} (in the latter
1075case, the newest version prefixed by @code{1.8} is selected.)
1076
1077If no version number is specified, the
dc5669cd
MW
1078newest available version will be selected. In addition, @var{package}
1079may contain a colon, followed by the name of one of the outputs of the
6e721c4d 1080package, as in @code{gcc:doc} or @code{binutils-2.22:lib}
e7f34eb0
LC
1081(@pxref{Packages with Multiple Outputs}). Packages with a corresponding
1082name (and optionally version) are searched for among the GNU
1083distribution modules (@pxref{Package Modules}).
eeaf4427 1084
461572cc
LC
1085@cindex propagated inputs
1086Sometimes packages have @dfn{propagated inputs}: these are dependencies
21461f27
LC
1087that automatically get installed along with the required package
1088(@pxref{package-propagated-inputs, @code{propagated-inputs} in
1089@code{package} objects}, for information about propagated inputs in
1090package definitions).
461572cc 1091
21461f27 1092@anchor{package-cmd-propagated-inputs}
461572cc
LC
1093An example is the GNU MPC library: its C header files refer to those of
1094the GNU MPFR library, which in turn refer to those of the GMP library.
1095Thus, when installing MPC, the MPFR and GMP libraries also get installed
1096in the profile; removing MPC also removes MPFR and GMP---unless they had
1097also been explicitly installed independently.
1098
ba7ea5ce 1099Besides, packages sometimes rely on the definition of environment
5924080d 1100variables for their search paths (see explanation of
ba7ea5ce 1101@code{--search-paths} below). Any missing or possibly incorrect
5924080d
LC
1102environment variable definitions are reported here.
1103
ef010c0f 1104@c XXX: keep me up-to-date
5924080d 1105Finally, when installing a GNU package, the tool reports the
ef010c0f
LC
1106availability of a newer upstream version. In the future, it may provide
1107the option of installing directly from the upstream version, even if
1108that version is not yet in the distribution.
1109
5d4b411f
LC
1110@item --install-from-expression=@var{exp}
1111@itemx -e @var{exp}
1112Install the package @var{exp} evaluates to.
1113
1114@var{exp} must be a Scheme expression that evaluates to a
1115@code{<package>} object. This option is notably useful to disambiguate
1116between same-named variants of a package, with expressions such as
1117@code{(@@ (gnu packages base) guile-final)}.
1118
1119Note that this option installs the first output of the specified
1120package, which may be insufficient when needing a specific output of a
1121multiple-output package.
1122
6447738c
MW
1123@item --remove=@var{package} @dots{}
1124@itemx -r @var{package} @dots{}
1125Remove the specified @var{package}s.
eeaf4427 1126
6447738c 1127As for @code{--install}, each @var{package} may specify a version number
13ed095c
LC
1128and/or output name in addition to the package name. For instance,
1129@code{-r glibc:debug} would remove the @code{debug} output of
1130@code{glibc}.
1131
6447738c
MW
1132@item --upgrade[=@var{regexp} @dots{}]
1133@itemx -u [@var{regexp} @dots{}]
1134Upgrade all the installed packages. If one or more @var{regexp}s are
1135specified, upgrade only installed packages whose name matches a
d5f01e48 1136@var{regexp}. Also see the @code{--do-not-upgrade} option below.
eeaf4427 1137
f651b477
LC
1138Note that this upgrades package to the latest version of packages found
1139in the distribution currently installed. To update your distribution,
1140you should regularly run @command{guix pull} (@pxref{Invoking guix
1141pull}).
1142
d5f01e48
MW
1143@item --do-not-upgrade[=@var{regexp} @dots{}]
1144When used together with the @code{--upgrade} option, do @emph{not}
1145upgrade any packages whose name matches a @var{regexp}. For example, to
1146upgrade all packages in the current profile except those containing the
1147substring ``emacs'':
1148
1149@example
1150$ guix package --upgrade . --do-not-upgrade emacs
1151@end example
1152
99bd74d5 1153@item @anchor{profile-manifest}--manifest=@var{file}
1b676447 1154@itemx -m @var{file}
99bd74d5
LC
1155@cindex profile declaration
1156@cindex profile manifest
1157Create a new generation of the profile from the manifest object
1b676447
DT
1158returned by the Scheme code in @var{file}.
1159
99bd74d5
LC
1160This allows you to @emph{declare} the profile's contents rather than
1161constructing it through a sequence of @code{--install} and similar
1162commands. The advantage is that @var{file} can be put under version
1163control, copied to different machines to reproduce the same profile, and
1164so on.
1165
1166@c FIXME: Add reference to (guix profile) documentation when available.
1167@var{file} must return a @dfn{manifest} object, which is roughly a list
1168of packages:
1b676447 1169
99bd74d5 1170@findex packages->manifest
1b676447 1171@example
99bd74d5 1172(use-package-modules guile emacs)
1b676447
DT
1173
1174(packages->manifest
99bd74d5
LC
1175 (list emacs
1176 guile-2.0
1b676447 1177 ;; Use a specific package output.
99bd74d5 1178 (list guile-2.0 "debug")))
1b676447
DT
1179@end example
1180
24e262f0
LC
1181@item --roll-back
1182Roll back to the previous @dfn{generation} of the profile---i.e., undo
1183the last transaction.
1184
1185When combined with options such as @code{--install}, roll back occurs
1186before any other actions.
1187
d9307267 1188When rolling back from the first generation that actually contains
4b2bc804
NK
1189installed packages, the profile is made to point to the @dfn{zeroth
1190generation}, which contains no files apart from its own meta-data.
d9307267 1191
82fe08ed
LC
1192Installing, removing, or upgrading packages from a generation that has
1193been rolled back to overwrites previous future generations. Thus, the
1194history of a profile's generations is always linear.
1195
b3bb82f1
AK
1196@item --switch-generation=@var{pattern}
1197@itemx -S @var{pattern}
1198Switch to a particular generation defined by @var{pattern}.
1199
1200@var{pattern} may be either a generation number or a number prefixed
1201with ``+'' or ``-''. The latter means: move forward/backward by a
1202specified number of generations. For example, if you want to return to
1203the latest generation after @code{--roll-back}, use
1204@code{--switch-generation=+1}.
1205
1206The difference between @code{--roll-back} and
1207@code{--switch-generation=-1} is that @code{--switch-generation} will
1208not make a zeroth generation, so if a specified generation does not
1209exist, the current generation will not be changed.
1210
dbc31ab2 1211@item --search-paths[=@var{kind}]
5924080d
LC
1212@cindex search paths
1213Report environment variable definitions, in Bash syntax, that may be
1214needed in order to use the set of installed packages. These environment
1215variables are used to specify @dfn{search paths} for files used by some
1216of the installed packages.
1217
1218For example, GCC needs the @code{CPATH} and @code{LIBRARY_PATH}
1219environment variables to be defined so it can look for headers and
1220libraries in the user's profile (@pxref{Environment Variables,,, gcc,
1221Using the GNU Compiler Collection (GCC)}). If GCC and, say, the C
1222library are installed in the profile, then @code{--search-paths} will
1223suggest setting these variables to @code{@var{profile}/include} and
1224@code{@var{profile}/lib}, respectively.
1225
dbc31ab2
LC
1226The typical use case is to define these environment variables in the
1227shell:
1228
1229@example
1230$ eval `guix package --search-paths`
1231@end example
1232
1233@var{kind} may be one of @code{exact}, @code{prefix}, or @code{suffix},
1234meaning that the returned environment variable definitions will either
1235be exact settings, or prefixes or suffixes of the current value of these
1236variables. When omitted, @var{kind} defaults to @code{exact}.
1237
eeaf4427
LC
1238@item --profile=@var{profile}
1239@itemx -p @var{profile}
1240Use @var{profile} instead of the user's default profile.
1241
70915c1a
LC
1242@item --verbose
1243Produce verbose output. In particular, emit the environment's build log
1244on the standard error port.
1245
eeaf4427
LC
1246@item --bootstrap
1247Use the bootstrap Guile to build the profile. This option is only
1248useful to distribution developers.
1249
1250@end table
1251
e49951eb 1252In addition to these actions @command{guix package} supports the
733b4130
LC
1253following options to query the current state of a profile, or the
1254availability of packages:
eeaf4427 1255
733b4130
LC
1256@table @option
1257
acc08466
NK
1258@item --search=@var{regexp}
1259@itemx -s @var{regexp}
5763ad92 1260List the available packages whose name, synopsis, or description matches
299112d3
LC
1261@var{regexp}. Print all the meta-data of matching packages in
1262@code{recutils} format (@pxref{Top, GNU recutils databases,, recutils,
1263GNU recutils manual}).
acc08466 1264
299112d3
LC
1265This allows specific fields to be extracted using the @command{recsel}
1266command, for instance:
1267
1268@example
e49951eb 1269$ guix package -s malloc | recsel -p name,version
299112d3
LC
1270name: glibc
1271version: 2.17
1272
1273name: libgc
1274version: 7.2alpha6
1275@end example
acc08466 1276
a12d92f5
LC
1277Similarly, to show the name of all the packages available under the
1278terms of the GNU@tie{}LGPL version 3:
1279
1280@example
1281$ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
1282name: elfutils
1283
1284name: gmp
1285@dots{}
1286@end example
1287
2aa6efb0
CR
1288@item --show=@var{package}
1289Show details about @var{package}, taken from the list of available packages, in
1290@code{recutils} format (@pxref{Top, GNU recutils databases,, recutils, GNU
1291recutils manual}).
1292
1293@example
1294$ guix package --show=python | recsel -p name,version
1295name: python
1296version: 2.7.6
1297
1298name: python
1299version: 3.3.5
1300@end example
1301
1302You may also specify the full name of a package to only get details about a
1303specific version of it:
1304@example
1305$ guix package --show=python-3.3.5 | recsel -p name,version
1306name: python
1307version: 3.3.5
1308@end example
1309
1310
1311
733b4130
LC
1312@item --list-installed[=@var{regexp}]
1313@itemx -I [@var{regexp}]
bd9bde1c
LC
1314List the currently installed packages in the specified profile, with the
1315most recently installed packages shown last. When @var{regexp} is
1316specified, list only installed packages whose name matches @var{regexp}.
733b4130
LC
1317
1318For each installed package, print the following items, separated by
1319tabs: the package name, its version string, the part of the package that
1320is installed (for instance, @code{out} for the default output,
1321@code{include} for its headers, etc.), and the path of this package in
1322the store.
1323
64fc89b6
LC
1324@item --list-available[=@var{regexp}]
1325@itemx -A [@var{regexp}]
5763ad92 1326List packages currently available in the distribution for this system
a1ba8475
LC
1327(@pxref{GNU Distribution}). When @var{regexp} is specified, list only
1328installed packages whose name matches @var{regexp}.
64fc89b6
LC
1329
1330For each package, print the following items separated by tabs: its name,
6e721c4d
LC
1331its version string, the parts of the package (@pxref{Packages with
1332Multiple Outputs}), and the source location of its definition.
64fc89b6 1333
f566d765
LC
1334@item --list-generations[=@var{pattern}]
1335@itemx -l [@var{pattern}]
1336Return a list of generations along with their creation dates; for each
1337generation, show the installed packages, with the most recently
4b2bc804
NK
1338installed packages shown last. Note that the zeroth generation is never
1339shown.
f566d765
LC
1340
1341For each installed package, print the following items, separated by
1342tabs: the name of a package, its version string, the part of the package
1343that is installed (@pxref{Packages with Multiple Outputs}), and the
1344location of this package in the store.
1345
1346When @var{pattern} is used, the command returns only matching
1347generations. Valid patterns include:
1348
1349@itemize
1350@item @emph{Integers and comma-separated integers}. Both patterns denote
1351generation numbers. For instance, @code{--list-generations=1} returns
1352the first one.
1353
1354And @code{--list-generations=1,8,2} outputs three generations in the
1355specified order. Neither spaces nor trailing commas are allowed.
1356
1357@item @emph{Ranges}. @code{--list-generations=2..9} prints the
1358specified generations and everything in between. Note that the start of
1359a range must be lesser than its end.
1360
1361It is also possible to omit the endpoint. For example,
1362@code{--list-generations=2..}, returns all generations starting from the
1363second one.
1364
1365@item @emph{Durations}. You can also get the last @emph{N}@tie{}days, weeks,
1366or months by passing an integer along with the first letter of the
d7ddb257
LC
1367duration. For example, @code{--list-generations=20d} lists generations
1368that are up to 20 days old.
f566d765
LC
1369@end itemize
1370
b7884ca3
NK
1371@item --delete-generations[=@var{pattern}]
1372@itemx -d [@var{pattern}]
d7ddb257
LC
1373When @var{pattern} is omitted, delete all generations except the current
1374one.
b7884ca3
NK
1375
1376This command accepts the same patterns as @option{--list-generations}.
d7ddb257
LC
1377When @var{pattern} is specified, delete the matching generations. When
1378@var{pattern} specifies a duration, generations @emph{older} than the
1379specified duration match. For instance, @code{--delete-generations=1m}
1380deletes generations that are more than one month old.
1381
391bdd8f
LC
1382If the current generation matches, it is @emph{not} deleted. Also, the
1383zeroth generation is never deleted.
b7884ca3 1384
1bb9900a
LC
1385Note that deleting generations prevents roll-back to them.
1386Consequently, this command must be used with care.
1387
733b4130 1388@end table
eeaf4427 1389
70ee5642
LC
1390Finally, since @command{guix package} may actually start build
1391processes, it supports all the common build options that @command{guix
1392build} supports (@pxref{Invoking guix build, common build options}).
1393
457f60fa
AK
1394@include emacs.texi
1395
c4202d60
LC
1396@node Substitutes
1397@section Substitutes
1398
1399@cindex substitutes
1400@cindex pre-built binaries
1401Guix supports transparent source/binary deployment, which means that it
1402can either build things locally, or download pre-built items from a
1403server. We call these pre-built items @dfn{substitutes}---they are
1404substitutes for local build results. In many cases, downloading a
1405substitute is much faster than building things locally.
1406
1407Substitutes can be anything resulting from a derivation build
1408(@pxref{Derivations}). Of course, in the common case, they are
1409pre-built package binaries, but source tarballs, for instance, which
1410also result from derivation builds, can be available as substitutes.
1411
1412The @code{hydra.gnu.org} server is a front-end to a build farm that
1413builds packages from the GNU distribution continuously for some
9176607e
LC
1414architectures, and makes them available as substitutes. This is the
1415default source of substitutes; it can be overridden by passing
1416@command{guix-daemon} the @code{--substitute-urls} option
1417(@pxref{Invoking guix-daemon}).
c4202d60
LC
1418
1419@cindex security
1420@cindex digital signatures
1421To allow Guix to download substitutes from @code{hydra.gnu.org}, you
1422must add its public key to the access control list (ACL) of archive
1423imports, using the @command{guix archive} command (@pxref{Invoking guix
1424archive}). Doing so implies that you trust @code{hydra.gnu.org} to not
1425be compromised and to serve genuine substitutes.
1426
1427This public key is installed along with Guix, in
1428@code{@var{prefix}/share/guix/hydra.gnu.org.pub}, where @var{prefix} is
1429the installation prefix of Guix. If you installed Guix from source,
1430make sure you checked the GPG signature of
1431@file{guix-@value{VERSION}.tar.gz}, which contains this public key file.
1432Then, you can run something like this:
1433
1434@example
1435# guix archive --authorize < hydra.gnu.org.pub
1436@end example
1437
1438Once this is in place, the output of a command like @code{guix build}
1439should change from something like:
1440
1441@example
1442$ guix build emacs --dry-run
1443The following derivations would be built:
1444 /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
1445 /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
1446 /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
1447 /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
1448@dots{}
1449@end example
1450
1451@noindent
1452to something like:
1453
1454@example
1455$ guix build emacs --dry-run
1456The following files would be downloaded:
1457 /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
1458 /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
1459 /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
1460 /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
1461@dots{}
1462@end example
1463
1464@noindent
1465This indicates that substitutes from @code{hydra.gnu.org} are usable and
1466will be downloaded, when possible, for future builds.
1467
1468Guix ignores substitutes that are not signed, or that are not signed by
ef27aa9c 1469one of the keys listed in the ACL. It also detects and raises an error
c4202d60
LC
1470when attempting to use a substitute that has been tampered with.
1471
1472The substitute mechanism can be disabled globally by running
1473@code{guix-daemon} with @code{--no-substitutes} (@pxref{Invoking
1474guix-daemon}). It can also be disabled temporarily by passing the
1475@code{--no-substitutes} option to @command{guix package}, @command{guix
1476build}, and other command-line tools.
1477
1478
1479Today, each individual's control over their own computing is at the
1480mercy of institutions, corporations, and groups with enough power and
1481determination to subvert the computing infrastructure and exploit its
1482weaknesses. While using @code{hydra.gnu.org} substitutes can be
1483convenient, we encourage users to also build on their own, or even run
1484their own build farm, such that @code{hydra.gnu.org} is less of an
8ce229fc
LC
1485interesting target. One way to help is by publishing the software you
1486build using @command{guix publish} so that others have one more choice
1487of server to download substitutes from (@pxref{Invoking guix publish}).
c4202d60
LC
1488
1489Guix has the foundations to maximize build reproducibility
1490(@pxref{Features}). In most cases, independent builds of a given
1491package or derivation should yield bit-identical results. Thus, through
1492a diverse set of independent package builds, we can strengthen the
1493integrity of our systems.
1494
1495In the future, we want Guix to have support to publish and retrieve
1496binaries to/from other users, in a peer-to-peer fashion. If you would
1497like to discuss this project, join us on @email{guix-devel@@gnu.org}.
1498
1499
6e721c4d
LC
1500@node Packages with Multiple Outputs
1501@section Packages with Multiple Outputs
1502
1503@cindex multiple-output packages
1504@cindex package outputs
1505
1506Often, packages defined in Guix have a single @dfn{output}---i.e., the
1507source package leads exactly one directory in the store. When running
1508@command{guix package -i glibc}, one installs the default output of the
1509GNU libc package; the default output is called @code{out}, but its name
1510can be omitted as shown in this command. In this particular case, the
1511default output of @code{glibc} contains all the C header files, shared
1512libraries, static libraries, Info documentation, and other supporting
1513files.
1514
1515Sometimes it is more appropriate to separate the various types of files
1516produced from a single source package into separate outputs. For
1517instance, the GLib C library (used by GTK+ and related packages)
1518installs more than 20 MiB of reference documentation as HTML pages.
1519To save space for users who do not need it, the documentation goes to a
1520separate output, called @code{doc}. To install the main GLib output,
1521which contains everything but the documentation, one would run:
1522
1523@example
1524guix package -i glib
1525@end example
1526
1527The command to install its documentation is:
1528
1529@example
1530guix package -i glib:doc
1531@end example
1532
1533Some packages install programs with different ``dependency footprints''.
1534For instance, the WordNet package install both command-line tools and
1535graphical user interfaces (GUIs). The former depend solely on the C
1536library, whereas the latter depend on Tcl/Tk and the underlying X
1537libraries. In this case, we leave the command-line tools in the default
1538output, whereas the GUIs are in a separate output. This allows users
fcc58db6
LC
1539who do not need the GUIs to save space. The @command{guix size} command
1540can help find out about such situations (@pxref{Invoking guix size}).
6e721c4d
LC
1541
1542There are several such multiple-output packages in the GNU distribution.
91ef73d4
LC
1543Other conventional output names include @code{lib} for libraries and
1544possibly header files, @code{bin} for stand-alone programs, and
1545@code{debug} for debugging information (@pxref{Installing Debugging
1546Files}). The outputs of a packages are listed in the third column of
1547the output of @command{guix package --list-available} (@pxref{Invoking
1548guix package}).
6e721c4d 1549
eeaf4427 1550
e49951eb
MW
1551@node Invoking guix gc
1552@section Invoking @command{guix gc}
fe8ff028
LC
1553
1554@cindex garbage collector
1555Packages that are installed but not used may be @dfn{garbage-collected}.
e49951eb 1556The @command{guix gc} command allows users to explicitly run the garbage
c22eb992
LC
1557collector to reclaim space from the @file{/gnu/store} directory. It is
1558the @emph{only} way to remove files from @file{/gnu/store}---removing
1559files or directories manually may break it beyond repair!
fe8ff028
LC
1560
1561The garbage collector has a set of known @dfn{roots}: any file under
834129e0 1562@file{/gnu/store} reachable from a root is considered @dfn{live} and
fe8ff028
LC
1563cannot be deleted; any other file is considered @dfn{dead} and may be
1564deleted. The set of garbage collector roots includes default user
e49951eb
MW
1565profiles, and may be augmented with @command{guix build --root}, for
1566example (@pxref{Invoking guix build}).
fe8ff028 1567
1bb9900a
LC
1568Prior to running @code{guix gc --collect-garbage} to make space, it is
1569often useful to remove old generations from user profiles; that way, old
1570package builds referenced by those generations can be reclaimed. This
1571is achieved by running @code{guix package --delete-generations}
1572(@pxref{Invoking guix package}).
1573
e49951eb 1574The @command{guix gc} command has three modes of operation: it can be
fe8ff028 1575used to garbage-collect any dead files (the default), to delete specific
7770aafc
LC
1576files (the @code{--delete} option), to print garbage-collector
1577information, or for more advanced queries. The garbage collection
1578options are as follows:
fe8ff028
LC
1579
1580@table @code
1581@item --collect-garbage[=@var{min}]
1582@itemx -C [@var{min}]
834129e0 1583Collect garbage---i.e., unreachable @file{/gnu/store} files and
fe8ff028
LC
1584sub-directories. This is the default operation when no option is
1585specified.
1586
1587When @var{min} is given, stop once @var{min} bytes have been collected.
1588@var{min} may be a number of bytes, or it may include a unit as a
4a44d7bb
LC
1589suffix, such as @code{MiB} for mebibytes and @code{GB} for gigabytes
1590(@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
fe8ff028
LC
1591
1592When @var{min} is omitted, collect all the garbage.
1593
1594@item --delete
1595@itemx -d
1596Attempt to delete all the store files and directories specified as
1597arguments. This fails if some of the files are not in the store, or if
1598they are still live.
1599
1600@item --list-dead
1601Show the list of dead files and directories still present in the
1602store---i.e., files and directories no longer reachable from any root.
1603
1604@item --list-live
1605Show the list of live store files and directories.
ba8b732d
LC
1606
1607@end table
1608
1609In addition, the references among existing store files can be queried:
1610
1611@table @code
1612
1613@item --references
1614@itemx --referrers
1615List the references (respectively, the referrers) of store files given
1616as arguments.
1617
8e59fdd5
LC
1618@item --requisites
1619@itemx -R
fcc58db6 1620@cindex closure
8e59fdd5
LC
1621List the requisites of the store files passed as arguments. Requisites
1622include the store files themselves, their references, and the references
1623of these, recursively. In other words, the returned list is the
1624@dfn{transitive closure} of the store files.
1625
fcc58db6
LC
1626@xref{Invoking guix size}, for a tool to profile the size of an
1627element's closure.
1628
fe8ff028
LC
1629@end table
1630
7770aafc
LC
1631Lastly, the following options allow you to check the integrity of the
1632store and to control disk usage.
1633
1634@table @option
1635
1636@item --verify[=@var{options}]
1637@cindex integrity, of the store
1638@cindex integrity checking
1639Verify the integrity of the store.
1640
1641By default, make sure that all the store items marked as valid in the
1642daemon's database actually exist in @file{/gnu/store}.
1643
1644When provided, @var{options} must a comma-separated list containing one
1645or more of @code{contents} and @code{repair}.
1646
1647When passing @option{--verify=contents}, the daemon will compute the
1648content hash of each store item and compare it against its hash in the
1649database. Hash mismatches are reported as data corruptions. Because it
1650traverses @emph{all the files in the store}, this command can take a
1651long time, especially on systems with a slow disk drive.
1652
1653@cindex repairing the store
1654Using @option{--verify=repair} or @option{--verify=contents,repair}
1655causes the daemon to try to repair corrupt store items by fetching
1656substitutes for them (@pxref{Substitutes}). Because repairing is not
1657atomic, and thus potentially dangerous, it is available only to the
1658system administrator.
1659
1660@item --optimize
1661@cindex deduplication
1662Optimize the store by hard-linking identical files---this is
1663@dfn{deduplication}.
1664
1665The daemon performs deduplication after each successful build or archive
1666import, unless it was started with @code{--disable-deduplication}
1667(@pxref{Invoking guix-daemon, @code{--disable-deduplication}}). Thus,
1668this option is primarily useful when the daemon was running with
1669@code{--disable-deduplication}.
1670
1671@end table
eeaf4427 1672
f651b477
LC
1673@node Invoking guix pull
1674@section Invoking @command{guix pull}
1675
1676Packages are installed or upgraded to the latest version available in
1677the distribution currently available on your local machine. To update
1678that distribution, along with the Guix tools, you must run @command{guix
1679pull}: the command downloads the latest Guix source code and package
1680descriptions, and deploys it.
1681
1682On completion, @command{guix package} will use packages and package
1683versions from this just-retrieved copy of Guix. Not only that, but all
1684the Guix commands and Scheme modules will also be taken from that latest
1685version. New @command{guix} sub-commands added by the update also
1686become available.
1687
1688The @command{guix pull} command is usually invoked with no arguments,
1689but it supports the following options:
1690
1691@table @code
1692@item --verbose
1693Produce verbose output, writing build logs to the standard error output.
1694
ab5d72ad
LC
1695@item --url=@var{url}
1696Download the source tarball of Guix from @var{url}.
1697
1698By default, the tarball is taken from its canonical address at
1699@code{gnu.org}, for the stable branch of Guix.
1700
f651b477
LC
1701@item --bootstrap
1702Use the bootstrap Guile to build the latest Guix. This option is only
1703useful to Guix developers.
1704@end table
1705
760c60d6
LC
1706
1707@node Invoking guix archive
1708@section Invoking @command{guix archive}
1709
1710The @command{guix archive} command allows users to @dfn{export} files
1711from the store into a single archive, and to later @dfn{import} them.
1712In particular, it allows store files to be transferred from one machine
1713to another machine's store. For example, to transfer the @code{emacs}
1714package to a machine connected over SSH, one would run:
1715
1716@example
56607088 1717guix archive --export -r emacs | ssh the-machine guix archive --import
760c60d6
LC
1718@end example
1719
87236aed 1720@noindent
56607088
LC
1721Similarly, a complete user profile may be transferred from one machine
1722to another like this:
1723
1724@example
1725guix archive --export -r $(readlink -f ~/.guix-profile) | \
1726 ssh the-machine guix-archive --import
1727@end example
1728
1729@noindent
1730However, note that, in both examples, all of @code{emacs} and the
1731profile as well as all of their dependencies are transferred (due to
1732@code{-r}), regardless of what is already available in the target
1733machine's store. The @code{--missing} option can help figure out which
1734items are missing from the target's store.
87236aed 1735
760c60d6 1736Archives are stored in the ``Nix archive'' or ``Nar'' format, which is
0dbd88db
LC
1737comparable in spirit to `tar', but with a few noteworthy differences
1738that make it more appropriate for our purposes. First, rather than
1739recording all Unix meta-data for each file, the Nar format only mentions
1740the file type (regular, directory, or symbolic link); Unix permissions
1741and owner/group are dismissed. Second, the order in which directory
1742entries are stored always follows the order of file names according to
1743the C locale collation order. This makes archive production fully
1744deterministic.
1745
1746When exporting, the daemon digitally signs the contents of the archive,
1747and that digital signature is appended. When importing, the daemon
1748verifies the signature and rejects the import in case of an invalid
1749signature or if the signing key is not authorized.
760c60d6
LC
1750@c FIXME: Add xref to daemon doc about signatures.
1751
1752The main options are:
1753
1754@table @code
1755@item --export
1756Export the specified store files or packages (see below.) Write the
1757resulting archive to the standard output.
1758
56607088
LC
1759Dependencies are @emph{not} included in the output, unless
1760@code{--recursive} is passed.
1761
1762@item -r
1763@itemx --recursive
1764When combined with @code{--export}, this instructs @command{guix
1765archive} to include dependencies of the given items in the archive.
1766Thus, the resulting archive is self-contained: it contains the closure
1767of the exported store items.
1768
760c60d6
LC
1769@item --import
1770Read an archive from the standard input, and import the files listed
1771therein into the store. Abort if the archive has an invalid digital
f82cc5fd
LC
1772signature, or if it is signed by a public key not among the authorized
1773keys (see @code{--authorize} below.)
554f26ec 1774
87236aed
LC
1775@item --missing
1776Read a list of store file names from the standard input, one per line,
1777and write on the standard output the subset of these files missing from
1778the store.
1779
554f26ec 1780@item --generate-key[=@var{parameters}]
f82cc5fd 1781@cindex signing, archives
554f26ec
LC
1782Generate a new key pair for the daemons. This is a prerequisite before
1783archives can be exported with @code{--export}. Note that this operation
1784usually takes time, because it needs to gather enough entropy to
1785generate the key pair.
1786
1787The generated key pair is typically stored under @file{/etc/guix}, in
1788@file{signing-key.pub} (public key) and @file{signing-key.sec} (private
867d8473
LC
1789key, which must be kept secret.) When @var{parameters} is omitted,
1790an ECDSA key using the Ed25519 curve is generated, or, for Libgcrypt
1791versions before 1.6.0, it is a 4096-bit RSA key.
1792Alternately, @var{parameters} can specify
554f26ec
LC
1793@code{genkey} parameters suitable for Libgcrypt (@pxref{General
1794public-key related Functions, @code{gcry_pk_genkey},, gcrypt, The
1795Libgcrypt Reference Manual}).
f82cc5fd
LC
1796
1797@item --authorize
1798@cindex authorizing, archives
1799Authorize imports signed by the public key passed on standard input.
1800The public key must be in ``s-expression advanced format''---i.e., the
1801same format as the @file{signing-key.pub} file.
1802
1803The list of authorized keys is kept in the human-editable file
1804@file{/etc/guix/acl}. The file contains
1805@url{http://people.csail.mit.edu/rivest/Sexp.txt, ``advanced-format
1806s-expressions''} and is structured as an access-control list in the
1807@url{http://theworld.com/~cme/spki.txt, Simple Public-Key Infrastructure
1808(SPKI)}.
760c60d6
LC
1809@end table
1810
1811To export store files as an archive to the standard output, run:
1812
1813@example
1814guix archive --export @var{options} @var{specifications}...
1815@end example
1816
1817@var{specifications} may be either store file names or package
1818specifications, as for @command{guix package} (@pxref{Invoking guix
1819package}). For instance, the following command creates an archive
1820containing the @code{gui} output of the @code{git} package and the main
1821output of @code{emacs}:
1822
1823@example
834129e0 1824guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
760c60d6
LC
1825@end example
1826
1827If the specified packages are not built yet, @command{guix archive}
1828automatically builds them. The build process may be controlled with the
1829same options that can be passed to the @command{guix build} command
70ee5642 1830(@pxref{Invoking guix build, common build options}).
760c60d6
LC
1831
1832
568717fd
LC
1833@c *********************************************************************
1834@node Programming Interface
1835@chapter Programming Interface
1836
3dc1970d
LC
1837GNU Guix provides several Scheme programming interfaces (APIs) to
1838define, build, and query packages. The first interface allows users to
1839write high-level package definitions. These definitions refer to
1840familiar packaging concepts, such as the name and version of a package,
1841its build system, and its dependencies. These definitions can then be
1842turned into concrete build actions.
1843
ba55b1cb 1844Build actions are performed by the Guix daemon, on behalf of users. In a
3dc1970d 1845standard setup, the daemon has write access to the store---the
834129e0 1846@file{/gnu/store} directory---whereas users do not. The recommended
3dc1970d
LC
1847setup also has the daemon perform builds in chroots, under a specific
1848build users, to minimize interference with the rest of the system.
1849
1850@cindex derivation
1851Lower-level APIs are available to interact with the daemon and the
1852store. To instruct the daemon to perform a build action, users actually
1853provide it with a @dfn{derivation}. A derivation is a low-level
1854representation of the build actions to be taken, and the environment in
1855which they should occur---derivations are to package definitions what
49ad317a
LC
1856assembly is to C programs. The term ``derivation'' comes from the fact
1857that build results @emph{derive} from them.
3dc1970d
LC
1858
1859This chapter describes all these APIs in turn, starting from high-level
1860package definitions.
1861
568717fd 1862@menu
b860f382 1863* Defining Packages:: Defining new packages.
7458bd0a 1864* Build Systems:: Specifying how packages are built.
b860f382
LC
1865* The Store:: Manipulating the package store.
1866* Derivations:: Low-level interface to package derivations.
1867* The Store Monad:: Purely functional interface to the store.
21b679f6 1868* G-Expressions:: Manipulating build expressions.
568717fd
LC
1869@end menu
1870
1871@node Defining Packages
1872@section Defining Packages
1873
3dc1970d
LC
1874The high-level interface to package definitions is implemented in the
1875@code{(guix packages)} and @code{(guix build-system)} modules. As an
1876example, the package definition, or @dfn{recipe}, for the GNU Hello
1877package looks like this:
1878
1879@example
e7f34eb0
LC
1880(define-module (gnu packages hello)
1881 #:use-module (guix packages)
1882 #:use-module (guix download)
1883 #:use-module (guix build-system gnu)
1884 #:use-module (guix licenses))
b22a12fd 1885
79f5dd59 1886(define-public hello
3dc1970d
LC
1887 (package
1888 (name "hello")
1889 (version "2.8")
1890 (source (origin
1891 (method url-fetch)
1892 (uri (string-append "mirror://gnu/hello/hello-" version
1893 ".tar.gz"))
1894 (sha256
1895 (base32 "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6"))))
1896 (build-system gnu-build-system)
7458bd0a 1897 (arguments `(#:configure-flags '("--enable-silent-rules")))
3dc1970d 1898 (inputs `(("gawk" ,gawk)))
7458bd0a
LC
1899 (synopsis "Hello, GNU world: An example GNU package")
1900 (description "Guess what GNU Hello prints!")
3dc1970d 1901 (home-page "http://www.gnu.org/software/hello/")
b22a12fd 1902 (license gpl3+)))
3dc1970d
LC
1903@end example
1904
1905@noindent
1906Without being a Scheme expert, the reader may have guessed the meaning
e7f34eb0 1907of the various fields here. This expression binds variable @code{hello}
3dc1970d
LC
1908to a @code{<package>} object, which is essentially a record
1909(@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}).
1910This package object can be inspected using procedures found in the
1911@code{(guix packages)} module; for instance, @code{(package-name hello)}
1912returns---surprise!---@code{"hello"}.
1913
2f7d2d91
LC
1914With luck, you may be able to import part or all of the definition of
1915the package you are interested in from another repository, using the
1916@code{guix import} command (@pxref{Invoking guix import}).
1917
e7f34eb0
LC
1918In the example above, @var{hello} is defined into a module of its own,
1919@code{(gnu packages hello)}. Technically, this is not strictly
1920necessary, but it is convenient to do so: all the packages defined in
1921modules under @code{(gnu packages @dots{})} are automatically known to
1922the command-line tools (@pxref{Package Modules}).
1923
3dc1970d
LC
1924There are a few points worth noting in the above package definition:
1925
1926@itemize
1927@item
a2bf4907
LC
1928The @code{source} field of the package is an @code{<origin>} object
1929(@pxref{origin Reference}, for the complete reference).
3dc1970d
LC
1930Here, the @code{url-fetch} method from @code{(guix download)} is used,
1931meaning that the source is a file to be downloaded over FTP or HTTP.
1932
1933The @code{mirror://gnu} prefix instructs @code{url-fetch} to use one of
1934the GNU mirrors defined in @code{(guix download)}.
1935
1936The @code{sha256} field specifies the expected SHA256 hash of the file
1937being downloaded. It is mandatory, and allows Guix to check the
1938integrity of the file. The @code{(base32 @dots{})} form introduces the
6c365eca 1939base32 representation of the hash. You can obtain this information with
210cc920
LC
1940@code{guix download} (@pxref{Invoking guix download}) and @code{guix
1941hash} (@pxref{Invoking guix hash}).
3dc1970d 1942
f9cc8971
LC
1943@cindex patches
1944When needed, the @code{origin} form can also have a @code{patches} field
1945listing patches to be applied, and a @code{snippet} field giving a
1946Scheme expression to modify the source code.
1947
3dc1970d
LC
1948@item
1949@cindex GNU Build System
7458bd0a
LC
1950The @code{build-system} field specifies the procedure to build the
1951package (@pxref{Build Systems}). Here, @var{gnu-build-system}
1952represents the familiar GNU Build System, where packages may be
1953configured, built, and installed with the usual @code{./configure &&
1954make && make check && make install} command sequence.
1955
1956@item
1957The @code{arguments} field specifies options for the build system
1958(@pxref{Build Systems}). Here it is interpreted by
1959@var{gnu-build-system} as a request run @file{configure} with the
1960@code{--enable-silent-rules} flag.
3dc1970d
LC
1961
1962@item
1963The @code{inputs} field specifies inputs to the build process---i.e.,
1964build-time or run-time dependencies of the package. Here, we define an
1965input called @code{"gawk"} whose value is that of the @var{gawk}
1966variable; @var{gawk} is itself bound to a @code{<package>} object.
1967
1968Note that GCC, Coreutils, Bash, and other essential tools do not need to
1969be specified as inputs here. Instead, @var{gnu-build-system} takes care
7458bd0a 1970of ensuring that they are present (@pxref{Build Systems}).
3dc1970d
LC
1971
1972However, any other dependencies need to be specified in the
1973@code{inputs} field. Any dependency not specified here will simply be
1974unavailable to the build process, possibly leading to a build failure.
1975@end itemize
1976
87eafdbd
TUBK
1977@xref{package Reference}, for a full description of possible fields.
1978
2f7d2d91 1979Once a package definition is in place, the
e49951eb 1980package may actually be built using the @code{guix build} command-line
39bee8a2
LC
1981tool (@pxref{Invoking guix build}). You can easily jump back to the
1982package definition using the @command{guix edit} command
1983(@pxref{Invoking guix edit}).
1984@xref{Packaging Guidelines}, for
b4f5e0e8
CR
1985more information on how to test package definitions, and
1986@ref{Invoking guix lint}, for information on how to check a definition
1987for style conformance.
1988
7458bd0a
LC
1989Eventually, updating the package definition to a new upstream version
1990can be partly automated by the @command{guix refresh} command
1991(@pxref{Invoking guix refresh}).
3dc1970d
LC
1992
1993Behind the scenes, a derivation corresponding to the @code{<package>}
1994object is first computed by the @code{package-derivation} procedure.
834129e0 1995That derivation is stored in a @code{.drv} file under @file{/gnu/store}.
ba55b1cb 1996The build actions it prescribes may then be realized by using the
3dc1970d
LC
1997@code{build-derivations} procedure (@pxref{The Store}).
1998
1999@deffn {Scheme Procedure} package-derivation @var{store} @var{package} [@var{system}]
59688fc4
LC
2000Return the @code{<derivation>} object of @var{package} for @var{system}
2001(@pxref{Derivations}).
3dc1970d
LC
2002
2003@var{package} must be a valid @code{<package>} object, and @var{system}
2004must be a string denoting the target system type---e.g.,
2005@code{"x86_64-linux"} for an x86_64 Linux-based GNU system. @var{store}
2006must be a connection to the daemon, which operates on the store
2007(@pxref{The Store}).
2008@end deffn
568717fd 2009
9c1edabd
LC
2010@noindent
2011@cindex cross-compilation
2012Similarly, it is possible to compute a derivation that cross-builds a
2013package for some other system:
2014
2015@deffn {Scheme Procedure} package-cross-derivation @var{store} @
2016 @var{package} @var{target} [@var{system}]
59688fc4
LC
2017Return the @code{<derivation>} object of @var{package} cross-built from
2018@var{system} to @var{target}.
9c1edabd
LC
2019
2020@var{target} must be a valid GNU triplet denoting the target hardware
2021and operating system, such as @code{"mips64el-linux-gnu"}
2022(@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
2023Configure and Build System}).
2024@end deffn
2025
87eafdbd
TUBK
2026@menu
2027* package Reference :: The package data type.
2028* origin Reference:: The origin data type.
2029@end menu
2030
2031
2032@node package Reference
2033@subsection @code{package} Reference
2034
2035This section summarizes all the options available in @code{package}
2036declarations (@pxref{Defining Packages}).
2037
2038@deftp {Data Type} package
2039This is the data type representing a package recipe.
2040
2041@table @asis
2042@item @code{name}
2043The name of the package, as a string.
2044
2045@item @code{version}
2046The version of the package, as a string.
2047
2048@item @code{source}
2049An origin object telling how the source code for the package should be
2050acquired (@pxref{origin Reference}).
2051
2052@item @code{build-system}
2053The build system that should be used to build the package (@pxref{Build
2054Systems}).
2055
2056@item @code{arguments} (default: @code{'()})
2057The arguments that should be passed to the build system. This is a
2058list, typically containing sequential keyword-value pairs.
2059
2060@item @code{inputs} (default: @code{'()})
2061Package or derivation inputs to the build. This is a list of lists,
2062where each list has the name of the input (a string) as its first
2063element, a package or derivation object as its second element, and
2064optionally the name of the output of the package or derivation that
2065should be used, which defaults to @code{"out"}.
2066
21461f27
LC
2067@item @anchor{package-propagated-inputs}@code{propagated-inputs} (default: @code{'()})
2068@cindex propagated inputs
87eafdbd 2069This field is like @code{inputs}, but the specified packages will be
21461f27
LC
2070force-installed alongside the package they belong to
2071(@pxref{package-cmd-propagated-inputs, @command{guix package}}, for
2072information on how @command{guix package} deals with propagated inputs.)
2073
2074For example this is necessary when a library needs headers of another
2075library to compile, or needs another shared library to be linked
2076alongside itself when a program wants to link to it.
87eafdbd
TUBK
2077
2078@item @code{native-inputs} (default: @code{'()})
2079This field is like @code{inputs}, but in case of a cross-compilation it
2080will be ensured that packages for the architecture of the build machine
2081are present, such that executables from them can be used during the
21461f27
LC
2082build.
2083
2084This is typically where you would list tools needed at build time but
2085not at run time, such as Autoconf, Automake, pkg-config, Gettext, or
2086Bison. @command{guix lint} can report likely mistakes in this area
2087(@pxref{Invoking guix lint}).
87eafdbd
TUBK
2088
2089@item @code{self-native-input?} (default: @code{#f})
2090This is a Boolean field telling whether the package should use itself as
2091a native input when cross-compiling.
2092
2093@item @code{outputs} (default: @code{'("out")})
2094The list of output names of the package. @xref{Packages with Multiple
2095Outputs}, for typical uses of additional outputs.
2096
2097@item @code{native-search-paths} (default: @code{'()})
2098@itemx @code{search-paths} (default: @code{'()})
2099A list of @code{search-path-specification} objects describing
2100search-path environment variables honored by the package.
2101
2102@item @code{replacement} (default: @code{#f})
2103This must either @code{#f} or a package object that will be used as a
2104@dfn{replacement} for this package. @xref{Security Updates, grafts},
2105for details.
2106
2107@item @code{synopsis}
2108A one-line description of the package.
2109
2110@item @code{description}
2111A more elaborate description of the package.
2112
2113@item @code{license}
2114The license of the package; a value from @code{(guix licenses)}.
2115
2116@item @code{home-page}
2117The URL to the home-page of the package, as a string.
2118
2119@item @code{supported-systems} (default: @var{%supported-systems})
2120The list of systems supported by the package, as strings of the form
2121@code{architecture-kernel}, for example @code{"x86_64-linux"}.
2122
2123@item @code{maintainers} (default: @code{'()})
2124The list of maintainers of the package, as @code{maintainer} objects.
2125
2126@item @code{location} (default: source location of the @code{package} form)
2127The source location of the package. It's useful to override this when
2128inheriting from another package, in which case this field is not
2129automatically corrected.
2130@end table
2131@end deftp
2132
2133
2134@node origin Reference
2135@subsection @code{origin} Reference
2136
2137This section summarizes all the options available in @code{origin}
2138declarations (@pxref{Defining Packages}).
2139
2140@deftp {Data Type} origin
2141This is the data type representing a source code origin.
2142
2143@table @asis
2144@item @code{uri}
2145An object containing the URI of the source. The object type depends on
2146the @code{method} (see below). For example, when using the
2147@var{url-fetch} method of @code{(guix download)}, the valid @code{uri}
2148values are: a URL represented as a string, or a list thereof.
2149
2150@item @code{method}
2151A procedure that will handle the URI.
2152
2153Examples include:
2154
2155@table @asis
2156@item @var{url-fetch} from @code{(guix download)}
2157download a file the HTTP, HTTPS, or FTP URL specified in the
2158@code{uri} field;
2159
2160@item @var{git-fetch} from @code{(guix git-download)}
2161clone the Git version control repository, and check out the revision
2162specified in the @code{uri} field as a @code{git-reference} object; a
2163@code{git-reference} looks like this:
2164
2165@example
2166(git-reference
2167 (url "git://git.debian.org/git/pkg-shadow/shadow")
2168 (commit "v4.1.5.1"))
2169@end example
2170@end table
2171
2172@item @code{sha256}
2173A bytevector containing the SHA-256 hash of the source. Typically the
2174@code{base32} form is used here to generate the bytevector from a
2175base-32 string.
2176
2177@item @code{file-name} (default: @code{#f})
2178The file name under which the source code should be saved. When this is
2179@code{#f}, a sensible default value will be used in most cases. In case
2180the source is fetched from a URL, the file name from the URL will be
2181used. For version control checkouts, it's recommended to provide the
2182file name explicitly because the default is not very descriptive.
2183
2184@item @code{patches} (default: @code{'()})
2185A list of file names containing patches to be applied to the source.
2186
2187@item @code{snippet} (default: @code{#f})
2188A quoted piece of code that will be run in the source directory to make
2189any modifications, which is sometimes more convenient than a patch.
2190
2191@item @code{patch-flags} (default: @code{'("-p1")})
2192A list of command-line flags that should be passed to the @code{patch}
2193command.
2194
2195@item @code{patch-inputs} (default: @code{#f})
2196Input packages or derivations to the patching process. When this is
2197@code{#f}, the usual set of inputs necessary for patching are provided,
2198such as GNU@tie{}Patch.
2199
2200@item @code{modules} (default: @code{'()})
2201A list of Guile modules that should be loaded during the patching
2202process and while running the code in the @code{snippet} field.
2203
2204@item @code{imported-modules} (default: @code{'()})
2205The list of Guile modules to import in the patch derivation, for use by
2206the @code{snippet}.
2207
2208@item @code{patch-guile} (default: @code{#f})
2209The Guile package that should be used in the patching process. When
2210this is @code{#f}, a sensible default is used.
2211@end table
2212@end deftp
2213
9c1edabd 2214
7458bd0a
LC
2215@node Build Systems
2216@section Build Systems
2217
2218@cindex build system
2219Each package definition specifies a @dfn{build system} and arguments for
2220that build system (@pxref{Defining Packages}). This @code{build-system}
2221field represents the build procedure of the package, as well implicit
2222dependencies of that build procedure.
2223
2224Build systems are @code{<build-system>} objects. The interface to
2225create and manipulate them is provided by the @code{(guix build-system)}
2226module, and actual build systems are exported by specific modules.
2227
f5fd4fd2 2228@cindex bag (low-level package representation)
0d5a559f
LC
2229Under the hood, build systems first compile package objects to
2230@dfn{bags}. A @dfn{bag} is like a package, but with less
2231ornamentation---in other words, a bag is a lower-level representation of
2232a package, which includes all the inputs of that package, including some
2233that were implicitly added by the build system. This intermediate
2234representation is then compiled to a derivation (@pxref{Derivations}).
2235
7458bd0a
LC
2236Build systems accept an optional list of @dfn{arguments}. In package
2237definitions, these are passed @i{via} the @code{arguments} field
2238(@pxref{Defining Packages}). They are typically keyword arguments
2239(@pxref{Optional Arguments, keyword arguments in Guile,, guile, GNU
2240Guile Reference Manual}). The value of these arguments is usually
2241evaluated in the @dfn{build stratum}---i.e., by a Guile process launched
2242by the daemon (@pxref{Derivations}).
2243
2244The main build system is @var{gnu-build-system}, which implements the
2245standard build procedure for GNU packages and many other packages. It
2246is provided by the @code{(guix build-system gnu)} module.
2247
2248@defvr {Scheme Variable} gnu-build-system
2249@var{gnu-build-system} represents the GNU Build System, and variants
2250thereof (@pxref{Configuration, configuration and makefile conventions,,
2251standards, GNU Coding Standards}).
2252
2253@cindex build phases
2254In a nutshell, packages using it configured, built, and installed with
2255the usual @code{./configure && make && make check && make install}
2256command sequence. In practice, a few additional steps are often needed.
2257All these steps are split up in separate @dfn{phases},
2258notably@footnote{Please see the @code{(guix build gnu-build-system)}
2259modules for more details about the build phases.}:
2260
2261@table @code
2262@item unpack
2263Unpack the source tarball, and change the current directory to the
2264extracted source tree. If the source is actually a directory, copy it
2265to the build tree, and enter that directory.
2266
2267@item patch-source-shebangs
2268Patch shebangs encountered in source files so they refer to the right
2269store file names. For instance, this changes @code{#!/bin/sh} to
2270@code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
2271
2272@item configure
2273Run the @file{configure} script with a number of default options, such
2274as @code{--prefix=/gnu/store/@dots{}}, as well as the options specified
2275by the @code{#:configure-flags} argument.
2276
2277@item build
2278Run @code{make} with the list of flags specified with
2279@code{#:make-flags}. If the @code{#:parallel-builds?} argument is true
2280(the default), build with @code{make -j}.
2281
2282@item check
2283Run @code{make check}, or some other target specified with
2284@code{#:test-target}, unless @code{#:tests? #f} is passed. If the
2285@code{#:parallel-tests?} argument is true (the default), run @code{make
2286check -j}.
2287
2288@item install
2289Run @code{make install} with the flags listed in @code{#:make-flags}.
2290
2291@item patch-shebangs
2292Patch shebangs on the installed executable files.
2293
2294@item strip
2295Strip debugging symbols from ELF files (unless @code{#:strip-binaries?}
2296is false), copying them to the @code{debug} output when available
2297(@pxref{Installing Debugging Files}).
2298@end table
2299
2300@vindex %standard-phases
2301The build-side module @code{(guix build gnu-build-system)} defines
2302@var{%standard-phases} as the default list of build phases.
2303@var{%standard-phases} is a list of symbol/procedure pairs, where the
2304procedure implements the actual phase.
2305
2306The list of phases used for a particular package can be changed with the
2307@code{#:phases} parameter. For instance, passing:
2308
2309@example
2310#:phases (alist-delete 'configure %standard-phases)
2311@end example
2312
9bf404e9 2313means that all the phases described above will be used, except the
7458bd0a
LC
2314@code{configure} phase.
2315
2316In addition, this build system ensures that the ``standard'' environment
2317for GNU packages is available. This includes tools such as GCC, libc,
2318Coreutils, Bash, Make, Diffutils, grep, and sed (see the @code{(guix
2319build-system gnu)} module for a complete list.) We call these the
2320@dfn{implicit inputs} of a package, because package definitions don't
2321have to mention them.
2322@end defvr
2323
2324Other @code{<build-system>} objects are defined to support other
2325conventions and tools used by free software packages. They inherit most
2326of @var{gnu-build-system}, and differ mainly in the set of inputs
2327implicitly added to the build process, and in the list of phases
2328executed. Some of these build systems are listed below.
2329
2330@defvr {Scheme Variable} cmake-build-system
2331This variable is exported by @code{(guix build-system cmake)}. It
2332implements the build procedure for packages using the
2333@url{http://www.cmake.org, CMake build tool}.
2334
2335It automatically adds the @code{cmake} package to the set of inputs.
2336Which package is used can be specified with the @code{#:cmake}
2337parameter.
9849cfc1
LC
2338
2339The @code{#:configure-flags} parameter is taken as a list of flags
2340passed to the @command{cmake} command. The @code{#:build-type}
2341parameter specifies in abstract terms the flags passed to the compiler;
2342it defaults to @code{"RelWithDebInfo"} (short for ``release mode with
2343debugging information''), which roughly means that code is compiled with
2344@code{-O2 -g}, as is the case for Autoconf-based packages by default.
7458bd0a
LC
2345@end defvr
2346
3afcf52b
FB
2347@defvr {Scheme Variable} glib-or-gtk-build-system
2348This variable is exported by @code{(guix build-system glib-or-gtk)}. It
2349is intended for use with packages making use of GLib or GTK+.
2350
2351This build system adds the following two phases to the ones defined by
2352@var{gnu-build-system}:
2353
2354@table @code
2355@item glib-or-gtk-wrap
2356The phase @code{glib-or-gtk-wrap} ensures that programs found under
2357@file{bin/} are able to find GLib's ``schemas'' and
2358@uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, GTK+
2359modules}. This is achieved by wrapping the programs in launch scripts
2360that appropriately set the @code{XDG_DATA_DIRS} and @code{GTK_PATH}
2361environment variables.
2362
73aa8ddb
LC
2363It is possible to exclude specific package outputs from that wrapping
2364process by listing their names in the
2365@code{#:glib-or-gtk-wrap-excluded-outputs} parameter. This is useful
2366when an output is known not to contain any GLib or GTK+ binaries, and
2367where wrapping would gratuitously add a dependency of that output on
2368GLib and GTK+.
2369
3afcf52b
FB
2370@item glib-or-gtk-compile-schemas
2371The phase @code{glib-or-gtk-compile-schemas} makes sure that all GLib's
2372@uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
2373GSettings schemas} are compiled. Compilation is performed by the
2374@command{glib-compile-schemas} program. It is provided by the package
2375@code{glib:bin} which is automatically imported by the build system.
2376The @code{glib} package providing @command{glib-compile-schemas} can be
2377specified with the @code{#:glib} parameter.
2378@end table
2379
2380Both phases are executed after the @code{install} phase.
2381@end defvr
2382
7458bd0a
LC
2383@defvr {Scheme Variable} python-build-system
2384This variable is exported by @code{(guix build-system python)}. It
2385implements the more or less standard build procedure used by Python
2386packages, which consists in running @code{python setup.py build} and
2387then @code{python setup.py install --prefix=/gnu/store/@dots{}}.
2388
2389For packages that install stand-alone Python programs under @code{bin/},
2390it takes care of wrapping these programs so their @code{PYTHONPATH}
2391environment variable points to all the Python libraries they depend on.
2392
2393Which Python package is used can be specified with the @code{#:python}
2394parameter.
2395@end defvr
2396
2397@defvr {Scheme Variable} perl-build-system
2398This variable is exported by @code{(guix build-system perl)}. It
2d2a53fc
EB
2399implements the standard build procedure for Perl packages, which either
2400consists in running @code{perl Build.PL --prefix=/gnu/store/@dots{}},
2401followed by @code{Build} and @code{Build install}; or in running
2402@code{perl Makefile.PL PREFIX=/gnu/store/@dots{}}, followed by
2403@code{make} and @code{make install}; depending on which of
2404@code{Build.PL} or @code{Makefile.PL} is present in the package
2405distribution. Preference is given to the former if both @code{Build.PL}
2406and @code{Makefile.PL} exist in the package distribution. This
2407preference can be reversed by specifying @code{#t} for the
2408@code{#:make-maker?} parameter.
2409
2410The initial @code{perl Makefile.PL} or @code{perl Build.PL} invocation
2411passes flags specified by the @code{#:make-maker-flags} or
2412@code{#:module-build-flags} parameter, respectively.
7458bd0a
LC
2413
2414Which Perl package is used can be specified with @code{#:perl}.
2415@end defvr
2416
c08f9818
DT
2417@defvr {Scheme Variable} ruby-build-system
2418This variable is exported by @code{(guix build-system ruby)}. It
2419implements the RubyGems build procedure used by Ruby packages, which
2420involves running @code{gem build} followed by @code{gem install}.
2421
2422Which Ruby package is used can be specified with the @code{#:ruby}
2423parameter.
2424@end defvr
7458bd0a 2425
a677c726
RW
2426@defvr {Scheme Variable} waf-build-system
2427This variable is exported by @code{(guix build-system waf)}. It
2428implements a build procedure around the @code{waf} script. The common
2429phases---@code{configure}, @code{build}, and @code{install}---are
2430implemented by passing their names as arguments to the @code{waf}
2431script.
2432
2433The @code{waf} script is executed by the Python interpreter. Which
2434Python package is used to run the script can be specified with the
2435@code{#:python} parameter.
2436@end defvr
2437
14dfdf2e
FB
2438@defvr {Scheme Variable} haskell-build-system
2439This variable is exported by @code{(guix build-system haskell)}. It
2440implements the Cabal build procedure used by Haskell packages, which
2441involves running @code{runhaskell Setup.hs configure
2442--prefix=/gnu/store/@dots{}} and @code{runhaskell Setup.hs build}.
2443Instead of installing the package by running @code{runhaskell Setup.hs
2444install}, to avoid trying to register libraries in the read-only
2445compiler store directory, the build system uses @code{runhaskell
2446Setup.hs copy}, followed by @code{runhaskell Setup.hs register}. In
2447addition, the build system generates the package documentation by
2448running @code{runhaskell Setup.hs haddock}, unless @code{#:haddock? #f}
2449is passed. Optional Haddock parameters can be passed with the help of
2450the @code{#:haddock-flags} parameter. If the file @code{Setup.hs} is
2451not found, the build system looks for @code{Setup.lhs} instead.
2452
2453Which Haskell compiler is used can be specified with the @code{#:haskell}
a54bd6d7 2454parameter which defaults to @code{ghc}.
14dfdf2e
FB
2455@end defvr
2456
7458bd0a
LC
2457Lastly, for packages that do not need anything as sophisticated, a
2458``trivial'' build system is provided. It is trivial in the sense that
2459it provides basically no support: it does not pull any implicit inputs,
2460and does not have a notion of build phases.
2461
2462@defvr {Scheme Variable} trivial-build-system
2463This variable is exported by @code{(guix build-system trivial)}.
2464
2465This build system requires a @code{#:builder} argument. This argument
2466must be a Scheme expression that builds the package's output(s)---as
2467with @code{build-expression->derivation} (@pxref{Derivations,
2468@code{build-expression->derivation}}).
2469@end defvr
2470
568717fd
LC
2471@node The Store
2472@section The Store
2473
e531ac2a
LC
2474@cindex store
2475@cindex store paths
2476
2477Conceptually, the @dfn{store} is where derivations that have been
834129e0 2478successfully built are stored---by default, under @file{/gnu/store}.
e531ac2a
LC
2479Sub-directories in the store are referred to as @dfn{store paths}. The
2480store has an associated database that contains information such has the
2481store paths referred to by each store path, and the list of @emph{valid}
2482store paths---paths that result from a successful build.
2483
2484The store is always accessed by the daemon on behalf of its clients
2485(@pxref{Invoking guix-daemon}). To manipulate the store, clients
2486connect to the daemon over a Unix-domain socket, send it requests, and
2487read the result---these are remote procedure calls, or RPCs.
2488
2489The @code{(guix store)} module provides procedures to connect to the
2490daemon, and to perform RPCs. These are described below.
2491
2492@deffn {Scheme Procedure} open-connection [@var{file}] [#:reserve-space? #t]
2493Connect to the daemon over the Unix-domain socket at @var{file}. When
2494@var{reserve-space?} is true, instruct it to reserve a little bit of
2495extra space on the file system so that the garbage collector can still
2496operate, should the disk become full. Return a server object.
2497
2498@var{file} defaults to @var{%default-socket-path}, which is the normal
2499location given the options that were passed to @command{configure}.
2500@end deffn
2501
2502@deffn {Scheme Procedure} close-connection @var{server}
2503Close the connection to @var{server}.
2504@end deffn
2505
2506@defvr {Scheme Variable} current-build-output-port
2507This variable is bound to a SRFI-39 parameter, which refers to the port
2508where build and error logs sent by the daemon should be written.
2509@end defvr
2510
2511Procedures that make RPCs all take a server object as their first
2512argument.
2513
2514@deffn {Scheme Procedure} valid-path? @var{server} @var{path}
2515Return @code{#t} when @var{path} is a valid store path.
2516@end deffn
2517
cfbf9160 2518@deffn {Scheme Procedure} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
e531ac2a
LC
2519Add @var{text} under file @var{name} in the store, and return its store
2520path. @var{references} is the list of store paths referred to by the
2521resulting store path.
2522@end deffn
2523
874e6874 2524@deffn {Scheme Procedure} build-derivations @var{server} @var{derivations}
59688fc4
LC
2525Build @var{derivations} (a list of @code{<derivation>} objects or
2526derivation paths), and return when the worker is done building them.
2527Return @code{#t} on success.
874e6874
LC
2528@end deffn
2529
b860f382
LC
2530Note that the @code{(guix monads)} module provides a monad as well as
2531monadic versions of the above procedures, with the goal of making it
2532more convenient to work with code that accesses the store (@pxref{The
2533Store Monad}).
2534
e531ac2a
LC
2535@c FIXME
2536@i{This section is currently incomplete.}
568717fd
LC
2537
2538@node Derivations
2539@section Derivations
2540
874e6874
LC
2541@cindex derivations
2542Low-level build actions and the environment in which they are performed
2543are represented by @dfn{derivations}. A derivation contain the
2544following pieces of information:
2545
2546@itemize
2547@item
2548The outputs of the derivation---derivations produce at least one file or
2549directory in the store, but may produce more.
2550
2551@item
2552The inputs of the derivations, which may be other derivations or plain
2553files in the store (patches, build scripts, etc.)
2554
2555@item
2556The system type targeted by the derivation---e.g., @code{x86_64-linux}.
2557
2558@item
2559The file name of a build script in the store, along with the arguments
2560to be passed.
2561
2562@item
2563A list of environment variables to be defined.
2564
2565@end itemize
2566
2567@cindex derivation path
2568Derivations allow clients of the daemon to communicate build actions to
2569the store. They exist in two forms: as an in-memory representation,
2570both on the client- and daemon-side, and as files in the store whose
2571name end in @code{.drv}---these files are referred to as @dfn{derivation
2572paths}. Derivations paths can be passed to the @code{build-derivations}
2573procedure to perform the build actions they prescribe (@pxref{The
2574Store}).
2575
2576The @code{(guix derivations)} module provides a representation of
2577derivations as Scheme objects, along with procedures to create and
2578otherwise manipulate derivations. The lowest-level primitive to create
2579a derivation is the @code{derivation} procedure:
2580
1909431c
LC
2581@deffn {Scheme Procedure} derivation @var{store} @var{name} @var{builder} @
2582 @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
2096ef47 2583 [#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
1909431c 2584 [#:system (%current-system)] [#:references-graphs #f] @
4a6aeb67
LC
2585 [#:allowed-references #f] [#:leaked-env-vars #f] [#:local-build? #f] @
2586 [#:substitutable? #t]
59688fc4
LC
2587Build a derivation with the given arguments, and return the resulting
2588@code{<derivation>} object.
874e6874 2589
2096ef47 2590When @var{hash} and @var{hash-algo} are given, a
874e6874 2591@dfn{fixed-output derivation} is created---i.e., one whose result is
36bbbbd1
LC
2592known in advance, such as a file download. If, in addition,
2593@var{recursive?} is true, then that fixed output may be an executable
2594file or a directory and @var{hash} must be the hash of an archive
2595containing this output.
5b0c9d16 2596
858e9282 2597When @var{references-graphs} is true, it must be a list of file
5b0c9d16
LC
2598name/store path pairs. In that case, the reference graph of each store
2599path is exported in the build environment in the corresponding file, in
2600a simple text format.
1909431c 2601
b53be755
LC
2602When @var{allowed-references} is true, it must be a list of store items
2603or outputs that the derivation's output may refer to.
2604
c0468155
LC
2605When @var{leaked-env-vars} is true, it must be a list of strings
2606denoting environment variables that are allowed to ``leak'' from the
2607daemon's environment to the build environment. This is only applicable
2608to fixed-output derivations---i.e., when @var{hash} is true. The main
2609use is to allow variables such as @code{http_proxy} to be passed to
2610derivations that download files.
2611
1909431c
LC
2612When @var{local-build?} is true, declare that the derivation is not a
2613good candidate for offloading and should rather be built locally
2614(@pxref{Daemon Offload Setup}). This is the case for small derivations
2615where the costs of data transfers would outweigh the benefits.
4a6aeb67
LC
2616
2617When @var{substitutable?} is false, declare that substitutes of the
2618derivation's output should not be used (@pxref{Substitutes}). This is
2619useful, for instance, when building packages that capture details of the
2620host CPU instruction set.
874e6874
LC
2621@end deffn
2622
2623@noindent
2624Here's an example with a shell script as its builder, assuming
2625@var{store} is an open connection to the daemon, and @var{bash} points
2626to a Bash executable in the store:
2627
2628@lisp
2629(use-modules (guix utils)
2630 (guix store)
2631 (guix derivations))
2632
59688fc4
LC
2633(let ((builder ; add the Bash script to the store
2634 (add-text-to-store store "my-builder.sh"
2635 "echo hello world > $out\n" '())))
2636 (derivation store "foo"
2637 bash `("-e" ,builder)
21b679f6 2638 #:inputs `((,bash) (,builder))
59688fc4 2639 #:env-vars '(("HOME" . "/homeless"))))
834129e0 2640@result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
874e6874
LC
2641@end lisp
2642
21b679f6
LC
2643As can be guessed, this primitive is cumbersome to use directly. A
2644better approach is to write build scripts in Scheme, of course! The
2645best course of action for that is to write the build code as a
2646``G-expression'', and to pass it to @code{gexp->derivation}. For more
6621cdb6 2647information, @pxref{G-Expressions}.
21b679f6
LC
2648
2649Once upon a time, @code{gexp->derivation} did not exist and constructing
2650derivations with build code written in Scheme was achieved with
2651@code{build-expression->derivation}, documented below. This procedure
2652is now deprecated in favor of the much nicer @code{gexp->derivation}.
874e6874 2653
dd1a5a15
LC
2654@deffn {Scheme Procedure} build-expression->derivation @var{store} @
2655 @var{name} @var{exp} @
2656 [#:system (%current-system)] [#:inputs '()] @
2657 [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
36bbbbd1 2658 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
63a42824 2659 [#:references-graphs #f] [#:allowed-references #f] @
4a6aeb67 2660 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
874e6874
LC
2661Return a derivation that executes Scheme expression @var{exp} as a
2662builder for derivation @var{name}. @var{inputs} must be a list of
2663@code{(name drv-path sub-drv)} tuples; when @var{sub-drv} is omitted,
2664@code{"out"} is assumed. @var{modules} is a list of names of Guile
2665modules from the current search path to be copied in the store,
2666compiled, and made available in the load path during the execution of
2667@var{exp}---e.g., @code{((guix build utils) (guix build
2668gnu-build-system))}.
2669
2670@var{exp} is evaluated in an environment where @code{%outputs} is bound
2671to a list of output/path pairs, and where @code{%build-inputs} is bound
2672to a list of string/output-path pairs made from @var{inputs}.
2673Optionally, @var{env-vars} is a list of string pairs specifying the name
2674and value of environment variables visible to the builder. The builder
2675terminates by passing the result of @var{exp} to @code{exit}; thus, when
2676@var{exp} returns @code{#f}, the build is considered to have failed.
2677
2678@var{exp} is built using @var{guile-for-build} (a derivation). When
2679@var{guile-for-build} is omitted or is @code{#f}, the value of the
2680@code{%guile-for-build} fluid is used instead.
9c629a27 2681
63a42824 2682See the @code{derivation} procedure for the meaning of
4a6aeb67
LC
2683@var{references-graphs}, @var{allowed-references}, @var{local-build?},
2684and @var{substitutable?}.
874e6874
LC
2685@end deffn
2686
2687@noindent
2688Here's an example of a single-output derivation that creates a directory
2689containing one file:
2690
2691@lisp
2692(let ((builder '(let ((out (assoc-ref %outputs "out")))
834129e0 2693 (mkdir out) ; create /gnu/store/@dots{}-goo
874e6874
LC
2694 (call-with-output-file (string-append out "/test")
2695 (lambda (p)
2696 (display '(hello guix) p))))))
dd1a5a15 2697 (build-expression->derivation store "goo" builder))
874e6874 2698
834129e0 2699@result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
874e6874
LC
2700@end lisp
2701
568717fd 2702
b860f382
LC
2703@node The Store Monad
2704@section The Store Monad
2705
2706@cindex monad
2707
2708The procedures that operate on the store described in the previous
2709sections all take an open connection to the build daemon as their first
2710argument. Although the underlying model is functional, they either have
2711side effects or depend on the current state of the store.
2712
2713The former is inconvenient: the connection to the build daemon has to be
2714carried around in all those functions, making it impossible to compose
2715functions that do not take that parameter with functions that do. The
2716latter can be problematic: since store operations have side effects
2717and/or depend on external state, they have to be properly sequenced.
2718
2719@cindex monadic values
2720@cindex monadic functions
2721This is where the @code{(guix monads)} module comes in. This module
2722provides a framework for working with @dfn{monads}, and a particularly
2723useful monad for our uses, the @dfn{store monad}. Monads are a
2724construct that allows two things: associating ``context'' with values
2725(in our case, the context is the store), and building sequences of
561fb6c3 2726computations (here computations include accesses to the store.) Values
b860f382
LC
2727in a monad---values that carry this additional context---are called
2728@dfn{monadic values}; procedures that return such values are called
2729@dfn{monadic procedures}.
2730
2731Consider this ``normal'' procedure:
2732
2733@example
45adbd62
LC
2734(define (sh-symlink store)
2735 ;; Return a derivation that symlinks the 'bash' executable.
2736 (let* ((drv (package-derivation store bash))
2737 (out (derivation->output-path drv))
2738 (sh (string-append out "/bin/bash")))
2739 (build-expression->derivation store "sh"
2740 `(symlink ,sh %output))))
b860f382
LC
2741@end example
2742
c6f30b81
LC
2743Using @code{(guix monads)} and @code{(guix gexp)}, it may be rewritten
2744as a monadic function:
b860f382
LC
2745
2746@example
45adbd62 2747(define (sh-symlink)
b860f382 2748 ;; Same, but return a monadic value.
c6f30b81
LC
2749 (mlet %store-monad ((drv (package->derivation bash)))
2750 (gexp->derivation "sh"
2751 #~(symlink (string-append #$drv "/bin/bash")
2752 #$output))))
b860f382
LC
2753@end example
2754
c6f30b81
LC
2755There several things to note in the second version: the @code{store}
2756parameter is now implicit and is ``threaded'' in the calls to the
2757@code{package->derivation} and @code{gexp->derivation} monadic
2758procedures, and the monadic value returned by @code{package->derivation}
2759is @dfn{bound} using @code{mlet} instead of plain @code{let}.
2760
2761As it turns out, the call to @code{package->derivation} can even be
2762omitted since it will take place implicitly, as we will see later
2763(@pxref{G-Expressions}):
2764
2765@example
2766(define (sh-symlink)
2767 (gexp->derivation "sh"
2768 #~(symlink (string-append #$bash "/bin/bash")
2769 #$output)))
2770@end example
b860f382 2771
7ce21611
LC
2772@c See
2773@c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
2774@c for the funny quote.
2775Calling the monadic @code{sh-symlink} has no effect. As someone once
2776said, ``you exit a monad like you exit a building on fire: by running''.
2777So, to exit the monad and get the desired effect, one must use
2778@code{run-with-store}:
b860f382
LC
2779
2780@example
8e9aa37f
CAW
2781(run-with-store (open-connection) (sh-symlink))
2782@result{} /gnu/store/...-sh-symlink
b860f382
LC
2783@end example
2784
b9b86078
LC
2785Note that the @code{(guix monad-repl)} module extends Guile's REPL with
2786new ``meta-commands'' to make it easier to deal with monadic procedures:
2787@code{run-in-store}, and @code{enter-store-monad}. The former, is used
2788to ``run'' a single monadic value through the store:
2789
2790@example
2791scheme@@(guile-user)> ,run-in-store (package->derivation hello)
2792$1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
2793@end example
2794
2795The latter enters a recursive REPL, where all the return values are
2796automatically run through the store:
2797
2798@example
2799scheme@@(guile-user)> ,enter-store-monad
2800store-monad@@(guile-user) [1]> (package->derivation hello)
2801$2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
2802store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
2803$3 = "/gnu/store/@dots{}-foo"
2804store-monad@@(guile-user) [1]> ,q
2805scheme@@(guile-user)>
2806@end example
2807
2808@noindent
2809Note that non-monadic values cannot be returned in the
2810@code{store-monad} REPL.
2811
e87f0591
LC
2812The main syntactic forms to deal with monads in general are provided by
2813the @code{(guix monads)} module and are described below.
b860f382
LC
2814
2815@deffn {Scheme Syntax} with-monad @var{monad} @var{body} ...
2816Evaluate any @code{>>=} or @code{return} forms in @var{body} as being
2817in @var{monad}.
2818@end deffn
2819
2820@deffn {Scheme Syntax} return @var{val}
2821Return a monadic value that encapsulates @var{val}.
2822@end deffn
2823
751630c9 2824@deffn {Scheme Syntax} >>= @var{mval} @var{mproc} ...
b860f382 2825@dfn{Bind} monadic value @var{mval}, passing its ``contents'' to monadic
751630c9
LC
2826procedures @var{mproc}@dots{}@footnote{This operation is commonly
2827referred to as ``bind'', but that name denotes an unrelated procedure in
2828Guile. Thus we use this somewhat cryptic symbol inherited from the
2829Haskell language.}. There can be one @var{mproc} or several of them, as
2830in this example:
2831
2832@example
2833(run-with-state
2834 (with-monad %state-monad
2835 (>>= (return 1)
2836 (lambda (x) (return (+ 1 x)))
2837 (lambda (x) (return (* 2 x)))))
2838 'some-state)
2839
2840@result{} 4
2841@result{} some-state
2842@end example
b860f382
LC
2843@end deffn
2844
2845@deffn {Scheme Syntax} mlet @var{monad} ((@var{var} @var{mval}) ...) @
2846 @var{body} ...
2847@deffnx {Scheme Syntax} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
2848 @var{body} ...
2849Bind the variables @var{var} to the monadic values @var{mval} in
2850@var{body}. The form (@var{var} -> @var{val}) binds @var{var} to the
2851``normal'' value @var{val}, as per @code{let}.
2852
2853@code{mlet*} is to @code{mlet} what @code{let*} is to @code{let}
2854(@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
2855@end deffn
2856
405a9d4e
LC
2857@deffn {Scheme System} mbegin @var{monad} @var{mexp} ...
2858Bind @var{mexp} and the following monadic expressions in sequence,
2859returning the result of the last expression.
2860
2861This is akin to @code{mlet}, except that the return values of the
2862monadic expressions are ignored. In that sense, it is analogous to
2863@code{begin}, but applied to monadic expressions.
2864@end deffn
2865
561fb6c3
LC
2866@cindex state monad
2867The @code{(guix monads)} module provides the @dfn{state monad}, which
2868allows an additional value---the state---to be @emph{threaded} through
2869monadic procedure calls.
2870
2871@defvr {Scheme Variable} %state-monad
2872The state monad. Procedures in the state monad can access and change
2873the state that is threaded.
2874
2875Consider the example below. The @code{square} procedure returns a value
2876in the state monad. It returns the square of its argument, but also
2877increments the current state value:
2878
2879@example
2880(define (square x)
2881 (mlet %state-monad ((count (current-state)))
2882 (mbegin %state-monad
2883 (set-current-state (+ 1 count))
2884 (return (* x x)))))
2885
2886(run-with-state (sequence %state-monad (map square (iota 3))) 0)
2887@result{} (0 1 4)
2888@result{} 3
2889@end example
2890
2891When ``run'' through @var{%state-monad}, we obtain that additional state
2892value, which is the number of @code{square} calls.
2893@end defvr
2894
2895@deffn {Monadic Procedure} current-state
2896Return the current state as a monadic value.
2897@end deffn
2898
2899@deffn {Monadic Procedure} set-current-state @var{value}
2900Set the current state to @var{value} and return the previous state as a
2901monadic value.
2902@end deffn
2903
2904@deffn {Monadic Procedure} state-push @var{value}
2905Push @var{value} to the current state, which is assumed to be a list,
2906and return the previous state as a monadic value.
2907@end deffn
2908
2909@deffn {Monadic Procedure} state-pop
2910Pop a value from the current state and return it as a monadic value.
2911The state is assumed to be a list.
2912@end deffn
2913
2914@deffn {Scheme Procedure} run-with-state @var{mval} [@var{state}]
2915Run monadic value @var{mval} starting with @var{state} as the initial
2916state. Return two values: the resulting value, and the resulting state.
2917@end deffn
2918
e87f0591
LC
2919The main interface to the store monad, provided by the @code{(guix
2920store)} module, is as follows.
b860f382
LC
2921
2922@defvr {Scheme Variable} %store-monad
561fb6c3
LC
2923The store monad---an alias for @var{%state-monad}.
2924
2925Values in the store monad encapsulate accesses to the store. When its
2926effect is needed, a value of the store monad must be ``evaluated'' by
2927passing it to the @code{run-with-store} procedure (see below.)
b860f382
LC
2928@end defvr
2929
2930@deffn {Scheme Procedure} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
2931Run @var{mval}, a monadic value in the store monad, in @var{store}, an
2932open store connection.
2933@end deffn
2934
ad372953 2935@deffn {Monadic Procedure} text-file @var{name} @var{text} [@var{references}]
b860f382 2936Return as a monadic value the absolute file name in the store of the file
ad372953
LC
2937containing @var{text}, a string. @var{references} is a list of store items that the
2938resulting text file refers to; it defaults to the empty list.
45adbd62
LC
2939@end deffn
2940
0a90af15
LC
2941@deffn {Monadic Procedure} interned-file @var{file} [@var{name}] @
2942 [#:recursive? #t]
2943Return the name of @var{file} once interned in the store. Use
2944@var{name} as its store name, or the basename of @var{file} if
2945@var{name} is omitted.
2946
2947When @var{recursive?} is true, the contents of @var{file} are added
2948recursively; if @var{file} designates a flat file and @var{recursive?}
2949is true, its contents are added, and its permission bits are kept.
2950
2951The example below adds a file to the store, under two different names:
2952
2953@example
2954(run-with-store (open-connection)
2955 (mlet %store-monad ((a (interned-file "README"))
2956 (b (interned-file "README" "LEGU-MIN")))
2957 (return (list a b))))
2958
2959@result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
2960@end example
2961
2962@end deffn
2963
e87f0591
LC
2964The @code{(guix packages)} module exports the following package-related
2965monadic procedures:
2966
b860f382 2967@deffn {Monadic Procedure} package-file @var{package} [@var{file}] @
4231f05b
LC
2968 [#:system (%current-system)] [#:target #f] @
2969 [#:output "out"] Return as a monadic
b860f382
LC
2970value in the absolute file name of @var{file} within the @var{output}
2971directory of @var{package}. When @var{file} is omitted, return the name
4231f05b
LC
2972of the @var{output} directory of @var{package}. When @var{target} is
2973true, use it as a cross-compilation target triplet.
b860f382
LC
2974@end deffn
2975
b860f382 2976@deffn {Monadic Procedure} package->derivation @var{package} [@var{system}]
4231f05b
LC
2977@deffnx {Monadic Procedure} package->cross-derivation @var{package} @
2978 @var{target} [@var{system}]
2979Monadic version of @code{package-derivation} and
2980@code{package-cross-derivation} (@pxref{Defining Packages}).
b860f382
LC
2981@end deffn
2982
2983
21b679f6
LC
2984@node G-Expressions
2985@section G-Expressions
2986
2987@cindex G-expression
2988@cindex build code quoting
2989So we have ``derivations'', which represent a sequence of build actions
2990to be performed to produce an item in the store (@pxref{Derivations}).
2991Those build actions are performed when asking the daemon to actually
2992build the derivations; they are run by the daemon in a container
2993(@pxref{Invoking guix-daemon}).
2994
2995@cindex strata of code
2996It should come as no surprise that we like to write those build actions
2997in Scheme. When we do that, we end up with two @dfn{strata} of Scheme
2998code@footnote{The term @dfn{stratum} in this context was coined by
ef4ab0a4
LC
2999Manuel Serrano et al.@: in the context of their work on Hop. Oleg
3000Kiselyov, who has written insightful
3001@url{http://okmij.org/ftp/meta-programming/#meta-scheme, essays and code
3002on this topic}, refers to this kind of code generation as
3003@dfn{staging}.}: the ``host code''---code that defines packages, talks
3004to the daemon, etc.---and the ``build code''---code that actually
3005performs build actions, such as making directories, invoking
3006@command{make}, etc.
21b679f6
LC
3007
3008To describe a derivation and its build actions, one typically needs to
3009embed build code inside host code. It boils down to manipulating build
3010code as data, and Scheme's homoiconicity---code has a direct
3011representation as data---comes in handy for that. But we need more than
3012Scheme's normal @code{quasiquote} mechanism to construct build
3013expressions.
3014
3015The @code{(guix gexp)} module implements @dfn{G-expressions}, a form of
3016S-expressions adapted to build expressions. G-expressions, or
3017@dfn{gexps}, consist essentially in three syntactic forms: @code{gexp},
3018@code{ungexp}, and @code{ungexp-splicing} (or simply: @code{#~},
3019@code{#$}, and @code{#$@@}), which are comparable respectively to
3020@code{quasiquote}, @code{unquote}, and @code{unquote-splicing}
3021(@pxref{Expression Syntax, @code{quasiquote},, guile, GNU Guile
3022Reference Manual}). However, there are major differences:
3023
3024@itemize
3025@item
3026Gexps are meant to be written to a file and run or manipulated by other
3027processes.
3028
3029@item
b39fc6f7
LC
3030When a high-level object such as a package or derivation is unquoted
3031inside a gexp, the result is as if its output file name had been
3032introduced.
ff40e9b7 3033
21b679f6
LC
3034@item
3035Gexps carry information about the packages or derivations they refer to,
3036and these dependencies are automatically added as inputs to the build
3037processes that use them.
3038@end itemize
3039
343eacbe
LC
3040This mechanism is not limited to package and derivation
3041objects: @dfn{compilers} able to ``lower'' other high-level objects to
b39fc6f7 3042derivations can be defined, such that these objects can also be inserted
343eacbe
LC
3043into gexps. For example, a useful type of high-level object that can be
3044inserted in a gexp is ``file-like objects'', which make it easy to
3045add files to the store and refer to them in
558e8b11
LC
3046derivations and such (see @code{local-file} and @code{plain-file}
3047below.)
b39fc6f7 3048
21b679f6
LC
3049To illustrate the idea, here is an example of a gexp:
3050
3051@example
3052(define build-exp
3053 #~(begin
3054 (mkdir #$output)
3055 (chdir #$output)
aff8ce7c 3056 (symlink (string-append #$coreutils "/bin/ls")
21b679f6
LC
3057 "list-files")))
3058@end example
3059
3060This gexp can be passed to @code{gexp->derivation}; we obtain a
3061derivation that builds a directory containing exactly one symlink to
3062@file{/gnu/store/@dots{}-coreutils-8.22/bin/ls}:
3063
3064@example
3065(gexp->derivation "the-thing" build-exp)
3066@end example
3067
e20fd1bf 3068As one would expect, the @code{"/gnu/store/@dots{}-coreutils-8.22"} string is
21b679f6
LC
3069substituted to the reference to the @var{coreutils} package in the
3070actual build code, and @var{coreutils} is automatically made an input to
3071the derivation. Likewise, @code{#$output} (equivalent to @code{(ungexp
3072output)}) is replaced by a string containing the derivation's output
667b2508
LC
3073directory name.
3074
3075@cindex cross compilation
3076In a cross-compilation context, it is useful to distinguish between
3077references to the @emph{native} build of a package---that can run on the
3078host---versus references to cross builds of a package. To that end, the
3079@code{#+} plays the same role as @code{#$}, but is a reference to a
3080native package build:
3081
3082@example
3083(gexp->derivation "vi"
3084 #~(begin
3085 (mkdir #$output)
3086 (system* (string-append #+coreutils "/bin/ln")
3087 "-s"
3088 (string-append #$emacs "/bin/emacs")
3089 (string-append #$output "/bin/vi")))
3090 #:target "mips64el-linux")
3091@end example
3092
3093@noindent
3094In the example above, the native build of @var{coreutils} is used, so
3095that @command{ln} can actually run on the host; but then the
3096cross-compiled build of @var{emacs} is referenced.
3097
3098The syntactic form to construct gexps is summarized below.
21b679f6
LC
3099
3100@deffn {Scheme Syntax} #~@var{exp}
3101@deffnx {Scheme Syntax} (gexp @var{exp})
3102Return a G-expression containing @var{exp}. @var{exp} may contain one
3103or more of the following forms:
3104
3105@table @code
3106@item #$@var{obj}
3107@itemx (ungexp @var{obj})
b39fc6f7
LC
3108Introduce a reference to @var{obj}. @var{obj} may have one of the
3109supported types, for example a package or a
21b679f6
LC
3110derivation, in which case the @code{ungexp} form is replaced by its
3111output file name---e.g., @code{"/gnu/store/@dots{}-coreutils-8.22}.
3112
b39fc6f7
LC
3113If @var{obj} is a list, it is traversed and references to supported
3114objects are substituted similarly.
21b679f6
LC
3115
3116If @var{obj} is another gexp, its contents are inserted and its
3117dependencies are added to those of the containing gexp.
3118
3119If @var{obj} is another kind of object, it is inserted as is.
3120
b39fc6f7
LC
3121@item #$@var{obj}:@var{output}
3122@itemx (ungexp @var{obj} @var{output})
21b679f6 3123This is like the form above, but referring explicitly to the
b39fc6f7
LC
3124@var{output} of @var{obj}---this is useful when @var{obj} produces
3125multiple outputs (@pxref{Packages with Multiple Outputs}).
21b679f6 3126
667b2508
LC
3127@item #+@var{obj}
3128@itemx #+@var{obj}:output
3129@itemx (ungexp-native @var{obj})
3130@itemx (ungexp-native @var{obj} @var{output})
3131Same as @code{ungexp}, but produces a reference to the @emph{native}
3132build of @var{obj} when used in a cross compilation context.
3133
21b679f6
LC
3134@item #$output[:@var{output}]
3135@itemx (ungexp output [@var{output}])
3136Insert a reference to derivation output @var{output}, or to the main
3137output when @var{output} is omitted.
3138
3139This only makes sense for gexps passed to @code{gexp->derivation}.
3140
3141@item #$@@@var{lst}
3142@itemx (ungexp-splicing @var{lst})
3143Like the above, but splices the contents of @var{lst} inside the
3144containing list.
3145
667b2508
LC
3146@item #+@@@var{lst}
3147@itemx (ungexp-native-splicing @var{lst})
3148Like the above, but refers to native builds of the objects listed in
3149@var{lst}.
3150
21b679f6
LC
3151@end table
3152
3153G-expressions created by @code{gexp} or @code{#~} are run-time objects
3154of the @code{gexp?} type (see below.)
3155@end deffn
3156
3157@deffn {Scheme Procedure} gexp? @var{obj}
3158Return @code{#t} if @var{obj} is a G-expression.
3159@end deffn
3160
3161G-expressions are meant to be written to disk, either as code building
3162some derivation, or as plain files in the store. The monadic procedures
3163below allow you to do that (@pxref{The Store Monad}, for more
3164information about monads.)
3165
3166@deffn {Monadic Procedure} gexp->derivation @var{name} @var{exp} @
ce45eb4c 3167 [#:system (%current-system)] [#:target #f] [#:graft? #t] @
21b679f6
LC
3168 [#:hash #f] [#:hash-algo #f] @
3169 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
4684f301 3170 [#:module-path @var{%load-path}] @
c8351d9a 3171 [#:references-graphs #f] [#:allowed-references #f] @
c0468155 3172 [#:leaked-env-vars #f] @
4a6aeb67 3173 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
21b679f6 3174Return a derivation @var{name} that runs @var{exp} (a gexp) with
68a61e9f
LC
3175@var{guile-for-build} (a derivation) on @var{system}. When @var{target}
3176is true, it is used as the cross-compilation target triplet for packages
3177referred to by @var{exp}.
21b679f6 3178
ce45eb4c
LC
3179Make @var{modules} available in the evaluation context of @var{exp};
3180@var{modules} is a list of names of Guile modules searched in
3181@var{module-path} to be copied in the store, compiled, and made available in
21b679f6
LC
3182the load path during the execution of @var{exp}---e.g., @code{((guix
3183build utils) (guix build gnu-build-system))}.
3184
ce45eb4c
LC
3185@var{graft?} determines whether packages referred to by @var{exp} should be grafted when
3186applicable.
3187
b53833b2
LC
3188When @var{references-graphs} is true, it must be a list of tuples of one of the
3189following forms:
3190
3191@example
3192(@var{file-name} @var{package})
3193(@var{file-name} @var{package} @var{output})
3194(@var{file-name} @var{derivation})
3195(@var{file-name} @var{derivation} @var{output})
3196(@var{file-name} @var{store-item})
3197@end example
3198
3199The right-hand-side of each element of @var{references-graphs} is automatically made
3200an input of the build process of @var{exp}. In the build environment, each
3201@var{file-name} contains the reference graph of the corresponding item, in a simple
3202text format.
3203
c8351d9a
LC
3204@var{allowed-references} must be either @code{#f} or a list of output names and packages.
3205In the latter case, the list denotes store items that the result is allowed to
3206refer to. Any reference to another store item will lead to a build error.
3207
e20fd1bf 3208The other arguments are as for @code{derivation} (@pxref{Derivations}).
21b679f6
LC
3209@end deffn
3210
343eacbe
LC
3211@cindex file-like objects
3212The @code{local-file} and @code{plain-file} procedures below return
3213@dfn{file-like objects}. That is, when unquoted in a G-expression,
3214these objects lead to a file in the store. Consider this G-expression:
3215
3216@example
3217#~(system* (string-append #$glibc "/sbin/nscd") "-f"
3218 #$(local-file "/tmp/my-nscd.conf"))
3219@end example
3220
3221The effect here is to ``intern'' @file{/tmp/my-nscd.conf} by copying it
3222to the store. Once expanded, for instance @i{via}
3223@code{gexp->derivation}, the G-expression refers to that copy under
3224@file{/gnu/store}; thus, modifying or removing the file in @file{/tmp}
3225does not have any effect on what the G-expression does.
3226@code{plain-file} can be used similarly; it differs in that the file
3227content is directly passed as a string.
3228
d9ae938f
LC
3229@deffn {Scheme Procedure} local-file @var{file} [@var{name}] @
3230 [#:recursive? #t]
3231Return an object representing local file @var{file} to add to the store; this
3232object can be used in a gexp. @var{file} will be added to the store under @var{name}--by
3233default the base name of @var{file}.
3234
3235When @var{recursive?} is true, the contents of @var{file} are added recursively; if @var{file}
3236designates a flat file and @var{recursive?} is true, its contents are added, and its
3237permission bits are kept.
3238
3239This is the declarative counterpart of the @code{interned-file} monadic
3240procedure (@pxref{The Store Monad, @code{interned-file}}).
3241@end deffn
3242
558e8b11
LC
3243@deffn {Scheme Procedure} plain-file @var{name} @var{content}
3244Return an object representing a text file called @var{name} with the given
3245@var{content} (a string) to be added to the store.
3246
3247This is the declarative counterpart of @code{text-file}.
3248@end deffn
3249
21b679f6
LC
3250@deffn {Monadic Procedure} gexp->script @var{name} @var{exp}
3251Return an executable script @var{name} that runs @var{exp} using
3252@var{guile} with @var{modules} in its search path.
3253
3254The example below builds a script that simply invokes the @command{ls}
3255command:
3256
3257@example
3258(use-modules (guix gexp) (gnu packages base))
3259
3260(gexp->script "list-files"
3261 #~(execl (string-append #$coreutils "/bin/ls")
3262 "ls"))
3263@end example
3264
3265When ``running'' it through the store (@pxref{The Store Monad,
e20fd1bf 3266@code{run-with-store}}), we obtain a derivation that produces an
21b679f6
LC
3267executable file @file{/gnu/store/@dots{}-list-files} along these lines:
3268
3269@example
3270#!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
3271!#
3272(execl (string-append "/gnu/store/@dots{}-coreutils-8.22"/bin/ls")
3273 "ls")
3274@end example
3275@end deffn
3276
3277@deffn {Monadic Procedure} gexp->file @var{name} @var{exp}
3278Return a derivation that builds a file @var{name} containing @var{exp}.
3279
3280The resulting file holds references to all the dependencies of @var{exp}
3281or a subset thereof.
3282@end deffn
1ed19464
LC
3283
3284@deffn {Monadic Procedure} text-file* @var{name} @var{text} @dots{}
3285Return as a monadic value a derivation that builds a text file
3286containing all of @var{text}. @var{text} may list, in addition to
d9ae938f
LC
3287strings, objects of any type that can be used in a gexp: packages,
3288derivations, local file objects, etc. The resulting store file holds
3289references to all these.
1ed19464
LC
3290
3291This variant should be preferred over @code{text-file} anytime the file
3292to create will reference items from the store. This is typically the
3293case when building a configuration file that embeds store file names,
3294like this:
3295
3296@example
3297(define (profile.sh)
3298 ;; Return the name of a shell script in the store that
3299 ;; initializes the 'PATH' environment variable.
3300 (text-file* "profile.sh"
3301 "export PATH=" coreutils "/bin:"
3302 grep "/bin:" sed "/bin\n"))
3303@end example
3304
3305In this example, the resulting @file{/gnu/store/@dots{}-profile.sh} file
3306will references @var{coreutils}, @var{grep}, and @var{sed}, thereby
3307preventing them from being garbage-collected during its lifetime.
3308@end deffn
21b679f6
LC
3309
3310Of course, in addition to gexps embedded in ``host'' code, there are
3311also modules containing build tools. To make it clear that they are
3312meant to be used in the build stratum, these modules are kept in the
3313@code{(guix build @dots{})} name space.
3314
3315
568717fd
LC
3316@c *********************************************************************
3317@node Utilities
3318@chapter Utilities
3319
210cc920
LC
3320This section describes tools primarily targeted at developers and users
3321who write new package definitions. They complement the Scheme
3322programming interface of Guix in a convenient way.
3323
568717fd 3324@menu
37166310 3325* Invoking guix build:: Building packages from the command line.
39bee8a2 3326* Invoking guix edit:: Editing package definitions.
210cc920 3327* Invoking guix download:: Downloading a file and printing its hash.
37166310 3328* Invoking guix hash:: Computing the cryptographic hash of a file.
2f7d2d91 3329* Invoking guix import:: Importing package definitions.
37166310 3330* Invoking guix refresh:: Updating package definitions.
b4f5e0e8 3331* Invoking guix lint:: Finding errors in package definitions.
fcc58db6 3332* Invoking guix size:: Profiling disk usage.
372c4bbc 3333* Invoking guix environment:: Setting up development environments.
aff8ce7c 3334* Invoking guix publish:: Sharing substitutes.
568717fd
LC
3335@end menu
3336
e49951eb
MW
3337@node Invoking guix build
3338@section Invoking @command{guix build}
568717fd 3339
e49951eb 3340The @command{guix build} command builds packages or derivations and
6798a8e4
LC
3341their dependencies, and prints the resulting store paths. Note that it
3342does not modify the user's profile---this is the job of the
e49951eb 3343@command{guix package} command (@pxref{Invoking guix package}). Thus,
6798a8e4
LC
3344it is mainly useful for distribution developers.
3345
3346The general syntax is:
c78bd12b
LC
3347
3348@example
e49951eb 3349guix build @var{options} @var{package-or-derivation}@dots{}
c78bd12b
LC
3350@end example
3351
3352@var{package-or-derivation} may be either the name of a package found in
5401dd75
LC
3353the software distribution such as @code{coreutils} or
3354@code{coreutils-8.20}, or a derivation such as
834129e0 3355@file{/gnu/store/@dots{}-coreutils-8.19.drv}. In the former case, a
e7f34eb0
LC
3356package with the corresponding name (and optionally version) is searched
3357for among the GNU distribution modules (@pxref{Package Modules}).
3358
3359Alternatively, the @code{--expression} option may be used to specify a
3360Scheme expression that evaluates to a package; this is useful when
3361disambiguation among several same-named packages or package variants is
3362needed.
c78bd12b
LC
3363
3364The @var{options} may be zero or more of the following:
3365
3366@table @code
3367
3368@item --expression=@var{expr}
3369@itemx -e @var{expr}
ac5de156 3370Build the package or derivation @var{expr} evaluates to.
c78bd12b 3371
5401dd75 3372For example, @var{expr} may be @code{(@@ (gnu packages guile)
c78bd12b
LC
3373guile-1.8)}, which unambiguously designates this specific variant of
3374version 1.8 of Guile.
3375
56b82106
LC
3376Alternately, @var{expr} may be a G-expression, in which case it is used
3377as a build program passed to @code{gexp->derivation}
3378(@pxref{G-Expressions}).
3379
3380Lastly, @var{expr} may refer to a zero-argument monadic procedure
ac5de156
LC
3381(@pxref{The Store Monad}). The procedure must return a derivation as a
3382monadic value, which is then passed through @code{run-with-store}.
3383
c78bd12b
LC
3384@item --source
3385@itemx -S
3386Build the packages' source derivations, rather than the packages
3387themselves.
3388
e49951eb 3389For instance, @code{guix build -S gcc} returns something like
834129e0 3390@file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, which is GCC's source tarball.
c78bd12b 3391
f9cc8971
LC
3392The returned source tarball is the result of applying any patches and
3393code snippets specified in the package's @code{origin} (@pxref{Defining
3394Packages}).
3395
2cdfe13d
EB
3396@item --sources
3397Fetch and return the source of @var{package-or-derivation} and all their
3398dependencies, recursively. This is a handy way to obtain a local copy
3399of all the source code needed to build @var{packages}, allowing you to
3400eventually build them even without network access. It is an extension
3401of the @code{--source} option and can accept one of the following
3402optional argument values:
3403
3404@table @code
3405@item package
3406This value causes the @code{--sources} option to behave in the same way
3407as the @code{--source} option.
3408
3409@item all
3410Build all packages' source derivations, including any source that might
3411be listed as @code{inputs}. This is the default value.
3412
3413@example
3414$ guix build --sources tzdata
3415The following derivations will be built:
3416 /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
3417 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
3418@end example
3419
3420@item transitive
3421Build all packages' source derivations, as well as all source
3422derivations for packages' transitive inputs. This can be used e.g. to
3423prefetch package source for later offline building.
3424
3425@example
3426$ guix build --sources=transitive tzdata
3427The following derivations will be built:
3428 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
3429 /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
3430 /gnu/store/@dots{}-grep-2.21.tar.xz.drv
3431 /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
3432 /gnu/store/@dots{}-make-4.1.tar.xz.drv
3433 /gnu/store/@dots{}-bash-4.3.tar.xz.drv
3434@dots{}
3435@end example
3436
3437@end table
3438
c78bd12b
LC
3439@item --system=@var{system}
3440@itemx -s @var{system}
3441Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
3442the host's system type.
3443
3444An example use of this is on Linux-based systems, which can emulate
3445different personalities. For instance, passing
3446@code{--system=i686-linux} on an @code{x86_64-linux} system allows users
3447to build packages in a complete 32-bit environment.
3448
e55ec43d
LC
3449@item --target=@var{triplet}
3450@cindex cross-compilation
3451Cross-build for @var{triplet}, which must be a valid GNU triplet, such
3452as @code{"mips64el-linux-gnu"} (@pxref{Configuration Names, GNU
3453configuration triplets,, configure, GNU Configure and Build System}).
3454
7f3673f2
LC
3455@item --with-source=@var{source}
3456Use @var{source} as the source of the corresponding package.
3457@var{source} must be a file name or a URL, as for @command{guix
3458download} (@pxref{Invoking guix download}).
3459
3460The ``corresponding package'' is taken to be one specified on the
3461command line whose name matches the base of @var{source}---e.g., if
3462@var{source} is @code{/src/guile-2.0.10.tar.gz}, the corresponding
3463package is @code{guile}. Likewise, the version string is inferred from
3464@var{source}; in the previous example, it's @code{2.0.10}.
3465
3466This option allows users to try out versions of packages other than the
3467one provided by the distribution. The example below downloads
3468@file{ed-1.7.tar.gz} from a GNU mirror and uses that as the source for
3469the @code{ed} package:
3470
3471@example
3472guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
3473@end example
3474
3475As a developer, @code{--with-source} makes it easy to test release
3476candidates:
3477
3478@example
3479guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
3480@end example
3481
a43b55f1
LC
3482@dots{} or to build from a checkout in a pristine environment:
3483
3484@example
3485$ git clone git://git.sv.gnu.org/guix.git
3486$ guix build guix --with-source=./guix
3487@end example
3488
05962f29
LC
3489@item --no-grafts
3490Do not ``graft'' packages. In practice, this means that package updates
3491available as grafts are not applied. @xref{Security Updates}, for more
3492information on grafts.
7f3673f2 3493
c78bd12b
LC
3494@item --derivations
3495@itemx -d
3496Return the derivation paths, not the output paths, of the given
3497packages.
3498
70ee5642
LC
3499@item --root=@var{file}
3500@itemx -r @var{file}
3501Make @var{file} a symlink to the result, and register it as a garbage
3502collector root.
3503
3504@item --log-file
3505Return the build log file names for the given
3506@var{package-or-derivation}s, or raise an error if build logs are
3507missing.
3508
3509This works regardless of how packages or derivations are specified. For
3510instance, the following invocations are equivalent:
3511
3512@example
3513guix build --log-file `guix build -d guile`
3514guix build --log-file `guix build guile`
3515guix build --log-file guile
3516guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
3517@end example
3518
3519
3520@end table
3521
3522@cindex common build options
3523In addition, a number of options that control the build process are
3524common to @command{guix build} and other commands that can spawn builds,
3525such as @command{guix package} or @command{guix archive}. These are the
3526following:
3527
3528@table @code
3529
300868ba
LC
3530@item --load-path=@var{directory}
3531@itemx -L @var{directory}
3532Add @var{directory} to the front of the package module search path
3533(@pxref{Package Modules}).
3534
3535This allows users to define their own packages and make them visible to
3536the command-line tools.
3537
c78bd12b
LC
3538@item --keep-failed
3539@itemx -K
3540Keep the build tree of failed builds. Thus, if a build fail, its build
3541tree is kept under @file{/tmp}, in a directory whose name is shown at
3542the end of the build log. This is useful when debugging build issues.
3543
3544@item --dry-run
3545@itemx -n
3546Do not build the derivations.
3547
56b1f4b7
LC
3548@item --fallback
3549When substituting a pre-built binary fails, fall back to building
3550packages locally.
3551
c78bd12b 3552@item --no-substitutes
b5385b52 3553Do not use substitutes for build products. That is, always build things
c4202d60
LC
3554locally instead of allowing downloads of pre-built binaries
3555(@pxref{Substitutes}).
c78bd12b 3556
425b0bfc 3557@item --no-build-hook
4ec2e92d
LC
3558Do not attempt to offload builds @i{via} the daemon's ``build hook''
3559(@pxref{Daemon Offload Setup}). That is, always build things locally
3560instead of offloading builds to remote machines.
425b0bfc 3561
969e678e
LC
3562@item --max-silent-time=@var{seconds}
3563When the build or substitution process remains silent for more than
3564@var{seconds}, terminate it and report a build failure.
3565
002622b6
LC
3566@item --timeout=@var{seconds}
3567Likewise, when the build or substitution process lasts for more than
3568@var{seconds}, terminate it and report a build failure.
3569
3570By default there is no timeout. This behavior can be restored with
3571@code{--timeout=0}.
3572
07ab4bf1
LC
3573@item --verbosity=@var{level}
3574Use the given verbosity level. @var{level} must be an integer between 0
3575and 5; higher means more verbose output. Setting a level of 4 or more
3576may be helpful when debugging setup issues with the build daemon.
3577
70ee5642
LC
3578@item --cores=@var{n}
3579@itemx -c @var{n}
3580Allow the use of up to @var{n} CPU cores for the build. The special
3581value @code{0} means to use as many CPU cores as available.
bf421152 3582
f6526eb3
LC
3583@item --max-jobs=@var{n}
3584@itemx -M @var{n}
3585Allow at most @var{n} build jobs in parallel. @xref{Invoking
3586guix-daemon, @code{--max-jobs}}, for details about this option and the
3587equivalent @command{guix-daemon} option.
3588
c78bd12b
LC
3589@end table
3590
e49951eb 3591Behind the scenes, @command{guix build} is essentially an interface to
c78bd12b
LC
3592the @code{package-derivation} procedure of the @code{(guix packages)}
3593module, and to the @code{build-derivations} procedure of the @code{(guix
01d8ac64 3594derivations)} module.
c78bd12b 3595
16eb115e
DP
3596In addition to options explicitly passed on the command line,
3597@command{guix build} and other @command{guix} commands that support
3598building honor the @code{GUIX_BUILD_OPTIONS} environment variable.
3599
3600@defvr {Environment Variable} GUIX_BUILD_OPTIONS
3601Users can define this variable to a list of command line options that
3602will automatically be used by @command{guix build} and other
3603@command{guix} commands that can perform builds, as in the example
3604below:
3605
3606@example
3607$ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
3608@end example
3609
847391fe
DP
3610These options are parsed independently, and the result is appended to
3611the parsed command-line options.
16eb115e
DP
3612@end defvr
3613
3614
39bee8a2
LC
3615@node Invoking guix edit
3616@section Invoking @command{guix edit}
3617
3618@cindex package definition, editing
3619So many packages, so many source files! The @command{guix edit} command
3620facilitates the life of packagers by pointing their editor at the source
3621file containing the definition of the specified packages. For instance:
3622
3623@example
3624guix edit gcc-4.8 vim
3625@end example
3626
3627@noindent
3628launches the program specified in the @code{EDITOR} environment variable
3629to edit the recipe of GCC@tie{}4.8.4 and that of Vim.
3630
3631If you are using Emacs, note that the Emacs user interface provides
6248e326
AK
3632similar functionality in the ``package info'' and ``package list''
3633buffers created by @kbd{M-x guix-search-by-name} and similar commands
3634(@pxref{Emacs Commands}).
39bee8a2
LC
3635
3636
210cc920
LC
3637@node Invoking guix download
3638@section Invoking @command{guix download}
3639
3640When writing a package definition, developers typically need to download
3641the package's source tarball, compute its SHA256 hash, and write that
3642hash in the package definition (@pxref{Defining Packages}). The
3643@command{guix download} tool helps with this task: it downloads a file
3644from the given URI, adds it to the store, and prints both its file name
3645in the store and its SHA256 hash.
3646
3647The fact that the downloaded file is added to the store saves bandwidth:
3648when the developer eventually tries to build the newly defined package
3649with @command{guix build}, the source tarball will not have to be
3650downloaded again because it is already in the store. It is also a
3651convenient way to temporarily stash files, which may be deleted
3652eventually (@pxref{Invoking guix gc}).
3653
3654The @command{guix download} command supports the same URIs as used in
3655package definitions. In particular, it supports @code{mirror://} URIs.
3656@code{https} URIs (HTTP over TLS) are supported @emph{provided} the
3657Guile bindings for GnuTLS are available in the user's environment; when
537c8bb3
LC
3658they are not available, an error is raised. @xref{Guile Preparations,
3659how to install the GnuTLS bindings for Guile,, gnutls-guile,
3660GnuTLS-Guile}, for more information.
210cc920
LC
3661
3662The following option is available:
3663
3664@table @code
3665@item --format=@var{fmt}
3666@itemx -f @var{fmt}
3667Write the hash in the format specified by @var{fmt}. For more
081145cf 3668information on the valid values for @var{fmt}, @pxref{Invoking guix hash}.
210cc920
LC
3669@end table
3670
6c365eca
NK
3671@node Invoking guix hash
3672@section Invoking @command{guix hash}
3673
210cc920 3674The @command{guix hash} command computes the SHA256 hash of a file.
6c365eca
NK
3675It is primarily a convenience tool for anyone contributing to the
3676distribution: it computes the cryptographic hash of a file, which can be
3677used in the definition of a package (@pxref{Defining Packages}).
3678
3679The general syntax is:
3680
3681@example
3682guix hash @var{option} @var{file}
3683@end example
3684
3685@command{guix hash} has the following option:
3686
3687@table @code
3688
3689@item --format=@var{fmt}
3690@itemx -f @var{fmt}
210cc920 3691Write the hash in the format specified by @var{fmt}.
6c365eca
NK
3692
3693Supported formats: @code{nix-base32}, @code{base32}, @code{base16}
3694(@code{hex} and @code{hexadecimal} can be used as well).
3695
3696If the @option{--format} option is not specified, @command{guix hash}
3697will output the hash in @code{nix-base32}. This representation is used
3698in the definitions of packages.
3699
3140f2df
LC
3700@item --recursive
3701@itemx -r
3702Compute the hash on @var{file} recursively.
3703
3704In this case, the hash is computed on an archive containing @var{file},
3705including its children if it is a directory. Some of @var{file}'s
3706meta-data is part of the archive; for instance, when @var{file} is a
3707regular file, the hash is different depending on whether @var{file} is
3708executable or not. Meta-data such as time stamps has no impact on the
3709hash (@pxref{Invoking guix archive}).
3710@c FIXME: Replace xref above with xref to an ``Archive'' section when
3711@c it exists.
3712
6c365eca
NK
3713@end table
3714
2f7d2d91
LC
3715@node Invoking guix import
3716@section Invoking @command{guix import}
3717
3718@cindex importing packages
3719@cindex package import
3720@cindex package conversion
3721The @command{guix import} command is useful for people willing to add a
3722package to the distribution but who'd rather do as little work as
3723possible to get there---a legitimate demand. The command knows of a few
3724repositories from which it can ``import'' package meta-data. The result
3725is a package definition, or a template thereof, in the format we know
3726(@pxref{Defining Packages}).
3727
3728The general syntax is:
3729
3730@example
3731guix import @var{importer} @var{options}@dots{}
3732@end example
3733
3734@var{importer} specifies the source from which to import package
3735meta-data, and @var{options} specifies a package identifier and other
3736options specific to @var{importer}. Currently, the available
3737``importers'' are:
3738
3739@table @code
3740@item gnu
3741Import meta-data for the given GNU package. This provides a template
3742for the latest version of that GNU package, including the hash of its
3743source tarball, and its canonical synopsis and description.
3744
3745Additional information such as the package's dependencies and its
3746license needs to be figured out manually.
3747
3748For example, the following command returns a package definition for
3749GNU@tie{}Hello:
3750
3751@example
3752guix import gnu hello
3753@end example
3754
3755Specific command-line options are:
3756
3757@table @code
3758@item --key-download=@var{policy}
3759As for @code{guix refresh}, specify the policy to handle missing OpenPGP
3760keys when verifying the package's signature. @xref{Invoking guix
3761refresh, @code{--key-download}}.
3762@end table
3763
3764@item pypi
3765@cindex pypi
3766Import meta-data from the @uref{https://pypi.python.org/, Python Package
3767Index}@footnote{This functionality requires Guile-JSON to be installed.
3768@xref{Requirements}.}. Information is taken from the JSON-formatted
3769description available at @code{pypi.python.org} and usually includes all
3770the relevant information, including package dependencies.
3771
3772The command below imports meta-data for the @code{itsdangerous} Python
3773package:
3774
3775@example
3776guix import pypi itsdangerous
3777@end example
3778
d45dc6da
EB
3779@item cpan
3780@cindex CPAN
3781Import meta-data from @uref{https://www.metacpan.org/, MetaCPAN}.
3782Information is taken from the JSON-formatted meta-data provided through
3783@uref{https://api.metacpan.org/, MetaCPAN's API} and includes most
66392e47
EB
3784relevant information, such as module dependencies. License information
3785should be checked closely. If Perl is available in the store, then the
3786@code{corelist} utility will be used to filter core modules out of the
3787list of dependencies.
d45dc6da
EB
3788
3789The command command below imports meta-data for the @code{Acme::Boolean}
3790Perl module:
3791
3792@example
3793guix import cpan Acme::Boolean
3794@end example
3795
2f7d2d91
LC
3796@item nix
3797Import meta-data from a local copy of the source of the
3798@uref{http://nixos.org/nixpkgs/, Nixpkgs distribution}@footnote{This
3799relies on the @command{nix-instantiate} command of
3800@uref{http://nixos.org/nix/, Nix}.}. Package definitions in Nixpkgs are
3801typically written in a mixture of Nix-language and Bash code. This
3802command only imports the high-level package structure that is written in
3803the Nix language. It normally includes all the basic fields of a
3804package definition.
3805
3806When importing a GNU package, the synopsis and descriptions are replaced
3807by their canonical upstream variant.
3808
3809As an example, the command below imports the package definition of
3810LibreOffice (more precisely, it imports the definition of the package
3811bound to the @code{libreoffice} top-level attribute):
3812
3813@example
3814guix import nix ~/path/to/nixpkgs libreoffice
3815@end example
863af4e1
FB
3816
3817@item hackage
3818@cindex hackage
3819Import meta-data from Haskell community's central package archive
3820@uref{https://hackage.haskell.org/, Hackage}. Information is taken from
3821Cabal files and includes all the relevant information, including package
3822dependencies.
3823
3824Specific command-line options are:
3825
3826@table @code
a4154748
FB
3827@item --stdin
3828@itemx -s
3829Read a Cabal file from the standard input.
863af4e1
FB
3830@item --no-test-dependencies
3831@itemx -t
a4154748
FB
3832Do not include dependencies required by the test suites only.
3833@item --cabal-environment=@var{alist}
3834@itemx -e @var{alist}
3835@var{alist} is a Scheme alist defining the environment in which the
3836Cabal conditionals are evaluated. The accepted keys are: @code{os},
3837@code{arch}, @code{impl} and a string representing the name of a flag.
3838The value associated with a flag has to be either the symbol
3839@code{true} or @code{false}. The value associated with other keys
3840has to conform to the Cabal file format definition. The default value
3841associated with the keys @code{os}, @code{arch} and @code{impl} is
3842@samp{linux}, @samp{x86_64} and @samp{ghc} respectively.
863af4e1
FB
3843@end table
3844
3845The command below imports meta-data for the latest version of the
a4154748
FB
3846@code{HTTP} Haskell package without including test dependencies and
3847specifying the value of the flag @samp{network-uri} as @code{false}:
863af4e1
FB
3848
3849@example
a4154748 3850guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
863af4e1
FB
3851@end example
3852
3853A specific package version may optionally be specified by following the
3854package name by a hyphen and a version number as in the following example:
3855
3856@example
3857guix import hackage mtl-2.1.3.1
3858@end example
2f7d2d91
LC
3859@end table
3860
3861The structure of the @command{guix import} code is modular. It would be
3862useful to have more importers for other package formats, and your help
3863is welcome here (@pxref{Contributing}).
3864
37166310
LC
3865@node Invoking guix refresh
3866@section Invoking @command{guix refresh}
3867
3868The primary audience of the @command{guix refresh} command is developers
3869of the GNU software distribution. By default, it reports any packages
3870provided by the distribution that are outdated compared to the latest
3871upstream version, like this:
3872
3873@example
3874$ guix refresh
3875gnu/packages/gettext.scm:29:13: gettext would be upgraded from 0.18.1.1 to 0.18.2.1
3876gnu/packages/glib.scm:77:12: glib would be upgraded from 2.34.3 to 2.37.0
3877@end example
3878
3879It does so by browsing each package's FTP directory and determining the
3880highest version number of the source tarballs
3881therein@footnote{Currently, this only works for GNU packages.}.
3882
3883When passed @code{--update}, it modifies distribution source files to
3884update the version numbers and source tarball hashes of those packages'
3885recipes (@pxref{Defining Packages}). This is achieved by downloading
3886each package's latest source tarball and its associated OpenPGP
3887signature, authenticating the downloaded tarball against its signature
3888using @command{gpg}, and finally computing its hash. When the public
3889key used to sign the tarball is missing from the user's keyring, an
3890attempt is made to automatically retrieve it from a public key server;
3891when it's successful, the key is added to the user's keyring; otherwise,
3892@command{guix refresh} reports an error.
3893
3894The following options are supported:
3895
3896@table @code
3897
3898@item --update
3899@itemx -u
3900Update distribution source files (package recipes) in place.
081145cf 3901@xref{Defining Packages}, for more information on package definitions.
37166310
LC
3902
3903@item --select=[@var{subset}]
3904@itemx -s @var{subset}
3905Select all the packages in @var{subset}, one of @code{core} or
3906@code{non-core}.
3907
3908The @code{core} subset refers to all the packages at the core of the
3909distribution---i.e., packages that are used to build ``everything
3910else''. This includes GCC, libc, Binutils, Bash, etc. Usually,
3911changing one of these packages in the distribution entails a rebuild of
3912all the others. Thus, such updates are an inconvenience to users in
3913terms of build time or bandwidth used to achieve the upgrade.
3914
3915The @code{non-core} subset refers to the remaining packages. It is
3916typically useful in cases where an update of the core packages would be
3917inconvenient.
3918
3919@end table
3920
3921In addition, @command{guix refresh} can be passed one or more package
3922names, as in this example:
3923
3924@example
4b9b3cbb 3925guix refresh -u emacs idutils gcc-4.8.4
37166310
LC
3926@end example
3927
3928@noindent
3929The command above specifically updates the @code{emacs} and
3930@code{idutils} packages. The @code{--select} option would have no
3931effect in this case.
3932
7d193ec3
EB
3933When considering whether to upgrade a package, it is sometimes
3934convenient to know which packages would be affected by the upgrade and
3935should be checked for compatibility. For this the following option may
3936be used when passing @command{guix refresh} one or more package names:
3937
3938@table @code
3939
3940@item --list-dependent
3941@itemx -l
3942List top-level dependent packages that would need to be rebuilt as a
3943result of upgrading one or more packages.
3944
3945@end table
3946
3947Be aware that the @code{--list-dependent} option only
3948@emph{approximates} the rebuilds that would be required as a result of
3949an upgrade. More rebuilds might be required under some circumstances.
3950
3951@example
7779ab61
LC
3952$ guix refresh --list-dependent flex
3953Building the following 120 packages would ensure 213 dependent packages are rebuilt:
3954hop-2.4.0 geiser-0.4 notmuch-0.18 mu-0.9.9.5 cflow-1.4 idutils-4.6 @dots{}
7d193ec3
EB
3955@end example
3956
3957The command above lists a set of packages that could be built to check
3958for compatibility with an upgraded @code{flex} package.
3959
f9230085
LC
3960The following options can be used to customize GnuPG operation:
3961
3962@table @code
3963
f9230085
LC
3964@item --gpg=@var{command}
3965Use @var{command} as the GnuPG 2.x command. @var{command} is searched
3966for in @code{$PATH}.
3967
2bc53ba9
LC
3968@item --key-download=@var{policy}
3969Handle missing OpenPGP keys according to @var{policy}, which may be one
3970of:
3971
3972@table @code
3973@item always
3974Always download missing OpenPGP keys from the key server, and add them
3975to the user's GnuPG keyring.
3976
3977@item never
3978Never try to download missing OpenPGP keys. Instead just bail out.
3979
3980@item interactive
3981When a package signed with an unknown OpenPGP key is encountered, ask
3982the user whether to download it or not. This is the default behavior.
3983@end table
3984
3985@item --key-server=@var{host}
3986Use @var{host} as the OpenPGP key server when importing a public key.
3987
f9230085
LC
3988@end table
3989
b4f5e0e8
CR
3990@node Invoking guix lint
3991@section Invoking @command{guix lint}
3992The @command{guix lint} is meant to help package developers avoid common
873c4085
LC
3993errors and use a consistent style. It runs a number of checks on a
3994given set of packages in order to find common mistakes in their
3995definitions. Available @dfn{checkers} include (see
3996@code{--list-checkers} for a complete list):
3997
3998@table @code
3999@item synopsis
4000@itemx description
4001Validate certain typographical and stylistic rules about package
4002descriptions and synopses.
4003
4004@item inputs-should-be-native
4005Identify inputs that should most likely be native inputs.
4006
4007@item source
4008@itemx home-page
4009Probe @code{home-page} and @code{source} URLs and report those that are
4010invalid.
4011@end table
b4f5e0e8
CR
4012
4013The general syntax is:
4014
4015@example
4016guix lint @var{options} @var{package}@dots{}
4017@end example
4018
4019If no package is given on the command line, then all packages are checked.
4020The @var{options} may be zero or more of the following:
4021
4022@table @code
4023
dd7c013d
CR
4024@item --checkers
4025@itemx -c
4026Only enable the checkers specified in a comma-separated list using the
4027names returned by @code{--list-checkers}.
4028
b4f5e0e8
CR
4029@item --list-checkers
4030@itemx -l
4031List and describe all the available checkers that will be run on packages
4032and exit.
4033
4034@end table
37166310 4035
fcc58db6
LC
4036@node Invoking guix size
4037@section Invoking @command{guix size}
4038
4039The @command{guix size} command helps package developers profile the
4040disk usage of packages. It is easy to overlook the impact of an
4041additional dependency added to a package, or the impact of using a
4042single output for a package that could easily be split (@pxref{Packages
4043with Multiple Outputs}). These are the typical issues that
4044@command{guix size} can highlight.
4045
4046The command can be passed a package specification such as @code{gcc-4.8}
4047or @code{guile:debug}, or a file name in the store. Consider this
4048example:
4049
4050@example
4051$ guix size coreutils
4052store item total self
4053/gnu/store/@dots{}-coreutils-8.23 70.0 13.9 19.8%
4054/gnu/store/@dots{}-gmp-6.0.0a 55.3 2.5 3.6%
4055/gnu/store/@dots{}-acl-2.2.52 53.7 0.5 0.7%
4056/gnu/store/@dots{}-attr-2.4.46 53.2 0.3 0.5%
4057/gnu/store/@dots{}-gcc-4.8.4-lib 52.9 15.7 22.4%
4058/gnu/store/@dots{}-glibc-2.21 37.2 37.2 53.1%
4059@end example
4060
4061@cindex closure
4062The store items listed here constitute the @dfn{transitive closure} of
4063Coreutils---i.e., Coreutils and all its dependencies, recursively---as
4064would be returned by:
4065
4066@example
4067$ guix gc -R /gnu/store/@dots{}-coreutils-8.23
4068@end example
4069
4070Here the output shows 3 columns next to store items. The first column,
4071labeled ``total'', shows the size in mebibytes (MiB) of the closure of
4072the store item---that is, its own size plus the size of all its
4073dependencies. The next column, labeled ``self'', shows the size of the
4074item itself. The last column shows the ratio of the item's size to the
4075space occupied by all the items listed here.
4076
4077In this example, we see that the closure of Coreutils weighs in at
407870@tie{}MiB, half of which is taken by libc. (That libc represents a
4079large fraction of the closure is not a problem @i{per se} because it is
4080always available on the system anyway.)
4081
4082When the package passed to @command{guix size} is available in the
4083store, @command{guix size} queries the daemon to determine its
4084dependencies, and measures its size in the store, similar to @command{du
4085-ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
4086Coreutils}).
4087
4088When the given package is @emph{not} in the store, @command{guix size}
4089reports information based on information about the available substitutes
4090(@pxref{Substitutes}). This allows it to profile disk usage of store
4091items that are not even on disk, only available remotely.
4092
a8f996c6 4093The available options are:
fcc58db6
LC
4094
4095@table @option
4096
a8f996c6
LC
4097@item --map-file=@var{file}
4098Write to @var{file} a graphical map of disk usage as a PNG file.
4099
4100For the example above, the map looks like this:
4101
4102@image{images/coreutils-size-map,5in,, map of Coreutils disk usage
4103produced by @command{guix size}}
4104
4105This option requires that
4106@uref{http://wingolog.org/software/guile-charting/, Guile-Charting} be
4107installed and visible in Guile's module search path. When that is not
4108the case, @command{guix size} fails as it tries to load it.
4109
fcc58db6
LC
4110@item --system=@var{system}
4111@itemx -s @var{system}
4112Consider packages for @var{system}---e.g., @code{x86_64-linux}.
4113
4114@end table
4115
372c4bbc
DT
4116@node Invoking guix environment
4117@section Invoking @command{guix environment}
4118
f5fd4fd2 4119@cindex reproducible build environments
fe36d84e 4120@cindex development environments
372c4bbc
DT
4121The purpose of @command{guix environment} is to assist hackers in
4122creating reproducible development environments without polluting their
4123package profile. The @command{guix environment} tool takes one or more
4124packages, builds all of the necessary inputs, and creates a shell
4125environment to use them.
4126
4127The general syntax is:
4128
4129@example
4130guix environment @var{options} @var{package}@dots{}
4131@end example
4132
fe36d84e
LC
4133The following example spawns a new shell set up for the development of
4134GNU@tie{}Guile:
372c4bbc
DT
4135
4136@example
4137guix environment guile
4138@end example
4139
4140If the specified packages are not built yet, @command{guix environment}
4141automatically builds them. The new shell's environment is an augmented
4142version of the environment that @command{guix environment} was run in.
4143It contains the necessary search paths for building the given package
4144added to the existing environment variables. To create a ``pure''
4145environment in which the original environment variables have been unset,
50500f7c
LC
4146use the @code{--pure} option@footnote{Users sometimes wrongfully augment
4147environment variables such as @code{PATH} in their @file{~/.bashrc}
4148file. As a consequence, when @code{guix environment} launches it, Bash
4149may read @file{~/.bashrc}, thereby introducing ``impurities'' in these
4150environment variables. It is an error to define such environment
4151variables in @file{.bashrc}; instead, they should be defined in
4152@file{.bash_profile}, which is sourced only by log-in shells.
4153@xref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}, for
4154details on Bash start-up files.}.
372c4bbc 4155
28de8d25
LC
4156@vindex GUIX_ENVIRONMENT
4157@command{guix environment} defines the @code{GUIX_ENVIRONMENT}
4158variable in the shell it spaws. This allows users to, say, define a
4159specific prompt for development environments in their @file{.bashrc}
4160(@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}):
4161
4162@example
4163if [ -n "$GUIX_ENVIRONMENT" ]
4164then
4165 export PS1="\u@@\h \w [dev]\$ "
4166fi
4167@end example
4168
372c4bbc
DT
4169Additionally, more than one package may be specified, in which case the
4170union of the inputs for the given packages are used. For example, the
4171command below spawns a shell where all of the dependencies of both Guile
4172and Emacs are available:
4173
4174@example
4175guix environment guile emacs
4176@end example
4177
4178Sometimes an interactive shell session is not desired. The
4179@code{--exec} option can be used to specify the command to run instead.
4180
4181@example
4182guix environment guile --exec=make
4183@end example
4184
fe36d84e
LC
4185In other situations, it is more convenient to specify the list of
4186packages needed in the environment. For example, the following command
4187runs @command{python} from an environment containing Python@tie{}2.7 and
4188NumPy:
4189
4190@example
4191guix environment --ad-hoc python2-numpy python-2.7 -E python
4192@end example
4193
4194The available options are summarized below.
372c4bbc
DT
4195
4196@table @code
4197@item --expression=@var{expr}
4198@itemx -e @var{expr}
4199Create an environment for the package that @var{expr} evaluates to.
4200
fe36d84e
LC
4201For example, running:
4202
4203@example
4204guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
4205@end example
4206
4207starts a shell with the environment for this specific variant of the
4208PETSc package.
4209
372c4bbc
DT
4210@item --load=@var{file}
4211@itemx -l @var{file}
4212Create an environment for the package that the code within @var{file}
4213evaluates to.
4214
fe36d84e
LC
4215As an example, @var{file} might contain a definition like this
4216(@pxref{Defining Packages}):
4217
4218@example
4219@verbatiminclude environment-gdb.scm
4220@end example
4221
4222
372c4bbc
DT
4223@item --exec=@var{command}
4224@item -E @var{command}
4225Execute @var{command} in the new environment.
4226
a54bd6d7
DT
4227@item --ad-hoc
4228Include all specified packages in the resulting environment, as if an
4229@i{ad hoc} package were defined with them as inputs. This option is
4230useful for quickly creating an environment without having to write a
4231package expression to contain the desired inputs.
4232
4233For instance, the command:
4234
4235@example
4236guix environment --ad-hoc guile guile-sdl -E guile
4237@end example
4238
4239runs @command{guile} in an environment where Guile and Guile-SDL are
4240available.
4241
417c39f1
LC
4242Note that this example implicitly asks for the default output of
4243@code{guile} and @code{guile-sdl} but it is possible to ask for a
4244specific output---e.g., @code{glib:bin} asks for the @code{bin} output
4245of @code{glib} (@pxref{Packages with Multiple Outputs}).
4246
372c4bbc
DT
4247@item --pure
4248Unset existing environment variables when building the new environment.
4249This has the effect of creating an environment in which search paths
4250only contain package inputs.
4251
4252@item --search-paths
4253Display the environment variable definitions that make up the
4254environment.
ce367ef3
LC
4255
4256@item --system=@var{system}
4257@itemx -s @var{system}
4258Attempt to build for @var{system}---e.g., @code{i686-linux}.
372c4bbc
DT
4259@end table
4260
4261It also supports all of the common build options that @command{guix
4262build} supports (@pxref{Invoking guix build, common build options}).
4263
aff8ce7c
DT
4264@node Invoking guix publish
4265@section Invoking @command{guix publish}
4266
4267The purpose of @command{guix publish} is to enable users to easily share
8ce229fc
LC
4268their store with others, which can then use it as a substitute server
4269(@pxref{Substitutes}).
4270
4271When @command{guix publish} runs, it spawns an HTTP server which allows
4272anyone with network access to obtain substitutes from it. This means
4273that any machine running Guix can also act as if it were a build farm,
4274since the HTTP interface is compatible with Hydra, the software behind
4275the @code{hydra.gnu.org} build farm.
aff8ce7c
DT
4276
4277For security, each substitute is signed, allowing recipients to check
4278their authenticity and integrity (@pxref{Substitutes}). Because
4279@command{guix publish} uses the system's signing key, which is only
5463fe51
LC
4280readable by the system administrator, it must be started as root; the
4281@code{--user} option makes it drop root privileges early on.
aff8ce7c
DT
4282
4283The general syntax is:
4284
4285@example
4286guix publish @var{options}@dots{}
4287@end example
4288
4289Running @command{guix publish} without any additional arguments will
4290spawn an HTTP server on port 8080:
4291
4292@example
4293guix publish
4294@end example
4295
4296Once a publishing server has been authorized (@pxref{Invoking guix
4297archive}), the daemon may download substitutes from it:
4298
4299@example
4300guix-daemon --substitute-urls=http://example.org:8080
4301@end example
4302
4303The following options are available:
4304
4305@table @code
4306@item --port=@var{port}
4307@itemx -p @var{port}
4308Listen for HTTP requests on @var{port}.
4309
9e2292ef
LC
4310@item --listen=@var{host}
4311Listen on the network interface for @var{host}. The default is to
4312accept connections from any interface.
4313
5463fe51
LC
4314@item --user=@var{user}
4315@itemx -u @var{user}
4316Change privileges to @var{user} as soon as possible---i.e., once the
4317server socket is open and the signing key has been read.
4318
aff8ce7c
DT
4319@item --repl[=@var{port}]
4320@itemx -r [@var{port}]
4321Spawn a Guile REPL server (@pxref{REPL Servers,,, guile, GNU Guile
8ce229fc
LC
4322Reference Manual}) on @var{port} (37146 by default). This is used
4323primarily for debugging a running @command{guix publish} server.
aff8ce7c
DT
4324@end table
4325
a1ba8475
LC
4326@c *********************************************************************
4327@node GNU Distribution
4328@chapter GNU Distribution
4329
3ca2731c 4330@cindex Guix System Distribution
4705641f 4331@cindex GuixSD
3ca2731c
LC
4332Guix comes with a distribution of the GNU system consisting entirely of
4333free software@footnote{The term ``free'' here refers to the
a1ba8475 4334@url{http://www.gnu.org/philosophy/free-sw.html,freedom provided to
3ca2731c 4335users of that software}.}. The
35ed9306
LC
4336distribution can be installed on its own (@pxref{System Installation}),
4337but it is also possible to install Guix as a package manager on top of
4338an installed GNU/Linux system (@pxref{Installation}). To distinguish
3ca2731c 4339between the two, we refer to the standalone distribution as the Guix
4705641f 4340System Distribution, or GuixSD.
35ed9306
LC
4341
4342The distribution provides core GNU packages such as GNU libc, GCC, and
4343Binutils, as well as many GNU and non-GNU applications. The complete
4344list of available packages can be browsed
d03bb653
LC
4345@url{http://www.gnu.org/software/guix/package-list.html,on-line} or by
4346running @command{guix package} (@pxref{Invoking guix package}):
a1ba8475
LC
4347
4348@example
e49951eb 4349guix package --list-available
a1ba8475
LC
4350@end example
4351
35ed9306 4352Our goal has been to provide a practical 100% free software distribution of
401c53c4
LC
4353Linux-based and other variants of GNU, with a focus on the promotion and
4354tight integration of GNU components, and an emphasis on programs and
4355tools that help users exert that freedom.
4356
3ca2731c 4357Packages are currently available on the following platforms:
c320011d
LC
4358
4359@table @code
4360
4361@item x86_64-linux
4362Intel/AMD @code{x86_64} architecture, Linux-Libre kernel;
4363
4364@item i686-linux
4365Intel 32-bit architecture (IA32), Linux-Libre kernel;
4366
aa1e1947
MW
4367@item armhf-linux
4368ARMv7-A architecture with hard float, Thumb-2 and VFP3D16 coprocessor,
4369using the EABI hard-float ABI, and Linux-Libre kernel.
4370
c320011d
LC
4371@item mips64el-linux
4372little-endian 64-bit MIPS processors, specifically the Loongson series,
4373n32 application binary interface (ABI), and Linux-Libre kernel.
4374
4375@end table
4376
4705641f 4377GuixSD itself is currently only available on @code{i686} and @code{x86_64}.
3ca2731c 4378
c320011d
LC
4379@noindent
4380For information on porting to other architectures or kernels,
4381@xref{Porting}.
4382
401c53c4 4383@menu
5af6de3e 4384* System Installation:: Installing the whole operating system.
35ed9306 4385* System Configuration:: Configuring the operating system.
91ef73d4 4386* Installing Debugging Files:: Feeding the debugger.
05962f29 4387* Security Updates:: Deploying security fixes quickly.
401c53c4 4388* Package Modules:: Packages from the programmer's viewpoint.
da7cabd4 4389* Packaging Guidelines:: Growing the distribution.
401c53c4 4390* Bootstrapping:: GNU/Linux built from scratch.
8b315a6d 4391* Porting:: Targeting another platform or kernel.
401c53c4
LC
4392@end menu
4393
4394Building this distribution is a cooperative effort, and you are invited
081145cf 4395to join! @xref{Contributing}, for information about how you can help.
401c53c4 4396
5af6de3e
LC
4397@node System Installation
4398@section System Installation
4399
3ca2731c
LC
4400@cindex Guix System Distribution
4401This section explains how to install the Guix System Distribution
4402on a machine. The Guix package manager can
35ed9306
LC
4403also be installed on top of a running GNU/Linux system,
4404@pxref{Installation}.
5af6de3e
LC
4405
4406@ifinfo
4407@c This paragraph is for people reading this from tty2 of the
4408@c installation image.
4409You're reading this documentation with an Info reader. For details on
4410how to use it, hit the @key{RET} key (``return'' or ``enter'') on the
6621cdb6 4411link that follows: @pxref{Help,,, info, Info: An Introduction}. Hit
5af6de3e
LC
4412@kbd{l} afterwards to come back here.
4413@end ifinfo
4414
8aaaae38
LC
4415@subsection Limitations
4416
4705641f 4417As of version @value{VERSION}, the Guix System Distribution (GuixSD) is
3ca2731c 4418not production-ready. It may contain bugs and lack important
8aaaae38
LC
4419features. Thus, if you are looking for a stable production system that
4420respects your freedom as a computer user, a good solution at this point
4421is to consider @url{http://www.gnu.org/distros/free-distros.html, one of
4422more established GNU/Linux distributions}. We hope you can soon switch
4705641f 4423to the GuixSD without fear, of course. In the meantime, you can
8aaaae38
LC
4424also keep using your distribution and try out the package manager on top
4425of it (@pxref{Installation}).
4426
4427Before you proceed with the installation, be aware of the following
4428noteworthy limitations applicable to version @value{VERSION}:
4429
4430@itemize
4431@item
4432The installation process does not include a graphical user interface and
4433requires familiarity with GNU/Linux (see the following subsections to
4434get a feel of what that means.)
4435
4436@item
b1e95eca
LC
4437The system does not yet provide GNOME and KDE; it provides Xfce, though,
4438if graphical desktop environments are your thing.
8aaaae38
LC
4439
4440@item
dbcb0ab1 4441Support for the Logical Volume Manager (LVM) is missing.
8aaaae38
LC
4442
4443@item
4444Few system services are currently supported out-of-the-box
4445(@pxref{Services}).
4446
4447@item
49607566 4448On the order of 1,900 packages are available, which means that you may
8aaaae38
LC
4449occasionally find that a useful package is missing.
4450@end itemize
4451
4452You've been warned. But more than a disclaimer, this is an invitation
4453to report issues (and success stories!), and join us in improving it.
4454@xref{Contributing}, for more info.
5af6de3e
LC
4455
4456@subsection USB Stick Installation
4457
4458An installation image for USB sticks can be downloaded from
4705641f 4459@indicateurl{ftp://alpha.gnu.org/gnu/guix/guixsd-usb-install-@value{VERSION}.@var{system}.xz},
5af6de3e
LC
4460where @var{system} is one of:
4461
4462@table @code
4463@item x86_64-linux
4464for a GNU/Linux system on Intel/AMD-compatible 64-bit CPUs;
4465
4466@item i686-linux
4467for a 32-bit GNU/Linux system on Intel-compatible CPUs.
4468@end table
4469
4470This image contains a single partition with the tools necessary for an
4471installation. It is meant to be copied @emph{as is} to a large-enough
4472USB stick.
4473
4474To copy the image to a USB stick, follow these steps:
4475
4476@enumerate
4477@item
4478Decompress the image using the @command{xz} command:
4479
4480@example
4705641f 4481xz -d guixsd-usb-install-@value{VERSION}.@var{system}.xz
5af6de3e
LC
4482@end example
4483
4484@item
4485Insert a USB stick of 1@tie{}GiB or more in your machine, and determine
4486its device name. Assuming that USB stick is known as @file{/dev/sdX},
4487copy the image with:
4488
4489@example
4705641f 4490dd if=guixsd-usb-install-@value{VERSION}.x86_64 of=/dev/sdX
5af6de3e
LC
4491@end example
4492
4493Access to @file{/dev/sdX} usually requires root privileges.
4494@end enumerate
4495
4496Once this is done, you should be able to reboot the system and boot from
4497the USB stick. The latter usually requires you to get in the BIOS' boot
4498menu, where you can choose to boot from the USB stick.
4499
4500@subsection Preparing for Installation
4501
4502Once you have successfully booted the image on the USB stick, you should
4503end up with a root prompt. Several console TTYs are configured and can
4504be used to run commands as root. TTY2 shows this documentation,
4505browsable using the Info reader commands (@pxref{Help,,, info, Info: An
4506Introduction}).
4507
4508To install the system, you would:
4509
4510@enumerate
4511
4512@item
152dd61c
LC
4513Configure the network, by running @command{ifconfig eno1 up && dhclient
4514eno1} (to get an automatically assigned IP address from the wired
4515network interface controller@footnote{
95c559c1
LC
4516@c http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
4517The name @code{eno1} is for the first on-board Ethernet controller. The
4518interface name for an Ethernet controller that is in the first slot of
4519the first PCI bus, for instance, would be @code{enp1s0}. Use
4520@command{ifconfig -a} to list all the available network interfaces.}),
4521or using the @command{ifconfig} command.
5af6de3e
LC
4522
4523The system automatically loads drivers for your network interface
4524controllers.
4525
4526Setting up network access is almost always a requirement because the
4527image does not contain all the software and tools that may be needed.
4528
4529@item
4530Unless this has already been done, you must partition and format the
4531target partitions.
4532
7ab44369
LC
4533Preferably, assign partitions a label so that you can easily and
4534reliably refer to them in @code{file-system} declarations (@pxref{File
4535Systems}). This is typically done using the @code{-L} option of
4536@command{mkfs.ext4} and related commands.
4537
5af6de3e 4538The installation image includes Parted (@pxref{Overview,,, parted, GNU
b419c7f5
LC
4539Parted User Manual}), @command{fdisk}, Cryptsetup/LUKS for disk
4540encryption, and e2fsprogs, the suite of tools to manipulate
4541ext2/ext3/ext4 file systems.
5af6de3e 4542
83a17b62
LC
4543@item
4544Once that is done, mount the target root partition under @file{/mnt}.
4545
4546@item
4547Lastly, run @code{deco start cow-store /mnt}.
4548
4549This will make @file{/gnu/store} copy-on-write, such that packages added
4550to it during the installation phase will be written to the target disk
4551rather than kept in memory.
4552
5af6de3e
LC
4553@end enumerate
4554
5af6de3e
LC
4555
4556@subsection Proceeding with the Installation
4557
4558With the target partitions ready, you now have to edit a file and
4559provide the declaration of the operating system to be installed. To
4560that end, the installation system comes with two text editors: GNU nano
4561(@pxref{Top,,, nano, GNU nano Manual}), and GNU Zile, an Emacs clone.
4562It is better to store that file on the target root file system, say, as
4563@file{/mnt/etc/config.scm}.
4564
dd51caac
LC
4565@xref{Using the Configuration System}, for examples of operating system
4566configurations. These examples are available under
4567@file{/etc/configuration} in the installation image, so you can copy
4568them and use them as a starting point for your own configuration.
5af6de3e 4569
dd51caac
LC
4570Once you are done preparing the configuration file, the new system must
4571be initialized (remember that the target root file system is mounted
4572under @file{/mnt}):
5af6de3e
LC
4573
4574@example
4575guix system init /mnt/etc/config.scm /mnt
4576@end example
4577
4578@noindent
4579This will copy all the necessary files, and install GRUB on
4580@file{/dev/sdX}, unless you pass the @option{--no-grub} option. For
6621cdb6 4581more information, @pxref{Invoking guix system}. This command may trigger
5af6de3e
LC
4582downloads or builds of missing packages, which can take some time.
4583
4584Once that command has completed---and hopefully succeeded!---you can
ad14d9e7 4585run @command{reboot} and boot into the new system. Cross fingers, and
5af6de3e
LC
4586join us on @code{#guix} on the Freenode IRC network or on
4587@file{guix-devel@@gnu.org} to share your experience---good or not so
4588good.
4589
4590@subsection Building the Installation Image
4591
4592The installation image described above was built using the @command{guix
4593system} command, specifically:
4594
4595@example
8a225c66 4596guix system disk-image --image-size=850MiB gnu/system/install.scm
5af6de3e
LC
4597@end example
4598
4599@xref{Invoking guix system}, for more information. See
4600@file{gnu/system/install.scm} in the source tree for more information
4601about the installation image.
4602
cf4a9129
LC
4603@node System Configuration
4604@section System Configuration
b208a005 4605
cf4a9129 4606@cindex system configuration
3ca2731c 4607The Guix System Distribution supports a consistent whole-system configuration
cf4a9129
LC
4608mechanism. By that we mean that all aspects of the global system
4609configuration---such as the available system services, timezone and
4610locale settings, user accounts---are declared in a single place. Such
4611a @dfn{system configuration} can be @dfn{instantiated}---i.e., effected.
91ef73d4 4612
cf4a9129
LC
4613One of the advantages of putting all the system configuration under the
4614control of Guix is that it supports transactional system upgrades, and
4615makes it possible to roll-back to a previous system instantiation,
4616should something go wrong with the new one (@pxref{Features}). Another
4617one is that it makes it easy to replicate the exact same configuration
4618across different machines, or at different points in time, without
4619having to resort to additional administration tools layered on top of
4620the system's own tools.
4621@c Yes, we're talking of Puppet, Chef, & co. here. ↑
91ef73d4 4622
cf4a9129
LC
4623This section describes this mechanism. First we focus on the system
4624administrator's viewpoint---explaining how the system is configured and
4625instantiated. Then we show how this mechanism can be extended, for
4626instance to support new system services.
91ef73d4 4627
cf4a9129
LC
4628@menu
4629* Using the Configuration System:: Customizing your GNU system.
7313a52e 4630* operating-system Reference:: Detail of operating-system declarations.
cf4a9129 4631* File Systems:: Configuring file system mounts.
510f9d86 4632* Mapped Devices:: Block device extra processing.
cf4a9129 4633* User Accounts:: Specifying user accounts.
598e19dc 4634* Locales:: Language and cultural convention settings.
cf4a9129 4635* Services:: Specifying system services.
0ae8c15a 4636* Setuid Programs:: Programs running with root privileges.
efb5e833 4637* X.509 Certificates:: Authenticating HTTPS servers.
996ed739 4638* Name Service Switch:: Configuring libc's name service switch.
fd1b1fa2 4639* Initial RAM Disk:: Linux-Libre bootstrapping.
88faf933 4640* GRUB Configuration:: Configuring the boot loader.
cf4a9129
LC
4641* Invoking guix system:: Instantiating a system configuration.
4642* Defining Services:: Adding new service definitions.
4643@end menu
91ef73d4 4644
cf4a9129
LC
4645@node Using the Configuration System
4646@subsection Using the Configuration System
64d76fa6 4647
cf4a9129
LC
4648The operating system is configured by providing an
4649@code{operating-system} declaration in a file that can then be passed to
4650the @command{guix system} command (@pxref{Invoking guix system}). A
4651simple setup, with the default system services, the default Linux-Libre
4652kernel, initial RAM disk, and boot loader looks like this:
91ef73d4 4653
cf4a9129
LC
4654@findex operating-system
4655@lisp
dd51caac 4656@include os-config-bare-bones.texi
cf4a9129 4657@end lisp
401c53c4 4658
cf4a9129
LC
4659This example should be self-describing. Some of the fields defined
4660above, such as @code{host-name} and @code{bootloader}, are mandatory.
4661Others, such as @code{packages} and @code{services}, can be omitted, in
4662which case they get a default value.
e7f34eb0 4663
cf4a9129
LC
4664@vindex %base-packages
4665The @code{packages} field lists
4666packages that will be globally visible on the system, for all user
4667accounts---i.e., in every user's @code{PATH} environment variable---in
4668addition to the per-user profiles (@pxref{Invoking guix package}). The
4669@var{%base-packages} variable provides all the tools one would expect
4670for basic user and administrator tasks---including the GNU Core
4671Utilities, the GNU Networking Utilities, the GNU Zile lightweight text
4672editor, @command{find}, @command{grep}, etc. The example above adds
4673Emacs to those, taken from the @code{(gnu packages emacs)} module
4674(@pxref{Package Modules}).
e7f34eb0 4675
cf4a9129
LC
4676@vindex %base-services
4677The @code{services} field lists @dfn{system services} to be made
4678available when the system starts (@pxref{Services}).
4679The @code{operating-system} declaration above specifies that, in
4680addition to the basic services, we want the @command{lshd} secure shell
4681daemon listening on port 2222, and allowing remote @code{root} logins
4682(@pxref{Invoking lshd,,, lsh, GNU lsh Manual}). Under the hood,
4683@code{lsh-service} arranges so that @code{lshd} is started with the
4684right command-line options, possibly with supporting configuration files
7313a52e
LC
4685generated as needed (@pxref{Defining Services}). @xref{operating-system
4686Reference}, for details about the available @code{operating-system}
4687fields.
a1ba8475 4688
dd51caac
LC
4689The configuration for a typical ``desktop'' usage, with the X11 display
4690server, a desktop environment, network management, an SSH server, and
4691more, would look like this:
4692
4693@lisp
4694@include os-config-desktop.texi
4695@end lisp
4696
4697@xref{Desktop Services}, for the exact list of services provided by
efb5e833
LC
4698@var{%desktop-services}. @xref{X.509 Certificates}, for background
4699information about the @code{nss-certs} package that is used here.
dd51caac 4700
cf4a9129
LC
4701Assuming the above snippet is stored in the @file{my-system-config.scm}
4702file, the @command{guix system reconfigure my-system-config.scm} command
4703instantiates that configuration, and makes it the default GRUB boot
4704entry (@pxref{Invoking guix system}). The normal way to change the
4705system's configuration is by updating this file and re-running the
4706@command{guix system} command.
b81e1947 4707
cf4a9129
LC
4708At the Scheme level, the bulk of an @code{operating-system} declaration
4709is instantiated with the following monadic procedure (@pxref{The Store
4710Monad}):
b81e1947 4711
cf4a9129
LC
4712@deffn {Monadic Procedure} operating-system-derivation os
4713Return a derivation that builds @var{os}, an @code{operating-system}
4714object (@pxref{Derivations}).
b81e1947 4715
cf4a9129
LC
4716The output of the derivation is a single directory that refers to all
4717the packages, configuration files, and other supporting files needed to
4718instantiate @var{os}.
4719@end deffn
b81e1947 4720
7313a52e
LC
4721@node operating-system Reference
4722@subsection @code{operating-system} Reference
4723
4724This section summarizes all the options available in
4725@code{operating-system} declarations (@pxref{Using the Configuration
4726System}).
4727
4728@deftp {Data Type} operating-system
4729This is the data type representing an operating system configuration.
4730By that, we mean all the global system configuration, not per-user
4731configuration (@pxref{Using the Configuration System}).
4732
4733@table @asis
4734@item @code{kernel} (default: @var{linux-libre})
fbb25e56 4735The package object of the operating system kernel to use@footnote{Currently
7313a52e
LC
4736only the Linux-libre kernel is supported. In the future, it will be
4737possible to use the GNU@tie{}Hurd.}.
4738
4739@item @code{bootloader}
88faf933 4740The system bootloader configuration object. @xref{GRUB Configuration}.
7313a52e
LC
4741
4742@item @code{initrd} (default: @code{base-initrd})
4743A two-argument monadic procedure that returns an initial RAM disk for
4744the Linux kernel. @xref{Initial RAM Disk}.
4745
f34c56be
LC
4746@item @code{firmware} (default: @var{%base-firmware})
4747@cindex firmware
4748List of firmware packages loadable by the operating system kernel.
4749
4750The default includes firmware needed for Atheros-based WiFi devices
4751(Linux-libre module @code{ath9k}.)
4752
7313a52e
LC
4753@item @code{host-name}
4754The host name.
4755
4756@item @code{hosts-file}
4757@cindex hosts file
24e02c28 4758A file-like object (@pxref{G-Expressions, file-like objects}) for use as
7313a52e 4759@file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library
24e02c28 4760Reference Manual}). The default is a file with entries for
7313a52e
LC
4761@code{localhost} and @var{host-name}.
4762
4763@item @code{mapped-devices} (default: @code{'()})
4764A list of mapped devices. @xref{Mapped Devices}.
4765
4766@item @code{file-systems}
4767A list of file systems. @xref{File Systems}.
4768
4769@item @code{swap-devices} (default: @code{'()})
4770@cindex swap devices
4771A list of strings identifying devices to be used for ``swap space''
4772(@pxref{Memory Concepts,,, libc, The GNU C Library Reference Manual}).
4773For example, @code{'("/dev/sda3")}.
4774
bf87f38a 4775@item @code{users} (default: @code{%base-user-accounts})
7313a52e
LC
4776@itemx @code{groups} (default: @var{%base-groups})
4777List of user accounts and groups. @xref{User Accounts}.
4778
4779@item @code{skeletons} (default: @code{(default-skeletons)})
4780A monadic list of pairs of target file name and files. These are the
4781files that will be used as skeletons as new accounts are created.
4782
4783For instance, a valid value may look like this:
4784
4785@example
4786(mlet %store-monad ((bashrc (text-file "bashrc" "\
4787 export PATH=$HOME/.guix-profile/bin")))
4788 (return `((".bashrc" ,bashrc))))
4789@end example
4790
4791@item @code{issue} (default: @var{%default-issue})
4792A string denoting the contents of the @file{/etc/issue} file, which is
4793what displayed when users log in on a text console.
4794
4795@item @code{packages} (default: @var{%base-packages})
4796The set of packages installed in the global profile, which is accessible
4797at @file{/run/current-system/profile}.
4798
4799The default set includes core utilities, but it is good practice to
4800install non-core utilities in user profiles (@pxref{Invoking guix
4801package}).
4802
4803@item @code{timezone}
4804A timezone identifying string---e.g., @code{"Europe/Paris"}.
4805
598e19dc
LC
4806@item @code{locale} (default: @code{"en_US.utf8"})
4807The name of the default locale (@pxref{Locale Names,,, libc, The GNU C
4808Library Reference Manual}). @xref{Locales}, for more information.
4809
4810@item @code{locale-definitions} (default: @var{%default-locale-definitions})
4811The list of locale definitions to be compiled and that may be used at
4812run time. @xref{Locales}.
7313a52e 4813
996ed739
LC
4814@item @code{name-service-switch} (default: @var{%default-nss})
4815Configuration of libc's name service switch (NSS)---a
4816@code{<name-service-switch>} object. @xref{Name Service Switch}, for
4817details.
4818
7313a52e
LC
4819@item @code{services} (default: @var{%base-services})
4820A list of monadic values denoting system services. @xref{Services}.
4821
4822@item @code{pam-services} (default: @code{(base-pam-services)})
4823@cindex PAM
4824@cindex pluggable authentication modules
4825Linux @dfn{pluggable authentication module} (PAM) services.
4826@c FIXME: Add xref to PAM services section.
4827
4828@item @code{setuid-programs} (default: @var{%setuid-programs})
4829List of string-valued G-expressions denoting setuid programs.
4830@xref{Setuid Programs}.
4831
f5a9ffa0
AK
4832@item @code{sudoers-file} (default: @var{%sudoers-specification})
4833@cindex sudoers file
84765839
LC
4834The contents of the @file{/etc/sudoers} file as a file-like object
4835(@pxref{G-Expressions, @code{local-file} and @code{plain-file}}).
7313a52e
LC
4836
4837This file specifies which users can use the @command{sudo} command, what
4838they are allowed to do, and what privileges they may gain. The default
4839is that only @code{root} and members of the @code{wheel} group may use
4840@code{sudo}.
4841
4842@end table
4843@end deftp
4844
cf4a9129
LC
4845@node File Systems
4846@subsection File Systems
b81e1947 4847
cf4a9129
LC
4848The list of file systems to be mounted is specified in the
4849@code{file-systems} field of the operating system's declaration
4850(@pxref{Using the Configuration System}). Each file system is declared
4851using the @code{file-system} form, like this:
b81e1947
LC
4852
4853@example
cf4a9129
LC
4854(file-system
4855 (mount-point "/home")
4856 (device "/dev/sda3")
4857 (type "ext4"))
b81e1947
LC
4858@end example
4859
cf4a9129
LC
4860As usual, some of the fields are mandatory---those shown in the example
4861above---while others can be omitted. These are described below.
b81e1947 4862
cf4a9129
LC
4863@deftp {Data Type} file-system
4864Objects of this type represent file systems to be mounted. They
4865contain the following members:
5ff3c4b8 4866
cf4a9129
LC
4867@table @asis
4868@item @code{type}
4869This is a string specifying the type of the file system---e.g.,
4870@code{"ext4"}.
5ff3c4b8 4871
cf4a9129
LC
4872@item @code{mount-point}
4873This designates the place where the file system is to be mounted.
b81e1947 4874
cf4a9129
LC
4875@item @code{device}
4876This names the ``source'' of the file system. By default it is the name
4877of a node under @file{/dev}, but its meaning depends on the @code{title}
4878field described below.
401c53c4 4879
cf4a9129
LC
4880@item @code{title} (default: @code{'device})
4881This is a symbol that specifies how the @code{device} field is to be
4882interpreted.
401c53c4 4883
cf4a9129
LC
4884When it is the symbol @code{device}, then the @code{device} field is
4885interpreted as a file name; when it is @code{label}, then @code{device}
4886is interpreted as a partition label name; when it is @code{uuid},
4887@code{device} is interpreted as a partition unique identifier (UUID).
da7cabd4 4888
cf4a9129
LC
4889The @code{label} and @code{uuid} options offer a way to refer to disk
4890partitions without having to hard-code their actual device name.
da7cabd4 4891
5f86a66e
LC
4892However, when a file system's source is a mapped device (@pxref{Mapped
4893Devices}), its @code{device} field @emph{must} refer to the mapped
4894device name---e.g., @file{/dev/mapper/root-partition}---and consequently
4895@code{title} must be set to @code{'device}. This is required so that
4896the system knows that mounting the file system depends on having the
4897corresponding device mapping established.
4898
cf4a9129
LC
4899@item @code{flags} (default: @code{'()})
4900This is a list of symbols denoting mount flags. Recognized flags
2c071ce9
LC
4901include @code{read-only}, @code{bind-mount}, @code{no-dev} (disallow
4902access to special files), @code{no-suid} (ignore setuid and setgid
4903bits), and @code{no-exec} (disallow program execution.)
da7cabd4 4904
cf4a9129
LC
4905@item @code{options} (default: @code{#f})
4906This is either @code{#f}, or a string denoting mount options.
da7cabd4 4907
cf4a9129
LC
4908@item @code{needed-for-boot?} (default: @code{#f})
4909This Boolean value indicates whether the file system is needed when
4910booting. If that is true, then the file system is mounted when the
4911initial RAM disk (initrd) is loaded. This is always the case, for
4912instance, for the root file system.
da7cabd4 4913
cf4a9129
LC
4914@item @code{check?} (default: @code{#t})
4915This Boolean indicates whether the file system needs to be checked for
4916errors before being mounted.
f9cc8971 4917
4e469051
LC
4918@item @code{create-mount-point?} (default: @code{#f})
4919When true, the mount point is created if it does not exist yet.
4920
cf4a9129
LC
4921@end table
4922@end deftp
da7cabd4 4923
a69576ea
LC
4924The @code{(gnu system file-systems)} exports the following useful
4925variables.
4926
4927@defvr {Scheme Variable} %base-file-systems
4928These are essential file systems that are required on normal systems,
3392ce5d
LC
4929such as @var{%devtmpfs-file-system} and @var{%immutable-store} (see
4930below.) Operating system declarations should always contain at least
4931these.
a69576ea
LC
4932@end defvr
4933
4934@defvr {Scheme Variable} %devtmpfs-file-system
4935The @code{devtmpfs} file system to be mounted on @file{/dev}. This is a
4936requirement for udev (@pxref{Base Services, @code{udev-service}}).
4937@end defvr
4938
7f239fd3
LC
4939@defvr {Scheme Variable} %pseudo-terminal-file-system
4940This is the file system to be mounted as @file{/dev/pts}. It supports
4941@dfn{pseudo-terminals} created @i{via} @code{openpty} and similar
4942functions (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference
4943Manual}). Pseudo-terminals are used by terminal emulators such as
4944@command{xterm}.
4945@end defvr
4946
db17ae5c
LC
4947@defvr {Scheme Variable} %shared-memory-file-system
4948This file system is mounted as @file{/dev/shm} and is used to support
4949memory sharing across processes (@pxref{Memory-mapped I/O,
4950@code{shm_open},, libc, The GNU C Library Reference Manual}).
4951@end defvr
4952
3392ce5d
LC
4953@defvr {Scheme Variable} %immutable-store
4954This file system performs a read-only ``bind mount'' of
4955@file{/gnu/store}, making it read-only for all the users including
4956@code{root}. This prevents against accidental modification by software
4957running as @code{root} or by system administrators.
4958
4959The daemon itself is still able to write to the store: it remounts it
4960read-write in its own ``name space.''
4961@end defvr
4962
a69576ea
LC
4963@defvr {Scheme Variable} %binary-format-file-system
4964The @code{binfmt_misc} file system, which allows handling of arbitrary
4965executable file types to be delegated to user space. This requires the
4966@code{binfmt.ko} kernel module to be loaded.
4967@end defvr
4968
4969@defvr {Scheme Variable} %fuse-control-file-system
4970The @code{fusectl} file system, which allows unprivileged users to mount
4971and unmount user-space FUSE file systems. This requires the
4972@code{fuse.ko} kernel module to be loaded.
4973@end defvr
4974
510f9d86
LC
4975@node Mapped Devices
4976@subsection Mapped Devices
4977
4978@cindex device mapping
4979@cindex mapped devices
4980The Linux kernel has a notion of @dfn{device mapping}: a block device,
4981such as a hard disk partition, can be @dfn{mapped} into another device,
4982with additional processing over the data that flows through
4983it@footnote{Note that the GNU@tie{}Hurd makes no difference between the
4984concept of a ``mapped device'' and that of a file system: both boil down
4985to @emph{translating} input/output operations made on a file to
4986operations on its backing store. Thus, the Hurd implements mapped
4987devices, like file systems, using the generic @dfn{translator} mechanism
4988(@pxref{Translators,,, hurd, The GNU Hurd Reference Manual}).}. A
4989typical example is encryption device mapping: all writes to the mapped
4990device are encrypted, and all reads are deciphered, transparently.
4991
4992Mapped devices are declared using the @code{mapped-device} form:
4993
4994@example
4995(mapped-device
4996 (source "/dev/sda3")
4997 (target "home")
4998 (type luks-device-mapping))
4999@end example
5000
5001@noindent
5002@cindex disk encryption
5003@cindex LUKS
5004This example specifies a mapping from @file{/dev/sda3} to
5005@file{/dev/mapper/home} using LUKS---the
5006@url{http://code.google.com/p/cryptsetup,Linux Unified Key Setup}, a
5007standard mechanism for disk encryption. The @file{/dev/mapper/home}
5008device can then be used as the @code{device} of a @code{file-system}
5009declaration (@pxref{File Systems}). The @code{mapped-device} form is
5010detailed below.
5011
5012@deftp {Data Type} mapped-device
5013Objects of this type represent device mappings that will be made when
5014the system boots up.
5015
9cb426b8
LC
5016@table @code
5017@item source
510f9d86
LC
5018This string specifies the name of the block device to be mapped, such as
5019@code{"/dev/sda3"}.
5020
9cb426b8 5021@item target
510f9d86
LC
5022This string specifies the name of the mapping to be established. For
5023example, specifying @code{"my-partition"} will lead to the creation of
5024the @code{"/dev/mapper/my-partition"} device.
5025
9cb426b8 5026@item type
510f9d86
LC
5027This must be a @code{mapped-device-kind} object, which specifies how
5028@var{source} is mapped to @var{target}.
5029@end table
5030@end deftp
5031
5032@defvr {Scheme Variable} luks-device-mapping
5033This defines LUKS block device encryption using the @command{cryptsetup}
5034command, from the same-named package. This relies on the
5035@code{dm-crypt} Linux kernel module.
5036@end defvr
5037
cf4a9129
LC
5038@node User Accounts
5039@subsection User Accounts
ee85f3db 5040
9bea87a5
LC
5041User accounts and groups are entirely managed through the
5042@code{operating-system} declaration. They are specified with the
5043@code{user-account} and @code{user-group} forms:
ee85f3db 5044
cf4a9129
LC
5045@example
5046(user-account
5047 (name "alice")
5048 (group "users")
24e752c0
LC
5049 (supplementary-groups '("wheel" ;allow use of sudo, etc.
5050 "audio" ;sound card
5051 "video" ;video devices such as webcams
5052 "cdrom")) ;the good ol' CD-ROM
cf4a9129
LC
5053 (comment "Bob's sister")
5054 (home-directory "/home/alice"))
5055@end example
25083588 5056
9bea87a5
LC
5057When booting or upon completion of @command{guix system reconfigure},
5058the system ensures that only the user accounts and groups specified in
5059the @code{operating-system} declaration exist, and with the specified
5060properties. Thus, account or group creations or modifications made by
5061directly invoking commands such as @command{useradd} are lost upon
5062reconfiguration or reboot. This ensures that the system remains exactly
5063as declared.
5064
cf4a9129
LC
5065@deftp {Data Type} user-account
5066Objects of this type represent user accounts. The following members may
5067be specified:
ee85f3db 5068
cf4a9129
LC
5069@table @asis
5070@item @code{name}
5071The name of the user account.
ee85f3db 5072
cf4a9129
LC
5073@item @code{group}
5074This is the name (a string) or identifier (a number) of the user group
5075this account belongs to.
ee85f3db 5076
cf4a9129
LC
5077@item @code{supplementary-groups} (default: @code{'()})
5078Optionally, this can be defined as a list of group names that this
5079account belongs to.
ee85f3db 5080
cf4a9129
LC
5081@item @code{uid} (default: @code{#f})
5082This is the user ID for this account (a number), or @code{#f}. In the
5083latter case, a number is automatically chosen by the system when the
5084account is created.
ee85f3db 5085
cf4a9129
LC
5086@item @code{comment} (default: @code{""})
5087A comment about the account, such as the account's owner full name.
c8c871d1 5088
cf4a9129
LC
5089@item @code{home-directory}
5090This is the name of the home directory for the account.
ee85f3db 5091
cf4a9129
LC
5092@item @code{shell} (default: Bash)
5093This is a G-expression denoting the file name of a program to be used as
5094the shell (@pxref{G-Expressions}).
ee85f3db 5095
cf4a9129
LC
5096@item @code{system?} (default: @code{#f})
5097This Boolean value indicates whether the account is a ``system''
5098account. System accounts are sometimes treated specially; for instance,
5099graphical login managers do not list them.
ee85f3db 5100
cf4a9129 5101@item @code{password} (default: @code{#f})
eb59595c
LC
5102You would normally leave this field to @code{#f}, initialize user
5103passwords as @code{root} with the @command{passwd} command, and then let
9bea87a5
LC
5104users change it with @command{passwd}. Passwords set with
5105@command{passwd} are of course preserved across reboot and
5106reconfiguration.
eb59595c
LC
5107
5108If you @emph{do} want to have a preset password for an account, then
5109this field must contain the encrypted password, as a string.
5d1f1177
LC
5110@xref{crypt,,, libc, The GNU C Library Reference Manual}, for more information
5111on password encryption, and @ref{Encryption,,, guile, GNU Guile Reference
eb59595c 5112Manual}, for information on Guile's @code{crypt} procedure.
c8c871d1 5113
cf4a9129
LC
5114@end table
5115@end deftp
ee85f3db 5116
cf4a9129 5117User group declarations are even simpler:
ee85f3db 5118
cf4a9129
LC
5119@example
5120(user-group (name "students"))
5121@end example
ee85f3db 5122
cf4a9129
LC
5123@deftp {Data Type} user-group
5124This type is for, well, user groups. There are just a few fields:
af8a56b8 5125
cf4a9129
LC
5126@table @asis
5127@item @code{name}
5128The group's name.
ee85f3db 5129
cf4a9129
LC
5130@item @code{id} (default: @code{#f})
5131The group identifier (a number). If @code{#f}, a new number is
5132automatically allocated when the group is created.
ee85f3db 5133
c8fa3426
LC
5134@item @code{system?} (default: @code{#f})
5135This Boolean value indicates whether the group is a ``system'' group.
5136System groups have low numerical IDs.
5137
cf4a9129
LC
5138@item @code{password} (default: @code{#f})
5139What, user groups can have a password? Well, apparently yes. Unless
5140@code{#f}, this field specifies the group's password.
ee85f3db 5141
cf4a9129
LC
5142@end table
5143@end deftp
401c53c4 5144
cf4a9129
LC
5145For convenience, a variable lists all the basic user groups one may
5146expect:
401c53c4 5147
cf4a9129
LC
5148@defvr {Scheme Variable} %base-groups
5149This is the list of basic user groups that users and/or packages expect
5150to be present on the system. This includes groups such as ``root'',
5151``wheel'', and ``users'', as well as groups used to control access to
5152specific devices such as ``audio'', ``disk'', and ``cdrom''.
5153@end defvr
401c53c4 5154
bf87f38a
LC
5155@defvr {Scheme Variable} %base-user-accounts
5156This is the list of basic system accounts that programs may expect to
5157find on a GNU/Linux system, such as the ``nobody'' account.
5158
5159Note that the ``root'' account is not included here. It is a
5160special-case and is automatically added whether or not it is specified.
5161@end defvr
5162
598e19dc
LC
5163@node Locales
5164@subsection Locales
5165
5166@cindex locale
5167A @dfn{locale} defines cultural conventions for a particular language
5168and region of the world (@pxref{Locales,,, libc, The GNU C Library
5169Reference Manual}). Each locale has a name that typically has the form
5170@code{@var{language}_@var{territory}.@var{charset}}---e.g.,
5171@code{fr_LU.utf8} designates the locale for the French language, with
5172cultural conventions from Luxembourg, and using the UTF-8 encoding.
5173
5174@cindex locale definition
5175Usually, you will want to specify the default locale for the machine
5176using the @code{locale} field of the @code{operating-system} declaration
5177(@pxref{operating-system Reference, @code{locale}}).
5178
5179That locale must be among the @dfn{locale definitions} that are known to
5180the system---and these are specified in the @code{locale-definitions}
5181slot of @code{operating-system}. The default value includes locale
5182definition for some widely used locales, but not for all the available
5183locales, in order to save space.
5184
5185If the locale specified in the @code{locale} field is not among the
5186definitions listed in @code{locale-definitions}, @command{guix system}
5187raises an error. In that case, you should add the locale definition to
5188the @code{locale-definitions} field. For instance, to add the North
5189Frisian locale for Germany, the value of that field may be:
5190
5191@example
5192(cons (locale-definition
5193 (name "fy_DE.utf8") (source "fy_DE"))
5194 %default-locale-definitions)
5195@end example
5196
5197Likewise, to save space, one might want @code{locale-definitions} to
5198list only the locales that are actually used, as in:
5199
5200@example
5201(list (locale-definition
5202 (name "ja_JP.eucjp") (source "ja_JP")
5203 (charset "EUC-JP")))
5204@end example
5205
5206The @code{locale-definition} form is provided by the @code{(gnu system
5207locale)} module. Details are given below.
5208
5209@deftp {Data Type} locale-definition
5210This is the data type of a locale definition.
5211
5212@table @asis
5213
5214@item @code{name}
5215The name of the locale. @xref{Locale Names,,, libc, The GNU C Library
5216Reference Manual}, for more information on locale names.
5217
5218@item @code{source}
5219The name of the source for that locale. This is typically the
5220@code{@var{language}_@var{territory}} part of the locale name.
5221
5222@item @code{charset} (default: @code{"UTF-8"})
5223The ``character set'' or ``code set'' for that locale,
5224@uref{http://www.iana.org/assignments/character-sets, as defined by
5225IANA}.
5226
5227@end table
5228@end deftp
5229
5230@defvr {Scheme Variable} %default-locale-definitions
5231An arbitrary list of commonly used locales, used as the default value of
5232the @code{locale-definitions} field of @code{operating-system}
5233declarations.
5234@end defvr
401c53c4 5235
cf4a9129
LC
5236@node Services
5237@subsection Services
401c53c4 5238
cf4a9129
LC
5239@cindex system services
5240An important part of preparing an @code{operating-system} declaration is
5241listing @dfn{system services} and their configuration (@pxref{Using the
5242Configuration System}). System services are typically daemons launched
5243when the system boots, or other actions needed at that time---e.g.,
d8b94dbd
LC
5244configuring network access.
5245
5246Services are managed by GNU@tie{}dmd (@pxref{Introduction,,, dmd, GNU
5247dmd Manual}). On a running system, the @command{deco} command allows
5248you to list the available services, show their status, start and stop
5249them, or do other specific operations (@pxref{Jump Start,,, dmd, GNU dmd
5250Manual}). For example:
5251
5252@example
5253# deco status dmd
5254@end example
5255
5256The above command, run as @code{root}, lists the currently defined
5257services. The @command{deco doc} command shows a synopsis of the given
5258service:
5259
5260@example
5261# deco doc nscd
5262Run libc's name service cache daemon (nscd).
5263@end example
5264
5265The @command{start}, @command{stop}, and @command{restart} sub-commands
5266have the effect you would expect. For instance, the commands below stop
5267the nscd service and restart the Xorg display server:
5268
5269@example
5270# deco stop nscd
5271Service nscd has been stopped.
5272# deco restart xorg-server
5273Service xorg-server has been stopped.
5274Service xorg-server has been started.
5275@end example
401c53c4 5276
cf4a9129 5277The following sections document the available services, starting with
d8b94dbd
LC
5278the core services, that may be used in an @code{operating-system}
5279declaration.
401c53c4 5280
cf4a9129
LC
5281@menu
5282* Base Services:: Essential system services.
5283* Networking Services:: Network setup, SSH daemon, etc.
5284* X Window:: Graphical display.
fe1a39d3 5285* Desktop Services:: D-Bus and desktop services.
105369a4 5286* Database Services:: SQL databases.
aa4ed923 5287* Various Services:: Other services.
cf4a9129 5288@end menu
401c53c4 5289
cf4a9129
LC
5290@node Base Services
5291@subsubsection Base Services
a1ba8475 5292
cf4a9129
LC
5293The @code{(gnu services base)} module provides definitions for the basic
5294services that one expects from the system. The services exported by
5295this module are listed below.
401c53c4 5296
cf4a9129
LC
5297@defvr {Scheme Variable} %base-services
5298This variable contains a list of basic services@footnote{Technically,
5299this is a list of monadic services. @xref{The Store Monad}.} one would
5300expect from the system: a login service (mingetty) on each tty, syslogd,
5301libc's name service cache daemon (nscd), the udev device manager, and
5302more.
401c53c4 5303
cf4a9129
LC
5304This is the default value of the @code{services} field of
5305@code{operating-system} declarations. Usually, when customizing a
5306system, you will want to append services to @var{%base-services}, like
5307this:
401c53c4 5308
cf4a9129 5309@example
fa1e31b8 5310(cons* (avahi-service) (lsh-service) %base-services)
cf4a9129
LC
5311@end example
5312@end defvr
401c53c4 5313
cf4a9129
LC
5314@deffn {Monadic Procedure} host-name-service @var{name}
5315Return a service that sets the host name to @var{name}.
5316@end deffn
401c53c4 5317
cf4a9129
LC
5318@deffn {Monadic Procedure} mingetty-service @var{tty} [#:motd] @
5319 [#:auto-login #f] [#:login-program] [#:login-pause? #f] @
5320 [#:allow-empty-passwords? #f]
5321Return a service to run mingetty on @var{tty}.
401c53c4 5322
cf4a9129
LC
5323When @var{allow-empty-passwords?} is true, allow empty log-in password. When
5324@var{auto-login} is true, it must be a user name under which to log-in
5325automatically. @var{login-pause?} can be set to @code{#t} in conjunction with
5326@var{auto-login}, in which case the user will have to press a key before the
5327login shell is launched.
401c53c4 5328
cf4a9129
LC
5329When true, @var{login-program} is a gexp or a monadic gexp denoting the name
5330of the log-in program (the default is the @code{login} program from the Shadow
5331tool suite.)
401c53c4 5332
cf4a9129
LC
5333@var{motd} is a monadic value containing a text file to use as
5334the ``message of the day''.
5335@end deffn
401c53c4 5336
6454b333
LC
5337@cindex name service cache daemon
5338@cindex nscd
4aee6e60
LC
5339@deffn {Monadic Procedure} nscd-service [@var{config}] [#:glibc glibc] @
5340 [#:name-services '()]
5341Return a service that runs libc's name service cache daemon (nscd) with
5342the given @var{config}---an @code{<nscd-configuration>} object.
5343Optionally, @code{#:name-services} is a list of packages that provide
4c9050c6
LC
5344name service switch (NSS) modules needed by nscd. @xref{Name Service
5345Switch}, for an example.
cf4a9129 5346@end deffn
401c53c4 5347
6454b333
LC
5348@defvr {Scheme Variable} %nscd-default-configuration
5349This is the default @code{<nscd-configuration>} value (see below) used
5350by @code{nscd-service}. This uses the caches defined by
5351@var{%nscd-default-caches}; see below.
5352@end defvr
5353
5354@deftp {Data Type} nscd-configuration
5355This is the type representing the name service cache daemon (nscd)
5356configuration.
5357
5358@table @asis
5359
5360@item @code{log-file} (default: @code{"/var/log/nscd.log"})
5361Name of nscd's log file. This is where debugging output goes when
5362@code{debug-level} is strictly positive.
5363
5364@item @code{debug-level} (default: @code{0})
5365Integer denoting the debugging levels. Higher numbers mean more
5366debugging output is logged.
5367
5368@item @code{caches} (default: @var{%nscd-default-caches})
5369List of @code{<nscd-cache>} objects denoting things to be cached; see
5370below.
5371
5372@end table
5373@end deftp
5374
5375@deftp {Data Type} nscd-cache
5376Data type representing a cache database of nscd and its parameters.
5377
5378@table @asis
5379
5380@item @code{database}
5381This is a symbol representing the name of the database to be cached.
5382Valid values are @code{passwd}, @code{group}, @code{hosts}, and
5383@code{services}, which designate the corresponding NSS database
5384(@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
5385
5386@item @code{positive-time-to-live}
5387@itemx @code{negative-time-to-live} (default: @code{20})
5388A number representing the number of seconds during which a positive or
5389negative lookup result remains in cache.
5390
5391@item @code{check-files?} (default: @code{#t})
5392Whether to check for updates of the files corresponding to
5393@var{database}.
5394
5395For instance, when @var{database} is @code{hosts}, setting this flag
5396instructs nscd to check for updates in @file{/etc/hosts} and to take
5397them into account.
5398
5399@item @code{persistent?} (default: @code{#t})
5400Whether the cache should be stored persistently on disk.
5401
5402@item @code{shared?} (default: @code{#t})
5403Whether the cache should be shared among users.
5404
5405@item @code{max-database-size} (default: 32@tie{}MiB)
5406Maximum size in bytes of the database cache.
5407
5408@c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
5409@c settings, so leave them out.
5410
5411@end table
5412@end deftp
5413
5414@defvr {Scheme Variable} %nscd-default-caches
5415List of @code{<nscd-cache>} objects used by default by
5416@code{nscd-configuration} (see above.)
5417
5418It enables persistent and aggressive caching of service and host name
5419lookups. The latter provides better host name lookup performance,
5420resilience in the face of unreliable name servers, and also better
5421privacy---often the result of host name lookups is in local cache, so
5422external name servers do not even need to be queried.
5423@end defvr
5424
5425
1bb76f75
AK
5426@deffn {Monadic Procedure} syslog-service [#:config-file #f]
5427Return a service that runs @code{syslogd}. If configuration file name
5428@var{config-file} is not specified, use some reasonable default
cf4a9129
LC
5429settings.
5430@end deffn
401c53c4 5431
cf4a9129
LC
5432@deffn {Monadic Procedure} guix-service [#:guix guix] @
5433 [#:builder-group "guixbuild"] [#:build-accounts 10] @
02bb6b45 5434 [#:authorize-hydra-key? #t] [#:use-substitutes? #t] @
cf4a9129
LC
5435 [#:extra-options '()]
5436Return a service that runs the build daemon from @var{guix}, and has
5437@var{build-accounts} user accounts available under @var{builder-group}.
401c53c4 5438
cf4a9129
LC
5439When @var{authorize-hydra-key?} is true, the @code{hydra.gnu.org} public key
5440provided by @var{guix} is authorized upon activation, meaning that substitutes
5441from @code{hydra.gnu.org} are used by default.
401c53c4 5442
cf4a9129
LC
5443If @var{use-substitutes?} is false, the daemon is run with
5444@option{--no-substitutes} (@pxref{Invoking guix-daemon,
5445@option{--no-substitutes}}).
401c53c4 5446
cf4a9129
LC
5447Finally, @var{extra-options} is a list of additional command-line options
5448passed to @command{guix-daemon}.
5449@end deffn
a1ba8475 5450
cf4a9129
LC
5451@deffn {Monadic Procedure} udev-service [#:udev udev]
5452Run @var{udev}, which populates the @file{/dev} directory dynamically.
5453@end deffn
401c53c4 5454
5eca9459
AK
5455@deffn {Monadic Procedure} console-keymap-service @var{file}
5456Return a service to load console keymap from @var{file} using
5457@command{loadkeys} command.
5458@end deffn
5459
a69576ea 5460
cf4a9129
LC
5461@node Networking Services
5462@subsubsection Networking Services
401c53c4 5463
fa1e31b8 5464The @code{(gnu services networking)} module provides services to configure
cf4a9129 5465the network interface.
a1ba8475 5466
a023cca8
LC
5467@cindex DHCP, networking service
5468@deffn {Monadic Procedure} dhcp-client-service [#:dhcp @var{isc-dhcp}]
5469Return a service that runs @var{dhcp}, a Dynamic Host Configuration
5470Protocol (DHCP) client, on all the non-loopback network interfaces.
5471@end deffn
5472
cf4a9129
LC
5473@deffn {Monadic Procedure} static-networking-service @var{interface} @var{ip} @
5474 [#:gateway #f] [#:name-services @code{'()}]
5475Return a service that starts @var{interface} with address @var{ip}. If
5476@var{gateway} is true, it must be a string specifying the default network
5477gateway.
5478@end deffn
8b315a6d 5479
b7d0c494
MW
5480@cindex wicd
5481@deffn {Monadic Procedure} wicd-service [#:wicd @var{wicd}]
5482Return a service that runs @url{https://launchpad.net/wicd,Wicd}, a
5483network manager that aims to simplify wired and wireless networking.
5484@end deffn
5485
63854bcb
LC
5486@deffn {Monadic Procedure} ntp-service [#:ntp @var{ntp}] @
5487 [#:name-service @var{%ntp-servers}]
5488Return a service that runs the daemon from @var{ntp}, the
5489@uref{http://www.ntp.org, Network Time Protocol package}. The daemon will
5490keep the system clock synchronized with that of @var{servers}.
5491@end deffn
5492
5493@defvr {Scheme Variable} %ntp-servers
5494List of host names used as the default NTP servers.
5495@end defvr
5496
cf4a9129
LC
5497@deffn {Monadic Procedure} tor-service [#:tor tor]
5498Return a service to run the @uref{https://torproject.org,Tor} daemon.
8b315a6d 5499
cf4a9129
LC
5500The daemon runs with the default settings (in particular the default exit
5501policy) as the @code{tor} unprivileged user.
5502@end deffn
8b315a6d 5503
4627a464
LC
5504@deffn {Monadic Procedure} bitlbee-service [#:bitlbee bitlbee] @
5505 [#:interface "127.0.0.1"] [#:port 6667] @
5506 [#:extra-settings ""]
5507Return a service that runs @url{http://bitlbee.org,BitlBee}, a daemon that
5508acts as a gateway between IRC and chat networks.
5509
5510The daemon will listen to the interface corresponding to the IP address
5511specified in @var{interface}, on @var{port}. @code{127.0.0.1} means that only
5512local clients can connect, whereas @code{0.0.0.0} means that connections can
5513come from any networking interface.
5514
5515In addition, @var{extra-settings} specifies a string to append to the
5516configuration file.
5517@end deffn
5518
f4391bec 5519Furthermore, @code{(gnu services ssh)} provides the following service.
8b315a6d 5520
cf4a9129 5521@deffn {Monadic Procedure} lsh-service [#:host-key "/etc/lsh/host-key"] @
5833bf33 5522 [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
cf4a9129
LC
5523 [#:allow-empty-passwords? #f] [#:root-login? #f] @
5524 [#:syslog-output? #t] [#:x11-forwarding? #t] @
5525 [#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
21cc905a 5526 [#:public-key-authentication? #t] [#:initialize? #t]
cf4a9129
LC
5527Run the @command{lshd} program from @var{lsh} to listen on port @var{port-number}.
5528@var{host-key} must designate a file containing the host key, and readable
5529only by root.
72e25e35 5530
5833bf33
DP
5531When @var{daemonic?} is true, @command{lshd} will detach from the
5532controlling terminal and log its output to syslogd, unless one sets
5533@var{syslog-output?} to false. Obviously, it also makes lsh-service
5534depend on existence of syslogd service. When @var{pid-file?} is true,
5535@command{lshd} writes its PID to the file called @var{pid-file}.
5536
cf4a9129
LC
5537When @var{initialize?} is true, automatically create the seed and host key
5538upon service activation if they do not exist yet. This may take long and
5539require interaction.
8b315a6d 5540
20dd519c
LC
5541When @var{initialize?} is false, it is up to the user to initialize the
5542randomness generator (@pxref{lsh-make-seed,,, lsh, LSH Manual}), and to create
5543a key pair with the private key stored in file @var{host-key} (@pxref{lshd
5544basics,,, lsh, LSH Manual}).
5545
cf4a9129
LC
5546When @var{interfaces} is empty, lshd listens for connections on all the
5547network interfaces; otherwise, @var{interfaces} must be a list of host names
5548or addresses.
9bf3c1a7 5549
20dd519c
LC
5550@var{allow-empty-passwords?} specifies whether to accept log-ins with empty
5551passwords, and @var{root-login?} specifies whether to accept log-ins as
cf4a9129 5552root.
4af2447e 5553
cf4a9129
LC
5554The other options should be self-descriptive.
5555@end deffn
4af2447e 5556
fa0c1d61
LC
5557@defvr {Scheme Variable} %facebook-host-aliases
5558This variable contains a string for use in @file{/etc/hosts}
5559(@pxref{Host Names,,, libc, The GNU C Library Reference Manual}). Each
5560line contains a entry that maps a known server name of the Facebook
5561on-line service---e.g., @code{www.facebook.com}---to the local
5562host---@code{127.0.0.1} or its IPv6 equivalent, @code{::1}.
5563
5564This variable is typically used in the @code{hosts-file} field of an
7313a52e
LC
5565@code{operating-system} declaration (@pxref{operating-system Reference,
5566@file{/etc/hosts}}):
fa0c1d61
LC
5567
5568@example
5569(use-modules (gnu) (guix))
5570
5571(operating-system
5572 (host-name "mymachine")
5573 ;; ...
5574 (hosts-file
5575 ;; Create a /etc/hosts file with aliases for "localhost"
5576 ;; and "mymachine", as well as for Facebook servers.
24e02c28
LC
5577 (plain-file "hosts"
5578 (string-append (local-host-aliases host-name)
5579 %facebook-host-aliases))))
fa0c1d61
LC
5580@end example
5581
5582This mechanism can prevent programs running locally, such as Web
5583browsers, from accessing Facebook.
5584@end defvr
5585
965a7332
LC
5586The @code{(gnu services avahi)} provides the following definition.
5587
5588@deffn {Monadic Procedure} avahi-service [#:avahi @var{avahi}] @
5589 [#:host-name #f] [#:publish? #t] [#:ipv4? #t] @
5590 [#:ipv6? #t] [#:wide-area? #f] @
5591 [#:domains-to-browse '()]
5592Return a service that runs @command{avahi-daemon}, a system-wide
5593mDNS/DNS-SD responder that allows for service discovery and
5594"zero-configuration" host name lookups (see @uref{http://avahi.org/}).
5595
5596If @var{host-name} is different from @code{#f}, use that as the host name to
5597publish for this machine; otherwise, use the machine's actual host name.
5598
5599When @var{publish?} is true, publishing of host names and services is allowed;
5600in particular, avahi-daemon will publish the machine's host name and IP
5601address via mDNS on the local network.
5602
5603When @var{wide-area?} is true, DNS-SD over unicast DNS is enabled.
5604
5605Boolean values @var{ipv4?} and @var{ipv6?} determine whether to use IPv4/IPv6
5606sockets.
5607@end deffn
5608
5609
cf4a9129
LC
5610@node X Window
5611@subsubsection X Window
68ad877c 5612
cf4a9129
LC
5613Support for the X Window graphical display system---specifically
5614Xorg---is provided by the @code{(gnu services xorg)} module. Note that
5615there is no @code{xorg-service} procedure. Instead, the X server is
5616started by the @dfn{login manager}, currently SLiM.
4af2447e 5617
cf4a9129 5618@deffn {Monadic Procedure} slim-service [#:allow-empty-passwords? #f] @
0ecc3bf3
LC
5619 [#:auto-login? #f] [#:default-user ""] [#:startx] @
5620 [#:theme @var{%default-slim-theme}] @
4bd43bbe 5621 [#:theme-name @var{%default-slim-theme-name}]
cf4a9129
LC
5622Return a service that spawns the SLiM graphical login manager, which in
5623turn starts the X display server with @var{startx}, a command as returned by
5624@code{xorg-start-command}.
4af2447e 5625
04e4e6ab
LC
5626@cindex X session
5627
5628SLiM automatically looks for session types described by the @file{.desktop}
5629files in @file{/run/current-system/profile/share/xsessions} and allows users
5630to choose a session from the log-in screen using @kbd{F1}. Packages such as
5631@var{xfce}, @var{sawfish}, and @var{ratpoison} provide @file{.desktop} files;
5632adding them to the system-wide set of packages automatically makes them
5633available at the log-in screen.
5634
5635In addition, @file{~/.xsession} files are honored. When available,
5636@file{~/.xsession} must be an executable that starts a window manager
5637and/or other X clients.
5638
cf4a9129
LC
5639When @var{allow-empty-passwords?} is true, allow logins with an empty
5640password. When @var{auto-login?} is true, log in automatically as
5641@var{default-user}.
0ecc3bf3
LC
5642
5643If @var{theme} is @code{#f}, the use the default log-in theme; otherwise
5644@var{theme} must be a gexp denoting the name of a directory containing the
5645theme to use. In that case, @var{theme-name} specifies the name of the
5646theme.
cf4a9129 5647@end deffn
4af2447e 5648
0ecc3bf3
LC
5649@defvr {Scheme Variable} %default-theme
5650@defvrx {Scheme Variable} %default-theme-name
5651The G-Expression denoting the default SLiM theme and its name.
5652@end defvr
5653
f703413e 5654@deffn {Monadic Procedure} xorg-start-command [#:guile] @
d1cdd7ba 5655 [#:configuration-file #f] [#:xorg-server @var{xorg-server}]
f703413e 5656Return a derivation that builds a @var{guile} script to start the X server
d1cdd7ba
LC
5657from @var{xorg-server}. @var{configuration-file} is the server configuration
5658file or a derivation that builds it; when omitted, the result of
5659@code{xorg-configuration-file} is used.
5660
5661Usually the X server is started by a login manager.
5662@end deffn
5663
5664@deffn {Monadic Procedure} xorg-configuration-file @
12422c9d 5665 [#:drivers '()] [#:resolutions '()] [#:extra-config '()]
d1cdd7ba
LC
5666Return a configuration file for the Xorg server containing search paths for
5667all the common drivers.
f703413e
LC
5668
5669@var{drivers} must be either the empty list, in which case Xorg chooses a
5670graphics driver automatically, or a list of driver names that will be tried in
d1cdd7ba 5671this order---e.g., @code{(\"modesetting\" \"vesa\")}.
d2e59637
LC
5672
5673Likewise, when @var{resolutions} is the empty list, Xorg chooses an
5674appropriate screen resolution; otherwise, it must be a list of
5675resolutions---e.g., @code{((1024 768) (640 480))}.
12422c9d
LC
5676
5677Last, @var{extra-config} is a list of strings or objects appended to the
5678@code{text-file*} argument list. It is used to pass extra text to be added
5679verbatim to the configuration file.
f703413e 5680@end deffn
4af2447e 5681
fe1a39d3
LC
5682@node Desktop Services
5683@subsubsection Desktop Services
aa4ed923 5684
fe1a39d3
LC
5685The @code{(gnu services desktop)} module provides services that are
5686usually useful in the context of a ``desktop'' setup---that is, on a
5687machine running a graphical display server, possibly with graphical user
5688interfaces, etc.
aa4ed923 5689
4467be21
LC
5690To simplify things, the module defines a variable containing the set of
5691services that users typically expect on a machine with a graphical
5692environment and networking:
5693
5694@defvr {Scheme Variable} %desktop-services
5695This is a list of services that builds upon @var{%base-services} and
5696adds or adjust services for a typical ``desktop'' setup.
5697
5698In particular, it adds a graphical login manager (@pxref{X Window,
5699@code{slim-service}}), a network management tool (@pxref{Networking
5700Services, @code{wicd-service}}), energy and color management services,
4a3bcaee 5701an NTP client (@pxref{Networking Services}), the Avahi
4467be21
LC
5702daemon, and has the name service switch service configured to be able to
5703use @code{nss-mdns} (@pxref{Name Service Switch, mDNS}).
5704@end defvr
5705
5706The @var{%desktop-services} variable can be used as the @code{services}
5707field of an @code{operating-system} declaration (@pxref{operating-system
5708Reference, @code{services}}).
5709
5710The actual service definitions provided by @code{(gnu services desktop)}
5711are described below.
5712
fe1a39d3
LC
5713@deffn {Monadic Procedure} dbus-service @var{services} @
5714 [#:dbus @var{dbus}]
5715Return a service that runs the ``system bus'', using @var{dbus}, with
5716support for @var{services}.
aa4ed923 5717
fe1a39d3
LC
5718@uref{http://dbus.freedesktop.org/, D-Bus} is an inter-process communication
5719facility. Its system bus is used to allow system services to communicate
5720and be notified of system-wide events.
aa4ed923 5721
fe1a39d3
LC
5722@var{services} must be a list of packages that provide an
5723@file{etc/dbus-1/system.d} directory containing additional D-Bus configuration
5724and policy files. For example, to allow avahi-daemon to use the system bus,
5725@var{services} must be equal to @code{(list avahi)}.
aa4ed923
AK
5726@end deffn
5727
be234128
AW
5728@deffn {Monadic Procedure} upower-service [#:upower @var{upower}] @
5729 [#:watts-up-pro? #f] @
5730 [#:poll-batteries? #t] @
5731 [#:ignore-lid? #f] @
5732 [#:use-percentage-for-policy? #f] @
5733 [#:percentage-low 10] @
5734 [#:percentage-critical 3] @
5735 [#:percentage-action 2] @
5736 [#:time-low 1200] @
5737 [#:time-critical 300] @
5738 [#:time-action 120] @
5739 [#:critical-power-action 'hybrid-sleep]
5740Return a service that runs @uref{http://upower.freedesktop.org/,
5741@command{upowerd}}, a system-wide monitor for power consumption and battery
5742levels, with the given configuration settings. It implements the
5743@code{org.freedesktop.UPower} D-Bus interface, and is notably used by
5744GNOME.
5745@end deffn
5746
7ce597ff
AW
5747@deffn {Monadic Procedure} colord-service [#:colord @var{colord}]
5748Return a service that runs @command{colord}, a system service with a D-Bus
5749interface to manage the color profiles of input and output devices such as
5750screens and scanners. It is notably used by the GNOME Color Manager graphical
5751tool. See @uref{http://www.freedesktop.org/software/colord/, the colord web
5752site} for more information.
5753@end deffn
5754
105369a4
DT
5755@node Database Services
5756@subsubsection Database Services
5757
5758The @code{(gnu services databases)} module provides the following service.
5759
5760@deffn {Monadic Procedure} postgresql-service [#:postgresql postgresql] @
5761 [#:config-file] [#:data-directory ``/var/lib/postgresql/data'']
5762Return a service that runs @var{postgresql}, the PostgreSQL database
5763server.
5764
5765The PostgreSQL daemon loads its runtime configuration from
5766@var{config-file} and stores the database cluster in
5767@var{data-directory}.
5768@end deffn
fe1a39d3
LC
5769
5770@node Various Services
5771@subsubsection Various Services
5772
5773The @code{(gnu services lirc)} module provides the following service.
5774
5775@deffn {Monadic Procedure} lirc-service [#:lirc lirc] @
5776 [#:device #f] [#:driver #f] [#:config-file #f] @
5777 [#:extra-options '()]
5778Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
5779decodes infrared signals from remote controls.
5780
5781Optionally, @var{device}, @var{driver} and @var{config-file}
5782(configuration file name) may be specified. See @command{lircd} manual
5783for details.
5784
5785Finally, @var{extra-options} is a list of additional command-line options
5786passed to @command{lircd}.
5787@end deffn
5788
5789
0ae8c15a
LC
5790@node Setuid Programs
5791@subsection Setuid Programs
5792
5793@cindex setuid programs
5794Some programs need to run with ``root'' privileges, even when they are
5795launched by unprivileged users. A notorious example is the
5796@command{passwd} programs, which can users can run to change their
5797password, and which requires write access to the @file{/etc/passwd} and
5798@file{/etc/shadow} files---something normally restricted to root, for
5799obvious security reasons. To address that, these executables are
5800@dfn{setuid-root}, meaning that they always run with root privileges
5801(@pxref{How Change Persona,,, libc, The GNU C Library Reference Manual},
5802for more info about the setuid mechanisms.)
5803
5804The store itself @emph{cannot} contain setuid programs: that would be a
5805security issue since any user on the system can write derivations that
5806populate the store (@pxref{The Store}). Thus, a different mechanism is
5807used: instead of changing the setuid bit directly on files that are in
5808the store, we let the system administrator @emph{declare} which programs
5809should be setuid root.
5810
5811The @code{setuid-programs} field of an @code{operating-system}
5812declaration contains a list of G-expressions denoting the names of
5813programs to be setuid-root (@pxref{Using the Configuration System}).
5814For instance, the @command{passwd} program, which is part of the Shadow
5815package, can be designated by this G-expression (@pxref{G-Expressions}):
5816
5817@example
5818#~(string-append #$shadow "/bin/passwd")
5819@end example
5820
5821A default set of setuid programs is defined by the
5822@code{%setuid-programs} variable of the @code{(gnu system)} module.
5823
5824@defvr {Scheme Variable} %setuid-programs
5825A list of G-expressions denoting common programs that are setuid-root.
5826
5827The list includes commands such as @command{passwd}, @command{ping},
5828@command{su}, and @command{sudo}.
5829@end defvr
5830
5831Under the hood, the actual setuid programs are created in the
5832@file{/run/setuid-programs} directory at system activation time. The
5833files in this directory refer to the ``real'' binaries, which are in the
5834store.
5835
efb5e833
LC
5836@node X.509 Certificates
5837@subsection X.509 Certificates
5838
5839@cindex HTTPS, certificates
5840@cindex X.509 certificates
5841@cindex TLS
5842Web servers available over HTTPS (that is, HTTP over the transport-layer
5843security mechanism, TLS) send client programs an @dfn{X.509 certificate}
5844that the client can then use to @emph{authenticate} the server. To do
5845that, clients verify that the server's certificate is signed by a
5846so-called @dfn{certificate authority} (CA). But to verify the CA's
5847signature, clients must have first acquired the CA's certificate.
5848
5849Web browsers such as GNU@tie{}IceCat include their own set of CA
5850certificates, such that they are able to verify CA signatures
5851out-of-the-box.
5852
5853However, most other programs that can talk HTTPS---@command{wget},
5854@command{git}, @command{w3m}, etc.---need to be told where CA
5855certificates can be found.
5856
5857@cindex @code{nss-certs}
5858In GuixSD, this is done by adding a package that provides certificates
5859to the @code{packages} field of the @code{operating-system} declaration
5860(@pxref{operating-system Reference}). GuixSD includes one such package,
5861@code{nss-certs}, which is a set of CA certificates provided as part of
5862Mozilla's Network Security Services.
5863
5864Note that it is @emph{not} part of @var{%base-packages}, so you need to
5865explicitly add it. The @file{/etc/ssl/certs} directory, which is where
5866most applications and libraries look for certificates by default, points
5867to the certificates installed globally.
5868
5869Unprivileged users can also install their own certificate package in
5870their profile. A number of environment variables need to be defined so
5871that applications and libraries know where to find them. Namely, the
5872OpenSSL library honors the @code{SSL_CERT_DIR} and @code{SSL_CERT_FILE}
5873variables. Some applications add their own environment variables; for
5874instance, the Git version control system honors the certificate bundle
5875pointed to by the @code{GIT_SSL_CAINFO} environment variable.
5876
5877
996ed739
LC
5878@node Name Service Switch
5879@subsection Name Service Switch
5880
5881@cindex name service switch
5882@cindex NSS
5883The @code{(gnu system nss)} module provides bindings to the
5884configuration file of libc's @dfn{name service switch} or @dfn{NSS}
5885(@pxref{NSS Configuration File,,, libc, The GNU C Library Reference
5886Manual}). In a nutshell, the NSS is a mechanism that allows libc to be
5887extended with new ``name'' lookup methods for system databases, which
5888includes host names, service names, user accounts, and more (@pxref{Name
5889Service Switch, System Databases and Name Service Switch,, libc, The GNU
5890C Library Reference Manual}).
5891
5892The NSS configuration specifies, for each system database, which lookup
5893method is to be used, and how the various methods are chained
5894together---for instance, under which circumstances NSS should try the
5895next method in the list. The NSS configuration is given in the
5896@code{name-service-switch} field of @code{operating-system} declarations
5897(@pxref{operating-system Reference, @code{name-service-switch}}).
5898
4c9050c6
LC
5899@cindex nss-mdns
5900@cindex .local, host name lookup
996ed739 5901As an example, the declaration below configures the NSS to use the
4c9050c6
LC
5902@uref{http://0pointer.de/lennart/projects/nss-mdns/, @code{nss-mdns}
5903back-end}, which supports host name lookups over multicast DNS (mDNS)
5904for host names ending in @code{.local}:
996ed739
LC
5905
5906@example
5907(name-service-switch
5908 (hosts (list %files ;first, check /etc/hosts
5909
5910 ;; If the above did not succeed, try
5911 ;; with 'mdns_minimal'.
5912 (name-service
5913 (name "mdns_minimal")
5914
5915 ;; 'mdns_minimal' is authoritative for
5916 ;; '.local'. When it returns "not found",
5917 ;; no need to try the next methods.
5918 (reaction (lookup-specification
5919 (not-found => return))))
5920
5921 ;; Then fall back to DNS.
5922 (name-service
5923 (name "dns"))
5924
5925 ;; Finally, try with the "full" 'mdns'.
5926 (name-service
5927 (name "mdns")))))
5928@end example
5929
15137a29
LC
5930Don't worry: the @code{%mdns-host-lookup-nss} variable (see below)
5931contains this configuration, so you won't have to type it if all you
5932want is to have @code{.local} host lookup working.
5933
4c9050c6
LC
5934Note that, in this case, in addition to setting the
5935@code{name-service-switch} of the @code{operating-system} declaration,
5936@code{nscd-service} must be told where to find the @code{nss-mdns}
5937shared library (@pxref{Base Services, @code{nscd-service}}). Since the
5938@code{nscd} service is part of @var{%base-services}, you may want to
5939customize it by adding this snippet in the operating system
5940configuration file:
5941
5942@example
5943(use-modules (guix) (gnu))
5944
5945(define %my-base-services
5946 ;; Replace the default nscd service with one that knows
5947 ;; about nss-mdns.
5948 (map (lambda (mservice)
5949 ;; "Bind" the MSERVICE monadic value to inspect it.
5950 (mlet %store-monad ((service mservice))
5951 (if (member 'nscd (service-provision service))
5952 (nscd-service (nscd-configuration)
5953 #:name-services (list nss-mdns))
5954 mservice)))
5955 %base-services))
5956@end example
5957
5958@noindent
5959@dots{} and then refer to @var{%my-base-services} instead of
5960@var{%base-services} in the @code{operating-system} declaration.
15137a29 5961Lastly, this relies on the availability of the Avahi service
965a7332 5962(@pxref{Networking Services, @code{avahi-service}}).
15137a29
LC
5963
5964For convenience, the following variables provide typical NSS
5965configurations.
5966
5967@defvr {Scheme Variable} %default-nss
5968This is the default name service switch configuration, a
5969@code{name-service-switch} object.
5970@end defvr
5971
5972@defvr {Scheme Variable} %mdns-host-lookup-nss
5973This is the name service switch configuration with support for host name
5974lookup over multicast DNS (mDNS) for host names ending in @code{.local}.
5975@end defvr
4c9050c6 5976
996ed739
LC
5977The reference for name service switch configuration is given below. It
5978is a direct mapping of the C library's configuration file format, so
5979please refer to the C library manual for more information (@pxref{NSS
5980Configuration File,,, libc, The GNU C Library Reference Manual}).
5981Compared to libc's NSS configuration file format, it has the advantage
5982not only of adding this warm parenthetic feel that we like, but also
5983static checks: you'll know about syntax errors and typos as soon as you
5984run @command{guix system}.
5985
996ed739
LC
5986@deftp {Data Type} name-service-switch
5987
5988This is the data type representation the configuration of libc's name
5989service switch (NSS). Each field below represents one of the supported
5990system databases.
5991
5992@table @code
5993@item aliases
5994@itemx ethers
5995@itemx group
5996@itemx gshadow
5997@itemx hosts
5998@itemx initgroups
5999@itemx netgroup
6000@itemx networks
6001@itemx password
6002@itemx public-key
6003@itemx rpc
6004@itemx services
6005@itemx shadow
6006The system databases handled by the NSS. Each of these fields must be a
6007list of @code{<name-service>} objects (see below.)
6008@end table
6009@end deftp
6010
6011@deftp {Data Type} name-service
6012
6013This is the data type representing an actual name service and the
6014associated lookup action.
6015
6016@table @code
6017@item name
6018A string denoting the name service (@pxref{Services in the NSS
6019configuration,,, libc, The GNU C Library Reference Manual}).
6020
4aee6e60
LC
6021Note that name services listed here must be visible to nscd. This is
6022achieved by passing the @code{#:name-services} argument to
6023@code{nscd-service} the list of packages providing the needed name
6024services (@pxref{Base Services, @code{nscd-service}}).
6025
996ed739
LC
6026@item reaction
6027An action specified using the @code{lookup-specification} macro
6028(@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
6029Reference Manual}). For example:
6030
6031@example
6032(lookup-specification (unavailable => continue)
6033 (success => return))
6034@end example
6035@end table
6036@end deftp
0ae8c15a 6037
fd1b1fa2
LC
6038@node Initial RAM Disk
6039@subsection Initial RAM Disk
6040
6041@cindex initial RAM disk (initrd)
6042@cindex initrd (initial RAM disk)
6043For bootstrapping purposes, the Linux-Libre kernel is passed an
6044@dfn{initial RAM disk}, or @dfn{initrd}. An initrd contains a temporary
6045root file system, as well as an initialization script. The latter is
6046responsible for mounting the real root file system, and for loading any
6047kernel modules that may be needed to achieve that.
6048
6049The @code{initrd} field of an @code{operating-system} declaration allows
6050you to specify which initrd you would like to use. The @code{(gnu
6051system linux-initrd)} module provides two ways to build an initrd: the
6052high-level @code{base-initrd} procedure, and the low-level
6053@code{expression->initrd} procedure.
6054
6055The @code{base-initrd} procedure is intended to cover most common uses.
6056For example, if you want to add a bunch of kernel modules to be loaded
6057at boot time, you can define the @code{initrd} field of the operating
6058system declaration like this:
6059
6060@example
52ac153e 6061(initrd (lambda (file-systems . rest)
027981d6
LC
6062 ;; Create a standard initrd that has modules "foo.ko"
6063 ;; and "bar.ko", as well as their dependencies, in
6064 ;; addition to the modules available by default.
52ac153e 6065 (apply base-initrd file-systems
027981d6 6066 #:extra-modules '("foo" "bar")
52ac153e 6067 rest)))
fd1b1fa2
LC
6068@end example
6069
52ac153e
LC
6070The @code{base-initrd} procedure also handles common use cases that
6071involves using the system as a QEMU guest, or as a ``live'' system whose
6072root file system is volatile.
fd1b1fa2
LC
6073
6074@deffn {Monadic Procedure} base-initrd @var{file-systems} @
6075 [#:qemu-networking? #f] [#:virtio? #f] [#:volatile-root? #f] @
52ac153e 6076 [#:extra-modules '()] [#:mapped-devices '()]
fd1b1fa2
LC
6077Return a monadic derivation that builds a generic initrd. @var{file-systems} is
6078a list of file-systems to be mounted by the initrd, possibly in addition to
6079the root file system specified on the kernel command line via @code{--root}.
52ac153e
LC
6080@var{mapped-devices} is a list of device mappings to realize before
6081@var{file-systems} are mounted (@pxref{Mapped Devices}).
fd1b1fa2
LC
6082
6083When @var{qemu-networking?} is true, set up networking with the standard QEMU
6084parameters. When @var{virtio?} is true, load additional modules so the initrd can
6085be used as a QEMU guest with para-virtualized I/O drivers.
6086
6087When @var{volatile-root?} is true, the root file system is writable but any changes
6088to it are lost.
6089
6090The initrd is automatically populated with all the kernel modules necessary
6091for @var{file-systems} and for the given options. However, additional kernel
6092modules can be listed in @var{extra-modules}. They will be added to the initrd, and
6093loaded at boot time in the order in which they appear.
6094@end deffn
6095
6096Needless to say, the initrds we produce and use embed a
6097statically-linked Guile, and the initialization program is a Guile
6098program. That gives a lot of flexibility. The
6099@code{expression->initrd} procedure builds such an initrd, given the
6100program to run in that initrd.
6101
6102@deffn {Monadic Procedure} expression->initrd @var{exp} @
6103 [#:guile %guile-static-stripped] [#:name "guile-initrd"] @
42d10464 6104 [#:modules '()]
fd1b1fa2
LC
6105Return a derivation that builds a Linux initrd (a gzipped cpio archive)
6106containing @var{guile} and that evaluates @var{exp}, a G-expression,
df650fa8
LC
6107upon booting. All the derivations referenced by @var{exp} are
6108automatically copied to the initrd.
fd1b1fa2 6109
42d10464
LC
6110@var{modules} is a list of Guile module names to be embedded in the
6111initrd.
fd1b1fa2
LC
6112@end deffn
6113
88faf933
LC
6114@node GRUB Configuration
6115@subsection GRUB Configuration
6116
6117@cindex GRUB
6118@cindex boot loader
6119
6120The operating system uses GNU@tie{}GRUB as its boot loader
6121(@pxref{Overview, overview of GRUB,, grub, GNU GRUB Manual}). It is
6122configured using @code{grub-configuration} declarations. This data type
6123is exported by the @code{(gnu system grub)} module, and described below.
6124
6125@deftp {Data Type} grub-configuration
6126The type of a GRUB configuration declaration.
6127
6128@table @asis
6129
6130@item @code{device}
6131This is a string denoting the boot device. It must be a device name
6132understood by the @command{grub-install} command, such as
6133@code{/dev/sda} or @code{(hd0)} (@pxref{Invoking grub-install,,, grub,
6134GNU GRUB Manual}).
6135
6136@item @code{menu-entries} (default: @code{()})
6137A possibly empty list of @code{menu-entry} objects (see below), denoting
6138entries to appear in the GRUB boot menu, in addition to the current
6139system entry and the entry pointing to previous system generations.
6140
6141@item @code{default-entry} (default: @code{0})
6142The index of the default boot menu entry. Index 0 is for the current
6143system's entry.
6144
6145@item @code{timeout} (default: @code{5})
6146The number of seconds to wait for keyboard input before booting. Set to
61470 to boot immediately, and to -1 to wait indefinitely.
6148
6149@item @code{theme} (default: @var{%default-theme})
6150The @code{grub-theme} object describing the theme to use.
6151@end table
6152
6153@end deftp
6154
6155Should you want to list additional boot menu entries @i{via} the
6156@code{menu-entries} field above, you will need to create them with the
6157@code{menu-entry} form:
6158
6159@deftp {Data Type} menu-entry
6160The type of an entry in the GRUB boot menu.
6161
6162@table @asis
6163
6164@item @code{label}
35ed9306 6165The label to show in the menu---e.g., @code{"GNU"}.
88faf933
LC
6166
6167@item @code{linux}
6168The Linux kernel to boot.
6169
6170@item @code{linux-arguments} (default: @code{()})
6171The list of extra Linux kernel command-line arguments---e.g.,
6172@code{("console=ttyS0")}.
6173
6174@item @code{initrd}
6175A G-Expression or string denoting the file name of the initial RAM disk
6176to use (@pxref{G-Expressions}).
6177
6178@end table
6179@end deftp
6180
6181@c FIXME: Write documentation once it's stable.
6182Themes are created using the @code{grub-theme} form, which is not
6183documented yet.
6184
6185@defvr {Scheme Variable} %default-theme
6186This is the default GRUB theme used by the operating system, with a
6187fancy background image displaying the GNU and Guix logos.
6188@end defvr
6189
6190
cf4a9129
LC
6191@node Invoking guix system
6192@subsection Invoking @code{guix system}
0918e64a 6193
cf4a9129
LC
6194Once you have written an operating system declaration, as seen in the
6195previous section, it can be @dfn{instantiated} using the @command{guix
6196system} command. The synopsis is:
4af2447e 6197
cf4a9129
LC
6198@example
6199guix system @var{options}@dots{} @var{action} @var{file}
6200@end example
4af2447e 6201
cf4a9129
LC
6202@var{file} must be the name of a file containing an
6203@code{operating-system} declaration. @var{action} specifies how the
6204operating system is instantiate. Currently the following values are
6205supported:
4af2447e 6206
cf4a9129
LC
6207@table @code
6208@item reconfigure
6209Build the operating system described in @var{file}, activate it, and
6210switch to it@footnote{This action is usable only on systems already
6211running GNU.}.
4af2447e 6212
cf4a9129
LC
6213This effects all the configuration specified in @var{file}: user
6214accounts, system services, global package list, setuid programs, etc.
4af2447e 6215
cf4a9129
LC
6216It also adds a GRUB menu entry for the new OS configuration, and moves
6217entries for older configurations to a submenu---unless
6218@option{--no-grub} is passed.
4af2447e 6219
bf2479c7
LC
6220@c The paragraph below refers to the problem discussed at
6221@c <http://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
6222It is highly recommended to run @command{guix pull} once before you run
6223@command{guix system reconfigure} for the first time (@pxref{Invoking
6224guix pull}). Failing to do that you would see an older version of Guix
6225once @command{reconfigure} has completed.
6226
cf4a9129
LC
6227@item build
6228Build the operating system's derivation, which includes all the
6229configuration files and programs needed to boot and run the system.
6230This action does not actually install anything.
113daf62 6231
cf4a9129
LC
6232@item init
6233Populate the given directory with all the files necessary to run the
6234operating system specified in @var{file}. This is useful for first-time
4705641f 6235installations of GuixSD. For instance:
113daf62
LC
6236
6237@example
cf4a9129 6238guix system init my-os-config.scm /mnt
113daf62
LC
6239@end example
6240
cf4a9129
LC
6241copies to @file{/mnt} all the store items required by the configuration
6242specified in @file{my-os-config.scm}. This includes configuration
6243files, packages, and so on. It also creates other essential files
6244needed for the system to operate correctly---e.g., the @file{/etc},
6245@file{/var}, and @file{/run} directories, and the @file{/bin/sh} file.
113daf62 6246
cf4a9129
LC
6247This command also installs GRUB on the device specified in
6248@file{my-os-config}, unless the @option{--no-grub} option was passed.
113daf62 6249
cf4a9129
LC
6250@item vm
6251@cindex virtual machine
0276f697 6252@cindex VM
cf4a9129
LC
6253Build a virtual machine that contain the operating system declared in
6254@var{file}, and return a script to run that virtual machine (VM).
810568b3 6255Arguments given to the script are passed as is to QEMU.
113daf62 6256
cf4a9129 6257The VM shares its store with the host system.
113daf62 6258
0276f697
LC
6259Additional file systems can be shared between the host and the VM using
6260the @code{--share} and @code{--expose} command-line options: the former
6261specifies a directory to be shared with write access, while the latter
6262provides read-only access to the shared directory.
6263
6264The example below creates a VM in which the user's home directory is
6265accessible read-only, and where the @file{/exchange} directory is a
6266read-write mapping of the host's @file{$HOME/tmp}:
6267
6268@example
6269guix system vm my-config.scm \
6270 --expose=$HOME --share=$HOME/tmp=/exchange
6271@end example
6272
6aa260af
LC
6273On GNU/Linux, the default is to boot directly to the kernel; this has
6274the advantage of requiring only a very tiny root disk image since the
6275host's store can then be mounted.
6276
6277The @code{--full-boot} option forces a complete boot sequence, starting
6278with the bootloader. This requires more disk space since a root image
6279containing at least the kernel, initrd, and bootloader data files must
6280be created. The @code{--image-size} option can be used to specify the
6281image's size.
ab11f0be 6282
cf4a9129
LC
6283@item vm-image
6284@itemx disk-image
6285Return a virtual machine or disk image of the operating system declared
6286in @var{file} that stands alone. Use the @option{--image-size} option
6287to specify the size of the image.
113daf62 6288
cf4a9129
LC
6289When using @code{vm-image}, the returned image is in qcow2 format, which
6290the QEMU emulator can efficiently use.
113daf62 6291
cf4a9129
LC
6292When using @code{disk-image}, a raw disk image is produced; it can be
6293copied as is to a USB stick, for instance. Assuming @code{/dev/sdc} is
6294the device corresponding to a USB stick, one can copy the image on it
6295using the following command:
113daf62 6296
cf4a9129
LC
6297@example
6298# dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
6299@end example
113daf62 6300
cf4a9129 6301@end table
113daf62 6302
cf4a9129
LC
6303@var{options} can contain any of the common build options provided by
6304@command{guix build} (@pxref{Invoking guix build}). In addition,
6305@var{options} can contain one of the following:
113daf62 6306
cf4a9129
LC
6307@table @option
6308@item --system=@var{system}
6309@itemx -s @var{system}
6310Attempt to build for @var{system} instead of the host's system type.
6311This works as per @command{guix build} (@pxref{Invoking guix build}).
113daf62 6312
cf4a9129
LC
6313@item --image-size=@var{size}
6314For the @code{vm-image} and @code{disk-image} actions, create an image
6315of the given @var{size}. @var{size} may be a number of bytes, or it may
4a44d7bb
LC
6316include a unit as a suffix (@pxref{Block size, size specifications,,
6317coreutils, GNU Coreutils}).
db030303
LC
6318
6319@item --on-error=@var{strategy}
6320Apply @var{strategy} when an error occurs when reading @var{file}.
6321@var{strategy} may be one of the following:
6322
6323@table @code
6324@item nothing-special
6325Report the error concisely and exit. This is the default strategy.
6326
6327@item backtrace
6328Likewise, but also display a backtrace.
6329
6330@item debug
6331Report the error and enter Guile's debugger. From there, you can run
6332commands such as @code{,bt} to get a backtrace, @code{,locals} to
6333display local variable values, and more generally inspect the program's
6334state. @xref{Debug Commands,,, guile, GNU Guile Reference Manual}, for
6335a list of available debugging commands.
6336@end table
113daf62 6337@end table
113daf62 6338
cf4a9129
LC
6339Note that all the actions above, except @code{build} and @code{init},
6340rely on KVM support in the Linux-Libre kernel. Specifically, the
6341machine should have hardware virtualization support, the corresponding
6342KVM kernel module should be loaded, and the @file{/dev/kvm} device node
6343must exist and be readable and writable by the user and by the daemon's
6344build users.
8451a568 6345
cf4a9129
LC
6346@node Defining Services
6347@subsection Defining Services
8451a568 6348
cf4a9129
LC
6349The @code{(gnu services @dots{})} modules define several procedures that allow
6350users to declare the operating system's services (@pxref{Using the
6351Configuration System}). These procedures are @emph{monadic
6352procedures}---i.e., procedures that return a monadic value in the store
6353monad (@pxref{The Store Monad}). For examples of such procedures,
6354@xref{Services}.
8451a568 6355
cf4a9129
LC
6356@cindex service definition
6357The monadic value returned by those procedures is a @dfn{service
6358definition}---a structure as returned by the @code{service} form.
6359Service definitions specifies the inputs the service depends on, and an
6360expression to start and stop the service. Behind the scenes, service
6361definitions are ``translated'' into the form suitable for the
6362configuration file of dmd, the init system (@pxref{Services,,, dmd, GNU
6363dmd Manual}).
8451a568 6364
cf4a9129
LC
6365As an example, here is what the @code{nscd-service} procedure looks
6366like:
8451a568 6367
cf4a9129
LC
6368@lisp
6369(define (nscd-service)
6370 (with-monad %store-monad
6371 (return (service
6372 (documentation "Run libc's name service cache daemon.")
6373 (provision '(nscd))
6374 (activate #~(begin
6375 (use-modules (guix build utils))
6376 (mkdir-p "/var/run/nscd")))
6377 (start #~(make-forkexec-constructor
6378 (string-append #$glibc "/sbin/nscd")
6379 "-f" "/dev/null" "--foreground"))
6380 (stop #~(make-kill-destructor))
6381 (respawn? #f)))))
6382@end lisp
8451a568 6383
cf4a9129
LC
6384@noindent
6385The @code{activate}, @code{start}, and @code{stop} fields are G-expressions
6386(@pxref{G-Expressions}). The @code{activate} field contains a script to
6387run at ``activation'' time; it makes sure that the @file{/var/run/nscd}
6388directory exists before @command{nscd} is started.
8451a568 6389
cf4a9129
LC
6390The @code{start} and @code{stop} fields refer to dmd's facilities to
6391start and stop processes (@pxref{Service De- and Constructors,,, dmd,
6392GNU dmd Manual}). The @code{provision} field specifies the name under
6393which this service is known to dmd, and @code{documentation} specifies
6394on-line documentation. Thus, the commands @command{deco start ncsd},
6395@command{deco stop nscd}, and @command{deco doc nscd} will do what you
6396would expect (@pxref{Invoking deco,,, dmd, GNU dmd Manual}).
8451a568 6397
8451a568 6398
cf4a9129
LC
6399@node Installing Debugging Files
6400@section Installing Debugging Files
8451a568 6401
cf4a9129
LC
6402@cindex debugging files
6403Program binaries, as produced by the GCC compilers for instance, are
6404typically written in the ELF format, with a section containing
6405@dfn{debugging information}. Debugging information is what allows the
6406debugger, GDB, to map binary code to source code; it is required to
6407debug a compiled program in good conditions.
8451a568 6408
cf4a9129
LC
6409The problem with debugging information is that is takes up a fair amount
6410of disk space. For example, debugging information for the GNU C Library
6411weighs in at more than 60 MiB. Thus, as a user, keeping all the
6412debugging info of all the installed programs is usually not an option.
6413Yet, space savings should not come at the cost of an impediment to
6414debugging---especially in the GNU system, which should make it easier
6415for users to exert their computing freedom (@pxref{GNU Distribution}).
8451a568 6416
cf4a9129
LC
6417Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a
6418mechanism that allows users to get the best of both worlds: debugging
6419information can be stripped from the binaries and stored in separate
6420files. GDB is then able to load debugging information from those files,
6421when they are available (@pxref{Separate Debug Files,,, gdb, Debugging
6422with GDB}).
8451a568 6423
cf4a9129
LC
6424The GNU distribution takes advantage of this by storing debugging
6425information in the @code{lib/debug} sub-directory of a separate package
6426output unimaginatively called @code{debug} (@pxref{Packages with
6427Multiple Outputs}). Users can choose to install the @code{debug} output
6428of a package when they need it. For instance, the following command
6429installs the debugging information for the GNU C Library and for GNU
6430Guile:
8451a568
LC
6431
6432@example
cf4a9129 6433guix package -i glibc:debug guile:debug
8451a568
LC
6434@end example
6435
cf4a9129
LC
6436GDB must then be told to look for debug files in the user's profile, by
6437setting the @code{debug-file-directory} variable (consider setting it
6438from the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with
6439GDB}):
8451a568 6440
cf4a9129
LC
6441@example
6442(gdb) set debug-file-directory ~/.guix-profile/lib/debug
6443@end example
8451a568 6444
cf4a9129
LC
6445From there on, GDB will pick up debugging information from the
6446@code{.debug} files under @file{~/.guix-profile/lib/debug}.
8451a568 6447
cf4a9129
LC
6448In addition, you will most likely want GDB to be able to show the source
6449code being debugged. To do that, you will have to unpack the source
6450code of the package of interest (obtained with @code{guix build
6451--source}, @pxref{Invoking guix build}), and to point GDB to that source
6452directory using the @code{directory} command (@pxref{Source Path,
6453@code{directory},, gdb, Debugging with GDB}).
8451a568 6454
cf4a9129
LC
6455@c XXX: keep me up-to-date
6456The @code{debug} output mechanism in Guix is implemented by the
6457@code{gnu-build-system} (@pxref{Build Systems}). Currently, it is
6458opt-in---debugging information is available only for those packages
6459whose definition explicitly declares a @code{debug} output. This may be
6460changed to opt-out in the future, if our build farm servers can handle
6461the load. To check whether a package has a @code{debug} output, use
6462@command{guix package --list-available} (@pxref{Invoking guix package}).
8451a568 6463
8451a568 6464
05962f29
LC
6465@node Security Updates
6466@section Security Updates
6467
843858b8
LC
6468@quotation Note
6469As of version @value{VERSION}, the feature described in this section is
6470experimental.
6471@end quotation
05962f29
LC
6472
6473@cindex security updates
6474Occasionally, important security vulnerabilities are discovered in core
6475software packages and must be patched. Guix follows a functional
6476package management discipline (@pxref{Introduction}), which implies
6477that, when a package is changed, @emph{every package that depends on it}
6478must be rebuilt. This can significantly slow down the deployment of
6479fixes in core packages such as libc or Bash, since basically the whole
6480distribution would need to be rebuilt. Using pre-built binaries helps
6481(@pxref{Substitutes}), but deployment may still take more time than
6482desired.
6483
6484@cindex grafts
6485To address that, Guix implements @dfn{grafts}, a mechanism that allows
6486for fast deployment of critical updates without the costs associated
6487with a whole-distribution rebuild. The idea is to rebuild only the
6488package that needs to be patched, and then to ``graft'' it onto packages
6489explicitly installed by the user and that were previously referring to
6490the original package. The cost of grafting is typically very low, and
6491order of magnitudes lower than a full rebuild of the dependency chain.
6492
6493@cindex replacements of packages, for grafts
6494For instance, suppose a security update needs to be applied to Bash.
6495Guix developers will provide a package definition for the ``fixed''
6496Bash, say @var{bash-fixed}, in the usual way (@pxref{Defining
6497Packages}). Then, the original package definition is augmented with a
6498@code{replacement} field pointing to the package containing the bug fix:
6499
6500@example
6501(define bash
6502 (package
6503 (name "bash")
6504 ;; @dots{}
6505 (replacement bash-fixed)))
6506@end example
6507
6508From there on, any package depending directly or indirectly on Bash that
6509is installed will automatically be ``rewritten'' to refer to
6510@var{bash-fixed} instead of @var{bash}. This grafting process takes
6511time proportional to the size of the package, but expect less than a
6512minute for an ``average'' package on a recent machine.
6513
6514Currently, the graft and the package it replaces (@var{bash-fixed} and
6515@var{bash} in the example above) must have the exact same @code{name}
6516and @code{version} fields. This restriction mostly comes from the fact
6517that grafting works by patching files, including binary files, directly.
6518Other restrictions may apply: for instance, when adding a graft to a
6519package providing a shared library, the original shared library and its
6520replacement must have the same @code{SONAME} and be binary-compatible.
6521
6522
cf4a9129
LC
6523@node Package Modules
6524@section Package Modules
8451a568 6525
cf4a9129
LC
6526From a programming viewpoint, the package definitions of the
6527GNU distribution are provided by Guile modules in the @code{(gnu packages
6528@dots{})} name space@footnote{Note that packages under the @code{(gnu
6529packages @dots{})} module name space are not necessarily ``GNU
6530packages''. This module naming scheme follows the usual Guile module
6531naming convention: @code{gnu} means that these modules are distributed
6532as part of the GNU system, and @code{packages} identifies modules that
6533define packages.} (@pxref{Modules, Guile modules,, guile, GNU Guile
6534Reference Manual}). For instance, the @code{(gnu packages emacs)}
6535module exports a variable named @code{emacs}, which is bound to a
6536@code{<package>} object (@pxref{Defining Packages}).
113daf62 6537
300868ba 6538The @code{(gnu packages @dots{})} module name space is
cf4a9129
LC
6539automatically scanned for packages by the command-line tools. For
6540instance, when running @code{guix package -i emacs}, all the @code{(gnu
6541packages @dots{})} modules are scanned until one that exports a package
6542object whose name is @code{emacs} is found. This package search
6543facility is implemented in the @code{(gnu packages)} module.
113daf62 6544
300868ba 6545@cindex customization, of packages
8689901f 6546@cindex package module search path
cf4a9129 6547Users can store package definitions in modules with different
60142854 6548names---e.g., @code{(my-packages emacs)}@footnote{Note that the file
c95ded7e
LC
6549name and module name must match. For instance, the @code{(my-packages
6550emacs)} module must be stored in a @file{my-packages/emacs.scm} file
6551relative to the load path specified with @option{--load-path} or
6552@code{GUIX_PACKAGE_PATH}. @xref{Modules and the File System,,,
6553guile, GNU Guile Reference Manual}, for details.}. These package definitions
300868ba
LC
6554will not be visible by default. Thus, users can invoke commands such as
6555@command{guix package} and @command{guix build} have to be used with the
c95ded7e
LC
6556@code{-e} option so that they know where to find the package. Better
6557yet, they can use the
300868ba 6558@code{-L} option of these commands to make those modules visible
8689901f
LC
6559(@pxref{Invoking guix build, @code{--load-path}}), or define the
6560@code{GUIX_PACKAGE_PATH} environment variable. This environment
6561variable makes it easy to extend or customize the distribution and is
6562honored by all the user interfaces.
6563
6564@defvr {Environment Variable} GUIX_PACKAGE_PATH
6565This is a colon-separated list of directories to search for package
6566modules. Directories listed in this variable take precedence over the
6567distribution's own modules.
6568@end defvr
ef5dd60a 6569
cf4a9129
LC
6570The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}:
6571each package is built based solely on other packages in the
6572distribution. The root of this dependency graph is a small set of
6573@dfn{bootstrap binaries}, provided by the @code{(gnu packages
6574bootstrap)} module. For more information on bootstrapping,
081145cf 6575@pxref{Bootstrapping}.
ef5dd60a 6576
cf4a9129
LC
6577@node Packaging Guidelines
6578@section Packaging Guidelines
ef5dd60a 6579
cf4a9129
LC
6580The GNU distribution is nascent and may well lack some of your favorite
6581packages. This section describes how you can help make the distribution
6582grow. @xref{Contributing}, for additional information on how you can
6583help.
ef5dd60a 6584
cf4a9129
LC
6585Free software packages are usually distributed in the form of
6586@dfn{source code tarballs}---typically @file{tar.gz} files that contain
6587all the source files. Adding a package to the distribution means
6588essentially two things: adding a @dfn{recipe} that describes how to
6589build the package, including a list of other packages required to build
6590it, and adding @dfn{package meta-data} along with that recipe, such as a
6591description and licensing information.
ef5dd60a 6592
cf4a9129
LC
6593In Guix all this information is embodied in @dfn{package definitions}.
6594Package definitions provide a high-level view of the package. They are
6595written using the syntax of the Scheme programming language; in fact,
6596for each package we define a variable bound to the package definition,
6597and export that variable from a module (@pxref{Package Modules}).
6598However, in-depth Scheme knowledge is @emph{not} a prerequisite for
6599creating packages. For more information on package definitions,
081145cf 6600@pxref{Defining Packages}.
ef5dd60a 6601
cf4a9129
LC
6602Once a package definition is in place, stored in a file in the Guix
6603source tree, it can be tested using the @command{guix build} command
6604(@pxref{Invoking guix build}). For example, assuming the new package is
c71979f4
LC
6605called @code{gnew}, you may run this command from the Guix build tree
6606(@pxref{Running Guix Before It Is Installed}):
ef5dd60a
LC
6607
6608@example
cf4a9129 6609./pre-inst-env guix build gnew --keep-failed
ef5dd60a 6610@end example
ef5dd60a 6611
cf4a9129
LC
6612Using @code{--keep-failed} makes it easier to debug build failures since
6613it provides access to the failed build tree. Another useful
6614command-line option when debugging is @code{--log-file}, to access the
6615build log.
ef5dd60a 6616
cf4a9129
LC
6617If the package is unknown to the @command{guix} command, it may be that
6618the source file contains a syntax error, or lacks a @code{define-public}
6619clause to export the package variable. To figure it out, you may load
6620the module from Guile to get more information about the actual error:
ef5dd60a 6621
cf4a9129
LC
6622@example
6623./pre-inst-env guile -c '(use-modules (gnu packages gnew))'
6624@end example
ef5dd60a 6625
cf4a9129
LC
6626Once your package builds correctly, please send us a patch
6627(@pxref{Contributing}). Well, if you need help, we will be happy to
6628help you too. Once the patch is committed in the Guix repository, the
6629new package automatically gets built on the supported platforms by
2b1cee21 6630@url{http://hydra.gnu.org/jobset/gnu/master, our continuous integration
cf4a9129 6631system}.
ef5dd60a 6632
cf4a9129
LC
6633@cindex substituter
6634Users can obtain the new package definition simply by running
6635@command{guix pull} (@pxref{Invoking guix pull}). When
6636@code{hydra.gnu.org} is done building the package, installing the
6637package automatically downloads binaries from there
6638(@pxref{Substitutes}). The only place where human intervention is
6639needed is to review and apply the patch.
ef5dd60a 6640
ef5dd60a 6641
cf4a9129 6642@menu
ec0339cd
LC
6643* Software Freedom:: What may go into the distribution.
6644* Package Naming:: What's in a name?
6645* Version Numbers:: When the name is not enough.
6646* Python Modules:: Taming the snake.
6647* Perl Modules:: Little pearls.
6648* Fonts:: Fond of fonts.
cf4a9129 6649@end menu
ef5dd60a 6650
cf4a9129
LC
6651@node Software Freedom
6652@subsection Software Freedom
ef5dd60a 6653
cf4a9129 6654@c Adapted from http://www.gnu.org/philosophy/philosophy.html.
c11a6eb1 6655
cf4a9129
LC
6656The GNU operating system has been developed so that users can have
6657freedom in their computing. GNU is @dfn{free software}, meaning that
6658users have the @url{http://www.gnu.org/philosophy/free-sw.html,four
6659essential freedoms}: to run the program, to study and change the program
6660in source code form, to redistribute exact copies, and to distribute
6661modified versions. Packages found in the GNU distribution provide only
6662software that conveys these four freedoms.
c11a6eb1 6663
cf4a9129
LC
6664In addition, the GNU distribution follow the
6665@url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free
6666software distribution guidelines}. Among other things, these guidelines
6667reject non-free firmware, recommendations of non-free software, and
6668discuss ways to deal with trademarks and patents.
ef5dd60a 6669
cf4a9129
LC
6670Some packages contain a small and optional subset that violates the
6671above guidelines, for instance because this subset is itself non-free
6672code. When that happens, the offending items are removed with
6673appropriate patches or code snippets in the package definition's
6674@code{origin} form (@pxref{Defining Packages}). That way, @code{guix
6675build --source} returns the ``freed'' source rather than the unmodified
6676upstream source.
ef5dd60a 6677
ef5dd60a 6678
cf4a9129
LC
6679@node Package Naming
6680@subsection Package Naming
ef5dd60a 6681
cf4a9129
LC
6682A package has actually two names associated with it:
6683First, there is the name of the @emph{Scheme variable}, the one following
6684@code{define-public}. By this name, the package can be made known in the
6685Scheme code, for instance as input to another package. Second, there is
6686the string in the @code{name} field of a package definition. This name
6687is used by package management commands such as
6688@command{guix package} and @command{guix build}.
ef5dd60a 6689
cf4a9129
LC
6690Both are usually the same and correspond to the lowercase conversion of
6691the project name chosen upstream, with underscores replaced with
6692hyphens. For instance, GNUnet is available as @code{gnunet}, and
6693SDL_net as @code{sdl-net}.
927097ef 6694
cf4a9129 6695We do not add @code{lib} prefixes for library packages, unless these are
081145cf 6696already part of the official project name. But @pxref{Python
cf4a9129
LC
6697Modules} and @ref{Perl Modules} for special rules concerning modules for
6698the Python and Perl languages.
927097ef 6699
1b366ee4 6700Font package names are handled differently, @pxref{Fonts}.
7fec52b7 6701
ef5dd60a 6702
cf4a9129
LC
6703@node Version Numbers
6704@subsection Version Numbers
ef5dd60a 6705
cf4a9129
LC
6706We usually package only the latest version of a given free software
6707project. But sometimes, for instance for incompatible library versions,
6708two (or more) versions of the same package are needed. These require
6709different Scheme variable names. We use the name as defined
6710in @ref{Package Naming}
6711for the most recent version; previous versions use the same name, suffixed
6712by @code{-} and the smallest prefix of the version number that may
6713distinguish the two versions.
ef5dd60a 6714
cf4a9129
LC
6715The name inside the package definition is the same for all versions of a
6716package and does not contain any version number.
ef5dd60a 6717
cf4a9129 6718For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as follows:
ef5dd60a 6719
cf4a9129
LC
6720@example
6721(define-public gtk+
6722 (package
6723 (name "gtk+")
6724 (version "3.9.12")
6725 ...))
6726(define-public gtk+-2
6727 (package
6728 (name "gtk+")
6729 (version "2.24.20")
6730 ...))
6731@end example
6732If we also wanted GTK+ 3.8.2, this would be packaged as
6733@example
6734(define-public gtk+-3.8
6735 (package
6736 (name "gtk+")
6737 (version "3.8.2")
6738 ...))
6739@end example
ef5dd60a 6740
ef5dd60a 6741
cf4a9129
LC
6742@node Python Modules
6743@subsection Python Modules
ef5dd60a 6744
cf4a9129
LC
6745We currently package Python 2 and Python 3, under the Scheme variable names
6746@code{python-2} and @code{python} as explained in @ref{Version Numbers}.
6747To avoid confusion and naming clashes with other programming languages, it
6748seems desirable that the name of a package for a Python module contains
6749the word @code{python}.
ef5dd60a 6750
cf4a9129
LC
6751Some modules are compatible with only one version of Python, others with both.
6752If the package Foo compiles only with Python 3, we name it
6753@code{python-foo}; if it compiles only with Python 2, we name it
6754@code{python2-foo}. If it is compatible with both versions, we create two
6755packages with the corresponding names.
ef5dd60a 6756
cf4a9129
LC
6757If a project already contains the word @code{python}, we drop this;
6758for instance, the module python-dateutil is packaged under the names
6759@code{python-dateutil} and @code{python2-dateutil}.
113daf62 6760
523e4896 6761
cf4a9129
LC
6762@node Perl Modules
6763@subsection Perl Modules
523e4896 6764
cf4a9129
LC
6765Perl programs standing for themselves are named as any other package,
6766using the lowercase upstream name.
6767For Perl packages containing a single class, we use the lowercase class name,
6768replace all occurrences of @code{::} by dashes and prepend the prefix
6769@code{perl-}.
6770So the class @code{XML::Parser} becomes @code{perl-xml-parser}.
6771Modules containing several classes keep their lowercase upstream name and
6772are also prepended by @code{perl-}. Such modules tend to have the word
6773@code{perl} somewhere in their name, which gets dropped in favor of the
6774prefix. For instance, @code{libwww-perl} becomes @code{perl-libwww}.
523e4896 6775
523e4896 6776
7fec52b7
AE
6777@node Fonts
6778@subsection Fonts
6779
6780For fonts that are in general not installed by a user for typesetting
6781purposes, or that are distributed as part of a larger software package,
6782we rely on the general packaging rules for software; for instance, this
6783applies to the fonts delivered as part of the X.Org system or fonts that
6784are part of TeX Live.
6785
6786To make it easier for a user to search for fonts, names for other packages
6787containing only fonts are constructed as follows, independently of the
6788upstream package name.
6789
6790The name of a package containing only one font family starts with
6791@code{font-}; it is followed by the foundry name and a dash @code{-}
6792if the foundry is known, and the font family name, in which spaces are
6793replaced by dashes (and as usual, all upper case letters are transformed
6794to lower case).
6795For example, the Gentium font family by SIL is packaged under the name
6796@code{font-sil-gentium}.
6797
6798For a package containing several font families, the name of the collection
6799is used in the place of the font family name.
6800For instance, the Liberation fonts consist of three families,
6801Liberation Sans, Liberation Serif and Liberation Mono.
6802These could be packaged separately under the names
6803@code{font-liberation-sans} and so on; but as they are distributed together
6804under a common name, we prefer to package them together as
6805@code{font-liberation}.
6806
6807In the case where several formats of the same font family or font collection
6808are packaged separately, a short form of the format, prepended by a dash,
6809is added to the package name. We use @code{-ttf} for TrueType fonts,
1b366ee4 6810@code{-otf} for OpenType fonts and @code{-type1} for PostScript Type 1
7fec52b7
AE
6811fonts.
6812
6813
b25937e3 6814
cf4a9129
LC
6815@node Bootstrapping
6816@section Bootstrapping
b25937e3 6817
cf4a9129 6818@c Adapted from the ELS 2013 paper.
b25937e3 6819
cf4a9129 6820@cindex bootstrapping
7889394e 6821
cf4a9129
LC
6822Bootstrapping in our context refers to how the distribution gets built
6823``from nothing''. Remember that the build environment of a derivation
6824contains nothing but its declared inputs (@pxref{Introduction}). So
6825there's an obvious chicken-and-egg problem: how does the first package
6826get built? How does the first compiler get compiled? Note that this is
6827a question of interest only to the curious hacker, not to the regular
6828user, so you can shamelessly skip this section if you consider yourself
6829a ``regular user''.
72b9d60d 6830
cf4a9129
LC
6831@cindex bootstrap binaries
6832The GNU system is primarily made of C code, with libc at its core. The
6833GNU build system itself assumes the availability of a Bourne shell and
6834command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
6835`grep'. Furthermore, build programs---programs that run
6836@code{./configure}, @code{make}, etc.---are written in Guile Scheme
6837(@pxref{Derivations}). Consequently, to be able to build anything at
6838all, from scratch, Guix relies on pre-built binaries of Guile, GCC,
6839Binutils, libc, and the other packages mentioned above---the
6840@dfn{bootstrap binaries}.
72b9d60d 6841
cf4a9129
LC
6842These bootstrap binaries are ``taken for granted'', though we can also
6843re-create them if needed (more on that later).
72b9d60d 6844
cf4a9129 6845@unnumberedsubsec Preparing to Use the Bootstrap Binaries
c79d54fe 6846
cf4a9129
LC
6847@c As of Emacs 24.3, Info-mode displays the image, but since it's a
6848@c large image, it's hard to scroll. Oh well.
6849@image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap derivations}
523e4896 6850
cf4a9129
LC
6851The figure above shows the very beginning of the dependency graph of the
6852distribution, corresponding to the package definitions of the @code{(gnu
6853packages bootstrap)} module. At this level of detail, things are
6854slightly complex. First, Guile itself consists of an ELF executable,
6855along with many source and compiled Scheme files that are dynamically
6856loaded when it runs. This gets stored in the @file{guile-2.0.7.tar.xz}
6857tarball shown in this graph. This tarball is part of Guix's ``source''
6858distribution, and gets inserted into the store with @code{add-to-store}
6859(@pxref{The Store}).
2e7b5cea 6860
cf4a9129
LC
6861But how do we write a derivation that unpacks this tarball and adds it
6862to the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
6863derivation---the first one that gets built---uses @code{bash} as its
6864builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
6865@code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar},
6866@file{xz}, and @file{mkdir} are statically-linked binaries, also part of
6867the Guix source distribution, whose sole purpose is to allow the Guile
6868tarball to be unpacked.
fb729425 6869
cf4a9129
LC
6870Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning
6871Guile that can be used to run subsequent build programs. Its first task
6872is to download tarballs containing the other pre-built binaries---this
6873is what the @code{.tar.xz.drv} derivations do. Guix modules such as
6874@code{ftp-client.scm} are used for this purpose. The
6875@code{module-import.drv} derivations import those modules in a directory
6876in the store, using the original layout. The
6877@code{module-import-compiled.drv} derivations compile those modules, and
6878write them in an output directory with the right layout. This
6879corresponds to the @code{#:modules} argument of
6880@code{build-expression->derivation} (@pxref{Derivations}).
fb729425 6881
cf4a9129
LC
6882Finally, the various tarballs are unpacked by the
6883derivations @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv},
6884etc., at which point we have a working C tool chain.
fb729425 6885
fb729425 6886
cf4a9129 6887@unnumberedsubsec Building the Build Tools
523e4896 6888
cf4a9129
LC
6889@c TODO: Add a package-level dependency graph generated from (gnu
6890@c packages base).
df2ce343 6891
cf4a9129
LC
6892Bootstrapping is complete when we have a full tool chain that does not
6893depend on the pre-built bootstrap tools discussed above. This
6894no-dependency requirement is verified by checking whether the files of
6895the final tool chain contain references to the @file{/gnu/store}
6896directories of the bootstrap inputs. The process that leads to this
6897``final'' tool chain is described by the package definitions found in
1f6f57df 6898the @code{(gnu packages commencement)} module.
df2ce343 6899
cf4a9129
LC
6900@c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
6901The first tool that gets built with the bootstrap binaries is
6902GNU Make, which is a prerequisite for all the following packages.
6903From there Findutils and Diffutils get built.
523e4896 6904
cf4a9129
LC
6905Then come the first-stage Binutils and GCC, built as pseudo cross
6906tools---i.e., with @code{--target} equal to @code{--host}. They are
6907used to build libc. Thanks to this cross-build trick, this libc is
6908guaranteed not to hold any reference to the initial tool chain.
4af2447e 6909
cf4a9129
LC
6910From there the final Binutils and GCC are built. GCC uses @code{ld}
6911from the final Binutils, and links programs against the just-built libc.
6912This tool chain is used to build the other packages used by Guix and by
6913the GNU Build System: Guile, Bash, Coreutils, etc.
4af2447e 6914
cf4a9129
LC
6915And voilà! At this point we have the complete set of build tools that
6916the GNU Build System expects. These are in the @code{%final-inputs}
dd164244
MW
6917variable of the @code{(gnu packages commencement)} module, and are
6918implicitly used by any package that uses @code{gnu-build-system}
1f6f57df 6919(@pxref{Build Systems, @code{gnu-build-system}}).
4af2447e 6920
4af2447e 6921
cf4a9129 6922@unnumberedsubsec Building the Bootstrap Binaries
4af2447e 6923
cf4a9129
LC
6924Because the final tool chain does not depend on the bootstrap binaries,
6925those rarely need to be updated. Nevertheless, it is useful to have an
6926automated way to produce them, should an update occur, and this is what
6927the @code{(gnu packages make-bootstrap)} module provides.
4af2447e 6928
cf4a9129
LC
6929The following command builds the tarballs containing the bootstrap
6930binaries (Guile, Binutils, GCC, libc, and a tarball containing a mixture
6931of Coreutils and other basic command-line tools):
4b2615e1 6932
cf4a9129
LC
6933@example
6934guix build bootstrap-tarballs
6935@end example
6936
6937The generated tarballs are those that should be referred to in the
6938@code{(gnu packages bootstrap)} module mentioned at the beginning of
6939this section.
6940
6941Still here? Then perhaps by now you've started to wonder: when do we
6942reach a fixed point? That is an interesting question! The answer is
6943unknown, but if you would like to investigate further (and have
6944significant computational and storage resources to do so), then let us
6945know.
6946
6947@node Porting
6948@section Porting to a New Platform
6949
6950As discussed above, the GNU distribution is self-contained, and
6951self-containment is achieved by relying on pre-built ``bootstrap
6952binaries'' (@pxref{Bootstrapping}). These binaries are specific to an
6953operating system kernel, CPU architecture, and application binary
6954interface (ABI). Thus, to port the distribution to a platform that is
6955not yet supported, one must build those bootstrap binaries, and update
6956the @code{(gnu packages bootstrap)} module to use them on that platform.
6957
6958Fortunately, Guix can @emph{cross compile} those bootstrap binaries.
6959When everything goes well, and assuming the GNU tool chain supports the
6960target platform, this can be as simple as running a command like this
6961one:
6962
6963@example
6964guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
6965@end example
6966
1c0c417d
LC
6967For this to work, the @code{glibc-dynamic-linker} procedure in
6968@code{(gnu packages bootstrap)} must be augmented to return the right
6969file name for libc's dynamic linker on that platform; likewise,
6970@code{system->linux-architecture} in @code{(gnu packages linux)} must be
6971taught about the new platform.
6972
cf4a9129 6973Once these are built, the @code{(gnu packages bootstrap)} module needs
1c0c417d
LC
6974to be updated to refer to these binaries on the target platform. That
6975is, the hashes and URLs of the bootstrap tarballs for the new platform
6976must be added alongside those of the currently supported platforms. The
6977bootstrap Guile tarball is treated specially: it is expected to be
6978available locally, and @file{gnu-system.am} has rules do download it for
6979the supported architectures; a rule for the new platform must be added
6980as well.
cf4a9129
LC
6981
6982In practice, there may be some complications. First, it may be that the
6983extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
6984above) is not recognized by all the GNU tools. Typically, glibc
6985recognizes some of these, whereas GCC uses an extra @code{--with-abi}
6986configure flag (see @code{gcc.scm} for examples of how to handle this).
6987Second, some of the required packages could fail to build for that
6988platform. Lastly, the generated binaries could be broken for some
6989reason.
4af2447e 6990
9bf3c1a7 6991@c *********************************************************************
8c01b9d0 6992@include contributing.texi
c78bd12b 6993
568717fd
LC
6994@c *********************************************************************
6995@node Acknowledgments
6996@chapter Acknowledgments
6997
6998Guix is based on the Nix package manager, which was designed and
4c7ac9aa
LC
6999implemented by Eelco Dolstra, with contributions from other people (see
7000the @file{nix/AUTHORS} file in Guix.) Nix pioneered functional package
568717fd
LC
7001management, and promoted unprecedented features, such as transactional
7002package upgrades and rollbacks, per-user profiles, and referentially
7003transparent build processes. Without this work, Guix would not exist.
7004
7005The Nix-based software distributions, Nixpkgs and NixOS, have also been
7006an inspiration for Guix.
7007
4c7ac9aa
LC
7008GNU@tie{}Guix itself is a collective work with contributions from a
7009number of people. See the @file{AUTHORS} file in Guix for more
7010information on these fine people. The @file{THANKS} file lists people
7011who have helped by reporting bugs, taking care of the infrastructure,
7012providing artwork and themes, making suggestions, and more---thank you!
7013
7014
568717fd
LC
7015@c *********************************************************************
7016@node GNU Free Documentation License
7017@appendix GNU Free Documentation License
7018
7019@include fdl-1.3.texi
7020
7021@c *********************************************************************
7022@node Concept Index
7023@unnumbered Concept Index
7024@printindex cp
7025
a85b83d2
LC
7026@node Programming Index
7027@unnumbered Programming Index
7028@syncodeindex tp fn
7029@syncodeindex vr fn
568717fd
LC
7030@printindex fn
7031
7032@bye
7033
7034@c Local Variables:
7035@c ispell-local-dictionary: "american";
7036@c End: