gnu: Add pingus.
[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
425b0bfc 13Copyright @copyright{} 2012, 2013, 2014 Ludovic Courtès@*
af8a56b8 14Copyright @copyright{} 2013, 2014 Andreas Enge@*
7df7a74e
NK
15Copyright @copyright{} 2013 Nikita Karetnikov
16
17Permission is granted to copy, distribute and/or modify this document
18under the terms of the GNU Free Documentation License, Version 1.3 or
19any later version published by the Free Software Foundation; with no
20Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
21copy of the license is included in the section entitled ``GNU Free
22Documentation License''.
23@end copying
568717fd 24
eeaf4427 25@dircategory Package management
568717fd
LC
26@direntry
27* guix: (guix). Guix, the functional package manager.
e49951eb 28* guix package: (guix)Invoking guix package
eeaf4427 29 Managing packages with Guix.
e49951eb 30* guix build: (guix)Invoking guix build
568717fd
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
e900c503 98build processes in isolated environments (or @dfn{containers}), where only their
4bfc4ea3 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
834129e0 105store---by default under @file{/gnu/store}. The directory name contains
568717fd
LC
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
834129e0 168located, among other things. The default values for Nix 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
49e6291a 178are all performed by a specialized process, the @dfn{build daemon}, on
bd5e766b
LC
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
49e6291a
LC
185The following sections explain how to prepare the build daemon's
186environment.
187
188@menu
189* Build Environment Setup:: Preparing the isolated build environment.
190* Daemon Offload Setup:: Offloading builds to remote machines.
191@end menu
192
193@node Build Environment Setup
194@subsection Build Environment Setup
195
bd5e766b
LC
196In a standard multi-user setup, Guix and its daemon---the
197@command{guix-daemon} program---are installed by the system
834129e0 198administrator; @file{/gnu/store} is owned by @code{root} and
bd5e766b
LC
199@command{guix-daemon} runs as @code{root}. Unprivileged users may use
200Guix tools to build packages or otherwise access the store, and the
201daemon will do it on their behalf, ensuring that the store is kept in a
202consistent state, and allowing built packages to be shared among users.
203
204@cindex build users
205When @command{guix-daemon} runs as @code{root}, you may not want package
206build processes themselves to run as @code{root} too, for obvious
207security reasons. To avoid that, a special pool of @dfn{build users}
208should be created for use by build processes started by the daemon.
209These build users need not have a shell and a home directory: they will
210just be used when the daemon drops @code{root} privileges in build
211processes. Having several such users allows the daemon to launch
212distinct build processes under separate UIDs, which guarantees that they
213do not interfere with each other---an essential feature since builds are
214regarded as pure functions (@pxref{Introduction}).
215
216On a GNU/Linux system, a build user pool may be created like this (using
217Bash syntax and the @code{shadow} commands):
218
091196b3
LC
219@c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
220@c for why `-G' is needed.
bd5e766b
LC
221@example
222# groupadd guix-builder
223# for i in `seq 1 10`;
224 do
091196b3
LC
225 useradd -g guix-builder -G guix-builder \
226 -d /var/empty -s `which nologin` \
4d1a2b50
LC
227 -c "Guix build user $i" --system \
228 guix-builder$i;
bd5e766b
LC
229 done
230@end example
231
232@noindent
233The @code{guix-daemon} program may then be run as @code{root} with:
234
235@example
236# guix-daemon --build-users-group=guix-builder
237@end example
238
e900c503 239@cindex chroot
b095792f
LC
240@noindent
241This way, the daemon starts build processes in a chroot, under one of
242the @code{guix-builder} users. On GNU/Linux, by default, the chroot
6dc99317
LC
243environment contains nothing but:
244
245@c Keep this list in sync with libstore/build.cc! -----------------------
246@itemize
247@item
4743a4da
LC
248a minimal @code{/dev} directory, created mostly independently from the
249host @code{/dev}@footnote{``Mostly'', because while the set of files
250that appear in the chroot's @code{/dev} is fixed, most of these files
251can only be created if the host has them.};
252
253@item
254the @code{/proc} directory; it only shows the container's processes
255since a separate PID name space is used;
6dc99317
LC
256
257@item
258@file{/etc/passwd} with an entry for the current user and an entry for
259user @file{nobody};
260
261@item
262@file{/etc/group} with an entry for the user's group;
263
264@item
265@file{/etc/hosts} with an entry that maps @code{localhost} to
266@code{127.0.0.1};
267
268@item
269a writable @file{/tmp} directory.
270@end itemize
b095792f 271
d43eb499 272If you are installing Guix as an unprivileged user, it is still
bd5e766b
LC
273possible to run @command{guix-daemon}. However, build processes will
274not be isolated from one another, and not from the rest of the system.
275Thus, build processes may interfere with each other, and may access
276programs, libraries, and other files available on the system---making it
277much harder to view them as @emph{pure} functions.
278
49e6291a
LC
279
280@node Daemon Offload Setup
281@subsection Using the Offload Facility
282
283@cindex offloading
4ec2e92d
LC
284@cindex build hook
285When desired, the build daemon can @dfn{offload}
286derivation builds to other machines
49e6291a
LC
287running Guix, using the @code{offload} @dfn{build hook}. When that
288feature is enabled, a list of user-specified build machines is read from
289@file{/etc/guix/machines.scm}; anytime a build is requested, for
290instance via @code{guix build}, the daemon attempts to offload it to one
291of the machines that satisfies the derivation's constraints, in
292particular its system type---e.g., @file{x86_64-linux}. Missing
293prerequisites for the build are copied over SSH to the target machine,
294which then proceeds with the build; upon success the output(s) of the
295build are copied back to the initial machine.
296
4ec2e92d 297The @file{/etc/guix/machines.scm} file typically looks like this:
49e6291a
LC
298
299@example
300(list (build-machine
301 (name "eightysix.example.org")
302 (system "x86_64-linux")
303 (user "bob")
304 (speed 2.)) ; incredibly fast!
305
306 (build-machine
307 (name "meeps.example.org")
308 (system "mips64el-linux")
309 (user "alice")
310 (private-key
311 (string-append (getenv "HOME")
312 "/.ssh/id-rsa-for-guix"))))
313@end example
314
315@noindent
316In the example above we specify a list of two build machines, one for
317the @code{x86_64} architecture and one for the @code{mips64el}
4ec2e92d
LC
318architecture.
319
320In fact, this file is---not surprisingly!---a Scheme file that is
321evaluated when the @code{offload} hook is started. Its return value
322must be a list of @code{build-machine} objects. While this example
323shows a fixed list of build machines, one could imagine, say, using
324DNS-SD to return a list of potential build machines discovered in the
325local network (@pxref{Introduction, Guile-Avahi,, guile-avahi, Using
326Avahi in Guile Scheme Programs}).
327
328The compulsory fields for a @code{build-machine} declaration are:
49e6291a
LC
329
330@table @code
331
332@item name
333The remote machine's host name.
334
335@item system
336The remote machine's system type.
337
338@item user
339The user account to use when connecting to the remote machine over SSH.
340Note that the SSH key pair must @emph{not} be passphrase-protected, to
341allow non-interactive logins.
342
343@end table
344
345@noindent
4ec2e92d 346A number of optional fields may be specified:
49e6291a
LC
347
348@table @code
349
cecd72d5
LC
350@item port
351Port number of the machine's SSH server (default: 22).
352
49e6291a
LC
353@item private-key
354The SSH private key file to use when connecting to the machine.
355
356@item parallel-builds
357The number of builds that may run in parallel on the machine (1 by
358default.)
359
360@item speed
361A ``relative speed factor''. The offload scheduler will tend to prefer
362machines with a higher speed factor.
363
364@item features
365A list of strings denoting specific features supported by the machine.
366An example is @code{"kvm"} for machines that have the KVM Linux modules
367and corresponding hardware support. Derivations can request features by
368name, and they will be scheduled on matching build machines.
369
370@end table
371
372The @code{guix} command must be in the search path on the build
373machines, since offloading works by invoking the @code{guix archive} and
374@code{guix build} commands.
375
376There's one last thing to do once @file{machines.scm} is in place. As
377explained above, when offloading, files are transferred back and forth
378between the machine stores. For this to work, you need to generate a
379key pair to allow the daemon to export signed archives of files from the
380store (@pxref{Invoking guix archive}):
381
382@example
383# guix archive --generate-key
384@end example
385
386@noindent
387Thus, when receiving files, a machine's build daemon can make sure they
388are genuine, have not been tampered with, and that they are signed by an
389authorized key.
390
391
bd5e766b
LC
392@node Invoking guix-daemon
393@section Invoking @command{guix-daemon}
394
395The @command{guix-daemon} program implements all the functionality to
396access the store. This includes launching build processes, running the
397garbage collector, querying the availability of a build result, etc. It
398is normally run as @code{root} like this:
399
400@example
401# guix-daemon --build-users-group=guix-builder
402@end example
403
404@noindent
405For details on how to set it up, @ref{Setting Up the Daemon}.
406
e900c503
LC
407@cindex chroot
408@cindex container, build environment
409@cindex build environment
410@cindex reproducible builds
bd5e766b
LC
411By default, @command{guix-daemon} launches build processes under
412different UIDs, taken from the build group specified with
413@code{--build-users-group}. In addition, each build process is run in a
414chroot environment that only contains the subset of the store that the
415build process depends on, as specified by its derivation
416(@pxref{Programming Interface, derivation}), plus a set of specific
417system directories. By default, the latter contains @file{/dev} and
e900c503
LC
418@file{/dev/pts}. Furthermore, on GNU/Linux, the build environment is a
419@dfn{container}: in addition to having its own file system tree, it has
420a separate mount name space, its own PID name space, network name space,
421etc. This helps achieve reproducible builds (@pxref{Features}).
bd5e766b
LC
422
423The following command-line options are supported:
424
425@table @code
426@item --build-users-group=@var{group}
427Take users from @var{group} to run build processes (@pxref{Setting Up
428the Daemon, build users}).
429
6858f9d1 430@item --no-substitutes
b5385b52 431@cindex substitutes
6858f9d1 432Do not use substitutes for build products. That is, always build things
c4202d60
LC
433locally instead of allowing downloads of pre-built binaries
434(@pxref{Substitutes}).
6858f9d1 435
b5385b52
LC
436By default substitutes are used, unless the client---such as the
437@command{guix package} command---is explicitly invoked with
438@code{--no-substitutes}.
439
440When the daemon runs with @code{--no-substitutes}, clients can still
441explicitly enable substitution @i{via} the @code{set-build-options}
442remote procedure call (@pxref{The Store}).
443
4ec2e92d
LC
444@cindex build hook
445@item --no-build-hook
446Do not use the @dfn{build hook}.
447
448The build hook is a helper program that the daemon can start and to
449which it submits build requests. This mechanism is used to offload
450builds to other machines (@pxref{Daemon Offload Setup}).
451
bd5e766b
LC
452@item --cache-failures
453Cache build failures. By default, only successful builds are cached.
454
455@item --cores=@var{n}
456@itemx -c @var{n}
457Use @var{n} CPU cores to build each derivation; @code{0} means as many
458as available.
459
460The default value is @code{1}, but it may be overridden by clients, such
e49951eb
MW
461as the @code{--cores} option of @command{guix build} (@pxref{Invoking
462guix build}).
bd5e766b
LC
463
464The effect is to define the @code{NIX_BUILD_CORES} environment variable
465in the build process, which can then use it to exploit internal
466parallelism---for instance, by running @code{make -j$NIX_BUILD_CORES}.
467
468@item --max-jobs=@var{n}
469@itemx -M @var{n}
470Allow at most @var{n} build jobs in parallel. The default value is
471@code{1}.
472
473@item --debug
474Produce debugging output.
475
476This is useful to debug daemon start-up issues, but then it may be
477overridden by clients, for example the @code{--verbosity} option of
e49951eb 478@command{guix build} (@pxref{Invoking guix build}).
bd5e766b
LC
479
480@item --chroot-directory=@var{dir}
481Add @var{dir} to the build chroot.
482
483Doing this may change the result of build processes---for instance if
484they use optional dependencies found in @var{dir} when it is available,
485and not otherwise. For that reason, it is not recommended to do so.
486Instead, make sure that each derivation declares all the inputs that it
487needs.
488
489@item --disable-chroot
490Disable chroot builds.
491
492Using this option is not recommended since, again, it would allow build
493processes to gain access to undeclared dependencies.
494
495@item --disable-log-compression
496Disable compression of the build logs.
497
1da983b9
LC
498Unless @code{--lose-logs} is used, all the build logs are kept in the
499@var{localstatedir}. To save space, the daemon automatically compresses
500them with bzip2 by default. This option disables that.
501
bd5e766b
LC
502@item --disable-store-optimization
503Disable automatic file ``deduplication'' in the store.
504
1da983b9
LC
505By default, files added to the store are automatically ``deduplicated'':
506if a newly added file is identical as another one found in the store,
507the daemon makes the new file a hard link to the other file. This
508slightly increases the input/output load at the end of a build process.
509This option disables this.
510
6e37066e
LC
511@item --gc-keep-outputs[=yes|no]
512Tell whether the garbage collector (GC) must keep outputs of live
513derivations.
514
515When set to ``yes'', the GC will keep the outputs of any live derivation
516available in the store---the @code{.drv} files. The default is ``no'',
517meaning that derivation outputs are kept only if they are GC roots.
518
519@item --gc-keep-derivations[=yes|no]
520Tell whether the garbage collector (GC) must keep derivations
521corresponding to live outputs.
522
523When set to ``yes'', as is the case by default, the GC keeps
524derivations---i.e., @code{.drv} files---as long as at least one of their
525outputs is live. This allows users to keep track of the origins of
526items in their store. Setting it to ``no'' saves a bit of disk space.
527
528Note that when both @code{--gc-keep-derivations} and
529@code{--gc-keep-outputs} are used, the effect is to keep all the build
530prerequisites (the sources, compiler, libraries, and other build-time
531tools) of live objects in the store, regardless of whether these
532prerequisites are live. This is convenient for developers since it
533saves rebuilds or downloads.
534
bd5e766b
LC
535@item --impersonate-linux-2.6
536On Linux-based systems, impersonate Linux 2.6. This means that the
537kernel's @code{uname} system call will report 2.6 as the release number.
538
539This might be helpful to build programs that (usually wrongfully) depend
540on the kernel version number.
541
542@item --lose-logs
543Do not keep build logs. By default they are kept under
544@code{@var{localstatedir}/nix/log}.
545
546@item --system=@var{system}
547Assume @var{system} as the current system type. By default it is the
548architecture/kernel pair found at configure time, such as
549@code{x86_64-linux}.
b8d2aa26
LC
550
551@item --listen=@var{socket}
552Listen for connections on @var{socket}, the file name of a Unix-domain
553socket. The default socket is
554@file{@var{localstatedir}/daemon-socket/socket}. This option is only
555useful in exceptional circumstances, such as if you need to run several
556daemons on the same machine.
bd5e766b
LC
557@end table
558
559
eeaf4427
LC
560@c *********************************************************************
561@node Package Management
562@chapter Package Management
563
f8348b91 564The purpose of GNU Guix is to allow users to easily install, upgrade, and
eeaf4427
LC
565remove software packages, without having to know about their build
566procedure or dependencies. Guix also goes beyond this obvious set of
567features.
568
569This chapter describes the main features of Guix, as well as the package
570management tools it provides.
571
572@menu
573* Features:: How Guix will make your life brighter.
e49951eb 574* Invoking guix package:: Package installation, removal, etc.
c4202d60 575* Substitutes:: Downloading pre-built binaries.
760c60d6 576* Packages with Multiple Outputs:: Single source package, multiple outputs.
e49951eb 577* Invoking guix gc:: Running the garbage collector.
f651b477 578* Invoking guix pull:: Fetching the latest Guix and distribution.
760c60d6 579* Invoking guix archive:: Exporting and importing store files.
eeaf4427
LC
580@end menu
581
582@node Features
583@section Features
584
585When using Guix, each package ends up in the @dfn{package store}, in its
586own directory---something that resembles
834129e0 587@file{/gnu/store/xxx-package-1.2}, where @code{xxx} is a base32 string.
eeaf4427
LC
588
589Instead of referring to these directories, users have their own
590@dfn{profile}, which points to the packages that they actually want to
821b0015
LC
591use. These profiles are stored within each user's home directory, at
592@code{$HOME/.guix-profile}.
eeaf4427 593
821b0015 594For example, @code{alice} installs GCC 4.7.2. As a result,
eeaf4427 595@file{/home/alice/.guix-profile/bin/gcc} points to
834129e0 596@file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Now, on the same machine,
821b0015
LC
597@code{bob} had already installed GCC 4.8.0. The profile of @code{bob}
598simply continues to point to
834129e0 599@file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc}---i.e., both versions of GCC
821b0015 600coexist on the same system without any interference.
eeaf4427 601
e49951eb
MW
602The @command{guix package} command is the central tool to manage
603packages (@pxref{Invoking guix package}). It operates on those per-user
821b0015 604profiles, and can be used @emph{with normal user privileges}.
eeaf4427
LC
605
606The command provides the obvious install, remove, and upgrade
607operations. Each invocation is actually a @emph{transaction}: either
ba55b1cb 608the specified operation succeeds, or nothing happens. Thus, if the
e49951eb 609@command{guix package} process is terminated during the transaction,
eeaf4427
LC
610or if a power outage occurs during the transaction, then the user's
611profile remains in its previous state, and remains usable.
612
613In addition, any package transaction may be @emph{rolled back}. So, if,
614for example, an upgrade installs a new version of a package that turns
615out to have a serious bug, users may roll back to the previous instance
4af2447e
LC
616of their profile, which was known to work well. Similarly, the global
617system configuration is subject to transactional upgrades and roll-back
618(@pxref{Using the Configuration System}).
eeaf4427
LC
619
620All those packages in the package store may be @emph{garbage-collected}.
621Guix can determine which packages are still referenced by the user
fe8ff028 622profiles, and remove those that are provably no longer referenced
e49951eb 623(@pxref{Invoking guix gc}). Users may also explicitly remove old
fe8ff028
LC
624generations of their profile so that the packages they refer to can be
625collected.
eeaf4427 626
e900c503
LC
627@cindex reproducibility
628@cindex reproducible builds
eeaf4427
LC
629Finally, Guix takes a @dfn{purely functional} approach to package
630management, as described in the introduction (@pxref{Introduction}).
834129e0 631Each @file{/gnu/store} package directory name contains a hash of all the
eeaf4427
LC
632inputs that were used to build that package---compiler, libraries, build
633scripts, etc. This direct correspondence allows users to make sure a
634given package installation matches the current state of their
e900c503
LC
635distribution. It also helps maximize @dfn{build reproducibility}:
636thanks to the isolated build environments that are used, a given build
637is likely to yield bit-identical files when performed on different
638machines (@pxref{Invoking guix-daemon, container}).
eeaf4427 639
c4202d60 640@cindex substitutes
eeaf4427 641This foundation allows Guix to support @dfn{transparent binary/source
c4202d60 642deployment}. When a pre-built binary for a @file{/gnu/store} item is
18f2887b 643available from an external source---a @dfn{substitute}, Guix just
c4202d60
LC
644downloads it and unpacks it;
645otherwise, it builds the package from source, locally
646(@pxref{Substitutes}).
eeaf4427 647
e49951eb
MW
648@node Invoking guix package
649@section Invoking @command{guix package}
eeaf4427 650
e49951eb 651The @command{guix package} command is the tool that allows users to
eeaf4427
LC
652install, upgrade, and remove packages, as well as rolling back to
653previous configurations. It operates only on the user's own profile,
654and works with normal user privileges (@pxref{Features}). Its syntax
655is:
656
657@example
e49951eb 658guix package @var{options}
eeaf4427
LC
659@end example
660
ba55b1cb 661Primarily, @var{options} specifies the operations to be performed during
eeaf4427
LC
662the transaction. Upon completion, a new profile is created, but
663previous generations of the profile remain available, should the user
664want to roll back.
665
6447738c
MW
666For example, to remove @code{lua} and install @code{guile} and
667@code{guile-cairo} in a single transaction:
668
669@example
670guix package -r lua -i guile guile-cairo
671@end example
672
b9e5c0a9 673For each user, a symlink to the user's default profile is automatically
0ec1af59 674created in @file{$HOME/.guix-profile}. This symlink always points to the
b9e5c0a9
LC
675current generation of the user's default profile. Thus, users can add
676@file{$HOME/.guix-profile/bin} to their @code{PATH} environment
677variable, and so on.
678
0ec1af59
LC
679In a multi-user setup, user profiles must be stored in a place
680registered as a @dfn{garbage-collector root}, which
e49951eb 681@file{$HOME/.guix-profile} points to (@pxref{Invoking guix gc}). That
0ec1af59
LC
682directory is normally
683@code{@var{localstatedir}/profiles/per-user/@var{user}}, where
684@var{localstatedir} is the value passed to @code{configure} as
685@code{--localstatedir}, and @var{user} is the user name. It must be
686created by @code{root}, with @var{user} as the owner. When it does not
70c43291
LC
687exist, or is not owned by @var{user}, @command{guix package} emits an
688error about it.
0ec1af59
LC
689
690The @var{options} can be among the following:
691
eeaf4427
LC
692@table @code
693
6447738c
MW
694@item --install=@var{package} @dots{}
695@itemx -i @var{package} @dots{}
696Install the specified @var{package}s.
eeaf4427 697
6447738c 698Each @var{package} may specify either a simple package name, such as
eeaf4427 699@code{guile}, or a package name followed by a hyphen and version number,
dc5669cd
MW
700such as @code{guile-1.8.8}. If no version number is specified, the
701newest available version will be selected. In addition, @var{package}
702may contain a colon, followed by the name of one of the outputs of the
6e721c4d 703package, as in @code{gcc:doc} or @code{binutils-2.22:lib}
e7f34eb0
LC
704(@pxref{Packages with Multiple Outputs}). Packages with a corresponding
705name (and optionally version) are searched for among the GNU
706distribution modules (@pxref{Package Modules}).
eeaf4427 707
461572cc
LC
708@cindex propagated inputs
709Sometimes packages have @dfn{propagated inputs}: these are dependencies
710that automatically get installed along with the required package.
711
712An example is the GNU MPC library: its C header files refer to those of
713the GNU MPFR library, which in turn refer to those of the GMP library.
714Thus, when installing MPC, the MPFR and GMP libraries also get installed
715in the profile; removing MPC also removes MPFR and GMP---unless they had
716also been explicitly installed independently.
717
ba7ea5ce 718Besides, packages sometimes rely on the definition of environment
5924080d 719variables for their search paths (see explanation of
ba7ea5ce 720@code{--search-paths} below). Any missing or possibly incorrect
5924080d
LC
721environment variable definitions are reported here.
722
ef010c0f 723@c XXX: keep me up-to-date
5924080d 724Finally, when installing a GNU package, the tool reports the
ef010c0f
LC
725availability of a newer upstream version. In the future, it may provide
726the option of installing directly from the upstream version, even if
727that version is not yet in the distribution.
728
5d4b411f
LC
729@item --install-from-expression=@var{exp}
730@itemx -e @var{exp}
731Install the package @var{exp} evaluates to.
732
733@var{exp} must be a Scheme expression that evaluates to a
734@code{<package>} object. This option is notably useful to disambiguate
735between same-named variants of a package, with expressions such as
736@code{(@@ (gnu packages base) guile-final)}.
737
738Note that this option installs the first output of the specified
739package, which may be insufficient when needing a specific output of a
740multiple-output package.
741
6447738c
MW
742@item --remove=@var{package} @dots{}
743@itemx -r @var{package} @dots{}
744Remove the specified @var{package}s.
eeaf4427 745
6447738c 746As for @code{--install}, each @var{package} may specify a version number
13ed095c
LC
747and/or output name in addition to the package name. For instance,
748@code{-r glibc:debug} would remove the @code{debug} output of
749@code{glibc}.
750
6447738c
MW
751@item --upgrade[=@var{regexp} @dots{}]
752@itemx -u [@var{regexp} @dots{}]
753Upgrade all the installed packages. If one or more @var{regexp}s are
754specified, upgrade only installed packages whose name matches a
755@var{regexp}.
eeaf4427 756
f651b477
LC
757Note that this upgrades package to the latest version of packages found
758in the distribution currently installed. To update your distribution,
759you should regularly run @command{guix pull} (@pxref{Invoking guix
760pull}).
761
24e262f0
LC
762@item --roll-back
763Roll back to the previous @dfn{generation} of the profile---i.e., undo
764the last transaction.
765
766When combined with options such as @code{--install}, roll back occurs
767before any other actions.
768
d9307267 769When rolling back from the first generation that actually contains
4b2bc804
NK
770installed packages, the profile is made to point to the @dfn{zeroth
771generation}, which contains no files apart from its own meta-data.
d9307267 772
82fe08ed
LC
773Installing, removing, or upgrading packages from a generation that has
774been rolled back to overwrites previous future generations. Thus, the
775history of a profile's generations is always linear.
776
5924080d
LC
777@item --search-paths
778@cindex search paths
779Report environment variable definitions, in Bash syntax, that may be
780needed in order to use the set of installed packages. These environment
781variables are used to specify @dfn{search paths} for files used by some
782of the installed packages.
783
784For example, GCC needs the @code{CPATH} and @code{LIBRARY_PATH}
785environment variables to be defined so it can look for headers and
786libraries in the user's profile (@pxref{Environment Variables,,, gcc,
787Using the GNU Compiler Collection (GCC)}). If GCC and, say, the C
788library are installed in the profile, then @code{--search-paths} will
789suggest setting these variables to @code{@var{profile}/include} and
790@code{@var{profile}/lib}, respectively.
791
eeaf4427
LC
792@item --profile=@var{profile}
793@itemx -p @var{profile}
794Use @var{profile} instead of the user's default profile.
795
70915c1a
LC
796@item --verbose
797Produce verbose output. In particular, emit the environment's build log
798on the standard error port.
799
eeaf4427
LC
800@item --bootstrap
801Use the bootstrap Guile to build the profile. This option is only
802useful to distribution developers.
803
804@end table
805
e49951eb 806In addition to these actions @command{guix package} supports the
733b4130
LC
807following options to query the current state of a profile, or the
808availability of packages:
eeaf4427 809
733b4130
LC
810@table @option
811
acc08466
NK
812@item --search=@var{regexp}
813@itemx -s @var{regexp}
814List the available packages whose synopsis or description matches
299112d3
LC
815@var{regexp}. Print all the meta-data of matching packages in
816@code{recutils} format (@pxref{Top, GNU recutils databases,, recutils,
817GNU recutils manual}).
acc08466 818
299112d3
LC
819This allows specific fields to be extracted using the @command{recsel}
820command, for instance:
821
822@example
e49951eb 823$ guix package -s malloc | recsel -p name,version
299112d3
LC
824name: glibc
825version: 2.17
826
827name: libgc
828version: 7.2alpha6
829@end example
acc08466 830
a12d92f5
LC
831Similarly, to show the name of all the packages available under the
832terms of the GNU@tie{}LGPL version 3:
833
834@example
835$ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
836name: elfutils
837
838name: gmp
839@dots{}
840@end example
841
733b4130
LC
842@item --list-installed[=@var{regexp}]
843@itemx -I [@var{regexp}]
bd9bde1c
LC
844List the currently installed packages in the specified profile, with the
845most recently installed packages shown last. When @var{regexp} is
846specified, list only installed packages whose name matches @var{regexp}.
733b4130
LC
847
848For each installed package, print the following items, separated by
849tabs: the package name, its version string, the part of the package that
850is installed (for instance, @code{out} for the default output,
851@code{include} for its headers, etc.), and the path of this package in
852the store.
853
64fc89b6
LC
854@item --list-available[=@var{regexp}]
855@itemx -A [@var{regexp}]
a1ba8475
LC
856List packages currently available in the software distribution
857(@pxref{GNU Distribution}). When @var{regexp} is specified, list only
858installed packages whose name matches @var{regexp}.
64fc89b6
LC
859
860For each package, print the following items separated by tabs: its name,
6e721c4d
LC
861its version string, the parts of the package (@pxref{Packages with
862Multiple Outputs}), and the source location of its definition.
64fc89b6 863
f566d765
LC
864@item --list-generations[=@var{pattern}]
865@itemx -l [@var{pattern}]
866Return a list of generations along with their creation dates; for each
867generation, show the installed packages, with the most recently
4b2bc804
NK
868installed packages shown last. Note that the zeroth generation is never
869shown.
f566d765
LC
870
871For each installed package, print the following items, separated by
872tabs: the name of a package, its version string, the part of the package
873that is installed (@pxref{Packages with Multiple Outputs}), and the
874location of this package in the store.
875
876When @var{pattern} is used, the command returns only matching
877generations. Valid patterns include:
878
879@itemize
880@item @emph{Integers and comma-separated integers}. Both patterns denote
881generation numbers. For instance, @code{--list-generations=1} returns
882the first one.
883
884And @code{--list-generations=1,8,2} outputs three generations in the
885specified order. Neither spaces nor trailing commas are allowed.
886
887@item @emph{Ranges}. @code{--list-generations=2..9} prints the
888specified generations and everything in between. Note that the start of
889a range must be lesser than its end.
890
891It is also possible to omit the endpoint. For example,
892@code{--list-generations=2..}, returns all generations starting from the
893second one.
894
895@item @emph{Durations}. You can also get the last @emph{N}@tie{}days, weeks,
896or months by passing an integer along with the first letter of the
d7ddb257
LC
897duration. For example, @code{--list-generations=20d} lists generations
898that are up to 20 days old.
f566d765
LC
899@end itemize
900
b7884ca3
NK
901@item --delete-generations[=@var{pattern}]
902@itemx -d [@var{pattern}]
d7ddb257
LC
903When @var{pattern} is omitted, delete all generations except the current
904one.
b7884ca3
NK
905
906This command accepts the same patterns as @option{--list-generations}.
d7ddb257
LC
907When @var{pattern} is specified, delete the matching generations. When
908@var{pattern} specifies a duration, generations @emph{older} than the
909specified duration match. For instance, @code{--delete-generations=1m}
910deletes generations that are more than one month old.
911
912If the current generation matches, it is deleted atomically---i.e., by
913switching to the previous available generation. Note that the zeroth
914generation is never deleted.
b7884ca3 915
1bb9900a
LC
916Note that deleting generations prevents roll-back to them.
917Consequently, this command must be used with care.
918
733b4130 919@end table
eeaf4427 920
70ee5642
LC
921Finally, since @command{guix package} may actually start build
922processes, it supports all the common build options that @command{guix
923build} supports (@pxref{Invoking guix build, common build options}).
924
c4202d60
LC
925@node Substitutes
926@section Substitutes
927
928@cindex substitutes
929@cindex pre-built binaries
930Guix supports transparent source/binary deployment, which means that it
931can either build things locally, or download pre-built items from a
932server. We call these pre-built items @dfn{substitutes}---they are
933substitutes for local build results. In many cases, downloading a
934substitute is much faster than building things locally.
935
936Substitutes can be anything resulting from a derivation build
937(@pxref{Derivations}). Of course, in the common case, they are
938pre-built package binaries, but source tarballs, for instance, which
939also result from derivation builds, can be available as substitutes.
940
941The @code{hydra.gnu.org} server is a front-end to a build farm that
942builds packages from the GNU distribution continuously for some
943architectures, and makes them available as substitutes.
944
945@cindex security
946@cindex digital signatures
947To allow Guix to download substitutes from @code{hydra.gnu.org}, you
948must add its public key to the access control list (ACL) of archive
949imports, using the @command{guix archive} command (@pxref{Invoking guix
950archive}). Doing so implies that you trust @code{hydra.gnu.org} to not
951be compromised and to serve genuine substitutes.
952
953This public key is installed along with Guix, in
954@code{@var{prefix}/share/guix/hydra.gnu.org.pub}, where @var{prefix} is
955the installation prefix of Guix. If you installed Guix from source,
956make sure you checked the GPG signature of
957@file{guix-@value{VERSION}.tar.gz}, which contains this public key file.
958Then, you can run something like this:
959
960@example
961# guix archive --authorize < hydra.gnu.org.pub
962@end example
963
964Once this is in place, the output of a command like @code{guix build}
965should change from something like:
966
967@example
968$ guix build emacs --dry-run
969The following derivations would be built:
970 /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
971 /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
972 /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
973 /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
974@dots{}
975@end example
976
977@noindent
978to something like:
979
980@example
981$ guix build emacs --dry-run
982The following files would be downloaded:
983 /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
984 /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
985 /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
986 /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
987@dots{}
988@end example
989
990@noindent
991This indicates that substitutes from @code{hydra.gnu.org} are usable and
992will be downloaded, when possible, for future builds.
993
994Guix ignores substitutes that are not signed, or that are not signed by
ef27aa9c 995one of the keys listed in the ACL. It also detects and raises an error
c4202d60
LC
996when attempting to use a substitute that has been tampered with.
997
998The substitute mechanism can be disabled globally by running
999@code{guix-daemon} with @code{--no-substitutes} (@pxref{Invoking
1000guix-daemon}). It can also be disabled temporarily by passing the
1001@code{--no-substitutes} option to @command{guix package}, @command{guix
1002build}, and other command-line tools.
1003
1004
1005Today, each individual's control over their own computing is at the
1006mercy of institutions, corporations, and groups with enough power and
1007determination to subvert the computing infrastructure and exploit its
1008weaknesses. While using @code{hydra.gnu.org} substitutes can be
1009convenient, we encourage users to also build on their own, or even run
1010their own build farm, such that @code{hydra.gnu.org} is less of an
1011interesting target.
1012
1013Guix has the foundations to maximize build reproducibility
1014(@pxref{Features}). In most cases, independent builds of a given
1015package or derivation should yield bit-identical results. Thus, through
1016a diverse set of independent package builds, we can strengthen the
1017integrity of our systems.
1018
1019In the future, we want Guix to have support to publish and retrieve
1020binaries to/from other users, in a peer-to-peer fashion. If you would
1021like to discuss this project, join us on @email{guix-devel@@gnu.org}.
1022
1023
6e721c4d
LC
1024@node Packages with Multiple Outputs
1025@section Packages with Multiple Outputs
1026
1027@cindex multiple-output packages
1028@cindex package outputs
1029
1030Often, packages defined in Guix have a single @dfn{output}---i.e., the
1031source package leads exactly one directory in the store. When running
1032@command{guix package -i glibc}, one installs the default output of the
1033GNU libc package; the default output is called @code{out}, but its name
1034can be omitted as shown in this command. In this particular case, the
1035default output of @code{glibc} contains all the C header files, shared
1036libraries, static libraries, Info documentation, and other supporting
1037files.
1038
1039Sometimes it is more appropriate to separate the various types of files
1040produced from a single source package into separate outputs. For
1041instance, the GLib C library (used by GTK+ and related packages)
1042installs more than 20 MiB of reference documentation as HTML pages.
1043To save space for users who do not need it, the documentation goes to a
1044separate output, called @code{doc}. To install the main GLib output,
1045which contains everything but the documentation, one would run:
1046
1047@example
1048guix package -i glib
1049@end example
1050
1051The command to install its documentation is:
1052
1053@example
1054guix package -i glib:doc
1055@end example
1056
1057Some packages install programs with different ``dependency footprints''.
1058For instance, the WordNet package install both command-line tools and
1059graphical user interfaces (GUIs). The former depend solely on the C
1060library, whereas the latter depend on Tcl/Tk and the underlying X
1061libraries. In this case, we leave the command-line tools in the default
1062output, whereas the GUIs are in a separate output. This allows users
1063who do not need the GUIs to save space.
1064
1065There are several such multiple-output packages in the GNU distribution.
91ef73d4
LC
1066Other conventional output names include @code{lib} for libraries and
1067possibly header files, @code{bin} for stand-alone programs, and
1068@code{debug} for debugging information (@pxref{Installing Debugging
1069Files}). The outputs of a packages are listed in the third column of
1070the output of @command{guix package --list-available} (@pxref{Invoking
1071guix package}).
6e721c4d 1072
eeaf4427 1073
e49951eb
MW
1074@node Invoking guix gc
1075@section Invoking @command{guix gc}
fe8ff028
LC
1076
1077@cindex garbage collector
1078Packages that are installed but not used may be @dfn{garbage-collected}.
e49951eb 1079The @command{guix gc} command allows users to explicitly run the garbage
834129e0 1080collector to reclaim space from the @file{/gnu/store} directory.
fe8ff028
LC
1081
1082The garbage collector has a set of known @dfn{roots}: any file under
834129e0 1083@file{/gnu/store} reachable from a root is considered @dfn{live} and
fe8ff028
LC
1084cannot be deleted; any other file is considered @dfn{dead} and may be
1085deleted. The set of garbage collector roots includes default user
e49951eb
MW
1086profiles, and may be augmented with @command{guix build --root}, for
1087example (@pxref{Invoking guix build}).
fe8ff028 1088
1bb9900a
LC
1089Prior to running @code{guix gc --collect-garbage} to make space, it is
1090often useful to remove old generations from user profiles; that way, old
1091package builds referenced by those generations can be reclaimed. This
1092is achieved by running @code{guix package --delete-generations}
1093(@pxref{Invoking guix package}).
1094
e49951eb 1095The @command{guix gc} command has three modes of operation: it can be
fe8ff028
LC
1096used to garbage-collect any dead files (the default), to delete specific
1097files (the @code{--delete} option), or to print garbage-collector
1098information. The available options are listed below:
1099
1100@table @code
1101@item --collect-garbage[=@var{min}]
1102@itemx -C [@var{min}]
834129e0 1103Collect garbage---i.e., unreachable @file{/gnu/store} files and
fe8ff028
LC
1104sub-directories. This is the default operation when no option is
1105specified.
1106
1107When @var{min} is given, stop once @var{min} bytes have been collected.
1108@var{min} may be a number of bytes, or it may include a unit as a
1109suffix, such as @code{MiB} for mebibytes and @code{GB} for gigabytes.
1110
1111When @var{min} is omitted, collect all the garbage.
1112
1113@item --delete
1114@itemx -d
1115Attempt to delete all the store files and directories specified as
1116arguments. This fails if some of the files are not in the store, or if
1117they are still live.
1118
1119@item --list-dead
1120Show the list of dead files and directories still present in the
1121store---i.e., files and directories no longer reachable from any root.
1122
1123@item --list-live
1124Show the list of live store files and directories.
ba8b732d
LC
1125
1126@end table
1127
1128In addition, the references among existing store files can be queried:
1129
1130@table @code
1131
1132@item --references
1133@itemx --referrers
1134List the references (respectively, the referrers) of store files given
1135as arguments.
1136
8e59fdd5
LC
1137@item --requisites
1138@itemx -R
1139List the requisites of the store files passed as arguments. Requisites
1140include the store files themselves, their references, and the references
1141of these, recursively. In other words, the returned list is the
1142@dfn{transitive closure} of the store files.
1143
fe8ff028
LC
1144@end table
1145
eeaf4427 1146
f651b477
LC
1147@node Invoking guix pull
1148@section Invoking @command{guix pull}
1149
1150Packages are installed or upgraded to the latest version available in
1151the distribution currently available on your local machine. To update
1152that distribution, along with the Guix tools, you must run @command{guix
1153pull}: the command downloads the latest Guix source code and package
1154descriptions, and deploys it.
1155
1156On completion, @command{guix package} will use packages and package
1157versions from this just-retrieved copy of Guix. Not only that, but all
1158the Guix commands and Scheme modules will also be taken from that latest
1159version. New @command{guix} sub-commands added by the update also
1160become available.
1161
1162The @command{guix pull} command is usually invoked with no arguments,
1163but it supports the following options:
1164
1165@table @code
1166@item --verbose
1167Produce verbose output, writing build logs to the standard error output.
1168
ab5d72ad
LC
1169@item --url=@var{url}
1170Download the source tarball of Guix from @var{url}.
1171
1172By default, the tarball is taken from its canonical address at
1173@code{gnu.org}, for the stable branch of Guix.
1174
f651b477
LC
1175@item --bootstrap
1176Use the bootstrap Guile to build the latest Guix. This option is only
1177useful to Guix developers.
1178@end table
1179
760c60d6
LC
1180
1181@node Invoking guix archive
1182@section Invoking @command{guix archive}
1183
1184The @command{guix archive} command allows users to @dfn{export} files
1185from the store into a single archive, and to later @dfn{import} them.
1186In particular, it allows store files to be transferred from one machine
1187to another machine's store. For example, to transfer the @code{emacs}
1188package to a machine connected over SSH, one would run:
1189
1190@example
1191guix archive --export emacs | ssh the-machine guix archive --import
1192@end example
1193
87236aed
LC
1194@noindent
1195However, note that, in this example, all of @code{emacs} and its
1196dependencies are transferred, regardless of what is already available in
1197the target machine's store. The @code{--missing} option can help figure
1198out which items are missing from the target's store.
1199
760c60d6 1200Archives are stored in the ``Nix archive'' or ``Nar'' format, which is
0dbd88db
LC
1201comparable in spirit to `tar', but with a few noteworthy differences
1202that make it more appropriate for our purposes. First, rather than
1203recording all Unix meta-data for each file, the Nar format only mentions
1204the file type (regular, directory, or symbolic link); Unix permissions
1205and owner/group are dismissed. Second, the order in which directory
1206entries are stored always follows the order of file names according to
1207the C locale collation order. This makes archive production fully
1208deterministic.
1209
1210When exporting, the daemon digitally signs the contents of the archive,
1211and that digital signature is appended. When importing, the daemon
1212verifies the signature and rejects the import in case of an invalid
1213signature or if the signing key is not authorized.
760c60d6
LC
1214@c FIXME: Add xref to daemon doc about signatures.
1215
1216The main options are:
1217
1218@table @code
1219@item --export
1220Export the specified store files or packages (see below.) Write the
1221resulting archive to the standard output.
1222
1223@item --import
1224Read an archive from the standard input, and import the files listed
1225therein into the store. Abort if the archive has an invalid digital
f82cc5fd
LC
1226signature, or if it is signed by a public key not among the authorized
1227keys (see @code{--authorize} below.)
554f26ec 1228
87236aed
LC
1229@item --missing
1230Read a list of store file names from the standard input, one per line,
1231and write on the standard output the subset of these files missing from
1232the store.
1233
554f26ec 1234@item --generate-key[=@var{parameters}]
f82cc5fd 1235@cindex signing, archives
554f26ec
LC
1236Generate a new key pair for the daemons. This is a prerequisite before
1237archives can be exported with @code{--export}. Note that this operation
1238usually takes time, because it needs to gather enough entropy to
1239generate the key pair.
1240
1241The generated key pair is typically stored under @file{/etc/guix}, in
1242@file{signing-key.pub} (public key) and @file{signing-key.sec} (private
1243key, which must be kept secret.) When @var{parameters} is omitted, it
1244is a 4096-bit RSA key. Alternately, @var{parameters} can specify
1245@code{genkey} parameters suitable for Libgcrypt (@pxref{General
1246public-key related Functions, @code{gcry_pk_genkey},, gcrypt, The
1247Libgcrypt Reference Manual}).
f82cc5fd
LC
1248
1249@item --authorize
1250@cindex authorizing, archives
1251Authorize imports signed by the public key passed on standard input.
1252The public key must be in ``s-expression advanced format''---i.e., the
1253same format as the @file{signing-key.pub} file.
1254
1255The list of authorized keys is kept in the human-editable file
1256@file{/etc/guix/acl}. The file contains
1257@url{http://people.csail.mit.edu/rivest/Sexp.txt, ``advanced-format
1258s-expressions''} and is structured as an access-control list in the
1259@url{http://theworld.com/~cme/spki.txt, Simple Public-Key Infrastructure
1260(SPKI)}.
760c60d6
LC
1261@end table
1262
1263To export store files as an archive to the standard output, run:
1264
1265@example
1266guix archive --export @var{options} @var{specifications}...
1267@end example
1268
1269@var{specifications} may be either store file names or package
1270specifications, as for @command{guix package} (@pxref{Invoking guix
1271package}). For instance, the following command creates an archive
1272containing the @code{gui} output of the @code{git} package and the main
1273output of @code{emacs}:
1274
1275@example
834129e0 1276guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
760c60d6
LC
1277@end example
1278
1279If the specified packages are not built yet, @command{guix archive}
1280automatically builds them. The build process may be controlled with the
1281same options that can be passed to the @command{guix build} command
70ee5642 1282(@pxref{Invoking guix build, common build options}).
760c60d6
LC
1283
1284
568717fd
LC
1285@c *********************************************************************
1286@node Programming Interface
1287@chapter Programming Interface
1288
3dc1970d
LC
1289GNU Guix provides several Scheme programming interfaces (APIs) to
1290define, build, and query packages. The first interface allows users to
1291write high-level package definitions. These definitions refer to
1292familiar packaging concepts, such as the name and version of a package,
1293its build system, and its dependencies. These definitions can then be
1294turned into concrete build actions.
1295
ba55b1cb 1296Build actions are performed by the Guix daemon, on behalf of users. In a
3dc1970d 1297standard setup, the daemon has write access to the store---the
834129e0 1298@file{/gnu/store} directory---whereas users do not. The recommended
3dc1970d
LC
1299setup also has the daemon perform builds in chroots, under a specific
1300build users, to minimize interference with the rest of the system.
1301
1302@cindex derivation
1303Lower-level APIs are available to interact with the daemon and the
1304store. To instruct the daemon to perform a build action, users actually
1305provide it with a @dfn{derivation}. A derivation is a low-level
1306representation of the build actions to be taken, and the environment in
1307which they should occur---derivations are to package definitions what
49ad317a
LC
1308assembly is to C programs. The term ``derivation'' comes from the fact
1309that build results @emph{derive} from them.
3dc1970d
LC
1310
1311This chapter describes all these APIs in turn, starting from high-level
1312package definitions.
1313
568717fd 1314@menu
b860f382 1315* Defining Packages:: Defining new packages.
7458bd0a 1316* Build Systems:: Specifying how packages are built.
b860f382
LC
1317* The Store:: Manipulating the package store.
1318* Derivations:: Low-level interface to package derivations.
1319* The Store Monad:: Purely functional interface to the store.
21b679f6 1320* G-Expressions:: Manipulating build expressions.
568717fd
LC
1321@end menu
1322
1323@node Defining Packages
1324@section Defining Packages
1325
3dc1970d
LC
1326The high-level interface to package definitions is implemented in the
1327@code{(guix packages)} and @code{(guix build-system)} modules. As an
1328example, the package definition, or @dfn{recipe}, for the GNU Hello
1329package looks like this:
1330
1331@example
e7f34eb0
LC
1332(define-module (gnu packages hello)
1333 #:use-module (guix packages)
1334 #:use-module (guix download)
1335 #:use-module (guix build-system gnu)
1336 #:use-module (guix licenses))
b22a12fd 1337
3dc1970d
LC
1338(define hello
1339 (package
1340 (name "hello")
1341 (version "2.8")
1342 (source (origin
1343 (method url-fetch)
1344 (uri (string-append "mirror://gnu/hello/hello-" version
1345 ".tar.gz"))
1346 (sha256
1347 (base32 "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6"))))
1348 (build-system gnu-build-system)
7458bd0a 1349 (arguments `(#:configure-flags '("--enable-silent-rules")))
3dc1970d 1350 (inputs `(("gawk" ,gawk)))
7458bd0a
LC
1351 (synopsis "Hello, GNU world: An example GNU package")
1352 (description "Guess what GNU Hello prints!")
3dc1970d 1353 (home-page "http://www.gnu.org/software/hello/")
b22a12fd 1354 (license gpl3+)))
3dc1970d
LC
1355@end example
1356
1357@noindent
1358Without being a Scheme expert, the reader may have guessed the meaning
e7f34eb0 1359of the various fields here. This expression binds variable @code{hello}
3dc1970d
LC
1360to a @code{<package>} object, which is essentially a record
1361(@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}).
1362This package object can be inspected using procedures found in the
1363@code{(guix packages)} module; for instance, @code{(package-name hello)}
1364returns---surprise!---@code{"hello"}.
1365
e7f34eb0
LC
1366In the example above, @var{hello} is defined into a module of its own,
1367@code{(gnu packages hello)}. Technically, this is not strictly
1368necessary, but it is convenient to do so: all the packages defined in
1369modules under @code{(gnu packages @dots{})} are automatically known to
1370the command-line tools (@pxref{Package Modules}).
1371
3dc1970d
LC
1372There are a few points worth noting in the above package definition:
1373
1374@itemize
1375@item
1376The @code{source} field of the package is an @code{<origin>} object.
1377Here, the @code{url-fetch} method from @code{(guix download)} is used,
1378meaning that the source is a file to be downloaded over FTP or HTTP.
1379
1380The @code{mirror://gnu} prefix instructs @code{url-fetch} to use one of
1381the GNU mirrors defined in @code{(guix download)}.
1382
1383The @code{sha256} field specifies the expected SHA256 hash of the file
1384being downloaded. It is mandatory, and allows Guix to check the
1385integrity of the file. The @code{(base32 @dots{})} form introduces the
6c365eca 1386base32 representation of the hash. You can obtain this information with
210cc920
LC
1387@code{guix download} (@pxref{Invoking guix download}) and @code{guix
1388hash} (@pxref{Invoking guix hash}).
3dc1970d 1389
f9cc8971
LC
1390@cindex patches
1391When needed, the @code{origin} form can also have a @code{patches} field
1392listing patches to be applied, and a @code{snippet} field giving a
1393Scheme expression to modify the source code.
1394
3dc1970d
LC
1395@item
1396@cindex GNU Build System
7458bd0a
LC
1397The @code{build-system} field specifies the procedure to build the
1398package (@pxref{Build Systems}). Here, @var{gnu-build-system}
1399represents the familiar GNU Build System, where packages may be
1400configured, built, and installed with the usual @code{./configure &&
1401make && make check && make install} command sequence.
1402
1403@item
1404The @code{arguments} field specifies options for the build system
1405(@pxref{Build Systems}). Here it is interpreted by
1406@var{gnu-build-system} as a request run @file{configure} with the
1407@code{--enable-silent-rules} flag.
3dc1970d
LC
1408
1409@item
1410The @code{inputs} field specifies inputs to the build process---i.e.,
1411build-time or run-time dependencies of the package. Here, we define an
1412input called @code{"gawk"} whose value is that of the @var{gawk}
1413variable; @var{gawk} is itself bound to a @code{<package>} object.
1414
1415Note that GCC, Coreutils, Bash, and other essential tools do not need to
1416be specified as inputs here. Instead, @var{gnu-build-system} takes care
7458bd0a 1417of ensuring that they are present (@pxref{Build Systems}).
3dc1970d
LC
1418
1419However, any other dependencies need to be specified in the
1420@code{inputs} field. Any dependency not specified here will simply be
1421unavailable to the build process, possibly leading to a build failure.
1422@end itemize
1423
3dc1970d
LC
1424Once a package definition is in place@footnote{Simple package
1425definitions like the one above may be automatically converted from the
e49951eb
MW
1426Nixpkgs distribution using the @command{guix import} command.}, the
1427package may actually be built using the @code{guix build} command-line
7458bd0a
LC
1428tool (@pxref{Invoking guix build}). @xref{Packaging Guidelines}, for
1429more information on how to test package definitions.
1430
1431Eventually, updating the package definition to a new upstream version
1432can be partly automated by the @command{guix refresh} command
1433(@pxref{Invoking guix refresh}).
3dc1970d
LC
1434
1435Behind the scenes, a derivation corresponding to the @code{<package>}
1436object is first computed by the @code{package-derivation} procedure.
834129e0 1437That derivation is stored in a @code{.drv} file under @file{/gnu/store}.
ba55b1cb 1438The build actions it prescribes may then be realized by using the
3dc1970d
LC
1439@code{build-derivations} procedure (@pxref{The Store}).
1440
1441@deffn {Scheme Procedure} package-derivation @var{store} @var{package} [@var{system}]
59688fc4
LC
1442Return the @code{<derivation>} object of @var{package} for @var{system}
1443(@pxref{Derivations}).
3dc1970d
LC
1444
1445@var{package} must be a valid @code{<package>} object, and @var{system}
1446must be a string denoting the target system type---e.g.,
1447@code{"x86_64-linux"} for an x86_64 Linux-based GNU system. @var{store}
1448must be a connection to the daemon, which operates on the store
1449(@pxref{The Store}).
1450@end deffn
568717fd 1451
9c1edabd
LC
1452@noindent
1453@cindex cross-compilation
1454Similarly, it is possible to compute a derivation that cross-builds a
1455package for some other system:
1456
1457@deffn {Scheme Procedure} package-cross-derivation @var{store} @
1458 @var{package} @var{target} [@var{system}]
59688fc4
LC
1459Return the @code{<derivation>} object of @var{package} cross-built from
1460@var{system} to @var{target}.
9c1edabd
LC
1461
1462@var{target} must be a valid GNU triplet denoting the target hardware
1463and operating system, such as @code{"mips64el-linux-gnu"}
1464(@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
1465Configure and Build System}).
1466@end deffn
1467
1468
7458bd0a
LC
1469@node Build Systems
1470@section Build Systems
1471
1472@cindex build system
1473Each package definition specifies a @dfn{build system} and arguments for
1474that build system (@pxref{Defining Packages}). This @code{build-system}
1475field represents the build procedure of the package, as well implicit
1476dependencies of that build procedure.
1477
1478Build systems are @code{<build-system>} objects. The interface to
1479create and manipulate them is provided by the @code{(guix build-system)}
1480module, and actual build systems are exported by specific modules.
1481
1482Build systems accept an optional list of @dfn{arguments}. In package
1483definitions, these are passed @i{via} the @code{arguments} field
1484(@pxref{Defining Packages}). They are typically keyword arguments
1485(@pxref{Optional Arguments, keyword arguments in Guile,, guile, GNU
1486Guile Reference Manual}). The value of these arguments is usually
1487evaluated in the @dfn{build stratum}---i.e., by a Guile process launched
1488by the daemon (@pxref{Derivations}).
1489
1490The main build system is @var{gnu-build-system}, which implements the
1491standard build procedure for GNU packages and many other packages. It
1492is provided by the @code{(guix build-system gnu)} module.
1493
1494@defvr {Scheme Variable} gnu-build-system
1495@var{gnu-build-system} represents the GNU Build System, and variants
1496thereof (@pxref{Configuration, configuration and makefile conventions,,
1497standards, GNU Coding Standards}).
1498
1499@cindex build phases
1500In a nutshell, packages using it configured, built, and installed with
1501the usual @code{./configure && make && make check && make install}
1502command sequence. In practice, a few additional steps are often needed.
1503All these steps are split up in separate @dfn{phases},
1504notably@footnote{Please see the @code{(guix build gnu-build-system)}
1505modules for more details about the build phases.}:
1506
1507@table @code
1508@item unpack
1509Unpack the source tarball, and change the current directory to the
1510extracted source tree. If the source is actually a directory, copy it
1511to the build tree, and enter that directory.
1512
1513@item patch-source-shebangs
1514Patch shebangs encountered in source files so they refer to the right
1515store file names. For instance, this changes @code{#!/bin/sh} to
1516@code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
1517
1518@item configure
1519Run the @file{configure} script with a number of default options, such
1520as @code{--prefix=/gnu/store/@dots{}}, as well as the options specified
1521by the @code{#:configure-flags} argument.
1522
1523@item build
1524Run @code{make} with the list of flags specified with
1525@code{#:make-flags}. If the @code{#:parallel-builds?} argument is true
1526(the default), build with @code{make -j}.
1527
1528@item check
1529Run @code{make check}, or some other target specified with
1530@code{#:test-target}, unless @code{#:tests? #f} is passed. If the
1531@code{#:parallel-tests?} argument is true (the default), run @code{make
1532check -j}.
1533
1534@item install
1535Run @code{make install} with the flags listed in @code{#:make-flags}.
1536
1537@item patch-shebangs
1538Patch shebangs on the installed executable files.
1539
1540@item strip
1541Strip debugging symbols from ELF files (unless @code{#:strip-binaries?}
1542is false), copying them to the @code{debug} output when available
1543(@pxref{Installing Debugging Files}).
1544@end table
1545
1546@vindex %standard-phases
1547The build-side module @code{(guix build gnu-build-system)} defines
1548@var{%standard-phases} as the default list of build phases.
1549@var{%standard-phases} is a list of symbol/procedure pairs, where the
1550procedure implements the actual phase.
1551
1552The list of phases used for a particular package can be changed with the
1553@code{#:phases} parameter. For instance, passing:
1554
1555@example
1556#:phases (alist-delete 'configure %standard-phases)
1557@end example
1558
9bf404e9 1559means that all the phases described above will be used, except the
7458bd0a
LC
1560@code{configure} phase.
1561
1562In addition, this build system ensures that the ``standard'' environment
1563for GNU packages is available. This includes tools such as GCC, libc,
1564Coreutils, Bash, Make, Diffutils, grep, and sed (see the @code{(guix
1565build-system gnu)} module for a complete list.) We call these the
1566@dfn{implicit inputs} of a package, because package definitions don't
1567have to mention them.
1568@end defvr
1569
1570Other @code{<build-system>} objects are defined to support other
1571conventions and tools used by free software packages. They inherit most
1572of @var{gnu-build-system}, and differ mainly in the set of inputs
1573implicitly added to the build process, and in the list of phases
1574executed. Some of these build systems are listed below.
1575
1576@defvr {Scheme Variable} cmake-build-system
1577This variable is exported by @code{(guix build-system cmake)}. It
1578implements the build procedure for packages using the
1579@url{http://www.cmake.org, CMake build tool}.
1580
1581It automatically adds the @code{cmake} package to the set of inputs.
1582Which package is used can be specified with the @code{#:cmake}
1583parameter.
1584@end defvr
1585
1586@defvr {Scheme Variable} python-build-system
1587This variable is exported by @code{(guix build-system python)}. It
1588implements the more or less standard build procedure used by Python
1589packages, which consists in running @code{python setup.py build} and
1590then @code{python setup.py install --prefix=/gnu/store/@dots{}}.
1591
1592For packages that install stand-alone Python programs under @code{bin/},
1593it takes care of wrapping these programs so their @code{PYTHONPATH}
1594environment variable points to all the Python libraries they depend on.
1595
1596Which Python package is used can be specified with the @code{#:python}
1597parameter.
1598@end defvr
1599
1600@defvr {Scheme Variable} perl-build-system
1601This variable is exported by @code{(guix build-system perl)}. It
1602implements the standard build procedure for Perl packages, which
1603consists in running @code{perl Makefile.PL PREFIX=/gnu/store/@dots{}},
1604followed by @code{make} and @code{make install}.
1605
1606The initial @code{perl Makefile.PL} invocation passes flags specified by
1607the @code{#:make-maker-flags} parameter.
1608
1609Which Perl package is used can be specified with @code{#:perl}.
1610@end defvr
1611
1612
1613Lastly, for packages that do not need anything as sophisticated, a
1614``trivial'' build system is provided. It is trivial in the sense that
1615it provides basically no support: it does not pull any implicit inputs,
1616and does not have a notion of build phases.
1617
1618@defvr {Scheme Variable} trivial-build-system
1619This variable is exported by @code{(guix build-system trivial)}.
1620
1621This build system requires a @code{#:builder} argument. This argument
1622must be a Scheme expression that builds the package's output(s)---as
1623with @code{build-expression->derivation} (@pxref{Derivations,
1624@code{build-expression->derivation}}).
1625@end defvr
1626
568717fd
LC
1627@node The Store
1628@section The Store
1629
e531ac2a
LC
1630@cindex store
1631@cindex store paths
1632
1633Conceptually, the @dfn{store} is where derivations that have been
834129e0 1634successfully built are stored---by default, under @file{/gnu/store}.
e531ac2a
LC
1635Sub-directories in the store are referred to as @dfn{store paths}. The
1636store has an associated database that contains information such has the
1637store paths referred to by each store path, and the list of @emph{valid}
1638store paths---paths that result from a successful build.
1639
1640The store is always accessed by the daemon on behalf of its clients
1641(@pxref{Invoking guix-daemon}). To manipulate the store, clients
1642connect to the daemon over a Unix-domain socket, send it requests, and
1643read the result---these are remote procedure calls, or RPCs.
1644
1645The @code{(guix store)} module provides procedures to connect to the
1646daemon, and to perform RPCs. These are described below.
1647
1648@deffn {Scheme Procedure} open-connection [@var{file}] [#:reserve-space? #t]
1649Connect to the daemon over the Unix-domain socket at @var{file}. When
1650@var{reserve-space?} is true, instruct it to reserve a little bit of
1651extra space on the file system so that the garbage collector can still
1652operate, should the disk become full. Return a server object.
1653
1654@var{file} defaults to @var{%default-socket-path}, which is the normal
1655location given the options that were passed to @command{configure}.
1656@end deffn
1657
1658@deffn {Scheme Procedure} close-connection @var{server}
1659Close the connection to @var{server}.
1660@end deffn
1661
1662@defvr {Scheme Variable} current-build-output-port
1663This variable is bound to a SRFI-39 parameter, which refers to the port
1664where build and error logs sent by the daemon should be written.
1665@end defvr
1666
1667Procedures that make RPCs all take a server object as their first
1668argument.
1669
1670@deffn {Scheme Procedure} valid-path? @var{server} @var{path}
1671Return @code{#t} when @var{path} is a valid store path.
1672@end deffn
1673
cfbf9160 1674@deffn {Scheme Procedure} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
e531ac2a
LC
1675Add @var{text} under file @var{name} in the store, and return its store
1676path. @var{references} is the list of store paths referred to by the
1677resulting store path.
1678@end deffn
1679
874e6874 1680@deffn {Scheme Procedure} build-derivations @var{server} @var{derivations}
59688fc4
LC
1681Build @var{derivations} (a list of @code{<derivation>} objects or
1682derivation paths), and return when the worker is done building them.
1683Return @code{#t} on success.
874e6874
LC
1684@end deffn
1685
b860f382
LC
1686Note that the @code{(guix monads)} module provides a monad as well as
1687monadic versions of the above procedures, with the goal of making it
1688more convenient to work with code that accesses the store (@pxref{The
1689Store Monad}).
1690
e531ac2a
LC
1691@c FIXME
1692@i{This section is currently incomplete.}
568717fd
LC
1693
1694@node Derivations
1695@section Derivations
1696
874e6874
LC
1697@cindex derivations
1698Low-level build actions and the environment in which they are performed
1699are represented by @dfn{derivations}. A derivation contain the
1700following pieces of information:
1701
1702@itemize
1703@item
1704The outputs of the derivation---derivations produce at least one file or
1705directory in the store, but may produce more.
1706
1707@item
1708The inputs of the derivations, which may be other derivations or plain
1709files in the store (patches, build scripts, etc.)
1710
1711@item
1712The system type targeted by the derivation---e.g., @code{x86_64-linux}.
1713
1714@item
1715The file name of a build script in the store, along with the arguments
1716to be passed.
1717
1718@item
1719A list of environment variables to be defined.
1720
1721@end itemize
1722
1723@cindex derivation path
1724Derivations allow clients of the daemon to communicate build actions to
1725the store. They exist in two forms: as an in-memory representation,
1726both on the client- and daemon-side, and as files in the store whose
1727name end in @code{.drv}---these files are referred to as @dfn{derivation
1728paths}. Derivations paths can be passed to the @code{build-derivations}
1729procedure to perform the build actions they prescribe (@pxref{The
1730Store}).
1731
1732The @code{(guix derivations)} module provides a representation of
1733derivations as Scheme objects, along with procedures to create and
1734otherwise manipulate derivations. The lowest-level primitive to create
1735a derivation is the @code{derivation} procedure:
1736
1909431c
LC
1737@deffn {Scheme Procedure} derivation @var{store} @var{name} @var{builder} @
1738 @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
2096ef47 1739 [#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
1909431c 1740 [#:system (%current-system)] [#:references-graphs #f] @
b53be755 1741 [#:allowed-references #f] [#:local-build? #f]
59688fc4
LC
1742Build a derivation with the given arguments, and return the resulting
1743@code{<derivation>} object.
874e6874 1744
2096ef47 1745When @var{hash} and @var{hash-algo} are given, a
874e6874 1746@dfn{fixed-output derivation} is created---i.e., one whose result is
36bbbbd1
LC
1747known in advance, such as a file download. If, in addition,
1748@var{recursive?} is true, then that fixed output may be an executable
1749file or a directory and @var{hash} must be the hash of an archive
1750containing this output.
5b0c9d16 1751
858e9282 1752When @var{references-graphs} is true, it must be a list of file
5b0c9d16
LC
1753name/store path pairs. In that case, the reference graph of each store
1754path is exported in the build environment in the corresponding file, in
1755a simple text format.
1909431c 1756
b53be755
LC
1757When @var{allowed-references} is true, it must be a list of store items
1758or outputs that the derivation's output may refer to.
1759
1909431c
LC
1760When @var{local-build?} is true, declare that the derivation is not a
1761good candidate for offloading and should rather be built locally
1762(@pxref{Daemon Offload Setup}). This is the case for small derivations
1763where the costs of data transfers would outweigh the benefits.
874e6874
LC
1764@end deffn
1765
1766@noindent
1767Here's an example with a shell script as its builder, assuming
1768@var{store} is an open connection to the daemon, and @var{bash} points
1769to a Bash executable in the store:
1770
1771@lisp
1772(use-modules (guix utils)
1773 (guix store)
1774 (guix derivations))
1775
59688fc4
LC
1776(let ((builder ; add the Bash script to the store
1777 (add-text-to-store store "my-builder.sh"
1778 "echo hello world > $out\n" '())))
1779 (derivation store "foo"
1780 bash `("-e" ,builder)
21b679f6 1781 #:inputs `((,bash) (,builder))
59688fc4 1782 #:env-vars '(("HOME" . "/homeless"))))
834129e0 1783@result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
874e6874
LC
1784@end lisp
1785
21b679f6
LC
1786As can be guessed, this primitive is cumbersome to use directly. A
1787better approach is to write build scripts in Scheme, of course! The
1788best course of action for that is to write the build code as a
1789``G-expression'', and to pass it to @code{gexp->derivation}. For more
1790information, @ref{G-Expressions}.
1791
1792Once upon a time, @code{gexp->derivation} did not exist and constructing
1793derivations with build code written in Scheme was achieved with
1794@code{build-expression->derivation}, documented below. This procedure
1795is now deprecated in favor of the much nicer @code{gexp->derivation}.
874e6874 1796
dd1a5a15
LC
1797@deffn {Scheme Procedure} build-expression->derivation @var{store} @
1798 @var{name} @var{exp} @
1799 [#:system (%current-system)] [#:inputs '()] @
1800 [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
36bbbbd1 1801 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
63a42824
LC
1802 [#:references-graphs #f] [#:allowed-references #f] @
1803 [#:local-build? #f] [#:guile-for-build #f]
874e6874
LC
1804Return a derivation that executes Scheme expression @var{exp} as a
1805builder for derivation @var{name}. @var{inputs} must be a list of
1806@code{(name drv-path sub-drv)} tuples; when @var{sub-drv} is omitted,
1807@code{"out"} is assumed. @var{modules} is a list of names of Guile
1808modules from the current search path to be copied in the store,
1809compiled, and made available in the load path during the execution of
1810@var{exp}---e.g., @code{((guix build utils) (guix build
1811gnu-build-system))}.
1812
1813@var{exp} is evaluated in an environment where @code{%outputs} is bound
1814to a list of output/path pairs, and where @code{%build-inputs} is bound
1815to a list of string/output-path pairs made from @var{inputs}.
1816Optionally, @var{env-vars} is a list of string pairs specifying the name
1817and value of environment variables visible to the builder. The builder
1818terminates by passing the result of @var{exp} to @code{exit}; thus, when
1819@var{exp} returns @code{#f}, the build is considered to have failed.
1820
1821@var{exp} is built using @var{guile-for-build} (a derivation). When
1822@var{guile-for-build} is omitted or is @code{#f}, the value of the
1823@code{%guile-for-build} fluid is used instead.
9c629a27 1824
63a42824
LC
1825See the @code{derivation} procedure for the meaning of
1826@var{references-graphs}, @var{allowed-references}, and @var{local-build?}.
874e6874
LC
1827@end deffn
1828
1829@noindent
1830Here's an example of a single-output derivation that creates a directory
1831containing one file:
1832
1833@lisp
1834(let ((builder '(let ((out (assoc-ref %outputs "out")))
834129e0 1835 (mkdir out) ; create /gnu/store/@dots{}-goo
874e6874
LC
1836 (call-with-output-file (string-append out "/test")
1837 (lambda (p)
1838 (display '(hello guix) p))))))
dd1a5a15 1839 (build-expression->derivation store "goo" builder))
874e6874 1840
834129e0 1841@result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
874e6874
LC
1842@end lisp
1843
568717fd 1844
b860f382
LC
1845@node The Store Monad
1846@section The Store Monad
1847
1848@cindex monad
1849
1850The procedures that operate on the store described in the previous
1851sections all take an open connection to the build daemon as their first
1852argument. Although the underlying model is functional, they either have
1853side effects or depend on the current state of the store.
1854
1855The former is inconvenient: the connection to the build daemon has to be
1856carried around in all those functions, making it impossible to compose
1857functions that do not take that parameter with functions that do. The
1858latter can be problematic: since store operations have side effects
1859and/or depend on external state, they have to be properly sequenced.
1860
1861@cindex monadic values
1862@cindex monadic functions
1863This is where the @code{(guix monads)} module comes in. This module
1864provides a framework for working with @dfn{monads}, and a particularly
1865useful monad for our uses, the @dfn{store monad}. Monads are a
1866construct that allows two things: associating ``context'' with values
1867(in our case, the context is the store), and building sequences of
1868computations (here computations includes accesses to the store.) Values
1869in a monad---values that carry this additional context---are called
1870@dfn{monadic values}; procedures that return such values are called
1871@dfn{monadic procedures}.
1872
1873Consider this ``normal'' procedure:
1874
1875@example
45adbd62
LC
1876(define (sh-symlink store)
1877 ;; Return a derivation that symlinks the 'bash' executable.
1878 (let* ((drv (package-derivation store bash))
1879 (out (derivation->output-path drv))
1880 (sh (string-append out "/bin/bash")))
1881 (build-expression->derivation store "sh"
1882 `(symlink ,sh %output))))
b860f382
LC
1883@end example
1884
1885Using @code{(guix monads)}, it may be rewritten as a monadic function:
1886
ada3df03 1887@c FIXME: Find a better example, one that uses 'mlet'.
b860f382 1888@example
45adbd62 1889(define (sh-symlink)
b860f382 1890 ;; Same, but return a monadic value.
ada3df03
LC
1891 (gexp->derivation "sh"
1892 #~(symlink (string-append #$bash "/bin/bash") #$output)))
b860f382
LC
1893@end example
1894
1895There are two things to note in the second version: the @code{store}
1896parameter is now implicit, and the monadic value returned by
1897@code{package-file}---a wrapper around @code{package-derivation} and
1898@code{derivation->output-path}---is @dfn{bound} using @code{mlet}
1899instead of plain @code{let}.
1900
1901Calling the monadic @code{profile.sh} has no effect. To get the desired
1902effect, one must use @code{run-with-store}:
1903
1904@example
1905(run-with-store (open-connection) (profile.sh))
834129e0 1906@result{} /gnu/store/...-profile.sh
b860f382
LC
1907@end example
1908
1909The main syntactic forms to deal with monads in general are described
1910below.
1911
1912@deffn {Scheme Syntax} with-monad @var{monad} @var{body} ...
1913Evaluate any @code{>>=} or @code{return} forms in @var{body} as being
1914in @var{monad}.
1915@end deffn
1916
1917@deffn {Scheme Syntax} return @var{val}
1918Return a monadic value that encapsulates @var{val}.
1919@end deffn
1920
1921@deffn {Scheme Syntax} >>= @var{mval} @var{mproc}
1922@dfn{Bind} monadic value @var{mval}, passing its ``contents'' to monadic
1923procedure @var{mproc}@footnote{This operation is commonly referred to as
1924``bind'', but that name denotes an unrelated procedure in Guile. Thus
1925we use this somewhat cryptic symbol inherited from the Haskell
1926language.}.
1927@end deffn
1928
1929@deffn {Scheme Syntax} mlet @var{monad} ((@var{var} @var{mval}) ...) @
1930 @var{body} ...
1931@deffnx {Scheme Syntax} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
1932 @var{body} ...
1933Bind the variables @var{var} to the monadic values @var{mval} in
1934@var{body}. The form (@var{var} -> @var{val}) binds @var{var} to the
1935``normal'' value @var{val}, as per @code{let}.
1936
1937@code{mlet*} is to @code{mlet} what @code{let*} is to @code{let}
1938(@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
1939@end deffn
1940
1941The interface to the store monad provided by @code{(guix monads)} is as
1942follows.
1943
1944@defvr {Scheme Variable} %store-monad
1945The store monad. Values in the store monad encapsulate accesses to the
1946store. When its effect is needed, a value of the store monad must be
1947``evaluated'' by passing it to the @code{run-with-store} procedure (see
1948below.)
1949@end defvr
1950
1951@deffn {Scheme Procedure} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
1952Run @var{mval}, a monadic value in the store monad, in @var{store}, an
1953open store connection.
1954@end deffn
1955
1956@deffn {Monadic Procedure} text-file @var{name} @var{text}
1957Return as a monadic value the absolute file name in the store of the file
45adbd62
LC
1958containing @var{text}, a string.
1959@end deffn
1960
1961@deffn {Monadic Procedure} text-file* @var{name} @var{text} @dots{}
1962Return as a monadic value a derivation that builds a text file
1963containing all of @var{text}. @var{text} may list, in addition to
1964strings, packages, derivations, and store file names; the resulting
1965store file holds references to all these.
1966
1967This variant should be preferred over @code{text-file} anytime the file
1968to create will reference items from the store. This is typically the
1969case when building a configuration file that embeds store file names,
1970like this:
1971
1972@example
1973(define (profile.sh)
1974 ;; Return the name of a shell script in the store that
1975 ;; initializes the 'PATH' environment variable.
1976 (text-file* "profile.sh"
1977 "export PATH=" coreutils "/bin:"
1978 grep "/bin:" sed "/bin\n"))
1979@end example
1980
834129e0 1981In this example, the resulting @file{/gnu/store/@dots{}-profile.sh} file
45adbd62
LC
1982will references @var{coreutils}, @var{grep}, and @var{sed}, thereby
1983preventing them from being garbage-collected during its lifetime.
b860f382
LC
1984@end deffn
1985
1986@deffn {Monadic Procedure} package-file @var{package} [@var{file}] @
1987 [#:system (%current-system)] [#:output "out"] Return as a monadic
1988value in the absolute file name of @var{file} within the @var{output}
1989directory of @var{package}. When @var{file} is omitted, return the name
1990of the @var{output} directory of @var{package}.
1991@end deffn
1992
b860f382
LC
1993@deffn {Monadic Procedure} package->derivation @var{package} [@var{system}]
1994Monadic version of @code{package-derivation} (@pxref{Defining
1995Packages}).
1996@end deffn
1997
1998
21b679f6
LC
1999@node G-Expressions
2000@section G-Expressions
2001
2002@cindex G-expression
2003@cindex build code quoting
2004So we have ``derivations'', which represent a sequence of build actions
2005to be performed to produce an item in the store (@pxref{Derivations}).
2006Those build actions are performed when asking the daemon to actually
2007build the derivations; they are run by the daemon in a container
2008(@pxref{Invoking guix-daemon}).
2009
2010@cindex strata of code
2011It should come as no surprise that we like to write those build actions
2012in Scheme. When we do that, we end up with two @dfn{strata} of Scheme
2013code@footnote{The term @dfn{stratum} in this context was coined by
ef4ab0a4
LC
2014Manuel Serrano et al.@: in the context of their work on Hop. Oleg
2015Kiselyov, who has written insightful
2016@url{http://okmij.org/ftp/meta-programming/#meta-scheme, essays and code
2017on this topic}, refers to this kind of code generation as
2018@dfn{staging}.}: the ``host code''---code that defines packages, talks
2019to the daemon, etc.---and the ``build code''---code that actually
2020performs build actions, such as making directories, invoking
2021@command{make}, etc.
21b679f6
LC
2022
2023To describe a derivation and its build actions, one typically needs to
2024embed build code inside host code. It boils down to manipulating build
2025code as data, and Scheme's homoiconicity---code has a direct
2026representation as data---comes in handy for that. But we need more than
2027Scheme's normal @code{quasiquote} mechanism to construct build
2028expressions.
2029
2030The @code{(guix gexp)} module implements @dfn{G-expressions}, a form of
2031S-expressions adapted to build expressions. G-expressions, or
2032@dfn{gexps}, consist essentially in three syntactic forms: @code{gexp},
2033@code{ungexp}, and @code{ungexp-splicing} (or simply: @code{#~},
2034@code{#$}, and @code{#$@@}), which are comparable respectively to
2035@code{quasiquote}, @code{unquote}, and @code{unquote-splicing}
2036(@pxref{Expression Syntax, @code{quasiquote},, guile, GNU Guile
2037Reference Manual}). However, there are major differences:
2038
2039@itemize
2040@item
2041Gexps are meant to be written to a file and run or manipulated by other
2042processes.
2043
2044@item
2045When a package or derivation is unquoted inside a gexp, the result is as
2046if its output file name had been introduced.
2047
2048@item
2049Gexps carry information about the packages or derivations they refer to,
2050and these dependencies are automatically added as inputs to the build
2051processes that use them.
2052@end itemize
2053
2054To illustrate the idea, here is an example of a gexp:
2055
2056@example
2057(define build-exp
2058 #~(begin
2059 (mkdir #$output)
2060 (chdir #$output)
2061 (symlink (string-append #$coreutils "/bin/ls")
2062 "list-files")))
2063@end example
2064
2065This gexp can be passed to @code{gexp->derivation}; we obtain a
2066derivation that builds a directory containing exactly one symlink to
2067@file{/gnu/store/@dots{}-coreutils-8.22/bin/ls}:
2068
2069@example
2070(gexp->derivation "the-thing" build-exp)
2071@end example
2072
e20fd1bf 2073As one would expect, the @code{"/gnu/store/@dots{}-coreutils-8.22"} string is
21b679f6
LC
2074substituted to the reference to the @var{coreutils} package in the
2075actual build code, and @var{coreutils} is automatically made an input to
2076the derivation. Likewise, @code{#$output} (equivalent to @code{(ungexp
2077output)}) is replaced by a string containing the derivation's output
2078directory name. The syntactic form to construct gexps is summarized
2079below.
2080
2081@deffn {Scheme Syntax} #~@var{exp}
2082@deffnx {Scheme Syntax} (gexp @var{exp})
2083Return a G-expression containing @var{exp}. @var{exp} may contain one
2084or more of the following forms:
2085
2086@table @code
2087@item #$@var{obj}
2088@itemx (ungexp @var{obj})
2089Introduce a reference to @var{obj}. @var{obj} may be a package or a
2090derivation, in which case the @code{ungexp} form is replaced by its
2091output file name---e.g., @code{"/gnu/store/@dots{}-coreutils-8.22}.
2092
2093If @var{obj} is a list, it is traversed and any package or derivation
2094references are substituted similarly.
2095
2096If @var{obj} is another gexp, its contents are inserted and its
2097dependencies are added to those of the containing gexp.
2098
2099If @var{obj} is another kind of object, it is inserted as is.
2100
2101@item #$@var{package-or-derivation}:@var{output}
2102@itemx (ungexp @var{package-or-derivation} @var{output})
2103This is like the form above, but referring explicitly to the
2104@var{output} of @var{package-or-derivation}---this is useful when
2105@var{package-or-derivation} produces multiple outputs (@pxref{Packages
2106with Multiple Outputs}).
2107
2108@item #$output[:@var{output}]
2109@itemx (ungexp output [@var{output}])
2110Insert a reference to derivation output @var{output}, or to the main
2111output when @var{output} is omitted.
2112
2113This only makes sense for gexps passed to @code{gexp->derivation}.
2114
2115@item #$@@@var{lst}
2116@itemx (ungexp-splicing @var{lst})
2117Like the above, but splices the contents of @var{lst} inside the
2118containing list.
2119
2120@end table
2121
2122G-expressions created by @code{gexp} or @code{#~} are run-time objects
2123of the @code{gexp?} type (see below.)
2124@end deffn
2125
2126@deffn {Scheme Procedure} gexp? @var{obj}
2127Return @code{#t} if @var{obj} is a G-expression.
2128@end deffn
2129
2130G-expressions are meant to be written to disk, either as code building
2131some derivation, or as plain files in the store. The monadic procedures
2132below allow you to do that (@pxref{The Store Monad}, for more
2133information about monads.)
2134
2135@deffn {Monadic Procedure} gexp->derivation @var{name} @var{exp} @
2136 [#:system (%current-system)] [#:inputs '()] @
2137 [#:hash #f] [#:hash-algo #f] @
2138 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
2139 [#:references-graphs #f] [#:local-build? #f] @
2140 [#:guile-for-build #f]
2141Return a derivation @var{name} that runs @var{exp} (a gexp) with
2142@var{guile-for-build} (a derivation) on @var{system}.
2143
2144Make @var{modules} available in the evaluation context of @var{EXP};
2145@var{MODULES} is a list of names of Guile modules from the current
2146search path to be copied in the store, compiled, and made available in
2147the load path during the execution of @var{exp}---e.g., @code{((guix
2148build utils) (guix build gnu-build-system))}.
2149
e20fd1bf 2150The other arguments are as for @code{derivation} (@pxref{Derivations}).
21b679f6
LC
2151@end deffn
2152
2153@deffn {Monadic Procedure} gexp->script @var{name} @var{exp}
2154Return an executable script @var{name} that runs @var{exp} using
2155@var{guile} with @var{modules} in its search path.
2156
2157The example below builds a script that simply invokes the @command{ls}
2158command:
2159
2160@example
2161(use-modules (guix gexp) (gnu packages base))
2162
2163(gexp->script "list-files"
2164 #~(execl (string-append #$coreutils "/bin/ls")
2165 "ls"))
2166@end example
2167
2168When ``running'' it through the store (@pxref{The Store Monad,
e20fd1bf 2169@code{run-with-store}}), we obtain a derivation that produces an
21b679f6
LC
2170executable file @file{/gnu/store/@dots{}-list-files} along these lines:
2171
2172@example
2173#!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
2174!#
2175(execl (string-append "/gnu/store/@dots{}-coreutils-8.22"/bin/ls")
2176 "ls")
2177@end example
2178@end deffn
2179
2180@deffn {Monadic Procedure} gexp->file @var{name} @var{exp}
2181Return a derivation that builds a file @var{name} containing @var{exp}.
2182
2183The resulting file holds references to all the dependencies of @var{exp}
2184or a subset thereof.
2185@end deffn
2186
2187Of course, in addition to gexps embedded in ``host'' code, there are
2188also modules containing build tools. To make it clear that they are
2189meant to be used in the build stratum, these modules are kept in the
2190@code{(guix build @dots{})} name space.
2191
2192
568717fd
LC
2193@c *********************************************************************
2194@node Utilities
2195@chapter Utilities
2196
210cc920
LC
2197This section describes tools primarily targeted at developers and users
2198who write new package definitions. They complement the Scheme
2199programming interface of Guix in a convenient way.
2200
568717fd 2201@menu
37166310 2202* Invoking guix build:: Building packages from the command line.
210cc920 2203* Invoking guix download:: Downloading a file and printing its hash.
37166310
LC
2204* Invoking guix hash:: Computing the cryptographic hash of a file.
2205* Invoking guix refresh:: Updating package definitions.
568717fd
LC
2206@end menu
2207
e49951eb
MW
2208@node Invoking guix build
2209@section Invoking @command{guix build}
568717fd 2210
e49951eb 2211The @command{guix build} command builds packages or derivations and
6798a8e4
LC
2212their dependencies, and prints the resulting store paths. Note that it
2213does not modify the user's profile---this is the job of the
e49951eb 2214@command{guix package} command (@pxref{Invoking guix package}). Thus,
6798a8e4
LC
2215it is mainly useful for distribution developers.
2216
2217The general syntax is:
c78bd12b
LC
2218
2219@example
e49951eb 2220guix build @var{options} @var{package-or-derivation}@dots{}
c78bd12b
LC
2221@end example
2222
2223@var{package-or-derivation} may be either the name of a package found in
5401dd75
LC
2224the software distribution such as @code{coreutils} or
2225@code{coreutils-8.20}, or a derivation such as
834129e0 2226@file{/gnu/store/@dots{}-coreutils-8.19.drv}. In the former case, a
e7f34eb0
LC
2227package with the corresponding name (and optionally version) is searched
2228for among the GNU distribution modules (@pxref{Package Modules}).
2229
2230Alternatively, the @code{--expression} option may be used to specify a
2231Scheme expression that evaluates to a package; this is useful when
2232disambiguation among several same-named packages or package variants is
2233needed.
c78bd12b
LC
2234
2235The @var{options} may be zero or more of the following:
2236
2237@table @code
2238
2239@item --expression=@var{expr}
2240@itemx -e @var{expr}
ac5de156 2241Build the package or derivation @var{expr} evaluates to.
c78bd12b 2242
5401dd75 2243For example, @var{expr} may be @code{(@@ (gnu packages guile)
c78bd12b
LC
2244guile-1.8)}, which unambiguously designates this specific variant of
2245version 1.8 of Guile.
2246
ac5de156
LC
2247Alternately, @var{expr} may refer to a zero-argument monadic procedure
2248(@pxref{The Store Monad}). The procedure must return a derivation as a
2249monadic value, which is then passed through @code{run-with-store}.
2250
c78bd12b
LC
2251@item --source
2252@itemx -S
2253Build the packages' source derivations, rather than the packages
2254themselves.
2255
e49951eb 2256For instance, @code{guix build -S gcc} returns something like
834129e0 2257@file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, which is GCC's source tarball.
c78bd12b 2258
f9cc8971
LC
2259The returned source tarball is the result of applying any patches and
2260code snippets specified in the package's @code{origin} (@pxref{Defining
2261Packages}).
2262
c78bd12b
LC
2263@item --system=@var{system}
2264@itemx -s @var{system}
2265Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
2266the host's system type.
2267
2268An example use of this is on Linux-based systems, which can emulate
2269different personalities. For instance, passing
2270@code{--system=i686-linux} on an @code{x86_64-linux} system allows users
2271to build packages in a complete 32-bit environment.
2272
e55ec43d
LC
2273@item --target=@var{triplet}
2274@cindex cross-compilation
2275Cross-build for @var{triplet}, which must be a valid GNU triplet, such
2276as @code{"mips64el-linux-gnu"} (@pxref{Configuration Names, GNU
2277configuration triplets,, configure, GNU Configure and Build System}).
2278
7f3673f2
LC
2279@item --with-source=@var{source}
2280Use @var{source} as the source of the corresponding package.
2281@var{source} must be a file name or a URL, as for @command{guix
2282download} (@pxref{Invoking guix download}).
2283
2284The ``corresponding package'' is taken to be one specified on the
2285command line whose name matches the base of @var{source}---e.g., if
2286@var{source} is @code{/src/guile-2.0.10.tar.gz}, the corresponding
2287package is @code{guile}. Likewise, the version string is inferred from
2288@var{source}; in the previous example, it's @code{2.0.10}.
2289
2290This option allows users to try out versions of packages other than the
2291one provided by the distribution. The example below downloads
2292@file{ed-1.7.tar.gz} from a GNU mirror and uses that as the source for
2293the @code{ed} package:
2294
2295@example
2296guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
2297@end example
2298
2299As a developer, @code{--with-source} makes it easy to test release
2300candidates:
2301
2302@example
2303guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
2304@end example
2305
2306
c78bd12b
LC
2307@item --derivations
2308@itemx -d
2309Return the derivation paths, not the output paths, of the given
2310packages.
2311
70ee5642
LC
2312@item --root=@var{file}
2313@itemx -r @var{file}
2314Make @var{file} a symlink to the result, and register it as a garbage
2315collector root.
2316
2317@item --log-file
2318Return the build log file names for the given
2319@var{package-or-derivation}s, or raise an error if build logs are
2320missing.
2321
2322This works regardless of how packages or derivations are specified. For
2323instance, the following invocations are equivalent:
2324
2325@example
2326guix build --log-file `guix build -d guile`
2327guix build --log-file `guix build guile`
2328guix build --log-file guile
2329guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
2330@end example
2331
2332
2333@end table
2334
2335@cindex common build options
2336In addition, a number of options that control the build process are
2337common to @command{guix build} and other commands that can spawn builds,
2338such as @command{guix package} or @command{guix archive}. These are the
2339following:
2340
2341@table @code
2342
c78bd12b
LC
2343@item --keep-failed
2344@itemx -K
2345Keep the build tree of failed builds. Thus, if a build fail, its build
2346tree is kept under @file{/tmp}, in a directory whose name is shown at
2347the end of the build log. This is useful when debugging build issues.
2348
2349@item --dry-run
2350@itemx -n
2351Do not build the derivations.
2352
56b1f4b7
LC
2353@item --fallback
2354When substituting a pre-built binary fails, fall back to building
2355packages locally.
2356
c78bd12b 2357@item --no-substitutes
b5385b52 2358Do not use substitutes for build products. That is, always build things
c4202d60
LC
2359locally instead of allowing downloads of pre-built binaries
2360(@pxref{Substitutes}).
c78bd12b 2361
425b0bfc 2362@item --no-build-hook
4ec2e92d
LC
2363Do not attempt to offload builds @i{via} the daemon's ``build hook''
2364(@pxref{Daemon Offload Setup}). That is, always build things locally
2365instead of offloading builds to remote machines.
425b0bfc 2366
969e678e
LC
2367@item --max-silent-time=@var{seconds}
2368When the build or substitution process remains silent for more than
2369@var{seconds}, terminate it and report a build failure.
2370
002622b6
LC
2371@item --timeout=@var{seconds}
2372Likewise, when the build or substitution process lasts for more than
2373@var{seconds}, terminate it and report a build failure.
2374
2375By default there is no timeout. This behavior can be restored with
2376@code{--timeout=0}.
2377
07ab4bf1
LC
2378@item --verbosity=@var{level}
2379Use the given verbosity level. @var{level} must be an integer between 0
2380and 5; higher means more verbose output. Setting a level of 4 or more
2381may be helpful when debugging setup issues with the build daemon.
2382
70ee5642
LC
2383@item --cores=@var{n}
2384@itemx -c @var{n}
2385Allow the use of up to @var{n} CPU cores for the build. The special
2386value @code{0} means to use as many CPU cores as available.
bf421152 2387
c78bd12b
LC
2388@end table
2389
e49951eb 2390Behind the scenes, @command{guix build} is essentially an interface to
c78bd12b
LC
2391the @code{package-derivation} procedure of the @code{(guix packages)}
2392module, and to the @code{build-derivations} procedure of the @code{(guix
2393store)} module.
2394
210cc920
LC
2395@node Invoking guix download
2396@section Invoking @command{guix download}
2397
2398When writing a package definition, developers typically need to download
2399the package's source tarball, compute its SHA256 hash, and write that
2400hash in the package definition (@pxref{Defining Packages}). The
2401@command{guix download} tool helps with this task: it downloads a file
2402from the given URI, adds it to the store, and prints both its file name
2403in the store and its SHA256 hash.
2404
2405The fact that the downloaded file is added to the store saves bandwidth:
2406when the developer eventually tries to build the newly defined package
2407with @command{guix build}, the source tarball will not have to be
2408downloaded again because it is already in the store. It is also a
2409convenient way to temporarily stash files, which may be deleted
2410eventually (@pxref{Invoking guix gc}).
2411
2412The @command{guix download} command supports the same URIs as used in
2413package definitions. In particular, it supports @code{mirror://} URIs.
2414@code{https} URIs (HTTP over TLS) are supported @emph{provided} the
2415Guile bindings for GnuTLS are available in the user's environment; when
2416they are not available, an error is raised.
2417
2418The following option is available:
2419
2420@table @code
2421@item --format=@var{fmt}
2422@itemx -f @var{fmt}
2423Write the hash in the format specified by @var{fmt}. For more
2424information on the valid values for @var{fmt}, @ref{Invoking guix hash}.
2425@end table
2426
6c365eca
NK
2427@node Invoking guix hash
2428@section Invoking @command{guix hash}
2429
210cc920 2430The @command{guix hash} command computes the SHA256 hash of a file.
6c365eca
NK
2431It is primarily a convenience tool for anyone contributing to the
2432distribution: it computes the cryptographic hash of a file, which can be
2433used in the definition of a package (@pxref{Defining Packages}).
2434
2435The general syntax is:
2436
2437@example
2438guix hash @var{option} @var{file}
2439@end example
2440
2441@command{guix hash} has the following option:
2442
2443@table @code
2444
2445@item --format=@var{fmt}
2446@itemx -f @var{fmt}
210cc920 2447Write the hash in the format specified by @var{fmt}.
6c365eca
NK
2448
2449Supported formats: @code{nix-base32}, @code{base32}, @code{base16}
2450(@code{hex} and @code{hexadecimal} can be used as well).
2451
2452If the @option{--format} option is not specified, @command{guix hash}
2453will output the hash in @code{nix-base32}. This representation is used
2454in the definitions of packages.
2455
3140f2df
LC
2456@item --recursive
2457@itemx -r
2458Compute the hash on @var{file} recursively.
2459
2460In this case, the hash is computed on an archive containing @var{file},
2461including its children if it is a directory. Some of @var{file}'s
2462meta-data is part of the archive; for instance, when @var{file} is a
2463regular file, the hash is different depending on whether @var{file} is
2464executable or not. Meta-data such as time stamps has no impact on the
2465hash (@pxref{Invoking guix archive}).
2466@c FIXME: Replace xref above with xref to an ``Archive'' section when
2467@c it exists.
2468
6c365eca
NK
2469@end table
2470
37166310
LC
2471@node Invoking guix refresh
2472@section Invoking @command{guix refresh}
2473
2474The primary audience of the @command{guix refresh} command is developers
2475of the GNU software distribution. By default, it reports any packages
2476provided by the distribution that are outdated compared to the latest
2477upstream version, like this:
2478
2479@example
2480$ guix refresh
2481gnu/packages/gettext.scm:29:13: gettext would be upgraded from 0.18.1.1 to 0.18.2.1
2482gnu/packages/glib.scm:77:12: glib would be upgraded from 2.34.3 to 2.37.0
2483@end example
2484
2485It does so by browsing each package's FTP directory and determining the
2486highest version number of the source tarballs
2487therein@footnote{Currently, this only works for GNU packages.}.
2488
2489When passed @code{--update}, it modifies distribution source files to
2490update the version numbers and source tarball hashes of those packages'
2491recipes (@pxref{Defining Packages}). This is achieved by downloading
2492each package's latest source tarball and its associated OpenPGP
2493signature, authenticating the downloaded tarball against its signature
2494using @command{gpg}, and finally computing its hash. When the public
2495key used to sign the tarball is missing from the user's keyring, an
2496attempt is made to automatically retrieve it from a public key server;
2497when it's successful, the key is added to the user's keyring; otherwise,
2498@command{guix refresh} reports an error.
2499
2500The following options are supported:
2501
2502@table @code
2503
2504@item --update
2505@itemx -u
2506Update distribution source files (package recipes) in place.
2507@ref{Defining Packages}, for more information on package definitions.
2508
2509@item --select=[@var{subset}]
2510@itemx -s @var{subset}
2511Select all the packages in @var{subset}, one of @code{core} or
2512@code{non-core}.
2513
2514The @code{core} subset refers to all the packages at the core of the
2515distribution---i.e., packages that are used to build ``everything
2516else''. This includes GCC, libc, Binutils, Bash, etc. Usually,
2517changing one of these packages in the distribution entails a rebuild of
2518all the others. Thus, such updates are an inconvenience to users in
2519terms of build time or bandwidth used to achieve the upgrade.
2520
2521The @code{non-core} subset refers to the remaining packages. It is
2522typically useful in cases where an update of the core packages would be
2523inconvenient.
2524
2525@end table
2526
2527In addition, @command{guix refresh} can be passed one or more package
2528names, as in this example:
2529
2530@example
2531guix refresh -u emacs idutils
2532@end example
2533
2534@noindent
2535The command above specifically updates the @code{emacs} and
2536@code{idutils} packages. The @code{--select} option would have no
2537effect in this case.
2538
f9230085
LC
2539The following options can be used to customize GnuPG operation:
2540
2541@table @code
2542
2543@item --key-server=@var{host}
2544Use @var{host} as the OpenPGP key server when importing a public key.
2545
2546@item --gpg=@var{command}
2547Use @var{command} as the GnuPG 2.x command. @var{command} is searched
2548for in @code{$PATH}.
2549
2550@end table
2551
37166310 2552
a1ba8475
LC
2553@c *********************************************************************
2554@node GNU Distribution
2555@chapter GNU Distribution
2556
2557Guix comes with a distribution of free software@footnote{The term
2558``free'' here refers to the
2559@url{http://www.gnu.org/philosophy/free-sw.html,freedom provided to
c320011d 2560users of that software}.} that forms the basis of the GNU system. This
a1ba8475
LC
2561includes core GNU packages such as GNU libc, GCC, and Binutils, as well
2562as many GNU and non-GNU applications. The complete list of available
d03bb653
LC
2563packages can be browsed
2564@url{http://www.gnu.org/software/guix/package-list.html,on-line} or by
2565running @command{guix package} (@pxref{Invoking guix package}):
a1ba8475
LC
2566
2567@example
e49951eb 2568guix package --list-available
a1ba8475
LC
2569@end example
2570
401c53c4
LC
2571Our goal is to build a practical 100% free software distribution of
2572Linux-based and other variants of GNU, with a focus on the promotion and
2573tight integration of GNU components, and an emphasis on programs and
2574tools that help users exert that freedom.
2575
c320011d
LC
2576The GNU distribution is currently available on the following platforms:
2577
2578@table @code
2579
2580@item x86_64-linux
2581Intel/AMD @code{x86_64} architecture, Linux-Libre kernel;
2582
2583@item i686-linux
2584Intel 32-bit architecture (IA32), Linux-Libre kernel;
2585
2586@item mips64el-linux
2587little-endian 64-bit MIPS processors, specifically the Loongson series,
2588n32 application binary interface (ABI), and Linux-Libre kernel.
2589
2590@end table
2591
2592@noindent
2593For information on porting to other architectures or kernels,
2594@xref{Porting}.
2595
401c53c4 2596@menu
91ef73d4 2597* Installing Debugging Files:: Feeding the debugger.
401c53c4 2598* Package Modules:: Packages from the programmer's viewpoint.
da7cabd4 2599* Packaging Guidelines:: Growing the distribution.
401c53c4 2600* Bootstrapping:: GNU/Linux built from scratch.
8b315a6d 2601* Porting:: Targeting another platform or kernel.
4af2447e 2602* System Configuration:: Configuring a GNU system.
401c53c4
LC
2603@end menu
2604
2605Building this distribution is a cooperative effort, and you are invited
2606to join! @ref{Contributing}, for information about how you can help.
2607
b208a005 2608
91ef73d4
LC
2609@node Installing Debugging Files
2610@section Installing Debugging Files
2611
64d76fa6 2612@cindex debugging files
91ef73d4
LC
2613Program binaries, as produced by the GCC compilers for instance, are
2614typically written in the ELF format, with a section containing
2615@dfn{debugging information}. Debugging information is what allows the
2616debugger, GDB, to map binary code to source code; it is required to
2617debug a compiled program in good conditions.
2618
2619The problem with debugging information is that is takes up a fair amount
2620of disk space. For example, debugging information for the GNU C Library
2621weighs in at more than 60 MiB. Thus, as a user, keeping all the
2622debugging info of all the installed programs is usually not an option.
2623Yet, space savings should not come at the cost of an impediment to
2624debugging---especially in the GNU system, which should make it easier
2625for users to exert their computing freedom (@pxref{GNU Distribution}).
2626
2627Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a
2628mechanism that allows users to get the best of both worlds: debugging
2629information can be stripped from the binaries and stored in separate
2630files. GDB is then able to load debugging information from those files,
2631when they are available (@pxref{Separate Debug Files,,, gdb, Debugging
2632with GDB}).
2633
2634The GNU distribution takes advantage of this by storing debugging
2635information in the @code{lib/debug} sub-directory of a separate package
2636output unimaginatively called @code{debug} (@pxref{Packages with
2637Multiple Outputs}). Users can choose to install the @code{debug} output
2638of a package when they need it. For instance, the following command
2639installs the debugging information for the GNU C Library and for GNU
2640Guile:
2641
2642@example
64d76fa6 2643guix package -i glibc:debug guile:debug
91ef73d4
LC
2644@end example
2645
2646GDB must then be told to look for debug files in the user's profile, by
2647setting the @code{debug-file-directory} variable (consider setting it
2648from the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with
2649GDB}):
2650
2651@example
2652(gdb) set debug-file-directory ~/.guix-profile/lib/debug
2653@end example
2654
2655From there on, GDB will pick up debugging information from the
2656@code{.debug} files under @file{~/.guix-profile/lib/debug}.
2657
64d76fa6
LC
2658In addition, you will most likely want GDB to be able to show the source
2659code being debugged. To do that, you will have to unpack the source
2660code of the package of interest (obtained with @code{guix build
2661--source}, @pxref{Invoking guix build}), and to point GDB to that source
2662directory using the @code{directory} command (@pxref{Source Path,
2663@code{directory},, gdb, Debugging with GDB}).
2664
91ef73d4
LC
2665@c XXX: keep me up-to-date
2666The @code{debug} output mechanism in Guix is implemented by the
64d76fa6 2667@code{gnu-build-system} (@pxref{Build Systems}). Currently, it is
91ef73d4
LC
2668opt-in---debugging information is available only for those packages
2669whose definition explicitly declares a @code{debug} output. This may be
2670changed to opt-out in the future, if our build farm servers can handle
2671the load. To check whether a package has a @code{debug} output, use
2672@command{guix package --list-available} (@pxref{Invoking guix package}).
2673
2674
401c53c4
LC
2675@node Package Modules
2676@section Package Modules
2677
2678From a programming viewpoint, the package definitions of the
e7f34eb0 2679GNU distribution are provided by Guile modules in the @code{(gnu packages
7e17f65d
LC
2680@dots{})} name space@footnote{Note that packages under the @code{(gnu
2681packages @dots{})} module name space are not necessarily ``GNU
2682packages''. This module naming scheme follows the usual Guile module
2683naming convention: @code{gnu} means that these modules are distributed
2684as part of the GNU system, and @code{packages} identifies modules that
2685define packages.} (@pxref{Modules, Guile modules,, guile, GNU Guile
b81e1947
LC
2686Reference Manual}). For instance, the @code{(gnu packages emacs)}
2687module exports a variable named @code{emacs}, which is bound to a
e7f34eb0
LC
2688@code{<package>} object (@pxref{Defining Packages}).
2689
2690The @code{(gnu packages @dots{})} module name space is special: it is
2691automatically scanned for packages by the command-line tools. For
2692instance, when running @code{guix package -i emacs}, all the @code{(gnu
2693packages @dots{})} modules are scanned until one that exports a package
2694object whose name is @code{emacs} is found. This package search
2695facility is implemented in the @code{(gnu packages)} module.
2696
2697Users can store package definitions in modules with different
2698names---e.g., @code{(my-packages emacs)}. In that case, commands such
2699as @command{guix package} and @command{guix build} have to be used with
2700the @code{-e} option so that they know where to find the package.
a1ba8475
LC
2701
2702The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}:
2703each package is built based solely on other packages in the
2704distribution. The root of this dependency graph is a small set of
2705@dfn{bootstrap binaries}, provided by the @code{(gnu packages
b81e1947
LC
2706bootstrap)} module. For more information on bootstrapping,
2707@ref{Bootstrapping}.
2708
da7cabd4
AE
2709@node Packaging Guidelines
2710@section Packaging Guidelines
b81e1947
LC
2711
2712The GNU distribution is nascent and may well lack some of your favorite
2713packages. This section describes how you can help make the distribution
c8c871d1 2714grow. @xref{Contributing}, for additional information on how you can
b81e1947
LC
2715help.
2716
b81e1947
LC
2717Free software packages are usually distributed in the form of
2718@dfn{source code tarballs}---typically @file{tar.gz} files that contain
2719all the source files. Adding a package to the distribution means
2720essentially two things: adding a @dfn{recipe} that describes how to
2721build the package, including a list of other packages required to build
2722it, and adding @dfn{package meta-data} along with that recipe, such as a
2723description and licensing information.
2724
2725In Guix all this information is embodied in @dfn{package definitions}.
2726Package definitions provide a high-level view of the package. They are
2727written using the syntax of the Scheme programming language; in fact,
2728for each package we define a variable bound to the package definition,
2729and export that variable from a module (@pxref{Package Modules}).
2730However, in-depth Scheme knowledge is @emph{not} a prerequisite for
2731creating packages. For more information on package definitions,
2732@ref{Defining Packages}.
2733
2734Once a package definition is in place, stored in a file in the Guix
2735source tree, it can be tested using the @command{guix build} command
2736(@pxref{Invoking guix build}). For example, assuming the new package is
2737called @code{gnew}, you may run this command from the Guix build tree:
2738
2739@example
2740./pre-inst-env guix build gnew --keep-failed
2741@end example
2742
2743Using @code{--keep-failed} makes it easier to debug build failures since
7458bd0a
LC
2744it provides access to the failed build tree. Another useful
2745command-line option when debugging is @code{--log-file}, to access the
2746build log.
b81e1947 2747
5ff3c4b8
PAR
2748If the package is unknown to the @command{guix} command, it may be that
2749the source file contains a syntax error, or lacks a @code{define-public}
2750clause to export the package variable. To figure it out, you may load
2751the module from Guile to get more information about the actual error:
2752
2753@example
2754./pre-inst-env guile -c '(use-modules (gnu packages gnew))'
2755@end example
2756
b81e1947
LC
2757Once your package builds correctly, please send us a patch
2758(@pxref{Contributing}). Well, if you need help, we will be happy to
2759help you too. Once the patch is committed in the Guix repository, the
2760new package automatically gets built on the supported platforms by
2761@url{http://hydra.gnu.org/gnu/master, our continuous integration
2762system}.
2763
2764@cindex substituter
2765Users can obtain the new package definition simply by running
2766@command{guix pull} (@pxref{Invoking guix pull}). When
2767@code{hydra.gnu.org} is done building the package, installing the
c4202d60
LC
2768package automatically downloads binaries from there
2769(@pxref{Substitutes}). The only place where human intervention is
b81e1947 2770needed is to review and apply the patch.
401c53c4
LC
2771
2772
da7cabd4 2773@menu
ee85f3db
AE
2774* Software Freedom:: What may go into the distribution.
2775* Package Naming:: What's in a name?
2776* Version Numbers:: When the name is not enough.
2777* Python Modules:: Taming the snake.
af8a56b8 2778* Perl Modules:: Little pearls.
da7cabd4
AE
2779@end menu
2780
2781@node Software Freedom
2782@subsection Software Freedom
2783
2784@c Adapted from http://www.gnu.org/philosophy/philosophy.html.
2785
2786The GNU operating system has been developed so that users can have
2787freedom in their computing. GNU is @dfn{free software}, meaning that
2788users have the @url{http://www.gnu.org/philosophy/free-sw.html,four
2789essential freedoms}: to run the program, to study and change the program
2790in source code form, to redistribute exact copies, and to distribute
2791modified versions. Packages found in the GNU distribution provide only
2792software that conveys these four freedoms.
2793
2794In addition, the GNU distribution follow the
2795@url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free
2796software distribution guidelines}. Among other things, these guidelines
2797reject non-free firmware, recommendations of non-free software, and
2798discuss ways to deal with trademarks and patents.
2799
f9cc8971
LC
2800Some packages contain a small and optional subset that violates the
2801above guidelines, for instance because this subset is itself non-free
2802code. When that happens, the offending items are removed with
2803appropriate patches or code snippets in the package definition's
2804@code{origin} form (@pxref{Defining Packages}). That way, @code{guix
2805build --source} returns the ``freed'' source rather than the unmodified
2806upstream source.
2807
da7cabd4 2808
ee85f3db
AE
2809@node Package Naming
2810@subsection Package Naming
2811
c8c871d1 2812A package has actually two names associated with it:
ee85f3db 2813First, there is the name of the @emph{Scheme variable}, the one following
c8c871d1
AE
2814@code{define-public}. By this name, the package can be made known in the
2815Scheme code, for instance as input to another package. Second, there is
2816the string in the @code{name} field of a package definition. This name
2817is used by package management commands such as
2818@command{guix package} and @command{guix build}.
ee85f3db 2819
25083588
LC
2820Both are usually the same and correspond to the lowercase conversion of
2821the project name chosen upstream, with underscores replaced with
2822hyphens. For instance, GNUnet is available as @code{gnunet}, and
2823SDL_net as @code{sdl-net}.
2824
2825We do not add @code{lib} prefixes for library packages, unless these are
2826already part of the official project name. But see @pxref{Python
2827Modules} and @ref{Perl Modules} for special rules concerning modules for
2828the Python and Perl languages.
ee85f3db
AE
2829
2830
2831@node Version Numbers
2832@subsection Version Numbers
2833
2834We usually package only the latest version of a given free software
c8c871d1
AE
2835project. But sometimes, for instance for incompatible library versions,
2836two (or more) versions of the same package are needed. These require
2837different Scheme variable names. We use the name as defined
2838in @ref{Package Naming}
ee85f3db
AE
2839for the most recent version; previous versions use the same name, suffixed
2840by @code{-} and the smallest prefix of the version number that may
2841distinguish the two versions.
2842
2843The name inside the package definition is the same for all versions of a
2844package and does not contain any version number.
2845
2846For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as follows:
c8c871d1 2847
ee85f3db
AE
2848@example
2849(define-public gtk+
2850 (package
2851 (name "gtk+")
2852 (version "3.9.12")
2853 ...))
2854(define-public gtk+-2
2855 (package
2856 (name "gtk+")
2857 (version "2.24.20")
2858 ...))
2859@end example
2860If we also wanted GTK+ 3.8.2, this would be packaged as
2861@example
2862(define-public gtk+-3.8
2863 (package
2864 (name "gtk+")
2865 (version "3.8.2")
2866 ...))
2867@end example
2868
2869
2870@node Python Modules
2871@subsection Python Modules
2872
2873We currently package Python 2 and Python 3, under the Scheme variable names
2874@code{python-2} and @code{python} as explained in @ref{Version Numbers}.
2875To avoid confusion and naming clashes with other programming languages, it
2876seems desirable that the name of a package for a Python module contains
2877the word @code{python}.
c8c871d1 2878
ee85f3db
AE
2879Some modules are compatible with only one version of Python, others with both.
2880If the package Foo compiles only with Python 3, we name it
2881@code{python-foo}; if it compiles only with Python 2, we name it
2882@code{python2-foo}. If it is compatible with both versions, we create two
2883packages with the corresponding names.
2884
2885If a project already contains the word @code{python}, we drop this;
2886for instance, the module python-dateutil is packaged under the names
2887@code{python-dateutil} and @code{python2-dateutil}.
2888
2889
af8a56b8
AE
2890@node Perl Modules
2891@subsection Perl Modules
2892
2893Perl programs standing for themselves are named as any other package,
2894using the lowercase upstream name.
2895For Perl packages containing a single class, we use the lowercase class name,
2896replace all occurrences of @code{::} by dashes and prepend the prefix
2897@code{perl-}.
2898So the class @code{XML::Parser} becomes @code{perl-xml-parser}.
2899Modules containing several classes keep their lowercase upstream name and
2900are also prepended by @code{perl-}. Such modules tend to have the word
2901@code{perl} somewhere in their name, which gets dropped in favor of the
2902prefix. For instance, @code{libwww-perl} becomes @code{perl-libwww}.
ee85f3db
AE
2903
2904
2905
401c53c4
LC
2906@node Bootstrapping
2907@section Bootstrapping
2908
2909@c Adapted from the ELS 2013 paper.
2910
2911@cindex bootstrapping
2912
2913Bootstrapping in our context refers to how the distribution gets built
2914``from nothing''. Remember that the build environment of a derivation
2915contains nothing but its declared inputs (@pxref{Introduction}). So
2916there's an obvious chicken-and-egg problem: how does the first package
2917get built? How does the first compiler get compiled? Note that this is
2918a question of interest only to the curious hacker, not to the regular
2919user, so you can shamelessly skip this section if you consider yourself
2920a ``regular user''.
2921
2922@cindex bootstrap binaries
2923The GNU system is primarily made of C code, with libc at its core. The
2924GNU build system itself assumes the availability of a Bourne shell and
2925command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
2926`grep'. Furthermore, build programs---programs that run
2927@code{./configure}, @code{make}, etc.---are written in Guile Scheme
2928(@pxref{Derivations}). Consequently, to be able to build anything at
2929all, from scratch, Guix relies on pre-built binaries of Guile, GCC,
2930Binutils, libc, and the other packages mentioned above---the
2931@dfn{bootstrap binaries}.
2932
2933These bootstrap binaries are ``taken for granted'', though we can also
ba7ea5ce 2934re-create them if needed (more on that later).
401c53c4
LC
2935
2936@unnumberedsubsec Preparing to Use the Bootstrap Binaries
2937
2938@c As of Emacs 24.3, Info-mode displays the image, but since it's a
2939@c large image, it's hard to scroll. Oh well.
29f66ddd 2940@image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap derivations}
401c53c4
LC
2941
2942The figure above shows the very beginning of the dependency graph of the
2943distribution, corresponding to the package definitions of the @code{(gnu
2944packages bootstrap)} module. At this level of detail, things are
2945slightly complex. First, Guile itself consists of an ELF executable,
2946along with many source and compiled Scheme files that are dynamically
2947loaded when it runs. This gets stored in the @file{guile-2.0.7.tar.xz}
2948tarball shown in this graph. This tarball is part of Guix's ``source''
2949distribution, and gets inserted into the store with @code{add-to-store}
2950(@pxref{The Store}).
a1ba8475 2951
401c53c4
LC
2952But how do we write a derivation that unpacks this tarball and adds it
2953to the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
2954derivation---the first one that gets built---uses @code{bash} as its
2955builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
2956@code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar},
2957@file{xz}, and @file{mkdir} are statically-linked binaries, also part of
2958the Guix source distribution, whose sole purpose is to allow the Guile
2959tarball to be unpacked.
2960
2961Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning
2962Guile that can be used to run subsequent build programs. Its first task
2963is to download tarballs containing the other pre-built binaries---this
2964is what the @code{.tar.xz.drv} derivations do. Guix modules such as
2965@code{ftp-client.scm} are used for this purpose. The
2966@code{module-import.drv} derivations import those modules in a directory
2967in the store, using the original layout. The
2968@code{module-import-compiled.drv} derivations compile those modules, and
2969write them in an output directory with the right layout. This
2970corresponds to the @code{#:modules} argument of
2971@code{build-expression->derivation} (@pxref{Derivations}).
2972
2973Finally, the various tarballs are unpacked by the
2974derivations @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv},
2975etc., at which point we have a working C tool chain.
2976
2977
2978@unnumberedsubsec Building the Build Tools
2979
2980@c TODO: Add a package-level dependency graph generated from (gnu
2981@c packages base).
2982
2983Bootstrapping is complete when we have a full tool chain that does not
2984depend on the pre-built bootstrap tools discussed above. This
2985no-dependency requirement is verified by checking whether the files of
834129e0 2986the final tool chain contain references to the @file{/gnu/store}
401c53c4
LC
2987directories of the bootstrap inputs. The process that leads to this
2988``final'' tool chain is described by the package definitions found in
2989the @code{(gnu packages base)} module.
2990
2991@c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
2992The first tool that gets built with the bootstrap binaries is
2993GNU Make, which is a prerequisite for all the following packages.
2994From there Findutils and Diffutils get built.
2995
2996Then come the first-stage Binutils and GCC, built as pseudo cross
2997tools---i.e., with @code{--target} equal to @code{--host}. They are
2998used to build libc. Thanks to this cross-build trick, this libc is
2999guaranteed not to hold any reference to the initial tool chain.
3000
3001From there the final Binutils and GCC are built. GCC uses @code{ld}
3002from the final Binutils, and links programs against the just-built libc.
3003This tool chain is used to build the other packages used by Guix and by
3004the GNU Build System: Guile, Bash, Coreutils, etc.
3005
3006And voilà! At this point we have the complete set of build tools that
3007the GNU Build System expects. These are in the @code{%final-inputs}
3008variables of the @code{(gnu packages base)} module, and are implicitly
3009used by any package that uses @code{gnu-build-system} (@pxref{Defining
3010Packages}).
3011
3012
3013@unnumberedsubsec Building the Bootstrap Binaries
3014
3015Because the final tool chain does not depend on the bootstrap binaries,
3016those rarely need to be updated. Nevertheless, it is useful to have an
3017automated way to produce them, should an update occur, and this is what
3018the @code{(gnu packages make-bootstrap)} module provides.
3019
3020The following command builds the tarballs containing the bootstrap
3021binaries (Guile, Binutils, GCC, libc, and a tarball containing a mixture
3022of Coreutils and other basic command-line tools):
a1ba8475 3023
401c53c4
LC
3024@example
3025guix build bootstrap-tarballs
3026@end example
3027
3028The generated tarballs are those that should be referred to in the
3029@code{(gnu packages bootstrap)} module mentioned at the beginning of
3030this section.
3031
3032Still here? Then perhaps by now you've started to wonder: when do we
3033reach a fixed point? That is an interesting question! The answer is
3034unknown, but if you would like to investigate further (and have
3035significant computational and storage resources to do so), then let us
3036know.
a1ba8475 3037
8b315a6d
LC
3038@node Porting
3039@section Porting to a New Platform
3040
3041As discussed above, the GNU distribution is self-contained, and
3042self-containment is achieved by relying on pre-built ``bootstrap
3043binaries'' (@pxref{Bootstrapping}). These binaries are specific to an
3044operating system kernel, CPU architecture, and application binary
3045interface (ABI). Thus, to port the distribution to a platform that is
3046not yet supported, one must build those bootstrap binaries, and update
3047the @code{(gnu packages bootstrap)} module to use them on that platform.
3048
3049Fortunately, Guix can @emph{cross compile} those bootstrap binaries.
3050When everything goes well, and assuming the GNU tool chain supports the
3051target platform, this can be as simple as running a command like this
3052one:
3053
3054@example
3055guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
3056@end example
3057
72e25e35
LC
3058Once these are built, the @code{(gnu packages bootstrap)} module needs
3059to be updated to refer to these binaries on the target platform. In
3060addition, the @code{glibc-dynamic-linker} procedure in that module must
3061be augmented to return the right file name for libc's dynamic linker on
3062that platform; likewise, @code{system->linux-architecture} in @code{(gnu
3063packages linux)} must be taught about the new platform.
3064
8b315a6d
LC
3065In practice, there may be some complications. First, it may be that the
3066extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
3067above) is not recognized by all the GNU tools. Typically, glibc
3068recognizes some of these, whereas GCC uses an extra @code{--with-abi}
ba7ea5ce 3069configure flag (see @code{gcc.scm} for examples of how to handle this).
8b315a6d
LC
3070Second, some of the required packages could fail to build for that
3071platform. Lastly, the generated binaries could be broken for some
3072reason.
3073
9bf3c1a7 3074
4af2447e
LC
3075@node System Configuration
3076@section System Configuration
3077
3078@emph{This section documents work-in-progress. As such it may be
3079incomplete, outdated, or open to discussions. Please discuss it on
3080@email{guix-devel@@gnu.org}.}
3081
3082@cindex system configuration
3083The GNU system supports a consistent whole-system configuration
3084mechanism. By that we mean that all aspects of the global system
3085configuration---such as the available system services, timezone and
68ad877c 3086locale settings, user accounts---are declared in a single place. Such
4af2447e
LC
3087a @dfn{system configuration} can be @dfn{instantiated}---i.e., effected.
3088
68ad877c
LC
3089One of the advantages of putting all the system configuration under the
3090control of Guix is that it supports transactional system upgrades, and
3091makes it possible to roll-back to a previous system instantiation,
3092should something go wrong with the new one (@pxref{Features}). Another
3093one is that it makes it easy to replicate the exact same configuration
3094across different machines, or at different points in time, without
3095having to resort to additional administration tools layered on top of
3096the system's own tools.
3097@c Yes, we're talking of Puppet, Chef, & co. here. ↑
3098
4af2447e
LC
3099This section describes this mechanism. First we focus on the system
3100administrator's viewpoint---explaining how the system is configured and
3101instantiated. Then we show how this mechanism can be extended, for
3102instance to support new system services.
3103
3104@menu
523e4896
LC
3105* Using the Configuration System:: Customizing your GNU system.
3106* Invoking guix system:: Instantiating a system configuration.
3107* Defining Services:: Adding new service definitions.
4af2447e
LC
3108@end menu
3109
3110@node Using the Configuration System
3111@subsection Using the Configuration System
3112
3113The operating system is configured by filling in an
3114@code{operating-system} structure, as defined by the @code{(gnu system)}
3115module. A simple setup, with the default system services, the default
3116Linux-Libre kernel, initial RAM disk, and boot loader looks like this:
3117
3118@findex operating-system
3119@lisp
c9384945 3120(use-modules (gnu) ; for 'user-account', '%base-services', etc.
6f436c54
LC
3121 (gnu packages emacs) ; for 'emacs'
3122 (gnu services ssh)) ; for 'lsh-service'
4af2447e 3123
68ad877c 3124(define komputilo
4af2447e
LC
3125 (operating-system
3126 (host-name "komputilo")
3127 (timezone "Europe/Paris")
3128 (locale "fr_FR.UTF-8")
d467e640
LC
3129 (bootloader (grub-configuration
3130 (device "/dev/sda")))
83bcd0b8 3131 (file-systems (list (file-system
85a83edb 3132 (device "/dev/sda1") ; or partition label
83bcd0b8
LC
3133 (mount-point "/")
3134 (type "ext3"))))
4af2447e
LC
3135 (users (list (user-account
3136 (name "alice")
3137 (password "")
3138 (uid 1000) (gid 100)
3139 (comment "Bob's sister")
3140 (home-directory "/home/alice"))))
6f436c54 3141 (packages (cons emacs %base-packages))
4af2447e 3142 (services (cons (lsh-service #:port 2222 #:allow-root-login? #t)
8b198abe 3143 %base-services))))
4af2447e
LC
3144@end lisp
3145
3146This example should be self-describing. The @code{packages} field lists
6f436c54
LC
3147packages that will be globally visible on the system, for all user
3148accounts---i.e., in every user's @code{PATH} environment variable---in
3149addition to the per-user profiles (@pxref{Invoking guix package}). The
3150@var{%base-packages} variables provides all the tools one would expect
3151for basic user and administrator tasks---including the GNU Core
3152Utilities, the GNU Networking Utilities, the GNU Zile lightweight text
3153editor, @command{find}, @command{grep}, etc. The example above adds
3154Emacs to those, taken from the @code{(gnu packages emacs)} module
3155(@pxref{Package Modules}).
4af2447e 3156
8b198abe 3157@vindex %base-services
4af2447e 3158The @code{services} field lists @dfn{system services} to be made
8b198abe 3159available when the system starts. The @var{%base-services} list,
db4fdc04 3160from the @code{(gnu services base)} module, provides the basic services one
4af2447e
LC
3161would expect from a GNU system: a login service (mingetty) on each tty,
3162syslogd, libc's name service cache daemon (nscd), etc.
3163
3164The @code{operating-system} declaration above specifies that, in
3165addition to those services, we want the @command{lshd} secure shell
3166daemon listening on port 2222, and allowing remote @code{root} logins
3167(@pxref{Invoking lshd,,, lsh, GNU lsh Manual}). Under the hood,
3168@code{lsh-service} arranges so that @code{lshd} is started with the
3169right command-line options, possibly with supporting configuration files
3170generated as needed (@pxref{Defining Services}).
3171
4af2447e 3172Assuming the above snippet is stored in the @file{my-system-config.scm}
523e4896
LC
3173file, the @command{guix system boot my-system-config.scm} command
3174instantiates that configuration, and makes it the default GRUB boot
3175entry (@pxref{Invoking guix system}). The normal way to change the
3176system's configuration is by updating this file and re-running the
3177@command{guix system} command.
4af2447e
LC
3178
3179At the Scheme level, the bulk of an @code{operating-system} declaration
3180is instantiated with the following monadic procedure (@pxref{The Store
3181Monad}):
3182
3183@deffn {Monadic Procedure} operating-system-derivation os
3184Return a derivation that builds @var{os}, an @code{operating-system}
3185object (@pxref{Derivations}).
3186
3187The output of the derivation is a single directory that refers to all
3188the packages, configuration files, and other supporting files needed to
3189instantiate @var{os}.
3190@end deffn
3191
523e4896
LC
3192@node Invoking guix system
3193@subsection Invoking @code{guix system}
3194
3195Once you have written an operating system declaration, as seen in the
3196previous section, it can be @dfn{instantiated} using the @command{guix
3197system} command. The synopsis is:
3198
3199@example
3200guix system @var{options}@dots{} @var{action} @var{file}
3201@end example
3202
3203@var{file} must be the name of a file containing an
3204@code{operating-system} declaration. @var{action} specifies how the
2e7b5cea
LC
3205operating system is instantiate. Currently the following values are
3206supported:
523e4896
LC
3207
3208@table @code
7889394e
LC
3209@item build
3210Build the operating system's derivation, which includes all the
3211configuration files and programs needed to boot and run the system.
3212This action does not actually install anything.
3213
72b9d60d
LC
3214@item init
3215Populate the given directory with all the files necessary to run the
3216operating system specified in @var{file}. This is useful for first-time
3217installations of the GNU system. For instance:
3218
3219@example
3220guix system init my-os-config.scm /mnt
3221@end example
3222
3223copies to @file{/mnt} all the store items required by the configuration
3224specified in @file{my-os-config.scm}. This includes configuration
3225files, packages, and so on. It also creates other essential files
3226needed for the system to operate correctly---e.g., the @file{/etc},
3227@file{/var}, and @file{/run} directories, and the @file{/bin/sh} file.
3228
c79d54fe
LC
3229This command also installs GRUB on the device specified in
3230@file{my-os-config}, unless the @option{--no-grub} option was passed.
3231
523e4896
LC
3232@item vm
3233@cindex virtual machine
3234Build a virtual machine that contain the operating system declared in
3235@var{file}, and return a script to run that virtual machine (VM).
3236
3237The VM shares its store with the host system.
2e7b5cea
LC
3238
3239@item vm-image
fb729425
LC
3240@itemx disk-image
3241Return a virtual machine or disk image of the operating system declared
3242in @var{file} that stands alone. Use the @option{--image-size} option
3243to specify the size of the image.
3244
3245When using @code{vm-image}, the returned image is in qcow2 format, which
3246the QEMU emulator can efficiently use.
3247
3248When using @code{disk-image}, a raw disk image is produced; it can be
3249copied as is to a USB stick, for instance. Assuming @code{/dev/sdc} is
3250the device corresponding to a USB stick, one can copy the image on it
3251using the following command:
3252
3253@example
3254# dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
3255@end example
3256
523e4896
LC
3257@end table
3258
3259@var{options} can contain any of the common build options provided by
3260@command{guix build} (@pxref{Invoking guix build}).
3261
4af2447e
LC
3262
3263@node Defining Services
3264@subsection Defining Services
3265
db4fdc04 3266The @code{(gnu services @dots{})} modules define several procedures that allow
4af2447e
LC
3267users to declare the operating system's services (@pxref{Using the
3268Configuration System}). These procedures are @emph{monadic
3269procedures}---i.e., procedures that return a monadic value in the store
3270monad (@pxref{The Store Monad}). Examples of such procedures include:
3271
3272@table @code
3273@item mingetty-service
3274return the definition of a service that runs @command{mingetty} to
3275offer a login service on the given console tty;
3276
3277@item nscd-service
3278return a definition for libc's name service cache daemon (nscd);
3279
3280@item guix-service
3281return a definition for a service that runs @command{guix-daemon}
3282(@pxref{Invoking guix-daemon}).
3283@end table
3284
3285@cindex service definition
3286The monadic value returned by those procedures is a @dfn{service
3287definition}---a structure as returned by the @code{service} form.
3288Service definitions specifies the inputs the service depends on, and an
3289expression to start and stop the service. Behind the scenes, service
3290definitions are ``translated'' into the form suitable for the
3291configuration file of dmd, the init system (@pxref{Services,,, dmd, GNU
3292dmd Manual}).
3293
3294As an example, here is what the @code{nscd-service} procedure looks
3295like:
3296
3297@lisp
3298(define (nscd-service)
b5f4e686 3299 (with-monad %store-monad
4af2447e
LC
3300 (return (service
3301 (documentation "Run libc's name service cache daemon.")
3302 (provision '(nscd))
4b2615e1
LC
3303 (activate #~(begin
3304 (use-modules (guix build utils))
3305 (mkdir-p "/var/run/nscd")))
b5f4e686
LC
3306 (start #~(make-forkexec-constructor
3307 (string-append #$glibc "/sbin/nscd")
3308 "-f" "/dev/null" "--foreground"))
3309 (stop #~(make-kill-destructor))
3310 (respawn? #f)))))
4af2447e
LC
3311@end lisp
3312
3313@noindent
4b2615e1
LC
3314The @code{activate}, @code{start}, and @code{stop} fields are G-expressions
3315(@pxref{G-Expressions}). The @code{activate} field contains a script to
3316run at ``activation'' time; it makes sure that the @file{/var/run/nscd}
3317directory exists before @command{nscd} is started.
3318
3319The @code{start} and @code{stop} fields refer to dmd's facilities to
3320start and stop processes (@pxref{Service De- and Constructors,,, dmd,
3321GNU dmd Manual}). The @code{provision} field specifies the name under
3322which this service is known to dmd, and @code{documentation} specifies
3323on-line documentation. Thus, the commands @command{deco start ncsd},
b5f4e686
LC
3324@command{deco stop nscd}, and @command{deco doc nscd} will do what you
3325would expect (@pxref{Invoking deco,,, dmd, GNU dmd Manual}).
4af2447e
LC
3326
3327
9bf3c1a7
LC
3328@c *********************************************************************
3329@node Contributing
3330@chapter Contributing
3331
3332This project is a cooperative effort, and we need your help to make it
5ff3c4b8
PAR
3333grow! Please get in touch with us on @email{guix-devel@@gnu.org} and
3334@code{#guix} on the Freenode IRC network. We welcome ideas, bug
3335reports, patches, and anything that may be helpful to the project. We
3336particularly welcome help on packaging (@pxref{Packaging Guidelines}).
a1ba8475 3337
9bf3c1a7
LC
3338Please see the
3339@url{http://git.savannah.gnu.org/cgit/guix.git/tree/HACKING,
3340@file{HACKING} file} that comes with the Guix source code for practical
3341details about contributions.
3342
c78bd12b 3343
568717fd
LC
3344@c *********************************************************************
3345@node Acknowledgments
3346@chapter Acknowledgments
3347
3348Guix is based on the Nix package manager, which was designed and
3349implemented by Eelco Dolstra. Nix pioneered functional package
3350management, and promoted unprecedented features, such as transactional
3351package upgrades and rollbacks, per-user profiles, and referentially
3352transparent build processes. Without this work, Guix would not exist.
3353
3354The Nix-based software distributions, Nixpkgs and NixOS, have also been
3355an inspiration for Guix.
3356
3357@c *********************************************************************
3358@node GNU Free Documentation License
3359@appendix GNU Free Documentation License
3360
3361@include fdl-1.3.texi
3362
3363@c *********************************************************************
3364@node Concept Index
3365@unnumbered Concept Index
3366@printindex cp
3367
3368@node Function Index
3369@unnumbered Function Index
3370@printindex fn
3371
3372@bye
3373
3374@c Local Variables:
3375@c ispell-local-dictionary: "american";
3376@c End: