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