doc: Improve "Installing Guix from Guix" section.
[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
13Copyright @copyright{} 2012, 2013 Ludovic Courtès@*
14Copyright @copyright{} 2013 Andreas Enge@*
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
LC
31 Building packages with Guix.
32@end direntry
568717fd
LC
33
34@titlepage
7730d112
LC
35@title GNU Guix Reference Manual
36@subtitle Using the GNU Guix Functional Package Manager
568717fd 37@author Ludovic Courtès
da7cabd4 38@author Andreas Enge
acc08466 39@author Nikita Karetnikov
568717fd
LC
40
41@page
42@vskip 0pt plus 1filll
43Edition @value{EDITION} @*
44@value{UPDATED} @*
45
7df7a74e 46@insertcopying
568717fd
LC
47@end titlepage
48
568717fd
LC
49@contents
50
51@c *********************************************************************
52@node Top
f8348b91 53@top GNU Guix
568717fd 54
f8348b91
LC
55This document describes GNU Guix version @value{VERSION}, a functional
56package management tool written for the GNU system.
568717fd
LC
57
58@menu
59* Introduction:: What is Guix about?
bd5e766b 60* Installation:: Installing Guix.
eeaf4427 61* Package Management:: Package installation, upgrade, etc.
568717fd
LC
62* Programming Interface:: Using Guix in Scheme.
63* Utilities:: Package management commands.
a1ba8475 64* GNU Distribution:: Software for your friendly GNU system.
9bf3c1a7 65* Contributing:: Your help needed!
568717fd
LC
66
67* Acknowledgments:: Thanks!
68* GNU Free Documentation License:: The license of this manual.
69* Concept Index:: Concepts.
70* Function Index:: Functions.
71@end menu
72
73@c *********************************************************************
74@node Introduction
75@chapter Introduction
76
c80e7e55
LC
77GNU Guix@footnote{``Guix'' is pronounced like ``geeks'', or ``ɡiːks''
78using the international phonetic alphabet (IPA).} is a functional
79package management tool for the GNU system. Package management consists
4bfc4ea3
NK
80of all activities that relate to building packages from sources,
81honoring their build-time and run-time dependencies,
c80e7e55
LC
82installing packages in user environments, upgrading installed packages
83to new versions or rolling back to a previous set, removing unused
84software packages, etc.
568717fd
LC
85
86@cindex functional package management
87The term @dfn{functional} refers to a specific package management
88discipline. In Guix, the package build and installation process is seen
4bfc4ea3
NK
89as a function, in the mathematical sense. That function takes inputs,
90such as build scripts, a compiler, and libraries, and
91returns an installed package. As a pure function, its result depends
568717fd
LC
92solely on its inputs---for instance, it cannot refer to software or
93scripts that were not explicitly passed as inputs. A build function
4bfc4ea3
NK
94always produces the same result when passed a given set of inputs. It
95cannot alter the system's environment in
568717fd
LC
96any way; for instance, it cannot create, modify, or delete files outside
97of its build and installation directories. This is achieved by running
4bfc4ea3
NK
98build processes in isolated environments (or @dfn{chroots}), where only their
99explicit inputs are visible.
568717fd 100
e531ac2a 101@cindex store
568717fd 102The result of package build functions is @dfn{cached} in the file
e531ac2a
LC
103system, in a special directory called @dfn{the store} (@pxref{The
104Store}). Each package is installed in a directory of its own, in the
568717fd
LC
105store---by default under @file{/nix/store}. The directory name contains
106a hash of all the inputs used to build that package; thus, changing an
107input yields a different directory name.
108
109This approach is the foundation of Guix's salient features: support for
4bfc4ea3 110transactional package upgrade and rollback, per-user installation, and
eeaf4427 111garbage collection of packages (@pxref{Features}).
568717fd 112
4bfc4ea3 113Guix has a command-line interface, which allows users to build, install,
568717fd 114upgrade, and remove packages, as well as a Scheme programming interface.
568717fd 115
a1ba8475
LC
116Last but not least, Guix is used to build a distribution of the GNU
117system, with many GNU and non-GNU free software packages. @xref{GNU
118Distribution}.
119
bd5e766b
LC
120@c *********************************************************************
121@node Installation
122@chapter Installation
123
48febeb8
LC
124GNU Guix is available for download from its website at
125@url{http://www.gnu.org/software/guix/}. This section describes the
126software requirements of Guix, as well as how to install it and get
127ready to use it.
bd5e766b 128
b22a12fd 129The build procedure for Guix is the same as for other GNU software, and
1da983b9 130is not covered here. Please see the files @file{README} and
b22a12fd
LC
131@file{INSTALL} in the Guix source tree for additional details.
132
bd5e766b
LC
133@menu
134* Requirements:: Software needed to build and run Guix.
135* Setting Up the Daemon:: Preparing the build daemon's environment.
136* Invoking guix-daemon:: Running the build daemon.
137@end menu
138
139@node Requirements
140@section Requirements
141
142GNU Guix depends on the following packages:
143
144@itemize
4a328f73 145@item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.5 or later;
bd5e766b
LC
146@item @url{http://gnupg.org/, GNU libgcrypt}
147@end itemize
148
149Unless @code{--disable-daemon} was passed to @command{configure}, the
150following packages are also needed:
151
152@itemize
153@item @url{http://sqlite.org, SQLite 3}
154@item @url{http://www.bzip.org, libbz2}
155@item @url{http://gcc.gnu.org, GCC's g++}
156@end itemize
157
4bfc4ea3
NK
158When a working installation of @url{http://nixos.org/nix/, the Nix package
159manager} is available, you
bd5e766b 160can instead configure Guix with @code{--disable-daemon}. In that case,
4bfc4ea3 161Nix replaces the three dependencies above.
bd5e766b 162
b22a12fd
LC
163Guix is compatible with Nix, so it is possible to share the same store
164between both. To do so, you must pass @command{configure} not only the
165same @code{--with-store-dir} value, but also the same
4bfc4ea3
NK
166@code{--localstatedir} value. The latter is essential because it
167specifies where the database that stores metadata about the store is
168located, among other things. The default values are
b22a12fd 169@code{--with-store-dir=/nix/store} and @code{--localstatedir=/nix/var}.
4bfc4ea3
NK
170Note that @code{--disable-daemon} is not required if
171your goal is to share the store with Nix.
b22a12fd 172
bd5e766b
LC
173@node Setting Up the Daemon
174@section Setting Up the Daemon
175
176@cindex daemon
177Operations such as building a package or running the garbage collector
178are all performed by a specialized process, the @dfn{Guix daemon}, on
179behalf of clients. Only the daemon may access the store and its
180associated database. Thus, any operation that manipulates the store
181goes through the daemon. For instance, command-line tools such as
e49951eb 182@command{guix package} and @command{guix build} communicate with the
bd5e766b
LC
183daemon (@i{via} remote procedure calls) to instruct it what to do.
184
185In a standard multi-user setup, Guix and its daemon---the
186@command{guix-daemon} program---are installed by the system
187administrator; @file{/nix/store} is owned by @code{root} and
188@command{guix-daemon} runs as @code{root}. Unprivileged users may use
189Guix tools to build packages or otherwise access the store, and the
190daemon will do it on their behalf, ensuring that the store is kept in a
191consistent state, and allowing built packages to be shared among users.
192
193@cindex build users
194When @command{guix-daemon} runs as @code{root}, you may not want package
195build processes themselves to run as @code{root} too, for obvious
196security reasons. To avoid that, a special pool of @dfn{build users}
197should be created for use by build processes started by the daemon.
198These build users need not have a shell and a home directory: they will
199just be used when the daemon drops @code{root} privileges in build
200processes. Having several such users allows the daemon to launch
201distinct build processes under separate UIDs, which guarantees that they
202do not interfere with each other---an essential feature since builds are
203regarded as pure functions (@pxref{Introduction}).
204
205On a GNU/Linux system, a build user pool may be created like this (using
206Bash syntax and the @code{shadow} commands):
207
091196b3
LC
208@c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
209@c for why `-G' is needed.
bd5e766b
LC
210@example
211# groupadd guix-builder
212# for i in `seq 1 10`;
213 do
091196b3
LC
214 useradd -g guix-builder -G guix-builder \
215 -d /var/empty -s `which nologin` \
80ba8cc0 216 -c "Guix build user $i" guix-builder$i;
bd5e766b
LC
217 done
218@end example
219
220@noindent
221The @code{guix-daemon} program may then be run as @code{root} with:
222
223@example
224# guix-daemon --build-users-group=guix-builder
225@end example
226
b095792f
LC
227@noindent
228This way, the daemon starts build processes in a chroot, under one of
229the @code{guix-builder} users. On GNU/Linux, by default, the chroot
230environment contains nothing but the @code{/dev} and @code{/proc}
231directories@footnote{On some systems @code{/dev/shm}, which supports
232shared memory, is a symlink to another directory such as
233@code{/run/shm}, that is @emph{not} is the chroot. When that is the
234case, shared memory support is unavailable in the chroot environment.
235The workaround is to make sure that @file{/dev/shm} is directly a
236@code{tmpfs} mount point.}.
237
bd5e766b 238Guix may also be used in a single-user setup, with @command{guix-daemon}
1da983b9 239running as an unprivileged user. However, to maximize non-interference
bd5e766b
LC
240of build processes, the daemon still needs to perform certain operations
241that are restricted to @code{root} on GNU/Linux: it should be able to
242run build processes in a chroot, and to run them under different UIDs.
243To that end, the @command{nix-setuid-helper} program is provided; it is
244a small C program (less than 300 lines) that, if it is made setuid
245@code{root}, can be executed by the daemon to perform these operations
246on its behalf. The @code{root}-owned @file{/etc/nix-setuid.conf} file
247is read by @command{nix-setuid-helper}; it should contain exactly two
248words: the user name under which the authorized @command{guix-daemon}
249runs, and the name of the build users group.
250
251If you are installing Guix as an unprivileged user and do not have the
252ability to make @file{nix-setuid-helper} setuid-@code{root}, it is still
253possible to run @command{guix-daemon}. However, build processes will
254not be isolated from one another, and not from the rest of the system.
255Thus, build processes may interfere with each other, and may access
256programs, libraries, and other files available on the system---making it
257much harder to view them as @emph{pure} functions.
258
259@node Invoking guix-daemon
260@section Invoking @command{guix-daemon}
261
262The @command{guix-daemon} program implements all the functionality to
263access the store. This includes launching build processes, running the
264garbage collector, querying the availability of a build result, etc. It
265is normally run as @code{root} like this:
266
267@example
268# guix-daemon --build-users-group=guix-builder
269@end example
270
271@noindent
272For details on how to set it up, @ref{Setting Up the Daemon}.
273
274By default, @command{guix-daemon} launches build processes under
275different UIDs, taken from the build group specified with
276@code{--build-users-group}. In addition, each build process is run in a
277chroot environment that only contains the subset of the store that the
278build process depends on, as specified by its derivation
279(@pxref{Programming Interface, derivation}), plus a set of specific
280system directories. By default, the latter contains @file{/dev} and
281@file{/dev/pts}.
282
283The following command-line options are supported:
284
285@table @code
286@item --build-users-group=@var{group}
287Take users from @var{group} to run build processes (@pxref{Setting Up
288the Daemon, build users}).
289
6858f9d1 290@item --no-substitutes
b5385b52 291@cindex substitutes
6858f9d1
LC
292Do not use substitutes for build products. That is, always build things
293locally instead of allowing downloads of pre-built binaries.
294
b5385b52
LC
295By default substitutes are used, unless the client---such as the
296@command{guix package} command---is explicitly invoked with
297@code{--no-substitutes}.
298
299When the daemon runs with @code{--no-substitutes}, clients can still
300explicitly enable substitution @i{via} the @code{set-build-options}
301remote procedure call (@pxref{The Store}).
302
bd5e766b
LC
303@item --cache-failures
304Cache build failures. By default, only successful builds are cached.
305
306@item --cores=@var{n}
307@itemx -c @var{n}
308Use @var{n} CPU cores to build each derivation; @code{0} means as many
309as available.
310
311The default value is @code{1}, but it may be overridden by clients, such
e49951eb
MW
312as the @code{--cores} option of @command{guix build} (@pxref{Invoking
313guix build}).
bd5e766b
LC
314
315The effect is to define the @code{NIX_BUILD_CORES} environment variable
316in the build process, which can then use it to exploit internal
317parallelism---for instance, by running @code{make -j$NIX_BUILD_CORES}.
318
319@item --max-jobs=@var{n}
320@itemx -M @var{n}
321Allow at most @var{n} build jobs in parallel. The default value is
322@code{1}.
323
324@item --debug
325Produce debugging output.
326
327This is useful to debug daemon start-up issues, but then it may be
328overridden by clients, for example the @code{--verbosity} option of
e49951eb 329@command{guix build} (@pxref{Invoking guix build}).
bd5e766b
LC
330
331@item --chroot-directory=@var{dir}
332Add @var{dir} to the build chroot.
333
334Doing this may change the result of build processes---for instance if
335they use optional dependencies found in @var{dir} when it is available,
336and not otherwise. For that reason, it is not recommended to do so.
337Instead, make sure that each derivation declares all the inputs that it
338needs.
339
340@item --disable-chroot
341Disable chroot builds.
342
343Using this option is not recommended since, again, it would allow build
344processes to gain access to undeclared dependencies.
345
346@item --disable-log-compression
347Disable compression of the build logs.
348
1da983b9
LC
349Unless @code{--lose-logs} is used, all the build logs are kept in the
350@var{localstatedir}. To save space, the daemon automatically compresses
351them with bzip2 by default. This option disables that.
352
bd5e766b
LC
353@item --disable-store-optimization
354Disable automatic file ``deduplication'' in the store.
355
1da983b9
LC
356By default, files added to the store are automatically ``deduplicated'':
357if a newly added file is identical as another one found in the store,
358the daemon makes the new file a hard link to the other file. This
359slightly increases the input/output load at the end of a build process.
360This option disables this.
361
bd5e766b
LC
362@item --impersonate-linux-2.6
363On Linux-based systems, impersonate Linux 2.6. This means that the
364kernel's @code{uname} system call will report 2.6 as the release number.
365
366This might be helpful to build programs that (usually wrongfully) depend
367on the kernel version number.
368
369@item --lose-logs
370Do not keep build logs. By default they are kept under
371@code{@var{localstatedir}/nix/log}.
372
373@item --system=@var{system}
374Assume @var{system} as the current system type. By default it is the
375architecture/kernel pair found at configure time, such as
376@code{x86_64-linux}.
b8d2aa26
LC
377
378@item --listen=@var{socket}
379Listen for connections on @var{socket}, the file name of a Unix-domain
380socket. The default socket is
381@file{@var{localstatedir}/daemon-socket/socket}. This option is only
382useful in exceptional circumstances, such as if you need to run several
383daemons on the same machine.
bd5e766b
LC
384@end table
385
386
eeaf4427
LC
387@c *********************************************************************
388@node Package Management
389@chapter Package Management
390
f8348b91 391The purpose of GNU Guix is to allow users to easily install, upgrade, and
eeaf4427
LC
392remove software packages, without having to know about their build
393procedure or dependencies. Guix also goes beyond this obvious set of
394features.
395
396This chapter describes the main features of Guix, as well as the package
397management tools it provides.
398
399@menu
400* Features:: How Guix will make your life brighter.
e49951eb 401* Invoking guix package:: Package installation, removal, etc.
6e721c4d 402* Packages with Multiple Outputs:: Single source package, multiple outputs.
e49951eb 403* Invoking guix gc:: Running the garbage collector.
f651b477 404* Invoking guix pull:: Fetching the latest Guix and distribution.
eeaf4427
LC
405@end menu
406
407@node Features
408@section Features
409
410When using Guix, each package ends up in the @dfn{package store}, in its
411own directory---something that resembles
412@file{/nix/store/xxx-package-1.2}, where @code{xxx} is a base32 string.
413
414Instead of referring to these directories, users have their own
415@dfn{profile}, which points to the packages that they actually want to
821b0015
LC
416use. These profiles are stored within each user's home directory, at
417@code{$HOME/.guix-profile}.
eeaf4427 418
821b0015 419For example, @code{alice} installs GCC 4.7.2. As a result,
eeaf4427 420@file{/home/alice/.guix-profile/bin/gcc} points to
821b0015
LC
421@file{/nix/store/@dots{}-gcc-4.7.2/bin/gcc}. Now, on the same machine,
422@code{bob} had already installed GCC 4.8.0. The profile of @code{bob}
423simply continues to point to
424@file{/nix/store/@dots{}-gcc-4.8.0/bin/gcc}---i.e., both versions of GCC
425coexist on the same system without any interference.
eeaf4427 426
e49951eb
MW
427The @command{guix package} command is the central tool to manage
428packages (@pxref{Invoking guix package}). It operates on those per-user
821b0015 429profiles, and can be used @emph{with normal user privileges}.
eeaf4427
LC
430
431The command provides the obvious install, remove, and upgrade
432operations. Each invocation is actually a @emph{transaction}: either
ba55b1cb 433the specified operation succeeds, or nothing happens. Thus, if the
e49951eb 434@command{guix package} process is terminated during the transaction,
eeaf4427
LC
435or if a power outage occurs during the transaction, then the user's
436profile remains in its previous state, and remains usable.
437
438In addition, any package transaction may be @emph{rolled back}. So, if,
439for example, an upgrade installs a new version of a package that turns
440out to have a serious bug, users may roll back to the previous instance
441of their profile, which was known to work well.
442
443All those packages in the package store may be @emph{garbage-collected}.
444Guix can determine which packages are still referenced by the user
fe8ff028 445profiles, and remove those that are provably no longer referenced
e49951eb 446(@pxref{Invoking guix gc}). Users may also explicitly remove old
fe8ff028
LC
447generations of their profile so that the packages they refer to can be
448collected.
eeaf4427
LC
449
450Finally, Guix takes a @dfn{purely functional} approach to package
451management, as described in the introduction (@pxref{Introduction}).
452Each @file{/nix/store} package directory name contains a hash of all the
453inputs that were used to build that package---compiler, libraries, build
454scripts, etc. This direct correspondence allows users to make sure a
455given package installation matches the current state of their
a1ba8475 456distribution, and helps maximize @dfn{reproducibility}.
eeaf4427 457
18f2887b 458@cindex substitute
eeaf4427 459This foundation allows Guix to support @dfn{transparent binary/source
3b78d1ea 460deployment}. When a pre-built binary for a @file{/nix/store} path is
18f2887b
LC
461available from an external source---a @dfn{substitute}, Guix just
462downloads it@footnote{@c XXX: Remove me when outdated.
463As of version @value{VERSION}, substitutes are downloaded from
464@url{http://hydra.gnu.org/} but are @emph{not} authenticated---i.e.,
465Guix cannot tell whether binaries it downloaded have been tampered with,
466nor whether they come from the genuine @code{gnu.org} build farm. This
467will be fixed in future versions. In the meantime, concerned users can
468opt for @code{--no-substitutes} (@pxref{Invoking guix-daemon}).};
469otherwise, it builds the package from source, locally.
eeaf4427 470
e49951eb
MW
471@node Invoking guix package
472@section Invoking @command{guix package}
eeaf4427 473
e49951eb 474The @command{guix package} command is the tool that allows users to
eeaf4427
LC
475install, upgrade, and remove packages, as well as rolling back to
476previous configurations. It operates only on the user's own profile,
477and works with normal user privileges (@pxref{Features}). Its syntax
478is:
479
480@example
e49951eb 481guix package @var{options}
eeaf4427
LC
482@end example
483
ba55b1cb 484Primarily, @var{options} specifies the operations to be performed during
eeaf4427
LC
485the transaction. Upon completion, a new profile is created, but
486previous generations of the profile remain available, should the user
487want to roll back.
488
b9e5c0a9 489For each user, a symlink to the user's default profile is automatically
0ec1af59 490created in @file{$HOME/.guix-profile}. This symlink always points to the
b9e5c0a9
LC
491current generation of the user's default profile. Thus, users can add
492@file{$HOME/.guix-profile/bin} to their @code{PATH} environment
493variable, and so on.
494
0ec1af59
LC
495In a multi-user setup, user profiles must be stored in a place
496registered as a @dfn{garbage-collector root}, which
e49951eb 497@file{$HOME/.guix-profile} points to (@pxref{Invoking guix gc}). That
0ec1af59
LC
498directory is normally
499@code{@var{localstatedir}/profiles/per-user/@var{user}}, where
500@var{localstatedir} is the value passed to @code{configure} as
501@code{--localstatedir}, and @var{user} is the user name. It must be
502created by @code{root}, with @var{user} as the owner. When it does not
70c43291
LC
503exist, or is not owned by @var{user}, @command{guix package} emits an
504error about it.
0ec1af59
LC
505
506The @var{options} can be among the following:
507
eeaf4427
LC
508@table @code
509
510@item --install=@var{package}
51c8d790 511@itemx -i @var{package}
eeaf4427
LC
512Install @var{package}.
513
514@var{package} may specify either a simple package name, such as
515@code{guile}, or a package name followed by a hyphen and version number,
dc5669cd
MW
516such as @code{guile-1.8.8}. If no version number is specified, the
517newest available version will be selected. In addition, @var{package}
518may contain a colon, followed by the name of one of the outputs of the
6e721c4d
LC
519package, as in @code{gcc:doc} or @code{binutils-2.22:lib}
520(@pxref{Packages with Multiple Outputs}).
eeaf4427 521
461572cc
LC
522@cindex propagated inputs
523Sometimes packages have @dfn{propagated inputs}: these are dependencies
524that automatically get installed along with the required package.
525
526An example is the GNU MPC library: its C header files refer to those of
527the GNU MPFR library, which in turn refer to those of the GMP library.
528Thus, when installing MPC, the MPFR and GMP libraries also get installed
529in the profile; removing MPC also removes MPFR and GMP---unless they had
530also been explicitly installed independently.
531
ba7ea5ce 532Besides, packages sometimes rely on the definition of environment
5924080d 533variables for their search paths (see explanation of
ba7ea5ce 534@code{--search-paths} below). Any missing or possibly incorrect
5924080d
LC
535environment variable definitions are reported here.
536
ef010c0f 537@c XXX: keep me up-to-date
5924080d 538Finally, when installing a GNU package, the tool reports the
ef010c0f
LC
539availability of a newer upstream version. In the future, it may provide
540the option of installing directly from the upstream version, even if
541that version is not yet in the distribution.
542
5d4b411f
LC
543@item --install-from-expression=@var{exp}
544@itemx -e @var{exp}
545Install the package @var{exp} evaluates to.
546
547@var{exp} must be a Scheme expression that evaluates to a
548@code{<package>} object. This option is notably useful to disambiguate
549between same-named variants of a package, with expressions such as
550@code{(@@ (gnu packages base) guile-final)}.
551
552Note that this option installs the first output of the specified
553package, which may be insufficient when needing a specific output of a
554multiple-output package.
555
eeaf4427
LC
556@item --remove=@var{package}
557@itemx -r @var{package}
558Remove @var{package}.
559
13ed095c
LC
560As for @code{--install}, @var{package} may specify a version number
561and/or output name in addition to the package name. For instance,
562@code{-r glibc:debug} would remove the @code{debug} output of
563@code{glibc}.
564
acb6ba25
CR
565@item --upgrade[=@var{regexp}]
566@itemx -u [@var{regexp}]
567Upgrade all the installed packages. When @var{regexp} is specified, upgrade
568only installed packages whose name matches @var{regexp}.
eeaf4427 569
f651b477
LC
570Note that this upgrades package to the latest version of packages found
571in the distribution currently installed. To update your distribution,
572you should regularly run @command{guix pull} (@pxref{Invoking guix
573pull}).
574
24e262f0
LC
575@item --roll-back
576Roll back to the previous @dfn{generation} of the profile---i.e., undo
577the last transaction.
578
579When combined with options such as @code{--install}, roll back occurs
580before any other actions.
581
d9307267 582When rolling back from the first generation that actually contains
4b2bc804
NK
583installed packages, the profile is made to point to the @dfn{zeroth
584generation}, which contains no files apart from its own meta-data.
d9307267 585
82fe08ed
LC
586Installing, removing, or upgrading packages from a generation that has
587been rolled back to overwrites previous future generations. Thus, the
588history of a profile's generations is always linear.
589
5924080d
LC
590@item --search-paths
591@cindex search paths
592Report environment variable definitions, in Bash syntax, that may be
593needed in order to use the set of installed packages. These environment
594variables are used to specify @dfn{search paths} for files used by some
595of the installed packages.
596
597For example, GCC needs the @code{CPATH} and @code{LIBRARY_PATH}
598environment variables to be defined so it can look for headers and
599libraries in the user's profile (@pxref{Environment Variables,,, gcc,
600Using the GNU Compiler Collection (GCC)}). If GCC and, say, the C
601library are installed in the profile, then @code{--search-paths} will
602suggest setting these variables to @code{@var{profile}/include} and
603@code{@var{profile}/lib}, respectively.
604
eeaf4427
LC
605@item --profile=@var{profile}
606@itemx -p @var{profile}
607Use @var{profile} instead of the user's default profile.
608
609@item --dry-run
610@itemx -n
611Show what would be done without actually doing it.
612
56b1f4b7
LC
613@item --fallback
614When substituting a pre-built binary fails, fall back to building
615packages locally.
616
3b824605 617@item --no-substitutes
b5385b52
LC
618Do not use substitutes for build products. That is, always build things
619locally instead of allowing downloads of pre-built binaries.
620
621@item --max-silent-time=@var{seconds}
969e678e 622Same as for @command{guix build} (@pxref{Invoking guix build}).
3b824605 623
70915c1a
LC
624@item --verbose
625Produce verbose output. In particular, emit the environment's build log
626on the standard error port.
627
eeaf4427
LC
628@item --bootstrap
629Use the bootstrap Guile to build the profile. This option is only
630useful to distribution developers.
631
632@end table
633
e49951eb 634In addition to these actions @command{guix package} supports the
733b4130
LC
635following options to query the current state of a profile, or the
636availability of packages:
eeaf4427 637
733b4130
LC
638@table @option
639
acc08466
NK
640@item --search=@var{regexp}
641@itemx -s @var{regexp}
642List the available packages whose synopsis or description matches
299112d3
LC
643@var{regexp}. Print all the meta-data of matching packages in
644@code{recutils} format (@pxref{Top, GNU recutils databases,, recutils,
645GNU recutils manual}).
acc08466 646
299112d3
LC
647This allows specific fields to be extracted using the @command{recsel}
648command, for instance:
649
650@example
e49951eb 651$ guix package -s malloc | recsel -p name,version
299112d3
LC
652name: glibc
653version: 2.17
654
655name: libgc
656version: 7.2alpha6
657@end example
acc08466 658
733b4130
LC
659@item --list-installed[=@var{regexp}]
660@itemx -I [@var{regexp}]
bd9bde1c
LC
661List the currently installed packages in the specified profile, with the
662most recently installed packages shown last. When @var{regexp} is
663specified, list only installed packages whose name matches @var{regexp}.
733b4130
LC
664
665For each installed package, print the following items, separated by
666tabs: the package name, its version string, the part of the package that
667is installed (for instance, @code{out} for the default output,
668@code{include} for its headers, etc.), and the path of this package in
669the store.
670
64fc89b6
LC
671@item --list-available[=@var{regexp}]
672@itemx -A [@var{regexp}]
a1ba8475
LC
673List packages currently available in the software distribution
674(@pxref{GNU Distribution}). When @var{regexp} is specified, list only
675installed packages whose name matches @var{regexp}.
64fc89b6
LC
676
677For each package, print the following items separated by tabs: its name,
6e721c4d
LC
678its version string, the parts of the package (@pxref{Packages with
679Multiple Outputs}), and the source location of its definition.
64fc89b6 680
f566d765
LC
681@item --list-generations[=@var{pattern}]
682@itemx -l [@var{pattern}]
683Return a list of generations along with their creation dates; for each
684generation, show the installed packages, with the most recently
4b2bc804
NK
685installed packages shown last. Note that the zeroth generation is never
686shown.
f566d765
LC
687
688For each installed package, print the following items, separated by
689tabs: the name of a package, its version string, the part of the package
690that is installed (@pxref{Packages with Multiple Outputs}), and the
691location of this package in the store.
692
693When @var{pattern} is used, the command returns only matching
694generations. Valid patterns include:
695
696@itemize
697@item @emph{Integers and comma-separated integers}. Both patterns denote
698generation numbers. For instance, @code{--list-generations=1} returns
699the first one.
700
701And @code{--list-generations=1,8,2} outputs three generations in the
702specified order. Neither spaces nor trailing commas are allowed.
703
704@item @emph{Ranges}. @code{--list-generations=2..9} prints the
705specified generations and everything in between. Note that the start of
706a range must be lesser than its end.
707
708It is also possible to omit the endpoint. For example,
709@code{--list-generations=2..}, returns all generations starting from the
710second one.
711
712@item @emph{Durations}. You can also get the last @emph{N}@tie{}days, weeks,
713or months by passing an integer along with the first letter of the
d7ddb257
LC
714duration. For example, @code{--list-generations=20d} lists generations
715that are up to 20 days old.
f566d765
LC
716@end itemize
717
b7884ca3
NK
718@item --delete-generations[=@var{pattern}]
719@itemx -d [@var{pattern}]
d7ddb257
LC
720When @var{pattern} is omitted, delete all generations except the current
721one.
b7884ca3
NK
722
723This command accepts the same patterns as @option{--list-generations}.
d7ddb257
LC
724When @var{pattern} is specified, delete the matching generations. When
725@var{pattern} specifies a duration, generations @emph{older} than the
726specified duration match. For instance, @code{--delete-generations=1m}
727deletes generations that are more than one month old.
728
729If the current generation matches, it is deleted atomically---i.e., by
730switching to the previous available generation. Note that the zeroth
731generation is never deleted.
b7884ca3 732
1bb9900a
LC
733Note that deleting generations prevents roll-back to them.
734Consequently, this command must be used with care.
735
733b4130 736@end table
eeaf4427 737
6e721c4d
LC
738@node Packages with Multiple Outputs
739@section Packages with Multiple Outputs
740
741@cindex multiple-output packages
742@cindex package outputs
743
744Often, packages defined in Guix have a single @dfn{output}---i.e., the
745source package leads exactly one directory in the store. When running
746@command{guix package -i glibc}, one installs the default output of the
747GNU libc package; the default output is called @code{out}, but its name
748can be omitted as shown in this command. In this particular case, the
749default output of @code{glibc} contains all the C header files, shared
750libraries, static libraries, Info documentation, and other supporting
751files.
752
753Sometimes it is more appropriate to separate the various types of files
754produced from a single source package into separate outputs. For
755instance, the GLib C library (used by GTK+ and related packages)
756installs more than 20 MiB of reference documentation as HTML pages.
757To save space for users who do not need it, the documentation goes to a
758separate output, called @code{doc}. To install the main GLib output,
759which contains everything but the documentation, one would run:
760
761@example
762guix package -i glib
763@end example
764
765The command to install its documentation is:
766
767@example
768guix package -i glib:doc
769@end example
770
771Some packages install programs with different ``dependency footprints''.
772For instance, the WordNet package install both command-line tools and
773graphical user interfaces (GUIs). The former depend solely on the C
774library, whereas the latter depend on Tcl/Tk and the underlying X
775libraries. In this case, we leave the command-line tools in the default
776output, whereas the GUIs are in a separate output. This allows users
777who do not need the GUIs to save space.
778
779There are several such multiple-output packages in the GNU distribution.
91ef73d4
LC
780Other conventional output names include @code{lib} for libraries and
781possibly header files, @code{bin} for stand-alone programs, and
782@code{debug} for debugging information (@pxref{Installing Debugging
783Files}). The outputs of a packages are listed in the third column of
784the output of @command{guix package --list-available} (@pxref{Invoking
785guix package}).
6e721c4d 786
eeaf4427 787
e49951eb
MW
788@node Invoking guix gc
789@section Invoking @command{guix gc}
fe8ff028
LC
790
791@cindex garbage collector
792Packages that are installed but not used may be @dfn{garbage-collected}.
e49951eb 793The @command{guix gc} command allows users to explicitly run the garbage
fe8ff028
LC
794collector to reclaim space from the @file{/nix/store} directory.
795
796The garbage collector has a set of known @dfn{roots}: any file under
797@file{/nix/store} reachable from a root is considered @dfn{live} and
798cannot be deleted; any other file is considered @dfn{dead} and may be
799deleted. The set of garbage collector roots includes default user
e49951eb
MW
800profiles, and may be augmented with @command{guix build --root}, for
801example (@pxref{Invoking guix build}).
fe8ff028 802
1bb9900a
LC
803Prior to running @code{guix gc --collect-garbage} to make space, it is
804often useful to remove old generations from user profiles; that way, old
805package builds referenced by those generations can be reclaimed. This
806is achieved by running @code{guix package --delete-generations}
807(@pxref{Invoking guix package}).
808
e49951eb 809The @command{guix gc} command has three modes of operation: it can be
fe8ff028
LC
810used to garbage-collect any dead files (the default), to delete specific
811files (the @code{--delete} option), or to print garbage-collector
812information. The available options are listed below:
813
814@table @code
815@item --collect-garbage[=@var{min}]
816@itemx -C [@var{min}]
817Collect garbage---i.e., unreachable @file{/nix/store} files and
818sub-directories. This is the default operation when no option is
819specified.
820
821When @var{min} is given, stop once @var{min} bytes have been collected.
822@var{min} may be a number of bytes, or it may include a unit as a
823suffix, such as @code{MiB} for mebibytes and @code{GB} for gigabytes.
824
825When @var{min} is omitted, collect all the garbage.
826
827@item --delete
828@itemx -d
829Attempt to delete all the store files and directories specified as
830arguments. This fails if some of the files are not in the store, or if
831they are still live.
832
833@item --list-dead
834Show the list of dead files and directories still present in the
835store---i.e., files and directories no longer reachable from any root.
836
837@item --list-live
838Show the list of live store files and directories.
ba8b732d
LC
839
840@end table
841
842In addition, the references among existing store files can be queried:
843
844@table @code
845
846@item --references
847@itemx --referrers
848List the references (respectively, the referrers) of store files given
849as arguments.
850
8e59fdd5
LC
851@item --requisites
852@itemx -R
853List the requisites of the store files passed as arguments. Requisites
854include the store files themselves, their references, and the references
855of these, recursively. In other words, the returned list is the
856@dfn{transitive closure} of the store files.
857
fe8ff028
LC
858@end table
859
eeaf4427 860
f651b477
LC
861@node Invoking guix pull
862@section Invoking @command{guix pull}
863
864Packages are installed or upgraded to the latest version available in
865the distribution currently available on your local machine. To update
866that distribution, along with the Guix tools, you must run @command{guix
867pull}: the command downloads the latest Guix source code and package
868descriptions, and deploys it.
869
870On completion, @command{guix package} will use packages and package
871versions from this just-retrieved copy of Guix. Not only that, but all
872the Guix commands and Scheme modules will also be taken from that latest
873version. New @command{guix} sub-commands added by the update also
874become available.
875
876The @command{guix pull} command is usually invoked with no arguments,
877but it supports the following options:
878
879@table @code
880@item --verbose
881Produce verbose output, writing build logs to the standard error output.
882
ab5d72ad
LC
883@item --url=@var{url}
884Download the source tarball of Guix from @var{url}.
885
886By default, the tarball is taken from its canonical address at
887@code{gnu.org}, for the stable branch of Guix.
888
f651b477
LC
889@item --bootstrap
890Use the bootstrap Guile to build the latest Guix. This option is only
891useful to Guix developers.
892@end table
893
568717fd
LC
894@c *********************************************************************
895@node Programming Interface
896@chapter Programming Interface
897
3dc1970d
LC
898GNU Guix provides several Scheme programming interfaces (APIs) to
899define, build, and query packages. The first interface allows users to
900write high-level package definitions. These definitions refer to
901familiar packaging concepts, such as the name and version of a package,
902its build system, and its dependencies. These definitions can then be
903turned into concrete build actions.
904
ba55b1cb 905Build actions are performed by the Guix daemon, on behalf of users. In a
3dc1970d
LC
906standard setup, the daemon has write access to the store---the
907@file{/nix/store} directory---whereas users do not. The recommended
908setup also has the daemon perform builds in chroots, under a specific
909build users, to minimize interference with the rest of the system.
910
911@cindex derivation
912Lower-level APIs are available to interact with the daemon and the
913store. To instruct the daemon to perform a build action, users actually
914provide it with a @dfn{derivation}. A derivation is a low-level
915representation of the build actions to be taken, and the environment in
916which they should occur---derivations are to package definitions what
917assembly is to C programs.
918
919This chapter describes all these APIs in turn, starting from high-level
920package definitions.
921
568717fd 922@menu
b860f382
LC
923* Defining Packages:: Defining new packages.
924* The Store:: Manipulating the package store.
925* Derivations:: Low-level interface to package derivations.
926* The Store Monad:: Purely functional interface to the store.
568717fd
LC
927@end menu
928
929@node Defining Packages
930@section Defining Packages
931
3dc1970d
LC
932The high-level interface to package definitions is implemented in the
933@code{(guix packages)} and @code{(guix build-system)} modules. As an
934example, the package definition, or @dfn{recipe}, for the GNU Hello
935package looks like this:
936
937@example
b22a12fd
LC
938(use-modules (guix packages)
939 (guix download)
940 (guix build-system gnu)
941 (guix licenses))
942
3dc1970d
LC
943(define hello
944 (package
945 (name "hello")
946 (version "2.8")
947 (source (origin
948 (method url-fetch)
949 (uri (string-append "mirror://gnu/hello/hello-" version
950 ".tar.gz"))
951 (sha256
952 (base32 "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6"))))
953 (build-system gnu-build-system)
954 (inputs `(("gawk" ,gawk)))
955 (synopsis "GNU Hello")
956 (description "Yeah...")
957 (home-page "http://www.gnu.org/software/hello/")
b22a12fd 958 (license gpl3+)))
3dc1970d
LC
959@end example
960
961@noindent
962Without being a Scheme expert, the reader may have guessed the meaning
963of the various fields here. This expression binds variable @var{hello}
964to a @code{<package>} object, which is essentially a record
965(@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}).
966This package object can be inspected using procedures found in the
967@code{(guix packages)} module; for instance, @code{(package-name hello)}
968returns---surprise!---@code{"hello"}.
969
970There are a few points worth noting in the above package definition:
971
972@itemize
973@item
974The @code{source} field of the package is an @code{<origin>} object.
975Here, the @code{url-fetch} method from @code{(guix download)} is used,
976meaning that the source is a file to be downloaded over FTP or HTTP.
977
978The @code{mirror://gnu} prefix instructs @code{url-fetch} to use one of
979the GNU mirrors defined in @code{(guix download)}.
980
981The @code{sha256} field specifies the expected SHA256 hash of the file
982being downloaded. It is mandatory, and allows Guix to check the
983integrity of the file. The @code{(base32 @dots{})} form introduces the
6c365eca 984base32 representation of the hash. You can obtain this information with
210cc920
LC
985@code{guix download} (@pxref{Invoking guix download}) and @code{guix
986hash} (@pxref{Invoking guix hash}).
3dc1970d 987
f9cc8971
LC
988@cindex patches
989When needed, the @code{origin} form can also have a @code{patches} field
990listing patches to be applied, and a @code{snippet} field giving a
991Scheme expression to modify the source code.
992
3dc1970d
LC
993@item
994@cindex GNU Build System
995The @code{build-system} field is set to @var{gnu-build-system}. The
996@var{gnu-build-system} variable is defined in the @code{(guix
997build-system gnu)} module, and is bound to a @code{<build-system>}
998object.
999
1000Naturally, @var{gnu-build-system} represents the familiar GNU Build
1001System, and variants thereof (@pxref{Configuration, configuration and
1002makefile conventions,, standards, GNU Coding Standards}). In a
ba55b1cb 1003nutshell, packages using the GNU Build System may be configured, built,
3dc1970d
LC
1004and installed with the usual @code{./configure && make && make check &&
1005make install} command sequence. This is what @var{gnu-build-system}
1006does.
1007
1008In addition, @var{gnu-build-system} ensures that the ``standard''
1009environment for GNU packages is available. This includes tools such as
1010GCC, Coreutils, Bash, Make, Diffutils, and Patch.
1011
1012@item
1013The @code{inputs} field specifies inputs to the build process---i.e.,
1014build-time or run-time dependencies of the package. Here, we define an
1015input called @code{"gawk"} whose value is that of the @var{gawk}
1016variable; @var{gawk} is itself bound to a @code{<package>} object.
1017
1018Note that GCC, Coreutils, Bash, and other essential tools do not need to
1019be specified as inputs here. Instead, @var{gnu-build-system} takes care
1020of ensuring that they are present.
1021
1022However, any other dependencies need to be specified in the
1023@code{inputs} field. Any dependency not specified here will simply be
1024unavailable to the build process, possibly leading to a build failure.
1025@end itemize
1026
1027There are other fields that package definitions may provide. Of
1028particular interest is the @code{arguments} field. When specified, it
1029must be bound to a list of additional arguments to be passed to the
1030build system. For instance, the above definition could be augmented
1031with the following field initializer:
1032
1033@example
1034 (arguments `(#:tests? #f
1035 #:configure-flags '("--enable-silent-rules")))
1036@end example
1037
1038@noindent
1039These are keyword arguments (@pxref{Optional Arguments, keyword
1040arguments in Guile,, guile, GNU Guile Reference Manual}). They are
1041passed to @var{gnu-build-system}, which interprets them as meaning ``do
1042not run @code{make check}'', and ``run @file{configure} with the
874e6874
LC
1043@code{--enable-silent-rules} flag''. The value of these keyword
1044parameters is actually evaluated in the @dfn{build stratum}---i.e., by a
1045Guile process launched by the daemon (@pxref{Derivations}).
3dc1970d
LC
1046
1047Once a package definition is in place@footnote{Simple package
1048definitions like the one above may be automatically converted from the
e49951eb
MW
1049Nixpkgs distribution using the @command{guix import} command.}, the
1050package may actually be built using the @code{guix build} command-line
37166310
LC
1051tool (@pxref{Invoking guix build}). Eventually, updating the package
1052definition to a new upstream version can be partly automated by the
1053@command{guix refresh} command (@pxref{Invoking guix refresh}).
3dc1970d
LC
1054
1055Behind the scenes, a derivation corresponding to the @code{<package>}
1056object is first computed by the @code{package-derivation} procedure.
1057That derivation is stored in a @code{.drv} file under @file{/nix/store}.
ba55b1cb 1058The build actions it prescribes may then be realized by using the
3dc1970d
LC
1059@code{build-derivations} procedure (@pxref{The Store}).
1060
1061@deffn {Scheme Procedure} package-derivation @var{store} @var{package} [@var{system}]
59688fc4
LC
1062Return the @code{<derivation>} object of @var{package} for @var{system}
1063(@pxref{Derivations}).
3dc1970d
LC
1064
1065@var{package} must be a valid @code{<package>} object, and @var{system}
1066must be a string denoting the target system type---e.g.,
1067@code{"x86_64-linux"} for an x86_64 Linux-based GNU system. @var{store}
1068must be a connection to the daemon, which operates on the store
1069(@pxref{The Store}).
1070@end deffn
568717fd 1071
9c1edabd
LC
1072@noindent
1073@cindex cross-compilation
1074Similarly, it is possible to compute a derivation that cross-builds a
1075package for some other system:
1076
1077@deffn {Scheme Procedure} package-cross-derivation @var{store} @
1078 @var{package} @var{target} [@var{system}]
59688fc4
LC
1079Return the @code{<derivation>} object of @var{package} cross-built from
1080@var{system} to @var{target}.
9c1edabd
LC
1081
1082@var{target} must be a valid GNU triplet denoting the target hardware
1083and operating system, such as @code{"mips64el-linux-gnu"}
1084(@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
1085Configure and Build System}).
1086@end deffn
1087
1088
568717fd
LC
1089@node The Store
1090@section The Store
1091
e531ac2a
LC
1092@cindex store
1093@cindex store paths
1094
1095Conceptually, the @dfn{store} is where derivations that have been
1096successfully built are stored---by default, under @file{/nix/store}.
1097Sub-directories in the store are referred to as @dfn{store paths}. The
1098store has an associated database that contains information such has the
1099store paths referred to by each store path, and the list of @emph{valid}
1100store paths---paths that result from a successful build.
1101
1102The store is always accessed by the daemon on behalf of its clients
1103(@pxref{Invoking guix-daemon}). To manipulate the store, clients
1104connect to the daemon over a Unix-domain socket, send it requests, and
1105read the result---these are remote procedure calls, or RPCs.
1106
1107The @code{(guix store)} module provides procedures to connect to the
1108daemon, and to perform RPCs. These are described below.
1109
1110@deffn {Scheme Procedure} open-connection [@var{file}] [#:reserve-space? #t]
1111Connect to the daemon over the Unix-domain socket at @var{file}. When
1112@var{reserve-space?} is true, instruct it to reserve a little bit of
1113extra space on the file system so that the garbage collector can still
1114operate, should the disk become full. Return a server object.
1115
1116@var{file} defaults to @var{%default-socket-path}, which is the normal
1117location given the options that were passed to @command{configure}.
1118@end deffn
1119
1120@deffn {Scheme Procedure} close-connection @var{server}
1121Close the connection to @var{server}.
1122@end deffn
1123
1124@defvr {Scheme Variable} current-build-output-port
1125This variable is bound to a SRFI-39 parameter, which refers to the port
1126where build and error logs sent by the daemon should be written.
1127@end defvr
1128
1129Procedures that make RPCs all take a server object as their first
1130argument.
1131
1132@deffn {Scheme Procedure} valid-path? @var{server} @var{path}
1133Return @code{#t} when @var{path} is a valid store path.
1134@end deffn
1135
cfbf9160 1136@deffn {Scheme Procedure} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
e531ac2a
LC
1137Add @var{text} under file @var{name} in the store, and return its store
1138path. @var{references} is the list of store paths referred to by the
1139resulting store path.
1140@end deffn
1141
874e6874 1142@deffn {Scheme Procedure} build-derivations @var{server} @var{derivations}
59688fc4
LC
1143Build @var{derivations} (a list of @code{<derivation>} objects or
1144derivation paths), and return when the worker is done building them.
1145Return @code{#t} on success.
874e6874
LC
1146@end deffn
1147
b860f382
LC
1148Note that the @code{(guix monads)} module provides a monad as well as
1149monadic versions of the above procedures, with the goal of making it
1150more convenient to work with code that accesses the store (@pxref{The
1151Store Monad}).
1152
e531ac2a
LC
1153@c FIXME
1154@i{This section is currently incomplete.}
568717fd
LC
1155
1156@node Derivations
1157@section Derivations
1158
874e6874
LC
1159@cindex derivations
1160Low-level build actions and the environment in which they are performed
1161are represented by @dfn{derivations}. A derivation contain the
1162following pieces of information:
1163
1164@itemize
1165@item
1166The outputs of the derivation---derivations produce at least one file or
1167directory in the store, but may produce more.
1168
1169@item
1170The inputs of the derivations, which may be other derivations or plain
1171files in the store (patches, build scripts, etc.)
1172
1173@item
1174The system type targeted by the derivation---e.g., @code{x86_64-linux}.
1175
1176@item
1177The file name of a build script in the store, along with the arguments
1178to be passed.
1179
1180@item
1181A list of environment variables to be defined.
1182
1183@end itemize
1184
1185@cindex derivation path
1186Derivations allow clients of the daemon to communicate build actions to
1187the store. They exist in two forms: as an in-memory representation,
1188both on the client- and daemon-side, and as files in the store whose
1189name end in @code{.drv}---these files are referred to as @dfn{derivation
1190paths}. Derivations paths can be passed to the @code{build-derivations}
1191procedure to perform the build actions they prescribe (@pxref{The
1192Store}).
1193
1194The @code{(guix derivations)} module provides a representation of
1195derivations as Scheme objects, along with procedures to create and
1196otherwise manipulate derivations. The lowest-level primitive to create
1197a derivation is the @code{derivation} procedure:
1198
858e9282 1199@deffn {Scheme Procedure} derivation @var{store} @var{name} @var{builder} @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] [#:hash-mode #f] [#:inputs '()] [#:env-vars '()] [#:system (%current-system)] [#:references-graphs #f]
59688fc4
LC
1200Build a derivation with the given arguments, and return the resulting
1201@code{<derivation>} object.
874e6874
LC
1202
1203When @var{hash}, @var{hash-algo}, and @var{hash-mode} are given, a
1204@dfn{fixed-output derivation} is created---i.e., one whose result is
1205known in advance, such as a file download.
5b0c9d16 1206
858e9282 1207When @var{references-graphs} is true, it must be a list of file
5b0c9d16
LC
1208name/store path pairs. In that case, the reference graph of each store
1209path is exported in the build environment in the corresponding file, in
1210a simple text format.
874e6874
LC
1211@end deffn
1212
1213@noindent
1214Here's an example with a shell script as its builder, assuming
1215@var{store} is an open connection to the daemon, and @var{bash} points
1216to a Bash executable in the store:
1217
1218@lisp
1219(use-modules (guix utils)
1220 (guix store)
1221 (guix derivations))
1222
59688fc4
LC
1223(let ((builder ; add the Bash script to the store
1224 (add-text-to-store store "my-builder.sh"
1225 "echo hello world > $out\n" '())))
1226 (derivation store "foo"
1227 bash `("-e" ,builder)
1228 #:env-vars '(("HOME" . "/homeless"))))
1229@result{} #<derivation /nix/store/@dots{}-foo.drv => /nix/store/@dots{}-foo>
874e6874
LC
1230@end lisp
1231
1232As can be guessed, this primitive is cumbersome to use directly. An
1233improved variant is @code{build-expression->derivation}, which allows
1234the caller to directly pass a Guile expression as the build script:
1235
858e9282 1236@deffn {Scheme Procedure} build-expression->derivation @var{store} @var{name} @var{system} @var{exp} @var{inputs} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] [#:env-vars '()] [#:modules '()] [#:references-graphs #f] [#:guile-for-build #f]
874e6874
LC
1237Return a derivation that executes Scheme expression @var{exp} as a
1238builder for derivation @var{name}. @var{inputs} must be a list of
1239@code{(name drv-path sub-drv)} tuples; when @var{sub-drv} is omitted,
1240@code{"out"} is assumed. @var{modules} is a list of names of Guile
1241modules from the current search path to be copied in the store,
1242compiled, and made available in the load path during the execution of
1243@var{exp}---e.g., @code{((guix build utils) (guix build
1244gnu-build-system))}.
1245
1246@var{exp} is evaluated in an environment where @code{%outputs} is bound
1247to a list of output/path pairs, and where @code{%build-inputs} is bound
1248to a list of string/output-path pairs made from @var{inputs}.
1249Optionally, @var{env-vars} is a list of string pairs specifying the name
1250and value of environment variables visible to the builder. The builder
1251terminates by passing the result of @var{exp} to @code{exit}; thus, when
1252@var{exp} returns @code{#f}, the build is considered to have failed.
1253
1254@var{exp} is built using @var{guile-for-build} (a derivation). When
1255@var{guile-for-build} is omitted or is @code{#f}, the value of the
1256@code{%guile-for-build} fluid is used instead.
9c629a27 1257
858e9282 1258See the @code{derivation} procedure for the meaning of @var{references-graphs}.
874e6874
LC
1259@end deffn
1260
1261@noindent
1262Here's an example of a single-output derivation that creates a directory
1263containing one file:
1264
1265@lisp
1266(let ((builder '(let ((out (assoc-ref %outputs "out")))
1267 (mkdir out) ; create /nix/store/@dots{}-goo
1268 (call-with-output-file (string-append out "/test")
1269 (lambda (p)
1270 (display '(hello guix) p))))))
1271 (build-expression->derivation store "goo" (%current-system)
1272 builder '()))
1273
59688fc4 1274@result{} #<derivation /nix/store/@dots{}-goo.drv => @dots{}>
874e6874
LC
1275@end lisp
1276
1277@cindex strata of code
1278Remember that the build expression passed to
1279@code{build-expression->derivation} is run by a separate Guile process
1280than the one that calls @code{build-expression->derivation}: it is run
1281by a Guile process launched by the daemon, typically in a chroot. So,
1282while there is a single language for both the @dfn{host} and the build
1283side, there are really two @dfn{strata} of code: the host-side, and the
1284build-side code@footnote{The term @dfn{stratum} in this context was
1285coined by Manuel Serrano et al. in the context of their work on Hop.}.
1286This distinction is important to keep in mind, notably when using
1287higher-level constructs such as @var{gnu-build-system} (@pxref{Defining
1288Packages}). For this reason, Guix modules that are meant to be used in
1289the build stratum are kept in the @code{(guix build @dots{})} name
1290space.
568717fd 1291
b860f382
LC
1292@node The Store Monad
1293@section The Store Monad
1294
1295@cindex monad
1296
1297The procedures that operate on the store described in the previous
1298sections all take an open connection to the build daemon as their first
1299argument. Although the underlying model is functional, they either have
1300side effects or depend on the current state of the store.
1301
1302The former is inconvenient: the connection to the build daemon has to be
1303carried around in all those functions, making it impossible to compose
1304functions that do not take that parameter with functions that do. The
1305latter can be problematic: since store operations have side effects
1306and/or depend on external state, they have to be properly sequenced.
1307
1308@cindex monadic values
1309@cindex monadic functions
1310This is where the @code{(guix monads)} module comes in. This module
1311provides a framework for working with @dfn{monads}, and a particularly
1312useful monad for our uses, the @dfn{store monad}. Monads are a
1313construct that allows two things: associating ``context'' with values
1314(in our case, the context is the store), and building sequences of
1315computations (here computations includes accesses to the store.) Values
1316in a monad---values that carry this additional context---are called
1317@dfn{monadic values}; procedures that return such values are called
1318@dfn{monadic procedures}.
1319
1320Consider this ``normal'' procedure:
1321
1322@example
1323(define (profile.sh store)
1324 ;; Return the name of a shell script in the store that
1325 ;; initializes the 'PATH' environment variable.
1326 (let* ((drv (package-derivation store coreutils))
1327 (out (derivation->output-path drv)))
1328 (add-text-to-store store "profile.sh"
1329 (format #f "export PATH=~a/bin" out))))
1330@end example
1331
1332Using @code{(guix monads)}, it may be rewritten as a monadic function:
1333
1334@example
1335(define (profile.sh)
1336 ;; Same, but return a monadic value.
1337 (mlet %store-monad ((bin (package-file coreutils "bin")))
1338 (text-file "profile.sh"
1339 (string-append "export PATH=" bin))))
1340@end example
1341
1342There are two things to note in the second version: the @code{store}
1343parameter is now implicit, and the monadic value returned by
1344@code{package-file}---a wrapper around @code{package-derivation} and
1345@code{derivation->output-path}---is @dfn{bound} using @code{mlet}
1346instead of plain @code{let}.
1347
1348Calling the monadic @code{profile.sh} has no effect. To get the desired
1349effect, one must use @code{run-with-store}:
1350
1351@example
1352(run-with-store (open-connection) (profile.sh))
1353@result{} /nix/store/...-profile.sh
1354@end example
1355
1356The main syntactic forms to deal with monads in general are described
1357below.
1358
1359@deffn {Scheme Syntax} with-monad @var{monad} @var{body} ...
1360Evaluate any @code{>>=} or @code{return} forms in @var{body} as being
1361in @var{monad}.
1362@end deffn
1363
1364@deffn {Scheme Syntax} return @var{val}
1365Return a monadic value that encapsulates @var{val}.
1366@end deffn
1367
1368@deffn {Scheme Syntax} >>= @var{mval} @var{mproc}
1369@dfn{Bind} monadic value @var{mval}, passing its ``contents'' to monadic
1370procedure @var{mproc}@footnote{This operation is commonly referred to as
1371``bind'', but that name denotes an unrelated procedure in Guile. Thus
1372we use this somewhat cryptic symbol inherited from the Haskell
1373language.}.
1374@end deffn
1375
1376@deffn {Scheme Syntax} mlet @var{monad} ((@var{var} @var{mval}) ...) @
1377 @var{body} ...
1378@deffnx {Scheme Syntax} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
1379 @var{body} ...
1380Bind the variables @var{var} to the monadic values @var{mval} in
1381@var{body}. The form (@var{var} -> @var{val}) binds @var{var} to the
1382``normal'' value @var{val}, as per @code{let}.
1383
1384@code{mlet*} is to @code{mlet} what @code{let*} is to @code{let}
1385(@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
1386@end deffn
1387
1388The interface to the store monad provided by @code{(guix monads)} is as
1389follows.
1390
1391@defvr {Scheme Variable} %store-monad
1392The store monad. Values in the store monad encapsulate accesses to the
1393store. When its effect is needed, a value of the store monad must be
1394``evaluated'' by passing it to the @code{run-with-store} procedure (see
1395below.)
1396@end defvr
1397
1398@deffn {Scheme Procedure} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
1399Run @var{mval}, a monadic value in the store monad, in @var{store}, an
1400open store connection.
1401@end deffn
1402
1403@deffn {Monadic Procedure} text-file @var{name} @var{text}
1404Return as a monadic value the absolute file name in the store of the file
1405containing @var{text}.
1406@end deffn
1407
1408@deffn {Monadic Procedure} package-file @var{package} [@var{file}] @
1409 [#:system (%current-system)] [#:output "out"] Return as a monadic
1410value in the absolute file name of @var{file} within the @var{output}
1411directory of @var{package}. When @var{file} is omitted, return the name
1412of the @var{output} directory of @var{package}.
1413@end deffn
1414
1415@deffn {Monadic Procedure} derivation-expression @var{name} @var{system} @
1416 @var{exp} @var{inputs} [#:outputs '("out")] [#:hash #f] @
1417 [#:hash-algo #f] [#:env-vars '()] [#:modules '()] @
1418 [#:references-graphs #f] [#:guile-for-build #f]
1419Monadic version of @code{build-expression->derivation}
1420(@pxref{Derivations}).
1421@end deffn
1422
1423@deffn {Monadic Procedure} package->derivation @var{package} [@var{system}]
1424Monadic version of @code{package-derivation} (@pxref{Defining
1425Packages}).
1426@end deffn
1427
1428
568717fd
LC
1429@c *********************************************************************
1430@node Utilities
1431@chapter Utilities
1432
210cc920
LC
1433This section describes tools primarily targeted at developers and users
1434who write new package definitions. They complement the Scheme
1435programming interface of Guix in a convenient way.
1436
568717fd 1437@menu
37166310 1438* Invoking guix build:: Building packages from the command line.
210cc920 1439* Invoking guix download:: Downloading a file and printing its hash.
37166310
LC
1440* Invoking guix hash:: Computing the cryptographic hash of a file.
1441* Invoking guix refresh:: Updating package definitions.
568717fd
LC
1442@end menu
1443
e49951eb
MW
1444@node Invoking guix build
1445@section Invoking @command{guix build}
568717fd 1446
e49951eb 1447The @command{guix build} command builds packages or derivations and
6798a8e4
LC
1448their dependencies, and prints the resulting store paths. Note that it
1449does not modify the user's profile---this is the job of the
e49951eb 1450@command{guix package} command (@pxref{Invoking guix package}). Thus,
6798a8e4
LC
1451it is mainly useful for distribution developers.
1452
1453The general syntax is:
c78bd12b
LC
1454
1455@example
e49951eb 1456guix build @var{options} @var{package-or-derivation}@dots{}
c78bd12b
LC
1457@end example
1458
1459@var{package-or-derivation} may be either the name of a package found in
5401dd75
LC
1460the software distribution such as @code{coreutils} or
1461@code{coreutils-8.20}, or a derivation such as
1462@file{/nix/store/@dots{}-coreutils-8.19.drv}. Alternatively, the
c78bd12b
LC
1463@code{--expression} option may be used to specify a Scheme expression
1464that evaluates to a package; this is useful when disambiguation among
1465several same-named packages or package variants is needed.
1466
1467The @var{options} may be zero or more of the following:
1468
1469@table @code
1470
1471@item --expression=@var{expr}
1472@itemx -e @var{expr}
1473Build the package @var{expr} evaluates to.
1474
5401dd75 1475For example, @var{expr} may be @code{(@@ (gnu packages guile)
c78bd12b
LC
1476guile-1.8)}, which unambiguously designates this specific variant of
1477version 1.8 of Guile.
1478
1479@item --source
1480@itemx -S
1481Build the packages' source derivations, rather than the packages
1482themselves.
1483
e49951eb 1484For instance, @code{guix build -S gcc} returns something like
6798a8e4 1485@file{/nix/store/@dots{}-gcc-4.7.2.tar.bz2}, which is GCC's source tarball.
c78bd12b 1486
f9cc8971
LC
1487The returned source tarball is the result of applying any patches and
1488code snippets specified in the package's @code{origin} (@pxref{Defining
1489Packages}).
1490
c78bd12b
LC
1491@item --system=@var{system}
1492@itemx -s @var{system}
1493Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
1494the host's system type.
1495
1496An example use of this is on Linux-based systems, which can emulate
1497different personalities. For instance, passing
1498@code{--system=i686-linux} on an @code{x86_64-linux} system allows users
1499to build packages in a complete 32-bit environment.
1500
e55ec43d
LC
1501@item --target=@var{triplet}
1502@cindex cross-compilation
1503Cross-build for @var{triplet}, which must be a valid GNU triplet, such
1504as @code{"mips64el-linux-gnu"} (@pxref{Configuration Names, GNU
1505configuration triplets,, configure, GNU Configure and Build System}).
1506
c78bd12b
LC
1507@item --derivations
1508@itemx -d
1509Return the derivation paths, not the output paths, of the given
1510packages.
1511
1512@item --keep-failed
1513@itemx -K
1514Keep the build tree of failed builds. Thus, if a build fail, its build
1515tree is kept under @file{/tmp}, in a directory whose name is shown at
1516the end of the build log. This is useful when debugging build issues.
1517
1518@item --dry-run
1519@itemx -n
1520Do not build the derivations.
1521
56b1f4b7
LC
1522@item --fallback
1523When substituting a pre-built binary fails, fall back to building
1524packages locally.
1525
c78bd12b 1526@item --no-substitutes
b5385b52
LC
1527Do not use substitutes for build products. That is, always build things
1528locally instead of allowing downloads of pre-built binaries.
c78bd12b 1529
969e678e
LC
1530@item --max-silent-time=@var{seconds}
1531When the build or substitution process remains silent for more than
1532@var{seconds}, terminate it and report a build failure.
1533
c78bd12b
LC
1534@item --cores=@var{n}
1535@itemx -c @var{n}
1536Allow the use of up to @var{n} CPU cores for the build. The special
1537value @code{0} means to use as many CPU cores as available.
1538
1539@item --root=@var{file}
1540@itemx -r @var{file}
1541Make @var{file} a symlink to the result, and register it as a garbage
1542collector root.
07ab4bf1
LC
1543
1544@item --verbosity=@var{level}
1545Use the given verbosity level. @var{level} must be an integer between 0
1546and 5; higher means more verbose output. Setting a level of 4 or more
1547may be helpful when debugging setup issues with the build daemon.
1548
bf421152
LC
1549@item --log-file
1550Return the build log file names for the given
1551@var{package-or-derivation}s, or raise an error if build logs are
1552missing.
1553
1554This works regardless of how packages or derivations are specified. For
1555instance, the following invocations are equivalent:
1556
1557@example
1558guix build --log-file `guix build -d guile`
1559guix build --log-file `guix build guile`
1560guix build --log-file guile
1561guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
1562@end example
1563
1564
c78bd12b
LC
1565@end table
1566
e49951eb 1567Behind the scenes, @command{guix build} is essentially an interface to
c78bd12b
LC
1568the @code{package-derivation} procedure of the @code{(guix packages)}
1569module, and to the @code{build-derivations} procedure of the @code{(guix
1570store)} module.
1571
210cc920
LC
1572@node Invoking guix download
1573@section Invoking @command{guix download}
1574
1575When writing a package definition, developers typically need to download
1576the package's source tarball, compute its SHA256 hash, and write that
1577hash in the package definition (@pxref{Defining Packages}). The
1578@command{guix download} tool helps with this task: it downloads a file
1579from the given URI, adds it to the store, and prints both its file name
1580in the store and its SHA256 hash.
1581
1582The fact that the downloaded file is added to the store saves bandwidth:
1583when the developer eventually tries to build the newly defined package
1584with @command{guix build}, the source tarball will not have to be
1585downloaded again because it is already in the store. It is also a
1586convenient way to temporarily stash files, which may be deleted
1587eventually (@pxref{Invoking guix gc}).
1588
1589The @command{guix download} command supports the same URIs as used in
1590package definitions. In particular, it supports @code{mirror://} URIs.
1591@code{https} URIs (HTTP over TLS) are supported @emph{provided} the
1592Guile bindings for GnuTLS are available in the user's environment; when
1593they are not available, an error is raised.
1594
1595The following option is available:
1596
1597@table @code
1598@item --format=@var{fmt}
1599@itemx -f @var{fmt}
1600Write the hash in the format specified by @var{fmt}. For more
1601information on the valid values for @var{fmt}, @ref{Invoking guix hash}.
1602@end table
1603
6c365eca
NK
1604@node Invoking guix hash
1605@section Invoking @command{guix hash}
1606
210cc920 1607The @command{guix hash} command computes the SHA256 hash of a file.
6c365eca
NK
1608It is primarily a convenience tool for anyone contributing to the
1609distribution: it computes the cryptographic hash of a file, which can be
1610used in the definition of a package (@pxref{Defining Packages}).
1611
1612The general syntax is:
1613
1614@example
1615guix hash @var{option} @var{file}
1616@end example
1617
1618@command{guix hash} has the following option:
1619
1620@table @code
1621
1622@item --format=@var{fmt}
1623@itemx -f @var{fmt}
210cc920 1624Write the hash in the format specified by @var{fmt}.
6c365eca
NK
1625
1626Supported formats: @code{nix-base32}, @code{base32}, @code{base16}
1627(@code{hex} and @code{hexadecimal} can be used as well).
1628
1629If the @option{--format} option is not specified, @command{guix hash}
1630will output the hash in @code{nix-base32}. This representation is used
1631in the definitions of packages.
1632
1633@end table
1634
37166310
LC
1635@node Invoking guix refresh
1636@section Invoking @command{guix refresh}
1637
1638The primary audience of the @command{guix refresh} command is developers
1639of the GNU software distribution. By default, it reports any packages
1640provided by the distribution that are outdated compared to the latest
1641upstream version, like this:
1642
1643@example
1644$ guix refresh
1645gnu/packages/gettext.scm:29:13: gettext would be upgraded from 0.18.1.1 to 0.18.2.1
1646gnu/packages/glib.scm:77:12: glib would be upgraded from 2.34.3 to 2.37.0
1647@end example
1648
1649It does so by browsing each package's FTP directory and determining the
1650highest version number of the source tarballs
1651therein@footnote{Currently, this only works for GNU packages.}.
1652
1653When passed @code{--update}, it modifies distribution source files to
1654update the version numbers and source tarball hashes of those packages'
1655recipes (@pxref{Defining Packages}). This is achieved by downloading
1656each package's latest source tarball and its associated OpenPGP
1657signature, authenticating the downloaded tarball against its signature
1658using @command{gpg}, and finally computing its hash. When the public
1659key used to sign the tarball is missing from the user's keyring, an
1660attempt is made to automatically retrieve it from a public key server;
1661when it's successful, the key is added to the user's keyring; otherwise,
1662@command{guix refresh} reports an error.
1663
1664The following options are supported:
1665
1666@table @code
1667
1668@item --update
1669@itemx -u
1670Update distribution source files (package recipes) in place.
1671@ref{Defining Packages}, for more information on package definitions.
1672
1673@item --select=[@var{subset}]
1674@itemx -s @var{subset}
1675Select all the packages in @var{subset}, one of @code{core} or
1676@code{non-core}.
1677
1678The @code{core} subset refers to all the packages at the core of the
1679distribution---i.e., packages that are used to build ``everything
1680else''. This includes GCC, libc, Binutils, Bash, etc. Usually,
1681changing one of these packages in the distribution entails a rebuild of
1682all the others. Thus, such updates are an inconvenience to users in
1683terms of build time or bandwidth used to achieve the upgrade.
1684
1685The @code{non-core} subset refers to the remaining packages. It is
1686typically useful in cases where an update of the core packages would be
1687inconvenient.
1688
1689@end table
1690
1691In addition, @command{guix refresh} can be passed one or more package
1692names, as in this example:
1693
1694@example
1695guix refresh -u emacs idutils
1696@end example
1697
1698@noindent
1699The command above specifically updates the @code{emacs} and
1700@code{idutils} packages. The @code{--select} option would have no
1701effect in this case.
1702
f9230085
LC
1703The following options can be used to customize GnuPG operation:
1704
1705@table @code
1706
1707@item --key-server=@var{host}
1708Use @var{host} as the OpenPGP key server when importing a public key.
1709
1710@item --gpg=@var{command}
1711Use @var{command} as the GnuPG 2.x command. @var{command} is searched
1712for in @code{$PATH}.
1713
1714@end table
1715
37166310 1716
a1ba8475
LC
1717@c *********************************************************************
1718@node GNU Distribution
1719@chapter GNU Distribution
1720
1721Guix comes with a distribution of free software@footnote{The term
1722``free'' here refers to the
1723@url{http://www.gnu.org/philosophy/free-sw.html,freedom provided to
1724users of that software}.} that form the basis of the GNU system. This
1725includes core GNU packages such as GNU libc, GCC, and Binutils, as well
1726as many GNU and non-GNU applications. The complete list of available
e49951eb
MW
1727packages can be seen by running @command{guix package} (@pxref{Invoking
1728guix package}):
a1ba8475
LC
1729
1730@example
e49951eb 1731guix package --list-available
a1ba8475
LC
1732@end example
1733
401c53c4
LC
1734Our goal is to build a practical 100% free software distribution of
1735Linux-based and other variants of GNU, with a focus on the promotion and
1736tight integration of GNU components, and an emphasis on programs and
1737tools that help users exert that freedom.
1738
1739@menu
91ef73d4 1740* Installing Debugging Files:: Feeding the debugger.
401c53c4 1741* Package Modules:: Packages from the programmer's viewpoint.
da7cabd4 1742* Packaging Guidelines:: Growing the distribution.
401c53c4 1743* Bootstrapping:: GNU/Linux built from scratch.
8b315a6d 1744* Porting:: Targeting another platform or kernel.
401c53c4
LC
1745@end menu
1746
1747Building this distribution is a cooperative effort, and you are invited
1748to join! @ref{Contributing}, for information about how you can help.
1749
b208a005 1750
91ef73d4
LC
1751@node Installing Debugging Files
1752@section Installing Debugging Files
1753
1754Program binaries, as produced by the GCC compilers for instance, are
1755typically written in the ELF format, with a section containing
1756@dfn{debugging information}. Debugging information is what allows the
1757debugger, GDB, to map binary code to source code; it is required to
1758debug a compiled program in good conditions.
1759
1760The problem with debugging information is that is takes up a fair amount
1761of disk space. For example, debugging information for the GNU C Library
1762weighs in at more than 60 MiB. Thus, as a user, keeping all the
1763debugging info of all the installed programs is usually not an option.
1764Yet, space savings should not come at the cost of an impediment to
1765debugging---especially in the GNU system, which should make it easier
1766for users to exert their computing freedom (@pxref{GNU Distribution}).
1767
1768Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a
1769mechanism that allows users to get the best of both worlds: debugging
1770information can be stripped from the binaries and stored in separate
1771files. GDB is then able to load debugging information from those files,
1772when they are available (@pxref{Separate Debug Files,,, gdb, Debugging
1773with GDB}).
1774
1775The GNU distribution takes advantage of this by storing debugging
1776information in the @code{lib/debug} sub-directory of a separate package
1777output unimaginatively called @code{debug} (@pxref{Packages with
1778Multiple Outputs}). Users can choose to install the @code{debug} output
1779of a package when they need it. For instance, the following command
1780installs the debugging information for the GNU C Library and for GNU
1781Guile:
1782
1783@example
1784guix package -i glibc:debug -i guile:debug
1785@end example
1786
1787GDB must then be told to look for debug files in the user's profile, by
1788setting the @code{debug-file-directory} variable (consider setting it
1789from the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with
1790GDB}):
1791
1792@example
1793(gdb) set debug-file-directory ~/.guix-profile/lib/debug
1794@end example
1795
1796From there on, GDB will pick up debugging information from the
1797@code{.debug} files under @file{~/.guix-profile/lib/debug}.
1798
1799@c XXX: keep me up-to-date
1800The @code{debug} output mechanism in Guix is implemented by the
1801@code{gnu-build-system} (@pxref{Defining Packages}). Currently, it is
1802opt-in---debugging information is available only for those packages
1803whose definition explicitly declares a @code{debug} output. This may be
1804changed to opt-out in the future, if our build farm servers can handle
1805the load. To check whether a package has a @code{debug} output, use
1806@command{guix package --list-available} (@pxref{Invoking guix package}).
1807
1808
401c53c4
LC
1809@node Package Modules
1810@section Package Modules
1811
1812From a programming viewpoint, the package definitions of the
1813distribution are provided by Guile modules in the @code{(gnu packages
b81e1947
LC
1814...)} name space (@pxref{Modules, Guile modules,, guile, GNU Guile
1815Reference Manual}). For instance, the @code{(gnu packages emacs)}
1816module exports a variable named @code{emacs}, which is bound to a
401c53c4
LC
1817@code{<package>} object (@pxref{Defining Packages}). The @code{(gnu
1818packages)} module provides facilities for searching for packages.
a1ba8475
LC
1819
1820The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}:
1821each package is built based solely on other packages in the
1822distribution. The root of this dependency graph is a small set of
1823@dfn{bootstrap binaries}, provided by the @code{(gnu packages
b81e1947
LC
1824bootstrap)} module. For more information on bootstrapping,
1825@ref{Bootstrapping}.
1826
da7cabd4
AE
1827@node Packaging Guidelines
1828@section Packaging Guidelines
b81e1947
LC
1829
1830The GNU distribution is nascent and may well lack some of your favorite
1831packages. This section describes how you can help make the distribution
c8c871d1 1832grow. @xref{Contributing}, for additional information on how you can
b81e1947
LC
1833help.
1834
b81e1947
LC
1835Free software packages are usually distributed in the form of
1836@dfn{source code tarballs}---typically @file{tar.gz} files that contain
1837all the source files. Adding a package to the distribution means
1838essentially two things: adding a @dfn{recipe} that describes how to
1839build the package, including a list of other packages required to build
1840it, and adding @dfn{package meta-data} along with that recipe, such as a
1841description and licensing information.
1842
1843In Guix all this information is embodied in @dfn{package definitions}.
1844Package definitions provide a high-level view of the package. They are
1845written using the syntax of the Scheme programming language; in fact,
1846for each package we define a variable bound to the package definition,
1847and export that variable from a module (@pxref{Package Modules}).
1848However, in-depth Scheme knowledge is @emph{not} a prerequisite for
1849creating packages. For more information on package definitions,
1850@ref{Defining Packages}.
1851
1852Once a package definition is in place, stored in a file in the Guix
1853source tree, it can be tested using the @command{guix build} command
1854(@pxref{Invoking guix build}). For example, assuming the new package is
1855called @code{gnew}, you may run this command from the Guix build tree:
1856
1857@example
1858./pre-inst-env guix build gnew --keep-failed
1859@end example
1860
1861Using @code{--keep-failed} makes it easier to debug build failures since
1862it provides access to the failed build tree.
1863
1864Once your package builds correctly, please send us a patch
1865(@pxref{Contributing}). Well, if you need help, we will be happy to
1866help you too. Once the patch is committed in the Guix repository, the
1867new package automatically gets built on the supported platforms by
1868@url{http://hydra.gnu.org/gnu/master, our continuous integration
1869system}.
1870
1871@cindex substituter
1872Users can obtain the new package definition simply by running
1873@command{guix pull} (@pxref{Invoking guix pull}). When
1874@code{hydra.gnu.org} is done building the package, installing the
1875package automatically downloads binaries from there (except when using
1876@code{--no-substitutes}). The only place where human intervention is
1877needed is to review and apply the patch.
401c53c4
LC
1878
1879
da7cabd4 1880@menu
ee85f3db
AE
1881* Software Freedom:: What may go into the distribution.
1882* Package Naming:: What's in a name?
1883* Version Numbers:: When the name is not enough.
1884* Python Modules:: Taming the snake.
da7cabd4
AE
1885@end menu
1886
1887@node Software Freedom
1888@subsection Software Freedom
1889
1890@c Adapted from http://www.gnu.org/philosophy/philosophy.html.
1891
1892The GNU operating system has been developed so that users can have
1893freedom in their computing. GNU is @dfn{free software}, meaning that
1894users have the @url{http://www.gnu.org/philosophy/free-sw.html,four
1895essential freedoms}: to run the program, to study and change the program
1896in source code form, to redistribute exact copies, and to distribute
1897modified versions. Packages found in the GNU distribution provide only
1898software that conveys these four freedoms.
1899
1900In addition, the GNU distribution follow the
1901@url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free
1902software distribution guidelines}. Among other things, these guidelines
1903reject non-free firmware, recommendations of non-free software, and
1904discuss ways to deal with trademarks and patents.
1905
f9cc8971
LC
1906Some packages contain a small and optional subset that violates the
1907above guidelines, for instance because this subset is itself non-free
1908code. When that happens, the offending items are removed with
1909appropriate patches or code snippets in the package definition's
1910@code{origin} form (@pxref{Defining Packages}). That way, @code{guix
1911build --source} returns the ``freed'' source rather than the unmodified
1912upstream source.
1913
da7cabd4 1914
ee85f3db
AE
1915@node Package Naming
1916@subsection Package Naming
1917
c8c871d1 1918A package has actually two names associated with it:
ee85f3db 1919First, there is the name of the @emph{Scheme variable}, the one following
c8c871d1
AE
1920@code{define-public}. By this name, the package can be made known in the
1921Scheme code, for instance as input to another package. Second, there is
1922the string in the @code{name} field of a package definition. This name
1923is used by package management commands such as
1924@command{guix package} and @command{guix build}.
ee85f3db
AE
1925
1926Both are usually the same and correspond to the lowercase conversion of the
c8c871d1
AE
1927project name chosen upstream. For instance, the GNUnet project is packaged
1928as @code{gnunet}. We do not add @code{lib} prefixes for library packages,
1929unless these are already part of the official project name. But see
1930@ref{Python Modules} for special rules concerning modules for
ee85f3db
AE
1931the Python language.
1932
1933
1934@node Version Numbers
1935@subsection Version Numbers
1936
1937We usually package only the latest version of a given free software
c8c871d1
AE
1938project. But sometimes, for instance for incompatible library versions,
1939two (or more) versions of the same package are needed. These require
1940different Scheme variable names. We use the name as defined
1941in @ref{Package Naming}
ee85f3db
AE
1942for the most recent version; previous versions use the same name, suffixed
1943by @code{-} and the smallest prefix of the version number that may
1944distinguish the two versions.
1945
1946The name inside the package definition is the same for all versions of a
1947package and does not contain any version number.
1948
1949For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as follows:
c8c871d1 1950
ee85f3db
AE
1951@example
1952(define-public gtk+
1953 (package
1954 (name "gtk+")
1955 (version "3.9.12")
1956 ...))
1957(define-public gtk+-2
1958 (package
1959 (name "gtk+")
1960 (version "2.24.20")
1961 ...))
1962@end example
1963If we also wanted GTK+ 3.8.2, this would be packaged as
1964@example
1965(define-public gtk+-3.8
1966 (package
1967 (name "gtk+")
1968 (version "3.8.2")
1969 ...))
1970@end example
1971
1972
1973@node Python Modules
1974@subsection Python Modules
1975
1976We currently package Python 2 and Python 3, under the Scheme variable names
1977@code{python-2} and @code{python} as explained in @ref{Version Numbers}.
1978To avoid confusion and naming clashes with other programming languages, it
1979seems desirable that the name of a package for a Python module contains
1980the word @code{python}.
c8c871d1 1981
ee85f3db
AE
1982Some modules are compatible with only one version of Python, others with both.
1983If the package Foo compiles only with Python 3, we name it
1984@code{python-foo}; if it compiles only with Python 2, we name it
1985@code{python2-foo}. If it is compatible with both versions, we create two
1986packages with the corresponding names.
1987
1988If a project already contains the word @code{python}, we drop this;
1989for instance, the module python-dateutil is packaged under the names
1990@code{python-dateutil} and @code{python2-dateutil}.
1991
1992
1993
1994
1995
401c53c4
LC
1996@node Bootstrapping
1997@section Bootstrapping
1998
1999@c Adapted from the ELS 2013 paper.
2000
2001@cindex bootstrapping
2002
2003Bootstrapping in our context refers to how the distribution gets built
2004``from nothing''. Remember that the build environment of a derivation
2005contains nothing but its declared inputs (@pxref{Introduction}). So
2006there's an obvious chicken-and-egg problem: how does the first package
2007get built? How does the first compiler get compiled? Note that this is
2008a question of interest only to the curious hacker, not to the regular
2009user, so you can shamelessly skip this section if you consider yourself
2010a ``regular user''.
2011
2012@cindex bootstrap binaries
2013The GNU system is primarily made of C code, with libc at its core. The
2014GNU build system itself assumes the availability of a Bourne shell and
2015command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
2016`grep'. Furthermore, build programs---programs that run
2017@code{./configure}, @code{make}, etc.---are written in Guile Scheme
2018(@pxref{Derivations}). Consequently, to be able to build anything at
2019all, from scratch, Guix relies on pre-built binaries of Guile, GCC,
2020Binutils, libc, and the other packages mentioned above---the
2021@dfn{bootstrap binaries}.
2022
2023These bootstrap binaries are ``taken for granted'', though we can also
ba7ea5ce 2024re-create them if needed (more on that later).
401c53c4
LC
2025
2026@unnumberedsubsec Preparing to Use the Bootstrap Binaries
2027
2028@c As of Emacs 24.3, Info-mode displays the image, but since it's a
2029@c large image, it's hard to scroll. Oh well.
29f66ddd 2030@image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap derivations}
401c53c4
LC
2031
2032The figure above shows the very beginning of the dependency graph of the
2033distribution, corresponding to the package definitions of the @code{(gnu
2034packages bootstrap)} module. At this level of detail, things are
2035slightly complex. First, Guile itself consists of an ELF executable,
2036along with many source and compiled Scheme files that are dynamically
2037loaded when it runs. This gets stored in the @file{guile-2.0.7.tar.xz}
2038tarball shown in this graph. This tarball is part of Guix's ``source''
2039distribution, and gets inserted into the store with @code{add-to-store}
2040(@pxref{The Store}).
a1ba8475 2041
401c53c4
LC
2042But how do we write a derivation that unpacks this tarball and adds it
2043to the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
2044derivation---the first one that gets built---uses @code{bash} as its
2045builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
2046@code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar},
2047@file{xz}, and @file{mkdir} are statically-linked binaries, also part of
2048the Guix source distribution, whose sole purpose is to allow the Guile
2049tarball to be unpacked.
2050
2051Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning
2052Guile that can be used to run subsequent build programs. Its first task
2053is to download tarballs containing the other pre-built binaries---this
2054is what the @code{.tar.xz.drv} derivations do. Guix modules such as
2055@code{ftp-client.scm} are used for this purpose. The
2056@code{module-import.drv} derivations import those modules in a directory
2057in the store, using the original layout. The
2058@code{module-import-compiled.drv} derivations compile those modules, and
2059write them in an output directory with the right layout. This
2060corresponds to the @code{#:modules} argument of
2061@code{build-expression->derivation} (@pxref{Derivations}).
2062
2063Finally, the various tarballs are unpacked by the
2064derivations @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv},
2065etc., at which point we have a working C tool chain.
2066
2067
2068@unnumberedsubsec Building the Build Tools
2069
2070@c TODO: Add a package-level dependency graph generated from (gnu
2071@c packages base).
2072
2073Bootstrapping is complete when we have a full tool chain that does not
2074depend on the pre-built bootstrap tools discussed above. This
2075no-dependency requirement is verified by checking whether the files of
2076the final tool chain contain references to the @file{/nix/store}
2077directories of the bootstrap inputs. The process that leads to this
2078``final'' tool chain is described by the package definitions found in
2079the @code{(gnu packages base)} module.
2080
2081@c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
2082The first tool that gets built with the bootstrap binaries is
2083GNU Make, which is a prerequisite for all the following packages.
2084From there Findutils and Diffutils get built.
2085
2086Then come the first-stage Binutils and GCC, built as pseudo cross
2087tools---i.e., with @code{--target} equal to @code{--host}. They are
2088used to build libc. Thanks to this cross-build trick, this libc is
2089guaranteed not to hold any reference to the initial tool chain.
2090
2091From there the final Binutils and GCC are built. GCC uses @code{ld}
2092from the final Binutils, and links programs against the just-built libc.
2093This tool chain is used to build the other packages used by Guix and by
2094the GNU Build System: Guile, Bash, Coreutils, etc.
2095
2096And voilà! At this point we have the complete set of build tools that
2097the GNU Build System expects. These are in the @code{%final-inputs}
2098variables of the @code{(gnu packages base)} module, and are implicitly
2099used by any package that uses @code{gnu-build-system} (@pxref{Defining
2100Packages}).
2101
2102
2103@unnumberedsubsec Building the Bootstrap Binaries
2104
2105Because the final tool chain does not depend on the bootstrap binaries,
2106those rarely need to be updated. Nevertheless, it is useful to have an
2107automated way to produce them, should an update occur, and this is what
2108the @code{(gnu packages make-bootstrap)} module provides.
2109
2110The following command builds the tarballs containing the bootstrap
2111binaries (Guile, Binutils, GCC, libc, and a tarball containing a mixture
2112of Coreutils and other basic command-line tools):
a1ba8475 2113
401c53c4
LC
2114@example
2115guix build bootstrap-tarballs
2116@end example
2117
2118The generated tarballs are those that should be referred to in the
2119@code{(gnu packages bootstrap)} module mentioned at the beginning of
2120this section.
2121
2122Still here? Then perhaps by now you've started to wonder: when do we
2123reach a fixed point? That is an interesting question! The answer is
2124unknown, but if you would like to investigate further (and have
2125significant computational and storage resources to do so), then let us
2126know.
a1ba8475 2127
8b315a6d
LC
2128@node Porting
2129@section Porting to a New Platform
2130
2131As discussed above, the GNU distribution is self-contained, and
2132self-containment is achieved by relying on pre-built ``bootstrap
2133binaries'' (@pxref{Bootstrapping}). These binaries are specific to an
2134operating system kernel, CPU architecture, and application binary
2135interface (ABI). Thus, to port the distribution to a platform that is
2136not yet supported, one must build those bootstrap binaries, and update
2137the @code{(gnu packages bootstrap)} module to use them on that platform.
2138
2139Fortunately, Guix can @emph{cross compile} those bootstrap binaries.
2140When everything goes well, and assuming the GNU tool chain supports the
2141target platform, this can be as simple as running a command like this
2142one:
2143
2144@example
2145guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
2146@end example
2147
72e25e35
LC
2148Once these are built, the @code{(gnu packages bootstrap)} module needs
2149to be updated to refer to these binaries on the target platform. In
2150addition, the @code{glibc-dynamic-linker} procedure in that module must
2151be augmented to return the right file name for libc's dynamic linker on
2152that platform; likewise, @code{system->linux-architecture} in @code{(gnu
2153packages linux)} must be taught about the new platform.
2154
8b315a6d
LC
2155In practice, there may be some complications. First, it may be that the
2156extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
2157above) is not recognized by all the GNU tools. Typically, glibc
2158recognizes some of these, whereas GCC uses an extra @code{--with-abi}
ba7ea5ce 2159configure flag (see @code{gcc.scm} for examples of how to handle this).
8b315a6d
LC
2160Second, some of the required packages could fail to build for that
2161platform. Lastly, the generated binaries could be broken for some
2162reason.
2163
9bf3c1a7
LC
2164
2165@c *********************************************************************
2166@node Contributing
2167@chapter Contributing
2168
2169This project is a cooperative effort, and we need your help to make it
63f6004b 2170grow! Please get in touch with us on @email{guix-devel@@gnu.org}. We
a1ba8475 2171welcome ideas, bug reports, patches, and anything that may be helpful to
da7cabd4
AE
2172the project. We particularly welcome help on packaging
2173(@pxref{Packaging Guidelines}).
a1ba8475 2174
9bf3c1a7
LC
2175Please see the
2176@url{http://git.savannah.gnu.org/cgit/guix.git/tree/HACKING,
2177@file{HACKING} file} that comes with the Guix source code for practical
2178details about contributions.
2179
c78bd12b 2180
568717fd
LC
2181@c *********************************************************************
2182@node Acknowledgments
2183@chapter Acknowledgments
2184
2185Guix is based on the Nix package manager, which was designed and
2186implemented by Eelco Dolstra. Nix pioneered functional package
2187management, and promoted unprecedented features, such as transactional
2188package upgrades and rollbacks, per-user profiles, and referentially
2189transparent build processes. Without this work, Guix would not exist.
2190
2191The Nix-based software distributions, Nixpkgs and NixOS, have also been
2192an inspiration for Guix.
2193
2194@c *********************************************************************
2195@node GNU Free Documentation License
2196@appendix GNU Free Documentation License
2197
2198@include fdl-1.3.texi
2199
2200@c *********************************************************************
2201@node Concept Index
2202@unnumbered Concept Index
2203@printindex cp
2204
2205@node Function Index
2206@unnumbered Function Index
2207@printindex fn
2208
2209@bye
2210
2211@c Local Variables:
2212@c ispell-local-dictionary: "american";
2213@c End: