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