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