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