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