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