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