services: syslog-service: Add 'config-file' argument.
[jackhill/guix/guix.git] / doc / guix.texi
CommitLineData
568717fd
LC
1\input texinfo
2@c -*-texinfo-*-
3
4@c %**start of header
5@setfilename guix.info
6@documentencoding UTF-8
f8348b91 7@settitle GNU Guix Reference Manual
568717fd
LC
8@c %**end of header
9
10@include version.texi
7df7a74e
NK
11
12@copying
4379c35b 13Copyright @copyright{} 2012, 2013, 2014, 2015 Ludovic Courtès@*
af8a56b8 14Copyright @copyright{} 2013, 2014 Andreas Enge@*
7df7a74e
NK
15Copyright @copyright{} 2013 Nikita Karetnikov
16
17Permission is granted to copy, distribute and/or modify this document
18under the terms of the GNU Free Documentation License, Version 1.3 or
19any later version published by the Free Software Foundation; with no
20Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
21copy of the license is included in the section entitled ``GNU Free
22Documentation License''.
23@end copying
568717fd 24
eeaf4427 25@dircategory Package management
568717fd
LC
26@direntry
27* guix: (guix). Guix, the functional package manager.
e49951eb 28* guix package: (guix)Invoking guix package
eeaf4427 29 Managing packages with Guix.
e49951eb 30* guix build: (guix)Invoking guix build
568717fd 31 Building packages with Guix.
054e8576
LC
32* guix system: (guix)Invoking guix system
33 Managing the operating system configuration.
568717fd 34@end direntry
568717fd 35
372c4bbc
DT
36@dircategory Software development
37@direntry
38* guix environment: (guix)Invoking guix environment
39 Building development environments with Guix.
40@end direntry
41
568717fd 42@titlepage
7730d112
LC
43@title GNU Guix Reference Manual
44@subtitle Using the GNU Guix Functional Package Manager
568717fd 45@author Ludovic Courtès
da7cabd4 46@author Andreas Enge
acc08466 47@author Nikita Karetnikov
568717fd
LC
48
49@page
50@vskip 0pt plus 1filll
51Edition @value{EDITION} @*
52@value{UPDATED} @*
53
7df7a74e 54@insertcopying
568717fd
LC
55@end titlepage
56
568717fd
LC
57@contents
58
59@c *********************************************************************
60@node Top
f8348b91 61@top GNU Guix
568717fd 62
f8348b91
LC
63This document describes GNU Guix version @value{VERSION}, a functional
64package management tool written for the GNU system.
568717fd
LC
65
66@menu
67* Introduction:: What is Guix about?
bd5e766b 68* Installation:: Installing Guix.
eeaf4427 69* Package Management:: Package installation, upgrade, etc.
568717fd
LC
70* Programming Interface:: Using Guix in Scheme.
71* Utilities:: Package management commands.
a1ba8475 72* GNU Distribution:: Software for your friendly GNU system.
9bf3c1a7 73* Contributing:: Your help needed!
568717fd
LC
74
75* Acknowledgments:: Thanks!
76* GNU Free Documentation License:: The license of this manual.
77* Concept Index:: Concepts.
a85b83d2 78* Programming Index:: Data types, functions, and variables.
aaa3eaa9
LC
79
80@detailmenu
81 --- The Detailed Node Listing ---
82
83Installation
84
85* Requirements:: Software needed to build and run Guix.
ec0339cd 86* Running the Test Suite:: Testing Guix.
aaa3eaa9
LC
87* Setting Up the Daemon:: Preparing the build daemon's environment.
88* Invoking guix-daemon:: Running the build daemon.
89
90Setting Up the Daemon
91
92* Build Environment Setup:: Preparing the isolated build environment.
93* Daemon Offload Setup:: Offloading builds to remote machines.
94
95Package Management
96
97* Features:: How Guix will make your life brighter.
98* Invoking guix package:: Package installation, removal, etc.
99* Emacs Interface:: Package management from Emacs.
100* Substitutes:: Downloading pre-built binaries.
101* Packages with Multiple Outputs:: Single source package, multiple outputs.
102* Invoking guix gc:: Running the garbage collector.
103* Invoking guix pull:: Fetching the latest Guix and distribution.
104* Invoking guix archive:: Exporting and importing store files.
105
106Programming Interface
107
108* Defining Packages:: Defining new packages.
109* Build Systems:: Specifying how packages are built.
110* The Store:: Manipulating the package store.
111* Derivations:: Low-level interface to package derivations.
112* The Store Monad:: Purely functional interface to the store.
113* G-Expressions:: Manipulating build expressions.
114
115Utilities
116
117* Invoking guix build:: Building packages from the command line.
118* Invoking guix download:: Downloading a file and printing its hash.
119* Invoking guix hash:: Computing the cryptographic hash of a file.
120* Invoking guix import:: Importing package definitions.
121* Invoking guix refresh:: Updating package definitions.
122* Invoking guix lint:: Finding errors in package definitions.
123* Invoking guix environment:: Setting up development environments.
124
125GNU Distribution
126
127* System Installation:: Installing the whole operating system.
35ed9306 128* System Configuration:: Configuring the operating system.
aaa3eaa9
LC
129* Installing Debugging Files:: Feeding the debugger.
130* Security Updates:: Deploying security fixes quickly.
131* Package Modules:: Packages from the programmer's viewpoint.
132* Packaging Guidelines:: Growing the distribution.
133* Bootstrapping:: GNU/Linux built from scratch.
134* Porting:: Targeting another platform or kernel.
135
136System Configuration
137
138* Using the Configuration System:: Customizing your GNU system.
139* operating-system Reference:: Detail of operating-system declarations.
140* File Systems:: Configuring file system mounts.
141* Mapped Devices:: Block device extra processing.
142* User Accounts:: Specifying user accounts.
598e19dc 143* Locales:: Language and cultural convention settings.
aaa3eaa9
LC
144* Services:: Specifying system services.
145* Setuid Programs:: Programs running with root privileges.
996ed739 146* Name Service Switch:: Configuring libc's name service switch.
aaa3eaa9
LC
147* Initial RAM Disk:: Linux-Libre bootstrapping.
148* GRUB Configuration:: Configuring the boot loader.
149* Invoking guix system:: Instantiating a system configuration.
150* Defining Services:: Adding new service definitions.
151
152Services
153
154* Base Services:: Essential system services.
155* Networking Services:: Network setup, SSH daemon, etc.
156* X Window:: Graphical display.
aa4ed923 157* Various Services:: Other services.
aaa3eaa9
LC
158
159Packaging Guidelines
160
ec0339cd
LC
161* Software Freedom:: What may go into the distribution.
162* Package Naming:: What's in a name?
163* Version Numbers:: When the name is not enough.
164* Python Modules:: Taming the snake.
165* Perl Modules:: Little pearls.
166* Fonts:: Fond of fonts.
aaa3eaa9
LC
167
168@end detailmenu
568717fd
LC
169@end menu
170
171@c *********************************************************************
172@node Introduction
173@chapter Introduction
174
c80e7e55
LC
175GNU Guix@footnote{``Guix'' is pronounced like ``geeks'', or ``ɡiːks''
176using the international phonetic alphabet (IPA).} is a functional
177package management tool for the GNU system. Package management consists
4bfc4ea3
NK
178of all activities that relate to building packages from sources,
179honoring their build-time and run-time dependencies,
c80e7e55
LC
180installing packages in user environments, upgrading installed packages
181to new versions or rolling back to a previous set, removing unused
182software packages, etc.
568717fd
LC
183
184@cindex functional package management
185The term @dfn{functional} refers to a specific package management
186discipline. In Guix, the package build and installation process is seen
4bfc4ea3
NK
187as a function, in the mathematical sense. That function takes inputs,
188such as build scripts, a compiler, and libraries, and
189returns an installed package. As a pure function, its result depends
568717fd
LC
190solely on its inputs---for instance, it cannot refer to software or
191scripts that were not explicitly passed as inputs. A build function
4bfc4ea3
NK
192always produces the same result when passed a given set of inputs. It
193cannot alter the system's environment in
568717fd
LC
194any way; for instance, it cannot create, modify, or delete files outside
195of its build and installation directories. This is achieved by running
e900c503 196build processes in isolated environments (or @dfn{containers}), where only their
4bfc4ea3 197explicit inputs are visible.
568717fd 198
e531ac2a 199@cindex store
568717fd 200The result of package build functions is @dfn{cached} in the file
e531ac2a
LC
201system, in a special directory called @dfn{the store} (@pxref{The
202Store}). Each package is installed in a directory of its own, in the
834129e0 203store---by default under @file{/gnu/store}. The directory name contains
568717fd
LC
204a hash of all the inputs used to build that package; thus, changing an
205input yields a different directory name.
206
207This approach is the foundation of Guix's salient features: support for
4bfc4ea3 208transactional package upgrade and rollback, per-user installation, and
eeaf4427 209garbage collection of packages (@pxref{Features}).
568717fd 210
4bfc4ea3 211Guix has a command-line interface, which allows users to build, install,
568717fd 212upgrade, and remove packages, as well as a Scheme programming interface.
568717fd 213
3ca2731c
LC
214@cindex Guix System Distribution
215@cindex GSD
a1ba8475 216Last but not least, Guix is used to build a distribution of the GNU
3ca2731c
LC
217system, with many GNU and non-GNU free software packages. The Guix
218System Distribution, or GNU@tie{}GSD, takes advantage of the core
219properties of Guix at the system level. With GNU@tie{}GSD, users
220@emph{declare} all aspects of the operating system configuration, and
221Guix takes care of instantiating that configuration in a reproducible,
222stateless fashion. @xref{GNU Distribution}.
a1ba8475 223
bd5e766b
LC
224@c *********************************************************************
225@node Installation
226@chapter Installation
227
48febeb8
LC
228GNU Guix is available for download from its website at
229@url{http://www.gnu.org/software/guix/}. This section describes the
230software requirements of Guix, as well as how to install it and get
231ready to use it.
bd5e766b 232
5af6de3e
LC
233Note that this section is concerned with the installation of the package
234manager, which can be done on top of a running GNU/Linux system. If,
235instead, you want to install the complete GNU operating system,
6621cdb6 236@pxref{System Installation}.
5af6de3e 237
b22a12fd 238The build procedure for Guix is the same as for other GNU software, and
1da983b9 239is not covered here. Please see the files @file{README} and
b22a12fd
LC
240@file{INSTALL} in the Guix source tree for additional details.
241
bd5e766b
LC
242@menu
243* Requirements:: Software needed to build and run Guix.
ec0339cd 244* Running the Test Suite:: Testing Guix.
bd5e766b
LC
245* Setting Up the Daemon:: Preparing the build daemon's environment.
246* Invoking guix-daemon:: Running the build daemon.
247@end menu
248
249@node Requirements
250@section Requirements
251
252GNU Guix depends on the following packages:
253
254@itemize
4a328f73 255@item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.5 or later;
288dca55 256@item @url{http://gnupg.org/, GNU libgcrypt};
8a96bd4b
ID
257@end itemize
258
259The following dependencies are optional:
260
261@itemize
288dca55 262@item
8a96bd4b 263Installing
288dca55 264@url{http://savannah.nongnu.org/projects/guile-json/, Guile-JSON} will
2f7d2d91
LC
265allow you to use the @command{guix import pypi} command (@pxref{Invoking
266guix import}). It is of
288dca55 267interest primarily for developers and not for casual users.
8a96bd4b
ID
268@item
269Installing @uref{http://gnutls.org/, GnuTLS-Guile} will
270allow you to access @code{https} URLs with the @command{guix download}
d45dc6da
EB
271command (@pxref{Invoking guix download}), the @command{guix import pypi}
272command, and the @command{guix import cpan} command. This is primarily
273of interest to developers. @xref{Guile Preparations, how to install the
274GnuTLS bindings for Guile,, gnutls-guile, GnuTLS-Guile}.
bd5e766b
LC
275@end itemize
276
277Unless @code{--disable-daemon} was passed to @command{configure}, the
278following packages are also needed:
279
280@itemize
281@item @url{http://sqlite.org, SQLite 3}
282@item @url{http://www.bzip.org, libbz2}
283@item @url{http://gcc.gnu.org, GCC's g++}
284@end itemize
285
4bfc4ea3
NK
286When a working installation of @url{http://nixos.org/nix/, the Nix package
287manager} is available, you
bd5e766b 288can instead configure Guix with @code{--disable-daemon}. In that case,
4bfc4ea3 289Nix replaces the three dependencies above.
bd5e766b 290
b22a12fd
LC
291Guix is compatible with Nix, so it is possible to share the same store
292between both. To do so, you must pass @command{configure} not only the
293same @code{--with-store-dir} value, but also the same
4bfc4ea3
NK
294@code{--localstatedir} value. The latter is essential because it
295specifies where the database that stores metadata about the store is
834129e0 296located, among other things. The default values for Nix are
b22a12fd 297@code{--with-store-dir=/nix/store} and @code{--localstatedir=/nix/var}.
4bfc4ea3
NK
298Note that @code{--disable-daemon} is not required if
299your goal is to share the store with Nix.
b22a12fd 300
ec0339cd
LC
301@node Running the Test Suite
302@section Running the Test Suite
303
304After a successful @command{configure} and @code{make} run, it is a good
305idea to run the test suite. It can help catch issues with the setup or
306environment, or bugs in Guix itself---and really, reporting test
307failures is a good way to help improve the software. To run the test
308suite, type:
309
310@example
311make check
312@end example
313
314Test cases can run in parallel: you can use the @code{-j} option of
315GNU@tie{}make to speed things up. The first run may take a few minutes
316on a recent machine; subsequent runs will be faster because the store
317that is created for test purposes will already have various things in
318cache.
319
320Upon failure, please email @email{bug-guix@@gnu.org} and attach the
321@file{test-suite.log} file. When @file{tests/@var{something}.scm}
322fails, please also attach the @file{@var{something}.log} file available
323in the top-level build directory. Please specify the Guix version being
324used as well as version numbers of the dependencies
325(@pxref{Requirements}) in your message.
326
bd5e766b
LC
327@node Setting Up the Daemon
328@section Setting Up the Daemon
329
330@cindex daemon
331Operations such as building a package or running the garbage collector
49e6291a 332are all performed by a specialized process, the @dfn{build daemon}, on
bd5e766b
LC
333behalf of clients. Only the daemon may access the store and its
334associated database. Thus, any operation that manipulates the store
335goes through the daemon. For instance, command-line tools such as
e49951eb 336@command{guix package} and @command{guix build} communicate with the
bd5e766b
LC
337daemon (@i{via} remote procedure calls) to instruct it what to do.
338
49e6291a
LC
339The following sections explain how to prepare the build daemon's
340environment.
341
342@menu
343* Build Environment Setup:: Preparing the isolated build environment.
344* Daemon Offload Setup:: Offloading builds to remote machines.
345@end menu
346
347@node Build Environment Setup
348@subsection Build Environment Setup
349
bd5e766b
LC
350In a standard multi-user setup, Guix and its daemon---the
351@command{guix-daemon} program---are installed by the system
834129e0 352administrator; @file{/gnu/store} is owned by @code{root} and
bd5e766b
LC
353@command{guix-daemon} runs as @code{root}. Unprivileged users may use
354Guix tools to build packages or otherwise access the store, and the
355daemon will do it on their behalf, ensuring that the store is kept in a
356consistent state, and allowing built packages to be shared among users.
357
358@cindex build users
359When @command{guix-daemon} runs as @code{root}, you may not want package
360build processes themselves to run as @code{root} too, for obvious
361security reasons. To avoid that, a special pool of @dfn{build users}
362should be created for use by build processes started by the daemon.
363These build users need not have a shell and a home directory: they will
364just be used when the daemon drops @code{root} privileges in build
365processes. Having several such users allows the daemon to launch
366distinct build processes under separate UIDs, which guarantees that they
367do not interfere with each other---an essential feature since builds are
368regarded as pure functions (@pxref{Introduction}).
369
370On a GNU/Linux system, a build user pool may be created like this (using
371Bash syntax and the @code{shadow} commands):
372
091196b3
LC
373@c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
374@c for why `-G' is needed.
bd5e766b
LC
375@example
376# groupadd guix-builder
377# for i in `seq 1 10`;
378 do
091196b3
LC
379 useradd -g guix-builder -G guix-builder \
380 -d /var/empty -s `which nologin` \
4d1a2b50
LC
381 -c "Guix build user $i" --system \
382 guix-builder$i;
bd5e766b
LC
383 done
384@end example
385
659a92fc
LC
386The @file{/gnu/store} directory (or whichever was specified with the
387@code{--with-store-dir} option) must have ownership and permissions as
388follows:
389
390@example
391# chgrp guix-builder /gnu/store
392# chmod 1775 /gnu/store
393@end example
394
bd5e766b
LC
395@noindent
396The @code{guix-daemon} program may then be run as @code{root} with:
397
398@example
399# guix-daemon --build-users-group=guix-builder
400@end example
401
e900c503 402@cindex chroot
b095792f
LC
403@noindent
404This way, the daemon starts build processes in a chroot, under one of
405the @code{guix-builder} users. On GNU/Linux, by default, the chroot
6dc99317
LC
406environment contains nothing but:
407
408@c Keep this list in sync with libstore/build.cc! -----------------------
409@itemize
410@item
4743a4da
LC
411a minimal @code{/dev} directory, created mostly independently from the
412host @code{/dev}@footnote{``Mostly'', because while the set of files
413that appear in the chroot's @code{/dev} is fixed, most of these files
414can only be created if the host has them.};
415
416@item
417the @code{/proc} directory; it only shows the container's processes
418since a separate PID name space is used;
6dc99317
LC
419
420@item
421@file{/etc/passwd} with an entry for the current user and an entry for
422user @file{nobody};
423
424@item
425@file{/etc/group} with an entry for the user's group;
426
427@item
428@file{/etc/hosts} with an entry that maps @code{localhost} to
429@code{127.0.0.1};
430
431@item
432a writable @file{/tmp} directory.
433@end itemize
b095792f 434
d43eb499 435If you are installing Guix as an unprivileged user, it is still
bd5e766b
LC
436possible to run @command{guix-daemon}. However, build processes will
437not be isolated from one another, and not from the rest of the system.
438Thus, build processes may interfere with each other, and may access
439programs, libraries, and other files available on the system---making it
440much harder to view them as @emph{pure} functions.
441
49e6291a
LC
442
443@node Daemon Offload Setup
444@subsection Using the Offload Facility
445
446@cindex offloading
4ec2e92d
LC
447@cindex build hook
448When desired, the build daemon can @dfn{offload}
449derivation builds to other machines
49e6291a
LC
450running Guix, using the @code{offload} @dfn{build hook}. When that
451feature is enabled, a list of user-specified build machines is read from
452@file{/etc/guix/machines.scm}; anytime a build is requested, for
453instance via @code{guix build}, the daemon attempts to offload it to one
454of the machines that satisfies the derivation's constraints, in
455particular its system type---e.g., @file{x86_64-linux}. Missing
456prerequisites for the build are copied over SSH to the target machine,
457which then proceeds with the build; upon success the output(s) of the
458build are copied back to the initial machine.
459
4ec2e92d 460The @file{/etc/guix/machines.scm} file typically looks like this:
49e6291a
LC
461
462@example
463(list (build-machine
464 (name "eightysix.example.org")
465 (system "x86_64-linux")
466 (user "bob")
467 (speed 2.)) ; incredibly fast!
468
469 (build-machine
470 (name "meeps.example.org")
471 (system "mips64el-linux")
472 (user "alice")
473 (private-key
474 (string-append (getenv "HOME")
475 "/.ssh/id-rsa-for-guix"))))
476@end example
477
478@noindent
479In the example above we specify a list of two build machines, one for
480the @code{x86_64} architecture and one for the @code{mips64el}
4ec2e92d
LC
481architecture.
482
483In fact, this file is---not surprisingly!---a Scheme file that is
484evaluated when the @code{offload} hook is started. Its return value
485must be a list of @code{build-machine} objects. While this example
486shows a fixed list of build machines, one could imagine, say, using
487DNS-SD to return a list of potential build machines discovered in the
488local network (@pxref{Introduction, Guile-Avahi,, guile-avahi, Using
c678a4ee
LC
489Avahi in Guile Scheme Programs}). The @code{build-machine} data type is
490detailed below.
4ec2e92d 491
c678a4ee
LC
492@deftp {Data Type} build-machine
493This data type represents build machines the daemon may offload builds
494to. The important fields are:
49e6291a
LC
495
496@table @code
497
498@item name
499The remote machine's host name.
500
501@item system
c678a4ee 502The remote machine's system type---e.g., @code{"x86_64-linux"}.
49e6291a
LC
503
504@item user
505The user account to use when connecting to the remote machine over SSH.
506Note that the SSH key pair must @emph{not} be passphrase-protected, to
507allow non-interactive logins.
508
509@end table
510
4ec2e92d 511A number of optional fields may be specified:
49e6291a
LC
512
513@table @code
514
cecd72d5
LC
515@item port
516Port number of the machine's SSH server (default: 22).
517
49e6291a
LC
518@item private-key
519The SSH private key file to use when connecting to the machine.
520
521@item parallel-builds
522The number of builds that may run in parallel on the machine (1 by
523default.)
524
525@item speed
526A ``relative speed factor''. The offload scheduler will tend to prefer
527machines with a higher speed factor.
528
529@item features
530A list of strings denoting specific features supported by the machine.
531An example is @code{"kvm"} for machines that have the KVM Linux modules
532and corresponding hardware support. Derivations can request features by
533name, and they will be scheduled on matching build machines.
534
535@end table
c678a4ee 536@end deftp
49e6291a
LC
537
538The @code{guix} command must be in the search path on the build
539machines, since offloading works by invoking the @code{guix archive} and
540@code{guix build} commands.
541
542There's one last thing to do once @file{machines.scm} is in place. As
543explained above, when offloading, files are transferred back and forth
544between the machine stores. For this to work, you need to generate a
545key pair to allow the daemon to export signed archives of files from the
546store (@pxref{Invoking guix archive}):
547
548@example
549# guix archive --generate-key
550@end example
551
552@noindent
553Thus, when receiving files, a machine's build daemon can make sure they
554are genuine, have not been tampered with, and that they are signed by an
555authorized key.
556
557
bd5e766b
LC
558@node Invoking guix-daemon
559@section Invoking @command{guix-daemon}
560
561The @command{guix-daemon} program implements all the functionality to
562access the store. This includes launching build processes, running the
563garbage collector, querying the availability of a build result, etc. It
564is normally run as @code{root} like this:
565
566@example
567# guix-daemon --build-users-group=guix-builder
568@end example
569
570@noindent
081145cf 571For details on how to set it up, @pxref{Setting Up the Daemon}.
bd5e766b 572
e900c503
LC
573@cindex chroot
574@cindex container, build environment
575@cindex build environment
576@cindex reproducible builds
bd5e766b
LC
577By default, @command{guix-daemon} launches build processes under
578different UIDs, taken from the build group specified with
579@code{--build-users-group}. In addition, each build process is run in a
580chroot environment that only contains the subset of the store that the
581build process depends on, as specified by its derivation
582(@pxref{Programming Interface, derivation}), plus a set of specific
583system directories. By default, the latter contains @file{/dev} and
e900c503
LC
584@file{/dev/pts}. Furthermore, on GNU/Linux, the build environment is a
585@dfn{container}: in addition to having its own file system tree, it has
586a separate mount name space, its own PID name space, network name space,
587etc. This helps achieve reproducible builds (@pxref{Features}).
bd5e766b 588
cbc538fe
LC
589When the daemon performs a build on behalf of the user, it creates a
590build directory under @file{/tmp} or under the directory specified by
591its @code{TMPDIR} environment variable; this directory is shared with
592the container for the duration of the build. Be aware that using a
593directory other than @file{/tmp} can affect build results---for example,
594with a longer directory name, a build process that uses Unix-domain
595sockets might hit the name length limitation for @code{sun_path}, which
596it would otherwise not hit.
597
598The build directory is automatically deleted upon completion, unless the
599build failed and the client specified @option{--keep-failed}
600(@pxref{Invoking guix build, @option{--keep-failed}}).
601
bd5e766b
LC
602The following command-line options are supported:
603
604@table @code
605@item --build-users-group=@var{group}
606Take users from @var{group} to run build processes (@pxref{Setting Up
607the Daemon, build users}).
608
6858f9d1 609@item --no-substitutes
b5385b52 610@cindex substitutes
6858f9d1 611Do not use substitutes for build products. That is, always build things
c4202d60
LC
612locally instead of allowing downloads of pre-built binaries
613(@pxref{Substitutes}).
6858f9d1 614
b5385b52
LC
615By default substitutes are used, unless the client---such as the
616@command{guix package} command---is explicitly invoked with
617@code{--no-substitutes}.
618
619When the daemon runs with @code{--no-substitutes}, clients can still
620explicitly enable substitution @i{via} the @code{set-build-options}
621remote procedure call (@pxref{The Store}).
622
9176607e
LC
623@item --substitute-urls=@var{urls}
624Consider @var{urls} the default whitespace-separated list of substitute
625source URLs. When this option is omitted, @code{http://hydra.gnu.org}
626is used.
627
628This means that substitutes may be downloaded from @var{urls}, as long
629as they are signed by a trusted signature (@pxref{Substitutes}).
630
4ec2e92d
LC
631@cindex build hook
632@item --no-build-hook
633Do not use the @dfn{build hook}.
634
635The build hook is a helper program that the daemon can start and to
636which it submits build requests. This mechanism is used to offload
637builds to other machines (@pxref{Daemon Offload Setup}).
638
bd5e766b
LC
639@item --cache-failures
640Cache build failures. By default, only successful builds are cached.
641
642@item --cores=@var{n}
643@itemx -c @var{n}
644Use @var{n} CPU cores to build each derivation; @code{0} means as many
645as available.
646
6efc160e 647The default value is @code{0}, but it may be overridden by clients, such
e49951eb
MW
648as the @code{--cores} option of @command{guix build} (@pxref{Invoking
649guix build}).
bd5e766b
LC
650
651The effect is to define the @code{NIX_BUILD_CORES} environment variable
652in the build process, which can then use it to exploit internal
653parallelism---for instance, by running @code{make -j$NIX_BUILD_CORES}.
654
655@item --max-jobs=@var{n}
656@itemx -M @var{n}
657Allow at most @var{n} build jobs in parallel. The default value is
f6526eb3
LC
658@code{1}. Setting it to @code{0} means that no builds will be performed
659locally; instead, the daemon will offload builds (@pxref{Daemon Offload
660Setup}), or simply fail.
bd5e766b
LC
661
662@item --debug
663Produce debugging output.
664
665This is useful to debug daemon start-up issues, but then it may be
666overridden by clients, for example the @code{--verbosity} option of
e49951eb 667@command{guix build} (@pxref{Invoking guix build}).
bd5e766b
LC
668
669@item --chroot-directory=@var{dir}
670Add @var{dir} to the build chroot.
671
672Doing this may change the result of build processes---for instance if
673they use optional dependencies found in @var{dir} when it is available,
674and not otherwise. For that reason, it is not recommended to do so.
675Instead, make sure that each derivation declares all the inputs that it
676needs.
677
678@item --disable-chroot
679Disable chroot builds.
680
681Using this option is not recommended since, again, it would allow build
682processes to gain access to undeclared dependencies.
683
684@item --disable-log-compression
685Disable compression of the build logs.
686
1da983b9
LC
687Unless @code{--lose-logs} is used, all the build logs are kept in the
688@var{localstatedir}. To save space, the daemon automatically compresses
689them with bzip2 by default. This option disables that.
690
ab3893d7
LC
691@item --disable-deduplication
692@cindex deduplication
bd5e766b
LC
693Disable automatic file ``deduplication'' in the store.
694
1da983b9 695By default, files added to the store are automatically ``deduplicated'':
ab3893d7
LC
696if a newly added file is identical to another one found in the store,
697the daemon makes the new file a hard link to the other file. This can
698noticeably reduce disk usage, at the expense of slightly increasde
699input/output load at the end of a build process. This option disables
700this optimization.
1da983b9 701
6e37066e
LC
702@item --gc-keep-outputs[=yes|no]
703Tell whether the garbage collector (GC) must keep outputs of live
704derivations.
705
706When set to ``yes'', the GC will keep the outputs of any live derivation
707available in the store---the @code{.drv} files. The default is ``no'',
708meaning that derivation outputs are kept only if they are GC roots.
709
710@item --gc-keep-derivations[=yes|no]
711Tell whether the garbage collector (GC) must keep derivations
712corresponding to live outputs.
713
714When set to ``yes'', as is the case by default, the GC keeps
715derivations---i.e., @code{.drv} files---as long as at least one of their
716outputs is live. This allows users to keep track of the origins of
717items in their store. Setting it to ``no'' saves a bit of disk space.
718
719Note that when both @code{--gc-keep-derivations} and
720@code{--gc-keep-outputs} are used, the effect is to keep all the build
721prerequisites (the sources, compiler, libraries, and other build-time
722tools) of live objects in the store, regardless of whether these
723prerequisites are live. This is convenient for developers since it
724saves rebuilds or downloads.
725
bd5e766b
LC
726@item --impersonate-linux-2.6
727On Linux-based systems, impersonate Linux 2.6. This means that the
728kernel's @code{uname} system call will report 2.6 as the release number.
729
730This might be helpful to build programs that (usually wrongfully) depend
731on the kernel version number.
732
733@item --lose-logs
734Do not keep build logs. By default they are kept under
ce33631f 735@code{@var{localstatedir}/guix/log}.
bd5e766b
LC
736
737@item --system=@var{system}
738Assume @var{system} as the current system type. By default it is the
739architecture/kernel pair found at configure time, such as
740@code{x86_64-linux}.
b8d2aa26
LC
741
742@item --listen=@var{socket}
743Listen for connections on @var{socket}, the file name of a Unix-domain
744socket. The default socket is
745@file{@var{localstatedir}/daemon-socket/socket}. This option is only
746useful in exceptional circumstances, such as if you need to run several
747daemons on the same machine.
bd5e766b
LC
748@end table
749
750
eeaf4427
LC
751@c *********************************************************************
752@node Package Management
753@chapter Package Management
754
f8348b91 755The purpose of GNU Guix is to allow users to easily install, upgrade, and
eeaf4427
LC
756remove software packages, without having to know about their build
757procedure or dependencies. Guix also goes beyond this obvious set of
758features.
759
760This chapter describes the main features of Guix, as well as the package
c1941588
LC
761management tools it provides. Two user interfaces are provided for
762routine package management tasks: a command-line interface
763(@pxref{Invoking guix package, @code{guix package}}), and a visual user
764interface in Emacs (@pxref{Emacs Interface}).
eeaf4427
LC
765
766@menu
767* Features:: How Guix will make your life brighter.
e49951eb 768* Invoking guix package:: Package installation, removal, etc.
457f60fa 769* Emacs Interface:: Package management from Emacs.
c4202d60 770* Substitutes:: Downloading pre-built binaries.
760c60d6 771* Packages with Multiple Outputs:: Single source package, multiple outputs.
e49951eb 772* Invoking guix gc:: Running the garbage collector.
f651b477 773* Invoking guix pull:: Fetching the latest Guix and distribution.
760c60d6 774* Invoking guix archive:: Exporting and importing store files.
eeaf4427
LC
775@end menu
776
777@node Features
778@section Features
779
780When using Guix, each package ends up in the @dfn{package store}, in its
781own directory---something that resembles
9a130e19
AK
782@file{/gnu/store/xxx-package-1.2}, where @code{xxx} is a base32 string
783(note that Guix comes with an Emacs extension to shorten those file
081145cf 784names, @pxref{Emacs Prettify}.)
eeaf4427
LC
785
786Instead of referring to these directories, users have their own
787@dfn{profile}, which points to the packages that they actually want to
821b0015
LC
788use. These profiles are stored within each user's home directory, at
789@code{$HOME/.guix-profile}.
eeaf4427 790
821b0015 791For example, @code{alice} installs GCC 4.7.2. As a result,
eeaf4427 792@file{/home/alice/.guix-profile/bin/gcc} points to
834129e0 793@file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Now, on the same machine,
821b0015
LC
794@code{bob} had already installed GCC 4.8.0. The profile of @code{bob}
795simply continues to point to
834129e0 796@file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc}---i.e., both versions of GCC
821b0015 797coexist on the same system without any interference.
eeaf4427 798
e49951eb
MW
799The @command{guix package} command is the central tool to manage
800packages (@pxref{Invoking guix package}). It operates on those per-user
821b0015 801profiles, and can be used @emph{with normal user privileges}.
eeaf4427
LC
802
803The command provides the obvious install, remove, and upgrade
804operations. Each invocation is actually a @emph{transaction}: either
ba55b1cb 805the specified operation succeeds, or nothing happens. Thus, if the
e49951eb 806@command{guix package} process is terminated during the transaction,
eeaf4427
LC
807or if a power outage occurs during the transaction, then the user's
808profile remains in its previous state, and remains usable.
809
810In addition, any package transaction may be @emph{rolled back}. So, if,
811for example, an upgrade installs a new version of a package that turns
812out to have a serious bug, users may roll back to the previous instance
4af2447e
LC
813of their profile, which was known to work well. Similarly, the global
814system configuration is subject to transactional upgrades and roll-back
815(@pxref{Using the Configuration System}).
eeaf4427
LC
816
817All those packages in the package store may be @emph{garbage-collected}.
818Guix can determine which packages are still referenced by the user
fe8ff028 819profiles, and remove those that are provably no longer referenced
e49951eb 820(@pxref{Invoking guix gc}). Users may also explicitly remove old
fe8ff028
LC
821generations of their profile so that the packages they refer to can be
822collected.
eeaf4427 823
e900c503
LC
824@cindex reproducibility
825@cindex reproducible builds
eeaf4427
LC
826Finally, Guix takes a @dfn{purely functional} approach to package
827management, as described in the introduction (@pxref{Introduction}).
834129e0 828Each @file{/gnu/store} package directory name contains a hash of all the
eeaf4427
LC
829inputs that were used to build that package---compiler, libraries, build
830scripts, etc. This direct correspondence allows users to make sure a
831given package installation matches the current state of their
e900c503
LC
832distribution. It also helps maximize @dfn{build reproducibility}:
833thanks to the isolated build environments that are used, a given build
834is likely to yield bit-identical files when performed on different
835machines (@pxref{Invoking guix-daemon, container}).
eeaf4427 836
c4202d60 837@cindex substitutes
eeaf4427 838This foundation allows Guix to support @dfn{transparent binary/source
c4202d60 839deployment}. When a pre-built binary for a @file{/gnu/store} item is
18f2887b 840available from an external source---a @dfn{substitute}, Guix just
c4202d60
LC
841downloads it and unpacks it;
842otherwise, it builds the package from source, locally
843(@pxref{Substitutes}).
eeaf4427 844
f5fd4fd2
LC
845Control over the build environment is a feature that is also useful for
846developers. The @command{guix environment} command allows developers of
847a package to quickly set up the right development environment for their
848package, without having to manually install the package's dependencies
849in their profile (@pxref{Invoking guix environment}).
850
e49951eb
MW
851@node Invoking guix package
852@section Invoking @command{guix package}
eeaf4427 853
e49951eb 854The @command{guix package} command is the tool that allows users to
eeaf4427
LC
855install, upgrade, and remove packages, as well as rolling back to
856previous configurations. It operates only on the user's own profile,
857and works with normal user privileges (@pxref{Features}). Its syntax
858is:
859
860@example
e49951eb 861guix package @var{options}
eeaf4427
LC
862@end example
863
ba55b1cb 864Primarily, @var{options} specifies the operations to be performed during
eeaf4427
LC
865the transaction. Upon completion, a new profile is created, but
866previous generations of the profile remain available, should the user
867want to roll back.
868
6447738c
MW
869For example, to remove @code{lua} and install @code{guile} and
870@code{guile-cairo} in a single transaction:
871
872@example
873guix package -r lua -i guile guile-cairo
874@end example
875
b9e5c0a9 876For each user, a symlink to the user's default profile is automatically
0ec1af59 877created in @file{$HOME/.guix-profile}. This symlink always points to the
b9e5c0a9
LC
878current generation of the user's default profile. Thus, users can add
879@file{$HOME/.guix-profile/bin} to their @code{PATH} environment
880variable, and so on.
881
4379c35b
LC
882In a multi-user setup, user profiles are stored in a place registered as
883a @dfn{garbage-collector root}, which @file{$HOME/.guix-profile} points
884to (@pxref{Invoking guix gc}). That directory is normally
0ec1af59
LC
885@code{@var{localstatedir}/profiles/per-user/@var{user}}, where
886@var{localstatedir} is the value passed to @code{configure} as
4379c35b
LC
887@code{--localstatedir}, and @var{user} is the user name. The
888@file{per-user} directory is created when @command{guix-daemon} is
889started, and the @var{user} sub-directory is created by @command{guix
890package}.
0ec1af59
LC
891
892The @var{options} can be among the following:
893
eeaf4427
LC
894@table @code
895
6447738c
MW
896@item --install=@var{package} @dots{}
897@itemx -i @var{package} @dots{}
898Install the specified @var{package}s.
eeaf4427 899
6447738c 900Each @var{package} may specify either a simple package name, such as
eeaf4427 901@code{guile}, or a package name followed by a hyphen and version number,
dc5669cd
MW
902such as @code{guile-1.8.8}. If no version number is specified, the
903newest available version will be selected. In addition, @var{package}
904may contain a colon, followed by the name of one of the outputs of the
6e721c4d 905package, as in @code{gcc:doc} or @code{binutils-2.22:lib}
e7f34eb0
LC
906(@pxref{Packages with Multiple Outputs}). Packages with a corresponding
907name (and optionally version) are searched for among the GNU
908distribution modules (@pxref{Package Modules}).
eeaf4427 909
461572cc
LC
910@cindex propagated inputs
911Sometimes packages have @dfn{propagated inputs}: these are dependencies
912that automatically get installed along with the required package.
913
914An example is the GNU MPC library: its C header files refer to those of
915the GNU MPFR library, which in turn refer to those of the GMP library.
916Thus, when installing MPC, the MPFR and GMP libraries also get installed
917in the profile; removing MPC also removes MPFR and GMP---unless they had
918also been explicitly installed independently.
919
ba7ea5ce 920Besides, packages sometimes rely on the definition of environment
5924080d 921variables for their search paths (see explanation of
ba7ea5ce 922@code{--search-paths} below). Any missing or possibly incorrect
5924080d
LC
923environment variable definitions are reported here.
924
ef010c0f 925@c XXX: keep me up-to-date
5924080d 926Finally, when installing a GNU package, the tool reports the
ef010c0f
LC
927availability of a newer upstream version. In the future, it may provide
928the option of installing directly from the upstream version, even if
929that version is not yet in the distribution.
930
5d4b411f
LC
931@item --install-from-expression=@var{exp}
932@itemx -e @var{exp}
933Install the package @var{exp} evaluates to.
934
935@var{exp} must be a Scheme expression that evaluates to a
936@code{<package>} object. This option is notably useful to disambiguate
937between same-named variants of a package, with expressions such as
938@code{(@@ (gnu packages base) guile-final)}.
939
940Note that this option installs the first output of the specified
941package, which may be insufficient when needing a specific output of a
942multiple-output package.
943
6447738c
MW
944@item --remove=@var{package} @dots{}
945@itemx -r @var{package} @dots{}
946Remove the specified @var{package}s.
eeaf4427 947
6447738c 948As for @code{--install}, each @var{package} may specify a version number
13ed095c
LC
949and/or output name in addition to the package name. For instance,
950@code{-r glibc:debug} would remove the @code{debug} output of
951@code{glibc}.
952
6447738c
MW
953@item --upgrade[=@var{regexp} @dots{}]
954@itemx -u [@var{regexp} @dots{}]
955Upgrade all the installed packages. If one or more @var{regexp}s are
956specified, upgrade only installed packages whose name matches a
957@var{regexp}.
eeaf4427 958
f651b477
LC
959Note that this upgrades package to the latest version of packages found
960in the distribution currently installed. To update your distribution,
961you should regularly run @command{guix pull} (@pxref{Invoking guix
962pull}).
963
24e262f0
LC
964@item --roll-back
965Roll back to the previous @dfn{generation} of the profile---i.e., undo
966the last transaction.
967
968When combined with options such as @code{--install}, roll back occurs
969before any other actions.
970
d9307267 971When rolling back from the first generation that actually contains
4b2bc804
NK
972installed packages, the profile is made to point to the @dfn{zeroth
973generation}, which contains no files apart from its own meta-data.
d9307267 974
82fe08ed
LC
975Installing, removing, or upgrading packages from a generation that has
976been rolled back to overwrites previous future generations. Thus, the
977history of a profile's generations is always linear.
978
b3bb82f1
AK
979@item --switch-generation=@var{pattern}
980@itemx -S @var{pattern}
981Switch to a particular generation defined by @var{pattern}.
982
983@var{pattern} may be either a generation number or a number prefixed
984with ``+'' or ``-''. The latter means: move forward/backward by a
985specified number of generations. For example, if you want to return to
986the latest generation after @code{--roll-back}, use
987@code{--switch-generation=+1}.
988
989The difference between @code{--roll-back} and
990@code{--switch-generation=-1} is that @code{--switch-generation} will
991not make a zeroth generation, so if a specified generation does not
992exist, the current generation will not be changed.
993
5924080d
LC
994@item --search-paths
995@cindex search paths
996Report environment variable definitions, in Bash syntax, that may be
997needed in order to use the set of installed packages. These environment
998variables are used to specify @dfn{search paths} for files used by some
999of the installed packages.
1000
1001For example, GCC needs the @code{CPATH} and @code{LIBRARY_PATH}
1002environment variables to be defined so it can look for headers and
1003libraries in the user's profile (@pxref{Environment Variables,,, gcc,
1004Using the GNU Compiler Collection (GCC)}). If GCC and, say, the C
1005library are installed in the profile, then @code{--search-paths} will
1006suggest setting these variables to @code{@var{profile}/include} and
1007@code{@var{profile}/lib}, respectively.
1008
eeaf4427
LC
1009@item --profile=@var{profile}
1010@itemx -p @var{profile}
1011Use @var{profile} instead of the user's default profile.
1012
70915c1a
LC
1013@item --verbose
1014Produce verbose output. In particular, emit the environment's build log
1015on the standard error port.
1016
eeaf4427
LC
1017@item --bootstrap
1018Use the bootstrap Guile to build the profile. This option is only
1019useful to distribution developers.
1020
1021@end table
1022
e49951eb 1023In addition to these actions @command{guix package} supports the
733b4130
LC
1024following options to query the current state of a profile, or the
1025availability of packages:
eeaf4427 1026
733b4130
LC
1027@table @option
1028
acc08466
NK
1029@item --search=@var{regexp}
1030@itemx -s @var{regexp}
1031List the available packages whose synopsis or description matches
299112d3
LC
1032@var{regexp}. Print all the meta-data of matching packages in
1033@code{recutils} format (@pxref{Top, GNU recutils databases,, recutils,
1034GNU recutils manual}).
acc08466 1035
299112d3
LC
1036This allows specific fields to be extracted using the @command{recsel}
1037command, for instance:
1038
1039@example
e49951eb 1040$ guix package -s malloc | recsel -p name,version
299112d3
LC
1041name: glibc
1042version: 2.17
1043
1044name: libgc
1045version: 7.2alpha6
1046@end example
acc08466 1047
a12d92f5
LC
1048Similarly, to show the name of all the packages available under the
1049terms of the GNU@tie{}LGPL version 3:
1050
1051@example
1052$ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
1053name: elfutils
1054
1055name: gmp
1056@dots{}
1057@end example
1058
2aa6efb0
CR
1059@item --show=@var{package}
1060Show details about @var{package}, taken from the list of available packages, in
1061@code{recutils} format (@pxref{Top, GNU recutils databases,, recutils, GNU
1062recutils manual}).
1063
1064@example
1065$ guix package --show=python | recsel -p name,version
1066name: python
1067version: 2.7.6
1068
1069name: python
1070version: 3.3.5
1071@end example
1072
1073You may also specify the full name of a package to only get details about a
1074specific version of it:
1075@example
1076$ guix package --show=python-3.3.5 | recsel -p name,version
1077name: python
1078version: 3.3.5
1079@end example
1080
1081
1082
733b4130
LC
1083@item --list-installed[=@var{regexp}]
1084@itemx -I [@var{regexp}]
bd9bde1c
LC
1085List the currently installed packages in the specified profile, with the
1086most recently installed packages shown last. When @var{regexp} is
1087specified, list only installed packages whose name matches @var{regexp}.
733b4130
LC
1088
1089For each installed package, print the following items, separated by
1090tabs: the package name, its version string, the part of the package that
1091is installed (for instance, @code{out} for the default output,
1092@code{include} for its headers, etc.), and the path of this package in
1093the store.
1094
64fc89b6
LC
1095@item --list-available[=@var{regexp}]
1096@itemx -A [@var{regexp}]
a1ba8475
LC
1097List packages currently available in the software distribution
1098(@pxref{GNU Distribution}). When @var{regexp} is specified, list only
1099installed packages whose name matches @var{regexp}.
64fc89b6
LC
1100
1101For each package, print the following items separated by tabs: its name,
6e721c4d
LC
1102its version string, the parts of the package (@pxref{Packages with
1103Multiple Outputs}), and the source location of its definition.
64fc89b6 1104
f566d765
LC
1105@item --list-generations[=@var{pattern}]
1106@itemx -l [@var{pattern}]
1107Return a list of generations along with their creation dates; for each
1108generation, show the installed packages, with the most recently
4b2bc804
NK
1109installed packages shown last. Note that the zeroth generation is never
1110shown.
f566d765
LC
1111
1112For each installed package, print the following items, separated by
1113tabs: the name of a package, its version string, the part of the package
1114that is installed (@pxref{Packages with Multiple Outputs}), and the
1115location of this package in the store.
1116
1117When @var{pattern} is used, the command returns only matching
1118generations. Valid patterns include:
1119
1120@itemize
1121@item @emph{Integers and comma-separated integers}. Both patterns denote
1122generation numbers. For instance, @code{--list-generations=1} returns
1123the first one.
1124
1125And @code{--list-generations=1,8,2} outputs three generations in the
1126specified order. Neither spaces nor trailing commas are allowed.
1127
1128@item @emph{Ranges}. @code{--list-generations=2..9} prints the
1129specified generations and everything in between. Note that the start of
1130a range must be lesser than its end.
1131
1132It is also possible to omit the endpoint. For example,
1133@code{--list-generations=2..}, returns all generations starting from the
1134second one.
1135
1136@item @emph{Durations}. You can also get the last @emph{N}@tie{}days, weeks,
1137or months by passing an integer along with the first letter of the
d7ddb257
LC
1138duration. For example, @code{--list-generations=20d} lists generations
1139that are up to 20 days old.
f566d765
LC
1140@end itemize
1141
b7884ca3
NK
1142@item --delete-generations[=@var{pattern}]
1143@itemx -d [@var{pattern}]
d7ddb257
LC
1144When @var{pattern} is omitted, delete all generations except the current
1145one.
b7884ca3
NK
1146
1147This command accepts the same patterns as @option{--list-generations}.
d7ddb257
LC
1148When @var{pattern} is specified, delete the matching generations. When
1149@var{pattern} specifies a duration, generations @emph{older} than the
1150specified duration match. For instance, @code{--delete-generations=1m}
1151deletes generations that are more than one month old.
1152
1153If the current generation matches, it is deleted atomically---i.e., by
1154switching to the previous available generation. Note that the zeroth
1155generation is never deleted.
b7884ca3 1156
1bb9900a
LC
1157Note that deleting generations prevents roll-back to them.
1158Consequently, this command must be used with care.
1159
733b4130 1160@end table
eeaf4427 1161
70ee5642
LC
1162Finally, since @command{guix package} may actually start build
1163processes, it supports all the common build options that @command{guix
1164build} supports (@pxref{Invoking guix build, common build options}).
1165
457f60fa
AK
1166@include emacs.texi
1167
c4202d60
LC
1168@node Substitutes
1169@section Substitutes
1170
1171@cindex substitutes
1172@cindex pre-built binaries
1173Guix supports transparent source/binary deployment, which means that it
1174can either build things locally, or download pre-built items from a
1175server. We call these pre-built items @dfn{substitutes}---they are
1176substitutes for local build results. In many cases, downloading a
1177substitute is much faster than building things locally.
1178
1179Substitutes can be anything resulting from a derivation build
1180(@pxref{Derivations}). Of course, in the common case, they are
1181pre-built package binaries, but source tarballs, for instance, which
1182also result from derivation builds, can be available as substitutes.
1183
1184The @code{hydra.gnu.org} server is a front-end to a build farm that
1185builds packages from the GNU distribution continuously for some
9176607e
LC
1186architectures, and makes them available as substitutes. This is the
1187default source of substitutes; it can be overridden by passing
1188@command{guix-daemon} the @code{--substitute-urls} option
1189(@pxref{Invoking guix-daemon}).
c4202d60
LC
1190
1191@cindex security
1192@cindex digital signatures
1193To allow Guix to download substitutes from @code{hydra.gnu.org}, you
1194must add its public key to the access control list (ACL) of archive
1195imports, using the @command{guix archive} command (@pxref{Invoking guix
1196archive}). Doing so implies that you trust @code{hydra.gnu.org} to not
1197be compromised and to serve genuine substitutes.
1198
1199This public key is installed along with Guix, in
1200@code{@var{prefix}/share/guix/hydra.gnu.org.pub}, where @var{prefix} is
1201the installation prefix of Guix. If you installed Guix from source,
1202make sure you checked the GPG signature of
1203@file{guix-@value{VERSION}.tar.gz}, which contains this public key file.
1204Then, you can run something like this:
1205
1206@example
1207# guix archive --authorize < hydra.gnu.org.pub
1208@end example
1209
1210Once this is in place, the output of a command like @code{guix build}
1211should change from something like:
1212
1213@example
1214$ guix build emacs --dry-run
1215The following derivations would be built:
1216 /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
1217 /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
1218 /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
1219 /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
1220@dots{}
1221@end example
1222
1223@noindent
1224to something like:
1225
1226@example
1227$ guix build emacs --dry-run
1228The following files would be downloaded:
1229 /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
1230 /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
1231 /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
1232 /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
1233@dots{}
1234@end example
1235
1236@noindent
1237This indicates that substitutes from @code{hydra.gnu.org} are usable and
1238will be downloaded, when possible, for future builds.
1239
1240Guix ignores substitutes that are not signed, or that are not signed by
ef27aa9c 1241one of the keys listed in the ACL. It also detects and raises an error
c4202d60
LC
1242when attempting to use a substitute that has been tampered with.
1243
1244The substitute mechanism can be disabled globally by running
1245@code{guix-daemon} with @code{--no-substitutes} (@pxref{Invoking
1246guix-daemon}). It can also be disabled temporarily by passing the
1247@code{--no-substitutes} option to @command{guix package}, @command{guix
1248build}, and other command-line tools.
1249
1250
1251Today, each individual's control over their own computing is at the
1252mercy of institutions, corporations, and groups with enough power and
1253determination to subvert the computing infrastructure and exploit its
1254weaknesses. While using @code{hydra.gnu.org} substitutes can be
1255convenient, we encourage users to also build on their own, or even run
1256their own build farm, such that @code{hydra.gnu.org} is less of an
1257interesting target.
1258
1259Guix has the foundations to maximize build reproducibility
1260(@pxref{Features}). In most cases, independent builds of a given
1261package or derivation should yield bit-identical results. Thus, through
1262a diverse set of independent package builds, we can strengthen the
1263integrity of our systems.
1264
1265In the future, we want Guix to have support to publish and retrieve
1266binaries to/from other users, in a peer-to-peer fashion. If you would
1267like to discuss this project, join us on @email{guix-devel@@gnu.org}.
1268
1269
6e721c4d
LC
1270@node Packages with Multiple Outputs
1271@section Packages with Multiple Outputs
1272
1273@cindex multiple-output packages
1274@cindex package outputs
1275
1276Often, packages defined in Guix have a single @dfn{output}---i.e., the
1277source package leads exactly one directory in the store. When running
1278@command{guix package -i glibc}, one installs the default output of the
1279GNU libc package; the default output is called @code{out}, but its name
1280can be omitted as shown in this command. In this particular case, the
1281default output of @code{glibc} contains all the C header files, shared
1282libraries, static libraries, Info documentation, and other supporting
1283files.
1284
1285Sometimes it is more appropriate to separate the various types of files
1286produced from a single source package into separate outputs. For
1287instance, the GLib C library (used by GTK+ and related packages)
1288installs more than 20 MiB of reference documentation as HTML pages.
1289To save space for users who do not need it, the documentation goes to a
1290separate output, called @code{doc}. To install the main GLib output,
1291which contains everything but the documentation, one would run:
1292
1293@example
1294guix package -i glib
1295@end example
1296
1297The command to install its documentation is:
1298
1299@example
1300guix package -i glib:doc
1301@end example
1302
1303Some packages install programs with different ``dependency footprints''.
1304For instance, the WordNet package install both command-line tools and
1305graphical user interfaces (GUIs). The former depend solely on the C
1306library, whereas the latter depend on Tcl/Tk and the underlying X
1307libraries. In this case, we leave the command-line tools in the default
1308output, whereas the GUIs are in a separate output. This allows users
1309who do not need the GUIs to save space.
1310
1311There are several such multiple-output packages in the GNU distribution.
91ef73d4
LC
1312Other conventional output names include @code{lib} for libraries and
1313possibly header files, @code{bin} for stand-alone programs, and
1314@code{debug} for debugging information (@pxref{Installing Debugging
1315Files}). The outputs of a packages are listed in the third column of
1316the output of @command{guix package --list-available} (@pxref{Invoking
1317guix package}).
6e721c4d 1318
eeaf4427 1319
e49951eb
MW
1320@node Invoking guix gc
1321@section Invoking @command{guix gc}
fe8ff028
LC
1322
1323@cindex garbage collector
1324Packages that are installed but not used may be @dfn{garbage-collected}.
e49951eb 1325The @command{guix gc} command allows users to explicitly run the garbage
834129e0 1326collector to reclaim space from the @file{/gnu/store} directory.
fe8ff028
LC
1327
1328The garbage collector has a set of known @dfn{roots}: any file under
834129e0 1329@file{/gnu/store} reachable from a root is considered @dfn{live} and
fe8ff028
LC
1330cannot be deleted; any other file is considered @dfn{dead} and may be
1331deleted. The set of garbage collector roots includes default user
e49951eb
MW
1332profiles, and may be augmented with @command{guix build --root}, for
1333example (@pxref{Invoking guix build}).
fe8ff028 1334
1bb9900a
LC
1335Prior to running @code{guix gc --collect-garbage} to make space, it is
1336often useful to remove old generations from user profiles; that way, old
1337package builds referenced by those generations can be reclaimed. This
1338is achieved by running @code{guix package --delete-generations}
1339(@pxref{Invoking guix package}).
1340
e49951eb 1341The @command{guix gc} command has three modes of operation: it can be
fe8ff028
LC
1342used to garbage-collect any dead files (the default), to delete specific
1343files (the @code{--delete} option), or to print garbage-collector
1344information. The available options are listed below:
1345
1346@table @code
1347@item --collect-garbage[=@var{min}]
1348@itemx -C [@var{min}]
834129e0 1349Collect garbage---i.e., unreachable @file{/gnu/store} files and
fe8ff028
LC
1350sub-directories. This is the default operation when no option is
1351specified.
1352
1353When @var{min} is given, stop once @var{min} bytes have been collected.
1354@var{min} may be a number of bytes, or it may include a unit as a
4a44d7bb
LC
1355suffix, such as @code{MiB} for mebibytes and @code{GB} for gigabytes
1356(@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
fe8ff028
LC
1357
1358When @var{min} is omitted, collect all the garbage.
1359
1360@item --delete
1361@itemx -d
1362Attempt to delete all the store files and directories specified as
1363arguments. This fails if some of the files are not in the store, or if
1364they are still live.
1365
1366@item --list-dead
1367Show the list of dead files and directories still present in the
1368store---i.e., files and directories no longer reachable from any root.
1369
1370@item --list-live
1371Show the list of live store files and directories.
ba8b732d
LC
1372
1373@end table
1374
1375In addition, the references among existing store files can be queried:
1376
1377@table @code
1378
1379@item --references
1380@itemx --referrers
1381List the references (respectively, the referrers) of store files given
1382as arguments.
1383
8e59fdd5
LC
1384@item --requisites
1385@itemx -R
1386List the requisites of the store files passed as arguments. Requisites
1387include the store files themselves, their references, and the references
1388of these, recursively. In other words, the returned list is the
1389@dfn{transitive closure} of the store files.
1390
fe8ff028
LC
1391@end table
1392
eeaf4427 1393
f651b477
LC
1394@node Invoking guix pull
1395@section Invoking @command{guix pull}
1396
1397Packages are installed or upgraded to the latest version available in
1398the distribution currently available on your local machine. To update
1399that distribution, along with the Guix tools, you must run @command{guix
1400pull}: the command downloads the latest Guix source code and package
1401descriptions, and deploys it.
1402
1403On completion, @command{guix package} will use packages and package
1404versions from this just-retrieved copy of Guix. Not only that, but all
1405the Guix commands and Scheme modules will also be taken from that latest
1406version. New @command{guix} sub-commands added by the update also
1407become available.
1408
1409The @command{guix pull} command is usually invoked with no arguments,
1410but it supports the following options:
1411
1412@table @code
1413@item --verbose
1414Produce verbose output, writing build logs to the standard error output.
1415
ab5d72ad
LC
1416@item --url=@var{url}
1417Download the source tarball of Guix from @var{url}.
1418
1419By default, the tarball is taken from its canonical address at
1420@code{gnu.org}, for the stable branch of Guix.
1421
f651b477
LC
1422@item --bootstrap
1423Use the bootstrap Guile to build the latest Guix. This option is only
1424useful to Guix developers.
1425@end table
1426
760c60d6
LC
1427
1428@node Invoking guix archive
1429@section Invoking @command{guix archive}
1430
1431The @command{guix archive} command allows users to @dfn{export} files
1432from the store into a single archive, and to later @dfn{import} them.
1433In particular, it allows store files to be transferred from one machine
1434to another machine's store. For example, to transfer the @code{emacs}
1435package to a machine connected over SSH, one would run:
1436
1437@example
56607088 1438guix archive --export -r emacs | ssh the-machine guix archive --import
760c60d6
LC
1439@end example
1440
87236aed 1441@noindent
56607088
LC
1442Similarly, a complete user profile may be transferred from one machine
1443to another like this:
1444
1445@example
1446guix archive --export -r $(readlink -f ~/.guix-profile) | \
1447 ssh the-machine guix-archive --import
1448@end example
1449
1450@noindent
1451However, note that, in both examples, all of @code{emacs} and the
1452profile as well as all of their dependencies are transferred (due to
1453@code{-r}), regardless of what is already available in the target
1454machine's store. The @code{--missing} option can help figure out which
1455items are missing from the target's store.
87236aed 1456
760c60d6 1457Archives are stored in the ``Nix archive'' or ``Nar'' format, which is
0dbd88db
LC
1458comparable in spirit to `tar', but with a few noteworthy differences
1459that make it more appropriate for our purposes. First, rather than
1460recording all Unix meta-data for each file, the Nar format only mentions
1461the file type (regular, directory, or symbolic link); Unix permissions
1462and owner/group are dismissed. Second, the order in which directory
1463entries are stored always follows the order of file names according to
1464the C locale collation order. This makes archive production fully
1465deterministic.
1466
1467When exporting, the daemon digitally signs the contents of the archive,
1468and that digital signature is appended. When importing, the daemon
1469verifies the signature and rejects the import in case of an invalid
1470signature or if the signing key is not authorized.
760c60d6
LC
1471@c FIXME: Add xref to daemon doc about signatures.
1472
1473The main options are:
1474
1475@table @code
1476@item --export
1477Export the specified store files or packages (see below.) Write the
1478resulting archive to the standard output.
1479
56607088
LC
1480Dependencies are @emph{not} included in the output, unless
1481@code{--recursive} is passed.
1482
1483@item -r
1484@itemx --recursive
1485When combined with @code{--export}, this instructs @command{guix
1486archive} to include dependencies of the given items in the archive.
1487Thus, the resulting archive is self-contained: it contains the closure
1488of the exported store items.
1489
760c60d6
LC
1490@item --import
1491Read an archive from the standard input, and import the files listed
1492therein into the store. Abort if the archive has an invalid digital
f82cc5fd
LC
1493signature, or if it is signed by a public key not among the authorized
1494keys (see @code{--authorize} below.)
554f26ec 1495
87236aed
LC
1496@item --missing
1497Read a list of store file names from the standard input, one per line,
1498and write on the standard output the subset of these files missing from
1499the store.
1500
554f26ec 1501@item --generate-key[=@var{parameters}]
f82cc5fd 1502@cindex signing, archives
554f26ec
LC
1503Generate a new key pair for the daemons. This is a prerequisite before
1504archives can be exported with @code{--export}. Note that this operation
1505usually takes time, because it needs to gather enough entropy to
1506generate the key pair.
1507
1508The generated key pair is typically stored under @file{/etc/guix}, in
1509@file{signing-key.pub} (public key) and @file{signing-key.sec} (private
867d8473
LC
1510key, which must be kept secret.) When @var{parameters} is omitted,
1511an ECDSA key using the Ed25519 curve is generated, or, for Libgcrypt
1512versions before 1.6.0, it is a 4096-bit RSA key.
1513Alternately, @var{parameters} can specify
554f26ec
LC
1514@code{genkey} parameters suitable for Libgcrypt (@pxref{General
1515public-key related Functions, @code{gcry_pk_genkey},, gcrypt, The
1516Libgcrypt Reference Manual}).
f82cc5fd
LC
1517
1518@item --authorize
1519@cindex authorizing, archives
1520Authorize imports signed by the public key passed on standard input.
1521The public key must be in ``s-expression advanced format''---i.e., the
1522same format as the @file{signing-key.pub} file.
1523
1524The list of authorized keys is kept in the human-editable file
1525@file{/etc/guix/acl}. The file contains
1526@url{http://people.csail.mit.edu/rivest/Sexp.txt, ``advanced-format
1527s-expressions''} and is structured as an access-control list in the
1528@url{http://theworld.com/~cme/spki.txt, Simple Public-Key Infrastructure
1529(SPKI)}.
760c60d6
LC
1530@end table
1531
1532To export store files as an archive to the standard output, run:
1533
1534@example
1535guix archive --export @var{options} @var{specifications}...
1536@end example
1537
1538@var{specifications} may be either store file names or package
1539specifications, as for @command{guix package} (@pxref{Invoking guix
1540package}). For instance, the following command creates an archive
1541containing the @code{gui} output of the @code{git} package and the main
1542output of @code{emacs}:
1543
1544@example
834129e0 1545guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
760c60d6
LC
1546@end example
1547
1548If the specified packages are not built yet, @command{guix archive}
1549automatically builds them. The build process may be controlled with the
1550same options that can be passed to the @command{guix build} command
70ee5642 1551(@pxref{Invoking guix build, common build options}).
760c60d6
LC
1552
1553
568717fd
LC
1554@c *********************************************************************
1555@node Programming Interface
1556@chapter Programming Interface
1557
3dc1970d
LC
1558GNU Guix provides several Scheme programming interfaces (APIs) to
1559define, build, and query packages. The first interface allows users to
1560write high-level package definitions. These definitions refer to
1561familiar packaging concepts, such as the name and version of a package,
1562its build system, and its dependencies. These definitions can then be
1563turned into concrete build actions.
1564
ba55b1cb 1565Build actions are performed by the Guix daemon, on behalf of users. In a
3dc1970d 1566standard setup, the daemon has write access to the store---the
834129e0 1567@file{/gnu/store} directory---whereas users do not. The recommended
3dc1970d
LC
1568setup also has the daemon perform builds in chroots, under a specific
1569build users, to minimize interference with the rest of the system.
1570
1571@cindex derivation
1572Lower-level APIs are available to interact with the daemon and the
1573store. To instruct the daemon to perform a build action, users actually
1574provide it with a @dfn{derivation}. A derivation is a low-level
1575representation of the build actions to be taken, and the environment in
1576which they should occur---derivations are to package definitions what
49ad317a
LC
1577assembly is to C programs. The term ``derivation'' comes from the fact
1578that build results @emph{derive} from them.
3dc1970d
LC
1579
1580This chapter describes all these APIs in turn, starting from high-level
1581package definitions.
1582
568717fd 1583@menu
b860f382 1584* Defining Packages:: Defining new packages.
7458bd0a 1585* Build Systems:: Specifying how packages are built.
b860f382
LC
1586* The Store:: Manipulating the package store.
1587* Derivations:: Low-level interface to package derivations.
1588* The Store Monad:: Purely functional interface to the store.
21b679f6 1589* G-Expressions:: Manipulating build expressions.
568717fd
LC
1590@end menu
1591
1592@node Defining Packages
1593@section Defining Packages
1594
3dc1970d
LC
1595The high-level interface to package definitions is implemented in the
1596@code{(guix packages)} and @code{(guix build-system)} modules. As an
1597example, the package definition, or @dfn{recipe}, for the GNU Hello
1598package looks like this:
1599
1600@example
e7f34eb0
LC
1601(define-module (gnu packages hello)
1602 #:use-module (guix packages)
1603 #:use-module (guix download)
1604 #:use-module (guix build-system gnu)
1605 #:use-module (guix licenses))
b22a12fd 1606
79f5dd59 1607(define-public hello
3dc1970d
LC
1608 (package
1609 (name "hello")
1610 (version "2.8")
1611 (source (origin
1612 (method url-fetch)
1613 (uri (string-append "mirror://gnu/hello/hello-" version
1614 ".tar.gz"))
1615 (sha256
1616 (base32 "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6"))))
1617 (build-system gnu-build-system)
7458bd0a 1618 (arguments `(#:configure-flags '("--enable-silent-rules")))
3dc1970d 1619 (inputs `(("gawk" ,gawk)))
7458bd0a
LC
1620 (synopsis "Hello, GNU world: An example GNU package")
1621 (description "Guess what GNU Hello prints!")
3dc1970d 1622 (home-page "http://www.gnu.org/software/hello/")
b22a12fd 1623 (license gpl3+)))
3dc1970d
LC
1624@end example
1625
1626@noindent
1627Without being a Scheme expert, the reader may have guessed the meaning
e7f34eb0 1628of the various fields here. This expression binds variable @code{hello}
3dc1970d
LC
1629to a @code{<package>} object, which is essentially a record
1630(@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}).
1631This package object can be inspected using procedures found in the
1632@code{(guix packages)} module; for instance, @code{(package-name hello)}
1633returns---surprise!---@code{"hello"}.
1634
2f7d2d91
LC
1635With luck, you may be able to import part or all of the definition of
1636the package you are interested in from another repository, using the
1637@code{guix import} command (@pxref{Invoking guix import}).
1638
e7f34eb0
LC
1639In the example above, @var{hello} is defined into a module of its own,
1640@code{(gnu packages hello)}. Technically, this is not strictly
1641necessary, but it is convenient to do so: all the packages defined in
1642modules under @code{(gnu packages @dots{})} are automatically known to
1643the command-line tools (@pxref{Package Modules}).
1644
3dc1970d
LC
1645There are a few points worth noting in the above package definition:
1646
1647@itemize
1648@item
1649The @code{source} field of the package is an @code{<origin>} object.
1650Here, the @code{url-fetch} method from @code{(guix download)} is used,
1651meaning that the source is a file to be downloaded over FTP or HTTP.
1652
1653The @code{mirror://gnu} prefix instructs @code{url-fetch} to use one of
1654the GNU mirrors defined in @code{(guix download)}.
1655
1656The @code{sha256} field specifies the expected SHA256 hash of the file
1657being downloaded. It is mandatory, and allows Guix to check the
1658integrity of the file. The @code{(base32 @dots{})} form introduces the
6c365eca 1659base32 representation of the hash. You can obtain this information with
210cc920
LC
1660@code{guix download} (@pxref{Invoking guix download}) and @code{guix
1661hash} (@pxref{Invoking guix hash}).
3dc1970d 1662
f9cc8971
LC
1663@cindex patches
1664When needed, the @code{origin} form can also have a @code{patches} field
1665listing patches to be applied, and a @code{snippet} field giving a
1666Scheme expression to modify the source code.
1667
3dc1970d
LC
1668@item
1669@cindex GNU Build System
7458bd0a
LC
1670The @code{build-system} field specifies the procedure to build the
1671package (@pxref{Build Systems}). Here, @var{gnu-build-system}
1672represents the familiar GNU Build System, where packages may be
1673configured, built, and installed with the usual @code{./configure &&
1674make && make check && make install} command sequence.
1675
1676@item
1677The @code{arguments} field specifies options for the build system
1678(@pxref{Build Systems}). Here it is interpreted by
1679@var{gnu-build-system} as a request run @file{configure} with the
1680@code{--enable-silent-rules} flag.
3dc1970d
LC
1681
1682@item
1683The @code{inputs} field specifies inputs to the build process---i.e.,
1684build-time or run-time dependencies of the package. Here, we define an
1685input called @code{"gawk"} whose value is that of the @var{gawk}
1686variable; @var{gawk} is itself bound to a @code{<package>} object.
1687
1688Note that GCC, Coreutils, Bash, and other essential tools do not need to
1689be specified as inputs here. Instead, @var{gnu-build-system} takes care
7458bd0a 1690of ensuring that they are present (@pxref{Build Systems}).
3dc1970d
LC
1691
1692However, any other dependencies need to be specified in the
1693@code{inputs} field. Any dependency not specified here will simply be
1694unavailable to the build process, possibly leading to a build failure.
1695@end itemize
1696
2f7d2d91 1697Once a package definition is in place, the
e49951eb 1698package may actually be built using the @code{guix build} command-line
7458bd0a 1699tool (@pxref{Invoking guix build}). @xref{Packaging Guidelines}, for
b4f5e0e8
CR
1700more information on how to test package definitions, and
1701@ref{Invoking guix lint}, for information on how to check a definition
1702for style conformance.
1703
7458bd0a
LC
1704Eventually, updating the package definition to a new upstream version
1705can be partly automated by the @command{guix refresh} command
1706(@pxref{Invoking guix refresh}).
3dc1970d
LC
1707
1708Behind the scenes, a derivation corresponding to the @code{<package>}
1709object is first computed by the @code{package-derivation} procedure.
834129e0 1710That derivation is stored in a @code{.drv} file under @file{/gnu/store}.
ba55b1cb 1711The build actions it prescribes may then be realized by using the
3dc1970d
LC
1712@code{build-derivations} procedure (@pxref{The Store}).
1713
1714@deffn {Scheme Procedure} package-derivation @var{store} @var{package} [@var{system}]
59688fc4
LC
1715Return the @code{<derivation>} object of @var{package} for @var{system}
1716(@pxref{Derivations}).
3dc1970d
LC
1717
1718@var{package} must be a valid @code{<package>} object, and @var{system}
1719must be a string denoting the target system type---e.g.,
1720@code{"x86_64-linux"} for an x86_64 Linux-based GNU system. @var{store}
1721must be a connection to the daemon, which operates on the store
1722(@pxref{The Store}).
1723@end deffn
568717fd 1724
9c1edabd
LC
1725@noindent
1726@cindex cross-compilation
1727Similarly, it is possible to compute a derivation that cross-builds a
1728package for some other system:
1729
1730@deffn {Scheme Procedure} package-cross-derivation @var{store} @
1731 @var{package} @var{target} [@var{system}]
59688fc4
LC
1732Return the @code{<derivation>} object of @var{package} cross-built from
1733@var{system} to @var{target}.
9c1edabd
LC
1734
1735@var{target} must be a valid GNU triplet denoting the target hardware
1736and operating system, such as @code{"mips64el-linux-gnu"}
1737(@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
1738Configure and Build System}).
1739@end deffn
1740
1741
7458bd0a
LC
1742@node Build Systems
1743@section Build Systems
1744
1745@cindex build system
1746Each package definition specifies a @dfn{build system} and arguments for
1747that build system (@pxref{Defining Packages}). This @code{build-system}
1748field represents the build procedure of the package, as well implicit
1749dependencies of that build procedure.
1750
1751Build systems are @code{<build-system>} objects. The interface to
1752create and manipulate them is provided by the @code{(guix build-system)}
1753module, and actual build systems are exported by specific modules.
1754
f5fd4fd2 1755@cindex bag (low-level package representation)
0d5a559f
LC
1756Under the hood, build systems first compile package objects to
1757@dfn{bags}. A @dfn{bag} is like a package, but with less
1758ornamentation---in other words, a bag is a lower-level representation of
1759a package, which includes all the inputs of that package, including some
1760that were implicitly added by the build system. This intermediate
1761representation is then compiled to a derivation (@pxref{Derivations}).
1762
7458bd0a
LC
1763Build systems accept an optional list of @dfn{arguments}. In package
1764definitions, these are passed @i{via} the @code{arguments} field
1765(@pxref{Defining Packages}). They are typically keyword arguments
1766(@pxref{Optional Arguments, keyword arguments in Guile,, guile, GNU
1767Guile Reference Manual}). The value of these arguments is usually
1768evaluated in the @dfn{build stratum}---i.e., by a Guile process launched
1769by the daemon (@pxref{Derivations}).
1770
1771The main build system is @var{gnu-build-system}, which implements the
1772standard build procedure for GNU packages and many other packages. It
1773is provided by the @code{(guix build-system gnu)} module.
1774
1775@defvr {Scheme Variable} gnu-build-system
1776@var{gnu-build-system} represents the GNU Build System, and variants
1777thereof (@pxref{Configuration, configuration and makefile conventions,,
1778standards, GNU Coding Standards}).
1779
1780@cindex build phases
1781In a nutshell, packages using it configured, built, and installed with
1782the usual @code{./configure && make && make check && make install}
1783command sequence. In practice, a few additional steps are often needed.
1784All these steps are split up in separate @dfn{phases},
1785notably@footnote{Please see the @code{(guix build gnu-build-system)}
1786modules for more details about the build phases.}:
1787
1788@table @code
1789@item unpack
1790Unpack the source tarball, and change the current directory to the
1791extracted source tree. If the source is actually a directory, copy it
1792to the build tree, and enter that directory.
1793
1794@item patch-source-shebangs
1795Patch shebangs encountered in source files so they refer to the right
1796store file names. For instance, this changes @code{#!/bin/sh} to
1797@code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
1798
1799@item configure
1800Run the @file{configure} script with a number of default options, such
1801as @code{--prefix=/gnu/store/@dots{}}, as well as the options specified
1802by the @code{#:configure-flags} argument.
1803
1804@item build
1805Run @code{make} with the list of flags specified with
1806@code{#:make-flags}. If the @code{#:parallel-builds?} argument is true
1807(the default), build with @code{make -j}.
1808
1809@item check
1810Run @code{make check}, or some other target specified with
1811@code{#:test-target}, unless @code{#:tests? #f} is passed. If the
1812@code{#:parallel-tests?} argument is true (the default), run @code{make
1813check -j}.
1814
1815@item install
1816Run @code{make install} with the flags listed in @code{#:make-flags}.
1817
1818@item patch-shebangs
1819Patch shebangs on the installed executable files.
1820
1821@item strip
1822Strip debugging symbols from ELF files (unless @code{#:strip-binaries?}
1823is false), copying them to the @code{debug} output when available
1824(@pxref{Installing Debugging Files}).
1825@end table
1826
1827@vindex %standard-phases
1828The build-side module @code{(guix build gnu-build-system)} defines
1829@var{%standard-phases} as the default list of build phases.
1830@var{%standard-phases} is a list of symbol/procedure pairs, where the
1831procedure implements the actual phase.
1832
1833The list of phases used for a particular package can be changed with the
1834@code{#:phases} parameter. For instance, passing:
1835
1836@example
1837#:phases (alist-delete 'configure %standard-phases)
1838@end example
1839
9bf404e9 1840means that all the phases described above will be used, except the
7458bd0a
LC
1841@code{configure} phase.
1842
1843In addition, this build system ensures that the ``standard'' environment
1844for GNU packages is available. This includes tools such as GCC, libc,
1845Coreutils, Bash, Make, Diffutils, grep, and sed (see the @code{(guix
1846build-system gnu)} module for a complete list.) We call these the
1847@dfn{implicit inputs} of a package, because package definitions don't
1848have to mention them.
1849@end defvr
1850
1851Other @code{<build-system>} objects are defined to support other
1852conventions and tools used by free software packages. They inherit most
1853of @var{gnu-build-system}, and differ mainly in the set of inputs
1854implicitly added to the build process, and in the list of phases
1855executed. Some of these build systems are listed below.
1856
1857@defvr {Scheme Variable} cmake-build-system
1858This variable is exported by @code{(guix build-system cmake)}. It
1859implements the build procedure for packages using the
1860@url{http://www.cmake.org, CMake build tool}.
1861
1862It automatically adds the @code{cmake} package to the set of inputs.
1863Which package is used can be specified with the @code{#:cmake}
1864parameter.
9849cfc1
LC
1865
1866The @code{#:configure-flags} parameter is taken as a list of flags
1867passed to the @command{cmake} command. The @code{#:build-type}
1868parameter specifies in abstract terms the flags passed to the compiler;
1869it defaults to @code{"RelWithDebInfo"} (short for ``release mode with
1870debugging information''), which roughly means that code is compiled with
1871@code{-O2 -g}, as is the case for Autoconf-based packages by default.
7458bd0a
LC
1872@end defvr
1873
3afcf52b
FB
1874@defvr {Scheme Variable} glib-or-gtk-build-system
1875This variable is exported by @code{(guix build-system glib-or-gtk)}. It
1876is intended for use with packages making use of GLib or GTK+.
1877
1878This build system adds the following two phases to the ones defined by
1879@var{gnu-build-system}:
1880
1881@table @code
1882@item glib-or-gtk-wrap
1883The phase @code{glib-or-gtk-wrap} ensures that programs found under
1884@file{bin/} are able to find GLib's ``schemas'' and
1885@uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, GTK+
1886modules}. This is achieved by wrapping the programs in launch scripts
1887that appropriately set the @code{XDG_DATA_DIRS} and @code{GTK_PATH}
1888environment variables.
1889
73aa8ddb
LC
1890It is possible to exclude specific package outputs from that wrapping
1891process by listing their names in the
1892@code{#:glib-or-gtk-wrap-excluded-outputs} parameter. This is useful
1893when an output is known not to contain any GLib or GTK+ binaries, and
1894where wrapping would gratuitously add a dependency of that output on
1895GLib and GTK+.
1896
3afcf52b
FB
1897@item glib-or-gtk-compile-schemas
1898The phase @code{glib-or-gtk-compile-schemas} makes sure that all GLib's
1899@uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
1900GSettings schemas} are compiled. Compilation is performed by the
1901@command{glib-compile-schemas} program. It is provided by the package
1902@code{glib:bin} which is automatically imported by the build system.
1903The @code{glib} package providing @command{glib-compile-schemas} can be
1904specified with the @code{#:glib} parameter.
1905@end table
1906
1907Both phases are executed after the @code{install} phase.
1908@end defvr
1909
7458bd0a
LC
1910@defvr {Scheme Variable} python-build-system
1911This variable is exported by @code{(guix build-system python)}. It
1912implements the more or less standard build procedure used by Python
1913packages, which consists in running @code{python setup.py build} and
1914then @code{python setup.py install --prefix=/gnu/store/@dots{}}.
1915
1916For packages that install stand-alone Python programs under @code{bin/},
1917it takes care of wrapping these programs so their @code{PYTHONPATH}
1918environment variable points to all the Python libraries they depend on.
1919
1920Which Python package is used can be specified with the @code{#:python}
1921parameter.
1922@end defvr
1923
1924@defvr {Scheme Variable} perl-build-system
1925This variable is exported by @code{(guix build-system perl)}. It
2d2a53fc
EB
1926implements the standard build procedure for Perl packages, which either
1927consists in running @code{perl Build.PL --prefix=/gnu/store/@dots{}},
1928followed by @code{Build} and @code{Build install}; or in running
1929@code{perl Makefile.PL PREFIX=/gnu/store/@dots{}}, followed by
1930@code{make} and @code{make install}; depending on which of
1931@code{Build.PL} or @code{Makefile.PL} is present in the package
1932distribution. Preference is given to the former if both @code{Build.PL}
1933and @code{Makefile.PL} exist in the package distribution. This
1934preference can be reversed by specifying @code{#t} for the
1935@code{#:make-maker?} parameter.
1936
1937The initial @code{perl Makefile.PL} or @code{perl Build.PL} invocation
1938passes flags specified by the @code{#:make-maker-flags} or
1939@code{#:module-build-flags} parameter, respectively.
7458bd0a
LC
1940
1941Which Perl package is used can be specified with @code{#:perl}.
1942@end defvr
1943
c08f9818
DT
1944@defvr {Scheme Variable} ruby-build-system
1945This variable is exported by @code{(guix build-system ruby)}. It
1946implements the RubyGems build procedure used by Ruby packages, which
1947involves running @code{gem build} followed by @code{gem install}.
1948
1949Which Ruby package is used can be specified with the @code{#:ruby}
1950parameter.
1951@end defvr
7458bd0a 1952
a677c726
RW
1953@defvr {Scheme Variable} waf-build-system
1954This variable is exported by @code{(guix build-system waf)}. It
1955implements a build procedure around the @code{waf} script. The common
1956phases---@code{configure}, @code{build}, and @code{install}---are
1957implemented by passing their names as arguments to the @code{waf}
1958script.
1959
1960The @code{waf} script is executed by the Python interpreter. Which
1961Python package is used to run the script can be specified with the
1962@code{#:python} parameter.
1963@end defvr
1964
7458bd0a
LC
1965Lastly, for packages that do not need anything as sophisticated, a
1966``trivial'' build system is provided. It is trivial in the sense that
1967it provides basically no support: it does not pull any implicit inputs,
1968and does not have a notion of build phases.
1969
1970@defvr {Scheme Variable} trivial-build-system
1971This variable is exported by @code{(guix build-system trivial)}.
1972
1973This build system requires a @code{#:builder} argument. This argument
1974must be a Scheme expression that builds the package's output(s)---as
1975with @code{build-expression->derivation} (@pxref{Derivations,
1976@code{build-expression->derivation}}).
1977@end defvr
1978
568717fd
LC
1979@node The Store
1980@section The Store
1981
e531ac2a
LC
1982@cindex store
1983@cindex store paths
1984
1985Conceptually, the @dfn{store} is where derivations that have been
834129e0 1986successfully built are stored---by default, under @file{/gnu/store}.
e531ac2a
LC
1987Sub-directories in the store are referred to as @dfn{store paths}. The
1988store has an associated database that contains information such has the
1989store paths referred to by each store path, and the list of @emph{valid}
1990store paths---paths that result from a successful build.
1991
1992The store is always accessed by the daemon on behalf of its clients
1993(@pxref{Invoking guix-daemon}). To manipulate the store, clients
1994connect to the daemon over a Unix-domain socket, send it requests, and
1995read the result---these are remote procedure calls, or RPCs.
1996
1997The @code{(guix store)} module provides procedures to connect to the
1998daemon, and to perform RPCs. These are described below.
1999
2000@deffn {Scheme Procedure} open-connection [@var{file}] [#:reserve-space? #t]
2001Connect to the daemon over the Unix-domain socket at @var{file}. When
2002@var{reserve-space?} is true, instruct it to reserve a little bit of
2003extra space on the file system so that the garbage collector can still
2004operate, should the disk become full. Return a server object.
2005
2006@var{file} defaults to @var{%default-socket-path}, which is the normal
2007location given the options that were passed to @command{configure}.
2008@end deffn
2009
2010@deffn {Scheme Procedure} close-connection @var{server}
2011Close the connection to @var{server}.
2012@end deffn
2013
2014@defvr {Scheme Variable} current-build-output-port
2015This variable is bound to a SRFI-39 parameter, which refers to the port
2016where build and error logs sent by the daemon should be written.
2017@end defvr
2018
2019Procedures that make RPCs all take a server object as their first
2020argument.
2021
2022@deffn {Scheme Procedure} valid-path? @var{server} @var{path}
2023Return @code{#t} when @var{path} is a valid store path.
2024@end deffn
2025
cfbf9160 2026@deffn {Scheme Procedure} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
e531ac2a
LC
2027Add @var{text} under file @var{name} in the store, and return its store
2028path. @var{references} is the list of store paths referred to by the
2029resulting store path.
2030@end deffn
2031
874e6874 2032@deffn {Scheme Procedure} build-derivations @var{server} @var{derivations}
59688fc4
LC
2033Build @var{derivations} (a list of @code{<derivation>} objects or
2034derivation paths), and return when the worker is done building them.
2035Return @code{#t} on success.
874e6874
LC
2036@end deffn
2037
b860f382
LC
2038Note that the @code{(guix monads)} module provides a monad as well as
2039monadic versions of the above procedures, with the goal of making it
2040more convenient to work with code that accesses the store (@pxref{The
2041Store Monad}).
2042
e531ac2a
LC
2043@c FIXME
2044@i{This section is currently incomplete.}
568717fd
LC
2045
2046@node Derivations
2047@section Derivations
2048
874e6874
LC
2049@cindex derivations
2050Low-level build actions and the environment in which they are performed
2051are represented by @dfn{derivations}. A derivation contain the
2052following pieces of information:
2053
2054@itemize
2055@item
2056The outputs of the derivation---derivations produce at least one file or
2057directory in the store, but may produce more.
2058
2059@item
2060The inputs of the derivations, which may be other derivations or plain
2061files in the store (patches, build scripts, etc.)
2062
2063@item
2064The system type targeted by the derivation---e.g., @code{x86_64-linux}.
2065
2066@item
2067The file name of a build script in the store, along with the arguments
2068to be passed.
2069
2070@item
2071A list of environment variables to be defined.
2072
2073@end itemize
2074
2075@cindex derivation path
2076Derivations allow clients of the daemon to communicate build actions to
2077the store. They exist in two forms: as an in-memory representation,
2078both on the client- and daemon-side, and as files in the store whose
2079name end in @code{.drv}---these files are referred to as @dfn{derivation
2080paths}. Derivations paths can be passed to the @code{build-derivations}
2081procedure to perform the build actions they prescribe (@pxref{The
2082Store}).
2083
2084The @code{(guix derivations)} module provides a representation of
2085derivations as Scheme objects, along with procedures to create and
2086otherwise manipulate derivations. The lowest-level primitive to create
2087a derivation is the @code{derivation} procedure:
2088
1909431c
LC
2089@deffn {Scheme Procedure} derivation @var{store} @var{name} @var{builder} @
2090 @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
2096ef47 2091 [#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
1909431c 2092 [#:system (%current-system)] [#:references-graphs #f] @
b53be755 2093 [#:allowed-references #f] [#:local-build? #f]
59688fc4
LC
2094Build a derivation with the given arguments, and return the resulting
2095@code{<derivation>} object.
874e6874 2096
2096ef47 2097When @var{hash} and @var{hash-algo} are given, a
874e6874 2098@dfn{fixed-output derivation} is created---i.e., one whose result is
36bbbbd1
LC
2099known in advance, such as a file download. If, in addition,
2100@var{recursive?} is true, then that fixed output may be an executable
2101file or a directory and @var{hash} must be the hash of an archive
2102containing this output.
5b0c9d16 2103
858e9282 2104When @var{references-graphs} is true, it must be a list of file
5b0c9d16
LC
2105name/store path pairs. In that case, the reference graph of each store
2106path is exported in the build environment in the corresponding file, in
2107a simple text format.
1909431c 2108
b53be755
LC
2109When @var{allowed-references} is true, it must be a list of store items
2110or outputs that the derivation's output may refer to.
2111
1909431c
LC
2112When @var{local-build?} is true, declare that the derivation is not a
2113good candidate for offloading and should rather be built locally
2114(@pxref{Daemon Offload Setup}). This is the case for small derivations
2115where the costs of data transfers would outweigh the benefits.
874e6874
LC
2116@end deffn
2117
2118@noindent
2119Here's an example with a shell script as its builder, assuming
2120@var{store} is an open connection to the daemon, and @var{bash} points
2121to a Bash executable in the store:
2122
2123@lisp
2124(use-modules (guix utils)
2125 (guix store)
2126 (guix derivations))
2127
59688fc4
LC
2128(let ((builder ; add the Bash script to the store
2129 (add-text-to-store store "my-builder.sh"
2130 "echo hello world > $out\n" '())))
2131 (derivation store "foo"
2132 bash `("-e" ,builder)
21b679f6 2133 #:inputs `((,bash) (,builder))
59688fc4 2134 #:env-vars '(("HOME" . "/homeless"))))
834129e0 2135@result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
874e6874
LC
2136@end lisp
2137
21b679f6
LC
2138As can be guessed, this primitive is cumbersome to use directly. A
2139better approach is to write build scripts in Scheme, of course! The
2140best course of action for that is to write the build code as a
2141``G-expression'', and to pass it to @code{gexp->derivation}. For more
6621cdb6 2142information, @pxref{G-Expressions}.
21b679f6
LC
2143
2144Once upon a time, @code{gexp->derivation} did not exist and constructing
2145derivations with build code written in Scheme was achieved with
2146@code{build-expression->derivation}, documented below. This procedure
2147is now deprecated in favor of the much nicer @code{gexp->derivation}.
874e6874 2148
dd1a5a15
LC
2149@deffn {Scheme Procedure} build-expression->derivation @var{store} @
2150 @var{name} @var{exp} @
2151 [#:system (%current-system)] [#:inputs '()] @
2152 [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
36bbbbd1 2153 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
63a42824
LC
2154 [#:references-graphs #f] [#:allowed-references #f] @
2155 [#:local-build? #f] [#:guile-for-build #f]
874e6874
LC
2156Return a derivation that executes Scheme expression @var{exp} as a
2157builder for derivation @var{name}. @var{inputs} must be a list of
2158@code{(name drv-path sub-drv)} tuples; when @var{sub-drv} is omitted,
2159@code{"out"} is assumed. @var{modules} is a list of names of Guile
2160modules from the current search path to be copied in the store,
2161compiled, and made available in the load path during the execution of
2162@var{exp}---e.g., @code{((guix build utils) (guix build
2163gnu-build-system))}.
2164
2165@var{exp} is evaluated in an environment where @code{%outputs} is bound
2166to a list of output/path pairs, and where @code{%build-inputs} is bound
2167to a list of string/output-path pairs made from @var{inputs}.
2168Optionally, @var{env-vars} is a list of string pairs specifying the name
2169and value of environment variables visible to the builder. The builder
2170terminates by passing the result of @var{exp} to @code{exit}; thus, when
2171@var{exp} returns @code{#f}, the build is considered to have failed.
2172
2173@var{exp} is built using @var{guile-for-build} (a derivation). When
2174@var{guile-for-build} is omitted or is @code{#f}, the value of the
2175@code{%guile-for-build} fluid is used instead.
9c629a27 2176
63a42824
LC
2177See the @code{derivation} procedure for the meaning of
2178@var{references-graphs}, @var{allowed-references}, and @var{local-build?}.
874e6874
LC
2179@end deffn
2180
2181@noindent
2182Here's an example of a single-output derivation that creates a directory
2183containing one file:
2184
2185@lisp
2186(let ((builder '(let ((out (assoc-ref %outputs "out")))
834129e0 2187 (mkdir out) ; create /gnu/store/@dots{}-goo
874e6874
LC
2188 (call-with-output-file (string-append out "/test")
2189 (lambda (p)
2190 (display '(hello guix) p))))))
dd1a5a15 2191 (build-expression->derivation store "goo" builder))
874e6874 2192
834129e0 2193@result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
874e6874
LC
2194@end lisp
2195
568717fd 2196
b860f382
LC
2197@node The Store Monad
2198@section The Store Monad
2199
2200@cindex monad
2201
2202The procedures that operate on the store described in the previous
2203sections all take an open connection to the build daemon as their first
2204argument. Although the underlying model is functional, they either have
2205side effects or depend on the current state of the store.
2206
2207The former is inconvenient: the connection to the build daemon has to be
2208carried around in all those functions, making it impossible to compose
2209functions that do not take that parameter with functions that do. The
2210latter can be problematic: since store operations have side effects
2211and/or depend on external state, they have to be properly sequenced.
2212
2213@cindex monadic values
2214@cindex monadic functions
2215This is where the @code{(guix monads)} module comes in. This module
2216provides a framework for working with @dfn{monads}, and a particularly
2217useful monad for our uses, the @dfn{store monad}. Monads are a
2218construct that allows two things: associating ``context'' with values
2219(in our case, the context is the store), and building sequences of
561fb6c3 2220computations (here computations include accesses to the store.) Values
b860f382
LC
2221in a monad---values that carry this additional context---are called
2222@dfn{monadic values}; procedures that return such values are called
2223@dfn{monadic procedures}.
2224
2225Consider this ``normal'' procedure:
2226
2227@example
45adbd62
LC
2228(define (sh-symlink store)
2229 ;; Return a derivation that symlinks the 'bash' executable.
2230 (let* ((drv (package-derivation store bash))
2231 (out (derivation->output-path drv))
2232 (sh (string-append out "/bin/bash")))
2233 (build-expression->derivation store "sh"
2234 `(symlink ,sh %output))))
b860f382
LC
2235@end example
2236
2237Using @code{(guix monads)}, it may be rewritten as a monadic function:
2238
ada3df03 2239@c FIXME: Find a better example, one that uses 'mlet'.
b860f382 2240@example
45adbd62 2241(define (sh-symlink)
b860f382 2242 ;; Same, but return a monadic value.
ada3df03
LC
2243 (gexp->derivation "sh"
2244 #~(symlink (string-append #$bash "/bin/bash") #$output)))
b860f382
LC
2245@end example
2246
2247There are two things to note in the second version: the @code{store}
2248parameter is now implicit, and the monadic value returned by
2249@code{package-file}---a wrapper around @code{package-derivation} and
2250@code{derivation->output-path}---is @dfn{bound} using @code{mlet}
2251instead of plain @code{let}.
2252
2253Calling the monadic @code{profile.sh} has no effect. To get the desired
2254effect, one must use @code{run-with-store}:
2255
2256@example
2257(run-with-store (open-connection) (profile.sh))
834129e0 2258@result{} /gnu/store/...-profile.sh
b860f382
LC
2259@end example
2260
b9b86078
LC
2261Note that the @code{(guix monad-repl)} module extends Guile's REPL with
2262new ``meta-commands'' to make it easier to deal with monadic procedures:
2263@code{run-in-store}, and @code{enter-store-monad}. The former, is used
2264to ``run'' a single monadic value through the store:
2265
2266@example
2267scheme@@(guile-user)> ,run-in-store (package->derivation hello)
2268$1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
2269@end example
2270
2271The latter enters a recursive REPL, where all the return values are
2272automatically run through the store:
2273
2274@example
2275scheme@@(guile-user)> ,enter-store-monad
2276store-monad@@(guile-user) [1]> (package->derivation hello)
2277$2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
2278store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
2279$3 = "/gnu/store/@dots{}-foo"
2280store-monad@@(guile-user) [1]> ,q
2281scheme@@(guile-user)>
2282@end example
2283
2284@noindent
2285Note that non-monadic values cannot be returned in the
2286@code{store-monad} REPL.
2287
e87f0591
LC
2288The main syntactic forms to deal with monads in general are provided by
2289the @code{(guix monads)} module and are described below.
b860f382
LC
2290
2291@deffn {Scheme Syntax} with-monad @var{monad} @var{body} ...
2292Evaluate any @code{>>=} or @code{return} forms in @var{body} as being
2293in @var{monad}.
2294@end deffn
2295
2296@deffn {Scheme Syntax} return @var{val}
2297Return a monadic value that encapsulates @var{val}.
2298@end deffn
2299
2300@deffn {Scheme Syntax} >>= @var{mval} @var{mproc}
2301@dfn{Bind} monadic value @var{mval}, passing its ``contents'' to monadic
2302procedure @var{mproc}@footnote{This operation is commonly referred to as
2303``bind'', but that name denotes an unrelated procedure in Guile. Thus
2304we use this somewhat cryptic symbol inherited from the Haskell
2305language.}.
2306@end deffn
2307
2308@deffn {Scheme Syntax} mlet @var{monad} ((@var{var} @var{mval}) ...) @
2309 @var{body} ...
2310@deffnx {Scheme Syntax} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
2311 @var{body} ...
2312Bind the variables @var{var} to the monadic values @var{mval} in
2313@var{body}. The form (@var{var} -> @var{val}) binds @var{var} to the
2314``normal'' value @var{val}, as per @code{let}.
2315
2316@code{mlet*} is to @code{mlet} what @code{let*} is to @code{let}
2317(@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
2318@end deffn
2319
405a9d4e
LC
2320@deffn {Scheme System} mbegin @var{monad} @var{mexp} ...
2321Bind @var{mexp} and the following monadic expressions in sequence,
2322returning the result of the last expression.
2323
2324This is akin to @code{mlet}, except that the return values of the
2325monadic expressions are ignored. In that sense, it is analogous to
2326@code{begin}, but applied to monadic expressions.
2327@end deffn
2328
561fb6c3
LC
2329@cindex state monad
2330The @code{(guix monads)} module provides the @dfn{state monad}, which
2331allows an additional value---the state---to be @emph{threaded} through
2332monadic procedure calls.
2333
2334@defvr {Scheme Variable} %state-monad
2335The state monad. Procedures in the state monad can access and change
2336the state that is threaded.
2337
2338Consider the example below. The @code{square} procedure returns a value
2339in the state monad. It returns the square of its argument, but also
2340increments the current state value:
2341
2342@example
2343(define (square x)
2344 (mlet %state-monad ((count (current-state)))
2345 (mbegin %state-monad
2346 (set-current-state (+ 1 count))
2347 (return (* x x)))))
2348
2349(run-with-state (sequence %state-monad (map square (iota 3))) 0)
2350@result{} (0 1 4)
2351@result{} 3
2352@end example
2353
2354When ``run'' through @var{%state-monad}, we obtain that additional state
2355value, which is the number of @code{square} calls.
2356@end defvr
2357
2358@deffn {Monadic Procedure} current-state
2359Return the current state as a monadic value.
2360@end deffn
2361
2362@deffn {Monadic Procedure} set-current-state @var{value}
2363Set the current state to @var{value} and return the previous state as a
2364monadic value.
2365@end deffn
2366
2367@deffn {Monadic Procedure} state-push @var{value}
2368Push @var{value} to the current state, which is assumed to be a list,
2369and return the previous state as a monadic value.
2370@end deffn
2371
2372@deffn {Monadic Procedure} state-pop
2373Pop a value from the current state and return it as a monadic value.
2374The state is assumed to be a list.
2375@end deffn
2376
2377@deffn {Scheme Procedure} run-with-state @var{mval} [@var{state}]
2378Run monadic value @var{mval} starting with @var{state} as the initial
2379state. Return two values: the resulting value, and the resulting state.
2380@end deffn
2381
e87f0591
LC
2382The main interface to the store monad, provided by the @code{(guix
2383store)} module, is as follows.
b860f382
LC
2384
2385@defvr {Scheme Variable} %store-monad
561fb6c3
LC
2386The store monad---an alias for @var{%state-monad}.
2387
2388Values in the store monad encapsulate accesses to the store. When its
2389effect is needed, a value of the store monad must be ``evaluated'' by
2390passing it to the @code{run-with-store} procedure (see below.)
b860f382
LC
2391@end defvr
2392
2393@deffn {Scheme Procedure} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
2394Run @var{mval}, a monadic value in the store monad, in @var{store}, an
2395open store connection.
2396@end deffn
2397
ad372953 2398@deffn {Monadic Procedure} text-file @var{name} @var{text} [@var{references}]
b860f382 2399Return as a monadic value the absolute file name in the store of the file
ad372953
LC
2400containing @var{text}, a string. @var{references} is a list of store items that the
2401resulting text file refers to; it defaults to the empty list.
45adbd62
LC
2402@end deffn
2403
0a90af15
LC
2404@deffn {Monadic Procedure} interned-file @var{file} [@var{name}] @
2405 [#:recursive? #t]
2406Return the name of @var{file} once interned in the store. Use
2407@var{name} as its store name, or the basename of @var{file} if
2408@var{name} is omitted.
2409
2410When @var{recursive?} is true, the contents of @var{file} are added
2411recursively; if @var{file} designates a flat file and @var{recursive?}
2412is true, its contents are added, and its permission bits are kept.
2413
2414The example below adds a file to the store, under two different names:
2415
2416@example
2417(run-with-store (open-connection)
2418 (mlet %store-monad ((a (interned-file "README"))
2419 (b (interned-file "README" "LEGU-MIN")))
2420 (return (list a b))))
2421
2422@result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
2423@end example
2424
2425@end deffn
2426
e87f0591
LC
2427The @code{(guix packages)} module exports the following package-related
2428monadic procedures:
2429
b860f382 2430@deffn {Monadic Procedure} package-file @var{package} [@var{file}] @
4231f05b
LC
2431 [#:system (%current-system)] [#:target #f] @
2432 [#:output "out"] Return as a monadic
b860f382
LC
2433value in the absolute file name of @var{file} within the @var{output}
2434directory of @var{package}. When @var{file} is omitted, return the name
4231f05b
LC
2435of the @var{output} directory of @var{package}. When @var{target} is
2436true, use it as a cross-compilation target triplet.
b860f382
LC
2437@end deffn
2438
b860f382 2439@deffn {Monadic Procedure} package->derivation @var{package} [@var{system}]
4231f05b
LC
2440@deffnx {Monadic Procedure} package->cross-derivation @var{package} @
2441 @var{target} [@var{system}]
2442Monadic version of @code{package-derivation} and
2443@code{package-cross-derivation} (@pxref{Defining Packages}).
b860f382
LC
2444@end deffn
2445
2446
21b679f6
LC
2447@node G-Expressions
2448@section G-Expressions
2449
2450@cindex G-expression
2451@cindex build code quoting
2452So we have ``derivations'', which represent a sequence of build actions
2453to be performed to produce an item in the store (@pxref{Derivations}).
2454Those build actions are performed when asking the daemon to actually
2455build the derivations; they are run by the daemon in a container
2456(@pxref{Invoking guix-daemon}).
2457
2458@cindex strata of code
2459It should come as no surprise that we like to write those build actions
2460in Scheme. When we do that, we end up with two @dfn{strata} of Scheme
2461code@footnote{The term @dfn{stratum} in this context was coined by
ef4ab0a4
LC
2462Manuel Serrano et al.@: in the context of their work on Hop. Oleg
2463Kiselyov, who has written insightful
2464@url{http://okmij.org/ftp/meta-programming/#meta-scheme, essays and code
2465on this topic}, refers to this kind of code generation as
2466@dfn{staging}.}: the ``host code''---code that defines packages, talks
2467to the daemon, etc.---and the ``build code''---code that actually
2468performs build actions, such as making directories, invoking
2469@command{make}, etc.
21b679f6
LC
2470
2471To describe a derivation and its build actions, one typically needs to
2472embed build code inside host code. It boils down to manipulating build
2473code as data, and Scheme's homoiconicity---code has a direct
2474representation as data---comes in handy for that. But we need more than
2475Scheme's normal @code{quasiquote} mechanism to construct build
2476expressions.
2477
2478The @code{(guix gexp)} module implements @dfn{G-expressions}, a form of
2479S-expressions adapted to build expressions. G-expressions, or
2480@dfn{gexps}, consist essentially in three syntactic forms: @code{gexp},
2481@code{ungexp}, and @code{ungexp-splicing} (or simply: @code{#~},
2482@code{#$}, and @code{#$@@}), which are comparable respectively to
2483@code{quasiquote}, @code{unquote}, and @code{unquote-splicing}
2484(@pxref{Expression Syntax, @code{quasiquote},, guile, GNU Guile
2485Reference Manual}). However, there are major differences:
2486
2487@itemize
2488@item
2489Gexps are meant to be written to a file and run or manipulated by other
2490processes.
2491
2492@item
b39fc6f7
LC
2493When a high-level object such as a package or derivation is unquoted
2494inside a gexp, the result is as if its output file name had been
2495introduced.
ff40e9b7 2496
21b679f6
LC
2497@item
2498Gexps carry information about the packages or derivations they refer to,
2499and these dependencies are automatically added as inputs to the build
2500processes that use them.
2501@end itemize
2502
b39fc6f7
LC
2503Actually this mechanism is not limited to package and derivation
2504objects; @dfn{compilers} able to ``lower'' other high-level objects to
2505derivations can be defined, such that these objects can also be inserted
d9ae938f
LC
2506into gexps. Another useful type of high-level object that can be
2507inserted in a gexp is @dfn{local files}, which allows files from the
2508local file system to be added to the store and referred to by
2509derivations and such (see @code{local-file} below.)
b39fc6f7 2510
21b679f6
LC
2511To illustrate the idea, here is an example of a gexp:
2512
2513@example
2514(define build-exp
2515 #~(begin
2516 (mkdir #$output)
2517 (chdir #$output)
2518 (symlink (string-append #$coreutils "/bin/ls")
2519 "list-files")))
2520@end example
2521
2522This gexp can be passed to @code{gexp->derivation}; we obtain a
2523derivation that builds a directory containing exactly one symlink to
2524@file{/gnu/store/@dots{}-coreutils-8.22/bin/ls}:
2525
2526@example
2527(gexp->derivation "the-thing" build-exp)
2528@end example
2529
e20fd1bf 2530As one would expect, the @code{"/gnu/store/@dots{}-coreutils-8.22"} string is
21b679f6
LC
2531substituted to the reference to the @var{coreutils} package in the
2532actual build code, and @var{coreutils} is automatically made an input to
2533the derivation. Likewise, @code{#$output} (equivalent to @code{(ungexp
2534output)}) is replaced by a string containing the derivation's output
667b2508
LC
2535directory name.
2536
2537@cindex cross compilation
2538In a cross-compilation context, it is useful to distinguish between
2539references to the @emph{native} build of a package---that can run on the
2540host---versus references to cross builds of a package. To that end, the
2541@code{#+} plays the same role as @code{#$}, but is a reference to a
2542native package build:
2543
2544@example
2545(gexp->derivation "vi"
2546 #~(begin
2547 (mkdir #$output)
2548 (system* (string-append #+coreutils "/bin/ln")
2549 "-s"
2550 (string-append #$emacs "/bin/emacs")
2551 (string-append #$output "/bin/vi")))
2552 #:target "mips64el-linux")
2553@end example
2554
2555@noindent
2556In the example above, the native build of @var{coreutils} is used, so
2557that @command{ln} can actually run on the host; but then the
2558cross-compiled build of @var{emacs} is referenced.
2559
2560The syntactic form to construct gexps is summarized below.
21b679f6
LC
2561
2562@deffn {Scheme Syntax} #~@var{exp}
2563@deffnx {Scheme Syntax} (gexp @var{exp})
2564Return a G-expression containing @var{exp}. @var{exp} may contain one
2565or more of the following forms:
2566
2567@table @code
2568@item #$@var{obj}
2569@itemx (ungexp @var{obj})
b39fc6f7
LC
2570Introduce a reference to @var{obj}. @var{obj} may have one of the
2571supported types, for example a package or a
21b679f6
LC
2572derivation, in which case the @code{ungexp} form is replaced by its
2573output file name---e.g., @code{"/gnu/store/@dots{}-coreutils-8.22}.
2574
b39fc6f7
LC
2575If @var{obj} is a list, it is traversed and references to supported
2576objects are substituted similarly.
21b679f6
LC
2577
2578If @var{obj} is another gexp, its contents are inserted and its
2579dependencies are added to those of the containing gexp.
2580
2581If @var{obj} is another kind of object, it is inserted as is.
2582
b39fc6f7
LC
2583@item #$@var{obj}:@var{output}
2584@itemx (ungexp @var{obj} @var{output})
21b679f6 2585This is like the form above, but referring explicitly to the
b39fc6f7
LC
2586@var{output} of @var{obj}---this is useful when @var{obj} produces
2587multiple outputs (@pxref{Packages with Multiple Outputs}).
21b679f6 2588
667b2508
LC
2589@item #+@var{obj}
2590@itemx #+@var{obj}:output
2591@itemx (ungexp-native @var{obj})
2592@itemx (ungexp-native @var{obj} @var{output})
2593Same as @code{ungexp}, but produces a reference to the @emph{native}
2594build of @var{obj} when used in a cross compilation context.
2595
21b679f6
LC
2596@item #$output[:@var{output}]
2597@itemx (ungexp output [@var{output}])
2598Insert a reference to derivation output @var{output}, or to the main
2599output when @var{output} is omitted.
2600
2601This only makes sense for gexps passed to @code{gexp->derivation}.
2602
2603@item #$@@@var{lst}
2604@itemx (ungexp-splicing @var{lst})
2605Like the above, but splices the contents of @var{lst} inside the
2606containing list.
2607
667b2508
LC
2608@item #+@@@var{lst}
2609@itemx (ungexp-native-splicing @var{lst})
2610Like the above, but refers to native builds of the objects listed in
2611@var{lst}.
2612
21b679f6
LC
2613@end table
2614
2615G-expressions created by @code{gexp} or @code{#~} are run-time objects
2616of the @code{gexp?} type (see below.)
2617@end deffn
2618
2619@deffn {Scheme Procedure} gexp? @var{obj}
2620Return @code{#t} if @var{obj} is a G-expression.
2621@end deffn
2622
2623G-expressions are meant to be written to disk, either as code building
2624some derivation, or as plain files in the store. The monadic procedures
2625below allow you to do that (@pxref{The Store Monad}, for more
2626information about monads.)
2627
2628@deffn {Monadic Procedure} gexp->derivation @var{name} @var{exp} @
ce45eb4c 2629 [#:system (%current-system)] [#:target #f] [#:graft? #t] @
21b679f6
LC
2630 [#:hash #f] [#:hash-algo #f] @
2631 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
4684f301 2632 [#:module-path @var{%load-path}] @
c8351d9a
LC
2633 [#:references-graphs #f] [#:allowed-references #f] @
2634 [#:local-build? #f] [#:guile-for-build #f]
21b679f6 2635Return a derivation @var{name} that runs @var{exp} (a gexp) with
68a61e9f
LC
2636@var{guile-for-build} (a derivation) on @var{system}. When @var{target}
2637is true, it is used as the cross-compilation target triplet for packages
2638referred to by @var{exp}.
21b679f6 2639
ce45eb4c
LC
2640Make @var{modules} available in the evaluation context of @var{exp};
2641@var{modules} is a list of names of Guile modules searched in
2642@var{module-path} to be copied in the store, compiled, and made available in
21b679f6
LC
2643the load path during the execution of @var{exp}---e.g., @code{((guix
2644build utils) (guix build gnu-build-system))}.
2645
ce45eb4c
LC
2646@var{graft?} determines whether packages referred to by @var{exp} should be grafted when
2647applicable.
2648
b53833b2
LC
2649When @var{references-graphs} is true, it must be a list of tuples of one of the
2650following forms:
2651
2652@example
2653(@var{file-name} @var{package})
2654(@var{file-name} @var{package} @var{output})
2655(@var{file-name} @var{derivation})
2656(@var{file-name} @var{derivation} @var{output})
2657(@var{file-name} @var{store-item})
2658@end example
2659
2660The right-hand-side of each element of @var{references-graphs} is automatically made
2661an input of the build process of @var{exp}. In the build environment, each
2662@var{file-name} contains the reference graph of the corresponding item, in a simple
2663text format.
2664
c8351d9a
LC
2665@var{allowed-references} must be either @code{#f} or a list of output names and packages.
2666In the latter case, the list denotes store items that the result is allowed to
2667refer to. Any reference to another store item will lead to a build error.
2668
e20fd1bf 2669The other arguments are as for @code{derivation} (@pxref{Derivations}).
21b679f6
LC
2670@end deffn
2671
d9ae938f
LC
2672@deffn {Scheme Procedure} local-file @var{file} [@var{name}] @
2673 [#:recursive? #t]
2674Return an object representing local file @var{file} to add to the store; this
2675object can be used in a gexp. @var{file} will be added to the store under @var{name}--by
2676default the base name of @var{file}.
2677
2678When @var{recursive?} is true, the contents of @var{file} are added recursively; if @var{file}
2679designates a flat file and @var{recursive?} is true, its contents are added, and its
2680permission bits are kept.
2681
2682This is the declarative counterpart of the @code{interned-file} monadic
2683procedure (@pxref{The Store Monad, @code{interned-file}}).
2684@end deffn
2685
21b679f6
LC
2686@deffn {Monadic Procedure} gexp->script @var{name} @var{exp}
2687Return an executable script @var{name} that runs @var{exp} using
2688@var{guile} with @var{modules} in its search path.
2689
2690The example below builds a script that simply invokes the @command{ls}
2691command:
2692
2693@example
2694(use-modules (guix gexp) (gnu packages base))
2695
2696(gexp->script "list-files"
2697 #~(execl (string-append #$coreutils "/bin/ls")
2698 "ls"))
2699@end example
2700
2701When ``running'' it through the store (@pxref{The Store Monad,
e20fd1bf 2702@code{run-with-store}}), we obtain a derivation that produces an
21b679f6
LC
2703executable file @file{/gnu/store/@dots{}-list-files} along these lines:
2704
2705@example
2706#!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
2707!#
2708(execl (string-append "/gnu/store/@dots{}-coreutils-8.22"/bin/ls")
2709 "ls")
2710@end example
2711@end deffn
2712
2713@deffn {Monadic Procedure} gexp->file @var{name} @var{exp}
2714Return a derivation that builds a file @var{name} containing @var{exp}.
2715
2716The resulting file holds references to all the dependencies of @var{exp}
2717or a subset thereof.
2718@end deffn
1ed19464
LC
2719
2720@deffn {Monadic Procedure} text-file* @var{name} @var{text} @dots{}
2721Return as a monadic value a derivation that builds a text file
2722containing all of @var{text}. @var{text} may list, in addition to
d9ae938f
LC
2723strings, objects of any type that can be used in a gexp: packages,
2724derivations, local file objects, etc. The resulting store file holds
2725references to all these.
1ed19464
LC
2726
2727This variant should be preferred over @code{text-file} anytime the file
2728to create will reference items from the store. This is typically the
2729case when building a configuration file that embeds store file names,
2730like this:
2731
2732@example
2733(define (profile.sh)
2734 ;; Return the name of a shell script in the store that
2735 ;; initializes the 'PATH' environment variable.
2736 (text-file* "profile.sh"
2737 "export PATH=" coreutils "/bin:"
2738 grep "/bin:" sed "/bin\n"))
2739@end example
2740
2741In this example, the resulting @file{/gnu/store/@dots{}-profile.sh} file
2742will references @var{coreutils}, @var{grep}, and @var{sed}, thereby
2743preventing them from being garbage-collected during its lifetime.
2744@end deffn
21b679f6
LC
2745
2746Of course, in addition to gexps embedded in ``host'' code, there are
2747also modules containing build tools. To make it clear that they are
2748meant to be used in the build stratum, these modules are kept in the
2749@code{(guix build @dots{})} name space.
2750
2751
568717fd
LC
2752@c *********************************************************************
2753@node Utilities
2754@chapter Utilities
2755
210cc920
LC
2756This section describes tools primarily targeted at developers and users
2757who write new package definitions. They complement the Scheme
2758programming interface of Guix in a convenient way.
2759
568717fd 2760@menu
37166310 2761* Invoking guix build:: Building packages from the command line.
210cc920 2762* Invoking guix download:: Downloading a file and printing its hash.
37166310 2763* Invoking guix hash:: Computing the cryptographic hash of a file.
2f7d2d91 2764* Invoking guix import:: Importing package definitions.
37166310 2765* Invoking guix refresh:: Updating package definitions.
b4f5e0e8 2766* Invoking guix lint:: Finding errors in package definitions.
372c4bbc 2767* Invoking guix environment:: Setting up development environments.
568717fd
LC
2768@end menu
2769
e49951eb
MW
2770@node Invoking guix build
2771@section Invoking @command{guix build}
568717fd 2772
e49951eb 2773The @command{guix build} command builds packages or derivations and
6798a8e4
LC
2774their dependencies, and prints the resulting store paths. Note that it
2775does not modify the user's profile---this is the job of the
e49951eb 2776@command{guix package} command (@pxref{Invoking guix package}). Thus,
6798a8e4
LC
2777it is mainly useful for distribution developers.
2778
2779The general syntax is:
c78bd12b
LC
2780
2781@example
e49951eb 2782guix build @var{options} @var{package-or-derivation}@dots{}
c78bd12b
LC
2783@end example
2784
2785@var{package-or-derivation} may be either the name of a package found in
5401dd75
LC
2786the software distribution such as @code{coreutils} or
2787@code{coreutils-8.20}, or a derivation such as
834129e0 2788@file{/gnu/store/@dots{}-coreutils-8.19.drv}. In the former case, a
e7f34eb0
LC
2789package with the corresponding name (and optionally version) is searched
2790for among the GNU distribution modules (@pxref{Package Modules}).
2791
2792Alternatively, the @code{--expression} option may be used to specify a
2793Scheme expression that evaluates to a package; this is useful when
2794disambiguation among several same-named packages or package variants is
2795needed.
c78bd12b
LC
2796
2797The @var{options} may be zero or more of the following:
2798
2799@table @code
2800
2801@item --expression=@var{expr}
2802@itemx -e @var{expr}
ac5de156 2803Build the package or derivation @var{expr} evaluates to.
c78bd12b 2804
5401dd75 2805For example, @var{expr} may be @code{(@@ (gnu packages guile)
c78bd12b
LC
2806guile-1.8)}, which unambiguously designates this specific variant of
2807version 1.8 of Guile.
2808
56b82106
LC
2809Alternately, @var{expr} may be a G-expression, in which case it is used
2810as a build program passed to @code{gexp->derivation}
2811(@pxref{G-Expressions}).
2812
2813Lastly, @var{expr} may refer to a zero-argument monadic procedure
ac5de156
LC
2814(@pxref{The Store Monad}). The procedure must return a derivation as a
2815monadic value, which is then passed through @code{run-with-store}.
2816
c78bd12b
LC
2817@item --source
2818@itemx -S
2819Build the packages' source derivations, rather than the packages
2820themselves.
2821
e49951eb 2822For instance, @code{guix build -S gcc} returns something like
834129e0 2823@file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, which is GCC's source tarball.
c78bd12b 2824
f9cc8971
LC
2825The returned source tarball is the result of applying any patches and
2826code snippets specified in the package's @code{origin} (@pxref{Defining
2827Packages}).
2828
c78bd12b
LC
2829@item --system=@var{system}
2830@itemx -s @var{system}
2831Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
2832the host's system type.
2833
2834An example use of this is on Linux-based systems, which can emulate
2835different personalities. For instance, passing
2836@code{--system=i686-linux} on an @code{x86_64-linux} system allows users
2837to build packages in a complete 32-bit environment.
2838
e55ec43d
LC
2839@item --target=@var{triplet}
2840@cindex cross-compilation
2841Cross-build for @var{triplet}, which must be a valid GNU triplet, such
2842as @code{"mips64el-linux-gnu"} (@pxref{Configuration Names, GNU
2843configuration triplets,, configure, GNU Configure and Build System}).
2844
7f3673f2
LC
2845@item --with-source=@var{source}
2846Use @var{source} as the source of the corresponding package.
2847@var{source} must be a file name or a URL, as for @command{guix
2848download} (@pxref{Invoking guix download}).
2849
2850The ``corresponding package'' is taken to be one specified on the
2851command line whose name matches the base of @var{source}---e.g., if
2852@var{source} is @code{/src/guile-2.0.10.tar.gz}, the corresponding
2853package is @code{guile}. Likewise, the version string is inferred from
2854@var{source}; in the previous example, it's @code{2.0.10}.
2855
2856This option allows users to try out versions of packages other than the
2857one provided by the distribution. The example below downloads
2858@file{ed-1.7.tar.gz} from a GNU mirror and uses that as the source for
2859the @code{ed} package:
2860
2861@example
2862guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
2863@end example
2864
2865As a developer, @code{--with-source} makes it easy to test release
2866candidates:
2867
2868@example
2869guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
2870@end example
2871
05962f29
LC
2872@item --no-grafts
2873Do not ``graft'' packages. In practice, this means that package updates
2874available as grafts are not applied. @xref{Security Updates}, for more
2875information on grafts.
7f3673f2 2876
c78bd12b
LC
2877@item --derivations
2878@itemx -d
2879Return the derivation paths, not the output paths, of the given
2880packages.
2881
70ee5642
LC
2882@item --root=@var{file}
2883@itemx -r @var{file}
2884Make @var{file} a symlink to the result, and register it as a garbage
2885collector root.
2886
2887@item --log-file
2888Return the build log file names for the given
2889@var{package-or-derivation}s, or raise an error if build logs are
2890missing.
2891
2892This works regardless of how packages or derivations are specified. For
2893instance, the following invocations are equivalent:
2894
2895@example
2896guix build --log-file `guix build -d guile`
2897guix build --log-file `guix build guile`
2898guix build --log-file guile
2899guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
2900@end example
2901
2902
2903@end table
2904
2905@cindex common build options
2906In addition, a number of options that control the build process are
2907common to @command{guix build} and other commands that can spawn builds,
2908such as @command{guix package} or @command{guix archive}. These are the
2909following:
2910
2911@table @code
2912
300868ba
LC
2913@item --load-path=@var{directory}
2914@itemx -L @var{directory}
2915Add @var{directory} to the front of the package module search path
2916(@pxref{Package Modules}).
2917
2918This allows users to define their own packages and make them visible to
2919the command-line tools.
2920
c78bd12b
LC
2921@item --keep-failed
2922@itemx -K
2923Keep the build tree of failed builds. Thus, if a build fail, its build
2924tree is kept under @file{/tmp}, in a directory whose name is shown at
2925the end of the build log. This is useful when debugging build issues.
2926
2927@item --dry-run
2928@itemx -n
2929Do not build the derivations.
2930
56b1f4b7
LC
2931@item --fallback
2932When substituting a pre-built binary fails, fall back to building
2933packages locally.
2934
c78bd12b 2935@item --no-substitutes
b5385b52 2936Do not use substitutes for build products. That is, always build things
c4202d60
LC
2937locally instead of allowing downloads of pre-built binaries
2938(@pxref{Substitutes}).
c78bd12b 2939
425b0bfc 2940@item --no-build-hook
4ec2e92d
LC
2941Do not attempt to offload builds @i{via} the daemon's ``build hook''
2942(@pxref{Daemon Offload Setup}). That is, always build things locally
2943instead of offloading builds to remote machines.
425b0bfc 2944
969e678e
LC
2945@item --max-silent-time=@var{seconds}
2946When the build or substitution process remains silent for more than
2947@var{seconds}, terminate it and report a build failure.
2948
002622b6
LC
2949@item --timeout=@var{seconds}
2950Likewise, when the build or substitution process lasts for more than
2951@var{seconds}, terminate it and report a build failure.
2952
2953By default there is no timeout. This behavior can be restored with
2954@code{--timeout=0}.
2955
07ab4bf1
LC
2956@item --verbosity=@var{level}
2957Use the given verbosity level. @var{level} must be an integer between 0
2958and 5; higher means more verbose output. Setting a level of 4 or more
2959may be helpful when debugging setup issues with the build daemon.
2960
70ee5642
LC
2961@item --cores=@var{n}
2962@itemx -c @var{n}
2963Allow the use of up to @var{n} CPU cores for the build. The special
2964value @code{0} means to use as many CPU cores as available.
bf421152 2965
f6526eb3
LC
2966@item --max-jobs=@var{n}
2967@itemx -M @var{n}
2968Allow at most @var{n} build jobs in parallel. @xref{Invoking
2969guix-daemon, @code{--max-jobs}}, for details about this option and the
2970equivalent @command{guix-daemon} option.
2971
c78bd12b
LC
2972@end table
2973
e49951eb 2974Behind the scenes, @command{guix build} is essentially an interface to
c78bd12b
LC
2975the @code{package-derivation} procedure of the @code{(guix packages)}
2976module, and to the @code{build-derivations} procedure of the @code{(guix
01d8ac64 2977derivations)} module.
c78bd12b 2978
16eb115e
DP
2979In addition to options explicitly passed on the command line,
2980@command{guix build} and other @command{guix} commands that support
2981building honor the @code{GUIX_BUILD_OPTIONS} environment variable.
2982
2983@defvr {Environment Variable} GUIX_BUILD_OPTIONS
2984Users can define this variable to a list of command line options that
2985will automatically be used by @command{guix build} and other
2986@command{guix} commands that can perform builds, as in the example
2987below:
2988
2989@example
2990$ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
2991@end example
2992
847391fe
DP
2993These options are parsed independently, and the result is appended to
2994the parsed command-line options.
16eb115e
DP
2995@end defvr
2996
2997
210cc920
LC
2998@node Invoking guix download
2999@section Invoking @command{guix download}
3000
3001When writing a package definition, developers typically need to download
3002the package's source tarball, compute its SHA256 hash, and write that
3003hash in the package definition (@pxref{Defining Packages}). The
3004@command{guix download} tool helps with this task: it downloads a file
3005from the given URI, adds it to the store, and prints both its file name
3006in the store and its SHA256 hash.
3007
3008The fact that the downloaded file is added to the store saves bandwidth:
3009when the developer eventually tries to build the newly defined package
3010with @command{guix build}, the source tarball will not have to be
3011downloaded again because it is already in the store. It is also a
3012convenient way to temporarily stash files, which may be deleted
3013eventually (@pxref{Invoking guix gc}).
3014
3015The @command{guix download} command supports the same URIs as used in
3016package definitions. In particular, it supports @code{mirror://} URIs.
3017@code{https} URIs (HTTP over TLS) are supported @emph{provided} the
3018Guile bindings for GnuTLS are available in the user's environment; when
537c8bb3
LC
3019they are not available, an error is raised. @xref{Guile Preparations,
3020how to install the GnuTLS bindings for Guile,, gnutls-guile,
3021GnuTLS-Guile}, for more information.
210cc920
LC
3022
3023The following option is available:
3024
3025@table @code
3026@item --format=@var{fmt}
3027@itemx -f @var{fmt}
3028Write the hash in the format specified by @var{fmt}. For more
081145cf 3029information on the valid values for @var{fmt}, @pxref{Invoking guix hash}.
210cc920
LC
3030@end table
3031
6c365eca
NK
3032@node Invoking guix hash
3033@section Invoking @command{guix hash}
3034
210cc920 3035The @command{guix hash} command computes the SHA256 hash of a file.
6c365eca
NK
3036It is primarily a convenience tool for anyone contributing to the
3037distribution: it computes the cryptographic hash of a file, which can be
3038used in the definition of a package (@pxref{Defining Packages}).
3039
3040The general syntax is:
3041
3042@example
3043guix hash @var{option} @var{file}
3044@end example
3045
3046@command{guix hash} has the following option:
3047
3048@table @code
3049
3050@item --format=@var{fmt}
3051@itemx -f @var{fmt}
210cc920 3052Write the hash in the format specified by @var{fmt}.
6c365eca
NK
3053
3054Supported formats: @code{nix-base32}, @code{base32}, @code{base16}
3055(@code{hex} and @code{hexadecimal} can be used as well).
3056
3057If the @option{--format} option is not specified, @command{guix hash}
3058will output the hash in @code{nix-base32}. This representation is used
3059in the definitions of packages.
3060
3140f2df
LC
3061@item --recursive
3062@itemx -r
3063Compute the hash on @var{file} recursively.
3064
3065In this case, the hash is computed on an archive containing @var{file},
3066including its children if it is a directory. Some of @var{file}'s
3067meta-data is part of the archive; for instance, when @var{file} is a
3068regular file, the hash is different depending on whether @var{file} is
3069executable or not. Meta-data such as time stamps has no impact on the
3070hash (@pxref{Invoking guix archive}).
3071@c FIXME: Replace xref above with xref to an ``Archive'' section when
3072@c it exists.
3073
6c365eca
NK
3074@end table
3075
2f7d2d91
LC
3076@node Invoking guix import
3077@section Invoking @command{guix import}
3078
3079@cindex importing packages
3080@cindex package import
3081@cindex package conversion
3082The @command{guix import} command is useful for people willing to add a
3083package to the distribution but who'd rather do as little work as
3084possible to get there---a legitimate demand. The command knows of a few
3085repositories from which it can ``import'' package meta-data. The result
3086is a package definition, or a template thereof, in the format we know
3087(@pxref{Defining Packages}).
3088
3089The general syntax is:
3090
3091@example
3092guix import @var{importer} @var{options}@dots{}
3093@end example
3094
3095@var{importer} specifies the source from which to import package
3096meta-data, and @var{options} specifies a package identifier and other
3097options specific to @var{importer}. Currently, the available
3098``importers'' are:
3099
3100@table @code
3101@item gnu
3102Import meta-data for the given GNU package. This provides a template
3103for the latest version of that GNU package, including the hash of its
3104source tarball, and its canonical synopsis and description.
3105
3106Additional information such as the package's dependencies and its
3107license needs to be figured out manually.
3108
3109For example, the following command returns a package definition for
3110GNU@tie{}Hello:
3111
3112@example
3113guix import gnu hello
3114@end example
3115
3116Specific command-line options are:
3117
3118@table @code
3119@item --key-download=@var{policy}
3120As for @code{guix refresh}, specify the policy to handle missing OpenPGP
3121keys when verifying the package's signature. @xref{Invoking guix
3122refresh, @code{--key-download}}.
3123@end table
3124
3125@item pypi
3126@cindex pypi
3127Import meta-data from the @uref{https://pypi.python.org/, Python Package
3128Index}@footnote{This functionality requires Guile-JSON to be installed.
3129@xref{Requirements}.}. Information is taken from the JSON-formatted
3130description available at @code{pypi.python.org} and usually includes all
3131the relevant information, including package dependencies.
3132
3133The command below imports meta-data for the @code{itsdangerous} Python
3134package:
3135
3136@example
3137guix import pypi itsdangerous
3138@end example
3139
d45dc6da
EB
3140@item cpan
3141@cindex CPAN
3142Import meta-data from @uref{https://www.metacpan.org/, MetaCPAN}.
3143Information is taken from the JSON-formatted meta-data provided through
3144@uref{https://api.metacpan.org/, MetaCPAN's API} and includes most
66392e47
EB
3145relevant information, such as module dependencies. License information
3146should be checked closely. If Perl is available in the store, then the
3147@code{corelist} utility will be used to filter core modules out of the
3148list of dependencies.
d45dc6da
EB
3149
3150The command command below imports meta-data for the @code{Acme::Boolean}
3151Perl module:
3152
3153@example
3154guix import cpan Acme::Boolean
3155@end example
3156
2f7d2d91
LC
3157@item nix
3158Import meta-data from a local copy of the source of the
3159@uref{http://nixos.org/nixpkgs/, Nixpkgs distribution}@footnote{This
3160relies on the @command{nix-instantiate} command of
3161@uref{http://nixos.org/nix/, Nix}.}. Package definitions in Nixpkgs are
3162typically written in a mixture of Nix-language and Bash code. This
3163command only imports the high-level package structure that is written in
3164the Nix language. It normally includes all the basic fields of a
3165package definition.
3166
3167When importing a GNU package, the synopsis and descriptions are replaced
3168by their canonical upstream variant.
3169
3170As an example, the command below imports the package definition of
3171LibreOffice (more precisely, it imports the definition of the package
3172bound to the @code{libreoffice} top-level attribute):
3173
3174@example
3175guix import nix ~/path/to/nixpkgs libreoffice
3176@end example
3177@end table
3178
3179The structure of the @command{guix import} code is modular. It would be
3180useful to have more importers for other package formats, and your help
3181is welcome here (@pxref{Contributing}).
3182
37166310
LC
3183@node Invoking guix refresh
3184@section Invoking @command{guix refresh}
3185
3186The primary audience of the @command{guix refresh} command is developers
3187of the GNU software distribution. By default, it reports any packages
3188provided by the distribution that are outdated compared to the latest
3189upstream version, like this:
3190
3191@example
3192$ guix refresh
3193gnu/packages/gettext.scm:29:13: gettext would be upgraded from 0.18.1.1 to 0.18.2.1
3194gnu/packages/glib.scm:77:12: glib would be upgraded from 2.34.3 to 2.37.0
3195@end example
3196
3197It does so by browsing each package's FTP directory and determining the
3198highest version number of the source tarballs
3199therein@footnote{Currently, this only works for GNU packages.}.
3200
3201When passed @code{--update}, it modifies distribution source files to
3202update the version numbers and source tarball hashes of those packages'
3203recipes (@pxref{Defining Packages}). This is achieved by downloading
3204each package's latest source tarball and its associated OpenPGP
3205signature, authenticating the downloaded tarball against its signature
3206using @command{gpg}, and finally computing its hash. When the public
3207key used to sign the tarball is missing from the user's keyring, an
3208attempt is made to automatically retrieve it from a public key server;
3209when it's successful, the key is added to the user's keyring; otherwise,
3210@command{guix refresh} reports an error.
3211
3212The following options are supported:
3213
3214@table @code
3215
3216@item --update
3217@itemx -u
3218Update distribution source files (package recipes) in place.
081145cf 3219@xref{Defining Packages}, for more information on package definitions.
37166310
LC
3220
3221@item --select=[@var{subset}]
3222@itemx -s @var{subset}
3223Select all the packages in @var{subset}, one of @code{core} or
3224@code{non-core}.
3225
3226The @code{core} subset refers to all the packages at the core of the
3227distribution---i.e., packages that are used to build ``everything
3228else''. This includes GCC, libc, Binutils, Bash, etc. Usually,
3229changing one of these packages in the distribution entails a rebuild of
3230all the others. Thus, such updates are an inconvenience to users in
3231terms of build time or bandwidth used to achieve the upgrade.
3232
3233The @code{non-core} subset refers to the remaining packages. It is
3234typically useful in cases where an update of the core packages would be
3235inconvenient.
3236
3237@end table
3238
3239In addition, @command{guix refresh} can be passed one or more package
3240names, as in this example:
3241
3242@example
3243guix refresh -u emacs idutils
3244@end example
3245
3246@noindent
3247The command above specifically updates the @code{emacs} and
3248@code{idutils} packages. The @code{--select} option would have no
3249effect in this case.
3250
7d193ec3
EB
3251When considering whether to upgrade a package, it is sometimes
3252convenient to know which packages would be affected by the upgrade and
3253should be checked for compatibility. For this the following option may
3254be used when passing @command{guix refresh} one or more package names:
3255
3256@table @code
3257
3258@item --list-dependent
3259@itemx -l
3260List top-level dependent packages that would need to be rebuilt as a
3261result of upgrading one or more packages.
3262
3263@end table
3264
3265Be aware that the @code{--list-dependent} option only
3266@emph{approximates} the rebuilds that would be required as a result of
3267an upgrade. More rebuilds might be required under some circumstances.
3268
3269@example
7779ab61
LC
3270$ guix refresh --list-dependent flex
3271Building the following 120 packages would ensure 213 dependent packages are rebuilt:
3272hop-2.4.0 geiser-0.4 notmuch-0.18 mu-0.9.9.5 cflow-1.4 idutils-4.6 @dots{}
7d193ec3
EB
3273@end example
3274
3275The command above lists a set of packages that could be built to check
3276for compatibility with an upgraded @code{flex} package.
3277
f9230085
LC
3278The following options can be used to customize GnuPG operation:
3279
3280@table @code
3281
f9230085
LC
3282@item --gpg=@var{command}
3283Use @var{command} as the GnuPG 2.x command. @var{command} is searched
3284for in @code{$PATH}.
3285
2bc53ba9
LC
3286@item --key-download=@var{policy}
3287Handle missing OpenPGP keys according to @var{policy}, which may be one
3288of:
3289
3290@table @code
3291@item always
3292Always download missing OpenPGP keys from the key server, and add them
3293to the user's GnuPG keyring.
3294
3295@item never
3296Never try to download missing OpenPGP keys. Instead just bail out.
3297
3298@item interactive
3299When a package signed with an unknown OpenPGP key is encountered, ask
3300the user whether to download it or not. This is the default behavior.
3301@end table
3302
3303@item --key-server=@var{host}
3304Use @var{host} as the OpenPGP key server when importing a public key.
3305
f9230085
LC
3306@end table
3307
b4f5e0e8
CR
3308@node Invoking guix lint
3309@section Invoking @command{guix lint}
3310The @command{guix lint} is meant to help package developers avoid common
873c4085
LC
3311errors and use a consistent style. It runs a number of checks on a
3312given set of packages in order to find common mistakes in their
3313definitions. Available @dfn{checkers} include (see
3314@code{--list-checkers} for a complete list):
3315
3316@table @code
3317@item synopsis
3318@itemx description
3319Validate certain typographical and stylistic rules about package
3320descriptions and synopses.
3321
3322@item inputs-should-be-native
3323Identify inputs that should most likely be native inputs.
3324
3325@item source
3326@itemx home-page
3327Probe @code{home-page} and @code{source} URLs and report those that are
3328invalid.
3329@end table
b4f5e0e8
CR
3330
3331The general syntax is:
3332
3333@example
3334guix lint @var{options} @var{package}@dots{}
3335@end example
3336
3337If no package is given on the command line, then all packages are checked.
3338The @var{options} may be zero or more of the following:
3339
3340@table @code
3341
dd7c013d
CR
3342@item --checkers
3343@itemx -c
3344Only enable the checkers specified in a comma-separated list using the
3345names returned by @code{--list-checkers}.
3346
b4f5e0e8
CR
3347@item --list-checkers
3348@itemx -l
3349List and describe all the available checkers that will be run on packages
3350and exit.
3351
3352@end table
37166310 3353
372c4bbc
DT
3354@node Invoking guix environment
3355@section Invoking @command{guix environment}
3356
f5fd4fd2 3357@cindex reproducible build environments
372c4bbc
DT
3358The purpose of @command{guix environment} is to assist hackers in
3359creating reproducible development environments without polluting their
3360package profile. The @command{guix environment} tool takes one or more
3361packages, builds all of the necessary inputs, and creates a shell
3362environment to use them.
3363
3364The general syntax is:
3365
3366@example
3367guix environment @var{options} @var{package}@dots{}
3368@end example
3369
3370The following examples spawns a new shell that is capable of building
3371the GNU Guile source code:
3372
3373@example
3374guix environment guile
3375@end example
3376
3377If the specified packages are not built yet, @command{guix environment}
3378automatically builds them. The new shell's environment is an augmented
3379version of the environment that @command{guix environment} was run in.
3380It contains the necessary search paths for building the given package
3381added to the existing environment variables. To create a ``pure''
3382environment in which the original environment variables have been unset,
3383use the @code{--pure} option.
3384
3385Additionally, more than one package may be specified, in which case the
3386union of the inputs for the given packages are used. For example, the
3387command below spawns a shell where all of the dependencies of both Guile
3388and Emacs are available:
3389
3390@example
3391guix environment guile emacs
3392@end example
3393
3394Sometimes an interactive shell session is not desired. The
3395@code{--exec} option can be used to specify the command to run instead.
3396
3397@example
3398guix environment guile --exec=make
3399@end example
3400
3401The following options are available:
3402
3403@table @code
3404@item --expression=@var{expr}
3405@itemx -e @var{expr}
3406Create an environment for the package that @var{expr} evaluates to.
3407
3408@item --load=@var{file}
3409@itemx -l @var{file}
3410Create an environment for the package that the code within @var{file}
3411evaluates to.
3412
3413@item --exec=@var{command}
3414@item -E @var{command}
3415Execute @var{command} in the new environment.
3416
3417@item --pure
3418Unset existing environment variables when building the new environment.
3419This has the effect of creating an environment in which search paths
3420only contain package inputs.
3421
3422@item --search-paths
3423Display the environment variable definitions that make up the
3424environment.
3425@end table
3426
3427It also supports all of the common build options that @command{guix
3428build} supports (@pxref{Invoking guix build, common build options}).
3429
a1ba8475
LC
3430@c *********************************************************************
3431@node GNU Distribution
3432@chapter GNU Distribution
3433
3ca2731c
LC
3434@cindex Guix System Distribution
3435@cindex GSD
3436Guix comes with a distribution of the GNU system consisting entirely of
3437free software@footnote{The term ``free'' here refers to the
a1ba8475 3438@url{http://www.gnu.org/philosophy/free-sw.html,freedom provided to
3ca2731c 3439users of that software}.}. The
35ed9306
LC
3440distribution can be installed on its own (@pxref{System Installation}),
3441but it is also possible to install Guix as a package manager on top of
3442an installed GNU/Linux system (@pxref{Installation}). To distinguish
3ca2731c
LC
3443between the two, we refer to the standalone distribution as the Guix
3444System Distribution, or GNU@tie{}GSD.
35ed9306
LC
3445
3446The distribution provides core GNU packages such as GNU libc, GCC, and
3447Binutils, as well as many GNU and non-GNU applications. The complete
3448list of available packages can be browsed
d03bb653
LC
3449@url{http://www.gnu.org/software/guix/package-list.html,on-line} or by
3450running @command{guix package} (@pxref{Invoking guix package}):
a1ba8475
LC
3451
3452@example
e49951eb 3453guix package --list-available
a1ba8475
LC
3454@end example
3455
35ed9306 3456Our goal has been to provide a practical 100% free software distribution of
401c53c4
LC
3457Linux-based and other variants of GNU, with a focus on the promotion and
3458tight integration of GNU components, and an emphasis on programs and
3459tools that help users exert that freedom.
3460
3ca2731c 3461Packages are currently available on the following platforms:
c320011d
LC
3462
3463@table @code
3464
3465@item x86_64-linux
3466Intel/AMD @code{x86_64} architecture, Linux-Libre kernel;
3467
3468@item i686-linux
3469Intel 32-bit architecture (IA32), Linux-Libre kernel;
3470
aa1e1947
MW
3471@item armhf-linux
3472ARMv7-A architecture with hard float, Thumb-2 and VFP3D16 coprocessor,
3473using the EABI hard-float ABI, and Linux-Libre kernel.
3474
c320011d
LC
3475@item mips64el-linux
3476little-endian 64-bit MIPS processors, specifically the Loongson series,
3477n32 application binary interface (ABI), and Linux-Libre kernel.
3478
3479@end table
3480
3ca2731c
LC
3481GSD itself is currently only available on @code{i686} and @code{x86_64}.
3482
c320011d
LC
3483@noindent
3484For information on porting to other architectures or kernels,
3485@xref{Porting}.
3486
401c53c4 3487@menu
5af6de3e 3488* System Installation:: Installing the whole operating system.
35ed9306 3489* System Configuration:: Configuring the operating system.
91ef73d4 3490* Installing Debugging Files:: Feeding the debugger.
05962f29 3491* Security Updates:: Deploying security fixes quickly.
401c53c4 3492* Package Modules:: Packages from the programmer's viewpoint.
da7cabd4 3493* Packaging Guidelines:: Growing the distribution.
401c53c4 3494* Bootstrapping:: GNU/Linux built from scratch.
8b315a6d 3495* Porting:: Targeting another platform or kernel.
401c53c4
LC
3496@end menu
3497
3498Building this distribution is a cooperative effort, and you are invited
081145cf 3499to join! @xref{Contributing}, for information about how you can help.
401c53c4 3500
5af6de3e
LC
3501@node System Installation
3502@section System Installation
3503
3ca2731c
LC
3504@cindex Guix System Distribution
3505This section explains how to install the Guix System Distribution
3506on a machine. The Guix package manager can
35ed9306
LC
3507also be installed on top of a running GNU/Linux system,
3508@pxref{Installation}.
5af6de3e
LC
3509
3510@ifinfo
3511@c This paragraph is for people reading this from tty2 of the
3512@c installation image.
3513You're reading this documentation with an Info reader. For details on
3514how to use it, hit the @key{RET} key (``return'' or ``enter'') on the
6621cdb6 3515link that follows: @pxref{Help,,, info, Info: An Introduction}. Hit
5af6de3e
LC
3516@kbd{l} afterwards to come back here.
3517@end ifinfo
3518
8aaaae38
LC
3519@subsection Limitations
3520
3ca2731c
LC
3521As of version @value{VERSION}, the Guix System Distribution (GSD) is
3522not production-ready. It may contain bugs and lack important
8aaaae38
LC
3523features. Thus, if you are looking for a stable production system that
3524respects your freedom as a computer user, a good solution at this point
3525is to consider @url{http://www.gnu.org/distros/free-distros.html, one of
3526more established GNU/Linux distributions}. We hope you can soon switch
3ca2731c 3527to the GSD without fear, of course. In the meantime, you can
8aaaae38
LC
3528also keep using your distribution and try out the package manager on top
3529of it (@pxref{Installation}).
3530
3531Before you proceed with the installation, be aware of the following
3532noteworthy limitations applicable to version @value{VERSION}:
3533
3534@itemize
3535@item
3536The installation process does not include a graphical user interface and
3537requires familiarity with GNU/Linux (see the following subsections to
3538get a feel of what that means.)
3539
3540@item
b1e95eca
LC
3541The system does not yet provide GNOME and KDE; it provides Xfce, though,
3542if graphical desktop environments are your thing.
8aaaae38
LC
3543
3544@item
dbcb0ab1 3545Support for the Logical Volume Manager (LVM) is missing.
8aaaae38
LC
3546
3547@item
3548Few system services are currently supported out-of-the-box
3549(@pxref{Services}).
3550
3551@item
b1e95eca 3552On the order of 1,200 packages are available, which means that you may
8aaaae38
LC
3553occasionally find that a useful package is missing.
3554@end itemize
3555
3556You've been warned. But more than a disclaimer, this is an invitation
3557to report issues (and success stories!), and join us in improving it.
3558@xref{Contributing}, for more info.
5af6de3e
LC
3559
3560@subsection USB Stick Installation
3561
3562An installation image for USB sticks can be downloaded from
ab3872de 3563@code{ftp://alpha.gnu.org/gnu/guix/gsd-usb-install-@value{VERSION}.@var{system}.xz},
5af6de3e
LC
3564where @var{system} is one of:
3565
3566@table @code
3567@item x86_64-linux
3568for a GNU/Linux system on Intel/AMD-compatible 64-bit CPUs;
3569
3570@item i686-linux
3571for a 32-bit GNU/Linux system on Intel-compatible CPUs.
3572@end table
3573
3574This image contains a single partition with the tools necessary for an
3575installation. It is meant to be copied @emph{as is} to a large-enough
3576USB stick.
3577
3578To copy the image to a USB stick, follow these steps:
3579
3580@enumerate
3581@item
3582Decompress the image using the @command{xz} command:
3583
3584@example
3a5d914b 3585xz -d gsd-usb-install-@value{VERSION}.@var{system}.xz
5af6de3e
LC
3586@end example
3587
3588@item
3589Insert a USB stick of 1@tie{}GiB or more in your machine, and determine
3590its device name. Assuming that USB stick is known as @file{/dev/sdX},
3591copy the image with:
3592
3593@example
3a5d914b 3594dd if=gsd-usb-install-@value{VERSION}.x86_64 of=/dev/sdX
5af6de3e
LC
3595@end example
3596
3597Access to @file{/dev/sdX} usually requires root privileges.
3598@end enumerate
3599
3600Once this is done, you should be able to reboot the system and boot from
3601the USB stick. The latter usually requires you to get in the BIOS' boot
3602menu, where you can choose to boot from the USB stick.
3603
3604@subsection Preparing for Installation
3605
3606Once you have successfully booted the image on the USB stick, you should
3607end up with a root prompt. Several console TTYs are configured and can
3608be used to run commands as root. TTY2 shows this documentation,
3609browsable using the Info reader commands (@pxref{Help,,, info, Info: An
3610Introduction}).
3611
3612To install the system, you would:
3613
3614@enumerate
3615
3616@item
95c559c1 3617Configure the network, by running @command{dhclient eno1} (to get an
5af6de3e 3618automatically assigned IP address from the wired network interface
95c559c1
LC
3619controller@footnote{
3620@c http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
3621The name @code{eno1} is for the first on-board Ethernet controller. The
3622interface name for an Ethernet controller that is in the first slot of
3623the first PCI bus, for instance, would be @code{enp1s0}. Use
3624@command{ifconfig -a} to list all the available network interfaces.}),
3625or using the @command{ifconfig} command.
5af6de3e
LC
3626
3627The system automatically loads drivers for your network interface
3628controllers.
3629
3630Setting up network access is almost always a requirement because the
3631image does not contain all the software and tools that may be needed.
3632
3633@item
3634Unless this has already been done, you must partition and format the
3635target partitions.
3636
7ab44369
LC
3637Preferably, assign partitions a label so that you can easily and
3638reliably refer to them in @code{file-system} declarations (@pxref{File
3639Systems}). This is typically done using the @code{-L} option of
3640@command{mkfs.ext4} and related commands.
3641
5af6de3e 3642The installation image includes Parted (@pxref{Overview,,, parted, GNU
b419c7f5
LC
3643Parted User Manual}), @command{fdisk}, Cryptsetup/LUKS for disk
3644encryption, and e2fsprogs, the suite of tools to manipulate
3645ext2/ext3/ext4 file systems.
5af6de3e 3646
83a17b62
LC
3647@item
3648Once that is done, mount the target root partition under @file{/mnt}.
3649
3650@item
3651Lastly, run @code{deco start cow-store /mnt}.
3652
3653This will make @file{/gnu/store} copy-on-write, such that packages added
3654to it during the installation phase will be written to the target disk
3655rather than kept in memory.
3656
5af6de3e
LC
3657@end enumerate
3658
5af6de3e
LC
3659
3660@subsection Proceeding with the Installation
3661
3662With the target partitions ready, you now have to edit a file and
3663provide the declaration of the operating system to be installed. To
3664that end, the installation system comes with two text editors: GNU nano
3665(@pxref{Top,,, nano, GNU nano Manual}), and GNU Zile, an Emacs clone.
3666It is better to store that file on the target root file system, say, as
3667@file{/mnt/etc/config.scm}.
3668
3669A minimal operating system configuration, with just the bare minimum and
1dac8566
LC
3670only a root account would look like this (on the installation system,
3671this example is available as @file{/etc/configuration-template.scm}):
5af6de3e
LC
3672
3673@example
931c132a 3674@include os-config.texi
5af6de3e
LC
3675@end example
3676
3677@noindent
3678For more information on @code{operating-system} declarations,
6621cdb6 3679@pxref{Using the Configuration System}.
5af6de3e
LC
3680
3681Once that is done, the new system must be initialized (remember that the
3682target root file system is mounted under @file{/mnt}):
3683
3684@example
3685guix system init /mnt/etc/config.scm /mnt
3686@end example
3687
3688@noindent
3689This will copy all the necessary files, and install GRUB on
3690@file{/dev/sdX}, unless you pass the @option{--no-grub} option. For
6621cdb6 3691more information, @pxref{Invoking guix system}. This command may trigger
5af6de3e
LC
3692downloads or builds of missing packages, which can take some time.
3693
3694Once that command has completed---and hopefully succeeded!---you can
ad14d9e7 3695run @command{reboot} and boot into the new system. Cross fingers, and
5af6de3e
LC
3696join us on @code{#guix} on the Freenode IRC network or on
3697@file{guix-devel@@gnu.org} to share your experience---good or not so
3698good.
3699
3700@subsection Building the Installation Image
3701
3702The installation image described above was built using the @command{guix
3703system} command, specifically:
3704
3705@example
8a225c66 3706guix system disk-image --image-size=850MiB gnu/system/install.scm
5af6de3e
LC
3707@end example
3708
3709@xref{Invoking guix system}, for more information. See
3710@file{gnu/system/install.scm} in the source tree for more information
3711about the installation image.
3712
cf4a9129
LC
3713@node System Configuration
3714@section System Configuration
b208a005 3715
cf4a9129 3716@cindex system configuration
3ca2731c 3717The Guix System Distribution supports a consistent whole-system configuration
cf4a9129
LC
3718mechanism. By that we mean that all aspects of the global system
3719configuration---such as the available system services, timezone and
3720locale settings, user accounts---are declared in a single place. Such
3721a @dfn{system configuration} can be @dfn{instantiated}---i.e., effected.
91ef73d4 3722
cf4a9129
LC
3723One of the advantages of putting all the system configuration under the
3724control of Guix is that it supports transactional system upgrades, and
3725makes it possible to roll-back to a previous system instantiation,
3726should something go wrong with the new one (@pxref{Features}). Another
3727one is that it makes it easy to replicate the exact same configuration
3728across different machines, or at different points in time, without
3729having to resort to additional administration tools layered on top of
3730the system's own tools.
3731@c Yes, we're talking of Puppet, Chef, & co. here. ↑
91ef73d4 3732
cf4a9129
LC
3733This section describes this mechanism. First we focus on the system
3734administrator's viewpoint---explaining how the system is configured and
3735instantiated. Then we show how this mechanism can be extended, for
3736instance to support new system services.
91ef73d4 3737
cf4a9129
LC
3738@menu
3739* Using the Configuration System:: Customizing your GNU system.
7313a52e 3740* operating-system Reference:: Detail of operating-system declarations.
cf4a9129 3741* File Systems:: Configuring file system mounts.
510f9d86 3742* Mapped Devices:: Block device extra processing.
cf4a9129 3743* User Accounts:: Specifying user accounts.
598e19dc 3744* Locales:: Language and cultural convention settings.
cf4a9129 3745* Services:: Specifying system services.
0ae8c15a 3746* Setuid Programs:: Programs running with root privileges.
996ed739 3747* Name Service Switch:: Configuring libc's name service switch.
fd1b1fa2 3748* Initial RAM Disk:: Linux-Libre bootstrapping.
88faf933 3749* GRUB Configuration:: Configuring the boot loader.
cf4a9129
LC
3750* Invoking guix system:: Instantiating a system configuration.
3751* Defining Services:: Adding new service definitions.
3752@end menu
91ef73d4 3753
cf4a9129
LC
3754@node Using the Configuration System
3755@subsection Using the Configuration System
64d76fa6 3756
cf4a9129
LC
3757The operating system is configured by providing an
3758@code{operating-system} declaration in a file that can then be passed to
3759the @command{guix system} command (@pxref{Invoking guix system}). A
3760simple setup, with the default system services, the default Linux-Libre
3761kernel, initial RAM disk, and boot loader looks like this:
91ef73d4 3762
cf4a9129
LC
3763@findex operating-system
3764@lisp
3765(use-modules (gnu) ; for 'user-account', '%base-services', etc.
3766 (gnu packages emacs) ; for 'emacs'
3767 (gnu services ssh)) ; for 'lsh-service'
91ef73d4 3768
cf4a9129
LC
3769(operating-system
3770 (host-name "komputilo")
3771 (timezone "Europe/Paris")
598e19dc 3772 (locale "fr_FR.utf8")
cf4a9129
LC
3773 (bootloader (grub-configuration
3774 (device "/dev/sda")))
a69576ea 3775 (file-systems (cons (file-system
cf4a9129
LC
3776 (device "/dev/sda1") ; or partition label
3777 (mount-point "/")
a69576ea
LC
3778 (type "ext3"))
3779 %base-file-systems))
cf4a9129
LC
3780 (users (list (user-account
3781 (name "alice")
bc73aa43 3782 (group "users")
cf4a9129
LC
3783 (comment "Bob's sister")
3784 (home-directory "/home/alice"))))
3785 (packages (cons emacs %base-packages))
84399103
LC
3786 (services (cons (lsh-service #:port 2222 #:root-login? #t
3787 #:initialize? #t)
cf4a9129
LC
3788 %base-services)))
3789@end lisp
401c53c4 3790
cf4a9129
LC
3791This example should be self-describing. Some of the fields defined
3792above, such as @code{host-name} and @code{bootloader}, are mandatory.
3793Others, such as @code{packages} and @code{services}, can be omitted, in
3794which case they get a default value.
e7f34eb0 3795
cf4a9129
LC
3796@vindex %base-packages
3797The @code{packages} field lists
3798packages that will be globally visible on the system, for all user
3799accounts---i.e., in every user's @code{PATH} environment variable---in
3800addition to the per-user profiles (@pxref{Invoking guix package}). The
3801@var{%base-packages} variable provides all the tools one would expect
3802for basic user and administrator tasks---including the GNU Core
3803Utilities, the GNU Networking Utilities, the GNU Zile lightweight text
3804editor, @command{find}, @command{grep}, etc. The example above adds
3805Emacs to those, taken from the @code{(gnu packages emacs)} module
3806(@pxref{Package Modules}).
e7f34eb0 3807
cf4a9129
LC
3808@vindex %base-services
3809The @code{services} field lists @dfn{system services} to be made
3810available when the system starts (@pxref{Services}).
3811The @code{operating-system} declaration above specifies that, in
3812addition to the basic services, we want the @command{lshd} secure shell
3813daemon listening on port 2222, and allowing remote @code{root} logins
3814(@pxref{Invoking lshd,,, lsh, GNU lsh Manual}). Under the hood,
3815@code{lsh-service} arranges so that @code{lshd} is started with the
3816right command-line options, possibly with supporting configuration files
7313a52e
LC
3817generated as needed (@pxref{Defining Services}). @xref{operating-system
3818Reference}, for details about the available @code{operating-system}
3819fields.
a1ba8475 3820
cf4a9129
LC
3821Assuming the above snippet is stored in the @file{my-system-config.scm}
3822file, the @command{guix system reconfigure my-system-config.scm} command
3823instantiates that configuration, and makes it the default GRUB boot
3824entry (@pxref{Invoking guix system}). The normal way to change the
3825system's configuration is by updating this file and re-running the
3826@command{guix system} command.
b81e1947 3827
cf4a9129
LC
3828At the Scheme level, the bulk of an @code{operating-system} declaration
3829is instantiated with the following monadic procedure (@pxref{The Store
3830Monad}):
b81e1947 3831
cf4a9129
LC
3832@deffn {Monadic Procedure} operating-system-derivation os
3833Return a derivation that builds @var{os}, an @code{operating-system}
3834object (@pxref{Derivations}).
b81e1947 3835
cf4a9129
LC
3836The output of the derivation is a single directory that refers to all
3837the packages, configuration files, and other supporting files needed to
3838instantiate @var{os}.
3839@end deffn
b81e1947 3840
7313a52e
LC
3841@node operating-system Reference
3842@subsection @code{operating-system} Reference
3843
3844This section summarizes all the options available in
3845@code{operating-system} declarations (@pxref{Using the Configuration
3846System}).
3847
3848@deftp {Data Type} operating-system
3849This is the data type representing an operating system configuration.
3850By that, we mean all the global system configuration, not per-user
3851configuration (@pxref{Using the Configuration System}).
3852
3853@table @asis
3854@item @code{kernel} (default: @var{linux-libre})
3855The package object of the operating system to use@footnote{Currently
3856only the Linux-libre kernel is supported. In the future, it will be
3857possible to use the GNU@tie{}Hurd.}.
3858
3859@item @code{bootloader}
88faf933 3860The system bootloader configuration object. @xref{GRUB Configuration}.
7313a52e
LC
3861
3862@item @code{initrd} (default: @code{base-initrd})
3863A two-argument monadic procedure that returns an initial RAM disk for
3864the Linux kernel. @xref{Initial RAM Disk}.
3865
f34c56be
LC
3866@item @code{firmware} (default: @var{%base-firmware})
3867@cindex firmware
3868List of firmware packages loadable by the operating system kernel.
3869
3870The default includes firmware needed for Atheros-based WiFi devices
3871(Linux-libre module @code{ath9k}.)
3872
7313a52e
LC
3873@item @code{host-name}
3874The host name.
3875
3876@item @code{hosts-file}
3877@cindex hosts file
3878A zero-argument monadic procedure that returns a text file for use as
3879@file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library
3880Reference Manual}). The default is to produce a file with entries for
3881@code{localhost} and @var{host-name}.
3882
3883@item @code{mapped-devices} (default: @code{'()})
3884A list of mapped devices. @xref{Mapped Devices}.
3885
3886@item @code{file-systems}
3887A list of file systems. @xref{File Systems}.
3888
3889@item @code{swap-devices} (default: @code{'()})
3890@cindex swap devices
3891A list of strings identifying devices to be used for ``swap space''
3892(@pxref{Memory Concepts,,, libc, The GNU C Library Reference Manual}).
3893For example, @code{'("/dev/sda3")}.
3894
3895@item @code{users} (default: @code{'()})
3896@itemx @code{groups} (default: @var{%base-groups})
3897List of user accounts and groups. @xref{User Accounts}.
3898
3899@item @code{skeletons} (default: @code{(default-skeletons)})
3900A monadic list of pairs of target file name and files. These are the
3901files that will be used as skeletons as new accounts are created.
3902
3903For instance, a valid value may look like this:
3904
3905@example
3906(mlet %store-monad ((bashrc (text-file "bashrc" "\
3907 export PATH=$HOME/.guix-profile/bin")))
3908 (return `((".bashrc" ,bashrc))))
3909@end example
3910
3911@item @code{issue} (default: @var{%default-issue})
3912A string denoting the contents of the @file{/etc/issue} file, which is
3913what displayed when users log in on a text console.
3914
3915@item @code{packages} (default: @var{%base-packages})
3916The set of packages installed in the global profile, which is accessible
3917at @file{/run/current-system/profile}.
3918
3919The default set includes core utilities, but it is good practice to
3920install non-core utilities in user profiles (@pxref{Invoking guix
3921package}).
3922
3923@item @code{timezone}
3924A timezone identifying string---e.g., @code{"Europe/Paris"}.
3925
598e19dc
LC
3926@item @code{locale} (default: @code{"en_US.utf8"})
3927The name of the default locale (@pxref{Locale Names,,, libc, The GNU C
3928Library Reference Manual}). @xref{Locales}, for more information.
3929
3930@item @code{locale-definitions} (default: @var{%default-locale-definitions})
3931The list of locale definitions to be compiled and that may be used at
3932run time. @xref{Locales}.
7313a52e 3933
996ed739
LC
3934@item @code{name-service-switch} (default: @var{%default-nss})
3935Configuration of libc's name service switch (NSS)---a
3936@code{<name-service-switch>} object. @xref{Name Service Switch}, for
3937details.
3938
7313a52e
LC
3939@item @code{services} (default: @var{%base-services})
3940A list of monadic values denoting system services. @xref{Services}.
3941
3942@item @code{pam-services} (default: @code{(base-pam-services)})
3943@cindex PAM
3944@cindex pluggable authentication modules
3945Linux @dfn{pluggable authentication module} (PAM) services.
3946@c FIXME: Add xref to PAM services section.
3947
3948@item @code{setuid-programs} (default: @var{%setuid-programs})
3949List of string-valued G-expressions denoting setuid programs.
3950@xref{Setuid Programs}.
3951
3952@item @code{sudoers} (default: @var{%sudoers-specification})
3953@cindex sudoers
3954The contents of the @file{/etc/sudoers} file as a string.
3955
3956This file specifies which users can use the @command{sudo} command, what
3957they are allowed to do, and what privileges they may gain. The default
3958is that only @code{root} and members of the @code{wheel} group may use
3959@code{sudo}.
3960
3961@end table
3962@end deftp
3963
cf4a9129
LC
3964@node File Systems
3965@subsection File Systems
b81e1947 3966
cf4a9129
LC
3967The list of file systems to be mounted is specified in the
3968@code{file-systems} field of the operating system's declaration
3969(@pxref{Using the Configuration System}). Each file system is declared
3970using the @code{file-system} form, like this:
b81e1947
LC
3971
3972@example
cf4a9129
LC
3973(file-system
3974 (mount-point "/home")
3975 (device "/dev/sda3")
3976 (type "ext4"))
b81e1947
LC
3977@end example
3978
cf4a9129
LC
3979As usual, some of the fields are mandatory---those shown in the example
3980above---while others can be omitted. These are described below.
b81e1947 3981
cf4a9129
LC
3982@deftp {Data Type} file-system
3983Objects of this type represent file systems to be mounted. They
3984contain the following members:
5ff3c4b8 3985
cf4a9129
LC
3986@table @asis
3987@item @code{type}
3988This is a string specifying the type of the file system---e.g.,
3989@code{"ext4"}.
5ff3c4b8 3990
cf4a9129
LC
3991@item @code{mount-point}
3992This designates the place where the file system is to be mounted.
b81e1947 3993
cf4a9129
LC
3994@item @code{device}
3995This names the ``source'' of the file system. By default it is the name
3996of a node under @file{/dev}, but its meaning depends on the @code{title}
3997field described below.
401c53c4 3998
cf4a9129
LC
3999@item @code{title} (default: @code{'device})
4000This is a symbol that specifies how the @code{device} field is to be
4001interpreted.
401c53c4 4002
cf4a9129
LC
4003When it is the symbol @code{device}, then the @code{device} field is
4004interpreted as a file name; when it is @code{label}, then @code{device}
4005is interpreted as a partition label name; when it is @code{uuid},
4006@code{device} is interpreted as a partition unique identifier (UUID).
da7cabd4 4007
cf4a9129
LC
4008The @code{label} and @code{uuid} options offer a way to refer to disk
4009partitions without having to hard-code their actual device name.
da7cabd4 4010
5f86a66e
LC
4011However, when a file system's source is a mapped device (@pxref{Mapped
4012Devices}), its @code{device} field @emph{must} refer to the mapped
4013device name---e.g., @file{/dev/mapper/root-partition}---and consequently
4014@code{title} must be set to @code{'device}. This is required so that
4015the system knows that mounting the file system depends on having the
4016corresponding device mapping established.
4017
cf4a9129
LC
4018@item @code{flags} (default: @code{'()})
4019This is a list of symbols denoting mount flags. Recognized flags
2c071ce9
LC
4020include @code{read-only}, @code{bind-mount}, @code{no-dev} (disallow
4021access to special files), @code{no-suid} (ignore setuid and setgid
4022bits), and @code{no-exec} (disallow program execution.)
da7cabd4 4023
cf4a9129
LC
4024@item @code{options} (default: @code{#f})
4025This is either @code{#f}, or a string denoting mount options.
da7cabd4 4026
cf4a9129
LC
4027@item @code{needed-for-boot?} (default: @code{#f})
4028This Boolean value indicates whether the file system is needed when
4029booting. If that is true, then the file system is mounted when the
4030initial RAM disk (initrd) is loaded. This is always the case, for
4031instance, for the root file system.
da7cabd4 4032
cf4a9129
LC
4033@item @code{check?} (default: @code{#t})
4034This Boolean indicates whether the file system needs to be checked for
4035errors before being mounted.
f9cc8971 4036
4e469051
LC
4037@item @code{create-mount-point?} (default: @code{#f})
4038When true, the mount point is created if it does not exist yet.
4039
cf4a9129
LC
4040@end table
4041@end deftp
da7cabd4 4042
a69576ea
LC
4043The @code{(gnu system file-systems)} exports the following useful
4044variables.
4045
4046@defvr {Scheme Variable} %base-file-systems
4047These are essential file systems that are required on normal systems,
4048such as @var{%devtmpfs-file-system} (see below.) Operating system
4049declarations should always contain at least these.
4050@end defvr
4051
4052@defvr {Scheme Variable} %devtmpfs-file-system
4053The @code{devtmpfs} file system to be mounted on @file{/dev}. This is a
4054requirement for udev (@pxref{Base Services, @code{udev-service}}).
4055@end defvr
4056
7f239fd3
LC
4057@defvr {Scheme Variable} %pseudo-terminal-file-system
4058This is the file system to be mounted as @file{/dev/pts}. It supports
4059@dfn{pseudo-terminals} created @i{via} @code{openpty} and similar
4060functions (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference
4061Manual}). Pseudo-terminals are used by terminal emulators such as
4062@command{xterm}.
4063@end defvr
4064
db17ae5c
LC
4065@defvr {Scheme Variable} %shared-memory-file-system
4066This file system is mounted as @file{/dev/shm} and is used to support
4067memory sharing across processes (@pxref{Memory-mapped I/O,
4068@code{shm_open},, libc, The GNU C Library Reference Manual}).
4069@end defvr
4070
a69576ea
LC
4071@defvr {Scheme Variable} %binary-format-file-system
4072The @code{binfmt_misc} file system, which allows handling of arbitrary
4073executable file types to be delegated to user space. This requires the
4074@code{binfmt.ko} kernel module to be loaded.
4075@end defvr
4076
4077@defvr {Scheme Variable} %fuse-control-file-system
4078The @code{fusectl} file system, which allows unprivileged users to mount
4079and unmount user-space FUSE file systems. This requires the
4080@code{fuse.ko} kernel module to be loaded.
4081@end defvr
4082
510f9d86
LC
4083@node Mapped Devices
4084@subsection Mapped Devices
4085
4086@cindex device mapping
4087@cindex mapped devices
4088The Linux kernel has a notion of @dfn{device mapping}: a block device,
4089such as a hard disk partition, can be @dfn{mapped} into another device,
4090with additional processing over the data that flows through
4091it@footnote{Note that the GNU@tie{}Hurd makes no difference between the
4092concept of a ``mapped device'' and that of a file system: both boil down
4093to @emph{translating} input/output operations made on a file to
4094operations on its backing store. Thus, the Hurd implements mapped
4095devices, like file systems, using the generic @dfn{translator} mechanism
4096(@pxref{Translators,,, hurd, The GNU Hurd Reference Manual}).}. A
4097typical example is encryption device mapping: all writes to the mapped
4098device are encrypted, and all reads are deciphered, transparently.
4099
4100Mapped devices are declared using the @code{mapped-device} form:
4101
4102@example
4103(mapped-device
4104 (source "/dev/sda3")
4105 (target "home")
4106 (type luks-device-mapping))
4107@end example
4108
4109@noindent
4110@cindex disk encryption
4111@cindex LUKS
4112This example specifies a mapping from @file{/dev/sda3} to
4113@file{/dev/mapper/home} using LUKS---the
4114@url{http://code.google.com/p/cryptsetup,Linux Unified Key Setup}, a
4115standard mechanism for disk encryption. The @file{/dev/mapper/home}
4116device can then be used as the @code{device} of a @code{file-system}
4117declaration (@pxref{File Systems}). The @code{mapped-device} form is
4118detailed below.
4119
4120@deftp {Data Type} mapped-device
4121Objects of this type represent device mappings that will be made when
4122the system boots up.
4123
9cb426b8
LC
4124@table @code
4125@item source
510f9d86
LC
4126This string specifies the name of the block device to be mapped, such as
4127@code{"/dev/sda3"}.
4128
9cb426b8 4129@item target
510f9d86
LC
4130This string specifies the name of the mapping to be established. For
4131example, specifying @code{"my-partition"} will lead to the creation of
4132the @code{"/dev/mapper/my-partition"} device.
4133
9cb426b8 4134@item type
510f9d86
LC
4135This must be a @code{mapped-device-kind} object, which specifies how
4136@var{source} is mapped to @var{target}.
4137@end table
4138@end deftp
4139
4140@defvr {Scheme Variable} luks-device-mapping
4141This defines LUKS block device encryption using the @command{cryptsetup}
4142command, from the same-named package. This relies on the
4143@code{dm-crypt} Linux kernel module.
4144@end defvr
4145
cf4a9129
LC
4146@node User Accounts
4147@subsection User Accounts
ee85f3db 4148
cf4a9129 4149User accounts are specified with the @code{user-account} form:
ee85f3db 4150
cf4a9129
LC
4151@example
4152(user-account
4153 (name "alice")
4154 (group "users")
24e752c0
LC
4155 (supplementary-groups '("wheel" ;allow use of sudo, etc.
4156 "audio" ;sound card
4157 "video" ;video devices such as webcams
4158 "cdrom")) ;the good ol' CD-ROM
cf4a9129
LC
4159 (comment "Bob's sister")
4160 (home-directory "/home/alice"))
4161@end example
25083588 4162
cf4a9129
LC
4163@deftp {Data Type} user-account
4164Objects of this type represent user accounts. The following members may
4165be specified:
ee85f3db 4166
cf4a9129
LC
4167@table @asis
4168@item @code{name}
4169The name of the user account.
ee85f3db 4170
cf4a9129
LC
4171@item @code{group}
4172This is the name (a string) or identifier (a number) of the user group
4173this account belongs to.
ee85f3db 4174
cf4a9129
LC
4175@item @code{supplementary-groups} (default: @code{'()})
4176Optionally, this can be defined as a list of group names that this
4177account belongs to.
ee85f3db 4178
cf4a9129
LC
4179@item @code{uid} (default: @code{#f})
4180This is the user ID for this account (a number), or @code{#f}. In the
4181latter case, a number is automatically chosen by the system when the
4182account is created.
ee85f3db 4183
cf4a9129
LC
4184@item @code{comment} (default: @code{""})
4185A comment about the account, such as the account's owner full name.
c8c871d1 4186
cf4a9129
LC
4187@item @code{home-directory}
4188This is the name of the home directory for the account.
ee85f3db 4189
cf4a9129
LC
4190@item @code{shell} (default: Bash)
4191This is a G-expression denoting the file name of a program to be used as
4192the shell (@pxref{G-Expressions}).
ee85f3db 4193
cf4a9129
LC
4194@item @code{system?} (default: @code{#f})
4195This Boolean value indicates whether the account is a ``system''
4196account. System accounts are sometimes treated specially; for instance,
4197graphical login managers do not list them.
ee85f3db 4198
cf4a9129 4199@item @code{password} (default: @code{#f})
eb59595c
LC
4200You would normally leave this field to @code{#f}, initialize user
4201passwords as @code{root} with the @command{passwd} command, and then let
4202users change it with @command{passwd}.
4203
4204If you @emph{do} want to have a preset password for an account, then
4205this field must contain the encrypted password, as a string.
5d1f1177
LC
4206@xref{crypt,,, libc, The GNU C Library Reference Manual}, for more information
4207on password encryption, and @ref{Encryption,,, guile, GNU Guile Reference
eb59595c 4208Manual}, for information on Guile's @code{crypt} procedure.
c8c871d1 4209
cf4a9129
LC
4210@end table
4211@end deftp
ee85f3db 4212
cf4a9129 4213User group declarations are even simpler:
ee85f3db 4214
cf4a9129
LC
4215@example
4216(user-group (name "students"))
4217@end example
ee85f3db 4218
cf4a9129
LC
4219@deftp {Data Type} user-group
4220This type is for, well, user groups. There are just a few fields:
af8a56b8 4221
cf4a9129
LC
4222@table @asis
4223@item @code{name}
4224The group's name.
ee85f3db 4225
cf4a9129
LC
4226@item @code{id} (default: @code{#f})
4227The group identifier (a number). If @code{#f}, a new number is
4228automatically allocated when the group is created.
ee85f3db 4229
c8fa3426
LC
4230@item @code{system?} (default: @code{#f})
4231This Boolean value indicates whether the group is a ``system'' group.
4232System groups have low numerical IDs.
4233
cf4a9129
LC
4234@item @code{password} (default: @code{#f})
4235What, user groups can have a password? Well, apparently yes. Unless
4236@code{#f}, this field specifies the group's password.
ee85f3db 4237
cf4a9129
LC
4238@end table
4239@end deftp
401c53c4 4240
cf4a9129
LC
4241For convenience, a variable lists all the basic user groups one may
4242expect:
401c53c4 4243
cf4a9129
LC
4244@defvr {Scheme Variable} %base-groups
4245This is the list of basic user groups that users and/or packages expect
4246to be present on the system. This includes groups such as ``root'',
4247``wheel'', and ``users'', as well as groups used to control access to
4248specific devices such as ``audio'', ``disk'', and ``cdrom''.
4249@end defvr
401c53c4 4250
598e19dc
LC
4251@node Locales
4252@subsection Locales
4253
4254@cindex locale
4255A @dfn{locale} defines cultural conventions for a particular language
4256and region of the world (@pxref{Locales,,, libc, The GNU C Library
4257Reference Manual}). Each locale has a name that typically has the form
4258@code{@var{language}_@var{territory}.@var{charset}}---e.g.,
4259@code{fr_LU.utf8} designates the locale for the French language, with
4260cultural conventions from Luxembourg, and using the UTF-8 encoding.
4261
4262@cindex locale definition
4263Usually, you will want to specify the default locale for the machine
4264using the @code{locale} field of the @code{operating-system} declaration
4265(@pxref{operating-system Reference, @code{locale}}).
4266
4267That locale must be among the @dfn{locale definitions} that are known to
4268the system---and these are specified in the @code{locale-definitions}
4269slot of @code{operating-system}. The default value includes locale
4270definition for some widely used locales, but not for all the available
4271locales, in order to save space.
4272
4273If the locale specified in the @code{locale} field is not among the
4274definitions listed in @code{locale-definitions}, @command{guix system}
4275raises an error. In that case, you should add the locale definition to
4276the @code{locale-definitions} field. For instance, to add the North
4277Frisian locale for Germany, the value of that field may be:
4278
4279@example
4280(cons (locale-definition
4281 (name "fy_DE.utf8") (source "fy_DE"))
4282 %default-locale-definitions)
4283@end example
4284
4285Likewise, to save space, one might want @code{locale-definitions} to
4286list only the locales that are actually used, as in:
4287
4288@example
4289(list (locale-definition
4290 (name "ja_JP.eucjp") (source "ja_JP")
4291 (charset "EUC-JP")))
4292@end example
4293
4294The @code{locale-definition} form is provided by the @code{(gnu system
4295locale)} module. Details are given below.
4296
4297@deftp {Data Type} locale-definition
4298This is the data type of a locale definition.
4299
4300@table @asis
4301
4302@item @code{name}
4303The name of the locale. @xref{Locale Names,,, libc, The GNU C Library
4304Reference Manual}, for more information on locale names.
4305
4306@item @code{source}
4307The name of the source for that locale. This is typically the
4308@code{@var{language}_@var{territory}} part of the locale name.
4309
4310@item @code{charset} (default: @code{"UTF-8"})
4311The ``character set'' or ``code set'' for that locale,
4312@uref{http://www.iana.org/assignments/character-sets, as defined by
4313IANA}.
4314
4315@end table
4316@end deftp
4317
4318@defvr {Scheme Variable} %default-locale-definitions
4319An arbitrary list of commonly used locales, used as the default value of
4320the @code{locale-definitions} field of @code{operating-system}
4321declarations.
4322@end defvr
401c53c4 4323
cf4a9129
LC
4324@node Services
4325@subsection Services
401c53c4 4326
cf4a9129
LC
4327@cindex system services
4328An important part of preparing an @code{operating-system} declaration is
4329listing @dfn{system services} and their configuration (@pxref{Using the
4330Configuration System}). System services are typically daemons launched
4331when the system boots, or other actions needed at that time---e.g.,
d8b94dbd
LC
4332configuring network access.
4333
4334Services are managed by GNU@tie{}dmd (@pxref{Introduction,,, dmd, GNU
4335dmd Manual}). On a running system, the @command{deco} command allows
4336you to list the available services, show their status, start and stop
4337them, or do other specific operations (@pxref{Jump Start,,, dmd, GNU dmd
4338Manual}). For example:
4339
4340@example
4341# deco status dmd
4342@end example
4343
4344The above command, run as @code{root}, lists the currently defined
4345services. The @command{deco doc} command shows a synopsis of the given
4346service:
4347
4348@example
4349# deco doc nscd
4350Run libc's name service cache daemon (nscd).
4351@end example
4352
4353The @command{start}, @command{stop}, and @command{restart} sub-commands
4354have the effect you would expect. For instance, the commands below stop
4355the nscd service and restart the Xorg display server:
4356
4357@example
4358# deco stop nscd
4359Service nscd has been stopped.
4360# deco restart xorg-server
4361Service xorg-server has been stopped.
4362Service xorg-server has been started.
4363@end example
401c53c4 4364
cf4a9129 4365The following sections document the available services, starting with
d8b94dbd
LC
4366the core services, that may be used in an @code{operating-system}
4367declaration.
401c53c4 4368
cf4a9129
LC
4369@menu
4370* Base Services:: Essential system services.
4371* Networking Services:: Network setup, SSH daemon, etc.
4372* X Window:: Graphical display.
aa4ed923 4373* Various Services:: Other services.
cf4a9129 4374@end menu
401c53c4 4375
cf4a9129
LC
4376@node Base Services
4377@subsubsection Base Services
a1ba8475 4378
cf4a9129
LC
4379The @code{(gnu services base)} module provides definitions for the basic
4380services that one expects from the system. The services exported by
4381this module are listed below.
401c53c4 4382
cf4a9129
LC
4383@defvr {Scheme Variable} %base-services
4384This variable contains a list of basic services@footnote{Technically,
4385this is a list of monadic services. @xref{The Store Monad}.} one would
4386expect from the system: a login service (mingetty) on each tty, syslogd,
4387libc's name service cache daemon (nscd), the udev device manager, and
4388more.
401c53c4 4389
cf4a9129
LC
4390This is the default value of the @code{services} field of
4391@code{operating-system} declarations. Usually, when customizing a
4392system, you will want to append services to @var{%base-services}, like
4393this:
401c53c4 4394
cf4a9129 4395@example
fa1e31b8 4396(cons* (avahi-service) (lsh-service) %base-services)
cf4a9129
LC
4397@end example
4398@end defvr
401c53c4 4399
cf4a9129
LC
4400@deffn {Monadic Procedure} host-name-service @var{name}
4401Return a service that sets the host name to @var{name}.
4402@end deffn
401c53c4 4403
cf4a9129
LC
4404@deffn {Monadic Procedure} mingetty-service @var{tty} [#:motd] @
4405 [#:auto-login #f] [#:login-program] [#:login-pause? #f] @
4406 [#:allow-empty-passwords? #f]
4407Return a service to run mingetty on @var{tty}.
401c53c4 4408
cf4a9129
LC
4409When @var{allow-empty-passwords?} is true, allow empty log-in password. When
4410@var{auto-login} is true, it must be a user name under which to log-in
4411automatically. @var{login-pause?} can be set to @code{#t} in conjunction with
4412@var{auto-login}, in which case the user will have to press a key before the
4413login shell is launched.
401c53c4 4414
cf4a9129
LC
4415When true, @var{login-program} is a gexp or a monadic gexp denoting the name
4416of the log-in program (the default is the @code{login} program from the Shadow
4417tool suite.)
401c53c4 4418
cf4a9129
LC
4419@var{motd} is a monadic value containing a text file to use as
4420the ``message of the day''.
4421@end deffn
401c53c4 4422
6454b333
LC
4423@cindex name service cache daemon
4424@cindex nscd
4aee6e60
LC
4425@deffn {Monadic Procedure} nscd-service [@var{config}] [#:glibc glibc] @
4426 [#:name-services '()]
4427Return a service that runs libc's name service cache daemon (nscd) with
4428the given @var{config}---an @code{<nscd-configuration>} object.
4429Optionally, @code{#:name-services} is a list of packages that provide
4430name service switch (NSS) modules needed by nscd.
cf4a9129 4431@end deffn
401c53c4 4432
6454b333
LC
4433@defvr {Scheme Variable} %nscd-default-configuration
4434This is the default @code{<nscd-configuration>} value (see below) used
4435by @code{nscd-service}. This uses the caches defined by
4436@var{%nscd-default-caches}; see below.
4437@end defvr
4438
4439@deftp {Data Type} nscd-configuration
4440This is the type representing the name service cache daemon (nscd)
4441configuration.
4442
4443@table @asis
4444
4445@item @code{log-file} (default: @code{"/var/log/nscd.log"})
4446Name of nscd's log file. This is where debugging output goes when
4447@code{debug-level} is strictly positive.
4448
4449@item @code{debug-level} (default: @code{0})
4450Integer denoting the debugging levels. Higher numbers mean more
4451debugging output is logged.
4452
4453@item @code{caches} (default: @var{%nscd-default-caches})
4454List of @code{<nscd-cache>} objects denoting things to be cached; see
4455below.
4456
4457@end table
4458@end deftp
4459
4460@deftp {Data Type} nscd-cache
4461Data type representing a cache database of nscd and its parameters.
4462
4463@table @asis
4464
4465@item @code{database}
4466This is a symbol representing the name of the database to be cached.
4467Valid values are @code{passwd}, @code{group}, @code{hosts}, and
4468@code{services}, which designate the corresponding NSS database
4469(@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
4470
4471@item @code{positive-time-to-live}
4472@itemx @code{negative-time-to-live} (default: @code{20})
4473A number representing the number of seconds during which a positive or
4474negative lookup result remains in cache.
4475
4476@item @code{check-files?} (default: @code{#t})
4477Whether to check for updates of the files corresponding to
4478@var{database}.
4479
4480For instance, when @var{database} is @code{hosts}, setting this flag
4481instructs nscd to check for updates in @file{/etc/hosts} and to take
4482them into account.
4483
4484@item @code{persistent?} (default: @code{#t})
4485Whether the cache should be stored persistently on disk.
4486
4487@item @code{shared?} (default: @code{#t})
4488Whether the cache should be shared among users.
4489
4490@item @code{max-database-size} (default: 32@tie{}MiB)
4491Maximum size in bytes of the database cache.
4492
4493@c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
4494@c settings, so leave them out.
4495
4496@end table
4497@end deftp
4498
4499@defvr {Scheme Variable} %nscd-default-caches
4500List of @code{<nscd-cache>} objects used by default by
4501@code{nscd-configuration} (see above.)
4502
4503It enables persistent and aggressive caching of service and host name
4504lookups. The latter provides better host name lookup performance,
4505resilience in the face of unreliable name servers, and also better
4506privacy---often the result of host name lookups is in local cache, so
4507external name servers do not even need to be queried.
4508@end defvr
4509
4510
1bb76f75
AK
4511@deffn {Monadic Procedure} syslog-service [#:config-file #f]
4512Return a service that runs @code{syslogd}. If configuration file name
4513@var{config-file} is not specified, use some reasonable default
cf4a9129
LC
4514settings.
4515@end deffn
401c53c4 4516
cf4a9129
LC
4517@deffn {Monadic Procedure} guix-service [#:guix guix] @
4518 [#:builder-group "guixbuild"] [#:build-accounts 10] @
02bb6b45 4519 [#:authorize-hydra-key? #t] [#:use-substitutes? #t] @
cf4a9129
LC
4520 [#:extra-options '()]
4521Return a service that runs the build daemon from @var{guix}, and has
4522@var{build-accounts} user accounts available under @var{builder-group}.
401c53c4 4523
cf4a9129
LC
4524When @var{authorize-hydra-key?} is true, the @code{hydra.gnu.org} public key
4525provided by @var{guix} is authorized upon activation, meaning that substitutes
4526from @code{hydra.gnu.org} are used by default.
401c53c4 4527
cf4a9129
LC
4528If @var{use-substitutes?} is false, the daemon is run with
4529@option{--no-substitutes} (@pxref{Invoking guix-daemon,
4530@option{--no-substitutes}}).
401c53c4 4531
cf4a9129
LC
4532Finally, @var{extra-options} is a list of additional command-line options
4533passed to @command{guix-daemon}.
4534@end deffn
a1ba8475 4535
cf4a9129
LC
4536@deffn {Monadic Procedure} udev-service [#:udev udev]
4537Run @var{udev}, which populates the @file{/dev} directory dynamically.
4538@end deffn
401c53c4 4539
a69576ea 4540
cf4a9129
LC
4541@node Networking Services
4542@subsubsection Networking Services
401c53c4 4543
fa1e31b8 4544The @code{(gnu services networking)} module provides services to configure
cf4a9129 4545the network interface.
a1ba8475 4546
a023cca8
LC
4547@cindex DHCP, networking service
4548@deffn {Monadic Procedure} dhcp-client-service [#:dhcp @var{isc-dhcp}]
4549Return a service that runs @var{dhcp}, a Dynamic Host Configuration
4550Protocol (DHCP) client, on all the non-loopback network interfaces.
4551@end deffn
4552
cf4a9129
LC
4553@deffn {Monadic Procedure} static-networking-service @var{interface} @var{ip} @
4554 [#:gateway #f] [#:name-services @code{'()}]
4555Return a service that starts @var{interface} with address @var{ip}. If
4556@var{gateway} is true, it must be a string specifying the default network
4557gateway.
4558@end deffn
8b315a6d 4559
b7d0c494
MW
4560@cindex wicd
4561@deffn {Monadic Procedure} wicd-service [#:wicd @var{wicd}]
4562Return a service that runs @url{https://launchpad.net/wicd,Wicd}, a
4563network manager that aims to simplify wired and wireless networking.
4564@end deffn
4565
63854bcb
LC
4566@deffn {Monadic Procedure} ntp-service [#:ntp @var{ntp}] @
4567 [#:name-service @var{%ntp-servers}]
4568Return a service that runs the daemon from @var{ntp}, the
4569@uref{http://www.ntp.org, Network Time Protocol package}. The daemon will
4570keep the system clock synchronized with that of @var{servers}.
4571@end deffn
4572
4573@defvr {Scheme Variable} %ntp-servers
4574List of host names used as the default NTP servers.
4575@end defvr
4576
cf4a9129
LC
4577@deffn {Monadic Procedure} tor-service [#:tor tor]
4578Return a service to run the @uref{https://torproject.org,Tor} daemon.
8b315a6d 4579
cf4a9129
LC
4580The daemon runs with the default settings (in particular the default exit
4581policy) as the @code{tor} unprivileged user.
4582@end deffn
8b315a6d 4583
4627a464
LC
4584@deffn {Monadic Procedure} bitlbee-service [#:bitlbee bitlbee] @
4585 [#:interface "127.0.0.1"] [#:port 6667] @
4586 [#:extra-settings ""]
4587Return a service that runs @url{http://bitlbee.org,BitlBee}, a daemon that
4588acts as a gateway between IRC and chat networks.
4589
4590The daemon will listen to the interface corresponding to the IP address
4591specified in @var{interface}, on @var{port}. @code{127.0.0.1} means that only
4592local clients can connect, whereas @code{0.0.0.0} means that connections can
4593come from any networking interface.
4594
4595In addition, @var{extra-settings} specifies a string to append to the
4596configuration file.
4597@end deffn
4598
f4391bec 4599Furthermore, @code{(gnu services ssh)} provides the following service.
8b315a6d 4600
cf4a9129 4601@deffn {Monadic Procedure} lsh-service [#:host-key "/etc/lsh/host-key"] @
5833bf33 4602 [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
cf4a9129
LC
4603 [#:allow-empty-passwords? #f] [#:root-login? #f] @
4604 [#:syslog-output? #t] [#:x11-forwarding? #t] @
4605 [#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
2c636195 4606 [#:public-key-authentication? #t] [#:initialize? #f]
cf4a9129
LC
4607Run the @command{lshd} program from @var{lsh} to listen on port @var{port-number}.
4608@var{host-key} must designate a file containing the host key, and readable
4609only by root.
72e25e35 4610
5833bf33
DP
4611When @var{daemonic?} is true, @command{lshd} will detach from the
4612controlling terminal and log its output to syslogd, unless one sets
4613@var{syslog-output?} to false. Obviously, it also makes lsh-service
4614depend on existence of syslogd service. When @var{pid-file?} is true,
4615@command{lshd} writes its PID to the file called @var{pid-file}.
4616
cf4a9129
LC
4617When @var{initialize?} is true, automatically create the seed and host key
4618upon service activation if they do not exist yet. This may take long and
4619require interaction.
8b315a6d 4620
20dd519c
LC
4621When @var{initialize?} is false, it is up to the user to initialize the
4622randomness generator (@pxref{lsh-make-seed,,, lsh, LSH Manual}), and to create
4623a key pair with the private key stored in file @var{host-key} (@pxref{lshd
4624basics,,, lsh, LSH Manual}).
4625
cf4a9129
LC
4626When @var{interfaces} is empty, lshd listens for connections on all the
4627network interfaces; otherwise, @var{interfaces} must be a list of host names
4628or addresses.
9bf3c1a7 4629
20dd519c
LC
4630@var{allow-empty-passwords?} specifies whether to accept log-ins with empty
4631passwords, and @var{root-login?} specifies whether to accept log-ins as
cf4a9129 4632root.
4af2447e 4633
cf4a9129
LC
4634The other options should be self-descriptive.
4635@end deffn
4af2447e 4636
fa0c1d61
LC
4637@defvr {Scheme Variable} %facebook-host-aliases
4638This variable contains a string for use in @file{/etc/hosts}
4639(@pxref{Host Names,,, libc, The GNU C Library Reference Manual}). Each
4640line contains a entry that maps a known server name of the Facebook
4641on-line service---e.g., @code{www.facebook.com}---to the local
4642host---@code{127.0.0.1} or its IPv6 equivalent, @code{::1}.
4643
4644This variable is typically used in the @code{hosts-file} field of an
7313a52e
LC
4645@code{operating-system} declaration (@pxref{operating-system Reference,
4646@file{/etc/hosts}}):
fa0c1d61
LC
4647
4648@example
4649(use-modules (gnu) (guix))
4650
4651(operating-system
4652 (host-name "mymachine")
4653 ;; ...
4654 (hosts-file
4655 ;; Create a /etc/hosts file with aliases for "localhost"
4656 ;; and "mymachine", as well as for Facebook servers.
4657 (text-file "hosts"
4658 (string-append (local-host-aliases host-name)
4659 %facebook-host-aliases))))
4660@end example
4661
4662This mechanism can prevent programs running locally, such as Web
4663browsers, from accessing Facebook.
4664@end defvr
4665
cf4a9129
LC
4666@node X Window
4667@subsubsection X Window
68ad877c 4668
cf4a9129
LC
4669Support for the X Window graphical display system---specifically
4670Xorg---is provided by the @code{(gnu services xorg)} module. Note that
4671there is no @code{xorg-service} procedure. Instead, the X server is
4672started by the @dfn{login manager}, currently SLiM.
4af2447e 4673
cf4a9129 4674@deffn {Monadic Procedure} slim-service [#:allow-empty-passwords? #f] @
0ecc3bf3
LC
4675 [#:auto-login? #f] [#:default-user ""] [#:startx] @
4676 [#:theme @var{%default-slim-theme}] @
4bd43bbe 4677 [#:theme-name @var{%default-slim-theme-name}]
cf4a9129
LC
4678Return a service that spawns the SLiM graphical login manager, which in
4679turn starts the X display server with @var{startx}, a command as returned by
4680@code{xorg-start-command}.
4af2447e 4681
cf4a9129
LC
4682When @var{allow-empty-passwords?} is true, allow logins with an empty
4683password. When @var{auto-login?} is true, log in automatically as
4684@var{default-user}.
0ecc3bf3
LC
4685
4686If @var{theme} is @code{#f}, the use the default log-in theme; otherwise
4687@var{theme} must be a gexp denoting the name of a directory containing the
4688theme to use. In that case, @var{theme-name} specifies the name of the
4689theme.
cf4a9129 4690@end deffn
4af2447e 4691
0ecc3bf3
LC
4692@defvr {Scheme Variable} %default-theme
4693@defvrx {Scheme Variable} %default-theme-name
4694The G-Expression denoting the default SLiM theme and its name.
4695@end defvr
4696
f703413e 4697@deffn {Monadic Procedure} xorg-start-command [#:guile] @
d2e59637 4698 [#:drivers '()] [#:resolutions '()] [#:xorg-server @var{xorg-server}]
f703413e
LC
4699Return a derivation that builds a @var{guile} script to start the X server
4700from @var{xorg-server}. Usually the X server is started by a login manager.
4701
4702@var{drivers} must be either the empty list, in which case Xorg chooses a
4703graphics driver automatically, or a list of driver names that will be tried in
4704this order---e.g., @code{("modesetting" "vesa")}.
d2e59637
LC
4705
4706Likewise, when @var{resolutions} is the empty list, Xorg chooses an
4707appropriate screen resolution; otherwise, it must be a list of
4708resolutions---e.g., @code{((1024 768) (640 480))}.
f703413e 4709@end deffn
4af2447e 4710
aa4ed923
AK
4711@node Various Services
4712@subsubsection Various Services
4713
4714The @code{(gnu services lirc)} module provides the following service.
4715
4716@deffn {Monadic Procedure} lirc-service [#:lirc lirc] @
4717 [#:device #f] [#:driver #f] [#:config-file #f] @
4718 [#:extra-options '()]
4719Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
4720decodes infrared signals from remote controls.
4721
4722Optionally, @var{device}, @var{driver} and @var{config-file}
4723(configuration file name) may be specified. See @command{lircd} manual
4724for details.
4725
4726Finally, @var{extra-options} is a list of additional command-line options
4727passed to @command{lircd}.
4728@end deffn
4729
0ae8c15a
LC
4730@node Setuid Programs
4731@subsection Setuid Programs
4732
4733@cindex setuid programs
4734Some programs need to run with ``root'' privileges, even when they are
4735launched by unprivileged users. A notorious example is the
4736@command{passwd} programs, which can users can run to change their
4737password, and which requires write access to the @file{/etc/passwd} and
4738@file{/etc/shadow} files---something normally restricted to root, for
4739obvious security reasons. To address that, these executables are
4740@dfn{setuid-root}, meaning that they always run with root privileges
4741(@pxref{How Change Persona,,, libc, The GNU C Library Reference Manual},
4742for more info about the setuid mechanisms.)
4743
4744The store itself @emph{cannot} contain setuid programs: that would be a
4745security issue since any user on the system can write derivations that
4746populate the store (@pxref{The Store}). Thus, a different mechanism is
4747used: instead of changing the setuid bit directly on files that are in
4748the store, we let the system administrator @emph{declare} which programs
4749should be setuid root.
4750
4751The @code{setuid-programs} field of an @code{operating-system}
4752declaration contains a list of G-expressions denoting the names of
4753programs to be setuid-root (@pxref{Using the Configuration System}).
4754For instance, the @command{passwd} program, which is part of the Shadow
4755package, can be designated by this G-expression (@pxref{G-Expressions}):
4756
4757@example
4758#~(string-append #$shadow "/bin/passwd")
4759@end example
4760
4761A default set of setuid programs is defined by the
4762@code{%setuid-programs} variable of the @code{(gnu system)} module.
4763
4764@defvr {Scheme Variable} %setuid-programs
4765A list of G-expressions denoting common programs that are setuid-root.
4766
4767The list includes commands such as @command{passwd}, @command{ping},
4768@command{su}, and @command{sudo}.
4769@end defvr
4770
4771Under the hood, the actual setuid programs are created in the
4772@file{/run/setuid-programs} directory at system activation time. The
4773files in this directory refer to the ``real'' binaries, which are in the
4774store.
4775
996ed739
LC
4776@node Name Service Switch
4777@subsection Name Service Switch
4778
4779@cindex name service switch
4780@cindex NSS
4781The @code{(gnu system nss)} module provides bindings to the
4782configuration file of libc's @dfn{name service switch} or @dfn{NSS}
4783(@pxref{NSS Configuration File,,, libc, The GNU C Library Reference
4784Manual}). In a nutshell, the NSS is a mechanism that allows libc to be
4785extended with new ``name'' lookup methods for system databases, which
4786includes host names, service names, user accounts, and more (@pxref{Name
4787Service Switch, System Databases and Name Service Switch,, libc, The GNU
4788C Library Reference Manual}).
4789
4790The NSS configuration specifies, for each system database, which lookup
4791method is to be used, and how the various methods are chained
4792together---for instance, under which circumstances NSS should try the
4793next method in the list. The NSS configuration is given in the
4794@code{name-service-switch} field of @code{operating-system} declarations
4795(@pxref{operating-system Reference, @code{name-service-switch}}).
4796
4797@c See <http://0pointer.de/lennart/projects/nss-mdns/>.
4798As an example, the declaration below configures the NSS to use the
4799@code{nss-mdns} back-end for host name lookups:
4800
4801@example
4802(name-service-switch
4803 (hosts (list %files ;first, check /etc/hosts
4804
4805 ;; If the above did not succeed, try
4806 ;; with 'mdns_minimal'.
4807 (name-service
4808 (name "mdns_minimal")
4809
4810 ;; 'mdns_minimal' is authoritative for
4811 ;; '.local'. When it returns "not found",
4812 ;; no need to try the next methods.
4813 (reaction (lookup-specification
4814 (not-found => return))))
4815
4816 ;; Then fall back to DNS.
4817 (name-service
4818 (name "dns"))
4819
4820 ;; Finally, try with the "full" 'mdns'.
4821 (name-service
4822 (name "mdns")))))
4823@end example
4824
4825The reference for name service switch configuration is given below. It
4826is a direct mapping of the C library's configuration file format, so
4827please refer to the C library manual for more information (@pxref{NSS
4828Configuration File,,, libc, The GNU C Library Reference Manual}).
4829Compared to libc's NSS configuration file format, it has the advantage
4830not only of adding this warm parenthetic feel that we like, but also
4831static checks: you'll know about syntax errors and typos as soon as you
4832run @command{guix system}.
4833
4834@defvr {Scheme Variable} %default-nss
4835This is the default name service switch configuration, a
4836@code{name-service-switch} object.
4837@end defvr
4838
4839@deftp {Data Type} name-service-switch
4840
4841This is the data type representation the configuration of libc's name
4842service switch (NSS). Each field below represents one of the supported
4843system databases.
4844
4845@table @code
4846@item aliases
4847@itemx ethers
4848@itemx group
4849@itemx gshadow
4850@itemx hosts
4851@itemx initgroups
4852@itemx netgroup
4853@itemx networks
4854@itemx password
4855@itemx public-key
4856@itemx rpc
4857@itemx services
4858@itemx shadow
4859The system databases handled by the NSS. Each of these fields must be a
4860list of @code{<name-service>} objects (see below.)
4861@end table
4862@end deftp
4863
4864@deftp {Data Type} name-service
4865
4866This is the data type representing an actual name service and the
4867associated lookup action.
4868
4869@table @code
4870@item name
4871A string denoting the name service (@pxref{Services in the NSS
4872configuration,,, libc, The GNU C Library Reference Manual}).
4873
4aee6e60
LC
4874Note that name services listed here must be visible to nscd. This is
4875achieved by passing the @code{#:name-services} argument to
4876@code{nscd-service} the list of packages providing the needed name
4877services (@pxref{Base Services, @code{nscd-service}}).
4878
996ed739
LC
4879@item reaction
4880An action specified using the @code{lookup-specification} macro
4881(@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
4882Reference Manual}). For example:
4883
4884@example
4885(lookup-specification (unavailable => continue)
4886 (success => return))
4887@end example
4888@end table
4889@end deftp
0ae8c15a 4890
fd1b1fa2
LC
4891@node Initial RAM Disk
4892@subsection Initial RAM Disk
4893
4894@cindex initial RAM disk (initrd)
4895@cindex initrd (initial RAM disk)
4896For bootstrapping purposes, the Linux-Libre kernel is passed an
4897@dfn{initial RAM disk}, or @dfn{initrd}. An initrd contains a temporary
4898root file system, as well as an initialization script. The latter is
4899responsible for mounting the real root file system, and for loading any
4900kernel modules that may be needed to achieve that.
4901
4902The @code{initrd} field of an @code{operating-system} declaration allows
4903you to specify which initrd you would like to use. The @code{(gnu
4904system linux-initrd)} module provides two ways to build an initrd: the
4905high-level @code{base-initrd} procedure, and the low-level
4906@code{expression->initrd} procedure.
4907
4908The @code{base-initrd} procedure is intended to cover most common uses.
4909For example, if you want to add a bunch of kernel modules to be loaded
4910at boot time, you can define the @code{initrd} field of the operating
4911system declaration like this:
4912
4913@example
52ac153e 4914(initrd (lambda (file-systems . rest)
027981d6
LC
4915 ;; Create a standard initrd that has modules "foo.ko"
4916 ;; and "bar.ko", as well as their dependencies, in
4917 ;; addition to the modules available by default.
52ac153e 4918 (apply base-initrd file-systems
027981d6 4919 #:extra-modules '("foo" "bar")
52ac153e 4920 rest)))
fd1b1fa2
LC
4921@end example
4922
52ac153e
LC
4923The @code{base-initrd} procedure also handles common use cases that
4924involves using the system as a QEMU guest, or as a ``live'' system whose
4925root file system is volatile.
fd1b1fa2
LC
4926
4927@deffn {Monadic Procedure} base-initrd @var{file-systems} @
4928 [#:qemu-networking? #f] [#:virtio? #f] [#:volatile-root? #f] @
52ac153e 4929 [#:extra-modules '()] [#:mapped-devices '()]
fd1b1fa2
LC
4930Return a monadic derivation that builds a generic initrd. @var{file-systems} is
4931a list of file-systems to be mounted by the initrd, possibly in addition to
4932the root file system specified on the kernel command line via @code{--root}.
52ac153e
LC
4933@var{mapped-devices} is a list of device mappings to realize before
4934@var{file-systems} are mounted (@pxref{Mapped Devices}).
fd1b1fa2
LC
4935
4936When @var{qemu-networking?} is true, set up networking with the standard QEMU
4937parameters. When @var{virtio?} is true, load additional modules so the initrd can
4938be used as a QEMU guest with para-virtualized I/O drivers.
4939
4940When @var{volatile-root?} is true, the root file system is writable but any changes
4941to it are lost.
4942
4943The initrd is automatically populated with all the kernel modules necessary
4944for @var{file-systems} and for the given options. However, additional kernel
4945modules can be listed in @var{extra-modules}. They will be added to the initrd, and
4946loaded at boot time in the order in which they appear.
4947@end deffn
4948
4949Needless to say, the initrds we produce and use embed a
4950statically-linked Guile, and the initialization program is a Guile
4951program. That gives a lot of flexibility. The
4952@code{expression->initrd} procedure builds such an initrd, given the
4953program to run in that initrd.
4954
4955@deffn {Monadic Procedure} expression->initrd @var{exp} @
4956 [#:guile %guile-static-stripped] [#:name "guile-initrd"] @
42d10464 4957 [#:modules '()]
fd1b1fa2
LC
4958Return a derivation that builds a Linux initrd (a gzipped cpio archive)
4959containing @var{guile} and that evaluates @var{exp}, a G-expression,
df650fa8
LC
4960upon booting. All the derivations referenced by @var{exp} are
4961automatically copied to the initrd.
fd1b1fa2 4962
42d10464
LC
4963@var{modules} is a list of Guile module names to be embedded in the
4964initrd.
fd1b1fa2
LC
4965@end deffn
4966
88faf933
LC
4967@node GRUB Configuration
4968@subsection GRUB Configuration
4969
4970@cindex GRUB
4971@cindex boot loader
4972
4973The operating system uses GNU@tie{}GRUB as its boot loader
4974(@pxref{Overview, overview of GRUB,, grub, GNU GRUB Manual}). It is
4975configured using @code{grub-configuration} declarations. This data type
4976is exported by the @code{(gnu system grub)} module, and described below.
4977
4978@deftp {Data Type} grub-configuration
4979The type of a GRUB configuration declaration.
4980
4981@table @asis
4982
4983@item @code{device}
4984This is a string denoting the boot device. It must be a device name
4985understood by the @command{grub-install} command, such as
4986@code{/dev/sda} or @code{(hd0)} (@pxref{Invoking grub-install,,, grub,
4987GNU GRUB Manual}).
4988
4989@item @code{menu-entries} (default: @code{()})
4990A possibly empty list of @code{menu-entry} objects (see below), denoting
4991entries to appear in the GRUB boot menu, in addition to the current
4992system entry and the entry pointing to previous system generations.
4993
4994@item @code{default-entry} (default: @code{0})
4995The index of the default boot menu entry. Index 0 is for the current
4996system's entry.
4997
4998@item @code{timeout} (default: @code{5})
4999The number of seconds to wait for keyboard input before booting. Set to
50000 to boot immediately, and to -1 to wait indefinitely.
5001
5002@item @code{theme} (default: @var{%default-theme})
5003The @code{grub-theme} object describing the theme to use.
5004@end table
5005
5006@end deftp
5007
5008Should you want to list additional boot menu entries @i{via} the
5009@code{menu-entries} field above, you will need to create them with the
5010@code{menu-entry} form:
5011
5012@deftp {Data Type} menu-entry
5013The type of an entry in the GRUB boot menu.
5014
5015@table @asis
5016
5017@item @code{label}
35ed9306 5018The label to show in the menu---e.g., @code{"GNU"}.
88faf933
LC
5019
5020@item @code{linux}
5021The Linux kernel to boot.
5022
5023@item @code{linux-arguments} (default: @code{()})
5024The list of extra Linux kernel command-line arguments---e.g.,
5025@code{("console=ttyS0")}.
5026
5027@item @code{initrd}
5028A G-Expression or string denoting the file name of the initial RAM disk
5029to use (@pxref{G-Expressions}).
5030
5031@end table
5032@end deftp
5033
5034@c FIXME: Write documentation once it's stable.
5035Themes are created using the @code{grub-theme} form, which is not
5036documented yet.
5037
5038@defvr {Scheme Variable} %default-theme
5039This is the default GRUB theme used by the operating system, with a
5040fancy background image displaying the GNU and Guix logos.
5041@end defvr
5042
5043
cf4a9129
LC
5044@node Invoking guix system
5045@subsection Invoking @code{guix system}
0918e64a 5046
cf4a9129
LC
5047Once you have written an operating system declaration, as seen in the
5048previous section, it can be @dfn{instantiated} using the @command{guix
5049system} command. The synopsis is:
4af2447e 5050
cf4a9129
LC
5051@example
5052guix system @var{options}@dots{} @var{action} @var{file}
5053@end example
4af2447e 5054
cf4a9129
LC
5055@var{file} must be the name of a file containing an
5056@code{operating-system} declaration. @var{action} specifies how the
5057operating system is instantiate. Currently the following values are
5058supported:
4af2447e 5059
cf4a9129
LC
5060@table @code
5061@item reconfigure
5062Build the operating system described in @var{file}, activate it, and
5063switch to it@footnote{This action is usable only on systems already
5064running GNU.}.
4af2447e 5065
cf4a9129
LC
5066This effects all the configuration specified in @var{file}: user
5067accounts, system services, global package list, setuid programs, etc.
4af2447e 5068
cf4a9129
LC
5069It also adds a GRUB menu entry for the new OS configuration, and moves
5070entries for older configurations to a submenu---unless
5071@option{--no-grub} is passed.
4af2447e 5072
bf2479c7
LC
5073@c The paragraph below refers to the problem discussed at
5074@c <http://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
5075It is highly recommended to run @command{guix pull} once before you run
5076@command{guix system reconfigure} for the first time (@pxref{Invoking
5077guix pull}). Failing to do that you would see an older version of Guix
5078once @command{reconfigure} has completed.
5079
cf4a9129
LC
5080@item build
5081Build the operating system's derivation, which includes all the
5082configuration files and programs needed to boot and run the system.
5083This action does not actually install anything.
113daf62 5084
cf4a9129
LC
5085@item init
5086Populate the given directory with all the files necessary to run the
5087operating system specified in @var{file}. This is useful for first-time
3ca2731c 5088installations of GSD. For instance:
113daf62
LC
5089
5090@example
cf4a9129 5091guix system init my-os-config.scm /mnt
113daf62
LC
5092@end example
5093
cf4a9129
LC
5094copies to @file{/mnt} all the store items required by the configuration
5095specified in @file{my-os-config.scm}. This includes configuration
5096files, packages, and so on. It also creates other essential files
5097needed for the system to operate correctly---e.g., the @file{/etc},
5098@file{/var}, and @file{/run} directories, and the @file{/bin/sh} file.
113daf62 5099
cf4a9129
LC
5100This command also installs GRUB on the device specified in
5101@file{my-os-config}, unless the @option{--no-grub} option was passed.
113daf62 5102
cf4a9129
LC
5103@item vm
5104@cindex virtual machine
0276f697 5105@cindex VM
cf4a9129
LC
5106Build a virtual machine that contain the operating system declared in
5107@var{file}, and return a script to run that virtual machine (VM).
810568b3 5108Arguments given to the script are passed as is to QEMU.
113daf62 5109
cf4a9129 5110The VM shares its store with the host system.
113daf62 5111
0276f697
LC
5112Additional file systems can be shared between the host and the VM using
5113the @code{--share} and @code{--expose} command-line options: the former
5114specifies a directory to be shared with write access, while the latter
5115provides read-only access to the shared directory.
5116
5117The example below creates a VM in which the user's home directory is
5118accessible read-only, and where the @file{/exchange} directory is a
5119read-write mapping of the host's @file{$HOME/tmp}:
5120
5121@example
5122guix system vm my-config.scm \
5123 --expose=$HOME --share=$HOME/tmp=/exchange
5124@end example
5125
6aa260af
LC
5126On GNU/Linux, the default is to boot directly to the kernel; this has
5127the advantage of requiring only a very tiny root disk image since the
5128host's store can then be mounted.
5129
5130The @code{--full-boot} option forces a complete boot sequence, starting
5131with the bootloader. This requires more disk space since a root image
5132containing at least the kernel, initrd, and bootloader data files must
5133be created. The @code{--image-size} option can be used to specify the
5134image's size.
ab11f0be 5135
cf4a9129
LC
5136@item vm-image
5137@itemx disk-image
5138Return a virtual machine or disk image of the operating system declared
5139in @var{file} that stands alone. Use the @option{--image-size} option
5140to specify the size of the image.
113daf62 5141
cf4a9129
LC
5142When using @code{vm-image}, the returned image is in qcow2 format, which
5143the QEMU emulator can efficiently use.
113daf62 5144
cf4a9129
LC
5145When using @code{disk-image}, a raw disk image is produced; it can be
5146copied as is to a USB stick, for instance. Assuming @code{/dev/sdc} is
5147the device corresponding to a USB stick, one can copy the image on it
5148using the following command:
113daf62 5149
cf4a9129
LC
5150@example
5151# dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
5152@end example
113daf62 5153
cf4a9129 5154@end table
113daf62 5155
cf4a9129
LC
5156@var{options} can contain any of the common build options provided by
5157@command{guix build} (@pxref{Invoking guix build}). In addition,
5158@var{options} can contain one of the following:
113daf62 5159
cf4a9129
LC
5160@table @option
5161@item --system=@var{system}
5162@itemx -s @var{system}
5163Attempt to build for @var{system} instead of the host's system type.
5164This works as per @command{guix build} (@pxref{Invoking guix build}).
113daf62 5165
cf4a9129
LC
5166@item --image-size=@var{size}
5167For the @code{vm-image} and @code{disk-image} actions, create an image
5168of the given @var{size}. @var{size} may be a number of bytes, or it may
4a44d7bb
LC
5169include a unit as a suffix (@pxref{Block size, size specifications,,
5170coreutils, GNU Coreutils}).
113daf62 5171@end table
113daf62 5172
cf4a9129
LC
5173Note that all the actions above, except @code{build} and @code{init},
5174rely on KVM support in the Linux-Libre kernel. Specifically, the
5175machine should have hardware virtualization support, the corresponding
5176KVM kernel module should be loaded, and the @file{/dev/kvm} device node
5177must exist and be readable and writable by the user and by the daemon's
5178build users.
8451a568 5179
cf4a9129
LC
5180@node Defining Services
5181@subsection Defining Services
8451a568 5182
cf4a9129
LC
5183The @code{(gnu services @dots{})} modules define several procedures that allow
5184users to declare the operating system's services (@pxref{Using the
5185Configuration System}). These procedures are @emph{monadic
5186procedures}---i.e., procedures that return a monadic value in the store
5187monad (@pxref{The Store Monad}). For examples of such procedures,
5188@xref{Services}.
8451a568 5189
cf4a9129
LC
5190@cindex service definition
5191The monadic value returned by those procedures is a @dfn{service
5192definition}---a structure as returned by the @code{service} form.
5193Service definitions specifies the inputs the service depends on, and an
5194expression to start and stop the service. Behind the scenes, service
5195definitions are ``translated'' into the form suitable for the
5196configuration file of dmd, the init system (@pxref{Services,,, dmd, GNU
5197dmd Manual}).
8451a568 5198
cf4a9129
LC
5199As an example, here is what the @code{nscd-service} procedure looks
5200like:
8451a568 5201
cf4a9129
LC
5202@lisp
5203(define (nscd-service)
5204 (with-monad %store-monad
5205 (return (service
5206 (documentation "Run libc's name service cache daemon.")
5207 (provision '(nscd))
5208 (activate #~(begin
5209 (use-modules (guix build utils))
5210 (mkdir-p "/var/run/nscd")))
5211 (start #~(make-forkexec-constructor
5212 (string-append #$glibc "/sbin/nscd")
5213 "-f" "/dev/null" "--foreground"))
5214 (stop #~(make-kill-destructor))
5215 (respawn? #f)))))
5216@end lisp
8451a568 5217
cf4a9129
LC
5218@noindent
5219The @code{activate}, @code{start}, and @code{stop} fields are G-expressions
5220(@pxref{G-Expressions}). The @code{activate} field contains a script to
5221run at ``activation'' time; it makes sure that the @file{/var/run/nscd}
5222directory exists before @command{nscd} is started.
8451a568 5223
cf4a9129
LC
5224The @code{start} and @code{stop} fields refer to dmd's facilities to
5225start and stop processes (@pxref{Service De- and Constructors,,, dmd,
5226GNU dmd Manual}). The @code{provision} field specifies the name under
5227which this service is known to dmd, and @code{documentation} specifies
5228on-line documentation. Thus, the commands @command{deco start ncsd},
5229@command{deco stop nscd}, and @command{deco doc nscd} will do what you
5230would expect (@pxref{Invoking deco,,, dmd, GNU dmd Manual}).
8451a568 5231
8451a568 5232
cf4a9129
LC
5233@node Installing Debugging Files
5234@section Installing Debugging Files
8451a568 5235
cf4a9129
LC
5236@cindex debugging files
5237Program binaries, as produced by the GCC compilers for instance, are
5238typically written in the ELF format, with a section containing
5239@dfn{debugging information}. Debugging information is what allows the
5240debugger, GDB, to map binary code to source code; it is required to
5241debug a compiled program in good conditions.
8451a568 5242
cf4a9129
LC
5243The problem with debugging information is that is takes up a fair amount
5244of disk space. For example, debugging information for the GNU C Library
5245weighs in at more than 60 MiB. Thus, as a user, keeping all the
5246debugging info of all the installed programs is usually not an option.
5247Yet, space savings should not come at the cost of an impediment to
5248debugging---especially in the GNU system, which should make it easier
5249for users to exert their computing freedom (@pxref{GNU Distribution}).
8451a568 5250
cf4a9129
LC
5251Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a
5252mechanism that allows users to get the best of both worlds: debugging
5253information can be stripped from the binaries and stored in separate
5254files. GDB is then able to load debugging information from those files,
5255when they are available (@pxref{Separate Debug Files,,, gdb, Debugging
5256with GDB}).
8451a568 5257
cf4a9129
LC
5258The GNU distribution takes advantage of this by storing debugging
5259information in the @code{lib/debug} sub-directory of a separate package
5260output unimaginatively called @code{debug} (@pxref{Packages with
5261Multiple Outputs}). Users can choose to install the @code{debug} output
5262of a package when they need it. For instance, the following command
5263installs the debugging information for the GNU C Library and for GNU
5264Guile:
8451a568
LC
5265
5266@example
cf4a9129 5267guix package -i glibc:debug guile:debug
8451a568
LC
5268@end example
5269
cf4a9129
LC
5270GDB must then be told to look for debug files in the user's profile, by
5271setting the @code{debug-file-directory} variable (consider setting it
5272from the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with
5273GDB}):
8451a568 5274
cf4a9129
LC
5275@example
5276(gdb) set debug-file-directory ~/.guix-profile/lib/debug
5277@end example
8451a568 5278
cf4a9129
LC
5279From there on, GDB will pick up debugging information from the
5280@code{.debug} files under @file{~/.guix-profile/lib/debug}.
8451a568 5281
cf4a9129
LC
5282In addition, you will most likely want GDB to be able to show the source
5283code being debugged. To do that, you will have to unpack the source
5284code of the package of interest (obtained with @code{guix build
5285--source}, @pxref{Invoking guix build}), and to point GDB to that source
5286directory using the @code{directory} command (@pxref{Source Path,
5287@code{directory},, gdb, Debugging with GDB}).
8451a568 5288
cf4a9129
LC
5289@c XXX: keep me up-to-date
5290The @code{debug} output mechanism in Guix is implemented by the
5291@code{gnu-build-system} (@pxref{Build Systems}). Currently, it is
5292opt-in---debugging information is available only for those packages
5293whose definition explicitly declares a @code{debug} output. This may be
5294changed to opt-out in the future, if our build farm servers can handle
5295the load. To check whether a package has a @code{debug} output, use
5296@command{guix package --list-available} (@pxref{Invoking guix package}).
8451a568 5297
8451a568 5298
05962f29
LC
5299@node Security Updates
5300@section Security Updates
5301
843858b8
LC
5302@quotation Note
5303As of version @value{VERSION}, the feature described in this section is
5304experimental.
5305@end quotation
05962f29
LC
5306
5307@cindex security updates
5308Occasionally, important security vulnerabilities are discovered in core
5309software packages and must be patched. Guix follows a functional
5310package management discipline (@pxref{Introduction}), which implies
5311that, when a package is changed, @emph{every package that depends on it}
5312must be rebuilt. This can significantly slow down the deployment of
5313fixes in core packages such as libc or Bash, since basically the whole
5314distribution would need to be rebuilt. Using pre-built binaries helps
5315(@pxref{Substitutes}), but deployment may still take more time than
5316desired.
5317
5318@cindex grafts
5319To address that, Guix implements @dfn{grafts}, a mechanism that allows
5320for fast deployment of critical updates without the costs associated
5321with a whole-distribution rebuild. The idea is to rebuild only the
5322package that needs to be patched, and then to ``graft'' it onto packages
5323explicitly installed by the user and that were previously referring to
5324the original package. The cost of grafting is typically very low, and
5325order of magnitudes lower than a full rebuild of the dependency chain.
5326
5327@cindex replacements of packages, for grafts
5328For instance, suppose a security update needs to be applied to Bash.
5329Guix developers will provide a package definition for the ``fixed''
5330Bash, say @var{bash-fixed}, in the usual way (@pxref{Defining
5331Packages}). Then, the original package definition is augmented with a
5332@code{replacement} field pointing to the package containing the bug fix:
5333
5334@example
5335(define bash
5336 (package
5337 (name "bash")
5338 ;; @dots{}
5339 (replacement bash-fixed)))
5340@end example
5341
5342From there on, any package depending directly or indirectly on Bash that
5343is installed will automatically be ``rewritten'' to refer to
5344@var{bash-fixed} instead of @var{bash}. This grafting process takes
5345time proportional to the size of the package, but expect less than a
5346minute for an ``average'' package on a recent machine.
5347
5348Currently, the graft and the package it replaces (@var{bash-fixed} and
5349@var{bash} in the example above) must have the exact same @code{name}
5350and @code{version} fields. This restriction mostly comes from the fact
5351that grafting works by patching files, including binary files, directly.
5352Other restrictions may apply: for instance, when adding a graft to a
5353package providing a shared library, the original shared library and its
5354replacement must have the same @code{SONAME} and be binary-compatible.
5355
5356
cf4a9129
LC
5357@node Package Modules
5358@section Package Modules
8451a568 5359
cf4a9129
LC
5360From a programming viewpoint, the package definitions of the
5361GNU distribution are provided by Guile modules in the @code{(gnu packages
5362@dots{})} name space@footnote{Note that packages under the @code{(gnu
5363packages @dots{})} module name space are not necessarily ``GNU
5364packages''. This module naming scheme follows the usual Guile module
5365naming convention: @code{gnu} means that these modules are distributed
5366as part of the GNU system, and @code{packages} identifies modules that
5367define packages.} (@pxref{Modules, Guile modules,, guile, GNU Guile
5368Reference Manual}). For instance, the @code{(gnu packages emacs)}
5369module exports a variable named @code{emacs}, which is bound to a
5370@code{<package>} object (@pxref{Defining Packages}).
113daf62 5371
300868ba 5372The @code{(gnu packages @dots{})} module name space is
cf4a9129
LC
5373automatically scanned for packages by the command-line tools. For
5374instance, when running @code{guix package -i emacs}, all the @code{(gnu
5375packages @dots{})} modules are scanned until one that exports a package
5376object whose name is @code{emacs} is found. This package search
5377facility is implemented in the @code{(gnu packages)} module.
113daf62 5378
300868ba 5379@cindex customization, of packages
8689901f 5380@cindex package module search path
cf4a9129 5381Users can store package definitions in modules with different
300868ba
LC
5382names---e.g., @code{(my-packages emacs)}. These package definitions
5383will not be visible by default. Thus, users can invoke commands such as
5384@command{guix package} and @command{guix build} have to be used with the
5385@code{-e} option so that they know where to find the package, or use the
5386@code{-L} option of these commands to make those modules visible
8689901f
LC
5387(@pxref{Invoking guix build, @code{--load-path}}), or define the
5388@code{GUIX_PACKAGE_PATH} environment variable. This environment
5389variable makes it easy to extend or customize the distribution and is
5390honored by all the user interfaces.
5391
5392@defvr {Environment Variable} GUIX_PACKAGE_PATH
5393This is a colon-separated list of directories to search for package
5394modules. Directories listed in this variable take precedence over the
5395distribution's own modules.
5396@end defvr
ef5dd60a 5397
cf4a9129
LC
5398The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}:
5399each package is built based solely on other packages in the
5400distribution. The root of this dependency graph is a small set of
5401@dfn{bootstrap binaries}, provided by the @code{(gnu packages
5402bootstrap)} module. For more information on bootstrapping,
081145cf 5403@pxref{Bootstrapping}.
ef5dd60a 5404
cf4a9129
LC
5405@node Packaging Guidelines
5406@section Packaging Guidelines
ef5dd60a 5407
cf4a9129
LC
5408The GNU distribution is nascent and may well lack some of your favorite
5409packages. This section describes how you can help make the distribution
5410grow. @xref{Contributing}, for additional information on how you can
5411help.
ef5dd60a 5412
cf4a9129
LC
5413Free software packages are usually distributed in the form of
5414@dfn{source code tarballs}---typically @file{tar.gz} files that contain
5415all the source files. Adding a package to the distribution means
5416essentially two things: adding a @dfn{recipe} that describes how to
5417build the package, including a list of other packages required to build
5418it, and adding @dfn{package meta-data} along with that recipe, such as a
5419description and licensing information.
ef5dd60a 5420
cf4a9129
LC
5421In Guix all this information is embodied in @dfn{package definitions}.
5422Package definitions provide a high-level view of the package. They are
5423written using the syntax of the Scheme programming language; in fact,
5424for each package we define a variable bound to the package definition,
5425and export that variable from a module (@pxref{Package Modules}).
5426However, in-depth Scheme knowledge is @emph{not} a prerequisite for
5427creating packages. For more information on package definitions,
081145cf 5428@pxref{Defining Packages}.
ef5dd60a 5429
cf4a9129
LC
5430Once a package definition is in place, stored in a file in the Guix
5431source tree, it can be tested using the @command{guix build} command
5432(@pxref{Invoking guix build}). For example, assuming the new package is
5433called @code{gnew}, you may run this command from the Guix build tree:
ef5dd60a
LC
5434
5435@example
cf4a9129 5436./pre-inst-env guix build gnew --keep-failed
ef5dd60a 5437@end example
ef5dd60a 5438
cf4a9129
LC
5439Using @code{--keep-failed} makes it easier to debug build failures since
5440it provides access to the failed build tree. Another useful
5441command-line option when debugging is @code{--log-file}, to access the
5442build log.
ef5dd60a 5443
cf4a9129
LC
5444If the package is unknown to the @command{guix} command, it may be that
5445the source file contains a syntax error, or lacks a @code{define-public}
5446clause to export the package variable. To figure it out, you may load
5447the module from Guile to get more information about the actual error:
ef5dd60a 5448
cf4a9129
LC
5449@example
5450./pre-inst-env guile -c '(use-modules (gnu packages gnew))'
5451@end example
ef5dd60a 5452
cf4a9129
LC
5453Once your package builds correctly, please send us a patch
5454(@pxref{Contributing}). Well, if you need help, we will be happy to
5455help you too. Once the patch is committed in the Guix repository, the
5456new package automatically gets built on the supported platforms by
2b1cee21 5457@url{http://hydra.gnu.org/jobset/gnu/master, our continuous integration
cf4a9129 5458system}.
ef5dd60a 5459
cf4a9129
LC
5460@cindex substituter
5461Users can obtain the new package definition simply by running
5462@command{guix pull} (@pxref{Invoking guix pull}). When
5463@code{hydra.gnu.org} is done building the package, installing the
5464package automatically downloads binaries from there
5465(@pxref{Substitutes}). The only place where human intervention is
5466needed is to review and apply the patch.
ef5dd60a 5467
ef5dd60a 5468
cf4a9129 5469@menu
ec0339cd
LC
5470* Software Freedom:: What may go into the distribution.
5471* Package Naming:: What's in a name?
5472* Version Numbers:: When the name is not enough.
5473* Python Modules:: Taming the snake.
5474* Perl Modules:: Little pearls.
5475* Fonts:: Fond of fonts.
cf4a9129 5476@end menu
ef5dd60a 5477
cf4a9129
LC
5478@node Software Freedom
5479@subsection Software Freedom
ef5dd60a 5480
cf4a9129 5481@c Adapted from http://www.gnu.org/philosophy/philosophy.html.
c11a6eb1 5482
cf4a9129
LC
5483The GNU operating system has been developed so that users can have
5484freedom in their computing. GNU is @dfn{free software}, meaning that
5485users have the @url{http://www.gnu.org/philosophy/free-sw.html,four
5486essential freedoms}: to run the program, to study and change the program
5487in source code form, to redistribute exact copies, and to distribute
5488modified versions. Packages found in the GNU distribution provide only
5489software that conveys these four freedoms.
c11a6eb1 5490
cf4a9129
LC
5491In addition, the GNU distribution follow the
5492@url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free
5493software distribution guidelines}. Among other things, these guidelines
5494reject non-free firmware, recommendations of non-free software, and
5495discuss ways to deal with trademarks and patents.
ef5dd60a 5496
cf4a9129
LC
5497Some packages contain a small and optional subset that violates the
5498above guidelines, for instance because this subset is itself non-free
5499code. When that happens, the offending items are removed with
5500appropriate patches or code snippets in the package definition's
5501@code{origin} form (@pxref{Defining Packages}). That way, @code{guix
5502build --source} returns the ``freed'' source rather than the unmodified
5503upstream source.
ef5dd60a 5504
ef5dd60a 5505
cf4a9129
LC
5506@node Package Naming
5507@subsection Package Naming
ef5dd60a 5508
cf4a9129
LC
5509A package has actually two names associated with it:
5510First, there is the name of the @emph{Scheme variable}, the one following
5511@code{define-public}. By this name, the package can be made known in the
5512Scheme code, for instance as input to another package. Second, there is
5513the string in the @code{name} field of a package definition. This name
5514is used by package management commands such as
5515@command{guix package} and @command{guix build}.
ef5dd60a 5516
cf4a9129
LC
5517Both are usually the same and correspond to the lowercase conversion of
5518the project name chosen upstream, with underscores replaced with
5519hyphens. For instance, GNUnet is available as @code{gnunet}, and
5520SDL_net as @code{sdl-net}.
927097ef 5521
cf4a9129 5522We do not add @code{lib} prefixes for library packages, unless these are
081145cf 5523already part of the official project name. But @pxref{Python
cf4a9129
LC
5524Modules} and @ref{Perl Modules} for special rules concerning modules for
5525the Python and Perl languages.
927097ef 5526
1b366ee4 5527Font package names are handled differently, @pxref{Fonts}.
7fec52b7 5528
ef5dd60a 5529
cf4a9129
LC
5530@node Version Numbers
5531@subsection Version Numbers
ef5dd60a 5532
cf4a9129
LC
5533We usually package only the latest version of a given free software
5534project. But sometimes, for instance for incompatible library versions,
5535two (or more) versions of the same package are needed. These require
5536different Scheme variable names. We use the name as defined
5537in @ref{Package Naming}
5538for the most recent version; previous versions use the same name, suffixed
5539by @code{-} and the smallest prefix of the version number that may
5540distinguish the two versions.
ef5dd60a 5541
cf4a9129
LC
5542The name inside the package definition is the same for all versions of a
5543package and does not contain any version number.
ef5dd60a 5544
cf4a9129 5545For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as follows:
ef5dd60a 5546
cf4a9129
LC
5547@example
5548(define-public gtk+
5549 (package
5550 (name "gtk+")
5551 (version "3.9.12")
5552 ...))
5553(define-public gtk+-2
5554 (package
5555 (name "gtk+")
5556 (version "2.24.20")
5557 ...))
5558@end example
5559If we also wanted GTK+ 3.8.2, this would be packaged as
5560@example
5561(define-public gtk+-3.8
5562 (package
5563 (name "gtk+")
5564 (version "3.8.2")
5565 ...))
5566@end example
ef5dd60a 5567
ef5dd60a 5568
cf4a9129
LC
5569@node Python Modules
5570@subsection Python Modules
ef5dd60a 5571
cf4a9129
LC
5572We currently package Python 2 and Python 3, under the Scheme variable names
5573@code{python-2} and @code{python} as explained in @ref{Version Numbers}.
5574To avoid confusion and naming clashes with other programming languages, it
5575seems desirable that the name of a package for a Python module contains
5576the word @code{python}.
ef5dd60a 5577
cf4a9129
LC
5578Some modules are compatible with only one version of Python, others with both.
5579If the package Foo compiles only with Python 3, we name it
5580@code{python-foo}; if it compiles only with Python 2, we name it
5581@code{python2-foo}. If it is compatible with both versions, we create two
5582packages with the corresponding names.
ef5dd60a 5583
cf4a9129
LC
5584If a project already contains the word @code{python}, we drop this;
5585for instance, the module python-dateutil is packaged under the names
5586@code{python-dateutil} and @code{python2-dateutil}.
113daf62 5587
523e4896 5588
cf4a9129
LC
5589@node Perl Modules
5590@subsection Perl Modules
523e4896 5591
cf4a9129
LC
5592Perl programs standing for themselves are named as any other package,
5593using the lowercase upstream name.
5594For Perl packages containing a single class, we use the lowercase class name,
5595replace all occurrences of @code{::} by dashes and prepend the prefix
5596@code{perl-}.
5597So the class @code{XML::Parser} becomes @code{perl-xml-parser}.
5598Modules containing several classes keep their lowercase upstream name and
5599are also prepended by @code{perl-}. Such modules tend to have the word
5600@code{perl} somewhere in their name, which gets dropped in favor of the
5601prefix. For instance, @code{libwww-perl} becomes @code{perl-libwww}.
523e4896 5602
523e4896 5603
7fec52b7
AE
5604@node Fonts
5605@subsection Fonts
5606
5607For fonts that are in general not installed by a user for typesetting
5608purposes, or that are distributed as part of a larger software package,
5609we rely on the general packaging rules for software; for instance, this
5610applies to the fonts delivered as part of the X.Org system or fonts that
5611are part of TeX Live.
5612
5613To make it easier for a user to search for fonts, names for other packages
5614containing only fonts are constructed as follows, independently of the
5615upstream package name.
5616
5617The name of a package containing only one font family starts with
5618@code{font-}; it is followed by the foundry name and a dash @code{-}
5619if the foundry is known, and the font family name, in which spaces are
5620replaced by dashes (and as usual, all upper case letters are transformed
5621to lower case).
5622For example, the Gentium font family by SIL is packaged under the name
5623@code{font-sil-gentium}.
5624
5625For a package containing several font families, the name of the collection
5626is used in the place of the font family name.
5627For instance, the Liberation fonts consist of three families,
5628Liberation Sans, Liberation Serif and Liberation Mono.
5629These could be packaged separately under the names
5630@code{font-liberation-sans} and so on; but as they are distributed together
5631under a common name, we prefer to package them together as
5632@code{font-liberation}.
5633
5634In the case where several formats of the same font family or font collection
5635are packaged separately, a short form of the format, prepended by a dash,
5636is added to the package name. We use @code{-ttf} for TrueType fonts,
1b366ee4 5637@code{-otf} for OpenType fonts and @code{-type1} for PostScript Type 1
7fec52b7
AE
5638fonts.
5639
5640
b25937e3 5641
cf4a9129
LC
5642@node Bootstrapping
5643@section Bootstrapping
b25937e3 5644
cf4a9129 5645@c Adapted from the ELS 2013 paper.
b25937e3 5646
cf4a9129 5647@cindex bootstrapping
7889394e 5648
cf4a9129
LC
5649Bootstrapping in our context refers to how the distribution gets built
5650``from nothing''. Remember that the build environment of a derivation
5651contains nothing but its declared inputs (@pxref{Introduction}). So
5652there's an obvious chicken-and-egg problem: how does the first package
5653get built? How does the first compiler get compiled? Note that this is
5654a question of interest only to the curious hacker, not to the regular
5655user, so you can shamelessly skip this section if you consider yourself
5656a ``regular user''.
72b9d60d 5657
cf4a9129
LC
5658@cindex bootstrap binaries
5659The GNU system is primarily made of C code, with libc at its core. The
5660GNU build system itself assumes the availability of a Bourne shell and
5661command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
5662`grep'. Furthermore, build programs---programs that run
5663@code{./configure}, @code{make}, etc.---are written in Guile Scheme
5664(@pxref{Derivations}). Consequently, to be able to build anything at
5665all, from scratch, Guix relies on pre-built binaries of Guile, GCC,
5666Binutils, libc, and the other packages mentioned above---the
5667@dfn{bootstrap binaries}.
72b9d60d 5668
cf4a9129
LC
5669These bootstrap binaries are ``taken for granted'', though we can also
5670re-create them if needed (more on that later).
72b9d60d 5671
cf4a9129 5672@unnumberedsubsec Preparing to Use the Bootstrap Binaries
c79d54fe 5673
cf4a9129
LC
5674@c As of Emacs 24.3, Info-mode displays the image, but since it's a
5675@c large image, it's hard to scroll. Oh well.
5676@image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap derivations}
523e4896 5677
cf4a9129
LC
5678The figure above shows the very beginning of the dependency graph of the
5679distribution, corresponding to the package definitions of the @code{(gnu
5680packages bootstrap)} module. At this level of detail, things are
5681slightly complex. First, Guile itself consists of an ELF executable,
5682along with many source and compiled Scheme files that are dynamically
5683loaded when it runs. This gets stored in the @file{guile-2.0.7.tar.xz}
5684tarball shown in this graph. This tarball is part of Guix's ``source''
5685distribution, and gets inserted into the store with @code{add-to-store}
5686(@pxref{The Store}).
2e7b5cea 5687
cf4a9129
LC
5688But how do we write a derivation that unpacks this tarball and adds it
5689to the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
5690derivation---the first one that gets built---uses @code{bash} as its
5691builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
5692@code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar},
5693@file{xz}, and @file{mkdir} are statically-linked binaries, also part of
5694the Guix source distribution, whose sole purpose is to allow the Guile
5695tarball to be unpacked.
fb729425 5696
cf4a9129
LC
5697Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning
5698Guile that can be used to run subsequent build programs. Its first task
5699is to download tarballs containing the other pre-built binaries---this
5700is what the @code{.tar.xz.drv} derivations do. Guix modules such as
5701@code{ftp-client.scm} are used for this purpose. The
5702@code{module-import.drv} derivations import those modules in a directory
5703in the store, using the original layout. The
5704@code{module-import-compiled.drv} derivations compile those modules, and
5705write them in an output directory with the right layout. This
5706corresponds to the @code{#:modules} argument of
5707@code{build-expression->derivation} (@pxref{Derivations}).
fb729425 5708
cf4a9129
LC
5709Finally, the various tarballs are unpacked by the
5710derivations @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv},
5711etc., at which point we have a working C tool chain.
fb729425 5712
fb729425 5713
cf4a9129 5714@unnumberedsubsec Building the Build Tools
523e4896 5715
cf4a9129
LC
5716@c TODO: Add a package-level dependency graph generated from (gnu
5717@c packages base).
df2ce343 5718
cf4a9129
LC
5719Bootstrapping is complete when we have a full tool chain that does not
5720depend on the pre-built bootstrap tools discussed above. This
5721no-dependency requirement is verified by checking whether the files of
5722the final tool chain contain references to the @file{/gnu/store}
5723directories of the bootstrap inputs. The process that leads to this
5724``final'' tool chain is described by the package definitions found in
1f6f57df 5725the @code{(gnu packages commencement)} module.
df2ce343 5726
cf4a9129
LC
5727@c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
5728The first tool that gets built with the bootstrap binaries is
5729GNU Make, which is a prerequisite for all the following packages.
5730From there Findutils and Diffutils get built.
523e4896 5731
cf4a9129
LC
5732Then come the first-stage Binutils and GCC, built as pseudo cross
5733tools---i.e., with @code{--target} equal to @code{--host}. They are
5734used to build libc. Thanks to this cross-build trick, this libc is
5735guaranteed not to hold any reference to the initial tool chain.
4af2447e 5736
cf4a9129
LC
5737From there the final Binutils and GCC are built. GCC uses @code{ld}
5738from the final Binutils, and links programs against the just-built libc.
5739This tool chain is used to build the other packages used by Guix and by
5740the GNU Build System: Guile, Bash, Coreutils, etc.
4af2447e 5741
cf4a9129
LC
5742And voilà! At this point we have the complete set of build tools that
5743the GNU Build System expects. These are in the @code{%final-inputs}
dd164244
MW
5744variable of the @code{(gnu packages commencement)} module, and are
5745implicitly used by any package that uses @code{gnu-build-system}
1f6f57df 5746(@pxref{Build Systems, @code{gnu-build-system}}).
4af2447e 5747
4af2447e 5748
cf4a9129 5749@unnumberedsubsec Building the Bootstrap Binaries
4af2447e 5750
cf4a9129
LC
5751Because the final tool chain does not depend on the bootstrap binaries,
5752those rarely need to be updated. Nevertheless, it is useful to have an
5753automated way to produce them, should an update occur, and this is what
5754the @code{(gnu packages make-bootstrap)} module provides.
4af2447e 5755
cf4a9129
LC
5756The following command builds the tarballs containing the bootstrap
5757binaries (Guile, Binutils, GCC, libc, and a tarball containing a mixture
5758of Coreutils and other basic command-line tools):
4b2615e1 5759
cf4a9129
LC
5760@example
5761guix build bootstrap-tarballs
5762@end example
5763
5764The generated tarballs are those that should be referred to in the
5765@code{(gnu packages bootstrap)} module mentioned at the beginning of
5766this section.
5767
5768Still here? Then perhaps by now you've started to wonder: when do we
5769reach a fixed point? That is an interesting question! The answer is
5770unknown, but if you would like to investigate further (and have
5771significant computational and storage resources to do so), then let us
5772know.
5773
5774@node Porting
5775@section Porting to a New Platform
5776
5777As discussed above, the GNU distribution is self-contained, and
5778self-containment is achieved by relying on pre-built ``bootstrap
5779binaries'' (@pxref{Bootstrapping}). These binaries are specific to an
5780operating system kernel, CPU architecture, and application binary
5781interface (ABI). Thus, to port the distribution to a platform that is
5782not yet supported, one must build those bootstrap binaries, and update
5783the @code{(gnu packages bootstrap)} module to use them on that platform.
5784
5785Fortunately, Guix can @emph{cross compile} those bootstrap binaries.
5786When everything goes well, and assuming the GNU tool chain supports the
5787target platform, this can be as simple as running a command like this
5788one:
5789
5790@example
5791guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
5792@end example
5793
1c0c417d
LC
5794For this to work, the @code{glibc-dynamic-linker} procedure in
5795@code{(gnu packages bootstrap)} must be augmented to return the right
5796file name for libc's dynamic linker on that platform; likewise,
5797@code{system->linux-architecture} in @code{(gnu packages linux)} must be
5798taught about the new platform.
5799
cf4a9129 5800Once these are built, the @code{(gnu packages bootstrap)} module needs
1c0c417d
LC
5801to be updated to refer to these binaries on the target platform. That
5802is, the hashes and URLs of the bootstrap tarballs for the new platform
5803must be added alongside those of the currently supported platforms. The
5804bootstrap Guile tarball is treated specially: it is expected to be
5805available locally, and @file{gnu-system.am} has rules do download it for
5806the supported architectures; a rule for the new platform must be added
5807as well.
cf4a9129
LC
5808
5809In practice, there may be some complications. First, it may be that the
5810extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
5811above) is not recognized by all the GNU tools. Typically, glibc
5812recognizes some of these, whereas GCC uses an extra @code{--with-abi}
5813configure flag (see @code{gcc.scm} for examples of how to handle this).
5814Second, some of the required packages could fail to build for that
5815platform. Lastly, the generated binaries could be broken for some
5816reason.
4af2447e
LC
5817
5818
9bf3c1a7
LC
5819@c *********************************************************************
5820@node Contributing
5821@chapter Contributing
5822
5823This project is a cooperative effort, and we need your help to make it
5ff3c4b8
PAR
5824grow! Please get in touch with us on @email{guix-devel@@gnu.org} and
5825@code{#guix} on the Freenode IRC network. We welcome ideas, bug
5826reports, patches, and anything that may be helpful to the project. We
5827particularly welcome help on packaging (@pxref{Packaging Guidelines}).
a1ba8475 5828
9bf3c1a7
LC
5829Please see the
5830@url{http://git.savannah.gnu.org/cgit/guix.git/tree/HACKING,
5831@file{HACKING} file} that comes with the Guix source code for practical
5832details about contributions.
5833
c78bd12b 5834
568717fd
LC
5835@c *********************************************************************
5836@node Acknowledgments
5837@chapter Acknowledgments
5838
5839Guix is based on the Nix package manager, which was designed and
4c7ac9aa
LC
5840implemented by Eelco Dolstra, with contributions from other people (see
5841the @file{nix/AUTHORS} file in Guix.) Nix pioneered functional package
568717fd
LC
5842management, and promoted unprecedented features, such as transactional
5843package upgrades and rollbacks, per-user profiles, and referentially
5844transparent build processes. Without this work, Guix would not exist.
5845
5846The Nix-based software distributions, Nixpkgs and NixOS, have also been
5847an inspiration for Guix.
5848
4c7ac9aa
LC
5849GNU@tie{}Guix itself is a collective work with contributions from a
5850number of people. See the @file{AUTHORS} file in Guix for more
5851information on these fine people. The @file{THANKS} file lists people
5852who have helped by reporting bugs, taking care of the infrastructure,
5853providing artwork and themes, making suggestions, and more---thank you!
5854
5855
568717fd
LC
5856@c *********************************************************************
5857@node GNU Free Documentation License
5858@appendix GNU Free Documentation License
5859
5860@include fdl-1.3.texi
5861
5862@c *********************************************************************
5863@node Concept Index
5864@unnumbered Concept Index
5865@printindex cp
5866
a85b83d2
LC
5867@node Programming Index
5868@unnumbered Programming Index
5869@syncodeindex tp fn
5870@syncodeindex vr fn
568717fd
LC
5871@printindex fn
5872
5873@bye
5874
5875@c Local Variables:
5876@c ispell-local-dictionary: "american";
5877@c End: